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

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

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

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

本课学习目标

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

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

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

取得资料

例如学生成绩为 76 分。

成绩 ≥ 50?
根据结果执行

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

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

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. AndAlsoOrElse 有什么区别?
  6. Not 的作用是什么?
  7. 什么是嵌套 If?为什么不应该过度嵌套?
  8. Exit Sub 在本课示例中的作用是什么?