C# Excel VSTO加载项显示/隐藏任务窗格

C# Excel VSTO加载项显示/隐藏任务窗格,c#,excel,vsto,C#,Excel,Vsto,我在这里做教程。在空白的excel页面上一切正常 当我加载某人给我的excel工作表时,点击切换按钮1以显示我得到的窗格 {“任务窗格已被删除或不再有效。”} 在线 private void toggleButton1_Click(object sender, RibbonControlEventArgs e) { Globals.ThisAddIn.TaskPane.Visible = ((RibbonToggleButton)sender).Checked;

我在这里做教程。在空白的excel页面上一切正常

当我加载某人给我的excel工作表时,点击切换按钮1以显示我得到的窗格

{“任务窗格已被删除或不再有效。”}

在线

   private void toggleButton1_Click(object sender, RibbonControlEventArgs e)
    {
        Globals.ThisAddIn.TaskPane.Visible = ((RibbonToggleButton)sender).Checked;
    }
指向该任务窗格的指针不知怎么消失了吗

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);
        }
    }
尝试2:

所以现在Ribbon类可以获得TaskPane,但我仍然得到相同的错误。补充如下:

  private CustomTaskPane taskPane;
    public CustomTaskPane TaskPane
    {
        get
        {
            //return (customTaskPanes.Where(kvp => kvp.Key.Target == wb).Select(kvp => kvp.Value).FirstOrDefault());
              return pane;
        }
        set
        {
            taskPane = value;
        }
    }


Excel 2016是一个单文档界面(SDI),Excel单个实例中的每个工作簿都包含自己的功能区UI

如果打开新工作簿,将显示新功能区,但指向任务窗格的指针将丢失。您应该实现WorkbookActivate事件,并在没有任务窗格的情况下添加新的任务窗格。您还应该保留指向自定义任务窗格的指针的静态列表


查看此解决方案:

您也可以通过检查taskpane控件的
IsDisposed
属性来解决此问题,例如

if (taskPane.CustomTaskPane?.Control.IsDisposed == false)
{
    taskPane.CustomTaskPane.Visible = false;
}

你们有什么版本的Excel?这是2016年。虽然一个在2013年的人使用了它并且有同样的问题。我有一个棘手的解决办法,将数据粘贴到空白的excel工作表中,但这并不好。。。在互联网上,关于这个主题(C#Excel应用程序plguins)的任何帮助都非常少。所以理论上,这个错误不应该发生在Excel 2013中?(我将在今天安装它以试用)@punkouter否由于Excel 2013也是SDI,您将遇到同样的问题-请参阅链接“更多信息”。我认为我的问题与Globals.ThisAddIn.TaskPane.Visible=((RibbonToggleButton)sender)行有关。选中;当我引用该任务窗格时,我需要引用查找窗格并创建新窗格(如果该窗格不存在)的代码。。但那是另一种情况我把它修好了。。我在代码中错误地使用了两个自定义窗格,这让人很困惑
  TaskPane = (customTaskPanes.Where(kvp => kvp.Key.Target == wb).Select(kvp => kvp.Value).FirstOrDefault());
if (taskPane.CustomTaskPane?.Control.IsDisposed == false)
{
    taskPane.CustomTaskPane.Visible = false;
}