我有一些代碼,它調用form.ShowDialog(IWin32Window)
過載而不是form.ShowDialog()
,但它在當前活動窗口中傳遞作爲參數。什麼時候需要調用form.ShowDialog(IWin32Window)而不是form.ShowDialog()?
使用其他過載似乎會使行爲保持不變。切換到更簡單的過載是否安全?我什麼時候想要傳入IWin32Window參數?
我有一些代碼,它調用form.ShowDialog(IWin32Window)
過載而不是form.ShowDialog()
,但它在當前活動窗口中傳遞作爲參數。什麼時候需要調用form.ShowDialog(IWin32Window)而不是form.ShowDialog()?
使用其他過載似乎會使行爲保持不變。切換到更簡單的過載是否安全?我什麼時候想要傳入IWin32Window參數?
IWin32Window
參數用於指定對話框的所有者。在這種情況下,它是一個接口,以便您可以將非管理窗口(例如來自您使用的COM對象的窗口)作爲對話的所有者。
我不同意這裏的用戶說,你不應該指定一個所有者。事實上,如果可能的話,最好指定一個表單的所有者。雖然對話可能不像非模態形式那麼重要,但養成指定擁有者的習慣總是一個好主意。
如果您想在另一個應用程序或窗體中將您的窗體添加到窗體中,您可以使用IWin32Window參數。
因此,例如,您可以獲取另一個應用程序或表單的句柄,並將該表單顯示爲該應用程序的一部分。你可以找到更多的信息here
你應該在正常情況下使用void構造函數。像Nathan說的那樣,如果你想用特定的所有者來顯示對話框,只能使用IWin32Window構造函數。這通常不是必需的。
ShowDialog()狀態的文檔「將窗體顯示爲模態對話框,並將當前活動窗口設置爲其所有者。」因此,除非您明確需要將表單的所有者設置爲不是活動窗口的窗口,否則不需要使用ShowDialog(IWin32Window)。
編寫代碼以傳達您的意圖總是一個好主意,因此即使您只想將其父母添加到活動窗口,將該窗口指定爲參數也會使您的代碼明確表達意圖,而不是依賴那些維護您的代碼以確定顯示對話框時哪個窗口打算處於活動狀態。 – 2009-04-22 13:33:23
所以你認爲你應該只在你想要的時候使用無參數超載*無論哪個窗口是活動窗口都是父窗口? – Ant 2009-04-22 16:46:05