版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第10章 键盘与鼠标事件10.1 键盘事件默认情况下,控件的键盘事件优先于窗体的键盘事件若要窗体先接收键盘事件,需把窗体的KeyPreview属性设置为True10.1.1 KeyPress事件程序运行中,按下某个键,触发当前拥有输入焦点的那个控件的KeyPress事件。KeyPress事件发生时,可以获得当前所按键的字符的ASCII码值。【例10.1】设计一个窗体,用于输入口令,如果口令正确,则显示相应的信息,如果不正确,则要求重新输入。3次输入的都不正确,则停止输入。步骤: 新建一个“标准EXE”工程,自动在工程中添加一个名为Form1的窗体。 在Form1中添加一个标签Label1和一个
2、文本框Text1。将Label1的Caption属性设为“请输入口令:”,将Text1的Text属性内容设为空字符串。 编写程序代码。Private Sub Text1_KeyPress(KeyAscii As Integer) Static PWord As String 保存本次输入的口令字符串 Static Counter As Integer 本次输入字符个数计数,达到4后变为0 Static Numberoftries As Integer 对输入口令的字符计数 Numberoftries = Numberoftries + 1 每输入一个字符加1 If Numberoftries
3、= 12 Then End 口令为4个字符,满3次后程序退出 Counter = Counter + 1 PWord = PWord + Chr$(KeyAscii) 保存本次键入字符与以前的字符连成的字符串 KeyAscii = 0 键入的字符不在文本框中显示 Text1.Text = String$(Counter, *) 本次输入几位口令,文本框显示几个星号 If LCase$(PWord) = abcd Then 将口令转换成小写字母后与标准值比较 Text1.Text = PWord = MsgBox 口令正确,继续. Counter = 0 Print continue. Else
4、If Counter = 4 Then 已经输入4位口令且不正确 Counter = 0 下一次输入前初始化 PWord = Text1.Text = MsgBox 口令不对,请重新输入 End IfEnd Sub思考题:事件过程中用到的变量为什么定义成静态变量?10.1.2 KeyDown和KeyUp事件程序运行中,按下某个键,则产生KeyDown事件,放开该键产生KeyUp事件。KeyDown和KeyUp事件返回的是即该键的“扫描码”值。KeyDown和KeyUp事件过程都有两个形参,即KeyCode和Shift。表10.1 常用键的KeyCode值符号常数值描述符号常数值描述vbKeyB
5、ack8BackSpacevbKeyTab9TabvbKeyReturn13EntervbKeyShift16ShiftvbKeyControl17CtrlvbKeyPause19PausevbKeyCapital20Caps LockvbKeyEscape27EscvbKeySpace32SpaceBarvbKeyPageUp33PageUpvbKeyPageDown34PageDownvbKeyEnd35EndvbKeyHome36HomevbKeyLeft37Left ArrowvbKeyUp38Up ArrowvbKeyRight39Right ArrowvbKeyDown40Down
6、 ArrowvbKeyPrint42Print ScreenvbKeyInser45InsvbKeyDelete46DelvbKeyNumLock144Num LockvbKeyA到vbKeyZ6590AZvbKey0到vbKey94857大键盘上09vbKeyNumPad0到 vbKeyNumPad996105小键盘上09vbKeyMultiply106小键盘上*vbKeyAdd107小键盘上+vbKeySeparator108小键盘上EntervbKeySubtract109小键盘上减号vbKeyDecimal110小键盘上小数点vbKeyDivide111小键盘上/vbKeyF1到vbK
7、eyF16112127F1F16表10.2 Shift参数的值十进制数二进制数作用十进制数二进制数作用0000没有按下转换键3011按下Shift+Ctrl键1001按下一个Shift键5101按下Shift+Alt键2010按下一个Ctrl键6110按下Ctrl+Alt键4100按下一个Alt键7111按下Shift+Ctrl+Alt键【例10.2】在窗体上加一文本框,程序运行时用、4个箭头移动文本框的位置,当单独按下4个键中的某个键时,可使文本框在某个方向上移动20个像素位置;如果按下Ctrl键的同时再按4个箭头键的某个键时,文本框移动50个像素位置。步骤:新建一个“标准EXE”工程,自动
8、添加窗体Form1。向窗体Form1中添加一个文本框Text1。编写事件过程代码。Private Sub Form_Activate() Text1.SetFocusEnd SubPrivate Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer) Dim movedistance As Integer If Shift = 2 Then 如果按下Ctrl键 movedistance = 80 一次移动80个像素 Else movedistance = 20 不按Ctrl键,一次移动20个像素 End If Select Case Ke
9、yCode Case vbKeyRight Text1.Left = Text1.Left + movedistance 文本框右移 Case vbKeyLeft Text1.Left = Text1.Left - movedistance 文本框左移 Case vbKeyUp Text1.Top = Text1.Top - movedistance 文本框上移 Case vbKeyDown Text1.Top = Text1.Top + movedistance 文本框下移 End SelectEnd Sub10.2 Visual Basic的鼠标事件按下鼠标按钮,发生MouseDown事件
10、松开鼠标按钮,发生MouseUp事件鼠标在控件上移动,产生MouseMove事件鼠标事件过程参数:(1)Button 1 按下鼠标左键 符号常量:LEFT_BUTTON 2 按下鼠标右键 符号常量:RIGHT_BUTTON 4 按下鼠标中键 符号常量:MIDDLE_BUTTON(2)Shift与键盘事件过程中的Shift相同,见表10.2(3)x、y鼠标光标的当前位置10.2.1 鼠标位置鼠标不在控件内,(x,y)是鼠标光标在窗体上的坐标在某个控件上,是鼠标光标在控件上的坐标【例10.3】用鼠标在窗体上画图。首先在窗体层定义如下变量:Dim AllowPaint As Boolean, x0
11、As Single, y0 As Single然后,编写如下事件过程:Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) AllowPaint = True 允许画图End SubPrivate Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) AllowPaint = False 禁止画图 x0 = 0: y0 = 0End SubPrivate Sub F
12、orm_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) If AllowPaint = True And x0 0 And y0 0 Then Line (x0, y0)-(X, Y) 利用窗体的Line方法在前一点和当前点之间画线 End If x0 = X: y0 = Y 保存当前鼠标光标坐标End SubPrivate Sub Form_DblClick() Cls 双击窗体,清除窗体上用窗体方法绘制的图形,窗体上的控件不受影响End Sub实验题:除了用Line方法绘制图形外,还可以用PS
13、et(X,Y)画点方法只画当前点,此时,可以把变量x0,y0去掉。只要画点的速度足够快,点与点之间就可以连成线,最后形成图形。10.2.2 鼠标键表10.3 按键状态Button值二进制表示作用Button值二进制表示作用0000未按任何键3011左、右键同时按下1001左键被按下5101左、中键同时按下2010右键被按下6110中、右键同时按下4100中间键被按下7111三键同时按下【例10.4】编写程序,在窗体上画圆。要求:按着右键移动鼠标,则可画圆,否则不能画圆。窗体的Circle方法: Circle (x,y),R其中,(x,y)是圆心,R是半径。步骤:(1)新建一个“标准EXE”工程
14、,自动在工程中添加Form1窗体。(2)在窗体层定义一个布尔型变量Dim AllowPaint As Boolean(3)编写事件过程Private Sub Form_DblClick() ClsEnd SubPrivate Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) AllowPaint = True 鼠标键被按下时允许画圆End SubPrivate Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Si
15、ngle, Y As Single) AllowPaint = False 鼠标键松开后不允许画圆End SubPrivate Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) If AllowPaint And (Button = 2) Then 鼠标键被按下并且右键被按下 R = Rnd * 800 产生一个0到800的随机数作半径 If R 200 Then R = 200 半径最小取200 Circle (X, Y), R End IfEnd Sub10.2.3 鼠标光标鼠
16、标光标的形状由对象的MousePointer属性决定可以在属性窗口设置,也可以在程序代码中设置。MousePointer的属性是一个整数,其含义见表10.4。表10.4 鼠标光标形状常量值形状常量值形状vbDefault0(默认值)形状由对象决定vbArrow1箭头vbCrosshair2十字形状vbIbeam3I型vbIconPointer4图标(嵌套方框)vbSizePointer5尺寸线(四个方向箭头)vbSizeNESW6右上-左下尺寸线(双箭头)vbSizeNS7垂直尺寸线(上下双箭头)vbSizeNWSE8左上-右下尺寸线vbSizeWE9水平尺寸线(左右双箭头)vbUpArrow
17、10向上的箭头vbHourglass11沙漏状(表示等待状态)vbNoDrop12没有入口(一个圆形记号)vbArrowHourglass13箭头和沙漏形状vbArrowQuestion14箭头和问号形状vbSizeAll15四向尺寸线vbCustom99通过MouseIcon属性所指定的自定义图标如果把MousePointer属性设置为99,则可通过MouseIcon属性定义自已的鼠标光标。10.3 对象拖放10.3.1 与拖放有关的属性、事件和方法1. 属性(1)DragMode属性取值:0手动模式1自动模式(2)DragIcon属性拖动时作为控件的图标2. 事件把控件(图标)拖到目标之后
18、,松开鼠标键,产生DragDrop事件拖动对象越过一个控件时,产生DragOver事件3. 方法(1)Move方法将控件移到某一位置,格式:对象名.move left , top, width, height(2)Drag方法人工地启动或停止一个拖放过程格式:控件名.Drag 整数值整数值:0取消拖放、1允许拖放、2结束拖放并发出DragDrop事件10.3.2 自动拖放用户拖动对象时,系统会自动地启动拖放过程,不需要用程序代码实现启动或停止。【例10.6】在窗体上建立两个控件,拖拉其中一个控件,当把它放到第二个控件上时,该控件消失,单击窗体后再度出现。步骤:(1)新建一个“标准EXE”工程,
19、自动在工程中添加一个名为Form1的窗体。(2)在窗体上建立两个图片框Picture1和Picture2,在Picture1的Picture属性中装入图标。(3)编写事件过程。Private Sub Form_Load() Picture1.DragIcon = Picture1.Picture Picture1.DragMode = 1 Picture2.ForeColor = RGB(255, 0, 0) Picture2的前景色设为红色 Picture2.BackColor = RGB(0, 0, 255) Picture2的背景色设为蓝色End SubPrivate Sub Form_
20、DragDrop(Source As Control, X As Single, Y As Single) Source.Move X, Y 在窗体上把Picture1拖到窗体上(x,y)处End SubPrivate Sub Picture2_DragDrop(Source As Control, X As Single, Y As Single) Source.Visible = False Picture1拖放到Picture2上时,让Picture1不可见End SubPrivate Sub Form_Click() Picture1.Visible = TrueEnd SubPrivate Sub Picture2_DragOver(Source As Control, X As Single, Y As Single, State As Integer) Dim temp As Long If State = 0 Or State = 1 Then Picture1进入或离开Picture2时 temp = Picture2.BackColor Pictu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 临时市场推广员招聘书
- 投诉管理知识库更新指南
- 城市绿化工程招投标成果展示
- 知识产权申请招议标管理办法试行
- 商铺租赁法律顾问聘用合同
- 医疗机构客户服务与服务质量
- 宠物医院防疫承诺书
- 儿童游戏教室租赁协议
- 房地产销售代表意向书合同
- 重庆市商业街区改建工程合同
- 湖南省建筑工程定额
- 大学生涯发展展示
- 人教版六年级数学上册《全册完整》课件
- 整本书阅读《平凡的世界》教案-2023-2024学年中职高一语文新教材同步教学讲堂(高教版2023·基础模块上册)
- 智慧农业鱼菜共生智能温室大棚项目可行性研究报告
- 浙江省杭州市小升初数学真题重组卷
- 肠瘘护理查房
- 《水泥用铁质校正料》
- 全国职业院校技能大赛(酒水服务)考试题库(含答案)
- unit-7-Things;-The-ThrowAway-Society市公开课一等奖省赛课微课金奖
- 吊车司机作业安全行为规范(三篇)
评论
0/150
提交评论