2012-03-27 47 views
0

我有一个名为Products的名称空间的业务层。所以:Business.Products从动态用户界面控件设置类型的属性值

使用反射,我加载所有类型(基类除外,不是抽象的)到一个组合框,并期望用户选择一种类型(书,食品,医药,其他:所有继承ProductBase类)并设置其属性并添加到包含ProductBase列表的全局Order对象中。

到目前为止,我从下拉菜单中选择类型,下面的组框用对应的UI控件填充,复选框用于布尔道具,用于日期时间的DateTimePicker,用于自由输入的TextBox等等。 (我将propertyinfo实例放在控件的btw属性上)

当设置UI ctrls后添加新属性时,我会为所选类型创建一个新实例并开始设置其属性。要找到更正的UI控件,我循环访问groupBox中的控件,并使用带有PropertyInfo实例的标签道具。到目前为止没有问题找到相关的控制。但控件是不同的类型(我从一个返回System.WinForms.Control的私有方法返回控件),我需要访问它的SelectedDate属性,如果它的DatePicker,IsChecked道具,如果它的CheckBox等等。我不知道该怎么做,坦率地说:)请帮助一个兄弟在这里,谢谢你提前。和平!

注:我发现大多数控件都具有Text值,即使它的DatePicker文本值看起来像日期,但不认为我真的可以使用它。

PS:这实际上是一个已知的面试问题,但我希望这种反射方法,以支持继承结构和移动/添加/删除属性的各种未来的混乱。 在这里检查问题本身:http://codecrafter.blogspot.com/

回答

1

你使用过PropertyGrid控件吗?它有这样的东西已经出炉了。而且,这是典型的Windows环境这样做的方式。它也与System.ComponentModel命名空间相互作用,所以你可以像编辑每个属性标记的方式,描述,允许的值...

另外,请注意,反射速度有点慢,不要大规模地做这件事。