gpt4 book ai didi

c# - 多个 ContextMenuStrip 的 ToolStripMenuItem

转载 作者:太空宇宙 更新时间:2023-11-03 11:29:31 24 4
gpt4 key购买 nike

我有一个表单,其中包含带有许多点击页面的选项卡面板。它们每个都有自己的上下文菜单(右键单击时显示)。但是如果我将一个 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 同时是 cms1cms2 的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com