asp.net控件开发基础(9) -- 属性类型转换器
2007-04-25 13:38
531 查看
上一篇讲了复合控件的基础知识,本来接着要继续讲复合控件样式的使用,让我们暂时回到前面第五篇的时候,继续讨论关于属性方面的一些知识.
写第五篇的时候,我一步步的加上元数据(特性),使得设计时效果更加好,如对复杂属性应用以下特性,使属性浏览器支持扩展/折叠效果,使你更加容易编辑子属性,但接着我又遇到了问题,所以必须去解决
1.认识默认属性浏览器支持
让我们再认识一下属性,大家知道每个属性都是有类型的,最熟悉就是string,int这些类型了,vs2005属性浏览器对这些属性类型进行了识别,
如下例子
(1)table控件的Height属性,当你设置属性为字符串时,则提示错误信息
<asp:TextBox ID="TextBox1" runat="server"
Height="11" BackColor="Blue"
ForeColor="#FF8000">测试</asp:TextBox>
用代码表示则是这样,在后台代码中定义的属性类型必须相对应,BackColor必须为Color类型,否则则会出错,当在页面呈现时,则以字符串形式呈现.
通过上面,我们认识到属性类型需要转换,这里便要引出我们所要讲的话题,类型转换器.
例如,当BackColor="Blue" 时,则会激活一个类型转换器实例将字符串值转换成声明的类型(即将"blue"转换成Color类型,然后赋给BackColor.
.net类库中的基本类型和许多类型都有与其相关联的类型转换器.
一般常用的类型有String,Int,Boolean,DateTime,Enum等类型,其类型已默认与其相对应的类型转换器关联起来.
如
Color类默认关联的类型转换器System.Drawing.ColorConverter
FontInto类默认关联的类型转换器System.Drawing.FontConverter
类型转换器的基类为 System.ComponentModel.TypeConverter ,所有的类型转换器都从其派生.
下面我们再来看一个例子,
我们先定义一个复杂属性,用于测试
示例一
下面看看输出结果,如下图
[TypeConverter(typeof(ExpandableObjectConverter))]
public class Address
public class AddressConverter : ExpandableObjectConverter
[TypeConverter(typeof(AddressConverter))]
public class Address
public class GameConverter : StringConverter
[TypeConverter(typeof(GameConverter))]
[Description("喜欢的游戏")]
public String Game
{
get
{
return game;
}
set
{
game = value;
}
}
好了,.下面我们看一下效果,如下图,你可以选择下拉框的值,也可以自己手动输入,跟枚举类型很相似,但枚举类型无法自己修改值.
![](http://images.cnblogs.com/cnblogs_com/clingingboy/ServerControl/ch9/ch10.jpg)
这一篇主要介绍了 类型转换器 的基本使用,希望对大家有所帮助,在写的同时我也学到了很多,讲的比较基础,什么时候我懂了可以再补充,水平有限呀.这一篇就写到这里,很高兴,我已经写到第9篇了,我会继续写下去的,也希望大家喜欢.
[b] 示例代码下载
[/b]
参考文章
充分利用 .NET 框架的 PropertyGrid
控件
编写与.NET属性窗口交互的RAD组件
写第五篇的时候,我一步步的加上元数据(特性),使得设计时效果更加好,如对复杂属性应用以下特性,使属性浏览器支持扩展/折叠效果,使你更加容易编辑子属性,但接着我又遇到了问题,所以必须去解决
1.认识默认属性浏览器支持
让我们再认识一下属性,大家知道每个属性都是有类型的,最熟悉就是string,int这些类型了,vs2005属性浏览器对这些属性类型进行了识别,
如下例子
(1)table控件的Height属性,当你设置属性为字符串时,则提示错误信息
<asp:TextBox ID="TextBox1" runat="server"
Height="11" BackColor="Blue"
ForeColor="#FF8000">测试</asp:TextBox>
用代码表示则是这样,在后台代码中定义的属性类型必须相对应,BackColor必须为Color类型,否则则会出错,当在页面呈现时,则以字符串形式呈现.
protected void Page_Load(object sender, EventArgs e)
通过上面,我们认识到属性类型需要转换,这里便要引出我们所要讲的话题,类型转换器.
例如,当BackColor="Blue" 时,则会激活一个类型转换器实例将字符串值转换成声明的类型(即将"blue"转换成Color类型,然后赋给BackColor.
.net类库中的基本类型和许多类型都有与其相关联的类型转换器.
一般常用的类型有String,Int,Boolean,DateTime,Enum等类型,其类型已默认与其相对应的类型转换器关联起来.
如
Color类默认关联的类型转换器System.Drawing.ColorConverter
FontInto类默认关联的类型转换器System.Drawing.FontConverter
类型转换器的基类为 System.ComponentModel.TypeConverter ,所有的类型转换器都从其派生.
下面我们再来看一个例子,
我们先定义一个复杂属性,用于测试
示例一
using System; 2using System.Collections.Generic; 3using System.Text; 4 5namespace CustomComponents 6<%@ Page Language="C#" %> 2 3<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 4 5<script runat="server"> 6 7 void Page_Load(object sender, EventArgs e) 8 28</script> 29<html xmlns="http://www.w3.org/1999/xhtml" > 30<head id="Head1" runat="server"> 31 <title>FontInfo Example</title> 32</head> 33 <body> 34 <form id="form1" runat="server"> 35 <h3>FontInfo Example</h3> 36 <asp:Label id="myLabel" 37 runat="server" > 38 </asp:Label> 39 <br /> 40 <br /> 41 <asp:Label ID="Label1" Width="200px" runat="server" BackColor="#FF8080" Text="Label" ForeColor="Red"></asp:Label> 42 </form> 43 </body> 44</html> 45 46
下面看看输出结果,如下图
[TypeConverter(typeof(ExpandableObjectConverter))]
public class Address
public class AddressConverter : ExpandableObjectConverter
[TypeConverter(typeof(AddressConverter))]
public class Address
public class GameConverter : StringConverter
[TypeConverter(typeof(GameConverter))]
[Description("喜欢的游戏")]
public String Game
{
get
{
return game;
}
set
{
game = value;
}
}
好了,.下面我们看一下效果,如下图,你可以选择下拉框的值,也可以自己手动输入,跟枚举类型很相似,但枚举类型无法自己修改值.
![](http://images.cnblogs.com/cnblogs_com/clingingboy/ServerControl/ch9/ch10.jpg)
这一篇主要介绍了 类型转换器 的基本使用,希望对大家有所帮助,在写的同时我也学到了很多,讲的比较基础,什么时候我懂了可以再补充,水平有限呀.这一篇就写到这里,很高兴,我已经写到第9篇了,我会继续写下去的,也希望大家喜欢.
[b] 示例代码下载
[/b]
参考文章
充分利用 .NET 框架的 PropertyGrid
控件
编写与.NET属性窗口交互的RAD组件
相关文章推荐
- asp.net控件开发基础(9) ----------再谈属性,学习自定义类型转换器
- ASP.NET控件开发基础之类型转换器浅析
- asp.net控件开发基础(5) ----------简单介绍自定义控件简单属性和复杂属性
- asp.net控件开发基础(5) ----------简单介绍自定义控件简单属性和复杂属性
- asp.net控件开发基础(10) --------再谈属性,实现自定义控件集合属性
- Asp.Net 控件开发之属性转换器
- asp.net控件开发基础(6) ----------简单介绍自定义控件样式属性
- asp.net控件开发基础(5) -- 复杂属性、内嵌属性
- asp.net控件开发基础(10) -- 集合属性的使用
- ASP.NET控件开发基础之实现控件集合属性
- asp.net控件开发基础(5) -- 复杂属性、内嵌属性
- asp.net控件开发基础(1)
- asp.net控件开发基础(9)
- asp.net控件开发基础示例代码打包
- asp.net控件开发基础示例代码打包
- 转载:asp.net控件开发基础系列
- asp.net控件开发基础(1)
- asp.net控件开发基础(5)
- Asp.net 2.0 自定义控件开发专题讲解[为用户控件增加DataSource属性, 能够自动识别不同数据源](示例代码下载)
- Asp.net 2.0 自定义控件开发专题讲解[为用户控件增加DataSource属性, 能够自动识别不同数据源](示例代码下载)