è 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