簡體   English   中英

.Owner屬性和ShowDialog(IWin32Window所有者)之間的區別?

[英]Difference between .Owner property and ShowDialog(IWin32Window owner)?

我假設可以通過.Owner屬性顯式設置winform的所有者,或者通過在重載方法ShowDialog中傳遞所有者(IWin32Window所有者)

我無法理解為什么這些方法在使用MDI表單時表現出不同的行為。

我創建了一個MDIParent和一個MDIChild。

我還有一個簡單的winform MyDialogBox,可以在加載時顯示其所有者。

MessageBox.Show("Dialog's owner is " + this.Owner.Name);

方法A - 在MDIChild的加載中我有以下代碼,這導致MyDialogBox的所有者被設置為MDIChild

MyDialogBox box = new MyDialogBox();
box.Owner = this; // Set owner as MDIChild
box.ShowDialog();

方法B - 或者,在MDIChild的加載方法中,我有以下代碼,它導致MyDialogBox的所有者被設置為MDIParent

MyDialogBox box = new MyDialogBox();
box.ShowDialog(this); // Pass MyMDIChild as owner

我也在這里閱讀以下內容

只有MDI父窗體可以擁有另一個窗體,無論是MDI子窗口,模式對話框還是將父窗口設置為所有者參數的窗體。

如果是這樣,方法A根本不起作用,不是嗎?

我錯過了什么? 為什么方法B沒有將所有者設置為MDIChild?

使用Reflector查看這兩個選項的差異,看起來它們的實現略有不同: box.Owner = this只是將提供的值分配給內部所有者字段。 但是,在調用ShowDialog(IWin32Window) ,實現會在分配值之前執行以下調用:

owner = ((Control) owner).TopLevelControlInternal;

這可能導致MDIParent的分配。

注意 :我遠不是MDI的專家,所以我可能在這里錯了)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM