我希望我的项目可以通过课程而不是表格来启动,有没有办法做到这一点?或者更确切地说,是否有任何好方法可以确保启动的第一个类(除了Program)不是表单类。
我试图在Program.main()中更改为我的类,但看起来Application.run()需要一个ApplicationContext。 我想我可以改变Program-class来启动另一个类,并让该类使用Application.run()启动表单,但我认为它会导致很多问题,因为我不希望启动相同的表单首先每次和Application.run()必须至少使用一次,最多一次。所以我认为很难跟踪是否已经使用了Application.run()。
另一个可能更为重要的问题;这是在.net中做事的好方法吗?我想这样做的原因是因为我想创建某种MVC项目,其中我想要开始的类是控制器,我将使用的所有表单都是视图。
答案 0 :(得分:1)
要确定应该首先运行哪个类,您只需在该类中放入应用程序的Main方法。
基本上,创建一个新类,放入Main方法(并从Program.cs中删除它),然后执行所需的逻辑,然后按如下方式启动窗口:
[STAThread]
static void FormLauncher()
{
Application.EnableVisualStyles();
Application.Run(new Form1());
}
Form1是必须启动的表单的名称。
答案 1 :(得分:1)
控制器的示例实现:
public class Controller : ApplicationContext {
public Controller() {
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
mInstance = this;
}
public Controller Instance { get { return mInstance; } }
public void Start() {
Application.Run(this);
}
public void Exit() {
this.ExitThread();
}
public void CreateView(Form frm) {
Views.Add(frm);
frm.FormClosed += FormClosed;
frm.Show();
}
private void FormClosed(object sender, FormClosedEventArgs e) {
Views.Remove(sender as Form);
// NOTE: terminate program when last view closed
if (Views.Count == 0) Exit();
}
private List<Form> Views = new List<Form>();
private Controller mInstance;
}
您可以像这样使用它:
static class Program {
[STAThread]
static void Main() {
var c = new Controller();
c.CreateView(new Form1());
c.Start();
}
}
同时检查WindowsFormsApplicationBase类是否为控制器的良好基类。对单例应用程序和启动画面的支持很好。