C# 在VSTO MS Word加载项中,在一个文档中单击的功能区切换按钮会导致在其他运行的MS Word实例中单击该按钮

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开发的另一个加载项中体验到了相同的行为 在此问题上的任何帮助都将不胜感

我开发了一个MS Word插件,它在功能区菜单中有几个按钮。第一个按钮是切换按钮,单击它将导致加载任务窗格。我遇到的问题是,如果我打开了多个MS Word实例,并且在其中一个实例中单击了此切换按钮,则在其他正在运行的MS Word实例中也会自动显示为单击,但任务窗格似乎仅在我单击切换按钮的实例中加载。我希望切换按钮在MS Word的每个实例中都能独立工作。我尝试过几种方法,但还没有找到解决办法。我在为MS PowerPoint开发的另一个加载项中体验到了相同的行为

在此问题上的任何帮助都将不胜感激

我的外接程序项目中添加了一个功能区设计器(名为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);
                }
            }
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有效 自定义设置以及自定义任务窗格


如果看不到您的代码或不知道文档如何填充实例(新文档、打开的文档、其他流程),则很难诊断。不过,我建议您阅读以下内容:谢谢,问题中添加了代码