1、第7章 对话框,学习内容与要点 如何建立自定义对话框通用对话框控件的使用 文件与流 RichTextBox控件的使用,7.1 自定义对话框,对话框就是窗体的另外一种形式。根据工作模式不同,对话框分为模态和非模态对话框两种。 7.1.1 模态对话框 用户必须显式地关闭对话框后,才能与应用程序的其它窗体进行交互。,1.实现模态对话框的基本步骤 (1)将窗体的FormBorderStyle属性更改为FixedDialog;将ControlBox、 MinimizeBox 、MaximizeBox和ShowInTaskBar属性设置为 false (2)调用窗体的ShowDialog 方法显示模态对话
2、框 2.对话框的返回值 (1)使用对话框的DialogResult 属性 (2) ShowDialog方法的返回值。if(dlg.DialogResult=DialogResult.OK)else,3.检索对话框输入的信息和向对话框输出信息对话框一般用来输出信息或输入信息。一般通过对话框的属性来公开对话框信息。例如,public string InputTextget return txtInput.Text; 利用InputText属性返回对话框上文本框txtInput中用户输入的文本。 4. 默认按钮通过设置窗体的AcceptButton属性,确定按下回车键时,哪个按钮控件应该做出响应。通
3、过设置窗体的CancelButton属性确定按下ESC键时,哪个按钮控件应该做出响应。,7.1.2 非模态对话框,用户不必关闭非模态对话框也可以在应用程序的其它窗体上工作。 非模态对话框的实现与模态对话框基本相同,只是显示非模态对话框,使用窗体的Show方法,7.2 通用对话框,通用对话框就是C#预置的一些对话框 。 7.2.1 消息框 用于向用户显示一些通知消息 。MessageBox.Show()显示消息框 。格式为:DialogResult Show (string text, string caption,MessageBoxButtons buttons,MessageBoxIcon
4、 icon,MessageBoxDefaultButton defaultButton),例如:MessageBox.Show(“消息框的显示内容”,“消息框 的标题“,MessageBoxButtons.YesNoCancel,MessageBoxIcon.Information);,7.2.2 文件打开和保存对话框,由OpenFileDialog和SaveFileDialog类实现1.常用属性 (1)Filter属性:文件名筛选字符串,筛选具有特定扩展名的文件。形式为“所有文件*.*|*.*”,“|”,前面的字符串“所有文件*.*”用于显示,后面的字符串“*.*”才真正用于筛选。 (2)F
5、ilterIndex属性:设置对话框文件名筛选器的索引。 (3)InitialDirectory属性:设置对话框显示的初始路径。 (4)Title属性:设置对话框的标题。 (5)FileName属性:返回对话框中用户选定的路径和文件名。2.常用方法 (1)ShowDialog方法:显示文件打开或保存对话框。,3.文件与数据流概述,(1)FileStream类用于完成文件打开、读写和关闭任务。构造函数为:FileStream (string path,FileMode mode, FileAccess access)path指定文件的相对或绝对路径;mode确定打开或创建文件,取值于枚举File
6、Mode: Create:创建新文件。若文件存在,则被改写; CreateNew:创建新文件,若文件存在,则将引发异常; Open:打开现有文件; OpenOrCreate:若文件存在,则打开,否则,创建新文件; Append:打开现有文件并查找到文件尾,或创建新文件; Truncate:打开现有文件。文件一旦打开,就将被截断为零字节大小,access用于控制对文件的读访问、写访问或读/写访问。取值于FileAccess枚举,具体值为: Read:读取文件; Write:写文件; ReadWrite:读写文件。 (2)StreamReader类用于读取文本文件或文本数据流。其构造函数非常多,常
7、见的有如下两种形式:StreamReader (Stream stream)StreamReader (string path)stream指定要读取的流;path指定读取文件的完整路径。 常用的方法有: Read方法:读取流中的下一个字符。 ReadLine方法:读取一行字符并将数据作为字符串返回。 ReadToEnd方法:读取从流的当前位置到末尾的所有字符。 Close方法:关闭流。,(3)StreamWriter类用于写入文本文件或文本数据流。其构造函数非常多,常见的有如下两种形式:StreamWriter (Stream stream)StreamWriter (string path
8、) stream指定要写入的流;path指定写入文件的完整路径。 常用的方法有: Write方法:把任何类型数据写入流。 WriteLine方法:将数据写入流,插入行结束符 Close方法:关闭流。,例7-2 使用文件保存对话框建立一个文件,并使用代码向文件写入一句话 /using System.IO; SaveFileDialog sfdlg = new SaveFileDialog(); sfdlg.Filter = “所有文件*.*|*.*|文本文件*.txt|*.txt|C#文件|*.cs|C文件|*.c“; sfdlg.InitialDirectory = “c:user“; sfd
9、lg.Title = “保存文本文件“; sfdlg.FilterIndex=2; /把文件过滤器设为第二项“*.txt” /如果用户单击文件保存对话框的“保存”按钮,向文件写入“This is test” if(sfdlg.ShowDialog()=DialogResult.OK) FileStream fs =new FileStream(sfdlg.FileName, FileMode.OpenOrCreate, FileAccess.Write);StreamWriter fileStream=new StreamWriter(fs);fileStream.WriteLine(“Thi
10、s is a test“);fileStream.Close();,7.2.3 颜色对话框,允许用户从调色板选择颜色以及将自定义颜色添加到调色板。ColorDialog类实现颜色对话框。ShowDialog方法,显示颜色对话框。 Color属性记忆用户选择的颜色。 例7-3 使用颜色对话框改变静态文本标签的背景色ColorDialog clg = new ColorDialog();if(clg.ShowDialog()=DialogResult.OK)label1.BackColor=clg.Color;,7.2.4 字体对话框,字体对话框是标准的 Windows“字体”对话框,用于公开系统
11、上当前安装的字体。FontDialog类实现字体对话框。ShowDialog方法显示字体对话框,Font属性记忆用户选择的字体。Font是一个对象,它公开字体、字型、字号等属性。 例7-4 使用字体对话框设置静态文本标签的字体FontDialog fg = new FontDialog();if(fg.ShowDialog()=DialogResult.OK)label1.Font=fg.Font;,7.2.5 打印对话框,PrintDialog显示Windows标准打印对话框。可以在对话框中选择打印机、选择要打印的页以及页范围和打印选定内容。必须使用PrintDocument组件完成具体的打
12、印任务 例7-5 使用PrintDialog和PrintDocument打印一个矩形PrintDialog pd = new PrintDialog();PrintDocument pdoc = new PrintDocument();pdoc.PrintPage += new PrintPageEventHandler(pds_PrintPage);pd.Document=pdoc; private void button1_Click(object sender, EventArgs e)if(pd.ShowDialog()=DialogResult.OK) pd.Document.Pri
13、nt(); private void pds_PrintPage(object sender, PrintPageEventArgs e)e.Graphics.FillRectangle(Brushes.Red, new Rectangle(500, 500, 500, 500);,文件处理习题,1 文件管理 File类和FileInfo类 2 目录管理 Directory类和DirectoryInfo类 3 StreamReader和StreamWriter Read ReadLine ReadToEnd Write WriteLine,例7-1 文件整体读取,编写一个程序,从磁盘上读取文件
14、bb. cpp中的内容,并把这些内容显示到屏幕中。,static void Main(string args) StreamReader sr = new StreamReader(“bb.txt“);/一次性读整个文件全部字符 string str1 = sr.ReadToEnd(); Console.WriteLine(str1);sr.Close();,例7-2 将“百鸡问题”的结果存入文件中,static void Main(string args) StreamWriter sr = new StreamWriter(“bb.txt“,false);string str;for (i
15、nt i = 0; i 20; i+)for (int j = 0; j 33 - 5 / 3 * i; j+) int k = 100 - i - j;if (5 * i + 3 * j + k / 3 = 100)str = Convert.ToString(i) +“ “+ Convert.ToString(j )+“ “+ Convert.ToString(k);sr.WriteLine(str); sr.WriteLine();sr.Close();,编写一个程序,可以读入一个C+语言的源文件,每一行加上行号后保存到另一个后缀为print.txt的文件中。 程序输入输出样例: / E
16、xercise 13_5 2 #include 27 return 0; 28 ,例7-3 文件管理,class Test static void Main(string args) StreamReader sr = new StreamReader(“aa.txt“);StreamWriter sw = new StreamWriter(“bb.txt“, false);int i = 1, x;string line = Convert.ToString(i) + ;sw.Write(line);do x = sr.Read();if (x != -1) sw.Write(char)x)
17、;if (x = n)i+;line = Convert.ToString(i) + ;sw.Write(line);elsebreak; while (true);sr.Close();sw.Close(); ,例7-4,从文件mytest.txt读出全部内容,统计其中的单词(以空格为单词分隔符)个数,并打印单词个数及总文件长度。,class Test static void Main(string args) StreamReader sr = new StreamReader(“bb.txt“);/一次性读整个文件全部字符string str1 = sr.ReadToEnd();sr.Close();Console.WriteLine(“文件长度=0“,str1.Length);int i,word=1,c=0;char ch;for (i = 0; i = a ,