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

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

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

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

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

我们都知道,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

FoxOne---一个快速高效的BS框架--WEB控件属性编辑器的更多相关文章

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

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

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

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

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

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

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

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

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

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

  6. 一个完善的ActiveX Web控件教程

    免费打工仔:一个完善的ActiveX Web控件教程 出自Ogre3D开放资源地带   跳转到: 导航, 搜索 原作者 David Marcionek. 翻译 免费打工仔 这个教程可以帮助你快速开发一 ...

  7. 【VS开发】免费打工仔:一个完善的ActiveX Web控件教程

    作者 David Marcionek. 翻译 免费打工仔 这个教程可以帮助你快速开发一个ActiveX控件.其中将要讲解关于ActiveX开发的一些基础概念,诸如方法(method).属性(prope ...

  8. 基于jQuery 常用WEB控件收集

    Horizontal accordion: jQuery 基于jQuery开发,非常简单的水平方向折叠控件. Horizontal accordion: jQuery jQuery-Horizonta ...

  9. 【WEB自动化测试之控件定位】基于HTML5控件的唯一控件属性定位

      一.WEB控件定位是什么 要想弄懂这个问题,我们还是基于实践来学习.我们先来看一条入门级别自动化测试用例的构成. DemoCase:正确用户名和密码登录博客园,登录成功 URL: https:// ...

随机推荐

  1. 《CSS网站布局实录》学习笔记(三)

    第三章 CSS网页布局与定位 3.1 div 几乎XHTML中的任何标签都可以用于浮动与定位,而div首当其冲.对于其他标签而言,往往有它自身存在的目的,而div元素存在的目的就是为了浮动与定位. 3 ...

  2. nexus 的使用及maven的配置

    一.nexus的安装 1.下载nexus(点解这里) 2.下载后解压文件,将解压后的nexus文件放在你自己想要的地方 3.配置环境变量(和配置java的环境变量一样) 4.安装和启动nexus 由于 ...

  3. ORACLE复制数据库【weber出品】

    一.概述 在公司中,我们会经常面临着一种情况.我们制定了对数据库的操作方案后,还不可以在真正的数据库上执行,需要在备用数据库进行测试,这个时候就需要备用数据上的数据和真正数据库的数据是一模一样的.我们 ...

  4. swift 类 结构体 作为参数 以及可变参数

    Class class Person{ var age = 22, name = "frank" func growolder() { self.age++ //++ 要跟住 不要 ...

  5. js子窗口修改父窗口内容

    在框架中,我用 JavaScript 获取 JSON 数据,组织成 HTML 代码,最后将其填充至上层文档的一个元素中.按照一般的写法,我们需要用到类似如下的语句: 1.window.parent.d ...

  6. mobx react

    目录结构: Model/index.js 'use strict'; import { action, autorun, observable, computed } from "mobx& ...

  7. Linux 挂载iso,并设置为源

    ubuntu在安装lsb-core时需要从 /media/cdrom中查找源,无奈我机器的光驱被我换为硬盘了,无法安装光盘,只有在网上下载的iso文件在硬盘中,所以把iso挂载到它要查找位置 执行: ...

  8. jq实现鼠标经过图片翻滚效果

    短短的十多行代码就实现了一个酷炫的图片翻滚代码,要实现这个效果并不难,只要思路对了,一切都好办,不多说了,直接上代码看效果! html结构: <ul class="list" ...

  9. eclipse下编译openfire3.9.1源码

    [一].下载源码 打开网址:http://www.igniterealtime.org/downloads/source.jsp 选择目前最新版本 openfire_src_3_9_1.zip 下载. ...

  10. idhttp post 上传或下载时显示进度条

    通过 idhttp 带进度条上传演示一下,下载和上传原理差不多,说明一下下面例子中的的idhttp 是动态创建的 第一步:添加一个StatusBar或者gauge 进度条,这2个都可以.我用的是 st ...