C#設置MDI子窗體只能彈出一個的方法
Windows程序設計中的MDI(Multiple Document Interface)官方解釋就是所謂的多文檔界面,與此對應就有單文檔界面 (SDI), 它是微軟公司從Windows 2.0下的Microsoft Excel電子表格程序開始引入的,Excel電子表格用戶有時需要同時操作多份表格,MDI正好為這種操作多表格提供了很大的方便,于是就產生了MDI程序。
新建一個WindowForm程序。得到一個窗體作為我們父窗體Parent。拖入一個menustrip空間。在新建一個窗體FrmChildren作為我們子窗體,界面如下圖所示:

其代碼如下所示:
public Form1()
{
InitializeComponent();
//將Form1設置為MDI窗體,當然在Form1的IsMdiContainer屬性頁可以設置
this.IsMdiContainer = true;
}
在menustrip打開子窗體的事件代碼如下:
private void tsmiOpenWindow_Click(object sender, EventArgs e)
{
FrmChildren child = FrmChildren.GetWindow();//調用方法
child.MdiParent = this;//設置child的父窗體為當前窗體
child.Show();
}
GetWindow()這個方法在哪里呢。當然是在FrmChildren子窗體里面寫
public partial class FrmChildren : Form
{
private FrmChildren() //由 public FrmChildren改為 private FrmChildren
{
InitializeComponent();
}
static FrmChildren fc = null; 創(chuàng)建一個靜態(tài)對象
public static FrmChildren GetWindow()
{ //當子窗體沒有開啟或者已經釋放。就可以創(chuàng)建新窗體
if (fc==null||fc.IsDisposed)
{
fc = new FrmChildren();
}
return fc;
}
}
第二種方法:
這種方法個人覺得很簡單。直接在在menustrip打開子窗體的事件下面寫就ok了
private void tsmiOpenWindow_Click(object sender, EventArgs e)
{
#region 方法二Application收集打開的窗體,用索引器來尋找,就是窗體的Name屬性
//方法二.如果沒有Name為FrmChildren的子船體,實例化創(chuàng)建。和之前的正規(guī)做法沒有什么差別,只是多了判斷。
if (Application.OpenForms["FrmChildren"] == null)
{
FrmChildren child = new FrmChildren();
child.MdiParent = this;
child.Show();
}
else//有Name為FrmChildren的子船體,就直接show()
{
Application.OpenForms["FrmChildren"].Show();
}
#endregion
}
感興趣的朋友可以調試運行一下本文所述示例,相信會有不小的收獲。
相關文章
C#程序中使用LINQ to XML來查詢XML格式數(shù)據(jù)的實例
這篇文章主要介紹了C#程序中使用LINQ to XML來查詢XML格式數(shù)據(jù)的實例,LINQ to XML是.NET框架中集成的接口,可以將XML數(shù)據(jù)放到內存中進行處理,需要的朋友可以參考下2016-03-03
DevExpress實現(xiàn)自定義GridControl中按鈕文字內容的方法
這篇文章主要介紹了DevExpress實現(xiàn)自定義GridControl中按鈕文字內容的方法,需要的朋友可以參考下2014-08-08
C#接口INotifyPropertyChanged使用方法
這篇文章介紹了C#接口INotifyPropertyChanged的使用方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-01-01

