窗體間的傳值很經常使用(還記得當時困擾了我很久。。。),有幾種方式均可以實現,這裏採用委託的方式。this
1.首先,建好兩個窗體,想要的效果以下。spa
2.看看裏面的代碼線程
2.1 Form1的代碼代理
1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Windows.Forms; 9 10 namespace 窗體傳值_委託_ 11 { 12 //設置給 文本框賦值方法 的委託 13 public delegate void setTextBox1ValueDel(string str); 14 15 public partial class Form1 : Form 16 { 17 public Form1() 18 { 19 InitializeComponent(); 20 } 21 22 //設置文本框的text 23 private void SetTextBox1Value(string str) 24 { 25 this.textBox1.Text = str; 26 } 27 28 //打開Form2 29 private void btnOpenForm2_Click(object sender, EventArgs e) 30 { 31 Form2 frm = new Form2(SetTextBox1Value); 32 frm.ShowDialog(); 33 } 34 } 35 }
2.2 Form2 的代碼code
1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Windows.Forms; 9 10 namespace 窗體傳值_委託_ 11 { 12 public partial class Form2 : Form 13 { 14 15 // 文本框賦值方法 的委託屬性 16 private setTextBox1ValueDel _setTextBox1ValueDel; 17 18 public Form2(setTextBox1ValueDel del ) 19 { 20 InitializeComponent(); 21 this._setTextBox1ValueDel = del; 22 } 23 24 //發送 25 private void btnSend_Click(object sender, EventArgs e) 26 { 27 _setTextBox1ValueDel(this.textBox1.Text); 28 } 29 } 30 }
3.到這裏,問題已經解決了,能夠關閉這個頁面了。若是你沒有成功,請看下面。orm
3.1委託blog
使用委託一共分三步:事件
1.定義string
1.1看好了,setTextBox1ValueDel 直接定義在了命名空間下,而不是在某個類的下面。它表明的是一個方法的類型。it
這個方法,沒有返回值,參數是一個string類型。
1.1.1 爲何這麼定義呢,是根據我想要被調用的方法決定的。被調用的方法是沒有返回值的,只有一個string參數。
2.實例化
2.1 我在Form2的窗體裏定義了一個setTextBox1ValueDel 類型的屬性。
2.2 setTextBox1ValueDel 委託有了,但它本身並不知道本身是哪個方法的委託(我仍是以爲用「代理」這個詞更好理解,某些語言中「委託」被稱做「代理」)。
因此有了下面的代碼:
2.2.1將方法名傳遞給Form2
2.2.2 Form2中的代理初始化
3.調用
3.1 如今能夠調用了,傳入的是string
4.我這麼囉嗦的,寫的這麼詳細,只是爲了使用委託進行窗體間的值的傳遞嗎?
4.1 線程
我是在線程的使用中才瞭解委託的,下一篇我將介紹在線程中的使用。
。。。。。其實,線程中使用和這裏同樣,我不過是想引出其它的知識點。
4.2 事件
我只知道,事件其實就是委託的一種形式。之後會自學下事件,而後再來分項。
4.3 其它的我不知道的使用場景