使用功能区回调是什么意思?

What does it mean to use ribbon callbacks?

我正在为 Excel 开发一个 COM 加载项,我收到一条评论说我应该使用功能区回调。

我的代码似乎可以工作,所以我不知道问题出在哪里。我已在 Internet 上阅读有关回调的信息,但不明白它与我的加载项有何关系。

尽管给我反馈的人是一个比我优秀得多的程序员,所以他可能是对的。也许你们更了解使用功能区回调意味着什么以及我为什么要使用它?

这是我的代码中的一个示例,它对功能区做出反应并对其进行了修改:

private void AdxRibbonButton2_OnClick(object sender, IRibbonControl control, bool pressed)
{
    if (CurrentExcelWorksheetEventsInstance.TimerOn == false) {
        //Start Timer
        CurrentExcelWorksheetEventsInstance.TimerStart = Now;
        CurrentExcelWorksheetEventsInstance.TimerOn = true;
        UpdateRibbonTimer(CurrentExcelWorksheetEventsInstance.TimerOn);
    } else {
        //Stop Timer
        NewTableRow(true, Math.Round(DateDiff(DateInterval.Second, CurrentExcelWorksheetEventsInstance.TimerStart, Now()) / 60.0 / 60.0, 3));
        CurrentExcelWorksheetEventsInstance.TimerOn = false;
        UpdateRibbonTimer(CurrentExcelWorksheetEventsInstance.TimerOn);
    }
}

回调是当用户与功能区 XML 控件交互时执行的函数。 AdxRibbonButton2_OnClick 函数显然不是回调。它可能是一个事件处理程序,因为第一个参数称为 sender 并且类型为 object。复选框或切换按钮的回调函数如下所示:

public void MyCheckBox_OnAction(IRibbonControl control, bool isPressed)
{
}

而在XML文件中,控件可以这样定义:

<checkBox id="MyCheckBox" onAction="MyCheckBox_OnAction" />

这样,当复选框被点击时,回调被调用。回调的行为就像事件处理程序一样。区别在于它们绑定在 XML 文件中,而不是代码中。

与其注册事件,不如使用回调更容易一些。用ribbonXML的时候也方便一点。要注册事件,您需要维护对控件的引用,并且必须编写一行代码来手动注册事件处理程序。仅当您需要注册多个回调或要取消注册回调或要注册的回调直到 运行 时间才知道时才应使用事件。

在计算机编程中,callback 是一段可执行代码,它作为参数传递给其他代码,预计会在某个方便的时间回调(执行)该参数。调用可能像在同步回调中​​那样立即发生,也可能像在异步回调中那样稍后发生。在所有情况下,目的都是将函数或子例程指定为实体,根据语言的不同,或多或少类似于变量。

编程语言以不同的方式支持回调,通常使用子例程、lambda 表达式、块或函数指针来实现它们。

至于功能区 UI(又名 Fluent UI),您可以指定在 Office 更新 UI 并收集新值时需要调用的函数名称。因此,您将能够指定新值并保持 UI 更新。没有像 Windows 表单提供的直接属性,所有 UI 更新都是通过回调进行的。

您可以在 MSDN 中的以下系列文章中阅读有关功能区 UI(Fluent UI)和回调的更多信息: