日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

Visual C# 對(duì)話框全接觸

系統(tǒng) 3822 0

VS.net 出來也很久了,感覺還可以。早一陣子,朋友讓我?guī)退麑憙蓚€(gè)打印程序,當(dāng)中用了不少的對(duì)話,在查資料的時(shí)候看到國 外有一篇專門的文章介紹對(duì)話框的,就決定寫這篇文章,讓大家都有個(gè)好的起點(diǎn)。同時(shí)還著重介紹了打印那一部份,大家可以仔細(xì)研究一下,都說了很多了。現(xiàn) 在我們開發(fā)吧!

  對(duì)話框中我們常用了以下幾種:

  1、文件對(duì)話框(FileDialog) 它又常用到兩個(gè):

   打開文件對(duì)話框(OpenFileDialog)

   保存文件對(duì)話(SaveFileDialog)

  2、字體對(duì)話框(FontDialog)

  3、顏色對(duì)話框(ColorDialog)

  4、打印預(yù)瀏對(duì)話框(PrintPreviewDialog)

  5、頁面設(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ì)話框檢查文件名中是否不含有無效的字符或序列

  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(object 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ì)話框檢查文件名中是否不含有無效的字符或序列

  2、SaveFileDialog事件如下:

FileOk 當(dāng)用戶點(diǎn)擊"打開"或"保存"按鈕時(shí)要處理的事件
HelpRequest 當(dāng)用戶點(diǎn)擊"幫助"按鈕時(shí)要處理的事件

  3、SaveFileDialog的效果如下:

  4、用下例代碼可以實(shí)現(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);
}
}
}

  其實(shí)這些都可以在VS.NET的IDE環(huán)境中直接完成,為了說明問題,我還是一條條列也來了。當(dāng)中用到了一個(gè)File的類庫,下面是源程序:

  File.cs

using System;
using System.IO;
using System.Windows.Forms;
using System.Text;

namespace dialog
{
/// <summary><br>/// Summary description for File.<br>/// </summary>
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(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對(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(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對(duì)話框中點(diǎn)擊"取消"按鈕
file://恢復(fù)原來的值
colorDialog.ShowDialog();
richTextBox1.SelectionColor=colorDialog.Color;
}

  實(shí)現(xiàn)顏色對(duì)話框(ColorDialog)很容易吧,其實(shí)不只是顏色對(duì)話框,C#也是很容易的,只要用心去學(xué),都容易的。講完了顏色對(duì)話框(ColorDialog),我們 來講打印和頁面設(shè)置.

頁面設(shè)置(PageSetupDialog)

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

一、頁面設(shè)置(PageSetupDialog)常見屬性

AllowMargins 設(shè)置是否可以對(duì)邊距的編輯
AllowOrientation 是否可以使用"方向"單選框
AllowPaper 設(shè)置是否可以對(duì)紙張大小的編輯
AllowPrinter 設(shè)置是否可以使用"打印機(jī)"按鈕
Document 獲取打印機(jī)設(shè)置的PrintDocument
MinMargins 允許用戶選擇的最小邊距

二、面設(shè)置(PageSetupDialog)的效果如下

  就這么簡(jiǎn)單啦,我們看看下面的吧,還有更重磅的東東呢?關(guān)于打印的。

打印預(yù)瀏及打印

  打印是我們?cè)趙indows編程中常要用到的功能,在以前都是很麻煩工作,但在Microsoft .net Framework中打印是以組件提供給我們使用,不過還是點(diǎn)麻煩的,所以就專門寫出來,供大家參改。

  一, 在.net環(huán)境中,說到打印,就不能不說PrintDocumet這個(gè)類,PrintDocument屬于System.Drawing.Printing這個(gè)名字空間,PrintDocument這個(gè)類是 實(shí)現(xiàn)打印的核心代碼。

  如果要實(shí)現(xiàn)打印,就必需首先構(gòu)造PrintDocument對(duì)象添加打印事件,
printDocument.PrintPage+=new PrintPageEventHandler(this.printDocument_PrintPage)
打印其實(shí)也是調(diào)用Graphics類的方法進(jìn)行畫圖,下面這代碼是根據(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;//頁面的行號(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);//每頁可打印的行數(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會(huì)自動(dòng)讀取上次沒有打印完的內(nèi)容。lineReader可以記錄當(dāng)前讀取的位置<br>if(line!=null)<br>e.HasMorePages=true;<br>else<br>e.HasMorePages=false;<br>}</linesperpage>

  在這里可以完成整個(gè)打印任務(wù)。把printDocument_PrintPage構(gòu)造好后,就可以打印和打印預(yù)瀏。

 二、打印預(yù)瀏對(duì)話框(PrintPreviewDialog)

  打印預(yù)瀏控件是用來顯示一個(gè)打印文檔在打印后的效果。在打印預(yù)瀏對(duì)話框中包含有,打印、縮放、單頁或多頁、關(guān)閉等按鈕。對(duì)話框如下:

  打印預(yù)瀏對(duì)話框沒有太多的屬性,最后通過ShowDialog()調(diào)用。上面的實(shí)現(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, "打印出錯(cuò)", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}

  很簡(jiǎn)單的,只要你把PrintDocument_PrintPage()寫好了,這里就很容易了。

三、打印對(duì)話框(PrintDialog)

  1、打印對(duì)話框(PrintDialog)只要有以下屬性:

AllowPrintToFile 禁止或使用"打印到文件"復(fù)選框
AllowSelection 禁止或使用"選定內(nèi)容"單選框
AllowSomePages 禁止或使用"頁"單選按鈕
Document 從中獲取打印機(jī)設(shè)置的PrintDocument
PrintToFile 打印到文件"復(fù)選框是否選中
ShowHelp 控制是否顯示"幫助"按鈕
ShowNetWork 控制是否顯示"網(wǎng)絡(luò)"按鈕

  2、效果如下:

  3、用如下代碼來實(shí)現(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);
}
}
}

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

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

總結(jié)

  在我們的教程,共講述了文件對(duì)話框(FileDialog)、字體對(duì)話框(FontDialog)、,顏色對(duì)話框(ColorDialog)、打印預(yù)瀏對(duì)話框(PrintPreviewDialog)、頁面 設(shè)置(PrintDialog)、打印對(duì)話框(PrintDialog),這幾個(gè)對(duì)話框,其中文件對(duì)話框(FileDialog)又有:打開文件對(duì)話框(OpenFileDialog)、保存文件對(duì)話(SaveFi leDialog)這兩個(gè)對(duì)話框。有了上述基礎(chǔ),大家可以很容易的寫出一個(gè)簡(jiǎn)單的記事本。

Visual C# 對(duì)話框全接觸


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 新宁县| 隆林| 金川县| 会理县| 吉林省| 黎川县| 依兰县| 阿拉善右旗| 柘城县| 乳山市| 鄢陵县| 阜平县| 当阳市| 永丰县| 桐梓县| 乌拉特前旗| 顺义区| 巴东县| 富顺县| 迭部县| 灵寿县| 兴和县| 常德市| 广昌县| 长寿区| 巫溪县| 美姑县| 安西县| 措美县| 庄浪县| 吉首市| 石狮市| 广灵县| 富裕县| 白沙| 东山县| 海林市| 汉沽区| 开江县| 交口县| 绥宁县|