问题: 有两个窗体,FORM1(含一个label控件,一个名为显示form2的button控件)和FORM2(含一个button控件)。启动时,FORM1中点击button控件显示form2使FORM2显示出来。点击FORM2中的button1后,Form1中的label1的text改变。 解决:用事件回调 一、在Form2
解决:用事件回调
一、在Form2里面:
首先声明一个委托和委托实例
public delegate void SetMainFormTopMostHandle(bool topmost);
public event SetMainFormTopMostHandle SetMainFormTopMost;
二、在Form1里面:
button控件“显示form2“的click事件中有下面的代码:
{
Form2 f2 = new Form2 ();
f2.Show()
}
然后在f2.Show()之前,加一句:
f2.SetMainFormTopMost += new SetMainFormTopMostHandl(f2_SetMainFormTopMost); 用来给form1中的SetMainFormTopMost注册一个修改label控件内容的方法f2_SetMainFormTopMost()
提示:
f2.SetMainFormTopMost += new SetMainFormTopMostHandle(f2_SetMainFormTopMost);
这句最关键,你输入到+=之后,按两下Tab,他会自动给你生成回调函数
如下:
void f2_SetMainFormTopMost(bool topmost)
{
label1.Text = "调用成功";//改变label内容的代码
}
这里面f2_SetMainFormTopMost就是你用来修改label的方法(回调函数)。 SetMainFormTopMostHandle、SetMainFormTopMost分别是定义的委托和委托实例名称,自己可以随便定义。
大致就是为f2创建一个用来修改label的方法,然后把该方法绑定到这个委托实例上。
三、启动f2,在f2中执行这个委托实例,就是SetMainFormTopMost(true)这样写 (参数要和委托的那个声明一 致)
那么就会调用F1中绑定的那个方法。
源代码如下:
Form1中的代码:
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.SetMainFormTopMost += new Form2.SetMainFormTopMostHandle(f2_SetMainFormTopMost);
f2.Show();
}
void f2_SetMainFormTopMost(bool topmost)
{
label1.Text = "调用成功";
}
}
}
Form2中的代码:
namespace WindowsFormsApplication1
{
public partial class Form2 : Form
{
public delegate void SetMainFormTopMostHandle(bool topmost);//定义委托
public event SetMainFormTopMostHandle SetMainFormTopMost;//定义委托实例
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
SetMainFormTopMost(true);
}
}
}
原文地址:http://www.cnblogs.com/dudg/p/delegatecallback.html