知识大全 .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开发系列]在用户控件中添加事件

[ASP.NET开发系列]在用户控件中添加事件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在

知识大全 ASP.NET项目开发指南:用户控件级输出缓存

ASP.NET项目开发指南:用户控件级输出缓存  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  &

知识大全 .net Web用户控件使用技巧

.netWeb用户控件使用技巧  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!    关于Web用户

知识大全 ASP.NET用户控件操作ASPX页面

ASP.NET用户控件操作ASPX页面  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一简单实例

知识大全 怎样在ASP.NET中创建用户控件

怎样在ASP.NET中创建用户控件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  本文介绍如何在

知识大全 Asp.net 用户控件添加自定义事件

Asp.net用户控件添加自定义事件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &n

知识大全 使用ASP.NET中的用户控件[2]

使用ASP.NET中的用户控件[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &n