Для этого есть хитрое решение. Предположение: пользователь использует представление календаря для изменения элемента. Поскольку событие генерируется представлением календаря, это должно быть верно во всех случаях:
_CalendarItems = calendarFolder.Items;
_CalendarItems.ItemChange += Item_Change;
[...] теперь мы можем использовать CalendarView для вычисления выбранной начальной даты и сравнения ее со всеми исключениями, хранящимися в the RecurrencePattern ...
if (myAppointment.IsRecurring) {// в случае повторяющихся встреч в этой точке мы всегда получаем // только ссылку на мастера серии, а НЕ вхождение
// Предположение: Пользователь щелкнул элемент AppointmentItem в представлении календаря // Таким образом, мы можем вычислить выбранное время начала из этого диапазона выбора //, а затем сравнить его со всеми исключениями в OccurrencePattern повторяющегося шаблона //, если мы обнаружим один AppointmentItem в исключениях, которые имеет тот же DateTime, то мы нашли правильный. // Outlook.Application application = new Outlook.Application (); Outlook.Explorer explorer = application.ActiveExplorer (); Папка Outlook.Folder = explorer.CurrentFolder как Outlook.Folder; Outlook.View view = explorer.CurrentView as Outlook.View;
// get the current calendar view
if (view.ViewType == Outlook.OlViewType.olCalendarView)
{
Outlook.CalendarView calView = view as Outlook.CalendarView;
Outlook.RecurrencePattern pattern = myAppointment.GetRecurrencePattern();
for (int i = 1; i <= pattern.Exceptions.Count; i++)
{
Outlook.Exception myException = pattern.Exceptions[i];
Outlook.AppointmentItem exceptionItem = myException.AppointmentItem;
DateTime itemDateStart = exceptionItem.Start;
if (itemDateStart == calView.SelectedStartTime)
{
updateMyPluginMeeting(exceptionItem);
return; // the use may only select on AppointmentItem so we can skip the rest
}
}
}
}
Если вы знаете какое-либо лучшее решение для этого, дайте мне знать.