我有一个表单,其中包含带有许多点击页面的选项卡面板。它们每个都有自己的上下文菜单(右键单击时显示)。但是如果我将一个 ToolStripMenuItem 添加到多个 ContextMenuStrips 只有最后一个菜单条真正有这个菜单项。 简单的代码示例是:
ToolStripMenuItem tim_refresh = new ToolStripMenuItem("Refresh", null, (o, e) =>
{
MessageBox.Show("Refresh");
});
ContextMenuStrip cms1 = new ContextMenuStrip();
cms1.Items.Add(tim_refresh);
ContextMenuStrip cms2 = new ContextMenuStrip();
cms2.Items.Add(tim_refresh);
this.tblDataManagerObjects.ContextMenuStrip = cms1;
this.tblDataSourceTypes.ContextMenuStrip = cms2;
如果一个一个地显示这个菜单,第一个将是空的...我怎样才能达到我想要的?
最佳答案
这是因为视觉对象不能同时是多个不同视觉对象的子对象。在您的情况下,tim_refresh
同时是 cms1
和 cms2
的 child 。
您需要创建两个完全独立的 ToolStripMenuItem
实例。
编辑:
您可以在 factor 方法中提取可视化创建以简化多个对象实例化:
private ToolStripMenuItem CreateToolStripMenuItem(string name)
{
return new ToolStripMenuItem(name, null, (o, e) =>
{
MessageBox.Show(name);
});
}
// then just call it once per each menu strip
ContextMenuStrip cms1 = new ContextMenuStrip();
cms1.Items.Add(CreateToolStripMenuItem("Refresh"));
ContextMenuStrip cms2 = new ContextMenuStrip();
cms2.Items.Add(CreateToolStripMenuItem("Refresh"));
关于c# - 多个 ContextMenuStrip 的 ToolStripMenuItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8307959/