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

однако, я использую «NetOffice» вместо VSTO иметь надстройку совместимы с различными версиями 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; 
    } 

Этот проект доказательств концепции работает для меня.

Смежные вопросы