2014-01-10 35 views
3

我會盡量使這個問題儘可能簡單。我有三種形式frm_Splash它檢查更新; frm_Wizard,完成首次運行設置;和frm_Main這是主程序。這些形式的關係如下圖解: Form Process Chart如何在啓動時處理表單顯示訂單

現在在Program.cs我有這樣的代碼:

public static void Main() 
{ 
    Application.EnableVisualStyles(); 
    Application.SetCompatibleTextRenderingDefault(false); 
    Application.Run(new frm_Main()); 
} 

這臺frm_Main作爲我的主要形式。處理frm_Wizardfrm_Main的最佳做法是什麼?我不想讓他們在我完成更新之前加載(如果有的話)。

之後,如果需要顯示嚮導,啓動畫面應該消失,嚮導應該出現。

最後,一旦所有的更新和首次設置完成,主窗體顯示(但不是之前)。我如何完成這一切?

有些事情,我知道:

  • 我知道我可以設置frm_Splash是啓動形式,但後來當我關閉它,整個程序關閉。
  • 我也可以隱藏表格,但不會浪費記憶,坐在背景中的表格 ?

最後,我正在尋找一些通用的代碼或如何做到這一點的概念。我已經熟悉c#編碼,所以你不需要編碼所有東西。我只是在尋找最佳做法來處理這個問題。即我應該在Program.cs中進行編碼,還是每個表單的載入事件?如果關於我的問題還有什麼不清楚的地方,請在您投降之前告訴我!謝謝。

+1

+1爲流程圖。花時間寫出清晰,深思熟慮的問題的人會得到及時的,深思熟慮的答案。 – crush

回答

2

需要注意的一件事是,您不需要使用Application.Run來啓動表單。所以,你可以在你的Main功能創建3個步驟:

public static void Main() 
{ 
    Application.EnableVisualStyles(); 
    Application.SetCompatibleTextRenderingDefault(false); 

    //Show splash form (which checks for updates) 
    FormSplash splash = new FormSplash(); 
    splash.ShowDialog();//will wait until splash closed 

    //check if first run and show if needed 
    if(IsFirstRun()) 
    { 
     FormWizard wizard = new FormWizard(); 
     wizard.ShowDialog();//will wait until wizard is closed 
    } 

    //Finally, run your application as normal 
    Application.Run(new frm_Main()); 
} 

注:我不知道的使用Application.Run發動你的主要形式的好處,我想他們中的一個被允許訪問應用程序狀態功能(如退出),但我可以說我過去曾使用過這種技術作爲啓動畫面,並且沒有這樣做的任何問題。

+0

這對OP來說很好,他意識到他不需要遵循MS放入'Main()'方法的樣板文件 – crush

+1

這正是我所期待的。非常感謝!我不知道你可以用這種方式編輯'Program.cs'。儘管如此,我認爲你必須在'Main()'的開頭有'Application.EnableVisualStyles();'和'Application.SetCompatibleTextRenderingDefault(false);'。它給我一個錯誤,那就是解決方案。 – gnarlybracket