Member 13870210 Ответов: 2

C++ для управления PictureBox загрузить изображения


Привет,
Я пытаюсь добавить изображение в PictureBox с помощью метода OpenFileDialog ().

Что я уже пробовал:

private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
    OpenFileDialog^ ofd = gcnew OpenFileDialog;
    ofd->InitialDirectory = "C:\\";
    ofd->Filter =
        "Images (*.bmp;*.gif;*.jpg;*.jpeg;*.png)|"
        "*.bmp;*.gif;*.jpg;*.jpeg;*.png|"
        "Bitmaps (*.bmp)|*.bmp|"
        "GIFs (*.gif)|*.gif|"
        "JPEGs (*.jpg)|*.jpg;*.jpeg|"
        "PNGs (*.png)|*.png";
    ofd->FilterIndex = 1;
    if (ofd->ShowDialog() == System::Windows::Forms::DialogResult::OK) {
            pictureBox11->Image = Image::FromFile(ofd->FileName);
            pictureBox11->SizeMode = PictureBoxSizeMode::StretchImage;
        }
    else {
        MessageBox::Show("Can't open the file. Wrong file type", "ERROR", MessageBoxButtons::OK, MessageBoxIcon::Error) == System::Windows::Forms::DialogResult::No;
    }
    }

но когда я нажимаю эту кнопку появляется следующее сообщение:
-Система.Нарезание резьбы.ThreadStateException: 'текущий поток должен быть установлен в режим single thread apartment (STA), прежде чем можно будет выполнять вызовы OLE. Убедитесь, что ваша основная функция помечена атрибутом STAThreadAttribute. Это исключение возникает только в том случае, если к процессу подключен отладчик.'

2 Ответов

Рейтинг:
2

Rick York

Поскольку вы на самом деле не опубликовали ни одного сообщения, я предполагаю, что ваш вопрос заключается в том, что вы делаете с этим сообщением. Ответ дан в послании.

Цитата:
Убедитесь, что ваша основная функция помечена атрибутом STAThreadAttribute
Если это не то, что вы ищете, тогда вам следует подумать о том, чтобы действительно задать вопрос.


Рейтинг:
2

KarstenK

Когда вы читаете документацию по Атрибут STAThreadAttribute из Microsoft вы бы это прочитали:
- Вы разрабатываете приложение для Windows Forms. Приложения Windows Forms должны быть однопоточными, если они взаимодействуют с системными компонентами Windows, такими как буфер обмена или общие диалоговые окна Windows, или если они используют системные функции, такие как функция перетаскивания"

Что означает, что вам нужно установить это в настройках проекта, чтобы использовать общий диалог файлов. Такие проблемы известны как: "работает так, как задумано"