Может ли форма с видимыми элементами управления не иметь элементов управления с фокусом? - PullRequest
0 голосов
/ 29 сентября 2019

У меня есть некоторый код Access VBA, который использует свойства ActiveControl.Это привело бы к ошибке, если бы не было никакого контроля с фокусом.Должен ли я беспокоиться об этом, если всегда есть видимые элементы управления, которые могут иметь фокус?То есть, в форме, где всегда есть элементы управления, которые могут иметь фокус, есть ли способ для без элемента управления иметь фокус?

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

Ответы [ 2 ]

1 голос
/ 30 сентября 2019

Вы можете определенно иметь активную форму с видимыми и включенными элементами управления, которая имеет фокус, но не имеет активного элемента управления.В документации для form.ActiveControl и screen.ActiveControl упоминается: "Если ни один элемент управления не имеет фокуса при использовании свойства ActiveControl или если все активные формыэлементы управления скрыты или отключены, возникает ошибка. "

Вот простой и распространенный случай.Создайте простой экран-заставку с кнопкой и надписью.Я сделал это как Всплывающее и Модальное , но ни одна из настроек не имеет значения для нашего теста.

Sample Form

Далее создайте событие FORM_LOAD() и FORM_CURRENT() даже со следующим кодом:

Private Sub Form_Current()

'    Debug.Print Screen.ActiveControl.Name
'    Debug.Print Me.ActiveControl.Name

End Sub

Private Sub Form_Load()
    On Err GoTo PrintError

 '   Me.SetFocus
    Me.lbSample.Caption = "Welcome to my Application"

'    Debug.Print Form.ActiveControl.Name
'    Debug.Print Screen.ActiveControl.Name

ExitHere:
    Exit Sub
PrintError:
    Debug.Print Err.Description & " (" & Err.Number & ")"
    GoTo ExitHere
End Sub

Теперь протестируйте свойство ActiveControl, удалив отметку комментария изоператоры Screen.ActiveControl или form.ActiveControl в событиях LOAD () или CURRENT ().

Несмотря на то, что я устанавливаю заголовок ярлыка, он не делает его активным элементом управления.Кроме того, для активации элемента управления не нужно указывать фокус формы или значение Form.Visible = True: независимо от того, каким образом вы пытаетесь получить доступ к свойству, через Screen.ActiveControl или Form.ActiveControl, вы все равно получите ошибку 2474:

Error 2474

Я пытался, но не смог отловить эту ошибку ни в самой подпрограмме, ни в событии FORM_ERROR().

Итак, вот довольно распространенный случай - заставка - где нет активного контроля.Возможно, вам удастся обойти его, протестировав вместо этого элемент управления с фокусом, это зависит от того, чего вы пытаетесь достичь.

0 голосов
/ 29 сентября 2019

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

Тем не менее, вы должны практиковаться в защитном программировании и не допускать падения кода,если нет элемента управления (потому что через 3 года кто-то решил, что есть случай, когда все элементы управления должны быть отключены), или неожиданный элемент управления (который кто-то добавил позже) является активным.

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