使用C#開啟新視窗關閉舊視窗的方法;winform中防止重複開啟多個相同子窗體
1、網上流傳最廣的應該是隱藏法了,原理就是把舊視窗隱藏掉,再開啟新視窗。
具體的程式碼如下:
//在舊視窗中的合適位置寫這些程式碼
//新建一個NewForm視窗(NewForm是自己定義的Form)
NewForm fm=new NewForm()
this.Hide(); //隱藏現在這個視窗
fm.Show(); //新視窗顯現
這種方法舊的視窗依舊會佔記憶體,因此如果用來做登陸視窗不太好,但是如果舊視窗是以後還需要恢復的主視窗,這個方法便很不錯,因為以後可以關掉新視窗,再用 舊視窗.Show() 就可以恢復舊視窗了。
所以這個方法適合在主視窗和子視窗間傳遞資訊。
2、再來便是為登入視窗設計的方法了。
在Program.cs裡這樣定義:
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
//新建Login視窗(Login是自己定義的Form)
Login Log = new Login();
//使用模式對話方塊方法顯示Log
Log.ShowDialog();
//DialogResult就是用來判斷是否返回父窗體的
if (Log.DialogResult == DialogResult.OK)
{
//線上程中開啟主窗體
Application.Run(new Main());
}
}
在登陸視窗中驗證結束後要賦值Log.DialogResult = DialogResult.OK 。
這樣登入視窗完成任務後會被直接關掉,主視窗就開啟了。
現在我還不是很懂為什麼會這麼麻煩,但大致的原因應該是“必須有一個主窗體始終存在,在其上新建的所有窗體都是有它所有的,關閉它其它的自然就關閉了”。我也正在學習
private bool ShowChildrenForm(string p_ChildrenFormText)
{
int i;
//依次檢測當前窗體的子窗體
for (i = 0; i < this.MdiChildren.Length; i++)
{
//判斷當前子窗體的Text屬性值是否與傳入的字串值相同
if (this.MdiChildren[i].Text == p_ChildrenFormText)
{
//如果值相同則表示此子窗體為想要呼叫的子窗體,啟用此子窗體並返回true值
this.MdiChildren[i].Activate();
return true;
}
}
//如果沒有相同的值則表示要呼叫的子窗體還沒有被開啟,返回false值
return false;
}
在使用MDI子窗體時,如果僅僅是使用 from.show() 程式碼,那麼我們單擊幾次選單,就會開啟幾個同樣的子窗體。可以用這段程式碼防止這種情況。 首先新增一個函式,這個函式用於檢測指定的子窗體是否已經開啟,如果開啟則啟用這個子窗體,否則返回false值 然後在呼叫子窗體的方法中寫入如下程式碼 if ( ! ShowChildrenForm("子窗體的Text屬性值") )
{
Form newForm = new Form();
newForm.MdiParent = this;
newForm.Show();
}
這樣在呼叫子窗體時,會判斷是否已經開啟此窗體的相同例項,如果是則啟用開啟的窗體,不是的話才會再開啟一個新的例項
相關文章
- C# winForm 視窗跳轉後關閉上一個視窗的方法C#ORM
- C#中關閉子視窗而不釋放子視窗物件的方法C#物件
- js開啟新視窗JS
- C#防止WebBrowser在新視窗中開啟連結頁面C#Web
- 拖拽防止火狐瀏覽器開啟新視窗瀏覽器
- js如何在子視窗中關閉父視窗JS
- js 開啟新視窗方式JS
- Windows Phone 中WebBrowser開啟新視窗WindowsWeb
- js的開啟子視窗 shwoModalDialogJS
- C# 如何重複呼叫父窗體中的子窗體C#
- JavaScript中的Window物件(開啟新的視窗)JavaScript物件
- 基於vue3.0+electron新開視窗|Electron多開窗體|父子模態視窗Vue
- 討論關閉子視窗,重新整理父視窗(非模式視窗)模式
- C# WinForm 父窗體 子窗體 傳值C#ORM
- vue 新視窗開啟外連結Vue
- window.open()開啟新視窗教程
- Kali Linux開啟多個終端視窗Linux
- 如何在同一視窗開啟多個ExcelExcel
- Mac系統關閉重啟電腦後「重新開啟應用及其視窗」功能的方法Mac
- 一次性關閉所有開啟的word視窗
- vue 內開啟一個新視窗,帶傳參!Vue
- win10怎樣開啟執行視窗快捷鍵_win10開啟執行視窗的4個方法Win10
- Javascript跳轉頁面和開啟新視窗等方法JavaScript
- Win10如何改變切換視窗開啟所有視窗Win10
- js關閉視窗JS
- 如何總是在新視窗中開啟資料夾?
- 以post方式傳參方式開啟新視窗
- Go Qt5 建立空白視窗、視窗居中及關閉視窗事件GoQT事件
- jQuery實現的在新視窗開啟連結jQuery
- WinForm MDIParent如何防止重複開啟ORM
- 關於父視窗獲取跨域iframe子視窗中的元素跨域
- Vue中在新視窗開啟頁面 及 Vue-routerVue
- windows 10 右鍵開啟 cmd 視窗Windows
- js開啟沒有位址列下拉條新視窗JS
- Windows 8中如何設定在新選項卡中開啟視窗Windows
- putty工具開啟X視窗的問題
- js漸變彈出視窗和關閉視窗效果JS
- <轉>“您檢視的網頁正在試圖關閉視窗。是否關閉此視窗”的遮蔽方法(JavaScript)網頁JavaScript