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

时间:2013-11-18 02:53:25

标签: c#

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

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

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

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

我试过了

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

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

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

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

4 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

this.Shown += OnShown;

并将您的ShowDialog移至此处:

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

答案 2 :(得分:0)

这会将窗口设置在顶部:

[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);
}

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

答案 3 :(得分:0)

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