Winform跨窗體操做控件是winform開發中很常見的形式,最多見且簡單有效的方式即是使用委託的方式來進行操做,下面我將經過一個小實例來講明如何使用委託跨窗體實現控件操做。學習
實例介紹:兩個窗體,Form1按鈕打開Form2,而後在Form2的TextBox輸入值在Form1的TextBox中顯示出來。測試
1、項目結構this
Form1窗體設計:spa
Form2窗體設計:設計
2、代碼實現code
在Form2的代碼中聲明一個委託(寫在Form2類外)->orm
public delegate void ChangeForm1TextBoxValue(string txt);
而後在Form2類內寫一個委託事件->blog
public event ChangeForm1TextBoxValue ChangeTextBoxValue;
雙擊Form2的textbox給Form2的textbox添加值變化出發事件,並在此事件中調用委託事件->事件
private void textBox1_TextChanged(object sender, EventArgs e) { ChangeTextBoxValue(this.textBox1.Text);//執行委託實例 }
Form2的完整代碼以下:開發
using System; using System.Windows.Forms; namespace Test.FormsApp { public delegate void ChangeForm1TextBoxValue(string txt); public partial class Form2 : Form { public event ChangeForm1TextBoxValue ChangeTextBoxValue; public Form2() { InitializeComponent(); } private void textBox1_TextChanged(object sender, EventArgs e) { ChangeTextBoxValue(this.textBox1.Text);//執行委託實例 } } }
而後咱們切換到Form1的代碼
button點擊事件實例化Form2並調用Form2的委託事件->
private void button1_Click(object sender, EventArgs e) { Form2 f2 = new Form2(); f2.ChangeTextBoxValue += F2_ChangeTextBoxValue; f2.Show(); }
在下面聲明委託事件的操做方法->
private void F2_ChangeTextBoxValue(string txt) { this.textBox1.Text = txt; }
上述步驟在輸入+=號時能夠雙擊兩下Tab鍵,IDE(編譯器)會自動將事件補全~
Form1的完整代碼以下:
using System; using System.Windows.Forms; namespace Test.FormsApp.NETFramework461 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Form2 f2 = new Form2(); f2.ChangeTextBoxValue += F2_ChangeTextBoxValue; f2.Show(); } private void F2_ChangeTextBoxValue(string txt) { this.textBox1.Text = txt; } } }
到這裏,咱們的實現基本完成,下面進入測試!
3、效果測試
而後在Form2的textbox中輸入值
能夠看到值已經實時顯示到Form1的textbox中。
測試結果達到預期效果,項目實現成功!
一塊兒成長,共同窗習~