C#通过反射打开相应窗体方法

C#单击菜单栏或工具栏时通过反射打开窗体的方法,可以以取代长长的if-else或switch-case语句。要点:将菜单或工具栏项的名称设置为与相应窗体名称相同(关键)。

private void MenuItem_Click(object sender, EventArgs e)
{
   ToolStripMenuItem menuItem = (ToolStripMenuItem)sender;
   Form form = (Form)Assembly.Load(“您的程序集名称”).CreateInstance(“窗体命名空间. “+ menuItem.Name); //注意: 窗体命  名空间后面一定要加一个点
   form.MdiParent = this; //如果是Mdi窗体的话请加这一行
   form.Show();
}

如果我们的一个窗体里有N个窗体,或者是有一Tree需要对应的调用N个窗体话,如果使用IF ELse方法可能会很麻烦,一般可能我会们这样写

private void button3_Click(object sender, EventArgs e)
    {
      //获取单击的Button名称
      string btnname = ((Button)sender).Name;
      if (btnname == "button1")
      {
        //处理窗体
      }
      else if (btnname == "button2")
      {
        //处理窗体
      }
      else
      {
        //处理窗体
      }
    }

这样也不是不可 行,但是如果100多个上千个就不行了, 可以说超过10个就不好玩了,但是如果使用反射就很方便 ,只需要几行代码就可以的, 
看下面的方法吧

/// <summary>
    /// 打开新的子窗体
    /// </summary>
    /// <param name="strName">窗体的类名</param>
    /// <param name="AssemblyName">窗体所在类库的名称</param>
    public static void CreateForm(string strName, string AssemblyName)
    {
      string path = AssemblyName;//项目的Assembly选项名称
      string name = strName; //类的名字
      Form doc = (Form)Assembly.Load(path).CreateInstance(name);
      doc.Show();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      //获取单击的Button名称
      string btnname = ((Button)sender).Text;
      CreateForm("WindowsFormsApplication1." + btnname, "WindowsFormsApplication1");
    }

有了上面的方法,只要我们的用户控件Text和窗体的类名一样就可能实现动态加载了,当然如果有的同志说我的Text要用汉字怎么办,那就再换个属性啊,比如Name或者是其他属性都可以。总之肯定比你一个一个的去写要方便很多

时间: 2024-11-05 12:09:28

C#通过反射打开相应窗体方法的相关文章

Response.Redirect 打开新窗体的两种方法

普通情况下,Response.Redirect 方法是在server端进行转向,因此,除非使用 Response.Write("<script>window.location='http://dotnet.aspx.cc';</script>") 方法外,是不能在新窗体打开所指定的  URL 地址的.可是,假设细致分析一下,假设设置 form 元素的 target 属性,还是有办法打开新窗体的.以下就是能够採用的两种方法. 方法一:在server端设置 targ

【2017-04-27】布局及容器控件、打开多窗体、构造函数传值、打开唯一窗口

一.布局和容器控件 1.布局属性 - Anchor  控件定位锁死在那个位置,根据哪个位置锁死. - Dork     填充满.填充上下左右. - Location  位置. 2.容器控件 - Panel  相当于html中的div. - FlowLayoutPanel  继承自Panel,多了流式布局功能 - GroupBox    继承自Panel,多了一个标题,有小虚线. - TabControl  选项卡 选项卡修改标题,用选项卡的TabPages属性,在每个选项卡标题对应的Text属性

window.open 打开子窗体,关闭全部的子窗体

需求:通过window.open方法打开了子窗体,当关闭主窗体时.子窗体应当也关闭. 实现思路: 1.打开子窗体函数window.open(url,winName)的第二个參数winName能够唯一标识打开的窗体.因此关闭子窗体仅仅须要使用winName.close()函数就可以. 2.一个页面可能有多个子窗体. 因此须要一个数组存储全部子窗体对象.关闭时,遍历数组就可以. 3.子窗体还能够再打开子窗体. 无限循环下去.因此须要推断. 此需求能够通过两个方法实现. 调用子窗体的关闭函数. 此方法

多窗体、窗体传值、打开唯一窗体操作

一.打开多子窗口 在控件中实例化要打开的窗体,再调方法show 例:在按钮中打开f2窗体 form2 f2=new form2() f2.show() 二.构造函数传值 1.在实例化中添加参数,展示信息类型,打开窗体类型 2.要打开窗体中构造函数接受 三.打开窗口唯一 1.实例化要打开窗口,并放到类型集合中 2.判断窗口是否在集合中,不在打开 3.构造函数传父级窗口 4.子级窗口关闭时调删除集合中子级窗口方法 例:

WinForm------如何打开子窗体的同时关闭父窗体

方法: 如何打开子窗体的同时关闭父窗体 this.Hide(); new Frm_Management().ShowDialog(); this.Close();

winform打开唯一窗体、构造函数传值

制作登入窗体: 制作一个登陆窗体,实现点击按钮关闭此窗体并打开另一个窗体 直接在按钮点击事件中,实例化一个想要打开的窗体 使用show方法打开,并把登陆窗体的visible属性改为false Form1 f1 = new Form1(); f1.Show(); this.Visible = false; 另:这样写的话再关闭第二个窗口的时候,程序并没有完全结束,第一个登陆窗口仍然存在,虽然不显示 因此我们用到构造函数传值,并且这样可以实现打开唯一窗口(不重复打开同一个窗口) 构造函数传值: 构造

modalDialog的使用,图片切换,点击图片时打开一个窗体,并显示信息

//主窗体 //与open的区别:1.参数二是传递的参数 2.属性设置格式:属性=属性值; 3.dialogHeight与dialogWidth没有单位,即需要自己加上px //window.showModalDialog //("modalDialog.html",window,"dialogHeight=300px;dialogWidth=300px;scroll=yes;status=yes;dialogTop=100;dialogLeft=100;resizable=

window.opener调用父窗体方法的用法

应用实例:        function BindWindowCloss() {            $(window).bind('beforeunload', function () {                window.opener.$("form").submit();            });        } window.opener 实际上就是通过window.open打开的窗体的父窗体. 比如在父窗体parentForm里面 通过 window.op

面向对象之: 反射和双下方法

目录 一, 反射 二, 函数VS方法 三, 双下方法 一, 反射 反射:程序可以访问,检测和修改它本身状态或行为的一种能力(自省) python面向对象中的反射:通过字符串的形式操作对象相关的属性 python中的一切事物都是对象(都可以使用反射) 四个可以实现自省的函数,下列方法适用于类和对象(一切对象,类本身也是对象) # 对实例化对象的示例 class Foo: f = '类的静态变量' def __init__(self, name, age): self.name = name sel