В моей надстройке я создаю несколько областей задач, которые при необходимости скрываются / отображаются.
Если пользователь использует функцию, отображающую панель, код проверяет, существует ли панель, и еслиэто принадлежит текущему окну.Если ДА для обоих, отображается панель, если НЕТ для обоих, панель создается, добавляется в коллекцию CustomTaskPanes и отображается.
Если я открываю (с File / New)другое окно Excel (без закрытия первого) и окно должно показывать панель, код снова проверяет, существует ли соответствующая панель и является ли она собственной, если теперь панель создается и отображается.Все работает хорошо.Вот код, который проверяет, принадлежит ли панель текущему окну:
if (pane != null && pane.Window != null &&
((Microsoft.Office.Interop.Excel.Window)pane.Window).Hwnd
== Globals.ThisAddIn.Application.ActiveWindow.Hwnd)
{
return true;
}
else
{
return false;
}
Но в следующем сценарии происходит сбой приложения:
Открыть Excel, показатьПанель действий пользователя
В меню Файл / Открыть откройте документ Excel.Документ Excel открывается в старом окне, то есть другое окно не создается
Прежде чем я пытаюсь показать панель, я проверяю, существуют ли панели и принадлежат ли они текущему окну,как объяснено выше.
Проблема в том, что панель существует, но ее элемент управления, принадлежащий окну Excel ПЕРЕД открытием второго Excel, удаляется, и я получаю это исключение: "Панель задачбыл удален или больше не действителен. "
Один из способов исправить это - проверить, отменен ли контроль панели, и это решение работает нормально.
Но я хочу реализовать более общее решение, например, когда документ / окно открыто и старый документ / окно закрыто, я хочу удалить все панели, которые принадлежат старому документу / окну.Таким образом, у меня не будет существующих панелей, а не существующих, но с удаленными элементами управления.
Проблема в том, что нет события Workbook.Close () , в которомуничтожить эти стекла.Существует событие Workbook.BeforeClose , но оно не запускается, если я открываю существующий документ Excel.Поэтому мой вопрос: как я могу определить, когда окно Excel закрыто / уничтожено?