c#类变量在propertygrid?(非setter和getter)

本文关键字:setter getter 类变量 propertygrid | 更新日期: 2023-09-27 18:08:25

我几乎到处都找过了,但似乎找不到答案。我正在为一款游戏构建一个关卡编辑器,我想在其中选择对象并在propertygrid中显示它们的变量,以便在运行时对它们进行编辑。

下面是一个示例类:

public class InteractiveObject
{
    public Vector2 location = Vector2.Zero;
    public  float _width = 0;
    public  float _height = 0;

    virtual public float width
    {
        get
        {
            return _width;
        }
        set { _width = value; }
    }
    virtual public float height
    {
        get
        {
            return _height;
        }
        set { _height = value; }
    }
}

propertygrid现在只显示宽度和高度。我将类绑定到propertygrid,像这样:

InteractiveObject obj = new InteractiveObject();
propertyGrid.SelectedObject = obj;

关于如何显示变量并反映属性网格中所做的更改到对象的任何想法?谢谢。

c#类变量在propertygrid?(非setter和getter)

您应该将这些成员(location, width, height)设置为属性,并且还应该将它们设置为像其他属性一样的虚拟属性。这个类看起来应该是一个基类,其他东西将从它继承,并且您通过将这些项粘贴为公共成员而不是公共虚拟属性来限制它们自定义的能力。

当它是虚拟属性时,会发生两件事:

  1. 所有访问必须通过get/set进入,因为类成员不是public
  2. ,访问可以由子类
  3. 自定义

即使您这样做只是为了能够在属性中放置调试断点或一些诊断输出,也可能是值得的。

同时,它将立即与您提到的属性网格一起工作(我想)。

也就是说,反射应该能够为您提供公共成员,所以理论上您可以增强这个PropertyGrid(如果它是您的代码)或编写您自己的(如果它不是),它将显示属性和公共成员。