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

一个基本的选择器风格下拉工具栏按钮

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.22/5 (5投票s)

2005年5月13日

2分钟阅读

viewsIcon

80383

downloadIcon

479

本文档展示了如何实现一个基本的、选择器式下拉工具栏按钮。

Screen Shot

引言

本文档展示了如何实现一个基本的、选择器式下拉工具栏按钮。 我觉得很奇怪,Visual Studio .NET 中没有这种简单的控件,尽管它几乎存在于每个 Windows 应用程序中。

最接近的实现是一个下拉按钮,看起来像这样

Visual Studio Dropdown Button

如果按钮的目的是双重的(执行某些操作以及呈现选择),这很好,但是有时你只想向用户呈现一个选择。 一个很好的例子是在 Windows 文件资源管理器中找到的视图配置选择器按钮。 在这种情况下,让用户点击按钮毫无意义。

Using the Code

这个控件被实现为一个 UserControl,可以包含在任何 C# Windows 项目中。 要使用该控件,只需将其拖放到你的表单上,并将其放置在已停靠的工具栏之上。 你需要在表单上拥有一个 ContextMenu 和一个 ImageList,它们可以在控件的属性表中与控件关联。

Property Page

实现该按钮的代码非常简单——尽管花了一段时间才弄对…… 关键是使用 MouseDown 事件来显示上下文菜单,并使用控件的 Paint 事件将按钮的“Pushed”状态设置为 'false',当菜单消失时。 为了强制 Paint 事件触发,你必须在显示上下文菜单之前调用控件上的 Invalidate()

private void On_toolBar_MouseDown(object sender, 
                    System.Windows.Forms.MouseEventArgs e)
{
    // Do nothing if there is no context menu
    if (this.m_contextMenu == null)
    {
        return;
    }

    // Ensure we clicked on the toolbar button
    if (!this.w_toolBarButton.Rectangle.Contains(new 
                     System.Drawing.Point(e.X,e.Y)))
    {
        return;
    }

    // Bring up the context menu
    if (!this.w_toolBarButton.Pushed)
    {
        this.w_toolBarButton.Pushed = true;
        this.ToolBarContextMenu.Show(this.w_toolBar, 
                    new System.Drawing.Point(0,22));
        this.Invalidate();
    }
}

private void On_ToolbarDropDownButton_Paint(object sender, 
                    System.Windows.Forms.PaintEventArgs e)
{
    this.w_toolBarButton.Pushed = false;
}

许可证

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

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

© . All rights reserved.