如何在关闭文件打开对话框后将主窗体返回到前面

我的C#应用​​程序首先打开一个表单。 在该表单的构造函数中,我“showDialog”是一个openfiledialog。 选择要打开的文件后,openfile对话框关闭,文件加载,内容显示在主窗体中,但主窗体隐藏在桌面上的每个其他打开窗口后面。

我必须在任务栏中找到它并将其聚焦。 我刚刚启动了应用程序,我希望表单具有焦点。

我已经编写了其他不使用openfiledialog的应用程序,当我启动它们时,主窗体会按照您的预期打开焦点。

openfiledialog关闭后,如何让主窗体获得焦点?

我试过了

  • this.focus(),
  • this.activate(),
  • this.bringtofront();
  • this.TopMost = true ;

他们都没有任何明显的区别。

我已经广泛研究了这个问题,这是每个人都建议并说工作的事情,但它们对我不起作用。 有些人暗示我试图让我的forms最顶端,从而侵犯了所有圣洁的东西。 但是,我不认为很多人会想要打开一个应用程序,并且主要的表单显示在其他所有内容之后。

任何人都有任何其他想法,如何确保我的表格“在前面”,最重要的,有焦点?

当您这样做时,您的应用程序将有一个短暂的时刻,在对话框关闭后没有窗口可用于接收焦点。 Windows被迫找到另一个窗口来关注,这将是另一个应用程序的窗口。 您的主窗口最终会出现,现在位于其他应用程序窗口的后面。

而是在Shown事件的事件处理程序中显示对话框。 或使用样板文件+打开命令。

如果可以,将ShowDialog移出构造函数,或尝试将其放在构造函数中:

 this.Shown += OnShown; 

并将您的ShowDialog移动到这里:

  private void OnShown(object sender, EventArgs eventArgs) { var result = new OpenFileDialog().ShowDialog(); } 

这会将窗口设置在顶部:

 [DllImport("user32.dll")] static extern bool SetForegroundWindow(IntPtr hWnd); private void Form1_Load(object sender, EventArgs e) { .... //after your code place the call to the function at the end. SetForegroundWindow(this.Handle); } 

汉斯先生说,并且很好地用另一种设计做得更好。

解决方案: this.Activate(); 但是如果从表单Load事件调用。