设置类型';s动态UI控件的属性值

本文关键字:控件 UI 属性 动态 置类型 | 更新日期: 2023-09-27 18:29:07

我有一个业务层,其中有一个名为Products的命名空间。所以:商业。产品

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

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

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

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

附言:这实际上是一个已知的面试问题,但我希望这种反思方法能够支持未来继承结构和移动/添加/删除属性的各种混乱。请在此处查看问题本身:http://codecrafter.blogspot.com/

设置类型';s动态UI控件的属性值

您使用过PropertyGrid控件吗?它已经有了这种东西。而且,它是典型的Windows环境处理这种事情的方式。它还可以很好地与System.ComponentModel命名空间交互,这样您就可以编辑每个属性的标记方式、描述、允许值。。。

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