Почему событие LostFocus вызывается в разное время?

Что касается этой страницы MSDN (или на любой связанной странице по этому вопросу), в нем говорится, что:

Когда вы меняете фокус с помощью клавиатуры, события фокуса происходят в следующем порядке:

  1. Входить
  2. GotFocus
  3. Уехать
  4. Проверка
  5. Подтверждено
  6. LostFocus

Однако, когда вы используете мышь для вызова событий, порядок меняется!

Когда вы меняете фокус с помощью мыши или вызывая метод Focus, события фокуса происходят в следующем порядке:

  1. Входить
  2. GotFocus
  3. LostFocus
  4. Уехать
  5. Проверка
  6. Подтверждено

Разве это не сделало бы цепочку событий совершенно другой? Моя интерпретация заключается в том, что цепочка клавиатуры гарантирует, что все находится в рабочем состоянии, а затем вызывает событие LostFocus. Тем не менее, кажется, что события мыши по какой-то причине вызывают его перед проверкой. Это почему?


person Kyle Baran    schedule 15.04.2014    source источник
comment
Это осторожность! в статье MSDN, которую вы указали, адрес достаточно сильный? Никогда не используйте LostFocus, только уходите. Теперь это уже не имеет значения.   -  person Hans Passant    schedule 16.04.2014
comment
Однако я не фокусируюсь на этом. Мне просто любопытно, почему порядок меняется в зависимости от метода ввода.   -  person Kyle Baran    schedule 16.04.2014
comment
Чтобы применить проверки, навигация с клавиатуры должна быть в таком порядке. Они предназначены для реагирования на них, чтобы проверить любые введенные строки. Это означает, что если вы перейдете через свои текстовые поля, вы получите другой порядок событий, а затем будете перемещаться с помощью мыши, что позволяет вам реагировать НАПРЯМУЮ после ввода некоторого ввода. Вам это помогло?   -  person icbytes    schedule 12.05.2014
comment
Да, это так. На момент написания этого вопроса я не осознавал, что проверка событий клавиатурой / мышью может (должна быть?) Совсем другой.   -  person Kyle Baran    schedule 13.05.2014


Ответы (2)


Как указано выше:

В статье MSDN вы указали достаточно сильный адрес? Никогда не используйте LostFocus, только уходите.

Чтобы применить проверки, навигация с клавиатуры должна быть в таком порядке. Они предназначены для реагирования на них с целью проверки любых входных строк.

person Community    schedule 04.09.2014

Лучший пример, который я могу придумать, - это аспект e.Cancel при валидации. Использование клавиатуры для навигации обычно является элементом управления для управления типом навигации (включая дочерние и родительские элементы управления). Использование мыши для навигации по форме не всегда приводит к выбору элемента управления. Например, закрытие формы или просто щелчок за пределами элемента управления (т. Е. Изменение положения формы). Не всегда желательно, чтобы проверка происходила, когда щелчок мыши происходит вне элемента управления. Надеюсь, это поможет.

person Ben H    schedule 26.11.2014