【问题标题】:How to add to ContextMenuStrip and ToolStrip same ToolStripButtons?如何将相同的 ToolStripButtons 添加到 ContextMenuStrip 和 ToolStrip?
【发布时间】:2013-04-18 11:46:42
【问题描述】:

我的应用程序和上下文菜单中的工具栏具有相同的选项,所以我想 将 ToolStripButtons 添加到 ContextMenuStrip 和 ToolStrip,不幸的是我不能这样做。 即使我手动向两者添加项目,它也只显示一个。

现在我在工具栏中有按钮:

我想要这样的东西。我希望这个选项是一个,因为我会经常启用和禁用这个按钮,最后只有一个选项,为什么要两个按钮?

【问题讨论】:

  • 如果菜单不是动态的,您可以简单地单独构建 2,然后创建一个函数来同步它们
  • 我只是手动禁用项目:toolStripItem1.Disabled = true; contextStripItem1.Disabled = true;对于我现在拥有的所有物品。
  • 那我真的不觉得有问题。您仍然可以使等效按钮具有相同的事件处理程序,因此两者都会做同样的事情
  • 是的,我知道,但两者都有相同的名称、相同的图像、相同的行为,所以我认为应该是相同的按钮。但如果不可能,我只是重复每个禁用、启用、可见等。
  • 不可能。一个控件不能同时在两个地方。你真的别无选择,只能加倍。这很常见。

标签: c# winforms contextmenustrip toolstripbutton toolstripmenu


【解决方案1】:

这是一个常见问题,我发现最简单的解决方案是将“共享”代码放在继承自 ToolStripMenuItem 的 MenuFeature 类中。

您仍然需要创建该类的 2 个实例,但每个实例都非常轻量级,并且只有两种用法之间的差异的代码(即 ContextMenu 项可能使用 ToolStripItemDisplayStyle.ImageAndText,而 ToolStrip 项可能使用 @987654324 @)。

这允许通用代码在您的自定义 MenuFeature 类中仅存在一次,但仍允许对该菜单项的每次使用进行本地更改。

如果您想自动同步Enabled/Visible/etc 等属性,您可以在构造函数中维护所有实例的静态集合,然后使用EnabledChanged/etc 等事件更新所有项目。但是,我建议不要这样做,因为我发现同一菜单“功能”的不同实例通常需要它们自己的状态 - 但这超出了这个问题的范围,那些对我如何管理项目感兴趣的人可以发表评论在这个答案上或 PM 我。

【讨论】:

    猜你喜欢
    • 2013-11-28
    • 2010-09-21
    • 1970-01-01
    • 1970-01-01
    • 2018-08-14
    • 2011-03-06
    • 1970-01-01
    • 1970-01-01
    • 2021-10-12
    相关资源
    最近更新 更多