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

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

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

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

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

楼主: 站长苏飞

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

[复制链接]
 楼主| 发表于 2013-8-21 11:16:22 | 显示全部楼层
chenwu0815 发表于 2013-8-21 11:12
private void GetUserInfo()
        {
            Assembly assembly = Assembly.Load("Improvemen ...

Public方法定义在子窗体,在主窗体得到对象之后直接调用就行了,就是一个方法,
类名.方法名
这样调用。
传值


你要不发个新的帖子吧,这里有点回贴不对主题了。






1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2013-8-21 11:54:59 | 显示全部楼层
好的。。重新发个窗体传值的主题。
发表于 2013-8-21 13:23:53 | 显示全部楼层
站长苏飞 发表于 2013-8-21 11:16
Public方法定义在子窗体,在主窗体得到对象之后直接调用就行了,就是一个方法,
类名.方法名
这样调用 ...

我想的是,从权限管理、动态实例化窗体,到窗体传值这一系列弄个完整方案。。
目前结合你的“动态实例化窗体”,就差实例化后传值这一点了。。
 楼主| 发表于 2013-8-21 14:33:42 | 显示全部楼层
chenwu0815 发表于 2013-8-21 13:23
我想的是,从权限管理、动态实例化窗体,到窗体传值这一系列弄个完整方案。。
目前结合你的“动态实例化 ...

我不是给你回复了吗?
[code=csharp]/// <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();
        }[/code]
你看这个代码里的 Form doc = (Form)Assembly.Load(path).CreateInstance(name);
这个doc就是你实例化后的窗体对象,
如果你事先在窗体里有定义的Public的方法就可以这样用
doc.SetAtr(naem,sex,age);
SetAtr事先写到你实例化的窗体里。
这样不就传值了吗?
发表于 2013-9-16 10:08:58 | 显示全部楼层
受教了,学习中……
发表于 2013-9-16 10:09:38 | 显示全部楼层
thxs fr share!
发表于 2014-6-11 22:03:59 | 显示全部楼层
强烈支持楼主ing……基础知识必须掌握
发表于 2014-9-4 12:55:21 | 显示全部楼层
强烈支持楼主ing……
发表于 2015-3-21 10:53:59 | 显示全部楼层
如果要动态显示窗体里面的控件有什么好办法?
发表于 2016-3-7 14:03:49 | 显示全部楼层
纠正一下。
[C#] 纯文本查看 复制代码
/// <summary>  
        /// 打开新的子窗体  
        /// </summary>  
        /// <param name="strName">窗体的类名</param>  
        /// <param name="AssemblyName">窗体所在类库的名称</param>  
        /// <param name="MdiParentForm">父窗体</param>  
        public static void CreateForm(string strName, string AssemblyName, Form MdiParentForm)  
        {  
            int Index = strName.LastIndexOf(".");  
            string FormName = strName.Substring(23);  
            if (!ShowChildForm(FormName, MdiParentForm))  
            {  
                string path = AssemblyName;//项目的Assembly选项名称  
                string name = strName; //类的名字  
                Form doc = (Form)Assembly.Load(path).CreateInstance(name);  
                doc.WindowState = FormWindowState.Maximized;  
                doc.MdiParent = MdiParentForm;  
                doc.Show();  
            }  
        }  
   
        /// <summary>  
        /// 防止子窗体再度打开  
        /// </summary>  
        /// <param name="p_ChildrenFormText"></param>  
        /// <param name="MdiParentForm"></param>  
        /// <returns></returns>  
        public static bool ShowChildForm(string p_ChildrenFormText, Form MdiParentForm)  
        {  
            int i;  
            //依次检测当前窗体的子窗体  
            for (i = 0; i < MdiParentForm.MdiChildren.Length; i++)  
            {  
                //判断当前子窗体的Text属性值是否与传入的字符串值相同  
                if (MdiParentForm.MdiChildren.Name == p_ChildrenFormText)  
                {  
                    //如果值相同则表示此子窗体为想要调用的子窗体,激活此子窗体并返回true值  
                    MdiParentForm.MdiChildren.Activate();  
                    return true;  
                }  
            }  
            //如果没有相同的值则表示要调用的子窗体还没有被打开,返回false值  
            return false;  
        }

改为:
[C#] 纯文本查看 复制代码
        /// <summary>  
        /// 打开新的子窗体  
        /// </summary>  
        /// <param name="strName">窗体的类名</param>  
        /// <param name="AssemblyName">窗体所在类库的名称</param>  
        /// <param name="MdiParentForm">父窗体</param>  
        public static void CreateForm(string strName, string AssemblyName, Form MdiParentForm)
        {
            int Index = strName.LastIndexOf(".") + 1;
            string FormName = strName.Substring(Index, strName.Length - Index);
            if (!ShowChildForm(FormName, MdiParentForm))
            {
                string path = AssemblyName;//项目的Assembly选项名称  
                string name = strName; //类的名字  
                Form doc = (Form)Assembly.Load(path).CreateInstance(name);
                doc.WindowState = FormWindowState.Maximized;
                doc.MdiParent = MdiParentForm;
                doc.Show();
            }
        }

        /// <summary>  
        /// 防止子窗体再度打开  
        /// </summary>  
        /// <param name="p_ChildrenFormText"></param>  
        /// <param name="MdiParentForm"></param>  
        /// <returns></returns>  
        public static bool ShowChildForm(string p_ChildrenFormText, Form MdiParentForm)
        {
            int i;
            //依次检测当前窗体的子窗体  
            for (i = 0; i < MdiParentForm.MdiChildren.Length; i++)
            {
                //判断当前子窗体的Text属性值是否与传入的字符串值相同  
                if (MdiParentForm.MdiChildren[i].Name == p_ChildrenFormText)
                {
                    //如果值相同则表示此子窗体为想要调用的子窗体,激活此子窗体并返回true值  
                    //MdiParentForm.MdiChildren[i].Visible = true;
                    MdiParentForm.MdiChildren[i].Activate();
                    
                    return true;
                }
            }
            //如果没有相同的值则表示要调用的子窗体还没有被打开,返回false值  
            return false;
        }


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

本版积分规则

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

GMT+8, 2024-11-14 14:59

© 2014-2021

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