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)
        {

        }
    }
}

   

posted @ 2017-10-29 22:16  Dipsyhu  阅读(801)  评论(0编辑  收藏  举报