天天看點

c#中子窗體切換

之前做過一個子窗體間切換的程式,當時寫的比較亂,現在又用到了,是以重新整理了下;

建立一個窗體切換類:FrmChangingOver

public class FrmChangingOver
    {  
            /// <summary>
            /// 窗體關閉
            /// </summary>
            /// <param name="Open_FrmName">要打開的窗體name</param>
            /// <param name="ParentFrm">在哪打開</param>
            /// <returns></returns>
        public bool CloseWindow(String Open_FrmName, SplitContainer ParentFrm)
        {
            bool Res = false;
            /*判斷容器中控件是否是窗體,
             * 如果是窗體,判斷窗體.Name和傳入的Open_FrmName是否一緻,
             * 如果一緻,則傳回“已建立窗體,即true”
             * 如果不一緻,關閉容器上的窗體,并傳回“未建立窗體,即false”
             */
            foreach (Control ct in ParentFrm.Panel1.Controls)
            {
                if (ct is Form)
                {
                    Form frm = (Form)ct;
                    if (frm.Name == Open_FrmName)
                    {
                        Res = true;//若傳回true,則不建立窗體
                        break;
                    }
                    else
                    {
                        Res = false;
                        frm.Close();//窗體關閉,同時建立新窗體
                    }
                }
            }
            return Res;
        }

        /// <summary>
        /// 打開窗體
        /// </summary>
        /// <param name="ChildFrm">子窗體</param>
        /// <param name="ParentFrm">父窗體</param>
        public void OpenWindow(Form ChildFrm, SplitContainer ParentFrm)
        {
            ChildFrm.TopLevel = false;
            ChildFrm.FormBorderStyle = FormBorderStyle.None;
            ChildFrm.Dock = DockStyle.Fill;
            ChildFrm.Parent = ParentFrm.Panel1;
            ChildFrm.Show();
        }
    }
           

建立一個Mian窗體 兩個子窗體FrmView,FrmAlam;如果有多個子窗體,隻是在點選事件更換窗體.Name即可

public Form1()
        {
            InitializeComponent();
        }

        Common.FrmChangingOver frm_change=new Common.FrmChangingOver();
     //splitContainer2.Panel2 為子窗體所在的容器
        private void BtnFrmView_Click(object sender, EventArgs e)
        {
            if(frm_change.CloseWindow("FrmView",splitContainer2)==false)
            {
                FrmView frmview = new FrmView();
                frm_change.OpenWindow(frmview, splitContainer2);
            }
        }

        private void BtnFrmAlam_Click(object sender, EventArgs e)
        {
            if (frm_change.CloseWindow("FrmAlam", splitContainer2) == false)
            {
                FrmAlam frmalam=new FrmAlam();
                frm_change.OpenWindow(frmalam, splitContainer2);
            }
        }