




已阅读5页,还剩28页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录1 采用技术11.1. visual studio 2010编辑环境11.2.c#的窗体编程12 选题说明23 总体说明33.1程序的基本结构33.2程序的主要技术34 详细说明44.1 界面设计45 遇到的问题和解决方法105.1 未考虑到生成文档窗体在主窗体中的显示105.2 不知到什么属性被修改,导致主窗体关闭失效105.3 未考虑到文档关闭时,文档是否保存106 程序详细设计代码116.1 主窗体结构和属性值116.2 工具栏实现136.3 打开、保存文件的代码实现:146.4 退出时的代码:156.5 编辑栏功能的实现(剪切、复制等)166.6 字体和颜色部分的实现176.7 在状态栏实时显示光标的位置196.8 查找替换页的实现206.9 打印功能实现23参考文献28文本编辑器摘要c#文本编辑器是一个关于文本编辑器的小程序,运用一些简单的记事本的基本操作功能来实现的。该程序利用c#程序编写,在visual studio 2010的环境下进行调试运行的,能够对文本进行简单编辑处理,如:剪切、复制等。对于该程序开发,必须达到以下要求:1、熟悉.net开发环境,能够使用c#语言在.net平台上独立设计、开发windows应用程序。 2、掌握c#语言的异常处理技术,能够使用.net各种调试方法调试代码,掌握帮助的使用方法。 3、掌握常用控件以及控件的常用属性的使用方法。4、界面要做到简洁易懂,具有人性化等特点。5、程序没有在使用过程中不存在任何的问题。 6、通过使用c#编写程序,可以发现能完成任务,能够编写出文本编辑器应有的基础功能。引言文本编辑器是常用的简便工具。本设计完成的功能类似于windows操作系统的记事本工具,又添加了多文档接口支持,以及更丰富的字体样式控制。利用c#完成文本编辑器的开发,实现以下功能:文档读写:打开文件(包括普通文本文件和富文本文件); 保存文件(包括另存为);文档编辑(包括输入、修改、复制、粘贴、重做、撤销、查找、替换、设置字体样式等);打印及打印页面设置;配置功能,完成状态栏的显示设置和文件的定时自动保存设置; 操作系统和软件开发包往往都提供文本编辑器,用以修改配置文件和程序的源代码。市场上出现的和用户所使用的文本编辑器种类繁多,功能也是各式各样,其中有相当一部分是很优秀的。但是面向底层用户的的操作简单的,界面友好的,集文本操作、编辑操作、格式操作于一体的编辑器并不多见。目前市面上现有的如office中的word还有wps等大众文本编辑器虽然功能也十分齐全,但是本身往往就是数百兆甚至几个g,占用资源非常大,而且对于电脑本身的性能要求也比较高,甚至有部分专业的文本编辑器需要付费使用。 本次毕业设计所研究的就是编写一个功能完整,占用资源较少的,操作简单适用于大众的文本编辑器。该编辑器要求可以实现新建、保存、打开等基本文件操作,还要求具有复制、粘贴、剪切、撤消等基本文本编辑操作以及字体选择、颜色设置、格式设置等格式操作。同时,该文本编辑器号要求具备丰富的快捷方式和热键,以方便用户进行操作,降低操作难度,提高工作效率。同时,由于文本编辑器要求占用资源少,所以本身需要启动的进程必须较少,以节约系统资源。而满足上述条件的文本编辑器目前市面上尚未出现,因此本次课程设计研究十分具备可行性。文本编辑器1 采用技术1.1. visual studio 2010编辑环境visual studio 是微软公司推出的开发环境。是目前最流行的 windows 平台应用程序开发环境。目前已经开发到 10.0 版。 visual studio 可以用来创建 windows 平台下的 windows 应用程序和网络应用程序,也可以用来创建网络服务、智能设备应用程序和 office 插件。visual studio 是一套完整的开发工具集,用于生成 asp.net web 应用程序、xml web services、桌面应用程序和移动应用程序。visual basic、visual c+、visual c# 和 visual j# 全都使用相同的集成开发环境 (ide),利用此 ide 可以共享工具且有助于创建混合语言解决方案。另外,这些语言利用了 .net framework 的功能,通过此框架可使用简化 asp web 应用程序和 xml web services 开发的关键技术。1.2.c#的窗体编程windows 窗体是用于 microsoft windows 应用程序开发的、基于 .net framework 的新平台。此框架提供一个有条理的、面向对象的、可扩展的类集,使您能够开发功能丰富的 windows 应用程序。另外,windows 窗体可作为多层分布式解决方案中的本地用户界面。窗体是一种文档,可以用来收集信息。它包括两部分,一部分是由窗体设计者输入的,填写窗体的人无法更改的文字或图形。窗体设计者可以插入希望得到回答的问题、选项列表、信息表格等。另一部分是由窗体填写者输入的,用于从填写窗体者处收集信息并进行整理的空白区域。窗体设计者可以在文档中插入窗体域或 activex 控件,为窗体填写者提供用于收集数据的位置。 文本编辑器2 选题说明随着科技的发展,人们对精神生活要求的越来越高,纸质的手动式的书写方式已经不是能够代表新世纪的生活需要了,所以现在各种不同功能的文本编辑器已经悄悄走进我们的生活和学习中,像简单的就有记事本。 但是一个简单的文本编辑器也是很重要的,是基础。所以在结合自己的一个学期的很认真的学习c#后,决定自己编译一个类似与记事本的,但功能比记事本强大的文本编辑器。文本编辑器3 总体说明3.1程序的基本结构操作界面的主窗口为文本编辑器的主入口,类似于记事本的形式,菜单栏要如下的几项(),另外还有两个简单的toolstripe式的图片按钮,分别是新建和保存。当点击新建的时候,会弹出我们将要编辑的文档文本窗口,这是我们编写文字的地方。书写完毕后,要先确认是否保存此文件夹,这样就不会发生自己所编辑的内容会丢失。3.2程序的主要技术(1) 编写要先新建,编写之后要有保存功能;(2) 还可以设置文字的字体字形和字体的颜色;(3) 实现文字替换与查找功能;(4) 可以进行打印、打印预览;(5)状态栏能够实时反映输入状态;文本编辑器4 详细说明4.1 界面设计打开visual studio 2010开发工具,新建一个windows应用程序,然后在窗体上依次放置1个menustrip菜单栏和1个toolstrip工具栏,如图4-1所示(设置好属性后)。图4-1 编辑器用户界面运行程序,新建文档。如图4-2所示。图4-2新建文本文档文本编辑器运行程序,设置字体的大小和粗细,以及字体的颜色。如图4-3所示图4-3 字体大小及颜色单击保存按钮,保存所编辑的文本。结果如图4-4所示。文本编辑器图4-4 保存文本单击文件按钮,能够实现如下的功能,结果如图4-5所示。图4-5 菜单文件的功能单击编辑按钮,功能如下,结果如图4-6所示文本编辑器图4-6 菜单编辑的功能状态栏的功能,结果如图4-7所示:图4-7 状态栏的功能为了确保退出前能够保存文件,减少误操作,在关闭窗口时加入了提示功能,结果如图4-8所示:文本编辑器图4-7 状态栏的功能查找和替换功能的实现,结果如图4-8所示:c#文本编辑器图4-8 查找和替换功能文本编辑器5 遇到的问题和解决方法5.1 未考虑到生成文档窗体在主窗体中的显示解决办法:在参照样的时候例程序,发现文档是显示在主窗体内部,结合自己的所学,发现设置主窗体的属性记事本()。 f.mdiparent = this; count+; f.text = 新建文本 + count;设置成mdiparent属性即可。5.2 不知到什么属性被修改,导致主窗体关闭失效 解决办法:在菜单文件中设置关闭程序的命令,并申请了菜单合并,不需要在新建文档的情况下就能关闭主窗体,现在仍然留下一个让人深究的问题,究竟是什么样的属性才是控制最大化,最小化,以及关闭的显隐性,有待继续学习。这是自己在程序完成的时候出现的意外,但是确是我在编写过程中遇到的最大难题。5.3 未考虑到文档关闭时,文档是否保存解决办法:这是细节问题,其实是很容易做到,当关闭的时候显示一个对话框提示一下即可。文本编辑器6 程序详细设计代码6.1 主窗体结构和属性值控件属性属性值说明formnamefrmeditortext文本文件编辑器font宋体,五号menustripnamemseditor菜单条toolstripmenuitemnamemnfile文件菜单text文件toolstripmenuitemnamemifilenewtext新建toolstripmenuitemnamemifileopentext打开toolstripmenuitemnamemifilesavetext保存toolstripmenuitemnamemifilesaveastext另存为toolstripmenuitemnamemifileexittext退出toolstripmenuitemnamemnedit编辑菜单text编辑toolstripmenuitemnamemieditcuttext剪切toolstripmenuitemnamemieditcopytext复制toolstripmenuitemnamemieditpastetext粘贴toolstripmenuitemnamemieditundotext撤消toolstripmenuitemnamemieditredotext恢复toolstripmenuitemnamemieditfindtext查找toolstripmenuitemnamemieditreplacetext替换toolstripmenuitemnamemnstyle格式菜单text格式toolstripmenuitemnamemistylefonttext字体toolstripmenuitemnamemistylecolortext颜色toolstripmenuitemnamemistylealignlefttext左对齐toolstripmenuitemnamemistylealigncentertext中对齐toolstripmenuitemnamemistylealignrighttext右对齐toolstripmenuitemnamemistyleindenttext缩进toolstripmenuitemnamemnprint打印菜单text打印toolstripnametseditor工具条statusstripnamesseditor状态条richtextboxnamertbeditor富格式文本编辑器dockfillopenfiledialognamedlgopen打开文件对话框printdocumentnamedocprint打印文档控件文本编辑器6.2 工具栏实现制作图标:每个按钮做一个图标文件,大小为16*16,参见filenew.bmp,fileopen.bmp,filesave.bmp,editcut.bmp,editcopy.bmp,editpaste.bmp。制作按钮:在工具栏添加按钮并装入每个按钮的图象,图标命名:tsbfilename,tsbfileopen,tsbfilesave,sbeditcut,tsbeditcopy, tsbeditpaste控件属性属性值说明toolstripbuttonnametsbfilenew新建文件imagefilenew.bmpimagetransparentcolorolivetoolstripbuttonnametsbfileopen打开文件imagefileopen.bmpimagetransparentcolorolivetoolstripbuttonnametsbfilesave保存文件imagefilesave.bmpimagetransparentcolorolivetoolstripbuttonnametsbeditcut剪切imageeditcut.bmpimagetransparentcolorolivetoolstripbuttonnametsbeditcopy编辑imageeditcopy.bmpimagetransparentcolorolivetoolstripbuttonnametsbeditpaste粘贴imageeditpaste.bmpimagetransparentcolorolive设计完成后的效果如下图:6.3 打开、保存文件的代码实现:打开:private void mifileopen_click_1(object sender, eventargs e) dlgopen.filter = 文本文件(*.txt)|*.txt|富格式文件 (*.rtf)|*.rtf|所有文件(*.*)|*.*; if (dlgopen.showdialog() = dialogresult.ok) _filename = dlgopen.filename; if (path.getextension(_filename) = .rtf) rtbeditor.loadfile(_filename, richtextboxstreamtype.richtext); else rtbeditor.loadfile(_filename, richtextboxstreamtype.plaintext); 保存(另存为):private void mifilesaveas_click(object sender, eventargs e) / 动态创建一个文件保存对话框 savefiledialog dlgsave = new savefiledialog(); / 设置保存对话框的默认参数 dlgsave.initialdirectory = c:tmp; dlgsave.filter = 文本文件(*.txt)|*.txt|富格式文件 (*rtf)|*.rtf|所有文件(*.*)|*.*; dlgsave.title = 保存我的文件; / 显示保存对话框 if (dlgsave.showdialog() = dialogresult.ok)/ 表示按下 “确认”按钮 _filename = dlgsave.filename; / 如果扩展名为rtf格式,则以rtf格式保存文件,否则 以普通文本格式保存文件 if (path.getextension(_filename) = .rtf) rtbeditor.savefile(_filename, richtextboxstreamtype.richtext); else rtbeditor.savefile(_filename, richtextboxstreamtype.plaintext); 6.4 退出时的代码: private void mifileexit_click(object sender, eventargs e) dialogresult result; result = messagebox.show(退出前是否保存, 退出, messageboxbuttons.yesnocancel, messageboxicon.question); if (result = dialogresult.no) this.close(); else if (result = dialogresult.yes) savefiledialog dlgsave = new savefiledialog(); / 设置保存对话框的默认参数 dlgsave.initialdirectory = c:tmp; dlgsave.filter = 文本文件(*.txt)|*.txt| (*rtf)|*.rtf|所有文件(*.*)|*.*; dlgsave.title = 保存我的文件; / 显示保存对话框 if (dlgsave.showdialog() = dialogresult.ok) / 表示按下“确认”按钮 _filename = dlgsave.filename; / 得到用户指 定的文件名 / 如果扩展名为rtf格式,则以rtf格式保存文件, 否则以普通文本格式保存文件 if (path.getextension(_filename) = .rtf) rtbeditor.savefile(_filename, richtextboxstreamtype.richtext); else rtbeditor.savefile(_filename, richtextboxstreamtype.plaintext); 6.5 编辑栏功能的实现(剪切、复制等)private void mieditcut_click(object sender, eventargs e) rtbeditor.cut(); private void mieditcopy_click(object sender, eventargs e) rtbeditor.copy(); private void mieditpaste_click(object sender, eventargs e) rtbeditor.paste(); private void mieditredo_click(object sender, eventargs e) rtbeditor.redo(); private void mieditundo_click(object sender, eventargs e) rtbeditor.undo(); 6.6 字体和颜色部分的实现private void mistylefont_click(object sender, eventargs e) / 创建字体对话框 fontdialog dlgfont = new fontdialog(); dlgfont.showcolor = true; dlgfont.showapply = true; / 设置字体对框的默认字体, / 如果已经有选择文本,则设置为选择文本的字体和颜色 / 否则设置为全文的字体和姿色 if (rtbeditor.selectionlength 0) dlgfont.font = rtbeditor.selectionfont; dlgfont.color = rtbeditor.selectioncolor; else dlgfont.font = rtbeditor.font; dlgfont.color = rtbeditor.forecolor; / 显示字体对话框,且用户按下了“确认”按钮 if (dlgfont.showdialog() = dialogresult.ok) / 如果有选择文件,刚修改选择文本的字体和颜色 if (rtbeditor.selectionlength 0) rtbeditor.selectionfont = dlgfont.font; rtbeditor.selectioncolor = dlgfont.color; / 否则修改整个文本的字体和颜色 else rtbeditor.font = dlgfont.font; rtbeditor.forecolor = dlgfont.color; private void mistylecolor_click(object sender, eventargs e) colordialog dlgcolor = new colordialog(); if (dlgcolor.showdialog() = dialogresult.ok) if (rtbeditor.selectionlength 0) rtbeditor.selectioncolor = dlgcolor.color; else rtbeditor.forecolor = dlgcolor.color; 6.7 在状态栏实时显示光标的位置响应文本编辑器rtbeditor的mousedown消息,得到光标的位置,进而得到光标的行号和列号。响应文本编辑器rtbeditor的keyup消息,得到光标的位置,进而得到光标的行号和列号。 private void rtbeditor_mousedown(object sender, mouseeventargs e) / 根据光标所在象素位置,得到字符索引号 int ncharindex = rtbeditor.getcharindexfromposition(new point(e.x, e.y); / 根据字符索引号,得到所在行号和列号 int nrowno = rtbeditor.getlinefromcharindex(ncharindex); int nfirstcharindex = rtbeditor.getfirstcharindexfromline(nrowno); int ncolno = ncharindex - nfirstcharindex; / 在状态栏上显示行号和列号 tsslrowno.text = string.format(行:0, nrowno + 1); tsslcolno.text = string.format(列:0, ncolno); private void rtbeditor_keyup(object sender, keyeventargs e) / 根据光标所在位置,得到字符索引号 int ncharindex = rtbeditor.selectionstart; / 根据字符索引号,得到所在行号和列号 int nrowno = rtbeditor.getlinefromcharindex(ncharindex); int nfirstcharindex = rtbeditor.getfirstcharindexfromline(nrowno); int ncolno = ncharindex - nfirstcharindex; / 在状态栏上显示行号和列号 tsslrowno.text = string.format(行:0, nrowno + 1); tsslcolno.text = string.format(列:0, ncolno);6.8 查找替换页的实现添加一个新的窗体文件控件属性属性值说明formnamefrmfindandreplace查找与替换text查找和替换font宋体,五号topmosttrue总显示在最上面tabcontrolnametabcontrol1卡片控制tabpagenametabfind卡片页:查找text查找tabpagenametabreplace卡片页:替换text替换textboxnametxtfindfind查找页:查找文本checkboxnamecbfindwholeword查找页:全字匹配text全字匹配checkboxnamecbfindmatchcase查找页:区分大小写text区分大小写buttonnamebtnfindfindnext查找页:查找下一个text查找下一个buttonnamebtnfindcancel查找页:取消text取消textboxnametxtreplacefind替换页:查找文本textboxnametxtreplacereplace替换页:替换文本checkboxnamecbreplacewholeword替换页:全字匹配text全字匹配checkboxnamecbreplacematchcase替换页:区分大小写text区分大小写buttonnamebtnreplacefindnext查找页:查找下一个text查找下一个buttonnamebtnreplacereplace查找页:替换text替换buttonnamebtnreplacereplaceall查找页:全部替换text全部替换buttonnamebtnreplacecancel查找页:取消text取消private void btnfindfindnext_click(object sender, eventargs e) _findstr = txtfindfind.text; _findoption = richtextboxfinds.none; if (cbfindwholeword.checked) _findoption |= richtextboxfinds.wholeword; if (cbfindmatchcase.checked) _findoption |= richtextboxfinds.matchcase; _editor.find(_findstr, _findoption); private void btnfindcancel_click(object sender, eventargs e) close(); private void btnreplacefindnext_click(object sender, eventargs e) _findstr = txtreplacefind.text; _findoption = richtextboxfinds.none; if (cbreplacewholeword.checked) _findoption |= richtextboxfinds.wholeword; if (cbreplacematchcase.checked) _findoption |= richtextboxfinds.matchcase; _editor.find(_findstr, _findoption); private void btnreplacereplace_click(object sender, eventargs e) _findstr = txtreplacefind.text; _replacestr = txtreplacereplace.text; _findoption = richtextboxfinds.none; _editor.replace(_findstr, _replacestr, _findoption); if (cbreplacewholeword.checked) _findoption |= richtextboxfinds.wholeword; if (cbreplacematchcase.checked) _findoption |= richtextboxfinds.matchcase; private void btnreplacereplaceall_click(object sender, eventargs e) _findstr = txtreplacefind.text; _replacestr = txtreplacereplace.text; _findoption = richtextboxfinds.none; if (cbreplacewholeword.checked) _findoption |= richtextboxfinds.wholeword; if (cbreplacematchcase.checked) _findoption |= richtextboxfinds.matchcase; _editor.replaceall(_findstr, _replacestr, _findoption); private void btnreplacecancel_click(object sender, eventargs e) close(); private void txtfindfind_textchanged(object sender, eventargs e) if (txtfindfind.text != ) btnfindfindnext.enabled = true; else btnfindfindnext.enabled = false; 6.9 打印功能实现无论是预览还是打印,主要还是要依赖printdocument控件来完成的,响应该控件的printpage事件,在该事件响应中真正输出每页的内容。下面几个功能的实现,有些内容是相互关系,如:要显示或打印的内容、当前显示或打印的字体、当前的打印机设置和页面设置,所以,添加四个数据成员如下:/ 下面几个数据成员用于打印 private stringreader _srprint = null; / 打印的内容 private font _printfont; / 打印字体 printersettings _printersettings = new printersettings(); / 打印机设置 pagesettings _pagesettings = new pagesettings(); / 页面设置6.9.1 预览创建打印预览对话框,将当前编辑器中的文本读到一个文本流stringreader中,设置打印字体与文件编辑器中的字体相同,设置printdocument控件的页面设置为用户设置的值,将printdocument控件与预览对话框关联起来,调用预览对话框,即可预览文本编辑器中的内容。 private void mifilepreview_click(object sender, eventargs e) printpreviewdialog dlgprintpreview = new printpreviewdialog(); dlgprintpreview.document = new system.drawing.printing.printdocument(); dlgprintpreview.formborderstyle = formborderstyle.fixed3d; dlgprintpreview.showdialog(); 6.9.2 打印创建打印对话框,将当前编辑器中的文本读到一个文本流stringreader中,设置打印字体与文件编辑器中的字体相同,设置printdocument控件的页面设置为用户设置的值,将printdocument控件与打印对话框关联起来,调用打印对话框,即可打印文本编辑器中的内容。 private void mnprint_click(object sender, eventargs e) dlgprint.document = docprint; if (dlgprint.showdialog() != dialogresult.cancel) docprint.print(); 6.9.3 设置打印机和设置页面这两个功能是关联的,以设置页面为主,在设置页面中包含了设置打印机功能。创建页面设置对话框,设置对话框的当前打印机参数和页面参数,显示对话框,用户可以修改打印机或页面
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 黄金销售管理办法
- 煤矿职业病防治法课件教学
- 省工伤康复管理办法
- 电能量采集管理办法
- 班班通使用管理办法
- 乘车生安全管理办法
- 油田基层队管理办法
- 电大资源与管理办法
- 石子厂生活管理办法
- 上虞区代建管理办法
- 印章交接表(可编辑)
- 全屋智能合同范例
- 光伏发电+储能项目三期项目建筑安装工程投标方案(技术方案)
- 安全生产管理体系建设(共27张课件)
- GB/T 44457-2024加氢站用储氢压力容器
- 留置胃管课件
- DL∕T 5776-2018 水平定向钻敷设电力管线技术规定
- 大学英语1(工科版)智慧树知到期末考试答案章节答案2024年湖南工学院
- 《智能网联汽车技术概论》课件
- 2024年湖北省黄冈市黄梅县黄梅镇招聘社区工作人员12人历年高频难、易点(公共基础测验共200题含答案解析)模拟试卷附答案
- 旅店会客登记制度
评论
0/150
提交评论