高等学校计算机基础教育教材 Visual Basic 6.0 程序设计 上海中医药大学现代教育技术中心 计算机教学部 1
第七章 常 用 控 件 1. 列表框 2. 组合框 3. 滚动条 4. 鼠标器 5. 键盘
一. 列表框和组合框 列表框各主要属性的值: 列表框各主要属性的值: List1.ListIndex = 3 (下标从0开始的) 一. 列表框和组合框 列表框各主要属性的值: List1.ListIndex = 3 (下标从0开始的) List1. ListCount = 5 List1. Selected(3) = True,其余为False。 List1. Sorted = False,没有排序。 List1. Text 为 “cox” , 与List1. List(List1. ListIndex)相等 List1 Combo1 列表框各主要属性的值: List1.ListIndex = 0 List1. ListCount = 8 List1. Selected(3) = True 其余为False。 List1. Sorted = False List1. Text 为 “李宁”
1. 共有的重要属性 (P:可在程序中设置或引用,D:可在设计状态设置。) List :PD 字符型数组,存放列表框的项目,下标是从0开始。 ListIndex:P 选中的项目的序号,没有项目被选定时为-1 ListCount:P 项目的数量,ListCount-1是最后一项的下标。 Sorted:D True:按字母顺序排列。 False:按加入先后顺序排列。 Text:P 列表项中被选定的内容, List 1.List(List 1.ListIndex) = List1.Text。
2. 列表框的特有属性 Selected:P 3. 列表框的特有属性 逻辑数组。 Selected(i)的值为True表示第i+1项被选中。 MultiSelect 0-None:禁止多项选择。 1-Simple:简单多项选择。 2-Extended:扩展多项选择。 3. 列表框的特有属性 Style 类型 Style 输入 下拉式组合框 能 简单组合框 1 下拉式列表框 2 不能
4. 方法 5. 事件 列表框:Click、DblClick。 AddItem 对象.AddItem item [, index] RemoveItem 对象.RemoveItem index Clear 对象.Clear 5. 事件 列表框:Click、DblClick。 组合框:Click,只有简单组合框才有DblClick事件。 一般不需要编写Click事件过程。 通常在单击命令按钮或发生DblClick事件时才读取Text属性。
例7.3 对列表框进行项目添加、修改和删除操作。 例7.4 对列表框进行项目添加、修改和删除操作。
二. 滚动条 重要属性 Max:最大值 -32 768~32 767 Min:最小值 -32 768~32 767 二. 滚动条 垂直滚动条 水平滚动条 SmallChange Min Value Max SmallChange LargeChange LargeChange 重要属性 Max:最大值 -32 768~32 767 Min:最小值 -32 768~32 767 SmallChange 最小变动值,单击箭头时移动的增量值。 LargeChange 最大变动值,单击空白处时移动的增量值。 Value 滑块所处位置所代表的值。
例7.6 调色板程序。 事件: Scroll:拖动滑块时会触发Scroll事件。 Change:Value属性改变时触发Change事件。 例7.5 用一个文本框(txtSpeed)显示滚动条(hsbSpeed)滑块当前位置所代表的值。 例7.6 调色板程序。 Sub hsbSpeed_Change() Text1.Text= HScroll1.Value End Sub
三. 鼠标器和键盘 1. 鼠标器事件 注意:鼠标事件发生在什么对象上,是窗体上还是控件上。 MouseDown事件 MouseUp事件 三. 鼠标器和键盘 1. 鼠标器事件 注意:鼠标事件发生在什么对象上,是窗体上还是控件上。 MouseDown事件 Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)(发生在窗体上的事件过程) MouseUp事件 Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) (发生在窗体上的事件过程) MouseMove事件 Sub Form_MouseMove(Button As Integer, Shift As Integer,
使用符号常数: (1) Button参数 B1为1:按下了右键; 例如:Button为2(010B),即B1 为1,表示按下了右键; 如果按了左键,则B0为1, B1和B2为0, Button为1(001B) If Shift = 1 Then '或者 If Shift = vbLeftButton Then … ' 这是按了左健后执行的代码 Endif 使用符号常数: 1—vbLeftButton:用户按下左键触发了鼠标事件; 2—vbRightButton:用户按下右键触发了鼠标事件; 4—vbMiddleButton:用户按下中键触发了鼠标事件。
例如:Button为2(010B),即B1 为1,表示仅按下了Shift键; B1为1:按下了Ctrl键; B2为1:按下了Alt键。 例如:Button为2(010B),即B1 为1,表示仅按下了Shift键; 如果同时按了Ctrl和Shift键,则B0和B1为1,B2为0,Button为3(011B) 注意: 可能同时按下两个或三个键。如果Button<>1成立,并不表示没有按下Shift,因为可能其他键也被按下了。如果要测试按下了某个键,则应用and进行位运算。例如Button and 1成立,表示肯定按下了Shift(可能其他键也被按下了)。 If Shift = 1 and Button = 2 Then … ' 这是仅按住Ctrl了健单击鼠标后执行的代码 End If
符号常数: 1—vbShiftMask; 2—vbCtrlMask; 4—vbAltMask 。 Shfit And vbCtrlMask为真: 按下了Ctrl键; CBool(Shift And vbCtrlMask) Or CBool(Shift And vbShiftMask)为真, 按下了Ctrl键和Shift键 (3) x,y:鼠标的当前位置 例7.13 显示鼠标器指针所指的位置。 例7.14 画圆程序。 按下鼠标右键画圆,按下鼠标左键移动时画线。 在画线时用note14.ico作为鼠标的指针。
Sub Form_KeyDown(keycode As Integer, shift As Integer) 2. 键盘事件 KeyPress事件过程 Sub Form_KeyPress(KeyAscii As Integer) Sub object_KeyPress([index As Integer,]KeyAscii As Integer) KeyDown事件过程 Sub Form_KeyDown(keycode As Integer, shift As Integer) Sub object_KeyDown([index As Integer,]keycode As Integer, shift As Integer) KeyUp和KeyDown事件过程 Sub Form_KeyUp(keycode As Integer, shift As Integer) Sub object_KeyUp([index As Integer,]keycode As Integer, 参数说明 Shift与鼠标事件过程Shift相同。 KeyCode:键盘扫描码; KeyAscii:字符ASCII码。
区别 KeyPress KeyDown和KeyUp 事件发生的时间 输入一个ASCII字符 按任意一个键 参数值 KeyAscii接收到 KeyCode接收到 键的扫描码 按Shift+A时 事件发生的次数 事件发生一次 事件发生两次 按Shift+A时参数值 (键盘处于大写状态) 97 第一次是16 第二次是65 (键盘处于小写状态) 65
例7.15 编写一个程序,当按下Alt+F5时终止程序的运行。 '先把窗体的KeyPreview设置为True,再编写如下的程序: Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) '按下Alt键时,Shift的值为4 If (KeyCode = vbKeyF5) And (Shift = 4) Then End End If End Sub
例7.16 “锤打红心”游戏 Image1 Image2 (1) 利用上、下、左、右四个箭头键控制“铁锤” : “”:37(&H25) “”:38(&H26) “”:39(&H27) “”:40(&H28) (2) 如果Abs(Image1.Left - Image2.left < 300) And Abs(Image1.Top - Image2.Top < 320)成立,则认为是重叠,“铁锤”锤打到“红心”。 (3) 在窗体上的时钟控件(Timer1)过程中控制“红心”移动。Timer1的Interval属性为200,即每1秒产生5个Timer事件。
本周习题 Pg143:第2、3、4、5题 Pg173:第1题