天天看点

c#通过反射打开窗体并清理多余窗体

1.具体需求如下为:随意画两个子窗体Form2和Form3,点击打开Form2判断panel中现有窗体,如果panel中不存在任何子窗体,则更新Form2到panel1;如果panel中存在子窗体,分为两种情况:1)子窗体是Form2窗体,则直接返回;2)子窗体是其他窗体,则清理其他窗体。按钮打开Form3类似,具体设计页面如下:

c#通过反射打开窗体并清理多余窗体

2.打开From2按钮代码:

           Control.ControlCollection Children = this.panel1.Controls; //读取panel1下所有窗体

            foreach (Control item in Children)

            {

                if (item.Name == "Form2") //如果Form2打开则直接返回

                {

                    return;

                }

                else//如果存在其他窗体则删除

                {

                    item.Dispose();

                }

            }

            string path = "XMLconvert";//项目的命名空间

            string name = "XMLconvert.Form2"; //项目类的名字  

            Form doc = (Form)Assembly.Load(path).CreateInstance(name); //获取窗体

            doc.WindowState = FormWindowState.Maximized;

            doc.TopLevel = false;

            doc.FormBorderStyle = FormBorderStyle.None;

            doc.Dock = DockStyle.Fill;

            doc.Parent = this.panel1;

            this.panel1.Controls.Add(doc);

            doc.Show(); 

3.打开From3按钮代码(代码同上):

            Control.ControlCollection Children = this.panel1.Controls;

            foreach (Control item in Children)

            {

                if (item.Name == "Form3")

                {

                    return;

                }

                else

                {

                    item.Dispose();

                }

            }

            string path = "XMLconvert";//项目的Assembly选项名称  

            string name = "XMLconvert.Form3"; //类的名字  

            Form doc = (Form)Assembly.Load(path).CreateInstance(name);

            doc.WindowState = FormWindowState.Maximized;

            doc.TopLevel = false;

            doc.FormBorderStyle = FormBorderStyle.None;

            doc.Dock = DockStyle.Fill;

            doc.Parent = this.panel1;

            this.panel1.Controls.Add(doc);

            doc.Show();