C#对话框全接触
對(duì)話框中我們常用了以下幾種:
1、文件對(duì)話框(FileDialog) 它又常用到兩個(gè):
打開文件對(duì)話框(OpenFileDialog)
保存文件對(duì)話(SaveFileDialog)
2、字體對(duì)話框(FontDialog)
3、顏色對(duì)話框(ColorDialog)
4、打印預(yù)瀏對(duì)話框(PrintPreviewDialog)
5、頁(yè)面設(shè)置(PrintDialog)
6、打印對(duì)話框(PrintDialog)
還有更多,有時(shí)間的網(wǎng)友可以看看MSDN。下面我們一個(gè)個(gè)來介紹。在介紹的過程中我用到了一個(gè)自己開發(fā)的類:File,主要是文件操作的。
文件對(duì)話框(FileDialog)
一、打開文件對(duì)話框(OpenFileDialog)
1、 OpenFileDialog控件有以下基本屬性
| InitialDirectory | 對(duì)話框的初始目錄 |
| Filter | 要在對(duì)話框中顯示的文件篩選器,例如,"文本文件(*.txt)|*.txt|所有文件(*.*)||*.*" |
| FilterIndex | 在對(duì)話框中選擇的文件篩選器的索引,如果選第一項(xiàng)就設(shè)為1 |
| RestoreDirectory | 控制對(duì)話框在關(guān)閉之前是否恢復(fù)當(dāng)前目錄 |
| FileName | 第一個(gè)在對(duì)話框中顯示的文件或最后一個(gè)選取的文件 |
| Title | 將顯示在對(duì)話框標(biāo)題欄中的字符 |
| AddExtension | 是否自動(dòng)添加默認(rèn)擴(kuò)展名 |
| CheckPathExists | 在對(duì)話框返回之前,檢查指定路徑是否存在 |
| DefaultExt | 默認(rèn)擴(kuò)展名 |
| DereferenceLinks | 在從對(duì)話框返回前是否取消引用快捷方式 |
| ShowHelp | 啟用"幫助"按鈕 |
| ValiDateNames | 控制對(duì)話框檢查文件名中是否不含有無(wú)效的字符或序列 |
2、 OpenFileDialog控件有以下常用事件
| FileOk | 當(dāng)用戶點(diǎn)擊"打開"或"保存"按鈕時(shí)要處理的事件 |
| HelpRequest | 當(dāng)用戶點(diǎn)擊"幫助"按鈕時(shí)要處理的事件 |
3、OpenFileDialog的效果如下:
可以用以下代碼來實(shí)現(xiàn)上面這個(gè)對(duì)話框:
private?void?openFileDialogBTN_Click(o?b?j?e?c?t?sender,?System.EventArgs?e){OpenFileDialog?openFileDialog=new?OpenFileDialog();
openFileDialog.InitialDirectory="c:\\";//注意這里寫路徑時(shí)要用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()這個(gè)類,是我在程序用來執(zhí)行文件操作,自己寫的,在最后附了這個(gè)類的源碼。有興趣的網(wǎng)友可以自己分析。
二、保存文件對(duì)話框(SaveFileDialog)
保存文件對(duì)話框控件有兩種情況,一就是保存,二就是另存為,保存很簡(jiǎn)單,就是在文件已經(jīng)打開的情況下的,再把文件寫一篇,在這里我們主要講另存為 的情況(SaveAs)。
1,SaveFileDialog控件的屬性
| Filter | 要在對(duì)話框中顯示的文件篩選器,例如,"文本文件(*.txt)|*.txt|所有文件(*.*)|*.*" |
| FilterIndex | 在對(duì)話框中選擇的文件篩選器的索引,如果選第一項(xiàng)就設(shè)為1 |
| RestoreDirectory | 控制對(duì)話框在關(guān)閉之前是否恢復(fù)當(dāng)前目錄 |
| AddExtension | 是否自動(dòng)添加默認(rèn)擴(kuò)展名 |
| CheckFileExists | |
| CheckPathExists | 在對(duì)話框返回之前,檢查指定路徑是否存在 |
| Container | 控制在將要?jiǎng)?chuàng)建文件時(shí),是否提示用戶。只有在ValidateNames為真值時(shí),才適用。 |
| DefaultExt | 缺省擴(kuò)展名 |
| DereferenceLinks | 在從對(duì)話框返回前是否取消引用快捷方式 |
| FileName | 第一個(gè)在對(duì)話框中顯示的文件或最后一個(gè)選取的文件 |
| InitialDirector | 對(duì)話框的初始目錄 |
| OverwritePrompt | 控制在將要在改寫現(xiàn)在文件時(shí)是否提示用戶,只有在ValidateNames為真值時(shí),才適用 |
| ShowHelp | 啟用"幫助"按鈕 |
| Title | 將顯示在對(duì)話框標(biāo)題欄中的字符 |
| ValidateNames | 控制對(duì)話框檢查文件名中是否不含有無(wú)效的字符或序列 |
2、SaveFileDialog事件如下:
| FileOk | 當(dāng)用戶點(diǎn)擊"打開"或"保存"按鈕時(shí)要處理的事件 |
| HelpRequest | 當(dāng)用戶點(diǎn)擊"幫助"按鈕時(shí)要處理的事件 |
3、SaveFileDialog的效果如下:
4、用下例代碼可以實(shí)現(xiàn)
private?void?saveAsDialogBTN_Click(o?b?j?e?c?t?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);
}
}
}?
其實(shí)這些都可以在VS.NET的IDE環(huán)境中直接完成,為了說明問題,我還是一條條列也來了。當(dāng)中用到了一個(gè)File的類庫(kù),下面是源程序:
File.cs
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,"保存文件出錯(cuò)!");}
}
}
}
字體對(duì)話框(FontDialog)
在文字處理中,我們常用到字體,現(xiàn)在我們來做一個(gè)最常見的字體對(duì)話框。
一、 字體對(duì)話框(FontDialog)常用屬性
| ShowColor | 控制是否顯示顏色選項(xiàng) |
| AllowScriptChange | 是否顯示字體的字符集 |
| Font | 在對(duì)話框顯示的字體 |
| AllowVerticalFonts | 是否可選擇垂直字體 |
| Color | 在對(duì)話框中選擇的顏色 |
| FontMustExist | 當(dāng)字體不存在時(shí)是否顯示錯(cuò)誤 |
| MaxSize | 可選擇的最大字號(hào) |
| MinSize | 可選擇的最小字號(hào) |
| ScriptsOnly | 顯示排除OEM和Symbol字體 |
| ShowApply | 是否顯示"應(yīng)用"按鈕 |
| ShowEffects | 是否顯示下劃線、刪除線、字體顏色選項(xiàng) |
| ShowHelp | 是否顯示"幫助"按鈕 |
二、 字體對(duì)話框(FontDialog)的事件
| Apply | 當(dāng)點(diǎn)擊"應(yīng)用"按鈕時(shí)要處理的事件 |
| HelpRequest | 當(dāng)點(diǎn)擊"幫助"按鈕時(shí)要處理的事件 |
三、 字體對(duì)話框(FontDialog)的效果
四、 實(shí)現(xiàn)代碼
private?void?fontDialogBTN_Click(o?b?j?e?c?t?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對(duì)話框中的字體。
顏色對(duì)話框(ColorDialog)
顏色拾取框也是我們常見的對(duì)話框之一,下面我們來看看在C#中是如何操作顏色對(duì)話框的呢?
一、 顏色對(duì)話框(ColorDialog)的常見屬性
| AllowFullOpen | 禁止和啟用"自定義顏色"按鈕 |
| FullOpen | 是否最先顯示對(duì)話框的"自定義顏色"部份 |
| ShowHelp | 是否顯示"幫助"按鈕 |
| Color | 在對(duì)話框中顯示的顏色 |
| AnyColor | 顯示可選擇任何顏色 |
| CustomColors | 是否顯示自定義顏色 |
| SolidColorOnly | 是否只能選擇純色 |
二、 顏色對(duì)話框(ColorDialog)的效果如下:
三、 實(shí)現(xiàn)代碼見下:
private?void?colorDialogBTN_Click(o?b?j?e?c?t?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對(duì)話框中點(diǎn)擊"取消"按鈕
file://恢復(fù)原來的值
colorDialog.ShowDialog();
richTextBox1.SelectionColor=colorDialog.Color;
}
實(shí)現(xiàn)顏色對(duì)話框(ColorDialog)很容易吧,其實(shí)不只是顏色對(duì)話框,C#也是很容易的,只要用心去學(xué),都容易的。講完了顏色對(duì)話框(ColorDialog),我們 來講打印和頁(yè)面設(shè)置.
| 頁(yè)面設(shè)置(PageSetupDialog) 其實(shí)頁(yè)面設(shè)置(PageSetupDialog)沒有太多的講,既然講到這里,我還是把PageSetupDialog中常用的屬性列出來吧 一、頁(yè)面設(shè)置(PageSetupDialog)常見屬性
二、面設(shè)置(PageSetupDialog)的效果如下 就這么簡(jiǎn)單啦,我們看看下面的吧,還有更重磅的東東呢?關(guān)于打印的。 打印預(yù)瀏及打印 一, 在.net環(huán)境中,說到打印,就不能不說PrintDocumet這個(gè)類,PrintDocument屬于System.Drawing.Printing這個(gè)名字空間,PrintDocument這個(gè)類是 實(shí)現(xiàn)打印的核心代碼。 ? private?void?printDocument_PrintPage(o?b?j?e?c?t?sender,?System.Drawing.Printing.PrintPageEventArgs?e){ float?linesPerPage=0;//頁(yè)面的行號(hào) float?yPos=0;//打印字符串的縱向位置 int?count=0;//行計(jì)數(shù)器 float?leftMargin?=e.MarginBounds.Left;//左邊距 float?topMargin=e.MarginBounds.Top;//上邊距 string?line=null;//行字符串 Color?clr=richTextBox1.SelectionColor;//當(dāng)前的打印顏色,在我這個(gè)程序沒有實(shí)現(xiàn)不同顏色打印 SolidBrush?b?=new?SolidBrush(clr);//刷子 fnt=richTextBox1.SelectionFont;//當(dāng)前的打印字體 linesPerPage=e.MarginBounds.Height/fnt.GetHeight(e.Graphics);//每頁(yè)可打印的行數(shù) file://逐行循行打印一頁(yè) while(count?{ yPos=topMargin+(count*fnt.GetHeight(e.Graphics)); e.Graphics.DrawString(line,fnt,b,leftMargin,yPos,new?StringFormat()); count++; } file://如果該頁(yè)打印完成而line不為空說明還有沒完成的頁(yè)面,發(fā)出下一次的打印事件, file://在下一次的打印中l(wèi)ineReader會(huì)自動(dòng)讀取上次沒有打印完的內(nèi)容。lineReader可以記錄當(dāng)前讀取的位置 if(line!=null) e.HasMorePages=true; else e.HasMorePages=false; } 在這里可以完成整個(gè)打印任務(wù)。把printDocument_PrintPage構(gòu)造好后,就可以打印和打印預(yù)瀏。 二、打印預(yù)瀏對(duì)話框(PrintPreviewDialog) 打印預(yù)瀏對(duì)話框沒有太多的屬性,最后通過ShowDialog()調(diào)用。上面的實(shí)現(xiàn)代碼如下: ? private?void?printPreviewBTN_Click(o?b?j?e?c?t?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,?"打印出錯(cuò)",?MessageBoxButtons.OK,?MessageBoxIcon.Error); return; } } 很簡(jiǎn)單的,只要你把PrintDocument_PrintPage()寫好了,這里就很容易了。 三、打印對(duì)話框(PrintDialog)
2、效果如下: 3、用如下代碼來實(shí)現(xiàn): private?void?printDialogBTN_Click(o?b?j?e?c?t?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); } } } 總結(jié) |
轉(zhuǎn)載于:https://www.cnblogs.com/060218/archive/2009/11/20/1607071.html
總結(jié)
- 上一篇: 单网段DHCP服务器的架设
- 下一篇: ASP.net中的validatereq