[英]Owner Form in Winforms
假設您有兩種形式:FormA和FormB ..
在FormA中,我有一些屬性。 FormA創建FormB並設置所有者屬性。 例如:
public FormA()
{
FormB = new FormB(){Owner = this};
}
現在,在FormB中,如果我想要訪問我在FormA上聲明的屬性。 為什么我在寫作時看不到它們:
Owner. // here I need to see FormA properties...
為什么它不像這樣工作?
嘗試這個:
var forma = Owner as FormA;
forma.Stuff = otherstuff;
由於繼承和多態性,你無法看到。
.NET中的表單繼承自名為Form的基類。 FormA是一個派生自Form的類,FormB也是如此。
現在,Form提供了一個所有者表單,
public Form Owner { get; }
您為其分配了FormA。 沒問題! 派生類可以視為其基類。 但是,如果您訪問它,則會返回一個表單,因此您需要做的是將新表單轉換回您實際提供的表單:
FormA form = (FormB)Owner;
這與做的幾乎相同:
FormA form = Owner as FormB;
但有一些警告。 as
運算符是“安全轉換”,如果對象不是提供的類型,則返回null。
我建議你只使用我們提供的代碼,當你有時間時,研究繼承和多態。 它們是了解正在發生的事情的關鍵。
如果我可以做一些自我宣傳,我寫了一篇關於為什么你會通常避免as
這可能會覺得有趣,及時。
原因是一個叫做多態的概念。 在更具體的意義上, Owner
屬性是Form
類型。 FormA
繼承自Form
類型,因此在某種程度上,它是Form
和FormA
。 解決這個問題的方法是將所有者“ FormA
”為FormA
,如下所示:
FormA fa = Owner as FormA;
if (fa != null)
{
// do something
}
你想在這里檢查null
的原因是,也許其他人正在使用你的FormB
,並且已將Owner
屬性設置為FormC
類型,你不一定能夠控制它。 在這種情況下, Owner as FormA
的代碼Owner as FormA
將返回null
。 因此,空檢查確保您不會得到任何令人討厭的驚喜。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.