我想在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;
}
}
答案 0 :(得分:0)
这是Microsoft Reference Source中IsValid()
的代码。您可以看到IsValid()
调用ConvertFrom()
本身并尝试抓住它。因此,您需要执行类似的操作,从您自己的ConvertFrom()
方法调用自己的IsValid()
方法,然后处理异常。如果您只是不覆盖IsValid()
,那么基本方法IsValid()
会默默地使用您的exception
并返回标准false
响应。
虽然听起来我觉得如果你从你的示例代码中没有看到自己的消息框,你的IsValid()
方法根本就没有被调用过吗?但这是一个不同的问题:P