c# - 多个 ContextMenuStrip 的 ToolStripMenuItem

标签 c# .net wpf contextmenu contextmenustrip

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

相关文章:

c# - 错误 CTC1014 Docker 命令失败,退出代码为 1,带有 dotnet 核心 api

c# - 在一个 uiview 图像动画完成后触发一个事件以在动画中进行动画处理(单触摸)

c# - Windows 7 中的鼠标移动 - 左键单击并拖动

c# - 变量赋值中的三重条件

c# - 使用 c++ 中的 "long"进行互操作 c#

c# - 从表中选择静态组时保持顺序

.net - 带有 byref 参数的委托(delegate)被 .NET 事件拒绝

.net - WPF Frame 和 WebBrowser 控件之间的差异

C# WPF OxyPlot x, y 应该具有相同的缩放比例

WPF:输入持续时间(hh:mm:ss)