UltraNumericEditor允许大于MaxValue设置的值

时间:2012-09-20 17:18:10

标签: user-controls infragistics

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

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

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

我是否缺少正确使用这些属性的东西?

2 个答案:

答案 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,如果是,则设置它等于相同。