gpt4 book ai didi

c# - Winforms PropertyGrid - 属性不可编辑

转载 作者:太空狗 更新时间:2023-10-29 23:11:06 27 4
gpt4 key购买 nike

你好,这是我的第一个堆栈溢出问题,如果我做了任何愚蠢的事情,请原谅我。好吧,我的问题是我正在使用关卡编辑器,我想使用 PropertyGrid 控件来编辑图 block /实体等的属性。所以到目前为止一切正常,值显示正确,在通过代码更改时更新但问题我正在体验的是,除非它是 bool 值,否则我无法更改值,我用谷歌搜索了很多,但我根本找不到解决方案。

这是我定义属性的代码:

    [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 的集合中删除 private,我也可以编辑它,但我不能编辑其他任何东西,哦,如果你能把你的答案说得更简单一点,我会很感激我没那么多一位经验丰富的程序员,提前致谢。

最佳答案

大多数具有公共(public)属性(即读+写)的标准类型应该是可编辑的。

如果 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 {...}

对于您控制之外的类型,还有一个技巧可以做到这一点;在应用程序启动时,运行:

TypeDescriptor.AddAttributes(typeof(Vector2),
new TypeConverterAttribute(typeof(ExpandableObjectConverter)));

关于c# - Winforms PropertyGrid - 属性不可编辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4087414/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com