2016-11-17 74 views

回答

0

当然有订单。
但是这是Office的内部实现细节,你绝对不应该依赖这个。

您唯一可以信赖的订单是onLoad,这是保证先到的。

这些方法的其余部分不应该互相依赖。它们应该尽可能无状态地执行,并且只应该返回所要求的值。 (因此他们的名字以get...开头。)
也就是说,你得到控件的id并且必须返回一些值 - 也许从当前的Excel.Application中获得一些信息。

一个额外的信息:
如果您需要所有这些get...方法的更新,你可以调用IRibbonUI.Invalidate()
(你得到的IRibbonUI的实例作为onLoad调用的参数。)

+0

我一直在使用无效的一个或我的自定义功能区中的一堆我的控制措施,并已经注意到了各种的调用顺序'get *'方法总是相同的,在单个控件和其中的一组控件中,但是例如我期望为每个控件首先调用getVisible方法,因为如果控件不可见,则其他方法是合理的可能不会被调用。但是这不会让我感到困惑。 – noplace

+0

@noplace你所经历的呼叫顺序保持不变并不奇怪。但它可能会偏离Office的不同版本或版本,并可随时更改,恕不另行通知。我现在正在开发使用COM,自定义色带和VSTO的Excel加载项,尤其是对于Office 2016来说,即使定期自动更新改变了内部行为和调用顺序,机会也非常高。奇怪的'COMExceptions'和'AccessViolations'在我的情况下是后果。请问:为什么您甚至需要特殊的电话订单? – haindl

+0

在我最近开发的一个插件中,不幸的是,当不再调用单用户控件失效时,我不得不保持一个状态和'onLoad'方法。如果使整个功能区失效,是否再次调用“onLoad”? @haindl你会建议我一本关于VSTO主题的好书吗(我知道微软正在推送网络插件,但它们仍然有限)......我知道我发表的那篇文章是最新的,我不确定它是否也有效。 – noplace