2008-10-10 228 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