C# 自定义承载控件
例如ToolStripTextBox类,里面的封装就是一个TextBox控件。.NET的类库提供了ToolStripComBox和ToolStripProgressBar两个类。这些类都是从ToolStripControlHost类派生的,ToolStripControlHost允许在菜单栏中或工具栏上承载自定义控件,承载的控件是通过ToolStripControlHost类的构造 函数的参数传递进去的,因此可以事先实例化,一个控件实例,然后再实例化ToolStripControlHost对象,并把控件实例通过构造函数的参数传递给ToolStripControlHost实例。虽然ToolStripControlHost类是可以直接使用的,但是为了方便是从ToolStripControlHost派生一个子类,并把要承载的控件封装在子类中,就好像NET类库所提供的ToolStripTextBox那样。经过这样封装后,就可以直接使用了。不必每次调用都要实例化一个控件的实例,大大的提高了类型的可用性。
例如:
定义一个ToolStripDateTimerPciker类,派生自ToolStripControlHost类,
在ToolStripDateTimePicker的构造函数调用时,通过base(...)来调用基类的构造函数,并使用new运算符创建一个DateTimerPicker实例作为参数传递。从基类的Control属性可以获得承载的DateTimerPicker控件的实例,并用DateTimePicker属性来封装m_Picker字段方便调用时获得被封装的DateTimePicker控件的实例。Value属性封装了m_picker的Value属性,表示当前选择的日期
DropDown、CloseUp和ValueChanged三个事件分别对应m_Pciker的三个事件,使用add和remove操作符来添加和移除事件关联的方法。
public class ToolStripDateTimePicker : ToolStripControlHost { private DateTimePicker m_Picker = null; public ToolStripDateTimePicker() : base(new DateTimePicker()) { m_Picker = base.Control as DateTimePicker; //对控件进行设置,默认时期显示格式 m_Picker.Format = DateTimePickerFormat.Custom; //设置格式 m_Picker.CustomFormat = "yyyy年MM月dd日"; } #region 属性 /// <summary> /// 允许的日期最大值 /// </summary> public DateTime MaxDate { get { return m_Picker.MaxDate; } set { m_Picker.MaxDate = value; } } /// <summary> /// 允许的日期最小值 /// </summary> public DateTime MinDate { get { return m_Picker.MinDate;} set { m_Picker.MinDate = value; } } /// <summary> /// 已经选中的日期 /// </summary> public DateTime Value { get { return m_Picker.Value; } set { m_Picker.Value = value; } } //获取被封装的控件 public DateTimePicker DateTimePicker { get { return m_Picker; } } #endregion #region //当日期选择框打开时发生 public event EventHandler DropDown { add { m_Picker.DropDown += value; } remove { m_Picker.DropDown -= value; } } ///当日期选择关闭时 public event EventHandler CloseUP { add { m_Picker.CloseUp += value; } remove { m_Picker.CloseUp -= value; } } //当选择的日期发生改变时 public event EventHandler ValueChanged { add { m_Picker.ValueChanged += value; } remove { m_Picker.ValueChanged -= value; } } #endregion }
添加一个MenuStrip控件
在构造函数页面添加
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace 自定义承载控件 { public partial class Form1 : Form { ToolStripDateTimePicker mndtPicker = null; public Form1() { InitializeComponent(); //向报表菜单添加自定义菜单项 mndtPicker = new ToolStripDateTimePicker(); mndtPicker.MaxDate = new DateTime(2100, 12, 31); mndtPicker.MinDate = new DateTime(2000,1,1); toolStripMenuItem1.DropDownItems.Add(mndtPicker); // 处理事件 mndtPicker.ValueChanged += mndtPicker_ValueChanged; } void mndtPicker_ValueChanged(object sender, EventArgs e) { MessageBox.Show("您选择了:" + mndtPicker.Value.ToLongDateString()); } private void Form1_Load(object sender, EventArgs e) { } } }