【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
英文地址,請注明出處:http://en.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調…