[英]Why can't I directly access the properties of a custom object that I've assigned to a WinForms Control.Tag property?
我想使用自定義對象ButtonMetaData
設置Winforms Control.Tag
屬性,然后使用Control.Tag屬性訪問ButtonMetaData
的屬性。 因為Tag屬性被定義為對象而應該工作,對嗎? 參見圖1。
但是,為了訪問ButtonMetaData
的屬性,我被迫將Tag
對象分配給一個中間對象變量(在我的示例中為x
),以便訪問ButtonMetaData
屬性。 當我嘗試使用已ButtonMetaData
為ButtonMetaData
的Tag對象訪問它們時,編譯器抱怨。 參見圖2。
為什么我不能直接訪問的性能ButtonMetaData
使用已轉換為標簽對象ButtonMetaData
?
圖1
圖2
public class ButtonMetaData
{
public bool clickedByUser;
public bool clickedProgramatically;
public ButtonMetaData(bool clickedByUser, bool clickedProgramatically)
{
this.clickedByUser = clickedByUser;
this.clickedProgramatically = clickedProgramatically;
}
}
private void Button1_Click(object sender, EventArgs e)
{
Button button = (Button)sender;
button.Tag = new ButtonMetaData(clickedByUser: true, clickedProgramatically: false);
//BUILDS OK
ButtonMetaData x = (ButtonMetaData)button.Tag;
Console.WriteLine(x.clickedByUser);
Console.WriteLine(x.clickedProgramatically);
//BUILDS OK
//DOESN'T BUILD - error on field clickedByUser and error on field clickedProgramatically
Console.WriteLine((ButtonMetaData)button.Tag.clickedByUser);
Console.WriteLine((ButtonMetaData)button.Tag.clickedProgramatically);
//DOESN'T BUILD - error on field clickedByUser and error on field clickedProgramatically
}
你忘了一些括號。 你需要投button.Tag
到ButtonMetaData
。 嘗試這個:
Console.WriteLine(((ButtonMetaData)button.Tag).clickedByUser);
如果沒有括號,你是鑄造button.Tag.clickedByUser
到ButtonMetaData
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.