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界面显示多个同类型对象的状态时,可以使用组合控件有效避免重复代码,符合面向对象的封装的特性。