当前位置:  开发笔记 > 编程语言 > 正文

Excel VSTO Addin显示/隐藏任务窗格

如何解决《ExcelVSTOAddin显示/隐藏任务窗格》经验,为你挑选了1个好方法。

我在这里做教程.使用空白的Excel页面,一切正常

https://msdn.microsoft.com/en-us/library/bb608590(v=vs.120).aspx

当我加载excel表时,有人给了我,然后单击toggleButton1来显示我得到的窗格

{"任务窗格已被删除或不再有效."}

在线上

   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);
        }
    }

    /// 
    /// Start up the part photo viewer task pane
    /// 
    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);
        }
    }

ATTEMPT 1:

点击事件仍然出错.我猜这是需要在课程之间共享该窗格的相关内容吗?

private void toggleButton1_Click(object sender, RibbonControlEventArgs e)
    {
        Globals.ThisAddIn.TaskPane.Visible = ((RibbonToggleButton)sender).Checked;
    }


  private void ExcelEvents_WorkbookActivate(Excel.Workbook wb)
    {
        var taskPane = (customTaskPanes.Where(kvp => kvp.Key.Target == wb).Select(kvp => kvp.Value).FirstOrDefault());

        if (taskPane == null)
        {
            UcCenlarInvest control = new UcCenlarInvest();
            taskPane = this.CustomTaskPanes.Add(control, "My pane for workbook " + wb.Name);
            customTaskPanes[new WeakReference(wb)] = taskPane;
        }
    }

ATTEMPT 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;
        }
    }

.....

  TaskPane = (customTaskPanes.Where(kvp => kvp.Key.Target == wb).Select(kvp => kvp.Value).FirstOrDefault());

Malick.. 5

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

如果您打开一个新工作簿,则会出现一个新功能区,但是指向该任务窗格的指针将丢失.如果没有任何任务窗格,则应实现WorkbookActivate事件并添加新任务窗格.您还应该保留指向自定义任务窗格的指针的静态列表.

请参阅此解决方案:Excel中的CustomTaskPane不会出现在新工作簿中



1> Malick..:

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

如果您打开一个新工作簿,则会出现一个新功能区,但是指向该任务窗格的指针将丢失.如果没有任何任务窗格,则应实现WorkbookActivate事件并添加新任务窗格.您还应该保留指向自定义任务窗格的指针的静态列表.

请参阅此解决方案:Excel中的CustomTaskPane不会出现在新工作簿中

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有