VB第6章-循环处理

上传人:艳*** 文档编号:242971645 上传时间:2024-09-13 格式:PPT 页数:74 大小:659.50KB
返回 下载 相关 举报
VB第6章-循环处理_第1页
第1页 / 共74页
VB第6章-循环处理_第2页
第2页 / 共74页
VB第6章-循环处理_第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,。,循环次数,i,值,result,表达式,result,值,1,1,result *i=1*1,1,2,2,result *i=1*2,2,3,3,result *i=2*3,6,4,4,result *i=6*4,24,5,5,result *i=24*5,120,说明:当循环变量的值超过循环变量终值时,结束循环。因此,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,时结束。界面设计如下图所示。控件属性设置见右表。,对象,属性,设置,标签,1,(名称),lblTitle1,Caption,输入的数据,标签,2,(名称),lblTitle2,Caption,累加和,标签,3,(名称),lblNumber,Caption,(置空),标签,4,(名称),lblResult,Caption,(置空),命令按钮,1,(名称),cmdCala,Caption,计算,命令按钮,2,(名称),cmdExit,Caption,退出,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,使用,Do,Loop 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 2),,判断是否为素数。,根据题意,设计窗体界面和解题算法。窗体如下图。控件的属性设置见右表。,对象,属性,设置,标签,1,(名称),lblNumber,Caption,(置空),标签,2,(名称),lblResult,Caption,(置空),命令按钮,1,(名称),cmdFind,Caption,判断素数,命令按钮,2,(名称),cmdInput,Caption,输入数据,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,语句实现循环,判断某整数是否是素数:按照定义依次用,2,n-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,是否能被,2,n-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,不能被,2,n-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,列表框及列表项的循环处理,常常有这样的情况:从列出的若干个列表项中任意选择一项,并对其作某种处理。,列表框控件:,方便地解决列表选择的问题。,在列表框中,放入若干个列表项,可以选择其中的一个或多个列表项。,如果放入的列表项较多,超过了列表框的长度,则系统会自动在列表框边上加一垂直滚动条,通过移动滚动条可以使列表框中的内容上下滚动,以便能够看到全部内容。,向列表框添加列表项,列表框中能够列出许多列表项。,列表框与文本框最主要的区别在于列表框控件能够显示多行文本,而且每行文本是一个可以独立处理的列表项。,例如,添加或删除一个列表项。这些列表项既可以在设计时直接指定,也可以在程序运行时添加到列表框中。,从实际情况考虑,往往是通过程序添加列表项。,向列表框添加列表项,通过例题说明使用,AddItem,方法向列表框中添加列表项。,例:设计一个简易图片浏览器程序,在列表框中显示所有图片的名称,选择其中一个图片名称,即双击列表框中列表项,在右侧的图片框中显示相应的图片。,设计窗体,包含,1,个列表框、,2,个命令按钮,,2,个无边框的标签,,1,个图片框,,窗体外观见图。,向列表框添加列表项,各控件的属性设置见表,。,对象,属性,设置,窗体,(名称),Form1,列表框,(名称),lstPicture,命令按钮,1,(名称),cmdClear,Caption,清除,命令按钮,2,(名称),cmdExit,Caption,退出,标签,1,(名称),lblTitle2,Caption,请选择图片名称,标签,2,(名称),lblTitle2,Caption,选中的图片,图片框,(名称),picPicture,向列表框添加列表项,在窗体上添加列表框的方法:单击工具箱中的列表框控件,(,ListBox,),然后在窗体中适当位置拖拉鼠标,画出所需的大小。,向列表框添加各个列表项的方法:,一种方法是从属性窗口中设置列表框的列表项。操作方法是在列表框的属性窗口中选择,List,属性,单击该属性名称的右侧,出现一个图标 ,单击该图标,打开列表项输入框,直接输入各个列表项。,另一种添加列表项的方法是在程序中使用列表框控件的,AddItem,方法。,向列表框添加列表项,向列表框控件中添加列表项的一般格式如下:,. AddItem ,,列表项索引号,其中,是用双引号定界、将要在列表框中显示的列表项名称。,列表项索引号是从,0,开始的顺序号,对应于列表框的,ListIndex,属性。用于确定新增列表项在列表框中的位置。缺省索引号,则新增列表项添加到列表末尾。,例如,在列表框中添加一个图片名称:,lstPicture.AddItem ,向日葵,向列表框添加列表项,在,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,方法向列表框添加多个列表项。,向列表框添加列表项,考虑:双击某一图片名称(如向日葵)时,如何能在窗体上显示出该图片,列表框支持单击和双击等事件。,双击列表框中“向日葵”时,列表框的,Text,属性就获得一个值,“,向日葵”,同时,ListIndex,属性(表示被选中的列表项在列表中的顺序)获得一个值,0,(序号从,0,开始,“向日葵”位于列表的首行,此时列表框的,ListIndex,属性值为,0,)。,利用,ListIndex,属性的值,判断被选中的列表项。,向列表框添加列表项,相应的事件过程(部分)如下。,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,向列表框添加列表项,双击列表框中任意一个列表项时,就会触发列表框的双击事件过程,lstPicture_DblClick,。,在这个过程中,用,Select Case,结构判断选择了哪一个列表项,并确定应执行哪一个分支语句。,如果选中“向日葵”,,ListIndex,的值为,0,,应执行“,Case 0,”分支对应的语句。,使用,LoadPicture,函数将相应的图片加载到图片框控件,picPicture,中,如图所示。,向列表框添加列表项,“清除”事件过程的作用是清除图片框中显示的图片,其单击事件过程如下:,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,列表框的常用属性,各控件的属性设置如表。,对象,属性,设置,窗体,(名称),frmListAtt,Caption,列表框属性,列表框,1,(名称),lstFont,MultiSelect,2,列表框,2,(名称),lstSelected,命令按钮,1,(名称),cmdDisplay,Caption,显示,命令,按钮,2,(名称),cmdExit,Caption,退出,标签,1,(名称),可选的屏幕字体,Caption,lblTitle1,标签,2,(名称),被选中的字体,Caption,lblTitle2,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,组合框的使用,对象,属性,设置,窗体,(名称),Form1,组合框,(名称),cboCity,Style,1,标签,1,(名称),lblTitle1,Caption,所有城市,标签,2,(名称),lblTitle2,Caption,选中的城市,标签,3,(名称),lblCity,Caption,置空,BorderStyle,1,命令按钮,1,(名称),cmdAdd,Caption,添加,命令按钮,2,(名称),cmdDelete,Caption,删除,命令按钮,3,(名称),cmdExit,Caption,退出,在,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,,称为“下拉式列表框”,形状与“下拉式组合框”相似,但只能从列表框中选择而不能直接向文本区输入。,本章结束了!,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > PPT模板库


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

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


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