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

向 ToolStripDropDownButton 添加自定义控件

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.70/5 (13投票s)

2006 年 10 月 9 日

2分钟阅读

viewsIcon

91363

downloadIcon

2448

一种在 ToolStrip 下拉按钮中显示自定义控件的方法

Sample Image - ToolStripDropDown.jpg

引言

本文演示了一种扩展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类的OnOpeningOnOpened事件来解决的。

通过连接自定义控件首次创建时“selected”和“cancelled”事件来实现适当的时间关闭下拉菜单。作为替代方案,ToolStripControlHost提供了protected virtual: OnSubscribeControlEventsOnUnsubscribeControlEvents。也许,这将是连接事件的更好地方,尽管从文档中不清楚这种方法的好处是什么。

参考文献

以下是关于使用ToolStripControlHost类的其他文章

许可证

本文未附加明确的许可证,但可能在文章文本或下载文件本身中包含使用条款。如有疑问,请通过下面的讨论区联系作者。

作者可能使用的许可证列表可以在此处找到。

将自定义控件添加到 ToolStripDropDownButton - CodeProject - 代码之家
© . All rights reserved.