从动态UI控件设置Type的Property值

时间:2012-03-27 21:23:51

标签: c# winforms reflection user-interface controls

我有一个名为Products的名称空间的Business层。 so:Business.Products

使用Reflection,我将所有类型(基类,而不是抽象类)加载到组合框中,并期望用户选择一种类型(Book,Food,Medicine,Other:所有继承自ProductBase类)并设置其属性和添加到包含ProductBase列表的全局Order对象。

到目前为止,我从下拉列表中选择了类型,下面的一个组框填充了相应的UI控件,一个bool道具的CheckBox,一个日期时间的DateTimePicker,一个用于自由条目的TextBox等等。 (我将propertyinfo实例放在控件btw的Tag属性上)

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

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

PS:这实际上是一个已知的面试问题,但我想要这种反思方法,以便通过继承结构和移动/添加/删除属性来支持各种未来的混乱。 点击此处查看问题:http://codecrafter.blogspot.com/

1 个答案:

答案 0 :(得分:1)

您是否使用过PropertyGrid控件?它已经有了这样的东西。而且,这是典型的Windows环境做这样的事情的方式。它还可以非常好地与System.ComponentModel命名空间进行交互,因此您可以执行诸如编辑每个属性的标记方式,描述,允许值......

另外,请注意,反射有点慢,所以我不会大规模地这样做。