Click here to Skip to main content
Click here to Skip to main content

A Basic Chooser-Style DropDown ToolBar Button

, 12 May 2005
Rate this:
Please Sign up or sign in to vote.
This articles shows how to implement a basic, chooser-style dropdown ToolBar button.

Screen Shot

Introduction

This article shows how to implement a basic, chooser-style dropdown toolbar button. It seemed very strange to me that this simple widget was nowhere to be found in Visual Studio .NET, given that it exists in almost every single Windows application.

The closest you can get is a dropdown button that looks like this:

Visual Studio Dropdown Button

This is fine if the purpose of the button is two-fold (to perform some action in addition to presenting a choice), however sometimes you simply want to present a choice to the user. A good example is implementing a view configuration chooser button, such as can be found in the Windows file explorer. Here, allowing the user to click on the button makes no sense at all.

Using the code

This widget is implemented as a UserControl, which can be included in any C# Windows project. To use the widget, simply drag and drop it onto your form, and place it on top of an existing, docked toolbar. You will need both a ContextMenu, and an ImageList on your form, which can be associated with the widget in its property sheet:

Property Page

The code to implement the button is quite simple - although it took a while to get it right... The key is to use the MouseDown event to bring up the context menu, and to use the Paint event of the control to set the 'Pushed' state of the button to 'false', when the menu goes away. In order to force the Paint event to fire, you have to call Invalidate() on the control before bringing up the context menu.

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;
}

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

JRS

Canada Canada
No Biography provided

Comments and Discussions

 
QuestionError PinmemberBeneck28-Oct-05 14:05 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Mobile
Web01 | 2.8.140709.1 | Last Updated 13 May 2005
Article Copyright 2005 by JRS
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid