zoukankan      html  css  js  c++  java
  • C# ProperTyGrid 自定义属性

    C# 如果要实现自定义属性必须要需要实现接口ICustomTypeDescriptor

      // 摘要:
      //     提供为对象提供动态自定义类型信息的接口。
      public interface ICustomTypeDescriptor

    例子:

    /// <summary>
        /// 自定义属性对象
        /// </summary>
        public class MyAttr
        {
            private string name = string.Empty;
    
            public string Name
            {
                get { return name; }
                set { name = value; }
            }
            private object value = null;
    
            public object Value
            {
                get { return this.value; }
                set { this.value = value; }
            }
    
            private string description = string.Empty;
    
            public string Description
            {
                get { return description; }
                set { description = value; }
            }
    
    
            public override string ToString()
            {
                return string.Format("Name:{0},Value:{1}",name.ToString(),value.ToString());
            }
        }
    
     /// <summary>
        /// 自定义性质描述类
        /// </summary>
        public class MyPropertyDescription : PropertyDescriptor
       {
            private MyAttr myattr = null;
            public MyPropertyDescription(MyAttr myattr, Attribute[] attrs): base(myattr.Name, attrs) 
            {
                this.myattr = myattr;
            }
           public override bool CanResetValue(object component)
           {
               return false;
           }
    
           public override Type ComponentType
           {
               get
               {
                   return this.GetType();
               }
           }
    
           public override object GetValue(object component)
           {
               return myattr.Value;
           }
    
           public override bool IsReadOnly
           {
               get 
               {
                   return false;
               }
           }
    
           public override Type PropertyType
           {
               get 
               {
                   return myattr.Value.GetType();
               }
           }
    
           public override void ResetValue(object component)
           {
                //不重置,无动作 
           }
    
           public override void SetValue(object component, object value)
           {
               myattr.Value = value;
           }
           /// <summary>
           /// 是否应该持久化保存
           /// </summary>
           /// <param name="component"></param>
           /// <returns></returns>
           public override bool ShouldSerializeValue(object component)
           {
               return false;
           }
           /// <summary>
           /// 属性说明
           /// </summary>
           public override string Description
           {
               get
               {
                   return myattr.Description;
               }
           }
       }
    
      /// <summary>
        /// 实现自定义的特殊属性对象必须继承ICustomTypeDescriptor,并实现Dictionary
       /// </summary>
        public class MyAttrCollection : Dictionary<String, MyAttr>, ICustomTypeDescriptor
       {
           /// <summary>
           /// 重写Add方法
           /// </summary>
           /// <param name="attr"></param>
           public void Add(MyAttr attr) 
           {
               if (!this.ContainsKey(attr.Name))
               {
                   base.Add(attr.Name, attr);
               }
           }
    
           public AttributeCollection GetAttributes()
           {
               return TypeDescriptor.GetAttributes(this, true);
           }
    
           public string GetClassName()
           {
               return TypeDescriptor.GetClassName(this,true);
           }
    
           public string GetComponentName()
           {
               return TypeDescriptor.GetClassName(this, true);
           }
    
           public TypeConverter GetConverter()
           {
               return TypeDescriptor.GetConverter(this, true);
           }
    
           public EventDescriptor GetDefaultEvent()
           {
               return TypeDescriptor.GetDefaultEvent(this, true);
           }
    
           public PropertyDescriptor GetDefaultProperty()
           {
               return TypeDescriptor.GetDefaultProperty(this, true);
           }
    
           public object GetEditor(Type editorBaseType)
           {
               return TypeDescriptor.GetEditor(this, editorBaseType, true);
           }
    
           public EventDescriptorCollection GetEvents(Attribute[] attributes)
           {
               return TypeDescriptor.GetEvents(this, attributes, true);
           }
    
           public EventDescriptorCollection GetEvents()
           {
               return TypeDescriptor.GetEvents(this, true);
           }
    
           public PropertyDescriptorCollection GetProperties(Attribute[] attributes)
           {
               int count=this.Values.Count;
               PropertyDescriptor[] pds=new PropertyDescriptor[count];
               int index = 0;
               foreach (MyAttr item in this.Values)
               {
                   pds[index] = new MyPropertyDescription(item,attributes);
                   index++;
               }
               return new PropertyDescriptorCollection(pds);
           }
    
           public PropertyDescriptorCollection GetProperties()
           {
               return TypeDescriptor.GetProperties(this,true);
           }
    
           public object GetPropertyOwner(PropertyDescriptor pd)
           {
               return this;
           }
       }

    前台调用


    QQ截图20140904111616

    private void btnAddProperType_Click(object sender, EventArgs e)
            {
                MyAttr attr = new MyAttr();
                attr.Name = txtName.Text.Trim();
                attr.Value = txtValue.Text.Trim();
                attr.Description = txtDescription.Text.Trim();
                mac.Add(attr);
                MyGrid.Refresh();
            }
    private void button1_Click(object sender, EventArgs e)
            {
                AddAttrColor();
                AddAttrImage();
                AddAttrEmun();
                MyGrid.Refresh();
            }
    
            private void AddAttrEmun()
            {
                MyAttr attr = new MyAttr();
                attr.Name = "Dock";
                attr.Value = DockStyle.Fill;
                attr.Description = "枚举";
                mac.Add(attr);
            }
    
            private void AddAttrImage()
            {
                MyAttr attr = new MyAttr();
                attr.Name = "Image";
                attr.Value = new Bitmap(400,300);
                attr.Description = "图片";
                mac.Add(attr);
            }
    
            private void AddAttrColor()
            {
                MyAttr attr = new MyAttr();
                attr.Name = "Color";
                attr.Value = Color.Red;
                attr.Description = "颜色";
                mac.Add(attr);
            }

    效果图

    QQ截图20140904112009

  • 相关阅读:
    如何使用设计模式系列
    网站性能越来越差怎么办
    ASP.NET特殊字符串替换函数
    SQL Server多事务并发问题
    弹出隐藏子菜单
    过滤sql匹配符号 防止sql注入
    统一建模语言UML轻松入门系列
    sql 字符处理函数大全
    并发控制
    类与类之间的关系图
  • 原文地址:https://www.cnblogs.com/lainiao/p/3955666.html
Copyright © 2011-2022 走看看