天天看点

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);
            }
        }