首页 > IT职业 > IT图书 > 如何将第三方控件嵌入ToolStrip控件
最近研究了一下如何将第三方控件嵌入到ToolStrip控件中,并能提供Design-Time下的支持.
下面将详细讲解如何把系统的MonthCalendar控件嵌入到ToolStrip控件中.
以下的两幅图片显示了最终的样子.

Run-Time下的样子

Design-Time下的样子
微软实现了一个ToolStripControlHost类, 它是ToolStripComboBox, ToolStripTextBox, 和 ToolStripProgressBar等的基类. ToolStripControlHost提供了将第三方控件嵌入ToolStrip的能力. 我们可以用两种方式使用它:
?
private void Form2_Load(object sender, EventArgs e){ MonthCalendar monthCalendar = new MonthCalendar(); monthCalendar.FirstDayOfWeek = Day.Monday; this.toolStrip1.Items.Add(new ToolStripControlHost(monthCalendar));}
|
实现步骤如下:
?
| 1234 |
public ToolStripMonthCalendar() : base(new MonthCalendar()){ }
|
?
public MonthCalendar MonthCalendarControl{ get { return base.Control as MonthCalendar; }}
|
?
// Expose the MonthCalendar.FirstDayOfWeek as a property.public Day FirstDayOfWeek{ get { return this.MonthCalendarControl.FirstDayOfWeek; } set { value = this.MonthCalendarControl.FirstDayOfWeek; }} // Expose the AddBoldedDate method.public void AddBoldedDate(DateTime dateToBold){ this.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); }}
|
完整的示例请参见MSDN(http://msdn2.microsoft.com/en-us/library/9k5etstz.aspx ).
它可以使ToolStrip在Design-Time下能够找到从ToolStripControlHost继承的第三方控件, 直接效果就是第三方控件在下拉菜单中可以直接列举出来. 另外,除了可以将第三方控件嵌入ToolStrip外, 我们还可以直接将第三方控件嵌入到ContextMenuStrip, MenuStrip和StatusStrip中.
ToolStripItemDesignerAvailability枚举成员如下:
成员名称 |
说明 |
All |
指定所有控件均可见。 |
ContextMenuStrip |
指定 ContextMenuStrip 是可见的。 |
MenuStrip |
指定 MenuStrip 是可见的。 |
None |
指定无任何控件可见。 |
StatusStrip |
指定 StatusStrip 是可见的。 |
ToolStrip |
指定 ToolStrip 是可见的。 |
?
[ToolboxBitmap(typeof(MonthCalendar))][DefaultProperty("Value")] [ToolStripItemDesignerAvailability( ToolStripItemDesignerAvailability.ContextMenuStrip | ToolStripItemDesignerAvailability.MenuStrip | ToolStripItemDesignerAvailability.StatusStrip | ToolStripItemDesignerAvailability.ToolStrip)]public class ToolStripMonthCalendar : ToolStripControlHost{ //TODO: ......}
|
The End
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/27/viewspace-2806299/ ,如需转载,请注明出处,否则将追究法律责任。