Winform自定义控件之复合控件

winform提供了很多控件供使用,如label;text;button;panel;checkbox等,在一些场景下,这些控件不能很好的满足使用或适应场景,就需要我们进行自定义控件。

自定义控件有三种形式:

1.组合控件:将vs提供的控件自定义组合打包成一个新的控件就叫做组合控件。可避免一些重复工作代码,这个很好理解不赘述。继承自userControl;

2.扩展控件:例如你需要Button基础上能够支持圆角,这就需要对已有的Button控件进行扩展。继承自Button(或其他需要扩展的控件)

3.自定义控件:完全地自己绘制的控件,继承自Control;

记录最简单也最常用的组合控件:

首先右击项目->添加->用户控件;或者 右击项目->添加->类->选择用户控件。点击确定。
将自己需要的控件比如按钮,label等拖入复合控件,如下图。

 然后为组合控件添加事件逻辑:

public partial class UserControl1 : UserControl
{
    private string name = "";//定义名称
    public UserControl1(string name)
    {
        InitializeComponent();
        label1.Text = name;
        this.name = name;
    }
    public event Action<string> btnClick;//添加button Click Event
    private void button1_Click(object sender, EventArgs e)
    {
label1.Text = "click " + DateTime.Now.Second; btnClick(name);//调用button点击Event } }

逻辑完成后,生成解决方案,此时可以在工具箱中看到UserControl1,像使用其他控件一样,直接拖动使用即可。

 下面验证下刚才创建的组合控件UserControl1:

public Form1()
{
    InitializeComponent();
    InitControl();//Form的构造函数
}
private void InitControl()
{
    UserControl1 uc1 = new UserControl1("ucNo.1");
    UserControl1 uc2 = new UserControl1("ucNo.2");
    UserControl1 uc3 = new UserControl1("ucNo.3");//创建3个UserControl1实例。

    this.panel1.Controls.Add(uc1);
    this.panel1.Controls.Add(uc2);
    this.panel1.Controls.Add(uc3);//添加到Panel中

    uc1.Location = new Point(0, 0);
    uc2.Location = new Point(uc1.Size.Width + 10, 0);
    uc3.Location = new Point(uc1.Size.Width * 2 + 20, 0);//设定位置坐标

    uc1.BackColor = Color.Orange;
    uc2.BackColor = Color.Orchid;
    uc3.BackColor = Color.PaleGreen;//设定背景颜色

    uc1.btnClick += ucBtnClick;
    uc2.btnClick += ucBtnClick;
    uc3.btnClick += ucBtnClick;//绑定UserControl1的按钮的点击事件
}
private void ucBtnClick(string name)
{
    label1.Text = name + " Click at " + DateTime.Now.ToString("HHmmss");//点击按钮时在Label中显示名称和时间
}

下面运行看下效果:

 在日常工作中,当需要UI界面显示多个同类型对象的状态时,可以使用组合控件有效避免重复代码,符合面向对象的封装的特性。

 

 

posted @ 2023-07-16 11:15  [春风十里]  阅读(1240)  评论(0编辑  收藏  举报