溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

c#判斷打開的窗體:MDI和非MDI

發(fā)布時間:2020-06-11 02:51:52 來源:網(wǎng)絡(luò) 閱讀:806 作者:huohe2009 欄目:編程語言

1,MDI類型

在打開事件中直接檢測是否已經(jīng)打開此MDI窗體
// 是否已經(jīng)打開了?(用循環(huán)來判斷)
foreach (Form childrenForm in this.MdiChildren)
{
//檢測是不是當(dāng)前子窗體名稱
if (childrenForm.Name == "子窗體名稱")
{
//是的話就是把他顯示
childrenForm.Visible = true;
//并激活該窗體
childrenForm.Activate();
return;
}
}
//下面是打開子窗體
Form1 childrenForm = new Form1();
childrenForm.MdiParent = this;
childrenForm.Show();
childrenForm.WindowState = FormWindowState.Maximized;

-------------------------------------------------------
這樣也行:
frmPurvey frmp = new frmPurvey();//創(chuàng)建要打開的窗體對象
bool isOpen = true;
foreach (Form frm in this.MdiChildren)//遍歷已打開的MDI
{
if (frm.Name == frmp.Name)
{
frmp.Activate();//賦予焦點(diǎn)
frmp.WindowState = FormWindowState.Maximized;//設(shè)置窗體最大化
isOpen = false;
break;
}
}
if (isOpen)//如果沒有找到相同窗體則打開新窗體
{
frmp.MdiParent = this;//設(shè)置父窗體
frmp.Show();
}

 

2,非MDI

利用.net Framework 2.0新加的Application.OpenForms集合解決:
bool isOpen = false; //初始為未打開狀態(tài)
Form2 frm2= new Form2();
foreach (Form frm in Application.OpenForms) //遍歷已打開窗口
{
if (frm.name == frm2.name)
{
//如果此窗口已打開
isOpen = true;
break;
}
}

if (!isOpen) //如果窗體未打開,顯示窗體
{
frm2.Show();
}
開心了一會兒,又發(fā)現(xiàn):當(dāng)打開其它窗體后,再想使用這個Form2時,按按鈕無法激活它了,郁悶。
加上
else
{
frm2.Activate();
}
沒用,還是無法激活,又在網(wǎng)上找了好久,還是沒找到合用的。沒法了,不能偷懶了。
分析一下發(fā)現(xiàn),我在 foreach 之前創(chuàng)建了窗體對象:Form2 frm2= new Form2(); 然后下面代碼再進(jìn)行判斷。那不就成了每次Activate()時都是對一個新建的對象進(jìn)行激活嗎,這樣肯定與原來已經(jīng)打開的窗體無關(guān)啊,原因應(yīng)該在這兒。

修改代碼為:
bool isOpen = false; //初始為未打開狀態(tài)
foreach (Form frm in Application.OpenForms) //遍歷已打開窗口
{
if (frm is Form2)
{
//如果此窗口已打開,則激活
frm.Activate();
isOpen = true;
break;
}
}
if (!isOpen) //如果窗體未打開,創(chuàng)建窗體對象并顯示
{
Form2 frm2= new Form2();
frm2.Show();
}

OK,成功!??!
 

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI