我有兩個窗體。 (Form1和Form2) Form1_load方法,我打電話來創建Form2。C#窗體奇怪行爲
但是,Form2仍在Form1下。如何在Form1上獲取Form2? 我不想將form2.TopMost設置爲true,因爲它是全屏幕形式,並會拒絕用戶的Tab鍵。我試過focus(),它不會將Form2帶到前面。
我不想隱藏Form1,因爲用戶可能需要回退它。
我有兩個窗體。 (Form1和Form2) Form1_load方法,我打電話來創建Form2。C#窗體奇怪行爲
但是,Form2仍在Form1下。如何在Form1上獲取Form2? 我不想將form2.TopMost設置爲true,因爲它是全屏幕形式,並會拒絕用戶的Tab鍵。我試過focus(),它不會將Form2帶到前面。
我不想隱藏Form1,因爲用戶可能需要回退它。
你打開你的第二個表格太早。表單的Load事件在表單顯示之前觸發,這意味着表單2顯示在Form1之前,因此它在Form1顯示時被Form1覆蓋。
當Form1的Shown事件被激發時,您可以通過打開Form2來獲得想要的內容。
您是否試過:form2.BringToFront()
?
編輯:
您還可以使用form2.ShowDialog()
,這應該在面前表現的形式不可能性重點Form1中
雖然我已經嘗試過,但這是行不通的。請參閱下面的接受答案和解釋。 – humansg
你可以使用SetForegroundWindow(form2.Handle)
你需要這樣的聲明:
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SetForegroundWindow(IntPtr hWnd);
因爲您從Load處理程序中調用此函數,您可能會在Form1的Load之後處於競爭狀態,因此form1會被置頂。
是的,正是我認爲他們處於競賽狀態。答案是當form1完成顯示時加載form2。 – humansg
您可以使用Form2.ShowDialog()方法。請記住,這將不允許您退回到表格1,直到您關閉Form2。如果Form2依賴於來自Form1的數據,我寧願使用ShowDialog(),否則您將不得不使用線程和事件來根據Form1中的事件更新Form2。
這不起作用。因爲我仍然需要訪問form1。 – humansg
'TopMost'屬性將使窗體頂部的所有其他窗口!否則使用'form2.BringToFront()' – Writwick