Я новичок в обработке событий в VSTO.
Я сделал обширный онлайн-опрос, в том числе копал документацию Microsoft и пытался применить практичный, но старый пример из центра поддержки.
Проблема этого примера в том, что он не работает на экземпляре Excel.Application
, который вызывает ThisAddin
. Поэтому я попробовал один из своих:
- У меня есть приложение Excel 2010 VSTO, созданное в VS 2018.
- Я добавил новый файл
MyEvents.vb
, который содержит следующее:
.
Imports Microsoft.Office.Interop.Excel
Module MyEvents
WithEvents ThisApp As Excel.Application '= Globals.ThisAddIn.Application
Private Sub ThisApp_SheetBeforeDoubleClick(Sh As Object, Target As Range, ByRef Cancel As Boolean) Handles ThisApp.SheetBeforeDoubleClick
Dim FromSheet As Excel.Worksheet = Sh
System.Diagnostics.Debug.Print("Event triggered: ThisApp_SheetBeforeDoubleClick in {0} or {1}", FromSheet, Target.Worksheet.Name)
End Sub
Private Sub ThisApp_WorkbookActivate(Wb As Workbook) Handles ThisApp.WorkbookActivate
System.Diagnostics.Debug.Print("Event triggered: ThisApp_WorkbookActivate")
End Sub
End Module
Когда я компилирую, откройте новую книгу и попробуйте дважды щелкнуть или активировать другую книгу: ничего не происходит. Я, должно быть, упускаю что-то очевидное ... Мне кажется, что мне не хватает некоторых основ обработки событий через VSTO, и я был бы рад предложить дополнительное чтение по этому вопросу.
Например:
- Мне нужно
WithEvents ThisApp As Excel.Application =
Globals.ThisAddIn.Application
или просто WithEvents ThisApp As
Excel.Application
? то есть я могу привязать событие к определенному объекту (приложение, рабочая таблица и т. д.) или мне нужно проверить вызывающего в моем Sub
после запуска события и почему?
- Можно ли обрабатывать события VSTO из класса, или это должен быть модуль? Это может быть в
Module
в Namespace
? Связано ли это с Shared WithEvents ThisApp
?
- Что произойдет, если это не
Shared Class
? Будет ли он обрабатывать Sub
столько раз, сколько у меня есть экземпляров этого Class
?
Как можно видеть, я немного растерялся ... Я хотел сам провести все эти тесты, но я не в состоянии сделать что-то, что должно быть довольно простым ...!