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

2021-09-22 10:42:03 字數 3700 閱讀 7660

以前對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

2.通過靜態變數

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

實現**如下:

在窗體form1中這樣呼叫 

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

在窗體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;

實現**如下:

在窗體form1中

public int form1value = 1;

form2 f2 = new form2 ( );

f2.show ( );

在窗體form2中

string formname = "form1";

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 )

我的系列文章

a.sql server2005 transact-sql 新兵器學習 

b.mcad學習 

c.**閱讀總結 

d.asp.net狀態管理 

e.db(資料庫) 

f.wap 

g.winform 

h.flex

我的好文推薦

sql server2005 transact-sql 新兵器學習總結之-總結 

ms sql資料庫備份和恢復儲存過程(加強版本) 

sql server中分布式查詢隨筆(鏈結伺服器(sp_addlinkedserver)和遠端登入對映(sp_addlinkedsrvlogin)使用小總結) 

asp.net2.0國際化/本地化應用程式的實現總結(多語言,多文化頁面的實現) 

wap開發資料站(最新更新) 

自定義格式字串隨筆 (iformattable,iformatprovider,icustomformatter三介面的實現) 

mcad學習筆記之非同步程式設計(asynccallback 委託,iasyncresult介面,begininvoke方法,endinvoke方法的使用小總結) 

mcad學習筆記之通過反射呼叫類的方法,屬性,字段,索引器(2種方法) 

mcad學習筆記之序列化(2進製和soap序列 化) 

mcad學習筆記之委託再理解(delegate的構造器,begininvoke,endinvoke,invoke4個方法的**) 

asp.net狀態管理之一(概括篇) 

flex,fms學習筆記

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