可分组的 ToolStripMenuItems






3.50/5 (4投票s)
模仿单选按钮行为的 ToolStripMenuItem。
引言
是否需要将多个 ToolStripMenuItem
分组在一起,以模仿 RadioButton
的行为?这个简单的控件继承自 ToolStripMenuItem
,并添加了一个新属性,用于在设计模式下对其进行分组。支持在同一下拉菜单中存在多个组。
背景
当我第一次需要行为类似 RadioButton
的 ToolStripMenuItem
时,我是通过事件来实现的。第二次,我开始想知道为什么 MS 没有提供一个额外的属性来轻松地将 ToolStripMenuItem
分组在一起。经过一番“谷歌搜索”,我在 MSDN 上找到了一个例子:http://msdn2.microsoft.com/en-us/library/ms404318.aspx。
阅读完这篇文章后,我意识到这不是我要找的!他们解释了如何使用“CheckOnClick
”来实现所需的效果,甚至为单选按钮布局提供了自定义绘图。这不标准(但很丑陋),也不是我想要的!此外,他们的示例不支持在同一下拉菜单中存在多个“组”。
所以我开始实现我自己的解决方案。它基于 MSDN 上的示例,但尽可能地简化了它。
Using the Code
本节应命名为“使用组件”。
将源文件添加到您的项目中。重新构建后,您应该能够在设计 ToolStripMenu
时选择 ToolStripMenuItemGrouped
。
基本上,我只是添加了一个名为 GroupIndex
的简单属性。它的默认值为 0,这意味着:没有组。对于所有属于同一组的 ToolStripMenuItemGrouped
,输入一个大于该值的值。通过使用不同的值,可以在同一下拉菜单中支持多个组。
关注点
我保留了 MS 的原始示例代码中重写的 enabled
属性。这增加了在所有者控件(ToolStripMenuItem
)更改其选中状态时自动启用/禁用所有 ToolStripMenuItemGrouped
子项的可能性。您可以通过将 ToolStripMenuItemGrouped
项添加到 ToolStripMenuItem
的下拉菜单来试用它。然后将所有者的 CheckOnClick
属性设置为“true
”。在运行时,子项将自动更改其 enabled
状态,无论所有者是否被选中。
要将新类添加到设计器,我只需提供以下属性
[ToolStripItemDesignerAvailability(ToolStripItemDesignerAvailability.ContextMenuStrip)]
延伸阅读
- 如何在 MenuStrip (Windows 窗体) 中显示单选按钮 http://msdn2.microsoft.com/en-us/library/ms404318.aspx。