代理实现两个窗口之间的通讯

本文详细介绍了C#中的代理机制,包括如何定义代理、触发代理事件以及如何正确地添加和移除事件处理程序。通过具体示例展示了不同场景下代理的应用,并解释了其在.NET框架中的作用。
namespaceDelegateTest
{
publicpartialclassForm1:Form
{
publicdelegatevoidShowTextValue(stringtext);//代理
publiceventShowTextValueshowText;//代理事件
publicForm1()
{
InitializeComponent();
//把事件加入事件队列中
showText+=newShowTextValue(SetText);
}

//开始代理
publicvoidStartDelegate(stringstr){
showText(str);
}

//设置文本框的值
privatevoidSetText(stringstr){
textBox1.Text=str;
}

//textBox1的TextChange事件
privatevoidtextBox1_TextChanged(objectsender,EventArgse)
{
showText(textBox1.Text);
}


       privatevoidForm1_FormClosing(objectsender,FormClosingEventArgse)
{
//在关闭窗口时去掉代理事件,因为没加载一次窗体就代理了SetText方法,
//如果不去掉,这个窗口开几次,SetText方法就会执行几次
//事件队列中的方法会按顺序执行
showText-=newShowTextValue(SetText);
        }
    }
}
 
namespaceDelegateTest
{
publicpartialclassForm2:Form
{
Form1form1;
publicForm2()
{
InitializeComponent();
}

privatevoidSetText(stringtext)
{
textBox1.Text=text;
}

privatevoidbutton1_Click(objectsender,EventArgse)
{
form1=newForm1();
form1.showText+=newForm1.ShowTextValue(SetText);
form1.Show();
}

privatevoidtextBox1_TextChanged(objectsender,EventArgse)
{
form1.StartDelegate(textBox1.Text);
}

privatevoidForm2_FormClosing(objectsender,FormClosingEventArgse)
{
form1.showText-=newForm1.ShowTextValue(SetText);
}
}
}
namespaceDelegateTest
{
publicclassControl
{
publicdelegatevoidSomeHandler(objectsender,EventArgse);
publiceventSomeHandlersomeevent;

publicControl(){
this.someevent+=newSomeHandler(PrintStr);
this.someevent+=newSomeHandler(PrintInt);
}
publicvoidReadStr(){
EventArgse=newEventArgs();
someevent(this,e);
}

privatevoidPrintStr(objectsender,EventArgse)
{
MessageBox.Show("我就是陈太汉!,陈晓玲就是我老婆","代理");
}

privatevoidPrintInt(objectsender,EventArgse)
{
MessageBox.Show("你好,我就是陈太汉!,陈太汉就是我,哈哈哈哈哈","代理");
}
    }
}
namespaceDelegateTest
{
publicclassContainer
{
Controlcontrol=newControl();

publicContainer(){
control.someevent+=newControl.SomeHandler(DelegateC);
control.ReadStr();
}

privatevoidDelegateC(objectsender,EventArgse)
{

MessageBox.Show("代理陈晓玲","代理");
}
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值