C# 在VSTO MS Word加载项中,在一个文档中单击的功能区切换按钮会导致在其他运行的MS Word实例中单击该按钮
我开发了一个MS Word插件,它在功能区菜单中有几个按钮。第一个按钮是切换按钮,单击它将导致加载任务窗格。我遇到的问题是,如果我打开了多个MS Word实例,并且在其中一个实例中单击了此切换按钮,则在其他正在运行的MS Word实例中也会自动显示为单击,但任务窗格似乎仅在我单击切换按钮的实例中加载。我希望切换按钮在MS Word的每个实例中都能独立工作。我尝试过几种方法,但还没有找到解决办法。我在为MS PowerPoint开发的另一个加载项中体验到了相同的行为 在此问题上的任何帮助都将不胜感激 我的外接程序项目中添加了一个功能区设计器(名为rbcOfficeAddin),它有一个名为btnTaskPane的切换按钮。代码如下:C# 在VSTO MS Word加载项中,在一个文档中单击的功能区切换按钮会导致在其他运行的MS Word实例中单击该按钮,c#,vsto,ms-office,add-in,C#,Vsto,Ms Office,Add In,我开发了一个MS Word插件,它在功能区菜单中有几个按钮。第一个按钮是切换按钮,单击它将导致加载任务窗格。我遇到的问题是,如果我打开了多个MS Word实例,并且在其中一个实例中单击了此切换按钮,则在其他正在运行的MS Word实例中也会自动显示为单击,但任务窗格似乎仅在我单击切换按钮的实例中加载。我希望切换按钮在MS Word的每个实例中都能独立工作。我尝试过几种方法,但还没有找到解决办法。我在为MS PowerPoint开发的另一个加载项中体验到了相同的行为 在此问题上的任何帮助都将不胜感
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);
}
}
toggle按钮的单击处理程序调用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论坛上也提出并回答了同样的问题。我在这里复制/粘贴相关信息,带有属性,来自 来自Starain chen Microsoft特遣队工作人员、主持人的回答: 据我所知,这是设计的,例如有多个 word文档中,相同的加载项将位于域中,例如 变量的更改将影响其他word文档(如果它们处于 同样的例子。因此,您需要处理这种情况。(如底座) 关于文件名) 主持人、MVP Cindy Meister的回答: 下面的文章解释了这种方法。它对Ribbon有效 自定义设置以及自定义任务窗格
如果看不到您的代码或不知道文档如何填充实例(新文档、打开的文档、其他流程),则很难诊断。不过,我建议您阅读以下内容:谢谢,问题中添加了代码