非MDI窗體:
private bool SHowOpen(string frmName)
{
foreach (Form frm in Application.OpenForms) //遍歷已打開窗口
{
if (frm.name == frmName) //如果此窗口已打開
{
frm.Activate() //激活當前窗體
if(frm.WindowState==FormWindowState.Minimized) //如果當前窗體已經最小化
{
frm.WindowState=FormWindowState.Normal; //還原窗體
}
return true;
}
}
return false;
}
MDI窗體:
private bool ShowChildrenForm(string p_ChildrenFormText)
{ int i; //依次檢測當前窗體的子窗體
for (i = 0; i < this.MdiChildren.Length; i++)
{
if (this.MdiChildren[i].Text == p_ChildrenFormText) //判斷當前子窗體的Text屬性值是否與傳入的字符串值相同
{
this.MdiChildren[i].Activate(); //如果值相同則表示此子窗體為想要調用的子窗體,激活此子窗體並返回true值
return true;
}
}
return false; //如果沒有相同的值則表示要調用的子窗體還沒有被打開,返回false值
}
在使用MDI子窗體時,如果僅僅是使用 from.show() 代碼,那麼我們單擊幾次菜單,就會打開幾個同樣的子窗體。可以用這段代碼防止這種情況。 首先添加一個函數,這個函數用於檢測指定的子窗體是否已經打開,如果打開則激活這個子窗體,否則返回false值 然後在調用子窗體的方法中寫入如下代碼
if ( ! ShowChildrenForm("子窗體的Text屬性值") )
{
Form newForm = new Form();
newForm.MdiParent = this;
newForm.Show(); }
這樣在調用子窗體時,會判斷是否已經打開此窗體的相同實例,如果是則激活打開的窗體,不是的話才會再打開一個新的實例