资源预览内容
第1页 / 共25页
第2页 / 共25页
第3页 / 共25页
第4页 / 共25页
第5页 / 共25页
第6页 / 共25页
第7页 / 共25页
第8页 / 共25页
第9页 / 共25页
第10页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
9.1 KeyPress9.1 KeyPress事件事件 9.2 KeyDown9.2 KeyDown和和KeyUPKeyUP事件事件 9.3 9.3 鼠标事件鼠标事件 9.4 9.4 鼠标光标鼠标光标 9.5 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码。 KeyAscii通过引用传递,对它进行改变可给对象发送一个不同的字符,将KeyAscii改变为0时可取消击键,这样来对象便接收不到所按键的字符。 关于KeyPress事件,要特别强调的就是下列两点:(1)KeyAscii参数与后面的KeyDown和KeyUp事件中的KeyCode参数解释是有区别的。 (2) 如果KeyPreview属性被设置为True,窗体将先于该窗体上的控件接收此事件;如果KeyPreview属性被设置为False,则窗体将不能接收该事件。KeyPreview的默认值是False,KeyPreview属性可用来创建全局键盘处理例程。 键盘与鼠标事件过程例例9-1将输入到文本框Text1的文本转换为大写,并将输入的原始字符显示在Text2中。程序运行结果如图9-1所示。 Option ExplicitDim Str1 As StringPrivate 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范围,下列事件处理只允许用户在文本框中输入数字(非数字字符被抑制):Private Sub Text1_KeyPress(KeyAscii As Integer) If KeyAscii 57 Then 输入为非数字字符 KeyAscii = 0 抑制非数字字符的输入 End IfEnd Sub 在该事件处理过程中,就是对数字以外的字符进行拦截,将其KeyAscii参数更改为0,使控件最后接收到的是KeyAscii = 0的字符(空字符,但不是空格字符),这样就抑制了那些字符的输入。键盘与鼠标事件过程 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将先后得到所有这些不同物理位置键的扫描码。 键盘与鼠标事件过程Shift:参数是一个3位二进制的整数,标明在该事件发生时是否还同时按了Shift、Ctrl和Alt这三个控制键。 Shift参数的表达与含义见下面表9-1。键盘与鼠标事件过程KeyPressKeyDown和和KeyUp事件发生的时间输入一个ASCII字符按任意一个键参数值KeyAscii接收到字符的ASCII值KeyCode接收到键的扫描码按Shift+A时事件发生的次数事件发生一次(只由键状态决定)事件发生两次和2位置(键盘处于大写状态)按Shift+A时参数值KeyAscii 97第一次KeyCode 17第二次KeyCode 65(键盘处于小写状态)按Shift+A时参数值KeyAscii 65第一次KeyCode 17第二次KeyCode 65KeyPress与与KeyDown、KeyUp的区别:的区别:键盘与鼠标事件过程窗体的:KeyPressKeyDownKeyUp 控件的:KeyPressKeyDownKeyUp 窗体的KeyPreview为True焦点在控件上输入Sub Form_KeyPress(KeyAscii AsInteger) KeyAscii = KeyAscii + 1End SubSub Text1_KeyPress(KeyAscii As Integer) KeyAscii = KeyAscii + 1End Sub假定窗体KeyPreview为True,并有下面事件过程,则当在文本框中输入“1”时,实际上得到的是“3”?窗体KeyPreview为False时 在文本框中输入“1”时,实际上得到的是什么。在这里对在这里对KeyAscii作一点修改将影响作一点修改将影响所有控件所有控件在这里对在这里对KeyAscii作一点修改只作一点修改只影响一个控件影响一个控件则先发生这些窗体事件则先发生这些窗体事件接着又发生这些控件事件接着又发生这些控件事件键盘与鼠标事件过程对输入的数据进行验证、限制和修改对输入的数据进行验证、限制和修改(1) 修改输入数据,让控件只能接收大写字符将KeyPreview设置为True,并写下列Form_KeyPress事件代码:Sub Form_KeyPress(KeyAscii As Integer) If KeyAscii = Asc(a) And KeyAscii = Asc(z) ThenKeyAscii = KeyAscii ( Asc(a) - Asc(A) ) End IfEnd Sub(2)限制数据输入,让文本框只能接收“0”“9”的数字字符 写下列文本框的KeyPress事件代码: Sub txtExample_KeyPress(KeyAscii As Integer) If KeyAscii 57 ThenKeyAscii = 0 End IfEnd Sub键盘与鼠标事件过程例例9-2 KeyDown和KeyUp的用法。键入Shift键、Ctrl键和Alt键分别与F2键的组合,用程序在文本框中显示所输入的键组合情况。 KeyDown和KeyUP的用法键盘与鼠标事件过程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 SubPrivate 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等参数的含义进行说明(见下页)。 键盘与鼠标事件过程(1) (1) Button参数:参数:描述所按下的鼠标键是哪一个。使用二进制值使用二进制值:B2B1B0B0为1:表示按下了鼠标左键B1为1:表示按下了鼠标右键B2为1:表示按下了鼠标中键 例如:Button为2(010B),即B1 为1,表示按下了右键;如果按了鼠标左键,则Button为1(001B)。 If Shift = 1 Then 或者 If Shift = vbLeftButton Then 这是按了鼠标左健后执行的代码 Endif 使用符号常数:使用符号常数:1vbLeftButton:用户按下鼠标左键触发了事件;2vbRightButton:用户按下鼠标右键触发了事件;4vbMiddleButton:用户按下鼠标中键触发了事件。键盘与鼠标事件过程(2) (2) Shift参数:参数:描述按下鼠标键时,还按了哪一个键盘控制键。 二进制值形式二进制值形式:B2B1B0B0为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 Shift参数的符号常数形式:参数的符号常数形式:1vbShiftMask:表示Shift键被按下2vbCtrlMask:表示Ctrl键被按下4vbAltMask :表示Alt键被按下if Shfit = vbAltMask And Button = 1 Then 这是这是仅按住Alt健且且左击鼠标后应执行的代码后应执行的代码键盘与鼠标事件过程(3)X、Y:鼠标的当前位置坐标值。 例例9-3MouseMove事件及其参数的演示。在窗体上移动鼠标时,文本框Text1和Text2中分别显示鼠标相对于窗体的实时位置坐标;在图片框P1中移动鼠标时,文本框Text1和Text2中则分别显示鼠标相对于图片框的实时位置坐标。 下图所示,是程序运行时鼠标在窗体左边界上移动的某瞬间的情景。例9-3MouseMove事件及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-4在MouseMove事件中画图键盘与鼠标事件过程9.3.2 MouseDown和和MouseUp事件事件在窗体和控件上按下鼠标按钮时,MouseDown事件发生。Private Sub Form_ MouseDown (Index As Integer,Button As Integer, Shift As Integer, x As Single, y As Single) 窗体上MouseDown事件的处理代码End SubPrivate 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参数的设置及含义,与MouseMove事件相同。 键盘与鼠标事件过程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 SubPrivate Sub object_ MouseUp (Index As Integer,Button As Integer, Shift As Integer, x As Single, y As Single) 对象上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属性改变鼠标指针样式属性改变鼠标指针样式MousePointer属性可以用来定义显示各种鼠标指针。标指针的定义格式如下:对象名称对象名称.MousePointer=设定值设定值 设定值为015时分别对应16种预定义的指针。 键盘与鼠标事件过程9.4.2 利用利用MouseIcon属性自定义鼠标指针属性自定义鼠标指针当MousePointer属性值被设定成99时,还可以利用MouseIcon属性自定义鼠标指针。MouseIcon属性提供一个自定义图标,即该属性可以设置成一个图标文件。MouseIcon属性值的设定既可利用属性表在设计时指定;也可在运行时通过语句指定。用语句指定的语法如下:对象名对象名.MouseIconLoadPicture(PathName)对象名对象名.MouseIcon另一对象名另一对象名.Picture例9-6窗体上有一标签Label1和一个计时器。设置标签的鼠标指针,使鼠标指针指向标签时成为手形指针。当单击标签时窗体中的鼠标指针成为系统忙指针,然后每隔1秒激发一次计时器事件;当调用5次计时器事件过程后停止计时器事件,同时窗体的鼠标指针恢复为默认指针。用语句实现上述指针变换功能。(设目录E:Multi中的HAND-L.CUR文件为手形图标)。键盘与鼠标事件过程9.5 拖放拖放 9.5.1 Drag方法方法用于除了Line、Menu、Shape、Timer或CommonDialog控件之外的任何控件的开始、结束或取消拖动操作。Drag方法的语法格式如下: 控件名称控件名称.Drag 参数参数 其中,参数的含义为: 参数参数0:开始拖放操作 参数参数1:结束拖放操作。参数参数 1时可省略不写。 参数参数2:取消拖放操作 通常,只有当对象的DragMode属性设置为手工(0)时,才需要使用Drag方法控制拖放操作。但是,也可以对DragMode属性设置为自动(1或vbAutomatic)的对象使用Drag。 键盘与鼠标事件过程1. DragMode属性属性0:(缺省),手工拖动模式 1:自动拖动模式 2. DragIcon属性属性 DragIcon属性表示拖动过程中显示的图标(Ico或Cur文件)。 如果在拖动对象过程中想改变鼠标指针形状,可使用DragIcon或MousePointer属性。如果没有指定DragIcon属性,则只能使用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 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。2. DragDrop事件事件在一个完整的拖放动作(即将一个控件拖动到一个对象上,并释放鼠标按钮)完成,或使用Drag方法,并将其action参数被设置为2 (Drop)时,DragDrop事件发生。DragDrop事件的语法格式如下:Private Sub Form_DragDrop(source As Control, x As Single, y As Single)Private Sub MDIForm_DragDrop(source As Control, x As Single, y As Single)Private Sub object_DragDrop(index As Integer,source As Control, x As Single, y As Single)其中,source、x、y和index参数的定义和DragOver事件的相同。 键盘与鼠标事件过程当source参数中可能使用多个控件时,应使用TypeOf关键字和If语句一起确定与source表示的控件的类型;格式如下: If TypeOf 对象变量名对象变量名 Is 控件类型名控件类型名 Then 其中TypeOf函数返回值为对象变量所引用的控件的类型。例例9-8 演示将一个PictureBox控件拖放到另一个PictureBox控件上的视觉效果。窗体上含有3个PictureBox控件;将Picture1和Picture2的DragMode属性设置为1(自动);使用Picture属性将位图赋值给Picture1和Picture2。然后在程序运行中实现将Picture1或Picture2拖到Picture3上。 例例9-8 拖放发生时的界面键盘与鼠标事件过程
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号