WinForm開發,窗體顯示和窗體傳值相關知識總結

2021-07-09 02:15:00 字數 2692 閱讀 5155

以前對winform窗體顯示和窗體間傳值了解不是很清楚

最近做了一些winform開發,把用到的相關知識整理如下

a.winform中窗體顯示

顯示窗體可以有以下2種方法:

form.showdialog方法 (窗體顯示為模式窗體)

form.show方法 (窗體顯示為無模式窗體)

2者具體區別如下:

1.在呼叫form.show方法後,show方法後面的**會立即執行

2.在呼叫form.showdialog方法後,直到關閉對話方塊後,才執行此方法後面的**

3.當窗體顯示為模式窗體時,單擊「關閉」按鈕會隱藏窗體,並將dialogresult屬性設定為dialogresult.cancel

與無模式窗體不同,當使用者單擊對話方塊的關閉窗體按鈕或設定dialogresult屬性的值時,不呼叫窗體的close方法

實際上是把窗體的visible屬性賦值為false,隱藏窗體了

這樣隱藏的窗體是可以重新顯示,而不用建立該對話方塊的新例項

因為未關閉窗體,所以在應用程式不再需要該窗體時,請呼叫該窗體的dispose方法

怎麼判斷乙個窗體是模式窗體呢?

利用form.modal屬性,如果該窗體是模式顯示,則為true,否則為false

根據通過show和showdialog而顯示出來的窗體的modal屬性分別對應false和true

特別注意:

由於在窗體建立之前是無法得知顯示方式的,所以在窗體建構函式中,modal屬性總是對應false,所以我們只能在load事件中或者之後利用modal屬性值

怎麼確定窗體間的所有者關係?

form類的owner屬性:窗體的所有者

當乙個窗體歸另一窗體所有時,它便隨著所有者窗體最小化和關閉。

例如,如果form2歸窗體form1所有,則關閉或最小化form1時,form2也會關閉或最小化。

例如在窗體form1中

form2 f2 = new form2 ( );

f2.showdialog ( this ); 

//或者 

f2.show ( this );

//或者

f2.owner = this;

f2.showdialog( );

這樣f2的所有者就是form1

b.winform窗體傳值

了解了窗體的顯示相關知識,接著總結一下窗體的傳值方法:

1.通過建構函式

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

實現**如下:

在窗體form2中       

int value1;

string value2;

public form2 ( int value1 , string value2 )

在窗體form1中這樣呼叫 

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

3.通過窗體的公有屬性值

特點:實現簡單

實現**如下:

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

public string form2value

set}

在窗體form1中這樣呼叫 

form2 f2 = new form2 ( );

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

f2.showdialog (  );

4.通過窗體的公有屬性值和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;

form2 f2 = new form2 ( );

f2.show ( );

if ( fr != null )

6.通過事件

實現**如下:

在窗體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開發,窗體顯示和窗體傳值相關知識總結

以前對winform窗體顯示和窗體間傳值了解不是很清楚 最近做了一些winform開發,把用到的相關知識整理如下 a.winform中窗體顯示 顯示窗體可以有以下2種方法 form.showdialog方法 窗體顯示為模式窗體 form.show方法 窗體顯示為無模式窗體 2者具體區別如下 1.在呼...

WinForm開發,窗體顯示和窗體傳值相關知識總結

以前對winform窗體顯示和窗體間傳值了解不是很清楚 最近做了一些winform開發,把用到的相關知識整理如下 a.winform中窗體顯示 顯示窗體可以有以下2種方法 form.showdialog方法 窗體顯示為模式窗體 form.show方法 窗體顯示為無模式窗體 2者具體區別如下 1.在呼...

WinForm開發,窗體顯示和窗體傳值相關知識總結

以前對winform窗體顯示和窗體間傳值了解不是很清楚 a.winform中窗體顯示 顯示窗體可以有以下2種方法 form.showdialog方法 窗體顯示為模式窗體 form.show方法 窗體顯示為無模式窗體 2者具體區別如下 1.在呼叫form.show方法後,show方法後面的 會立即執行...