十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
经过长时间学习VB.NET条件语句,于是和大家分享一下,看完本文你肯定有不少收获,希望本文能教会你更多东西。在程序设计中,VB.NET条件语句能够根据表达式的值来决定代码的执行流程。在VB.NET中,条件分支语句有两种:If/Then/Else语句和Select/Case语句。
创新互联公司坚持“要么做到,要么别承诺”的工作理念,服务领域包括:网站设计制作、成都做网站、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的华容网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
1. If/Then/Else语句
If/Then/Else语句是最常用的VB.NET条件语句。它的基本形式是:
If condition Then statements1 [Else statements2 ]
它表示:如果condition为True,那么就执行statements1;否则执行statements2。根据时间显示问候信息。
%
If Hour(Now)12 Then Response.Write ("Good morning! Cindy!")
If Hour(Now)=12 Then Response.Write ("Good noon! Cindy!")
If (Hour(Now)12 And Hour(Now)18) Then Response.Write ("Good afternoon! Cindy!")
If Hour(Now)=18 Then Response.Write ("Good evening! Cindy!")
%
在上面的例子中,函数Hour()是对给出的日期时间求它的小时数,Now函数用于返回当前的日期和时间。程序根据当时的时间判定是上午、中午还是下午,分别给出问候信息。我们看到,这个写法很简单,但是这个程序为了显示一条问候信息,要对Hour(Now)取值4次并且执行4次比较才能完成,从效率上考虑并不好。If/Then/Else语句还可以写成比较复杂的形式:
If condition_1 Then
statements_1
[ElseIf condition_m Then statements_m
[ElseIf condition_n Then…]]
[Else statements_2]
End If
这个语句可以检测多个条件。第一种写法要求语句在写的时候要在一行中写完,例如例2.4 的第2行的If语句。这条语句也可以采用第二种方法来写,方法如下:
If Hour(Now)12 Then
Response.Write ("Good Morning!Cindy!")
End If
建议用户采用后一种写法,因为这种方法更结构化,可读性好。当用户在调试大型软件的代码时,会发现,虽然看起来多写了几行语句,但好处却是很大的。根据时间显示问候信息。请注意这个例子的写法与上个例子中的写法在执行效率上的区别。
%
If Hour(Now)12 Then
Response.Write ("Good morning! Cindy!")
ElseIf Hour(Now)=12 Then
Response.Write ("Good noon! Cindy!")
ElseIf Hour(Now)=18 Then
Response.Write ("Good evening! Cindy!")
Else
Response.Write ("Good afternoon! Cindy!")
End If
%
上面的例子在执行的过程中,对于当前不同的时间,为了显示问候信息,执行的Hour(Now)的取值和比较的次数是不一样的:最少只要1次,最多需要3次。
2. Select/Case结构
当程序中的条件比较复杂,而且是根据同一个表达式的不同值执行不同操作的时候,用If/Then/Else语句来写就显得十分烦琐。这时可以考虑采用Select/Case结构来完成VB.NET条件语句。
Select/Case结构为:
Select Case testexpression
Case condition_1
statements_1
[… Case Else statements_n]
End Select
它表示:如果testexpression的值是Condition_1,就执行statements_1,以此类推,如果都不符合,就执行Statements_n。用Select/Case语句来实现问候信息的显示。
%
Select Case Hour(Now)
Case 0,1,2,3,4,5,6,7,8,9,10,11
Response.Write ("Good morning! Cindy!")
Case 12
Response.Write ("Good noon! Cindy!")
Case 13,14,15,16,17
Response.Write ("Good afternoon! Cindy!")
Case Else
Response.Write ("Good evening! Cindy!")
End Select
%
很明显,用这种方法来显示问候信息要比用If/Then/Else语句清楚得多。因此,在选择VB.NET条件语句的时候要考虑好采用什么方式,并认真设置好条件。
Structure是值类型,classe是引用类型 Structure用栈来分配; classe用堆来分配 structure的成员默认情况下是公共的,而Class的成员变量和常量默认情况下是私有的而其它成员默认情况下是公共的.这与VB6是相兼容的。 structure必须至少有一个非共享的成员变量或事件成员,class可以完全是空的. Structure的成员不能声明成Protected; class成员可以. 一个structure过程只能在它是一个Shared Sub时才能handle events而且只能通过AddHandler语句;而任何class过程都可以handle events,既可以用Handles关键字或 AddHandler语句。 Structure variable declarations cannot specify initializers, the New keyword, or initial sizes for arrays; class variable declarations can. Structure继承自ValueType类,不能从其它任何类型继承; classes可以从任何不是ValueType的类继承 Structure不能继承而Class可以 Structure从来不析构terminated因此common language runtime (CLR)从来不调用它的Finalize方法,classe由垃圾回收器进行析构, 当没有任何对该类的引用时调用它的Finalize方法 structure 不需要一个构造函数,而Class需要 Structure只能有带参数的非共享的构造函数; classes 可以有带或不带参数的构造函数. 每个Structure都有一个默认的不带参数的构造函数以对其成员进行初始化,你可以重新定义该函数
Public Class Form1
Inherits System.Windows.Forms.Form
#Region " Windows 窗体设计器生成的代码 "
Public Sub New()
MyBase.New()
'该调用是 Windows 窗体设计器所必需的。
InitializeComponent()
'在 InitializeComponent() 调用之后添加任何初始化
End Sub
'窗体重写 dispose 以清理组件列表。
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub
'Windows 窗体设计器所必需的
Private components As System.ComponentModel.IContainer
'注意: 以下过程是 Windows 窗体设计器所必需的
'可以使用 Windows 窗体设计器修改此过程。
'不要使用代码编辑器修改它。
Friend WithEvents txtResult As System.Windows.Forms.TextBox
Friend WithEvents btnStart As System.Windows.Forms.Button
Private WithEvents lblResult As System.Windows.Forms.Label
System.Diagnostics.DebuggerStepThrough() Private Sub InitializeComponent()
Me.txtResult = New System.Windows.Forms.TextBox
Me.btnStart = New System.Windows.Forms.Button
Me.lblResult = New System.Windows.Forms.Label
Me.SuspendLayout()
'
'txtResult
'
Me.txtResult.Location = New System.Drawing.Point(0, 16)
Me.txtResult.Name = "txtResult"
Me.txtResult.Size = New System.Drawing.Size(480, 21)
Me.txtResult.TabIndex = 0
Me.txtResult.Text = ""
'
'btnStart
'
Me.btnStart.Location = New System.Drawing.Point(384, 48)
Me.btnStart.Name = "btnStart"
Me.btnStart.TabIndex = 1
Me.btnStart.Text = "开始"
'
'lblResult
'
Me.lblResult.Location = New System.Drawing.Point(8, 48)
Me.lblResult.Name = "lblResult"
Me.lblResult.Size = New System.Drawing.Size(161, 26)
Me.lblResult.TabIndex = 2
'
'Form1
'
Me.AutoScaleBaseSize = New System.Drawing.Size(6, 14)
Me.ClientSize = New System.Drawing.Size(488, 86)
Me.Controls.Add(Me.lblResult)
Me.Controls.Add(Me.btnStart)
Me.Controls.Add(Me.txtResult)
Me.Name = "Form1"
Me.Text = "Form1"
Me.ResumeLayout(False)
End Sub
#End Region
Private Sub btnStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStart.Click
Me.txtResult.Text = ""
'声明一个球箱
Dim iBall() As String = {"red", "red", "red", "white", "white", "white", "white", "white", "green", "green", "green", "green", "green", "green"}
Dim i As Integer = 0
Dim result As String = ""
Dim rand As New Random
Dim temp As Integer
While (result.Split(" ").GetUpperBound(0) 7) '任意选取7个球
temp = CInt(rand.NextDouble() * 13)
If iBall.GetValue(temp) "" Then
result += iBall.GetValue(temp) " "
iBall.SetValue("", temp) '已取出那个球置为空
End If
End While
If result.IndexOf("white") = 0 Then '是否存在白球
While (result.Split(" ").GetUpperBound(0) 8) '选第八个球
temp = CInt(rand.NextDouble() * 13)
If iBall.GetValue(temp) "" Then
result += iBall.GetValue(temp) " "
iBall.SetValue("", temp) '已取出那个球=""
End If
End While
Else '不存在==将白球插入以上任意两个球之间
result = result.Insert(result.IndexOf(" ", CInt(rand.NextDouble() * (result.Length - 1))), " white")
End If
Me.txtResult.Text = result
DrawBall(result)
End Sub
Sub DrawBall(ByVal result As String)
Dim g As Graphics = Me.lblResult.CreateGraphics
Dim str() As String = result.Split(" ")
Dim i As Integer
g.Clear(Color.Blue)
g.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
For i = 0 To str.GetUpperBound(0)
Dim ref As New Rectangle(i * 20, 3, 20, 20)
Select Case str(i)
Case "red"
g.DrawEllipse(Pens.Black, ref)
g.FillEllipse(New SolidBrush(Color.Red), ref)
Case "green"
g.DrawEllipse(Pens.Black, ref)
g.FillEllipse(New SolidBrush(Color.Green), ref)
Case "white"
g.DrawEllipse(Pens.Black, ref)
g.FillEllipse(New SolidBrush(Color.White), ref)
Case Else
g.DrawEllipse(Pens.Black, ref)
g.FillEllipse(New SolidBrush(Color.Black), ref)
End Select
Next
End Sub
End Class
Public Class Form1
For i = 1 To 9
For j = 1 To 9
If j = i Then
Label1.Text = Label1.Text " " i "*" j "=" IIf(i * j 9, i * j, i * j " ")
End If
Next
Label1.Text = Label1.Text vbCrLf
Next
End Sub
End Class
label属性设置:AutoSize设置为F,Size设置为440,190,BACKCOLOR设置为WHITE