《北京电大VisualBasic程序设计第4章VB高级语言技巧.ppt》由会员分享,可在线阅读,更多相关《北京电大VisualBasic程序设计第4章VB高级语言技巧.ppt(98页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Visual Basic程序设计程序设计第第 4 4 章章 VBVB高级语言技巧高级语言技巧14.1 4.1 多功能计算器任务多功能计算器任务4.1.1 4.1.1 任务描述任务描述在第三章简单计算器的基础,增加以下功能:在第三章简单计算器的基础,增加以下功能:1.1.将计算结果转换为十六进制。将计算结果转换为十六进制。2.2.就数字键设置为命令按钮组,使就数字键设置为命令按钮组,使“0”“0”“9”“9”数字按键的数字按键的IndexIndex属性分别为属性分别为0 0、1 1、2 2、3 3、4 4、5 5、6 6、7 7、8 8、9 9。3.3.禁止键盘在文本框中输入数据。禁止键盘在文本
2、框中输入数据。4.4.使计算器总是悬浮在其它窗体上。使计算器总是悬浮在其它窗体上。界面如下页所示。界面如下页所示。234.1.2 界面设计界面设计1.1.添加添加“十六进制十六进制”和和“数字大写数字大写”两个文本框,分别两个文本框,分别命名为命名为txtHextxtHex和和txtBigtxtBig。2.2.删除原来的删除原来的“0”“0”“9”“9”数字按钮控件,并重新放置数字按钮控件,并重新放置一个命令按钮控件,将其一个命令按钮控件,将其CaptionCaption属性设置为属性设置为“0”“0”。3.3.复制该数字命令按钮。复制该数字命令按钮。4.4.在数字区框架控件上,粘贴该数字命令
3、按钮,系统询在数字区框架控件上,粘贴该数字命令按钮,系统询问是否创建一个控件数组,回答问是否创建一个控件数组,回答“是是”。将它的。将它的CaptionCaption属性改为属性改为“1”“1”,IndexIndex属性值设置为属性值设置为1 1。按照上述方法粘贴数字按钮控件按照上述方法粘贴数字按钮控件“2”“2”“9”“9”。5 5、此时得到一、此时得到一 个按钮控件数组个按钮控件数组“0”“0”“9”“9”,它们的,它们的IndexIndex书香依次为书香依次为“0”“0”“9”“9”。6 6、将、将TxtBigTxtBig的的ToolTipTextToolTipText属性设置为属性设置
4、为“大写数字大写数字”。44.1.3 代码设计代码设计1.1.用用APIAPI函数实现函数实现“总在前面总在前面”效果效果(1 1)程序代码)程序代码在代码编辑器的在代码编辑器的“通用通用”部分声明部分声明SetWindowPosSetWindowPos函数及相关函数及相关常数:常数:Private Declare Function SetWindowPos Lib user32 _(ByVal hwnd As Long,ByVal hWndInsertAfter As Long,_ ByVal x As Long,ByVal y As Long,ByVal cx As Long,_ ByVa
5、l cy As Long,ByVal wFlags As Long)As Long Private Const HWND_TOPMOST=-1 Private Const SWP_NOMOVE=&H2 Private Const SWP_NOSIZE=&H1然后在然后在Form的的Load事件中加入以下代码:事件中加入以下代码:SetWindowPos hwnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE Or SWP_NOSIZE5(1)API函数调用的一般方法函数调用的一般方法要在要在VBVB中使用中使用APIAPI函数,首先要在工程的标准模函数,首先要在工程的标准模块
6、(块(ModuleModule)或窗体的代码的)或窗体的代码的“通用通用”部分中部分中声明它,然后可以按照调用声明它,然后可以按照调用VBVB其它函数一样来其它函数一样来使用它。获得函数声明的一般方法:使用它。获得函数声明的一般方法:在安装在安装VBVB系统后,通常会在系统后,通常会在VBVB程序组中看到程序组中看到“API“API文本浏览器文本浏览器”的应用程序。的应用程序。步骤如下:步骤如下:沿沿 开始开始-程序程序-Microsoft Visual Studio-Microsoft Visual Studio 6.0-Microfoft Viaual Stodio 6.0 6.0-Mic
7、rofoft Viaual Stodio 6.0 Tools-API Text WiewerTools-API Text Wiewer找到找到APIAPI浏览器。浏览器。67第第第第1 1 1 1步:启动步:启动步:启动步:启动“API“API“API“API文本浏览器文本浏览器文本浏览器文本浏览器”89第第第第2 2 2 2步:选择步:选择步:选择步:选择“文件文件文件文件-加载文本文件加载文本文件加载文本文件加载文本文件”菜单项菜单项菜单项菜单项10加载加载加载加载WinAPI.txtWinAPI.txt文件。文件。文件。文件。11第第第第3 3 3 3步:选择步:选择步:选择步:选择AP
8、IAPIAPIAPI类型:声明类型:声明类型:声明类型:声明12第第第第4 4 4 4步:选择立刻用项步:选择立刻用项步:选择立刻用项步:选择立刻用项SetWindowPosSetWindowPosSetWindowPosSetWindowPos,将声明范,将声明范,将声明范,将声明范围设置为围设置为围设置为围设置为“私有私有私有私有”。13按添加按钮。按添加按钮。按添加按钮。按添加按钮。14第第第第5 5 5 5步:就选定项下的步:就选定项下的步:就选定项下的步:就选定项下的VBVBVBVB代码复制代码复制代码复制代码复制15第第第第5 5 5 5步:将复制的步:将复制的步:将复制的步:将复
9、制的VBVBVBVB代码粘贴到窗体代码编辑器代码粘贴到窗体代码编辑器代码粘贴到窗体代码编辑器代码粘贴到窗体代码编辑器中的中的中的中的“通用通用通用通用-声明声明声明声明”部分。部分。部分。部分。16习题习题 P115 一、单项选择题2.能够实现能够实现“窗体总在最前端窗体总在最前端”界面效果界面效果的的API函数是(函数是()。)。A.SetWindowPosB.SetWindowAPIC.SetWindowShapeD.DeclareAPI答案:答案:A172.数字区命令按钮的数字区命令按钮的Click事件事件Private Sub Command1_Click(Index As Integ
10、er)使用使用Str函数将函数将Index转换为字符串,然后使用转换为字符串,然后使用Trim函数去掉前后空格函数去掉前后空格 If txtLabel.Text=Then txtFirst.Text=txtFirst.Text+Trim(Str(Index)Else txtSecond.Text=txtSecond.Text+Trim(Str(Index)End IfEnd Sub183.禁止用户在文本框中输入数字禁止用户在文本框中输入数字Private Sub txtResult_KeyDown(KeyCode As Integer,Shift As Integer)KeyCode=0 禁止
11、所有的键盘输入(除禁止所有的键盘输入(除BackSpace退格键外)退格键外)End SubPrivate Sub txtResult_KeyPress(KeyAscii As Integer)KeyAscii=0 禁止禁止BackSpace退格键退格键End Sub19习题习题 P116 二、填空题二、填空题1.通常可将文本框控件的通常可将文本框控件的 属性设置属性设置为为True,以禁止键盘输入。,以禁止键盘输入。答案:答案:Locked204.修改修改“计算结果计算结果”按钮的按钮的Click事件代码事件代码“计算结果计算结果”命令按钮的命令按钮的Click事件事件Private Sub
12、 Command17_Click()定义一个定义一个Double类型的变量类型的变量 Dim MyResult As Double 以以txtLable.Text的值为多重分支条件的值为多重分支条件 Select Case txtLabel.Text Case+当当txtLabel.Text的值为的值为+时时 MyResult=Val(txtFirst.Text)+Val(txtSecond.Text)Case-当当txtLabel.Text的值为的值为-时时 MyResult=Val(txtFirst.Text)-Val(txtSecond.Text)Case 当当txtLabel.Text
13、的值为的值为时时 MyResult=Val(txtFirst.Text)*Val(txtSecond.Text)Case 当当txtLabel.Text的值为的值为时时 MyResult=Val(txtFirst.Text)/Val(txtSecond.Text)End Select 214.修改修改“计算结果计算结果”按钮的按钮的Click事件代码事件代码txtResult.Text=MyResult 显示计算结果显示计算结果 将计算结果转换为十六进制数字将计算结果转换为十六进制数字 txtHex.Text=Hex(MyResult)将计算结果转换为大写数字,(采用函数功能完成)将计算结果转
14、换为大写数字,(采用函数功能完成)txtBig.Text=ChangeMe(MyResult)End Sub225.编写编写ChangeMe函数代码函数代码Private Function ChangeMe(First As Double)As String 声明变量声明变量 Dim strFirst As String Dim strBig(9)As String 声明一个字符串数组声明一个字符串数组 Dim strTemp As String Dim i,j As Integer 设置数组变量的值设置数组变量的值 strBig(0)=零零:strBig(1)=壹壹:strBig(2)=贰贰
15、:_ strBig(3)=叁叁:strBig(4)=肆肆:strBig(5)=伍伍:_ strBig(6)=陆陆:strBig(7)=柒柒:strBig(8)=捌捌:strBig(9)=玖玖235.编写编写ChangeMe函数代码函数代码将将Double型的参数型的参数First转换为字符串型转换为字符串型 strFirst=Trim(Str(First)strTemp=开始数字转换开始数字转换 For i=1 To Len(strFirst)取出第取出第i位的字符数字,并将它转换为数值型位的字符数字,并将它转换为数值型 j=Val(Mid(strFirst,i,1)通过数组完成大写转换通过数
16、组完成大写转换 strTemp=strTemp+strBig(j)Next i 将转换结果返回将转换结果返回 ChangeMe=strTemp End Function (演示)(演示)24习题习题 P116 三、问答题三、问答题5.请简述多功能计算器与第请简述多功能计算器与第3章计算器在功能上的章计算器在功能上的区别。区别。答:区别有以下几点:答:区别有以下几点:1 1)能将计算结果转换为十六进制。)能将计算结果转换为十六进制。2 2)将数字键设置为命令按钮组,使将数字键设置为命令按钮组,使“0”“0”“9”“9”数字按键的数字按键的IndexIndex属性分别为属性分别为0 0、1 1、2
17、 2、3 3、4 4、5 5、6 6、7 7、8 8、9 9。用按键的。用按键的IndexIndex来识别输入的数字。来识别输入的数字。3 3)禁止键盘在文本框中输入数据。)禁止键盘在文本框中输入数据。4 4)使计算器总是悬浮在其它窗体上。)使计算器总是悬浮在其它窗体上。254.2 数组的使用数组的使用4.2.1 数组数组1.数组的概念数组的概念 VB把一组具有同一名字、不同下标的变量称为数组,它把一组具有同一名字、不同下标的变量称为数组,它实际上是一组具有相同类型的变量的集合。根据下标实际上是一组具有相同类型的变量的集合。根据下标的个数可分为一维数组、二维数组、多维数组。的个数可分为一维数组
18、、二维数组、多维数组。例如:例如:设置数组变量的值设置数组变量的值 strBig(0)=零零:strBig(1)=壹壹:strBig(2)=贰贰:_ strBig(3)=叁叁:strBig(4)=肆肆:strBig(5)=伍伍:_ strBig(6)=陆陆:strBig(7)=柒柒:strBig(8)=捌捌:strBig(9)=玖玖262.声明静态数组声明静态数组数组分为静态数组和动态数组。定义静态数组的方数组分为静态数组和动态数组。定义静态数组的方法与变量的声明方法基本相同。有两种声明方法:法与变量的声明方法基本相同。有两种声明方法:(1 1)方法)方法1 1Dim Dim 数组名(上界)数
19、组名(上界)As As 数据类型数据类型这种定义方法,默认情况下数组的下界从这种定义方法,默认情况下数组的下界从0 0开始,开始,因此数组元素的个数等于上界因此数组元素的个数等于上界+1+1。数组的全部元。数组的全部元素都初始化为素都初始化为0 0(数值型)或空字符串(字符串(数值型)或空字符串(字符串型)例如定义一维数组:型)例如定义一维数组:Dim A Dim A(5 5)As Integer As Integer数组数组A A包括包括6 6个数组元素:个数组元素:A A(0 0)、)、A A(1 1)、)、A A(5 5)。)。27(2)方法)方法2Dim Dim 数组名(下界数组名(下
20、界 To To 上界)上界)采用这种方法可以根据需要设置下标的起始和结束值,采用这种方法可以根据需要设置下标的起始和结束值,即上界和下界。例如即上界和下界。例如 Dim A Dim A(1 To 51 To 5)As IntegerAs Integer该数组包括该数组包括5 5个元素:个元素:A A(1 1)、)、A A(2 2)、)、A A(5 5)。)。也可定义二维数组。例如:也可定义二维数组。例如:Dim A Dim A(1 To 51 To 5,1 To 51 To 5)As Integer As Integer该数组包括该数组包括 A A(1,1),A(1,2),1,1),A(1,2
21、),、A(1,5),A(1,5),,A(5,1),A(5,2),A(5,1),A(5,2),,A(5,5)A(5,5)又如又如:Dim A(5,5)As Integer:Dim A(5,5)As Integer该数组包括该数组包括3636个元素个元素:A:A(0,0),A(0,1),A(0,2),A(0,5),0,0),A(0,1),A(0,2),A(0,5),,A(5,0),A(5,1),A(5,2),A(5,0),A(5,1),A(5,2),,A(5,5)A(5,5)283.动态数组动态数组如果事先不能确定数组元素的个数如果事先不能确定数组元素的个数,可以采用动可以采用动态数组声明技术态数
22、组声明技术,主要方法是主要方法是:(1)首先声明一个静态数组,只定义其数组名,)首先声明一个静态数组,只定义其数组名,不指定数组的大小。例如不指定数组的大小。例如 Dim A As Integer(2)在程序执行过程中,使用)在程序执行过程中,使用ReDim语句修改语句修改数组的大小或数组的上界,例如:数组的大小或数组的上界,例如:ReDim A(20)As Integer ReDim A(1 To 20)As Integer29习题习题 P115 一、单项选择题单项选择题1.Dim A(1 To 6,1 To 5)定义的数组包)定义的数组包含的元素个数是(含的元素个数是()。)。A.30B.
23、25C.42D.动态变化动态变化答案:答案:A30习题习题 P116 二、填空题题4.Dim A(1 To 6)定义的数组包含)定义的数组包含 个元素。个元素。答案:答案:631习题习题 P116 三、问答题题3.3.什么是数组,如何声明,使用数组有什么好处?什么是数组,如何声明,使用数组有什么好处?答:答:VB VB把一组具有同一名字、不同下标的变量称为数组,它把一组具有同一名字、不同下标的变量称为数组,它实际上是一组具有相同类型的变量的集合。实际上是一组具有相同类型的变量的集合。数组分为静态数组和动态数组。定义静态数组的方法与数组分为静态数组和动态数组。定义静态数组的方法与变量的声明方法基
24、本相同。有两种声明方法:变量的声明方法基本相同。有两种声明方法:方法方法1 1:Dim Dim 数组名数组名 (上界)(上界)As As 数据类型数据类型 方法方法2 2:Dim Dim 数组名(下界数组名(下界 To To 上界)上界)As As 数据类型。数据类型。使用数组可以使程序代码更清晰、简洁。,可以方便灵使用数组可以使程序代码更清晰、简洁。,可以方便灵活地组织数据。活地组织数据。324.2.2 控件数组控件数组 控件数组是一种特殊的数组,与普控件数组是一种特殊的数组,与普通数组的主要区别是,它的数据类型为通数组的主要区别是,它的数据类型为控件类型。每个数组元素都是一个控件控件类型。
25、每个数组元素都是一个控件对象,这些控件对象共用一个相同的名对象,这些控件对象共用一个相同的名字,即所有的元素的字,即所有的元素的NameName属性值相同,属性值相同,各控件元素用各控件元素用IndexIndex属性表示数组下标。属性表示数组下标。33数字区命令按钮的数字区命令按钮的Click事件事件Private Sub Command1_Click(Index As Integer)使用使用Str函数将函数将Index转换为字符串,然后使用转换为字符串,然后使用Trim函数去掉前后空格函数去掉前后空格 If txtLabel.Text=Then txtFirst.Text=txtFirst
26、.Text+Trim(Str(Index)Else txtSecond.Text=txtSecond.Text+Trim(Str(Index)End IfEnd Sub 34数字区命令按钮的数字区命令按钮的Click事件也可编写如下:事件也可编写如下:Private Sub Command1_Click(Index As Integer)Select Case Index Case 0 If txtLabel.Text=Then txtFirst.Text=txtFirst.Text+“0”Else txtSecond.Text=txtSecond.Text+“0”End If Case 1
27、If txtLabel.Text=Then txtFirst.Text=txtFirst.Text+“1”Else txtSecond.Text=txtSecond.Text+“1”End If35 Case 9 If txtLabel.Text=Then txtFirst.Text=txtFirst.Text+“9”Else txtSecond.Text=txtSecond.Text+“9”End If End SelectEnd Sub 利用利用Select或或If选择结构,通过对选择结构,通过对Index属性值属性值的判断,响应不同按钮元素的单击事件。的判断,响应不同按钮元素的单击事件。
28、36习题习题 P116 一、单项选择题单项选择题3.如果创建了命令按钮数组控件如果创建了命令按钮数组控件,那么,那么Click事件的参数是(事件的参数是()。)。A.IndexB.CaptionC.TagD.没有参数没有参数答案:答案:A37习题习题 P116 二、填空题题2.在程序运行过程中可以使用在程序运行过程中可以使用 语句语句修改数组的上下界。修改数组的上下界。答案:答案:ReDim384.2.3 枚举及自定义数据类型枚举及自定义数据类型1.枚举枚举当一个变量只可能取几个值时,可将其定义为枚举型,当一个变量只可能取几个值时,可将其定义为枚举型,比如一个变量取比如一个变量取1717之间的
29、整数来表示星期几,则可以之间的整数来表示星期几,则可以把这个变量定义为枚举型。枚举类型只能有一个元素。把这个变量定义为枚举型。枚举类型只能有一个元素。要定义枚举型变量,须先用关键字要定义枚举型变量,须先用关键字EmumEmum定义一个枚举类定义一个枚举类型。例如:型。例如:Public Enum enmDay Public Enum enmDay 星期日星期日=1=1 星期一星期一=2=2 星期五星期五=6=6 星期一星期一=7=7 End Emun End Emun394.2.3 枚举及自定义数据类型枚举及自定义数据类型该语句定义了一个名为该语句定义了一个名为enmDayenmDay的枚举变
30、量。注意的枚举变量。注意emnDayemnDay本身并不是一个变量,它只是用户自己定义的新的数本身并不是一个变量,它只是用户自己定义的新的数据类型。一经定义,就可以像据类型。一经定义,就可以像VBVB提供的标准数据类型提供的标准数据类型(如(如StringString、IntegerInteger)一样使用。例如:)一样使用。例如:Dim Myday As emnDay Dim Myday As emnDay 声明一个变量声明一个变量MydayMyday,其,其数数 据类型为据类型为enmDayenmDay Myday=Myday=星期日星期日 为变量赋值,即为变量赋值,即Myday=1Myd
31、ay=1使用枚举型时应注意几点:使用枚举型时应注意几点:(1 1)枚举类型中的元素只能表示长整型常数。)枚举类型中的元素只能表示长整型常数。(2 2)枚举类型应在模块级别中定义。)枚举类型应在模块级别中定义。(3 3)当定义时没有给枚举成员赋值时,系统自动为第一)当定义时没有给枚举成员赋值时,系统自动为第一个成员赋值个成员赋值0 0,以后的成员值依次加,以后的成员值依次加1 1。402.自定义类型自定义类型自定义类型与枚举类型一样,也是一种构造型数据,称为记录类型。自定义类型与枚举类型一样,也是一种构造型数据,称为记录类型。使用方法如下:使用方法如下:(1)定义)定义 Public Type
32、Student 学号学号 As String*10 姓名姓名 As String*10 年龄年龄 As Integer 籍贯籍贯 As String End Type该语句定义了一个名为该语句定义了一个名为Student的数据类型。的数据类型。(2)声明变量)声明变量 Dim x As Student(3)使用)使用 x.学号学号=“2004001”x.姓名姓名=“张红张红”41 枚举和自定义类型是一种有效的数枚举和自定义类型是一种有效的数据组织方式。尽管不使用它们也照样可据组织方式。尽管不使用它们也照样可以开发出功能强大的应用程序,但有效以开发出功能强大的应用程序,但有效地应用这两种方式,可
33、以使程序代码更地应用这两种方式,可以使程序代码更清晰、简洁。如果要使用这两种方式,清晰、简洁。如果要使用这两种方式,最好能在模块中用最好能在模块中用Public定义,以便整个定义,以便整个应用程序使用。应用程序使用。424.3 过程和函数的定义和调用过程和函数的定义和调用 VB VB窗体和控件的每一个事件都是一窗体和控件的每一个事件都是一个过程,称为事件过程,它们总是与特个过程,称为事件过程,它们总是与特定的控件对象相关联,所以被认为是私定的控件对象相关联,所以被认为是私有(有(PrivatePrivate)过程。此外,)过程。此外,VBVB还提供了还提供了一些内置的由系统预先编好的函数,比一
34、些内置的由系统预先编好的函数,比如如TrimTrim,StrStr和和ValVal函数等。函数等。在在VBVB中,将中,将SubEnd SubSubEnd Sub定义的子定义的子程序称为程序称为SubSub过程(子过程),而将过程(子过程),而将FunctionEnd FuctionFunctionEnd Fuction定义的函数称定义的函数称为为FunctionFunction过程(函数过程)。过程(函数过程)。434.3.1 为什么要编写自定义过程为什么要编写自定义过程函数过程是一种代码分块技术,采用这种技术将函数过程是一种代码分块技术,采用这种技术将应用程序划分为多个程序模块,其好处是:
35、应用程序划分为多个程序模块,其好处是:1.1.过程规模小,容易调用和维护。过程规模小,容易调用和维护。2.2.过程可以被反复调用,避免了重复编码,加强过程可以被反复调用,避免了重复编码,加强了可重用性。了可重用性。3.3.过程是由处理某一特定功能的代码组成,是一过程是由处理某一特定功能的代码组成,是一个相对独立的实体,将应用程序划分为这样一个相对独立的实体,将应用程序划分为这样一个实体,会使程序结构简洁,便于阅读维护。个实体,会使程序结构简洁,便于阅读维护。44习题习题 P116 三、问答题题1.1.为什么要编写自定义过程?为什么要编写自定义过程?因为自地那以过程有以下好处:因为自地那以过程有
36、以下好处:1.1.过程规模小,容易调用和维护。过程规模小,容易调用和维护。2.2.过程可以被反复调用,避免了重复编码,加强过程可以被反复调用,避免了重复编码,加强了可重用性。了可重用性。3.3.过程是由处理某一特定功能的代码组成,是一过程是由处理某一特定功能的代码组成,是一个相对独立的实体,将应用程序划分为这样个相对独立的实体,将应用程序划分为这样一个实体,会使程序结构简洁,便于阅读维一个实体,会使程序结构简洁,便于阅读维护。护。454.3.2 Sub 过程过程1.定义定义一般应在窗体代码编辑器的一般应在窗体代码编辑器的“通用通用”部分定义私部分定义私有的有的SubSub过程,一经定义则可以在
37、窗体的所有过程,一经定义则可以在窗体的所有地方调用它。地方调用它。46如果希望定义整个应用程序均可以使用的公有过如果希望定义整个应用程序均可以使用的公有过程,则最好在标准模块(程,则最好在标准模块(Module)进行。)进行。472.调用调用调用过程的方法非常简单,如图所示。调用过程的方法非常简单,如图所示。48习题习题 P116 一、单项选择题4.如果要在窗体代码编辑器的如果要在窗体代码编辑器的“通用通用”部部分定义私有分定义私有Sub过程,则正确的语句是过程,则正确的语句是()。)。A.Public SubB.Public FnctionC.Private SubD.Private Fun
38、ction答案:答案:C494.3.3 Fucttion函数函数 1.定义定义 Function过程以一个返回值表示执行结果,也有公有过程以一个返回值表示执行结果,也有公有的和私有的两种作用范围。例如,在窗体中定义一个返回的和私有的两种作用范围。例如,在窗体中定义一个返回整型数据的私有整型数据的私有Function函数:函数:Private Function PlusXY(x As Integer,yAs Integer)As Integer PlusXY=x+y End Function 2.调用调用 Function过程的调用方法如下:过程的调用方法如下:Dim I As Integer
39、I=PlusXY(1,2)50 4.3.4 参数传递机制简介参数传递机制简介 大部分过程都含有参数。将大部分过程都含有参数。将Sub过程过程或或Function过程定义中出现的变量名称为过程定义中出现的变量名称为形式参数,而在调用时传递给形式参数,而在调用时传递给Sub过程和过程和Function过程的常量、变量或表达式称为过程的常量、变量或表达式称为实际参数。将参数以变量形式传递的过实际参数。将参数以变量形式传递的过程称为参数传递。程称为参数传递。VB中参数传递机制有两种:一种是中参数传递机制有两种:一种是引用参数传递(默认),另一种是按值引用参数传递(默认),另一种是按值传递参数。传递参数
40、。511.引用传递参数引用传递参数 这种方式将参数变量的内存地址传递这种方式将参数变量的内存地址传递给给Sub或或Function过程,过程通过内存地过程,过程通过内存地址访问实际参数的内容,从而可以方便址访问实际参数的内容,从而可以方便地改变实际参数的值。地改变实际参数的值。52Private Sub Change(x As Integer,y As Integer)本程序将参数本程序将参数x,y的值互换的值互换 Dim t As Integer t=x x=y y=t 在窗体是输出结果在窗体是输出结果 Print“x=”;x,”y=”;yEnd SubPrivate Sub Form_Cl
41、ick()Dim a As Integer Dim b As Integer a=3:b=4 Change a,b Print“a=”;a,”b=”;bEnd Sub (演示)(演示)运行结果:运行结果:x=4,y=3A=4,b=3我们发现,调用我们发现,调用Change过程后,过程后,实际参数实际参数a,b的的值也发生了变化。值也发生了变化。这就是引用传递这就是引用传递参数的执行结果。参数的执行结果。532.按值传递参数按值传递参数按值传递参数是只把参数的数值传递给过程,也称传值方式。按值传递参数是只把参数的数值传递给过程,也称传值方式。即传递给过程的只是实际参数的副本,即使过程调用时改变即
42、传递给过程的只是实际参数的副本,即使过程调用时改变了形式参数的值,实际参数也不会改变。了形式参数的值,实际参数也不会改变。如果按值传递参数,需要在定义过程时在形式参数前面加是如果按值传递参数,需要在定义过程时在形式参数前面加是G关键字关键字ByVal,例如上例中:,例如上例中:Private Sub Change(ByVal x As Integer,ByVal y As Integer)Dim t As Integer t=x x=y y=t 在窗体是输出结果在窗体是输出结果 Print“x=”;x,”y=”;yEnd Sub运行结果:运行结果:x=4,y=3a=3,b=4544.4 键盘和
43、鼠标使用技巧键盘和鼠标使用技巧 驱动驱动VBVB应用程序运行的主要动力是事应用程序运行的主要动力是事件响应。在件响应。在VBVB响应的所有事件中,数目最响应的所有事件中,数目最多也最重要的是对键盘和鼠标的响应事件,多也最重要的是对键盘和鼠标的响应事件,因为键盘和鼠标是用户和应用程序交互的因为键盘和鼠标是用户和应用程序交互的主要工具。下面系统介绍鼠标和键盘常用主要工具。下面系统介绍鼠标和键盘常用事件的使用技巧和原理。事件的使用技巧和原理。55习题习题 P116 三、问答题、问答题2.简述参数传递机制。简述参数传递机制。答:答:VB中参数传递机制有两种:一种是引用参数传递中参数传递机制有两种:一种
44、是引用参数传递(默认),另一种是按值传递参数。(默认),另一种是按值传递参数。引用参数传递是将参数变量的内存地址传递给引用参数传递是将参数变量的内存地址传递给Sub或或Function过程,过程通过内存地址访问实际参过程,过程通过内存地址访问实际参数的内容,从而可以方便地改变实际参数的值。数的内容,从而可以方便地改变实际参数的值。按值传递参数是只把参数的数值传递给过程,也按值传递参数是只把参数的数值传递给过程,也称传值方式。即传递给过程的只是实际参数的副本,称传值方式。即传递给过程的只是实际参数的副本,即使过程调用时改变了形式参数的值,实际参数也即使过程调用时改变了形式参数的值,实际参数也不会
45、改变。如果按值传递参数,需要在定义过程时不会改变。如果按值传递参数,需要在定义过程时在形式参数前面加是在形式参数前面加是G关键字关键字ByVal。564.4.1 响应键盘事件响应键盘事件常用的键盘事件主要有常用的键盘事件主要有KeyPress,KeyUp和和KeyDown。KeyPress事件:用户按下某事件:用户按下某ASCII字符的字符的键,因此它不是对所有的键盘码均响应,键,因此它不是对所有的键盘码均响应,比如键盘上的删除键。比如键盘上的删除键。KeyDown和和KeyUp事件:按下或释放键盘事件:按下或释放键盘上的任意键时均会触发该事件,包括上的任意键时均会触发该事件,包括Delete
46、删除键。删除键。57 1.焦点处理焦点处理 窗体或控件(对象)的焦点是对象活动窗体或控件(对象)的焦点是对象活动的标志,在的标志,在Windows应用中,可以同时运行应用中,可以同时运行几个应用程序,但只有具有焦点的应用程序几个应用程序,但只有具有焦点的应用程序才有活动标题栏,才能接受用户输入。在同才有活动标题栏,才能接受用户输入。在同一窗体中,也只有具有焦点的的一窗体中,也只有具有焦点的的TextBox文文本框才能接受键盘输入。总之只有获得焦点本框才能接受键盘输入。总之只有获得焦点的窗体或控件才能接受键盘事件。所以在处的窗体或控件才能接受键盘事件。所以在处理键盘事件嵌,应首先对焦点进行处理。
47、理键盘事件嵌,应首先对焦点进行处理。58实现控件焦点的两种方法实现控件焦点的两种方法(1)SetFocus方法方法 在程序运行时,通过鼠标选择操作或控件在程序运行时,通过鼠标选择操作或控件的的SetFocus方法实现。方法实现。VB所提供的标准控件一般都有一个所提供的标准控件一般都有一个SetFocus方法。通过该方法可以把焦点赋予方法。通过该方法可以把焦点赋予指定的控件,是一种灵活的焦点控制方法。指定的控件,是一种灵活的焦点控制方法。比如希望在程序运行期的某个阶段,使某个比如希望在程序运行期的某个阶段,使某个控件后得焦点被激活,可使用以下代码:控件后得焦点被激活,可使用以下代码:控件名控件名
48、.SeFocus59实现控件焦点的两种方法实现控件焦点的两种方法(2)利用)利用Tab控制键控制键 VB所有可被设置焦点的控件均具有一个所有可被设置焦点的控件均具有一个TabIndex属性。默认情况些,在窗体上创建的第一属性。默认情况些,在窗体上创建的第一个控件的个控件的TabIndex的值为的值为0,第一个控件的,第一个控件的TabIndex的值为的值为1,移此类推。可按预先设计好的,移此类推。可按预先设计好的顺序,改变控件的顺序,改变控件的TabIndex的值。这样就可以在程的值。这样就可以在程序运行期间,通过序运行期间,通过Tab键使焦点按键使焦点按TabIndex的值,的值,从小到大在
49、众多控件中切换。从小到大在众多控件中切换。如果不希望使某些控件获得焦点,就可以把该如果不希望使某些控件获得焦点,就可以把该控件的控件的TabStop属性值设置为属性值设置为False。当然,如果控。当然,如果控件不可视(件不可视(Visible=False)或不可用)或不可用(Enabled=False),也不可能获得焦点了。),也不可能获得焦点了。60习题习题 P116 二、填空题题3.如果不希望某个控件获得焦点,则可以如果不希望某个控件获得焦点,则可以将它的将它的 属性设置为属性设置为False。答案:答案:TabStop61习题习题 P116 三、问答题三、问答题4.什么是焦点,设置控件
50、焦点有哪些方法什么是焦点,设置控件焦点有哪些方法?答:窗体或控件(对象)的焦点是对象活答:窗体或控件(对象)的焦点是对象活动的标志,只有获得焦点的窗体或控件动的标志,只有获得焦点的窗体或控件才能接受键盘事件。才能接受键盘事件。设置控件焦点的两种方法:设置控件焦点的两种方法:SetFocus方法:方法:控件名控件名.SeFocus按预先设计好的顺序,改变控件的按预先设计好的顺序,改变控件的TabIndex的值。的值。622.窗体的键盘事件窗体的键盘事件如果希望无论何时按下某个键,都会同时如果希望无论何时按下某个键,都会同时执行同一操作,而不管此时到底哪个控执行同一操作,而不管此时到底哪个控件具有