WinForm控件开发总结(五)-----为控件的复杂属性提供类型转换器
现在在前一篇文章中的创建的控件代码中添加一个Scope属性:
publicScope Scope
{
get
{
return _scope;
}
set
{
_scope = value;
}
}
这个属性的类型是Scope类,代码如下:
{
private Int32 _min;
private Int32 _max;
public Scope()
{
}
public Scope(Int32 min, Int32 max)
{
_min = min;
_max = max;
}
[Browsable(true)]
public Int32 Min
{
get
{
return _min;
}
set
{
_min = value;
}
}
[Browsable(true)]
public Int32 Max
{
get
{
return _max;
}
set
{
_max = value;
}
}
}
添加完属性后,build控件工程,然后在测试的工程里选中添加的控件,然后在属性浏览器里观察它的属性,发现Scope属性是灰的,不能编辑。前一篇文章提到了,在属性浏览器里可以编辑的属性都是有类型转换器的,而.NET框架为基本的类型和常用的类型都提供了默认的类型转换器。接下来我们为Scope类添加一个类型转换器,以便这个属性能够被编辑,而且也可以在源代码文件里自动生成相应的代码。下面是类型转换器的代码:
{
public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
{
if (sourceType == typeof(String)) return true;
return base.CanConvertFrom(context, sourceType);
}
public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
{
if (destinationType == typeof(String)) return true;
if (destinationType == typeof(InstanceDescriptor)) return true;
return base.CanConvertTo(context, destinationType);
}
public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType)
{
String result = "";
if (destinationType == typeof(String))
{
Scope scope = (Scope)value;
result = scope.Min.ToString()+"," + scope.Max.ToString();
return result;
}
if (destinationType == typeof(InstanceDescriptor))
{
ConstructorInfo ci = typeof(Scope).GetConstructor(new Type[] {typeof(Int32),typeof(Int32) });
Scope scope = (Scope)value;
return new InstanceDescriptor(ci, new object[] { scope.Min,scope.Max });
}
return base.ConvertTo(context, culture, value, destinationType);
}
public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)
{
if (value is string)
{
String[] v = ((String)value).Split(',');
if (v.GetLength(0) != 2)
{
throw new ArgumentException("Invalid parameter format");
}
Scope csf = new Scope();
csf.Min = Convert.ToInt32(v[0]);
csf.Max = Convert.ToInt32(v[1]);
return csf;
}
return base.ConvertFrom(context, culture, value);
}
}
现在我们为类型提供类型转换器,我们在类型前面添加一个TypeConverterAttribute,如下:
publicclassScope
添加完以后build工程,然后切换到测试工程,选中控件,在属性浏览器里查看属性,现在的Scope属性可以编辑了,如下图所示:
我们修改默认的值,然后看看Form设计器为我们生成了什么代码:
this.myListControl1.Item.Add(1);
this.myListControl1.Item.Add(2);
this.myListControl1.Item.Add(3);
this.myListControl1.Item.Add(6);
this.myListControl1.Item.Add(8);
this.myListControl1.Item.Add(9);
this.myListControl1.Location =newSystem.Drawing.Point(12, 34);
this.myListControl1.Name ="myListControl1";
this.myListControl1.Scope =newCustomControlSample.Scope(10, 200);
this.myListControl1.Size =newSystem.Drawing.Size(220, 180);
this.myListControl1.TabIndex =1;
this.myListControl1.Text ="myListControl1";
关键是这一行this.myListControl1.Scope = new CustomControlSample.Scope(10, 200),Scope类的类型转换器为属性提供了实例化的代码。
WinForm控件开发总结(五)-----为控件的复杂属性提供类型转换器相关推荐
- Asp.net控件开发学习笔记(三)-控件开发基础
封装 在asp.net中,控件被分为两类.用户控件和自定义服务器控件.前者就是我们经常用来将一些可复用的内容封装成的.ascx文件.这里主要研究后者. 创建自定义服务器控件 创建自 ...
- C#.net 地图控件开发 (一) 控件坐标与地图坐标
1. 控件坐标与地图坐标的转换 控件坐标是以左上角为基准点(原点0,0),往右为X轴正方向,往下为Y轴正方向的.而地图坐标则是以左下角为基准点,往右为X轴正方向,往上为Y轴正方向,并且可以 ...
- 无障碍开发(五)之设置获取无障碍属性值
设置获取无障碍属性值 为了跨浏览器兼容,总是使用WAI-ARIA属性解析来访问和修改ARIA属性,例如object.setAttribute("aria-valuenow", ne ...
- WINFORM控件开发 来源:博客园 作者:纶巾客
(1)开篇 我本人不是专业的控件开发人员,只是在平常的工作中,需要自己开发一些控件.在自己开发WinForm控件的时候,没有太多可以借鉴的资料,只能盯着MSDN使劲看,还好总算有些收获.现在我会把这些 ...
- 今天你写控件了吗?----ASP.net控件开发系列
今天你写控件了吗?----ASP.net控件开发系列之开篇 早段时间,同事之间很流行打CS,所以那段时间的问候变成了"今天你杀XX了吗?" 控 件开发也许是程序员最能发掘自己创造力 ...
- 【转】Asp.net控件开发学习笔记整理篇 - Asp.net客户端状态管理
最近一直在做MVC项目,对于WEBFORM 好像快忘记了.周末无聊,顺带看看他人的笔记.再次温习下. 复习大纲: 导航.页面生命周期及其它导论 一.服务器控件生命周期 二.控件开发基础 三.Asp.n ...
- .net控件开发系列
此系列我将尽我所能写下去吧,跟大家分享学习控件开发.也希望大家对我多提意见,让我们共同进步 net控件开发系列 1.net组件开发系列(-)之 ...
- Delphi 控件开发步骤
delphi 控件开发步骤 Delphi控件开发步骤 1.使用Delphi IDE的 Component -> New Component 菜单 2.按照向导逐步完成 3.控件工程文件 4.控件 ...
- WinForm开发中针对TreeView控件改变当前选择节点的字体与颜色
WinForm开发中针对TreeView控件改变当前选择节点的字体与颜色 在B/S开发中,对TreeView控件要改变当前选中节点的颜色比较方便,其有相应的SelectedNodeChanged事件 ...
最新文章
- perl: warning: Setting locale failed. Falling back to a fallback locale (“en_HK.UTF-8“).
- 周鸿祎告诫员工:勿盲目把360看成巨头 不四处出击!
- nyoj-68--三点顺序
- 前台模板 海豚php_GitHub - cbw1820446/DolphinPHP: 海豚PHP——快速开发框架(基于ThinkPHP5.0.3)...
- java、oracle对CLOB处理
- 蓝桥杯第八届省赛JAVA真题----k倍区间
- Eigen官网教程(7)geometry几何模块的实践
- python算法精解pdf_python算法精解
- 网上书店系统需求分析说明书
- 80后小学计算机课上的游戏,80后最值得回味的15个经典课间游戏(组图)
- nodejs 查看下载文件路径_Python + selenium + Chrome 模拟登陆QQ邮箱,批量下载附件,本地重命名
- 微信小程序自定义tabBar使用
- Springboot毕设项目查听课管理系统zkb6w(java+VUE+Mybatis+Maven+Mysql)
- Linux软件更新时遇到的各种问题以及解决办法
- 微信小程序精品demo:面包旅行:界面设计,文本展示,
- 计算机丢失d3dcompile,电脑d3dcompiler43.dll文件丢失怎么办 文件丢失解决方法
- 隐秘历史:那场国产金融技术的“核武器试爆”
- 腾讯手机QQ团队无障碍化探索的曲折与收获
- 面试常见问题:如何回答才得体?
- 【下载】初音ミク From Y to Y(内嵌widget,已更新下载地址)
热门文章
- air写文件 SecurityError: fileWriteResource 时报错的解决方法
- 函数的返回竟然能作为左值
- 大数据之-Hadoop之HDFS_HDFS产生背景以及定义---大数据之hadoop工作笔记0048
- npm的安装和更新---npm工作笔记002
- 大数据之-入门_大数据发展前景---大数据之hadoop工作笔记0005
- ES11新特性_动态import---JavaScript_ECMAScript_ES6-ES11新特性工作笔记065
- Netty工作笔记0051---Netty核心模块2
- SpringCloud学习笔记028---在SpringBoot中整合多数据源_实战项目
- HTML5学习笔记---Html5简单理解,发展情况...
- java零碎要点---大型软件部署方案,磁盘阵列,raid提升硬盘性能,解决由于集群带来的文件共享问题