0

我在 C++/CLI 中开发了一个 Winforms 应用程序。我在我的 MDI 父窗体中添加了一个 MenuStrip 对象。在 MenuStrip 中是一个 ToolStripMenuItem 对象,并且每次创建新的 MDI 子窗体时都会向其 DropDownItems 集合添加一个 ToolStripMenuItem 对象。我想在每次单击 ToolStripMenuItem 时将其 Checked 属性设置为 true(并将所有其他 ToolStripMenuItem 实例设置为 false)。但是显示复选标记似乎有问题:

不显示复选标记,而是显示一个蓝色矩形

在图片中,第四项应该被选中,但我看到的不是复选标记,而是一个蓝色矩形。

这是 MDI 父窗体中创建新画布对象(派生自 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 添加到 hydro_menustrip 实例的 ToolStripMenuItem(声明为 m_windowsToolStripMenuItem):

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;
}

这是添加到 m_windowsToolStripMenuItem 对象的 DropDownItemClicked 事件:

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;
}
4

0 回答 0