键盘与鼠标事件过程.ppt_第1页
键盘与鼠标事件过程.ppt_第2页
键盘与鼠标事件过程.ppt_第3页
键盘与鼠标事件过程.ppt_第4页
键盘与鼠标事件过程.ppt_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、9.1 KeyPress事件 9.2 KeyDown和KeyUP事件 9.3 鼠标事件 9.4 鼠标光标 9.5 拖放,第9章 键盘与鼠标事件过程 (2学时,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码。 K

2、eyAscii通过引用传递,对它进行改变可给对象发送一个不同的字符,将KeyAscii改变为0时可取消击键,这样来对象便接收不到所按键的字符。 关于KeyPress事件,要特别强调的就是下列两点: (1) KeyAscii参数与后面的KeyDown和KeyUp事件中的KeyCode参数解释是有区别的。 (2) 如果KeyPreview属性被设置为True,窗体将先于该窗体上的控件接收此事件;如果KeyPreview属性被设置为False,则窗体将不能接收该事件。KeyPreview的默认值是False,KeyPreview属性可用来创建全局键盘处理例程,例9-1 将输入到文本框Text1的文本

3、转换为大写,并将输入的原始字符显示在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的用法,例如,数字的ASCII码是在4857

4、范围,下列事件处理只允许用户在文本框中输入数字(非数字字符被抑制): Private Sub Text1_KeyPress(KeyAscii As Integer) If KeyAscii 57 Then 输入为非数字字符 KeyAscii = 0 抑制非数字字符的输入 End If End Sub 在该事件处理过程中,就是对数字以外的字符进行拦截,将其KeyAscii参数更改为0,使控件最后接收到的是KeyAscii = 0的字符(空字符,但不是空格字符),这样就抑制了那些字符的输入,9.2 KeyDown和KeyUP事件 KeyDown事件过程 Sub Form_KeyDown(keyco

5、de 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:是一个键的扫描码,可以用诸

6、如vbKeyFl(F1键)的系统常量表示,它的值只与按键在键盘上的物理位置有关,与键盘的大小写状态无关;如果按的是两个以上的组合键,KeyCode将先后得到所有这些不同物理位置键的扫描码,Shift:参数是一个3位二进制的整数,标明在该事件发生时是否还同时按了Shift、Ctrl和Alt这三个控制键。 Shift参数的表达与含义见下面表9-1,KeyPress与KeyDown、KeyUp的区别,窗体的: KeyPress KeyDown KeyUp,控件的: KeyPress KeyDown KeyUp,窗体的KeyPreview为True焦点在控件上输入,Sub Form_KeyPress(

7、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 作一点修改只 影响一个控件,则先发生这些窗体事件,接着又发生这些控件事件,对输入

8、的数据进行验证、限制和修改 (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 KeyDown和KeyUp的用法。键入Shift键、Ctrl键和Alt键分别与F2键的组合,用程序在文本框中显示所输入的键组合情况,KeyDown和KeyUP的用法,9.3 鼠标事件,9.3.1 MouseMove事

9、件 在窗体或控件对象上移动鼠标时发生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 Si

10、ngle) 对象上MouseMove事件的处理代码 End Sub 下面对Button、Shift、x和y等参数的含义进行说明(见下页,1) Button参数:描述所按下的鼠标键是哪一个,B0为1:表示按下了鼠标左键 B1为1:表示按下了鼠标右键 B2为1:表示按下了鼠标中键 例如:Button为2(010B),即B1 为1,表示按下了右键; 如果按了鼠标左键,则Button为1(001B)。 If Shift = 1 Then 或者 If Shift = vbLeftButton Then 这是按了鼠标左健后执行的代码 Endif 使用符号常数: 1vbLeftButton:用户按下鼠标左键

11、触发了事件; 2vbRightButton:用户按下鼠标右键触发了事件; 4vbMiddleButton:用户按下鼠标中键触发了事件,2) Shift参数:描述按下鼠标键时,还按了哪一个键盘控制键,B0为1:表示还按下了Shift键 B1为1:表示还按下了Ctrl键 B2为1:表示还按下了Alt键 例如: Shift为2(=010B),即B1 为1,表示只按下了Shift键; 如果同时按了Ctrl和Shift键二键,则Shift为3(=011B)。 If Shift = 1 And Button = 2 Then 这是仅按住Ctrl健且右击鼠标后应执行的代码 End If Shift参数的符号

12、常数形式: 1vbShiftMask:表示Shift键被按下 2vbCtrlMask:表示Ctrl键被按下 4vbAltMask :表示Alt键被按下 if Shfit = vbAltMask And Button = 1 Then 这是仅按住Alt健且左击鼠标后应执行的代码,3)X、Y:鼠标的当前位置坐标值。 例9-3 MouseMove事件及其参数的演示。在窗体上移动鼠标时,文本框Text1和Text2中分别显示鼠标相对于窗体的实时位置坐标;在图片框P1中移动鼠标时,文本框Text1和Text2中则分别显示鼠标相对于图片框的实时位置坐标。 下图所示,是程序运行时鼠标在窗体左边界上移动的某瞬

13、间的情景,例9-3 MouseMove事件及x,y参数的演示,例9-4 利用MouseMove事件结合绘图方法,在鼠标移动时画图。 代码如下: Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Line -(X, Y) 随鼠标移动画线 Circle (X, Y), 30 每发生一次MouseMove事件,就在线上画一个园 End Sub,9.3.2 MouseDown和MouseUp事件 在窗体和控件上按下鼠标按钮时,MouseDown事件发生。 Private S

14、ub Form_ MouseDown (Index As Integer,Button As Integer, Shift As Integer, x As Single, y As Single) 窗体上MouseDown事件的处理代码 End Sub Private Sub object_ MouseDown (Index As Integer,Button As Integer, Shift As Integer, x As Single, y As Single) 对象上MouseDown事件的处理代码 End Sub 对于Button、Shift、x、y参数的设置及含义,与Mouse

15、Move事件相同,9.3.2 MouseDown和MouseUp事件 在窗体和控件上释放鼠标按钮时, MouseUp事件发生。 Private Sub Form_ MouseUp (Index As Integer,Button As Integer, Shift As Integer, x As Single, y As Single) 窗体上MouseUp事件的处理代码 End Sub Private Sub object_ MouseUp (Index As Integer,Button As Integer, Shift As Integer, x As Single, y As Si

16、ngle) 对象上MouseUp事件的处理代码 End Sub 对于Button、Shift、x、y参数的设置及含义,与MouseMove事件相同,例9-5 结合MouseUp、MouseDown和MouseMov事件,设计一个直接用鼠标画图的简单画图程序。实现如下功能:鼠标任意按键被按下时启动绘图状态,这时,当用户按鼠标左键并移动时可以画出宽度为2的细点(DrawWidth=2);而按鼠标右键移动时可以画出宽度为6的粗点(DrawWidth=6)。而当鼠标按键弹起时,禁止绘图功能,例9-5 结合三种鼠标事件画图,9.4 鼠标光标 9.4.1 利用MousePointer属性改变鼠标指针样式

17、MousePointer属性可以用来定义显示各种鼠标指针。 标指针的定义格式如下: 对象名称.MousePointer=设定值 设定值为015时分别对应16种预定义的指针,9.4.2 利用MouseIcon属性自定义鼠标指针 当MousePointer属性值被设定成99时,还可以利用MouseIcon属性自定义鼠标指针。MouseIcon属性提供一个自定义图标,即该属性可以设置成一个图标文件。 MouseIcon属性值的设定既可利用属性表在设计时指定;也可在运行时通过语句指定。用语句指定的语法如下: 对象名.MouseIconLoadPicture(PathName) 对象名.MouseIco

18、n另一对象名.Picture 例9-6 窗体上有一标签Label1和一个计时器。设置标签的鼠标指针,使鼠标指针指向标签时成为手形指针。当单击标签时窗体中的鼠标指针成为系统忙指针,然后每隔1秒激发一次计时器事件;当调用5次计时器事件过程后停止计时器事件,同时窗体的鼠标指针恢复为默认指针。用语句实现上述指针变换功能。(设目录E:Multi中的HAND-L.CUR文件为手形图标,9.5 拖放 9.5.1 Drag方法 用于除了Line、Menu、Shape、Timer或CommonDialog 控件之外的任何控件的开始、结束或取消拖动操作。 Drag方法的语法格式如下: 控件名称.Drag 参数 其

19、中,参数的含义为: 参数0:开始拖放操作 参数1:结束拖放操作。参数 1时可省略不写。 参数2:取消拖放操作 通常,只有当对象的DragMode属性设置为手工(0)时,才需要使用Drag方法控制拖放操作。但是,也可以对DragMode属性设置为自动(1或vbAutomatic)的对象使用Drag,1. DragMode属性 0:(缺省),手工拖动模式 1:自动拖动模式 2. DragIcon属性 DragIcon属性表示拖动过程中显示的图标(Ico或Cur文件)。 如果在拖动对象过程中想改变鼠标指针形状,可使用DragIcon或MousePointer属性。如果没有指定DragIcon属性,则

20、只能使用MousePointer属性。 例如: Label1.DragIcon=LoadPicture (C:IconsMail.ico) Label2.DragIcon=picIcon.Picture,9.5.2 DragOver事件和DragDrop事件 1. DragOver事件 DragOver事件在拖放操作正在进行时发生。可使用此事件对鼠标指针在一个有效目标上的进入、离开或停顿等进行监控。鼠标指针的位置决定接收此事件的目标对象。 DragOver事件的语法格式如下: Private Sub Form_DragOver(source As Control, x As Single, y

21、 As Single, state As Integer) Private Sub MDIForm_DragOver(source As Control, x As Single, y As Single, state As Integer) Private Sub object_DragOver(index As Integer,source As Control, x As Single, y As Single, state As Integer,例9-7 本例演示一种指示有效的拖放目标的方法。当一个TextBox控件被拖过一个PictureBox控件时,指针从缺省的箭头变为特定的图标。当源被拖到其它地方时,指针恢复到缺省的状态。将TextBox控件的DragMode属性设置为1,然后启动程序,并把TextBox拖过PictureBox。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论