因为项目需要,前几天自己写了一个复合控件。
复合控件的开发过程中,主要是对属性和事件的处理,理解属性、事件的定义与使用,以及委托的使用,开发控件就很容易。
所谓的复合控件,就是把一些基本的控件结合起来,合成自己方便使用的控件。比如结合了Label和TextBox的控件就非常容易在窗体上布局(本文就是把Lable和Textbox结合起来的),而结合了特定图案和文字的控件则非常适合显示公司的logo。下面就是我做的一个实现选择题(一个标题,加上A,B,C,D),的控件。定义了两个属性,一个事件,实现选中答案,答案颜色变化
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
namespace selectLable
{
public partial class UserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
}
// 因为我们只需要简简单单地让这个事件发生,所以不需创建我们自己的代理(delegate)函 // 数,也不需创建特殊的事件处理事据对象
//对事件的声明
public event EventHandler clicktest;
//定义个属性
public string lableText
{
get
{
return label1.Text;
}
set
{
label1.Text = value;
}
}
private string radio;
public string lbChecked
{
get
{
return radio;
}
set
{
radio = value;
}
}
//该事件的调用过程
protected void Onclicktest(EventArgs e)
{
if (Tick != null)
{
clicktest(this, e);
}
}
private void lA_Click(object sender, EventArgs e)
{
radio = "A";
this.label1.ForeColor = Color.Red;
this.lA.BackColor = Color.Red;
this.lB.BackColor = Color.White;
this.lC.BackColor = Color.White;
this.lD.BackColor = Color.White;
Onclicktest(e);
}
private void lB_Click(object sender, EventArgs e)
{
radio = "B";
this.label1.ForeColor = Color.Red;
this.lB.BackColor = Color.Red;
this.lC.BackColor = Color.White;
this.lD.BackColor = Color.White;
this.lA.BackColor = Color.White;
Onclicktest(e);
}
private void lC_Click(object sender, EventArgs e)
{
radio = "C";
this.label1.ForeColor = Color.Red;
this.lC.BackColor = Color.Red;
this.lB.BackColor = Color.White;
this.lD.BackColor = Color.White;
this.lA.BackColor = Color.White;
Onclicktest(e);
}
private void lD_Click(object sender, EventArgs e)
{
radio = "D";
this.label1.ForeColor = Color.Red;
this.lD.BackColor = Color.Red;
this.lC.BackColor = Color.White;
this.lB.BackColor = Color.White;
this.lC.BackColor = Color.White;
this.lA.BackColor = Color.White;
Onclicktest(e);
}
}
}