如何多次显示FolderBrowserDialog?

时间:2010-06-18 20:52:36

标签: winforms folderbrowserdialog

在我的Windows窗体的Form_Load事件中,我想显示一个FolderBrowserDialog让用户选择一个目录,如果他们选择的目录无效(意味着它缺少应用程序需要的某些文件),我想要再次展示它。但是,当我创建一个新的FolderBrowserDialog时,当我调用ShowDialog时它不会出现。

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需要做什么?

解决方案:

将'this'传递给ShowDialog解决了我的问题。我还将使用移到了while循环之外,以避免不必要地重新创建对话框。

2 个答案:

答案 0 :(得分:2)

最小化Visual Studio,您将找到对话框。

这是一个焦点问题,因为您在Load事件中显示对话框而触发。对话框关闭后,您的应用中没有可以接收焦点的窗口。您的Load事件尚未完成运行,因此应用程序的主窗口尚不可见。 Windows必须找到一个窗口来关注焦点并从另一个程序中选择一个窗口。像Visual Studio一样。

再次显示对话框时,由于Visual Studio已获取焦点,因此无法将焦点恢复。因此,对话框在 Visual Studio的主窗口后面显示,不在视图中。

您必须通过允许主窗口变为可见来解决此问题。并调用dialog.ShowDialog(this)来完全确定。例如,您可以使用Shown事件。

答案 1 :(得分: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。