Сцепление с событием Send/Receive Sync Контактов Outlook

В C++ существует понятие списка инициализации конструктора, который является, где Вы можете и должны вызвать конструктора базового класса и где необходимо также инициализировать элементы данных. Список инициализации появляется после подписи конструктора после двоеточия, и перед телом конструктора. Скажем, у нас есть класс A:


class A : public B
{
public:
  A(int a, int b, int c);
private:
  int b_, c_;
};

Затем принимая B имеет конструктора, который берет интервал, конструктор A может быть похожим на это:


A::A(int a, int b, int c) 
  : B(a), b_(b), c_(c) // initialization list
{
  // do something
}

, Как Вы видите, конструктора базового класса вызывают в списке инициализации. Инициализация элементов данных в списке инициализации, между прочим, предпочтительна для присвоения значений для b _, и c_ в теле конструктора, потому что Вы сохраняете дополнительные расходы присвоения.

Имеют в виду, что элементы данных всегда инициализируются в порядке, в котором они объявляются в определении класса, независимо от их порядка в списке инициализации. Для предотвращения странных ошибок, которые могут возникнуть, если элементы данных зависят друг от друга, необходимо всегда удостоверяться, что порядок участников является тем же в списке инициализации и определении класса. По той же причине конструктор базового класса должен быть первым объектом в списке инициализации. Если Вы опустите его в целом, то конструктора по умолчанию для базового класса назовут автоматически. В этом случае, если базовый класс не будет иметь конструктора по умолчанию, Вы получите ошибку компилятора.

1
задан Jason Plank 21 November 2011 в 13:07
поделиться

3 ответа

Я пробовал

Application.ActiveExplorer().SyncObjects.AppFolders.SyncEnd += \\EventHandler

Это перехватывает для отправки / получения всех папок по умолчанию ..

2
ответ дан 3 September 2019 в 01:23
поделиться

На самом деле мои потребности были немного другими, но могут быть такими же: Я хотел получать уведомления об изменениях в папке (в моем случае о встречах) после отправки / получения. Моя первая мысль (и я думаю, что вы идете по тому же пути) заключалась в том, чтобы проверить событие отправки / получения и, возможно, получить из него какую-то коллекцию элементов или что-то подобное, но такой вещи нет. (как также объясняется в этом сообщении на форуме )

Мой второй путь пришел из следующей статьи : Я могу зарегистрироваться в Item_Add и Item_Change (и даже Item_Removed ) событие папки (которое также запускается изменениями, выполненными при приеме отправки):

Некоторый код:

// Get the folder calendar folder and subscribe to the events.
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
    Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderCalendar).Items.ItemAdd += new Microsoft.Office.Interop.Outlook.ItemsEvents_ItemAddEventHandler(Items_ItemAdd);
    Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderCalendar).Items.ItemChange += new Microsoft.Office.Interop.Outlook.ItemsEvents_ItemChangeEventHandler(Items_ItemChange);
}

// Do something with it.
void Items_ItemAdd(object Item)
{
    logItem(Item, "Add");
}
void logItem(object Item, string Action)
{

    Outlook.AppointmentItem item = Item as Outlook.AppointmentItem;

    File.AppendAllText(@"e:\log.txt", string.Format("Item {0}: {1}", Action, Item));

    if (item != null)
    {
        File.AppendAllText(@"e:\log.txt", " - Appointment: " + item.Subject);
    }
}
0
ответ дан 3 September 2019 в 01:23
поделиться

Вы можете подключить mail отправки / получения, а затем убедитесь, что тип почты - ContactItem. Вот пример события Send.

// hook up the event
this.Application.ItemSend += ThisApplication_SentMail;

затем в обработчике событий вы проверяете тип почтового элемента:

internal void ThisApplication_SentMail(object item, ref bool cancel)
{
    Outlook.ContactItem contactItem = item as Outlook.ContactItem;

    // mail message is not a ContactItem, so exit.
    if (contactItem == null) return;

    // do  whatever you need to here

 }
0
ответ дан 3 September 2019 в 01:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: