Winforms 如何多次显示FolderBrowser对话框?

Winforms 如何多次显示FolderBrowser对话框?,winforms,folderbrowserdialog,Winforms,Folderbrowserdialog,在我的Windows窗体的Form_Load事件中,我想显示一个FolderBrowser对话框,让用户选择一个目录,如果他们选择的目录无效(意味着它缺少应用程序需要的某些文件),我想再次显示它。但是,当我创建新的FolderBrowserDialog时,调用ShowDialog时它不会出现 while (ValidDirectorySelected() == false && tryAgain == true) { using (FolderBrowserDialog dia

在我的Windows窗体的Form_Load事件中,我想显示一个FolderBrowser对话框,让用户选择一个目录,如果他们选择的目录无效(意味着它缺少应用程序需要的某些文件),我想再次显示它。但是,当我创建新的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()行,然后什么也没有发生。对话框不会出现,调试器也不会继续。它只是停止了。它在第一次使用时效果很好,但在第二次使用时效果不佳。我甚至尝试过复制整个using块并在第一个块之后粘贴它,同样的事情也发生了。该对话框仅显示一次

我需要做什么才能多次显示FolderBrowser对话框

解决方案:

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

尝试以下操作:

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。

尝试以下方法:

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。

最小化Visual Studio,您会找到该对话框

这是一个焦点问题,由于在加载事件中显示对话框而触发。当对话框关闭时,应用程序中没有可以接收焦点的窗口。您的加载事件尚未完成运行,因此应用程序的主窗口尚不可见。Windows必须找到一个窗口来提供焦点,并将从另一个程序中选择一个。比如VisualStudio

当您再次显示对话框时,它无法将焦点偷回,因为Visual Studio已经获取了它。因此,该对话框出现在VisualStudio的主窗口后面,不可见


您必须通过允许主窗口可见来修复此问题。并调用dialog.ShowDialog(此)以完全确定。例如,您可以使用显示的事件。

最小化Visual Studio,您会找到返回的对话框

这是一个焦点问题,由于在加载事件中显示对话框而触发。当对话框关闭时,应用程序中没有可以接收焦点的窗口。您的加载事件尚未完成运行,因此应用程序的主窗口尚不可见。Windows必须找到一个窗口来提供焦点,并将从另一个程序中选择一个。比如VisualStudio

当您再次显示对话框时,它无法将焦点偷回,因为Visual Studio已经获取了它。因此,该对话框出现在VisualStudio的主窗口后面,不可见


您必须通过允许主窗口可见来修复此问题。并调用dialog.ShowDialog(此)以完全确定。例如,您可以使用显示的事件。

只需将“this”传递给ShowDialog即可解决此问题。谢谢。只需将“此”传递给ShowDialog即可解决此问题。非常感谢。