国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C#實現ProperTyGrid自定義屬性的方法

2020-01-24 02:26:18
字體:
來源:轉載
供稿:網友

本文實例講解了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;    }}

前臺調用如下圖所示:

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);}

運行效果如下圖所示:

希望本文所述對大家的C#程序設計有所幫助

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 钟山县| 尼木县| 石屏县| 延长县| 海城市| 依兰县| 六安市| 沙湾县| 鄂托克旗| 盐源县| 榆林市| 潢川县| 固始县| 潍坊市| 驻马店市| 砀山县| 米泉市| 民县| 大同市| 灵丘县| 淮北市| 华宁县| 凤城市| 合肥市| 敦煌市| 五常市| 峨山| 濉溪县| 横山县| 噶尔县| 讷河市| 海安县| 莒南县| 顺昌县| 宾川县| 宁海县| 清河县| 如东县| 定兴县| 闽侯县| 永德县|