2015-12-02 206 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; 
    } 

這個概念驗證草案適用於我。

相關問題