0

使用 infragistics UltraNumericEditor,如果我设置.MaxValue为 50,控件将允许我输入大于限制的小数(例如,50.99)

如果我将.MaxValue属性设置为 50.01,我会看到相同的行为(可以将值设置得更大)

我显然可以在代码中解决这个问题,但重置值,但似乎控件应该自己执行此操作。

在如何正确使用这些属性方面有什么我遗漏的吗?

4

2 回答 2

2

我想您正在使用 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");
}
于 2012-09-20T21:34:44.727 回答
1

问题是IEditorDataFilter百分比值的结果。

Infragistics 建议并且我已经实施了IEditorDataFilter一种将小数百分比 (.5 = 50%) 转换为百分比以供显示的方法。

在对控件进行验证之前应用此过滤器。因此,将 设置MaxValue为“50”允许我输入“50.99”但不能输入“51”......根据史蒂夫的回答,通常这会导致验证错误。但是,由于IEditorDataFilter应用于此控件,该值会自动转换为 .5099,并且此新值不会违反约束。

我实施的解决方案是检查Validated事件中的值,看它是否大于MaxValue/100,如果是,则将其设置为相同。

于 2012-10-01T15:38:42.037 回答