亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > 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#程序設計有所幫助

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
最近2019年手机中文字幕| 久久久女人电视剧免费播放下载| 欧美在线一区二区视频| 国内自拍欧美激情| 欧美国产日韩xxxxx| 欧美在线观看www| 国产伦精品一区二区三区精品视频| 国产一区二区三区视频免费| 欧美限制级电影在线观看| 国语自产精品视频在线看抢先版图片| 日本乱人伦a精品| 色婷婷综合成人| 97视频色精品| 国产午夜精品久久久| 欧美极品在线播放| 91精品美女在线| 久久免费精品视频| 亚洲网站在线播放| 伊人久久大香线蕉av一区二区| 精品人伦一区二区三区蜜桃网站| 久久精品国产91精品亚洲| 久久99视频精品| 91在线|亚洲| 欧美丰满老妇厨房牲生活| 国产精品第七十二页| 色狠狠av一区二区三区香蕉蜜桃| 狠狠色狠色综合曰曰| 国产精品视频白浆免费视频| 国产精品黄页免费高清在线观看| 日韩一区二区久久久| 亚洲福利在线播放| 91影视免费在线观看| 久久久亚洲国产天美传媒修理工| 97在线免费观看视频| 精品av在线播放| 一区二区av在线| 成人写真视频福利网| 久久久久久97| 日韩激情第一页| 色综合五月天导航| 欧美黄网免费在线观看| 亚洲人线精品午夜| 日本精品久久久久影院| 美女久久久久久久久久久| 不卡av在线网站| 一区二区三区高清国产| 中文字幕综合一区| 亚洲色图综合久久| 国产精品视频成人| 国产精品美乳一区二区免费| 欧美性猛交丰臀xxxxx网站| 久久九九有精品国产23| 日本久久91av| 97久久精品国产| 亚洲iv一区二区三区| 久久夜精品va视频免费观看| 久久久免费电影| 国产99久久久欧美黑人| 在线视频欧美日韩| 国产精品一区二区三区久久久| 亚洲人成人99网站| 久久99精品久久久久久噜噜| 欧美激情精品久久久久久蜜臀| 一区二区三区久久精品| 亚洲成人网在线| 中文字幕久久久av一区| 成人午夜激情免费视频| 69久久夜色精品国产69乱青草| 亚洲free性xxxx护士hd| 国产精品天天狠天天看| 91沈先生在线观看| 精品香蕉一区二区三区| 日韩电视剧在线观看免费网站| 日韩中文字幕在线精品| 亚洲色图综合网| 国产精品69久久| 亚洲精品不卡在线| 国产精品爱啪在线线免费观看| 川上优av一区二区线观看| 国产成人精品久久二区二区91| 国产成人亚洲精品| 国产精品久久久久久婷婷天堂| 91超碰caoporn97人人| 国产一区二区三区直播精品电影| 亚洲精品久久久久久久久| 亚洲一区美女视频在线观看免费| 久久久久久尹人网香蕉| 久久国产精品影片| 日韩久久精品电影| 久久91亚洲精品中文字幕| 中文字幕一区日韩电影| 国产精品一区专区欧美日韩| 日韩电影免费观看中文字幕| 亚洲天堂av网| 青青草原成人在线视频| 色琪琪综合男人的天堂aⅴ视频| 欧美国产日韩xxxxx| 亚洲自拍偷拍区| 国产精品视频白浆免费视频| 久久99精品久久久久久噜噜| 欧美日韩高清在线观看| 亚洲精品一区二区三区婷婷月| 中文字幕一区二区精品| 91免费在线视频| 欧美xxxx14xxxxx性爽| 久久久视频在线| 97视频在线观看免费高清完整版在线观看| 午夜精品一区二区三区av| 77777亚洲午夜久久多人| 成人网欧美在线视频| 欧美日韩免费在线| 国产精品久久网| 亚洲一区二区三区在线免费观看| 亚洲精品98久久久久久中文字幕| 亚洲国模精品私拍| 欧美日韩国产成人高清视频| 国产精品户外野外| 欧美在线免费观看| 91欧美精品午夜性色福利在线| 色在人av网站天堂精品| 亚洲一区美女视频在线观看免费| 91欧美精品成人综合在线观看| 国产色视频一区| 亚洲综合大片69999| 色综合伊人色综合网| 久久久亚洲福利精品午夜| 九九久久精品一区| 国产精品88a∨| 日韩黄色在线免费观看| 日本一区二区在线免费播放| 精品国产91久久久久久老师| 午夜精品一区二区三区在线视频| 性色av一区二区三区免费| 欧美黄网免费在线观看| 色无极影院亚洲| 国内精品一区二区三区| 国产精品丝袜一区二区三区| 国产成人精品免费久久久久| 色播久久人人爽人人爽人人片视av| 91在线看www| 成人激情视频在线播放| 久久久久久久影视| 国产午夜精品久久久| 一区二区三区四区视频| 亚洲一区二区久久久久久久| 日韩国产精品视频| 国产精品免费一区| 欧美丝袜一区二区| 亚洲情综合五月天| zzijzzij亚洲日本成熟少妇| 中文字幕日韩精品在线| 亚洲精品视频免费在线观看| 国产精品人人做人人爽| 国产亚洲视频在线| 午夜美女久久久久爽久久| 亚洲a在线观看| 欧美国产日韩一区| 亚洲精品www久久久| 欧美日韩在线看| 久久久999成人| 91中文字幕在线观看| 亚洲色图狂野欧美| 欧美亚洲在线观看| 久久91精品国产91久久久|