我们知道event的第二个参数EventArgs,可以用来在处理事件触发时,传递数据,今天就用它在窗体间传值。
demo是winform程序,就是两个窗体,ParentFrm和ChildFrm。
首先定义一个类myCustomEventArgs继承自EventArgs
![](/Images/OutliningIndicators/ContractedBlock.gif)
Code
public class myCustomEventArgs : EventArgs //事件参数类
{
private string _str;
public myCustomEventArgs(string str)
{
this.Str = str; //设置属性的值
}
public string Str
{
get { return _str; }
set { _str = value; }
}
}
然后声明一个用来处理事件的delegate
![](/Images/OutliningIndicators/ContractedBlock.gif)
Code
public delegate void myDelegate(object sender, myCustomEventArgs e);
再定义一个事件
![](/Images/OutliningIndicators/ContractedBlock.gif)
Code
public static event myDelegate myEvent;(可以不是静态的)
在ParentFrm的load里写上
![](/Images/OutliningIndicators/ContractedBlock.gif)
Code
myEvent += new myDelegate(ParentFrm_myEvent);
在ChildFrm的load里写上
![](/Images/OutliningIndicators/ContractedBlock.gif)
Code
ParentFrm.myEvent += new myDelegate(ChildFrm_myEvent);
ChildFrm里有个Handler
![](/Images/OutliningIndicators/ContractedBlock.gif)
Code
void ChildFrm_myEvent(object sender, myCustomEventArgs e)
{
this.textBox1.Text = e.Str;
}
然后就可以实现我们想要的效果了。
源代码:
ParentFrm,里面有一个button,一个textbox。
![](/Images/OutliningIndicators/ContractedBlock.gif)
Code
namespace CodeProjectWindowThread
{
public delegate void myDelegate(object sender, myCustomEventArgs e);
public partial class ParentFrm : Form
{
public static event myDelegate myEvent;
public ParentFrm()
{
InitializeComponent();
}
private void ParentFrm_Load(object sender, EventArgs e)
{
myEvent += new myDelegate(ParentFrm_myEvent);
ChildFrm frm = new ChildFrm();
frm.Show();
}
void ParentFrm_myEvent(object sender, myCustomEventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
myEvent(sender, new myCustomEventArgs(this.textBox1.Text));
}
}
public class myCustomEventArgs : EventArgs //事件参数类
{
private string _str;
public myCustomEventArgs(string str)
{
this.Str = str; //设置属性的值
}
public string Str
{
get { return _str; }
set { _str = value; }
}
}
ChildFrm代码,里面有一个textbox。
![](/Images/OutliningIndicators/ContractedBlock.gif)
Code
namespace CodeProjectWindowThread
{
public partial class ChildFrm : Form
{
public ChildFrm()
{
InitializeComponent();
}
private void ChildFrm_Load(object sender, EventArgs e)
{
ParentFrm.myEvent += new myDelegate(ChildFrm_myEvent);
}
void ChildFrm_myEvent(object sender, myCustomEventArgs e)
{
this.textBox1.Text = e.Str;
}
}
}
单击ParentFrm窗体的button,ChildFrm窗体里的textbox会显示ParentFrm窗体里的textbox的值。