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

IPToolbox: A VS2005-like Toolbox

, 25 May 2007
Rate this:
Please Sign up or sign in to vote.
A Visual Studio 2005-like ToolBox control which supports almost all features of the original: drag'n'drop, renaming, hiding tabs, items, and disabling items

Sample Image - Common View

Sample Image - Multilevel Tabs

Sample Image - Renaming Item


While working on my own Forms designer, I used a Toolbox from another article by Giordio Santini. However, when I saw the Toolbox in VS2005 and, after unsuccessful trials to find something like it on the Internet, I decided to make my own. That is what I've done. This control is derived directly from System.Windows.Forms.Control without using any other controls or components except ScrollBar. All drawing is made by myself and it is divided into three parts: the drawing of the whole toolbox, the single tab and the item.

Using the code

This component is fully supported by the VS designer. Just add a reference to the compiled DLL and add the toolbox or HostToolbox to your form. Alternatively, create it using the following code:

private IP.Components.Toolbox toolbox1;
toolbox1 = new IP.Components.Toolbox();

You have a wide variety of settings for customizing the toolbox appearance, starting from the height of the tabs and the items, to the colors which are used for the selected item or tab, the hovered item, selection borders, and others. For more details, see the Toolbox Appearance category in the toolbox properties. Starting from version 1.2 of this component, both the Toolbox control and the Tab object implement the ITab interface. It provides support for multilevel Tabs and non-categorized Items because interface defines three primary properties:

  • Categories - a collection of Tabs; you could make changes to this collection at design-time and they would be displayed immediately on the control
  • Items - a collection of items in a category or non-categorized items of the toolbox
  • Owner - an owner of the object; it is always Null for Toolbox control

Sample Image - Tab Menu

Sample Image - Item Menu

In the Toolbox category, you can find more properties:

  • CreateGeneralCategory - used to mimic the VS2005 toolbox; it creates an empty tab at run-time with the property AllowDelete set to false, by default
  • ItemMenu - contains the ContextMenuStrip menu object, which is shown when the user right-clicks on any enabled Item; I've added the default menu, but you can change it and set your own
  • TabMenu - like an ItemMenu, contains a menu which would be displayed when the user right-clicks on a Tab; I've also added a default menu

Each Tab object has its own properties, which include:

  • Text - caption of the tab
  • Opened, Visible - properties say what they mean
  • AllowDelete - if this property is set to true, then the tab cannot be deleted from the toolbox; it can be deleted only programmatically by setting AllowDelete = false
  • Selected - at run-time, you can determine if the tab is currently selected.

Also, Tab has a readonly field: PointerItem. This is an Item that is always added to a Tab at first place and does not get added to the Items collection. Thus, it cannot be removed. As with Tab, Item objects also have properties: Text, Image, Tooltip, Enabled, Visible, and Selected. I've also added the properties BackColor and ForeColor, but haven't used them. If you want, you can inherit from the Toolbox.Item class, override the OnPaint method and use those properties for drawing before adding your items to the tabs. For programmers, I've added many public and protected methods and events, including:

  • Public Toolbox.Save/Toolbox.SaveXml and Toolbox.Load/Toolbox.LoadXml for serializing/deserializing the state of a toolbox
  • Public Tab.SortItems for sorting items by alphabetical order
  • Public Tab.Select/Item.Select for selecting tabs/items in a program
  • Protected method OnSelectedChanged and public event SelectedChanged for both tabs and items
  • Public Tab.EnsureVisible/Item.EnsureVisible for scrolling to tab/item
  • Protected methods for handling Paint, MouseDown, MouseUp events on tabs and items
  • Protected method Tab.OnToggleTab and public event Tab.Toggle for handling the toggling of a tab

...and others.

Terms and conditions

The IPToolbox control is provided as free software with source code provided. You can freely use it in your applications, commercial or non-commercial. Ivan Popok, the author of the control, owns the copyright of the control and is NOT responsible for any damage to your application caused by using this control, directly or indirectly.


  • 05/24/2006 - v.1.0
  • 10/10/2006 - v.1.1
    • Added missing SelectItem event and SelectedItem property
    • Added the ShowPointer property that enables hiding of the pointer
    • Added the AutoScroll property and the ScrollView method for synchronized scrolling of the Toolbox and other controls
    • Added the TransparentColor property for the Item class
    • Rewrote the HitTest method
    • Now uses the ToolboxService class from .NET instead of my own implementation
    • Added gradient background drawing and support for background image
    • Added comments for all public and protected properties
  • 10/25/2006 - v.1.2
    • Added multilevel tabs (see AllowNestedTabs property)
    • Added placing items directly on the Toolbox (see AllowToolboxItems property)
    • Added OnClick and OnDoubleClick protected methods for Tab and Item objects
    • Added ColorStyle.None enumeration member (see TabColorStyle property)
    • Fixed drawing of the Item image
    • Fixed showing of TextBox for renaming
  • 03/23/2007 - v.1.2.1
    • Fixed saving the state of CreateGeneralTab property
    • Fixed serialization and deserialization of the nested tabs and toolbox items
    • Fixed adding Tab object to its own collection
    • Added Tag property for Tab and Item classes
    • Some other minor fixes
  • 05/25/2007 - v.1.3
    • Re-engineered serialization/deserialization of Items
    • Applied antialiasing


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

Web Developer
Ukraine Ukraine
No Biography provided

Comments and Discussions

GeneralGreat work!!!! Pinmemberrejectkosta27-Apr-10 5:24 
Generalcontrols added to the forms Pinmembersnow_cap17-May-09 3:31 
QuestionMenu PinmemberLaNono6-Oct-08 5:36 
Questionhow can i export a form which designed with form generator? Pinmembermohi_saboohi17-Jul-08 5:10 
GeneralCool... thanks... its very helpfull Pinmemberaschip7-Jul-08 2:16 
QuestionHow to know which control is drawn from the toolbox PinmemberKumara Swamy17-Feb-08 19:06 
QuestionHow can I programatically add component from de IPToolbox to my DesignSurface? Pinmemberyarlen.vasquez13-Feb-08 11:55 
QuestionRightToLeft? Pinmemberm_jahedbozorgan26-Jan-08 22:36 
GeneralDrag'n'drop a tab to another tab PinmemberMagnusO17-Dec-07 3:37 
QuestionUsage of this toolbox PinmemberVagga Raghavendra13-Aug-07 23:50 
Questionkeyboard support ? Pinmember[Neno]9-Jul-07 0:07 
GeneralAbsolute Great Pinmembergunigugu24-Jun-07 22:32 
GeneralWell done! PinmemberNordin Rahman25-May-07 23:46 
GeneralRe: Well done! PinmemberI@n28-May-07 23:28 
GeneralRe: Well done! Pinmember__Andreas__2-Jul-07 21:49 
GeneralThe Obsolete Serialize functions?? [modified] Pinmember[Neno]25-May-07 12:56 
GeneralRe: The Obsolete Serialize functions?? PinmemberI@n28-May-07 23:19 
QuestionHow show in PropertyGrid list of Controls Pinmemberbsord_25-May-07 4:51 
GeneralSave the settings to XML, missing image on item Pinmember[Neno]23-May-07 8:32 
AnswerRe: Save the settings to XML, missing image on item PinmemberI@n23-May-07 22:56 
GeneralRe: Save the settings to XML, missing image on item [modified] Pinmember[Neno]24-May-07 8:18 
NewsRe: Save the settings to XML, missing image on item PinmemberI@n25-May-07 5:07 
GeneralRe: Save the settings to XML, missing image on item Pinmember[Neno]25-May-07 7:33 
GeneralAntiAliased Text Pinmemberkin3tik8-May-07 11:20 
GeneralRe: AntiAliased Text PinmemberI@n23-May-07 22:57 
Questiondelete some of the context menu items [modified] PinmemberProbeer Das29-Mar-07 3:16 
AnswerRe: delete some of the context menu items PinmemberI@n29-Mar-07 3:37 
GeneralRe: delete some of the context menu items PinmemberProbeer Das29-Mar-07 5:46 
QuestionIvan PinmemberProbeer Das28-Mar-07 22:11 
AnswerRe: TypeInitializationException PinmemberI@n28-Mar-07 23:09 
Bonjour, Probeer,
Of course, it's pity that something thrown an exception, but based on your description, I can't tell you what's wrong.
I've only understood that the TypeInitializationException is thrown in static constructor of 'Class1' or when initializing its static fields. So you should debug your project, break on exception and see what has caused the inner exception that is wrapped into TypeInitializationException.
QuestionRe: TypeInitializationException PinmemberProbeer Das29-Mar-07 3:14 
QuestionCan we give keyboard support ? PinmemberProbeer Das28-Mar-07 21:51 
AnswerRe: Can we give keyboard support ? PinmemberI@n28-Mar-07 23:16 
QuestionRe: Can we give keyboard support ? PinmemberProbeer Das29-Mar-07 3:12 
AnswerRe: Can we give keyboard support ? PinmemberI@n29-Mar-07 3:23 
JokeIt's Great Pinmemberchiao.vincent22-Mar-07 19:40 
Questionamazing control .. how did you make the collapsible list?? Pinmembergiddy_guitarist8-Feb-07 0:35 
AnswerRe: amazing control .. how did you make the collapsible list?? PinmemberI@n8-Feb-07 1:00 
GeneralRe: amazing control .. how did you make the collapsible list?? Pinmembergiddy_guitarist8-Feb-07 1:16 
GeneralDisable general category, drag'n'drop PinmemberSesechXP6-Feb-07 4:12 
GeneralRe: Disable general category, drag'n'drop PinmemberI@n6-Feb-07 4:26 
GeneralRe: Disable general category, drag'n'drop PinmemberSesechXP6-Feb-07 4:39 
GeneralLicence PinmemberSesechXP6-Feb-07 3:59 
AnswerRe: Licence PinmemberI@n6-Feb-07 4:16 
GeneralRe: Licence PinmemberSesechXP6-Feb-07 4:35 
JokeRe: Licence PinmemberI@n6-Feb-07 4:37 
GeneralRe: Licence PinmemberSesechXP6-Feb-07 4:40 
GeneralCool control but ran into a few glitches.. Pinmemberfochizel20001-Feb-07 17:11 
AnswerRe: Cool control but ran into a few glitches.. PinmemberI@n6-Feb-07 4:45 
GeneralRe: Cool control but ran into a few glitches.. Pinmember123heihei11-Feb-08 23:25 

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 | Terms of Use | Mobile
Web04 | 2.8.150327.1 | Last Updated 25 May 2007
Article Copyright 2006 by I@n
Everything else Copyright © CodeProject, 1999-2015
Layout: fixed | fluid