Visual Basic快捷教程流程控制.docx
- 文档编号:30017171
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:30
- 大小:596.74KB
Visual Basic快捷教程流程控制.docx
《Visual Basic快捷教程流程控制.docx》由会员分享,可在线阅读,更多相关《Visual Basic快捷教程流程控制.docx(30页珍藏版)》请在冰豆网上搜索。
VisualBasic快捷教程流程控制
VisualBasic快捷教程——流程控制
一、选择结构
VisualBasic中用来实现选择结构的方式包括:
If、Select/Case、Switch、Choose等4这种。
1.If语句
基于If语句实现的选择结构主要有三种形式:
If...Then...
If...Then...Else...
If...ElseIf...Else...
下面我们逐个详解。
1)If...Then...是属于单向选择结构,它会潘丹条件表达式(condition)是否为真,若条件表达式为真,则会执行该分支的语句块(statements);否则,就不执行任何操作。
VisualBasic中If...Then...的语法规则如下:
[vb]viewplaincopy在CODE上查看代码片派生到我的代码片
If条件表达式Then
语句块
EndIf
下面通过一个判定用户是否要退出程序的例子来演示If...Then...在实际中的使用。
[vb]viewplaincopy在CODE上查看代码片派生到我的代码片
PublicClassForm1
PrivateSubButton_Exit_Click(senderAsObject,eAsEventArgs)HandlesButton_Exit.Click
DimResultAsMsgBoxResult
Result=Interaction.MsgBox("您确定要退出本程序吗?
",vbOKCancel+vbQuestion,"提示")
IfResult=vbOKThen
End
EndIf
EndSub
EndClass
执行上述代码,所得之结果如下所示。
当用户单击【退出程序】按钮时,程序会弹出一个消息对话框询问用户是否真的要退出程序。
如果用户选择【确定】,那么程序将随机退出。
如果用户选择【取消】,程序将继续执行。
2)If...Then...Else是一种双向选择结构,它会判断条件表达式是否为真,如果条件表达式为真,则程序会执行为真的分支语句块。
否则若条件表达式为假,那么程序便会执行为假的分支语句块。
VisualBasic中If...Then...Else的语法规则如下:
[vb]viewplaincopy在CODE上查看代码片派生到我的代码片
If条件表达式Then
条件表达式为真的语句块
Else
条件表达式为假的语句块
EndIf
下面通过一个判定用户输入的年份是否为闰年的示例程序来演示If...Then...Else在实际中的使用。
[vb]viewplaincopy在CODE上查看代码片派生到我的代码片
PublicClassForm1
PrivateSubButton1_Click(senderAsObject,eAsEventArgs)HandlesButton1.Click
IfTextBox_Year.TextMod4=0Then
MsgBox("公元"+TextBox_Year.Text+"年是闰年。
",
MsgBoxStyle.OkOnly+MsgBoxStyle.Information,"判定结果")
Else
MsgBox("公元"+TextBox_Year.Text+"年不是闰年。
",
MsgBoxStyle.OkOnly+MsgBoxStyle.Information,"判定结果")
EndIf
EndSub
EndClass
执行上述代码,所得之结果如下所示。
如果用户输入的年份确实为闰年,那么随后弹出的消息对话框就会反馈说这一年确实是闰年。
3)If...ElseIf...Else是一种多重嵌套选择结构,当紧跟在If后面的判断条件为假时,程序再多做一次判定,即执行ElseIf后面的判定。
而且ElseIf后面还可以嵌套多层ElseIf判断。
如果所有的判断条件都为假时,那么程序才会执行Else后面的分支语句块。
VisualBasic中If...ElseIf...Else的(多重嵌套判断)语法规则如下:
[vb]viewplaincopy在CODE上查看代码片派生到我的代码片
If第1次条件判断表达式Then
第1次条件判断表达式为真的语句块
ElseIf第2次条件判断表达式Then
第2次条件判断表达式为真的语句块
......
ElseIf第n次条件判断表达式Then
第n次条件判断表达式为真的语句块
Else
当前n次判断条件表达式都为假时所执行的语句块
EndIf
下面通过一个多项选择题小测验程序的例子来演示基于ElseIf...Else的多重嵌套选择结构在实际中的使用。
[vb]viewplaincopy在CODE上查看代码片派生到我的代码片
PublicClassForm1
PrivateSubButton_Submit_Click(senderAsObject,eAsEventArgs)HandlesButton_Submit.Click
IfCheckBox_A.CheckedThen
MsgBox("很遗憾!
答错了。
",MsgBoxStyle.Critical,"判定结果")
ElseIfCheckBox_B.CheckedXorCheckBox_C.CheckedThen
MsgBox("还差一点!
加油。
",MsgBoxStyle.Critical,"判定结果")
ElseIfCheckBox_B.CheckedAndCheckBox_C.CheckedThen
MsgBox("恭喜你!
答对了。
",MsgBoxStyle.Information,"判定结果")
Else
MsgBox("你还没有做出选择哦~",MsgBoxStyle.Exclamation,"提示")
EndIf
EndSub
EndClass
执行上述代码,所得之结果如下所示。
只有当用户给出正确的选择答案时,程序才会判定回答正确。
其他执行结果请自行测试,此处略去。
4)最后我们还要补充一种基于IIf函数的双向选择结构。
这其实非常类似C语言中的三元运算符“:
?
”。
IIf函数选择结构的语法规则如下:
[vb]viewplaincopy在CODE上查看代码片派生到我的代码片
IIf(Expression,TruePart,FalsePart)
其中表达式(Expression)最终的结果为布尔型,TruePart与FalsePart均为对象类型。
其规则如下:
假如表达式为真,则返回真时的对象。
假如表达式为假,则返回假时的对象。
可见基于IIf函数选择结构会判断表达式是否为真,并据此选择要返回的对象。
而且因为其返回类型是对象,所以返回值可以包含各种数据类型,如数字,字符串或布尔类型等等。
下面我们用基于IIf函数选择结构来重写前面的用于判断年份是否为闰年的程序,代码如下:
[vb]viewplaincopy在CODE上查看代码片派生到我的代码片
PublicClassForm1
PrivateSubButton1_Click(senderAsObject,eAsEventArgs)HandlesButton1.Click
MsgBox(IIf(TextBox_Year.TextMod4=0,
"公元"+TextBox_Year.Text+"年是闰年。
","公元"+TextBox_Year.Text+"年不是闰年。
"),
MsgBoxStyle.OkOnly+MsgBoxStyle.Information,"判定结果")
EndSub
EndClass
执行上述程序将会得到与之前一样的结果,这里不再赘述。
此外,如果在IIf的函数中又包含有IIf函数,便可以形成嵌套的选择结构,从而实现更加复杂的分支判断条件。
例如下面这个示例程序。
[vb]viewplaincopy在CODE上查看代码片派生到我的代码片
PublicClassForm1
PrivateSubButton1_Click(senderAsObject,eAsEventArgs)HandlesButton1.Click
MsgBox("您要的是一杯"+
IIf(RButton_Milk_Y.Checked,IIf(RButton_Suger_Y.Checked,"加奶加糖","加奶不加糖"),
IIf(RButton_Suger_N.Checked,"不加奶不加糖","不加奶加糖"))+"的咖啡。
",
vbInformation,"您的选择")
EndSub
EndClass
执行上述代码,所得之结果如下所示。
其他执行结果请自行测试,此处略去。
2.Select...Case语句
Select...Case是仍然是属于多重选择的结构。
Select后面跟着的一个选择条件,不同的Case后面跟的是选择条件可能满足的取值。
当某个Case后面跟的可能取值刚好满足选择条件时,就执行对应的语句块。
Select...Case与If...Then...Else的作用很相似,但是当判断条件超多3个时,通常使用Select...Case会比较方便。
基于Select...Case的选择结构一般采用如下语法形式:
[vb]viewplaincopy在CODE上查看代码片派生到我的代码片
Select
Case条件1
语句块1
Case条件2
语句块2
......
Case条件n
语句块n
CaseElse
当CaseElse之前的Case条件都不成立时所执行的语句块
EndSelect
其中CaseElse部分也可以省略,但为了程序的鲁棒性,通常会设置一个缺省条件。
下面这个程序演示了使用Select...Case的一般方法。
[vb]viewplaincopy在CODE上查看代码片派生到我的代码片
PublicClassForm1
Dimpic_AstonAsImage=Image.FromFile(Application.StartupPath&"\pic\Aston.jpg")
Dimpic_HoldenAsImage=Image.FromFile(Application.StartupPath&"\pic\Holden.jpg")
Dimpic_JeepAsImage=Image.FromFile(Application.StartupPath&"\pic\Jeep.jpg")
Dimpic_HyundaiAsImage=Image.FromFile(Application.StartupPath&"\pic\Hyundai.jpg")
Dimpic_LucidAsImage=Image.FromFile(Application.StartupPath&"\pic\Lucid.jpg")
PrivateSubButton1_Click(senderAsObject,eAsEventArgs)HandlesButton1.Click
SelectCaseComboBox1.Text
Case"AstonMartinVanquishS"
PictureBox_Car.Image=pic_Aston
Case"HoldenCommodore"
PictureBox_Car.Image=pic_Holden
Case"JeepGrandCherokee"
PictureBox_Car.Image=pic_Jeep
Case"HyundaiSantaFe"
PictureBox_Car.Image=pic_Hyundai
Case"LucidAir"
PictureBox_Car.Image=pic_Lucid
EndSelect
EndSub
EndClass
执行上述代码,所得之结果如下所示。
当用户选择不同的车型时,右侧的图像框就会展示对应的图片。
上面的程序中我们并没有设置缺省选项,读者可以试着加上一个缺省选项。
这里需要提醒读者注意的是,Select...Case本质上是等同于If...Then...Else的一种分支结构。
既然是分支结构,我们就应该保证各个分支条件之间不能相互包含。
因为在Select...Case的结构中,如果分支选择被多个Case后面带的条件所满足,它也仅会执行第一次满足条件的Case对应的语句块。
例如下面这个例子:
[vb]viewplaincopy在CODE上查看代码片派生到我的代码片
PublicClassForm1
PrivateSubButton1_Click(senderAsObject,eAsEventArgs)HandlesButton1.Click
DimvalueAsDouble
value=TextBox1.Text
SelectCasevalue
CaseIs>1000
MsgBox("您输入的数大于1000.")
CaseIs>100
MsgBox("您输入的数大于100.")
CaseIs>0
MsgBox("您输入的数大于0.")
CaseElse
MsgBox("您输入的是一个负数.")
EndSelect
EndSub
EndClass
显然一个大于1000的数也必然会大于100和0,但是你执行程序并在文本框中输入1999时,也只会得出下图所示之结果。
因为当第一个Case使得分支条件得以满足时,后续若干Case所带的判断就都不会被执行。
3.Switch语句
Switch(在VisualBasic中使用时应该写为Microsoft.VisualBasic.Switch)属于多重选择结构。
它的作用与Select...Case非常类似,但是代码会更为精简。
其语法规则如下:
[vb]viewplaincopy在CODE上查看代码片派生到我的代码片
Microsoft.VisualBasic.Switch(表达式1,结果1,_
表达式2,结果2,_
......
表达式n,结果n)
若表达式1判断为真,则返回结果1;若表达式2判断为真,则返回结果2;以此类推,表达式n判断为真,则返回结果n。
其返回结果的类型为对象,所以返回值可以包含各种数据类型,例如数值、字符或布尔类型等等。
下面这个例子演示了用Switch语句重写上面的汽车图库小程序,注意其中略去了定义及载入图片文件的部分代码(因为这部分代码与之前用到过的并无差别)。
可见,利用Switch语句,我们的代码得以更加精简。
[vb]viewplaincopy在CODE上查看代码片派生到我的代码片
PublicClassForm1
'此处代码有省略,可参考之前用于载入图像的代码
PrivateSubButton1_Click(senderAsObject,eAsEventArgs)HandlesButton1.Click
PictureBox_Car.Image=Microsoft.VisualBasic.Switch(
ComboBox1.Text="AstonMartinVanquishS",pic_Aston,_
ComboBox1.Text="HoldenCommodore",pic_Holden,_
ComboBox1.Text="JeepGrandCherokee",pic_Jeep,_
ComboBox1.Text="HyundaiSantaFe",pic_Hyundai,_
ComboBox1.Text="LucidAir",pic_Lucid)
EndSub
EndClass
上述代码的执行结果与前图所示一致,这里不再赘述。
4.Choose语句
Choose(在VisualBasic中使用时应该写为Microsoft.VisualBasic.Choose)属于多重选择结构。
它主要根据索引值(Index)来选择并返回从参数列表中的对象。
它的语法规则如下:
[vb]viewplaincopy在CODE上查看代码片派生到我的代码片
Microsoft.VisualBasic.Choose(Index,对象1,对象2,...,对象n)
Choose函数将从对象参数列表“对象1,对象2,...,对象n”中,根据Index的值,返回列表中的指定成员。
选择列表的第一个成员时Index为1。
如果Index超出这些限制Choose返回Nothing。
如果Index不是整数,它将被舍入为最接近的整数作为索引。
下面这个例子演示里用Choose语句重写上面的汽车图库小程序,注意其中略去了定义及载入图片文件的部分代码(因为这部分代码与之前用到过的并无差别)。
可见,利用Choose语句,与之前的代码相比,现在的版本变得更加精简。
[vb]viewplaincopy在CODE上查看代码片派生到我的代码片
PublicClassForm1
'此处代码有省略,可参考之前用于载入图像的代码
PrivateSubButton1_Click(senderAsObject,eAsEventArgs)HandlesButton1.Click
PictureBox_Car.Image=Microsoft.VisualBasic.Choose(ComboBox1.SelectedIndex+1,
pic_Aston,pic_Holden,pic_Jeep,pic_Hyundai,pic_Lucid)
EndSub
EndClass
上述代码的执行结果与前图所示一致,这里不再赘述。
二、循环结构
VisualBasic中用于实现循环结构的方式主要有For、While、Loop等3种。
此外本部分内容还涉及一些用于跳槽循环的关键字。
一、For语句
For循环结构主要形式有以下两种:
For...Next
ForEach...Next
下面我们逐个详解。
1)For...Next是最常用的一般循环语句。
它主要通过设计计数器(Counter)的起始值、终止值和递增值三个部分,来决定循环执行的规则与次数。
在正常的执行的情况下,只有当计数器的值等于“终止值”时,才会跳出循环。
For...Next的语法规则如下:
[vb]viewplaincopy在CODE上查看代码片派生到我的代码片
For计数器变量(counter)As数据类型=起始值To终止值Step递增值
语句块(statements)
Nexti
下面这个示例程序演示了使用For...Next循环结构的基本方法。
这个程序实现了一个简单的幻灯片放映功能。
[vb]viewplaincopy在CODE上查看代码片派生到我的代码片
PublicClassForm1
'此处代码有省略,可参考之前用于载入图像的代码
PrivateSubButton1_Click(senderAsObject,eAsEventArgs)HandlesButton1.Click
DimindexAsInteger
StaticstartAsSingle
Button1.Enabled=False
Forindex=1To5Step1
PictureBox_Car.Image=Microsoft.VisualBasic.Choose(index,
pic_Aston,pic_Holden,pic_Jeep,pic_Hyundai,pic_Lucid)
start=Microsoft.VisualBasic.Timer()
DoWhileMicrosoft.VisualBasic.Timer() System.Windows.Forms.Application.DoEvents() Loop Next Button1.Enabled=True EndSub EndClass 执行上述代码,所得之结果如下所示。 当用户单击【放映幻灯片】按钮后,图像对话框中将以2秒为间隔的速度逐个播放图库中的图片。 2)ForEach...Next是在一个集合中针对其中的每一个元素逐个执行的循环结构。 这种语法在Python中也有类似的实现。 它的处理对象通常是数组、对象集合等,通过ForEach来取出集合中的单个元素(或对象)。 在正常情况下,当集合中每一个对象都被取出时,才会跳出循环。 其语法规则如下: [vb]viewplaincopy在CODE上查看代码片派生到我的代码片 ForEach对象变量As数据类型In集合数组 语句块(statements) Next对象变量 下面这个例子演示了用ForEach...Next语句重写上面的幻灯片放映小程序,注意其中略去了定义及载入图片文件的部分代码(因为这部分代码与之前用到过的并无差别)。 [vb]viewplaincopy在CODE上查看代码片派生到我的代码片 PublicClassForm1 '此处代码有省略,可参考之前用于载入图像的代码 Dimpics()AsImage={pic_Aston,pic_Holden,pic_Jeep,pic_Hyundai,pic_Lucid} PrivateSubButton1_Click(sender
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Visual Basic快捷教程流程控制 Basic 快捷 教程 流程 控制