Introduction
I looked for a kind of flyout toolbar in csharp. The only article I found is: "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 CSharp.
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 being 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 the
framework 2.0.
References
History
- May 2013: First available
version.