收录日期:2020/10/25 07:04:24 时间:2016/07/16 15:33:50 标签:C#
我想做一个仿用友ERP那种菜单,即在TREE 控件上打开窗体,点到节点的时候,就可以获得窗体名称,但窗体名称只是一个变量,用一个变量打开窗体,我感觉没有办法写代码,请高人指教.非常感谢.
1 使用反射,可以根据名字字符串创建对象
2 在TreeNode的Tag上放置委托,可以调用对应的方法
3 定义一个dictionary<string key, Form value>,然后把名字和窗体对应起来
能不能给一个具体的例子,非常感谢

#region 点击菜单项显示窗体
        /// <summary>
        /// 点击菜单项显示窗体
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void menuItem_Click(object sender, EventArgs e)
        {
            // 获得窗体的名空间
            string strForm = (sender as ToolStripMenuItem).Tag.ToString();
            // 获得Assembly
            Assembly assembly = Assembly.GetExecutingAssembly();
            // 实例化窗体
            Form form = assembly.CreateInstance(strForm) as Form;
            // 窗体设置
            form.TopLevel = false;
            form.WindowState = FormWindowState.Maximized;
            form.FormBorderStyle = FormBorderStyle.None;
            // 加载窗体
            this.panelContainer.Controls.Clear();
            this.panelContainer.Controls.Add(form);
            // 显示窗体
            form.Show();
        }
        #endregion
mark楼上 
string strForm = (sender as ToolStripMenuItem).Tag.ToString();
怎么去理解呀, 这个sender一般是干什么用的,我一直没有用过,原来现在用上了,但是理解不了呀,高人帮忙提个醒.
每天回帖既得10分可用分
每天回帖既得10分可用分 
 // 获得Assembly
            Assembly assembly = Assembly.GetExecutingAssembly(); 
这个用不上,是不是缺命名空间啊
真的是狂晕,我把3楼的代码改成如下
private void button1_Click(object sender, EventArgs e)
        {
            string strform = "view";
            Assembly assembly = Assembly.GetExecutingAssembly();
            Form form = assembly.CreateInstance(strform) as Form;
            form.Show();
        }
也应该是说得过去的,但是报错了,提示为 未将对象引用设置到对象的实例。实际上我的窗体名称就是view,不知道错在那里,请三楼指正
引用 9 楼 zhengyingcan 的回复:
真的是狂晕,我把3楼的代码改成如下
private void button1_Click(object sender, EventArgs e)
        {
            string strform = "view";
            Assembly assembly = Assembly.GetExecutingAssembly();
            Form form = assembly.CreateInstance(strform) as Form;
            form.Show();
        }
也应该是说得过去的,但是报错了,提示为 未将对象引用设置到对象的实例。实际上我的窗体名称就是view,不知道错在那里,请三楼指正

using system.reflection;
10楼的朋友,我已经加了这个命名空间了,还是不行呀,
关注
反射调用窗体
string path=AssemblyName;//项目的Assembly选项名称 
string name=strName; //类的名字 

Form fm=(Form)Assembly.Load(path).CreateInstance(name); 
fm.MdiParent=this.ParentForm; 
fm.Show(); 
学习学习
mark一下.
13楼能不能给个例子,我的QQ是380151700,万分感谢.
up
UP
学习一下
答案出来,就是以下结果
 private void button1_Click(object sender, EventArgs e)
        {
            string strform = "WindowsFormsApplication3.view";
            Assembly assembly = Assembly.GetExecutingAssembly();
            Form form = assembly.CreateInstance(strform) as Form;
            form.Show();            
        }

安装oracl问题 图书馆出资10万购计算机类书籍,弟兄们快来推荐好书吧,来者有分。斑竹手下留情 关于连接数据库的问题(万分火急) 图片链接后的默认边界颜色是蓝色,如何改变成其他颜色?! 怎样用代码实现断开ADSL的拨号连接,在线给分 给别人做软件都应该注意什么? 请问win2000在分别打了sp1,sp2,sp3后的微软拼音输入法分别是什么版本,谢谢 请问关于OpenSheetWithParm打开窗口问题,谢谢! 求救:Excel在进程不显示,为什么????????????? ie 问题 !简单有分 图书馆出资10万购计算机类书籍,弟兄们快来推荐好书吧,来者有分。斑竹手下留情 我的ClassView 不见了我怎么办啊? 键盘消息问题 今天与笔记本亲密接触很爽唉~~~~~~哈哈哈~~~~~ ^v^ 请问哪有好的页面模板可以下载??? 在c#中如何创建SDI应用程序? 为什么我用JAVAMAIL写的发送邮件的程序,接收后附件的名字老是出现的是乱码呢?附原代码,大家帮忙看看 图书馆出资10万购计算机类书籍,弟兄们快来推荐好书吧,来者有分。斑竹手下留情 我的SQL Server数据库突然不能启动,由于在项目开发攻坚阶段,让我惊了一生冷汗,好在我备份了SQL文,我又重装了一下,他妈的两天他又瘫\0 推荐反日网站 www.1931-9-18.org 紧急求助?如何保存mschart的内容到磁盘中 如何禁用Tab键? 请教linux嵌入式高手 关于分页显示的问题 图书馆出资10万购计算机类书籍,弟兄们快来推荐好书吧,来者有分。斑竹手下留情 请教:如何知道当前运行的是哪个窗体? 图书馆出资10万购计算机类书籍,弟兄们快来推荐好书吧,来者有分。斑竹手下留情 一个简单的问题 想学习J2EE,请问什么入门书最适合? 网页中点击按钮,弹出对话框并屏蔽除对话框以外的所有操作,能实现吗?