轉載:
http://www.cnblogs.com/my-blog/archive/2008/12/10/1351612.html
OpenFileDialog And SaveFileDialog
除了PrintPreviewDialog外,其他對話框類都派生於抽象基類CommonDialog,這個基類的方法可以管理Windows通用對話框。
對話框適用的場合:
1.要讓用戶選擇和瀏覽要打開的文件,應使用OpenFileDialog。這個對話框可以配置爲只允許選擇一個文件,或可以選擇多個文件。
2.使用SaveFileDialog,用戶可以爲要保存的文件指定一個文件名和瀏覽的路徑。
3.PrintDialog用戶選擇一個打印機,並設置打印選項。
4.配置頁面的邊距,通常使用PageSetupDialog。
5.PrintViewDialog是在屏幕上進行打印預覽的一種方法,並有一些選項如縮放。
6.FontDialog列出了所有已安裝的Windows字體、樣式和字號,以及各字體的預覽效果,以便選擇字體。
7.ColorDialog用於選擇顏色。
文件對話框:
l OpenFileDialog:打開文件對話框
l SaveFileDialog:保存文件對話框
打開文件對話框
OpenFileDialog ofd = new OpenFileDialog();
ofd.ShowDialog();
會彈出一個打開文件的對話框。
通過修改對象的Title屬性,可以更改對話框的標題
現在顯示的是“打開”,做如下設置
ofd.Title = "設置後標題文字:)";
再次運行程序,我們就會看到相應的修改
我們還可以通過設置
InitialDirectory屬性來使打開文件對話框打開時在一個設置好的默認路徑上。它的默認值是一個空字符串,表示用戶的“我的文檔”目錄,第一次在應用程序中使用這個對話框時,就顯示“我的文檔”目錄下的文件,第二次再打開對話框時,顯示的目錄就與上一次打開的文件所在的目錄相同。在實際使用的時候,不要寫死一個路徑,如果用戶不存在這個路徑會出現錯誤。爲了獲取特定的系統文件夾,可以使用System.Environment類的靜態方法GetFolderPath()。該方法接受一個Environment.SpecialFolder枚舉,其中可以定義要返回路徑的哪個系統目錄。
ofd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Templates);
設置文件過濾器用於打開文件對話框中顯示特定類型的文件。
ofd.Filter = "Text Document(*.txt)|*.txt|All Files|*.*|我要顯示的文件類型(*.exe)|*.exe";
設置錯誤的Filter值會產生一個運行異常
System.ArgumentException和錯誤信息“The provided filter string is invalid”。過濾器前後也不允許有空格。FilterIndex屬性指定列表框中的默認選項。
設置文件有效性驗證ValidateNames,驗證用戶輸入是否是一個有效的Windows文件名。
CheckPathExists:驗證路徑有效性
CheckFileExists:驗證文件有效性
ofd.ValidateNames = true;
ofd.CheckPathExists = true;
ofd.CheckFileExists = true;
自定義幫助信息:
設置對象的ShowHelp屬性可以出現一個幫助按鈕,自定義幫助信息。
通過HelpRequest事件添加一個處理程序。
ofd.ShowHelp = true;
ofd.HelpRequest += new EventHandler(ofd_HelpRequest);
private void ofd_HelpRequest(object sender, EventArgs e)
{
MessageBox.Show("我自己定義的幫助信息:)");
}
單擊幫助按鈕就會顯示我定義的幫助信息。
設置
Multiselect屬性可以使打開文件對話框打開多個文件。通過如下判斷可以得到打開文件對話框單擊的是哪個按鈕。
if(ofd.ShowDialog() == DialogResult.OK)
{
}
保存文件對話框:
使用Title屬性設置對話框的標題。
文件擴展名:
AddExtension是一個布爾屬性,它定義了文件擴展名是否應自動添加到用戶輸入的文件名上。如果用戶已經輸入了一個文件擴展名,就不會添加其它擴展名了。所以如果用戶輸入了文件名test,就保存文件test.txt,如果輸入了test.txt,保存的文件仍是test.txt,而不是test.txt.txt。
如果用戶沒有輸入文件擴展名,就使用DefaultExt屬性設置的文件擴展名。如果這個屬性爲空,就使用當前選擇的Filter中定義的文件擴展名。如果設置了Filter和DefaultExt,則不論Filter是什麼,都使用Default。
同OpenFileDialog一樣,具有ValidateNames、CheckFileExists和CheckPathExists三個屬性,區別是對於SaveFileDialog,CheckFileExists的默認值是false,表示可以提供新文件名,進行保存。
如果設置CreatePrompt屬性爲true,就會詢問用戶是否要創建一個新文件。
如果設置OverwritePrompt屬性爲true,就會詢問用戶是否要覆蓋一個已有的文件。
進行如下定義一個保存文件對話框後,我們通過如下功能可以實現一個另存爲的功能:
SaveFileDialog sfd = new SaveFileDialog();
private void miFileSaveAs_Click(object sender, EventArgs e)
{
if(sfd.ShowDialog() == DialogResult.OK)
{
string fileName = sfd.FileName;
SaveFile(fileName);
}
}
protected void SaveFile(string fileName)
{
try
{
Stream stream = File.OpenWrite(fileName);
using(StreamWriter writer = new StreamWriter(stream))
{
writer.Write(textBox1.Text);
}
}
catch(IOException ex)
{
MessageBox.Show(ex.Message,"Simple Editor",MessageBoxButtons.OK,MessageBoxIcon.Exclamation);
}
}