编程语言
首页 > 编程语言> > c# – Winforms PropertyGrid – 属性不可编辑

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