与我之前的问题有关.
在我之前的问题中,我问为什么我的对话框似乎在其他窗口后面打开.(其他窗口不一定属于我的程序,例如Excel,Windows资源管理器等)
有人告诉我使用重载ShowDialog()并传递父作为参数.
那很好,我已经用重载替换了所有的ShowDialog().
但是我仍然遇到同样的问题:
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
OpenFileDialog ofd = new OpenFileDialog();
ofd.ShowDialog(); // First dialog
// Do some stuff here...
SaveFileDialog sfd = new SaveFileDialog();
sfd.ShowDialog(); // Second dialog;
}
}
Run Code Online (Sandbox Code Playgroud)
在这个例子中(不要对代码发表评论 - 我只是将其作为一个简单的例子编写),用户双击其屏幕上有几个窗口的可执行文件.OFD显示在顶部,SFD显示在所有内容之下.
我通常在我的简单程序中设置这种OFD/SFD,它接受CSV或XLS文件并对它们进行一些简单的处理.在这种情况下,我将OFD代码放在静态Main()方法中,如果没有参数传递给exe,则加载对话框.
小智 11
还有另一个 - 我认为最简单 - 解决方案:
ofd.ShowDialog(new Form() { TopMost=true });
Run Code Online (Sandbox Code Playgroud)
它会打开一个新表单,会立即处理,但它会为您的ond提供TopMost属性.您可以提供更多属性,例如"TopLevel":
ofd.ShowDialog(new Form() { TopMost=true, TopLevel=true });
Run Code Online (Sandbox Code Playgroud)
模态对话框不适合以这种方式使用,尽管无论如何都没有什么可以阻止您这样做。
Application.Run正如 shsmith 所说,你必须有一个。
对于您在问题中给出的简单示例,我将显示一个小窗口,其中包含进度条和/或滚动日志状态文本。