VS.net 出來也很久了,感覺還可以。早一陣子,朋友讓我幫他寫兩個打印程序,當中用了不少的對話,在查資料的時候看到國 外有一篇專門的文章介紹對話框的,就決定寫這篇文章,讓大家都有個好的起點。同時還著重介紹了打印那一部份,大家可以仔細研究一下,都說了很多了。現 在我們開發吧!
對話框中我們常用了以下幾種:
1、文件對話框(FileDialog) 它又常用到兩個:
打開文件對話框(OpenFileDialog)
保存文件對話(SaveFileDialog)
2、字體對話框(FontDialog)
3、顏色對話框(ColorDialog)
4、打印預瀏對話框(PrintPreviewDialog)
5、頁面設置(PrintDialog)
6、打印對話框(PrintDialog)
還有更多,有時間的網友可以看看MSDN。下面我們一個個來介紹。在介紹的過程中我用到了一個自己開發的類:File,主要是文件操作的。
文件對話框(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的效果如下:
可以用以下代碼來實現上面這個對話框:
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的效果如下:
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;
namespace dialog
public string ReadFile()
public void WriteFile(string str)
|
字體對話框(FontDialog)
在文字處理中,我們常用到字體,現在我們來做一個最常見的字體對話框。
一、 字體對話框(FontDialog)常用屬性
ShowColor | 控制是否顯示顏色選項 |
AllowScriptChange | 是否顯示字體的字符集 |
Font | 在對話框顯示的字體 |
AllowVerticalFonts | 是否可選擇垂直字體 |
Color | 在對話框中選擇的顏色 |
FontMustExist | 當字體不存在時是否顯示錯誤 |
MaxSize | 可選擇的最大字號 |
MinSize | 可選擇的最小字號 |
ScriptsOnly | 顯示排除OEM和Symbol字體 |
ShowApply | 是否顯示"應用"按鈕 |
ShowEffects | 是否顯示下劃線、刪除線、字體顏色選項 |
ShowHelp | 是否顯示"幫助"按鈕 |
二、 字體對話框(FontDialog)的事件
Apply | 當點擊"應用"按鈕時要處理的事件 |
HelpRequest | 當點擊"幫助"按鈕時要處理的事件 |
三、 字體對話框(FontDialog)的效果
四、 實現代碼
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)的效果如下:
三、 實現代碼見下:
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)常見屬性
AllowMargins | 設置是否可以對邊距的編輯 |
AllowOrientation | 是否可以使用"方向"單選框 |
AllowPaper | 設置是否可以對紙張大小的編輯 |
AllowPrinter | 設置是否可以使用"打印機"按鈕 |
Document | 獲取打印機設置的PrintDocument |
MinMargins | 允許用戶選擇的最小邊距 |
二、面設置(PageSetupDialog)的效果如下
就這么簡單啦,我們看看下面的吧,還有更重磅的東東呢?關于打印的。
打印預瀏及打印
打印是我們在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<linesperpage> {<br>yPos=topMargin+(count*fnt.GetHeight(e.Graphics));<br>e.Graphics.DrawString(line,fnt,b,leftMargin,yPos,new StringFormat());<br>count++;<br>}<br>file://如果該頁打印完成而line不為空說明還有沒完成的頁面,發出下一次的打印事件,<br>file://在下一次的打印中lineReader會自動讀取上次沒有打印完的內容。lineReader可以記錄當前讀取的位置<br>if(line!=null)<br>e.HasMorePages=true;<br>else<br>e.HasMorePages=false;<br>}</linesperpage> |
在這里可以完成整個打印任務。把printDocument_PrintPage構造好后,就可以打印和打印預瀏。
二、打印預瀏對話框(PrintPreviewDialog)
打印預瀏控件是用來顯示一個打印文檔在打印后的效果。在打印預瀏對話框中包含有,打印、縮放、單頁或多頁、關閉等按鈕。對話框如下:
打印預瀏對話框沒有太多的屬性,最后通過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、效果如下:
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)、保存文件對話(SaveFi leDialog)這兩個對話框。有了上述基礎,大家可以很容易的寫出一個簡單的記事本。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
