FoxOne---一个快速高效的BS框架--WEB控件属性编辑器

FoxOne---一个快速高效的BS框架--(1)

FoxOne---一个快速高效的BS框架--(2)

FoxOne---一个快速高效的BS框架--(3)

FoxOne---一个快速高效的BS框架--(4)

FoxOne---一个快速高效的BS框架--WEB控件属性编辑器

FoxOne---一个快速高效的BS框架--数据访问(Dao)

FoxOne---一个快速高效的BS框架--生成增删改查

 

我们都知道,VS中有个WEBFORM的控件属性编辑器,能够自动反射控件的各个属性,并且根据属性的类型出现相应的编辑控件,例如:

1.布尔类型,对应下拉框,里面的选项出现 是 和 否

2.枚举类型,对应下拉框,里面的选项出现的是枚举的各个值

3.string类型和int类型,出现的都是输入框

对于除String和值类型之外的其它类型的属性,支持得就不太好了,需要手动去实现自己的UITypeEditor,并且用Attribute的方式声明到属性中。

如果不声明自定义复杂类型对应的Editor,那么结果将如下面的User属性:

只是给了一个惨白的输入框,没什么实际意义,只是想告诉你这个属性我识别到了,无能为力。。。

 

显然我不可能让每个实现了自定义控件的人都去实现一次UITypeEditor,所以我决定基于VS控件属性编辑器的基础之上,增加对其它类型的支持,包括:

1.所有继承自IControl接口的接口类型;

2.所有实现自IControl接口的类型及其子类;

3.泛型列表属性(IList<T>),不过类型T也只能是实现了IControl或其实现类的子类;

效果是这样的:

上面的截图是Table控件的各个属性,其中String和值类型的属性出现在“表格组件”那一栏,其它类型的属性分别出现在各个选项卡中,有接口,有复杂类型,也有泛型列表类型;

其中,对于泛型列表类型,出现的编辑页面如下:

点击这个页面的”新增“时,出现的是对TableColumn类型的编辑;

 

对于自定义的复杂类型,效果如下:

 

对于接口类型的属性,出现如下编辑页:

注意上图中出现的五个供选择的数据源是实现了IListDataSource的类型,只要是实现了特定的接口,无需一一注册也会被自动识别到(当然那个扩展是出现在你后来新建的工程的话,那工程的Assembly还是要注册一下的)

当然也可以用特定的Attribute去声明属性需要特定的编辑控件,或者数据源,或者是否出现在编辑器中。

例如:

对于”数据表数据源“,在编辑它的属性时,表名是可以直接选择,而不用手动填写的,但属性类型是String的,这是因为:

在代码中,我用FormFieldAttribute声明了这个属性需要用下拉框,并且用FunctionDataSourceAttribute声明这个下拉框的数据源来自AllTableDataSource。

这样的话,这个控件属性编辑器就很灵活了。。

对于这样的设计,实现中有四点是比较关键的:

1.对于控件属性类型的反射识别,对于不同的类型出现不同的编辑页面;

2.控件的系列化;

3.系列化之后结果的存储,其父子关系的关联;

4.控件的反系列化;

在接下来的文章中,我将继续就这4点展开叙述。。

如果有兴趣的可以加入群里来交流一下,群号:581523872

 

github:https://github.com/gameking0124/FoxOne

posted on   0124  阅读(2938)  评论(8编辑  收藏  举报

编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示