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

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

 

张昱[email protected]

效果:

适用场合:

限制选择输入

 

步骤一:定义从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();

         }

你可能感兴趣的:(改变 PropertyGrid 控件的编辑风格(4)——加入选择列表)