2010-06-18 46 views
0

在我的Windows窗體的Form_Load事件中,我想顯示一個FolderBrowserDialog讓用戶選擇一個目錄,並且如果他們選擇的目錄無效(意味着它缺少應用程序需要的某些文件),我想顯示它再次。但是,當我創建一個新的FolderBrowserDialog時,它不會出現在我調用ShowDialog時。如何多次顯示一個FolderBrowserDialog?

while (ValidDirectorySelected() == false && tryAgain == true) 
{ 
using (FolderBrowserDialog dialog = new FolderBrowserDialog()) 
{ 
    dialog.ShowNewFolderButton = false; 

    if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.Cancel) 
    { 
    tryAgain = false; 
    } 
} 
} 

當我進入它時,第二次到達dialog.ShowDialog()行,然後什麼也沒有發生。該對話框不會出現,並且調試器不會繼續。它只是停止。它第一次完美運作,但不是第二次。我甚至嘗試過在第一個之後複製整個塊並粘貼它,並且發生同樣的事情。該對話框只顯示一次。

我需要做多少次才能顯示一個FolderBrowserDialog?

解決方案:

傳遞 '這個' 來ShowDialog的固定我的問題。我也將使用移到了while循環之外,以避免不必要的重新創建對話框。

回答

2

最小化Visual Studio,您會找到對話框。

這是一個焦點問題,由於您在Load事件中顯示對話框而觸發。當對話框關閉時,您的應用程序中沒有可以接收焦點的窗口。您的Load事件尚未完成,因此應用程序的主窗口尚不可見。 Windows必須找到一個窗口來關注並從另一個程序中選擇一個窗口。像Visual Studio一樣。

當您再次顯示對話框時,由於Visual Studio已經獲取它,所以無法竊取焦點。所以對話框出現後面的 Visual Studio的主窗口不在視圖中。

你必須通過允許你的主窗口變得可見來解決這個問題。並調用dialog.ShowDialog(this)來完全確定。例如,您可以使用Shown事件。

+0

只需將'this'傳遞給ShowDialog即可解決問題。謝謝。 – 2010-06-23 18:11:34

1

試試這個:

using (FolderBrowserDialog dialog = new FolderBrowserDialog()) 
{ 
    while (ValidDirectorySelected() == false && tryAgain == true) 
    { 
     dialog.ShowNewFolderButton = false; 

     if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.Cancel) 
     { 
      tryAgain = false; 
     } 
    } 
} 

...您使用while循環外每次都從破壞的文件夾瀏覽器保持移動。你不必這樣做。你可以重用FolderBrowserDialog。