簡體   English   中英

為什么不能直接訪問已分配給WinForms Control.Tag屬性的自定義對象的屬性?

[英]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屬性。 當我嘗試使用已ButtonMetaDataButtonMetaData的Tag對象訪問它們時,編譯器抱怨。 參見圖2。

為什么我不能直接訪問的性能ButtonMetaData使用已轉換為標簽對象ButtonMetaData

圖1

圖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.TagButtonMetaData 嘗試這個:

 Console.WriteLine(((ButtonMetaData)button.Tag).clickedByUser);

如果沒有括號,你是鑄造button.Tag.clickedByUserButtonMetaData ...

暫無
暫無

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

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