C#动态转换属性网格的对象

时间:2013-11-02 13:38:00

标签: c# winforms

我有一个名为Widget的父类。我有一个我存储的小部件列表。在此列表中,我存储了Widget的子项,如Button,Label,DropDown等。在我的编辑器中选择子项时,我将该对象(通过Widgets列表中的名称查找)分配给PropertyGrid。但是,因为它们存储为类型Widget,所以PropertyGrd仅显示Widget属性。 当我将其设置为PropertyGrid时,我想将子Widget转换为它的实际类型,以便PropertyGrid可以看到子属性,但我想动态地执行此操作而不是使用if / case语句,因为子窗口小部件使用插件系统,所以我不知道在设计时类型是什么。我知道我必须使用反射,我很好,但我只是不知道如何做到这一点。

由于我将子窗口小部件存储在父窗口小部件的容器中,因此子窗口将被存储为窗口小部件不是吗?这意味着PropertyGrid只看到Widget属性?

Dictionary<string, Widget> Widgets;

Widgets.Add("button1", new Button());  // gets converted to parent Widget

PropGrid.SelectedObject = Widgets["button1"];


public class Button : Widget.Widget
{
    public String Test { get; set; } // this doesn't show up in the property grid
}

1 个答案:

答案 0 :(得分:3)

我假设你有这样的代码:

myPropertyGrid.SelectedObject = widget;

由于SelectedObject属性属于object类型,因此无论您是为其分配一个静态称为objectWidget的对象,还是Button:它将被视为object。由于其他原因,您的孩子的财产没有出现。