TypeConverter IsValid没有激活

时间:2016-07-28 10:07:25

标签: c# propertygrid typeconverter

我想在PropertyGrid上实现输入验证。我发现我需要TypeConverter并在ConvertFrom方法中抛出异常。除了它显示标准的“消息框”外,它的工作正常。我希望展示自己的。根据MSDN,IsValid方法中存在异常。所以我试图覆盖它,在那里做我的事情,但它甚至没有开火。

我的代码:

public class ParameterNameConverter : TypeConverter
{
    public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
    {
        Debug.Print("ConvertFrom");
        if (Convert.ToString(value).Contains(" "))
        {
            throw new NotSupportedException("Invalid input");
        }
        return value;
    }

    public override bool IsValid(ITypeDescriptorContext context, object value)
    {
        MessageBox.Show("Invalid input");
        return false;
    }
}

1 个答案:

答案 0 :(得分:0)

这是Microsoft Reference SourceIsValid()的代码。您可以看到IsValid()调用ConvertFrom()本身并尝试抓住它。因此,您需要执行类似的操作,从您自己的ConvertFrom()方法调用自己的IsValid()方法,然后处理异常。如果您只是不覆盖IsValid(),那么基本方法IsValid()会默默地使用您的exception并返回标准false响应。

虽然听起来我觉得如果你从你的示例代码中没有看到自己的消息框,你的IsValid()方法根本就没有被调用过吗?但这是一个不同的问题:P