15

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

启动时,应用程序会显示一个启动屏幕,该屏幕在单独的线程中运行。在显示初始屏幕时,主应用程序正在初始化。

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

到目前为止,一切都符合预期。

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

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

4

4 回答 4

11

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

它从未激活过,因此 Z-Order 较低,因此更高的自然会高于它。我必须在我们的应用程序中修复这个确切的场景。

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

于 2008-10-10T17:21:17.383 回答
1

我也有过这种情况。Bob 的回答是最简单的,并且在大多数情况下对我有用。但是,有时我需要使用蛮力。通过互操作执行此操作,如下所示:

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

于 2008-10-10T17:43:33.593 回答
0

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

如果您通过设置 DialogResult 并调用 Hide() 或 close() 两次关闭模态对话框,我已经看到此窗口“跳跃”。

像这样的代码:

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

有关所有案例,请参阅博客条目...

于 2008-10-10T18:18:50.870 回答
-3

您可以使用这样的代码:

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

谢谢大家!

于 2010-05-29T02:35:24.277 回答