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

时间:2015-07-07 07:52:06

标签: c# callback vsto

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

我的代码似乎有用,所以我不知道问题是什么。我已经阅读过互联网上的回调,但我们并不了解它与我的加载项的关系。

给我反馈的人是比我好得多的程序员,所以他可能是对的。也许你们更多地了解使用功能区回调的含义以及为什么要使用它?

以下是我的代码中的一个示例,它响应并修改了功能区:

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);
    }
}

2 个答案:

答案 0 :(得分:3)

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

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

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

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

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

使用回调会更容易,而不是注册到事件。使用功能区XML时,它也更方便一些。要注册到事件,您需要维护对控件的引用,并且必须编写一行代码来手动注册事件处理程序。只有在需要注册多个回调或者要取消注册回调或者在运行时才知道要注册的回调时,才应使用事件。

答案 1 :(得分:2)

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

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

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

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