winform中通过事件实现窗体传值思路【待修改】
Form2向Form1传值
private Form1 form1;//定义一个类型为Form1类型的字段,用于存储传递过来的Form对象
public void SetTextValue(object sender, EventArgs e)//sender 事件源,e包含事件数据的类的基类的对象
{
if (sender is Form1)
{
form1 = sender as Form1;
}
MyEventArgs me = (MyEventArgs)e;
txtNum2.Text=me.Text;
}
public event EventHandler eh2;//定义一个系统事件类型的事件
private void btnBack_Click(object sender, EventArgs e)
{
MyEventArgs me = new MyEventArgs();
me.Text = txtNum2.Text;
eh2 += new EventHandler(form1.SetTextVaule);//注册事件
if (eh2 != null)
{
eh2(this,me);//执行事件
}
this.Close();
}
}
[注]:
1 为什么要定义MyEventArgs?
要通过事件传值,需要定义事件,定义事件需要事件源,包含事件数据的类,而引用系统提供的事件时,系统事件里仅有
// 摘要:
// 表示没有事件数据的事件。
public static readonly EventArgs Empty;
// 摘要:
// 初始化 System.EventArgs 类的新实例。
public EventArgs();
两项,当需要通过事件传递额外的值则不能满足,此时需要自己定义事件类,而此时又容易报
------------------
"无法将类型“System.EventArgs”转换为“_02_事件窗体传值.MyEventArgs”
委托“System.EventHandler”有一些无效参数
参数 2: 无法从“_02_事件窗体传值.MyEventArgs”转换为“System.EventArgs”
------------------
的错误,所以此时为了解决如上问题,可让自定义事件类继承系统定义事件类.
public class MyEventArgs:EventArgs
{
public string Text { get; set; }
}
private Form1 form1;//定义一个类型为Form1类型的字段,用于存储传递过来的Form对象
public void SetTextValue(object sender, EventArgs e)//sender 事件源,e包含事件数据的类的基类的对象
{
if (sender is Form1)
{
form1 = sender as Form1;
}
MyEventArgs me = (MyEventArgs)e;
txtNum2.Text=me.Text;
}
public event EventHandler eh2;//定义一个系统事件类型的事件
private void btnBack_Click(object sender, EventArgs e)
{
MyEventArgs me = new MyEventArgs();
me.Text = txtNum2.Text;
eh2 += new EventHandler(form1.SetTextVaule);//注册事件
if (eh2 != null)
{
eh2(this,me);//执行事件
}
this.Close();
}
}
[注]:
1 为什么要定义MyEventArgs?
要通过事件传值,需要定义事件,定义事件需要事件源,包含事件数据的类,而引用系统提供的事件时,系统事件里仅有
// 摘要:
// 表示没有事件数据的事件。
public static readonly EventArgs Empty;
// 摘要:
// 初始化 System.EventArgs 类的新实例。
public EventArgs();
两项,当需要通过事件传递额外的值则不能满足,此时需要自己定义事件类,而此时又容易报
------------------
"无法将类型“System.EventArgs”转换为“_02_事件窗体传值.MyEventArgs”
委托“System.EventHandler”有一些无效参数
参数 2: 无法从“_02_事件窗体传值.MyEventArgs”转换为“System.EventArgs”
------------------
的错误,所以此时为了解决如上问题,可让自定义事件类继承系统定义事件类.
public class MyEventArgs:EventArgs
{
public string Text { get; set; }
}