今天研究了一下,在C#里面卻是可以不用自定義消息這么復(fù)雜的方法來實(shí)現(xiàn)跨窗體調(diào)用控件,C#有更好的辦法就是委托。
效果描述:有兩個(gè)窗體,F(xiàn)ORM1(一個(gè)名為“打開form2”的button控件)和FORM2(一個(gè)名為“改變form1顏色“的button控件)。啟動(dòng)時(shí),F(xiàn)ORM1中點(diǎn)擊button控件“打開form2””使FORM2顯示出來。點(diǎn)擊FORM2中的“改變form1顏色”后,F(xiàn)orm1中顏色改變。
一、在Form2里面:
首先聲明一個(gè)委托和委托實(shí)例
Form2類外
- public delegate void ChangeFormColor(bool topmost);
Form2類里
- public event ChangeFormColor ChangeColor;
Form2的按鈕事件中調(diào)用委托
- private void button1_Click(object sender, EventArgs e)
- {
- ChangeColor(true);
- }
二、在Form1里面:
button控件“打開form2“的click事件中有下面的代碼:
- {
- Form2 f = new Form2();
- f.ChangeColor += new ChangeFormColor(f_ChangeColor);
- f.Show();
- }
f.ChangeColor += new ChangeFormColor(f_ChangeColor);
這句最關(guān)鍵,你輸入到+=之后,按兩下Tab,他會(huì)自動(dòng)給你生成回調(diào)函數(shù),如下:
- void f_ChangeColor(bool topmost)
- {
- this.BackColor = Color.LightBlue;
- this.Text = "改變成功";
- }
三、完整代碼
- using System;
- using System.Drawing;
- using System.Windows.Forms;
-
- namespace 跨窗體調(diào)用控件
- {
- public partial class Form1 : Form
- {
- public Form1()
- {
- InitializeComponent();
- }
- private void button1_Click(object sender, EventArgs e)
- {
- Form2 f = new Form2();
- f.ChangeColor += new ChangeFormColor(f_ChangeColor);
- f.Show();
- }
- void f_ChangeColor(bool topmost)
- {
- this.BackColor = Color.LightBlue;
- this.Text = "改變成功";
- }
- }
- }
- using System;
- using System.Windows.Forms;
-
- namespace 跨窗體調(diào)用控件
- {
- public delegate void ChangeFormColor(bool topmost);
- public partial class Form2 : Form
- {
- public Form2()
- {
- InitializeComponent();
- }
- public event ChangeFormColor ChangeColor;
- private void button1_Click(object sender, EventArgs e)
- {
- ChangeColor(true);
- }
- }
- }
最后再給大家介紹一種最簡(jiǎn)單的C#跨窗體操作