winform開啟唯一視窗 建構函式傳值

2022-09-15 05:03:10 字數 1515 閱讀 8206

製作登入窗體:

製作乙個登陸窗體,實現點選按鈕關閉此窗體並開啟另乙個窗體

直接在按鈕點選事件中,例項化乙個想要開啟的窗體 使用show方法開啟,並把登陸窗體的visible屬性改為false

form1 f1 = new form1();

f1.show();

this.visible = false;

另:這樣寫的話再關閉第二個視窗的時候,程式並沒有完全結束,第乙個登陸視窗仍然存在,雖然不顯示

因此我們用到建構函式傳值,並且這樣可以實現開啟唯一視窗(不重複開啟同乙個視窗)

建構函式傳值:

建構函式可以設定引數,當例項化這個窗體時,可以把某個我們需要的型別的引數傳遞進來,比如要點選登入時,將乙個user自定義物件以及登入窗體本身傳遞給將要開啟的窗體

form2 f2 = null;

public form1(form2 f2, users u)

由於作用域問題,傳遞進來的引數只能在建構函式中使用,可在外面設定乙個全域性變數,在建構函式中把傳遞進來的值賦給全域性變數,這樣在本程式中其他事件可以隨意呼叫,如上

因為form1不是主窗體 所以關閉form1時並不會結束程式,我們只需要寫乙個關閉form1時觸發的事件即可(formclosing或formclosed):

private void form1_formclosing(object sender, formclosingeventargs e)

此時使用到了上面傳遞進來的f2,通過賦值給全域性變數f2從而控制了form2的關閉。

開啟唯一窗體:

如果多次點選同乙個登陸按鈕,開啟了多個登陸後的窗體,這樣是不合理的

同樣可以通過建構函式傳值來控制,在主窗體中建立乙個list公共集合

public partial class form1 : form

public listflist = new list();

private void button1_click(object sender, eventargs e)

}if (count == 0)//如果集合中沒有form1窗體 則開啟它}}

那麼,當form2關閉的時候,設定關閉事件,將from2自己從集合中刪掉

public partial class form2 : form

private void form2_formclosing(object sender, formclosingeventargs e)

}

這樣,就實現了當form2處於沒開啟的狀態時,點選按鈕將form2開啟,否則不執行任何操作,並且當form2關閉時,刪掉集合中的form2,這樣再次點選按鈕的時候可以重新開啟form2

最後:點選按鈕,如果想要開啟的視窗已經開啟,則讓其焦點進入:可通過獲取視窗使用focus()方法實現

開啟其他窗體,建構函式傳值,開啟唯一窗體

製作乙個登入視窗form1,要求登陸後開啟乙個新視窗,隱藏該視窗 注 關閉新視窗時,該視窗不會關閉,程式未結束,需要用到建構函式傳值來關閉新視窗的同時,關閉該登入視窗.form2 f2 new form2 this user 橫線部分與下方講的傳值相對應 f2.show this.visible f...

winform彈出唯一窗體的方法

form1中btn1按鈕點選show出form2,當form2處於開啟狀態時,再次點選btn1不會繼續彈出窗體,而是將焦點定位至已開啟的form2上 當form2關閉後,再次點選btn1則會show出乙個新的form2 form1 建立乙個全域性集合,用來放置已經show出的窗體物件 listlis...

Winform 單例模式 同乙個視窗值開啟一次

1。在winform應用中,乙個窗體開啟另乙個窗體,用以下方式開啟會開啟多個視窗,像qq一樣會開啟多個登陸視窗,有時應用中只開啟乙個 form2 form new form2 form.show 方法就是在在form2中建立乙個靜態欄位和乙個靜態方法,用方法來建立form2的例項 public pa...