2012-05-23 188 views
2

我有兩個窗體。 (Form1和Form2) Form1_load方法,我打電話來創建Form2。C#窗體奇怪行爲

但是,Form2仍在Form1下。如何在Form1上獲取Form2? 我不想將form2.TopMost設置爲true,因爲它是全屏幕形式,並會拒絕用戶的Tab鍵。我試過focus(),它不會將Form2帶到前面。

我不想隱藏Form1,因爲用戶可能需要回退它。

+1

'TopMost'屬性將使窗體頂部的所有其他窗口!否則使用'form2.BringToFront()' – Writwick

回答

1

你打開你的第二個表格太早。表單的Load事件在表單顯示之前觸發,這意味着表單2顯示在Form1之前,因此它在Form1顯示時被Form1覆蓋。

當Form1的Shown事件被激發時,您可以通過打開Form2來獲得想要的內容。

4

您是否試過:form2.BringToFront()
編輯:
您還可以使用form2.ShowDialog(),這應該在面前表現的形式不可能性重點Form1中

+0

雖然我已經嘗試過,但這是行不通的。請參閱下面的接受答案和解釋。 – humansg

0

你可以使用SetForegroundWindow(form2.Handle)

你需要這樣的聲明:

[DllImport("user32.dll")] 
[return: MarshalAs(UnmanagedType.Bool)] 
static extern bool SetForegroundWindow(IntPtr hWnd); 

因爲您從Load處理程序中調用此函數,您可能會在Form1的Load之後處於競爭狀態,因此form1會被置頂。

+0

是的,正是我認爲他們處於競賽狀態。答案是當form1完成顯示時加載form2。 – humansg

0

您可以使用Form2.ShowDialog()方法。請記住,這將不允許您退回到表格1,直到您關閉Form2。如果Form2依賴於來自Form1的數據,我寧願使用ShowDialog(),否則您將不得不使用線程和事件來根據Form1中的事件更新Form2。

+0

這不起作用。因爲我仍然需要訪問form1。 – humansg