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

在VSTO MS Word外接程序中,在一个文档中单击Ribbon切换按钮会导致在其他正在运行的MS Word实例中单击

同样的问题在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