Как сосредоточить внимание на подчиненной форме в LibreOffice Base с помощью вкладки

Вопрос и ответ База LibreOffice; Порядок вкладок от основной формы к подчиненной почти решает мою проблему, но не полностью.

У меня есть таблица mytable (id, name, textfield). Я показываю id и name в форме с макетом таблицы (элемент управления таблицей). Я добавил столбец textfield из той же таблицы, что и подчиненная форма с элементом управления текстовым полем (причина в том, что я хочу вводить текст с новой строкой, имея при этом возможность быстро перемещаться по записям в основной таблице). Вот как это выглядит в режиме дизайна:

Форма и подчинение из одной таблицы

Я добавил этот базовый макрос на основе двух приведенных выше ответов:

Sub Main

Dim root_doc As Object
Dim form_container, form_ctrlr As Object
Dim main_frm, sub_frm, tab_target As Object
root_doc = ThisComponent
form_container = root_doc.Drawpage.Forms
form_ctrlr = root_doc.getCurrentController()
main_frm = form_container.getByName("MainForm")
sub_frm = main_frm.getByName("SubForm")
tab_target = sub_frm.getByName("TextField")
form_ctrlr.getControl(tab_target).setFocus()

End Sub

Теперь, если я добавлю макрос к событию When losing focus столбца name, я получу фокус на текстовом поле при нажатии Tab, но на следующей строке.

Если я добавлю макрос к событию On key press столбца name, я получу то, что хочу, нажав, например, Space, но Tab или Enter переводят меня только на следующую строку в основной форме.

Есть ли способ заставить это работать с Tab?


person arjan    schedule 14.04.2019    source источник
comment
Также опубликовано на ask.libreoffice.org/en/question/190449/, где дается ответ.   -  person Jim K    schedule 15.04.2019


Ответы (1)


Варианты решения этой проблемы из ответов на ask.libreoffice.org:

  1. Просто используйте стандартный Ctrl + Tab для переключения фокуса.

  2. Назначьте макрос пользовательской комбинации клавиш и используйте ее. Не все комбинации работают, остановился на Shft + Enter.

И макрос (предоставленный пользователем Ratslinger):

Sub Main
    Dim oForm, oCtrlr, oField As Object
    oForm = ThisComponent.Drawpage.Forms.getByName("MainForm")
    oCtrlr = ThisComponent.getCurrentController()
    oField = main_frm.getByName("TextField")
    oCtrlr.getControl(oField).setFocus()
End Sub
person arjan    schedule 18.04.2019