【32】C# WinForm入门到精通 ——打开文件OpenFileDialog 【属性、方法、事件、实例、源码】

  • WinForm 是 Windows Form 的简称,是基于 .NET Framework 平台的客户端(PC软件)开发技术,是 C# 语言中的一个重要应用。

  • .NET 提供了大量 Windows 风格的控件和事件,可以直接拿来使用。

  • 本专栏内容按照标题序号逐渐深入的,如有不懂的基础问题,可看前面教程

  • 在介绍属性的时候,会展示一些用法、代码、实例、截图这样看起来更清晰,免得直接看最后综合实例会有些懵

文章目录

  • 1 打开文件OpenFileDialog——属性
    • 1.1 AddExtension
    • 1.2 AutoUpgradeEnabled
    • 1.3 CheckFileExists
    • 1.4 CheckPathExists
    • 1.5 DefaultExt
    • 1.6 DereferenceLinks
    • 1.7 FileName
    • 1.8 FileNames
    • 1.9 Filter
      • 1.9.1 打开某一类文件
    • 1.9.2 打开多种类型的文件
      • 1.9.3 打开所有类型的文件
    • 1.10 FilterIndex
    • 1.11 InitialDirectory
    • 1.12 Multiselect
    • 1.13 ShowReadOnly
    • 1.14 ReadOnlyChecked
    • 1.15 ShowHelp
    • 1.16 Tag
    • 1.17 Title
  • 2 事件
    • 2.1 FileOk
    • 2.2 HelpRequest
  • 3 实例:打开/保存文件

1 打开文件OpenFileDialog——属性

文件对话框(FileDialog)主要包括文件浏览对话框,以及用于查找、打开、保存文件的功能,与 Windows 中的文件对话框类似。

  • OpenFileDialog用于我们需要弹出一个选择文件的对话框的场合,然后用户在这个对话框中选择文件,可以获取这个文
    件的路径,对文件进行打开操作。

在这里插入图片描述

1.1 AddExtension

该属性用于SaveFileDialog保存文件时,如果没有为文件添加后缀,则自动为保存的文件添加一个后缀,这个后缀是由DefaultExt属性决定的,比如DefaultExt的,所以在OpenFileDialog中这个属性没什么作用,在SaveFileDialog中我再详细介绍该属性

1.2 AutoUpgradeEnabled

该值指示此 FileDialog 实例在 Windows Vista 上运行时是否应自动升级外观和行为,一般情况下用不到该属性

1.3 CheckFileExists

该属性指示用打开文件时,当选择的文件根本不存在时,然后我们点击“打开”按钮时,弹窗提示用户,效果如下
在这里插入图片描述
所以这个属性一般都要设置为true,这样可以防止用户打开的文件有问题

1.4 CheckPathExists

该属性指示用打开文件时,当选择的路劲根本不存在时,然后我们点击"打开”按钮时,弹窗提示用户,效果如下
在这里插入图片描述
在这里插入图片描述
所以这个属性一般都要设置为true,这样可以防止用户打开的路径有问题

1.5 DefaultExt

该属性主要是结合SaveFileDialog控件使用,对于OpenFileDialog暂时不考虑

1.6 DereferenceLinks

该属性为true时,用于指示当打开文件时,我们输入快捷方式文件 (.ink)就能打开快捷方式指定的真实路径,

如下图这是串口助手XCOM V2.0.exe的快捷方式,是放到桌面的,文件名为.ink,如下图:

在这里插入图片描述

在这里插入图片描述

当点击“打开”按钮以后,就能看到快捷方式指向的真实路径,如下图
在这里插入图片描述

1.7 FileName

该属性用于获取我们在打开“OpenFileDialog中”输入的文件名 (单个文件),如下:
在这里插入图片描述
打开代码如下
是当我们点击按钮以后,弹出一个打开文件对话框,我们选择一个文件,就能获取到选择的文件的全路径

  private void button1_Click(object sender, EventArgs e){openFileDialog1.CheckFileExists  = false ;openFileDialog1.CheckPathExists = true;if (openFileDialog1.ShowDialog() == DialogResult.OK){string fileName = openFileDialog1.FileName;}}

1.8 FileNames

当Multiselect为true时,这时候我们可以选择多个文件,这时我们可以通过FileNames来获取多个文件的路径

1.9 Filter

该属性用于指定打开什么类型的文件,一般有下面几种用法

1.9.1 打开某一类文件

下面的代码中有一条“|”,这“|”的左边“xt文件”用于对”|”右边的描述,“*.txt"用于指示只能打开.txt类型的文件,代码如下:

   openFileDialog1.Filter = "txt文件|*.txt";

在这里插入图片描述

Filter:文件格式筛选器,如图片格式删选JPEG Files (*.jpg)|*.jpg|PNG Files (*.png)|*.png|BMP Files (*.bmp)|*.bmp|All files (*.*)|*.*;

1.9.2 打开多种类型的文件

代码如下:

  openFileDialog1.Filter = "csv文件|*.csv|txt文件|*.txt";

上述代码的作用是指定打开csv文件或者txt文件,如下图
在这里插入图片描述

上图被红色框标记的部分是一个下拉框,

  • 当你选择CS文件发现只能选择CSV文件,
  • 当你选择txt文件的时候,只能选择txt文件,如下图:
    在这里插入图片描述

当你选择txt文件的时候,只显示txt文件
在这里插入图片描述

1.9.3 打开所有类型的文件

代码如下:

 openFileDialog1.Filter = "所有文件|*.*";

1.10 FilterIndex

该属性用于指定在有多个类型的文件时,指定OpenFileDialog对话框打开以后,显示的是哪个类型的文件,比如下面的代码中,一共指定了Csv文件、txt文件,并且CSv文件对应的Filterlindex 就是1,txt文件对应的Filterindex 就是2,原则就是从左到右数,Filterindex 的值以1、2、3、依次加1。

//打开文件
private void button2_Click(object sender, EventArgs e)
{openFileDialog1.CheckFileExists = true;openFileDialog1.CheckPathExists = true;//打开指定类型文件openFileDialog1.Filter = "csv文件|*.csv|txt文件|*.txt";openFileDialog1.FilterIndex = 2;//索引从1开始,所以这里从左到右csv文件对应的FilterIndex是1,txt文件对应的FilterIndex是2DialogResult dr = openFileDialog1.ShowDialog();//获取所打开文件的文件名string filename = openFileDialog1.FileName;if (dr == DialogResult.OK && !string.IsNullOrEmpty(filename)){StreamReader sr = new StreamReader(filename); // StreamReader()定义在System.IO中,添加命名空间using System.IO;textBox1.Text = sr.ReadToEnd();//将文本内容读取显示到textBox1 sr.Close();}
}

当为Filterlndex = 2时,效果如下图:
默认就是打开txt类型的文件

在这里插入图片描述

1.11 InitialDirectory

指定打开对话框时,初始化要打开的目录,代码如下

//打开文件
private void button2_Click(object sender, EventArgs e)
{openFileDialog1.CheckFileExists = true;openFileDialog1.CheckPathExists = true;openFileDialog1.InitialDirectory = @"E:\Programming_test";//设置指定保存路径//打开指定类型文件openFileDialog1.Filter = "csv文件|*.csv|txt文件|*.txt";openFileDialog1.FilterIndex = 2;//索引从1开始,所以这里从左到右csv文件对应的FilterIndex是1,txt文件对应的FilterIndex是2DialogResult dr = openFileDialog1.ShowDialog();//获取所打开文件的文件名string filename = openFileDialog1.FileName;if (dr == DialogResult.OK && !string.IsNullOrEmpty(filename)){StreamReader sr = new StreamReader(filename); // StreamReader()定义在System.IO中,添加命名空间using System.IO;textBox1.Text = sr.ReadToEnd();//将文本内容读取显示到textBox1 sr.Close();}
}

触发后直接打开指定路径E:\Programming_test

1.12 Multiselect

该属性用于指示打开文件对话框中是否允许选择多个文件,当该属性为true时如下:

  private void button3_Click(object sender, EventArgs e){DialogResult dr = openFileDialog1.ShowDialog();//获取所打开文件的文件名if (dr == DialogResult.OK){string[] filename = openFileDialog1.FileNames;}           }

在这里插入图片描述

从上图中可以看出,当多选时,然后使用OpenFileDialog的FileNames属性获取多个选择的文件的路径
在这里插入图片描述

1.13 ShowReadOnly

当该属性为true时,将会在对话框中显示一个复选框,如下图
在这里插入图片描述

1.14 ReadOnlyChecked

该属性生效的前提是ShowReadOny属性值为true,当ReadOnyChecked为true时,并且ShowReadOnly为true时,如下图:
在这里插入图片描述

该属性我们可以在代码中获取到以后,然后对文件进行不同的处理,如果该属性为true则不对文件进行写入操作,如果该属性为false则可以对文件进行写入操作

private void button3_Click(object sender, EventArgs e)
{openFileDialog1.ReadOnlyChecked = true;openFileDialog1.Multiselect = true;openFileDialog1.InitialDirectory = @"E:\Programming_test";//指定初始化时打开d盘下的图片文件夹openFileDialog1.CheckFileExists = true;openFileDialog1.CheckPathExists = true;openFileDialog1.FilterIndex = 2;//索引从1开始,所以这里从左到右csv文件对应的FilterIndex是1,txt文件对应的FilterIndex是2openFileDialog1.Filter = "所有文件|*.*";if (openFileDialog1.ShowDialog() == DialogResult.OK){if (openFileDialog1.ReadOnlyChecked)//如果检测到只读文件,那么我们就可以不对文件进行写入操作{}else{string path = openFileDialog1.FileName;using (FileStream fs = new FileStream(path, System.IO.FileMode.Open,System.IO.FileAccess.ReadWrite)){string str = "我是工程师";byte[] bytes = Encoding.UTF8.GetBytes(str);fs.Write(bytes, 0, bytes.Length);}}}
}

1.15 ShowHelp

该属性设置为true时,下图中会出现一个“帮助”按钮
在这里插入图片描述
如果给OpenFileDialog注册一个HelpRequest事件,代码如下: 当我们点击“帮助”按钮时,会弹出下面的窗体,如下图:

属性->事件(闪电标志)->双击HelpRequest,就可以添加HelpRequest事件
在这里插入图片描述
HelpRequest事件函数中 添加代码

private void openFileDialog1_HelpRequest(object sender, EventArgs e)
{MessageBox.Show("我是帮助按钮,你可以给我定义更多帮助内容哟!");
}

在这里插入图片描述

1.16 Tag

绑定数据

1.17 Title

该属性用于设置打开对话框的标题,代码如下

openFileDialog2.Title = "打开文件对话框";

在这里插入图片描述

2 事件

2.1 FileOk

用户点击“打开”或者“保存”时发生

2.2 HelpRequest

用户点击“帮助”按钮时发生

3 实例:打开/保存文件

  • 保存按钮:将文本框内容保存到.txt文件里;
  • 打开按钮:将.txt文件内容显示到文本框里;

Filter:文件格式筛选器,如图片格式删选JPEG Files (*.jpg)|*.jpg|PNG Files (*.png)|*.png|BMP Files (*.bmp)|*.bmp|All files (*.*)|*.*;

在这里插入图片描述

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace WinFormTest2
{public partial class Form5 : Form{public Form5(){InitializeComponent();}//保存文件private void button1_Click(object sender, EventArgs e){saveFileDialog1.ValidateNames = true;saveFileDialog1.CreatePrompt = true;saveFileDialog1.InitialDirectory = @"E:\Programming_test";//设置指定保存路径//文件后缀名saveFileDialog1.DefaultExt = "txt";saveFileDialog1.Filter = "csv文件|*.csv|txt文件|*.txt";saveFileDialog1.FilterIndex = 2; //索引从1开始,所以这里从左到右csv文件对应的FilterIndex是1,txt文件对应的FilterIndex是2DialogResult dr = saveFileDialog1.ShowDialog();//获取所打开文件的文件名string filename = saveFileDialog1.FileName;if (dr == DialogResult.OK && !string.IsNullOrEmpty(filename)){StreamWriter sw = new StreamWriter(filename, true, Encoding.UTF8); // StreamWriter()定义在System.IO中sw.Write(textBox1.Text);//将textBox1 文本内容写到文件里sw.Close();}}//打开文件private void button2_Click(object sender, EventArgs e){openFileDialog1.CheckFileExists = true;openFileDialog1.CheckPathExists = true;openFileDialog1.InitialDirectory = @"E:\Programming_test";//设置指定保存路径//打开指定类型文件openFileDialog1.Filter = "csv文件|*.csv|txt文件|*.txt";openFileDialog1.FilterIndex = 2;//索引从1开始,所以这里从左到右csv文件对应的FilterIndex是1,txt文件对应的FilterIndex是2DialogResult dr = openFileDialog1.ShowDialog();//获取所打开文件的文件名string filename = openFileDialog1.FileName;if (dr == DialogResult.OK && !string.IsNullOrEmpty(filename)){StreamReader sr = new StreamReader(filename); // StreamReader()定义在System.IO中,添加命名空间using System.IO;textBox1.Text = sr.ReadToEnd();//将文本内容读取显示到textBox1 sr.Close();}}private void button3_Click(object sender, EventArgs e){openFileDialog1.ReadOnlyChecked = true;openFileDialog1.Multiselect = true;openFileDialog1.InitialDirectory = @"E:\Programming_test";//指定初始化时打开d盘下的图片文件夹openFileDialog1.CheckFileExists = true;openFileDialog1.CheckPathExists = true;openFileDialog1.FilterIndex = 2;//索引从1开始,所以这里从左到右csv文件对应的FilterIndex是1,txt文件对应的FilterIndex是2openFileDialog1.Filter = "所有文件|*.*";if (openFileDialog1.ShowDialog() == DialogResult.OK){if (openFileDialog1.ReadOnlyChecked)//如果检测到只读文件,那么我们就可以不对文件进行写入操作{}else{string path = openFileDialog1.FileName;using (FileStream fs = new FileStream(path, System.IO.FileMode.Open,System.IO.FileAccess.ReadWrite)){string str = "我是工程师";byte[] bytes = Encoding.UTF8.GetBytes(str);fs.Write(bytes, 0, bytes.Length);}}}}private void openFileDialog1_HelpRequest(object sender, EventArgs e){MessageBox.Show("我是帮助按钮,你可以给我定义更多帮助内容哟!");}}
}

点击打开文件按钮,选择123.txt文件,将里面的内容显示到 textBox文本框里
在这里插入图片描述
也可以在textBox文本框里输入内容,点击 保存按钮将文本框内容保存到.txt文件里;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/91137.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/91137.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Wan2.2开源第1天:动态灯光功能开启创意氛围新境界

在开源软件蓬勃发展的今天,每一次新版本的发布都如同在创意的星空中点亮了一颗璀璨的新星。今天,(通义万相国际版wan)Wan2.2正式开源,它带着令人眼前一亮的动态灯光功能惊艳登场,为所有追求创意与氛围营造的…

Excel制作滑珠图、哑铃图

Excel制作滑珠图、哑铃图效果展示在较长时间周期内,很多参数都是在一定范围内浮动的,并不是一成不变的,为了直观表达各类别的浮动范围,使用“滑珠图”就是一个不错的选择,当滑珠图两侧均有珠子的时候,又称为…

Day07 JDBC+MyBatis

1.JDBC入门程序2.JDBC执行DQL语句3.JDBC预编译SQL 防止SQL注入随便输入用户名,密码为or1 1,sql注入4.Mybatis入门 Mapper 持久层XxxMapper替代Dao4.1调用接口的findAll()方法时自动执行上方的SQL语句,并将SQL查询的语句自动封装到返回值中5.Mybatis辅助…

OSS-服务端签名Web端直传+STS获取临时凭证+POST签名v4版本开发过程中的细节

这里写自定义目录标题配置OSS服务端代码初始化STS Client获取STS临时凭证创建policy计算SigningKeyOSSUtil.javaSTSPolicyDTO.java提供接口Apifox模拟Web端文件直传本文主要结合服务端STS获取临时凭证(签名)直传官方文档对开发中比较容易出错的地方加以提醒;建议主要…

uniapp实现微信小程序导航功能

1.导航按钮<button click"navigation()">导航到仓库</button>2.导航功能const navigation (item) > {let address item.province item.city item.district item.address //地址let latitude Number(item.latitude) …

07.4-使用 use 关键字引入路径

使用 use 关键字引入路径 每次调用函数时都必须写出完整路径&#xff0c;可能会感觉不便且重复。在清单7-7中&#xff0c;无论我们选择绝对路径还是相对路径来调用 add_to_waitlist 函数&#xff0c;每次调用时都必须指定 front_of_house 和 hosting。幸运的是&#xff0c;有一…

7.Linux :进程管理,进程控制与计划任务

Linux &#xff1a;进程管理&#xff0c;进程控制与计划任务 一、进程管理 1. 进程与程序 程序&#xff1a;静态的可执行文件&#xff08;存储于磁盘&#xff09;。进程&#xff1a;动态执行的程序实例&#xff08;占用CPU/内存&#xff09;。 2. 查看进程命令作用常用组合ps静…

Matplotlib(四)- 图表样式美化

文章目录一、Matplotlib图表样式介绍1. 图表样式简介2. 默认图表样式2.1 查看默认配置2.2 常用的配置3. 图表样式修改3.1 局部修改3.1.1 通过绘图方法设置参数修改3.1.2 通过rcParams修改3.1.3 通过rc()方法修改3.2 全局修改二、颜色设置1. 颜色的三种表示方式1.1 颜色单词1.2 …

三十四、【Linux常用工具】rsync+inotify实时同步演示

实时同步演示技术架构全景核心组件详解1. inotify 内核子系统2. Rsync 高效同步工具实践演示一、环境准备与安装1. 检查内核支持2. 安装 inotify-tools二、配置 Rsync 服务端&#xff08;目标机&#xff09;1. 创建 Rsync 配置文件2. 启动 Rsync 守护进程三、配置实时同步脚本&…

windows环境下MySQL 8.0 修改或重置密码

windows环境下MySQL 8.0 修改或重置密码 1打开命令窗口cmd&#xff0c;输入命令&#xff1a;net stop mysql&#xff0c; 停止MySQL服务&#xff0c; 开启跳过密码验证登录的MySQL服务 2输入命令 mysqld --console --skip-grant-tables --shared-memory 再打开一个新的cmd&…

基于YOLOP与GAN的图像修复与防御系统设计与实现

基于YOLOP与GAN的图像修复与防御系统设计与实现 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff0c;觉得好请收藏。点击跳转到网站。 1. 引言 1.1 研究背景 随着深度学习技术在计算机视觉领域的…

将目录文件转移到D盘,使之后的下载缓存数据转移,不再存入c盘

将 C:\Users 文件夹&#xff08;用户文件夹&#xff09;转移到其他盘是一个复杂且风险较高的操作。C:\Users 文件夹包含了系统中每个用户的个人数据和配置文件&#xff0c;修改这个路径可能会导致系统出现问题&#xff0c;包括程序无法正常工作或无法登录。因此&#xff0c; 强…

Cesium大气散射效果

由于做全球体积云效果的需要&#xff0c;再来研究下大气散射效果和体积云类似&#xff0c;关于大气散射颜色计算的过程也仅发生在这两个球体之间。如图所示。计算从相机出发的视线与球壳的交点&#xff0c;如果不相交&#xff0c;则该视线方向上不会发生大气散射&#xff0c;直…

预过滤环境光贴图制作教程:第二步 - 生成环境贴图图集

核心目标 本步骤的核心是生成一张包含 6 级分辨率的环境贴图图集(envAtlas),实现: 将第一步的立方体贴图(sourceCube)重新映射为等矩形投影(适合存储和采样); 生成 6 级不同分辨率的等矩形数据(0 级最高清,5 级最模糊); 用 RGBP 编码压缩 HDR 数据(平衡精度与存…

1. ESP开发之实体按键(KEYPADBUTTON)控制LVGL控件

说明LV_INDEV_TYPE_BUTTON的使用LV_INDEV_TYPE_KEYPAD的使用 说明 本实验使用LVGL版本为v9.2 LVGL中有四种输入设备,如下LV_INDEV_TYPE_POINTER, /**< Touch pad, mouse, external button*/ LV_INDEV_TYPE_KEYPAD, /**< Keypad or keyboard*/ LV_INDEV_TYPE_BUTTON, /*…

C++:STL中list的使用和模拟实现

C中的list是标准模板库&#xff08;STL&#xff09;提供的双向链表容器&#xff0c;支持高效的元素插入和删除操作。在上一篇中讲解了vector的使用和模拟实现&#xff0c;vector是具有连续的空间&#xff0c;迭代器是可以随机的&#xff0c;而list却于vector不同&#xff0c;li…

【编号58-61】我国四大高原矢量示意图shp数据

今天分享的是&#xff1a;中国四大高原&#xff0c;分别是青藏高原、内蒙古高原、黄土高原、云贵高原。青藏高原位置与范围&#xff1a;位于中国西南部&#xff0c;包括西藏、青海的全部&#xff0c;川西高原及滇西北高原等部分地区。它的边界&#xff0c;向东是横断山脉&#…

【AI落地应用实战】利用 Amazon Bedrock Claude3 打造个性化 AI Character 应用

目录一、引言&#xff1a;AI Character应用的市场前景与技术基础二、技术架构设计2.1、整体方案概述2.2、核心组件介绍2.3、部署架构图三、系统部署方案3.1、方案总述3.2、实践流程1️⃣. Bedrock 配置2️⃣. 安装 SillyTavern3️⃣. 配置 SillyTavern 使用 Claude3 模型4️⃣.…

Java常用日志框架介绍

Java提供了很多第三方的日志框架可供使用&#xff0c;按照现在的设计理念&#xff0c;一般把日志框架分成门面(Facade)部分和具体实现(Implementation)部分&#xff0c;门面(Facade)提供了抽象的api规范&#xff0c;实现(Implementation)负责实现api完成具体的日志记录功能。开…

飞书 —— 多维表格 —— AI生成

1.添加关联账号&#xff1a; 2.获取密钥 ARK_API_KEY 进入火山引擎服务页面&#xff1a;https://console.volcengine.com/ark/region:arkcn-beijing/model/detail?Iddeepseek-r1 先进入推理模型 > 快捷API接入 再去在线推理中创建推理接入点 点击新创建好的接入点的API调…