Winform開發中的窗體重復及靈活切換問題


Winform開發中的窗體重復及靈活顯示問題

1.問題引入

在項目中需要實現主窗體點擊按鈕后打開子窗體,但是如果不限制的話每次點擊都會打開一個新窗體,用戶體驗不好還浪費內存。所以這里要做的是限制每個子窗體只可以打開一次,如果打開后沒有關閉子窗體或者子窗體被最小化了,就直接把已打開的窗體激活並置頂顯示。同時還要滿足不同的子窗體是可以共存的,也就是只能同時有一個子窗體A,子窗體B,子窗體C……但是子窗體ABC之間是可以同時存在並互相切換的。

2.解決思路

這里我的做法是寫兩個方法:ShowOpenForm()用來激活已打開的窗體,同時返回Boolean值對應當前窗體的打開狀態,NewForm()用於第一次打開新窗體的時候實例化窗體對象,並設置相關參數。

3.參考代碼

整體結構

ShowOpenForm()方法:

 1  private Boolean ShowOpenForm(string frmName)
 2         {
 3             //Application .OpenForms為已打開的窗體
 4             foreach (Form frm in Application.OpenForms)
 5             {
 6                 if (frm.Name  == frmName)//如果傳遞的窗體名稱參數已經存在
 7                 {
 8                     frm.Activate();//激活已有窗體
 9                     if (frm.WindowState == FormWindowState.Minimized)//如果已有窗體被最小化了
10                     {
11                         frm.WindowState = FormWindowState.Normal;//恢復被最小化窗體的顯示
12                     }
13                     return false;//返回false說明窗體已打開
14                 }               
15             }
16             return true;//已打開的窗體里沒有作為參數傳遞的窗體,則返回true
17         }

 

NewForm()方法:

1  private void NewForm(Form objForm)
2         {            
3             objForm.Show();//顯示要打開的窗體的
4             objForm.Top = objForm.Top + 64;//項目需要,顯示界面下移64像素
5         }

 

示例Click事件:

1  private void tsbVoucherQuery_Click(object sender, EventArgs e)
2         {
3             if (ShowOpenForm("FrmVoucherQuery"))//如果返回的Boolean值為true,則窗體沒打開,調用NewForm()方法
4             {
5                 NewForm(new FrmVoucherQuery()); //調用打開新窗體方法,並直接實例化要打開的窗體作為參數窗體               
6             }
7         }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM