第4章仿Windows记事本22记事本功能分析文件的读写StreamReader/StreamWriter通用对话框设计文件的编辑(复制、粘贴、剪贴)文本的查找与替换33计算器外观设计界面设计MenuStrip控件LayoutStyle:Flow;可随容器的大小发生改变菜单项ShortcutKeys:设置快捷键ShortcutKeyDisplayStringEnabled:设置菜单项是否可用Name:设置菜单项的名字Text:菜单项上显示的文本界面设计RichTextBox控件Dock:Fill;随容器的大小而改变自身大小Modified:设置或判断控件中的内容是否被修改Selected:获取或设置选定文本Font:获取或设置字体66菜单项文件的读、写操作文件和流System.IO命名空间提供了操作文件与目录的类文件的读取需要用流(stream)来进行操作流就是C#中读写文件的通道程序通过输入流从数据源读取数据,通过输出流向目的地写数据。数据源(文件、键盘、内存)C#程序数据目的(文件、控制台、内存)输入流输出流System.IO.StreamWriter写文件StreamWritersw=newStreamWriter(@“c:\testfile.txt”,true,System.Text.Encoding.Default);//第一个参数为文件名,第二个参数判断是否覆盖已有//文件,第三个参数为编码方式sw.WriteLine(测试数据1);sw.WriteLine(测试数据2);sw.Write(测试数据3测试数据3测试数据3+测试数据3测试数据3测试数据3测试数据3+测试数据3测试数据3测试数据3测试数据3);sw.Close();System.IO.StreamReader读文件StreamReadersr=newStreamReader(@“c:\testfile.txt”,System.Text.Encoding.Default);MessageBox.Show(sr.ReadLine());MessageBox.Show(sr.ReadToEnd());sr.Close();通用对话框设计通用对话框概述在.NET框架中,提供了以下对话框类:打开文件对话框(OpenFileDialog)保存文件对话框(SaveFileDialog)字体对话框(FontDialog)颜色对话框(ColorDialog)页面设置对话框(PageSetupDialog)打印对话框(PrintDialog)等类。通用对话框的使用方法首先声明一个通用对话框,设置一些必要属性调用ShowDialog()方法打开对话框接收用户与对话框交互操作的返回值,返回值是DialogResult实例OpenFileDialogdlg=newOpenFileDialog();dlg.Filter=文本文件(*.txt)|*.txt|所有文件(*.*)|*.*;dlg.Title=打开文件;if(dlg.ShowDialog()==DialogResult.OK)//显示打开文件对话框{string_fileName=dlg.FileName;}OpenFileDialog控件常用属性说明FileName获取或设置用户在打开文件对话框中选择的文件名Filter设置文件筛选过滤器,用于指定对话框中文件类型Multiselect设置是否允许选择多个文件FileNames只读属性,获取用户选择的多个文件名OpenFileDialog控件本身并不能打开文件,如要显示文件可以通过创建StreamReader对象来读取文件内容。OpenFileDialogodlg=newOpenFileDialog();odlg.Filter=文本文件(*.txt)|*.txt|所有文件(*.*)|*.*;odlg.Title=打开文件;if(odlg.ShowDialog()==DialogResult.OK)//显示打开文件对话框{StreamReadersr=newStreamReader(odlg.FileName,Encoding.Default);rtxtContent.Text=sr.ReadToEnd();sr.Close();}SaveFileDialog控件常用属性说明FileName获取或设置用户在保存文件对话框中选择的文件名Filter设置文件筛选过滤器,用于指定对话框中文件类型AddExtension设置在省略扩展名时,是否自动将扩展名添加到文件名上DefaultExt默认的文件扩展名SaveFileDialog控件本身并不能保存文件,如要写文件可以通过创建StreamWriter对象来实现。SaveFileDialogsdlg=newSaveFileDialog();sdlg.Filter=文本文件(*.txt)|*.txt|所有文件(*.*)|*.*;sdlg.Title=“保存文件;Sdlg.AddExtension=true;Sdlg.DefaultExt=“.txt”;if(sdlg.ShowDialog()==DialogResult.OK)//显示保存文件对话框{StreamWritersw=newStreamWriter(sdlg.FileName,true,Encoding.Default);sw.Write(rtxtContent.Text);sw.Close();}FontDialog控件用于设置文本字体,可以改变字体、字号、字形、颜色等。常用属性说明Font获取或设置选定的字体ShowColor是否显示颜色选项,默认为不显示ShowEffects是否包含特殊效果选项,如删除线,下划线等,默认为显示privatevoidmnuFont_Click(objectsender,EventArgse)//修改字体{FontDialogfontDialog1=newFontDialog();fontDialog1.ShowColor=true;if(fontDialog1.ShowDialog()==DialogResult.OK)rtxtContent.Font=fontDialog1.Font;}记事本功能实现1.实现:另存为…分析:一、文件菜单“另存为…”的单击事件:1.设置saveFileDialog1的属性;2.创建StreamWriter对象,取名为sw1,使用sw1将rtxtContent中的内容写入到指定的文件中;3.设置rtxtContent.Modified=false;4.设置_filename字段;5.关闭sw1对象在记事本窗体中设置字段或声明对象:•添加一个变量_filename,用来保存文件名;•声明一个SaveFileDialog类控件,取名为saveFileDialog12.实现:保存分析:(以下内容均在“保存”菜单项的单击事件中实现)一、文件菜单创建StreamWriter对象,将修改过的内容保存到现有文件中判断:文件是否存在(已保存过)调用“另存为…”的功能代码是否3.实现:新建分析(以下内容均在“新建”菜单项的单击事件中实现)一、文件菜单判断:rtxtContent中是否有修改后未作的内容,条件为真:弹击消息框,提示是否需要保存•Yes:调用“保存”功能•No:不作任何操作•Cancel:设置_isContinue=false添加一个标志:bool_isContinue=true;判断:_isContinue,条件为真:•将rtxtContent清空;•设置form1.Text=新建文本文档_记事本;•设置_filename=“”;4.实现:打开分析(以下内容均在“打开”菜单项的单击事件中实现)一、文件菜单判断:rtxtContent中是否有修改后未作的内容,条件为真:弹击消息框,提示是否需要保存•Yes:调用“保存”功能•No:不作任何操作•Cancel:设置_isContinue=false添加一个标志:bool_isContinue=true;判断:_isContinue,条件为真:•声明一个OpenFileDialog控件•创建一个StreamReader类对象•将指定的文件显示出来二、编辑菜单1.实现:剪切,复制,粘贴,删除,撤销,全选分析:RichTextBox的常用属性和方法常用属性说明Select()选择文本SelectAll()选择所有内容Cut()将选择的内容剪切至剪贴板Copy()将选择的内容复制至剪贴板Paste()将剪贴板中的内容粘贴至光标处Undo()撤销ClearUndo()消除最近的撤销信息SelectionLength选择内容的长度SelectedText选择的文本当“编辑”菜单的Click事件和DropDownOpened事件发生时,判断“编辑”菜单下的各二级菜单项是否可用。rtxtContent.Modified撤销rtxtContent.SelectedTextrtxtContent.Text剪切、复制、删除Clipboard.GetText().ToString()查找、替换粘贴二、编辑菜单三、查找与替换创建用户自定义对话框对话框与窗口的不同主要体现在对话框不能调整大小。因此将窗体设置成对话框,需设置窗体的几个属性。常用属性说明FormBorderStyle提示窗体的边框和标题栏的外观和行为MaximizeBox确定窗体标题栏是否有最大化框MinimizeBox确定窗体标题栏是否有最小化框StartPosition确定窗体第一次出现时的位置AcceptButton设置窗体的“接受”按钮,用户按“Enter“键,都相当于单击该按钮1.实现:查找三、查找与替换关键技术:1.富文本框的Find()方法rtxtContent.Find(searchString);rtxtContent.Find(searchString,searchPosition,RichTextBoxFinds.MatchCase);2.富文本框的Select()方法rtxtContent.Select(startPosition,selectLength);//添加两个成员字段int_findPosition=0;string_findString=“”;privatevoidmnuFind_Click(objectsender,EventArgse){frmFindfrmFind1=newfrmFind();if(frmFind1.ShowDialog()==DialogResult.OK){_findString=frmFind1.strFind;Find();//调用Find()方法进行查找}}publicvoidFind()//查找方法{_findPosition=rtxtContent.Find(_findString,_findPosition,RichTextBoxFinds.MatchCase);if(_findPosition==-1)//表示未找到{MessageBox.Show(找不到+_findString,记事本,MessageBoxButtons.OK,MessageBoxIcon.Information);_findPosition=0;}else{rtxtContent.Select(_findPosition,_findString.Length);_findPosition+=_findString.Length;}}2.实现:替换三、查找与替换关键技术:用到字符串的Replace()方法,对选定的内容进行查找替换。string1.Replace(searchString,replaceString)32总结WinForms可用于Windows窗体应用程序开发Windows窗体控件是从System.Windows.Forms.Control类派生的类菜单控件MenuStrip通用对话框用户自定义对话框