關於在窗體之間傳值的問題 C winform

2022-03-17 17:06:48 字數 2151 閱讀 5821

做c/s專案已經有段時間了  兩個月了吧   

經常會被form a 和form b窗體間互相傳值 困擾

最近在做及時查詢(用小的查詢框 快速查取編碼)     通過在網上的查詢  總結出了以下幾種方式可以實現

1全域性變數 2屬性 3 窗體建構函式 4用委託 5用委託加事件的方法

1 全域性變數 

這個最簡單,只要把變數 定義為    static 就可以了  

缺點是     靜態變數比較危險,總之我一開始就想過這種方法,但是始終沒有用過...(擔心被老大罵,要是在學校的課程設計,果斷這樣弄好了)

在form a 中定義乙個static 變數

public static  int  i =9;

然後在 formb 中 的按鈕事件下:

private void button1_clic(object sender,system.event args)

textbox1.text=form.i;

2利用屬性來傳值

他的核心思想是這樣的

將類作為乙個引數 傳進建構函式中 ,由於類是引用型別     在b中    定義乙個類的實體,將這個引數賦值給它

這樣   這兩個類(具有string 屬性的)就指向了同乙個位址。這時在formb,forma  就擁有了   一塊共同使用的位址

詳情可參見

3利用窗體建構函式傳值

這個的意思就是   將需要傳的值    放在建構函式的引數中  

傳給新的窗體類  

缺點是單向的      也就是 只能 parent 窗體 給  子窗體 傳值   

4 利用委託傳值  

這個最早是彭斌跟我講的  

但是一直  對於高階程式設計的東西 不太熟悉  不知道怎麼寫 

於是彭斌給我寫了乙個   委託加事件的    在這裡 又從網上找了到了  純委託的東西

formb中先定義乙個delegate

public delegate void returnvalue (int i);

public returnvalue return;

然後在formb中的button 中寫下如下

private void button1_click (object sender,system.eventargs e)

if(returnvalue !=null)

returnvalue(8);

form 1中的button 按鈕如下:

private void button1_click(object  sender,system.eventargs e)

form2 temp =new form2();

temp.returnvalue  = new temp.form2.returnvalue(showvalue);

temp.show;

private void  showvalue(int i)

textbox1.text=i.tostring();

點選form b的button ,forma的textbox 中的值就會相應的變化。

5用委託加事件的方法

下邊是彭斌的**

form2 中

public event selectedkeyvaluehander selectedkeyvalue;

private void button1_click(object sender, datagridviewcellmouseeventargs e)

);hostform.dialogresult = dialogresult.ok;

}-----放在form 2的同命名空間下

public class keyvalue : eventargs

public keyvalue() 

}public delegate void selectedkeyvaluehander(keyvalue args);

然後再form 1 的下邊寫上

private void button1_click(object sender, datagridviewcellmouseeventargs e)

在這5個方法中

第乙個是雙向的傳值

第二個是單向的  也可以使雙向

第三個是單向的

第四個也是單向的

第五個也是單向的

部分資料來自網際網路

WinForm窗體之間傳值

1 父窗體中宣告乙個靜態的父窗體型別的臨時物件 public static frmfather frmfathertemp 2 父窗體建構函式中對該變數賦值 public frmfather 3 把要傳遞的引數設定為父窗體的乙個屬性,並設定訪問器。訪問其的set方法中進行了引數與父窗體控制項繫結的操...

windows form 窗體 之間傳值

申明 來自網際網路 在windows form 之間傳值,我總結了有四個方法 全域性變數 屬性 窗體建構函式和 delegate 第乙個全域性變數 這個最簡單,只要把變數描述成 static 就可以了,在 form2 中直接引用 form1 的變數,如下 在form1 中定義乙個 static 變數...

winform窗體之間的傳值

資料整理結果如下 1.子窗體做乙個屬性 子窗體的確定按鈕裡面給這個屬性賦值 父窗體直接訪問這個屬性就好了 frmchoiceproduct formchild new frmchoiceproduct formchild.owner this formchild.showdialog txtweig...