本帖最后由 roych 于 2015-12-29 09:11 编辑
剔牙,当然是一个精细活儿了。鬼剔牙,那更是鬼斧神工,从细节上来“剔牙”了。所以,这一招对应的是分析代码,从根本上为大家解惑。
现在,就让我们一步步理解上一节贴出的代码吧。 XML是一种以树结构进行组织数据的,而且相对严格的语言,对大小写敏感。依次展开节点,得到一个这样的结构: customUI> ribbon> tabs>tab> group
一般来说,树结构数据是除了根节点之外,其它树节点都是可以有兄弟节点(即存在并列结构)的。而这段代码中,我们却只能修改的是tab节点以及其子节点、孙节点,增加ribbon或tabs节点,则会导致无法正常工作(即保持原有设置,而无法自定义功能区)。
不过这很容易理解:我们可以根据需要选择不同的功能区(这将在后面解释),但每次只能使用一个功能区来显示。因此,如果存在多个ribbon的节点,意味着什么呢?一个文件可以同时显示多个功能区,这显然不符合逻辑了。tabs更不用说,一个tabs集合只能被一个功能区所包含了。
也就是说,我们可以通过增加不同的tab选项卡,然后再对每个选项卡分成多个组别,最后在每个组别上增加控件(即上文所述的孙节点)来完成操作。 接下来,我们简单解释下XML代码里的一些属性【里面所有属性值必须加上双引号】: 名称 | | | | | | | | 忽略startFromScratch属性,或者指定为false表示在默认功能区上创建自定义功能区,否则表示新建空白功能区。 | | |
| | |
| | |
| | | 通过指定onAction属性值来执行宏或回调函数。 | | |
| | |
| | | 对于自定义功能区,Tab及其子孙节点须以id属性值来标志,命名规则:以英文字符开头且不能包含特殊字符。 | | | | | | | | | | | | | | |
| | | 值为true或false,可用于用户权限分配或者条件执行程序 | | | |
注意:XML是一种相对严格的语言,对大小写敏感,因此使用上述表中的名称时请不要改动。
了解这些属性之后,我们再回头看看这段代码【出于篇幅,这里不列出全部代码】。 - <ribbon startFromScratch="false">表示在原有的功能区上创建自定义功能区(其实这里是对原有的功能区进行修改)
- <tab idMso="TabHomeAccess" visible="false">----表示隐藏“开始”选项卡
- <tab idMso="TabExternalData" visible="true">
- <group idMso="GroupExport" visible="false">----隐藏“外部数据”中的“导出”组。
复制代码很显然,默认情况下,原有功能区都是可见的。下面,就让我们来验证下,是不是这样: 点击选项/当前数据库/功能区和工具栏,在下拉菜单中选择“test”。 然后按提示关闭当前数据库,再打开一次。“开始”选项卡以及“导出”组果然不见了。 现在问题来了:如果把startFromScratch的属性改为true,会发生什么情况呢?(请先自行思考,答案回复可见) 这时候,可能有人会问了:“TabHomeAccess”,“TabExternalData”之类的属性值是怎么找到的?Roych当然记不住那么多名称了,所以在这里就提供一个好办法给大家: 还记得上一个帖子么?不记得的翻一下,看看第一张图,“确定”的左上方是不是有一个“导入/导出”……我相信,聪明的版友应该知道怎么做了。 导出的文件是以exportedUI为扩展名的文件,请用记事本打开试试看?这些代码是不是跟我们之前的XML代码很像?
————————2015-12-29增加测试附件
上一篇 下一篇
|