码迷,mamicode.com
首页 > 其他好文 > 详细

VSTO学习之路:文档级项目的任务窗格

时间:2016-08-10 19:01:01      阅读:1239      评论:0      收藏:0      [点我收藏+]

标签:

引言:下图类似“剪帖画”的是几个Excel中的命令栏其中“文档操作”是可自由定制的,文档操作面板无法直接使用(不可见),在本图里可以看到,是因为我写代码在上面添加了一个TextBox控件。

技术分享

     命令栏是Commandbars集合成员,属于Commandbar类型。使用VBA写段代码罗列出所有的命令栏:

 1 Sub ShowCommandbar()
 2 Dim bars As Office.CommandBars
 3    Set bars = Application.CommandBars
 4 Dim bar As Office.CommandBar
 5 For Each bar In bars
 6     i = i + 1
 7     Cells(i, 1) = bar.Name           名称
 8     Cells(i, 2) = bar.NameLocal      本地化名称
 9     Cells(i, 3) = bar.Index          索引
10 Next
11 End Sub

      其中和上几个命令栏有对应关系的摘录如下。
技术分享

Task Pane是要定制的目标,无法直接给它添加我们想要的控件,但可以把控件添加在ActionsPane对象上。

关系示意图:

技术分享

这个关系模型意味着:要添加控件就要找ActionsPane,要控制这些元素整体在工作表上的位置就要依赖Task Pane。

没错,一定要记住Task Pane就是一个命令栏(Commanbar)。不过要给这个命令栏添加控件,就要借道ActionsPane。

1  public sealed partial class ThisWorkbook : Microsoft.Office.Tools.Excel.WorkbookBase {        
2         internal Microsoft.Office.Tools.ActionsPane ActionsPane;       
3         //省略部分代码
4         private void InitializeControls() {
5             this.ActionsPane = Globals.Factory.CreateActionsPane(null, null, "ActionsPane", "ActionsPane", this);
6         }
7         //省略部分代码
8 }

ActionsPane对象定义在ThisWorkbook.Designer.cs中,在Thisworkbook类里可以直接调用:

 1 using Office = Microsoft.Office.Core;
 2 
 3 private void ThisWorkbook_Startup(object sender, System.EventArgs e)
 4 {
 5      //给ActionsPane添加控件(添加控件后,任务窗格在工作簿打开时就会默认显示出来)
 6     TextBox box=new TextBox() ;
 7     ActionsPane.Controls.Add(box );
 8      //取消停靠
 9     box.Dock = DockStyle.None;
10      //设置锚定
11     box.Anchor = AnchorStyles.Top;
12      //文本框的宽度
13     box.Width = 100;
14      //设置Task Pane的显示位置
15     Office.CommandBar bar = Globals.ThisWorkbook.Application.CommandBars[125];
16     bar.Position = Office.MsoBarPosition.msoBarLeft;
17 }

     使用编程方式可以动态的给ActionsPane添加控件,但有时也需要使用设计好的图面,ActionsPane没有设计图面,此时可以借用ActionsPaneControl或者UserControl,其中后者还可以充当程序级项目操作窗格的设计器。

     右键点解决方案,添加用户控件:
技术分享

      UserContrl是控件容器,将控件拖动到设计图面上:

技术分享

  然后使用代码,将控件添加到ActionsPane即完成任务窗格的定制:

1  private void ThisWorkbook_Startup(object sender, System.EventArgs e)
2 {
3      //给ActionsPane添加控件
4     ActionsPane.Controls.Add(new UserControl1());
5      //添加控件后,可见性自动为true,下面一句是不需要的
6     //ActionsPane.Visible = true;
7 }

 工作簿启动后,在视图选项卡中可以找到“文档操作”按钮,控制其显示和隐藏(默认情况下工作簿该按钮不可见)。

 技术分享

最后要指出个人的理解(不确定是否正确):

      文档级任务窗格是"单例"的——即任何时候拿到的都是同一个任务窗格。即使可以动态的给它添加或减少控件,即使可以根据需要让窗格中控件可见或不可见。但这些所有操作的对象,都是同一个Task Pane,同一个Commandbar上的同一个ActionsPane。

       这一点和程序级Addin项目中的任务窗格是不同的。

 

         

VSTO学习之路:文档级项目的任务窗格

标签:

原文地址:http://www.cnblogs.com/zzstone/p/5752799.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!