Я понял это.Тобриен, я использовал ваш последний комментарий как средство, чтобы прийти к такому выводу, особенно когда вы сказали:
возможно, что вы фактически создаете ДОПОЛНИТЕЛЬНЫЕ (идентично подписанные) обратные вызовы
Код, который я использую для добавления обработчика:
AddHandler thisButton.Click, AddressOf OnContextClick
Как это может быть идентично подписано?Ну, есть только один OnContextClick sub ... так что насчёт thisButton ?
For Each value As ActivityType.Request In [Enum].GetValues(GetType(ActivityType.Request))
Dim btnActionItem As Office.CommandBarControl = puRequest.Controls.Add(Type:=Office.MsoControlType.msoControlButton)
With btnActionItem
.Tag = puRequest.Tag & "|" & value
.Caption = [Enum].GetName(GetType(ActivityType.Request), value)
.Visible = True
End With
Dim thisButton As Office.CommandBarButton = btnActionItem
AddHandler thisButton.Click, AddressOf OnContextClick
Next
Этот код запускается при возникновении OnUpdate, который, как вы знаете,случается ВСЕ время.Поэтому, по сути, каждый раз, когда срабатывает OnUpdate, я добавляю дополнительный обработчик для КНОПКИ EXACT SAME, не считая того, что кнопка в основном создается заново каждый раз, когда происходит OnUpdate, и что ее обработчик сохраняется в памяти.
Итак, мне нужно было сделать элемент управления кнопки уникальным:
.Tag = puRequest.Tag & "|" & value & "|" & Now.ToBinary().ToString()
Я просто добавил Now.ToBinary (). ToString () в конце свойства .Tag, чтобы гарантировать, что каждый раз кнопка будетсозданный для пользователя, он имеет уникальный тег.Теперь события уникальны, и их срабатывает только один раз за клик.
Тобриен, я разрешаю вам!Хотя в конечном итоге я ответил на свой вопрос, это было не без вашего руководства.Спасибо!