版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第4章 文本编辑器的实现,本章的目的是建立一个文本编辑器,同时继续介绍控件的用法。有两类文本编辑器:单文档和多文档文本编辑器。单文档文本编辑器一次只能打开一个文件,如果要打开另一个文件,必须关闭当前打开的文件,微软的写字板程序就是单文档字处理程序。多文档文本编辑器允许同时打开多个文件,每个文件占用一个子窗口,微软的Word程序就是多文档字处理程序。本章首先介绍建立单文档文本编辑器的方法,然后介绍建立多文档文本编辑器的方法。,4.1 RichTextBox控件,使用RichTextBox 可以建立一个文本编辑器,它和TextBox 的一些属性、事件和方法相同,其新增属性、事件和方法如下:,属性D
2、ock: 属性SelectedText、 SelectionLength、SelectionStart: 属性SelectionFont: 属性SelectionColor: 属性Lines: 属性Modified: 事件SelectionChange:,事件TextChanged: 方法Clear(): 方法Copy()、Cut()、Paste(): 方法SelectAll(): 方法Find(): 方法SaveFile()和LoadFile(): 方法Undo(): 方法Redo():,4.2 剪贴板功能,放RichTextBox控件到窗体。属性Name=richTextBox1,Dock
3、=Fill,Text=。 private void menuItemEditCut_Click(object sender,EventArgs e) richTextBox1.Cut();/剪切 private void menuItemEditCopy_Click(object sender,EventArgs e) richTextBox1.Copy();/拷贝 private void menuItemEditPaste_Click(object sender,EventArgs e) richTextBox1.Paste();/粘贴 private void menuItemEditU
4、ndo_Click(object sender,EventArgs e) richTextBox1.Undo();/撤销 private void menuItemEditRedo_Click(object sender,EventArgs e) richTextBox1.Redo();/恢复,4.3 存取文件,文本编辑器都应具有文件存取功能,菜单顶级菜单项“文件”的弹出菜单中一般包括如下菜单项:新建、打开、关闭、保存和另存为等。本节实现以上菜单项。 4.3.1 OpenFileDialog和SaveFileDialog控件 两个对话框的 的常用属性: 属性Filter:例如Filter=“纯
5、文本文件(*.txt)|*.txt|所有文件(*.*)|*.*” 属性FilterIndex: 属性FileName: 属性InitialDirectory: 属性DefaultExt: 方法ShowDialog():,4.3.2 存取文件功能实现,把OpenFileDialog和SaveFileDialog控件放到窗体中。为菜单增加顶级菜单项:文件,为其弹出菜单增加菜单项:新建、打开.、保存.、另存为.、退出。修改这些菜单项的Name属性分别为:mainMenuFile、menuItemFileNew、menuItemFileOpen、menuItemFileSave、menuItemFil
6、eSaveAs、menuItemFileExit。 为Form1类中定义变量:string s_FileName=,记录当前编辑的文件名 private void menuItemFileNew_Click(object sender,EventArgs e) /新建文件菜单项 richTextBox1.Text=; /或richTextBox1.Clear(); s_FileName=; /新建文件没有文件名。 ,private void menuItemFileOpen_Click( /打开文件菜单项 object sender,EventArgs e) if(openFileDialog
7、1.ShowDialog()=DialogResult.OK) s_FileName=openFileDialog1.FileName;richTextBox1.LoadFile(openFileDialog1.FileName, RichTextBoxStreamType.PlainText); private void menuItemFileSaveAs_Click( /另存为菜单项 object sender,EventArgs e) if(saveFileDialog1.ShowDialog()=DialogResult.OK) s_FileName=saveFileDialog1.
8、FileName; richTextBox1.SaveFile(saveFileDialog1.FileName, RichTextBoxStreamType.PlainText); /注意存取文件类型应一致。 ,private void menuItemSaveFile_Click( /保存文件菜单项 object sender,EventArgs e) if(s_FileName.Length!=0) richTextBox1.SaveFile(s_FileName, RichTextBoxStreamType.PlainText); else menuItemFileSaveAs_Cli
9、ck(sender,e); private void menuItemExit_Click( /退出菜单项 object sender,EventArgs e) Close();,4.4 修改字体,为修改使用的字体,可打开字体对话框FontDialog,选择指定字体。可以按两种方式修改字体,如果未选中文本,表示以后键入的字符将按选定字体输入。如果选中文本,则仅修改选定文本的字体。修改字符颜色也根据同样原则。,4.4.1 FontDialog控件,可以用FontDialog对话框选定指定字体,FontDialog控件和OpenDialog控件的属性和方法基本相同,这里只介绍属性Font,它代表用
10、FontDialog对话框选定的字体。,4.4.2 修改字体实现方法,放FontDialog控件到窗体,属性Name=fontDialog1。为菜单增加顶级菜单项:格式,属性Name为mainMenuModel,为其弹出菜单增加菜单项:字体,属性Name为menuItemModelFont,为菜单“格式|字体”菜单项增加单击事件处理函数如下: private void menuItemModelFont_Click( object sender,EventArgs e) if(fontDialog1.ShowDialog()=DialogResult.OK) richTextBox1.Sele
11、ctionFont=fontDialog1.Font; ,4.5 About对话框,单击菜单项目|添加Windows窗体菜单项,弹出对话框,如上图添加一个窗体,修改formAbout窗体属性StartPosition=CenterParent, 修改属性MaximizeBox=False,MinimizeBox=False 属性FormBorderStyle=FixedDialog 运行界面 如下:,标题为“确定”按钮单击事件处理函数如下: private void button1_Click(object sender,EventArgs e) Close(); 为菜单增加顶级菜单项:帮助,
12、为其弹出菜单增加标题为“关于”的菜单项,属性Name为menuItemAbout。菜单“帮助|关于”菜单项单击事件处理函数如下: private void menuItemAbout_Click( object sender,EventArgs e) formAbout AboutDialog=new formAbout(); AboutDialog.ShowDialog(this);/打开模式对话框 /注意不能使用Show()函数,它打开非模式对话框,4.6 文本编辑器查找替换功能,本节首先介绍模式对话框和非模式对话框的概念。并使用非模式对话框在文本编辑器中实现查找和替换功能。,4.6.1
13、模式对话框和非模式对话框,模式对话框和非模式对话框的区别是: 两类对话框本质上都是窗体,是Form类的派生类,只是打开时使用的方法不一样,打开模式对话框,使用方法ShowDialog(),而打开非模式对话框,使用方法Show()。,4.6.2 查找替换功能的实现,建立新窗体,窗体文件名称为formFindReplace.cs,作为查找替换对话框。窗体类名也为formFindReplace,为formFindReplace类增加变量:Form1 MainForm1; 属性StartPosition=CenterParent,MaximizeBox=False,MinimizeBox=False,
14、 FormBorderStyle=FixedDialog, Text=“查找和替换” ,对话框界面如图:,4.6.2 查找替换功能的实现 (续),修改formFindReplace类构造函数如下,增加的参数form1是主窗体属性Name的值。 public formFindReplace(Form1 form1) InitializeComponent(); MainForm1=form1;/新增语句,记录主窗体属性Name的值 /有了Form1引用,可以在formFindReplace类中调用Form1类的公有方法 查找替换对话框中标题为“查找下一个”按钮单击事件函数如下: private
15、void buttonFind_Click(object sender,EventArgs e) if(textBox1.Text.Length!=0) /MainForm1.FindRichTextBoxString方法见后面定义 MainForm1.FindRichTextBoxString(textBox1.Text); else MessageBox.Show(“查找字符串不能为空”, 提示,MessageBoxButtons.OK); /MessageBox是对话框,使用方法见4.7.1节,4.6.2 查找替换功能的实现 (续),查找替换对话框中标题为“替换查到字符”按钮单击事件函数
16、如下: private void buttonReplace_Click(object sender,EventArgs e) if(textBox2.Text.Length!=0) MainForm1.ReplaceRichTextBoxString(textBox2.Text); else / MainForm1.ReplaceRichTextBoxString后面定义 MessageBox.Show(“替换字符串不能为空”, 提示, MessageBoxButtons.OK); 为Form1类增加变量:int FindPostion=0,该变量用来记录下一次查找的开始位置。为Form1窗
17、体菜单的编辑顶级菜单项的弹出菜单增加菜单项:查找和替换,属性Name为menuItemFindReplace。查找和替换菜单项单击事件处理函数如下:,4.6.2 查找替换功能的实现 (续),private void menuItemFindReplace_Click( object sender,EventArgs e) FindPostion=0;/下句中的this是Form1类对象引用 formFindReplace FindReplaceDialog=new formFindReplace(this); FindReplaceDialog.Show(); /打开非模式对话框使用Show(
18、)方法 定义FindRichTextBoxString方法 public void FindRichTextBoxString(string FindString) if(FindPostion=richTextBox1.Text.Length) MessageBox.Show(“已到文本底部,再次查找将从文本开始处查找”,提示,MessageBoxButtons.OK); FindPostion=0;/下次查找的开始位置 return; ,4.6.2 查找替换功能的实现 (续),FindPostion=richTextBox1.Find(FindString,FindPostion, Ric
19、hTextBoxFinds.MatchCase); if(FindPostion=-1)/-1表示未找到匹配字符串,提示用户 MessageBox.Show(未找到匹配字符串,再次查找将从文本开始处查找,提示, MessageBoxButtons.OK); FindPostion=0; /下次查找的开始位置 else/找到匹配字符串 richTextBox1.Focus(); /主窗体成为注视窗口 FindPostion+=FindString.Length; /下次查找的开始位置在此次找到字符串之后 ,4.6.2 查找替换功能的实现 (续),替换字符串的方法 : public void Re
20、placeRichTextBoxString( string ReplaceString) if(richTextBox1.SelectedText.Length!=0) richTextBox1.SelectedText=ReplaceString; /替换被选定的字符串,4.6.2 查找替换功能的实现 (续),查找和替换运行结果 :,4.7.1 对话框MessageBox,MessageBox.Show(this,要保存当前更改吗?,保存更改吗?, MessageBoxButtons.YesNoCancel,MessageBoxIcon.Question);,4.7.2 提示保存已被修改的
21、文件,为Form1类增加一个bool变量bSave=false作为标记,用来跟踪控件RichTextBox中的文本内容是否被修改。在程序开始运行、建立和打开一个新文件后,bSave=false,表示如果关闭当前文件,不必提示用户保存当前文件。当RichTextBox控件中的文本被修改,将激活RichTextBox控件TextChanged事件,在该事件处理函数中,使bSave=true,表示关闭当前文件前,要询问用户是否保存当前已被修改的文件。 首先在主窗体Form1类中增加一个函数,其功能是如果检查到当前文件已被修改,用对话框询问用户是否保存当前文件,根据用户的选择作相应的处理,该函数返回t
22、rue,表示继续操作,该函数返回false,表示忽略此次操作。之所以要增加这个函数是因为有三处要用到此函数。该函数定义如下:,public bool IfSaveOldFile() bool ReturnValue=true; if(bSave) System.Windows.Forms.DialogResult dr; dr=MessageBox.Show(this, 要保存当前更改吗?, 保存更改吗?, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question); switch(dr)/根据用户选择做相应处理 case System.Wi
23、ndows.Forms.DialogResult.Yes:bSave=false;/保存文件后,应使bSave为false if(s_FileName.Length!=0) richTextBox1.SaveFile(s_FileName, RichTextBoxStreamType.PlainText);,else SaveFileDialog saveFileDialog1= new SaveFileDialog();if(saveFileDialog1.ShowDialog()= DialogResult.OK) s_FileName=saveFileDialog1.FileName;
24、richTextBox1.SaveFile(s_FileName, RichTextBoxStreamType.PlainText); /返回true通知调用本方法的程序本次操作继续 ReturnValue=true; break;,/单击了no按钮,不保存 case System.Windows.Forms.DialogResult.No: bSave=false; ReturnValue=true; break; /单击了Cancel按钮 case System.Windows.Forms.DialogResult.Cancel: ReturnValue=false; break; /返回
25、false,通知调用本方法的程序,本次操作取消 return ReturnValue; ,4.7.2 提示保存已被修改的文件(续),在菜单“文件|新建”和“文件|打开”菜单项的事件函数的第1条语句前增加如下语句: if(!IfSaveOldFile()/如果返回false本次操作取消 return; 修改菜单“文件|保存.”菜单项单击事件处理函数如下: private void menuItemSaveFile_Click( object sender,EventArgs e) if(s_FileName.Length!=0) bSave=false; richTextBox1.SaveFil
26、e(s_FileName, RichTextBoxStreamType.PlainText); else menuItemSaveAs_Click(sender,e); ,4.7.2 提示保存已被修改的文件(续),修改菜单“文件|另存为.”菜单项单击事件函数如下: private void menuItemSaveAs_Click( object sender,EventArgs e) SaveFileDialog saveFileDialog1=new SaveFileDialog(); saveFileDialog1.Filter=纯文本文件(*.txt)|*.txt|所有文件(*.*)|
27、*.*; saveFileDialog1.FilterIndex=1; if(saveFileDialog1.ShowDialog()=DialogResult.OK) s_FileName=saveFileDialog1.FileName; richTextBox1.SaveFile(s_FileName, RichTextBoxStreamType.PlainText); bSave=false; ,4.7.2 提示保存已被修改的文件(续),为RichTextBox控件TextChanged事件增加事件函数如下: private void richTextBox1_TextChanged(
28、 object sender,EventArgs e) bSave=true; 窗体Form1的FormClosing事件是在关闭窗口之前产生的事件,此时,窗体中的控件还存在,还可以保存修改的内容,也可以不退出。增加Closing事件的事件处理函数如下: private void Form1_FormClosing(object sender, FormClosingEventArgs e) if(!IfSaveOldFile() e.Cancel=true;/不退出,程序继续运行,4.8 打印和打印预览,自学,4.9 编写多文档界面应用程序 4.9.1 多文档文本编辑器,建立一个类似Micr
29、osoft Word的编辑器,有多页,每页处理一个文档。多文档界面(MDI)应用程序有一个父窗体(主窗体),父窗体在其工作区内包含一组子窗体。每个子窗体都是一个限制为只能在父窗体内出现的窗体。这些子窗体通常共享父窗体的菜单栏、工具栏以及其他部分。 运行效果如下图,主窗体中的子窗体为层叠排列。,4.9.1 多文档文本编辑器(续),4.9.1 多文档文本编辑器(续),新建一个新项目。修改Form1窗体属性IsMdiContainer=true,表示主窗体是一个子窗体容器。放菜单控件MenuStrip到主窗体。为菜单增加文件顶级菜单项。为文件顶级菜单项的弹出菜单增加菜单项:新建、打开、另存为、关闭当
30、前窗口、退出。为菜单增加窗口顶级菜单项。在窗口顶级菜单项的弹出菜单中增加菜单项:水平平铺、层叠、垂直平铺。设置菜单控件MenuStrip的MdiWindowListItem属性为“窗口”顶级菜单项的Name属性值,使“窗口”顶级菜单项的弹出菜单下部增加子窗口列表。在VS2005集成环境中,单击菜单“项目|添加Windows窗体”菜单项,创建子窗体。窗体文件名称为FormChild.cs,窗体的类名也定义为FormChild。放RichTextBox1控件到子窗体。修改属性Dock=Fill,Modifiers =public,使RichTextBox1为公有成员,在主窗体可以访问RichTex
31、tBox1。放OpenFileDialog和SaveFileDialog控件到主窗体 。菜单各菜单项事件处理函数如下:,4.9.1 多文档文本编辑器(续),private void 新建ToolStripMenuItem_Click( object sender, EventArgs e) FormChild formChild=new FormChild(); formChild.MdiParent=this; formChild.Show(); private void 打开ToolStripMenuItem_Click( object sender, EventArgs e) if(openFileDialog1.ShowDialog(this)=DialogResult.OK) FormChild ChildForm=new FormChild(); ChildForm.MdiParent=this;ChildF
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年食堂反食品浪费工作方案
- 2026年广西安全工程职业技术学院单招综合素质考试题库及答案解析
- 2026年普通话等级考试全真模拟试卷及答案(共四套)
- 综合营销策划方案模板及执行步骤
- 2026年高一生物下学期期中考试卷及答案(共四套)
- 2026年安全员项目负责人(B证)考试题库含答案
- 生产运行部水泥工序2026年复工复产全员安全教育培训试题
- 生态责任保护承诺书4篇
- 项目按时完成精准承诺函范文4篇
- 牵引术后的护理措施
- 国门生物安全小学课件
- 钢楼梯施工流程方案
- (2025版)中国癫痫性猝死预防指南课件
- 专项1 代数推理题课件++2026年中考数学一轮专题复习(安徽)
- 新生儿安全管理制度
- 中国航空油料校招面试题及答案
- 办公厕所改造施工方案
- 打桩工三级安全教育试题及答案
- DB37∕T 5123-2018 预拌混凝土及砂浆企业试验室管理规范
- 袜子玩偶课件
- 水闸门操作知识培训课件
评论
0/150
提交评论