程序设计基础-Visual Basic(2019秋)

沈阳师范大学 刘立群

目录

  • 认识 Visual Basic
    • ● 认识 Visual Basic
    • ● 对象的属性、事件和方法
    • ● 控件的容器-窗体
    • ● 文本编辑工具-文本框
    • ● 命令按钮和标签
  • 程序设计基础
    • ● 语句和语法规则
    • ● 数据类型和常量变量
    • ● 运算符与表达式
    • ● 常用内部函数
    • ● 输入与输出
  • 基本控制结构和算法
    • ● 程序结构与算法
    • ● 选择结构的语句实现
    • ● 循环结构的语句实现
    • ● 穷举和递推问题求解
    • ● 嵌套循环解百钱百鸡问题
    • ● 星形矩阵的显示问题
  • 常用标准控件
    • ● 选择控件和滚动条--设置文字格式
    • ● 列表框及组合框—购票系统
    • ● 计时器与图片控件—自动变换的交通灯
    • ● 图形操作—小球运动
  • 数组和过程
    • ● 数组的定义与一维数组的应用
    • ● 二维数组
    • ● 控件数组
    • ● 自定义过程
    • ● 参数传递
    • ● 变量的作用域
  • 键盘鼠标事件与菜单设计
    • ● 鼠标键盘事件--小鸡吃虫游戏
    • ● 菜单程序设计--控制移动字幕
  • 通用对话框与文件操作
    • ● 通用对话框与文件操作
    • ● 文件操作--打开保存数据实例
鼠标键盘事件--小鸡吃虫游戏

键盘与鼠标事件

一、键盘事件

1. KeyDown事件、KeyUp事件

当一个对象具有焦点时,用户按下键盘按键触发KeyDown事件;释放键盘按键触发KeyUp事件。具有这两个事件的对象有窗体、命令按钮、文本框、复选框、列表框、组合框、滚动条和图片框。

事件过程的格式:

Private Sub Object_KeyDown(KeyCode As Integer,ShiftAs Integer)

Private Sub Object_KeyUp(KeyCode As Integer,ShiftAs Integer)

说明:

⑴其中的Object是窗体或控件名。

⑵事件过程有两个参数。

①KeyCode是一个整型参数,表示按键的代码。键盘上的每一个按键都有其相应的键代码,Visual Basic还为每个键代码声明了一个内部常量。例如,F1键的键代码为112,内部常量为vbKeyF1;Home键的键代码为36,内部常量为vbKeyHome。其中,键盘上的字母键和数字键的键代码与其对应的ASCII码值相同。需要注意的是,对于字母键KeyCode无法区分其大小写形式,一律返回其大写形式的ASCII码值。

②Shift是一个整型参数,表示在按下一个键时,是否同时按下了Shift、Ctrl 和Alt等控制键。此参数为1时,表示同时按下了Shift键;为2时,表示同时按下了Ctrl键;为4时,表示同时按下了Alt键。当这三个键中有不只一个键被同时按下,则Shift参数是相应数值之和。

2. KeyPress事件

支持KeyPress事件的对象有窗体、命令按钮、文本框、复选框、单选钮、列表框、组合框、滚动条和图片框。当按下键盘上的一个可打印字符键(字母、数字和符号)时,触发该事件。

事件过程的格式:Private Sub Object_KeyPress(KeyAsciiAs Integer)

说明:

⑴ Object是窗体或控件名。

⑵整型参数KeyAscii传递的是按键字符的ASCII码,即可以区分按键字符的大小写状态,按键字符的大小写状态不同返回的ASCII码也不同。

⑶ KeyPress事件仅可以接收可打印的键盘字符和为数很少的几个功能键,如Enter(回车键)和BackSpace(退格键)。如果要处理无法被KeyPress接收的其它按键,应该使用KeyDown、Keyup事件。

⑷在KeyPress事件过程中,如果改变KeyAscii的值,则会改变实际输入的字符。特殊情况下,将KeyAscii参数改变为0时可取消按键,这样对象便接收不到字符了。 另外,可以使用Chr(KeyAscii)函数将KeyAscii参数转变为一个字符。

⑸窗体中具有焦点的对象首先接收KeyPress事件。窗体只有在没有可见或有效的控件时,或KeyPreview属性被设置为True时,才能接收该事件。

二、鼠标事件

前面章节中讲到过窗体与各种控件的Click事件和DblClick事件。这两个事件不能确定用户是在对象的什么位置上单击鼠标;也不能确定用户单击的是鼠标上的哪个键(左、右、中键);更不能确定在单击鼠标时是否同时按下了键盘上的某个控制键(如Ctrl、Shift和Alt键)。要在程序中得到上面所述信息,就必须利用鼠标事件。常用的鼠标事件有MouseDown、MouseUp、MouseMove。

1. MouseDown事件、MouseUp事件、MouseMove事件

 具有这三个事件的对象有窗体、图片框、图像框、命令按钮、标签、文本框、框架、复选框、单选钮和列表框。       当用户在这些对象上按下鼠标键时将触发MouseDown事件;释放鼠标键时将触发MouseUp事件;移动鼠标时将触发MouseMove事件。

事件过程的格式:

Private Sub Object_MouseDown(Button As Integer,Shift As Integer, X As Single, Y As Single)

End Sub

       PrivateSub Object _MouseUp(Button As Integer, Shift As Integer, X As Single, Y AsSingle)

End Sub

       PrivateSub Object _MouseMove(Button As Integer, Shift As Integer, X As Single, Y AsSingle)

End Sub

       说明:其中的Object是窗体或控件对象,过程参数的取值与意义。

 ⑴Button参数值是一个整数,表示鼠标事件发生时按下的是哪个鼠标键。

              1:左键

              2:右键

              4:中键。

对于MouseMove事件,事件发生时,可能同时有两个或三个鼠标键按下,这时Button参数是相应按键值的和。例如,如果MouseMove事件发生时,左键和右键都被按下,则参数Button传递的值是3。因为当移动鼠标时,可以不按下任何鼠标键,所以对于MouseMove事件,这个参数可以为0。

⑵ Shift参数

Shift参数值是一个整数,表示鼠标事件发生时,键盘上的哪些控制键同时被按下。

              1:Shift键

              2:Ctrl键

              4:Alt键

如果同时有两个或三个控制键被按下,则Shift参数值是相应按键值的和。

⑶X参数、Y参数

X参数和Y参数都为单精度数值,表示鼠标事件发生时,鼠标指针热点所处位置的坐标。

应该注意的是,当移动鼠标时,会不断地发生MouseMove事件。在相同的距离上,鼠标移动的速度越快,产生的MouseMove事件就越少。

 ==========================================================

                                                                 实验

用鼠标键盘事件设计小鸡吃虫的游戏

项目说明:

程序运行后,单击鼠标,小虫图像会移动到鼠标所在位置,按下键盘的上、下、左、右方向键则小鸡图像会进行相应的移动。当小鸡图像与小虫图像重合时,小虫图片消失,提示小鸡成功吃到小虫。

项目设计:

小虫移动到鼠标所在位置,这需要使用鼠标事件,才能获取鼠标当前位置信息;按上下左右键移动小鸡,这是键盘事件。然后通过小鸡和小虫图片框的位置来判断是否吃到了小虫

界面设计:现在窗体上添加两个图像框image1设置为小虫图片和image2设置为小鸡图片

程序代码:

在form_MouseDown事件中,将图片的left属性修改为鼠标所在位置坐标x,top属性修改为鼠标坐标y

键盘事件发生时,需要识别按下了哪个键,SelectCase根据键代码获取值进行选择,决定图片移动方向。

当小鸡图像与小虫图像重合时,小虫图片消失,标签显示提示小鸡成功吃到小虫

Sub form_MouseDown(Button As Integer, Shift As  Integer, X As Single, Y As Single)

   Image1.Left = X

       Image1.Top= Y 

End Sub

Sub Form_KeyDown(KeyCode As Integer,Shift AsInteger)

    SelectCase KeyCode

     Case  37

       Image2.Left= Image2.Left - 30

     Case  vbKeyup

      Image2.Top = Image2.Top - 30

       ……

    EndSelect

End Sub

----------------------------------------------------------------------------------------