Grazie alla presenza dei nuovi controlli MenuStrip,StatusStrip e ToolStrip e' finalmente possibile avere delle GUI moderne senza ricorrere a controlli esterni.
Oltre a questo spesso nasce l'esigenza di poter inserire all'interno delle varie 'voci' che questi elementi offrono, dei propri controlli.
Tutto questo e' possibile attraverso la classe ToolStripControlHost che, come lo stesso nome indica, non fa altro che ospitare un controllo esterno e far si che questo possa funzionare come tutti i vari items disponibili nativamente.

Ecco un esempio, dove in un ToolStrip ho aggiunto un DateTimePicker e un Treeview.



Il codice per ottenere questa 'bruttura' e' il seguente:

//DateTimePicker
DateTimePicker dtp = new DateTimePicker
();
ToolStripControlHost tch1 = new ToolStripControlHost
(dtp);
tsbtn.DropDownItems.Add(tch1);
//Treeview
ToolStripControlHost tch2 = new ToolStripControlHost
(treeView1);
tsbtn.DropDownItems.Add(tch2);

Ovviamente la soluzione piu' corretta e' quella di ereditare da TooStripControlHost e creare il proprio StripControl esponendo eventualmente il controllo ospitato e sfruttando gli eventi OnSubscribeControlEvents e OnUnSubscribeControlEvents per registrare gli eventi del controllo che si sta wrappando ed eventualmente ridefinirne altri legati al comportamento del controllo hosted.
Per chi vuol saperne di piu' ecco un link.