ToolStripControlHost

martedì 09 dicembre 2014 - 09.35
Tag Elenco Tags  VB.NET  |  .NET 3.0  |  .NET 3.5  |  .NET 4.0  |  Visual Studio 2010

FabAO Profilo | Newbie

Buongiorno!
qualcuno mi sa dire cos'è e come funziona un ToolStripControlHost... magari con qualche esempio?
Grazie - Fabio

0v3rCl0ck Profilo | Guru

è un controllo di windows forms, che ti permette di aggiungere un qualsiasi controllo windows forms all'interno di un menu contestuale, come un calendario, un tuo completo UserControl.

qui trovi qualche guida e esempio:

http://msdn.microsoft.com/en-us/library/vstudio/9k5etstz.aspx
http://www.codeproject.com/Articles/15892/Adding-a-custom-control-to-a-ToolStripDropDownButt
http://blogs.msdn.com/b/jfoscoding/archive/2005/10/05/477428.aspx
http://www.devx.com/dotnet/Article/22001
http://www.dotneat.net/2009/01/19/AddingYourOwnCustomControlToAWindowsFormsContextMenuUsingToolStripCustomHostClass.aspx

in linea di massima è sufficiente creare una classe che eredita da ToolStripControlHost, poi passare al costruttore di base, l'instanza dell'oggetto control da wrapper es.: base(new MonthCalender()) così da creare una classe che possa essere instanziata e inserita tra gli item di un menu contestuale o toolstrip:

//Declare a class that inherits from ToolStripControlHost. public class ToolStripMonthCalendar : ToolStripControlHost { // Call the base constructor passing in a MonthCalendar instance. public ToolStripMonthCalendar() : base (new MonthCalendar()) { } public MonthCalendar MonthCalendarControl { get { return Control as MonthCalendar; } } // Expose the MonthCalendar.FirstDayOfWeek as a property. public Day FirstDayOfWeek { get { return MonthCalendarControl.FirstDayOfWeek; } set { MonthCalendarControl.FirstDayOfWeek = value; } } // Expose the AddBoldedDate method. public void AddBoldedDate(DateTime dateToBold) { MonthCalendarControl.AddBoldedDate(dateToBold); } // Subscribe and unsubscribe the control events you wish to expose. protected override void OnSubscribeControlEvents(Control c) { // Call the base so the base events are connected. base.OnSubscribeControlEvents(c); // Cast the control to a MonthCalendar control. MonthCalendar monthCalendarControl = (MonthCalendar) c; // Add the event. monthCalendarControl.DateChanged += new DateRangeEventHandler(OnDateChanged); } protected override void OnUnsubscribeControlEvents(Control c) { // Call the base method so the basic events are unsubscribed. base.OnUnsubscribeControlEvents(c); // Cast the control to a MonthCalendar control. MonthCalendar monthCalendarControl = (MonthCalendar) c; // Remove the event. monthCalendarControl.DateChanged -= new DateRangeEventHandler(OnDateChanged); } // Declare the DateChanged event. public event DateRangeEventHandler DateChanged; // Raise the DateChanged event. private void OnDateChanged(object sender, DateRangeEventArgs e) { if (DateChanged != null) { DateChanged(this, e); } } }



Michael Denny | Microsoft Visual C# MVP
http://blogs.dotnethell.it/Regulator/
http://dennymichael.net
http://mvp.microsoft.com/mvp/Michael%20Denny-5000735
Twitter: @dennymic

FabAO Profilo | Newbie

>è un controllo di windows forms, che ti permette di aggiungere
>un qualsiasi controllo windows forms all'interno di un menu contestuale,
>come un calendario, un tuo completo UserControl.

Fantastico! avevo qualche dubbio sul completo concetto ma ora me l'hai chiarito! Grazie...

Poi per cortesia mi faresti una breve descrizione di un "ToolStripDropDown"?

Perchè, il mio problema di fondo è che ho implementato questo progetto:
http://www.codeproject.com/Articles/31987/A-DataGridView-Column-Show-Hide-Popup

Praticamente è una CheckedListBox realizzata per mezzo di un oggetto ToolStripDropDown a cui viene aggiunto un oggetto ToolStripControlHost.

E vorrei abilitare una scrollbar verticale su questo progetto... ma non mi è molto chiaro come fare questa cosa...

Grazie ancora!!!

0v3rCl0ck Profilo | Guru

"Rappresenta un controllo che consente all'utente di selezionare un singolo elemento da un elenco visualizzato quando viene fatto clic su un oggetto ToolStripDropDownButton. I controlli ToolStripDropDownMenu e ToolStripDropDown sostituiscono il controllo Menu disponibile nelle versioni precedenti. Quest'ultimo, tuttavia, è stato mantenuto per garantire la compatibilità con le versioni precedenti e può essere eventualmente utilizzato."

http://msdn.microsoft.com/it-it/library/system.windows.forms.toolstripdropdown.aspx

che è questo controllo:


273x184 18Kb



Michael Denny | Microsoft Visual C# MVP
http://blogs.dotnethell.it/Regulator/
http://dennymichael.net
http://mvp.microsoft.com/mvp/Michael%20Denny-5000735
Twitter: @dennymic

0v3rCl0ck Profilo | Guru

>Praticamente è una CheckedListBox realizzata per mezzo di un
>oggetto ToolStripDropDown a cui viene aggiunto un oggetto ToolStripControlHost.
>
>E vorrei abilitare una scrollbar verticale su questo progetto...
>ma non mi è molto chiaro come fare questa cosa...
>

Dovrai abilitare la scrollbar sulla ListBox che viene inserita nel ToolStripControlHost, che poi a sua volta viene inserito nella ToolStripDropDown.


Michael Denny | Microsoft Visual C# MVP
http://blogs.dotnethell.it/Regulator/
http://dennymichael.net
http://mvp.microsoft.com/mvp/Michael%20Denny-5000735
Twitter: @dennymic

FabAO Profilo | Newbie

>Dovrai abilitare la scrollbar sulla ListBox che viene inserita
>nel ToolStripControlHost, che poi a sua volta viene inserito
>nella ToolStripDropDown.

Bene, sono riuscito a capire l'interazione tra gli oggetti ed anche abilitare la scrollbar, ma questa non funziona...
Secondo me quello che viene associato al ToolStripControlHost è un "panel" nel quale vengono disegnati i "checkedbox"...
Per cortesia, se hai voglia di aiutare un collega poco esperiente... riusciresti a guardare quel progetto che ho mandato il link e dire se le mie intuizioni sono giuste?
E secondo te quale può essere la maniera più semplice per abilitare la scrollbar?

PS: GRANDE!!! alla fine sono riuscito a ottenere quello che volevo... ho disabilitato il "panel" e dato in input la "CheckedListBox" e tutto funziona!
ma tanto per curiosità personale, come dovrei fare nel caso volesse usare il "panel"?

Grazie immensamente!!!

0v3rCl0ck Profilo | Guru

>ma tanto per curiosità personale, come dovrei fare nel caso volesse
>usare il "panel"?

sinceramente è tanto che non sviluppo in windows forms, perchè mi sono spostato da anni su WPF, e il problema specifico del panel non mi dice niente su due piedi, e dovrei aprire un progetto per vedere, ma se hai già risolto meglio così, ci sono tante altre persone la fuori che aspettano una mano da una povera anima pia

>
>Grazie immensamente!!!

lieto di averti aiutato



Michael Denny | Microsoft Visual C# MVP
http://blogs.dotnethell.it/Regulator/
http://dennymichael.net
http://mvp.microsoft.com/mvp/Michael%20Denny-5000735
Twitter: @dennymic
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5