相关数据包




问题: 有两个窗体,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中的代码:using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;
namespace 跨窗体调用控件{ public partial class Form1 : Form { public Form1() { InitializeComponent(); }
private void Form1_Load(object sender, EventArgs e) { }
void f2_SetMainFormTopMost(bool topmost) //回调函数 { label1.Text = "调用成功"; }
private void button1_Click(object sender, EventArgs e) { Form2 f2 = new Form2(); f2.SetMainFormTopMost += new SetMainFormTopMostHandle(f2_SetMainFormTopMost);//给form2中的委托实例SetMainFormTopMost 注册方法 f2.Show(); } }}
Form2中的代码:
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;
namespace 跨窗体调用控件{ public delegate void SetMainFormTopMostHandle(bool topmost); //定义委托 public partial class Form2 : Form { public SetMainFormTopMostHandle SetMainFormTopMost;//定义委托实例 public Form2() { InitializeComponent(); }
private void button1_Click(object sender, EventArgs e) { SetMainFormTopMost(true);//执行委托实例 } }}