在VSTO MS Word外接程序中,在一个文档中单击Ribbon切换按钮会导致在其他正在运行的MS Word实例中单击
本文关键字:MS 单击 Word 按钮 实例 其他 运行 一个 程序 VSTO 文档 | 更新日期: 2023-09-27 18:17:08
我开发了一个MS Word插件,它在功能区菜单中有几个按钮。第一个按钮是Toggle按钮,单击它会加载一个任务窗格。我遇到的问题是,如果我打开了多个MS Word实例,并在其中一个实例中单击此切换按钮,则在其他运行的MS Word实例中也会自动显示单击此切换按钮,但任务窗格似乎只在我单击切换按钮的实例中加载。我希望切换按钮在MS Word的每个实例中独立工作。我已经尝试了几种方法,但还没有找到解决方案。我在为MS PowerPoint开发的另一个插件中也遇到过同样的问题。
对此事的任何帮助都将不胜感激。
我有一个ribbon设计器(名为rbcOfficeAddin)添加到我的插件项目,它有一个名为btnTaskPane的切换按钮。下面是代码:
public partial class rbcOfficeAddin
{
private void btnTaskPane_Click(object sender, RibbonControlEventArgs e)
{
if (this.btnTaskPane.Checked)
{ this.btnTaskPane.Label = "Hide Task Pane"; }
else { this.btnTaskPane.Label = "Show Hide Pane"; }
Globals.ThisAddIn.ShowHideActionPane(this.btnTaskPane.Checked);
}
}
切换按钮的点击处理程序调用ThisAddin的一个方法,如下所示:
public partial class ThisAddIn
{
private bool operationsPaneCreated = false;
public void ShowHideActionPane(bool flag)
{
try
{
if (!this.operationsPaneCreated)
{
this.CreateTaskPane();
this.operationsPaneCreated = true;
}
myCustomTaskPane.Visible = flag;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void CreateTaskPane()
{
//OperationsPane is a user control
oOperationsPane = new OperationsPane();
myCustomTaskPane = this.CustomTaskPanes.Add(oOperationsPane,
"Operations Pane");
myCustomTaskPane.DockPosition =
Office.MsoCTPDockPosition.msoCTPDockPositionFloating;
myCustomTaskPane.Height = 500;
myCustomTaskPane.Width = oOperationsPane.Width;
myCustomTaskPane.DockPosition =
Office.MsoCTPDockPosition.msoCTPDockPositionRight;
myCustomTaskPane.Width = 420;
myCustomTaskPane.Control.AutoScroll = true;
myCustomTaskPane.Visible = false;
myCustomTaskPane.VisibleChanged += myCustomTaskPane_VisibleChanged;
}
void myCustomTaskPane_VisibleChanged(object sender, EventArgs e)
{
try
{
if (!myCustomTaskPane.Visible && Globals.Ribbons.rbcOfficeAddin.btnTaskPane.Checked)
{
Globals.Ribbons.rbcOfficeAddin.btnTaskPane.Checked = false;
Globals.Ribbons.rbcOfficeAddin.btnTaskPane.Label = "Show Task Pane";
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
同样的问题在MSDN论坛上被问到并回答。我在这里复制/粘贴了相关信息,并注明了出处https://social.msdn.microsoft.com/forums/vstudio/en us/1c3cab02 b231 - 4453 ae09 - 325 - e025606bf/in - - vsto女士字-外接程序-带-切换按钮——点击——————文件——原因————————点击——in?forum=vsto
微软特遣队人员陈星诚的回答,主持人:
据我所知,这是为具有多个实例而设计的Word文档中,相同的外接程序将位于一个域中,例如a变量的更改将影响其他word文档,如果它们在相同的实例。所以,你需要处理这种情况。(如基地(文件名称)
MVP,主持人Cindy Meister的回答:
下面的文章解释了这种方法。它对Ribbon是有效的自定义以及自定义任务窗格
https://msdn.microsoft.com/en-us/library/vstudio/bb608620