所以我有一个程序,当它第一次启动时会打开一个文件夹浏览器对话框来搜索所需的路径。用户选择路径后,他们点击确定,然后打开第二个文件夹浏览器对话框,以获取所需的第二个路径。问题是第二个没有出现在前台,它背后的许多其他应用程序,如Chrome,Outlook,Visual Studio等,有没有办法把它带到前面?
代码如下:
if (fbdCastPath.ShowDialog() == DialogResult.OK)
{
pathToCast = fbdOCASTPath.SelectedPath;
}
if (fbdConfig.ShowDialog() == DialogResult.OK)
{
pathToImg = fbdConfig.SelectedPath;
}
答案 0 :(得分:3)
第一次启动时会打开文件夹浏览器对话框
“第一次”是对事业的暗示。这很麻烦,你可能在Main()方法或Load事件处理程序中执行此操作,之前可以看到主窗口。您仍将看到第一个对话框,Windows为启动程序提供了将窗口推入前台的机会。
但是当你关闭第一个对话框时,你会遇到麻烦。 Windows现在需要将焦点放在另一个窗口上,您的应用程序没有任何可以激活的窗口。它仍处于不确定状态,等待你的方法完成。它还没有完成,还有另一个要显示的对话框。所以它需要选择另一个窗口,这个窗口将由另一个应用程序拥有。现在出现第二个对话框,位于该窗口下方。您根本没有看到它的高赔率,也可能没有任务栏按钮。
现在应该清楚你需要做什么,你必须在你的应用程序中有一个窗口可以激活,以防止丢失前景。或者更确切地说,对话框需要一个所有者窗口,它可以在关闭时将焦点返回给它。请使用您的主要表单的已显示事件。或者使用样板文件+打开命令。
Repro代码:
protected override void OnLoad(EventArgs e) {
folderBrowserDialog1.ShowDialog();
folderBrowserDialog2.ShowDialog(); // can't see this one
base.OnLoad(e);
}
通过将其移动到OnShown()来修复。