0

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

由于我将我的子小部件存储在父 Widget 的容器中,因此子部件将被存储为 Widget,不是吗?意味着 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
}
4

1 回答 1

3

我假设你有一些这样的代码:

myPropertyGrid.SelectedObject = widget;

由于该SelectedObject属性是 type object,因此无论您是否为其分配一个静态称为 an objectWidget或的对象都没有关系Button:它将作为object. 由于某些其他原因,您的子属性没有出现。

于 2013-11-02T13:43:44.043 回答