65.9K
CodeProject 正在变化。 阅读更多。
Home

可分组的 ToolStripMenuItems

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.50/5 (4投票s)

2007年4月26日

CPOL

2分钟阅读

viewsIcon

38322

downloadIcon

564

模仿单选按钮行为的 ToolStripMenuItem。

Screenshot - groupabletoolstripmenuitems.jpg

引言

是否需要将多个 ToolStripMenuItem 分组在一起,以模仿 RadioButton 的行为?这个简单的控件继承自 ToolStripMenuItem,并添加了一个新属性,用于在设计模式下对其进行分组。支持在同一下拉菜单中存在多个组。

背景

当我第一次需要行为类似 RadioButtonToolStripMenuItem 时,我是通过事件来实现的。第二次,我开始想知道为什么 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)]

延伸阅读

可分组的 ToolStripMenuItems - CodeProject - 代码之家
© . All rights reserved.