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