【问题标题】:RibbonXml togglebutton OnAction not finding callback functionRibbonXml togglebutton OnAction 找不到回调函数
【发布时间】:2018-02-17 20:16:43
【问题描述】:

我遇到了一个特殊的问题,尽管经过数小时的谷歌搜索和修补,我仍然无法解决。

<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="OnHomeRibbonLoad">
<ribbon startFromScratch="true">
    <tabs>
        <tab id="tab_Home" label ="Home" visible="true">
          <group id="grp_Navigate" label="Navigate" visible="true">
            <button id="btn_Tasks" label="Tasks" onAction="OnAction" visible="true" imageMso="ViewAllProposals" size="large" />
            <toggleButton id="btn_Parties" label="Parties" onAction="OnAction" getPressed="GetPressed" visible="true" imageMso="ViewAllProposals" size="large" />
            <button id="btn_Memos" label="Memos" onAction="OnAction" visible="true" imageMso="AccessTableIssues" size="large" />
          </group>
        </tab>
    </tabs>
</ribbon>
<backstage onShow="OnBackstageShow">
    <button id="btn_Login" label="Login" insertAfterMso="TabPrint" visible="true" getEnabled="GetEnabled" onAction="OnAction" isDefinitive="true"/>
    <tab id="tab_Settings" label="Settings" insertAfterMso="TabPrint" visible="true" getEnabled="GetEnabled" ></tab>
    <tab id="tab_Welcome" label="Welcome" insertAfterMso="TabPrint" visible="true" > </tab>
    <tab idMso="TabPrint" visible="false"/>
    <button idMso="ApplicationOptionsDialog" visible="false"/>
</backstage>

我有上述自定义 UI xml,并将其中一个按钮更改为切换按钮 (id="btn_Parties")。所有三个按钮之前都可以正常工作,但是在 togglebutton 之后找不到它的 onAction 回调函数。其他两个按钮触发良好,但单击切换按钮会导致错误提示...“Microsoft Access 无法运行宏或回调函数 'OnAction'。请确保宏或函数存在并采用正确的参数”。

Public Sub OnHomeRibbonLoad(ribbon As IRibbonUI)
    Set HomeRibbon = ribbon
End Sub

Public Sub OnAction(control As IRibbonControl)
    Select Case control.ID
    Case "btn_Tasks"
        MsgBox "Load TaskView"
    Case "btn_Parties"
        MsgBox "Load PartyView"
    Case "btn_Memos"
        MsgBox "Load MemoView"
    Case Else
        Debug.Print "Missing case in OnAction: " & control.ID
    End Select
End Sub

Public Sub GetPressed(control As IRibbonControl, ByRef returnedVal)
    Select Case control.ID
    Case "tbtn_Parties"
        returnedVal = IsPartiesLoaded
    Case Else
        returnedVal = True
        Debug.Print "Missing case in GetEnabled: " & control.ID
    End Select
End Sub

togglebutton 有什么特别之处使它的 OnAction 事件不同于标准按钮吗?

如果有人能看出我哪里出错了,那将不胜感激。谢谢。

【问题讨论】:

  • 正如错误所说:“确保宏或函数存在并采用正确的参数”,宏确实存在,因此错误是错误的参数。 toggleButton 需要 pressed As Boolean 一个附加参数。见www.accessribbon.de
  • 啊,是的,就是这样。出于某种原因,我完全说服自己,togglebutton 的方法签名与按钮的方法签名相同。现在都在工作。谢谢。 :)

标签: vba ms-access callback togglebutton ribbonx


【解决方案1】:

toggleButton 控件的onAction 回调应如下所示:

  • C#:void OnAction(IRibbonControl control, bool pressed)
  • VBA/VB:Sub OnAction(control As IRibbonControl, pressed As Boolean)
  • C++:HRESULT OnAction([in] IRibbonControl *pControl, [in] VARIANT_BOOL *pvarfPressed)

在以下系列文章中阅读有关 Fluent UI(又名 Ribbon UI)的更多信息:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-09-17
    • 2013-08-06
    • 2020-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多