【问题标题】:VSTO XML ribbon: which callback is called firstVSTO XML 功能区:首先调用哪个回调
【发布时间】:2016-11-17 14:10:21
【问题描述】:

在 VSTO 加载项中创建自定义 XML 功能区时,是否有调用各种 get* 回调方法(例如 getDescription、getEnabled、getVisible 等)的顺序?

【问题讨论】:

    标签: vsto outlook-addin office-addins excel-addins word-addins


    【解决方案1】:

    肯定有订单。
    但这是 Office 的内部实现细节,您绝对不应该依赖它。

    您唯一可以依赖的顺序是onLoad 的调用,它保证先到。

    这些方法的其余部分不应相互依赖。它们应该尽可能无状态地实现,并且应该只返回请求的值。 (因此他们的名字以get...开头。)
    也就是说,您获得了控件的 id 并且必须返回一些值 - 可能带有来自当前 Excel.Application 的一些信息。

    一个附加信息:
    如果您需要刷新所有这些get... 方法,可以致电IRibbonUI.Invalidate()
    (您将获得IRibbonUI 的实例作为onLoad 调用的参数。)

    【讨论】:

    • 我一直在自定义功能区中的一个或一组控件上使用 invalidate,并注意到在单个控件中各种 get* 方法的调用顺序始终相同在其中的一组中,例如,我希望首先为每个控件调用 getVisible 方法,因为如果控件不可见,则很可能不会调用其他方法。但这并没有发生,让我有些困惑。
    • @noplace 您遇到的呼叫顺序保持不变也就不足为奇了。但它可能会在不同版本或 Office 版本中有所不同,并且可能随时更改,恕不另行通知。多年来,我一直在使用 COM、自定义功能区和 VSTO 开发 Excel 加载项,尤其是对于 Office 2016,即使定期自动更新也会改变内部行为和调用顺序的可能性非常高。奇怪的COMExceptionsAccessViolations 是我的情况的后果。请问:为什么一开始还需要特殊的调用顺序?
    • 在我最近开发的一个插件中,不幸的是,我不得不保持一个状态,并且在使单个用户控件无效时不再调用 onLoad 方法。如果使整个功能区无效,是否会再次调用 onLoad? @haindl 你能给我推荐一本关于 VSTO 的好书吗(我知道微软正在推动 web 插件,但它们仍然有些有限)....我知道我出版的 apress 是最新的,但我我不确定它是否也有效。
    • @noplace 不,onLoad 只被调用一次。但我仍然不明白为什么您需要在get* 回调中刷新某些状态。正如我的回答中提到的,您可以在任何地方使用Excel.Application。所以你可以例如在onLoad 方法中订阅WorkbookOpen/De/Activate 并对更改做出反应。您也可以在get* 方法中查询Application 以获取您需要的信息。如果您需要其他状态,则只需使其独立于调用顺序即可。我知道 VSTO 没有新书,但技术肯定没有改变,所以你可以试试this one
    • 它不是一个 excel 插件,而是一个 Outlook 插件,由于我对事情如何工作的理解不正确,我可能做错了什么。据我了解,我的自定义功能区有一个实例在不同的 Outlook 资源管理器/检查器窗口之间共享。但是,在给定时间,功能区可能在基于不同窗口的用户操作和正在显示的 Outlook 项目上具有不同的状态(也在 UI 级别)。通过使用附加到每个窗口中的活动项的自定义属性并适当地使控件无效,我能够正确处理所有事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-15
    • 2022-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多