惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google DeepMind News
Google DeepMind News
F
Fortinet All Blogs
阮一峰的网络日志
阮一峰的网络日志
Apple Machine Learning Research
Apple Machine Learning Research
爱范儿
爱范儿
WordPress大学
WordPress大学
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
J
Java Code Geeks
罗磊的独立博客
S
SegmentFault 最新的问题
V
V2EX
V
Visual Studio Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
美团技术团队
博客园 - 三生石上(FineUI控件)
Stack Overflow Blog
Stack Overflow Blog
Y
Y Combinator Blog
MyScale Blog
MyScale Blog
D
Docker
Google DeepMind News
Google DeepMind News
Blog — PlanetScale
Blog — PlanetScale
M
Microsoft Research Blog - Microsoft Research
Martin Fowler
Martin Fowler
S
Secure Thoughts
B
Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Recent Announcements
Recent Announcements
MongoDB | Blog
MongoDB | Blog
C
Cisco Blogs
C
CERT Recently Published Vulnerability Notes
T
True Tiger Recordings
GbyAI
GbyAI
P
Proofpoint News Feed
P
Privacy International News Feed
Jina AI
Jina AI
The Cloudflare Blog
I
Intezer
AWS News Blog
AWS News Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
S
Security Archives - TechRepublic
NISL@THU
NISL@THU
The Register - Security
The Register - Security
Recent Commits to openclaw:main
Recent Commits to openclaw:main
P
Palo Alto Networks Blog
S
Schneier on Security
L
LINUX DO - 热门话题
C
CXSECURITY Database RSS Feed - CXSecurity.com
Security Latest
Security Latest
C
Cybersecurity and Infrastructure Security Agency CISA

博客园 - 老码识途呀

基于.NET的Windows窗体编程之WinForms列表控件 基于.NET的Windows窗体编程之WinForms数据表格 基于.NET的Windows窗体编程之WinForms事件简介 基于.NET的Windows窗体编程之WinForms布局简介 基于.NET的Windows窗体编程之WinForms控件简介 基于.NET的Windows窗体编程之WinForms入门简介 推荐一款基于.NET和百度飞桨的OCR识别组件 新书速递,手把手教你WPF入门与开发 推荐一种并发线程中资源同步常用方法 推荐一种手动设置异步线程等待机制的解决方案 推荐一种异步线程执行过程中更新进度的方法 推荐一款基于.NET的进程间数据交互经典解决方案 推荐一款线程or进程间数据同步解决方案 推荐一款代码规范检查(CodeReview)神器 推荐一款高性能状态机管理解决方案 推荐一款进程间高速交换数据的解决方案 推荐一款基于.NET的进程间通信框架 推荐一款基于EF-Core的分库分表利器 推荐一种程序崩溃闪退或卡死的分析方法 推荐一款Excel读写神器之MiniExcel入门详解 推荐一款Ioc容器之Ninject入门详解 ASP.NET Core WebApi+React UI开发入门详解
基于.NET的Windows窗体编程之WinForms对话框
老码识途呀 · 2026-05-17 · via 博客园 - 老码识途呀

在日常开发中,有时候需要弹出对话框,供用户选择使用,如字体对话框,颜色对话框等,今天我们一些简单的小例子,简述基于.NET的Windows窗体编程中常见对话框的使用,仅供学习分享使用,如有不足之处,还请指正。

image

概述

在使用某些软件时,经常会看到,点击一个按钮,然后弹出对话框,让用户选择某些内容,而这些弹出的对话框所包含的内容,通常是特定的内容,如保存文件,打开文件等对话框。WinForms框架中内置的常见对话框,主要有以下几种:

  • ColorDialog,颜色选择对话框。
  • FolderBrowserDialog,文件夹浏览对话框。
  • FontDialog,字体选择对话框。
  • OpenFileDialog,打开文件对话框。
  • SaveFileDialog,保存文件对话框。

接下来将逐项介绍各个对话框的场景用法。

ColorDialog

ColorDialog 组件是一个预配置的对话框,允许用户从调色板中选择颜色,并将自定义颜色添加到该调色板。该对话框包含两个部分,一部分显示基本颜色,另一部分允许用户定义自定义颜色。ColorDialog对话框的关键属性如下所示:

  • Color,用于获取或设置对话框中选择的颜色。
  • AllowFullOpen,是否允许自定义颜色,如果AllowFullOpen属性为false,那么“定义自定义颜色”按钮将被禁用,用户只能使用调色板中的预定义颜色;如果AllowFullOpen属性为true,则允许用户定义自定义颜色。
  • SolidColorOnly,是否仅显示单一颜色,如果SolidColorOnly属性设置为true,则用户无法选择抖动颜色,只能选择纯色。
  • ShowDialog,所有的Dialog都需要通过此方法来显示对话框,返回DialogResult类型的值,如果点击了确定,则返回DialogResult.OK,如果点击了取消,则返回DialogResult.Cancel。
  • ShowHelp,是否显示帮助按钮,如果ShowHelp属性设置为true,对话框中会显示一个“帮助”按钮。 当用户单击“帮助”按钮时, ColorDialog 将引发组件的 HelpRequest 事件。
  • AnyColor,任何颜色,当AnyColor属性设置为 true 时,对话框将在基本颜色集中显示所有可用颜色。 

为了更好的演示ColorDialog的功能,首先我们在Form表单中添加一个按钮,并命名为btnColor,接下来在按钮事件btnColor_Click中创建ColorDialog,并在弹出的颜色对话框中选择颜色,并将颜色设置到Lable的背景色上,具体代码如下所示:

private void btnColor_Click(object sender, EventArgs e)
{
    ColorDialog colorDialog = new ColorDialog();
    colorDialog.AllowFullOpen = true;
    colorDialog.ShowHelp = true;
    if (colorDialog.ShowDialog() == DialogResult.OK)
    {
        this.lblContent.Text = colorDialog.Color.ToString();
        this.lblContent.BackColor = colorDialog.Color;
    }
}

运行示例,如下所示:

image

FontDialog

FontDialog 组件是一个预配置的对话框,主要用于选择字体。它是用于公开系统上当前安装的字体的标准 Windows 字体 对话框。默认情况下,对话框显示字体、字体样式和大小的列表框;“删除线”和“下划线”等效果的复选框;脚本的下拉列表;以及字体显示方式的示例。FontDialog字体选择对话框的关键属性,主要有以下几个:

  • Font,获取或设置对话框选择的字体,此属性设置字体、样式、大小、脚本和效果;例如 Arial, 10pt, style=Italic, Strikeout
  • Color,获取或设置对话框选择的颜色,如果没有显示颜色选择列表,则返回默认Color.Black。
  • ShowColor,字体对话框是否显示颜色选择列表,默认为false。
  • ShowApply,是否显示Apply按钮,默认为false。
  • ShowEffects,是否显示字体的效果,默认为true。

为了更好的演示FontDialog的功能,首先我们在Form表单中添加一个按钮,并命名为btnFont,接下来在按钮事件btnFont_Click中创建FontDialog,并在弹出的颜色对话框中选择字体,颜色,并将字体,颜色设置到Lable上,具体代码如下所示:

private void btnFont_Click(object sender, EventArgs e)
{
    FontDialog fontDialog = new FontDialog();
    fontDialog.ShowColor = true;
    fontDialog.ShowApply = true;
    fontDialog.ShowEffects = true;
    if (fontDialog.ShowDialog() == DialogResult.OK)
    {
        this.lblContent.Font = fontDialog.Font;
        this.lblContent.ForeColor = fontDialog.Color;
    }
}

运行示例,效果如下所示:

image

OpenFileDialog

OpenFileDialog 组件是一个预配置的对话框,它与 Windows 操作系统公开的“打开文件”对话框相同。使用OpenFileDialog,主要用于选择需要打开的文件,不过需要编写自己的文件打开逻辑。OpenFileDialog文件打开对话框的关键属性如下所示:

  • Multiselect ,设置是否可以在打开的对话框中选择多个文件。
  • ShowReadOnly,设置是否显示“以只读方式打开(R)”复选框。
  • ReadOnlyChecked, 指示“以只读方式打开(R)”复选框是否勾选。
  • ShowHiddenFiles,设置是否显示隐藏文件或系统文件。
  • ShowHelp,设置是否显示帮助按钮。
  • Title,设置弹出文件选择框的标题。
  • Filter ,属性设置当前文件名筛选器字符串,该字符串确定对话框中的“类型文件”框中显示的选项。
  • FileName,文件打开对话框选择的文件。如果Multiselect属性为true,则可以通过FileNames属性获取选择的多个文件。
  • InitialDirectory,用于设置默认打开目录。
  • DefaultExt,获取或设置文件保存对话的默认扩展名,设置是不需要带因为的点号分隔符。
  • AddExtension,用户忘记写文件后缀时是否自动添加后缀,默认为true。

为了更好的演示OpenFileDialog 的功能,首先我们在Form表单中添加一个按钮,并命名为btnOpenFile,接下来在按钮事件btnOpenFile_Click中创建OpenFileDialog ,并在弹出的打开文件对话框中选择文件,点击确定按钮后将文件内容显示在文件框中,具体代码如下所示:

private void btnOpenFile_Click(object sender, EventArgs e)
{
    OpenFileDialog openFileDialog = new OpenFileDialog();
    openFileDialog.Multiselect = false;
    openFileDialog.ShowReadOnly = true;
    openFileDialog.ShowHiddenFiles = false;
    openFileDialog.Title = "选择打开的文件";
    openFileDialog.ShowHelp = true;
    openFileDialog.Filter = "文本文件(*.txt)|*.txt|所有文件(*.*)|*.*";
    if (openFileDialog.ShowDialog() == DialogResult.OK)
    {
        string fileName = openFileDialog.FileName;
        if (File.Exists(fileName))
        {
            string content = File.ReadAllText(fileName);
            this.txtContent.Text = content;
        }
    }
}

运行示例,如下所示:

image

说明,Filter字符串包含对文件过滤器的描述,格式为“文件描述|表达式”;Filter中表达式支持多个文件过滤器,格式为“文件描述1|表达式1,表达式2,表达式3”;同时Filter支持多个文件类型之间的切换,格式为“文件描述1|表达式1|文件描述2|表达式2|文件描述3|表达式3”,示例如下:

  • Text files (*.txt)|*.txt|All files (*.*)|*.*
  • Image Files(*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF|All files (*.*)|*.*
  • JPEG(*.jpeg)|*.jpeg|PNG(*.png)|*.png|All files (*.*)|*.*

SaveFileDialog

SaveFileDialog 组件是一个预配置的对话框, 它与 Windows 使用的标准“保存文件”对话框相同。SaveFileDialog主要用于保存文件,不过在使用 SaveFileDialog 组件时,必须编写自己的文件保存逻辑。SaveFileDialog文件保存对话框的关键属性和OpenFileDialog非常相似。

为了更好的演示SaveFileDialog 的功能,首先我们在Form表单中添加一个按钮,并命名为btnSaveFile,接下来在按钮事件btnSaveFile_Click中创建SaveFileDialog ,并在弹出的文件保存对话框中选择文件,点击确定按钮后将文本框中的内容保存到文件中,具体代码如下所示:

private void btnSaveFile_Click(object sender, EventArgs e)
{
    SaveFileDialog saveFileDialog = new SaveFileDialog();
    saveFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
    saveFileDialog.AddExtension = true;
    saveFileDialog.DefaultExt = "txt";
    saveFileDialog.Title = "选择保存的文件";
    saveFileDialog.Filter = "文本文件(*.txt)|*.txt|所有文件(*.*)|*.*";
    if (saveFileDialog.ShowDialog() == DialogResult.OK)
    {
        string fileName = saveFileDialog.FileName;
        File.WriteAllText(fileName, this.txtContent.Text);
    }
}

运行示例,效果如下所示:

image

FolderBrowserDialog

FolderBrowserDialog组件是用于浏览和选择文件夹的模态对话框。它显示一个界面,用户可以浏览并选择文件夹或创建新文件夹,是 OpenFileDialog 组件的补充。所以若要选择文件,而不是文件夹,请使用 OpenFileDialog 组件。FolderBrowserDialog组件的关键属性如下所示:

  • RootFolder,确定将在对话框的树视图中显示的最顶层文件夹和任何子文件夹,它是Environment.SpecialFolder枚举类型。
  • SelectedPath ,获取对话框中所选文件夹的路径。
  • Description ,指定显示在文件夹浏览器树视图顶部的文本字符串。
  • UseDescriptionForTitle,是否将Description设置到对话框的Title。
  • ShowNewFolderButton,是否显示新增文件夹按钮。

为了更好的演示FolderBrowserDialog的功能,首先我们在Form表单中添加一个按钮,并命名为btnBrowser,接下来在按钮事件btnBrowser_Click中创建FolderBrowserDialog,并在弹出的文件夹浏览对话框中选择文件夹,点击确定按钮后将选择的文件夹目录显示在文本框中,具体代码如下所示:

private void btnBrowser_Click(object sender, EventArgs e)
{
    FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog();
    folderBrowserDialog.Description = "this is a folder browser dialog";
    folderBrowserDialog.UseDescriptionForTitle = true;
    folderBrowserDialog.RootFolder = Environment.SpecialFolder.MyDocuments;
    folderBrowserDialog.ShowNewFolderButton = true;
    if (folderBrowserDialog.ShowDialog() == DialogResult.OK)
    {
        this.txtContent.Text = folderBrowserDialog.SelectedPath;
    }
}

运行示例,如下所示:

image

以上就是《基于.NET的Windows窗体编程之WinForms对话框》的全部内容,旨在抛砖引玉,一起学习,共同进步。