VB程序设计语言 主讲教师:王 杨
思考 编写过程,对任意班级成绩进行降序排序。 你是如何给定这20名同学成绩的? 不足 你的统计结果以何种方式输出的? 通过随机函数产生 For i = 1 To 20 score(i) = Int(Rnd * 101) Next i 你的统计结果以何种方式输出的? 由键盘输入 For i = 1 To 20 score(i) = Int(InputBox("请输入成绩")) Next i 与同学实际成绩不相符 每次运行,需重新输入, 效率低 编程人员工作量大,程序 应用面窄 在窗体直接输出 Print Spc(8); "统计结果" Print "90~100"; Tab(10); "60~89"; Tab(20); "0~59" Print yx & "人"; Tab(10); hg & "人"; Tab(20); bjg & "人" 在程序中给定 score = Array(89, 56, 87, 90, 57, 66, 46, 88, 69, _ 85, 67, 80, 45, 56, 76, 80, 81, 73, 80, 74)
文件操作步骤 打开 读/写 关闭
顺序文件 1、文件打开 Open 文件名 [For模式] As [#]文件号 For Input :顺序文件读 For Output :顺序文件替换写 For Append :顺序文件追加写 文件号:1~511 例子
1.Input#语句 格式:Input #文件号,变量表 功能:把读出的每个数据项分别存放到所对应的变量 2.Line Input #语句 格式:Line Input #文件号,字符串变量 功能:读一行到变量中,主要用来读取文本文件。 3.Input$函数 格式:Input$(n,#文件号) 功能:从“文件号”所指定的顺序文件中读出n个字符
写操作 Print Write Print #文件号表达式表 Write #文件号,表达式表 Write #1, "One", "Two", 123 Print #1, "One", "Two", 123
【例】用Windows自带的“记事本”程序创建一个顺序文件data 【例】用Windows自带的“记事本”程序创建一个顺序文件data.dat。该文件内包含若干整型数据,各数据间用空格分开。编写一个程序,找出该文件中的最大值、最小值和平均值,并写入该文件。
Private Sub Form_Click() Dim max%, min%, aver Private Sub Form_Click() Dim max%, min%, aver!, count%, n%, sum% count = 1: sum = 0 Open "f:\data.dat" For Input As #1 Input #1, max min = max While Not EOF(1) Input #1, n If n > max Then max = n If n < min Then min = n count = count + 1: sum = sum + n Wend Close #1 Open "f:\data.dat" For Append As #1 Print #1, "最大值"; max, "最小值"; min, "平均值"; sum / count End Sub
程序界面如下,代码不完整,只有一个函数过程isprime(a)可以在程序中直接调用,其功能是判断参数a是否为素数,如果是素数,则返回True,否则返回False。请编写适当的事件过程,使得在运行时,单击“输入”按钮,就把文件in5.txt中的整数放入Text1中;单击“计算”按钮,则找出大于Text1中的整数的第1个素数,并显示在Text2中;单击“存盘”按钮,则把Text2中的计算结果存入out5.txt文件中。
能否自己选择要打开的文件呢?
编写适当的程序,使得三个文件系统控件可以同步变化,即当驱动器列表框中显示的内容发生变化时,目录列表框和文件列表框中显示的内容同时发生变化。单击文件列表框时,将选择的文件名显示在标签中。
文件控件 控件名 属性 属性描述 事件 事件描述 DriveListBox 驱动器列表框 Drive 字符串,设置所选择的驱动器名。 只能用程序代码设置,不能通过属性窗口设置。 Change 当驱动器发生改变时被触发 Sub Drive1_Change() Dir1.Path = Drive1.Drive End Sub DirListBox 目录列表框 Path 字符串,设置当前目录(文件夹)的路径。 当文件夹或目录发生改变时被触发 Sub Dir1_Change() File1.Path = Dir1.Path
文件控件 控件名 属性 属性描述 事件 事件描述 FileListBox 文件列表框 Path 与目录列表框同。 Click 当文件列表框中的某一文件被单击时触发 Pattern 设置在执行时要显示的某一种类型的文件,它可以在设计阶段从属性窗口设置,也可以通过程序代码设置。 FileName 用来在文件列表框中设置或返回某个选定的文件名称。
思 考 程序的功能是:通过键盘向文本框中输入数字,如果输入的是非数字字符,则提示错误,且文本框中不显示输入的字符。单击名称为Command1、标题为“添加”的命令按钮,则将文本框中的数组添加到名称为Combo1的组合框中。
窗体中若有其他可获得焦点的对象,则需设置窗体的KeyPreview属性为True,窗体才会响应KeyPress事件 键盘与鼠标事件过程 KeyPress事件的一般格式 Sub 对象名_KeyPress(KeyAscii As Integer) …… End Sub 按下键的ASCII码值 KeyPress事件是在压下键盘上的某个具有ASCII码的键时触发的,该事件可用于窗体、复选框、组合框、命令按钮、列表框、图片框、文本框、滚动条及与文件有关的控件。当按下某个键时,所触发的是拥有输入焦点(Focus)的那个控件的KeyPress事件。 窗体中若有其他可获得焦点的对象,则需设置窗体的KeyPreview属性为True,窗体才会响应KeyPress事件
KeyDown和KeyUp事件 …… End Sub Sub 对象名_KeyDown(KeyCode As Integer, Shift As Integer) …… End Sub (1)KeyCode参数 当按下键盘上的某个按键时,此参数反应该键的键盘编码而不是其ASCII码。具体为:大键盘上的字母键,返回的是对应大写字母的ASCII值;有上、下档字符的键,返回的是下档字符的ASCII值。同时,大、小键盘的数字键KeyCode值不同。 (2)Shift参数 它是一个整数,包括Shift、Ctrl和Alt的状态。默认为0,按下Shift时取值加1;按下Ctrl时取值加2;按下Alt时取值加4
鼠标事件 一、鼠标事件 Sub 对象名_鼠标事件(Button As Integer, _ Shift As Integer,x As Single,y As Single) 压下鼠标键事件过程 MouseDown 松开鼠标键事件过程 MouseUp 移动鼠标光标事件过程 MouseMove 1)Button 为按下的鼠标键。 2)Shift Shift、Ctrl、Alt键的状态。 3)x、y 鼠标光标的当前位置坐标。 第48套第3题
二、鼠标位置 鼠标位置由x、y参数确定,x、y不需要给出具体的数值,其值随鼠标光标在窗体或控件上的移动而变化,(x、y)通常指接收鼠标事件的窗体或控件上的坐标。 三、鼠标键状态 键 默认 左键 右键 中键 Button 1 2 4
思考 例: Private Sub Form_Load() Dim n% n= 10 End Sub Private Sub Form_Click() Print “n=“;n 程序运行后单击窗体,其输出结果是什么?
变量的作用域 1 局部变量 (过程变量) 2 模块变量(窗体/标准模块) 3 全局变量
静态局部变量 窗体模块变量 Private Sub Form_Click() Dim n As Integer n = n + 1 Print n & "次" End Sub Dim n As Integer Private Sub Form_Click() n = n + 1 Print n & "次" End Sub 窗体模块变量 Static 静态局部变量 Private Sub Form_Click() Static n As Integer n = n + 1 Print n & "次" End Sub
1 局部变量 2 模块变量(窗体/标准模块) 3 全局变量 (过程变量) 2 模块变量(窗体/标准模块) 3 全局变量 Dim n as integer Private Sub Form_Load() Dim n% n= 10 End Sub Private Sub From_Click() Print “n=“;n 程序运行后单击窗体,其输出结果是什么? 位置 :过程内部 作用域:过程内部 关键字:Dim Static 位置 :模块的通用处 作用域:模块的任何过程访问 关键字:Dim Private 位置:标准模块通用处 作用域:整个应用程序 关键字:Public Global
例 题 在窗体上画一个名称为Command1的命令按钮,然后编写如下事件过程: Private Sub Command1_Click() Static x As Integer Cls For i=1 To 2 y=y+x x=x+2 Next Print x,y End Sub 程序运行后,连续三次单击Command1按钮后,窗体上显示的是 A) 4 2 C) 12 30 D) 4 6 B) 12 18
例 题 在窗体上画一个名称为Commandl的命令按钮,然后编写如下程序: Private Sub Command1_Click() Static X As Integer Static Y As Integer Cls Y=1 Y=Y+5 X=5+X Print X,Y End Sub 程序运行时,三次单击命令按钮Commandl后,窗体上显示的结果为 A) 15 16 C) 15 15 D) 5 6 B) 15 6
Thank You !