如何使用选项卡在 LibreOffice Base 中关注子表单

How to get focus on a subform in LibreOffice Base using tab

问答LibreOffice Base; Tab order from mainform to subform几乎解决了我的问题,但还没有完全解决。

我有一个 table mytable (id, name, textfield)。我在具有 table 布局(table 控件)的表单中显示 idname。我从相同的 table 添加了列 textfield 作为带有文本框控件的子表单(原因是我想输入带有换行符的文本,同时能够在主要 table)。这是它在设计视图中的样子:

我根据上面链接的两个答案添加了这个 Basic 宏:

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

现在,如果我在 name 列的事件 When losing focus 上添加宏,按下 Tab 键时我确实会在文本框上获得焦点,但在下一行。

如果我将宏添加到 name 列的事件 On key press 中,按下时我会得到我想要的,例如Space,但 TabEnter 只会将我带到主窗体的下一行。

有没有办法让它与 Tab 一起工作?

解决此问题的选项,来自 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