使用 infragistics UltraNumericEditor,如果我设置.MaxValue
为 50,控件将允许我输入大于限制的小数(例如,50.99)
如果我将.MaxValue
属性设置为 50.01,我会看到相同的行为(可以将值设置得更大)
我显然可以在代码中解决这个问题,但重置值,但似乎控件应该自己执行此操作。
在如何正确使用这些属性方面有什么我遗漏的吗?
使用 infragistics UltraNumericEditor,如果我设置.MaxValue
为 50,控件将允许我输入大于限制的小数(例如,50.99)
如果我将.MaxValue
属性设置为 50.01,我会看到相同的行为(可以将值设置得更大)
我显然可以在代码中解决这个问题,但重置值,但似乎控件应该自己执行此操作。
在如何正确使用这些属性方面有什么我遗漏的吗?
我想您正在使用 UltraNumericEditor,其属性 Style 设置为 Decimal(或 Double)。
在这种情况下,控件允许您插入数字,使输入相对于属性 MaxValue 无效。但是,默认情况下,在值正确之前,您无法退出控件。
如果需要,您可以使用事件ValidationError为您提供 ValidationErrorEventArgs 参数。此参数包含 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");
}
问题是IEditorDataFilter
百分比值的结果。
Infragistics 建议并且我已经实施了IEditorDataFilter
一种将小数百分比 (.5 = 50%) 转换为百分比以供显示的方法。
在对控件进行验证之前应用此过滤器。因此,将 设置MaxValue
为“50”允许我输入“50.99”但不能输入“51”......根据史蒂夫的回答,通常这会导致验证错误。但是,由于IEditorDataFilter
应用于此控件,该值会自动转换为 .5099,并且此新值不会违反约束。
我实施的解决方案是检查Validated
事件中的值,看它是否大于MaxValue
/100,如果是,则将其设置为相同。