Необходимость дважды вызывать SetFocus в MS Access 2010

Я обнаружил, что в течение пары часов этот код работал:

If KeyCode = 37 Then

    Me.Text12.SetFocus

End If

Потом он загадочным образом перестал работать. Я подумал, что это может быть как-то связано с обработкой подпрограммы OnEnter (я двигаю курсор в конец текстового поля).

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

Теперь у меня есть этот код:

On Error Resume Next

If KeyCode = 37 Then

    Me.Text12.SetFocus
    Me.Text12.SetFocus

End If

Который работает. Итак, я знаю, что более 50 страниц результатов поиска для SetFocus не работают, которые относятся к тому, что он скрыт, отключен, невидим, пьет чай с викарием и т. д., не применимы здесь.

Я также попытался сначала установить фокус на другой элемент управления, а также широко применил DoEvents, но ни один из них не помог.

Кто-нибудь сталкивался с чем-то подобным или это просто очень странный Heisenbug?


person Rick    schedule 12.06.2013    source источник
comment
О да, выдавалась ошибка Run Time Error 2110 - Не удается переместить фокус   -  person Rick    schedule 12.06.2013


Ответы (1)


У вас должно быть что-то еще. Установите точку останова на первом Me.Text12.SetFocus и посмотрите, что произойдет, когда вы выполните код (F8).

Я подозреваю, что у вас запущен другой процесс, который отменяет первый Me.Text12.SetFocus.

Другая возможность - ваша БД повреждена. Это то, к чему склонен Access, особенно при большом количестве правок в формах и/или отчетах. Перейдите в раздел Файл — Информация, затем нажмите Сжать и восстановить базу данных.
Неплохо, если Access будет делать это автоматически при каждом закрытии. Перейдите в раздел Файл – Параметры – Текущая база данных (вкладка) и установите флажок Сжимать при закрытии.

person Tom Collins    schedule 12.06.2013
comment
Спасибо, Том. Я обнаружил, что иногда он переходил к обработчику кликов элемента управления, который теряет фокус. А иногда это не так. Отсюда и Гейзенбаг. Я добавил флаг, чтобы сообщить обработчику кликов, чтобы он ничего не делал для этого конкретного нажатия клавиши, и, похоже, это решило проблему. До этого я также пробовал ваше предложение по сжатию базы данных, но это не изменило поведения. - person Rick; 13.06.2013