如题,使用ToolStripControlHost。
先看MSDN上介绍的:
ToolStripControlHost 是 ToolStripComboBox、ToolStripTextBox 和 ToolStripProgressBar 的抽象基类。 ToolStripControlHost 可以通过两种方法承载其他控件(包括自定义控件):
•从派生自 Control 的类构造 ToolStripControlHost。 要完全访问寄宿的控件和属性,必须将 Control 属性强制转换回它所表示的实际类。
•扩展 ToolStripControlHost,并在继承类的默认构造函数中,调用基类构造函数并传递一个从 Control 派生的类。 此选项允许您对公共控件方法和属性进行包装,以使 ToolStrip 中的访问更加容易。
使用 ToolStripControlHost 类承载自定义控件或任何其他 Windows 窗体控件。
若要自定义 ToolStripItem,请从 ToolStripControlHost 进行派生,并创建自定义实现。 可以重写 OnSubscribeControlEvents 等方法,以处理由寄宿的控件引发的事件,也可以在属性中增加自定义功能,以增强寄宿的控件。
第一种方法,写个比较简单的例子:
var panel = new FlowLayoutPanel();panel.FlowDirection = FlowDirection.BottomUp;panel.Controls.Add(new Button() { Text = "你你你你" });panel.Controls.Add(new Button() { Text = "你你你你" });ToolStripControlHost host = new ToolStripControlHost(panel);toolStrip1.Items.Add(host);
运行结果:
So Easy!
第二种方法,可以借鉴MSDN上的例子:
//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);}}}
调用和System.Windows.Forms.ToolStripComboBox、System.Windows.Forms.ToolStripProgressBar、System.Windows.Forms.ToolStripTextBox一样!