返回
原创文章

改变 PropertyGrid 控件的编辑风格(4)——加入选择列表

产品经理-40

2014-8-1 12:23:36

关注楼主

1086915

效果: propertygridex4.JPG


步骤一:定义从UITypeEditor 继承的抽象类:ComboBoxItemTypeConvert。示例如下:



using System;



using System.Collections;



using System.ComponentModel;





namespace blog.csdn.net.zhangyuk



{



     /// IMSTypeConvert 的摘要说明。



     /// </summary>



     public abstract class ComboBoxItemTypeConvert : TypeConverter



     {



         public Hashtable _hash = null;





         public ComboBoxItemTypeConvert()



         {



              _hash = new Hashtable();



              GetConvertHash();



         }





         public abstract void GetConvertHash();





         public override bool GetStandardValuesSupported( ITypeDescriptorContext context )



         {



              return true;



         }





         public override StandardValuesCollection GetStandardValues(



ITypeDescriptorContext context)



         {



              int [] ids = new int [ _hash.Values.Count ];





              int i=0;



              foreach (DictionaryEntry myDE in _hash)



              {



                   ids[i++] = (int)(myDE.Key);



              }





              return new StandardValuesCollection( ids );



         }





         public override bool CanConvertFrom( ITypeDescriptorContext context, Type sourceType)



         {



              if (sourceType == typeof(string))



              {



                   return true;



              }



              return base.CanConvertFrom(context, sourceType);



         }





         public override object ConvertFrom(



ITypeDescriptorContext context,



System.Globalization.CultureInfo culture,



object v )



         {



              if (v is string)



              {



                   foreach (DictionaryEntry myDE in _hash)



                   {



                       if( myDE.Value.Equals((v.ToString())) )



                            return myDE.Key;



                   }



              }



              return base.ConvertFrom(context, culture, v);



         }





         public override object ConvertTo(



ITypeDescriptorContext context,



System.Globalization.CultureInfo culture, object v ,



Type destinationType)



         {



              if (destinationType == typeof(string))



              {



                   foreach (DictionaryEntry myDE in _hash)



                   {



                       if( myDE.Key.Equals(v) )



                            return myDE.Value.ToString();



                   }



                   return "";



              }



              return base.ConvertTo(context, culture, v, destinationType);



         }





         public override bool GetStandardValuesExclusive(



              ITypeDescriptorContext context)



         {



              return false;



         }      



     }



}





步骤二:定义 ComboBoxItemTypeConvert 的派生类,派生类中实现父类的抽象方法:



public abstract void GetConvertHash();



示例如下:





using System;



using System.Collections;



using System.ComponentModel;





namespace blog.csdn.net.zhangyuk



{



     public class PropertyGridBoolItem : ComboBoxItemTypeConvert



     {



         public override void GetConvertHash()



         {



              _hash.Add(0,"是");



              _hash.Add(1,"否");



         }



     }





     public class PropertyGridComboBoxItem : ComboBoxItemTypeConvert



     {



         public override void GetConvertHash()



         {



              _hash.Add(0,"炒肝");



              _hash.Add(1,"豆汁");



              _hash.Add(2,"灌肠");



         }



     }



}




步骤三:编辑属性类,指定编辑属性。示例如下:



namespace blog.csdn.net.zhangyuk



{



         public class SomeProperties



     {



         private string _finished_time   = "";



                   ……



         // 布尔



         bool _bool = true;



         [



              Description("布尔"),



              Category("属性"),



              TypeConverter(typeof( PropertyGridBoolItem ))





         public int 布尔



         {



              get { return _bool == true ? 0 : 1; }



              set { _bool = (value == 0 ? true : false); }



         }





         // 选择列表



         int _comboBoxItems = 0;



         [



              Description("选择列表"),



              Category("属性"),



              TypeConverter(typeof( PropertyGridComboBoxItem ))





         public int 选择列表



         {



              get { return _comboBoxItems;  }



              set { _comboBoxItems = value; }



         }



         ……



         }



}




步骤四:设置PropertyGrid的属性对象。示例如下:



         private void Form1_Load(object sender, System.EventArgs e)



         {



            this.propertyGrid1.SelectedObject = new SomeProperties();



         }



喜欢楼主的,可以打赏一波

原创文章+关注

主题:34  帖数:2万

全部回复15
NST-无心

沙发2016-11-26 15:11:13

楼主是超人
NST-厄尔 LV.5

板凳2016-11-26 15:04:55

真心顶
iCWr LV.5

地板2016-11-26 14:56:39

很好哦
基德

5#2016-11-26 15:32:00

不错不错
1234.. 5下一页
我说一句...

已赞

285

收藏

10

分享

新浪微博 QQ空间 QQ好友 腾讯微博 二维码 复制网址 举报主题

加载中...

  • /

  • 三十
  • 菜单