【问题标题】:How to get focus on a subform in LibreOffice Base using tab如何使用选项卡关注 LibreOffice Base 中的子表单
【发布时间】:2019-04-14 18:56:12
【问题描述】:

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

我有一张桌子mytable (id, name, textfield)。我以表格布局(表格控件)的形式显示idname。我从同一个表中添加了列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

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

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

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

【问题讨论】:

标签: libreoffice libreoffice-base


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多