|
网站首页
|
模板
|
资料
|
源码
|
工具
|
开发
|
设计
|
安全
|
项目
|
网络
|
图片
|
系统
|
数据库
|
博客
|
会员中心
|
小说
|
网络学院
学习资料
源码模版
您现在的位置:
精品下载
>>
项目
>>
项目管理
>> 项目管理正文
用户登录
新用户注册
组件编程之TypeConverterAttribute
【字体:
小
大
】
组件编程之TypeConverterAttribute
作者:佚名 项目管理来源:不详 点击数: 更新时间:2007-12-18
今天的这篇文章,我主要是带来PropertyAttribute里的TypeConverterAttribute的讲解,首先在这里讲讲TypeConverterAttribute的作用是什么:当Component的某个Property被设置时,如Size="60,70",解析器会通过类型转化器,把这个字符串自动转换为属性声明的类型。.net的框架中已经声明了很多的类型转化器,下面的代码中有列举到。有点类似于operator。
同时在Asp.net服务器控件的编写中TypeConverterAttribute也将会非常有用,服务器控件的Property只能以string形式保存在aspx页面里,而在服务器控件的DesignTime和RunTime时必须要把string转换为相应的类型。
源代码如下:
using System;
using System.Collections.Generic;
using System.Text;
using System.ComponentModel;
using System.Globalization;
namespace ClassLibrary1
{
public class Class1 : Component
{
private Size _size;
public Class1()
{
_size = new Size();
}
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
[TypeConverter(typeof(SizeConverter))] // —— 注1,也可以把这句TypeConverterAttribute写在注2处。
public Size Size
{
get { return _size; }
set { _size = value; }
}
}
public class SizeConverter : TypeConverter // 我们自定义的Converter必须继承于TypeConverter基类。
{
/**//// <summary>
/// 是否能用string转换到Size类型。
/// </summary>
/// <param name="context">上下文。</param>
/// <param name="sourceType">转换源的Type。</param>
/// <returns></returns>
public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
{
if (sourceType == typeof(string))
{ return true; }
else
{ return false; }
}
/**//// <summary>
/// 从string转到Size类型。
/// </summary>
/// <param name="context">提供Component的上下文,如Component.Instance对象等。</param>
/// <param name="culture">提供区域信息,如语言、时间格式、货币格式等</param>
/// <param name="value"></param>
/// <returns></returns>
public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)
{
if (value == null || value.ToString().Length == 0) return new Size();
char spliter = culture.TextInfo.ListSeparator[0]; // 得到字符串的分隔符
string[] ss = ((string)value).Split(spliter);
Int32Converter intConverter = new Int32Converter(); // 得到类型转换器,.net中为我们定义了一些常见的类型转换器。
return new Size((Int32)intConverter.ConvertFromString(context, culture, ss[0]),
(Int32)intConverter.ConvertFromString(context, culture, ss[1]));
}
/**//// <summary>
/// 是否能用Size转换到string类型。
/// </summary>
/// <param name="context"></param>
/// <param name="destinationType">转换目标的类型。</param>
/// <returns></returns>
public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
{
if (destinationType == typeof(Size)) // 如果是Size格式,则允许转成string。
{ return true; }
else
{ return false; }
}
// 在Property窗口中显示为string类型。
public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType)
{
if (value == null) return string.Empty;
if (destinationType == typeof(string))
{
Size size = (Size)value;
TypeConverter intConverter = TypeDescriptor.GetConverter(typeof(Int32)); // 能到类型转换器的另一种方式。
char spliter = culture.TextInfo.ListSeparator[0]; // 得到字符串的分隔符
return string.Join(spliter.ToString(), new string[]{
intConverter.ConvertToString(context, culture, size.Length),
intConverter.ConvertToString(context, culture, size.Width)});
}
return string.Empty;
}
// TypeConverter还有几个虚方法,请大家自己研究。
}
// [TypeConverter(typeof(SizeConverter))] —— 注2
public class Size
{
private Int32 _length;
private Int32 _width;
public Size(Int32 length, Int32 width)
{
_length = length;
_width = width;
}
public Size() : this(0, 0)
{}
public Int32 Length
{
get { return _length; }
set { _length = value; }
}
public Int32 Width
{
get { return _width; }
set { _width = value; }
}
}
}
项目管理录入:chqnet 责任编辑:chqnet
上一个项目管理:
代码编写中的心理学与美学
下一个项目管理:
网站运营的四大基础辅助系统
【
发表评论
】【
加入收藏
】【
告诉好友
】【
打印此文
】【
关闭窗口
】
最新热点
最新推荐
相关项目管理
高质量C++/C编程指南--第11章…
高质量C++/C编程指南--第6章…
高质量C++/C编程指南--第2章…
高质量C++/C编程指南--第4章…
高质量C++/C编程指南--前言
高质量C++/C编程指南--第8章…
UNIX下c语言的图形编程--cur…
高质量C++/C编程指南--第7章…
高质量C++/C编程指南--第7章…
非安全编程演示之高级缓冲区…
网友评论:
(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
|
设为首页
|
加入收藏
|
联系站长
|
友情链接
|
版权申明
|
在线技术支持:QQ:9296258 MYFTP资料来自网络,免费提供给网民学习。如本站侵犯了您的版权,请与我们联系。
MYFTP 版权所有 Copyright© 2004-2008 站长:
chengq