设为首页收藏本站

中国学客联盟

 找回密码
 立即注册




查看: 570229|回复: 5

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

[复制链接]

[UID商城]   [抢购靓号]

该用户从未签到

高级会员

Rank: 4

UID
40
威望
0
贡献
0
在线时间
1 小时
注册时间
2014-2-26
发表于 2014-8-1 12:23:36 | 显示全部楼层 |阅读模式

效果: 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();



         }



哎...今天够累的,签到来了7...

[UID商城]   [抢购靓号]

该用户从未签到

金牌会员

Rank: 6Rank: 6Rank: 6

UID
22
威望
417
贡献
0
在线时间
2 小时
注册时间
2014-2-26
发表于 2016-11-26 14:56:39 | 显示全部楼层
很好哦
中国学客联盟

[UID商城]   [抢购靓号]

该用户从未签到

金牌会员

Rank: 6Rank: 6Rank: 6

UID
4
威望
354
贡献
0
在线时间
1 小时
注册时间
2014-2-26
发表于 2016-11-26 15:04:55 | 显示全部楼层
真心顶
中国学客联盟

[UID商城]   [抢购靓号]

该用户从未签到

部长

Rank: 73Rank: 73Rank: 73Rank: 73Rank: 73Rank: 73Rank: 73

UID
16
威望
353
贡献
0
在线时间
4 小时
注册时间
2014-2-26

个人认证:学盟超级版主

发表于 2016-11-26 15:11:13 | 显示全部楼层
楼主是超人
中国学客联盟

[UID商城]   [抢购靓号]

该用户从未签到

部长

Rank: 73Rank: 73Rank: 73Rank: 73Rank: 73Rank: 73Rank: 73

UID
18
威望
367
贡献
0
在线时间
4 小时
注册时间
2014-2-26

巡查人员勋章

发表于 2016-11-26 15:18:14 | 显示全部楼层
非常好的内容,路过看看,保存一下
中国学客联盟

[UID商城]   [抢购靓号]

该用户从未签到

部长

Rank: 73Rank: 73Rank: 73Rank: 73Rank: 73Rank: 73Rank: 73

UID
17
威望
352
贡献
0
在线时间
10 小时
注册时间
2014-2-26
发表于 2016-11-26 15:32:00 | 显示全部楼层
不错不错
中国学客联盟
高级模式
B Color Image Link Quote Code Smilies

本版积分规则

快速回复 返回顶部 返回列表