C#之利用委托和事件实现参数传递
关于委托和事件的个人理解就是,委托就是快递员,事件就是信纸,事件里的程序就是信的内容。其实现过程就是,快递员邮递写好的信,即事件通过委托向外传递,至于向哪传递,那就要看哪里注册了这个事件。在编写C#程序时需要用到委托和事件来传递一些参数,这里就简单总结一下委托和事件传参的简单使用:
假设:在一个窗体中创建了一个用户控件uc1,需要把uc1中的某个int类型的参数传递给主窗体并在textBox中显示
用户控件uc1:
//声明一个委托
public delegate void PassIntToFrmMainEventHandler(int number);
//声明一个要委托的事件
public event PassIntToFrmMainEventHandler PassIntToFrmMainEvent;
int number = 1000;//这里是随便声明一个int参数
//单击button传递
private void button1_Click(object sender, EventArgs e)
{
PassIntToFrmMainEvent(number);
}
Form窗体:
public Form1()
{
InitializeComponent();
//注册事件
uc11.PassIntToFrmMainEvent += new uc1.PassIntToFrmMainEventHandler(ReceiveInt);
}
private void ReceiveInt(int number)
{
//将uc1中传来的Int参数在textBOX中显示
textBox1.Text = number.ToString();
}
注意:声明的委托中是什么类型的参数就必须传递什么类型的参数,也就是说,委托的类型必须与事件中传递的类型一致,即发水果类快递必须装水果不能装衣服!
除了委托参数,还可以直接委托某一事件,例如:
在uc1控件中:
public delegate void UC1TextboxChanageHandler(object sender,TextChangeEventarges e);
public event UC1TextboxChanageHandler TextChangeEvent;
//继承事件基类的类
public class TextChangeEventarges:EventArgs
{
private readonly string txt;
public TextChangeEventarges(string txt)
{
this.txt = txt;
}
public string GetTxt
{
get
{
return txt;
}
}
}
public UCForm1()
{
InitializeComponent();
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
if (this.TextChangeEvent != null)
{
this.TextChangeEvent(this, new TextChangeEventarges(this.textBox1.Text));
}
}
在窗体中:
public FormMain()
{
InitializeComponent();
this.uc1.TextChangeEvent += new UCForm1.UC1TextboxChanageHandler(uc1_TextChangeEvent);
}
void uc1_TextChangeEvent(object sender, UCForm1.TextChangeEventarges e)
{
textBox1.Text = e.GetTxt;
}