天天看點

C# 檔案對話框

   對話框中我們常用了以下幾種:

  1、檔案對話框(FileDialog) 它又常用到兩個:

   打開檔案對話框(OpenFileDialog)

   儲存檔案對話(SaveFileDialog)

  2、字型對話框(FontDialog)

  3、顔色對話框(ColorDialog)

  4、列印預浏對話框(PrintPreviewDialog)

  5、頁面設定(PrintDialog)

  6、列印對話框(PrintDialog)

  還有更多,有時間的網友可以看看MSDN。下面我們一個個來介紹。

  檔案對話框(FileDialog)

  一、打開檔案對話框(OpenFileDialog)

  1、 OpenFileDialog控件有以下基本屬性

InitialDirectory 對話框的初始目錄
Filter 要在對話框中顯示的檔案篩選器,例如,"文本檔案(*.txt)|*.txt|所有檔案(*.*)||*.*"
FilterIndex 在對話框中選擇的檔案篩選器的索引,如果選第一項就設為1
RestoreDirectory 控制對話框在關閉之前是否恢複目前目錄
FileName 第一個在對話框中顯示的檔案或最後一個選取的檔案
Title 将顯示在對話框标題欄中的字元
AddExtension 是否自動添加預設擴充名
CheckPathExists 在對話框傳回之前,檢查指定路徑是否存在
DefaultExt 預設擴充名
DereferenceLinks 在從對話框傳回前是否取消引用快捷方式
ShowHelp 啟用"幫助"按鈕
ValiDateNames 控制對話框檢查檔案名中是否不含有無效的字元或序列

  2、 OpenFileDialog控件有以下常用事件

FileOk 當使用者點選"打開"或"儲存"按鈕時要處理的事件
HelpRequest 當使用者點選"幫助"按鈕時要處理的事件

  3、OpenFileDialog的效果如下:

C# 檔案對話框

  可以用以下代碼來實作上面這個對話框:

private void openFileDialogBTN_Click(object sender, System.EventArgs e){

OpenFileDialog openFileDialog=new OpenFileDialog();

openFileDialog.InitialDirectory="c:\\";//注意這裡寫路徑時要用c:\\而不是c:\

openFileDialog.Filter="文本檔案|*.*|C#檔案|*.cs|所有檔案|*.*";

openFileDialog.RestoreDirectory=true;

openFileDialog.FilterIndex=1;

if (openFileDialog.ShowDialog()==DialogResult.OK)

{

fName=openFileDialog.FileName;

File fileOpen=new File(fName);

isFileHaveName=true;

richTextBox1.Text=fileOpen.ReadFile();

richTextBox1.AppendText("");

}

}

  其中有用到了File()這個類,是我在程式用來執行檔案操作,自己寫的,在最後附了這個類的源碼。有興趣的網友可以自己分析。

  二、儲存檔案對話框(SaveFileDialog)

  儲存檔案對話框控件有兩種情況,一就是儲存,二就是另存為,儲存很簡單,就是在檔案已經打開的情況下的,再把檔案寫一篇,在這裡我們主要講另存為的情況(SaveAs)。

  1,SaveFileDialog控件的屬性

Filter 要在對話框中顯示的檔案篩選器,例如,"文本檔案(*.txt)|*.txt|所有檔案(*.*)|*.*"
FilterIndex 在對話框中選擇的檔案篩選器的索引,如果選第一項就設為1
RestoreDirectory 控制對話框在關閉之前是否恢複目前目錄
AddExtension 是否自動添加預設擴充名
CheckFileExists
CheckPathExists 在對話框傳回之前,檢查指定路徑是否存在
Container 控制在将要建立檔案時,是否提示使用者。隻有在ValidateNames為真值時,才适用。
DefaultExt 預設擴充名
DereferenceLinks 在從對話框傳回前是否取消引用快捷方式
FileName 第一個在對話框中顯示的檔案或最後一個選取的檔案
InitialDirector 對話框的初始目錄
OverwritePrompt 控制在将要在改寫現在檔案時是否提示使用者,隻有在ValidateNames為真值時,才适用
ShowHelp 啟用"幫助"按鈕
Title 将顯示在對話框标題欄中的字元
ValidateNames 控制對話框檢查檔案名中是否不含有無效的字元或序列

  2、SaveFileDialog事件如下:

FileOk 當使用者點選"打開"或"儲存"按鈕時要處理的事件
HelpRequest 當使用者點選"幫助"按鈕時要處理的事件

  3、SaveFileDialog的效果如下:

C# 檔案對話框

  4、用下例代碼可以實作

private void saveAsDialogBTN_Click(object sender, System.EventArgs e)

{

SaveFileDialog saveFileDialog=new SaveFileDialog();

saveFileDialog.Filter="文本檔案|*.*|C#檔案|*.cs|所有檔案|*.*";

saveFileDialog.FilterIndex=2;

saveFileDialog.RestoreDirectory=true;

if(saveFileDialog.ShowDialog()==DialogResult.OK)

{

if(saveFileDialog.ShowDialog()==DialogResult.OK)

{

fName=saveFileDialog.FileName;

File fSaveAs=new File(fName);

isFileHaveName=true; file://儲存的檔案有名字

fSaveAs.WriteFile(richTextBox1.Text);

}

}

}

  其實這些都可以在VS.NET的IDE環境中直接完成,為了說明問題,我還是一條條列也來了。當中用到了一個File的類庫,下面是源程式:

  File.cs

using System;

using System.IO;

using System.Windows.Forms;

using System.Text;

namespace dialog

{

///

/// Summary description for File.

///

public class File

{

string fileName;

public File(string fileName)

{

this.fileName=fileName;

}

public string ReadFile()

{

try

{

StreamReader sr=new StreamReader(fileName,Encoding.Default);

string result=sr.ReadToEnd();

sr.Close();

return result;

}

catch(Exception e){MessageBox.Show(e.Message);}

return null;

}

public void WriteFile(string str)

{

try

{

StreamWriter sw=new StreamWriter(fileName,false,Encoding.Default);

sw.Write(str);

sw.Close();

}

catch(Exception e){MessageBox.Show(e.Message,"儲存檔案出錯!");}

}

}

}

字型對話框(FontDialog)

  在文字進行中,我們常用到字型,現在我們來做一個最常見的字型對話框。

   一、 字型對話框(FontDialog)常用屬性

ShowColor 控制是否顯示顔色選項
AllowScriptChange 是否顯示字型的字元集
Font 在對話框顯示的字型
AllowVerticalFonts 是否可選擇垂直字型
Color 在對話框中選擇的顔色
FontMustExist 當字型不存在時是否顯示錯誤
MaxSize 可選擇的最大字号
MinSize 可選擇的最小字号
ScriptsOnly 顯示排除OEM和Symbol字型
ShowApply 是否顯示"應用"按鈕
ShowEffects 是否顯示下劃線、删除線、字型顔色選項
ShowHelp 是否顯示"幫助"按鈕

  二、 字型對話框(FontDialog)的事件

Apply 當點選"應用"按鈕時要處理的事件
HelpRequest 當點選"幫助"按鈕時要處理的事件

  三、 字型對話框(FontDialog)的效果

C# 檔案對話框

  四、 實作代碼

private void fontDialogBTN_Click(object sender, System.EventArgs e)

{

FontDialog fontDialog=new FontDialog();

fontDialog.Color=richTextBox1.ForeColor;

fontDialog.AllowScriptChange=true;

fontDialog.ShowColor=true;

if(fontDialog.ShowDialog()!=DialogResult.Cancel)

{

richTextBox1.SelectionFont=fontDialog.Font;//将目前標明的文字改變字型

}

}

  上面代碼将標明的文本設定為目前FontDialog對話框中的字型。

  顔色對話框(ColorDialog)

  顔色拾取框也是我們常見的對話框之一,下面我們來看看在C#中是如何操作顔色對話框的呢?

  一、 顔色對話框(ColorDialog)的常見屬性

AllowFullOpen 禁止和啟用"自定義顔色"按鈕
FullOpen 是否最先顯示對話框的"自定義顔色"部份
ShowHelp 是否顯示"幫助"按鈕
Color 在對話框中顯示的顔色
AnyColor 顯示可選擇任何顔色
CustomColors 是否顯示自定義顔色
SolidColorOnly 是否隻能選擇純色

  二、 顔色對話框(ColorDialog)的效果如下:

C# 檔案對話框

  三、 實作代碼見下:

private void colorDialogBTN_Click(object sender, System.EventArgs e)

{

ColorDialog colorDialog=new ColorDialog();

colorDialog.AllowFullOpen=true;

colorDialog.FullOpen=true;

colorDialog.ShowHelp=true;

colorDialog.Color=Color.Black;//初始化目前文本框中的字型顔色,當使用者在ColorDialog對話框中點選"取消"按鈕

file://恢複原來的值

colorDialog.ShowDialog();

richTextBox1.SelectionColor=colorDialog.Color;

}

  實作顔色對話框(ColorDialog)很容易吧,其實不隻是顔色對話框,C#也是很容易的,隻要用心去學,都容易的。講完了顔色對話框(ColorDialog),我們來講列印和頁面設定.

  頁面設定(PageSetupDialog)

  其實頁面設定(PageSetupDialog)沒有太多的講,既然講到這裡,我還是把PageSetupDialog中常用的屬性列出來吧

  一、頁面設定(PageSetupDialog)常見屬性

AllowMargins 設定是否可以對邊距的編輯
AllowOrientation 是否可以使用"方向"單選框
AllowPaper 設定是否可以對紙張大小的編輯
AllowPrinter 設定是否可以使用"列印機"按鈕
Document 擷取列印機設定的PrintDocument
MinMargins 允許使用者選擇的最小邊距

  二、面設定(PageSetupDialog)的效果如下

C# 檔案對話框

  就這麼簡單啦,我們看看下面的吧,還有更重磅的東東呢?關于列印的。

  列印預浏及列印

  列印是我們在windows程式設計中常要用到的功能,在以前都是很麻煩工作,但在Microsoft .net Framework中列印是以元件提供給我們使用,不過還是點麻煩的,是以就專門寫出來,供大家參改。

  一, 在.net環境中,說到列印,就不能不說PrintDocumet這個類,PrintDocument屬于System.Drawing.Printing這個名字空間,PrintDocument這個類是實作列印的核心代碼。

  如果要實作列印,就必需首先構造PrintDocument對象添加列印事件,

printDocument.PrintPage+=new PrintPageEventHandler(this.printDocument_PrintPage)

列印其實也是調用Graphics類的方法進行畫圖,下面這代碼是根據MSDN上提供的例程改寫的。MSDN列印例程位址:

  http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemDrawingPrintingPrintDocumentClassTopic.asp ,有興趣的網友可以參改一下。

  下面是我改寫的printDocument_PrintPage:

private void printDocument_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)

{

float linesPerPage=0;//頁面的行号

float yPos=0;//列印字元串的縱向位置

int count=0;//行計數器

float leftMargin =e.MarginBounds.Left;//左邊距

float topMargin=e.MarginBounds.Top;//上邊距

string line=null;//行字元串

Color clr=richTextBox1.SelectionColor;//目前的列印顔色,在我這個程式沒有實作不同顔色列印

SolidBrush b =new SolidBrush(clr);//刷子

fnt=richTextBox1.SelectionFont;//目前的列印字型

linesPerPage=e.MarginBounds.Height/fnt.GetHeight(e.Graphics);//每頁可列印的行數

file://逐行循行列印一頁

while(count {

yPos=topMargin+(count*fnt.GetHeight(e.Graphics));

e.Graphics.DrawString(line,fnt,b,leftMargin,yPos,new StringFormat());

count++;

}

file://如果該頁列印完成而line不為空說明還有沒完成的頁面,發出下一次的列印事件,

file://在下一次的列印中lineReader會自動讀取上次沒有列印完的内容。lineReader可以記錄目前讀取的位置

if(line!=null)

e.HasMorePages=true;

else

e.HasMorePages=false;

}

  在這裡可以完成整個列印任務。把printDocument_PrintPage構造好後,就可以列印和列印預浏。

  二、列印預浏對話框(PrintPreviewDialog)

  列印預浏控件是用來顯示一個列印文檔在列印後的效果。在列印預浏對話框中包含有,列印、縮放、單頁或多頁、關閉等按鈕。對話框如下:

C# 檔案對話框

  列印預浏對話框沒有太多的屬性,最後通過ShowDialog()調用。上面的實作代碼如下:

private void printPreviewBTN_Click(object sender, System.EventArgs e)

{

lineReader = new StringReader(richTextBox1.Text);

try

{

PrintPreviewDialog printPreviewDialog1=new PrintPreviewDialog();

printPreviewDialog1.Document=printDocument;

printPreviewDialog1.FormBorderStyle=FormBorderStyle.Fixed3D;

printPreviewDialog1.ShowDialog(this);

}

catch(Exception excep)

{

MessageBox.Show(excep.Message, "列印出錯", MessageBoxButtons.OK, MessageBoxIcon.Error);

return;

}

}

  很簡單的,隻要你把PrintDocument_PrintPage()寫好了,這裡就很容易了。

  三、列印對話框(PrintDialog)

  1、列印對話框(PrintDialog)隻要有以下屬性:

AllowPrintToFile 禁止或使用"列印到檔案"複選框
AllowSelection 禁止或使用"標明内容"單選框
AllowSomePages 禁止或使用"頁"單選按鈕
Document 從中擷取列印機設定的PrintDocument
PrintToFile 列印到檔案"複選框是否選中
ShowHelp 控制是否顯示"幫助"按鈕
ShowNetWork 控制是否顯示"網絡"按鈕

  2、效果如下:

C# 檔案對話框

  3、用如下代碼來實作:

private void printDialogBTN_Click(object sender, System.EventArgs e)

{

PrintDialog printDialog=new PrintDialog();

printDialog.Document=printDocument;

if(printDialog.ShowDialog()!=DialogResult.Cancel)

{

try

{

printDocument.Print();

}

catch(Exception ex)

{

MessageBox.Show(ex.Message);

}

}

}

  到此,所有的對話框都講完了,頭都大了吧。

  上述對話框,完全可以在vs.net的IDE環境中完成 ,這時為了說明問題,才分開一步步來講。

  總結

  在我們的教程,共講述了檔案對話框(FileDialog)、字型對話框(FontDialog)、,顔色對話框(ColorDialog)、列印預浏對話框(PrintPreviewDialog)、頁面設定(PrintDialog)、列印對話框(PrintDialog),這幾個對話框,其中檔案對話框(FileDialog)又有:打開檔案對話框(OpenFileDialog)、儲存檔案對話(SaveFileDialog)這兩個對話框。有了上述基礎,大家可以很容易的寫出一個簡單的記事本。

繼續閱讀