面向对象程序设计PPT09_第1页
面向对象程序设计PPT09_第2页
面向对象程序设计PPT09_第3页
面向对象程序设计PPT09_第4页
面向对象程序设计PPT09_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

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

文档简介

1、第9章 键盘和鼠标事件当用户按下或松开键盘上的某个键时触发的事件是键盘事件;当用户单击、双击或拖动鼠标时,触发的事件是鼠标事件。1第9章 键盘和鼠标事件9.1 键盘事件9.2 鼠标事件9.3 对象拖放2常用的与键盘有关的事件: KeyDown事件:按键按下时触发 KeyPress事件:按键按下时触发 KeyUp事件 :按键松开时触发按键按下时先触发KeyDown事件,后触发KeyPress事件KeyUp事件触发在KeyPress事件之后 9.1 键盘事件3KeyPress事件中得到的是按键对应的字符的ASCII码(KeyAscii) KeyUp,KeyDown事件中得到的是按键对应的键号(Ke

2、yCode),键盘104个键都对应着唯一的键号。4对象的KeyPress事件过程的一般格式为:Privat Sub Object_KeyPress(KeyAscii As Integer) 语句块End Sub9.1.1 KeyPress事件5如果对象是控件数组中的一个,则KeyPress格式变为:Private Sub Object_KeyPress(Index As Integer, KeyAscii As Integer) 语句块End SubIndex代表控件数组中的索引值。6例如 :利用KeyPress事件对键盘输入的值取舍。 程序运行后要求输入大写字母,如果输入的是其它字符就响铃报

3、警,设计界面如下图:7 代码如下:Private Sub TxtUCase_KeyPress(KeyAscii As Integer) If KeyAscii 90 Then Beep KeyAscii = 0 为空操作,不满足条件的字符在文本框中不回显 End IfEnd Sub 运行程序8Dim PWord As String 口令Dim TryCount As Integer 重输次数Private Sub Form_Load() PWord = TryCount = 0End Sub例:利用KeyPress事件实现口令的验证,口令设定为“admin”。P231.vbp9Private

4、Sub TxtPWD_KeyPress(KeyAscii As Integer) If KeyAscii 13 Then 如果按键不是回车键 If Len(TxtPWD.Text)+1 5 Then Beep KeyAscii = 0 Else PWord = PWord & Chr(KeyAscii) KeyAscii = 42 42是*的ASCII码 End If 10Else 如果按键是回车键 If PWord = “admin Then MsgBox 口令正确,欢迎使用!, vbOKOnly, 提示 Unload Me Else TryCount = TryCount + 1 If T

5、ryCount 3 Then MsgBox 口令错误,请重新输入!, vbOKOnly + vbExclamation, 警告 TxtPWD.Text = PWord = 11 Else MsgBox 错误口令超过三次, & vbCrLf & 按OK退出程序!, vbOKOnly + vbExclamation, 警告 Unload Me End If End If End IfEnd Sub129.1.2 KeyDown和KeyUp事件KeyDown和KeyUp事件中返回的是KeyCode(键号) ,同一个键上的两个字符,KeyCode是一样的,可通过Shift参数来确定上档键的状态 。对象

6、的KeyDown和KeyUp事件过程的一般格式为:13Private Sub Object_KeyDown(KeyCode As Integer, Shift As Integer) 语句块End SubPrivate Sub Object_KeyUp(KeyCode As Integer, Shift As Integer) 语句块End Sub 如果对象为控件数组时,还会有一个参数(Index), 代表控件数组中的索引值。14说明:参数KeyCode是按键的键号,大、小写字母的键号相同,为大写字母的ASCII码值,其它字符的键号值如下表不能显示的功能键和转换键盘,则只会触发KeyDown事

7、件,不会触发KeyPress事件 15说明:Shift是三个转换键的状态,包括Alt 、Ctrl 和Shift,这三个转换键可以只按下任意一个,也可以同时按下任意两个,还可以三个同时全都按下,这样就可以出现8种状态,下表列出了这8个状态以及参数Shift的值。 16 Shift参数值十进制数 二进制数 转换键状态 0000没有按下转换键 1001只按下Shift键 2010只按下Ctrl键4100只按下Alt键3011同时按下Shift和Ctrl键5101同时按下Shift和Alt键6110同时按下Ctrl和Alt键7111三个转换键全都按下注意同时按下多个时shift的值是按下单个值的相加1

8、7说明: 大部分的按键在VB中都定义了常量,例如F1键的常量是vbKeyF1,Tab键的常量是vbKeyTab,Home键的常量vbKeyHome. 这些常量可以代替keycode的值在程序中直接使用18 例1:获得键号值的小程序: p234.vbpPrivate Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) TxtShow.Text = TxtShow.Text & vbCrLf & 按键的KeyCode= & Str(KeyCode)End SubPrivate Sub Form_KeyPress(KeyAscii As In

9、teger) TxtShow.Text = TxtShow.Text & KeyPress= & Str(KeyAscii) & 字符: & Chr(KeyAscii)End Sub19 P235.vbpPrivate Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)Select Case KeyCode Case vbKeyF1: TxtShow.Text = TxtShow.Text & vbCrLf & 按下 & ShiftStatus(Shift) & 功能键F1”.TxtShow.Text = TxtShow.Text &

10、vbCrLf & 按下 & ShiftStatus(Shift) & 功能键F6 例2:演示KeyDown事件及Shift参数的作用。20Case vbKeyHome: TxtShow.Text = TxtShow.Text & vbCrLf & 按下 & ShiftStatus(Shift) & 功能键Home Case vbKeyPageUp: TxtShow.Text = TxtShow.Text & vbCrLf & 按下 & ShiftStatus(Shift) & 功能键PageUp End SelectEnd Sub 21Function ShiftStatus(Shift As

11、 Integer) As StringSelect Case Shift Case 0: s = Case 1: s = “Shift+ Case 2: s = Ctrl+ Case 3: s = Shift+Ctrl+ Case 4: s = Alt+ Case 5: s = Shift+Alt+ Case 6: s = Ctrl+Alt+ Case 7: s = Shift+Ctrl+Alt+ End Select ShiftStatus = sEnd Function22注意:默认情况下,窗体上控件的键盘事件优先于窗体的键盘事件。如果希望窗体先接收键盘事件,则必须把窗体的KeyPrevi

12、ew属性设置为True,否则不能激活窗体的键盘事件 键盘事件可以对控制键进行处理,比如光标键,以起到对程序进行控制的作用,利用此功能使得在没有鼠标的情况下也可对窗体上的对象进行调整。23例如:直接按光标键时移动图片的位置,按下Shift键再按光标键时放缩图片,按Shift+Ctrl键时复位图片的位置及大小。 p237.vbp 将窗体的KeyPreview属性设置为True Image1的Strech属性设置为True.24Private Sub Form_Load()Label1.Caption = 直接按光标键移动图片,按下Shift键再按光标键放缩图片,按Shift+Ctrl键复位图片。E

13、nd SubPrivate Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) If Shift = 3 Then Image1.Move 2000, 1000, 1000, 1000 复位图片 End If 25Select Case KeyCode Case 37: 键盘左方向键 If Shift = 1 Then Image1.Width = Image1.Width - 50 Else Image1.Left = Image1.Left - 100 End IfCase 38: 键盘上方向键 If Shift = 1 Then

14、Image1.Height = Image1.Height - 50 Else Image1.Top = Image1.Top - 100 End If26Case 39: 键盘右方向键 If Shift = 1 Then Image1.Width = Image1.Width + 50 Else Image1.Left = Image1.Left + 100 End IfCase 40: 键盘下方向键 If Shift = 1 Then Image1.Height = Image1.Height + 50 Else Image1.Top = Image1.Top + 100 End If E

15、nd SelectEnd Sub279.2 鼠标事件当移动鼠标和按鼠标键时就会产生一些与鼠标有关的事件。28A:单击(Click)和双击(DblClidk)事件B:鼠标键按下(MouseDown)事件和松开鼠标键(MouseUp)事件 C:移动鼠标事件(MouseMove)9.2.1 鼠标事件29Private Sub Object_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) 语句块End SubPrivate Sub Object_MouseUp(Button As Integer, Shi

16、ft As Integer, X As Single, Y As Single) 语句块End Sub30当鼠标光标从某个对象上移过时,触发移动鼠标光标(MouseMove)事件,格式为 :Private Sub Object_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 语句块End Sub对象为控件数组时,会有一个参数(Index) 31各参数意义:(1) 鼠标键(Button)大部分鼠标都是三个键,以前的是两个键,这样可出现8种按键状态。十进制数 二进制数 转换键状态 0000没有按下转换

17、键 1001只按下鼠标左键 2010只按下鼠标右键 4100只按下鼠标中间键 3011同时按下鼠标左键和鼠标右键 5101同时按下鼠标左键和鼠标中间键 6110同时按下鼠标右键和鼠标中间键 7111三个转换键全都按下 32 但Windows鼠标驱动程序不支持中间键 ,且两个鼠标键不可能是严格的同时被按下,所以 Button参数的取值只有3种 000,001,010 33(2) 转换键(Shift) 按下、松开鼠标键和移动鼠标时三个转换键(Shift,Ctrl,Alt)的状态 ,三个转换键的状态和Shift参数的值与键盘事件的完全一样。 (3) 鼠标位置(X和Y)鼠标指针在接收鼠标事件的窗体或控

18、件上的位置坐标,不需要用户设置,随鼠标光标的移动而变化。34例(教材P240):演示鼠标的MouseDown事件、MouseUp事件和MouseMove事件。 运行程序 程序代码35程序说明:为保证鼠标的MouseDown、MouseUp和MouseMove事件只对窗体起作用,必须将窗体上其它的能够接收鼠标事件的控件的Enable属性设置为Flase。程序中用复选框的两个状态来模拟鼠标键和转换键的按下和松开。36两个标签控件分别显示鼠标指针的位置坐标,窗体上的方框代表窗体的区域,黑色实心圆点代表鼠标指针在窗体上的位置。窗体的MouseMove事件中,对鼠标指针的X和Y坐标除2后再加在圆点的位置

19、属性上。为了保证转换键松开时,窗体上的转换键复选框按钮抬起,在窗体的KeyUp事件中使复选框的Value属性置0。371. MousePointer属性功能:设置鼠标光标的标准形状取值范围:015,99 (详细见课本p243表)取值方式:通过属性窗口设置;在程序中设置Object.MousePoint=n9.2.2 鼠标的光标形状 382 . MouseIcon属性功能:设置鼠标光标的自定义形状。(MousePointer=99)取值方式:通过属性窗口;也可通过程序代码设置(1)D :Program Visual studiocommonGraphicsCursors*.cur (2) Ico

20、nsArrows*.ico39例如:在窗体上显示所有类型的鼠标光标Private Sub Form_Click() Static i As Integer form1.MousePointer = i i = i + 1 If i = 16 Then i = 99 If i = 100 Then i = 0End Sub40拖放:在屏幕上用鼠标把一个对象从一个位置 “拖”(Dragging)到另一个位置再放下(Dropping)过程:将鼠标光标移动到一个控件对象上,按下鼠标键,然后移动鼠标,对象随着鼠标的移动而在屏幕上移动,松开鼠标对象被放下 。除了菜单、计时器和通用对话框以外,其余的控件均可

21、在程序运行期间被拖放 。9.3 对象拖放411属性(1) DragMode设置/返回拖放模式是自动的还是手动的。0-Manual拖放模式是手动的(默认)1-Automatic拖放模式是自动的为了能对一个控件执行自动拖放操作,必须把它的属性DragMode设置为Automatic,即自由地被拖动。注意:设置为自动拖放后,控件将不再响应通常的鼠标事件(Click、DblClick、MouseDown、MouseUp)(2) DragIcon设置/返回拖放操作中鼠标指针的图标。9.3.1 与拖放有关的属性、事件和方法422事件(DragDrop和DragOver)(1) DragDrop 当把控件(

22、或图标)拖到目标对象上之后,如果松开鼠标键,则会触发目标对象的DragDrop事件。该事件过程格式如下:Private Sub Object_DragDrop(Source As Control, X As Single, Y As Single) 事件处理代码End Sub43 其中,参数Source是一个类型为Control的对象变量,用来返回被拖放的对象的属性。通过Source的Name属性来判断被拖放的控件的名字,从而决定该控件是否允许被放置在目标对象上。还可以在控件或图标被放下后,将它的Visible属性设置为False,就象被放置在目标对象的内部。参数X和Y返回松开鼠标键放下对象时

23、鼠标光标的位置 。44(2) DragOver当被拖放的控件(或图标)越过某一个对象时,会触发该对象的DragOver事件,类似于控件的MouseMove事件。该事件过程格式如下: Private Sub Object_DragOver(Source As Control, X As Single, Y As Single, State As Integer)事件处理代码End Sub45State参数表示被拖动对象的状态,可以取3个值:0-vbEnter 鼠标光标正在进入目标对象的区域。1-vbLeave鼠标光标正在离开目标对象的区域。2-vbOver鼠标光标正位于目标对象的区域之内 463

24、方法与拖放有关的方法有Move和DragMove方法和前面学到的是一样的。Drag方法用来开始、结束或取消一个拖放操作。Drag的格式如下:Object.Drag DragActionDragAction为一个整型值,有三个值可以选择:470-vbCancel 取消进行中的任何拖放操作1-BeginDrag 开始拖放操作2-EndDrag 结束拖放操作并放置对象 489.3.2 自动拖放将对象的DragMode属性设置为1-Automatic,运行后,可用鼠标自由地拖动对象。但是鼠标键松开后,被拖动的对象又回到原来位置。需要在目标对象的DragDrop事件中,利用程序代码将被拖动的对象移动到目

25、标控件中: Object.Move X,Y 例如:将三个按钮拖入图片框中,并按顺序排列。P250.vbp49Private Sub Image1_DragDrop(Source As Control, X As Single, Y As Single) Select Case Source.Name Case Command1: Command1.Move Image1.Left, Picture1.Top Case Command2: Command2.Move Image1.Left, Image1.Top + Command1.Height Command2.FontBold = Tru

26、e Case Command3: Command3.Move Image1.Left, Image1.Top + Command1.Height + Command2.Height End SelectEnd Sub50Private Sub Image1_DragOver(Source As Control, X As Single, Y As Single, State As Integer) If State = 0 Or State = 2 Then Source.DragIcon = LoadPicture(D:Program FilesMicrosoft Visual Studio

27、Common GraphicsIconsArrowsARW04DN.ICO) Else Source.DragIcon = LoadPicture() End IfEnd Sub519.3.3 手动拖放将对象的DragMode属性设置为默认值0-Manual,运行程序后,不能直接用鼠标拖动对象,但此时对象能够响应鼠标的MouseDown和MouseUp事件。在鼠标的MouseDown和MouseUp事件中,可以使用对象的Drag方法来实现对象的拖放。为了启动拖放,需要在对象的MouseDown事件中加入下面的的代码: Object.Drag 1 开始拖动操作52例:下面的例子利用手动拖放,模拟

28、文件移动的过程。 P251.vbp未拖动时 拖动开始时 拖动到目标时(1)设计界面(3)运行界面(2)属性设置53(4)程序代码1) Private Sub PicFolder_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)2) Private Sub PicFolder_DragOver(Source As Control, X As Single, Y As Single, State As Integer)3) Private Sub Pic(Source As Control, X As Single, Y As Single, State As Integer)4)Private Sub Pic(Source As Contr

温馨提示

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

评论

0/150

提交评论