Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles
(untagged)

A Flyout Toolbar in C#

0.00/5 (No votes)
15 May 2013 2  
CSharp version of a flyout toolbar like we can find in CAD applications

Introduction 

I looked for a kind of flyout toolbar in C#. The only article I found was: "Creating Flyout Toolbars". You can find the article here. But the code is written in C++. So I decided to write my own version in C#. 

The principle 

The goal is to have not too many buttons on a toolbar. If you click long enough on a button, a toolbar appears. Simply drag the cursor on the toolbar and select the button of your choice by releasing the mouse button. After that, if you quickly click this button, the corresponding function is performed. 

How to create a CSFOToolbar 

  • Copy the file 'CSFOToolbar.cs' into the directory of your project and in the solution, add the file with 'Add existing item...' 
  • Build up a first time the solution. You will see a new component in the toolbar of Visual Studio. 
  • Drag a CSFOToolbar component to the form or in a toolstrip container. Remark: the CSFOToolbar component behaves like a classic ToolStrip. 
  • Add some toolstrip buttons in the CSFOToolbar component. 
  • Add one or more classic toolstrip(s) on the main form. 
  • Add toolstrip buttons into those toolstrips. 
  • Add click events for those toolstrip buttons. Attention: each button must have a click event defined previously otherwise it won't work out (the button could not be selected).   
  • Add the form_load method in the project and call the method 'AddFlyout()' of the CSFOToolbar for each button you want to attach a flyout toolbar to. By doing this, the classic toolstrip will become a flyout toolbar.   

Example:

private void Form1_Load(object sender, EventArgs e)
{
     csfoToolBar1.AddFylout(newToolStripButton, toolStrip1, 0);
     csfoToolBar1.AddFylout(helpToolStripButton, toolStrip2, 0);
}  

The parameters of the method 'AddFlyout()' are:

  • The first parameter is the button of the CSFOToolbar which is attached to the toolstrip,
  • The second parameter is the toolstrip to attach (that becomes a flyout toolbar),
  • The third parameter indicates the index (0 based) of the button in the flyout toolbar that will be selected by default (at start). 

Remark: Do not create a click event for the button with a flyout toolbar attached in the CSFOToolbar

The properties of CSFOToolbar 

Each button with a flyout toolbar is marked with a red triangle in the down right corner. 

  • Corner color: the color of the triangle (default: red), 
  • Corner size: the size in pixel of the triangle (default: 6),   
  • Delay: the time (in ms) before the flyout appears (default: 300ms).
  • Orientation: define the orientation of the flyout toolbar. Possible values are:
    • Horizontal: the flyout toolbar is always displayed horizontally (default),
    • Vertical: the flyout toolbar is always displayed vertically,
    • Same: the flyout toolbar is always displayed in the same orientation of its ‘main’ toolbar,  
    • Opposite: the flyout toolbar is always displayed in the opposite orientation of its ‘main’ toolbar.   
  • Restrict: Restrict the display of the flyout toolbar to the area of the form (default: false).

Points of Interest   

  • How to transfer the event click handler from a toolstrip button to another one in another toolstrip using reflection (the methods: ModifyComponentEventHandler(…) and GetDelegate(…)), 
  • How to use a form to display a flyout (or floating) toolstrip (the class CSFOform),
  • How to manage events from a control (a toolstrip button) into another control (the form of the flyout toolstrip),
  • How to find a toolstrip button at the mouse position (the method: FindButton(…)),
  • How to modify the orientation of a toolstrip by modifying the layout style (the method: ReturnLayoutStyle(…)),
  • An example of using the toolstrip renderer (the class: CSFOToolbarRenderer),
  • An example of using timer, 
  • An example of forcing to display a tooltip on a toolstrip (in the method c_MouseMove(…) of CSFOForm,) 

Environment   

This class is developed under Visual Studio 2005 with framework 2.0.

References

History

  • May 2013: First available version. 

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