知识大全 .net WinForm用户控件开发:用户控件复杂属性设置
Posted 属性
篇首语:有些人不管变得多么衰老,却从不失去他们的美丽本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 .net WinForm用户控件开发:用户控件复杂属性设置相关的知识,希望对你有一定的参考价值。
.net WinForm用户控件开发:用户控件复杂属性设置 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
这一节 大家共同学习下 用户控件的自定义的复杂的属性设置 我们这里自定义一个用户控件和自定义一个属性
本节重点:
怎样定义复杂属性
复杂属性和基本类型相互转换
第一步 先来自定义一个类 代码如下
/// <summary> /// 自定义属性类 /// </summary> public class CustomAttri public CustomAttri(int width int height) _width = width; _height = height; public CustomAttri() private int _width; private int _height; /// <summary> /// 宽度 /// </summary> public int Width get return _width; set _width = value; /// <summary> /// 高度 /// </summary> public int Height get return _height; set _height = value;
然后自定义一个控件 并且定义一属性SecondSize 代码如下
public partial class UCPanel : Control public UCPanel() InitializeComponent(); private CustomAttri _sSize=new CustomAttri( );; /// <summary> /// 定义自定义属性 /// </summary> [Description( 第二尺寸 )] [Category( 尺寸 )] public CustomAttri SecondSize get return _sSize; set _sSize=value;
此时编译项目 然后把用户控件拖到窗体上 就可以在属性设计器中看到此属性 但是此时属性是只读的 不能设置值
效果图如下
接下来 我们实现让用户可以自己设置属性的值 并把用户输入的值进行转换
如果想要把用户输入的值转换为我们自定义的类型 需要继承TypeConverter 类 并实现其方法
转换器代码如下:
/// <summary> /// 自定义类型转换器 /// </summary> public class CustomAttriConverter:TypeConverter /// <summary> /// 表示是否允许将给定类型的对象转换为自定义类型 /// </summary> /// <param name= context >当前上下文对象</param> /// <param name= sourceType >给定的类型</param> /// <returns></returns> public override bool CanConvertFrom(ITypeDescriptorContext context Type sourceType) //如果给定的类型为字符串 可以转换为自定义类型 if (sourceType==typeof(string)) return true; return base CanConvertFrom(context sourceType); /// <summary> /// 表示是否允许将自定义类型转换为指定的类型 /// </summary> /// <param name= context >当前上下文</param> /// <param name= destinationType >指定的类型</param> /// <returns></returns> public override bool CanConvertTo(ITypeDescriptorContext context Type destinationType) //如果目标类型是字符串 允许将自定义类型转换为字符串 if (destinationType==typeof(string)) return true; return base CanConvertTo(context destinationType); /// <summary> /// 将指定类型转换为自定义类型 /// </summary> /// <param name= context >当前上下文信息</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 is string) string[] sizeArr = ((string)value) Split( );//将输入的字符串以逗号进行分割 CustomAttri ca = new CustomAttri(); ca Width=Convert ToInt (sizeArr[ ]); ca Height=Convert ToInt (sizeArr[ ]); return ca; return base ConvertFrom(context culture value); /// <summary> /// 将自定义类型转换为指定类型 /// </summary> /// <param name= context >当前上下文</param> /// <param name= culture >区域</param> /// <param name= value ></param> /// <param name= destinationType >指定类型</param> /// <returns></returns> public override object ConvertTo(ITypeDescriptorContext context System Globalization CultureInfo culture object value Type destinationType) //如果要转换为自定义类型 if (destinationType==typeof(string)) if (value is CustomAttri) CustomAttri ca = (CustomAttri)value; return ca Width ToString() + + ca Height ToString(); return base ConvertTo(context culture value destinationType);
然后把该转换器标记在自定义属性上 这样在窗体上 就可以为该用户控件的属性设置值了
[Description( 第二尺寸 )] [Category( 尺寸 )] [TypeConverter(typeof(CustomAttriConverter))] public CustomAttri SecondSize get return _sSize; set _sSize=value;
效果图:
子属性的实现
上面代码虽然实现了可以给自定义属性设置值 但是字属性不能显示出来 如果想实现把子属性显示出来 需要重载以下方法
/// <summary> /// 返回此对象是否支持属性 /// </summary> /// <param name= context ></param> /// <returns></returns> public override bool GetPropertiesSupported(ITypeDescriptorContext context) return true; public override PropertyDescriptorCollection GetProperties(ITypeDescriptorContext context object value Attribute[] attributes) //return base GetProperties(context value attributes); return TypeDescriptor GetProperties(typeof(CustomAttri) attributes);
效果图
cha138/Article/program/net/201311/13986
相关参考
知识大全 .net WinForm用户控件开发:用户控件的基本属性设置
.netWinForm用户控件开发:用户控件的基本属性设置 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一
知识大全 .net WinForm用户控件开发:用户控件弹出式属性设置
.netWinForm用户控件开发:用户控件弹出式属性设置 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一
知识大全 .net WinForm用户控件开发:带按钮的textbox控件
.netWinForm用户控件开发:带按钮的textbox控件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来
[ASP.NET开发系列]在用户控件中添加事件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在
ASP.NET项目开发指南:用户控件级输出缓存 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &
.netWeb用户控件使用技巧 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 关于Web用户
ASP.NET用户控件操作ASPX页面 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一简单实例
怎样在ASP.NET中创建用户控件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 本文介绍如何在
Asp.net用户控件添加自定义事件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &n
使用ASP.NET中的用户控件[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &n