2015-10-15 199 views

回答

4

頂級表單屬於桌面,而子表單屬於另一種表單;這意味着關閉或最小化擁有表單也會影響子表單。

模態窗體/對話框會阻止調用線程,直到窗體關閉,而非模態窗體允許您在顯示時與應用程序中的其他窗體進行交互。任何形式都可以是模態/無模式的,無論它是頂級還是子級形式 - 但是模態對話的默認行爲將歸屬於導致它們顯示的形式。

+0

這是否意味着您可以擁有一個無模式的子窗口? –

+0

@ZammyPage是的,這很常見;例如,在文本編輯器中,查找功能可能是一個無模式子窗口,允許您在查找窗口仍然在屏幕上時繼續與主窗口進行交互(滾動瀏覽文檔等)。 –

+0

非常感謝。我會將其標記爲答案。我問這個問題的原因是我很難理解爲什麼XBAP不允許我創建一個模式窗口。另外爲什麼我不能在XBAP中使用子窗口? –

2

MSDN

莫代爾

模式窗體或對話框必須關閉或隱藏,然後才能繼續使用該應用程序的其他部分的工作。

無模式

模式窗體讓你轉移的形式,並且另一種形式之間的焦點,而不必關閉初始形式。

頂層窗口可以是模態(對話)或無模式。

頂級窗口屬於桌面,因此它不能是父窗體的子項。

父窗體擁有的子窗口,不是的頂級窗體,因爲它具有父窗體。但它可以位於頂部,Z順序爲,根據其顯示方式可以是模式或無模式,分別爲ShowDiaglog()Show()

+0

你確定頂級窗口可以模態嗎? –

+0

是的。要以模態方式顯示錶單,請使用'ShowDialog()'方法。 Form.Modal屬性可用於測試顯示錶單的模態。看看[這裏](https://msdn.microsoft.com/en-us/library/system.windows.forms.form.modal%28v=vs.110%29.aspx) – khargoosh

+0

考慮擴大_「top級別窗口「_並解釋_」子窗口_「,如OP的標題所述。目前,您只是解釋_modal_和_modeless_窗口之間的區別。 – MickyD

1

頂層窗口:不屬於任何其他窗口的窗口,因此它們管理自己的一生。示例記事本窗口

子窗口:其他窗口擁有的窗口。其他窗口本身可以是頂層或者子層。示例編輯記事本的框或狀態欄,因此如果關閉記事本窗口編輯框,狀態欄等窗口不見了。

模式窗口:阻止當前線程執行直到活動的窗口。如果它是一個子窗口,那麼與其父窗口的任何交互都將被阻止。記事本的字體對話框示例如果您打開字體窗口,則無法在記事本窗口上鍵入任何內容。

無模式窗口:當它處於活動狀態時不會阻止當前線程執行的窗口,所以如果它是子窗口,它允許您與其父窗口進行交互。示例查找記事本對話框,如果按Ctrl + F並打開查找窗口,則可以將其放在一邊,然後繼續在主記事本窗口上打字。

重要的一點,一個窗口可以是Child或者Top,但不能同時爲兩個。

希望這會有所幫助。