700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Winform下ToolStrip承载自定义控件或 Windows 窗体控件。

Winform下ToolStrip承载自定义控件或 Windows 窗体控件。

时间:2021-12-05 11:03:54

相关推荐

Winform下ToolStrip承载自定义控件或 Windows 窗体控件。



如题,使用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一样!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。