目标:在插件中,我需要阻止将日历通知发送给与会者,但同时我想在单击发送按钮时执行一些自定义操作。简而言之,我只需要执行与发送按钮相关的自定义操作而不是发送按钮的默认功能。
我正在使用 VSTO2010、MS Office 2007、.net 4。
我需要在 Ms office 2003,2007,2010 上执行此操作(支持 2007 和 2010 就足够了)。
目标:在插件中,我需要阻止将日历通知发送给与会者,但同时我想在单击发送按钮时执行一些自定义操作。简而言之,我只需要执行与发送按钮相关的自定义操作而不是发送按钮的默认功能。
我正在使用 VSTO2010、MS Office 2007、.net 4。
我需要在 Ms office 2003,2007,2010 上执行此操作(支持 2007 和 2010 就足够了)。
您需要OnClick
拦截CommandBar
. 是的,即使 Outlook 2010 使用功能区并且不显示任何命令栏,仍然有一个CommandBar
包含按钮的程序。为了兼容性,功能区按钮仍然会导致相应的CommandBarButton
对象引发事件。
为了增加复杂性,您想要的按钮在“约会”变成“会议”之前不存在。
您将需要一些字段:
private CommandBars mCommandBars;
private CommandBarButton mCommandButtonSendMeeting;
在您的NewInspector
活动中,添加这些行
mCommandBars = this.Inspector.CommandBars;
mCommandBars.OnUpdate += CommandBars_OnUpdate;
别处
private void CommandBars_OnUpdate()
{
if (mCommandButtonSendMeeting == null)
{
mCommandButtonSendMeeting = (CommandBarButton)CommandBars.FindControl(Missing.Value, 2617, Missing.Value, Missing.Value);
mCommandButtonSendMeeting.Click += CommandButtonSendMeeting_Click;
}
}
private void CommandButtonSendMeeting_Click(CommandBarButton Ctrl, ref bool CancelDefault)
{
CancelDefault = true;
// Do whatever here.
}
在这里,您有不同的解决方案。您真的不必触摸按钮,与按钮无关。您必须使用 Outlook 为这些目的提供的事件。只需将此行包含在您的 Add-in_StartUp 中:
Application.ItemSend += new Outlook.ApplicationEvents_11_ItemSendEventHandler(Application_ItemSend);
当然,事件处理程序的实现:
void Application_ItemSend(object Item, ref bool Cancel)
{
MessageBox.Show("Yihha!!");
Cancel = true;
}
这将拦截您发送的任何消息。适用于 Outlook 2010。