Как правило, вы не можете знать, какое событие наступает после события, изменившего фокус.
Однако это можно решить, вы меняете условия при срабатывании логики проверки - проверяете элемент управления редактирования, когда
- фокус потерян
- и фокус теряется на другой элемент управления
Проверяя, что фокус потерян для другого элемента управления, вы говорите пользователю: «Не переходите к этому компоненту - вы еще не заполнили текущий правильно!».
Он лучше фиксирует намерения пользователя, чем проверка любого изменения фокуса. Он также не запускает проверку, когда пользователь нажимает кнопку «Закрыть», кнопку «Х» системы или любую другую кнопку.
Конечно, вам нужно будет добавить явную проверку при нажатии кнопки ОК.
Мало того, что это довольно просто для кодирования (проверьте, что новое окно фокуса является дочерним элементом диалогового окна и является компонентом ввода - вы можете определить, что это компонент ввода, посмотрев на имя класса окна в окне. поля редактирования.)
Это также относится к случаям, когда пользователь смещает фокус по другим причинам, таким как окно системного сообщения или другое событие захвата фокуса. Поскольку фокус не перемещается на один из ваших других элементов управления редактированием, проверка не запускается, и фокус не возвращается к вашему приложению, что может быть довольно раздражающим для некоторых людей!