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

 更新时间:2015年05月18日 08:43:47   投稿:hebedich  
本文章来给各位同学介绍关于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或者是其他属性都可以。总之肯定比你一个一个的去写要方便很多

以上所述就是本文的全部内容了,希望大家能够喜欢。

相关文章

  • C# 中的partial 关键字详解

    C# 中的partial 关键字详解

    这篇文章主要介绍了C# 中的partial 关键字,partial 关键字用于拆分一个类、一个结构、一个接口或一个方法的定义到两个或更多的文件中,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • C#生成随机字符串的实例

    C#生成随机字符串的实例

    本文介绍了“C#生成随机字符串的实例”,需要的朋友可以参考一下
    2013-03-03
  • 利用WPF实现Windows屏保的制作

    利用WPF实现Windows屏保的制作

    屏保程序的本质上就是一个Win32 窗口应用程序。本文将利用WPF实现Windows屏保的制作,文中的示例代码简洁易懂,对我们学习WPF有一定帮助,感兴趣的可以了解一下
    2022-07-07
  • asp.net新闻列表生成静态页之批量和单页生成

    asp.net新闻列表生成静态页之批量和单页生成

    web程序的高访问量、大数据量、高效的用户体验度,使静态页技术在越来越多的网站上发挥作用。这篇文章主要介绍asp.net新闻列表生成静态页之批量和单页生成,有需要的朋友可以参考下
    2015-08-08
  • DataGridView清除显示的数据、设定右键菜单

    DataGridView清除显示的数据、设定右键菜单

    这篇文章介绍了DataGridView清除显示的数据、设定右键菜单的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-02-02
  • C#中如何将MongoDB->RunCommand结果映射到业务类的方法总结

    C#中如何将MongoDB->RunCommand结果映射到业务类的方法总结

    这篇文章主要给大家总结介绍了关于C#中如何将MongoDB->RunCommand结果映射到业务类的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2018-04-04
  • C#基于数据库存储过程的AJAX分页实例

    C#基于数据库存储过程的AJAX分页实例

    这篇文章主要介绍了C#基于数据库存储过程的AJAX分页实现方法,以实例形式详细讲述了数据库存储过程的定义、数据库的访问及Ajax的实现技巧,需要的朋友可以参考下
    2015-01-01
  • C#实现递归调用的Lambda表达式

    C#实现递归调用的Lambda表达式

    这篇文章介绍了C#实现递归调用的Lambda表达式,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • 深入理解c#多态

    深入理解c#多态

    这篇文章主要介绍了c#多态的相关知识,文中代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-06-06
  • 超炫酷的WPF实现Loading控件效果

    超炫酷的WPF实现Loading控件效果

    这篇文章主要介绍了超炫酷的WPF实现Loading控件效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2015-11-11

最新评论