目标:在ADD-IN中,我需要阻止日历通知发送给与会者,但同时我想在单击发送按钮时执行一些自定义操作。总之我需要只执行自定义操作使用发送按钮而不是SEND按钮的默认功能。
我使用的是VSTO2010,MS Office 2007,.net 4。
我需要在2003,2007,2010女士办公室(2007年和2010年的支持就够了)。
答案 0 :(得分:2)
您需要截取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.
}
答案 1 :(得分:0)
这里有一个不同的解决方案。你真的不需要触摸按钮,这与按钮无关。您必须使用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。