我正在为Microsoft PowerPoint 2010开发自定义任务窗格。我需要在多个应用程序窗口/演示文稿之间同步任务窗格。使用功能区上的切换按钮显示任务窗格。
由于PowerPoint 2010在不同的文档窗口中显示每个演示文稿(与2007不同),因此我需要为每个窗口单独创建一个任务窗格并同步它们。我已经关注了如何为多个应用程序窗口创建任务窗格的Microsoft tutorial,并且我使用CustomTaskPaneCollection.Add(UserControl, String, Object)
方法来指定任务窗格应该与哪个应用程序窗口关联。在这种情况下,Object
是任务窗格应与之关联的PowerPoint.DocumentWindow
。
出于某种原因,我的所有任务窗格都是在活动窗口中创建的,而不是我指定的窗口。例如,如果我打开3个PowerPoint演示文稿然后切换任务窗格,则所有三个任务窗格都将添加到活动窗口中。
这是我在按下切换按钮时用来添加任务窗格的代码:
public void AddAllTaskPanes()
{
PowerPoint.DocumentWindows windows = Globals.ThisAddIn.Application.Windows;
if(windows.Count > 0)
{
for (int i=1; i<=windows.Count; i++){
PowerPoint.DocumentWindow window = windows[i];
customTaskPane = this.CustomTaskPanes.Add(new UserControl1(), "My User Control", window);
customTaskPane.Visible = true;
}
}
}
这似乎应该成功地将每个任务窗格添加到其指定的window
,并且我无法弄清楚为什么所有任务窗格都与活动窗口相关联。我已经对这个问题进行了大量研究,但未能找到解决方案。我找到的最接近的是this question,但答案对应于PowerPoint 2007,而不是像问题引用那样的2010。
任何有关PowerPoint可能以这种方式表现的原因的任何见解都将非常感激。
答案 0 :(得分:-1)
我从PresentationAfterOpen和PresentationAfterNew事件创建了TaskPanes,产生了相同的行为。
关于PresentationAfterOpen事件的注释,如果用户选择的文档已经打开,则事件仍然会被触发,因此您需要在创建新文档之前检查是否已为该文档创建了CustomTaskPane。
解决此问题的一种方法是在CustomPane中创建指向关联DocumentWindow的指针,并通过CustomTaskPaneCollection检查相关联的一个。