Почему на моем событии LostFocus бесконечный цикл? - PullRequest
2 голосов
/ 22 февраля 2011

Я новичок в C # и разрабатываю базовое приложение.
Я хочу проверить, является ли значение текстового поля числом со следующим кодом:

private void check_value(object sender)
    {
        TextBox tb = (TextBox)sender ;
        if (!Utility.isNumeric(tb.Text)){
            MessageBox.Show(tb.Text.Length.ToString());
            tb.Focus();
        }
    }

    private void Amount_1_LostFocus(object sender, RoutedEventArgs e)
    {
        check_value(sender);
    }

Когда я вводю букву в текстовое поле, возникает бесконечный цикл, и кажется, что tb.Focus () фактически вызывает рекурсивный вызов события LostFocus. Я не понимаю, почему вызов метода Focus объекта вызывает событие LostFocus того же объекта.

Ответы [ 2 ]

5 голосов
/ 22 февраля 2011

Открытие модального MessageBox отвечает за потерю фокуса. Попробуйте подключиться к событию Validating.

0 голосов
/ 23 февраля 2011

Как я уже говорил в ссылке, предоставленной Xaqron, сказано, что запрещено использовать метод Focus в событии LostFocus.
И так как я разрабатываю приложение WPF, в нем нет события Validating и свойства CausesValidation, поэтомудругие способы проверки содержимого - использовать событие TextChanged или использовать проверку привязки.

Спасибо за ваши ответы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...