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

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

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

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

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

查看: 69505|回复: 31
打印 上一主题 下一主题

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

[复制链接]
楼主
发表于 2013-7-14 22:27:15 | 显示全部楼层
支持。。。


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
回复

使用道具 举报

沙发
发表于 2013-7-14 22:54:34 | 显示全部楼层
之前写了一个权限动态加载菜单,但是点击后,不能打开对应的FORM,还是手工添加的打开对应FORM的程序,明天试试你这个方法。。
板凳
发表于 2013-7-15 12:06:32 | 显示全部楼层
站长苏飞 发表于 2013-7-15 08:11
我一直是这么用的,你要吧试试,应该没有问题,如有什么问题可以发帖子

已经测试OK。。通过查询数据库中的权限对应的Form名称,直接打开对应Form。。感谢
地板
发表于 2013-8-19 11:52:47 | 显示全部楼层

现在在考虑传值的问题,需要将user的几个值传到打开后的FORM。。。
5
发表于 2013-8-20 14:16:40 | 显示全部楼层
站长苏飞 发表于 2013-8-19 12:47
Form doc = (Form)Assembly.Load(path).CreateInstance(name);
doc就是窗体对象,直接调用里面的变量赋 ...

我之前用的是这样的传值方式  Complaint complaint = new Complaint(username,name,branch,isCharge);complaint.MdiParent = this;
complaint.Show();



Complaint 为我需要打开的Form名称。。
6
发表于 2013-8-20 14:37:06 | 显示全部楼层
站长苏飞 发表于 2013-8-19 12:47
Form doc = (Form)Assembly.Load(path).CreateInstance(name);
doc就是窗体对象,直接调用里面的变量赋 ...

那我需要怎么修改程序来实现类似的传值呢?
7
发表于 2013-8-20 15:41:37 | 显示全部楼层
站长苏飞 发表于 2013-8-20 15:27
Complaint()这应该是你的构造方法吧,你之前是通过构造方法来传值的,现在不要通过这个来传值就行了,
...

之前子窗体就用通过如下来获取的。

public Complaint(string username, string name, string branch, string IsCharge)
        {
            this.username = username;
            this.name = name;
            this.branch = branch;
            this.IsCharge = IsCharge;
            InitializeComponent();
        }

8
发表于 2013-8-21 11:12:32 | 显示全部楼层
站长苏飞 发表于 2013-8-20 16:13
把这个提取成一个Public方法就行了,安我楼上说的去做,
还有就是可以看楼上的文章直接通过反射处理

  private void GetUserInfo()
        {
            Assembly assembly = Assembly.Load("Improvement");                  
            Type type = assembly.GetType("Improvement.BaseLIBS.userInfo");      
            object instance = assembly.CreateInstance("Improvement.BaseLIBS.userInfo");        
            object value = type.GetMethod("name").Invoke(instance, null);
        }

我通过你连接的方法,可以获得类中的 “name”的值,那我在Main主窗体中的几个值,如何动态添加到这个类里?还请帮忙?

另外,你说的 Public方法 ,具体如何实现从Main窗体传过去呢?

感谢

9
发表于 2013-8-21 11:54:59 | 显示全部楼层
好的。。重新发个窗体传值的主题。
10
发表于 2013-8-21 13:23:53 | 显示全部楼层
站长苏飞 发表于 2013-8-21 11:16
Public方法定义在子窗体,在主窗体得到对象之后直接调用就行了,就是一个方法,
类名.方法名
这样调用 ...

我想的是,从权限管理、动态实例化窗体,到窗体传值这一系列弄个完整方案。。
目前结合你的“动态实例化窗体”,就差实例化后传值这一点了。。
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

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

GMT+8, 2024-12-23 00:04

© 2014-2021

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