【问题标题】:c# Bring Folder Browser Dialog to Foregroundc#将文件夹浏览器对话框带到前台
【发布时间】:2014-10-15 18:04:35
【问题描述】:

所以我有一个程序,当它第一次启动时,它会打开一个文件夹浏览器对话框来搜索所需的路径。用户选择路径后,他们点击确定,然后为所需的第二个路径打开第二个文件夹浏览器对话框。问题是第二个没有出现在前台,它在 Chrome、Outlook、Visual Studio 等许多其他应用程序之后。有没有办法把它带到前台?

代码如下:

if (fbdCastPath.ShowDialog() == DialogResult.OK) { pathToCast = fbdOCASTPath.SelectedPath; } if (fbdConfig.ShowDialog() == DialogResult.OK) { pathToImg = fbdConfig.SelectedPath; }

【问题讨论】:

  • 定义“许多其他应用程序”和“前 2 个”。前两个究竟是什么? FolderBrowserDialog 应该在调用它的前面打开。如果您同时打开了“其他应用程序”,那么您可能需要重新评估您的流程。
  • 我不知道为什么它说第一个 2,我的意思是第一次大声笑。以及其他应用程序,我的意思是 Chrome、Visual Studio、Outlook 等。
  • 您使用的是 ShowDialog() 还是 ShowDialog(IWin32Window 所有者)?
  • 上面贴的 Showdialog() 代码
  • 你试过 ShowDialog(IWin32Window) 吗?

标签: c# .net browser dialog directory


【解决方案1】:

当它第一次启动时,它会打开一个文件夹浏览器对话框

“第一次”是对原因的暗示。这很麻烦,您可能在 Main() 方法或 Load 事件处理程序中执行此操作,之前您的主窗口可见。您仍然会看到第一个对话框,Windows 为启动程序提供了将窗口推送到前台的机会。

但是当你关闭第一个对话框时你会遇到麻烦。 Windows 现在需要将焦点转移到另一个窗口,您的应用程序没有任何可以激活的窗口。它仍然处于不确定状态,等待您的方法完成。它还没有完成,还要显示另一个对话框。所以它需要选择另一个窗口,那将是另一个应用程序拥有的窗口。您的第二个对话框现在出现在该窗口的下方。你根本看不到它的可能性很高,也可能没有任务栏按钮。

现在应该清楚您需要做什么了,您必须在您的应用中有一个可以激活的窗口以防止失去前景。或者更准确地说,对话框需要一个所有者窗口,它可以在关闭时将焦点返回给它。请改用主窗体的 Shown 事件。或者使用样板文件 + 打开命令。

复制代码:

    protected override void OnLoad(EventArgs e) {
        folderBrowserDialog1.ShowDialog();
        folderBrowserDialog2.ShowDialog();   // can't see this one
        base.OnLoad(e);
    }

通过将其移至 OnShown() 来修复。

【讨论】:

  • 有道理,我希望这能解决问题。
猜你喜欢
  • 1970-01-01
  • 2011-03-26
  • 2014-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-21
  • 1970-01-01
相关资源
最近更新 更多