Assembly a = Assembly.LoadFile(@"path/filename.dll|exe");//加载程序集 string className = "namespace.classname";//完整的类名,包括命名空间 Type t = Type.GetType(className);//根据类名获取类型 MyForm f = Activator.CreateInstance(t) as MyForm;//根据类型创建窗体实例 注意需要在工程中添加对该程序集的引用(主要是为了知道MyForm的类型
YourType yt; var types=Assembly.Load("xxx.dll").GetTypes();foreach(var item in types){ if(item.Name=="name"){ yt=item.GetConstructor(Type.EmptyTypes).Invoke(null) as YourType; break; } }//在指定程序集下查,查到你的类型,然后反射的调用 构造函数进行实例化。
Form myForm=Assembly.Load("程序集").CreateInstance("程序集.窗体名");
string path=AssemblyName; string name=strName; Form fm=(Form)Assembly.Load(path).CreateInstance(name); fm.MdiParent=this.ParentForm; fm.Show(); fm.Dock=DockStyle.Fill;
activator 很简单的 知道 type 就行
贴一个正在进行的项目的实现方法吧,我做第一个项目C# 大概思路是在 数据库中配置好实现的窗口类,和构造函数所需的参数 客户端自动生成菜单,并且调用相应的窗口类,就是楼主说的反射 MenuitemBean b = ((sender as ToolStripItem).Tag as MenuitemBean); try { Type tt = Type.GetType(b.CKL.Trim()); FormBasic f; if (b.Params == "") { f = (FormBasic)Activator.CreateInstance(tt); } else { object[] param = b.Params.Split(','); f = (FormBasic)Activator.CreateInstance(tt, param); } f.MKQD = b.MKBM; f.MdiParent = this; new ERPCommon.SaleSVR.Service().WriteOperateLog(ERPCommon.PublicVariable.User, b.MKBM, "进入", "进入模块"); f.FormClosed += new FormClosedEventHandler(f_FormClosed); f.Show(); f.WindowState = (System.Windows.Forms.FormWindowState)b.CKZT; } catch (Exception ep) { MessageBox.Show("模块清单中窗口类配置错误,类前需要命名空间!\n" + ep.Message); }
Assembly a = Assembly.LoadFile(@"path/filename.dll|exe");//加载程序集
string className = "namespace.classname";//完整的类名,包括命名空间
Type t = Type.GetType(className);//根据类名获取类型
MyForm f = Activator.CreateInstance(t) as MyForm;//根据类型创建窗体实例
注意需要在工程中添加对该程序集的引用(主要是为了知道MyForm的类型
自己去看吧http://topic.csdn.net/u/20091224/16/fc7c99c2-7fd2-4f36-ad70-b9449970db4f.html
var types=Assembly.Load("xxx.dll").GetTypes();foreach(var item in types){
if(item.Name=="name"){
yt=item.GetConstructor(Type.EmptyTypes).Invoke(null) as YourType;
break;
}
}//在指定程序集下查,查到你的类型,然后反射的调用 构造函数进行实例化。
string name=strName; Form fm=(Form)Assembly.Load(path).CreateInstance(name);
fm.MdiParent=this.ParentForm;
fm.Show();
fm.Dock=DockStyle.Fill;
大概思路是在 数据库中配置好实现的窗口类,和构造函数所需的参数
客户端自动生成菜单,并且调用相应的窗口类,就是楼主说的反射
MenuitemBean b = ((sender as ToolStripItem).Tag as MenuitemBean);
try
{
Type tt = Type.GetType(b.CKL.Trim());
FormBasic f;
if (b.Params == "")
{
f = (FormBasic)Activator.CreateInstance(tt);
}
else
{
object[] param = b.Params.Split(',');
f = (FormBasic)Activator.CreateInstance(tt, param);
}
f.MKQD = b.MKBM;
f.MdiParent = this;
new ERPCommon.SaleSVR.Service().WriteOperateLog(ERPCommon.PublicVariable.User, b.MKBM, "进入", "进入模块");
f.FormClosed += new FormClosedEventHandler(f_FormClosed);
f.Show();
f.WindowState = (System.Windows.Forms.FormWindowState)b.CKZT;
}
catch (Exception ep)
{
MessageBox.Show("模块清单中窗口类配置错误,类前需要命名空间!\n" + ep.Message);
}
主要代码是 : object _form = System.Reflection.Assembly.GetExecutingAssembly().CreateInstance(formNameSpace+"."+formName, false);最后还是衷心的感谢大家的参与,谢谢......
http://www.icanwell.cn