c# – Winforms PropertyGrid – 属性不可编辑
作者:互联网
您好这是我的第一个堆栈溢出问题,请原谅我,如果我做任何愚蠢的事情.
好吧,我的问题是我正在使用一个关卡编辑器,我想使用一个PropertyGrid控件来编辑磁贴/实体的属性等.所以到目前为止一切正常,值显示正确,更改时通过代码更改但问题我是expierencing是我不能改变值,除非它是一个布尔值,我googled很多但我只是找不到解决方案.
这是我定义属性的代码:
[Description("Defines the Position on the screen")]
public Vector2 screenpos { get; set; }
Vector2 WorldPos;
[Description("Defines the texture of the selected tile")]
public string texture { get; set; }
[Description("Defines if the player can collide with this tile")]
public bool IsCollidable { get; set; }
[Description("Defines on what layer this tile is drawn (1-3)")]
public int Layer { get; set; }
[Description("Shows if the tile is currently visible on the screen")]
public bool OnScreen { get; private set; }
我可以编辑IsCollidable,如果我从OnScreen的设置中删除私人我也可以编辑它,但我无法编辑其他任何东西哦,如果你能说出你的答案更简单,我会赞美我不是那么多的expierenced程序员,提前谢谢.
解决方法:
具有公共属性(即读写)的大多数标准类型应该是可编辑的.
如果Vector2相当简单,并且您只是希望它在PropertyGrid中展开,那么:
[Description("Defines the Position on the screen")]
[TypeConverter(typeof(ExpandableObjectConverter))]
public Vector2 screenpos { get; set; }
如果Vector2是你自己的代码,那么你也可以装饰Vector2本身,它将适用于所有属性:
[TypeConverter(typeof(ExpandableObjectConverter))]
public {class|struct} Vector2 {...}
对于你控制之外的类型,还有一个技巧可以做到这一点;在app启动时,运行:
TypeDescriptor.AddAttributes(typeof(Vector2),
new TypeConverterAttribute(typeof(ExpandableObjectConverter)));
标签:c,properties,winforms,propertygrid 来源: https://codeday.me/bug/20190518/1129358.html