在Outlook 2013中调用功能区按钮

时间:2014-03-20 22:53:54

标签: outlook outlook-addin ribbon outlook-2013

我们有一个Outlook加载项。我们需要以编程方式取消TaskItem Inspector窗口中的任务分配,就像取消分配按钮的方式一样。

有人会认为调用TaskItem.CancelResponseState()可能有效。虽然它确实取消了赋值,但它也使任务处于不可分配的状态。功能区上的“分配任务”按钮已禁用。

在Outlook 2007和2010中,我们可以获取“取消分配”按钮的CommandBarButton对象并调用其Execute()方法。这给了我们理想的行为。但是,在Outlook 2013中,此命令栏按钮不再存在。这一点并不奇怪,因为Inspector命令栏在2007年被功能区取代。但是,为了向后兼容,CommandBarButton对象仍以编程方式存在。使用Outlook 2013,Microsoft最终删除了此对象。

所以问题是:有没有办法以编程方式"点击"在一个功能区按钮?如果没有,是否有另一种方法可以按功能区按钮的方式取消任务分配?

1 个答案:

答案 0 :(得分:4)

您可以尝试使用Redemption及其SafeRibbon对象:

'simulate a click on the "Assign Task" button of an active Inspector
set sInspector = CreateObject("Redemption.SafeInspector")
sInspector.Item = Application.ActiveInspector
set Ribbon = sInspector.Ribbon
oldActiveTab = Ribbon.ActiveTab
Ribbon.ActiveTab = "Task"
set Control = Ribbon.Controls("Assign Task")
Control.Execute
Ribbon.ActiveTab = oldActiveTab 'restore the active tab

修改即可。在C#中,它将类似于以下内容(假设您在项目引用中添加了Redemption):

//simulate a click on the "Assign Task" button of an active Inspector
Redemption.SafeInspector sInspector = new Redemption.SafeInspector();
sInspector.Item = Application.ActiveInspector;
Redemption.SafeRibbon Ribbon = sInspector.Ribbon;
string oldActiveTab = Ribbon.ActiveTab;
Ribbon.ActiveTab = "Task";
Redemption.SafeRibbonControl Control = Ribbon.Controls.Item("Assign Task");
Control.Execute();
Ribbon.ActiveTab = oldActiveTab; //restore the active tab