-
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文件里;