1. 程式人生 > >C#窗體向另一個窗體實時傳值【轉】

C#窗體向另一個窗體實時傳值【轉】

網上很多方法都是在開啟窗體的時候利用類在例項化時的建構函式進行傳值,此方法是在已開啟窗體的控制元件觸發傳值,在此記錄一下;感謝這位大神http://blog.csdn.net/zlbcdn/article/details/70888603的demo,寫的很詳細明確

1、功能展示

有時需要將子介面的內容傳遞到父介面,方法有好幾種。經常用的是通過委託實現。具體的效果如下:

       

【說明】點選父介面上“開啟子介面”button,則會彈出子介面。父介面與子介面如上圖所示。

      

【說明】在子介面的textBox框內輸入待返回至父介面的內容,點選“將內容返回”button,則父介面的textBox將會展示返回的內容。具體如上圖所示

2、程式碼分析

裡面應用了委託(delegate)和事件(event)。委託就是前端開發中最常用的“回撥方法”(callback),event是一種註冊機制,將動作與委託關聯。

為了實現以上功能,首先先編寫子窗體的定義。程式碼如下:

  1. public partial class Form2 : Form  
  2. {  
  3.     //第二步:宣告一個委託型別的事件
  4.     publicevent setTextValue setFormTextValue;  
  5.     public Form2()  
  6.     {  
  7.         InitializeComponent();  
  8.     }  
  9.     privatevoid button1_Click(object sender, EventArgs e)  
  10.     {  
  11.         //第三步:準備相關資料。
  12.         setFormTextValue(this.textBox1.Text);  
  13.     }  
  14. }  
  15. // 第一步:宣告一個委託。(根據自己的需求)
  16. publicdelegatevoid setTextValue(string textValue);  

第一步:先在子窗體中定義一個委託。根據實際需求定義委託

第二步:在子窗體中宣告一個event,將委託與動作關聯

第三步:在具體的事件中實現event

以上三步參見Form2的程式碼

父窗體的程式碼如下:

  1. public partial class Form1 : Form  
  2. {  
  3.     public Form1()  
  4.     {  
  5.         InitializeComponent();  
  6.     }  
  7.     privatevoid button1_Click(object sender, EventArgs e)  
  8.     {  
  9.         Form2 form2 = new Form2();  
  10.         //第四步:初始化事件
  11.         form2.setFormTextValue += new setTextValue(form2_setFormTextValue);  
  12.         form2.Show();  
  13.     }  
  14.     //第五步:實現事件
  15.     void form2_setFormTextValue(string textValue)  
  16.     {  
  17.         //具體實現。
  18.         this.textBox1.Text = textValue;  
  19.     }  
  20. }  

在父窗體的具體實現中分為2步:

第四步:在定義子窗體時,宣告子窗體的事件

第五步:實現具體的事件

以上,就是全部的內容

3、功能分析

通過委託的方式,優點:鬆耦合。