当前位置: 代码迷 >> C# >> 重新加载子窗体解决思路
  详细解决方案

重新加载子窗体解决思路

热度:8   发布时间:2016-05-05 03:49:07.0
重新加载子窗体
主窗体里有三个button和一个panel,
其中点击button1加载form1,
button2加载form2,
子窗体都显示在panel里
点击button3判断panel加载的是哪子窗体,并重新加载

button3功能如何实现呢


        private void button1_BTN_Click(object sender, EventArgs e)
        {
            PCenter.Controls.Clear();
            Form1 F1= new Form1();
            F1.TopLevel = false;
            F1.Parent = this.PCenter;
            F1.Dock = DockStyle.Fill;
            F1.Show();
        private void button2_BTN_Click(object sender, EventArgs e)
        {
            PCenter.Controls.Clear();
            Form2 F2= new Form2();
            F2.TopLevel = false;
            F2.Parent = this.PCenter;
            F2.Dock = DockStyle.Fill;
            F2.Show();

        }

        private void button3_BTN_Click(object sender, EventArgs e)
        {
                 PCenter.Controls[0].Refresh();
                 PCenter.Controls[0].Show();
       }

------解决思路----------------------
引用:
Quote: 引用:

Quote: 引用:

通过                 PCenter.Controls[0].GetType()
能得到子窗体的名称,现在是不知道怎么创建它,子窗体比较多,用判断名称的方式可以创建,有点繁琐,有没有简单点的方式,不用判断名称直接创建的,


string formName = String.Empty;
//Button1单击事件
formName = "Form1";

//Button2单击事件
formName = "Form2";

//ButtonN单击事件
formName = "FormN";

//Button3单击事件
--使用formName通过反射获取窗体,不是进行switch判断

通过反射获取窗体,这块不懂,在网上查了一下,没有做出来,可否给个例子呢,

 Form FSub = (Form)Assembly.Load("Build Energy Research").CreateInstance(FName);
            PCenter.Controls.Clear();
            FSub.TopLevel = false;
           FSub.Parent = this.PCenter;
            FSub.Dock = DockStyle.Fill;
            FSub.Show();

总是说对象实例未引用


Form _CurrentForm = (Form)Assembly.Load("Form所在exe名称").CreateInstance("命名空间.窗体名称");

------解决思路----------------------
实现方案有很多,还可以重载Panel,添加事件,然后在注册事件时调用窗体实现的事件。也可实现刷新,而无需整个窗体重新加载。
  相关解决方案