C#Winform開啟窗體的幾種方法、注意事項的總結
C#Winform開啟窗體的幾種方法、注意事項的解決
一、開啟MDI子窗體,且允許重複開啟
FrmMytest frmMytest = new FrmMytest();
frmMytest.MdiParent = this;
frmMytest.Show();
二、開啟MDI子窗體,但不允許重複開啟;即如果窗體未開啟過,則直接開啟,如果開啟過,原來的窗體直接顯示在最上面
int index = HaveOpened(this, "FrmMytest");
if (index == -1)
{
FrmMytest frmMytest = new FrmMytest();
frmMytest.MdiParent = this;
frmMytest.Show();
}
else
{
this.MdiChildren[index].Show();
}
/// <summary>
/// 功能名稱:檢視MDI子窗體是否已經被開啟
/// 輸入引數:MdiFather,Form,需要判斷的父窗體物件
/// MdiChild,string,需要判斷的子窗體控制元件名
/// 返回結果:-1為沒有被開啟,正數為子窗體集的陣列下標
/// </summary>
public static int HaveOpened(Form frmMdiFather, string strMdiChild)
{
int bReturn = -1;
for (int i = 0; i < frmMdiFather.MdiChildren.Length; i++)
{
if (frmMdiFather.MdiChildren[i].Name == strMdiChild)
{
frmMdiFather.MdiChildren[i].BringToFront();
bReturn = i;
break;
}
}
return bReturn;
}
三、show的方法
1、非模式窗體的開啟方法
new FrmMytest().Show();
2、模式窗體的開啟方法
FrmMytest frmMytest = new FrmMytest();
frmMytest.ShowDialog();
四、說明
1、需求,開啟的子窗體不會在windows工作列中顯示,避免使用者感覺一個系統有多個執行的問題
2、主窗體設定屬性IsMdiContainer = true,MDI子窗體IsMdiContainer = false,否則系統編譯時會報錯。
3、show的方法,開啟的子窗體不會在windows工作列中顯示的問題,需要在子窗體的屬性中,將Form.ShowInTaskbar設定為false;但如果程式中加入了斷點,想從程式中返回子窗體時有問題,在windows工作列中找不到這項,即無法讓新窗體再次顯示,有好的解決方法嗎???。