C# 管理多個工作簿的任務窗格
CustomTaskPanes.Add方法,它自動把任務窗格添加到當前的工作簿上去了。怎樣才能將工作簿對象和任務窗格關聯起來?
方法是:
ThisAddIn.cs中創建一個字典管理任務窗格
private Dictionary<string, CustomTaskPane> _createdPanes = new Dictionary<string, CustomTaskPane>();
/// <summary>
/// 按名稱獲取任務窗格(如果當前excel窗口存在,則返回現有實例,否則使用taskPaneCreatorFunc創建一個)。
/// </summary>
/// <param name="taskPaneId">一個唯一字符串來標識任務窗格</param>
/// <param name="taskPaneTitle">任務窗格的標題</param>
/// <param name="taskPaneWidth">任務窗格的寬度</param>
/// <param name="taskPaneDockPosition">任務窗格的停靠位置</param>
/// <param name="taskPaneCreatorFunc">構造任務窗格的函數。</param>
public CustomTaskPane GetTaskPane(
string taskPaneId,
string taskPaneTitle,
int taskPaneWidth,
Office.MsoCTPDockPosition taskPaneDockPosition,
Func<UserControl> 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[key] = taskPane;
}
return _createdPanes[key];
}
在Ribbon1.cs中設置一個按鈕 調用 并顯示或隱藏
private void button1_Click(object sender, RibbonControlEventArgs e)
{
//Globals.ThisAddIn.myPane.Visible = ! Globals.ThisAddIn.myPane.Visible;
{
//調用自定義任務窗格方法來獲取或創建任務窗格
var taskpane = Globals.ThisAddIn.GetTaskPane(
"A",
"設置",
200,
Office.MsoCTPDockPosition.msoCTPDockPositionLeft,
() => new UserControl1()
);
taskpane.Visible = !taskpane.Visible;
}
}
浙公網安備 33010602011771號