私は、予定と連絡先(および後で仕事も同様)にEventHandlersを使用したいと思います。Outlookの予定と連絡先のEventHandler
は、私は、次のコードを実行クラスContactProgramあります
Outlook.Items myContactItems = myApplication.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderContacts).Items;
myContactItems.ItemAdd += new Outlook.ItemsEvents_ItemAddEventHandler(myContactItems_Add);
myContactItems.ItemChange += new Outlook.ItemsEvents_ItemChangeEventHandler(myContactItems_Change);
myContactItems.ItemRemove += new Outlook.ItemsEvents_ItemRemoveEventHandler(myContactItems_Remove);
をそして私は、次のコードexecutsクラスAppointmentPogram持って:私は両方のためのイベントハンドラを使用する場合は
Outlook.Items myAppointmentItems = myApplication.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderCalendar).Items;
myAppointmentItems.ItemAdd += new Outlook.ItemsEvents_ItemAddEventHandler(myAppointmentItems_Add);
myAppointmentItems.ItemChange += new Outlook.ItemsEvents_ItemChangeEventHandler(myAppointmentItems_Change);
myAppointmentItems.ItemRemove += new Outlook.ItemsEvents_ItemRemoveEventHandler(myAppointmentItems_Remove);
をAppointment-EventHandlerは起動しません。しかし、Contact-EventHandlerを作成するコードをコメントアウトすると、Appointment-EventHandlerが起動されます。 (私のプログラムでは、contact-EventHandlerが最初に作成され、その後にAppointment-EventHandlerが作成されます)。
EventHandlerは一度しか作成せず、パラメータとして与えられたオブジェクトの型をチェックできます。しかし残念なことに、contact-EventHandlerはolFolderContactsとappointment-Eventhandlers olFolderCalendarを指すようになりました。
提案がありますか?
編集: 私の新しいコード:
...
using Outlook = Microsoft.Office.Interop.Outlook;
using Office = Microsoft.Office.Core;
public partial class ThisAddIn
{
private static Outlook.Application myApplication = new Outlook.Application();
private List<OutlookContact> allContacts = new List<OutlookContact>();
private Outlook.Folder myContactsFolder = (Outlook.Folder)myApplication.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderContacts);
private ContactProgram contactProgram;
private List<OutlookAppointment> allAppointments = new List<OutlookAppointment>();
private Outlook.Folder myAppointmentsFolder = (Outlook.Folder)myApplication.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderCalendar);
private AppointmentProgram appointmentProgram;
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
contactProgram = new ContactProgram(myApplication, allContacts, myContactsFolder);
contactProgram.Start();
appointmentProgram = new AppointmentProgram(myApplication, allAppointments, myAppointmentsFolder);
appointmentProgram.Start();
//initialise EventHandlers
//myContactItems = myApplication.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderContacts).Items;//= myContactsFolder.Items;
Outlook.Items myContactItems = myContactsFolder.Items;
myContactItems.ItemAdd += new Outlook.ItemsEvents_ItemAddEventHandler(myContactItems_Add);
myContactItems.ItemChange += new Outlook.ItemsEvents_ItemChangeEventHandler(myContactItems_Change);
myContactItems.ItemRemove += new Outlook.ItemsEvents_ItemRemoveEventHandler(myContactItems_Remove);
//myAppointmentItems = myApplication.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderCalendar).Items;
Outlook.Items myAppointmentItems = myAppointmentsFolder.Items;
myAppointmentItems.ItemAdd += new Outlook.ItemsEvents_ItemAddEventHandler(myAppointmentItems_Add);
myAppointmentItems.ItemChange += new Outlook.ItemsEvents_ItemChangeEventHandler(myAppointmentItems_Change);
myAppointmentItems.ItemRemove += new Outlook.ItemsEvents_ItemRemoveEventHandler(myAppointmentItems_Remove);
}
private static void myContactItems_Add(object item)
{
ContactProgram.myContactItems_Add(item);
}
...
}
Hey SliverNinja、 すぐにお返事ありがとうございます。 SOの投稿に示されているコードを移動しました(上記参照)。 私は既に、フォルダストアごとに別々のハンドラを持っていると思います。 問題は解決しません。最初はEventHandlerが起動しましたが、それ以降はもう発生しません。 ご協力いただければ幸いです。 – joma
誰かがアイデアを持っていますか?問題に関する詳細情報を提供できますか? – joma
'Outlook.Items myContactItems'と' Outlook.Items myAppointmentItems'はあなたのクラスのメンバである必要があります。 'ThisAddIn_Startup'の中でそれらを宣言しないか、GC'dまで一度だけ起動します。イベントが一度だけ発生した場合は、GC'Dを取得する変数のスコープの問題であることが保証されます。 – SliverNinja