循环处理ppt课件

上传人:钟*** 文档编号:1272233 上传时间:2019-10-12 格式:PPT 页数:74 大小:1.53MB
返回 下载 相关 举报
循环处理ppt课件_第1页
第1页 / 共74页
循环处理ppt课件_第2页
第2页 / 共74页
循环处理ppt课件_第3页
第3页 / 共74页
点击查看更多>>
资源描述
第六章 循环处理,6.1 循环语句 6.2 列表框及列表项的循环处理 6.3 组合框,6.1 循环语句,重复执行一种或一组操作的情况,例如,计算5!。5!=1*2*3+*4*5,需要重复执行乘法运算,将1、2、3、4、5逐个相乘,得到计算结果。 这种重复执行的操作称为循环处理。 在VB中,循环操作是yoFor语句和Do While语句。 对有些对象的操作也常常需要通过循环逐个处理,如在列表框、组合框等控件中对各个数据项的逐个处理,就是利用了循环操作。,6.1.1 用For语句实现循环,分析计算5!的过程,了解循环操作。 可以看到,每次计算是在 第1次计算:1!= 1 第2次计算:2!= 1 * 2 = 1!*2 第3次计算:3!= 1 * 2 * 3 = 2!*3 第4次计算:4!= 1 * 2 * 3 * 4 = 3!*4 第5次计算:5!= 1 * 2 * 3 * 4 * 5 = 4!*5 上一次计算结果的基础上进行的,即: 第1次计算1!。 第2次计算2!,2!等于1!*2。 第3次计算3!,3!等于2!*3。 重复执行5次,得到5!。 用流程图描述上述算法,如图所示,。,6.1.1 用For语句实现循环,VB中,对于这种能够确定重复执行次数的循环,常使用For语句。以下是计算5!的程序段。其中,变量result用于保存每次计算的结果,初始值为1。变量i记录循环的次数。,result = 1 For i = 1 To 5 Step 1 result = result * i Next i Print result,For语句中i用来控制循环次数,称为循环变量。 循环变量的值在循环过程中是不断变化的,本例中i的初始值指定为1,终止值指定为5,“step 1”表示每执行完一次循环体后i的值增加1。 For语句中需要重复多次执行的语句(本例中为“result = result * i”)称为循环体。,6.1.1 用For语句实现循环,For循环语句的一般格式如下: For = To Step 增量 循环体 Exit For Next 其中:方括号内的内容是可选的,即根据需要决定是否包含此项。,6.1.1 用For语句实现循环,计算5!的过程示例如右表: 如果变量的增量为1时,Step子句可以省略。即:For i = 1 To 5 。,说明:当循环变量的值超过循环变量终值时,结束循环。因此result的值为5时,还要执行一次循环,然后循环变量的值变为6,超过了循环变量终值(5),此时循环自动终止。,6.1.1 用For语句实现循环,【例6-1】使用For循环移动图片。 设计一个程序,当单击“开始”在命令按钮时,窗体上的图片由左而右移动,每次移动10个单位。 在窗体上画一个名称为picCloud的图片框,然后为图片框加载一个图片。窗体上还有名称分别为cmdStart和cmdExit的两个命令按钮,其标题分别为“开始”和“退出”。窗体界面如图所示。,6.1.1 用For语句实现循环,图片从左向右移动,实际上就是改变图片框左边界的坐标,使得其左边界到窗体左边界的距离每次增加10。用循环实现这种重复移动图片的操作。“开始” 的单击事件过程如下: Private Sub cmdStart_Click() For i = 1 To 300 picCloud.Left = picCloud.Left + 10 Next i End Sub 因为计算机的处理速度非常快,几乎感觉不到执行300次移动图片的操作。若要能够明显的感到图片框的移动,可以在每次移动图片框之后增加一段时间的延迟,再移动图片框。当然,也可以采用其他方式。,【例6-2】:从随机产生的10个数据中选出其中的偶数 根据题义,考虑程序的基本思路。首先要产生10个随机数,并显示在标签中。然后从中选择出偶数,显示在另一个标签中。如图。,6.1.1 用For语句实现循环,窗体上有4个标签,其中两个显示说明文字。另两个显示数据,其中名称为lblNumber1的标签用于显示10个随机数,名称为lblNumber2的标签用于显示找出的偶数。2个命令按钮的名称分别为cmdOK和cmdExit,标题分别为“处理”和“退出”。 “处理”命令按钮的功能:产生10个100以内的随机数,显示在lblNumber1中。从10个数中选出所有偶数,显示在lblNumber2中。,6.1.1 用For语句实现循环,6.1.1 用For语句实现循环,Private Sub cmdOK_Click() For i = 1 To 10 x = Int(100 * Rnd) lblNumber1.Caption = lblNumber1.Caption + Str(x) If x Mod 2 = 0 Then lblNumber2.Caption = lblNumber2.Caption + Str(x) End If Next End Sub 条件表达式x Mod 2 = 0用于判断x被2除的余数是否是0,即判断x是否是偶数。,产生一个0100以间(包括0,不包括100)的随机数,Str(x)的含义是将数值数据变为字符数据,将所有随机数连接为一个字符串,并赋值给lblNumber1的Caption属性,6.1.2.用 Do语句实现循环,For语句适用于处理确切知道循环次数的重复处理操作。 【例6-1】移动图片的问题中,使用For循环,确定循环300次。但是实际上,由于窗体大小不同,每次移动的步长不同,图片到达窗体右边界需要的次数是不同的。可能执行200次循环就到达了窗体的边界,也可能执行300循环,却只移动到窗体的中间。 对于循环次数难以确定的操作,使用Do循环更适合。Do循环可以不限定循环的次数,而是根据循环条件决定是否结束循环。,6.1.2.用 Do语句实现循环,Do循环语句的简单格式如下: Do While Exit Do Loop Do While的含义是:当指定的“循环条件”为真时,执行循环体。当条件为假时,不再执行循环。 对于Do循环结构,如果没有“循环条件”,就构成一种最简单的Do循环。若在循环体中没有GoTo 、End等语句,就会反复执行循环体,永不停止。,6.1.2.用 Do语句实现循环,例:计算输入数据的累加和。 从键盘先后输入若干正整数,计算并显示这些数据的累加和,当输入0时结束。界面设计如下图所示。控件属性设置见右表。,6.1.2.用 Do语句实现循环,计算累加和的算法流程如右图:,6.1.2.用 Do语句实现循环,单击命令按钮“计算”,执行cmdCala_Click事件过程。 Private Sub cmdCala_Click() Dim Sum As Integer Dim varInteger As Integer Sum = 0 varInteger = Val(InputBox(“输入数据,若输入0,则结束“) Do While varInteger 0 Sum = Sum + varInteger lblNumber.Caption = lblNumber.Caption & Str$(varInteger) lblResult.Caption = Str$(Sum) varInteger = Val(InputBox(“输入数据,若输入,则结束“) Loop End Sub,6.1.2.用 Do语句实现循环,cmdCala_Click过程中定义两个整型变量: Sum:存储累加和 varInteger:存储每次输入的整数。 若输入的值不是0,满足Do While的循环条件,执行循环体,计算累加和Sum值,并将varInteger值显示在lblNumber中,将Sum值显示在标签lblResult中。 然后继续输入数据,重复上述操作,直到输入0,结束。 注意,Do While语句之前的 varInteger = Val(InputBox(“”)语句必不可少。若无此语句,varInteger没有被赋初值,默认值为0,则循环条件varInteger 0为假,不执行循环体。这样,永远不会执行到循环体的语句。,6.1.2.用 Do语句实现循环,Do循环语句的一般格式有以下两种: (1) Do While | Until Exit Do Loop (2)Do Exit Do Loop While | Until ,第1种格式为先判断,后执行。如果不满足,可能一次都不执行。,第2种格式为先执行,后判断,不论是否满足,至少执行一次,6.1.2.用 Do语句实现循环,While 表示当为真时,执行的语句; Until为假,执行。 Exit Do表示退出循环,执行Loop之后的第一条语句。 修改以上程序,使用第2种格式,完成相同的功能。算法流程如右图所示。,6.1.2.用 Do语句实现循环,Private Sub cmdCala_Click() Dim Sum As Integer Dim varInteger As Integer Sum = 0 Do varInteger = Val(InputBox(“输入数据,若输入,则结束“) Sum = Sum + varInteger If varInteger 0 Then lblNumber.Caption = lblNumber.Caption & Str$(varInteger) End If lblResult.Caption = Str$(Sum) Loop While varInteger 0 End Sub,使用DoLoop While,不论条件如何,循环体至少要执行一次,而后执行条件判断语句Loop While,当满足循环条件时再次执行循环体,不满足条件时结束循环,If varInteger 0语句的作用是为了避免将最后输入的0显示在标签中,6.1.2.用 Do语句实现循环,例:使用Do Until Loop结构,Until子句是当指定条件为真时终止循环。 Private Sub cmdCala_Click() Dim Sum As Integer Dim varInteger As Integer Sum = 0 varInteger = Val(InputBox(“输入数据,若输入,则结束“) Do Until varInteger = 0 Sum = Sum + varInteger lblNumber.Caption = lblNumber.Caption & Str$(varInteger) lblResult.Caption = Str$(Sum) varInteger = Val(InputBox(“输入数据,若输入,则结束“) Loop End Sub,先输入整数varInteger,然后测试是否满足循环条件。语句Do Until varInteger = 0的含义是当变量varInteger的值等于0时结束循环。,6.1.2.用 Do语句实现循环,当然,Until语句也可以在Loop子句中,将程序改写为: Private Sub command1_Click() Dim Sum As Integer Dim varInteger As Integer Sum = 0 Do varInteger = Val(InputBox(“输入数据,若输入,则结束“) Sum = Sum + varInteger If varInteger = 0 Then lblNumber.Caption = lblNumber.Caption & Str$(varInteger) End If lblResult.Caption = Str$(Sum) Loop Until varInteger = 0 End Sub,以上程序将Until子句移到了Loop的后面。区别在于,先执行,然后进行指定条件的测试,即第一次进入是无条件的,无论如何都要执行一次。,6.1.2.用 Do语句实现循环,使用Do循环移动图片。 前例采用固定处理次数的方式移动图片。现改成图片从窗体左侧向窗体右侧移动,移动到窗体的右边界停止移动。即图片框的右边界到达窗体的右边界时停止移动。 “开始”命令按钮的单击事件过程如下: Private Sub cmdStart_Click() Do picCloud.Left = picCloud.Left + 50 Loop While picCloud.Left + picCloud.Width Form1.Width End Sub,6.1.2.用 Do语句实现循环,例:给定一个整数n(n2),判断是否为素数。 根据题意,设计窗体界面和解题算法。窗体如下图。控件的属性设置见右表。,6.1.2.用 Do语句实现循环,输入数据的操作:先清空标签中的内容,然后输入数据,用IsNumeric函数判断输入的是否是数值数据。若符合要求,显示在标签lblNumber中;若不是数值数据,给出提示信息,并要求重新输入数据。,Private Sub cmdInput_Click() Dim n As Integer lblNumber.Caption = “ lblResult.Caption = “ x = InputBox(“输入一个整数!“) If Not IsNumeric(x) Then MsgBox “数据有误,请重新输入!“ Else lblNumber.Caption = x End If End Sub,程序包括两部分:输入整数、判断是否是素数。,6.1.2.用 Do语句实现循环,判断某整数是否是素数:按照定义依次用2n-1之间的整数除n。若n能被任何一个数整除,则不是素数。 思路:设置一Boolean类型变量flag,初值为False。若n能被某整数整除,将flag值改为True,表明n能被整除,不是素数。循环结束时,若flag值仍为False,表示n未被任何一个整数整除,该数为素数。 算法如图所示。,6.1.2.用 Do语句实现循环,判断素数的事件过程如下: Private Sub cmdFind_Click() Dim flag As Boolean n = Val(lblNumber.Caption) flag = False For i = 2 To n - 1 判断 n 是否能被2n-1数整除 If (n Mod i) = 0 Then flag = True Next i If flag Then n曾被某个整数整除过 lblResult.Caption = “不是素数!“ Else n 从未被整除 lblResult.Caption = “是素数!“ End If End Sub,运行程序,设输入9,第1次循环,i=2,(9 mod 2)的值为1,不满足If条件,flag值不变,仍为False。第2次执行循环,i=3,(9 mod 3)的值为0,满足If条件,flag = True。继续执行后续的循环。,If语句根据flag值判定n是否被整除过。若flag为True,表明被整除过,不是素数,6.1.2.用 Do语句实现循环,运行程序后,单击“输入数据”按钮,在输入框中输入13,在标签lblNumber中显示这个数,如图a所示。再单击“判断素数”按钮,在标签lblResult中显示判定结果“是素数”。运行程序后,窗体如图b所示。,a,b,6.1.2.用 Do语句实现循环,前面介绍判别素数的方法是:当整数n不能被2n-1之间的任一整数整除,则n是素数。 实际上,只需把n被2 之间的任一整数整除,若都除不尽,则n就是素数。 例如,判别17是否素数,不必把17被216除,只要被24(4是 的整数部分)即可。如果17不能被2、3和4整除,17肯定是一个素数。 因此,程序中循环变量的终值可以由(n-1)改为n的平方根,即sqr(n),或Int(sqr(n)。,6.1.3 循环的嵌套,在一个循环体内又完整地包含另一个循环,称为循环的嵌套。 For循环、Do循环都可以在循环中再嵌套循环,而且可以在一个For循环中包含一个Do循环,也可以在一个Do循环中包含一个For循环。 例:找出100200间的全部素数,只需要依次对这个范围内的数据进行判定即可。 题目要求找出100到200之间的素数。但根据常识,偶数一定不是素数。因此循环从101开始,且步长为2,即每次循环只对101、103、105等奇数进行判断。这样可以减少循环次数,节约程序的运行时间。,6.1.3 循环的嵌套,Private Sub Form_Click() Dim flag As Boolean k = 0 For i = 101 To 200 Step 2 flag = False For j = 2 To Sqr(i) If (i Mod j) = 0 Then flag = True If flag = True Then Exit For Next j If Not flag Then Print i; k = k + 1 If k Mod 5 = 0 Then Print End If Next End Sub,这个for循环判断i是否为素数,算法基本与前例相同。区别在于For循环中的Exit For。含义是只要有flag=True,表示i能够被整除,此时,尽管可能还没有完成循环,但继续循环判断没有意义,使用Exit For提前结束循环,6.1.3 循环的嵌套,注意: Print语句中变量之后有“;”,表示显示该变量的内容后不换行,只留一个空格,然后显示下一个素数。 若素数很多,就要换行显示。设置变量k,用于记录已经显示的素数的个数。找到一个素数后,就使k的值增加1。当k的值能被5整除时,执行一个空print语句,作用是换行。 如图所示是每输出5个素数就换到下一行继续输出的运行效果。,6.1.3 循环的嵌套,例:显示乘法九九表。先写出计算并显示11=1,12=2,,19=9的程序段如下: i = 1 For j = 1 To 9 p = i * j Print p; Next j,6.1.3 循环的嵌套,在此基础,增加一层外循环,使i由1变到9,实现九九表。程序段如下: Private Sub Form_Click() For i = 1 To 9 For j = 1 To 9 p = i * j Print p; Next j Print Next i End Sub,程序共输出9行,每行9个算式。第1行为11、12、19的乘积;第2行为21、22、29的乘积;第9行为91、92、99的乘积。 通过分析这个程序段的流程,可以更深入地了解嵌套循环的概念,并改进输出格式。,6.1.3 循环的嵌套,程序段流程如下图所示:,Private Sub Form_Click() For i = 1 To 9 For j = 1 To i p = i * j Print Tab(j - 1) * 9); i Next j Print Next i End Sub,6.1.3 循环的嵌套,程序的运行结果如下图:,6.2列表框及列表项的循环处理,常常有这样的情况:从列出的若干个列表项中任意选择一项,并对其作某种处理。 列表框控件:方便地解决列表选择的问题。 在列表框中,放入若干个列表项,可以选择其中的一个或多个列表项。 如果放入的列表项较多,超过了列表框的长度,则系统会自动在列表框边上加一垂直滚动条,通过移动滚动条可以使列表框中的内容上下滚动,以便能够看到全部内容。,6.2.1向列表框添加列表项,列表框中能够列出许多列表项。 列表框与文本框最主要的区别在于列表框控件能够显示多行文本,而且每行文本是一个可以独立处理的列表项。 例如,添加或删除一个列表项。这些列表项既可以在设计时直接指定,也可以在程序运行时添加到列表框中。 从实际情况考虑,往往是通过程序添加列表项。,6.2.1向列表框添加列表项,通过例题说明使用AddItem方法向列表框中添加列表项。 例:设计一个简易图片浏览器程序 在列表框中显示所有图片的名称,选择其中一个图片名称,即双击列表框中列表项,在右侧的图片框中显示相应的图片。 设计窗体, 包含1个列表框、2个命令按钮,2个无边框的标签,1个图片框, 窗体外观见图。,6.2.1向列表框添加列表项,各控件的属性设置见表 。,6.2.1向列表框添加列表项,在窗体上添加列表框的方法:单击工具箱中的列表框控件 (ListBox),然后在窗体中适当位置拖拉鼠标,画出所需的大小。 向列表框添加各个列表项的方法: 一种方法是从属性窗口中设置列表框的列表项。操作方法是在列表框的属性窗口中选择List属性,单击该属性名称的右侧,出现一个图标 ,单击该图标,打开列表项输入框,直接输入各个列表项。 另一种添加列表项的方法是在程序中使用列表框控件的AddItem方法。,6.2.1向列表框添加列表项,向列表框控件中添加列表项的一般格式如下: . AddItem ,列表项索引号 其中是用双引号定界、将要在列表框中显示的列表项名称。 列表项索引号是从0开始的顺序号,对应于列表框的ListIndex属性。用于确定新增列表项在列表框中的位置。缺省索引号,则新增列表项添加到列表末尾。 例如,在列表框中添加一个图片名称: lstPicture.AddItem “向日葵“,6.2.1向列表框添加列表项,在Form_Load事件过程中对列表框初始化,把图片名称添加到列表框。可以编写以下事件过程: Private Sub Form_Load() lstPicture.AddItem “向日葵“ lstPicture.AddItem “计算机“ lstPicture.AddItem “沙丘“ lstPicture.AddItem “草原“ lstPicture.AddItem “卡通图案1“ lstPicture.AddItem “卡通图案2“ lstPicture.AddItem “篮球“ End Sub,运行程序,分别用AddItem方法向列表框添加多个列表项。,6.2.1向列表框添加列表项,考虑:双击某一图片名称(如向日葵)时,如何能在窗体上显示出该图片 列表框支持单击和双击等事件。 双击列表框中“向日葵”时,列表框的Text属性就获得一个值“向日葵”,同时ListIndex属性(表示被选中的列表项在列表中的顺序)获得一个值0 (序号从0开始,“向日葵”位于列表的首行,此时列表框的ListIndex属性值为0)。 利用ListIndex属性的值,判断被选中的列表项。,6.2.1向列表框添加列表项,相应的事件过程(部分)如下。 Private Sub lstPicture_DblClick() Select Case lstPicture.ListIndex Case 0 picPicture.Picture = LoadPicture(“c:sunflower.jpg“) Case 1 picPicture.Picture = LoadPicture(“c:computer.jpg”) Case 6 picPicture.Picture = LoadPicture(“c:basketball.jpg“) End Select End Sub,6.2.1向列表框添加列表项,双击列表框中任意一个列表项时,就会触发列表框的双击事件过程lstPicture_DblClick。 在这个过程中,用Select Case结构判断选择了哪一个列表项,并确定应执行哪一个分支语句。 如果选中“向日葵”,ListIndex的值为0,应执行“Case 0”分支对应的语句。 使用LoadPicture函数将相应的图片加载到图片框控件picPicture 中,如图所示。,6.2.1向列表框添加列表项,“清除”事件过程的作用是清除图片框中显示的图片,其单击事件过程如下: Private Sub cmdClear_Click() picPicture.Picture = LoadPicture(“) End Sub “清除”图片框中图片的方法仍然是使用LoadPicture方法,区别于加载图片之处是括号中是一个空字符串,表示图片框清空。 按下“结束”命令按钮,程序结束运行。 Private Sub cmdExit_Click() End End Sub,6.2.2 从列表框中删除列表项,从列表框中删除列表项的RemoveItem方法,一般格式如下: . RemoveItem 从上例的列表框lstPicture中删除一个列表项,可以使用如下语句: lstPicture.RemoveItem ,1 执行这个命令后,就把列表框lstPicture中序号为1的列表项删除。 如果把这个命令写在命令按钮的单击事件过程中,就可以在程序运行中,单击该命令按钮,将列表框中的表项删去。,6.2.2 从列表框中删除列表项,例:从简易图片浏览器中删除一个图片。 在上例的窗体上添加一个名称为cmdDelete、标题为“删除”的命令按钮。 窗体外观如图所示 “删除”命令按钮的单击事件过程如下: Private Sub cmdDelete_Click() lstPicture.RemoveItem lstPicture.ListIndex End Sub,6.2.2 从列表框中删除列表项,按照语法规定,RemoveItem方法要求指明要删除列表项的序号,单击列表项时所选中的列表项序号由ListIndex属性表示。 需要注意的是:删除该表项后,其后面各列表项的序号都会自动减1,如“沙丘”原序号为2,将改为1,“草原”的序号由3改为2,。有可能导致程序执行的混乱。 为解决这个问题,修改上例,将 列表框的Text 属性(即lstPicture.Text)作为判断条件,6.2.2 从列表框中删除列表项,例:从简易图片浏览器中删除一个图片。 为了删除列表项后、其他列表项序号发生改变之后的操作不发生混乱,修改上例的事件过程,程序如下: Private Sub lstPicture_DblClick() Select Case lstPicture.Text Case “向日葵“ picPicture.Picture = LoadPicture(“c:sunflower.jpg“) Case “沙丘“ picPicture.Picture = LoadPicture(“c:dune.jpg“) Case “篮球“ picPicture.Picture = LoadPicture(“c:basketball.jpg“) End Select End Sub,6.2.2 从列表框中删除列表项,注意:Select Case之后的表达式由原来的lstPicture.ListIndex 改为lstPicture.Text,即由列表项序号改为列表项文本。相应的每个Case分支条件也改为具体的列表项文本。 下图是先执行“删除”“沙丘”列表项的操作,再双击“篮球”列表项的运行结果。,6.2.3 列表框的常用属性,1. Columns 属性 Columns 属性用于指定列表框中可见的列数。默认值为0,列表框只能显示一列。当指定Columns 值大于或等于1 时,列表框中能显示多列内容。 2. List 属性 List 属性是字符串数组。每个数组元素都是列表框中的一个列表项。使用List 属性能够方便地访问列表框中的列表项。 可以把列表框中的元素赋给字符串变量(如:Rec1=ListBox1.List(2)),也可以把字符串变量的内容赋给列表框中的元素(如:ListBox1.List(5)=Rec2) 需要说明的是,List 数组的第一个元素的下标是0,即List 数组是从List(0)开始;若列表框List 数组中有n个元素,则最后一个列表项对应于List(n-1)。,6.2.3 列表框的常用属性,3. ListCount 属性 ListCount属性表示列表框中有多少个列表项 ListCount属性经常与List 属性一起使用。 4. ListIndex 属性 ListIndex 属性的值是被选中的列表项在List数组中的序号。程序运行时,使用ListIndex 属性能够判断列表框中哪个列表项被选中。 例如,在列表框List1中选中第2项,即List1.List数组的第2项,其ListIndex=1(ListIndex从0开始)。 如果没有从列表框中选择列表项,则ListIndex为-1。 istIndex属性值不能在设计时设置,只有程序运行时才起作用。,6.2.3 列表框的常用属性,5. MultiSelect 属性 在列表框中可以同时选择一个或多个列表项。 MultiSelect 属性确定了列表框中是否允许选择多个列表项。 6. Selected属性 Selected属性表示列表框中各个列表项是否被选中。 Selected属性是一个数组,其数组元素的个数与列表框的列表项数相同。,例:使用列表框。 窗体上有2个列表框,2个命令按钮,2个标签及一个列表框。列表框内显示系统提供的屏幕字体。 可以用鼠标在“可选的屏幕字体”列表框中选择一个或多个字体名称。 然后,单击“显示”命令按钮,在另一个列表框显示所选中的列表项。 窗体界面如图所示。,6.2.3 列表框的常用属性,各控件的属性设置如表。,6.2.3 列表框的常用属性,6.2.3 列表框的常用属性,窗体初始化时,将屏幕字体名称填写到列表框lstFont中。程序如下。 Private Sub Form_Load() 用屏幕字体名字填充列表框。 For i = 0 To Screen.FontCount - 1 lstFont.AddItem Screen.Fonts(i) Next i End Sub,利用一个循环,把Screen对象的每种字体Fonts(i)添加到列表框lstFont中,如图所示。,Screen是系统自动产生的屏幕对象。通过该对象的Fonts属性,能够得到当前计算机屏幕所能使用的字体。 由Screen对象的FontCount属性,能够得到字体的数量,6.2.3 列表框的常用属性,cmdDisplay_Click中,依次判断屏幕字体是否被选中。若被选中,将其添加到lstSelected中;否则,判断下一个列表项。 stFont.ListCount是列表框中所显示的屏幕字体的数量。注意列表框的 Selected和 List属性数组的下标是从0开始,循环变量i的值从0到ListCount1。其过程如下: Private Sub cmdDisplay_Click() LstSelected.Clear For i = 0 To lstFont.ListCount 1 If lstFont.Selected(i) Then lstSelected.AddItem lstFont.List(i) End If Next i End Sub,lstFont.Selected(i)值为真,表示列表框中序号为i 的列表项被选中。这时应将该项的内容显示在列表框lstSelected中。,6.2.3 列表框的常用属性,7. Sorted 属性 列表框中列表项可以按照其加入到列表框中的先后次序排列,此时应将Sorted属性置为False ,即列表框中显示的列表项不按字母顺序排序;若想使其按字母序排列,应将Sorted属性设为True。 8. Text 属性 如果列表框中选择了多个列表项,列表框的Text属性值是最后一次选中的正文。也就是说,通过Text属性只能得到一个被选中的列表项。,6.2.3 列表框的常用属性,9. Style 属性 列表框的Style 属性有两个值:0 和 1 。对应不同的Style值,列表框有不同的外观形式。如图所示 。,6.3 组合框,列表框能从多个列表项中任选一个或多个进行相应的处理。但有时不仅需要从已有的列表项中进行选择,还希望能输入列表中不包含的列表项。 例如,如果需要输入列表中未包括的图片名称,就需要使用文本框等控件接受输入的文字。 使用组合框(ComboBox)能解决这个问题。 组合框相当于将列表框和文本框的功能综合到一起。,6.3.1 组合框的使用,例:使用组合框。 设计一个程序,要求程序运行后,在组合框中显示若干城市的名称。选中某个城市后,将其名称显示在对应于“选中的城市”的标签中。在程序运行中,可以向组合框中添加新的城市,也可以删除选中的城市。 窗体外观如图所示 。,6.3.1 组合框的使用,在Form_Load中把城市名称添加到组合框中。 过程代码如下。 Private Sub Form_Load() cboCity.AddItem “北京“ cboCity.AddItem “上海“ cboCity.AddItem “天津“ cboCity.AddItem “重庆“ cboCity.AddItem “广州“ End Sub,6.3.1 组合框的使用,当选择组合框中的某个城市,触发组合框的单击事件,将组合框中所选择的城市(即cboCity.Text)显示在标签中。 相应的过程代码如下。 Private Sub cboCity_Click() lblCity.Caption = cboCity.Text End Sub 如果要在组合框中添加新的城市,需要先在组合框中输入一个新城市名,再单击“添加”按钮,处理的基本思路如右图所示。,6.3.1 组合框的使用,Private Sub cmdAdd_Click() Flag = 0 If cboCity.Text “ Then For i = 0 To cboCity.ListCount If cboCity.Text = cboCity.List(i) Then Flag = 1 End If Next If Flag = 0 Then cboCity.AddItem cboCity.Text End If Else MsgBox “ 请先输入城市名称 ! “ End If End Sub,执行“添加”事件过程,把新的城市添加到组合框中。,6.3.1 组合框的使用,要考虑的三种不同情况: 新添加的城市已经存在于现有的城市列表中。 cboCity.Text中的内容为空。 cboCity.Text中的内容不存在于现有的城市列表中。 编写程序时,必须分别处理这三种情况。前两种情况,都不应该把cboCity.Text中的内容添加到组合框中,否则会在组合框中添加许多重复或空白的列表项。 只有第三种情况,即所输入的城市是当前组合框中所没有包含的城市,才需要执行添加操作。,6.3.1 组合框的使用,设置一个标志变量Flag ,并设其初值为0,用来标明输入的城市是否与组合框中现有的城市重复 程序在For循环中依次判断组合框中各个列表项是否与cboCity.Text的内容相等。 如果存在这样的列表项,将变量Flag 值置为 1。组合框中所有列表项检查完毕,若Flag值仍为0,表明组合框中不存在与cboCity.Text相同的内容。 此时,可以将cboCity.Text中的内容添加到组合框中。,6.3.1 组合框的使用,特别说明: 当再次运行程序时,原来程序运行时新添加到组合框中的城市不再存在。因为,新添加的城市只是列在组合框中,没有真正被保存下来。 每次运行程序时,重新执行Form_Load事件过程,执行向组合框添加城市名称的操作,不包括上次运行时所新添加到组合框中的城市。 若要将程序运行过程中添加的城市保存起来,需要将这些城市保存到文件中。每次运行程序时,将保存在文件中的城市添加到组合框中。,6.3.1 组合框的使用,使用RemoveItem方法将选中 表项从组合框中删除。程序如下。 Private Sub cmdDelete_Click() If cboCity.ListIndex = -1 Then MsgBox “请选择要删除的列表项!“ Else cboCity.RemoveItem cboCity.ListIndex End If End Sub,RemoveItem方法要求指明待删除列表项的序号。程序中使用ListIndex属性标识,若没有选择任何表项,则ListIndex=-1。如果此时执行cboCity.RemoveItem ListIndex,程序会出错。因此,使用if语句避免出现这种情况。,6.3.2 组合框的属性和方法,组合框在使用上与列表框有许多类似之处,使用AddItem方法向组合框中添加列表项,使用RemoveItem方法从组合框中删除列表项。 AddItem 和RemoveItem的使用方法与列表框相同。 读取组合框中数据时,常常用到List、Text、ListIndex和ListCount属性。这几个属性的含义和使用方法与列表框相同。,6.3.2 组合框的属性和方法,组合框有三种不同的形式,不同的Style属性值确定了组合框的类型和显示方式,如下图所示。 (1)当Style的属性值为0时,组合框称为“下拉式组合框”。它由可输入的编辑区和一个下拉列表框组成,可以从键盘直接向文本编辑区输入内容,也可以单击右端的箭头,从下拉的列表框中选择一项,单击该项使之被选中,则上面文本区就出现该项的内容,6.3.2 组合框的属性和方法,(2)Style=1,称为“简单组合框”,也是由一个文本区和一个列表框组成,但该列表框不是下拉式的,而是始终显示在屏幕上的。从列表框中选择所需要的列表项,也可以直接向文本区输入信息。这种组合框可以识别DblClick事件(其它两种不能识别DblClick事件)。 (3)Style=2,称为“下拉式列表框”,形状与“下拉式组合框”相似,但只能从列表框中选择而不能直接向文本区输入。,本章结束了!,
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸设计 > 毕设全套


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

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


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