Nov*_*Eng 1 c# object-reference winforms
我想Control.Tag用我的自定义对象设置Winforms 属性,ButtonMetaData然后访问ButtonMetaData使用Control.Tag属性的属性.应该工作,因为Tag属性被定义为一个对象,对吗?见图1.
但是,为了访问属性ButtonMetaData,我不得不将Tag对象分配给中间对象变量(x在我的示例中)以访问ButtonMetaData属性.当我尝试使用已转换为的Tag对象访问它们时ButtonMetaData,编译器会抱怨.见图2.
为什么我不能直接访问ButtonMetaData使用已转换为的Tag对象的属性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
}
Run Code Online (Sandbox Code Playgroud)
你忘了一些括号.你需要转换button.Tag到ButtonMetaData.试试这个:
Console.WriteLine(((ButtonMetaData)button.Tag).clickedByUser);
Run Code Online (Sandbox Code Playgroud)
如果没有括号您铸造button.Tag.clickedByUser到ButtonMetaData...
| 归档时间: |
|
| 查看次数: |
52 次 |
| 最近记录: |