VB Visual Basic 2026 中文教程
第 19 课 · 与用户进行确认和选择

对话框与消息框

Windows 桌面应用经常需要向用户显示提示、询问是否继续、选择文件、指定保存位置、挑选颜色或字体。Windows Forms 提供多种标准对话框,让应用可以使用用户熟悉的 Windows 操作方式。本课将从 MessageBox 开始,再学习常用系统对话框。

适合:完成第 18 课的初学者建议时间:55–70 分钟实作:MiniTextEditor2026

本课学习目标

  • 使用 MessageBox.Show 显示简单消息。
  • 设置消息框标题、按钮和图标。
  • 使用 DialogResult 判断用户选择。
  • 使用 Yes/No 与 OK/Cancel 进行确认。
  • 使用 OpenFileDialog 选择文件。
  • 使用 SaveFileDialog 指定保存位置。
  • 理解 FilterFileName
  • 使用 ColorDialogFontDialog
  • 认识 FolderBrowserDialog
  • 完成一个带打开、保存、字体、颜色和确认功能的迷你文本编辑器。

19.1 最简单的 MessageBox

MessageBox.Show 是 Windows Forms 中最常用的提示方式之一。

MessageBox.Show("资料已经保存。")

程序会弹出一个标准消息框,用户点击 OK 后关闭。

提示
资料已经保存。
OK

19.2 加入标题

MessageBox.Show(
    "资料已经保存。",
    "保存成功")

第一个参数是消息内容,第二个参数是标题。

19.3 按钮与图标

可以继续指定按钮组合和图标:

MessageBox.Show(
    "请输入有效成绩。",
    "输入错误",
    MessageBoxButtons.OK,
    MessageBoxIcon.Warning)
Information

信息

一般通知,例如“资料保存成功”。

Warning

警告

提醒用户注意,例如输入不完整。

Error

错误

操作失败或发生错误时使用。

Question

询问

配合 Yes/No 等确认按钮。

常见 MessageBoxButtons

按钮组合用途示例
OK单纯通知。
OKCancel继续或取消操作。
YesNo确认是否执行。
YesNoCancel需要三种选择的情况。
RetryCancel操作失败后重试或取消。

19.4 DialogResult:用户按了什么?

当消息框有多个按钮时,程序必须知道用户选择了哪一个。

Dim result As DialogResult =
    MessageBox.Show(
        "确定要清除所有内容吗?",
        "确认清除",
        MessageBoxButtons.YesNo,
        MessageBoxIcon.Question)

然后判断:

If result = DialogResult.Yes Then
    txtEditor.Clear()
End If
DialogResult.OK
用户点击 OK。
DialogResult.Cancel
用户点击 Cancel。
DialogResult.Yes
用户点击 Yes。
DialogResult.No
用户点击 No。
DialogResult.Retry
用户点击 Retry。

19.5 典型确认对话框

Dim result As DialogResult =
    MessageBox.Show(
        "确定要删除这笔资料吗?",
        "确认删除",
        MessageBoxButtons.YesNo,
        MessageBoxIcon.Warning)

If result = DialogResult.No Then
    Exit Sub
End If

' 用户选择 Yes,继续删除
破坏性操作应该给用户明确选择 删除、覆盖、清空等无法轻易恢复的操作,通常应该先确认。

19.6 OpenFileDialog:让用户选择文件

比起要求用户手工输入:

C:\Users\...\Documents\notes.txt

更自然的方法是打开 Windows 文件选择对话框。

从 Toolbox 加入 OpenFileDialog,名称设为:

dlgOpen

代码:

If dlgOpen.ShowDialog() = DialogResult.OK Then
    txtFilePath.Text = dlgOpen.FileName
End If
ShowDialog()打开对话框
用户选文件或取消
DialogResult.OK确认选择
FileName取得完整路径

19.7 Filter:限制可选择的文件类型

例如只显示文本文件:

dlgOpen.Filter =
    "文本文件 (*.txt)|*.txt|所有文件 (*.*)|*.*"
文本文件 (*.txt) 对应 *.txt 所有文件 (*.*) 对应 *.*

每一组由:

显示名称|文件模式

组成,多组之间再用 | 分隔。

19.8 SaveFileDialog:让用户选择保存位置

从 Toolbox 加入 SaveFileDialog,名称设为:

dlgSave

设置:

dlgSave.Filter =
    "文本文件 (*.txt)|*.txt|所有文件 (*.*)|*.*"

dlgSave.DefaultExt = "txt"

dlgSave.FileName = "note.txt"

显示:

If dlgSave.ShowDialog() = DialogResult.OK Then

    File.WriteAllText(
        dlgSave.FileName,
        txtEditor.Text)

End If
OpenFileDialog 与 SaveFileDialog 本身不会读写文件 它们主要负责让用户选择路径。真正读取仍使用 File.ReadAllText,真正保存仍使用 File.WriteAllText 等文件 API。

19.9 ColorDialog:选择颜色

从 Toolbox 加入 ColorDialog,名称设为:

dlgColor

然后:

If dlgColor.ShowDialog() = DialogResult.OK Then
    txtEditor.ForeColor = dlgColor.Color
End If

也可以用于背景色:

txtEditor.BackColor = dlgColor.Color

19.10 FontDialog:选择字体

If dlgFont.ShowDialog() = DialogResult.OK Then
    txtEditor.Font = dlgFont.Font
End If

dlgFont.Font 会包含字体名称、大小、粗体、斜体等设置。

字体是否存在取决于用户电脑 如果应用依赖特定字体,应考虑目标电脑是否安装该字体。普通文本编辑器让用户通过 FontDialog 选择本机字体就比较自然。

19.11 FolderBrowserDialog:选择文件夹

如果程序需要用户选择一个文件夹,而不是具体文件,可以使用:

Using dialog As New FolderBrowserDialog()

    dialog.Description =
        "请选择要保存资料的文件夹。"

    If dialog.ShowDialog() = DialogResult.OK Then

        lblFolder.Text =
            dialog.SelectedPath

    End If

End Using

19.12 对话框为什么出现在窗体下方?

OpenFileDialog、SaveFileDialog、ColorDialog 和 FontDialog 都是“非视觉组件”。它们不会像 Button 或 TextBox 那样直接显示在 Form 上,而是在 Designer 下方的组件区域出现。

视觉控件

Button / TextBox

设计时直接放在窗体上。

非视觉组件

OpenFileDialog

设计时出现在组件托盘,运行时才弹出。

ShowDialog

真正显示

调用 ShowDialog() 后才会显示标准 Windows 对话框。

19.13 实作:迷你文本编辑器

建立新的 Windows Forms 项目:

MiniTextEditor2026

这个项目把 Lesson 17 的文件读写和本课标准对话框结合起来。

Mini Text Editor 2026
打开 保存 字体 文字颜色 清除
欢迎使用 Mini Text Editor 2026。

这里可以输入、打开和保存文本内容。

在 Form1 加入:

控件 / 组件NameText / 设置
TextBoxtxtEditorMultiline = True;ScrollBars = Both;AcceptsReturn = True
ButtonbtnOpenText = 打开
ButtonbtnSaveText = 保存
ButtonbtnFontText = 字体
ButtonbtnColorText = 文字颜色
ButtonbtnClearText = 清除
OpenFileDialogdlgOpen打开文本文件
SaveFileDialogdlgSave保存文本文件
FontDialogdlgFont选择字体
ColorDialogdlgColor选择文字颜色

Form1.vb 顶部

Imports System.IO

Public Class Form1

打开按钮

Private Sub btnOpen_Click(
    sender As Object,
    e As EventArgs) Handles btnOpen.Click

    dlgOpen.Filter =
        "文本文件 (*.txt)|*.txt|所有文件 (*.*)|*.*"

    dlgOpen.Title =
        "打开文本文件"

    If dlgOpen.ShowDialog() =
        DialogResult.OK Then

        txtEditor.Text =
            File.ReadAllText(
                dlgOpen.FileName)

        Me.Text =
            "Mini Text Editor 2026 - " &
            Path.GetFileName(
                dlgOpen.FileName)

    End If

End Sub

保存按钮

Private Sub btnSave_Click(
    sender As Object,
    e As EventArgs) Handles btnSave.Click

    dlgSave.Filter =
        "文本文件 (*.txt)|*.txt|所有文件 (*.*)|*.*"

    dlgSave.Title =
        "保存文本文件"

    dlgSave.DefaultExt =
        "txt"

    dlgSave.FileName =
        "note.txt"

    If dlgSave.ShowDialog() =
        DialogResult.OK Then

        File.WriteAllText(
            dlgSave.FileName,
            txtEditor.Text)

        MessageBox.Show(
            "文件保存成功。",
            "保存",
            MessageBoxButtons.OK,
            MessageBoxIcon.Information)

    End If

End Sub

字体按钮

Private Sub btnFont_Click(
    sender As Object,
    e As EventArgs) Handles btnFont.Click

    dlgFont.Font =
        txtEditor.Font

    If dlgFont.ShowDialog() =
        DialogResult.OK Then

        txtEditor.Font =
            dlgFont.Font

    End If

End Sub

文字颜色按钮

Private Sub btnColor_Click(
    sender As Object,
    e As EventArgs) Handles btnColor.Click

    dlgColor.Color =
        txtEditor.ForeColor

    If dlgColor.ShowDialog() =
        DialogResult.OK Then

        txtEditor.ForeColor =
            dlgColor.Color

    End If

End Sub

清除按钮:先确认

Private Sub btnClear_Click(
    sender As Object,
    e As EventArgs) Handles btnClear.Click

    If String.IsNullOrWhiteSpace(
        txtEditor.Text) Then

        MessageBox.Show(
            "目前没有内容需要清除。",
            "提示",
            MessageBoxButtons.OK,
            MessageBoxIcon.Information)

        Exit Sub

    End If

    Dim result As DialogResult =
        MessageBox.Show(
            "确定要清除所有文字吗?",
            "确认清除",
            MessageBoxButtons.YesNo,
            MessageBoxIcon.Question)

    If result =
        DialogResult.Yes Then

        txtEditor.Clear()
        txtEditor.Focus()

    End If

End Sub

19.14 程序执行流程

1
用户点击功能按钮

例如打开、保存、字体或颜色。

2
ShowDialog 显示标准窗口

Windows 负责显示熟悉的选择界面。

3
检查 DialogResult

只有用户选择 OK、Yes 等确认结果时才继续。

4
读取选择结果

例如 FileName、Color、Font 或 SelectedPath。

5
执行真正操作

读取文件、保存文件、改变字体或修改颜色。

19.15 初学者常见错误

错误 1

不检查 DialogResult

用户可能点击 Cancel。只有确认选择后才应使用 FileName、Font 或 Color。

错误 2

以为 OpenFileDialog 会自动读取文件

它只负责选择文件,真正内容仍要通过 File.ReadAllText 等 API 读取。

错误 3

Filter 格式错误

显示名称和通配符之间需要用 | 分隔。

错误 4

破坏性操作没有确认

清空或删除前最好使用 Yes/No 对话框确认。

19.16 小练习

  1. 加入“背景颜色”按钮,使用另一个 ColorDialog 改变 txtEditor.BackColor。
  2. 加入“选择文件夹”按钮,用 FolderBrowserDialog 显示 SelectedPath。
  3. 保存前如果 txtEditor 为空,显示 Warning 消息框并取消保存。
  4. 新增“退出”按钮,先用 Yes/No 询问是否退出程序。
  5. 把 OpenFileDialog 的 Filter 扩充为 *.txt*.log
  6. 打开文件成功后,在窗体标题显示文件名称。

本课复习

  1. MessageBox.Show 最基本的用途是什么?
  2. 怎样显示 Yes/No 按钮?
  3. DialogResult.Yes 表示什么?
  4. 为什么调用 ShowDialog 后必须检查返回结果?
  5. OpenFileDialog.FileName 返回什么?
  6. Filter 的作用是什么?
  7. SaveFileDialog 会不会自动保存文件内容?
  8. ColorDialog 与 FontDialog 分别返回什么重要属性?
  9. 什么时候适合使用 FolderBrowserDialog?
  10. 为什么清除和删除操作通常需要确认消息框?