C#Windows无法在顶部打开

Ozz*_*zah 6 c# winforms

与我之前的问题有关.

在我之前的问题中,我问为什么我的对话框似乎在其他窗口后面打开.(其他窗口不一定属于我的程序,例如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)


use*_*358 1

模态对话框不适合以这种方式使用,尽管无论如何都没有什么可以阻止您这样做。

Application.Run正如 shsmith 所说,你必须有一个。

对于您在问题中给出的简单示例,我将显示一个小窗口,其中包含进度条和/或滚动日志状态文本。