http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 58720|回复: 31

[Winform] C#反射动态调用窗体,动态实例化窗体的方法

[复制链接]
发表于 2013-5-6 11:08:31 | 显示全部楼层 |阅读模式
                  C#反射动态调用窗体,动态实例化窗体的方法

其实这个问题很简单只要我们使用一点点反射的原理就行了,
看下面的方法吧
QQ截图20130513152428.jpg
单击那个按钮就会出现那个窗体,
如果非常多的按钮的话我们是不是一般会这样写
[C#] 纯文本查看 复制代码
private void button3_Click(object sender, EventArgs e)
        {
            //获取单击的Button名称
            string btnname = ((Button)sender).Name;
            if (btnname == "button1")
            {
                //处理窗体
            }
            else if (btnname == "button2")
            {
                //处理窗体
            }
            else
            {
                //处理窗体
            }
        }

这样也不是不可 行,但是如果100多个上千个就不行了,
可以说超过10个就不好玩了,但是如果使用反射就很方便 ,只需要几行代码就可以的,
看下面的方法吧
[C#] 纯文本查看 复制代码
  /// <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或者是其他属性都可以。总之肯定比你一个一个的去写要方便很多
 如果你是使用的子窗体的方式
而不是用户控件还可以使用下面方法判断是否已打开
下面的提供下代码
WindowsFormsApplication1.zip (51.76 KB, 下载次数: 2103)


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2013-5-6 11:33:51 | 显示全部楼层
给力,加油站长
发表于 2013-5-9 14:51:32 | 显示全部楼层
支持一下
发表于 2013-5-10 21:14:47 | 显示全部楼层
好吧  必须支持下  毕竟是一个地方的  
发表于 2013-6-25 23:38:16 | 显示全部楼层
呵呵
回复

使用道具 举报

发表于 2013-7-14 22:27:15 | 显示全部楼层
支持。。。
回复

使用道具 举报

发表于 2013-7-14 22:54:34 | 显示全部楼层
之前写了一个权限动态加载菜单,但是点击后,不能打开对应的FORM,还是手工添加的打开对应FORM的程序,明天试试你这个方法。。
 楼主| 发表于 2013-7-15 08:11:57 | 显示全部楼层
chenwu0815 发表于 2013-7-14 22:54
之前写了一个权限动态加载菜单,但是点击后,不能打开对应的FORM,还是手工添加的打开对应FORM的程序,明天 ...

我一直是这么用的,你要吧试试,应该没有问题,如有什么问题可以发帖子
发表于 2013-7-15 12:06:32 | 显示全部楼层
站长苏飞 发表于 2013-7-15 08:11
我一直是这么用的,你要吧试试,应该没有问题,如有什么问题可以发帖子

已经测试OK。。通过查询数据库中的权限对应的Form名称,直接打开对应Form。。感谢
 楼主| 发表于 2013-7-15 12:12:05 | 显示全部楼层
chenwu0815 发表于 2013-7-15 12:06
已经测试OK。。通过查询数据库中的权限对应的Form名称,直接打开对应Form。。感谢

不客气
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-4-26 05:25

© 2014-2021

快速回复 返回顶部 返回列表