2012-07-23 29 views
5

Outlookアドインを作成していて、保存された後に予定のデータで何か(ここでは関係ありません)をしたいと思います。
(私はOutlook-Addinsを初めて使用しています)
だから、AfterWriteイベントがあります。ここにメソッドを登録できます。 そして、のItemLoadイベントがのアプリケーションにあります。Outlook Appointmentが保存された後のイベント

ので、私の最初のEffordはこのようなものだった:問題は、私は、イベントを解雇予定のデータを取得する方法がわからないということ、である

private void ThisAddIn_Startup(object sender, System.EventArgs e) 
{ 
    // ... 
    this.Application.ItemLoad += 
     new Outlook.ApplicationEvents_11_ItemLoadEventHandler(atItemLoad); 
} 
public void atItemLoad(Object item) 
{ 
    Outlook.AppointmentItem aitem = item as Outlook.AppointmentItem; 
    if (aitem != null) 
    { 
     aitem.AfterWrite += 
      new Outlook.ItemEvents_10_AfterWriteEventHandler(afterWrite); 
    } 
} 
public void afterWrite() 
{ 
    // Who was written? 
    MessageBox.Show("it was written!"); 
} 

Application.ItemLoadは、オブジェクトを取得する関数を登録します。この関数は、アポイントにキャストできます。
AfterWriteはありません。私の英語がめちゃくちゃである場合

public void afterWrite(Outlook.AppointmentItem aitem) 
{ 
    // do something with the data from the Appointment 
    MessageBox.Show(aitem.Subject + " was written!"); 
} 

私は、私は完全に間違った方向に研究していますことを恐れ...

*申し訳ありません - それは

私の母国語ではない:私はこのような何かが欲しいです編集:

私もこのような構造試してみました:

private List<AppointmentEventHolder> holderList = new List<AppointmentEventHolder>(); 

internal class AppointmentEventHolder 
{ 
    private Outlook.AppointmentItem aitem = null; 
    public AppointmentEventHolder(Outlook.AppointmentItem item) 
    { 
     aitem = item; 
    } 

    public void onWrite() 
    { 
     MessageBox.Show("write: " + aitem.Subject); 
    } 
} 

public void atItemLoad(Object item) 
{ 
    Outlook.AppointmentItem aitem = item as Outlook.AppointmentItem; 
    if (aitem != null) 
    { 
     AppointmentEventHolder aHolder = new AppointmentEventHolder(aitem); 
     holderList.Add(aHolder); 
     aitem.AfterWrite += aHolder.onWrite; 
    } 
} 

をが、イベントは解雇されません! 私は今非常に挫折しています

答えて

6

私はこれを持っていると思います。
あなたの予定があるフォルダにハンドラを登録する必要があります。

私は自分自身を読んだり経験したりしています。イベントを登録するオブジェクトへの参照を保存しているので、私はこれを行いました。
だから予定がドラッグ・アンド・ドロップされた概要になれば、今、私は、イベントを取得する良いことだとコード

private Outlook.MAPIFolder _CalendarFolder = null; 
private Outlook.Items _CalendarItems = null; 

private void ThisAddIn_Startup(object sender, System.EventArgs e) 
{ 
    Outlook.MAPIFolder calendarFolder = 
     this.Application.ActiveExplorer().Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderCalendar); 

    // get the Termine24-Folder (if not found, create it) 
    try 
    { 
     _CalendarFolder = calendarFolder.Folders[Constants.FOLDERNAME]; 
    } 
    catch 
    { 
     _CalendarFolder = calendarFolder.Folders.Add(Constants.FOLDERNAME); 
    } 
    _CalendarItems = _CalendarFolder.Items; 
    attachEvents(); 

} 
public void attachEvents() 
{ 
    _CalendarItems.ItemAdd += Item_Add; 
    _CalendarItems.ItemChange += Item_Change; 
    _CalendarItems.ItemRemove += Item_Remove; 
} 
public void Item_Add(Object item) 
{ 
    Outlook.AppointmentItem aitem = item as Outlook.AppointmentItem; 
    if (aitem != null) 
    { 
     MessageBox.Show("add: " + aitem.Subject); 
    } 
    else 
    { 
     MessageBox.Show("add, but no appointment"); 
    } 
} 
public void Item_Change(Object item) 
{ 
    Outlook.AppointmentItem aitem = item as Outlook.AppointmentItem; 
    if (aitem != null) 
    { 
     MessageBox.Show("changed: " + aitem.Subject); 
    } 
    else 
    { 
     MessageBox.Show("change, but no appointment"); 
    } 
} 
public void Item_Remove() 
{ 
    MessageBox.Show("Item_remove"); 
} 

に、thatsの。

しかし、Item_Removeはまだ削除されたObjectを取得しません。

+0

C#コードが指している「** Constants.FOLDERNAME **」とは何ですか? この定数の意味を理解していないと、コードを構築できません。 –

+2

'プライベートMAPIFolder GetCalendarFolder() {var app = new Microsoft.Office.Interop.Outlook.Application(); 名前空間名前空間= app.GetNamespace( "MAPI"); return nameSpace.GetDefaultFolder(OlDefaultFolders.olFolderCalendar); } '**このメソッドを使用して、デフォルトのOutlook.MAPIFolderオブジェクトを取得します。** –

関連する問題