Необходимо удалить метод, добавленный в Folder.Items.ItemAdd EventHandler?

Я добавил настраиваемый метод в обработчик событий Folder.Items.ItemAdd во время события нажатия кнопки в элементе управления «Лента» сообщения электронной почты.

Теперь каждый раз, когда я нажимаю кнопку, элемент EventHandler добавляется снова и снова.

Таким образом, из-за этого пользовательский метод вызывает n количество раз для n нажатий кнопки.

Мне нужно проверить, добавлен ли уже настраиваемый метод в этот Folder.Items.ItemAdd EventHandler

Пожалуйста, помогите: @roopa, @Dmitry


person Spartan    schedule 06.02.2015    source источник


Ответы (2)


Я полагаю, что это распространенный вопрос программирования, не связанный с элементами управления Outlook или лентой.

Если вы используете C #:

Visual Basic .Net:

person Eugene Astafiev    schedule 06.02.2015
comment
Приятель: Я проверил ссылки. метод GetInvocationList решил бы мою проблему. и это недоступно ни для одного из объектов в Outlook. Но я не мог получить список событий, подписанный на Folder.Items.ItemAdd. поэтому из этого списка я могу проверить, попросил ли я обработчик запустить пользовательский метод для события ItemAdd @Eugene - person Spartan; 06.02.2015

Разве вы не храните объект Items в отдельной переменной? Убедитесь, что он уже установлен, и больше не устанавливайте обработчик событий.

person Dmitry Streblechenko    schedule 06.02.2015
comment
Евгений: C # 4.0 Дмитрий: как проверить, существует он уже или нет. Это мой приятель с болевой точкой. - person Spartan; 06.02.2015
comment
Вам действительно нужно показать соответствующие фрагменты вашего кода. Как / где вы храните объект, вызывающий события? - person Dmitry Streblechenko; 06.02.2015
comment
Класс Ribbon.cs {data i = new data (); RibbonButton_Click () {sentItemsFolder.items.itemsAdd + = новый ItemADD_EventHandler (Items_ItemAdd); Mail.send (); } void Items_ItemAdd (объектный элемент) {WindowsForm w = new WindowsForm (); w.popup (я); // это передаст сведения о классе данных в форму и отобразит форму. }} Эта кнопка будет появляться во всех сообщениях электронной почты (в режиме создания). Итак, каждый раз, когда я нажимаю кнопку ленты. это событие снова добавляется. Итак, этот метод Items_ItemAdd вызывается n раз для n нажатий кнопки ленты. - person Spartan; 09.02.2015
comment
sentItemsFolder.items.itemsAdd не будет работать - вы используете многоточечную нотацию, поэтому объект, который вызывает события (sentItemsFolder.items), сохраняется во временной неявной переменной. Как только эта переменная будет обработана сборщиком мусора, события не возникнут. Сохраните объект Items в отдельной переменной (или в списке). Дополнительным преимуществом является то, что Items.Parent вернет родительскую папку, поэтому вы можете легко отслеживать, отслеживается ли конкретная папка вашим кодом. - person Dmitry Streblechenko; 09.02.2015