VS.net 出來也很久了,感覺還可以。早一陣子,朋友讓我?guī)退麑憙蓚€打印程序,當(dāng)中用了不少的對話,在查資料的時候看到國 外有一篇專門的文章介紹對話框的,就決定寫這篇文章,讓大家都有個好的起點。同時還著重介紹了打印那一部份,大家可以仔細研究一下,都說了很多了。現(xiàn) 在我們開發(fā)吧!
對話框中我們常用了以下幾種:
1、文件對話框(FileDialog) 它又常用到兩個:
打開文件對話框(OpenFileDialog)
保存文件對話(SaveFileDialog)
2、字體對話框(FontDialog)
3、顏色對話框(ColorDialog)
4、打印預(yù)瀏對話框(PrintPreviewDialog)
5、頁面設(shè)置(PrintDialog)
6、打印對話框(PrintDialog)
還有更多,有時間的網(wǎng)友可以看看MSDN。下面我們一個個來介紹。在介紹的過程中我用到了一個自己開發(fā)的類:File,主要是文件操作的。
文件對話框(FileDialog)
一、打開文件對話框(OpenFileDialog)
1、 OpenFileDialog控件有以下基本屬性
InitialDirectory | 對話框的初始目錄 |
Filter | 要在對話框中顯示的文件篩選器,例如,"文本文件(*.txt)|*.txt|所有文件(*.*)||*.*" |
FilterIndex | 在對話框中選擇的文件篩選器的索引,如果選第一項就設(shè)為1 |
RestoreDirectory | 控制對話框在關(guān)閉之前是否恢復(fù)當(dāng)前目錄 |
FileName | 第一個在對話框中顯示的文件或最后一個選取的文件 |
Title | 將顯示在對話框標(biāo)題欄中的字符 |
AddExtension | 是否自動添加默認擴展名 |
CheckPathExists |
在對話框返回之前,檢查指定路徑是否存在 |
DefaultExt | 默認擴展名 |
DereferenceLinks | 在從對話框返回前是否取消引用快捷方式 |
ShowHelp |
啟用"幫助"按鈕 |
ValiDateNames | 控制對話框檢查文件名中是否不含有無效的字符或序列 |
2、 OpenFileDialog控件有以下常用事件
FileOk | 當(dāng)用戶點擊"打開"或"保存"按鈕時要處理的事件 |
HelpRequest | 當(dāng)用戶點擊"幫助"按鈕時要處理的事件 |
3、OpenFileDialog的效果如下:
可以用以下代碼來實現(xiàn)上面這個對話框:
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()這個類,是我在程序用來執(zhí)行文件操作,自己寫的,在最后附了這個類的源碼。有興趣的網(wǎng)友可以自己分析。
二、保存文件對話框(SaveFileDialog)
保存文件對話框控件有兩種情況,一就是保存,二就是另存為,保存很簡單,就是在文件已經(jīng)打開的情況下的,再把文件寫一篇,在這里我們主要講另存為 的情況(SaveAs)。
1,SaveFileDialog控件的屬性
Filter | 要在對話框中顯示的文件篩選器,例如,"文本文件(*.txt)|*.txt|所有文件(*.*)|*.*" |
FilterIndex | 在對話框中選擇的文件篩選器的索引,如果選第一項就設(shè)為1 |
RestoreDirectory | 控制對話框在關(guān)閉之前是否恢復(fù)當(dāng)前目錄 |
AddExtension | 是否自動添加默認擴展名 |
CheckFileExists | |
CheckPathExists |
在對話框返回之前,檢查指定路徑是否存在 |
Container | 控制在將要創(chuàng)建文件時,是否提示用戶。只有在ValidateNames為真值時,才適用。 |
DefaultExt | 缺省擴展名 |
DereferenceLinks |
在從對話框返回前是否取消引用快捷方式 |
FileName | 第一個在對話框中顯示的文件或最后一個選取的文件 |
InitialDirector | 對話框的初始目錄 |
OverwritePrompt | 控制在將要在改寫現(xiàn)在文件時是否提示用戶,只有在ValidateNames為真值時,才適用 |
ShowHelp | 啟用"幫助"按鈕 |
Title | 將顯示在對話框標(biāo)題欄中的字符 |
ValidateNames | 控制對話框檢查文件名中是否不含有無效的字符或序列 |
2、SaveFileDialog事件如下:
FileOk | 當(dāng)用戶點擊"打開"或"保存"按鈕時要處理的事件 |
HelpRequest | 當(dāng)用戶點擊"幫助"按鈕時要處理的事件 |
3、SaveFileDialog的效果如下:
4、用下例代碼可以實現(xiàn)
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環(huán)境中直接完成,為了說明問題,我還是一條條列也來了。當(dāng)中用到了一個File的類庫,下面是源程序:
File.cs
using System;
namespace dialog
public string ReadFile()
public void WriteFile(string str)
|
字體對話框(FontDialog)
在文字處理中,我們常用到字體,現(xiàn)在我們來做一個最常見的字體對話框。
一、 字體對話框(FontDialog)常用屬性
ShowColor | 控制是否顯示顏色選項 |
AllowScriptChange | 是否顯示字體的字符集 |
Font | 在對話框顯示的字體 |
AllowVerticalFonts | 是否可選擇垂直字體 |
Color | 在對話框中選擇的顏色 |
FontMustExist | 當(dāng)字體不存在時是否顯示錯誤 |
MaxSize | 可選擇的最大字號 |
MinSize | 可選擇的最小字號 |
ScriptsOnly | 顯示排除OEM和Symbol字體 |
ShowApply | 是否顯示"應(yīng)用"按鈕 |
ShowEffects | 是否顯示下劃線、刪除線、字體顏色選項 |
ShowHelp | 是否顯示"幫助"按鈕 |
二、 字體對話框(FontDialog)的事件
Apply | 當(dāng)點擊"應(yīng)用"按鈕時要處理的事件 |
HelpRequest | 當(dāng)點擊"幫助"按鈕時要處理的事件 |
三、 字體對話框(FontDialog)的效果
四、 實現(xiàn)代碼
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;//將當(dāng)前選定的文字改變字體 } } |
上面代碼將選定的文本設(shè)置為當(dāng)前FontDialog對話框中的字體。
顏色對話框(ColorDialog)
顏色拾取框也是我們常見的對話框之一,下面我們來看看在C#中是如何操作顏色對話框的呢?
一、 顏色對話框(ColorDialog)的常見屬性
AllowFullOpen | 禁止和啟用"自定義顏色"按鈕 |
FullOpen | 是否最先顯示對話框的"自定義顏色"部份 |
ShowHelp | 是否顯示"幫助"按鈕 |
Color | 在對話框中顯示的顏色 |
AnyColor | 顯示可選擇任何顏色 |
CustomColors | 是否顯示自定義顏色 |
SolidColorOnly | 是否只能選擇純色 |
二、 顏色對話框(ColorDialog)的效果如下:
三、 實現(xiàn)代碼見下:
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;//初始化當(dāng)前文本框中的字體顏色,當(dāng)用戶在ColorDialog對話框中點擊"取消"按鈕 file://恢復(fù)原來的值 colorDialog.ShowDialog(); richTextBox1.SelectionColor=colorDialog.Color; } |
實現(xiàn)顏色對話框(ColorDialog)很容易吧,其實不只是顏色對話框,C#也是很容易的,只要用心去學(xué),都容易的。講完了顏色對話框(ColorDialog),我們 來講打印和頁面設(shè)置.
其實頁面設(shè)置(PageSetupDialog)沒有太多的講,既然講到這里,我還是把PageSetupDialog中常用的屬性列出來吧
一、頁面設(shè)置(PageSetupDialog)常見屬性
AllowMargins | 設(shè)置是否可以對邊距的編輯 |
AllowOrientation | 是否可以使用"方向"單選框 |
AllowPaper | 設(shè)置是否可以對紙張大小的編輯 |
AllowPrinter | 設(shè)置是否可以使用"打印機"按鈕 |
Document | 獲取打印機設(shè)置的PrintDocument |
MinMargins | 允許用戶選擇的最小邊距 |
二、面設(shè)置(PageSetupDialog)的效果如下
就這么簡單啦,我們看看下面的吧,還有更重磅的東東呢?關(guān)于打印的。
打印預(yù)瀏及打印
打印是我們在windows編程中常要用到的功能,在以前都是很麻煩工作,但在Microsoft .net Framework中打印是以組件提供給我們使用,不過還是點麻煩的,所以就專門寫出來,供大家參改。
一, 在.net環(huán)境中,說到打印,就不能不說PrintDocumet這個類,PrintDocument屬于System.Drawing.Printing這個名字空間,PrintDocument這個類是 實現(xiàn)打印的核心代碼。
如果要實現(xiàn)打印,就必需首先構(gòu)造PrintDocument對象添加打印事件,
printDocument.PrintPage+=new PrintPageEventHandler(this.printDocument_PrintPage)
打印其實也是調(diào)用Graphics類的方法進行畫圖,下面這代碼是根據(jù)MSDN上提供的例程改寫的。MSDN打印例程地址:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemDrawingPrintingPrintDocumentClassTopic.asp ,有興趣的網(wǎng)友可以參改一下。
下面是我改寫的printDocument_PrintPage:
private void printDocument_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{ float linesPerPage=0;//頁面的行號 float yPos=0;//打印字符串的縱向位置 int count=0;//行計數(shù)器 float leftMargin =e.MarginBounds.Left;//左邊距 float topMargin=e.MarginBounds.Top;//上邊距 string line=null;//行字符串 Color clr=richTextBox1.SelectionColor;//當(dāng)前的打印顏色,在我這個程序沒有實現(xiàn)不同顏色打印 SolidBrush b =new SolidBrush(clr);//刷子 fnt=richTextBox1.SelectionFont;//當(dāng)前的打印字體 linesPerPage=e.MarginBounds.Height/fnt.GetHeight(e.Graphics);//每頁可打印的行數(shù) 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不為空說明還有沒完成的頁面,發(fā)出下一次的打印事件,<br>file://在下一次的打印中l(wèi)ineReader會自動讀取上次沒有打印完的內(nèi)容。lineReader可以記錄當(dāng)前讀取的位置<br>if(line!=null)<br>e.HasMorePages=true;<br>else<br>e.HasMorePages=false;<br>}</linesperpage> |
在這里可以完成整個打印任務(wù)。把printDocument_PrintPage構(gòu)造好后,就可以打印和打印預(yù)瀏。
二、打印預(yù)瀏對話框(PrintPreviewDialog)
打印預(yù)瀏控件是用來顯示一個打印文檔在打印后的效果。在打印預(yù)瀏對話框中包含有,打印、縮放、單頁或多頁、關(guān)閉等按鈕。對話框如下:
打印預(yù)瀏對話框沒有太多的屬性,最后通過ShowDialog()調(diào)用。上面的實現(xiàn)代碼如下:
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 | 禁止或使用"打印到文件"復(fù)選框 |
AllowSelection | 禁止或使用"選定內(nèi)容"單選框 |
AllowSomePages | 禁止或使用"頁"單選按鈕 |
Document | 從中獲取打印機設(shè)置的PrintDocument |
PrintToFile | 打印到文件"復(fù)選框是否選中 |
ShowHelp | 控制是否顯示"幫助"按鈕 |
ShowNetWork | 控制是否顯示"網(wǎng)絡(luò)"按鈕 |
2、效果如下:
3、用如下代碼來實現(xiàn):
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環(huán)境中完成 ,這時為了說明問題,才分開一步步來講。
總結(jié)
在我們的教程,共講述了文件對話框(FileDialog)、字體對話框(FontDialog)、,顏色對話框(ColorDialog)、打印預(yù)瀏對話框(PrintPreviewDialog)、頁面 設(shè)置(PrintDialog)、打印對話框(PrintDialog),這幾個對話框,其中文件對話框(FileDialog)又有:打開文件對話框(OpenFileDialog)、保存文件對話(SaveFi leDialog)這兩個對話框。有了上述基礎(chǔ),大家可以很容易的寫出一個簡單的記事本。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

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