C#打开窗体有问 http://q.cnblogs.com/q/35451/CSDN 连张图片都上传不了,真是悲催。烦请各位移步博 客 园帮忙看看这个问题,万分感谢。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 本帖最后由 caozhy 于 2012-04-27 12:10:25 编辑 Caozhy:你说的这个自己注册自己的步骤是在什么地方完成呢?是在我这个工具栏的加载事件里面吗?还是? 我数据库里面的每一个菜单都是对应了一个窗体名称的,其实我的想法是写一个公共的函数,然后点击图标的时候传入一个窗体名称,Caozhy的方法还是比较好的,只是我感觉还没有完全理解。 这个需要用到assembly和interface的内容。给你一段我自己的代码吧,我一直这么用。private void initializeAssemblys() { List<string> FileNames = getFileFullNames("FunModules"); Assembly assembly = null; IChildModule childModule = null; foreach (string fileName in FileNames) { try { assembly = Assembly.LoadFile(fileName); string assemblyString = getNameFromFull(fileName); Type childModuleType = assembly.GetType(assemblyString + "." + assemblyString + "Assembly"); if (childModuleType == null) continue; if (!childModuleType.GetType().IsInstanceOfType(typeof(IChildModule))) continue; childModule = childModuleType.GetConstructor(new Type[] { }).Invoke(new object[] { }) as IChildModule; childModule.childService.Connection = MainForm.service.Connection; childModule.LoginUser = MainForm.LoginUser; childModules.Add(childModule); } catch (FileLoadException ex) { onChildModuleErr(new Exception(fileName + " load err," + ex.Message)); } catch (Exception ex) { onChildModuleErr(ex); } } }上面的代码是动态加载DLL,当然这些动态加载的DLL是继承了IChildModule接口的。下面是接口的定义:public interface IChildModule { Dictionary<string, Type> childForms { get; } ChildModuleService childService { get; } Data_LoginContent LoginUser { get; set; } TreeNodeInfo moduleTree { get; } }接口中定义有TreeNodeInfo 类,这个类就是帮助你动态生成树节点的类,这个类只有属性,这些属性都是树节点需要的。树控件加载了之后,每个节点的tag都设置为TreeNodeInfo 的对象。TreeNodeInfo 中有一个重要的属性是这个节点对应的窗体的Type。那么点击树节点的时候,我们可以获得这个TreeNodeInfo 对象,根据这个对象的窗体的Type来实例化窗体,展现。也许上面你看糊涂了,我解释一下。我做的DLL都是继承了IChildModule接口的,所以所有的DLL都有TreeNodeInfo 对象,TreeNodeInfo 对象中有属性来保存对应的窗体的Type。这个Type是需要你自己手动在DLL中做的。我也不知道如何来解释了你自己想想吧,也许我的编程方式跟你不太一样。 if else 问题 如何查看当前计算机连接了多少个显示设备 怎么在DataGridView某一个单元格动态添加两个按钮 C#制作可伸缩个性化窗体,出现错误! 类似于点菜单的东西应该怎么做? 求助加密算法. 能否不考虑文件的类型,直接把文件显示到 ...在线=(分全送出) 为什么保存图像到流里面去的时候会发生GDI+的错误呢? Console程序暂停问题!!! 有个c++下雪动画上头条了,整个WPF的看能不能蹭点运气 :) 谁能告诉我这代码错在哪了?关于ACCESS某一个字段显示在textbox上 怎样让viewlist打开大量图片不卡?
Caozhy:你说的这个自己注册自己的步骤是在什么地方完成呢?是在我这个工具栏的加载事件里面吗?还是?
我数据库里面的每一个菜单都是对应了一个窗体名称的,
其实我的想法是写一个公共的函数,然后点击图标的时候传入一个窗体名称,
Caozhy的方法还是比较好的,只是我感觉还没有完全理解。
{
List<string> FileNames = getFileFullNames("FunModules");
Assembly assembly = null;
IChildModule childModule = null; foreach (string fileName in FileNames)
{
try
{
assembly = Assembly.LoadFile(fileName);
string assemblyString = getNameFromFull(fileName); Type childModuleType = assembly.GetType(assemblyString + "." + assemblyString + "Assembly");
if (childModuleType == null) continue;
if (!childModuleType.GetType().IsInstanceOfType(typeof(IChildModule))) continue;
childModule = childModuleType.GetConstructor(new Type[] { }).Invoke(new object[] { }) as IChildModule;
childModule.childService.Connection = MainForm.service.Connection;
childModule.LoginUser = MainForm.LoginUser;
childModules.Add(childModule);
}
catch (FileLoadException ex)
{
onChildModuleErr(new Exception(fileName + " load err," + ex.Message));
}
catch (Exception ex)
{
onChildModuleErr(ex);
}
}
}上面的代码是动态加载DLL,当然这些动态加载的DLL是继承了IChildModule接口的。
下面是接口的定义:public interface IChildModule
{
Dictionary<string, Type> childForms { get; }
ChildModuleService childService { get; }
Data_LoginContent LoginUser { get; set; }
TreeNodeInfo moduleTree { get; }
}接口中定义有TreeNodeInfo 类,这个类就是帮助你动态生成树节点的类,这个类只有属性,这些属性都是树节点需要的。
树控件加载了之后,每个节点的tag都设置为TreeNodeInfo 的对象。TreeNodeInfo 中有一个重要的属性是这个节点对应的窗体的Type。
那么点击树节点的时候,我们可以获得这个TreeNodeInfo 对象,根据这个对象的窗体的Type来实例化窗体,展现。也许上面你看糊涂了,我解释一下。
我做的DLL都是继承了IChildModule接口的,所以所有的DLL都有TreeNodeInfo 对象,TreeNodeInfo 对象中有属性来保存对应的窗体的Type。这个Type是需要你自己手动在DLL中做的。
我也不知道如何来解释了你自己想想吧,也许我的编程方式跟你不太一样。