NetOffice - Outlook 中约会 window 中的自定义任务窗格
NetOffice - Custom Task Pane in a Appointment window in Outlook
我发现可以将自定义任务窗格添加到个人 windows,例如使用此代码段的约会:
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
属性 没有超载以允许在其他 window 上添加自定义窗格比主要探险家。
好的,按照下面的方式解决。
在 ComAddin
class 我有一个局部变量
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;
}
在用于创建新检查器 window 的事件处理程序中,我正在创建窗格:
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;
}
这个概念证明草案对我有用。
我发现可以将自定义任务窗格添加到个人 windows,例如使用此代码段的约会:
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
属性 没有超载以允许在其他 window 上添加自定义窗格比主要探险家。
好的,按照下面的方式解决。
在 ComAddin
class 我有一个局部变量
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;
}
在用于创建新检查器 window 的事件处理程序中,我正在创建窗格:
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;
}
这个概念证明草案对我有用。