propertygrid中的C#类变量? [非二传手/吸气者]

时间:2011-09-13 23:13:53

标签: c# class variables 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,如下所示:

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

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

1 个答案:

答案 0 :(得分:0)

您应该改为使用这些成员(位置,宽度,高度)属性,并且还应该像其他属性一样使它们虚拟化。这个类看起来应该是其他东西将继承的基类,并且你通过将这些项作为公共成员而不是公共虚拟属性来限制它们的自定义能力。

当它是虚拟财产时,会发生两件事:

  1. 所有访问都必须通过get / set进入,因为类成员不是公共
  2. 可以通过子类自定义访问权限
  3. 即使你没有其他原因这样做,也没有能够在属性中放置调试断点或某些诊断输出,这可能是值得的。

    此外,它会立即与您提到的属性网格一起使用(我想)。

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