2010-05-15 62 views
1

我想讓我的項目通過一個類而不是一個表單來啓動,有沒有辦法做到這一點?或者更確切地說,有沒有什麼好方法可以確保啓動的第一個類(除了Program)不是一個表單類。C# - 是否可以用類而不是表單啓動我的項目?

我試圖改變我的課在Program.main(),但它看起來像Application.run()需要的ApplicationContext。
我想我可以改變程序類來啓動另一個類,並讓該類使用Application.run()啓動窗體,但我認爲這會導致很多問題,因爲我不想使用相同的窗體每次首先啓動並且Application.run()必須至少使用一次,最多使用一次。所以我認爲很難跟蹤Application.run()是否被使用。

另一個可能更重要的問題;這是在.net中執行任務的好方法嗎?我想這樣做的原因是因爲我想創建某種類型的MVC項目,我想從最開始的類是控制器,我將使用的所有表單都將是視圖。

+0

您能描述一下您嘗試實現的功能嗎? – 2010-05-15 08:34:29

+2

你不「開始上課」。運行時啓動一個特定的方法(Main)。該方法完全在您的控制之下。 – 2010-05-15 09:26:45

+0

@亨克說的是什麼。實際上,該方法會觸發表單,但您可以將其修改爲全部擴展。嘗試玩一個控制檯項目;) – Dykam 2010-05-15 10:03:28

回答

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類作爲控制器的良好基礎類。很好的支持單身應用程序和啓動畫面。

1

要決定哪些類應該先運行,您應該簡單地把在該類應用程序的主要方法。

所以基本上,如下創建一個新的類,放在Main方法(和Program.cs中刪除它),你需要的邏輯,然後啓動窗口:

[STAThread] 
    static void FormLauncher() 
    { 
     Application.EnableVisualStyles(); 
     Application.Run(new Form1()); 
    } 

Form1的是名稱必須啓動的形式。

相關問題