почему обработчик проверки textedit вызывается дважды? - PullRequest
2 голосов
/ 08 августа 2011

Это пример кода:

ButtonEdit be = new ButtonEdit()
{
    DisplayFormatString = MyDisplayFrm,
    MaskType = MaskType.RegEx,
    Mask = "[-+]?([0-9]*[,.])?[0-9]+([eE][-+]?[0-9]+)?",
    ValidateOnTextInput = false
};
Binding bindingValue = new Binding() { Source = PropItem, Path = new PropertyPath("Value"), Mode = BindingMode.TwoWay };
BindingOperations.SetBinding(be, ButtonEdit.EditValueProperty, bindingValue);
be.SetValue(Grid.ColumnProperty, 0);
be.Validate += be_Validate;

void be_Validate(object sender, ValidationEventArgs e)
{
    if ((Convert.ToDouble(e.Value) <= MaxVal) && (Convert.ToDouble(e.Value) >= MinVal)) return;
    MessageBoxResult mbr = MessageBox.Show("The value in not in the suggested range, do you want to continue?", "Min/Max Range validation", MessageBoxButton.YesNo);
    if (mbr == MessageBoxResult.Yes)
    {
        return;
    }
    else
    {
        e.IsValid = false;
        e.ErrorType = DevExpress.XtraEditors.DXErrorProvider.ErrorType.Warning;
        e.ErrorContent = "Value is not in the suggested range. Please correct.";
    }
}

Когда я изменяю значение вне диапазона и меняю фокус, я получаю окно сообщения дважды;один для изменения значения и один для изменения отображения, так как редактор отображает значение (которое является двойным) для надлежащего научного отображения.

Как я могу сделать TextEdit (или в примере выше ButtonEdit) не проверять на достоверность при смене дисплея?Я имею в виду, это не должно, во-первых, не так ли?Так как свойство EditValue не изменяется, а только отображает (свойство Text).

Заранее спасибо:)

1 Ответ

0 голосов
/ 09 августа 2011

Пожалуйста, просмотрите эту статью помощи Событие BaseEdit.InvalidValue

AFAIK, вам нужно обработать событие Validating и в этом событии установить e.Cancel true, если значение неверно, тогда в событии InvalidValue вы можете предоставить визуальную подсказку для недопустимой записи.

Надеюсь, это поможет

...