91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#中TypeConverterAttribute如何使用

發布時間:2021-07-07 17:50:37 來源:億速云 閱讀:451 作者:Leah 欄目:編程語言

C#中TypeConverterAttribute如何使用,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

C#實例詳解TypeConverterAttribute應用在創建的控件代碼中添加一個Scope屬性:

[Browsable(true)]  public Scope Scope  {  get {  return _scope;  }  set {  _scope = value;  }  }

這個屬性的類型是Scope類,代碼如下:

public class Scope  {  private Int32 _min;  private Int32 _max;  public Scope()  {  }  public Scope(Int32 min, Int32 max)  {  _min = min;  _max = max;  }  [Browsable(true)]  public Int32 Min  {  get {  return _min;  }  set {  _min = value;  }  }   [Browsable(true)]  public Int32 Max  {  get {  return _max;  }  set {  _max = value;  }  }  }

添加完屬性后,build控件工程,然后在測試的工程里選中添加的控件,然后在屬性瀏覽器里觀察它的屬性,發現Scope屬性是灰的,不能編輯。前一篇文章提到了,在屬性瀏覽器里可以編輯的屬性都是有類型轉換器的,而.NET框架為基本的類型和常用的類型都提供了默認的類型轉換器。接下來我們為Scope類添加一個類型轉換器,以便這個屬性能夠被編輯,而且也可以在源代碼文件里自動生成相應的代碼。下面是類型轉換器的代碼:

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;  ///C#實例詳解TypeConverterAttribute應用  }   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);  }  }

現在我們為類型提供類型轉換器,我們在類型前面添加一個TypeConverterAttribute,如下:

[TypeConverter(typeof(ScopeConverter))]  public class Scope

添加完以后build工程,然后切換到測試工程,選中控件,在屬性瀏覽器里查看屬性,現在的Scope屬性可以編輯了,如下圖所示:

C#中TypeConverterAttribute如何使用

我們修改默認的值,然后看看Form設計器為我們生成了什么代碼:

this.myListControl1.BackColor =   System.Drawing.SystemColors.ActiveCaptionText;  this.myListControl1.Item.Add(1);  this.myListControl1.Item.Add(2);  this.myListControl1.Item.Add(3);  this.myListControl1.Item.Add(6);  this.myListControl1.Item.Add(8);  this.myListControl1.Item.Add(9);  this.myListControl1.Location =   new System.Drawing.Point(12, 34);  this.myListControl1.Name = "myListControl1";  this.myListControl1.Scope = new CustomControlSample.Scope(10, 200);  this.myListControl1.Size = new System.Drawing.Size(220, 180);  this.myListControl1.TabIndex = 1;  this.myListControl1.Text = "myListControl1";

關鍵是這一行this.myListControl1.Scope = new CustomControlSample.Scope(10, 200),Scope類的類型轉換器為屬性提供了實例化的代碼。

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

浮山县| 田阳县| 陕西省| 隆昌县| 镇远县| 西昌市| 滁州市| 兴和县| 日土县| 淳安县| 甘洛县| 永康市| 桂东县| 巨鹿县| 凌海市| 昆明市| 兴海县| 陈巴尔虎旗| 介休市| 伊川县| 咸丰县| 沐川县| 凭祥市| 永福县| 蓝山县| 文昌市| 桂林市| 岳阳县| 青岛市| 常山县| 红河县| 五莲县| 乌兰浩特市| 青河县| 玛纳斯县| 内乡县| 根河市| 商南县| 集安市| 台东县| 霍州市|