C# winform 自定义控件
1. 新建简单的组合控件
打开Visual Studio,新建一个C# winform项目。点击“添加新项”,选择“用户控件”,输入文件名“MyUserControl.cs”,点击添加完成新建。运行调试后退出,可以在窗体设计界面的工具箱中看到我们刚刚创建的MyUserControl控件。
工具箱中的MyUserControl在MyUserControl中添加一个Button和一个Label,名字分别修改为btnRead和lblName,并将MyUserControl背景修改为ActiveBorder。
设计MyUserControl点击运行调试后退出,把MyUserControl的修改更新到工具箱中。
2. 为控件添加属性
属性定义通常由以下两部分组成:
1、专用数据成员的定义。
private string myName = "";
2、使用属性声明语法对公共属性进行的定义。
该语法通过 get 和 set 访问函数将专用数据成员和公共属性关联起来。
public string MyName
{
get
{
return myName;
}
set
{
myName = value;
lblName.Text = myName;//lblName用于显示myName
}
}
value 这个术语是属性定义语法中的一个关键字。在呼叫代码中,将变量 value 分配给属性。value 的类型必须同它被分配到的属性的声明类型相同。
以上代码在MyUserControl.Designer.cs中添加。
下面在窗体内调用MyUserControl的属性。在Form1中添加MyUserControl,TextBox, Button, 名称分别修改为myUserControl,textBox,btnWrite。
Form1
实现btnWrite的点击事件:
private void btnWrite_Click(object sender, EventArgs e)
{
myUserControl.MyName = textBox.Text;
}
运行调试,点击Write按钮将textBox的内容写到自定义控件的label中。
3. 为控件添加添加事件
在MyUserControl.cs文件中定义委托和事件
//定义委托
public delegate void BtnClickHandle(object sender, EventArgs e);
//定义事件
public event BtnClickHandle UserControlBtnClicked;
添加btnRead点击事件:
private void btnRead_Click(object sender, EventArgs e)
{
if (UserControlBtnClicked != null)
{
UserControlBtnClicked(sender, new EventArgs());
}
}
在Form1中定义事件处理方法:
private void myUserControl_UserControlBtnClicked(object sender, EventArgs e)
{
textBox.Text = myUserControl.MyName;
}
用+=操作符添加事件到事件队列中(-=操作符能够将事件从队列中删除),双击Form1进入Load
private void Form1_Load(object sender, EventArgs e)
{
myUserControl.UserControlBtnClicked +=
new MyUserControl.BtnClickHandle(myUserControl_UserControlBtnClicked);
}
运行调试,点击Read按钮可以把自定义控件中的值读到textBox中。