在FolderBrowserDialog.ShowDialog()之后没有关注其他形式

时间:2015-01-04 16:07:47

标签: c# focus folderbrowserdialog

我正在尝试进行文件夹选择,如果所选驱动器上没有足够的空间,则会显示错误。我创建了一个自定义设计的错误和对话框表单,但使用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();
      }
}

之后我会实际创建一个循环,直到用户选择一个有足够空间的文件夹或取消选择。

问题是错误对话框没有获得任何焦点。因此,当用户选择文件夹时,FolderBrowserDialog将消失,并且错误对话框将显示在新窗口中,但Visual Studio的窗口将获得焦点而不是错误对话框。正如我所经历的那样,这个问题不存在于我自己的表单中,因此如果我将fdb更改为frmDialog,则所有三个对话框都将以焦点相互显示。

1 个答案:

答案 0 :(得分:3)

设置对话框的所有者,如下所示:

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

我建议设置其他对话框的所有者以设置父子关系。因此,当您关闭父表单时,子表单将关闭。如果您正在使用using来电,也会在表单周围加ShowDialog块。