《vb编程技术》过程.ppt

上传人:za****8 文档编号:16088113 上传时间:2020-09-18 格式:PPT 页数:125 大小:1.09MB
返回 下载 相关 举报
《vb编程技术》过程.ppt_第1页
第1页 / 共125页
《vb编程技术》过程.ppt_第2页
第2页 / 共125页
《vb编程技术》过程.ppt_第3页
第3页 / 共125页
点击查看更多>>
资源描述
第8章 过程,8.1 Sub过程 8.2 Function过程 8.3 参数传递 8.4 键盘与鼠标事件过程 习题八,8.1 Sub 过 程,8.1.1 事件过程与通用过程 1. 事件过程 事件过程由VB自行声明,用户不能增加或删除。 当用户对某个对象发出一个动作时,Windows会通知VB产生了一个事件,VB会自动地调用与该事件相关的事件过程。,控件事件过程的语法为 Private Sub控件名_事件名(形参表) 语句组 End Sub 窗体事件过程的语法为: Private Sub Form_事件名(形参表) 语句组 End Sub,图8.1 “代码编辑器”窗口,图8.2 设置对象的Name属性,2. 通用过程 通用过程不与任何特定的事件相联系,只能由别的过程来调用,它可以存储在窗体或标准模块中。,8.1.2 通用过程的创建 1. 在“代码”编辑窗口中输入 在“代码”编辑窗口中,把光标定位在已有过程的外面。然后按如下格式输入通用过程: Private | Public Static Sub过程名( 形参表 ) 语句列 Exit Sub 语句列 End Sub,2. 使用“添加过程”对话框 使用“添加过程”对话框建立过程的方法为 (1) 打开要添加过程的代码编辑窗口。 (2) 执行“工具”菜单中的“添加过程”命令, 打开“添加过程”对话框, 如图8.3所示。 (3) 在“名称”文本框中输入过程名。从“类型”组中选择过程类型。从“范围”组中选择范围,相当于使用Public或Private关键字。 (4) 单击“确定”按钮,在代码窗口中显示情况如图8.4所示。,图8.3 “添加过程”对话框,图8.4 代码编辑窗口,8.1.3 通用过程的调用 每次调用过程都会执行Sub和End Sub之间的语句列。Sub过程以Sub开始,以End Sub结束。当程序遇到End Sub时,退出过程,立即返回到调用语句的后续语句。 调用过程有诸多技巧,它们与过程的类型、位置以及在应用程序中的使用方式有关。,调用Sub过程有两种方法: (1) 使用Call语句:Call过程名( 实参表 ) (2) 直接使用过程名:过程名实参表,【例8-1】 编写一个计算矩形面积的Sub过程,然后调用该过程计算矩形面积。 设计步骤如下: (1) 建立应用程序用户界面并设置对象属性,如图8.5所示。,图8.5 建立计算矩形面积的用户界面,(2) 在代码窗口中直接输入通用事件代码。 Sub recarea(rlen, rwid) Dim area area = rlen * rwid 计算矩形面积 MsgBox 矩形的面积是: 定位 Print stri(15 - 2 * n, f); 输出左半部分 Print Spc(8); 左右两部分间的间隔 Print stri(2 * n - 1, f); 输出右半部分 Print 换行 Next End Sub,8.2.3 查看过程 1. 查看当前模块中的过程 为了查看现有的通用过程或Function过程,在“代码编辑器”窗口的对象框中选择“通用”,然后在过程框中选择过程名。,2. 查看其他模块中的过程 在“视图”菜单中选取“对象浏览器”,在“工程/库”框中选择工程,在“类/模块”列表中选择模块,并在“成员”列表中选择过程,单击“查看定义”按钮,即可调出相应的代码,如图8.15所示。,图8.15 查看其他模块中的过程,8.3 参 数 传 递,调用过程的目的,就是在一定的条件下完成某一工作或计算某一函数值。外界要把条件告诉过程,反过来,过程要把某些结果报告给外界,这就是过程与外界的数据传递。 过程与外界的数据传递有两种方式: (1) 通过非局部变量。 (2) 通过参数。,8.3.1 形式参数与实际参数 形式参数是在Sub、Function过程的定义中出现的变量名;实际参数则是在调用Sub、Function过程时传送给Sub、Function过程的常数、变量、表达式或数组。 1. 形参表 形参表中的各个变量之间用逗号分隔,形参可以是后面跟有左、右圆括号的数组名或除定长字符串之外的合法变量名。,2. 实参表 实参表中的各项用逗号隔开,实参可以是常量,表达式,合法的变量名或后面跟有左、右括号的数组名。 3. 形参与实参的对应关系 形参与实参的对应关系为 在定义过程时,形参为实参保留位置。在调用过程时,实参被插入形参中的各变量处,第一个形参接收第一个实参的值,第二个形参接收第二个实参的值,8.3.2 传值与传址 在调用过程时,一般调用过程与定义过程之间有数据传递,即将调用过程的实参传递给定义过程,完成实参与形参的结合,然后执行调用过程。,1. 传址 传址就是让过程根据变量的内存地址去访问实际变量的内容,即形参与实参使用相同的内存地址单元,这样通过子过程就可以改变变量本身的值。 在传址调用时,实参必须是变量,常量或表达式无法传址。,【例8-9】 传址调用示例。 现在有下面的通用过程: Sub tryout(x As Integer, y As Integer) x = x + 100 在子程序中改变变量的值 y = y * 6 在子程序中改变变量的值 Print x=; x, y=; y 在子程序中输出变量的值 End Sub,窗体Form的Click事件代码如下: Private Sub Form_Click() Dim a As Integer, b As Integer a = 10 在主程序中变量的原值 b = 20 在主程序中变量的原值 tryout a, b 传址调用 Print a=; a, b=; b 在主程序中输出变量的值 End Sub,图8.16 传址调用,2. 传值 当要求变量按值传送时,可以用下面的方法: (1) 把变量变成一个表达式。 (2) 定义过程时用ByVal关键字指出参数是按值来传递的,例如: Sub PostAc( ByVal x As Integer ) x = x + 1 这里放语句 End Sub,【例8-10】 传值调用示例。 将前面例8-9改用传值方式编写通用过程,则运行结果是不一样的。改为传值方式的通用过程如下: Sub tryout(ByVal x As Integer, ByVal y As Integer) x = x + 100 在子程序中改变变量的值 y = y * 6 在子程序中改变变量的值 Print x=; x, y=; y 在子程序中输出变量的值 End Sub 窗体Form的Click事件代码与例8-9相同。 程序运行后,输出结果如图8.17所示。,图8.17 传值调用,8.3.3 使用参数 1. 使用可选的参数 在过程的形参表中列入Optional关键字,就可以指定过程的形参为可选的。如果指定某一参数可选,则此参数后面的其他参数也必是可选的,并且每个参数都要用Optional关键字来声明。,【例8-11】 可选参数示例。使两个命令按钮的事件代码调用同一个过程,一个传递一个参数,而另一个传递两个参数,如图8.18所示。,图8.18 使用可选参数示例,Sub过程ListText将传递过来的参数值添加到列表框中,其中第2个参数使用Optional关键字,该过程的代码为 Private Sub ListText(x As String, Optional y As String) If IsMissing(y) Then 用IsMissing函数测试丢失的可选参数 temp = Format(x, ) Else temp = Format(x, ) 输出各数组元素的值 Next i End Sub,编写窗体Form的Click事件代码为 Private Sub Form_Click() ReDim values(1 To 10) As Integer Call changarray(1, 10, values() 调用通用过程changarray Call printarray(1, 10, values() 调用通用过程printarray End Sub 程序运行结果如图8.21所示。,图8.21 数组参数的传送,2. 传递数组中的单个元素 如果不需要把整个数组传送给通用过程,可以只传送指定的单个元素,这需要在数组名后面的括号中写上指定元素的下标。,【例8-15】 传送数组中的单个元素示例。 在窗体层声明如下数组: Dim test_array() As Integer 编写如下通用过程: Static Sub sqval(a) a = Sqr(Abs(a) 求某数绝对值的平方根 End Sub 编写窗体Form的Click事件代码为,Private Sub Form_Click() ReDim test_array(1 To 3, 1 To 4) 定义数组 test_array(2, 3) = -100 为数组test_array中的第2行第3列元素赋值-100 Print test_array(2, 3) 输出数组元素test_array(2, 3)的值 Call sqval(test_array(2, 3) 调用通用过程,Print test_array(2, 3) 调用通用过程后,输出test_array(2, 3)的值 End Sub 程序运行结果如图8.22所示。,图8.22 数组中单个元素的参数传递,LBound和UBound函数常用来确定传送给过程的数组大小。用LBound函数可以求出数组的最小下标值,而用UBound函数可以求出数组的最大下标值,这样就能确定传给过程的数组中各维的上下界。,【例8-16】 编写一个Function过程,求数组的最大值。 求数组最大值的通用过程如下: Private Function findmax(a() As Integer) Dim start As Integer, finish As Integer, i As Integer start = LBound(a) 求出数组的下标下界 finish = UBound(a) 求出数组的下标上界,max = a(start) 赋初值 For i = start To finish 依次判断各元素值 If a(i) max Then max = a(i) 求最大的数组元素值 Next i findmax = max 返回函数值 End Function,该过程先求出数组的上界和下界,然后从整个数组中找出最大值,过程中的数组是一个形式参数,可以在下面的事件过程中调用该过程: Private Sub Form_Click() ReDim b(4) As Integer b(1) = 100 各元素赋值 b(2) = 200 b(3) = 150 b(4) = 50,c = findmax(b() 调用函数过程求最大值 Print Print 数组的最大值是:; c End Sub 程序执行后,单击窗体,输出结果如图8.23所示。,图8.23 求数组的最大值,8.4 键盘与鼠标事件过程,8.4.1 键盘事件 键盘事件是指能够响应各种按键操作的KeyDown、KeyUp及KeyPress事件,通过编写键盘事件的代码,可以响应和处理大多数的按键操作,解释并处理ASCII字符。,1. KeyPress事件 KeyPress事件当用户按下和松开一个ASCII字符键时发生。该事件被触发时,被按键的ASCII码将自动传递给事件过程的KeyAscii参数。,【例8-17】 编写如图8.24所示的能显示按键及其ASCII码的程序。其中,在Text2中显示按键的ACSII码,Text3中显示按键。,图8.24 KeyPress事件接受的按键,编写程序代码如下: 复选框的Click事件代码为 Private Sub Check1_Click() Text1.SetFocus End Sub 文本(输入)框Text1的KeyPress事件代码为 Private Sub Text1_KeyPress(KeyAscii As Integer) Text2.Text = KeyAscii,Select Case KeyAscii Case 0 To 7, 9 To 12, 14 To 26, 28 To 31 Text1.Text = Text3.Text = Ctrl+ & Chr(64 + KeyAscii) Case 8 Text3.Text = Ctrl+ & Chr(64 + KeyAscii) & 或 退格键 Case 13 Text1.Text = ,Text3.Text = Ctrl+ & Chr(64 + KeyAscii) & 或 回车键 Case 27 Text1.Text = Text3.Text = Ctrl+ & Chr(64 + KeyAscii) & 或 Esc键 Case Else Text3.Text = Chr(KeyAscii),End Select If Check1.Value = 0 Then KeyAscii = 0 取消“回显”,输入框不显示刚按下的键 End If End Sub,2. KeyDown和KeyUp事件 KeyDown和KeyUp事件是当一个对象具有焦点时按下或松开一个键时发生的。当控制焦点位于某对象上时,按下键盘中的任意一键,则会在该对象上触发产生KeyDown事件,当释放该键时,将触发产生KeyUp事件,之后产生KeyPress事件。其语法格式为 Private Sub 对象名_KeyDown(KeyCode As Integer, Shift As Integer) Private Sub 对象名_KeyUp(KeyCode As Integer, Shift As Integer),【例8-18】 测试功能键与控制键。结合图8.25阅读下面的程序代码。其中,Text2中显示按键接受的KeyCode参数,Label1(2)的Visible设为False。 图形方式的复选框Check1、Check2和Check3分别表示Shift、Ctrl和Alt键。,图8.25 测试功能键与控制键,文本(输入)框Text1的Keydown事件代码为 Private Sub Text1_Keydown(KeyCode As Integer, Shift As Integer) Text2.Text = Text2.Text & Str(KeyCode) & , If KeyCode 111 And KeyCode 124 Then Label1(2).Caption = 你刚才按了功能键: & F & Str(KeyCode - 111) Label1(2).Visible = True Else,Label1(2).Visible = False End If Check1.Value = IIf(Shift And vbShiftMask) 0, 1, 0) Check2.Value = IIf(Shift And vbCtrlMask) 0, 1, 0) Check3.Value = IIf(Shift And vbAltMask) 0, 1, 0) End Sub 命令按钮(清除)Command1 的 Click事件代码为,Private Sub Command1_Click() Text1.Text = Text2.Text = Text1.SetFocus End Sub,8.4.2 鼠标事件 在前面的例子中曾多次使用鼠标事件,即单击(Click)事件和双击(DblClick)事件,这些事件是通过快速按下并松开鼠标键而产生的。,1. MouseDown和MouseUp事件 MouseDown和MouseUp事件当按下(MouseDown)或者释放(MouseUp)鼠标按钮时发生。其语法为 Private Sub 对象名_MouseDown(button As Integer, shift As Integer, x As Single, y As Single) Private Sub 对象名_MouseUp(button As Integer, shift As Integer, x As Single, y As Single),2. MouseMove事件 MouseMove 事件在移动鼠标时发生。其语法格式为 Private Sub 对象名_MouseMove(button As Integer, shift As Integer, x As Single, y As Single),3. 自定义鼠标指针 在VB中,可以通过属性设置来改变鼠标指针的形状。鼠标指针的改变可以告知用户诸多信息,例如,正在进行长时间的后台任务,调整某个控件或窗口的大小,某控件不支持拖放操作等等。,8.4.3 拖放 在可视化编程的步骤中,第一步就是在窗体上摆放一些控件,这样的操作常常是使用鼠标在窗体上拖放控件。拖放操作其实包括两个操作:拖与放。,1. 拖放属性 与拖放有关的属性有DragMode和DragIcon。 1) DragMode属性 DragMode属性用来设置自动或手工拖放模式,取值为0或1,默认值为0(手工拖放)。该属性可以在属性窗口中设置,也可以在过程代码中设置。 若对象的DragMode属性为1,则该对象不再接收Click事件和MouseDown事件。 2) DragIcon属性 DragIcon属性指定拖动控件时显示的图标。,2. 拖放事件 与拖放有关的事件有DragOver(拖)和DragDrop(放)。 1) DragOver事件 该事件当拖动对象越过一个控件时发生,其格式为 Private Sub控件名_DragOver(Source As Control, X As Single, Y As Single, State As Integer),表8-1 参数State的取值,2) DragDrop事件 该事件当对象被拖到目标位置松开鼠标键后发生,其格式为 Private Sub Command1_DragDrop(Source As Control, X As Single, Y As Single) 其中,参数含义同DragOver事件。,3. 拖放方法 与拖放有关的方法是Drag,其语法格式为 对象.Drag action,表8-2 参数action的描述,习 题 八,8.1 用一个通用过程处理三个按钮的单击事件。要求:在一个窗口中包含三个命令按钮,当用户单击其中一个时,其他个别按钮不能使用。 8.2 编写输入一个06之间的整数,显示汉英对照输出星期的Function过程。 8.3 利用用户定义函数,编制求任意数的立方数的函数,然后求120的立方数。,8.4 编制随机整数函数,产生30个1100之内的随机数。 8.5 计算阶乘3!、5!、6!,以及其和3! + 5! + 6!。 8.6 编写计算圆面积的通用函数过程。 8.7 编写求直角三角形斜边长的通用函数过程。 8.8 编制求两数中较大数的Function过程,利用该函数过程求3个数的最大数。 8.9 编制判断是否同时被3、5、7整除的Function过程。输出11000之间所有能同时被3、5、7整除的数。,8.10 大圆的半径是10 cm,在它上面分别剪下半径分别是3 cm和5 cm的小圆,求大圆剩下来那部分的面积。 8.11 编写求两数最大公约数的Function过程。在主程序中输入3个整数,调用Function过程求出3个整数的最大公约数。 8.12 移动数组元素。它能将数组中某个位置的元素移动到指定位置。 8.13 编制判断奇偶数的Function过程。输入一个整数,判断其奇偶性。,8.14 向数组添加元素。将新添加的元素放到数组的最后位置。 8.15 向数组中的指定位置插入新元素,即将新添加的元素放到数组的指定位置。 8.16 删除数组中指定位置的元素。 8.17 随机产生3组整数,并求出每组的最大数。,8.18 编写程序,实现英语单词或短语的加密/解密操作。加密/解密的基本原则是:把英语单词或短语中每个字符的ASCII码加上2,使其变为另外一个字符。例如“ABCDE”,每个字符的ASCII码加2,变为“CEDFG”,从而对原来的单词或短语“加密”。 8.19 编制判断素数的Sub过程或Function过程,验证哥德巴赫猜想:一个不小于6的偶数可以表示为两个素数之和。例如:6 = 3 + 3,8 = 3 + 5,10 = 3 + 7,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!