有一String类型的属性显示在propertyGrid控件上,如何设置才能做到不让用户输入空值呢?谢谢,

解决方案 »

  1.   

    this.propertyGrid1.SelectedGridItemChanged += new SelectedGridItemChangedEventHandler(propertyGrid1_SelectedGridItemChanged);
    void propertyGrid1_SelectedGridItemChanged(object sender, SelectedGridItemChangedEventArgs e)
            {
                if(e.NewSelection.Label.Equals("Text"))
                {
                    NOTEMPTY(e.NewSelection.Value);
                }
            }
      

  2.   

    或者在propertyGrid外面可以用this.propertyGrid1.SelectedGridItem
    在里面也可以用KeyDown事件看你的具体需求
      

  3.   

    自定转换器,使MyText保持非空(去空格后)                class TestProperty
    {
    private string mytext="abc";
    [DefaultValue("abc")]
    [TypeConverter(typeof(MyTextTypeConvert))] 
    public string MyText
    {
    get { return mytext; }
    set { mytext = value; }
    } }
    public class MyTextTypeConvert : System.ComponentModel.TypeConverter
    {
    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 value)
    {
    string oldvalue=(string)context.PropertyDescriptor.GetValue(context.Instance);
    if (value.GetType() == typeof(string))
    {
    string current = ((string)value).Trim();
    if (!string.IsNullOrEmpty(current))
    {
    return current;
    }
    }
    return oldvalue;
    }
    }
      

  4.   

    不允许输入空是不是意味着那个属性有默认值?如果是的话, 除了设置属性默认值之外, 还要象楼上那样定制转换器.属性默认值有两种设置方式:
    [DefaultValue] 是一种函数(XXX 为属性名称)
    ShouldSerializeXXX
    ResetXXX是一种