【问题标题】:How can I show a FolderBrowserDialog more than once?如何多次显示 FolderBrowserDialog?
【发布时间】:2010-06-18 20:52:35
【问题描述】:

在我的 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() 行,然后什么也没有发生。对话框不会出现,调试器也不会继续。它只是停止。它第一次完美运行,但不是第二次。我什至尝试过复制整个 using 块并将其粘贴在第一个块之后,并且发生了同样的事情。该对话框仅显示一次。

我需要怎么做才能多次显示 FolderBrowserDialog?

解决方案:

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

【问题讨论】:

    标签: winforms folderbrowserdialog


    【解决方案1】:

    最小化 Visual Studio,你会发现对话框回来了。

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

    当您再次显示对话框时,它无法夺回焦点,因为 Visual Studio 已经获得了它。所以对话框出现在 Visual Studio 的主窗口之后,不在视野范围内。

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

    【讨论】:

    • 只需将“this”传递给 ShowDialog 即可解决问题。谢谢。
    【解决方案2】:

    试试这个:

    using (FolderBrowserDialog dialog = new FolderBrowserDialog())
    {
        while (ValidDirectorySelected() == false && tryAgain == true)
        {
            dialog.ShowNewFolderButton = false;
    
            if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.Cancel)
            {
                tryAgain = false;
            }
        }
    }
    

    ...将您的 using 移到 while 循环之外,以免每次都破坏文件夹浏览器。你不必那样做。您可以重复使用 FolderBrowserDialog。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-27
      • 1970-01-01
      • 1970-01-01
      • 2014-06-26
      • 2013-02-02
      • 1970-01-01
      • 2015-08-16
      • 2014-12-09
      相关资源
      最近更新 更多