如果只是简单地要变更起始窗口的话,使用上面几位的方法即可.如果说,楼主需要的是程序在开发完成后,交给客户使用,在客户使用的过程中,需要在下一次启动的时候,启动指定的窗口的话.这需要使用到第三方文件(配置文件 CONFIG INI XML文件等)来保存需要启动窗口的类名,在下一次运行的时候调用文件中保存的信息然后动态加载窗口.在这里面需要添加Assemly从字符串中读取类名来完成类的实例化.
Application.Run(new 窗体名);
没错,“cocosoft”我就是要这种效果,请问怎么配置CONFIG INI XML呢?
Application.Run(new 窗体名());
cocosoft 的意思是说通过CONFIG INI XML等文件来配置你想要动态加载的Assembly,CONFIG INI XML等文件中你可以配置需要加载的Assembly得路径、命名空间、类名、Assembly名称等一些信息,在程序运行时读取配置文件来动态加载Assembly。动态加载Assembly的例子如下: Assembly a = Assembly.LoadFrom(args[0]); Type[] mytypes = a.GetTypes(); BindingFlags flags = (BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance | BindingFlags.DeclaredOnly);
foreach(Type t in mytypes) { MethodInfo[] mi = t.GetMethods(flags); Object obj = Activator.CreateInstance(t);
foreach(MethodInfo m in mi) { m.Invoke(obj, null); } }
如果你的Form是从其他dll文件中传递过来的,那么,你需要使用Assembly.LoadFrom()事件来传递你的文件名,即.dll文件名(包含完整路径).如果是本身exe文件内部的窗口,那么你只需要使用Assembly里面的GetType事件来取出类名.例:Type TheType = null; Assembly ass = Assembly.LoadFrom(Application.StartPath + "\\" + DllFileName); TheType = ass.GetType(FormClassName); //这里面的DllFileName是你的dll文件名称,FormClassName是你的窗口类名称 //... Form f=(Form)Activator.CreateInstance(TheType);//创建窗口的实例 对CONFIG或INI或XML文件的操作,你可以参考C#对之些文件的操作的相关实例.网络上一抓一大把.
Type TheType = null; Assembly ass = Assembly.LoadFrom(Application.StartPath + "\\" + DllFileName); TheType = ass.GetType(FormClassName); //这里面的DllFileName是你的dll文件名称,FormClassName是你的窗口类名称 //... Form f=(Form)Activator.CreateInstance(TheType);//创建窗口的实例 测试一下
Application.Run(new Form1());
把Form1改成你要启动的form名就可以了
Assembly a = Assembly.LoadFrom(args[0]);
Type[] mytypes = a.GetTypes();
BindingFlags flags = (BindingFlags.NonPublic | BindingFlags.Public |
BindingFlags.Static | BindingFlags.Instance | BindingFlags.DeclaredOnly);
foreach(Type t in mytypes)
{
MethodInfo[] mi = t.GetMethods(flags);
Object obj = Activator.CreateInstance(t);
foreach(MethodInfo m in mi)
{
m.Invoke(obj, null);
}
}
Assembly ass = Assembly.LoadFrom(Application.StartPath + "\\" + DllFileName);
TheType = ass.GetType(FormClassName);
//这里面的DllFileName是你的dll文件名称,FormClassName是你的窗口类名称
//...
Form f=(Form)Activator.CreateInstance(TheType);//创建窗口的实例
对CONFIG或INI或XML文件的操作,你可以参考C#对之些文件的操作的相关实例.网络上一抓一大把.
Type TheType = null;
Assembly ass = Assembly.LoadFrom(Application.StartPath + "\\" + DllFileName);
TheType = ass.GetType(FormClassName);
//这里面的DllFileName是你的dll文件名称,FormClassName是你的窗口类名称
//...
Form f=(Form)Activator.CreateInstance(TheType);//创建窗口的实例
测试一下
Application.Run(new Form1());
把Form1改成你要启动的form名就可以了----------------------------------
如果是多个工程,设置为"设为启动项目",
然后在program.cs文件里
Application.Run(new Form1());
把Form1改成你要启动的form名就可以了
Type TheType = Type.GetType(类名);Form f=(Form)Activator.CreateInstance(TheType);即可进行实例化