1. 程式人生 > >C#Winform開啟窗體的幾種方法、注意事項的總結

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工作列中找不到這項,即無法讓新窗體再次顯示,有好的解決方法嗎???。