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

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

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

  • Enter
  • GotFocus
  • Оставьте
  • Validating
  • Подтверждено
  • LostFocus

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

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

  • Enter
  • GotFocus
  • LostFocus
  • Оставьте
  • Validating
  • Подтверждено

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

Ответ 1

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

Ответ 2

Как отмечено выше:

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

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