VB Visual Basic 2026 中文教程
第 7 课 · 条件分支

If...Then...Else 条件判断

前一课已经学习如何得到 True 或 False。现在我们让程序真正根据条件作出决定:条件成立时执行一组代码,不成立时执行另一组代码。这就是程序“会判断”的基础。

适合:完成第 6 课的初学者建议时间:45–60 分钟实作:学生成绩等级判定器

本课学习目标

  • 理解条件判断如何改变程序执行流程。
  • 掌握 If...Then 单一条件判断。
  • 掌握 If...Then...Else 双分支判断。
  • 使用 ElseIf 处理多个条件。
  • 理解判断顺序为什么非常重要。
  • 使用 AndAlso、OrElse 与 Not 组合条件。
  • 认识嵌套 If,并知道何时应该避免过度嵌套。
  • 完成一个可判断成绩等级与及格状态的 Windows Forms 应用。

7.1 程序为什么需要条件判断?

真实程序不会每次都执行完全相同的代码。它必须根据用户输入、系统状态或计算结果决定接下来做什么。

取得资料

例如学生成绩为 76 分。

成绩 ≥ 50?
根据结果执行

True → 显示“及格”;False → 显示“不及格”。

条件表达式的结果必须能够解释为 Boolean:也就是 True 或 False。

Dim score As Integer = 76
Dim passed As Boolean = score >= 50

这里 score >= 50 的结果是 True。接下来就可以用 If 根据这个结果决定是否执行某段代码。

7.2 If...Then:单一条件判断

最简单的 If 结构是:

If 条件 Then
    条件成立时执行的代码
End If

例如:

Dim score As Integer = 76

If score >= 50 Then
    lblResult.Text = "及格"
End If

程序会先检查 score >= 50:

True

条件成立

执行 If 与 End If 之间的代码。

False

条件不成立

跳过这段代码,继续执行 End If 后面的语句。

别忘了 End If 多行 If 结构必须以 End If 结束。漏掉它通常会导致后续代码出现多个语法错误。

7.3 If...Then...Else:两种结果

如果条件不成立时也要执行另一段代码,就加入 Else:

If score >= 50 Then
    lblResult.Text = "及格"
Else
    lblResult.Text = "不及格"
End If

这个结构保证两条分支中只会执行一条:

score >= 50→ True:及格|False:不及格

另一个例子:检查年龄

Dim age As Integer = 20

If age >= 18 Then
    lblStatus.Text = "成年人"
Else
    lblStatus.Text = "未成年人"
End If

7.4 ElseIf:处理多个条件

如果可能有超过两种结果,可以使用一个或多个 ElseIf。

If score >= 80 Then
    grade = "A"
ElseIf score >= 70 Then
    grade = "B"
ElseIf score >= 60 Then
    grade = "C"
ElseIf score >= 50 Then
    grade = "D"
Else
    grade = "F"
End If
A80–100
B70–79
C60–69
D50–59
F0–49

VB.NET 会从上往下检查条件,一旦找到第一个 True,就执行对应代码,然后跳到 End If 后面。

7.5 为什么条件顺序非常重要?

考虑下面这个错误写法:

If score >= 50 Then
    grade = "D"
ElseIf score >= 60 Then
    grade = "C"
ElseIf score >= 70 Then
    grade = "B"
ElseIf score >= 80 Then
    grade = "A"
Else
    grade = "F"
End If

如果成绩是 92,第一项 score >= 50 已经是 True,因此程序立即把等级设成 D,后面的 A、B、C 永远不会被检查。

1
先检查最高门槛:score ≥ 80
2
再检查:score ≥ 70
3
然后:score ≥ 60
4
最后:score ≥ 50
多重范围判断的实用原则 当多个条件会互相重叠时,通常把限制最严格、门槛最高的条件放在前面,再逐步放宽。

7.6 使用 AndAlso 组合条件

有时一个决定需要同时满足多个条件:

Dim age As Integer = 25
Dim hasTicket As Boolean = True

If age >= 18 AndAlso hasTicket Then
    lblStatus.Text = "可以入场"
Else
    lblStatus.Text = "不符合入场条件"
End If

这里必须同时满足:

  • age >= 18
  • hasTicket = True

两个条件都为 True,整个 AndAlso 表达式才为 True。

检查数值是否在范围内

If score >= 0 AndAlso score <= 100 Then
    lblStatus.Text = "成绩范围有效"
Else
    lblStatus.Text = "成绩必须介于 0 与 100"
End If

这是非常常见的写法,因为一个有效成绩必须同时满足“不小于 0”以及“不大于 100”。

7.7 使用 OrElse 与 Not

OrElse:满足其中一个条件即可

Dim isMember As Boolean = False
Dim hasCoupon As Boolean = True

If isMember OrElse hasCoupon Then
    lblStatus.Text = "可享优惠"
Else
    lblStatus.Text = "没有优惠资格"
End If

Not:反转 Boolean

Dim isClosed As Boolean = False

If Not isClosed Then
    lblStatus.Text = "商店目前营业中"
End If
Boolean 变量不一定要写 = True 如果 isMember 本身已经是 Boolean,可以直接写 If isMember Then。这通常比 If isMember = True Then 更简洁。

7.8 嵌套 If

If 里面还可以再放另一个 If,这称为嵌套 If(Nested If)。

If score >= 50 Then

    If score >= 80 Then
        lblResult.Text = "及格,而且成绩优秀"
    Else
        lblResult.Text = "及格"
    End If

Else
    lblResult.Text = "不及格"
End If

嵌套 If 在某些逻辑中很自然,但层数太多会让代码难读。很多情况可以用 ElseIf 或组合条件表达得更清楚。

不要为了“看起来高级”而过度嵌套 能用简单、清楚的条件表达,就不要制造四五层 If。可读性比复杂程度更重要。

7.9 单行 If:什么时候使用?

Visual Basic 也允许非常短的单行 If:

If score >= 50 Then lblResult.Text = "及格"

也可以写成:

If score >= 50 Then lblResult.Text = "及格" Else lblResult.Text = "不及格"

虽然语法有效,但本教程在初学阶段仍推荐多行结构,因为更容易阅读、修改和调试:

If score >= 50 Then
    lblResult.Text = "及格"
Else
    lblResult.Text = "不及格"
End If

7.10 实作:学生成绩等级判定器

建立新的 Windows Forms 项目:

GradeEvaluator2026

程序会让用户输入学生姓名和成绩,并显示等级、及格状态与简单评语。

Grade Evaluator 2026
学生姓名:
李明
成绩:
86
操作:
评定成绩
学生:李明
成绩:86
等级:A
状态:及格
评语:表现优秀

在 Form1 加入以下控件:

控件NameText / 用途
FormForm1Text = 学生成绩等级判定器
TextBoxtxtStudentName输入学生姓名
TextBoxtxtScore输入 0–100 的成绩
ButtonbtnEvaluateText = 评定成绩
ButtonbtnClearText = 清除
LabellblResult显示等级和评语;建议 AutoSize = True

完整的评定按钮代码

Private Sub btnEvaluate_Click(sender As Object, e As EventArgs) _
    Handles btnEvaluate.Click

    Dim studentName As String = txtStudentName.Text.Trim()
    Dim score As Integer = CInt(txtScore.Text)

    Dim grade As String
    Dim status As String
    Dim comment As String

    If score >= 80 Then
        grade = "A"
        comment = "表现优秀"
    ElseIf score >= 70 Then
        grade = "B"
        comment = "表现良好"
    ElseIf score >= 60 Then
        grade = "C"
        comment = "表现尚可"
    ElseIf score >= 50 Then
        grade = "D"
        comment = "已经及格,但仍可加强"
    Else
        grade = "F"
        comment = "需要继续努力"
    End If

    If score >= 50 Then
        status = "及格"
    Else
        status = "不及格"
    End If

    lblResult.Text =
        "学生:" & studentName & Environment.NewLine &
        "成绩:" & CStr(score) & Environment.NewLine &
        "等级:" & grade & Environment.NewLine &
        "状态:" & status & Environment.NewLine &
        "评语:" & comment

End Sub

清除按钮

Private Sub btnClear_Click(sender As Object, e As EventArgs) Handles btnClear.Click
    txtStudentName.Clear()
    txtScore.Clear()
    lblResult.Text = ""
    txtStudentName.Focus()
End Sub
为什么这里分成两个 If? 第一个多重 If 负责决定 A–F 等级与评语;第二个 If 只负责决定“及格 / 不及格”。这样初学者可以清楚看到同一份资料可以参与不同的判断。

7.11 先加入基本范围判断

目前如果输入 -5 或 150,等级逻辑仍会产生结果。我们可以先用本课学到的条件判断阻止超出范围的成绩:

Dim score As Integer = CInt(txtScore.Text)

If score < 0 OrElse score > 100 Then
    lblResult.Text = "成绩必须介于 0 与 100。"
    Exit Sub
End If

把这段代码放在等级判断之前。Exit Sub 表示立即结束当前事件处理程序,不继续执行后面的代码。

这还不是完整输入验证 如果用户输入空白或“abc”,CInt 仍然会失败。第 13 课会系统学习 Integer.TryParse,让程序能够安全处理非数字输入。

7.12 逐步理解程序逻辑

1
读取输入

从 TextBox 取得姓名和成绩,并把成绩转换成 Integer。

2
先检查范围

成绩若小于 0 或大于 100,就显示错误信息并 Exit Sub。

3
从高到低判断等级

先判断 80,再判断 70、60、50,确保较高成绩不会提前落入较低等级。

4
判断及格状态

成绩达到 50 显示“及格”,否则显示“不及格”。

5
组合输出

把姓名、成绩、等级、状态和评语显示在 lblResult。

7.13 测试边界值

条件程序特别需要测试“边界值”,因为错误经常发生在刚好跨越门槛的位置。

输入成绩预期等级状态为什么值得测试
80A及格A 的最低边界
79B及格A 边界下方 1 分
70B及格B 的最低边界
60C及格C 的最低边界
50D及格及格最低边界
49F不及格及格边界下方 1 分
100A及格最高有效成绩
101—错误超出有效范围
以后测试条件判断时,优先测试门槛附近 如果条件是 score >= 50,至少测试 49、50 和 51。这样比只测试 30 和 90 更容易发现 > 与 >= 写错的问题。

7.14 初学者常见错误

错误 1

条件顺序写反

多重等级判断从低分开始,会让高分提前匹配低等级。通常应从最高门槛往下判断。

错误 2

把 = 与 >= 混淆

score = 50 只检查刚好 50;score >= 50 才表示 50 或以上。

错误 3

漏写 End If

多行 If 必须用 End If 结束,否则后面的代码结构会被破坏。

错误 4

复杂条件没有括号

虽然 VB 有运算优先级,但复杂逻辑适当加括号能让条件更清楚,也减少误读。

7.15 小练习

  1. 新增“优秀奖”判断:如果成绩 ≥ 90,在结果最后再显示“获得优秀奖”。
  2. 加入 CheckBox:chkAttendanceOK。只有成绩 ≥ 50 而且出席条件合格时,才显示“最终及格”。
  3. 如果学生姓名为空白,先显示“请输入学生姓名。”并使用 Exit Sub 停止处理。
  4. 加入“是否需要补考”的 Boolean 结果:成绩低于 50 时为 True。
  5. 测试 49、50、59、60、69、70、79、80、100,确认每个等级边界都正确。

本课复习

  1. If...Then 在条件为 False 时会怎样?
  2. Else 的作用是什么?
  3. 什么时候应该使用 ElseIf?
  4. 为什么成绩等级判断通常要从最高门槛开始?
  5. AndAlso 和 OrElse 有什么区别?
  6. Not 的作用是什么?
  7. 什么是嵌套 If?为什么不应该过度嵌套?
  8. Exit Sub 在本课示例中的作用是什么?