c# - 如何向 ContextMenuStrip 和 ToolStrip 添加相同的 ToolStripButtons?

标签 c# winforms contextmenustrip toolstripbutton toolstripmenu

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

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

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

最佳答案

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

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

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

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

关于c# - 如何向 ContextMenuStrip 和 ToolStrip 添加相同的 ToolStripButtons?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16082069/

相关文章:

VB.NET - 中断表单循环和结束表单

c# - 如何删除当前绑定(bind)到控件的工具提示?

C# - 从 ContextMenuStrip 和 "Smart Events"动态添加和删除项目

c# - 如何在 devexpress ASPxGridView 控件中添加超链接列?

c# - TreeView 项目 - 分层数据模板

c# - comboBox 停止显示 SQL 表

c# - 在显示之前找到 ContextMenuStrip 的高度

c# - 如何动态禁用上下文菜单中的 ToolStripMenuItem?

c# - 控件 'seems' 被锁定

c# - 从另一个类访问表单控件