`
taowen
  • 浏览: 193883 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

你所不知道的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还在那吗?为什么?
分享到:
评论

相关推荐

    CommandBar

    The CommandBar control is a full toolbar/menu control which currently offers configurable styles, colours and a full-object model for configuring the buttons and menus. The control can draw in Office ...

    CommandBar (漂亮的.net菜单工具栏)

    `Example.exe.manifest` 文件是应用程序的清单文件,其中包含了程序所需的权限和其他元数据信息。 `Example24.png` 和 `Example16.png` 可能是用于CommandBar的图标资源,通常在菜单项或按钮上显示。24x24像素和16x...

    asp.net辅助工具之CommandBar

    asp.net辅助工具之CommandBar The CommandBar class library extends Windows Forms with classes for CommandBar, ReBar, CoolBar, and bitmaped menu controls. 24 bit alpha channel images are supported on...

    vscode-commandbar:Visual Studio代码命令栏

    Visual Studio代码命令栏VSCode状态栏中的命令栏。开始使用特征执行命令: 长时间运行的命令终止3种命令类型: exec :执行命令,例如npm run serve (默认) script :执行package.json脚本palette :执行任何或...

    CommandBar:Windows 任务栏的输入框以启动应用程序-开源

    CommandBar 是一个开源项目,它的主要功能是在 Windows 的任务栏上添加一个输入框,这个输入框(ComboBox)允许用户输入命令来快速启动应用程序。这个功能借鉴了类似操作系统的快速启动特性,通过简化用户界面和提高...

    commandbar-launcher

    原料药名称类型描述默认文本字符串或HTMLElement 要在启动器中渲染的元素查找任何内容[ctrl + k] 风格CSS属性启动器的样式替代{}例子默认用法: import Launcher from 'commandbar-launcher';export const ...

    command-bar:macOS状态栏应用程序以显示系统和应用程序命令

    这款工具对于经常在终端中工作的用户来说尤其有用,因为它可以帮助他们快速找到并执行所需的命令,而无需频繁地在不同的资源中查找。 在描述中提到的几个关键特性包括: 1. **命令搜索**:Command Bar允许用户通过...

    commandbars应用

    可以通过`CommandBars("Name")`来访问特定的CommandBar,其中"Name"是CommandBar的名称。一旦获取了CommandBar,就可以修改其属性,如位置、大小、可见性等。 4. **添加Control到CommandBar** `Controls`集合允许...

    嵌入式系统问题的解答

    - 相关资源:`CommandBar_AddBitmap`用于添加按钮图标,`CommandBar_AddAdornments`添加Close按钮,`CommandBar_InsertComboBox`插入组合框,`CommandBar_InsertMenubar`和`CommandBar_InsertMenubarEx`用于插入...

    SharePointRibbonVisibility隐藏功能区

    这是一个wsp解决方案,部署到网站中激活功能,就可以在网站管理中进行功能区可见性的设置。总是显示、总是隐藏、或者根据条件隐藏

    VBA 提取菜单和工具栏id号

    在实际编程中,知道菜单和工具栏的ID号非常有用。比如: - **创建自定义UI**:你可以使用ID号来创建新的菜单和工具栏,或者复制已有的UI元素。 - **触发命令**:通过ID号,VBA可以模拟用户点击菜单或工具栏上的按钮...

    嵌入式软件开发导论-常见问题

    3. **EVC不支持中文显示** - 问题:默认的EVC SDK是为英文环境设计的,因此可能无法正确显示中文字符,特别是在没有安装相应中文字体的情况下。 - 解决方案:要解决这个问题,开发者需要构建一个支持中文的平台并...

    VB6利用BMP位图制作简单的工具栏

    在VB6(Visual Basic 6)中,制作工具栏通常涉及到使用控件和自定义图形,尤其是通过位图(BMP)文件来实现自定义的...对于更高级的应用,你可以进一步研究CommandBar控件的其他特性,如添加子菜单、自定义快捷键等。

    C++ Qt Fluent Design 组件库 QFluentWidgets 演示程序

    QFluentWidgets 同时支持 C++ 和 Python,支持 Windows、Linux 和 macOS,包含了数百个现成的组件和示例供你选择,保证能让你找到一个完美的组件作为千里之行的起点。 QFluentWidgets 充分利用了所见即所得的 Qt...

    Excel-VBA宏编程实例源代码-添加“工具栏命令”组.zip

    你可以创建新的`CommandBar`,添加按钮或其他控件,并为这些控件指定事件处理程序。 4. **Sub过程和Function过程**:在VBA中,`Sub`过程用于执行一系列操作,而不返回值。在创建工具栏按钮时,通常会为按钮分配一个...

    C#实现office菜单.

    `CommandBar`和`CommandBarControl`对象分别代表菜单栏和菜单项,通过它们我们可以构建所需的UI结构。 为了将这个自定义菜单实际应用到Word中,我们需要在适当的时候调用`Initialize`和`AddMenu`方法。这通常在...

    VBA开发实用指南.doc

    你可以创建CommandBar对象表示工具栏,CommandBarButton对象表示按钮,CommandBarComboBox对象表示下拉框。通过这些对象,可以编程创建自定义的工具栏和菜单,增加更多的功能和快捷方式。 VBA的面向对象特性使得...

    Git搜索「Git Search」-crx插件

    用光标选择所需的存储库或用户,然后回车 Git Search可以直接在页面上输入,而不需要长时间输入。 例子: git git <你的回购>拉 git 问题 git <your> git git <你的组织> git Git Search在他们的页面上...

    同济软件学院-Wince POWERPOINT

    3. **EVC不支持中文显示** 默认的EVC SDK是基于英文环境编译的,可能缺少中文支持。要解决这个问题,开发者需要构建针对中文环境的SDK,或者导入并使用包含中文字体的SDK。在PBP(Platform Builder)中,可以配置...

Global site tag (gtag.js) - Google Analytics