第5章 常用事件及应用第5章 常用事件及应用25.1 鼠标事件5.2 OLE拖放5.3 键盘事件5.4 焦点事件5.5应用案例与 设计—简单绘画板应用程序的设计5.1 鼠标事件在Visual Basic中,最基本的鼠标事件有:Click、Dblclick、M ouseDown、MouseUp、MouseMove和DragDrop、DragOverMouseDown、MouseUp和 Mo useMove事件当按下鼠标任意键时发生MouseDown事件,放开鼠标按键时发生MouseUp事件, MouseMove事件是在 移动鼠标时发生,并且伴随鼠标指针在对象间移动,连续不断地产生。MouseDown、MouseUp和 MouseMove事件(续)M ouseDown事件过程的语法格式:Private Sub Object_MouseDown([Index As Integer, ] Button As Integer,Shift As Integer,x As Single,y As Single)Mous eUp事件过程的语法格式:Private Sub Object_MouseUp([Index As Integer,] Butto n As Integer,Shift As Integer,x As Single,y As Single)MouseMove事件 过程的语法格式:Private Sub Object_MouseMove(Button As Integer,Shift As I nteger,x As Single,y As Single)MouseDown、MouseUp和 MouseMove事件(续)【 例5.1】 演示一个简单的绘图应用程序,当用户按下鼠标左键时,触发MouseDown事件,可以开始绘图,按住鼠标左键不放,在窗体 上移动,触发MouseMove事件,可以将点连成线,当用户松开鼠标键时,触发MouseUp事件,停止绘画。MouseDown、Mo useUp和 MouseMove事件(续)Dim paint As BooleanDim x0, y0 As Integer Private Sub Form_Load() DrawWidth = 3 ''设置线宽 ForeCo lor = RGB(0, 0, 255) ''设置前景色End SubMouseDown、MouseUp和 MouseM ove事件(续)Private Sub Form_MouseDown(Button As Integer, Shift As In teger, X As Single, Y As Single) If Button=1 Then pain t = True ''启动绘图 x0 = X y0 = Y End If End Su b MouseDown、MouseUp和 MouseMove事件(续)Private Sub Form_MouseMove(But ton As Integer, Shift As Integer, X As Single, Y As Single) If paint Then Line (X, Y)-(x0, y0) ''画线 x0 = X y0 = Y End If End SubMouseDown、MouseUp 和 MouseMove事件(续)Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) paint = False ''禁止绘图 End Sub图5.1 运行结果本例中MouseDown事件过程用于设置起始点;MouseMove事件过程用于画线;M ouseUp事件过程停止画线。本例的运行结果如图5.1所示。MouseDown、MouseUp和 MouseMove事件(续)图5 .1 运行结果 Click、DblClick事件Click事件是在一个对象上单击鼠标按键时发生的。Click事件过程的语法格式: Private Sub Object_Click([Index As Integer] )DblClick事件过程的语法格式:Pr ivate Sub Object_DblClick([Index As Integer] )Click、DblClick事件(续) 【例5.2】 在以下程序中,用鼠标单击窗体的空白处,打开“颜色”对话框。拖放事件1.DragMode属性2.DragIcon属性 3.Drag方法4.DragDrop事件5.DragOver事件【例5.3】 用鼠标拖动文字框中的文字,放在图像框内并显示出来。 窗体中有两个控件:PictureBox控件Picture1和TextBox控件Text1。其中TextBox控件Text1的Dra gMode属性值为1,而且在鼠标拖曳过程中鼠标形状发生变化拖放事件(续)图5.2 实例运行结果 拖放事件(续)Private S ub Form_Load() Text1.DragMode = 0 Text1.Text = "鼠标事件示例----鼠标变化" End SubPrivate Sub Picture1_DragDrop(Source As Control, X As Sing le, Y As Single) If t = vbYes Then Source.Move X, Y Form1. MousePointer = 0 ''使用默认鼠标指针 End If Picture1.CurrentX = X Picture1 .CurrentY = Y Picture1.Print Text1.SelText Source.DragIcon = Load Picture()End Sub拖放事件(续)Private Sub Picture1_DragOver(Source As Co ntrol, X As Single, Y As Single, State As Integer) If State = 0 Or State = 2 Then Form1.MousePointer = 99 ''使用图形鼠 标指针 End If Select Case State Case vbEnter So urce.DragIcon = LoadPicture("c:\02.ico") Case vbLeave Source.DragIcon = LoadPicture() End Select Text1.Drag Mode = 0End Sub拖放事件(续)Private Sub Text1_MouseMove(Button As Integ er, Shift As Integer, X As Single, Y As Single) If Button = 1 Then Text1.DragMode = 1 End IfEnd Sub 5.2 OLE拖放OLE拖放是将数据 从一个控件或应用程序中移到另一个控件或应用程序中。OLE拖放是移动和复制数据最快捷的方式。(1)OLEDragMode属性(2)O LEDropMode属性5.2 OLE拖放(续)OLE拖放常触发以下事件:1.OLEStartDrag事件Private Sub Object_StartDrag(Data As DataObject,AllowedEffects As Long)2.OLE DragOver事件Private Sub Object_ OLEDragOver (Data As DataObject,Eff ect As Long ,Button As Integer,Shift As Integer,x As Single,y As Single,State As Integer)3.OLEDragDrop事件Private Sub Object_ OLEDra gDrop (Data As DataObject,Effect As Long ,Button As Integer,Shift As Integer,x As Single,y As Single)5.2 OLE拖放(续)4.OLEGiveFeedbac k事件Private Sub Object_ OLEGiveFeedback(Effect As Long,Defaultcurs ors As Boolean)5.OLESetData事件Private Sub Object_ OLESetData (Data As DataObject,Dataformat As Integer )6.OLECompleteDrag事件Private Sub Object_ OLECompleteDrag ([Effect As Long])5.2 OLE拖放(续)【例5.4】 在窗体中手工拖动的方式将一个文本框(Text1)中的内容复制到另一个文本框(Text2)中。如图5.3所示,界面包含2个文本框 :一个为拖动源(Text1),另一个为目标(Text2)。图5.3 实例界面5.2 OLE拖放(续)在Text1中选中“文本3 ”,拖放到Text2时,运行结果如图5.4所示;当按下Ctrl键,运行结果如图5.5所示。 图5.4 拖放到Text2的运行结果 5.2 OLE拖放(续)Private Sub Text1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) Text1.OLEDrag ''启动手工拖 动End SubPrivate Sub Text1_OLECompleteDrag(Effect As Long) If Ef fect = 2 Then ''当移动操作时,清除所选文本 Text1.SelText = "" En d If Screen.MousePointer = 0End Sub5.2 OLE拖放(续)Private Sub T ext2_OLEDragDrop(Data As DataObject, Effect As Long, Button As In teger, Shift As Integer, X As Single, Y As Single) If Data.GetFo rmat(vbCFText) Then ''将拖动内容送到目标Text2 If Shift And vbCtrlMask Th en Text2.Text = Data.GetData(vbCFText) Effect = 1 El se Text2.Text = Data.GetData(vbCFText) Effect = 2 En d If Else Effect = 0 End IfEnd Sub 5.2 OLE拖放(续)Private Sub Text2_OLEDragOver(Data As DataObject, Effect As Long, Button As I nteger, Shift As Integer, X As Single, Y As Single, State As Inte ger) If Data.GetFormat(vbCFText) Then ''设置放下效果 If Shift And vb CtrlMask Then''当按下Ctrl键为复制操作 Effect = 1 And Effect Else Effect = 2 And Effect ''为移动操作 End If Else Effect = 0 End IfEnd Sub5.2 OLE拖放(续)Private Sub Text1_OLEGiveFeedback(Effect As Long, DefaultCursors As Boolean) DefaultCursors = False ''设置鼠标形状 支持各种操作 Select Case Effect Case 0 Screen.MousePointer = 12 Case 1 Screen.MousePointer = 4 Case 2 Screen.MousePointe r = 4 Case Else DefaultCursors = True End SelectEnd Sub5.2 OLE拖放(续)Private Sub Text1_OLESetData(Data As DataObject, DataForm at As Integer) If DataFormat = 1 Then ''将选定内容送到DataObject对象中 D ata.SetData Text1.SelText, 1 End IfEnd SubPrivate Sub Text1_OLES tartDrag(Data As DataObject, AllowedEffects As Long) AllowedEffe cts = 2 Or 1 ''指定拖动效果 Data.SetData , 1End Sub5.2 OLE拖放(续) 图5.5 按下Ctrl键的运行结果 5.3 键盘事件键盘事件和鼠标事件都是用户与程序之间交互操作的主要元素。单击鼠标可以触发事件,按键也可 以触发事件。 KeyDown、KeyUp事件KeyDown事件过程的语法格式为:Private Sub Object_KeyDow n([Index As Integer,]Keycode As Integer,Shift As Integer)KeyUp事件过 程的语法格式为:Private Sub Object_KeyUp([Index As Integer,]Keycode As In teger,Shift As Integer)其中,Object:一个对象名称。Index:用来惟一地标识一个在控件数组中的控件。 Keycode:是一个键代码,该参数既可以是一个整数值代码,也可以是Visual Basic常数。KeyDown、KeyUp事件( 续)【例5.5】 当按下字母键时,窗体中显示该字符并且不断移动,直到松开该键。 KeyPress事件KeyPress事件过程的语 法格式为:Private Sub Object_KeyPress([Index As Integer,]KeyAscii As I nteger)其中,Object:一个对象名称。Index:用来惟一地标识一个在控件数组中的控件。KeyAscii:返回一个按键对 应的ASCII码整数值。KeyPress事件(续)【例5.6】 有一个TextBox控件,在文本框中输入的字母以大写显示。5.4 焦点事件点是控件接受用户键盘输入的当前状态。假设窗体中有两个以上控件,任何时候只能有一个控件可接受输入。能够接受输入的控件成为 焦点。 GotFocus事件GotFocus事件过程的语法格式为:Private Sub Object_GotFocus([Ind ex As Integer])其中Index参数用于惟一地标识一个在控件数组中的控件。一个控件仅当其Enabled和Visible 属性都设置为True时才能接收焦点。 LostFocus事件LostFocus事件过程的语法格式为:Private Sub Obj ect_LostFocus([Index As Integer])LostFocus事件过程主要是用来对更新进行验证和确认。Los tFocus事件(续)【例5.7】 使用GotFocus事件完成信息输入时的提示。在窗口上控件为:TextBox控件Text1用于输入姓名;TextBox控件Text2用于输入出生日期;Labe1和Labe2控件用于显示姓名和出生日期,Labe3控件用于显示提示信息,当要输入姓名时,显示“请输入姓名!”当要输入出生日期时,显示“请输入出生日期!”5.5应用案例与设计—简单绘画板应用程序的设计应用案例要求 鼠标事件和键盘事件应用案例要求设计一简单绘画板,其功能主要包含以下5个: ⑴通过在工具箱中选择直线、圆、矩形、椭圆、曲线,可根据鼠标拖曳画出不同大小选定形状图形;选择橡皮擦可通过移动鼠标擦除鼠标移过部分图形; ⑵通过鼠标选择颜色,可改变图形颜色; ⑶通过按下键盘F2键,可改变颜色选择。实训五 鼠标事件和键盘事件 1、编写一个简单的画笔程序。 2、编写一个简单的打字游戏。 3、编写一个推箱子的小游戏。 ⑴ 程序开始时,界面上出现一个小人、设置好的箱子、目的地和障碍物。 ⑵ 实时显示关数和步数,自行设置关数。 ⑶ 成功时弹出对话框“恭喜您过关”。 |
|