第9章键盘与鼠标事件过程 91 Keypress事件 92 KeyDown和 KeyUP事件 93鼠标事件 9.4鼠标光标 95*拖放
9.1 KeyPress事件 9.2 KeyDown和KeyUP事件 9.3 鼠标事件 9.4 鼠标光标 9.5* 拖放 第9章 键盘与鼠标事件过程
91 Keypress事件 Sub Form Keypress(KeyAscii As Integer) Sub object Keypress(lindex As Integer, KeyAscii As Integer) KeyAscii用于返回一个标准ANS键的ASCI码 例9-1将输入到文本框Text1的文本转换为大写,并将输入的原始 字符显示在Text2中。 ption Explicit Dim Strl As String Private Sub TextI Keypress(KeyAscii As Integer) Strl=Chr( KeyAscii)"将按键的ASCI值转换为字符 KeyAscii=Asc(UCae(Str1)'将字符转换为大写并重置Text的字符 Text2.Text=Tex2.Text&Str'将输入的原始字符复制到Text2中 End sub
9.1 KeyPress事件 Sub Form_KeyPress(KeyAscii As Integer) Sub object_KeyPress([index As Integer,] KeyAscii As Integer) KeyAscii用于返回一个标准ANSI键的ASCII码。 例9-1 将输入到文本框Text1的文本转换为大写,并将输入的原始 字符显示在Text2中。 Option Explicit Dim Str1 As String Private Sub Text1_KeyPress(KeyAscii As Integer) Str1 = Chr(KeyAscii) '将按键的ASCII值转换为字符 KeyAscii = Asc(UCase(Str1)) '将字符转换为大写,并重置Text1的字符 Text2.Text = Text2.Text & Str1 '将输入的原始字符复制到Text2中 End Sub
KeyAscii通过引用传递,对它进行改变可给对象发送一个改变 的字符。如将 Keyascii改变为0时可取消击键,这样一来对象便 接收不到所按键的字符。 例如,数字的ASC码是在48~57范围,下列事件处理只允许用 户在文本框中输入数字(非数字字符被取消击键): 19 9 1 1 Private Sub Text1 KeyPress(keyAscii As Integer) If KeyAscii57Then'输入为非数字字符 KeyAscii=0'抑制非数字字符的输入 End if End sub
KeyAscii通过引用传递,对它进行改变可给对象发送一个改变 的字符。如将KeyAscii改变为0时可取消击键,这样—来对象便 接收不到所按键的字符。 例如,数字的ASCII码是在48~57范围,下列事件处理只允许用 户在文本框中输入数字(非数字字符被取消击键): 例9_1_1 Private Sub Text1_KeyPress(KeyAscii As Integer) If KeyAscii 57 Then ' 输入为非数字字符 KeyAscii = 0 ' 抑制非数字字符的输入 End If End Sub
92 Keydown和 KeyUP事件 KeyDown事件过程 Sub form KeyDown(KeyCode As Integer, shift As Integer) Sub object KeyDown( [Index As Integer KeyCode As Integer, Shift As Integer) KeyUp事件过程 Sub Form KeyUp(KeyCode As Integer, ShiftAs Integer) Sub object KeyUp([Index As Integer,) KeyCode As Integer, Shift As Integer) 参数说明 Index:是一个整数,它用来唯一标识一个在控件数组中的控件。 KeyCode:是一个键的扫描码,可以用诸如 vbKeyfl(F1键)的系统 常量表示,它的值只与按键在键盘上的物理位置有关,与键盘的大小 写状态无关;如果按的是两个以上的组合键, KeyCode将先后得到所 有这些不同物理位置键的扫描码
9.2 KeyDown和KeyUP事件 KeyDown事件过程 Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) Sub object_KeyDown([Index As Integer,] KeyCode As Integer, Shift As Integer) KeyUp事件过程 Sub Form_KeyUp(KeyCode As Integer, ShiftAs Integer) Sub object_KeyUp([Index As Integer,] KeyCode As Integer, Shift As Integer) 参数说明 Index:是一个整数,它用来唯一标识一个在控件数组中的控件。 KeyCode:是一个键的扫描码,可以用诸如vbKeyFl(F1键)的系统 常量表示,它的值只与按键在键盘上的物理位置有关,与键盘的大小 写状态无关;如果按的是两个以上的组合键,KeyCode将先后得到所 有这些不同物理位置键的扫描码
Shift:参数是一个3位二进制的整数,标明在该事件 发生时是否还同时按了Shif、(trl和A这三个控制键 Shif参数的表达与含义见下面表91。 表91Shit参数值的表达与含义 常量 十进值〔二进值 表述 ybshifMask 101) shift键被按下 ybCtrllask 2①10 ctl键被按下 vbAltMask 4(100) AI键被按下
Shift:参数是一个3位二进制的整数,标明在该事件 发生时是否还同时按了Shift、Ctrl和Alt这三个控制键。 Shift参数的表达与含义见下面表9-1
例9-2 KeyDown和 KeyUpl的用法。键入Shi键、Ctrl键和Alt 键分别与F2键的组合,用程序在文本框中显示所输入的键组 合情况。 按键控制 You Pressed SHIFT+CTRL +ALT+F2 请按A1t+F2,Ctx1+2, Shift+2组合键 KeyDown和 KeyUP的用法
例9-2 KeyDown和KeyUp的用法。键入Shift键、Ctrl键和Alt 键分别与F2键的组合,用程序在文本框中显示所输入的键组 合情况。 KeyDown和KeyUP的用法
Keypress-与 Keydown、 KeyUp的区别: Keypress Keydown和 KeyUp 事件发生的时间输入一个ASCm字符按任意一个键 参数值 KeyAscii接收到 Key Code接收到 字符的ASC值 键的扫描码 按ShtA时 事件发生一次 事件发生两次 事件发生的次数(只由键状态决定)2位置 (键盘处于大写状态) KeyAscii=97 第一次 Key Code=17 按 Shift+a时参数值 第二次 KeyCode=65 键盘处于小写状态) KeyAscii=65 第一次 KeyCode=17 按ShA时参数值 第二次 KeyCode=65
KeyPress KeyDown和KeyUp 事件发生的时间 输入一个ASCII字符 按任意一个键 参数值 KeyAscii接收到 字符的ASCII值 KeyCode接收到 键的扫描码 按Shift+A时 事件发生的次数 事件发生一次 (只由键状态决定) 事件发生两次 和2位置 (键盘处于大写状态) 按Shift+A时参数值 KeyAscii= 97 第一次KeyCode=17 第二次KeyCode=65 (键盘处于小写状态) 按Shift+A时参数值 KeyAscii= 65 第一次KeyCode=17 第二次KeyCode=65 KeyPress与KeyDown、KeyUp的区别:
窗体的 Keypreview属性 对于窗体的 Keypreview属性:默认值是 False,如果被设置为 rue,窗体将先于该窗体上的控件接收此类事件。 则先发生这些体事件接着又发生这些件事件 窗体的: 窗体的 Keypreview 控件的: Keypress KeyPress 为True焦点在控件 KeyDown KeyDown 上输入 KeyUp 在这里对 KeyAscii 在这里对 KeyAscii 作一点修改将影 作一点修改只 响 影响一个控件 所有控件
窗体的: KeyPress KeyDown KeyUp 控件的: KeyPress KeyDown KeyUp 窗体的KeyPreview 为True焦点在控件 上输入 在这里对KeyAscii 作一点修改将影 响 所有控件 在这里对KeyAscii 作一点修改只 影响一个控件 则先发生这些窗体事件 接着又发生这些控件事件 对于窗体的KeyPreview属性:默认值是False,如果被设置为 True,窗体将先于该窗体上的控件接收此类事件。 窗体的KeyPreview属性
例912修改输入数据,让控件接收的全部为大写字符 将 Keypreview设置为True,并写下列 Form Keypress事件代码: Sub Form Key press(KeyAscii As Integer) TfKeyAscii > Asc(a" And KeyAscii<= Asc("z") Then KeyAscii= KeyAscii-(Asc("a-Asc( a)) End lf End sub 例913假定窗体 Keypreview为True,并有下面事件过程,则 当在文本框中输入“1”时,实际上得到的是“3” Sub form Keypress(KeyAscii AsInteger) KeyAscii= KeyAscii+ 1 End sub Sub texti Keypress(keyascii as integer) KeyAscii= KeyAscii+ 1 End sub
例9_1_2修改输入数据,让控件接收的全部为大写字符 将KeyPreview设置为True,并写下列Form_KeyPress事件代码: Sub Form_KeyPress(KeyAscii As Integer) If KeyAscii >= Asc("a") And KeyAscii <= Asc("z") Then KeyAscii = KeyAscii – ( Asc("a") - Asc("A") ) End If End Sub Sub Form_KeyPress(KeyAscii AsInteger) KeyAscii = KeyAscii + 1 End Sub Sub Text1_KeyPress(KeyAscii As Integer) KeyAscii = KeyAscii + 1 End Sub 例9_1_3假定窗体KeyPreview为True,并有下面事件过程,则 当在文本框中输入“1”时,实际上得到的是“3
93鼠标事件 93 Mousemove事件 在窗体或控件对象上移动鼠标时发生 Mousemove事件 在窗体和控件上发生的 MouseMove事件过程分别如下: Private Sub Form Mouse Move(lIndex as Integer, Button As Integer, Shift As Integer, xAs Single, y As Single) 窗体上 MouseMove事件的处理代码 End Sub Private Sub object MouseMove(lIndex As Integer Button As Integer, Shift As Integer, x As single, y As Single) 对象上 Mouse Move事件的处理代码 End sub 下面对 Button、Shit、x和y等参数的含义进行说明(见下页)
9.3 鼠标事件 9.3.1 MouseMove事件 在窗体或控件对象上移动鼠标时发生MouseMove事件。 在窗体和控件上发生的MouseMove事件过程分别如下: Private Sub Form_MouseMove([Index As Integer,]Button As Integer, Shift As Integer, x As Single, y As Single) ……' 窗体上MouseMove事件的处理代码 End Sub Private Sub object_MouseMove([Index As Integer,]Button As Integer, Shift As Integer, x As Single, y As Single) ……' 对象上MouseMove事件的处理代码 End Sub 下面对Button、Shift、x和y等参数的含义进行说明(见下页)