2014-09-05 105 views
2

我想要顯示對話框,要求用戶選擇目錄,如果一切正常,主窗體將顯示,否則程序將關閉,並且我想輕輕地將它,但我事情我的解決方案不是。窗體窗體 - 在窗體前顯示對話框

在Program class(Program.cs)中,我定義了調用對話框的方法,並根據其結果調用Main方法將調用form或不調用。

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

    if (DisplayFolderDialog()) 
     Application.Run(new addonInstallerForm()); 
} 

有沒有更好的方法來實現這個目標?

回答

1

我一直在做我喜歡你的應用程序。我有一個登錄頁面在主窗體之前。我認爲這是最好的方法之一。你應該堅持下去。這裏是我的登錄邏輯的一個例子

static void Main() 
{ 
    Application.SetCompatibleTextRenderingDefault(false); 
    Application.EnableVisualStyles(); 
    DialogResult result; 
    using (var loginForm = new frmLogin()) 
    { 
     result = loginForm.ShowDialog(); 
    } 

    if (result == DialogResult.OK) 
    { 
     // login was successful 
     Application.Run(new Form1()); 
    } 
} 
3

這是好的,你通常會擺脫它。然而,這種方法存在兩個可用性問題:

  • 對於一瞬間,您的程序沒有可以接收焦點的窗口。在對話框關閉後,可能需要一些時間纔會顯示您的addonInstallerForm窗口。這可能是一個問題,操作系統需要給予另一個窗口焦點。如果是而不是秒,但主窗口需要幾秒鐘纔會出現,通常是因爲查找程序集和磁盤以及查找代碼而導致的開銷,於是Windows決定應該將焦點放到另一個應用程序上。而你的主窗口消失在另一個應用程序的窗口後面。當然,讓用戶非常混淆,他甚至會認爲你的程序崩潰了。

  • 除非您明確地做了一些事情,否則您的主窗口將以不同於對話框的位置顯示在屏幕上。不是很好,這也會讓用戶感到迷惑,儘管不像消失的窗口問題那麼嚴重。

這些問題有點難以解決,因爲您使用ShowDialog()。當然,實際上並不需要使用對話框,它只是使編寫代碼更容易。請注意,您每天使用的大多數程序都不會這樣做。他們有例如一個文件+打開命令。或者他們有一個嚮導般的用戶界面,將你從一個窗口移到另一個窗口。

達到ShowDialog()的最常見原因是解決當主窗口關閉時Winforms自動終止程序的問題。很容易與this code解決。讓您創建具有不同形式的嚮導式UI。另一個非常便宜的創建嚮導的方法是使用TabControl without visible tabs。您仍然可以使用對話框,只需在關閉對話框之前公開您觸發的事件即可。等等。

+0

嗯..嚮導就是我所需要的,除了以下步驟之外,沒有別的東西可以讓用戶做。我會嘗試一下:)感謝您的幫助。 – Sajgoniarz 2014-09-05 12:20:00