![](/img/trans.png)
[英]ShowDialog(owner) is hiding behind/not showing even though I am supplying owner 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.