VSTO:哪个事件不能直接挂钩到对象?

时间:2016-06-09 07:54:18

标签: excel events vsto

对于某些事件,通过直接挂钩事件对象的订阅失败但在使用局部变量时有效。 我还没弄明白为什么,谁呢?

当我开始使用CommandBarsEvents.OnUpdate时,我遇到了这个谜团,为了detect interaction with a shape,可能会遇到如here所述的某些问题。 这个问题还有其他事件吗?

1 个答案:

答案 0 :(得分:0)

要明确这里有一个(不完整的)受影响事件的概述,而不是

  • 事件 DO 需要一个局部变量

    1. this.Application.CommandBars.OnUpdate
    2. 他们的代码必须是这样的:

      using Office = Microsoft.Office.Core;
      namespace Project
      {
          public partial class AddIn
          {      
              private Office.CommandBars commandBars; //declaration of local variable
      
              private void ThisAddIn_Startup(object sender, System.EventArgs e)
              {
                  commandBars = this.Application.CommandBars; //initialization of local variable
                  commandBars.OnUpdate += new Office._CommandBarsEvents_OnUpdateEventHandler(commandBars_OnUpdate); //"indirect" subscription to event`
              }
      
          }
      }
      
    3. 事件 NOT 需要一个局部变量

      1. ((InteropExcel.AppEvents_Event)Application).NewWorkbook
      2. this.Application.WorkbookNewSheet
      3. this.Application.WorkbookOpen
      4. 他们的代码可以是这样的:

        using Office = Microsoft.Office.Core;
        namespace Project
        {
            public partial class AddIn
            {      
                private void ThisAddIn_Startup(object sender, System.EventArgs e)
                {
                     ((InteropExcel.AppEvents_Event)Application).NewWorkbook += new InteropExcel.AppEvents_NewWorkbookEventHandler(Excel_NewWorkbook_EventHandler); //"direct" subscription to event`
                }
        
            }
        }