我在 Excel 2013 中添加了一个 CustomTaskPane,让用户可以快速搜索照片。如果用户只打开/创建一个工作簿,它工作得很好。问题是如果他们打开另一个工作簿或创建一个新工作簿,任务窗格不会出现在出现的新窗口中。它只是停留在原始窗口中。我知道这种行为是由于我只是在打开 Excel 时才初始化面板。我在 ActiveWindow 事件中添加了一个事件处理程序,以便在他们打开另一个工作簿时初始化一个新面板。
问题是我无法弄清楚如何判断 CustomTaskPane 是否已经存在于窗口中。如果是,则简单地创建另一个 CustomTaskPane,因此该窗口中现在有两个。我编写了以下代码来处理原始代码并创建一个新代码,但它引入了一些延迟(1-5 秒),每次更改工作簿窗口时都会让用户发疯。有没有办法查看窗口中是否已经存在 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);
}
}