Winform里面设置起始窗口?

bufan2162 2007-10-21 09:11:28
如题,我有很多个窗口,界面都是差不多的,就是怎么控制一下每次启动要启动哪个窗口?跟WebForm不一样,WebForm里只要设置为起始页就行
...全文
959 20 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuskyline 2012-03-31
  • 打赏
  • 举报
回复
tks,应该是这样 的
  • 打赏
  • 举报
回复
来晚了!!哎~~
这么简单的题目竟然错过了
bufan2162 2007-10-22
  • 打赏
  • 举报
回复
cocosoft 救命啊!!!!!!!!!
seamanhy 2007-10-22
  • 打赏
  • 举报
回复
main函数里面的Application.Run(new Form());
bufan2162 2007-10-22
  • 打赏
  • 举报
回复
是本身exe文件内部的窗口,但Assembly.LoadFrom里面的参数我写的是命名空间的名字还不行,求大侠帮助!
david_anwei 2007-10-22
  • 打赏
  • 举报
回复
一楼的最简洁明了!
tepc2000 2007-10-22
  • 打赏
  • 举报
回复
在program.cs文件里有这么一行
Application.Run(new Form1());
把Form1改成你要启动的form名就可以了

----------------------------------
如果是多个工程,设置为"设为启动项目",
然后在program.cs文件里
Application.Run(new Form1());
把Form1改成你要启动的form名就可以了
甴曱 2007-10-22
  • 打赏
  • 举报
回复
[CODE="C#"]
Type TheType = null;
Assembly ass = Assembly.LoadFrom(Application.StartPath + "\\" + DllFileName);
TheType = ass.GetType(FormClassName);
//这里面的DllFileName是你的dll文件名称,FormClassName是你的窗口类名称
//...
Form f=(Form)Activator.CreateInstance(TheType);//创建窗口的实例
[/CODE]

测试一下
甴曱 2007-10-22
  • 打赏
  • 举报
回复
如果你的Form是从其他dll文件中传递过来的,那么,你需要使用Assembly.LoadFrom()事件来传递你的文件名,即.dll文件名(包含完整路径).如果是本身exe文件内部的窗口,那么你只需要使用Assembly里面的GetType事件来取出类名.

例:
[code=c#]
Type TheType = null;
Assembly ass = Assembly.LoadFrom(Application.StartPath + "\\" + DllFileName);
TheType = ass.GetType(FormClassName);
//这里面的DllFileName是你的dll文件名称,FormClassName是你的窗口类名称
//...
Form f=(Form)Activator.CreateInstance(TheType);//创建窗口的实例
[/code]

对CONFIG或INI或XML文件的操作,你可以参考C#对之些文件的操作的相关实例.网络上一抓一大把.
优途科技 2007-10-22
  • 打赏
  • 举报
回复
4楼正解。
bumm 2007-10-22
  • 打赏
  • 举报
回复
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);
}
}


叶子 2007-10-22
  • 打赏
  • 举报
回复
Application.Run(new 窗体名());  
bufan2162 2007-10-22
  • 打赏
  • 举报
回复
没错,“cocosoft”我就是要这种效果,请问怎么配置CONFIG INI XML呢?
叶子 2007-10-22
  • 打赏
  • 举报
回复
Application.Run(new 窗体名);
甴曱 2007-10-22
  • 打赏
  • 举报
回复
本身是exe文件里面的窗口的话,不需要使用到Assembly.直接使用Type.GetType(类名)即可.

如:
Type TheType = Type.GetType(类名);

Form f=(Form)Activator.CreateInstance(TheType);即可进行实例化
Love_My 2007-10-21
  • 打赏
  • 举报
回复
在 Main 入口里面设置
甴曱 2007-10-21
  • 打赏
  • 举报
回复
如果只是简单地要变更起始窗口的话,使用上面几位的方法即可.如果说,楼主需要的是程序在开发完成后,交给客户使用,在客户使用的过程中,需要在下一次启动的时候,启动指定的窗口的话.这需要使用到第三方文件(配置文件 CONFIG INI XML文件等)来保存需要启动窗口的类名,在下一次运行的时候调用文件中保存的信息然后动态加载窗口.

在这里面需要添加Assemly从字符串中读取类名来完成类的实例化.
ben_bear 2007-10-21
  • 打赏
  • 举报
回复
Application.Run(new 起始窗口());
Bmonkey 2007-10-21
  • 打赏
  • 举报
回复
可执行程序都需要一个执行入口点的,那就是main函数
shark2076 2007-10-21
  • 打赏
  • 举报
回复
在program.cs文件里有这么一行
Application.Run(new Form1());
把Form1改成你要启动的form名就可以了

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧