如何使用选项卡将焦点放在LibreOffice Base中的子表单上

时间:2019-04-14 18:56:13

标签: libreoffice libreoffice-base

问答LibreOffice Base; Tab order from mainform to subform几乎可以解决我遇到的问题,但不能完全解决。

我有一张桌子mytableid, name, textfield)。我以表格布局(表格控件)的形式显示idname。我已经在同一表格的表textfield中添加了一个带有文本框控件的子窗体(原因是我想用换行符输入文本,同时能够在主表中快速浏览记录)。这是设计视图中的外观:

Form and subform from one table

我已根据上面链接的两个答案添加了此基本宏:

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,但是TabEnter仅将我带到主表单的下一行。

有没有办法使它与Tab一起使用?

1 个答案:

答案 0 :(得分:0)

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