Excel VSTO Addin显示/隐藏任务窗格 [英] Excel VSTO Addin showing/hiding taskpane
本文介绍了Excel VSTO Addin显示/隐藏任务窗格的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
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);
}
}
///< summary>
///启动零件照片查看器任务窗格
///< / summary>
private void InitalizePartPhotoViewerTaskPane(ExcelPartPhotoFunction _EPPF)
{
//初始化零件搜索
try
{
PartPhotoTaskPane = Globals.ThisAddIn.CustomTaskPanes.Add新的PartPhotoSearchPane(_EPPF),Part Information,Globals.ThisAddIn.Application.ActiveWindow);
PartPhotoTaskPane.Visible = Properties.Settings.Default.InfoPaneOpenStatus;
PartPhotoTaskPane.Width = 260;
}
catch(异常e)
{
MessageBox.Show(启动零件信息工具栏时出错)+ 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(控件,我的工作簿窗格+ 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());
返回窗格;
}
set
{
taskPane = value;
}
}
.....
TaskPane =(customTaskPanes.Where(kvp => kvp.Key.Target == wb).Select(kvp => kvp.Value)。 FirstOrDefault());
解决方案
Excel 2016是一个单一的文档界面(SDI)单个Excel实例中的每个工作簿都包含自己的功能区UI。