改变 PropertyGrid 控件的编辑风格(4)——加入选择列表 - 中国WEB开发者网络 (http://www.webasp.net) -- 技术教程 (http://www.webasp.net/article/) --- 改变 PropertyGrid 控件的编辑风格(4)——加入选择列表 (http://www.webasp.net/article/26/25982.htm) |
| -- 作者:未知 -- 发布日期: 2005-08-18 |
改变 PropertyGrid 控件的编辑风格(4)——加入选择列表
张昱e-zhangyu@vip.sina.com 效果:
适用场合: 限制选择输入
步骤一:定义从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(); } |
| webasp.net |