我已经将一个CustomTaskPane添加到Excel 2013中,让用户可以快速搜索照片。如果用户只打开/创建一个工作簿,它能够正常地工作。问题是,如果他们打开另一个工作簿或创建一个新的工作簿,该任务窗格不会出现在新窗口中。它仍然停留在原始窗口中。我知道这种行为是由于我只在打开Excel时初始化了面板。我添加了一个事件处理程序到ActiveWindow事件,以在打开另一个工作簿时初始化一个新面板。
问题是,我无法判断CustomTaskPane是否已经存在于窗口中。如果存在,则会简单地创建另一个CustomTaskPane,因此该窗口中现在有两个CustomTaskPane。我编写了以下代码来处理原始内容并创建一个新的,但它会导致一些延迟(1-5秒),这会使用户每次更改工作簿窗口时都感到非常烦恼。有没有一种方法可以查看窗口中是否已经存在CustomTaskPane,以避免处理和重新创建新的CustomTaskPane以避免重复任务窗格的堆叠?
Microsoft.Office.Tools.CustomTaskPane PartPhotoTaskPane;
Globals.ThisAddIn.Application.WindowActivate += Application_WindowActivate;
void Application_WindowActivate(Excel.Workbook Wb, Excel.Window Wn)
{
if (PartPhotoTaskPane != null)
{
PartPhotoTaskPane.Dispose();
InitalizePartPhotoViewerTaskPane(EPPF);
}
else
{
InitalizePartPhotoViewerTaskPane(EPPF);
}
}
/// <summary>
/// Start up the part photo viewer task pane
/// </summary>
private void InitalizePartPhotoViewerTaskPane(ExcelPartPhotoFunctions _EPPF)
{
//intialize the part search
try
{
PartPhotoTaskPane = Globals.ThisAddIn.CustomTaskPanes.Add(new PartPhotoSearchPane(_EPPF), "Part Information", Globals.ThisAddIn.Application.ActiveWindow);
PartPhotoTaskPane.Visible = Properties.Settings.Default.InfoPaneOpenStatus;
PartPhotoTaskPane.Width = 260;
}
catch (Exception e)
{
MessageBox.Show("Error starting Part Info Toolbar:" + Environment.NewLine +
e.Message + Environment.NewLine + e.StackTrace, "Error!", MessageBoxButtons.OK,
MessageBoxIcon.Error);
}
}