看到論壇中有朋友問,如何可以保證在 MDI主窗體中,同一類型的子窗體只能打開一次,再 打開只是將原來打開的窗體激活。這個要求我以前寫程序的時候也遇到過。我實現的基本思路 是:
一般每個子窗體都是繼承自 Form類型,不同子窗體分別代表不同的功能,因此只需要判斷 當前 MDI打開的子窗體的類型中有沒有當前需要打開的子窗體類型就行了,如果有,則直接激 活,如果沒有則創建一個並加到主窗體中。具體實現起來有很多種辦法,這裡只寫出一個利用 泛型的實現:
/// <summary>
/// 打開MDI子窗口並附加到MDI主窗口中,如果MDI主窗口中已經存在相同類型的子窗口, 則直接激活
/// </summary>
/// <typeparam name="T">MDI子窗體類型</typeparam>
/// <param name="mdiParent">MDI主窗體引用</param>
/// <returns>當前創建或得到的MDI子窗體類型實例的引用</returns>
private T OpenUniqueMDIChildWindow<T>(Form mdiParent) where T : Form, new()
{
foreach (Form subForm in mdiParent.MdiChildren)
{
if (subForm.GetType().Equals(typeof(T)))
{
subForm.Activate();
return subForm as T;
}
}
T newForm = new T();
newForm.MdiParent = mdiParent;
newForm.Show();
return newForm;
}