This is not something I have had to deal with too often which is why it wasn’t apparent to me the first time around.

FACT: You cannot drag and drop a custom control or any System.Windows.Form.Control onto a System.Windows.Form.StatusStrip or System.Windows.Form.ToolStrip.

Solution
Aha! A gotcha! So how do you fix this problem? Well there are two options:

1. Make your own StatusStrip or ToolStrip item by inheriting from the System.Windows.Forms.ToolStripControlHost class.

Personally I don’t like this method because it forces you to make a control that is only good for this purpose.

You can read more about it here.

Frankly I find the name of the article to be very misleading, you aren’t really wrapping anything, you are creating a new class that inherits from the ToolStripControlHost. That’s like saying making a custom control is a wrapper because it inherits from the Control class. Not so much…

2. Use this handy dandy methodology that apparently has been there all along, but I didn’t find out about it until I stumbled across it yesterday during my google search. You simply need to add your custom control programmatically to your ToolStrip or StatusStrip by adding it as a ToolStripControlHost object.

Do Tell…

You simply do the following:

Dim myControl As SomeCustomControl = New SomeCustomControl()

'Perform operations on your control such as size, color, minimum size etc...

ToolStrip1.Items.Add(New ToolStripControlHost(myControl))
'and/or
StatusStrip1.Items.Add(New ToolStripControlHost(myControl))

'If you are working with visbility, you will have to apply it to the ToolStripControlHost as well otherwise your control may not behave.

For the record I got all my info from this post here.

Please note there are sizing issues with this method and I haven’t figured them all out yet. So this will require more research to figure out. If and when I figure it out I will be sure to mention it. Just make sure to set the size and the minimum size properties.

Conclusion
I prefer the second option over the first, but there is nothing wrong with the first either. I think that you get more re-usability out of the second option.

Resources
Forum Post about ToolStripControlHost
http://social.msdn.microsoft.com/forums/en-US/winforms/thread/a5813d02-230e-417f-8b6d-cd86585b7f80

How to: Wrap a Windows Forms Control with ToolStripControlHost
http://msdn.microsoft.com/en-us/library/9k5etstz.aspx

Leave a Reply

Your email address will not be published. Required fields are marked *