2012-04-19 83 views
2

我正在開發一個使用C#的小型Outlook AddIn,並且我無法獲得此AddIn以正確取消ItemSend過程。 我特此想以下情景: 考慮這個小的AddIn:C#Outlook AddIn約會事件'ItemSend'不能正確取消

private void ThisAddIn_Startup(object sender, System.EventArgs e) 
    { 
     ((Outlook.ApplicationEvents_Event)this.Application).ItemSend += new ApplicationEvents_ItemSendEventHandler(ThisAddIn_ItemSend); 
    } 

    void ThisAddIn_ItemSend(object Item, ref bool Cancel) 
    { 
     System.Windows.Forms.MessageBox.Show("You can't save it, it's in the past!"); 
     Cancel = true; 
     return; 
    } 

現在,當我試圖改變現有的約會項目,我改變它的一些值在預約窗口打開時,如位置等。在點擊預約窗口中的「發送」按鈕時,文本框中的消息按預期顯示。但問題是Outlook忽略了這種取消並已經保存了更改。發生的唯一情況是約會窗口未關閉。但是,如果直接關閉窗口而不明確保存,則可以看到Outlook已經接受了對約會項目所做的更改。

這是一個預期的行爲?即使Cancel參數已更改爲「true」,Outlook是否可以停止保存更改?

+0

是不是有一些ItemSending事件? ItemSend在發送實際項目後看起來像一個動作。 – CodingBarfield 2012-04-19 11:14:50

+0

不幸的是,這是唯一的'發送'相關的事件,可以在Microsoft.Office.Interop.Outlook.ApplicationEvents_Event中訪問,它可以用於所有項目,就像我目前看到的一樣。 – xSNRG 2012-04-19 11:38:02

回答

1

您也可以使用Application.Inspectors.NewInspector事件並鎖定AppointmentItem.Send事件。

根據AppointmentItem.Send MSDN文檔 - 預期的行爲是當Cancel = true時,發送不會發生,檢查器窗口保持打開狀態,並且更改仍然保存 - 僅發送給與會者。

如果要取消保存 - 您需要鎖定AppointmentItem.Write事件以在發送之前取消保存。

+0

不幸的是我需要事件處理方法內的AppointmentItem來驗證它。 AppointmentItem.Write只有一個參數,它的參考布爾取消。 – xSNRG 2012-04-27 15:34:33

+0

您只需要在包裝類中存儲對其的引用。看看['InspectorWrapper'如何](http://msdn.microsoft.com/en-us/library/ff973716.aspx)。你需要保留一個屬性參考。 – SliverNinja 2012-04-27 15:36:18

+0

太好了,非常感謝。這工作。 – xSNRG 2012-04-27 17:34:28