您好,登錄后才能下訂單哦!
1,MDI類型
在打開事件中直接檢測是否已經打開此MDI窗體
// 是否已經打開了?(用循環來判斷)
foreach (Form childrenForm in this.MdiChildren)
{
//檢測是不是當前子窗體名稱
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();//創建要打開的窗體對象
bool isOpen = true;
foreach (Form frm in this.MdiChildren)//遍歷已打開的MDI
{
if (frm.Name == frmp.Name)
{
frmp.Activate();//賦予焦點
frmp.WindowState = FormWindowState.Maximized;//設置窗體最大化
isOpen = false;
break;
}
}
if (isOpen)//如果沒有找到相同窗體則打開新窗體
{
frmp.MdiParent = this;//設置父窗體
frmp.Show();
}
2,非MDI
利用.net Framework 2.0新加的Application.OpenForms集合解決:
bool isOpen = false; //初始為未打開狀態
Form2 frm2= new Form2();
foreach (Form frm in Application.OpenForms) //遍歷已打開窗口
{
if (frm.name == frm2.name)
{
//如果此窗口已打開
isOpen = true;
break;
}
}
if (!isOpen) //如果窗體未打開,顯示窗體
{
frm2.Show();
}
開心了一會兒,又發現:當打開其它窗體后,再想使用這個Form2時,按按鈕無法激活它了,郁悶。
加上
else
{
frm2.Activate();
}
沒用,還是無法激活,又在網上找了好久,還是沒找到合用的。沒法了,不能偷懶了。
分析一下發現,我在 foreach 之前創建了窗體對象:Form2 frm2= new Form2(); 然后下面代碼再進行判斷。那不就成了每次Activate()時都是對一個新建的對象進行激活嗎,這樣肯定與原來已經打開的窗體無關啊,原因應該在這兒。
修改代碼為:
bool isOpen = false; //初始為未打開狀態
foreach (Form frm in Application.OpenForms) //遍歷已打開窗口
{
if (frm is Form2)
{
//如果此窗口已打開,則激活
frm.Activate();
isOpen = true;
break;
}
}
if (!isOpen) //如果窗體未打開,創建窗體對象并顯示
{
Form2 frm2= new Form2();
frm2.Show();
}
OK,成功!!!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。