Событие Mousedown для управления рамкой не всегда срабатывает

Надеюсь, кто-то может с этим справиться – я пытаюсь разработать класс для проверки правильности текстового поля Userform с помощью событий. Я хотел бы запретить пользователю выйти из текстового поля, если текст текстового поля недействителен (например, пустое или нечисловое значение и т. Д.) По любой причине. Обычно это делается в событии выхода из текстового поля (с использованием аргумента Cancel), но отсутствие события выхода для класса, содержащего текстовое поле, определенное WithEvents, хорошо документировано, поэтому я пытаюсь использовать другой подход.

Вместо того, чтобы помешать фокусу покинуть оскорбительное текстовое поле, я пытаюсь обнаружить перемещение фокуса на новый элемент управления, а затем установить фокус обратно в текстовое поле. Я продвигаюсь вперед, но столкнулся с проблемой с элементами управления, расположенными внутри элемента управления рамкой. Если пользователь нажимает непосредственно на элемент управления внутри фрейма, события мыши для элемента управления указывают, что фокус переместился в новый элемент управления. Но если пользователь нажимает внутри фрейма (но не напрямую на элемент управления в кадре), фокус переходит к первому элементу управления в фрейме, но события, указывающего это, не будет. Поэтому я попытался использовать событие mousedown для фрейма, чтобы фокус можно было вернуть обратно в оскорбительное текстовое поле.

Это хорошо работает, если я щелкнул по области, которая явно находится внутри рамки. Однако, если я нажимаю только на границе рамки или на области заголовка фрейма, событие MouseDown не происходит. Я обнаружил, что события MouseUp и Click имели ту же проблему. В результате фокус переместился в новый элемент управления внутри кадра, но это не было обнаружено.

Но потом я обнаружил, что использование события Enter в кадре вызвало желаемый результат – независимо от того, где я нажимаю на элемент управления рамкой, событие Enter происходит, если фокус перемещен. Это прекрасно, за исключением того, что код события Enter в кадре должен выполняться во время разработки, поскольку событие ввода также недоступно для кадра, объявленного WithEvents в классе. Это раздражает, и я бы хотел использовать MouseDown вместо этого, но не могу решить эту проблему. Я получаю тот же результат в Excel 2003, 2010 и 2013 годах. Кто-нибудь есть идеи, почему события MouseDown и MouseUp иногда отсутствуют, как я описал?

    Давайте будем гением компьютера.