吉祥小樱 發表於 2025-3-30 08:31:00

C# 管理多个工作簿的任务窗格

<p>CustomTaskPanes.Add方法,它自动把任务窗格添加到<strong>当前的工作簿</strong>上去了。怎样才能将工作簿对象和任务窗格关联起来?<br>
方法是:<br>
ThisAddIn.cs中创建一个字典管理任务窗格</p>
<p>private Dictionary&lt;string, CustomTaskPane&gt; _createdPanes = new Dictionary&lt;string, CustomTaskPane&gt;();</p>
<pre><code>    /// &lt;summary&gt;
    /// 按名称获取任务窗格(如果当前excel窗口存在,则返回现有实例,否则使用taskPaneCreatorFunc创建一个)。
    /// &lt;/summary&gt;
    /// &lt;param name="taskPaneId"&gt;一个唯一字符串来标识任务窗格&lt;/param&gt;
    /// &lt;param name="taskPaneTitle"&gt;任务窗格的标题&lt;/param&gt;
    /// &lt;param name="taskPaneWidth"&gt;任务窗格的宽度&lt;/param&gt;
    /// &lt;param name="taskPaneDockPosition"&gt;任务窗格的停靠位置&lt;/param&gt;
    /// &lt;param name="taskPaneCreatorFunc"&gt;构造任务窗格的函数。&lt;/param&gt;
    public CustomTaskPane GetTaskPane(
               string taskPaneId,
               string taskPaneTitle,
               int taskPaneWidth,
               Office.MsoCTPDockPosition taskPaneDockPosition,
               Func&lt;UserControl&gt; taskPaneCreatorFunc
         )
    {
      //string key = string.Format("{0}({1})", taskPaneId, Globals.ThisAddIn.Application.Hwnd);
      string key = $"{taskPaneId}({Globals.ThisAddIn.Application.Hwnd})";

      if (!_createdPanes.ContainsKey(key))
      {
            // 忽略第三个参数,默认在当前窗口新建一个任务窗格
            var taskPane = Globals.ThisAddIn.CustomTaskPanes.Add(taskPaneCreatorFunc(), taskPaneTitle);
            taskPane.Width = taskPaneWidth;
            taskPane.DockPosition = taskPaneDockPosition;
            _createdPanes = taskPane;
      }
      return _createdPanes;
    }
</code></pre>
<p>在Ribbon1.cs中设置一个按钮 调用 并显示或隐藏<br>
private void button1_Click(object sender, RibbonControlEventArgs e)<br>
{<br>
//Globals.ThisAddIn.myPane.Visible = ! Globals.ThisAddIn.myPane.Visible;<br>
{<br>
//调用自定义任务窗格方法来获取或创建任务窗格<br>
var taskpane = Globals.ThisAddIn.GetTaskPane(<br>
"A",<br>
"设置",<br>
200,<br>
Office.MsoCTPDockPosition.msoCTPDockPositionLeft,<br>
() =&gt; new UserControl1()<br>
);<br>
taskpane.Visible = !taskpane.Visible;<br>
}</p>
<pre><code>    }
</code></pre><br><br>
来源:https://www.cnblogs.com/WxxYdl/p/18800279
頁: [1]
查看完整版本: C# 管理多个工作簿的任务窗格