問題: 有兩個窗體,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);//執行委托實例
}
}
}