C#WinForm 实现区域功能(窗口切换)

目录

1.直接传参法

2. 使用反射

2.1利用 GetMethod(获取指定名称的方法)

 2.2  Activator.CreateInstance(返回对新创建对象的引用)

1.直接传参法

此方法粗暴,虽然容易理解,但是不适合后面的管理

        private void button3_Click(object sender, EventArgs e)
        {
            TypeFrom2(new BaseRole());
        }
         public void TypeFrom2(Form from)
        {
            //首先要判断存放窗体的控件panle3是否为空
            if (panel3.Controls.Count > 0)
            {
                panel3.Controls.Remove(panel3.Controls[0]);
            }
            Form form1 = from;//实例化一个新窗体对象等于传参窗体
            from.TopLevel = false;  //必须要有的:是否将窗体显示为顶层窗体

            //此时还不是最完美的,还需要将切换的窗体的边框去掉
                from.FormBorderStyle = FormBorderStyle.None;//或者通过属性设置;

            panel3.Controls.Add(from);//将窗体存放到Panle容器中
            from.Show();//展示
            
            
        }

2. 使用反射

2.1利用 GetMethod(获取指定名称的方法)

首先:需要建立一个充当反射的类,在类中 建立方法,注意此时返回值需要返回窗体类

 internal class Class1
    {
       // [ParentMenuForm("人员", "编号")]
        public static BaseUser BaseUser()
        {
            return new BaseUser();
        }
    }

第二:在事件中利用反射获取反射类中的方法,并利用 AS关键字实现

   private void Test(Form _from) {
            if (panel3.Controls.Count > 0)
            {
                panel3.Controls.Remove(panel3.Controls[0]);
            }
            //将反射类 type类中
            Type type = typeof(Class1);
            //获取反射类中的方法
            MethodInfo data = type.GetMethod("BaseUser");
            //传参:形式
            object form = data.Invoke(null, new object[0]);
            //和上面一样
            _from=form as BaseUser;
            _from.TopLevel = false;
            panel3.Controls.Add(_from);
            _from.Show();
        }

 2.2  Activator.CreateInstance(返回对新创建对象的引用)

此方法适合,所有切换的窗口都继承于·同一个窗口(不用创建反射类)

 public void TypeFrom(Type type)
        {
            if (panel3.Controls.Count > 0)
            {
                panel3.Controls.Remove(panel3.Controls[0]);
            }
            //用父类当实例=                                              子类
            PartentFrom from = (PartentFrom)Activator.CreateInstance(type);
            //Activator 用以在本地或远程创建对象类型
            //BaseRole f = new BaseRole();
            from.TopLevel = false;
            panel3.Controls.Add(from);
            from.Show();
        }

 private void button2_Click(object sender, EventArgs e)
        {
            TypeFrom(typeof(BaseRole));
        }

 

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

薄荷撞~可乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值