《Visual C# NET程序设计基础》课件007_第1页
《Visual C# NET程序设计基础》课件007_第2页
《Visual C# NET程序设计基础》课件007_第3页
《Visual C# NET程序设计基础》课件007_第4页
《Visual C# NET程序设计基础》课件007_第5页
已阅读5页,还剩156页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第7章WinForms应用程序对话框设计7.1对话框特点与分类

7.2使用系统定义的对话框 7.3创建自定义对话框7.4综合案例:写字板制作 245

本章小结

练习与作业

上机部分(七)

学习目标●了解对话框特点与分类●掌握系统定义的对话框:打开文件对话框、保存文件对话框、字体对话框、颜色对话框等●掌握创建自定义对话框的方法7.1对话框特点与分类对话框是用户与应用程序之间交换信息的有效途径之一。它是在另一个窗口中显示的窗口,在继续执行程序流之前,可以让用户输入一些数据。一般意义而言,有两种形式的对话框,即模式对话框和无模式对话框,但实际使用的对话框绝大多数是有模式对话框。模式对话框是指在继续执行该应用程序之前,要求用户先响应对话框。模式对话框通常用来显示重要的消息,如Word的“页面设置”对话框即是模式的。无模式的对话框在对话框显示时,允许在当前应用程序的其他地方继续工作。Word中的“查找与替换”对话框就是一个无模式对话框的实例,它适用于显示频繁使用的命令与信息。

有模式对话框具有以下特点:

●在一般情况下,用户没有必要改变对话框的大小,因此其边框是固定的。

●为了退出对话框,必须单击其中的某个按钮,不能通过单击对话框外部的某个地方关闭对话框。

●在对话框中不能有最大化按钮(MaxButton)和最小化按钮(MinButton),以免被意外地扩大或缩成图标。

●对话框中不是应用程序的主要工作区,只是临时使用,使用后就关闭。

●对话框中控件的属性可以在设计阶段设置,但在有些情况下,必须在运行时(即在代码中)设置控件的属性,因为某些属性设置取决于程序中的条件判断。

本质上来说,对话框是一个FormBorderStyle属性为FixedDialog的窗体。因此可以用前面所讲的设计窗体的方法定制对话框;在

.NETFramework也包括预定义的对话框,如图7-1所示。

除PrintPreviewDialog外,其余对话框类都派生于抽象基类CommonDialog,该基类定义了表7-1所示的主要方法和事件,它们对于所有的预定义对话框类来说都是适用的。

PrintPreviewDialog是一个例外,其基类为Form,控制打印预览,所以它并不是一个真正的对话框。OpenFileDialog和SaveFileDialog类派生于抽象基类FileDialog,该基类提供了对于打开和关闭文件对话框来说都相同的文件功能。图7-1预定义的对话框表7-1CommonDialog主要的方法和事件

注意:对于公司开发的应用程序,应考虑重用通用对话拒,并且应建立定制对话框的样式规则。尽量使建立和使用的对话框保持一致。

.NETFramework中,提供了Windows预定义对话框的组件,主要放在工具箱的“对话框”下。预定义对话框的组件名和意义如表7-2所示。表7-2预定义对话框的组件名和意义7.2使用系统定义的对话框7.2.1打开文件对话框

OpenFileDialog组件是一个预先配置的对话框。它与Windows操作系统所公开的“打开文件”对话框相同。该控件从CommonDialog类继承。

在基于Windows的应用程序中可将该组件用作简单的文件选择解决方案,而不用配置您自己的对话框。利用标准的Windows对话框,您可以创建其基本功能可立即为用户所熟悉的应用程序。但应注意,使用OpenFileDialog组件时,必须编写您自己的文件打开逻辑。

将OpenFileDialog组件添加到窗体后,它出现在Windows窗体设计器底部的栏中,可使用ShowDialog方法在运行时显示该对话框;您也可以在需要时(如单击按钮),编写下列语句:

OpenFileDialogdlg=newOpenFileDialog();dlg.ShowDialog();

运行这两行代码,得到如图7-2所示的运行结果。可以看出,我们在调用ShowDialog之前没有改变类的属性,因此出现了一个标准的打开文件对话框,我们也可改变对话框的操作方式和外观,或限制可以打开的文件。下面介绍OpenFileDialog的公共属性,如表7-3所示。图7-2打开文件对话框的运行结果表7-3OpenFileDialog的公共属性

使用Multiselect属性可使用户选择多个要打开的文件。另外,可使用ShowReadOnly属性确定在对话框中是否出现只读复选框。ReadOnlyChecked属性指示是否选中只读复选框。最后,Filter属性设置当前文件名筛选字符串,该字符串确定出现在对话框的“文件类型”框中的选择。

1.对话框的标题

OpenFileDialog的默认标题是“打开”。设置Title

属性可以改变对话框的标题。例如,VisualStudio2005本身为文件打开对话框就设置了不同的标题。

下面的代码说明了如何设置不同的标题:

OpenFileDialogdlg=newOpenFileDialog();dlg.Title="文本文件";dlg.ShowDialog();2.指定目录默认情况下,对话框将打开用户在上一次运行应用程序时所打开的目录,并显示该目录的文件。设置InitialDirectory属性可以改变这种设置。InitialDirectory的默认值是一个空字符。通常情况下,在应用程序中不应使用硬编码的目录字符串,因为这个目录可能在用户的系统上不存在。为了获取特定的系统文件夹,可以使用System.Environment类的静态方法GetFolderPath()。该方法接受一个Environment.SpecialFolder枚举,其中可定义要返回路径的那个系统目录。在下面的代码范例中,把InitialDirectory设置为通用用户目录:

stringdir=Environment.GetFolderPath(Environment.SpecialFolder.Templates);dlg.InitialDirectory=dir;dlg.ShowDialog();3.文件过滤器

Filter属性用来设置当前文件名筛选器字符串,该字符串确定打开文件对话框中的“文件类型”列表框中出现的选择内容,如图7-3所示。下面是一个简单的筛选器字符串的示例:

文本文件|*.txt|C#文件|*.cs|所有文件|*.*"

对于每个筛选选项,筛选器字符串都包含筛选器说明,后接一垂直线条(|)和筛选器模式;筛选器说明确定“文件类型”列表框显示的“文件种类名称”,筛选器模式表示文件的扩展文件名。因此,照上述示例,打开文件组件显示3个文件类型,如图7-3所示。图7-3过滤器设置

需打开的文件类型可以有多个,可使用FilterIndex属性设置第一个显示给用户的筛选选项。

FilterIndex属性用于获取或设置文件对话框中当前选定筛选器的索引。在程序中设置过滤器,可使用如下代码:

dlg.Filter="文本文件|*.txt|C#文件|*.cs|所有文件|*.*";4.有效性检验

试图打开一个文件前,OpenFileDialog组件可执行文件的有效性验证。输入无效的文件名,则会显示如图7-4和图7-5所示的提示信息。

图7-4文件名检验(1)

图7-5文件名检验(2)

有效性检验需要对三个属性进行设置,将其全部设置为True。这三个属性是:● ValidateNames指示对话框是否只接受有效的Win32文件名。● CheckFileExists指示如果用户指定不存在的文件名,对话框是否显示警告。● CheckPathExists指示如果用户指定不存在的路径,对话框是否显示警告。

5.结果

OpenFileDialog类的ShowDialog()方法返回一个DialogResult枚举。该枚举定义的成员有:Abort、Cancel、Ignore、No、None、OK、Retry和Yes。

默认值是None,用户单击按钮,将返回对应的结果。对OpenFileDialog而言,则只返回DialogResult.Ok和DialogResult.Cancel。

如果用户单击【打开】按钮,选中的文件名可以使用FileName属性来访问;如果用户单击【取消】按钮,FileName属性为一个空字符串。

6.打开文件

用户选定要打开的文件后,可以使用两种机制来打开文件。如果希望使用文件流,则可以创建StreamReader类的实例。另一种方法是使用OpenFile方法打开选定的文件。

提示:如果你希望详细了解文件流的有关概念,请查阅MSDN有关文档。

1) 使用OpenFileDialog组件以流方式打开文件

【例7-1】下面的示例使用Button控件的Click事件处理OpenFileDialog组件的打开文件事件。当用户选定某个文件并单击“确定”后,将打开对话框中选定的文件。文件内容显示在一个消息框中。

(1)新建一个Windows应用程序,将其名称设置为Demo7-1。

(2)将默认创建的窗体名称设置为frm7_1,将窗体的标题设置为“范例7-1”。

(3)在主窗口中添加一个Button控件和一个OpenFileDialog控件;Button控件命名为“btnOpen”,Text属性设置为“打开文件”。(4)在btnOpen控件的Click事件中编写下列代码:

privatevoidbtnOpen_Click(objectsender,System.EventArgse){if(openFileDialog1.ShowDialog()==DialogResult.OK){System.IO.StreamReadersr=newSystem.IO.StreamReader(openFileDialog1.FileName);MessageBox.Show(sr.ReadToEnd());sr.Close();}}

2)使用OpenFileDialog组件以文件方式打开文件使用ShowDialog方法显示对话框,并使用OpenFile方法打开文件。OpenFileDialog组件的OpenFile方法返回构成文件的字节。这些字节为您提供了一个可从中读取的流。

【例7-2】在下面的示例中,将实例化一个具有“cursor”筛选器的OpenFileDialog组件,使用户只能选择具有.cur文件扩展名的文件。如果选择了一个.cur文件,该窗体的光标将设置为选定的光标。

(1)新建一个Windows应用程序,将其名称设置为Demo7-2。

(2)将默认创建的窗体名称设置为frm7_2,将窗体的标题设置为“范例7-2”。

(3)在主窗口中添加一个Button控件;该Button控件命名为“btnCursor”,Text属性设置为“设置窗体光标”。(4) 在btnCursor控件的Click事件中编写下列代码:

privatevoidbtnCursor_Click(objectsender,System.EventArgse){//显示OpenFileDialog组件,让用户选择“光标”文件

OpenFileDialogopenFileDialog1=newOpenFileDialog();openFileDialog1.Filter="CursorFiles|*.cur";openFileDialog1.Title="SelectaCursorFile";//如用户选择了“光标”文件,则打开它

if(openFileDialog1.ShowDialog()==DialogResult.OK){//对窗体的Cursor属性设置为选定的光标

this.Cursor=newCursor(openFileDialog1.OpenFile());}}7.2.2保存文件对话框

SaveFileDialog组件的用法类似于OpenFileDialog组件的用法,它们有很多相同的属性。我们下面讨论SaveFileDialog特有的属性和方法。

1.文件扩展名文件扩展名用于把文件和应用程序关联起来。最好给文件添加一个扩展名,否则Windows就不知道打开该文件时应使用哪个应用程序,最终很可能用户也会忘记应使用何种应用程序来打开该文件。

AddExtension属性是一个布尔属性,它指示如果用户省略扩展名,对话框是否自动在文件名中添加扩展名。如果用户已经输入了一个文件扩展名,就不会添加其他扩展名了。如果用户输入了文件名test,就保存文件test.txt;如果输入了test.txt,保存的文件仍是test.txt,而非test.txt.txt。如果用户没有输入文件扩展名,则采用DefaultExt

属性设置文件扩展名。如果这个属性为空,就使用当前选择的Filter中定义的文件扩展名。

2.结果保存

用户可以使用SaveFileDialog组件浏览文件系统并选择要保存的文件。该对话框返回用户在对话框中选定的文件的路径和名称。不过,你必须编写代码才能真正地将文件写入磁盘。

你可以使用SaveFileDialog组件的OpenFile方法保存文件。此方法提供了一个可以写入文件的Stream对象。

【例7-3】以下示例使用DialogResult属性获取文件的名称,并使用OpenFile方法保存文件。

(1)新建一个Windows应用程序,将其名称设置为Demo7-3。

(2)将默认创建的窗体名称设置为frm7_3,将窗体的标题设置为“范例7-3”。

(3)在主窗口中添加一个Button控件;该Button控件命名为“btnImage”,Text属性设置为空。Image属性设置为

.jpeg文件(也可为

.gif、.bmp类型的文件),Dock属性设置为“Fill”,程序界面如图7-6所示。图7-6程序界面(4)在btnImage控件的Click事件中编写下列代码:

privatevoidbtnImage_Click(objectsender,System.EventArgse){SaveFileDialogsaveFileDialog1=newSaveFileDialog();saveFileDialog1.Filter="JPegImage|*.jpg|BitmapImage|*.bmp|GifImage|*.gif";saveFileDialog1.Title="保存图片文件";saveFileDialog1.ShowDialog();//如保存的文件名非空

if(saveFileDialog1.FileName!=""){//通过调用OpenFile方法创建的文件流来保存图片

System.IO.FileStreamfs=(System.IO.FileStream)saveFileDialog1.OpenFile();//根据不同文件类型来保存图片

switch(saveFileDialog1.FilterIndex){case1:this.btnImage.Image.Save(fs,System.Drawing.Imaging.ImageFormat.Jpeg);break;case2:this.btnImage.Image.Save(fs,System.Drawing.Imaging.ImageFormat.Bmp);break;case3:this.btnImage.Image.Save(fs,System.Drawing.Imaging.ImageFormat.Gif);break;}fs.Close();}}

代码说明:单击图片按钮时,使用一个允许.gif、.jpeg和.bmp类型文件的筛选器实例化SaveFileDialog组件。如果在“保存文件”对话框中选定了此类型的文件,那么将保存按钮的图像。

注意:某些控件,如RichTextBox控件,具有保存文件的能力。7.2.3字体对话框

FontDialog组件是标准的Windows“字体”对话框,用于显示系统上当前安装的字体。用户可以使用FontDialog组件选择字体,并可以更改字体显示方式,例如粗细和大小。默认情况下,该对话框显示字体、字体样式和字体大小的列表框;删除线和下划线等效果的复选框;脚本的下拉列表以及字体外观的示例(脚本是指给定字体可用的不同字符脚本,如希伯来语或日语),如图7-7所示。图7-7字体对话框外观1.显示字体对话框

若要显示字体对话框,请调用ShowDialog方法。

2.字体对话框的主要属性

FontDialog组件具有若干可配置其外观的属性。用于设置对话框选择内容的属性包括Font和Color,如表7-4所示。对话框中选定的字体在Font属性中返回。因此,使用用户选定的字体就像读取属性一样简单。

字体对话框主要的公共属性如表7-5所示。表7-4设置对话框选择内容的主要属性表7-5字体对话框的主要公共属性

【例7-4】在下面的示例中,Button控件的Click事件处理程序打开一个FontDialog组件。当用户选定字体并单击“确定”时,窗体上的TextBox控件的Font属性被设置为选定的字体。

(1)新建一个Windows应用程序,将其名称设置为Demo7-4。

(2)将默认创建的窗体名称设置为frm7_4,将窗体的标题设置为“范例7-4”。

(3)在主窗口中添加一个

Button控件、一个TextBox控件、一个FontDialog组件。将Button控件的Name属性设置为“btnFont”,Text属性设置为“设置字体”;将TextBox控件的Text属性设置为“学习fontDialog”。(4)在btnFont件的Click事件中编写下列代码:

privatevoidbtnFont_Click(objectsender,System.EventArgse)

{

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

{

textBox1.Font=fontDialog1.Font;

}

}

7.2.4颜色对话框

ColorDialog组件允许用户从调色板选择颜色以及将自定义颜色添加到该调色板。

对话框中选择的颜色在Color属性中返回。

对话框包括两部分:一部分显示基本颜色,另一部分允许用户自定义颜色。用户还可以通过设置ColorDialog的属性来更改对话框的外观,ColorDialog组件的主要属性如表7-6所示。表7-6ColorDialog的主要属性

ColorDialog组件的外观设置如图7-8所示。

使用ColorDialog组件与使用其他对话框的方法类似:

使用ShowDialog方法显示对话框。

使用DialogResult属性确定如何关闭对话框。

使用ColorDialog组件的Color属性设置选定的颜色。

【例7-5】在下面的示例中,Button控件的Click事件处理程序打开一个ColorDialog组件。当用户选定颜色并单击“确定”后,Button控件的背景色将设置为选定的颜色。

(1)新建一个Windows应用程序,将其名称设置为Demo7-5。

(2)将默认创建的窗体名称设置为frm7_5,将窗体的标题设置为“范例7-5”。(3)在主窗口中添加一个Button控件和一个ColorDialog组件。将Button控件的Name属性设置为“btnColor”,Text属性设置为“改变背景颜色”。

(4)在btnFont控件的Click事件中编写下列代码:

privatevoidbtnColor_Click(objectsender,System.EventArgse){if(colorDialog1.ShowDialog()==DialogResult.OK){btnColor.BackColor=colorDialog1.Color;}}图7-8ColorDialog组件的外观7.2.5其他对话框(MessageBox)

除了上述预定义对话框外,我们还经常使用其他预定义对话框,包括消息框(MessageBox)、选择文件夹对话框(FolderBrowserDialog)等。

1.消息框

MessageBox用于向用户显示与应用程序相关的信息。同时,消息框也用于请求来自用户的信息。

(1)在消息框中向用户显示信息。

调用MessageBox类的Show方法可向用户显示信息,代码如下:

publicvoidPerformCalculations()

{

MessageBox.Show("电费计算完成!");}

(2)消息框也可接受输入。

MessageBox类的Show方法返回可用于确定用户所做选择的值。下列代码演示如何调用MessageBox方法检索来自用户的信息,然后确定所选的值:

publicvoidExitApplication(){if(MessageBox.Show("真的要退出应用程序吗?","演示消息框",MessageBoxButtons.YesNo,MessageBoxIcon.Question)==DialogResult.Yes){Application.Exit();}}2.选择文件夹对话框

FolderBrowserDialog组件用于浏览和选择文件夹的模式对话框。也可以从Folder-BrowserDialog组件内创建新文件夹。

同其他对话框类似,使用ShowDialog方法可在运行时显示FolderBrowserDialog组件。设置RootFolder属性可确定将出现在对话框树视图内的顶级文件夹和任何子文件夹。在显示对话框后,您就可以使用SelectedPath属性获取所选文件夹的路径。

【例7-6】

在下面的示例中,用户可以编辑文件夹名称,也可点击按钮后选择输入,文件夹名称随后显示在窗体上的TextBox控件中。

(1)新建一个Windows应用程序,将其名称设置为Demo7-6。

(2)将默认创建的窗体名称设置为frm7_6,将窗体的标题设置为“范例7-6”。(3)在主窗口中添加1个Button控件、1个TextBox控件和1个FolderBrowserDialog组件。将Button控件的Name属性设置为“btnSelectFolder”,Text属性设置为“…”;将TextBox控件的Name属性设置为“txtPath”。

(4)在btnSelectFolder控件的Click事件中编写下列代码:

privatevoidbtnSelectFolder_Click(objectsender,EventArgse){if(folderBrowserDialog1.ShowDialog()==DialogResult.OK){txtPath.Text=folderBrowserDialog1.SelectedPath;}}

(5)保存项目,并运行。7.2.6实例1:对话框应用下面通过一个实例,全面介绍上述对话框的应用。该实例包括一个主窗口,可打开文件、另存文件、打印预览和打印文件,其他设置信息显示在窗体的标签内。

(1)新建一个Windows应用程序,将其名称设置为TestWinDialog。

(2)将默认创建的窗体名称设置为frmMain,将窗体的标题设置为“全面掌握C# 中的对话框组件!”,这个窗体将作为主窗口。主窗体需要设置的属性如表7-7所示。表7-7设置主窗体属性(3)在主窗口中添加两个Label控件和五个Button控件,分别取名为lblOutputData、lblCaption和btnOpenFileDialog、btnSaveFileDialog、btnColorDialog、btnFontDialog、btnPrintDialog,它们的属性设置如表7-8所示,界面如图7-9所示。再添加下列控件:PrintDocument、PrintPreviewDialog和PrintDialog,用于“打印预览”和“打印”。图7-9程序界面表7-8设置对话框中的控件属性(4)程序变量申明如下:

privateFontfnt;privateColorclr;privateStringfName;privateStreamReadersr;(5)打文件,另存文件的源代码如下:

privatevoidbtnOpenFileDialog_Click(objectsender,System.EventArgse){//定义一个“打开文件对话框”

OpenFileDialogopenFileDialog1=newOpenFileDialog();//定义此对话框的初始化目录

openFileDialog1.InitialDirectory="c:\\";//定义此对话框文件过滤类型

openFileDialog1.Filter="txtfiles(*.txt)|*.txt|Allfiles(*.*)|*.*";//此对话框缺省过滤类型为第2个

openFileDialog1.FilterIndex=2;openFileDialog1.RestoreDirectory=true;if(openFileDialog1.ShowDialog()==DialogResult.OK){fName=openFileDialog1.FileName;showInfo(); sr=newStreamReader(fName);}}

代码说明:● ShowInfo()在后面说明,显示文件名。●最后一条语句,用指定的文件名初始化StreamReader类的新实例。

privatevoidbtnSaveFileDialog_Click(objectsender,System.EventArgse){StreammyStream;SaveFileDialogsaveFileDialog1=newSaveFileDialog();saveFileDialog1.Filter="txtfiles(*.txt)|*.txt|Allfiles(*.*)|*.*";saveFileDialog1.FilterIndex=2;saveFileDialog1.RestoreDirectory=true;if(saveFileDialog1.ShowDialog()==DialogResult.OK){if((myStream=saveFileDialog1.OpenFile())!=null){//设定“sr”对象的指针指向读取文件流的开始位置

sr.BaseStream.Seek(0,SeekOrigin.Begin);inti;//判断“sr”中的指针是否指向文件流的结尾位置

while((i=sr.BaseStream.ReadByte())!=-1){//不断地往文件中写入字节

myStream.WriteByte((byte)i);}myStream.Close();sr.BaseStream.Seek(0,SeekOrigin.Begin);}}}(6)在btnColorDialog的Click事件中编写下列代码:

privatevoidbtnColorDialog_Click(objectsender,System.EventArgse){ColorDialogColorDialog1=newColorDialog();ColorDialog1.AllowFullOpen=true;ColorDialog1.FullOpen=true;//设定此颜色对话框存在【帮助】按钮,缺省是没有的

ColorDialog1.ShowHelp=true;//设定此颜色对话框的初始颜色,如果在对话框中选择“取消”,则此对话框会重新

//设定颜色

ColorDialog1.Color=Color.DarkBlue;if(ColorDialog1.ShowDialog()!=DialogResult.Cancel){clr=ColorDialog1.Color;showInfo();}}(7)在btnFontDialog的Click事件中编写下列代码:

privatevoidbtnFontDialog_Click(objectsender,System.EventArgse){FontDialogfontDialog1=newFontDialog();fontDialog1.ShowColor=true;fontDialog1.AllowScriptChange=true;fontDialog1.ShowColor=false;if(fontDialog1.ShowDialog()!=DialogResult.Cancel){fnt=fontDialog1.Font;showInfo();}}(8)在btnPrintDialog的Click事件中编写下列代码:

privatevoidbtnPrintDialog_Click(objectsender,EventArgse){if(printDialog1.ShowDialog()!=DialogResult.Cancel){try{ this.printDocument1.Print();}catch(Exceptionex){ MessageBox.Show(ex.Message);}}}(9)在btnPrintPreView的Click事件中编写下列代码:

privatevoidbtnPrintPreView_Click(objectsender,EventArgse){try{printPreviewDialog1.ShowDialog();} catch(Exceptionexp){System.Console.WriteLine(exp.Message.ToString());}}(10)在btnPrintPreView的Click事件中编写下列代码:

privatevoidprintDocument1_PrintPage(objectsender,PrintPageEventArgse){floatlinesPerPage=0;floatyPosition=0;intcount=0;floatleftMargin=e.MarginBounds.Left;floattopMargin=e.MarginBounds.Top;stringline=null;FontprintFont=this.fnt;SolidBrushmyBrush=newSolidBrush(Color.Black);

//计算每页的行数

linesPerPage=e.MarginBounds.Height/printFont.GetHeight(e.Graphics);//逐行打印

while(count<linesPerPage&&((line=sr.ReadLine())!=null)){//计算下一行的位置,字体高度

yPosition=topMargin+(count*printFont.GetHeight(e.Graphics));//画出下一行

e.Graphics.DrawString(line,printFont,myBrush,leftMargin,yPosition,newStringFormat());count++;}//如还有更多的行,再打印一页

if(line!=null)e.HasMorePages=true;elsee.HasMorePages=false;myBrush.Dispose();}(11)编写ShowInfo方法:

privatevoidshowInfo(){lblOutputData.Text="选择文件:"+fName.ToString()+"\n\r\n\r";lblOutputData.Text=lblOutputData.Text+"选择颜色:"+clr.ToString()+"\n\r\n\r";lblOutputData.Text=lblOutputData.Text+"选择字体:"+fnt+"\n\r\n\r";}(12)保存项目,并运行之。打开一个文本文档后,运行界面如图7-10所示,单击“打印预览”后,运行界面如图7-11所示。图7-10程序运行界面

图7-11打印预览界面7.3创建自定义对话框7.3.1自定义对话框介绍自定义对话框就是用户所创建的含有控件的窗体,该窗体的FormBorderStyle属性设置为FixedDialog,因此可以用前面所讲的设计窗体的方法定制对话框的属性。窗体上放置的控件包括命令按钮、选取按钮和文本框等,它们可以为应用程序接收信息,满足特定需求。自定义对话框的创建过程与普通窗体的创建过程基本相同,只是需要设置不同的属性和应用不同的方法。1.对话框窗体外观设置定义自定义对话框的外观具有很大的自由度。它可以是固定的或可移动的、模式的或无模式的。它可以包含不同类型的控件。然而,对话框通常不包括菜单栏、窗口滚动条、最小化与最大化按钮、状态条、或者尺寸可变的边框。下面介绍创建典型类型的对话框方法。通过设置FormBorderStyle、ControlBox、MaxButton和MinButton属性,可以删除菜单栏等项目。例如,我们可以使用表7-9所示的属性设置。表7-9典型类型的对话框的属性设置2.显示对话框显示对话框的方法与显示窗体的方法一样。只需要编写加载并显示对话框窗体的代码。在 .NET中,窗体有一个ShowDialog方法,它可以用来显示一个自定义对话框,使窗体符合对话框的第一个特性,语法如下:

FormObject.ShowDialog[owner]ShowObject是指对话框的名称,参数Owner可以指定对话框所属的父窗体。如果指定了父窗体,当父窗体关闭时,对话框ShowObject就会一起关闭。但参数Owner可以默认。

例如,可以在用于显示对话框的按钮单击事件中添加如下代码:

privatevoidbutton1_Click(objectsender,System.EventArgse)

{

Form2dlg1=newForm2();

dlg1.ShowDialog();

}

3.关闭对话框

设置对话框窗体上按钮的DialogResult属性,可以在用户单击按钮时关闭对话框并根据按钮的DialogResult属性设置对话框窗体的DialogResult属性。

通常情况下,在对话框窗体上需要添加两个按钮,一个为【确定】或【是】按钮,将其DialogResult属性设置为Ok或Yes,用于执行对话框中的代码;另一个为【取消】或【否】按钮,将其DialogResult属性设置为Cancel或No,用于关闭对话框。在某些情况下,需要暂停对话框的关闭,可以将DialogResult属性设置为DialogResult.None,代码如下:

privatevoidbutton1_Click(objectsender,System.EventArgse)

{

this.DialogResult=DialogResult.None;

}4.检索对话框结果关闭对话框之后,就可以从对话框获得调用结果,调用结果有两种:如何关闭对话框和从对话框获取数据。

1)判断对话框关闭原因关闭对话框后,可以通过对话框的DialogResult属性,或引用Form.ShowDialog方法的返回值,判断单击哪个按钮返回。

privatevoidbutton1_Click(objectsender,System.EventArgse)

{

Form2dlg1=newForm2();

if(dlg1.ShowDialog()==DialogResult.OK) { //所做处理

}

}2)从对话框获取数据对话框关闭后并未从内存中移出,因此仍然可以访问对话框的公共方法和属性。例如,我们要获取“查找对话框中”用户输入的字符串,可以定义一个只读的公共属性来返回该“查找字符串”。

PublicstringSearchString

{

get { returntextBox1.Text;

}

}

然后调用者可通过下面代码获取用户的输入字符串:

privatevoidbutton1_Click(objectsender,System.EventArgse)

{

Form2dlg1=newForm2();

if(dlg1.ShowDialog()==DialogResult.OK) { MessageBox.Show("你要查找的字符串为:"+dlg1.SearchString);

}

}7.3.2实例2:自定义对话框下面通过一个实例介绍自定义对话框的创建过程。该实例包括一个主窗口和一个对话框,并在主窗口中设置一个按钮用于打开对话框,步骤如下:

(1)新建一个Windows应用程序,将其名称设置为TestDialog。图7-12程序运行界面

(2)将默认创建的窗体名称(Name属性)设置为frmMain,将窗体的标题(Text属性)设置为“主窗口”。

(3)在主窗口中添加两个Label控件和一个Button控件,分别取名为Label1、Label2和btnDialog,其中Label1的Text属性值为“查找范围:”,Label2的Text属性值为空,btnDialog的Text属性值为“显示选择对话框”,界面如图7-12所示。图7-12程序运行界面(4)创建第二个窗体作为对话框,并在“名称”文本框中输入frmSelect.cs。

(5)利用工具箱在第二个窗体中添加两个Label控件、两个DateTimePicker控件和两个Button控件,它们的属性设置如表7-10所示,界面如图7-12所示。

(6)设置第二个窗体的几个相关属性,使其具有对话框的基本特性,具体设置内容如表7-11所示。界面如图7-13所示。表7-10设置对话框中的控件属性表7-11设置第二个窗体属性图7-13程序运行界面(7)为frmSelect对话框添加两个子定义属性:StartDate和EndDate,其中StartDate用来设置或返回起始日期的属性,EndDate用来设置或返回结束日期的属性。StartDate和EndDate的源代码如下:

//定义StartDate属性

publicSystem.DateTimeStartDate

//返回用户在FromStart控件中选择的日期

{

get {returnfromStart.Value.Date;}

set {

fromStart.Value=value; }

}//定义EndDate属性publicSystem.DateTimeEndDate{

get

{

returntoEnd.Value.Date;

}

set

{

toEnd.Value=value;

}}

(8)返回到frmMain窗体,双击【显示选择对话框】按钮,打开代码窗口,编写按钮的Click事件,显示自定义对话框,代码如下:

privatevoidbtnDialog_Click(objectsender,EventArgse)

{

frmSelectdlg1=newfrmSelect();

if(dlg1.ShowDialog()==DialogResult.Yes)

{

label2.Text=dlg1.StartDate.ToShortDateString()+"--"+dlg1.EndDate.ToShortDateString();

}

else

{

label2.Text="按键否...";

}

}(9)按下F5键对上面的窗体和代码进行调试,出现“主窗口”窗口之后单击【显示选择对话框】按钮,可打开“选择查询范围”对话框,选择起始和结束日期并单击【确定】按钮之后,就返回到“主窗口”窗口中,用户选择的日期范围就出现在“查找范围”标签下面。注意,当激活“选择查询范围”对话框时,用户只能在该对话框中操作,不能操作“主窗口”窗口。7.4综合案例:写字板制作在上述内容中,我们讲述了文件对话框(FileDialog)、字体对话框(FontDialog)和颜色对话框(ColorDialog),其中文件对话框(FileDialog)又有:打开文件对话框(OpenFileDialog)、保存文件对话框(SaveFileDialog)这两个对话框。有了上述基础,就可以很容易地写出一个简单的写字板。下面介绍简易写字板的创建过程。具体步骤如下:

(1)新建一个Windows应用程序,将其名称设置为7-WordPad。

(2)将默认创建的窗体名称(Name属性)设置为frmWordPad,将窗体的标题(Text属性)设置为“RichTextBox简易文本编辑器”,这个窗体将作为主窗口。(3)向窗体中添加如表7-12所示控件,工具栏的使用方法见第8章,本章不详细阐述。程序的主界面如图7-14所示。表7-12窗体frmNote中添加的控件图7-14简易文本编辑器主界面(4)打开代码编辑器。

(5)程序变量声明如下:

//变量用来保存搜索的初始位置

privateintsearchStartPosition=0;

//变量用来保存上一次搜索的字符串

privatestringstrOriginalSearch="";(6)文件新建、打开和保存实现源代码如下:

privatevoidbtnNew_Click(objectsender,EventArgse)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论