MS-Access 2010: события мыши мертвы в основной форме

MS-Access 2010: Основная форма с именами элементов и подчиненная форма с действиями элементов (дата действия и т. д.). Цель = быстрый просмотр данных с помощью только мыши, без какого-либо редактирования.

Идея: переключаться на подчиненную форму и обратно на основную форму простым движением мыши.

Это отлично работает от основной формы к подчиненной форме (код в подчиненной форме):

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Forms![MyMainForm]![MySubForm].SetFocus
End Sub

Я попытался использовать аналогичную процедуру для возврата из подчиненной формы в основную. Однако после того, как мышь находится над подчиненной формой, перемещение мыши по основной форме или по полю основной формы или даже щелчок по фону основной формы не вызывает желаемых действий мыши (проверяется путем вставки Stop в соответствующий код). Кстати, щелчок по фону основной формы с фокусом на основной форме вызывает действие мыши, но .SetFocus приводит к ошибке (там нет разрешенных действий).

Следовательно, кажется, что единственный способ вернуть фокус на основную форму — щелкнуть поле в основной форме. Но это не очевидно для пользователей.


person Bughater    schedule 03.07.2016    source источник
comment
Вы не можете установить фокус на форме. То, что вы делаете с Forms![MyMainForm]![MySubForm].SetFocus, устанавливает фокус на элементе управления подчиненной формы. Вам нужно установить фокус на элемент управления в основной форме.   -  person Andre    schedule 03.07.2016


Ответы (1)


Мне нужно было установить фокус на основной форме, перемещая мышь. Конечно, СНАЧАЛА фокус ДОЛЖЕН быть установлен на главной форме, только после этого можно фокусироваться на любом поле на главной форме. Проблема заключалась в том, что ни сама основная форма, ни ее фон не вызывают действия мыши, способные выполнить действие .SetFocus, когда фокус находится на подчиненной форме.

Однако я разработал обходной путь, который работает: по всей ширине формы внизу основной формы я создал большое, прозрачное, несвязанное поле Dummy, которое мышь автоматически пересекает, когда покидает подчиненную форму. Следующий код находится в модуле основной формы:

Private Sub Dummy_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Me.SetFocus
Me![Empty].SetFocus
End Sub

Пусто — это очень маленькое несвязанное поле в углу, на которое фокус устанавливается на втором этапе, когда курсор мигает, указывая на то, что основная форма имеет фокус.

Оно работает ! Просто фиктивное поле должно быть достаточно большим, иначе время пересечения мышью будет слишком коротким, чтобы вызвать желаемое действие; это ограничивает возможности оформления основной формы.

person Bughater    schedule 12.07.2016