2015-12-02 205 views
0

我发现可以将自定义任务窗格添加到各个窗口中,例如,与此代码段预约:NetOffice - Outlook中约会窗口中的自定义任务窗格

public void Inspectors_NewInspector(Microsoft.Office.Interop.Outlook.Inspector Inspector) 
{ 
    Microsoft.Office.Tools.CustomTaskPane myCustomTaskPane; 

    if(Inspector.CurrentItem is Microsoft.Office.Interop.Outlook.AppointmentItem) { 

     UserControl uc1 = MyUserControl(); 
     myCustomTaskPane = getAddIn().CustomTaskPanes.Add(uc1, "MyPanel",Inspector); 
     myCustomTaskPane.DockPosition = Office.MsoCTPDockPosition.msoCTPDockPositionRight; 
     myCustomTaskPane.DockPositionRestrict = Office.MsoCTPDockPositionRestrict.msoCTPDockPositionRestrictNoChange; 
     myCustomTaskPane.Visible = true; 

    } 

    //Additionally You can add a property change listener to the current Item here 
} 

不过,我使用的,而不是VSTO“NetOffice”有外接兼容各种版本的Outlook。并且那里加载项不具有CustomTaskPanes属性,并且TaskPanes.Add属性不会重载以允许在主浏览器以外的其他窗口上添加自定义窗格。

回答

0

好的,按照以下方法解决。 在ComAddin类我有一个局部变量

Office._CustomTaskPane _taskPane; 

,我设置变量的重写CTPFactoryAvailable方法:

public override void CTPFactoryAvailable(object CTPFactoryInst) 
    { 
      _ctpFactory = new NetOffice.OfficeApi.ICTPFactory(this.Application, CTPFactoryInst); 
    } 

然后 - 加载插件的时候 - 我添加的事件处理程序到NewInspectorEvent事件:

private void Addin_OnStartupComplete(ref Array custom) 
    { 
     var inspectors = Application.Inspectors as NetOffice.OutlookApi.Inspectors; 
     inspectors.NewInspectorEvent += Inspectors_NewInspectorEvent; 
    } 

在创建新检查器窗口的事件处理程序,我创建日e窗格:

private void Inspectors_NewInspectorEvent(_Inspector Inspector) 
    { 
     var ai = Inspector.CurrentItem as AppointmentItem; 
     if (ai == null) 
      return; 
     var ins = Inspector as NetOffice.OutlookApi.Inspector; 
     _taskPane = _ctpFactory.CreateCTP(typeof(Addin).Assembly.GetName().Name + ".UserControl1", "My title", Inspector); 
     _taskPane.DockPosition = MsoCTPDockPosition.msoCTPDockPositionTop; 
     _taskPane.Height = 50; 
     _taskPane.Visible = true; 
    } 

这个概念验证草案适用于我。

相关问题