使用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# 如何重複呼叫父窗體中的子窗體C#
- Kali Linux開啟多個終端視窗Linux
- 基於vue3.0+electron新開視窗|Electron多開窗體|父子模態視窗Vue
- Mac系統關閉重啟電腦後「重新開啟應用及其視窗」功能的方法Mac
- vue 新視窗開啟外連結Vue
- window.open()開啟新視窗教程
- 在新視窗開啟連結的方法是什麼?那怎麼設定全站連結都在新視窗開啟?
- 一次性關閉所有開啟的word視窗
- 無法開啟JFrame視窗
- win10怎樣開啟執行視窗快捷鍵_win10開啟執行視窗的4個方法Win10
- vue 內開啟一個新視窗,帶傳參!Vue
- Go Qt5 建立空白視窗、視窗居中及關閉視窗事件GoQT事件
- Markdown連結採用新開視窗的方式開啟
- 關於父視窗獲取跨域iframe子視窗中的元素跨域
- WinForm MDIParent如何防止重複開啟ORM
- IDEA 開啟 services視窗 管理微服務Idea微服務
- Vue中在新視窗開啟頁面 及 Vue-routerVue
- windows10關閉所有開啟的視窗快捷鍵在哪裡設定Windows
- winform 跨視窗點選ORM
- Win10系統怎麼將“此處開啟PowerShell視窗”更改為“在此處開啟命令視窗”Win10
- 1.3.3.2. 步驟1:開啟一個命令視窗
- 解決winform窗體重複建立問題ORM
- winform之在主窗體中不顯示子窗體的選單欄ORM
- Window10怎樣開啟Powershell視窗
- 滑鼠拖動圖片,禁止在新視窗中開啟圖片
- 禁止使用者開啟瀏覽器debug除錯視窗的方法瀏覽器除錯
- goland 把多個專案視窗合併到一個視窗GoLand
- excel視窗獨立開啟不重疊 兩個excel檔案怎麼實現兩個視窗顯示Excel
- WinForm下實現子窗體ORM
- PyQt5 之關閉視窗QT
- 瀏覽器攔截開啟新視窗情況總結瀏覽器
- PbootCMS模板導航設定外鏈時新視窗開啟boot
- mysql視窗函式中的滑動視窗MySql函式
- 非啟用視窗(Inactive Window)
- 與SQL視窗函式相同SQL函式