




已阅读5页,还剩188页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
VisualBasic程序设计 等级考试版 史春联主编 高等院校应用型特色规划教材 第1章VisualBasic程序开发环境第2章对象及其操作第3章简单程序设计第4章VisualBasic程序设计基础第5章数据的输入输出第6章控制结构第7章数组第8章常用标准控件第9章过程第10章键盘与鼠标事件过程第11章菜单程序设计第12章VisualBasic程序开发环境第13章多重窗体程序设计环境应用第14章文件处理第15章多媒体应用开发第16章数据库编程初步 第6章控制结构 程序的结构与流程图选择控制结构循环控制结构Goto型控制小型案例 文本统计 6 1程序的结构与流程图 结构化程序设计的基本控制结构有3种 即顺序结构 选择结构和循环结构 在VisualBasic中要解决较复杂的问题 就要使用到分支结构 循环结构和跳转结构了 而程序也正是因为有了这些结构才使得计算机能顺利完成各种各样的任务 所有的这些结构方式都是通过相应的语句实现的 它们是 条件结构If语句 选择结构SelectCase语句 循环结构Do Loop语句 For Next语句和While Wend语句 跳转结构GoTo语句和GoSub语句 6 1程序的结构与流程图 在研究算法时 人们习惯使用流程图来描述算法的结构 这种方法是用一些图框表示各类型的操作 用带箭头的线表示这些操作的执行顺序 6 2选择控制结构 在许多情况下 人们希望程序语句执行的顺序依赖于输入数据或中间运算的结果 这时需要对某个变量或表达式的值进行判定 以决定执行哪些语句和跳过哪些语句不执行 我们称这种程序结构为选择结构 或分支结构 6 2 1单行结构条件语句 1 单行形式的If Then用途 通过对条件的判断有选择的执行一条语句语法 If条件Then语句条件 是供判断的关系表达式或逻辑表达式语句 是条件成立的时候要执行的语句 6 2 1单行结构条件语句 例6 2 找出用户输入的两个数的大数PrivateSubCommand1 Click DimAAsInteger BAsIntegerDimMaxAsIntegerA Int InputBox 请输入第一个整数 输入 3 B Int InputBox 第输入第二个整数 输入 6 Max AIfMax BThenMax BMsgBoxStr A 与 Str B 之中的大数为 vbCrLf Str Max EndSub 6 2 1单行结构条件语句 2 单行形式的If Then Else用途 根据条件是否成立从两条语句中选择一条执行语法 If条件Then语句1Else语句2说明 VisualBasic在遇到If Then Else语句时首先计算出条件的逻辑值若为True 即条件成立 则执行语句1若为False 即条件不成立 则执行语句2 6 2 1单行结构条件语句 例6 3 验证用户输入的整数的奇偶性PrivateSubcmd1 Click Dimint1AsInteger int2AsIntegerint1 CInt txtInput Text int2 int1Mod2Ifint2 0ThenMsgBox 是一个偶数 ElseMsgBox 是一个奇数 EndSub 6 2 2块结构条件语句 1 多行形式的If Then EndIF用途 多行形式的If Then EndIF可用来判断单一条件来执行一组语句语法 If条件Then语句组EndIF说明 这是If Then语句的多行形式 使用这种形式的选择结构 在条件成立时要执行的语句不再直接跟在Then后面 而是另外自成一个语句块 并且在最后一定要加上EndIF 6 2 2块结构条件语句 例6 4 三数排序 构造如图的界面 用户在3个文本框中输入3个数 单击按钮完成从大到小的排序 把结构显示在第4个文本框中 解析 这是一个简单的排序程序 也是排序算法中选择排序的雏形 通过两次判断 把最大的数放在第一位 再经过一次判断把第二大的数放在第二位 这样对于3个数 就完成了从大到小的排序 6 2 2块结构条件语句 例6 4代码PrivateSubCommand1 Click DimAAsSingle BAsSingle CAsSingleDimDAsSingle 中间变量A Val Text1 Text B Val Text2 Text C Val Text3 Text IfA BThenD A A B B DEndIfIfA CThenD A A C C DEndIfIfB CThenD B B C C DEndIfText4 Text Str A Str B Str C EndSub 6 2 2块结构条件语句 2 多行形式的If Then Else用途 根据条件是否成立 选择执行不同的语句组语法 If条件Then语句组1Else语句组2EndIF说明 是单行If Then Else结构的多行形式 不同之处是条件成立时执行的语句组1不能直接跟在Then后面而条件不成立时要执行的语句组2也不能直接跟在Else后面 两个语句组独立成行 可以是一条语句也可以是多条语句 而且多行形式的If Then Else语句最后一定要有EndIf 两者的程序流程是相似的 6 2 2块结构条件语句 例6 5 分段函数求值 对于下面的函数 由用户输入一个X值 求Y值 6 2 2块结构条件语句 例6 5代码PrivateSubCommand1 Click DimXAsSingle YAsSingleX Val InputBox X IfX 0ThenY X XElseY 2 XEndIfMsgBox Y Str Y EndSub 6 2 2块结构条件语句 3 多分支的If Then ElseIF用途 可判断多重条件 执行多行语句 如果情况复杂 要判断的条件不止一个时 就需用到If Then Else结构语法 If条件1Then语句组1 ElseIF条件2Then语句组2 ElseIF条件n 1Then语句组n 1 Else语句组n EndIf 6 2 2块结构条件语句 3 多分支的If Then ElseIF说明 1 VisualBasic首先测试条件1是否成立 如果成立 值为True 执行语句组12 否则 继续判断条件2是否成立 如果成立 值为True 就执行语句组23 以此类推 条件3至条件n 1 4 如果所有条件都不成立 就执行Else之后的语句组n 6 2 2块结构条件语句 例6 7 判断输入成绩的等级 6 2 2块结构条件语句 例6 7解法2 PrivateSubCommand1 Click DimsngFenAsSinglesngFen Val InputBox 请输入成绩 IfsngFen 90ThenMsgBox 优秀 ElseIfsngFen 80ThenMsgBox 良好 ElseIfsngFen 70ThenMsgBox 中等 ElseIfsngFen 60ThenMsgBox 及格 ElseIfsngFen 30ThenMsgBox 补考 ElseMsgBox 重修 EndIfEndSub 6 2 3多分支选择控制结构 SelectCase 用途 虽然If Then ElseIF可以用来判断多重条件的情况 但有时条件太多 程序会变得不易阅读 为此VisualBasic提供了SelectCase语句 使用SelectCase语句可以使程序写起来较为简洁 不但容易阅读 执行起来也较有效率 语法 SelectCase测试表达式Case测试结果1语句组1Case测试结果2语句组2 Case测试结果n 1语句组n 1CaseElse语句组nEndSelect 6 2 3多分支选择控制结构 SelectCase 说明 1 VisualBasic遇到SelectCase时 首先计算出测试表达式的值 如果该测试表达式值满足Case后任何一个测试结果 则对应的语句组会被执行 如果都不满足 则执行CaseElse后的语句组 2 测试结果可以是以下三者之一 一般表达式或常量 变量范围表达式 expressionToexpression比较表达式 Is比较运算符表达式 6 2 3多分支选择控制结构 SelectCase 例6 8 判断用户输入的整数除以3以后的结果 PrivateSubCommand1 Click DimxAsIntegerx Val InputBox 请输入一个正整数 输入 32 SelectCasexMod3Case0MsgBoxStr x 整除3 Case1MsgBoxStr x 除以3余1 Case2MsgBoxStr x 除以3余2 EndSelectEndSub 6 2 4IIf函数 用途 作为函数 根据测试表达式得到的逻辑值 从两个表达式选择一个作为返回值 其用途类似于If Then Else语句 只不过IIf函数是一个用来返回值的选择结构 语法 IIf 测试表达式 True部分 False部分 说明 测试表达式是一个逻辑表达式 True部分与False部分可以是一个表达式或变量与常量 6 3循环控制结构 在实际应用中 经常遇到一些操作并不复杂 但需要反复多次处理的问题 比如要计算1 2 3 10000 直接把这个求和的表达式用手工输入显示是不现实的 循环结构可以帮助我们有效的解决这一类问题 利用循环结构 只需要编写少量的语句就可以让计算机重复执行许多次 从而完成大量类同计算的需求 VisualBasic提供了3种循环控制方式 For NextDo LoopWhile Wend 6 3 1For Next循环 用途 For循环通常用于将某一程序段重复执行 且重复次数是固定的场合 For循环的重复次数可以由一个计数变量的上 下限来决定 语法 For计数器 初值To终值 Step增量 循环体 Next计数器 6 3 1For Next循环 说明 For循环执行步骤如下 1 将计数器设定为初值 2 若增量为正 则判断计数器的值是否小于终值 若增量为负 则判断计数器的值是否大于终值 3 若上述判断值为True 则执行循环体中的语句 否则跳出循环 4 到Next语句 将计数器加上增量5 重复步骤2至4 6 3 1For Next循环 例6 9 求S 1 2 3 N 其中 N由用户输入PrivateSubCommand1 Click DimNAsInteger IAsInteger SAsLongN Int InputBox N ForI 1ToNS S INextIPrint S SEndSub 6 3 1For Next循环 可以注意到 对于需要将某些语句执行固定次数的循环 使用For Next循环非常方便 而For循环的次数是由循环的初值 终值和步长3个因素确定 计算公式为 循环次数 Int 终值 初值 步长 1一般情况下 For Next循环需要正常结束 即循环变量到达终值 但在某些情况下 可能在循环变量到达终值前需要退出循环 这可通过ExitFor语句来实现 6 3 1For Next循环 例6 11 判断用户输入的自然数是否为质数 解析 1 若自然数除了1和本身外没有其他因数则该数为质数 否则为合数2 以程序判断自然数N是否为质数 可以用自2至N 1循环查找N的因数 如果没有N的因数 则N为质数 如果找到一个因数 可以退出循环得到N是合数的结论 3 根据自然数的性质 若N有因数q N 则必有因数p N 即对于合数N必定有小于N的平方根的因数 由此可精简算法 使循环的终值由N减小到Sqr N 6 3 1For Next循环 例6 11代码PrivateSubCommand1 Click DimNAsLong IAsIntegerN Val InputBox 请输入大于2的自然数 IfNSqr N ThenMsgBoxStr N 是质数 ElseMsgBoxStr N 是合数 EndIfEndSub 6 3 1For Next循环 For Next循环可以嵌套使用 嵌套层数没有具体限制 其基本要求是 每个循环必须有一个唯一的循环变量 内层循环的Next语句必须在外层循环的Next语句之前 内外循环不得相互交叉 例如 下面的循环嵌套是正确的 ForI aTobForJ ctod NextJNextI下面的循环嵌套是错误的ForI aTobForJ cTod NextINextJ 6 3 1For Next循环 例6 12 求S 3 6 9 12 PrivateSubCommand1 Click DimIAsInteger JAsLongDimKAsLongDimSAsLongForI 3To12Step3K 1ForJ 1ToIK K JNextJS S KNextIPrint S SEndSub 6 3 2Do Loop循环 有些时候 我们希望循环能不限次数地重复执行 直到某个条件被满足为止 Do Loop循环就可以根据循环条件是True或False决定是否结束循环 Do Loop循环在语法上有以下3种形式 条件前置的条件后置的无条件式的 6 3 2Do Loop循环 1 条件前置的Do Loop循环用途 当需要先判断条件 再执行循环体时使用语法 DoWhile Until条件循环体Loop 6 3 2Do Loop循环 1 条件前置的Do Loop循环说明 1 先判断条件是否符合 决定是否要执行循环体2 判断条件的方式有While或Until两种 两者为互补关系3 使用While判断时 若条件为True 则反复执行循环体 直到条件为False时为止4 使用Until判断时 若条件为False 则反复执行循环体 直到条件为True时为止 6 3 2Do Loop循环 例6 13 计算调和级数的和 要求精确到小数点后6位 数列的最后一项小于0 000001时停止计算 调和级数为 6 3 2Do Loop循环 例6 13解法1 PrivateSubCommand1 Click DimSAsSingleDimAAsSingleDimTAsLongT 1A 1S 1DoWhileA 0 00001T T 1A 1 TS S ALoopMsgBox S Format S EndSub 6 3 2Do Loop循环 例6 13解法2 PrivateSubCommand1 Click DimSAsSingleDimAAsSingleDimTAsLongT 1A 1S 1DoUntilA 0 00001T T 1A 1 TS S ALoopMsgBox S Format S EndSub 6 3 2Do Loop循环 2 条件后置的Do Loop循环用途 当需要先执行循环体 再判断条件时使用语法 Do循环体LoopWhile Until条件 6 3 2Do Loop循环 2 条件后置的Do Loop循环说明 1 先执行循环体一次 再判断Loop后的条件是否符合 以决定要不要重复执行循环体2 判断条件的方式可使用While或Until 两者为互补关系3 使用While判断时 若条件为True 则反复执行循环体 直到条件为False时为止4 使用Until判断时 若条件为False 则反复执行循环体 直到条件为True时为止 6 3 2Do Loop循环 例6 14 利用Do循环完成数值计算公式求 6 3 2Do Loop循环 例6 14解法1 PrivateSubCommand1 Click DimSAsSingle PiAsSingleDimAAsSingleDimmAsInteger kAsLongm 1k 1A 1S 1Dok k 2m mA m kS S ALoopWhileAbs A 0 000001Pi 4 SMsgBox Format Pi EndSub 3 无条件的Do Loop循环 用途 当程序中可能需要无穷循环时 可使用无条件的Do Loop循环语法 Do 循环体 Loop说明 使用此种循环可能使程序产生无穷循环 为了避免这种情况的发生 通常在循环体中要有条件语句 以在适当的时候使用ExitDo语句退出循环 6 3 3While Wend循环 用途 While Wend循环与条件前置的DoWhile Loop循环相似 要先判断条件以决定是否执行循环体 语法 While条件 循环体 Wend说明 先判断条件是否成立 当条件为True时执行反复执行循环体 直到条件为False时为止 While Wend语句是早期Basic语言的循环语句 现在它的功能已完全被Do Loop语句所包括 所以不常使用了 6 3 4多重循环 通常把循环体内不含有循环语句的循环叫做单层循环 而把循环体内含有循环语句的循环称为多重循环 例如在循环体内含有一个循环语句的循环称为二重循环 多重循环又称作多层循环或循环嵌套 6 3 4多重循环 例6 15打印 九九乘法表 输出结构如图所示 6 3 4多重循环 解析 九九乘法表是一个9行9列的二维表 行和列都要变化且行列相互约束 第I行需要有I列 是一个典型的二重循环问题PrivateSubForm Load ShowDimIAsInteger JAsIntegerForI 1To9ForJ 1ToIPrintFormat I NextJPrint PrintNextIEndSub 6 4Goto型控制 6 4 1GoTo语句用途 在一个过程中改变语句的执行顺序 跳过部分代码去执行另一部分或返回已经执行过的某语句使之重复执行 语法 GoTo 标号 行号 说明 1 GoTo语句改变程序执行的顺序 无条件的把控制转移到 标号 或 行号 所在的程序行 并从该行开始向下执行 2 标号的命名与变量类似 但是必须以冒号结束 行号则是由数字指定 后面不跟冒号 3 GoTo语句的功能被限定在一个过程中 不能将控制跳转到另一个过程中 6 4Goto型控制 6 4 2On GoTo语句用途 在使用GoTo型控制时要实现类似于SelectCase的功能 实现多分支选择控制 就要用到On GoTo型控制语法 On数值表达式GoTo行号列表 标号列表说明 VisualBasic在遇到On GoTo语句时 先计算数值表达式的值 并将其四舍五入得到一个整数 根据这个整数值决定跳到第几个行号或标号处执行 1 若该整数值为1则转向第一个行号或标号处执行语句 若值为2则转向第二个行号或标呈处执行语句 并依此类推2 若该整数值为0或大于 行号列表 或 标号列表 中的项数 程序自动跳转到On GoTo语句后面的一个可执行语句3 若该整数值为负数 会产生一个运行期错误 6 5小型案例 文本统计 在一文本框中输入一段文字 能够对其中的单词数 字母数 数字字符及其他字符数进行统计 通过对两个 统计 按钮的单击 分别对单词个数和字符个数进行统计 运行界面如图 6 5 2设计思路 若要统计出单词的个数 需要明白单词间是用空格符分隔的 循环读取字符时 需用一个逻辑变量来表明是否有新单词开始 具体方法如下 1 设一逻辑变量初始值为真 当读到第一个非空字符时 计数变量增1 同时将该逻辑变量设为假 2 遇到空格时将改逻辑变量设为真 再次遇到非空字符时 再次将该逻辑变量设为假 同时计数 3 循环往复 最后得到单词总数 4 对于字符的统计只需要在读取每个字符时判断是什么类型的字符 并进行统计即可 6 5 3操作步骤 1 创建窗体 1 启动MicrosoftVisualBasic6 0 2 打开新的 标准EXE 工程 建立工程工程1 窗体名为Form1 3 在窗体上放置一个文本框 两个框架和两个按钮 界面如运行界面所示 4 主要控件的属性设置如下表所示 2 添加代码 略 见P138 第7章数组 数组的概念数组的基本操作动态数组控件数组 7 1数组的概念 在VisualBasic中数组 Array 用来保存多个相同类型的相关联的数据 数组有数组名 一个数组由多个数组元素组成 每一个数组元素中保存了一个数据 要对某一元素中的数据进行存取 必须指定这个元素在数组中的序号 又称为索引或下标 每一个数组元素 都可以使用数组名与下标来唯一的确定 下标是连续的整数 下标的最小值称为下标下界 最大值称为下标上界 由下标的上下界可以确定数组中元素的个数 7 1 1常规数组的声明 常规数组也称为 固定大小的数组 是指声明之后元素个数不能改变的数组 这与动态数组是不同的 常规数组的名称 维数 类型与元素个数都要在声明时确定 和普通变量类似 数组应该先声明后使用 在VisualBasic中可以使用Dim Redim Static Public等关键字来声明数组 语法 Public Private Static Dim ReDim Preserve 数组名 维数说明 As数据类型 说明 在定义常规数组时 需要说明数组的维数与下标的上 下界 也可以使用Public Private Dim等关键字定义只带圆括号而无维数说明的动态数组 而ReDim通常用来重新定义动态数组的大小 在改变原有数组最末维的大小时 使用Preserve关键字可以保持数组中原来的数据 7 1 1常规数组的声明 下面用Dim语句为例说明常规数组的声明 1 只给出下标的上界1 对于一维数组 使用如下语句Dim数组名 下标上界 As数据类型2 对于二维数组 使用如下语句Dim数组名 第一维上界 第二维上界 As数据类型 7 1 1常规数组的声明 默认情况下 数组下标从0开始 如果希望从1开始 可使用OptionBase语句进行设置 语法 OptionBasen说明 其中n为一个整数 其值只能是0或1 当n为1时 默认的下标下界从1开始 注意 下标上界 与数组 元素个数 是不同的概念 下标上界是可以使用的最大下标值 是在定义数组时给定的 元素个数在给定数组的下标后可以计算得出 一维数组的元素个数为 下标上界 下标下界 1 二维数组元素个数为 第一维下标上界 第一维下标下界 1 第二维下标上界 第二维下标下界 1 7 1 1常规数组的声明 2 指定下标下界使用第1种方法定义的数组 其下标的下界只能是0或1 如果要让下标根据需要从其它值开始 就得指定数组下标的下界 格式如下 1 对于一维数组 使用如下语句Dim数组名 下界To上界 As数据类型2 对于二维数组 使用如下语句Dim数组名 下界To上界 下界To上界 As数据类型 7 1 1常规数组的声明 无论用什么形式定义数组 都应注意声明数组的规则 数组名的命名规则与变量名相同 在同一个过程中 数组名不能与变量名同名 否则会出错 例如 DimstrNameAsStringDimstrName 30 AsString这样的代码在程序运行时 因为同一范围内有同名的声明 将产生编译错误 定义数组时 每一维下标上下界的值都必须是常量 不能是变量或含变量的表达 7 1 2数组元素的使用 在定义好数组之后 要使用数组的值是通过访问数组元素实现的 即数组元素可以像变量一样参与赋值与表达式的运算 而对数组元素的引用是通过指定数组的下标完成的 即在数组名后的括号中指定下标可使用相应的数组元素 7 1 2数组元素的使用 1 若建立的是多维数组 在引用数组元素时必须组出所有维的下标例如 DimA 3 2 3 AsStringDimB 2 2 AsIntegerA 2 1 0 abc 三维的下标都需要给出B 2 10 维数不符 运行时会引发错误 7 1 2数组元素的使用 2 引用数组元素时 其下标值应在建立数组时所指定的范围内 否则会产生下标越界错误 例如 DimArr 10 AsSingleA 0 7 95 正确A 1 21 3 出错A 11 0 3215 出错 7 2数组的基本操作 7 2 1数组元素的输入 输出与复制 1 通常通过循环利用赋值语句给数组元素赋值 例如 DimA 3To5 AsStringDimIAsIntegerForI 3To5A I Int InputBox A Format I NextI在循环中利用输入框给数组A的每个元素赋值 7 2 1数组元素的输入 输出与复制 2 为了显示数组中的值 也可以通过循环输出数组元素的值例如对于数组A 在输出时利用循环向窗体打印数组元素 ForI 3To5PrintA I NextI 7 2 1数组元素的输入 输出与复制 例7 1 将菲波数列的前50项存入数组菲波数列的前几项为 1 1 2 3 5 8 13 21 34 解析 菲波数列的通项为 Ak Ak 1 Ak 2 在给一维数组赋值时 应注意菲波数列的值很大 使用Double数据类型在窗体上放置文本框Text1 并设置MultiLine属性为True ScrollBars属性为2 7 2 1数组元素的输入 输出与复制 例7 1代码PrivateSubForm Load DimA 1To50 AsDoubleDimIAsIntegerA 1 1 A 2 1Text1 Text 1 vbCrLf 1 ForI 3To50A I A I 1 A I 2 Text1 Text Text1 Text CStr A I vbCrLfNextIEndSub 7 2 2数组初始化与清除 用途 对于一维数组 可以使用Array函数给数组赋值 语法 Array 元素列表 说明 返回一个包含数组的变体类型 即没有作为数组声明的变体类型变量也可以表示数组 可以使用Array 函数给将变体类型的变量赋值为一个一维数组 7 2 2数组初始化与清除 用途 重新初始化大小固定的数组的元素 以及释放动态数组的存储空间 语法 Erase数组名说明 1 对于固定大小的数组 Erase语句将重新初始化数组元素数值数组 将每个元素设为0 变长字符串数组 将每个元素设为空串 定长字符串数组 长度固定 将每个元素设为定长的空格串 逻辑数组 将每个元素置为False变体型数组 将每个元素设为空值 2 对于动态数组 Erase语句释放动态数组所使用的内存 在下次引用动态数组之前 必须使用ReDim语句来重新定义该数组变量的维数与下标 7 2 3ForEach Next语句 数组是一个特殊的集合 VisualBasic提供了ForEach语句可以遍历集合的元素 用途 针对一个数组或集合对象中的所有元素重复执行一段程序语法 ForEach元素In集合 循环体 Next元素说明 1 此处 元素是一个变体变量 用来对应集合中的各个成员2 集合是由多个成员组成的数组或对象的集合 7 2 3ForEach Next语句 ForEach的运行方式 首先 将集合中的第1个成员指定给元素变量 然后执行循环体执行到Next语句时 返回ForEach处将集合中的下一个成员指定给元素变量 再次执行循环体反复执行步骤2 3 直到集合中的成员依序执行完毕为止 7 2 3ForEach Next语句 例7 5 利用ForEach循环对一维数组所有元素求和PrivateSubCommand1 Click DimA 1To40 AsSingleDimIAsIntegerDimK SAsSingleRandomizeForI 1To4A I RndNextIForEachKInAS S KNextKPrintSEndSub 7 3动态数组 当事先不能预料应该为数组声明多少个元素时 可以使用VisualBasic提供的动态数组 动态数组是指声明之后维数与下标上下界可以改变的数组 7 3 1动态数组的定义 声明动态数组的方法与声明常规数组相似 在声明时要指定数组的名称和数据类型 不过数据名后的括号是空的 语法 Public Private Dim Static动态数组名 As类型名 声明之后 动态数组还没有任何元素 要使用它 必须使用ReDim语句来重新定义动态数组的维数 元素个数与下标上下界 语法为 Redim动态数组名 mlTo nl m2To n2 ReDim语句与使用Dim语句声明数组时的语法相似 只是不能再改变数据类型 在程序中可以根据需要随时使用ReDim来重新定义动态数组 默认情况下 使用ReDim会清除重新定义之前动态数组所有元素中的数据 使用默认值来填充 如果希望在重新定义后保留以前数组元素的值 则要在ReDim语句中使用Preserve关键字 7 3 2动态数组的使用 例7 6 下面的程序演示动态数组的使用OptionBase1PrivateSubForm Load DimMyArray AsInteger 声明动态数组 ReDimMyArray 5 分配5个元素 Debug Print 第一次使用动态数组 ForI 1To5MyArray I I 初始化数组 deubg PrintMyArray I NextI 重定义该数组的大小 并清空其中所有元素 ReDimMyArray 10 大小重定为10个元素 此时 数组元素的值都为0Debug Print 第二次使用动态数组 ForI 1To10MyArray I I 再次初始化数组 deubg PrintMyArray I NextI 重定义该数组的大小 但没有清除其中的元素 ReDimPreserveMyArray 15 大小重定为15个元素 此时数组的前10个元素仍保留着它的值Debug Print 第三次使用动态数组 ForI 1To10deubg PrintMyArray I NextIEndSub 7 4控件数组 7 4 1控件数组概念 控件数组是指具有相同名称 类型以及事件过程的一组控件 每一个控件具有一个唯一的索引 Index 当数组中的一个控件识别某一事件时 它将调用此控件组的相应事件过程 并把相应索引作为参数传递 允许用代码决定是哪一个控件识别此事件 7 4 1控件数组概念 控件数组的每个元素都有一个与之关联的索引 Index 值 该值由控件的Index属性指定 由于控件数组中的各个元素具有相同的Name属性 所以Index属性与控件数组中的某个元素有关 即 控件数组的名字由Name属性指定 而数组中的每个元素则由Index属性指定 这一点和数组类似 应用控件数组元素时其Index值也是在圆括号中标出 如 有控件数组Opt 其Index值为1的元素为opt 1 7 4 1控件数组概念 为区分控件数组中的各个元素所触发的事件 VisualBasic会把控件数组元素的索引值传送给事件过程 如 窗体上有三个名为cmd的按钮控件 则cmd的Click事件过程形式为 Privatecmd Click IndexAsInteger EndSub 7 4 2控件数组的使用 1 在设计期 可以通过三种方法来建立控件数组1 复制粘贴2 控件改名3 设置Index属性的值 7 4 2控件数组的使用 2 在设计期 删除控件数组的元素在控件数组建立后 只要改变一个控件的 名称 属性 同时将该控件的 Index 属性值清空 将属性变量的值删除 而不是设为0 因为0是数组元素的下标 就能把该控件从控件数组中删除 7 4 2控件数组的使用 3 在程序的运行期 动态的添加与删除控件数组的元素在程序运行时 使用Load和Unload语句可添加和删除控件数组中的元素 然而 添加的控件必须是现有控件数组的元素 因此必须在设计期创建一个Index属性为0 非空 的控件 然后在运行时使用如下语法 语法 Load对象名 下标 说明 在运行期向控件数组添加新的元素 在加载新元素时 大多数的属性值将由数组中具有最小下标的现有元素复制 但Visible属性不会被复制 所以为了使新的控件可见 必须将其Visible属性设置为True 在必要时 还需要重新设置其Left与Top属性 另外要注意的是 新元素的下标不能与已存在的控件元素下标重复 否则会导致运行期错误 Unload对象名 下标 说明 删除由Load语句创建的控件数组元素 Unload语句无法删除设计期创建的控件 7 4 2控件数组的使用 例7 7 先在窗体上放置两个按钮 Command1为 加载控件 按钮 Command2为 卸载控件 按钮 每次单击Command1动态加载一个控件 单击Command2卸载动态加载的控件 再放置一个按钮更名为cmd 并设置其Index属性为0 其Caption属性为cmd 0 放置一个文本框Text1 用来捕捉单击cmd控件数组元素的下标 每次单击cmd按钮时 将相应的元素下标显示在Text1中 7 4 2控件数组的使用 例7 7代码DimnumAsIntegerPrivateSubCommand1 Click num num 1Loadcmd num cmd num Caption cmd Format num cmd num Top cmd num 1 Top cmd num 1 Heightcmd num Visible TrueEndSubPrivateSubCommand2 Click Ifnum 0ThenExitSubUnloadcmd num num num 1EndSubPrivateSubcmd Click IndexAsInteger Text1 Text 下标为 Str Index 的cmd被单击 EndSub 第8章常用标准控件 图形控件框架 Frame 选择控件 单选框和复选框选择控件 列表框和组合框滚动条 HscrollBar与VscrollBar 计时器 Timer 焦点与Tab顺序 8 1图形控件 8 1 1直线 Line 与形状 Shape 1 Line控件直线控件Line并不常用 它的主要作用是要窗体上显示一条直线段 把窗体上的控件进行视觉上的分组 因为Line控件只起装饰作用 所以它没有Move方法也不支持任何事件 直线控件的外观由为数很少的几个属性来决定 8 1 1直线 Line 与形状 Shape Line控件常用的属性 1 名称 属性直线控件的对象名 2 X1属性 Y1属性 X2属性 Y2属性这4个属性决定了直线控件的两个端点在窗体上的坐标值 直线控件没有Left Top Width和Height属性 可以使用这四个属性来调整控件的大小与位置 3 Visible属性Visible属性决定了直线控件的可见性 True为可见 False为不可见 因为直线控件无事件 所以没有Enabled属性 8 1 1直线 Line 与形状 Shape Line控件常用的属性 4 BorderStyle属性此属性决定了直线控件的线型 线条样式 它的取值为0 6 意义见下表 8 1 1直线 Line 与形状 Shape Line控件常用的属性 5 BorderWidth属性控件线条的宽度单位为像素 要使用除 实线 与 透明 之外的线型时 这个属性一定要设为1 否则只显示实线 不可能有粗点划线 粗虚线等 8 1 1直线 Line 与形状 Shape 2 Shape控件直线控件只能显示直线条 而形状控件 又称为图形控件 Shape则可以显示多种不同的形状 形状控件也是用来装饰窗体的 1 名称 属性Shape控件的对象名2 Left属性 Top属性 Width属性 Height属性 Visible属性这些属性决定了形状控件的大小 位置与可见性 用法与其他控件相同 形状控件不响应用户操作 所以没有Enabled属性 8 1 1直线 Line 与形状 Shape Shape控件3 Shape属性Shape属性决定了形状控件以什么形状显示 所有可能的形状见下表 8 1 1直线 Line 与形状 Shape Shape控件4 BorderStyle属性这个属性决定了形状控件的边框样式 取值与直线控件的BorderStyle属性相同 与直线控件不同的是 当BorderStyle属性为1时 边框处于形状边缘的中心 当BorderStyle属性为6时 边框的外边界就是形状的外边缘 5 BorderWidth属性BorderWidth属性决定形状控件的边框宽度 单位为像素 与直线控件相似 当这个值大于1时 不论BorderStyle取值如何 只能显示实线 8 1 1直线 Line 与形状 Shape Shape控件6 FillStyle属性此属性决定形状控件内部的填充样式 所有的样式与相应的属性值见下表 8 1 2图像框 Image 图像控件用来在窗体上显示保存在文件中的图像 它支持的图形文件格式有 位图文件 bmp Windows元文件 wmf 增强型元文件 emf 图标文件 ico 和以 jpg gif为扩展名的图形文件 8 1 2图像框 Image 图像框控件常用的属性 方法与事件1 名称 属性图像控件的对象名 2 Left属性 Top属性 Width属性 Height属性 Visible属性 Enabled属性这些属性与其他控件的意义相同 Enabled属性为False时图像控件的外观和为True时相同 图像控件并不能接收Click和DblClick事件 3 BorderStyle属性此属性值为0时 图像控件无边框 默认值 为1时 控件有边框 8 1 2图像框 Image 图像框控件常用的属性 方法与事件4 Picture属性Picture属性决定了图形控件中所显示的图像来源 即磁盘文件 不给此属性赋值 则控件不会显示任何图形 在设计时 可以在Picture属性的值单元格中打开 加载图片 对话框来指定图像控件所显示的图形文件 在程序运行时 可以在代码中使用VisualBasic的内部函数LoadPicture来把一个图形文件赋予此属性 语法 LoadPicture 图形文件名 说明 LoadPicture函数用来将文件中的图形载入到窗体 图片框或图像框的Picture属性 可选参数要求以字符串的形式给出图形的文件名 空参数的LoadPicture 函数 可以清除对象中的图像 8 1 2图像框 Image 图像框控件常用的属性 方法与事件5 Stretch属性程序运行时 如果此属性为True 当所显示图像的原始大小与控件大小不同时 会缩放图像来填充整个控件 当图像缩放过度时 会造成失真 当Stretch属性为False 默认值 时 图像会以原始大小显示 如果控件比图像小 会使图像显示不完整 6 Move方法Image控件支持Move方法 用法与其他控件相同 7 Click事件 DblClick事件Image控件支持Click事件和DblClick事件 用法与其他控件一样 8 1 2图像框 Image 例8 1 图像框中图形的复制 本例中使用的图形选自VisualBasic安装文件夹中的 Common Graphics Icons Misc 子文件夹 读者可自行查找也可选用自已的图形文件 在窗体上放置5个图像框控件分别命名为 img1 img2 img3 img4与IMG 通过属性窗口给5个图像框加载图形 同时将前4个图像框的Visible属性设置为False 再向窗体添加一个按钮控件并设置Caption属性 8 1 2图像框 Image 例8 1代码DimintChAsIntegerPrivateSubCommand1 Click SelectCaseintChCase0IMG Picture img1 PictureCase1IMG Picture img2 PictureCase2IMG Picture img3 PictureCase3IMG Picture img4 PictureEndSelectintCh intCh 1 Mod4EndSub 8 1 3图片框 PictureBox 1 名称 属性图片框控件的对象名 2 Left属性 Top属性 Width属性 Height属性 Visible属性 Enabled属性图片框控件的这些属性与其他控件的意义相同 3 BorderStyle属性BorderStyle属性值为0时 图片框无边框 为1时 有边框 默认值 4 Picture属性图片框控件Picture属性的意义与用法和图像控件的Picture属性一样 8 1 3图片框 PictureBox 5 AutoSize属性在运行过程中 如果此属性为True 当控件显示的图像 Picture属性决定 大小与控件大小不同时 会自动改变控件的大小来与图像的大小一致 如果属性值为False 默认值 不会自动调整控件大小 图片框控件不会对其显示的图像进行缩放 这一点与图像控件不同 8 1 3图片框 PictureBox 6 Align属性Align属性决定了图片框的位置 取值与意义见下表 8 1 3图片框 PictureBox 7 Move方法PictureBox控件有Move方法 用法和其他控件相同 8 Click事件 DblClick事件PictureBox控件有Click DblClick事件 用法与其他控件一样 9 Change事件当图片框的Picture属性的值变化时 即由显示一个图片改为显示另一个图片 则触发这个事件 8 2框架 Frame 框架 Frame 控件是一个左上角有标题文字的方框 它的主要作用是对窗体上的控件进行视觉上的分组 使窗体上的内容更有条理 1 名称 属性框架控件的对象名 2 Left属性 Top属性 Width属性 Height属性 Visible属性 Enabled属性框架控件的这些属性与其他控件的意义相同 如果容器控件的Enabled属性值为False 则置于其内部的控件都不能响应用户的鼠标与键盘操作 8 2框架 Frame 3 Caption属性此属性的值就是框架左上角的标题文字 与标签控件相似 可以在这个属性值中使用 设置一个快捷键 4 BorderStyle属性当这个属性值为0时 框架不显示边框与标题文字 为1时 默认值 正常样式 有边框和文字 8 2框架 Frame 5 Move方法框架控件支持Move方法 意义与用法和其他控件一样 6 Click事件 Dblclick事件框架控件支持鼠标的单击与双击事件 用法与其他控件一样 一般不必编写框架控件的Click和Dblclick事件过程 8 3选择控件 单选框和复选框 通常在应用程序的对话框中都会以选项的形式给用户选择的功能 如果选项的数量不多一般都会表现为单选框与复选框 复选框表示用户可以对这组功能进行多选 也可以不选择 可以用下列几种方法使复选框在选中与不选中之间切换 1 直接用鼠标单击 2 使用复选框标题文字中的快捷键 Alt 字母 3 把输入焦点移至复选框后按空格键 单选框表示在这组功能中只能有一个并且必须有一个空能被选中 选中一个单选框 则原来被选中的单选框会自动变为未选中的状态 选中单选框的操作与复选框相同 可以直接用鼠标单击 快捷键或者在获取输入焦点后按空格键 8 3 1单选框 OptionButton 单选框控件 又称为选项按钮 每个单选框都是由一个圆形框和标题文字组成 圆形框中空白表示这个选项未被选中 圆形框中有黑点表示选中 即给用户选择一个选项的功能 单选框一般都成组地列在窗体上供用户从中进行选择 在选项组中用单选框显示选项 用户只能选择其中的一项 而在框架控件或图片框控件等容器中绘制单选框控件可以把这些控件分组 这样用户只能在每一组中选择一个选项 8 3 1单选框 OptionButton 1 名称 属性单选框控件的对象名 2 Left属性 Top属性 Width属性 Height属性 Visible属性 Enab
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 零售培训工作总结
- 《请排队-莫拥挤》课件
- 稳定性心绞痛的护理查房
- 护理面试自我介绍模板
- 腰椎弓钉内固定术后护理
- 《诗经·周南·芣苢》课件
- 《街心公园》课件设计
- 房地产项目销售工作总结
- 《蒹葭》古代文学课件
- 颌面围手术期护理课件
- 2025年国防教育知识竞赛试题(附答案)
- 梁式转换层悬挂式施工和贝雷梁施工技术
- 工伤受伤经过简述如何写
- 【艾青诗选】批注
- 护士在社区护理中的工作职责和技能要求
- 2025年度工业园区物业收费及服务标准合同范本
- 银行现金取款申请书
- 2025年江苏省连云港市赣榆区面向大学生村官定向招聘事业单位人员26人历年高频重点提升(共500题)附带答案详解
- 2025年上海市浦东新区高三语文一模作文题目解析及范文:一个人履行责任是否意味着放弃自由
- 2025年中国邮政储蓄银行招聘考试题库
- 玻璃体切除手术护理查房
评论
0/150
提交评论