|
楼主 |
发表于 2023-7-17 09:24
|
显示全部楼层
8、Error:错误。在UserForm对象检测到错误且无法将该错误信息返回到调用程序时触发。
语法:
Private Sub object_Error(ByVal Number As Integer, _
ByVal Description As MSForms.ReturnString, _
ByVal SCode As Long, _
ByVal Source As String, _
ByVal HelpFile As String, _
ByVal HelpContext As Long, _
ByVal CancelDisplay As MSForms.ReturnBoolean)
参数:object 必填 代表UserForm对象
Number 必填 指定UserForm对象用于标识该错误的唯一值
Description 必填 该错误的文字描述
SCode 必填 指定该错误的OLE状态代码。 低顺序16比特指定与Number参数完全相同的值
Source 必填 标识启动事件的控件的字符串
HelpFile 必填 指定描述该错误的帮助文件的完全限定路径名
HelpContext 必填 指定包含该错误描述的帮助文件主题的上下文ID
CancelDisplay 必填 指定是否在消息框中显示该错误字符串
注意:(1)、为Error事件编写的代码确定了UserForm对象如何响应错误情况;
(2)、处理错误情况的能力因应用程序而异。 当发生了错误而应用程序不具备处理该错误的能力时,会启动Error事件。
9、Initialize:初始化。在加载UserForm对象后、但在其显示之前触发。
语法:Private Sub object_Initialize()
参数:object 必填 代表UserForm对象
示例:窗体初始化时文本框控件赋值123
Private Sub UserForm_Initialize()
Me.TextBox1.Text = 123
End Sub
注意:Initialize事件通常用于UserForm对象或控件设置形状、属性、加载初始数据等。
10、KeyDown:按下键。当UserForm对象有焦点且键盘有键按下时触发。
语法:Private Sub object_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
参数:object 必填 代表UserForm对象
KeyCode 必填 按下键的键代码,该参数不能返回三键组合按键值,会先返回三键编码,再返回其它按键编码
Shift 必填 Shift、Ctrl 和 Alt 键的状态(三键)
Shift 的设置为:
常量 值 描述
0 Alt、Shift 和 Ctrl三键无任何键按下
fmShiftMask 1 已按下 Shift 键
fmCtrlMask 2 已按下 Ctrl 键
3 已按下 Ctrl 和 Shift 键
fmAltMask 4 已按下 Alt 键
5 已按下 Alt 和 Shift 键
6 已按下 Alt 和 Ctrl 键
7 已按下 Alt、Shift 和 Ctrl 键
示例:按下按键时,输出三键状态和按键值
Private Sub UserForm_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Debug.Print Shift
Debug.Print KeyCode
End Sub
注意:(1)、当用户对正在运行的窗体按键时,如果该窗体或其上的控件具有焦点,则将发生KeyDown事件。KeyDown和KeyPress事件反复交替,直至
用户释放键为止,此时将发生KeyUp事件。包含焦点的窗体或控件会收到所有键击。窗体只能在其没有控件或其可见控件已被禁用的情况下具有焦点;
(2)、如果在宏中使用SendKeys操作或Visual Basic中的SendKeys语句向窗体或控件发送击键,也会发生这些事件;
(3)、KeyDown和KeyUp事件通常用于识别或区分:
①、扩展字符键(如功能键);
②、导航键,例如 Home、End、PageUp、 PageDown、向上键、向下键、向右键、向左键和 Tab;
③、组合键和标准键盘修饰符(Shift、Ctrl 或 Alt);
④、数字键盘和键盘数字键。
(4)、在以下情况下,KeyDown和KeyUp事件不会发生:
①、用户在窗体上按Enter,其命令按钮的Default属性设置为True;
②、用户在窗体上按Esc,其"取消"属性设置为True的命令按钮;
③、当您按或发送ANSI键时,将发生KeyDown和KeyPress 事件。KeyUp事件在通过按或发送此键导致的控件的任何事件之后发生。 如果键击
导致焦点从一个控件移动到另一个控件,则对于第一个控件,将发生 KeyDown事件,而对于第二个控件,将发生KeyPress和KeyUp事件。
(5)、与键盘相关的事件的顺序为:KeyDown、KeyPress、KeyUp。
11、KeyPress:按键。当UserForm对象有焦点且当用户按某个ANSI键时触发。
语法:Private Sub object__KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
参数:object 必填 代表UserForm对象
KeyAscii 必填 按键的Ascii编码值,该参数能返回和Shift键组合按键值。
示例:输出按键Ascii编码值和对应的字符
Private Sub UserForm_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Debug.Print KeyAscii
Debug.Print Chr(KeyAscii)
End Sub
注意:(1)、KeyPress事件在用户按在运行的窗体上产生可键入的字符(ANSI 键)的键时发生,而该窗体或该窗体上的控件具有焦点。 该事件可在释放键之
前发生,也可在释放键之后发生。 如果在宏中使用SendKeys操作或Visual Basic中的SendKeys语句将ANSI击键发送到窗体或控件,也会发生此事件;
(2)、按以下任意键时,KeyPress 事件都可发生:
①、任何可打印的键盘字符
②、CTRL 与标准字母表中的字符结合使用
③、CTRL 与任何特殊字符结合使用
④、Backspace
⑤、Esc
(3)、在以下条件下,KeyPress 事件不会发生:
①、按 TAB
②、按 Enter
③、按箭头键
④、击键导致焦点从一个控件移动到另一个控件时
(4)、BACKSPACE是ANSI字符集的一部分,但DELETE不是。 使用BACKSPACE删除控件中的字符会导致KeyPress事件;使用DELETE删除字符不会;
(5)、用户按住产生ANSI键码的键时,KeyDown和KeyPress事件交替重复。 用户释放键时,KeyUp事件发生。带有焦点的窗体或控件接收所有击键。
窗体仅可在其没有控件或其所有可视控件均被禁用时具有焦点;
(6)、KeyPress事件的默认操作是处理对应于所按键的事件代码。KeyAscii指示对应于所按键或键组合的ANSI字符。KeyPress事件将每个字符的大写
和小写解释为单独的键代码,因此解释为两个单独的字符;
(7)、若要响应键盘的物理状态,或处理KeyPress事件未识别的击键(如功能键、定位键以及这些键与三键的任何组合),请使用KeyDown和KeyUp事
件程序;
(8)、键盘相关事件的序列是:KeyDown、KeyPress、KeyUp。
12、KeyUp:松开键。当UserForm对象有焦点且键盘有键松开时触发。
语法:Private Sub object_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
参数:参照KeyDown事件
示例:松开按键时,输出三键状态和按键值
Private Sub UserForm_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Debug.Print Shift
Debug.Print KeyCode
End Sub
注意:参照KeyDown事件。
13、Layout:布局。当UserForm对象更改大小时触发。
语法:Private Sub object_Layout()
示例:当用Move方法设置窗体宽和高时触发Layout事件,输出修改后窗体的宽和高
Me.Move Me.Left, Me.Top, Me.Width + 100, Me.Height + 100 '设置窗体宽和高,Left、Top属性不变
Private Sub UserForm_Layout()
Debug.Print Me.Width '输出修改后窗体的宽度
Debug.Print Height '输出修改后窗体的高度
End Sub
注意:(1)、 用户可通过更UserForm对象的大小来触发Layout 事件;
(2)、对于支持AutoSize属性的控件,当AutoSize更改控件的大小时也触发Layout事件;
(3)、Layout事件的默认操作是计算窗体的新位置并重新绘制屏幕,因此当用户拖动窗体时也会触发Layout事件。
14、MouseDown:按下鼠标。当控件有焦点且鼠标有按下键时触发。
语法:Private Sub object_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
参数:object 必填 代表UserForm对象
Button 必填 标识导致事件发生的鼠标按钮的整数值
Shift 必填 Shift、Ctrl 和 Alt 键的状态
X, Y 必填 水平或垂直位置(以磅为单位),从控件的左边缘或上边缘。
Button 的设置为:
常量 值 描述
fmButtonLeft 1 已按下左按钮。
fmButtonRight 2 已按下右按钮。
fmButtonMiddle 4 已按下中间按钮。
Shift 的设置为:
常量 值 描述
0 Alt、Shift 和 Ctrl三键无任何键按下
fmShiftMask 1 已按下 Shift 键
fmCtrlMask 2 已按下 Ctrl 键
3 已按下 Ctrl 和 Shift 键
fmAltMask 4 已按下 Alt 键
5 已按下 Alt 和 Shift 键
6 已按下 Alt 和 Ctrl 键
7 已按下 Alt、Shift 和 Ctrl 键
示例:当按下鼠标时,输出鼠标按钮值、三键(Alt、Shift 和 Ctrl 键)值、坐标值
Private Sub UserForm_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Debug.Print "Button:" & Button
Debug.Print "Shift:" & Shift
Debug.Print "X:" & x
Debug.Print "Y:" & y
End Sub
注意:与鼠标相关的事件的顺序为:MouseDown、MouseUp、Click、DblClick、MouseUp。
15、MouseMove:鼠标移动。当控件有焦点且鼠标在控件内移动时触发。
语法:Private Sub object_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
参数:参照MouseDown事件,Button为0时无鼠标按键
示例:当移动鼠标时,输出鼠标按钮值、三键(Alt、Shift 和 Ctrl 键)值、坐标值
Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Debug.Print "Button:" & Button
Debug.Print "Shift:" & Shift
Debug.Print "X:" & x
Debug.Print "Y:" & y
End Sub |
|