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