你所不知道的CommandBar

Office能够让你写插件。2003系列虽然已经远去,其CommandBar也被2007的Ribbon给替代。但是,你未必就完全了解了这个存在多年看似简单,实则狗屎的CommandBar。

我们翻开手册(其实没有什么手册,在2007之前,office是没有提供给VBA程序员之外的文档的),发现Application对象上有一个CommandBars属性。我们可以调用其Add方法给它添加一个CommandBar。


application.CommandBars.Add("Spike", MsoBarPosition.msoBarTop, false, true);


问题:
我要是第二次启动是不是会创建第二Spike Command Bar,第三次就有三个了?

我们在word中,把command bar显示出来,然后拖拽到底部。

问题:
再次启动word,这个command bar是在顶部还是在底部?

然后我们把我们的插件卸载了。重新启动word 2003。

问题:
Spike Command Bar 还在那里吗?

我们继续翻开手册,发现给command bar添加一个Label也不是什么很难的事情。很简单嘛,一行搞定。


commandBar.Controls.Add(MsoControlType.msoControlLabel, Type.Missing, Type.Missing, Type.Missing, true);


我kao,真TMD的天才。我连Type.Missing都知道用诶。

问题:
这行有错嘛?错误在哪里?

如果要添加的是一个按钮并响应点击事件呢?也很简单,两行搞定


CommandBarButton button = (CommandBarButton) commandBar.Controls.Add(MsoControlType.msoControlButton, Type.Missing, Type.Missing, Type.Missing, true);
button.Click += delegate { MessageBox.Show("Hello!"); };


我要是刚学C#,我都为我自己骄傲。看看,我不但知道它返回的类型是CommandBarButton,还会华丽的delegate语法。

问题:
这行能运行吗?运行起来啥效果?

问题:
第二次启动word,是有一个button还是两个button。


恩,既然自己加一个button能响应点击事件。而且它还有一个参数叫Cancel Default呢。老板正好叫我把Cut按钮给禁用了。简单,找到Cut按钮,响应Click事件,Cancel Default。


CommandBarButton cutButton = (CommandBarButton)application.CommandBars.FindControl(Type.Missing, CUT_BUTTON_CONTROL_ID, Type.Missing, Type.Missing);
cutButton.Click += delegate(CommandBarButton ctrl, ref bool cancelDefault) { cancelDefault = true; };


居然连FindControl都会用,太神奇了。

问题:
这行能用吗?运行起来啥效果?

button还有一个state状态。我一行就能toggle它了:


button.State = button.State == MsoButtonState.msoButtonDown
? MsoButtonState.msoButtonUp
: MsoButtonState.msoButtonDown;


You are the genius!~~~

问题:
我打开了两篇文档,两篇文档对应窗口上的button状态是和文档想关联的。也就是互相状态独立。能做到吗?如果不能,要怎么做?

终结者QA

一天下午,我们PM走过来,创建了一个word的快捷方式在桌面上。把word窗口缩放到一个合适的位置。关闭所有的word实例。然后只见他快速地,迅雷不及掩耳的,说时迟那是快的,三击了word的快捷方式:

问题:
请问有几个word进程

问题:
我的状态独立版的command bar还在那吗?为什么?
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Sub CreateBookMarkMenu() Dim bkBookmark As Bookmark Dim cbrBar As CommandBar Dim cbrPopup As CommandBarPopup Dim cbrButton As CommandBarButton Dim ShowHiddenStatus As Boolean '查看隐藏书签是否设置为“可见”, '将此设置存储在一个变量中,以便在结尾返回。 '然后使隐藏的书签不可见 '(不希望交叉引用等出现在菜单中) ShowHiddenStatus = ActiveDocument.Bookmarks.ShowHiddenActiveDocument.Bookmarks.ShowHidden = False Set cbrBar = CommandBars.ActiveMenuBar '如果已经存在,则首先删除书签菜单 Set cbrPopup = CommandBars.FindControl(Tag:="重新创建") If Not cbrPopup Is Nothing Then cbrPopup.Delete End If If ActiveDocument.Bookmarks.count > 0 Then Set cbrPopup = cbrBar.Controls.Add(Type:=msoControlPopup, Before:=cbrBar.Controls.count + 1) With cbrPopup.Caption = "书签" .Tag = "重新创建" End With For Each bkBookmark In ActiveDocument.Bookmarks Set cbrButton = cbrPopup.Controls.Add(Type:=msoControlButton) With cbrButton .Caption = bkBookmark.Name .Style = msoButtonCaption .OnAction = "SelectBookMark" End With Next bkBookmark '在底部添加刷新按钮 Set cbrButton = cbrPopup.Controls.Add(Type:=msoControlButton) With cbrButton.Caption = "刷新列表" .Style = msoButtonCaption .OnAction = "CreateBookMarkMenu" .BeginGroup = True End With End If ActiveDocument.Bookmarks.ShowHidden = ShowHiddenStatus Set cbrButton = Nothing Set cbrPopup = Nothing Set cbrBar = Nothing Set bkBookmark = Nothing End Sub
最新发布
05-24

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值