返回首页
当前位置: 主页 > 其他教程 > Access教程 >

Access如何编程自定义菜单工具栏?(9)

时间:2012-12-30 00:35来源:Office教程学习网 www.office68.com编辑:麦田守望者

Sub ViewMyAppToolbar()

With CommandBars("Worksheet Menu Bar").Controls("View").Controls("View MyToolbar")

If .State = msoButtonUp Then

.State = msoButtonDown

CommandBars("MyAppTools").Visible = True

Else

.State = msoButtonUp

CommandBars("MyAppTools").Visible = False

End If

End With

End Sub

当工具栏可见时,用户可以单击上面的任何控件,运行给控件指定的过程。

如果想要一个特定的工具栏只在某种条件存在时才出现,那么可以在运行时刻隐藏或显示工具栏控件。通过设置Visible属性为True(真)或False(假),能够有效地向用户工作区添加控件,或者从用户工作区中去掉控件而不必真正地删除该控件。

注释 因为Word可以在文档和模板中保存自定义信息,那么当文档或模板有效时,就会显示出自定义工具栏和工具栏控件,而当文档或模板无效时,又会把它们隐藏起来。与此相对照,因为Microsoft Excel在工作簿级保存自定义信息,又会需要在事件代码中使用Visible属性来动态地更改界面。

移动工具栏及调整工具栏的大小

用户可能希望在自己的应用程序运行时能够随着条件的改变来调整屏幕上工具栏的突出性。这可以通过改变工具栏的大小或位置来做到。用户可以使用工具栏所支持的几种属性来对其进行调整;将它们定位在应用程序窗口的底部、底部、左边或者右边;或者将它们放在屏幕的随便什么位置(如果它们是浮动工具栏的话)。要对表示工具栏的CommandBar对象的属性和方法作更多的了解,请参考“帮助”中的“CommandBar 对象”,使用标题上的跳转来显示属性和方法的列表。

恢复内置工具栏

如果一个默认工具栏已经被修改了-被用户或Visible Basic过程-用户能够通过Reset方法将工具栏恢复到它的默认状态。使用该方法等价于,在“自定义”对话框中的“工具栏”一栏里选中被自定义的内制工具栏的名字,然后单击“确定”。

下面的例子将所有工具栏恢复到它们的默认状态,同时删除所了所有的自定义工具栏。

For Each cb In CommandBars

If cb.BuiltIn Then

cb.Reset

Else

cb.Delete

End If

Next

当心 当使用Reset方法时要小心;它不但能够恢复任何被删除的内置工具栏控件,而且还会删除任何添加的自定义工具栏控件。要牢牢记住,另一个宏可能已经向工具栏添加了自定义工具栏,复位工具栏也会删除这些控件。为了避免这些问题,应该一个一个地删除应用程序所添加的工具栏控件,而不要复位整个工具栏。

启用或禁用工具栏控件

用户可能想在自己的应用程序运行时控制某个工具栏控件的可用性,以此来防止在不合适的时刻点中该按钮。要做到这一点,可以动态地启用或禁用工具栏控件。当工具栏被禁用时,点中它不会有什么反应,也不会运行和它关联的过程。使用Enable属性来设置或返回工具栏控件的状态(被启用或被禁用)。

下面的例子禁用了“常用”工具栏中的第三个按钮。

CommandBars("Standard").Controls(3).Enabled = False

指出工具栏控件的状态

如果一个工具栏按钮表示有着两种状态的一个选项,可以通过改变按钮的外观来指出当前选项的状态;当选项打开时,与之相关联的按钮显示出被按下的状态;当选项关闭时,按钮显示被放开的状态。

如果工具栏按钮显示出被按下的状态,工具栏按钮的State属性值为msoButtonDown;而如果工具栏按钮显示出被放开的状态,该属性值为msoButtonUp。下面的过程被指定给新的工具栏控件Database View,在对工作簿的特殊查看间进行切换之前,它能够改变该控件的外观。

Sub DatabaseView()

With CommandBars("MyAppToolbar").Controls(3)

If .State = msoButtonDown Then

.State = msoButtonUp

'Switch to database view

Else

.State = msoButtonDown

'Switch to worksheet view

End If

End With

End Sub

修改文本框、列表框和组合框控件

如果给工具栏添加了文本框、列表框或组合框控件,那么可以进行运行时刻更改,比如改变控件中文本框部分的当前值、向控件的列表框中添加或从中删除项(只适用于列表框和组合框)。

用户能够通过设置文本框、列表框或组合框控件的Text属性,来反映自己的Visual Basic应用程序的状态。例如,如果单击一个工具栏按钮来运行名为“MaxZoom”的过程(一个自定义过程,能够以最大显示比例显示活动文档),组合框控件的文本框部分能够更加精确地调整显示比例,并且显示出比例值,该比例值能够被设置到最大值。

使用AddItem和RemoveItem方法来向列表框或组合框控件中的列表部分添加以及从中删除项(通过索引编号)。例如,如果在Word里创建了一个列表框,它遵循用户在一个时段内所使用的样式,用户可以在每次使用一种样式时向控件的列表部分添加一种样式的名称。

注释 在列表框或组合框控件里添加项或从中删除项时要小心;这将导致所有项的索引编号发生移动。

用户可以使用列表框和组合框的其他属性和方法来改变运行时刻一个控件的外观。例如,可以为控件添加和调整标题列表(标题列表是位于一个控件列表部分顶部的列表项组,用分隔线把该组同其他列表项分隔开)。要更进一步了解文本框、列表框和组合框控件的使用,请参考“帮助”中“使用命令栏”的内容。

 

菜单项和工具栏控件的IDs

每个内置菜单栏和工具栏控件相关联的功能都属于某个特定的Office应用程序,与此相反的是,每个菜单项和工具栏控件的标题、按钮图标、宽度以及其他默认属性都保存在能够被所有应用程序共享的资源中。可以使用ID编号从该资源中找出特定的菜单项和工具栏控件。

注释 该资源还包含pop-up(弹出)控件的默认属性,该控件用来显示内置菜单。但是,那些pop-up(弹出)控件并不包含菜单中的内置菜单项;也就是说,pop-up(弹出)是空的。

虽然一般可以忽略一个菜单项或控件的ID,而是使用“自定义”对话框来更改内置或自定义菜单和工具栏,但是仍然需要参考某项的ID来完成对用户自定义界面的某些更改。以下是需要参考ID的以下场合。

要给一个内置或自定义菜单或工具栏指派一项,但是在设计时刻该项在“自定义”对话框中并不存在。
在运行时刻向一个菜单栏或工具栏添加内置项。
在运行时刻将一个特定的按钮图标复制到另一个按钮。
可以为CommandBarControls 集合的Add方法中的参数Id指定一个内置项ID,并且可以为任何自定义或内置控件的FaceId 属性指定一个项ID。
注释 即使共享资源包含了所有Office应用程序中的每个菜单项和工具栏控件的有关信息,用户所添加的项和控件,它们的功能必须包含在用户正在使用的应用程序里面。例如,不能向Word中一个工具栏添加Microsoft Excel 的“删除行”工具栏按钮(ID 293)。但是,可以把“删除行”工具栏按钮的外观从Microsoft Excel 复制到Word里给一个工具栏控件。

可以使用以下方法之一,来得到一个特定Office应用程序中内置菜单项和工具栏控件的ID编号。

在一个模块中,编写代码把一个已经存在于菜单或工具栏中的菜单项或工具栏控件赋值给一个对象变量,然后使用调试工具监测该对象Id属性的值。得到ID后,可以采用Add方法向另一个菜单或工具栏添加该菜单项或控件的副本,也可以通过把ID赋给另一个按钮的FaceId 属性来复制图标给另一个按钮。

Run the following procedure in one of the Office applications to create a text document that lists the IDs and captions of all the built-in commands in that application.

在一个Office应用程序中运行以下过程,创建一个列出该应用程序中所有内置命令的ID和标题的文本文档。

Sub outputIDs()

Const maxId = 4000

Open "c:\ids.txt" For Output As #1

' Create a temporary command bar with every

' available item and control assigned to it.

Set cbr = CommandBars.Add("Temporary", msoBarTop, False, True)

For i = 1 To maxId

On Error Resume Next

cbr.Controls.Add Id:=i

Next

On Error GoTo 0

' Write the ID and caption of each control to the output file.

For Each btn In cbr.Controls

Write #1, btn.Id, btn.Caption

Next

' Delete the command bar and close the output file.

cbr.Delete

Close #1

End Sub

在一个Office应用程序中运行以下过程,创建一个自定义工具栏的集合,该集合包含了和Office里FaceId属性的有效值数目同样多的按钮;每个按钮的图标和工具提示文本被设置为其中的一个值。可以对内置命令(见前面的过程)的ID编号和这些工具栏上某个按钮的FaceId属性值进行交叉索引,反之亦然。

Sub MakeAllFaceIds()

'Make fourteen toolbars with 300 faces each.

'Note that maxId is greater than last valid ID, so

'error will occur when first invalid ID is used.

Const maxId = 3900

On Error GoTo realMax

For bars = 0 To 13

firstId = bars * 300

lastId = firstId + 299

Set tb = CommandBars.Add

For i = firstId To lastId

Set btn = tb.Controls.Add

btn.FaceId = i

btn.TooltipText = "FaceId = " & i

Next

tb.Name = ("Faces " & CStr(firstId) & " to " _

------分隔线----------------------------
标签(Tag):access access数据库 数据库 access视频教程 access教程 access技巧 access下载
------分隔线----------------------------
推荐内容
猜你感兴趣