第9章键盘与鼠标事件过程 (2学时 91 Keypress事件 9.2 KeyDown和 KeyUP事件 93鼠标事件 94鼠标光标 9.5拖放
9.1 KeyPress事件 9.2 KeyDown和KeyUP事件 9.3 鼠标事件 9.4 鼠标光标 9.5 拖放 第9章 键盘与鼠标事件过程 (2学时)
91 Keypress事件 Keypress事件的语法如下 Sub Form KeyPress(KeyAscii As Integer) Sub object KeyPress([index As Integer, KeyAscii As Integer) 参数说明 Obec为可以产生 KeyPress事件的对象; Index是一个整数,用来唯 标识一个在控件数组中的控件; KeyAsc用于返回一个标准ANS键的 ASC‖码。 KeyAscil)过引用传递,对它进行改变可给对象发送一个不同的字符, 将 Keyasci改变为0时可取消击键,这样一来对象便接收不到所按 字 关于 KeyPress事件,要特别强调的就是下列两点 KeyAsci参数与后面的 KeyDown和 KeyUp事件中的 KeyCode参数解 释是有区别的。 2)如果 Keypreview属性被设置为True,窗体将先于该窗体上的控件接收 此事件;如果 Keypreview属性被设置为lse,则窗体将不能接收该事 件。 Keypreview的默认值是 False, Key Preview属性可用来创建全局键 盘处理例程
9.1 KeyPress事件 KeyPress事件的语法如下: Sub Form_KeyPress(KeyAscii As Integer) Sub object_KeyPress([index As Integer,] KeyAscii As Integer) 参数说明: Object为可以产生KeyPress事件的对象;Index是一个整数,用来唯一 标识一个在控件数组中的控件;KeyAscii用于返回一个标准ANSI键的 ASCII码。 KeyAscii通过引用传递,对它进行改变可给对象发送一个不同的字符, 将KeyAscii改变为0时可取消击键,这样—来对象便接收不到所按键的 字符。 关于KeyPress事件,要特别强调的就是下列两点: (1) KeyAscii参数与后面的KeyDown和KeyUp事件中的KeyCode参数解 释是有区别的。 (2) 如果KeyPreview属性被设置为True,窗体将先于该窗体上的控件接收 此事件;如果KeyPreview属性被设置为False,则窗体将不能接收该事 件。KeyPreview的默认值是False,KeyPreview属性可用来创建全局键 盘处理例程
例9-1将输入到文本框Text1的文本转换为大写,并将输入的原始 字符显示在Tex2中。程序运行结果如图9-1所示 Option explicit Dim StrI As string Private Sub Textl_KeyPress(Key Ascii As Integer)( stl=Chr( KeyAscii)"蒋按键的ASC值转换为字符 KeyAscii=Asc(UCae(Str1)将字符转换为大写并重置Iex的字符 Iext2.Text=Text2.Text&Strl"将输入的原始字符复制到rext2中 End sub YOU PRESSED A, B, C 请按 You Pressed a,b,c键 例9-1 Key press用法
例9-1 将输入到文本框Text1的文本转换为大写,并将输入的原始 字符显示在Text2中。程序运行结果如图9-1所示。 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 例9-1 KeyPress的用法
例如,数字的ASC码是在48~57范围,下列事件处理只允许用 户在文本框中输入数字(非数字字符被抑制) Private Sub TextI Keypress(KeyAscii As Integer) If KeyAscii57Then输入为非数字字符 eyAsi=O抑制非数字字符的输入 End if End sub 在该事件处理过程中,就是对数字以外的字符进行拦截,将其 Keyascii参数更改为0,使控件最后接收到的是 Key ascii=0的字 符(空字符但不是空格字符),这样就抑制了那些字符的输入
例如,数字的ASCII码是在48~57范围,下列事件处理只允许用 户在文本框中输入数字(非数字字符被抑制): Private Sub Text1_KeyPress(KeyAscii As Integer) If KeyAscii 57 Then ' 输入为非数字字符 KeyAscii = 0 ' 抑制非数字字符的输入 End If End Sub 在该事件处理过程中,就是对数字以外的字符进行拦截,将其 KeyAscii参数更改为0,使控件最后接收到的是KeyAscii = 0的字 符(空字符,但不是空格字符),这样就抑制了那些字符的输入
92 Keydown和 KeyUP事件 KeyDown事件过程 Sub Form KeyDown(keycode As Integer, shift As Integer) Sub object Keydown(lindex As Integer, keycode As Integer shift as Integer) Keyup事件过程 Pily Sub Form KeyUp(keycode As Integer, shift As Integer) Sub object KeyUp(lindex As Integer, ]keycode As Integer, 7lnioerily shift as integer 参数说明 Index:是一个整数,它用来唯一标识一个在控件数组中的控件。 KeyCode:是一个键的扫描码,可以用诸如 vbKeyf1(Fl键)的系统常 量表示,它的值只与按键在键盘上的物理位置有关,与键盘的大小写 状态无关;如果按的是两个以上的组合键, Key Code将先后得到所有 这些不同物理位置键的扫描码
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, shift As Integer) Sub object_KeyUp([index As Integer,]keycode As Integer, shift As Integer) 参数说明 Index:是一个整数,它用来唯一标识一个在控件数组中的控件。 KeyCode:是一个键的扫描码,可以用诸如vbKeyFl(F1键)的系统常 量表示,它的值只与按键在键盘上的物理位置有关,与键盘的大小写 状态无关;如果按的是两个以上的组合键,KeyCode将先后得到所有 这些不同物理位置键的扫描码
Shit:参数是一个3位二进制的整数 的表达与含义见下面表91。标明在该事件发生时 是否还同时按了 Shift、Ctr和At这 个控制键。Shif参数l 表91shi参数值的表达与含义 常量 十进值(二进值〕 表述 ybShiftmask 1001) Shift键被按下 vbCtrlmask 2010 Ctl键被按下 vbeltmask 4(100) AI键被按下
Shift:参数是一个3位二进制的整数,标明在该事件发生时 是否还同时按了Shift、Ctrl和Alt这三个控制键。 Shift参数 的表达与含义见下面表9-1
Keypress-与 Keydown、 Keyup的区别: KeyPress Keydown和 KeyUp 事件发生的时间 输入一个ASCⅡ字符按任意一个键 参数值 Keyascii接收到 KeyCode接收到 的时字符的ASCI值键的扫描码 按Sht+A时 事件发生一次 事件发生两次 事件发生的次数(只由键状态决定)2位置 (键盘处于大写状态) KeyAscii=97 第一次 KeyCode=17 按Shit+A时参数值 第二次 KeyCode=65 键盘处于小写状态) Keyascii=65第一次 Keycode=17 按 Shift+a时参数值 第二次 Key Code=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的区别:
则先发生这些席体事件接着又发生这些控件事件 窗体的 控件的: 窗体的 Key preview为True Ke Keypress .Ke evpress 焦点在控件上输入 Key down Key down Keyi KeyI 在这里对 KeyAscii 在这里对 KeyAscii 作一点修改将影响 作一点修改只 假定窗体 Key preview为re,并有下面事过程, 所有控件 影响一个 则当在文本框中输入“1”时,实际上得到的是“3 Sub form Keypress(KeyAsciiAsInteger) KeyAscii= KeyAscii+ 1 End sub 窗体 Keypreview为 False时 在文本框中输入“1”时,实际上 Sub TextI Keypress(KeyAsciiAs Integer) 得到的是什么。 KeyAscii= Keyascii+ End sub
窗体的: KeyPress KeyDown KeyUp 控件的: KeyPress KeyDown KeyUp 窗体的KeyPreview为True 焦点在控件上输入 Sub Form_KeyPress(KeyAscii AsInteger) KeyAscii = KeyAscii + 1 End Sub Sub Text1_KeyPress(KeyAscii As Integer) KeyAscii = KeyAscii + 1 End Sub 假定窗体KeyPreview为True,并有下面事件过程, 则当在文本框中输入“1”时,实际上得到的是“3” ?窗体KeyPreview为False时 在文本框中输入“1”时,实际上 得到的是什么。 在这里对KeyAscii 作一点修改将影响 所有控件 在这里对KeyAscii 作一点修改只 影响一个控件 则先发生这些窗体事件 接着又发生这些控件事件
对输入的数据进行验证、限制和修改 (1)修改输入数据,让控件只能接收大写字符 将 Keypreview设置为Tue,并写下列 Form Key Press事件代码 Sub Form Key Press(KeyAscii As Integer) lfKeyAscii>=Asc("a")And KeyAscii 57Then KeyAscii=o End jf.1 End sub
对输入的数据进行验证、限制和修改 (1) 修改输入数据,让控件只能接收大写字符 将KeyPreview设置为True,并写下列Form_KeyPress事件代码: Sub Form_KeyPress(KeyAscii As Integer) If KeyAscii >= Asc("a") And KeyAscii 57 Then KeyAscii = 0 End If End Sub
例9-2 Key Down和 KeyUp的用法。键入Shif键、C键和At 键分别与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的用法