项目一:文本编辑器的设计与实现_第1页
项目一:文本编辑器的设计与实现_第2页
项目一:文本编辑器的设计与实现_第3页
项目一:文本编辑器的设计与实现_第4页
项目一:文本编辑器的设计与实现_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

课程:C#Windows程序设计学年第__学期第周月日教学内容备注项目一:文本编辑器的设计与实现【项目背景】文本编辑器有两类:单文档和多文档文本编辑器。单文档文本编辑器一次只能打开一个文件,如果要打开另一个文件,必须关闭当前打开的文件,微软的写字板程序就是单文档字处理程序。多文档文本编辑器允许同时打开多个文件,每个文件占用一个子窗口,微软的Word程序就是多文档字处理程序。本项目主要介绍建立单文档文本编辑器的方法,通过分析现有文本编辑器的功能与操作过程,利用C#开发一个新的文本编辑器。【主要内容与技能要求】(1)会进行复杂窗口设计(2)会对常见的文本编辑功能进行分析与编码实现(3)会设计多文档窗口一、预备知识本项目主要利用RichTextBox控件来构成文本编辑区域。1、RichTextBox控件的主要属性属性SelectedText、SelectionLength、SelectionStart:属性SelectionFont:属性SelectionColor:属性Lines:属性Modified:事件SelectionChange:事件TextChanged:2、RichTextBox控件的主要方法方法Clear(:方法Copy(、Cut(、Paste(:方法SelectAll(:方法Find(:方法SaveFile(和LoadFile(:课程:C#Windows程序设计学年第__学期第周月日教学内容备注方法Undo(:方法Redo(:二、功能设计与实现1、剪贴板功能放RichTextBox控件到窗体。属性Name=richTextBox1,Dock=Fill,Text=""。privatevoidmenuItemEditCut_Click(objectsender,EventArgse{richTextBox1.Cut(;}//剪切privatevoidmenuItemEditCopy_Click(objectsender,EventArgse{richTextBox1.Copy(;}//拷贝privatevoidmenuItemEditPaste_Click(objectsender,EventArgse{richTextBox1.Paste(;}//粘贴privatevoidmenuItemEditUndo_Click(objectsender,EventArgse{richTextBox1.Undo(;}//撤销privatevoidmenuItemEditRedo_Click(objectsender,EventArgse{richTextBox1.Redo(;}//恢复2、存取文件功能文本编辑器都应具有文件存取功能,菜单顶级菜单项“文件”的弹出菜单中一般包括如下菜单项:新建、打开、关闭、保存和另存为等。需要用到打开文件对话框(OpenFileDialog控件)和保存文件对话框(SaveFileDialog控件)。和两个对话框的常用属性和方法:属性Filter:例如Filter=“纯文本文件(*.txt|*.txt|所有文件(*.*|*.*”属性FilterIndex:属性FileName:属性InitialDirectory:属性DefaultExt:方法ShowDialog(:存取文件功能实现如下:课程:C#Windows程序设计学年第__学期第周月日教学内容备注把OpenFileDialog和SaveFileDialog控件放到窗体中。为菜单增加顶级菜单项:文件,为其弹出菜单增加菜单项:新建、打开...、保存...、另存为...、退出。修改这些菜单项的Name属性分别为:mainMenuFile、menuItemFileNew、menuItemFileOpen、menuItemFileSave、menuItemFileSaveAs、menuItemFileExit。为Form1类中定义变量:strings_FileName=“”,记录当前编辑的文件名privatevoidmenuItemFileNew_Click(objectsender,EventArgse//新建文件菜单项{richTextBox1.Text="";//或richTextBox1.Clear(;s_FileName="";//新建文件没有文件名。}privatevoidmenuItemFileOpen_Click(//打开文件菜单项objectsender,EventArgse{if(openFileDialog1.ShowDialog(==DialogResult.OK{s_FileName=openFileDialog1.FileName;richTextBox1.LoadFile(openFileDialog1.FileName,RichTextBoxStreamType.PlainText;}}privatevoidmenuItemFileSaveAs_Click(//另存为菜单项objectsender,EventArgse{if(saveFileDialog1.ShowDialog(==DialogResult.OK{s_FileName=saveFileDialog1.FileName;richTextBox1.SaveFile(saveFileDialog1.FileName,RichTextBoxStreamType.PlainText;}//注意存取文件类型应一致。}privatevoidmenuItemSaveFile_Click(//保存文件菜单项objectsender,EventArgse{if(s_FileName.Length!=0课程:C#Windows程序设计学年第__学期第周月日教学内容备注richTextBox1.SaveFile(s_FileName,RichTextBoxStreamType.PlainText;elsemenuItemFileSaveAs_Click(sender,e;}privatevoidmenuItemExit_Click(//退出菜单项objectsender,EventArgse{Close(;}3、修改字体为修改使用的字体,可打开字体对话框FontDialog,选择指定字体。可以按两种方式修改字体,如果未选中文本,表示以后键入的字符将按选定字体输入。如果选中文本,则仅修改选定文本的字体。修改字符颜色也根据同样原则。修改字体要用到FontDialog控件可以用FontDialog对话框选定指定字体,FontDialog控件和OpenDialog控件的属性和方法基本相同,这里只介绍属性Font,它代表用FontDialog对话框选定的字体。修改字体实现方法:放FontDialog控件到窗体,属性Name=fontDialog1。为菜单增加顶级菜单项:格式,属性Name为mainMenuModel,为其弹出菜单增加菜单项:字体,属性Name为menuItemModelFont,为菜单“格式|字体”菜单项增加单击事件处理函数如下:privatevoidmenuItemModelFont_Click(objectsender,EventArgse{if(fontDialog1.ShowDialog(==DialogResult.OKrichTextBox1.SelectionFont=fontDialog1.Font;}4、About对话框单击菜单"项目|添加Windows窗体"菜单项,弹出对话框,添加一个窗体,修改formAbout窗体属性StartPosition=CenterParent,修改属性MaximizeBox=False,MinimizeBox=False,属性FormBorderStyle=FixedDialog标题为“确定”按钮单击事件处理函数如下:privatevoidbutton1_Click(objectsender,EventArgse课程:C#Windows程序设计学年第__学期第周月日教学内容备注{Close(;}为菜单增加顶级菜单项:帮助,为其弹出菜单增加标题为“关于„”的菜单项,属性Name为menuItemAbout。菜单“帮助|关于„”菜单项单击事件处理函数如下:privatevoidmenuItemAbout_Click(objectsender,EventArgse{formAboutAboutDialog=newformAbout(;AboutDialog.ShowDialog(this;//打开模式对话框}//注意不能使用Show(函数,它打开非模式对话框5、文本编辑器查找替换功能首先介绍模式对话框和非模式对话框的概念。并使用非模式对话框在文本编辑器中实现查找和替换功能。(1)模式对话框和非模式对话框模式对话框和非模式对话框的区别是:„两类对话框本质上都是窗体,是Form类的派生类,只是打开时使用的方法不一样,打开模式对话框,使用方法ShowDialog(,而打开非模式对话框,使用方法Show(。(2)查找替换功能的实现建立新窗体,窗体文件名称为formFindReplace.cs,作为"查找替换"对话框。窗体类名也为formFindReplace,为formFindReplace类增加变量:Form1MainForm1;属性StartPosition=CenterParent,MaximizeBox=False,MinimizeBox=False,FormBorderStyle=FixedDialog,Text=“查找和替换”修改formFindReplace类构造函数如下,增加的参数form1是主窗体属性Name的值。publicformFindReplace(Form1form1{InitializeComponent(;MainForm1=form1;//新增语句,记录主窗体属性Name的值}//有了Form1引用,可以在formFindReplace类中调用Form1类的公有方法查找替换对话框中标题为“查找下一个”按钮单击事件函数如下:privatevoidbuttonFind_Click(objectsender,EventArgse{课程:C#Windows程序设计学年第__学期第周月日教学内容备注MainForm1.FindRichTextBoxString(textBox1.Text;elseMessageBox.Show(“查找字符串不能为空”,"提示",MessageBoxButtons.OK;}//MessageBox是对话框else//MainForm1.ReplaceRichTextBoxString后面定义MessageBox.Show(“替换字符串不能为空”,"提示",MessageBoxButtons.OK;}为Form1类增加变量:intFindPostion=0,该变量用来记录下一次查找的开始位置。为Form1窗体菜单的"编辑"顶级菜单项的弹出菜单增加菜单项:查找和替换,属性Name为menuItemFindReplace。"查找和替换"菜单项单击事件处理函数如下:privatevoidmenuItemFindReplace_Click(objectsender,EventArgse{FindPostion=0;//下句中的this是Form1类对象引用formFindReplaceFindReplaceDialog=newformFindReplace(this;FindReplaceDialog.Show(;}//打开非模式对话框使用Show(方法定义FindRichTextBoxString方法publicvoidFindRichTextBoxString(stringFindString{从文本开始处查找”,"提示",MessageBoxButtons.OK;FindPostion=0;//下次查找的开始位置return;}课程:C#Windows程序设计学年第__学期第周月日教学内容备注FindPostion=richTextBox1.Find(FindString,FindPostion,RichTextBoxFinds.MatchCase;if(FindPostion==-1//-1表示未找到匹配字符串,提示用户{MessageBox.Show("未找到匹配字符串,再次查找将从文本开始处查找","提示",MessageBoxButtons.OK;FindPostion=0;//下次查找的开始位置}else//找到匹配字符串{richTextBox1.Focus(;//主窗体成为注视窗口FindPostion+=FindString.Length;}//下次查找的开始位置在此次找到字符串之后}替换字符串的方法:publicvoidReplaceRichTextBoxString(stringReplaceStringrichTextBox1.SelectedText=ReplaceString;}//替换被选定的字符串6、对话框MessageBoxMessageBox.Show(this,"要保存当前更改吗?","保存更改吗?",MessageBoxButtons.YesNoCancel,MessageBoxIcon.Question;7、提示保存已被修改的文件为Form1类增加一个bool变量bSave=false作为标记,用来跟踪控件RichTextBox中的文本内容是否被修改。在程序开始运行、建立和打开一个新文件后,bSave=false,表示如果关闭当前文件,不必提示用户保存当前文件。当RichTextBox控件中的文本被修改,将激活RichTextBox控件TextChanged事件,在该事件处理函数中,使bSave=true,表示关闭当前文件前,要询问用户是否保存当前已被修改的文件。首先在主窗体Form1类中增加一个函数,其功能是如果检查到当前文件已被修改,用对话框询问用户是否保存当前文件,根据用户的选择作相应的处理,该函数返回true,表示继续操作,课程:C#Windows程序设计学年第__学期第周月日教学内容备注该函数返回false,表示忽略此次操作。之所以要增加这个函数是因为有三处要用到此函数。该函数定义如下:publicboolIfSaveOldFile({boolReturnValue=true;if(bSave{dr=MessageBox.Show(this,“要保存当前更改吗?”,"保存更改吗?",MessageBoxButtons.YesNoCancel,MessageBoxIcon.Question;switch(dr//根据用户选择做相应处理bSave=false;//保存文件后,应使bSave为falseif(s_FileName.Length!=0richTextBox1.SaveFile(s_FileName,RichTextBoxStreamType.PlainText;else{SaveFileDialogsaveFileDialog1=newSaveFileDialog(;if(saveFileDialog1.ShowDialog(==DialogResult.OK{s_FileName=saveFileDialog1.FileName;richTextBox1.SaveFile(s_FileName,RichTextBoxStreamType.PlainText;}}//返回true通知调用本方法的程序本次操作继续ReturnValue=true;break;//单击了no按钮,不保存课程:C#Windows程序设计学年第__学期第周月日教学内容备注//单击了Cancel按钮break;}//返回false,通知调用本方法的程序,本次操作取消}returnReturnValue;}在菜单“文件|新建”和“文件|打开”菜单项的事件函数的第1条语句前增加如下语句:if(!IfSaveOldFile(//如果返回false本次操作取消return;修改菜单“文件|保存...”菜单项单击事件处理函数如下:privatevoidmenuItemSaveFile_Click(objectsender,EventArgse{if(s_FileName.Length!=0{bSave=false;richTextBox1.SaveFile(s_FileName,RichTextBoxStreamType.PlainText;}elsemenuItemSaveAs_Click(sender,e;}修改菜单“文件|另存为...”菜单项单击事件函数如下:priva

温馨提示

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

评论

0/150

提交评论