Здравствуйте!
При инициализации моего приложения выполняется проверка кнопок ленты и, при необходимости, им изменяются состояния (вкл-откл). Для этого, при загрузке приложения выполняется код:
internal static void AddActivateTabsHandlers()
{
RibbonControl ribbon = ComponentManager.Ribbon;
if (ribbon == null)
{
// Application.ShowAlertDialog("Лента отключена!");
return;
}
IEnumerable<RibbonTab> tabs = ribbon.Tabs.Where(item =>
!m_initsTabs.Contains(item)
&& item.IsVisible
&& !item.IsContextualTab
&& !item.IsActive);
foreach (RibbonTab tab in tabs)
{
tab.Activated += tab_Activated;
m_initsTabs.Add(tab);
}
}
Проверку включенности ленты (строки 5-9) пришлось добавить только что, т.к. если лента отключена, то в строке 3 переменной ribbon присваивается значение NULL и вылетает исключение:
System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.
в My.Civil.Networks.RibbonSettings.AddActivateTabsHandlers()
в My.Civil.Networks.AssemblyLoad.InitializeCommand()
и т.д.
Причем, что самое обидное, исключение вылетает только при автозагрузке приложения, то есть, только в релизной версии. Когда я выполняю отладку, загружая приложение через NETLOAD, исключения не возникает.
Ну да ладно, не беда, добавил проверку - исключение теперь не появляется. Но этот код вызывается только один раз при загрузке приложения. Т.е., если потом включить ленту, то обработка ее кнопок уже не произойдет. Как бы так покорректнее отловить событие включения ленты, чтобы вызывать этот метод?
Пока что на ум приходит только отлов команды включения ленты. Но, т.к. командным реакторам я не сильно доверяю, хочу оставить это на крайний случай, если не найдется более надежного. Может кто уже сталкивался с этим?