2012-04-19 9 views
2

C#を使用してOutlook AddInを少し開発していますが、このAddInでItemSendプロセスを正しくキャンセルできません。 私はここに、以下のシナリオを考えています: この小さなアドイン考えてみましょう:私は既存の予定アイテムを変更しようとすると、予定のウィンドウで開いたときに、私はのように、それのいくつかの値を変更し、今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は予定アイテムに加えられた変更を既に受け入れていることがわかります。

これは意図した動作ですか?キャンセルパラメータが「true」に変更されていても、Outlookは変更の保存を停止できますか?

+0

ItemSendingイベントはありませんか? ItemSendは、実際のアイテムを送信した後のアクションのように見えます。 – CodingBarfield

+0

残念ながら、これはMicrosoft.Office.Interop.Outlook.ApplicationEvents_Eventでアクセスできる唯一の[送信]関連のイベントです。これは、これまでのようにすべてのアイテムで機能します。 – xSNRG

答えて

1

Application.Inspectors.NewInspectorイベントを使用してAppointmentItem.Sendイベントにラッチすることもできます。

MSDNの文書によると、予想される動作は、Cancel = trueのときに送信が行われず、インスペクタウィンドウが開いたままになり、変更が保存され、出席者に送信されないことです。

保存をキャンセルする場合は、AppointmentItem.Writeイベントにラッチして送信前に保存をキャンセルする必要があります。

+0

残念ながら、イベント処理メソッド内でAppointmentItemを検証する必要があります。 AppointmentItem.Writeには、ref bool cancelという1つのパラメータしかありません。 – xSNRG

+0

ラッパークラスへの参照を格納するだけで済みます。 ['InspectorWrapper' howto](http://msdn.microsoft.com/en-us/library/ff973716.aspx)を見てください。プロパティ参照を保持する必要があります。 – SliverNinja

+0

素晴らしい、ありがとう。それはうまくいった。 – xSNRG

関連する問題