如何使用选项卡在 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 控件)的表单中显示 id
和 name
。我从相同的 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
,但 Tab
或 Enter
只会将我带到主窗体的下一行。
有没有办法让它与 Tab
一起工作?
解决此问题的选项,来自 ask.libreoffice.org:
的答案
只需使用标准Ctrl + Tab
切换焦点即可。
为自定义组合键指定一个宏并使用它。并非所有组合都有效,我选择了 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
问答LibreOffice Base; Tab order from mainform to subform几乎解决了我的问题,但还没有完全解决。
我有一个 table mytable
(id, name, textfield
)。我在具有 table 布局(table 控件)的表单中显示 id
和 name
。我从相同的 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
,但 Tab
或 Enter
只会将我带到主窗体的下一行。
有没有办法让它与 Tab
一起工作?
解决此问题的选项,来自 ask.libreoffice.org:
的答案只需使用标准
Ctrl + Tab
切换焦点即可。为自定义组合键指定一个宏并使用它。并非所有组合都有效,我选择了
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