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...