《文本编辑器8328942.doc》由会员分享,可在线阅读,更多相关《文本编辑器8328942.doc(27页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流文本编辑器8328942.精品文档.目录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 退出时的代码:1
2、56.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、代码,掌握帮助的使用方法。 3、掌握常用控件以及控件的常用属性的使用方法。4、界面要做到简洁易懂,具有人性化等特点。5、程序没有在使用过程中不存在任何的问题。 6、通过使用C#编写程序,可以发现能完成任务,能够编写出文本编辑器应有的基础功能。引言文本编辑器是常用的简便工具。本设计完成的功能类似于Windows操作系统的记事本工具,又添加了多文档接口支持,以及更丰富的字体样式控制。利用C#完成文本编辑器的开发,实现以下功能:文档读写:打开文件(包括普通文本文件和富文本文件); 保存文件(包括另存为);文档编辑(包括输入、修改、复制、粘贴、重做、撤销、查找、替换、设置字体样式等);打印及打印页面设
4、置;配置功能,完成状态栏的显示设置和文件的定时自动保存设置; 操作系统和软件开发包往往都提供文本编辑器,用以修改配置文件和程序的源代码。市场上出现的和用户所使用的文本编辑器种类繁多,功能也是各式各样,其中有相当一部分是很优秀的。但是面向底层用户的的操作简单的,界面友好的,集文本操作、编辑操作、格式操作于一体的编辑器并不多见。目前市面上现有的如office中的word还有WPS等大众文本编辑器虽然功能也十分齐全,但是本身往往就是数百兆甚至几个G,占用资源非常大,而且对于电脑本身的性能要求也比较高,甚至有部分专业的文本编辑器需要付费使用。 本次毕业设计所研究的就是编写一个功能完整,占用资源较少的,
5、操作简单适用于大众的文本编辑器。该编辑器要求可以实现新建、保存、打开等基本文件操作,还要求具有复制、粘贴、剪切、撤消等基本文本编辑操作以及字体选择、颜色设置、格式设置等格式操作。同时,该文本编辑器号要求具备丰富的快捷方式和热键,以方便用户进行操作,降低操作难度,提高工作效率。同时,由于文本编辑器要求占用资源少,所以本身需要启动的进程必须较少,以节约系统资源。而满足上述条件的文本编辑器目前市面上尚未出现,因此本次课程设计研究十分具备可行性。1 采用技术1.1. visual studio 2010编辑环境Visual Studio 是微软公司推出的开发环境。是目前最流行的 Windows 平台应
6、用程序开发环境。目前已经开发到 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 F
7、ramework 的功能,通过此框架可使用简化 ASP Web 应用程序和 XML Web Services 开发的关键技术。1.2.C#的窗体编程Windows 窗体是用于 Microsoft Windows 应用程序开发的、基于 .NET Framework 的新平台。此框架提供一个有条理的、面向对象的、可扩展的类集,使您能够开发功能丰富的 Windows 应用程序。另外,Windows 窗体可作为多层分布式解决方案中的本地用户界面。窗体是一种文档,可以用来收集信息。它包括两部分,一部分是由窗体设计者输入的,填写窗体的人无法更改的文字或图形。窗体设计者可以插入希望得到回答的问题、选项列表、
8、信息表格等。另一部分是由窗体填写者输入的,用于从填写窗体者处收集信息并进行整理的空白区域。窗体设计者可以在文档中插入窗体域或 ActiveX 控件,为窗体填写者提供用于收集数据的位置。2 选题说明随着科技的发展,人们对精神生活要求的越来越高,纸质的手动式的书写方式已经不是能够代表新世纪的生活需要了,所以现在各种不同功能的文本编辑器已经悄悄走进我们的生活和学习中,像简单的就有记事本。 但是一个简单的文本编辑器也是很重要的,是基础。所以在结合自己的一个学期的很认真的学习c#后,决定自己编译一个类似与记事本的,但功能比记事本强大的文本编辑器。3 总体说明3.1程序的基本结构操作界面的主窗口为文本编辑
9、器的主入口,类似于记事本的形式,菜单栏要如下的几项(),另外还有两个简单的toolstripe式的图片按钮,分别是新建和保存。当点击新建的时候,会弹出我们将要编辑的文档文本窗口,这是我们编写文字的地方。书写完毕后,要先确认是否保存此文件夹,这样就不会发生自己所编辑的内容会丢失。3.2程序的主要技术(1) 编写要先新建,编写之后要有保存功能;(2) 还可以设置文字的字体字形和字体的颜色;(3) 实现文字替换与查找功能;(4) 可以进行打印、打印预览;(5)状态栏能够实时反映输入状态;4 详细说明4.1 界面设计打开Visual Studio 2010开发工具,新建一个Windows应用程序,然后
10、在窗体上依次放置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 状态栏的功能为了确保退出前能够保存文件,减少误操作,在关闭窗口时加入
11、了提示功能,结果如图4-8所示:图4-7 状态栏的功能查找和替换功能的实现,结果如图4-8所示:图4-8 查找和替换功能5 遇到的问题和解决方法5.1 未考虑到生成文档窗体在主窗体中的显示解决办法:在参照样的时候例程序,发现文档是显示在主窗体内部,结合自己的所学,发现设置主窗体的属性记事本()。 f.MdiParent = this; count+; f.Text = 新建文本 + count;设置成Mdiparent属性即可。5.2 不知到什么属性被修改,导致主窗体关闭失效 解决办法:在菜单文件中设置关闭程序的命令,并申请了菜单合并,不需要在新建文档的情况下就能关闭主窗体,现在仍然留下一个让
12、人深究的问题,究竟是什么样的属性才是控制最大化,最小化,以及关闭的显隐性,有待继续学习。这是自己在程序完成的时候出现的意外,但是确是我在编写过程中遇到的最大难题。5.3 未考虑到文档关闭时,文档是否保存解决办法:这是细节问题,其实是很容易做到,当关闭的时候显示一个对话框提示一下即可。6 程序详细设计代码6.1 主窗体结构和属性值控件属性属性值说明FormNamefrmEditorText文本文件编辑器Font宋体,五号MenuStripNamemsEditor菜单条ToolStripMenuItemNamemnFile文件菜单Text文件ToolStripMenuItemNamemiFileN
13、ewText新建ToolStripMenuItemNamemiFileOpenText打开ToolStripMenuItemNamemiFileSaveText保存ToolStripMenuItemNamemiFileSaveAsText另存为ToolStripMenuItemNamemiFileExitText退出ToolStripMenuItemNamemnEdit编辑菜单Text编辑ToolStripMenuItemNamemiEditCutText剪切ToolStripMenuItemNamemiEditCopyText复制ToolStripMenuItemNamemiEditPast
14、eText粘贴ToolStripMenuItemNamemiEditUnDoText撤消ToolStripMenuItemNamemiEditReDoText恢复ToolStripMenuItemNamemiEditFindText查找ToolStripMenuItemNamemiEditReplaceText替换ToolStripMenuItemNamemnStyle格式菜单Text格式ToolStripMenuItemNamemiStyleFontText字体ToolStripMenuItemNamemiStyleColorText颜色ToolStripMenuItemNamemiStyl
15、eAlignLeftText左对齐ToolStripMenuItemNamemiStyleAlignCenterText中对齐ToolStripMenuItemNamemiStyleAlignRightText右对齐ToolStripMenuItemNamemiStyleIndentText缩进ToolStripMenuItemNamemnPrint打印菜单Text打印ToolStripNametsEditor工具条StatusStripNamessEditor状态条RichTextBoxNamertbEditor富格式文本编辑器DockFillOpenFileDialogNamedlgOpe
16、n打开文件对话框PrintDocumentNamedocPrint打印文档控件6.2 工具栏实现制作图标:每个按钮做一个图标文件,大小为16*16,参见FileNew.bmp,FileOpen.bmp,FileSave.bmp,EditCut.bmp,EditCopy.bmp,EditPaste.bmp。制作按钮:在工具栏添加按钮并装入每个按钮的图象,图标命名:tsbFileName,tsbFileOpen,tsbFileSave,sbEditCut,tsbEditCopy, tsbEditPaste控件属性属性值说明ToolStripButtonNametsbFileNew新建文件Image
17、FileNew.bmpimageTransparentColorOliveToolStripButtonNametsbFileOpen打开文件ImageFileOpen.bmpimageTransparentColorOliveToolStripButtonNametsbFileSave保存文件ImageFileSave.bmpimageTransparentColorOliveToolStripButtonNametsbEditCut剪切ImageEditCut.bmpimageTransparentColorOliveToolStripButtonNametsbEditCopy编辑Imag
18、eEditCopy.bmpimageTransparentColorOliveToolStripButtonNametsbEditPaste粘贴ImageEditPaste.bmpimageTransparentColorOlive设计完成后的效果如下图:6.3 打开、保存文件的代码实现:打开:private void miFileOpen_Click_1(object sender, EventArgs e) dlgOpen.Filter = 文本文件(*.txt)|*.txt|富格式文件 (*.rtf)|*.rtf|所有文件(*.*)|*.*; if (dlgOpen.ShowDialog
19、() = 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) / 动态创建一个
20、文件保存对话框 SaveFileDialog dlgSave = new SaveFileDialog(); / 设置保存对话框的默认参数 dlgSave.InitialDirectory = c:tmp; dlgSave.Filter = 文本文件(*.txt)|*.txt|富格式文件 (*rtf)|*.rtf|所有文件(*.*)|*.*; dlgSave.Title = 保存我的文件; / 显示保存对话框 if (dlgSave.ShowDialog() = DialogResult.OK)/ 表示按下 “确认”按钮 _fileName = dlgSave.FileName; / 如果扩展
21、名为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; re
22、sult = 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)|*.
23、txt| (*rtf)|*.rtf|所有文件(*.*)|*.*; dlgSave.Title = 保存我的文件; / 显示保存对话框 if (dlgSave.ShowDialog() = DialogResult.OK) / 表示按下“确认”按钮 _fileName = dlgSave.FileName; / 得到用户指 定的文件名 / 如果扩展名为rtf格式,则以RTF格式保存文件, 否则以普通文本格式保存文件 if (Path.GetExtension(_fileName) = .rtf) rtbEditor.SaveFile(_fileName, RichTextBoxStreamTyp
24、e.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, Eve
25、ntArgs 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()
26、; 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;
27、/ 显示字体对话框,且用户按下了“确认”按钮 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;priva
28、te 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的MouseD
29、own消息,得到光标的位置,进而得到光标的行号和列号。响应文本编辑器rtbEditor的KeyUp消息,得到光标的位置,进而得到光标的行号和列号。 private void rtbEditor_MouseDown(object sender, MouseEventArgs e) / 根据光标所在象素位置,得到字符索引号 int nCharIndex = rtbEditor.GetCharIndexFromPosition(new Point(e.X, e.Y); / 根据字符索引号,得到所在行号和列号 int nRowNo = rtbEditor.GetLineFromCharIndex(nC
30、harIndex); 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) / 根据光标所在位置
31、,得到字符索引号 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
32、); tsslColNo.Text = string.Format(列:0, nColNo);6.8 查找替换页的实现添加一个新的窗体文件控件属性属性值说明FormNamefrmFindAndReplace查找与替换Text查找和替换Font宋体,五号TopMostTrue总显示在最上面TabControlNametabControl1卡片控制TabPageNametabFind卡片页:查找Text查找TabPageNametabReplace卡片页:替换Text替换TextBoxNametxtFindFind查找页:查找文本CheckBoxNamecbFindWholeWord查找页:全字匹
33、配Text全字匹配CheckBoxNamecbFindMatchCase查找页:区分大小写Text区分大小写ButtonNamebtnFindFindNext查找页:查找下一个Text查找下一个ButtonNamebtnFindCancel查找页:取消Text取消TextBoxNametxtReplaceFind替换页:查找文本TextBoxNametxtReplaceReplace替换页:替换文本CheckBoxNamecbReplaceWholeWord替换页:全字匹配Text全字匹配CheckBoxNamecbReplaceMatchCase替换页:区分大小写Text区分大小写Butto
34、nNamebtnReplaceFindNext查找页:查找下一个Text查找下一个ButtonNamebtnReplaceReplace查找页:替换Text替换ButtonNamebtnReplaceReplaceAll查找页:全部替换Text全部替换ButtonNamebtnReplaceCancel查找页:取消Text取消private void btnFindFindNext_Click(object sender, EventArgs e) _findStr = txtFindFind.Text; _findOption = RichTextBoxFinds.None; if (cbF
35、indWholeWord.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, Eve
36、ntArgs 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_Cli
37、ck(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.Chec
限制150内