使用infragistics UltraNumericEditor,如果我将.MaxValue
设置为50,控件将允许我输入大于限制的小数(例如,50.99)
如果我将.MaxValue
属性设置为50.01(可以设置更大的值),我会看到相同的行为
我显然可以在代码中解决这个问题但重置值,但似乎控件应该自行完成。
我是否缺少正确使用这些属性的东西?
答案 0 :(得分:2)
我想你使用的UltraNumericEditor属性Style设置为Decimal(或Double)。
在这种情况下,控件允许您插入相对于属性MaxValue呈现输入无效的数字。但是,默认情况下,在值正确之前,您无法退出控件
如果需要,可以使用提供ValidationErrorEventArgs参数的事件 ValidationError 。此参数包含LastValidValue属性以重置错误的值,RetainFocus允许您的用户退出编辑器(或者,如果您愿意,还显示错误消息)
private void ultraNumericEditor1_ValidationError(object sender, ValidationErrorEventArgs e)
{
// Reset the content to the last valid value and allow the exit from the editor
ultraNumericEditor1.Value = e.LastValidValue;
e.RetainFocus = false;
// In alternative display a message, but leave the wrong value to be reedited
// DisplayValidationMessage("The max value allowed is 50.00");
}
答案 1 :(得分:1)
问题是IEditorDataFilter
百分比值的结果。
Infragistics推荐并实施了一个IEditorDataFilter
,它将十进制百分比(.5 = 50%)转换为显示百分比。
在进行控制验证之前应用此过滤器。因此,将MaxValue
设置为“50”允许我输入“50.99”而不是“51”...通常这会导致验证错误,根据史蒂夫的回答。但是,由于IEditorDataFilter
应用于此控件,该值会自动转换为.5099,并且此新值不会违反约束。
我实施的解决方案是检查Validated
事件中的值,看它是否大于MaxValue
/ 100,如果是,则设置它等于相同。