向 ToolStripDropDownButton 添加自定义控件






4.70/5 (13投票s)
2006 年 10 月 9 日
2分钟阅读

91363

2448
一种在 ToolStrip 下拉按钮中显示自定义控件的方法
引言
本文演示了一种扩展ToolStripDropDown
的方法,以便在ToolStrip
的下拉按钮中显示自定义控件。
虽然示例中使用了“表格大小调整器”控件(类似于 MS-Word 工具栏中使用的控件),但本文主要面向那些希望扩展ToolStripDropDown
的人。
背景
下图描述了用于实现ToolStrip
的一些常用类
请注意,ToolStrip
的项(即,派生自ToolStripItem
的元素)是Component
,而不是Control
。 要将派生自Control
的对象添加到ToolStrip
(或者,在我们的例子中是ToolStripDropDown
),我们使用TooStripControlHost
类。
使用TooStripControlHost
托管我们的自定义控件,我们最终得到以下设计
任何针对TableSizeControl
实例所需的配置和/或事件连接都可以通过ToolStripTableSizeSelector
类的public
Selector
属性来执行。
用法
使用下拉菜单主要是创建下拉菜单并将其分配给ToolStrip
上的下拉按钮。
public Form1()
{
InitializeComponent();
ToolStripTableSizeSelector dropDown = new ToolStripTableSizeSelector();
dropDown.Opening += new CancelEventHandler(DropDown_Opening);
dropDown.Selector.TableSizeSelected +=
new TableSizeSelectedEventHandler(Selector_TableSizeSelected);
this.tableSizerDropDownButton.DropDown = dropDown;
}
注意:在这里连接Opening
事件以在显示TableSizeControl
之前重置其状态。
关注点
将自定义控件呈现为下拉项目时,存在几个“粘滞点”
- 确保托管控件的背景颜色与
ToolStrip
的配色方案匹配 - 在首次显示下拉菜单时将焦点设置为自定义控件
为了寻求更好的解决方案,这些问题是通过ToolStripDropDown
类的OnOpening
和OnOpened
事件来解决的。
通过连接自定义控件首次创建时“selected
”和“cancelled
”事件来实现适当的时间关闭下拉菜单。作为替代方案,ToolStripControlHost
提供了protected virtual
: OnSubscribeControlEvents
和 OnUnsubscribeControlEvents
。也许,这将是连接事件的更好地方,尽管从文档中不清楚这种方法的好处是什么。
参考文献
以下是关于使用ToolStripControlHost
类的其他文章
- 如何:用 ToolStripControlHost 包装 Windows Forms 控件
- 为您的 ToolStripControlHost 创建强类型包装器
- 使用新的 ToolStrip 控件掌握工具栏和菜单
许可证
本文未附加明确的许可证,但可能在文章文本或下载文件本身中包含使用条款。如有疑问,请通过下面的讨论区联系作者。
作者可能使用的许可证列表可以在此处找到。