WinForm窗體間如何傳值的幾種方法

2022-01-11 10:00:10 字數 4047 閱讀 2846

**)

窗體間傳遞資料,無論是父窗體操作子窗體,還是子窗體操作符窗體,有以下幾種方式:

公共靜態變數;

使用共有屬性;

使用委託與事件;

通過建構函式把主窗體傳遞到從窗體中;

一、通過靜態變數

特點:傳值是雙向的,實現簡單

實現**如下:

在窗體form1中這樣呼叫

new form2 ( ).show ( ); //顯示form2

在窗體form2中

二、公共變數

傳值

這種方法就是利用乙個公共變數,先把需要的值存放到這個公共變數,然後需要的時候再通過讀取該變數的值來使用

例子

form1:

public static string form1value; // 注意,必須申明為static變數

private void button1_click(object sender, eventargs e)

form2:

private void form_load(object sender, eventargs e)

這種方式傳值,理解和使用上都相對的簡單,但是容易讓變數串值,比如第一次修改為「a」,而第二次修改為「b」,則有可能本來需要「a」值的結果變成了「b」。

三、靜態方法方式訪問

這種方法與傳值方法的第一種有些類似,就是將需要被其他窗體訪問的方法用static定義,以便其他傳遞可以直接訪問到

例子

form1:

private void button1_click(object sender, eventargs e)

public static void ff()

form2:

private void form_load(object sender, eventargs e)

使用這種方法訪問其他窗體的方法,在跨窗體上實現方便,但是需要需要訪問到控制項值則不能直接訪問,需要將值先傳遞給其他窗體,再有窗體傳遞回來,或者儲存在其他變數後對這變數進行訪問。

四、通過窗體的公有屬性值

特點:實現簡單

實現**如下:

在窗體form2中定義乙個公有屬性form2value,獲取和設定textbox1的文字值

public string form2value

set}

在窗體form1中這樣呼叫

form2 f2 = new form2 ( );

f2.form2value = "ok"; //給form2的textbox1賦值ok

f2.showdialog ( );

五、通過窗體的公有屬性值和owner屬性

特點:實現簡單,靈活

實現**如下

在窗體form1中

public int form1value = 1;

form2 f2 = new form2 ( );

f2.showdialog ( this ); //把form1作為form2的所有者傳遞給form2

在窗體form2中

//form2的所有者是form1

form1 f1 = ( form1 ) this.owner;

//取到form1的值是1

messagebox.show ( f1.form1value .tostring ( ) );

//給form1的form1value賦值222

f1.form1value = 222;

實現**如下

在窗體form1中

public int form1value = 1;

form2 f2 = new form2 ( );

f2.show ( );

在窗體form2中

string formname = "form1";

if ( fr != null )

七、傳參式傳值

此方法顧名思義就是將需要的值一引數形式傳遞給需要值的窗體

例子

form1:

private void button1_click(object sender, eventargs e)

form2:

public form2(string value)

此種窗體間傳值方法明顯優與第一種的傳值引數,也不會出現串資料現象,但是需要注意修改form2的建構函式,每個窗體的預設建構函式預設都是無引數的,因此需要去修改建構函式。

八、通過建構函式

特點:傳值是單向的(不可以互相傳值),實現簡單

實現**如下:

在窗體form2中

int value1;

string value2;

public form2 ( int value1 , string value2 )

在窗體form1中這樣呼叫

new form2 ( 111 , "222" ).show ( ); //這樣就把111,"222",這2個值傳送給了form2

九、用委託來實現。

委託可以把乙個方法作為引數帶入另乙個方法,在窗體傳值中,子窗體需要執行乙個方法來改變父窗體的值,

而這個方法,則可以用委託從父窗體傳遞過來。在父窗體中,宣告修改文字框的方法afterchildchange,在new乙個子窗體的時候,將這個方法傳遞給子窗體。那麼當子窗體點選同步按鈕時,會執行父窗體的afterchildchange方法,已達到修改文字框值的目的。

例子

1、在子窗體中設定乙個委託型別的屬性:

public actionafterchangetextdel

2、在子窗體同步按鈕中:

if (afterchangetextdel != null)

3、在父窗體中新增方法:

public void afterchildchange(string text)

4、在父窗體啟動子窗體按鈕:

childfrm frm =new childfrm();

frm.afterchangetextdel = new action(this.afterchildchange);

frm.show();

5、這樣也能實現窗體傳值,子窗體的委託可以在父窗體 其他地方可以進行直接執行。:解決此問題。微軟引入了事件。

十、用事件來實現

事件是委託型別的物件。它內部是用委託來實現的,對於事件來說,外部只能註冊自己+=,登出自己-=,外界不可以登出其他的註冊者,也不能主動觸發事件。而委託則無法實現這些控制,因此誕生了事件這話總語法。

實現**如下

在窗體form2中定義公有屬性form2value,獲取和設定textbox1的文字值

並且還定義乙個accept事件

public string form2value

set}

public event eventhandler accept;

private void button1_click ( object sender , eventargs e )

}在窗體form1中

form2 f2 = new form2 ( );

f2.accept += new eventhandler ( f2_accept );

f2.show ( );

void f2_accept ( object sender , eventargs e )

WinForm窗體間傳值

form1 主窗體 namespace firstdlg public string textstored set private void button1 click object sender,eventargs e private void form1 load object sender,e...

winform窗體間傳值

推薦使用第6與第7方法 1.通過建構函式 特點 傳值是單向的 不可以互相傳值 實現簡單 實現 如下 在窗體form2中 int value1 string value2 public form2 int value1 string value2 在窗體form1中這樣呼叫 new form2 111...

WinForm窗體間傳值

1.通過建構函式 特點 傳值是單向的 不可以互相傳值 實現簡單 實現 如下 在窗體form2中 int value1 string value2 public form2 int value1 string value2 initializecomponent this.value1 value1 ...