任何人都可以告訴我如何區分它們嗎?頂層窗口,子窗口,對話框(模態)窗口和非對話框(無模式)窗口之間有什麼區別?
我很難理解頂級子窗口與對話框/非對話窗口有什麼區別因素? 頂層窗口可以是對話/非對話窗口嗎? 子窗口可以是對話框/非對話窗口嗎?
任何人都可以告訴我如何區分它們嗎?頂層窗口,子窗口,對話框(模態)窗口和非對話框(無模式)窗口之間有什麼區別?
我很難理解頂級子窗口與對話框/非對話窗口有什麼區別因素? 頂層窗口可以是對話/非對話窗口嗎? 子窗口可以是對話框/非對話窗口嗎?
頂級表單屬於桌面,而子表單屬於另一種表單;這意味着關閉或最小化擁有表單也會影響子表單。
模態窗體/對話框會阻止調用線程,直到窗體關閉,而非模態窗體允許您在顯示時與應用程序中的其他窗體進行交互。任何形式都可以是模態/無模式的,無論它是頂級還是子級形式 - 但是模態對話的默認行爲將歸屬於導致它們顯示的形式。
從MSDN:
莫代爾
模式窗體或對話框必須關閉或隱藏,然後才能繼續使用該應用程序的其他部分的工作。
無模式
模式窗體讓你轉移的形式,並且另一種形式之間的焦點,而不必關閉初始形式。
頂層窗口可以是模態(對話)或無模式。
頂級窗口屬於桌面,因此它不能是父窗體的子項。
父窗體擁有的子窗口,不是的頂級窗體,因爲它具有父窗體。但它可以位於頂部,Z順序爲,根據其顯示方式可以是模式或無模式,分別爲ShowDiaglog()
或Show()
。
頂層窗口:不屬於任何其他窗口的窗口,因此它們管理自己的一生。示例記事本窗口
子窗口:其他窗口擁有的窗口。其他窗口本身可以是頂層或者子層。示例編輯記事本的框或狀態欄,因此如果關閉記事本窗口編輯框,狀態欄等窗口不見了。
模式窗口:阻止當前線程執行直到活動的窗口。如果它是一個子窗口,那麼與其父窗口的任何交互都將被阻止。記事本的字體對話框示例如果您打開字體窗口,則無法在記事本窗口上鍵入任何內容。
無模式窗口:當它處於活動狀態時不會阻止當前線程執行的窗口,所以如果它是子窗口,它允許您與其父窗口進行交互。示例查找記事本對話框,如果按Ctrl + F並打開查找窗口,則可以將其放在一邊,然後繼續在主記事本窗口上打字。
重要的一點,一個窗口可以是Child或者Top,但不能同時爲兩個。
希望這會有所幫助。
這是否意味着您可以擁有一個無模式的子窗口? –
@ZammyPage是的,這很常見;例如,在文本編輯器中,查找功能可能是一個無模式子窗口,允許您在查找窗口仍然在屏幕上時繼續與主窗口進行交互(滾動瀏覽文檔等)。 –
非常感謝。我會將其標記爲答案。我問這個問題的原因是我很難理解爲什麼XBAP不允許我創建一個模式窗口。另外爲什麼我不能在XBAP中使用子窗口? –