FolderBrowserDialog.ShowDialog() 后不关注其他形式

No focus on other form after FolderBrowserDialog.ShowDialog()

我正在尝试进行文件夹选择,如果所选驱动器上的 space 不足,则会显示错误。我已经创建了一个自定义设计的错误和对话框表单,但是使用 FolderBrowserDialog 时出现问题。

这是我的实际代码:

frmDialog dialog = new frmDialog("Install software", "The software cannot be found. Please select the path of the executable or let the launcher install it for you.");
dialog.SetYesButtonText("Install software");
dialog.SetNoButtonText("Browse for executable...");

if (dialog.ShowDialog() == DialogResult.Yes)
{
     fbd = new FolderBrowserDialog();
     fbd.Description = "Please select where do you want to install the software!";
     DialogResult result = fbd.ShowDialog();

     if (result == DialogResult.OK) // + space checking, but I deleted it for debugging now.
     {
          frmError error = new frmError("Not enough space", "Please select a folder with at lease 22 MB of free space.");
          error.ShowDialog();
      }
}

之后我实际上会做一个循环,直到用户选择了一个足够space的文件夹或取消选择。

问题是错误对话框没有获得任何焦点。因此,当用户选择文件夹时,FolderBrowserDialog 消失,错误对话框显示在新的 window 中,但 Visual Studio 的 window 获得焦点而不是错误对话框。根据我的经验,我自己的表单不存在这个问题,所以如果我将 fdb 更改为 frmDialog,所有三个对话框将依次显示焦点。

像这样设置对话框的所有者:

fbd.ShowDialog( dialog );
error.ShowDialog( dialog );

我建议将其他对话框的所有者设置为父子关系。因此,当您关闭父窗体时,子窗体也会关闭。如果您使用 ShowDialog 调用,还要在表单周围放置一个 using 块。