使用 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,如果是,则将其设置为相同。