Winform自定义控件之复合控件

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

自定义控件有三种形式:

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

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

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

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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)
    {<br>        label1.Text = "click " + DateTime.Now.Second;
        btnClick(name);//调用button点击Event
    }
}

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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 @   [春风十里]  阅读(1807)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示