摘要:
最近由于工作需要,研究了一下如何将第三方控件嵌入到ToolStrip控件中,并能提供Design-Time下的支持.
下面将详细讲解如何把系统的MonthCalendar控件嵌入到ToolStrip控件中.
以下的两幅图片显示了最终的样子.
Run-Time下的样子 1
Design-Time下的样子 1
如何将第三方控件嵌入到ToolStrip
微软实现了一个ToolStripControlHost类, 它是ToolStripComboBox, ToolStripTextBox, 和 ToolStripProgressBar等的基类. ToolStripControlHost提供了将第三方控件嵌入ToolStrip的能力. 我们可以用两种方式使用它:
一, 我们可以直接将继承自Control类的第三方控件作为ToolStripControlHost的构造函数的参数构造一个ToolStripControlHost实例, 将这个实例直接作为ToolStrip的Item加到ToolStrip的Items集合中使用即可.
private void Form2_Load(object sender, EventArgs e)
{
MonthCalendar monthCalendar = new MonthCalendar();
monthCalendar.FirstDayOfWeek = Day.Monday;
this.toolStrip1.Items.Add(new ToolStripControlHost(monthCalendar));
}
二, 从ToolStripControlHost派生, 在继承类默认参构造函数中将第三方控件作为参数调用基类的有参构造函数. 这种方式可以很容易的在继承类中暴露属性,方法和事件,便于访问.
实现步骤如下:
1, 扩展 ToolStripControlHost。实现一个调用传入所需控件的基类构造函数的默认构造函数。
public ToolStripMonthCalendar() : base(new MonthCalendar())
{
}
2, 声明一个与包装控件相同类型的属性,并在属性访问器中返回 Control 作为正确类型的控件。
public MonthCalendar MonthCalendarControl
{
get
{
return base.Control as MonthCalendar;
}
}
3, 使用扩展类中的属性和方法公开包装控件的其他常用属性和方法。
// 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);
}
4, 也可以选择重写 OnSubscribeControlEvents 和......[
阅读全文]