Scope属性在C#中的应用有很多,这里向你介绍Scope属性实现C#控件开发中复杂属性的子属性的编辑功能,希望通过实例使你加深对Scope属性的认识。
十年来,创新互联不忘初心,以网站建设互联网行业服务标杆为目标,不断提升技术设计服务水平,帮助客户在互联网推广自己的产品、服务和品牌,为客户创造价值从而实现自身价值!
Scope属性在C#中的应用的思路:
我们给控件添加一个复杂的类型Scope,并且给它的类型提供的一个类型转换器,现在我们可以在属性浏览器中编辑它的值,并且它的值也被串行化的源代码里了。但是你有没有发现,在属性浏览器里编辑这个属性的值还是不太方便。因为属性只是“10,200”这种形式的,所以,你必须按照这种格式来修改,一旦格式错误就会引发异常,比如输入一个“10200”。我们期望这个属性的每一子属性都能够被独立的编辑就好了,这并非不能实现,而且实现还很简单。
为了在属性浏览器里能够独立的编辑子属性,我们还要重写两个方法:GetPropertiesSupported()和GetProperties();下面是ScopeConverter的完整代码:
Scope属性在C#中的应用实例代码:
- public class ScopeConverter : TypeConverter
- {
- 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;
- ///Scope属性在C#中的应用
- }
- 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);
- }
- public override bool GetPropertiesSupported(
- ITypeDescriptorContext context)
- {
- return true;
- }
- ///Scope属性在C#中的应用
- public override PropertyDescriptorCollection
- GetProperties(ITypeDescriptorContext context,
- object value, Attribute[] attributes)
- {
- return TypeDescriptor.GetProperties(
- typeof(Scope), attributes);
- }
- }
在GetProperties方法里,我用TypeDescriptor获得了Scope类的所有的属性描述器并返回。如果你对TypeDescriptor还不熟悉的话,可以参考MSDN。重写这两个方法并编译以后,在测试工程里查看控件的属性,你可以看到Scope是如下的形式:
Scope属性在C#中的应用的相关内容就向你介绍到这里,希望那个对你了解和学习Scope属性有所帮助。
【编辑推荐】
新闻名称:实例详解Scope属性在C#中的应用
转载来于:http://www.csdahua.cn/qtweb/news33/242233.html
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网