




已阅读5页,还剩190页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
VisualBasic6 0程序设计案例教程 下 第5章数组 本章内容 基本概念及操作静态数组动态数组控件数组控件列表框 ListBox 组合框 ComboBox 基本概念及操作 数组一组具有相同名字不同下标的变量构成了数组score 1 score 2 score 3 score 50 例 求50个学生的平均成绩 并统计高于平均成绩的人数 数组元素 下标 基本概念及操作 Fori 1To50score val InputBox 请输入学生的成绩 sum sum scoreNextiave sum i 1 PrintaveEndSub 基本概念及操作 Fori 1To50score i InputBox 请输入学生的成绩 sum sum score i Nextiave sum i 1 PrintaveFori 1To50Ifscore i aveThenn n 1NextiPrintn 基本概念及操作 数组静态数组一维数组二维数组动态数组 一维数组 声明声明一维数组的形式如下 Dim数组名 下界To 上界 As类型 例 Dimscore 50 AsSinglescore 0 score 1 score 2 score 50 Dima 5To3 AsIntegera 5 a 4 a 3 a 2 a 1 a 0 a 1 a 2 a 3 数组的基本操作 数组的输入数组的输出 数组的基本操作 数组的输入 利用循环结构分别给数组元素赋值在一维数组中利用Array函数为数组元素赋值数组名到数组名的直接赋值 数组的基本操作 数组的输入 利用循环结构分别给数组元素赋值Fori 1To50score i InputBox 请输入学生的成绩 Nexti 数组的基本操作 数组的输入 在一维数组中利用Array函数为数组元素赋值其格式为 数组名 Array 数组元素值 例 Dims s Array 1 2 3 4 5 将1 2 3 4 5这5个数赋值给数组s即s 0 s 1 s 2 s 3 s 4 的值分别为1 2 3 4 5 数组的基本操作 数组的输入 数组名到数组名的直接赋值例如 Dima b a Array 1 2 3 4 5 b a将数组a的值1 2 3 4 5赋值给数组b相应的元素 数组的基本操作 数组的输出 ForEach Next语句其一般格式为 ForEach成员In数组循环体 ExitFor Next 成员 例如 Dims S array 1 2 3 4 5 ForEachxinsprintx Nextx 数组的基本操作 数组的输出 用循环结构例 Dims S array 1 2 3 4 5 Fori 0to4prints i Nexti 数组的使用 实例5 1 2 输入大赛选手的姓名和成绩 输出成绩列表 编写代码 数组赋值 数组赋值Dimnam 9 AsString score 9 AsSingle bAsBoolean iAsInteger jAsIntegerConstN 9 编写代码 数组赋值 PrivateSubtxtname LostFocus Iftxtname Text Thennam i txtname TextElsenam i EndIfi i 1Ifi NThentxtname Enabled FalseEndSub 编写代码 数组赋值 PrivateSubtxtscore LostFocus Iftxtscore Text Thenscore j Val txtscore Text Elsescore j 0EndIfj j 1txtname Text txtscore Text Ifj NThentxtscore Enabled FalseEndSub 编写代码 显示选手的成绩 列表框lstscore中显示选手的成绩PrivateSubcmdshow Click DimiAsIntegerIfb FalseThenFori 0ToNLstscore AddItemSpace 3 nam i Space 7 Str score i NextiEndIfb TrueEndSub 编写代码 排序 按钮代码 列表框中的数据赋值给数组Fori 0ToNliststr LTrim Lstscore List i 去掉列表项Lstscore List i 中左边的空格s Split liststr 将列表项字符分割成字符数组 分割符是7个空格 由于列表项中姓名和成绩之间由7个空格分隔 nam i s 0 score i Val s 1 Nexti 编写代码 排序 按钮代码 数组排序Fori 0ToN 1max iForj i 1ToNIfscore j score max Thenmax jNextjt score i score i score max score max tst nam i nam i nam max nam max stNexti 编写代码 排序 按钮代码 排好序的数据输出到列表框Lstscore ClearFori 0ToNLstscore List i Space 3 nam i Space 7 Str score i NextiEndIf 二维数组 二维数组的声明形式如下 Dim数组名 下标1 下标2 As类型 Dima 2 3 AsInteger存储结构为 二维数组 OptionBasen语句其中n可以取1或0 当n为1时 可以使所有定义时省略下界的数组的初始下标从1开始 为0下标从0开始 此语句必须出现在数组声明之前 且位于所有事件过程的前面 其作用范围仅限于出现在同一代码窗口的未声明下界的数组 一个代码窗口中OptionBasen语句只能出现一次 二维数组的应用 实例5 3 输入10个学生某门课程的平时成绩 期中考试成绩以及期末考试成绩 按照平时成绩占15 期中成绩占25 期末成绩占60 的比例 计算出10个学生此门课程的最后成绩 编写代码 录入 按钮代码 OptionBase1DimiAsIntegerDimstudentn 10 2 AsString students 10 4 AsSingleConstM 10 N1 2 N2 4 PrivateSubcmdin Click Dims AsStringi i 1Ifi MThens Split txtin Text studentn i 1 s 0 studentn i 2 s 1 Forj 1ToN2 1students i j s j 1 NextjElsetxtin Enabled FalseEndIfEndSub 编写代码 文本框代码 PrivateSubtxttable Click DimiAsInteger jAsIntegerDimtstrAsString 计算 最后成绩 Fori 1ToMstudents i 4 students i 1 0 15 students i 2 0 25 students i 3 0 6Nexti 编写代码 文本框代码 输出数组到文本框Fori 1ToMForj 1ToN1tstr tstr studentn i j Space 10 Len studentn i j NextjForj 1ToN2tstr tstr str students i j Space 10 Len str students i j Nextjtxttable Text tstr Chr 13 chr 10 Nexti 编写代码 其它代码 PrivateSubtxtin GotFocus txtin SelStart 0 选定的开始位置 第一个字符的位置是零txtin SelLength Len txtin Text 选定的长度EndSub 动态数组 OptionBase1Dims AsStringPrivateSubForm Click DimnAsInteger 输入学生人数n InputBox 请输入学生人数 ReDims n Fori 1Tons i InputBox 输入学生姓名 PrintSpc 2 s i Spc 2 Next 动态数组 Print 改变数组的大小且保留数组中的值 ReDimPreserves n 1 PrintFori 1Ton 1PrintSpc 2 s i Spc 2 Nexti 动态数组 Print 改变数组的维数 原数组值丢失 ReDims n 3 Fori 1TonPrintSpc 2 s i 1 Spc 2 Nexti 自定义数据类型 用户自定义类型通过Type语句实现 形式如下 Type自定义类型名元素1As类型元素2As类型 EndType 自定义数据类型 说明 元素 表示自定义类型中的一个成员 类型 为标准数据类型 若为字符串型 必须是定长字符串 自定义类型必须在标准模块 BAS 中定义 默认是Public 自定义数据类型 例 在模块中定义一个学生成绩处理的类型student 打开模块代码窗口 工程 添加模块 打开 添加模块 对话框 单击 打开 按钮 打开模块Modulel代码窗口 自定义数据类型 在Modulel代码窗口输入自定义类型代码 TypestudentNameAsstring 10 姓名 字符串长度为10 NumberAsstring 7 学号 字符串长度为7 Score 1To4 Assingle 4种成绩EndType 自定义数据类型 录入数据代码OptionBase1Dimstudents 10 AsstudentDimiAsIntegerConstM 10PrivateSubcmdin Click Dims AsStringDimjAsIntegerDimtstrAsString 自定义数据类型 i i 1Ifi MThens Split txtin Text students i Name s 0 students i Number s 1 Forj 1To3students i Score j s j 1 Nextj 控件数组 控件数组的概念类型相同且名称属性相同的一组控件通过Index属性区分各控件optPicture 0 optPicture 1 optPicture 9 控件数组 控件数组的建立设计时建立控件数组首先在窗体上建立一个控件 并设置其属性 复制该控件到设置位置 这时系统将弹出确认是否要建立一个控件数组的对话框 选择 是 按钮 即可建立控件数组 控件数组中的其余按钮 通过 粘贴 得到 控件数组 程序运行时添加控件数组首先在窗体上建立一个控件 设置该控件的Index属性值为0 通过方法Load添加其余所需元素 删除添加的元素用Unload方法 添加的按钮在窗体中的位置由按钮的Left和Top属性值确定 设定Visible属性为True 控件数组 控件数组的引用引用控件数组中各控件对象的方法是 控件数组名 索引号 控件数组 例 控件数组 PrivateSubForm Load DimwidthnumAsInteger HeighunmAsInteger iAsIntegerwidthnum cmdnum 0 Widthheightnum cmdnum 0 Height Fori 1To9Loadcmdnum i If i 1 Mod3 0Then 第一列cmdnum i Top cmdnum i 1 Top heighnum 225 225为行间距cmdnum i Left cmdnum 0 LeftElse 其它列cmdnum i Top cmdnum i 1 Topcmdnum i Left cmdnum i 1 Left cmdnumwith 720 720为列间距EndIfcmdnum i Caption icmdnum i Visible TrueNextiEndSub 控件数组 实例5 5 用控件数组修改第三章的案例 简易计算器 并添加数制转换功能 十进制到二进制 十六进制和八进制的转换 代码编写 数字按钮代码txtshow Text txtshow Text cmdnum Index Captionsp Abs Val txtshow Text 保存十进制代码到窗体级变量sp中 用于进制转换 代码编写 运算符按钮代码op cmdoperator Index Caption 代码编写 进制转换按钮代码numd spSelectCaseOptc Index IndexCase0num 2Case1num 16Case2num 8EndSelect Whilenumd0c numdModnumIfc 10Thenc c 10 Asc A cs Chr c Elsecs Str c EndIfnumd numd numnumc numc csWendtxtshow Text StrReverse numc 字符串逆序 控件 列表框 ListBox 组合框 ComboBox 控件 列表框常用属性 MultiSelect属性设置列表框是否能选择多项List属性该属性是一个字符型数组 存放列表框的项目 List数组的下标是从0开始 ListCount属性该属性只能在程序中设置或引用 ListCount的值是列表框中所列项目的数量 控件 列表框常用属性 ListIndex属性该属性只能在程序中设置或引用 ListIndex的值是程序运行中选中的列表项的序号 若未选中任何项 则ListIndex的值为 1Selected属性该属性只能在程序中设置或引用 Selected属性是一个逻辑数组 其元素对应列表框中相应的项 若某项被选中其Selected属性值为True 否则为False 控件 列表框常用属性 Sorted属性该属性只能在程序设置中引用 其值为True列表项目按字母顺序排列显示 否则按项目添加的先后顺序显示 Style属性该属性只能在设计时确定 用于设定控件的外观 其值设为0是标准样式 为1时复选框样式 控件 列表框常用属性 Text属性只能在程序中设置或引用 其属性值是被选中列表项中的内容 控件 常用事件和方法 AddItem方法用于将项目添加到列表框中 其语法为 列表框名 AddItemItem index其中 Item是添加的项目 为字符表达式 Index是可选项 用来指定添加项目在列表框中的位置 如果省略添加到末尾 控件 常用事件和方法 RemoveItem方法从列表框中删除一个项目 其语法为 列表框名 RemoveItemIndex其中Index 用来指定要删除的项目在列表框中的位置 控件 常用事件和方法 Clear方法删除列表框中的所有项目 其语法为 项目列表框 clear 控件 组合框的常用属性 Style属性Style属性返回 设置一个值 该值用来指示组合框的显示类型和行为 且为只读 其取值如下 0 默认值 下拉式组合框 由文本框和下拉列表组成 可以输入 可选择 可折叠 1 简单组合框 由文本框和固定列表框组成 可以输入 可选择 不可折叠 2 下拉式列表框 仅由下拉式列表框组成 不可以输入 可选择 可折叠 控件 组合框的常用属性 Text属性当Style属性设置为0或1时 Text属性返回 设置编辑框中的文本 Style属性为2时Text属性返回列表框中选择的项目 控件 常用事件和方法 AddItem方法Clear方法RemoveItem方法 控件应用 实例5 6 制作花卉展示窗体 代码设计 花卉类型选择代码 PrivateSubcmbtype Click Ifcmbtype Text 玫瑰 Thenlstname Clearlstname AddItem 玫瑰1 lstname AddItem 玫瑰2 lstname AddItem 玫瑰3 代码设计 Elselstname Clearlstname AddItem 菊花1 lstname AddItem 菊花2 lstname AddItem 菊花3 lstname AddItem 菊花4 EndIfEndSub 代码设计 花卉名称选择代码 PrivateSublstname Click Ifcmbtype Text 玫瑰 ThenSelectCaselstname ListIndexCase0imgflower Picture LoadPicture rose 1 jpg Case1imgflower Picture LoadPicture rose 2 jpg Case2imgflower Picture LoadPicture rose 3 jpg EndSelect 代码设计 ElseSelectCaselstname ListIndexCase0imgflower Picture LoadPicture mum 1 jpg Case1imgflower Picture LoadPicture mum 2 jpg Case2imgflower Picture LoadPicture mum 3 jpg Case3imgflower Picture LoadPicture mum 4 jpg EndSelectEndIfEndSub 案例 成绩分析工具 案例 代码设计 添加组合框中项目的代码PrivateSubForm Load cbonn AddItem Mary 06123 cbonn AddItem John 06124 cbonn AddItem Jeck 06125 cbonn AddItem Paul 06131 cbonn AddItem Tony 06132 EndSub 案例 代码设计 将组合框选中项目添加到文本框 txtin PrivateSubtxtin GotFocus txtin Text txtin Text cbonn TextEndSub 案例 代码设计 排 名次 代码排序代码查找位置代码 案例 代码设计 排序代码 求名次 将每个学生的学号和最后成绩赋值给数组num和scoreFori 1ToMnum i studentn i 2 score i students i 4 Nexti 案例 代码设计 按数组score排序 学号与成绩同步交换Fori 1ToM 1max iForj i 1ToMIfscore j score max Thenmax jNextjt score i score i score max score max ttn num i num i num max num max tnNexti 案例 代码设计 查找位置代码 找出studentn i 2 在数组num中的位置 放入数组orderFori 1ToMj 1Whilestudentn i 2 num j j j 1Wendorder i jNext数组order的值为名次 案例 代码设计 成绩分析代码求出最大 最小及总和计算各分数段人数及平均值输出统计结果 案例 代码设计 求出最大 最小及总和DimmaxAsSingle minAsSingle sumAsSingle aveAsSingleDimnsAsInteger scount 5 AsIntegermax students 1 4 min students 1 4 案例 代码设计 Fori 1ToMIfstudents i 4 maxThenmax students i 4 ElseIfstudents i 4 minThenmin students i 4 EndIfEndIfsum sum students i 4 案例 代码设计 2 计算各分数段人数及平均值ns Int students i 4 10 SelectCasensCase9 10scount 1 scount 1 1Case8scount 2 scount 2 1Case7scount 3 scount 3 1 案例 代码设计 Case6scount 4 scount 4 1CaseIs 6scount 5 scount 5 1EndSelectNextiave sum M 平均值 案例 代码设计 输出统计结果Fori 1To5lbls i 1 Caption Str scount i Nextilbls 5 Caption maxlbls 6 Caption minlbls 7 Caption ave 案例 代码设计 其它代码PrivateSubcbonn GotFocus txtin Text EndSub 第6章 过程 VB应用程序由若干个过程组成 VB有三类模块 即窗体模块 标准模块和类模块 过程有两个重要作用 一是把一个复杂的任务分解为若干个小任务 可以用过程来表达 从而使任务更易理解 更易实现 将来更易维护 二是代码重用 使同一段代码多次复用 VB应用程序是由过程组成的 过程是完成某种特殊功能的一组独立的程序代码 两大类过程 事件过程Sub过程通用过程Function过程事件过程是当某个事件发生时 对该事件作出响应的程序段 它是VB应用程序的主体 通用过程是独立于事件过程之外 可供其他过程调用的程序段 过程调用示例把相同的任务编成相对独立的 子过程 当事件过程需要执行这个任务时 可使用调用语句 如Call 实行调用 子过程执行完后 会返回事件过程中调用语句Call的后续语句继续执行通用过程又分为Sub 子程序 过程和Function 函数 过程 一 通用过程 引例 画圆 例使用Sub过程的示例1PrivateSubForm Load ShowCallmysub1 30 Callmysub2Callmysub2Callmysub2Callmysub1 30 EndSub程序运行结果 PrivateSubmysub1 n PrintString n EndSubPrivateSubmysub2 Print Tab 30 EndSub Sub过程 Form Load 事件过程Callmysub1 30 Callmysub2Callmysub2Callmysub2Callmysub2Callmysub1 30 Mysub1过程 Mysub2过程 调用过程 在上述事件过程Form Load 中 通过Call来分别调用两个Sub过程在Sub过程mysub1 n 中 n为参数 也称形参 当调用过程 即Form Load 通过Callmysub1 30 30称为实参 调用时 就把30传给n 这样调用后就输出30个 号过程mysub2 不带参数 其功能是输出左右两边的 号 定义格式 Private Public Static Sub过程名 参数表 语句块 ExitSub EndSub说明 局部 Private 过程 全局 公用 Public 过程和静态 Static 过程 参数表定义格式 ByVal ByRef 变量名 As数据类型 ByVal表示该参数按值传递 ByRef表示该参数按地址传递 通过参数表传送参数Sub过程可以获取调用过程传送的参数 也能通过参数表的参数 把计算结果传回给调用过程 1 Sub过程的定义 PrivateSubSwap XAsInteger YAsInteger DimtempAsIntegertemp X X Y Y tempEndSubPrivateSubCommand1 Click DimaAsInteger bAsIntegera Text1 Textb Text2 TextCallSwap a b Text1 Text aText2 Text bEndSub 实例1 Sub过程可以保存在两种模块中 窗体模块 frm 和标准模块 bas 可以在代码窗口中直接键入来创建Sub过程选择 工具 菜单中的 添加过程 命令 2 Sub过程的建立 事件过程是通过事件驱动和由系统自动调用的 而Sub过程则必须通过调用语句实行调用调用Sub过程有以下两种方法 1 使用Call语句 格式 Call过程名 实参表 2 直接使用过程名 格式 过程名 实参表 3 Sub过程的调用 PrivateSubCommand1 Click CallFormmoveEndSub 无参过程SubFommove 代码 PublicSubFormmove Form1 Top Screen Height Form1 Height 2Form1 Left Screen Width Form1 Width 2EndSub 实例2 允许用户自定义函数过程 又称Function过程 1 定义Function过程可返回一个值给调用程序一般语法格式 Private Public Static Function函数名 参数表 As数据类型 语句块 函数名 表达式 ExitFunction EndFunction函数返回值的处理 二 Function过程 与Sub过程相同可以在 代码窗口 中直接输入来建立Function过程也可以选择 工具 菜单中的 添加过程 命令来建立Function过程 选择 函数 类型 2 Function过程的建立 1 直接调用像使用VB内部函数一样 只需写出函数名和相应的参数即可 例如 s sum n Printsum n 2 用Call语句调用与调用Sub过程一样来调用Function过程 例如 Callsum n 当用这种方法调用Function过程时 将会放弃返回值 3 Function过程的调用 查看当前模块中有哪些Sub过程和Function过程 查看其他模块中的过程 4 查看过程 PublicFunctiontongji str s AsIntegerDimk i k 0Fori 1ToLen str 循环依次遍历每个字符IfMid str i 1 sThen 判断是否与检测字符相等k k 1 如果相等则计数EndIfNextitongji k 将结果赋给函数名EndFunction 事件过程代码 PrivateSubCommand1 Click Dimc1 c2 m c1 Text1 Text 取出文本框1为原串c2 Text2 Textm tongji c1 c2 调用函数过程进行查找Text3 Text mEndSub 实例3 编写一个函数过程 统计一串字符中某个字符的出现次数 并在调用函数中调用它 PrivateFunctionfactorial ByValnAsInteger AsDoubleDimiAsInteger tAsDoublet 1Fori 1Tont t iNextifactorial t 将结果赋给函数过程名EndFunctionPrivateSubCommand1 Click DimmAsInteger nAsInteger cAsDoublem Val Text1 Text n Val Text2 Text c factorial m factorial n factorial m n 调用factorial函数过程Label3 Caption 共有 c 种选派方法 EndSub 实例4 某班有m名学生 要选派n名学生参加合唱队 计算有多少种选派方法 参数传递可以实现调用过程和被调过程之间的信息交换两种方式 按值传递和按地址传递1 形参与实参形式参数 简称形参 在被调过程中的参数 出现在Sub过程和Function过程中 形式参数可以是变量名和数组名实际参数 简称实参 在调用过程中的参数 过程调用时实参数据会传递给形参形参表和实参表中的对应变量名可以不同 但实参和形参的个数 顺序以及数据类型必须相同 三 参数传递 调用过程 CallMysub 100 计算机 1 5 定义过程 SubMysub tAsInteger sAsString yAsSingle 形实结合 是按照位置结合的 即第一个实参值 100 传送给第一个形参t 第二个实参值 计算机 传送给第二个形参s 第三个实参值 1 5 传送给第三个形参y 数组可以作为形参出现在过程的形参表中 定义过程和调用过程的示例 1 按地址传递VB默认的数据传递方式 按地址传递 关键字ByRef 把实参变量的内存地址传递给被调过程 如Sub过程 即形参与实参使用相同的内存地址单元 这样通过过程就可以改变变量本身的值实参必须是变量 不能采用常量或表达式 上个例子中 Form Load 事件过程是通过 CallJc 5 y 和 CallJc 10 y 来调用过程Jc n t 的 其中采用的第二个参数就是按地址来传送数据的 2 按地址传递和按值传递 按值传递 关键字ByVal 通过常量传递实际参数 即传递参数值而不是传递它的地址因为通用过程不能访问实参的内存地址 因而在通用过程中对形参的任何操作都不会影响实参 2 按值传递 PrivateSubS1 ByValxAsInteger ByValyAsInteger DimtempAsIntegertemp x x y y tempEndSubPrivateSubS2 ByRefxAsInteger yAsInteger DimtempAsIntegertemp x x y y tempEndSubPrivateSubCommand1 Click DimaAsIntegerDimbAsIntegera 20 b 30Print 调用前a和b的值为 Tab 30 a bCallS1 a b Print 调用s1后a和b的值为 Tab 30 a ba 20 b 30CallS2 a b Print 调用s2后a和b的值为 Tab 30 a bEndSub 实例5 数值交换 设置两个通用过程Test1和Test2 分别按值传递和按地址传递PrivateSubForm Load DimxAsIntegerShowx 5Print 执行test1前 x xCalltest1 x Print 执行test1后 test2前 x xCalltest2 x Print 执行test2后 x xEndSub Subtest1 ByValtAsInteger t t 5EndSubSubtest2 sAsInteger s s 5EndSub 运行结果执行Test1前 x 5执行Test1后 Test2前 x 5执行Test2后 x 0 例参数传递方式示例 变量的作用域 空间 和生存期 时间 应用程序通常包括窗体文件 frm 模块文件 bas 和类模块 cls 五 变量的作用范围 程序一般从启动窗体的Form Load过程开始执行有时在程序启动时不加载任何窗体 而是首先执行一段程序代码 此时可把要执行的程序代码放在SubMain过程中 并指定SubMain为 启动对象 应用程序在运行时会先执行SubMain过程在一个工程中只能有一个SubMain过程设置SubMain过程为 启动对象 的方法 在 工程属性 对话框的 通用 选项卡中 从 启动对象 下拉列表框中选中 SubMain 一 SubMain过程 变量根据所处的位置或定义不同 其作用范围也不同 分为 局部变量 模块级变量和全局变量1 局部变量在一个过程内部用Dim或Static声明的变量称为局部变量 只能在本过程中有效 在一个窗体中 不同过程中定义的局部变量可以同名 例如 在一个窗体中定义PrivateSubCommand1 Click DimCountAsIntegerDimSumAsInteger EndSubPrivateSubCommand2 Click DimSumAsInteger EndSub 这两个同名变量Sum没有任何联系 二 变量的作用域 模块级变量可以在一个窗体的不同过程中使用在窗体模块的声明部分中声明该变量如果用Private或Dim来声明 则该变量只能在本窗体 或本模块 中有效 在其他窗体或模块中不能引用该变量 以Public声明的变量 允许在其他窗体和模块中引用 2 模块级变量 全局变量可以被应用程序中任何一个窗体和模块直接访问 全局变量要在标准模块文件 bas 中的声明部分用Global或Public语句来声明 格式 Global变量名As数据类型Public变量名As数据类型 3 全局变量 比较 OptionExplicitDimx PrivateSubForm click x 33Print x xCallli1Callli2 printx1 不可使用局部变量x1EndSubPrivateSubli1 Dimx1 x1 11Print x1 x1 Print x x 可以使用窗体 模块级变量EndSubPrivateSubli2 Dimx2 x2 22Print x2 x2 Print x xEndSub 实例6 模块级变量与局部变量应用实例 生存期 也即变量能够保持其值的时间 分为动态变量和静态变量1 动态变量动态变量是指程序运行进入变量所在的过程时 才分配给该变量的内存单元 经过处理退出该过程时 该变量占用的内存单元自动释放 其值消失 当再次进入该过程时 所有的动态变量将重新初始化 使用Dim关键字在过程中声明的局部变量属于动态变量 4 变量的生存期 静态变量是指程序进入该变量所在的过程 经过处理退出该过程时 其值仍被保留 即变量所占的内存单元没有释放 当以后再次进入该过程时 原来的变量值可以继续使用使用Static关键字在过程中声明的局部变量属于静态变量例使用StaticSub语句的示例StaticSubSubtest DimtAsInteger t为静态变量t 2 t 1PrinttEndSubPrivateSubCommand1 Click CallSubtest 调用子过程SubtestEndSub 2 静态变量的使用 运行后 多次单击命令按钮Command1 执行结果为 137 将StaticSub改为PrivateSub后 运行过程中多次单击命令按钮Command1 执行结果为 111 PrivateSubForm click Dimcount count count 1Print 单击窗体 count 次 EndSubPrivateSubForm click Staticcount count count 1Print 单击窗体 count 次 EndSub 实例7 六 综合案例 七 案例实训 第7章 文件 前面的章节 我们都是将输出结果显示在窗体 标签等控件上的 如果我们要将程序运行产生的有效数据长期保存下来 以便存档 用户随时查阅或更新 保存在磁盘上 文件 文件是指存放在外存储器 如磁盘 上的信息集合 使用文件可以将应用程序所处理的数据以文件的形式保存起来 本章主要内容 文件系统控件 数据文件概述 顺序文件读写 随机文件读写 常用的文件操作和函数 一 文件系统控件 VB工具箱中提供了三种文件系统控件 驱动器列表框 DriveListBox 文件夹列表框 DirListBox 和文件列表框 FileListBox 这三种控件可以单独使用 也可以组合使用 图为三种控件组合使用的情况 1 驱动器列表框 选择一个驱动器 2 文件夹列表框 显示一个磁盘的文件夹结构 3 文件列表框 显示当前文件夹下的所有文件名 驱动器 目录和文件列表框的关联 SubdrvDrive Change dirDirectory Path drvDrive DriveEndSub SubdirDirectory Change filFile Path dirDirectory PathEndSub SubForm Load Item 所有文件 cboType AddItemItem Space 20 Len Item Item 窗体文件 FRM cboType AddItemItem Space 20 Len Item FRM Item 位图文件 BMP cboType AddItemItem Space 20 Len Item BMP cboType ListIndex 2EndSubSubcboType Click filFile Pattern Mid cboType Text 21 EndSub SubfilFile Click EndSubSubfilFile DblClick EndSub 当这三种控件组合使用时 在改变驱动器列表框中的驱动器时 文件夹列表框中显示的文件夹也应同步改变 同样 文件夹列表框中文件夹改变 文件列表框也应同步改变 1 驱动器列表框Drive属性 对象 Drive drive Change事件 重新设置Drive属性引发Change事件2 目录列表框Path属性 对象 Path pathname Change事件 重新设置Path属性引发Change事件 3 文件列表框Path属性 显示该路径下的文件 重新设置Path属性引发PathChange事件 Pattern属性 显示的文件类型 对象 Pattern value 重新设置Pattern属性引发PatternChange事件 例如 filFile Pattern frm 显示 frm文件 FileName属性 返回或设置所选文件的路径和文件名 对象 FileName pathname 引用时只返回文件名 相当于filFile List filFile ListIndex 需用Path属性得到其路径 设置时可带路径 ListIndex属性 设置或返回当前控件上所选择的项目的索引值 当FileListBox没有文件显示时ListIndex属性值为1 ListCount属性 本属性可以用于这三种文件系统控件 返回控件内所列项目的总数MultiSelect属性 指定是否可以多选 进行多选的方式 Selected属性 逻辑数组 Selected i 的值为True表示第i 1项被选中 List属性 字符型数组 存放文件列表的项目 Click DblClick事件 例如 单击输出文件名 SubfilFile Click MsgBoxfilFile FileNameEndSub例如 双击执行可执行程序SubfilFile DblClick ChDir dirDirectory Path 改变当前目录RetVal Shell filFile FileName 1 执行程序EndSub 1 数据文件的结构数据文件由记录组成 记录由若干个相关联的字段组成 字段由字符组成 二 数据文件概念 1 顺序文件 即文本文件 文件中的记录按顺序一个接一个地排列 无法灵活地随意存取它 只适用于有规律的 不经常修改的数据 2 随机文件 随机文件的每一个记录都有固定的长度 每一个记录都有记录号 这种文件的特点是允许用户存取文件中任一个记录 可以同时进行读或写操作存入和读出速度较快 数据容易更新 3 二进制文件 可理解为长度为1的特殊的随机文件 2 文件类型 顺序访问模式 顺序文件 记录可长可短随机访问模式 随机文件 记录的长度相同二进制访问模式 二进制文件 可认为记录长度为1 1 顺序文件按顺序依次把记录写入文件 按顺序依次把记录读出来 文本文件 一行一条记录 记录可长可短 以 换行 字符为分隔符号 2 随机文件随机文件可以直接访问文件中的任意一个记录 记录长度相同根据记录号访问 3 二进制文件直接把二进制码存放在文件中 1 打开文件Open 文件名 For模式 As 文件号 Len 记录长度 1 模式OUTPUT 写操作INPUT 读操作APPEND 追加到文件未尾 2 文件号1 511 可以用FreeFile函数获得下一个可利用的文件号 3 记录长度小于或等于32767的整数 它指定数据缓冲区的大小 例如 打开C VB SCORE 供写入数据 指定文件号为 1 OPEN C VB SCORE FOROUTPUTAS 1 三 顺序访问模式 打开文件 读出或写入 关闭文件 2 写入命令Print 文件号 输出列表 保存文本框假定文本框的名称为txtTest 文件名为TEST DAT 方法1 把整个文本框的内容一次性地写入文件 Open TEST DAT ForOutputAs 1Print 1 txtTest TextClose 1方法2 把整个文本框的内容一个字符一个字符地写入文件 Open TEST DAT ForOutputAs 1Fori 1Tolen txtTest Text Print 1 Mid txtTest Text i 1 NextiClose 1 Write 文件号 输出列表 紧凑格式 数据项之间插入 并加上双引号 例如 命令 Write 1 One Two 123内容 One Two 1233 关闭文件Close 文件号 文件号 例如 Close 1 2 3 PrivateSubForm Click DimStrAsString AnumAsInteger Open D Myfile dat ForOutputAs1OpenApp PathAnumPrint 1 Str AnumWrite 1 Str AnumClose 1EndSub 实例1 Print和Write语句输出数据结果比较 4 读顺序文件LINEINPUT 文件号 字符串变量读一行到变量中 主要用来读取文本文件 INPUT 文件号 变量列表把读出的每个数据项分别存放到所对应的变量 INPUT 读取字符数 文件号 随意读取字符 FileCopy源文件路径及名称 目标文件路径及名称 将源文件复制到目标文件 Kill文件路径及名称 删除指定文件 Name源文件路径及名称 目标文件路径及名称 重新命名文件并将其移动到目标文件夹中 5 函数LOF 文件号 返回文件的长度 总字节数 EOF 文件号 返回读写位置 文件未尾时 EOF函数为True 否则为False Input 长度 文件号 读文件如 s Input LOF 1 1 FileLen 文件路径及名称 返回指定文件的长度FreeFile 返回一个尚未使用的文件号FileDateTime 文件路径及名称 返回指定文件创建或最后修改的日期和时间 读文本文件到文本框假定文本框名称为txtTest 文件名为MYFILE TXT 方法1 一行一行读txtTest Text Open MYFILE TXT ForInputAs 1DoWhileNotEOF 1 LineInput 1 InputDatatxtTest Text txtTest Text InputData vbCrLfLoopClose 1 方法2 一次性读txtTest Text Open MYFILE TXT ForInputAs 1txtTest Text Input LOF 1 1 Close 1方法3 一个个字符读DimInputDataasString 1txtTest Text Open MYFILE TXT ForInputAs 1DoWhileNotEOF 1 InputData Input 1 1 txtTest Text txtTest Text InputDataLoopClose 1 实例2 3 顺序文件的读写 随机文件中每一个记录定长 并设置记录号 记录号从1开始 存取记录时 只要说明所需记录的编号 系统就以此算出记录所在位置 然后加以写入或读出 1 初步认识例建立一个随机文件 文件中包含10个记录 每个记录由一个数 1至10 的平方 立
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年天津市和平区面向甘肃白银会宁籍招聘事业单位工作人员考前自测高频考点模拟试题及完整答案详解一套
- 安全培训效果调查课件
- 2025吉林大学白求恩第一医院病人服务中心陪检员招聘模拟试卷及答案详解(易错题)
- 农村集体宅基地买卖合同7篇
- Glycidyl-eicosapentaenoate-d5-生命科学试剂-MCE
- 安全培训效果评价方式课件
- 2025年河北地质大学选聘工作人员85人模拟试卷及答案详解(名师系列)
- 小学信息安全培训总结课件
- 2025内蒙古鄂尔多斯市水发燃气有限公司招聘6人考前自测高频考点模拟试题及答案详解(名校卷)
- VRAR技术在娱乐产业中的应用前景
- 十五五住房和城乡建设发展思路
- 马克思主义经典原著选读-1
- 《书愤》课件-【中职专用】高二语文(高教版2023职业模块)
- 邻里中心项目策划工作建议书框架及标准格式
- 人工智能通识 课件 第七章 智能之躯-具身智能
- 妈妈驿站加盟合同范本
- T/CUWA 60055-2023城镇排水管道螺旋缠绕内衬法修复用硬聚氯乙烯(PVC-U)带状型材
- DB62T 25-3016-2016 建筑工程资料管理规程
- 专题06 对角互补模型(原卷版)
- 2025勤工俭学合同范本
- 《职业生涯概述》课件
评论
0/150
提交评论