show 與showDialog 的區別

2021-06-22 12:43:32 字數 3031 閱讀 4784

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 )  

show和showDialog的區別

面對多視窗的呼叫的時候,我們往往不喜歡視窗之間的隨意切換,那樣我們還有花費時間尋找我們要用的視窗,而且,一但出現問題,視窗的順序也有可能被再次打亂,很是不順手,那麼我們怎麼辦呢?我們可以將show方法轉化為showdialog方法,顧名思義,showdialog是乙個進行路經繫結的show方法,他是...

showDialog快取的問題

showmodaldialog 資料快取的清除方法 有時修改了某些資料,然後通過showmodaldialog來顯示,這時通常顯示出來的資料還是上一次的資料 可能showmodaldialog快取機制的問題,這時你就需要手動的去清除快取或者寫一些 html方面 禁止瀏覽器從本地快取中調閱頁面。網頁不...

Showmodal與Show的區別

1 show 2 showmodal showmodal是個函式,show是個過程 1.showmodal 概念 當你呼叫乙個視窗用showmodal時,當這個視窗顯示出來後,程式不會繼續自己執行,而是根據你對這個視窗的操作來執行,只有關閉了這個視窗後才會執行。屬性 formstyle改為fsnor...