在导致 Click 事件发生的两种情况中,第一种情况应用于命令按钮、框架、图像、标签、滚动条和数值调节钮控件,而第二种情况用于复选框、组合框、列表框、多页、TabStrip 和切换按钮控件。当选项按钮控件的值变为 True 时,也会导致 Click 事件发生。
以下是初始化 Click 事件的操作的几个示例:
? ? ? ? ?
单击窗体的空白区或窗体上的无效控件(除了列表框)。
单击命令按钮控件。如果命令按钮尚不具有焦点,则 Enter 事件发生在 Click 事件之前。 当命令按钮控件具有焦点时按空格键。 单击一控件。
在窗体上按 Enter,该窗体上的一个命令按钮的 Default 属性设为 True,同时焦点没有位于其他的命令按钮上。
在一个窗体上按 Esc,该窗体上有一个命令按钮的 Cancel 属性设为 True,同时焦点没有位于其他的命令按钮上。 按一个控件的加速键。
?
?
当单击控件而引发 Click 事件时,所发生的一系列事件有:
1. MouseDown 2. MouseUp 3. Click
对于某些控件,当 Value 属性更改时发生 Click 事件。但是,最好使用 Change 事件来检测一个属性的新值。下面是由于给控件赋新值而初始化 Click 操作的示例:
?
单击多页或 TabStrip 中的一个不同页面或标签。这些控件的 Value 属性反映了当前的页或标签。单击当前页或标签不改变控件的值,因而也就不初始化 Click 事件。
单击复选框或切换按钮控件,当这些控件之一具有焦点时按空格键,按这些控件中的一个的加速键,或者用代码更改该控件的值。
将选项按钮值改为 True。将某组中的一个选项按钮值设为 True,则该组内的其余按钮的值会自动设置为 False。只针对值变为 True 的那个按钮发生 Click 事件。
选择一个组合框控件或者列表框控件的值,使其完全与该控件下拉列表中的某项匹配。例如,若列表未经排序,则在编辑区所键入字符的第一个匹配对象可能不是列表中唯一的匹配,所以选择这样的值并不初始化 Click 事件。在一个经排序的列表中,可用完全匹配方式来确保所选择的值是用户键入的文本的唯一匹配值。
?
?
?
38
若 Value 设置为 Null,则不会初始化 Click 事件。
注意 单击可更改控件的值,因而它能初始化 Click 事件。但用右键单击不会改变控件的值,所以它不会初始化 Click 事件。
二十一、Enter、Exit 事件
一个控件从同一窗体的另一个控件实际接收到焦点之前,Enter 事件发生。同一窗体中的一个控件即将把焦点转移到另一个控件之前,Exit 事件发生。 语法
Private Sub object_Enter( )
Private Sub object_Exit( ByVal Cancel As MSForms.ReturnBoolean) Enter 和 Exit 事件的语法包含以下成分:
成分 object Cancel
必需。一个有效的对象名。
必需。事件状态。False 表示由该控件处理这个事件(这是默认方式)。True 表示由应用程序处理这个事件,并且焦点应当留在当前控件上。
说明
说明
Enter 事件和 Exit 事件与 Visual Basic 中的 GotFocus 和 LostFocus 事件类似。与 GotFocus 和 LostFocus 事件不同的是,当窗体接收或失去焦点时 Enter 事件和 Exit 事件不发生。
39
例如,假如选中了可初始化 Enter 事件的复选框,而后如又选中同一窗体中的另一个控件,那么对于该复选框来说,Exit 事件被初始化(因为焦点正在移到同一窗体中的不同对象上),而对于该窗体中的第二个控件来说,Enter 事件发生。
因为 Enter 事件发生在焦点移到一特定控件上之前,所以可用 Enter 事件过程来显示指令。例如,可用一个宏或者事件过程来显示一个小窗体或消息框,标识控件一般所包含的数据类型。
注意 将控件 Exit 事件的 Cancel 参数赋值为 True,可防止控件失去焦点。
二十二、Error 事件
当控件检测到一个错误,并且不能将该错误信息返回调用程序时该事件发生。 语法
对于多页
Private Sub object_Error( index As Long, ByVal Number As Integer, ByVal Description As MSForms.ReturnString, ByVal SCode As SCode, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, ByVal CancelDisplay As MSForms.ReturnBoolean)
对于其他控件
Private Sub object_Error( ByVal Number As Integer, ByVal Description As MSForms.ReturnString, ByVal SCode As SCode, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, ByVal CancelDisplay As MSForms.ReturnBoolean) Error 事件的语法包含以下成分:
成分
object
说明
必需。一个有效的对象名。
40
index Number Description SCode
必需。多页中与此事件相关的页面的索引。 必需。指定控件用来标识该错误的唯一的值。 必需。对错误的文字说明。
必需。为错误指定一个 OLE 状态码。低 16 位指定的值等于 Number 参数的值。
必需。标识初始化该事件的控件的字符串。 必需。指定了说明该错误的帮助文件的完整路径名。
必需。指定一个帮助文件主题的上下文 ID,该主题中含有对该错误的说明。 必需。指定是否在消息框中显示该错误串。
Source HelpFile HelpContext CancelDisplay
说明
为 Error 事件编写的代码决定了该控件如何响应这个错误情况。
处理错误情况的能力随应用程序的不同而不同。当一个错误发生而应用程序没有能力进
行处理时,将初始化 Error 事件。
二十三、KeyDown 和 KeyUp 事件
按下和释放某键时这两个事件依次发生。按下键时发生 KeyDown 事件,而释放键时发生 KeyUp 事件。 语法
Private Sub object_KeyDown( ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As fmShiftState)
41
Private Sub object_KeyUp( ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As fmShiftState)
KeyDown 和 KeyUp 事件的语法包含以下成分:
成分 object
说明
必需。一个有效的对象名。
KeyCode 必需。整数,代表被按下或释放的键的键代码。 Shift
必需。Shift、Ctrl 和 Alt 的状态。
设置
Shift 的设置如下:
常量 fmShiftMask 1 fmCtrlMask 2 fmAltMask 4
值
按下 Shift。 按下 Ctrl。 按下 Alt。
说明
说明
对于一个运行中的窗体,如果该窗体或窗体上的某个控件具有焦点,则按下键时
KeyDown 事件发生。KeyDown 和 KeyPress 事件交替重复发生,直至用户释放此键,此刻 KeyUp 事件发生。这个具有焦点的窗体或控件接收所有的按键操作。只有在窗体上没有控件或所有可视控件全部失效时,窗体才可能具有焦点。
应用宏中的 SendKeys 操作或 Visual Basic 中的 SendKeys 语句将按键操作发送到一个窗体或控件时,这些事件也会发生。
KeyDown 和 KeyUp 事件通常用于识别或区分以下各键:
? ? ? ?
扩充的字符键,比如功能键。
翻阅键,如 Home、End、PageUp、PageDown、向上、向下、向右、向左和 Tab 键。 组合键和标准键盘组合键(Shift、Ctrl 或 Alt)。 数字键区和键盘数字键。
42