我在表单上有一个 Infragistics UltraNumericEditor(版本 5.3,相当旧)控件。
如果我将 .Value 字段设置为小于 .MinValue 或大于 .MaxValue 的值,则会收到 System.Exception 并引发以下消息:
'Value' 属性不能设置为由 'MinValue' 和 'MaxValue' 属性确定的范围之外的值
UltraNumericEditor上相关字段的签名如下:
public object MinValue { get; set; }
public object MaxValue { get; set; }
public object Value { get; set; }
这有可能在我们的代码库中发生数百次,所以不是每次都检查 MinValue 和 MaxValue 与我们尝试设置的值,我想我会将控件子类化并将检查放在那里:
public class OurNumericEditor : Infragistics.Win.UltraWinEditors.UltraNumericEditor
{
public object Value
{
get
{
return base.Value;
}
set
{
// make sure what we're setting isn't outside the min or max
// if it is, set value to the min or max instead
double min = (double)base.MinValue;
double max = (double)base.MaxValue;
double attempted = (double)value;
if (attempted > max)
base.Value = max;
else if (attempted < min)
base.Value = min;
else
base.Value = value;
}
}
}
显然,当值的类型 MinValue 和 MaxValue 可以转换为双精度值时,这可以正常工作,但我希望在不可能的情况下出现 InvalidCastException。
现在我可能只是在这里度过了一个金发碧眼的时刻,但我认为应该可以编写一种利用泛型进行比较的方法,但我正在努力想象这可能是什么样子。
有什么想法或意见吗?
谢谢
汤姆