C++/CLI Winforms ToolStripMenuItem Проверенное свойство

Я разрабатываю приложение Winforms в C++/CLI. Я добавил объект MenuStrip в мою родительскую форму MDI. В MenuStrip находится объект ToolStripMenuItem, а в его коллекцию DropDownItems добавляется объект ToolStripMenuItem каждый раз, когда создается новая дочерняя форма MDI. Я хочу установить для свойства Checked объекта ToolStripMenuItem значение true при каждом нажатии (и установить его в значение false для всех остальных экземпляров ToolStripMenuItem). Но, похоже, возникает проблема с отображением галочки:

Галочка не отображается, вместо этого отображается синий прямоугольник

На рисунке должен быть проверен четвертый элемент, но вместо отображения галочки все, что я вижу, это синий прямоугольник.

Вот функция в родительской форме MDI, которая создает новый объект canvas (производный от класса System::Windows::Forms::Form):

void AddAndShowCanvas(ProjectID type, unsigned int index, System::String^ name, bool demo, bool data) {
    m_Canvases->push_back(gcnew canvas(m_MainController, this, type, index, name, demo, data));
    m_Canvases->back()->MdiParent = this;
    m_menuStrip->AddCanvasToWindowsToolStrip(m_Canvases->back());

    if (data)
        m_Canvases->back()->GetMainPanel()->DisplayLoadedFile();

    m_Canvases->back()->Show();
}

Вот функция в классе hydro_menustrip (производная от класса System::Windows::Forms::MenuStrip), которая добавляет ToolStripMenuItem к ToolStripMenuItem (объявлен как m_windowsToolStripMenuItem) экземпляра hydro_menustrip:

void hydro_menustrip::AddCanvasToWindowsToolStrip(canvas^ canvas) {
    System::Windows::Forms::ToolStripMenuItem^ canvasItem = 
        gcnew System::Windows::Forms::ToolStripMenuItem(canvas->GetProjectTitle());
    m_windowsToolStripMenuItem->DropDownItems->Add(canvasItem);
    m_windowsToolStripMenuItem->DropDownItems[m_windowsToolStripMenuItem->DropDownItems->Count - 1]->PerformClick();
    canvasItem->Click += canvas->OpenCanvasEvent;
}

А вот событие DropDownItemClicked, добавленное в объект m_windowsToolStripMenuItem:

void hydro_menustrip::windows_DropDownItemClicked(System::Object^ sender, ToolStripItemClickedEventArgs^ e) {
    for each(ToolStripMenuItem^ item in m_windowsToolStripMenuItem->DropDownItems)
        item->Checked = false;

    safe_cast<ToolStripMenuItem^>(e->ClickedItem)->Checked = true;
}

0 ответов

Другие вопросы по тегам