如何在关闭文件打开对话框后将主窗体返回到前面
我的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事件调用。