文本编辑器

上传人:d**** 文档编号:161355554 上传时间:2022-10-14 格式:DOCX 页数:11 大小:188.71KB
返回 下载 相关 举报
文本编辑器_第1页
第1页 / 共11页
文本编辑器_第2页
第2页 / 共11页
文本编辑器_第3页
第3页 / 共11页
点击查看更多>>
资源描述
实验十七 文本编辑器【实验目的】 掌握界面设计过程中菜单、工具栏与状态栏的使用方法 掌握对话框和RichTextBox控件的使用方法。 掌握界面布局的步骤和技术【实验步骤】一单文档文本编辑器 创建窗体应用程序,项目名称为 L17_1.1. 文件存取功能文本编辑器都具有文件存取功能,包括新建、打开、关闭、保存和另存为等功能。(1) 为新建菜单项增加事件处理函数如下:private void menuItemFileNew_Click(object sender, System.EventArgs e)richTex tBoxl.Tex t二;/或 richTex tBoxl.Clear();s_FileName二;/新建文件没有文件名。(2) 为打开文件菜单项增加事件处理函数如下:privatevoid menuItemFileOpen_Click(object sender, System.EventArgs e) if(openFileDialog1.ShowDialog()=DialogResult.OK) s_FileName=openFileDialog1.FileName; richTextBox1.LoadFile(openFileDialog1.FileName,RichTextBoxStreamType.PlainText);(3) 为另存为菜单项增加事件处理函数如下:privatevoid menuItemFileSaveAs_Click(object sender, System.EventArgs e) if(saveFileDialog1.ShowDialog()=DialogResult.OK) s_FileName=saveFileDialog1.FileName; richTextBox1.SaveFile(saveFileDialog1.FileName,RichTextBoxStreamType.PlainText); /注意存取文件类型应一致。(4) 为保存文件菜单项增加事件处理处理函数如下:privatevoid menuItemSaveFile_Click(object sender, System.EventArgs e) if(s_FileName.Length!=0) richTextBox1.SaveFile(s_FileName,RichTextBoxStreamType.PlainText);elsemenuI temFileSaveAs_Click(sender,e);/调用另存为菜单项事件处理函数 (5) 为退出菜单项增加事件处理函数如下:privatevoid menuItemExit_Click(object sender, System.EventArgs e) Close();2. 文本的编辑功能剪贴、复制、粘贴、撤销和恢复private void MenuItemEditCut_Click(object sender, EventArgs e)/to do 剪切private void MenuItemEditCopy_Click(object sender, EventArgs e)/to do 复制private void MenuItemEditPaste_Click(object sender, EventArgs e)/to do 粘贴private void MenuItemEditUndo_Click(object sender, EventArgs e)/to do 撤销private void MenuItemEditRedo_Click(object sender, EventArgs e)/to do 恢复查找替换功能(6) 建立查找替换对话框。添加Windows窗体,输入窗体文件名称:formFindReplace.cs。(7) 修改 formFindReplace 窗体 属性StartPosition二CenterParent,表示打开对话框时,对话框在父窗口的中间。 修改属性MaximizeBox=False, MinimizeBox二False,表示没有最大化和最小化按钮, 既不能最大化和最小化。 FormBorderS tyle二FixedDialog,窗口不能修改大小。 属性Text=查找和替换。 修改属性TopMost=true,使该窗口打开时总在其 它窗体的前边。在窗体中增加两个Label控件,属性Text分别为查找字符串和替换字符串。两个Text Box控件,属性Text=。两个按钮,属性Text分别为查找下一个和替换查到字符。对话框界面如右图。(8) 为 formFindReplace 窗体增加变量:Forml MainForml;(9) 修改formFindReplace类构造函数如下(阴影部分是所做的修改): public formFindReplace (Forml forml)/增加参数/Windows窗体设计器支持所必需的 InitializeComponent();/TODO:在Ini tializeComponen t调用后添加任何构造函数代码 MainForml=forml;/新增语句,这里Form 1是主窗体的属性Name的值/有了 Forml,可以在formFindReplace窗体中调用主窗体的公有方法(10) 为主窗体Forml增加方法如下,该方法将被formFindReplace窗体类调用。 publicvoid FindRichTextBoxString(string FindString) /以后步骤将在此方法中增加查找语句(11) formFindReplace 窗体中查找下一个按钮单击事件处理函数如下: privatevoid buttonFind_Click(object sender, System.EventArgs e)if (textBoxl.Text.Length!=O)/如果查找字符串不为空,调用主窗体查找方法MainForml.FindRichTex tBoxS tring( text Boxl.Tex t);/上步增加的方法 elseMessageBox.Show(查找字符串不能为空,”提示,MessageBoxBu tt ons.OK); /MessageBox 时对话框(12) 为主窗体Forml增加方法如下,该方法将被formFindReplace窗体类调用。 publicvoid ReplaceRichTextBoxString(string ReplaceString)/以后步骤将在此方法中增加替换语句(13) 为替换查到字符按钮单击事件增加事件处理函数如下: privatevoid buttonReplace_Click(object sender, System.EventArgs e) if (textBox2.Text.Length!=0)/如果查找字符串不为空,调用主窗体替换方法 MainForml.ReplaceRichTextBoxString(textBoxl.Text,textBox2.Text);else/方法MainForml.ReplaceRichTextBoxString见(26)中定义 MessageBox.Show(替换字符串不能为空,”提示,MessageBoxBu tt ons.OK);(14) 为Forml窗体增加变量:int FindPostion=0,记录查找位置。(15) 为Forml窗体编辑菜单项中增加子菜单项:查找和替换。为查找和替换菜单项单击事件 增加事件处理函数如下:privatevoid menuItemFindReplace_Click(object sender, System.EventArgs e) FindPostion=0;formFindReplace FindReplaceDialog=new formFindReplace (t his);/注意 t his FindReplaceDialog.Show();/打开非模式对话框使用Show ()方法(16) 为在前边定义的Forml主窗体的FindRichTextBoxString方法增加语句如下: publicvoid FindRichTextBoxString(string FindString)if (FindPos tion=richTex tBoxl.Tex t.Leng th)/已查到文本底部MessageBox.Show(已到文本底部,再次查找将从文本开始处查找,提示,MessageBoxButtons.OK);FindPostion=0;return;/下边语句进行查找,返回找到的位置,返回-1,表示未找到,参数1是要找的字符串 /参数2是查找的开始位置,参数3是查找的一些选项,如大小写是否匹配,查找方向等 FindPostion=richTextBox1.Find(FindString,FindPostion,RichTextBoxFinds.MatchCase);if (FindPos tion=-l)/如果未找到MessageBox.Show(已到文本底部,再次查找将从文本开始处查找,提示, MessageBoxButtons.OK);FindPos tion=0;/下次查找的开始位置else/已找到richTex tBoxl.Focus();/主窗体成为注视窗口FindPostion+=FindString.Length;/下次查找的开始位置在此次找到字符串之后(17) 为在前边定义的Forml主窗体的ReplaceRichTextBoxString方法增加语句如下: publicvoid ReplaceRichTextBoxString(string ReplaceString)辻(richTex tBoxl.Selec tedTex t.Leng th!=0)/如果选取了字符串richTex tBoxl.Selec tedTex t=ReplaceS tring;/替换被选的字符串 (18) 编译,运行,输入若干字符,选中菜单项 编辑/查找和替换,打开对话框,注意该对 话框可以在不关闭的情况下,转到主窗体, 并且总是在其它窗体的前边,因此它是一 个典型的非模式对话框。在对话框中输入查找和替换的字符,单击标题为查找下一 个的按钮,可以找到所选字符,并被选中, 单击标题为替换所选字符按钮,可以看到查找到的字符被替换。运行效果如右图:3. 修改字体属性格式菜单中有字体字号和颜色两种功能。(19) 字体字号设置放FontDialog控件到窗体,属性Name二fontDialog1。增加顶级菜单项:格式,为格式 顶级菜单项的弹出菜单增加菜单项:字体,属性 Name 分别为 mainMenuModel 和 menuI temModelFon t,为字体菜单项增加事件处理函数如下:privatevoid menuItemModelFont_Click(object sender, System.EventArgs e) /to do(20) 颜色设置同学自己完成吧。4. 打印PrintDocument 组件是用于完成打印的类,其常用属性、方法和事件如下:属性DocumentName:字符串类型,记录打印文档时显示的文档名(例如,在打印状态对话框或打印机队列中显示)。 方法Print:开始文档的打印。 事件BeginPrint:在调用Print方法后,在打印文档的第一页之前发生。 事件PrintPage:需要打印新的一页时发生。 事件EndPrint:在文档的最后一页打印后发生。若要打印, 首先创建 PrintDocument 组件的对象。 然后使用页面设置对话框 PageSetupDialog 设置页面打印方式,这些设置作为要打印的所有页的默认设置。使用打印 对话框PrintDialog设置对文档进行打印的打印机的参数。在打开两个对话框前,首先设置 对话框的属性 Document 为指定的 PrintDocument 类对象, 修改的设置将保存到 PrintDocument组件对象中。第三步是调用PrintDocument.Print方法来实际打印文档。当 调用该方法后,引发下列事件:BeginPrint、PrintPage、EndPrint。其中每打印一页都引 发PrintPage事件,打印多页,要多次引发PrintPage事件。完成一次打印,可以引发一个 或多个 PrintPage 事件。程序员应为这 3 个事件编写事件处理函数。 BeginPrint 事件处理函数进行打印初始化, 一般设置在打印时所有页的相同属性或共用的资源,例如所有页共同使用的字体、建立要打 印的文件流等。 PrintPage 事件处理函数负责打印一页数据。 EndPrint 事件处理函数进行打 印善后工作。这些处理函数的第2个参数System.Drawing.Printing.PrintEventArgs e提 供了一些附加信息,主要有: e.Cancel:布尔变量,设置为true,将取消这次打印作业。 e. Graphics:所使用的打印机的设备环境,参见第五章。 e.HasMorePages:布尔变量。PrintPage事件处理函数打印一页后,仍有数据未打 印,退出事件处理函数前设置HasMorePages二true,退出PrintPage事件处理函数 后,将再次引发PrintPage事件,打印下一页。 e.MarginBounds:打印区域的大小,是Rec tangle结构,元素包括左上角坐标:Left 和Top,宽和高:Width和Height。单位为1/100英寸。 e.MarginBounds:打印纸的大小,是Rec tangle结构。单位为1/100英寸。 e.PageSettings: PageSettings 类对象,包含用对话框 PageSetupDialog 设置的页 面打印方式的全部信息。可用帮助查看PageSettings类的属性。下边为这3个事件编写事件处理函数,具体步骤如下:(21) 在最后一个using语句之后增加语句:using System.IO;using System.Drawing.Printing;(22) 本例打印或预览 RichTextBox中的内容,增加变量:StringReader streamToPrint=null。 如果打印或预览文件,改为:StreamReader streamToPrint,流的概念参见第六章。增 加打印使用的字体的变量: Font printFont。(23) 放 PrintDocument 控件到窗体,属性 name 为 printDocument1。(24) 为printDocumentl增加BeginPrint事件处理函数如下: privatevoid printDocument1_BeginPrint(object sender,System.Drawing.Printing.PrintEventArgs e)prin tFon t=richTex tBox1.Fon t;/打印使用的字体streamToPrint二new StringReader(richTextBox1.Text);/打印richTextBox1.Text /如预览文件改为:streamToPrint=new StreamReader(文件的路径及文件名);(25) printDocument1 的 PrintPage 事件处理函数如下。streamToPrint.ReadLine()读入一段数 据,可能打印多行。本事件处理函数将此段数据打印在一行上,因此方法必须改进。private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) float linesPerPage=O;/记录每页最大行数float yPos=0;/记录将要打印的一行数据在垂直方向的位置 int coun t=0;/记录每页已打印行数floa t lef tM argin二e.MarginBounds.Lef t;/左边距 floa t to pMargin二e.MarginBounds.Top;/顶边距 st ring line二null;/从 RichTex tBox 中读取一段字符将存到 line 中 /每页最大行数=一页纸打印区域的高度/一行字符的高度 linesPerPage=e.MarginBounds.Height/printFont.GetHeight(e.Graphics);/如果当前页已打印行数小于每页最大行数而且读出数据不为null,继续打印 while(countlinesPerPage&(line=streamToPrint.ReadLine()!=null) /yPos为要打印的当前行在垂直方向上的位置yPos=topMargin+(count*printFont.GetHeight(e.Graphics); e.Graphics.DrawString(line,printFont,Brushes.Black, lef tMargin,yPos,new St ringForma t();/打印,参见第五章coun t+;/已打印行数加1if(line!=null)/是否需要打印下一页e.HasMorePages二 true;/需要打印下一页elsee.HasMorePages二false;/不需要打印下一页 (26)为 printDocument1 增加 EndPrint 事件处理函数如下: privatevoid printDocument1_EndPrint (object sender,System.Drawing.Printing.PrintEventArgs e) if(streamToPrint!=null)st reamToPrin t.Close();/释放不用的资源打印设置对话框控件 PageSetupDialogWindows窗体的PageSetupDialog控件是一个页面设置对话框,用于在Windows应用程 序中设置打印页面的详细信息,对话框的外观如图4.8.2。纸张大小辺:L页边距右迅):io下:|1O来源:方向灯纵向(WI打印机I图 4.8.2 用户使用此对话框能够设置纸张大小(类型)、纸张来源、纵向与横向打印、上下左右的 页边距等。在打开对话框前,首先设置其属性Document为指定的PrintDocument类对象, 用来把页面设置保存到PrintDocument类对象中。为文本编辑器增加页面设置功能的具体步 骤如下:(27) 为文件顶级菜单项的弹出菜单增加菜单项:页面设置。(28) 放 PageSetupDialog 控件到窗体,属性 name 为 pageSetupDialog1。(29) 为页面设置菜单项增加单击事件处理函数如下:privatevoid menuItem5_Click(object sender,System.EventArgs e) pageSetupDialog1.Document=printDocument1; pageSetupDialog1.ShowDialog();(30) 打开对话框pageSetupDialogl后,如果单击了确定按钮,PageSetupDialog对话框中所 做的的页面设置被保存到 PrintDocument 类对象 printDocument1 中,如果单击了取消 按钮,不保存这些修改,维持原来的值。当调用PrintDocument.Print方法来实际打印 文档时,引发PrintPage事件,该事件处理函数的第二个参数e提供了这些设置信息。打印预览用PrintPreviewDialog类可以在屏幕上显示PrintDocument的打印效果,既打印预览。实 现打印预览的具体步骤如下:(31) 为文件顶级菜单项的弹出菜单增加菜单项:打印预览。(32) 放 PrintPreviewDialog 控件到窗体,属性 name 为 printPreviewDialogl。(33) 为打印预览菜单项增加单击事件处理函数如下:privatevoid menuItemPrintView_Click(object sender,System.EventArgs e) printPreviewDialog1.Document=printDocument1; printPreviewDialog1.ShowDialog();(34) 编译,运行,输入若干字符,试验一下预览的效果,预览的效果如图4.8.3。图 4.8.3用打印对话框 PrintDialog 实现打印PrintDialog组件是类库中预先定义的对话框,用来设置对文档进行打印的打印机的参数, 包括打印机名称、要打印的页(全部打印或指定页的范围)、打印的份数以及是否打印到文件 等。在打开对话框前,首先设置其属性 Document 为指定的 PrintDocument 类对象,打开 PrintDialog对话框后,修改的设置将保存到PrintDocument类的对象中。PrintDialog对话 框的外观如图 4.8.4。图 4.8.4 增加打印功能的具体步骤如下:(35)放 PrintDialog 控件到窗体属性 Name=printDialog1。(36) 为文件顶级菜单项的弹出菜单增加菜单项:打印。(37) 为打印菜单项增加单击事件处理函数如下:(不能打印?) private void menuItemPrint_Click(object sender, System.EventArgs e) printDialog1.Document=printDocument1;if(printDialog1.ShowDialog(this)=DialogResult.OK) printDocument1.Print();(38) 编译,运行,输入若干字符,试验一下打印效果。5. 实现 About 对话框(39) 添加Windows窗体,输入窗体文件名称:formAbout.cs。(40) 修改 formAbout 属性 Start Posi tion二Cen terParen t,表示打开对话框时,对话框在父窗口的中间。 MaximizeBox二False, MinimizeBox二False,表示没有最大化和最小化按钮,既不能 最大化和最小化。 FormBorderS tyle二FixedDialog,窗口不能修改大小。 Tex t=关于记事本。可以在窗体中增加各种控件,显示作者、版权等信息。“确定”按钮用来关闭formabout 窗体。图为 Microsoft 的记事本,仅作参考。亲,也可以用photoshop做一个自己的logo哦!(双11购物后遗症,全民皆亲!)二多文档界面程序设计设计一个MDI应用程序,可以打开、排列和关闭子窗口。P273例题10-11o再试着把自己 的刚才做的记事本改成多文档的类word文本编辑器吧。项目名称L17_2.
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸设计 > 毕设全套


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!