Я создаю VSTO для своей компании и столкнулся с интересной проблемой, с которой я мог бы помочь. Я постараюсь объяснить это в меру своих возможностей. У меня прямо сейчас настроен AddIn для создания 2 customTaskPanes при запуске через события Application.AfterNewPresentation. И возможность скрывать / показывать их на основе пользовательского ввода с помощью кнопок-переключателей на ленте.
Теперь, когда я запускаю первый PowerPoint 2010 под названием «Presentation1», все работает отлично, я могу показать / скрыть панели задач, и все вставляется так, как должно. Теперь я открываю второй шаблон под названием «Presentation2» (чтобы помочь в этом разобраться). Все снова отлично работает, я могу показать / скрыть панели задач, и все вставляется нормально. Если я возвращаюсь к «Presentation1», вставки и все работает нормально, но когда мне нужно скрыть / показать панели задач, он скрывает / показывает их на «Presentation2». И если я создаю «Presentation3», происходит то же самое, но и «Presentation1», и «Presentation2» управляют панелями задач Presentation3. И если я закрою «Presentation2» и «Presentation3», кнопки «Presentation1» вообще ничего не показывают / не скрывают.
Код в ThisAddIn
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
Application.AfterNewPresentation += new PowerPoint.EApplication_AfterNewPresentationEventHandler(Application_AfterNewPresentation);
}
private void Application_AfterNewPresentation(PowerPoint.Presentation Pres)
{
PowerPoint.Application app = Pres.Application;
PowerPoint.DocumentWindow docWin = null;
foreach (PowerPoint.DocumentWindow win in Globals.ThisAddIn.Application.Windows)
{
if (win.Presentation.Name == app.ActivePresentation.Name)
{
docWin = win;
}
}
this.myWebForm = new SearchWebForm();
this.myWebFormTaskPane = this.CustomTaskPanes.Add(myWebForm, "Search ",docWin);
this.myWebFormTaskPane.DockPosition = Office.MsoCTPDockPosition.msoCTPDockPositionRight;
this.myWebFormTaskPane.Width = 345;
this.myWebFormTaskPane.VisibleChanged += new EventHandler(WebFormTaskPane_VisibleChanged);
}
private void WebFormTaskPane_VisibleChanged(object sender, System.EventArgs e)
{
Globals.Ribbons.Ribbon1.searchButton.Checked = myWebFormTaskPane.Visible;
if (Globals.Ribbons.Ribbon1.searchButton.Checked == true)
{
myWebForm.SearchForm_Navigate();
}
}
А потом это на ленте
private void searchButton_Click(object sender, RibbonControlEventArgs e)
{
Globals.ThisAddIn.WebFormTaskPane.Visible = ((RibbonToggleButton)sender).Checked;
}