窗體間傳值(委託)

  窗體間的傳值很經常使用(還記得當時困擾了我很久。。。),有幾種方式均可以實現,這裏採用委託的方式。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 其它的我不知道的使用場景

相關文章
相關標籤/搜索