2008-10-10 138 views
14

我正在写一个Windows窗体在C#.NET应用程序窗口

在启动应用程序,应用程序显示这是在一个单独的线程运行的启动画面。在启动画面显示的同时,主应用程序正在初始化。

主应用程序完成初始化后,会显示应用程序的主窗体,并且启动画面仍显示在顶部。

到目前为止的一切都如预期。

然后,启动画面关闭,导致该线程退出。出于某种原因,在这一点上,主应用程序窗口被发送到所有其他打开的Windows后面,特别是Windows资源管理器窗口,在该窗口中,您首先单击.exe文件运行应用程序!

什么可能导致窗户像这样突然跳到“后面”?

回答

10

尝试在线程关闭时在主窗口上调用.Activate()。

它从来没有被激活过,因此它的Z-次序很低,所以任何更高的值都会自然的高于它。我必须在我们的应用程序中修复这个确切的情况。

别忘了!您可能需要使用Invoke()将调用编组到正确的线程!

1

我也曾经有过这种情况。鲍勃的回应是最简单的,并在大多数情况下适用于我。但是,有些时候我需要使用暴力。通过这样的interop来做到这一点:

[DllImport(“user32.dll”)] public static extern bool SetForegroundWindow(IntPtr hWnd);

0

启动画面是模态对话框吗?

如果通过同时设置DialogResult和调用Hide()或close()来解除Modal对话框两次,我已经看到了这个窗口'跳跃'。

这样的代码:

private void button1_Click(object sender, System.EventArgs e) 
{ 
    this.DialogResult = DialogResult.Abort; 
    this.Hide(); 
} 

见所有的情况下this博客条目...

-2

您可以使用这样的代码:

private void button1_Click(object sender, System.EventArgs e) 
{ 
    this.DialogResult = DialogResult.Abort; 
    this.Hide(); 
} 

谢谢大家!

+0

在发布一年后重复某人的代码片段对读者没有帮助。 – 2015-07-14 07:55:50