




已阅读5页,还剩57页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1,简介,本讲涉及的控件有:菜单、工具条、状态栏、分页控件、系统对话框(打开对话框、保存对话框、预览对话框、打印对话框、打印设置对话框、颜色对话框、字体对话框)、用户自定义对话框等。,2,界面效果如图,3,功能设计,1.1文件新建:新建一个编辑窗口;打开:弹出打开对话框,打开一个指定的文本文件;保存:如果当前有文件名,就保存当前编辑的文本文件,如果没有文件名,弹出保存对话框,保存当前编辑的文本文件;另存为:弹出保存对话框,将当前编辑的文本文件以指定的另一个文件名存盘;退出:结束当前编辑的文本文件,退出系统;,4,预览:预览编辑器中的内容;打印:打印编辑器中的内容;设置:设置默认打印页面;1.2格式字体:弹出字体对话框,设置选定文本的字体;颜色:弹出颜色对话框,设置选定文本的颜色;左对齐:当前段文本左对齐;中对齐:当前段文本中对齐;右对齐:当前段文本右对齐;缩进:当前段文本悬挂缩进;,5,1.3编辑剪切:剪切选定内容,并放到剪切板;复制:复制选定内容,并放到剪切板;粘贴:将剪切板的内容插入到当前位置;撤消:撤消上次操作;恢复:恢复上次操作;查找:查找文档中的内容替换:替换文档中的内容,6,2功能实现,2.1建立项目解决方案(文本文件编辑器),项目名称(Editor),窗体文件(frmEditor);2.2设计窗体,7,8,2.3文件功能实现在frmEditor类的开始定义一个数据成员_fileName,用于保存当前正在编辑的文件名。publicpartialclassfrmEditor:Formprivatestring_fileName;/编辑的当前文件名publicfrmEditor()InitializeComponent();,9,2.3.1退出DialogResultresult;result=MessageBox.Show(退出前是否保存,退出,MessageBoxButtons.YesNoCancel,MessageBoxIcon.Question);if(result=DialogResult.No)this.Close();elseif(result=DialogResult.Yes)SaveFileDialogdlgSave=newSaveFileDialog();/设置保存对话框的默认参数dlgSave.InitialDirectory=c:tmp;dlgSave.Filter=文本文件(*.txt)|*.txt|富格式文件(*rtf)|*.rtf|所有文件(*.*)|*.*;dlgSave.Title=保存我的文件;/显示保存对话框,10,if(dlgSave.ShowDialog()=DialogResult.OK)/表示按下“确认”按钮_fileName=dlgSave.FileName;/得到用户指定的文件名/如果扩展名为rtf格式,则以RTF格式保存文件,否则以普通文本格式保存文件if(Path.GetExtension(_fileName)=.rtf)rtbEditor.SaveFile(_fileName,RichTextBoxStreamType.RichText);elsertbEditor.SaveFile(_fileName,RichTextBoxStreamType.PlainText);,11,2.3.2新建文件rtbEditor.Text=;_fileName=;,12,2.3.3打开文件设置文件打开对话框的过滤参数,即:Filter=文本文件(*.txt)|*.txt|所有文件(*.*)|*.*,然后弹出一个打开对话框,用户指定一个文件,然后将文件的内容读入到rtbEditor中。privatevoidmiFileOpen_Click(objectsender,EventArgse)dlgOpen.Filter=文本文件(*.txt)|*.txt|富格式文件(*.rtf)|*.rtf|所有文件(*.*)|*.*;,13,if(dlgOpen.ShowDialog()=DialogResult.OK)_fileName=dlgOpen.FileName;if(Path.GetExtension(_fileName)=.rtf)rtbEditor.LoadFile(_fileName,RichTextBoxStreamType.RichText);elsertbEditor.LoadFile(_fileName,RichTextBoxStreamType.PlainText);,14,2.3.4保存文件文本编辑器类frmEditor有一个数据成员_fileName,用于保存当前正在编辑的文件名,新建文件时,设置_fileName为空。选择“保存”菜单时,如果_fileName为空,动态创建一个保存对话框(默认扩展名、默认文件夹、默认文件类型),由用户指定保存的文件名,将编辑器中的内容保存到指定的文件中,然后修改_fileName。,15,/如果文件名为空,表示是新文件,保存时需要用户指定文件名if(_fileName=)/动态创建一个文件保存对话框SaveFileDialogdlgSave=newSaveFileDialog();/设置保存对话框的默认参数dlgSave.InitialDirectory=c:tmp;dlgSave.Filter=文本文件(*.txt)|*.txt|富格式文件(*.rtf)|*.rtf|所有文件(*.*)|*.*;dlgSave.Title=保存我的文件;/显示保存对话框if(dlgSave.ShowDialog()=DialogResult.OK)/表示按下“确认”按钮,16,_fileName=dlgSave.FileName;/得到用户指定的文件名/如果扩展名为rtf格式,则以RTF格式保存文件,否则以普通文本格式保存文件if(Path.GetExtension(_fileName)=.rtf)rtbEditor.SaveFile(_fileName,RichTextBoxStreamType.RichText);elsertbEditor.SaveFile(_fileName,RichTextBoxStreamType.PlainText);/如果不是新文件,根据当前文件的格式保存当前文件elseif(Path.GetExtension(_fileName)=.rtf),17,rtbEditor.SaveFile(_fileName,RichTextBoxStreamType.RichText);elsertbEditor.SaveFile(_fileName,RichTextBoxStreamType.PlainText);,18,2.3.5另存为文件弹出一个文件保存对话框,用户指定保存的文件名,将当前的文件内容保存到用户的指定文件中,并修改当前文件名_fileName。/动态创建一个文件保存对话框SaveFileDialogdlgSave=newSaveFileDialog();/设置保存对话框的默认参数dlgSave.InitialDirectory=c:tmp;dlgSave.Filter=文本文件(*.txt)|*.txt|富格式文件(*rtf)|*.rtf|所有文件(*.*)|*.*;dlgSave.Title=保存我的文件;/显示保存对话框if(dlgSave.ShowDialog()=DialogResult.OK)/表示按下“确认”按钮,19,_fileName=dlgSave.FileName;/得到用户指定的文件名/如果扩展名为rtf格式,则以RTF格式保存文件,否则以普通文本格式保存文件if(Path.GetExtension(_fileName)=.rtf)rtbEditor.SaveFile(_fileName,RichTextBoxStreamType.RichText);elsertbEditor.SaveFile(_fileName,RichTextBoxStreamType.PlainText);,20,2.4编辑功能实现2.4.1剪切、复制、粘贴、撤消、恢复这几个功能都是RichTextBox自身提供的,我们直接引用就可以了。以Cut为例,其代码如下:privatevoidmiEditCut_Click(objectsender,EventArgse)rtbEditor.Cut();,21,2.5格式功能实现2.5.1字体创建一个字体对话框(dlgFont),弹出字体对话框,选择字体。根据是否有选择文本,若有,修改选择文本的字体,否则,修改整个文本的字体。/创建字体对话框FontDialogdlgFont=newFontDialog();dlgFont.ShowColor=true;dlgFont.ShowApply=true;,22,/设置字体对框的默认字体,/如果已经有选择文本,则设置为选择文本的字体和颜色if(rtbEditor.SelectionLength0)dlgFont.Font=rtbEditor.SelectionFont;dlgFont.Color=rtbEditor.SelectionColor;/否则设置为全文的字体和姿色elsedlgFont.Font=rtbEditor.Font;dlgFont.Color=rtbEditor.ForeColor;,23,/显示字体对话框,且用户按下了“确认”按钮if(dlgFont.ShowDialog()=DialogResult.OK)/如果有选择文件,刚修改选择文本的字体和颜色if(rtbEditor.SelectionLength0)rtbEditor.SelectionFont=dlgFont.Font;rtbEditor.SelectionColor=dlgFont.Color;/否则修改整个文本的字体和颜色elsertbEditor.Font=dlgFont.Font;rtbEditor.ForeColor=dlgFont.Color;,24,2.5.2颜色创建一个颜色对话框(dlgColor),设置颜色对话框的当前颜色(没有选定,就为编辑器的颜色,若有选定,就为选定文本的颜色),弹出颜色对话框,选择颜色。,25,/创建颜色对话框ColorDialogdlgColor=newColorDialog();/如果有选择文件,刚修改选择文本的颜色if(dlgColor.ShowDialog()=DialogResult.OK)if(rtbEditor.SelectionLength0)rtbEditor.SelectionColor=dlgColor.Color;/否则修改整个文本的颜色elsertbEditor.ForeColor=dlgColor.Color;,26,2.5.3左、中、右对齐改变当前段的对齐方式,是RichEditBox自带的属性SelectionAlignment,下面的代码是实现了当前段的左对齐。privatevoidmiStyleAlignLeft_Click(objectsender,EventArgse)rtbEditor.SelectionAlignment=HorizontalAlignment.Left;,27,2.5.4缩进改变当前段的缩进方式,是RichEditBox自带的属性SelectionHangingIndent(悬挂),SelectionIndent(左缩进),SelectionRightIndent(右缩进),下面的代码指定了当前段的左缩进。privatevoidmiStyleIndent_Click(objectsender,EventArgse)rtbEditor.SelectionIndent=20;,28,2.6打印功能实现无论是预览还是打印,主要还是要依赖PrintDocument控件来完成的,响应该控件的PrintPage事件,在该事件响应中真正输出每页的内容。下面几个功能的实现,有些内容是相互关系,如:要显示或打印的内容、当前显示或打印的字体、当前的打印机设置和页面设置,所以,添加四个数据成员如下:,29,/下面几个数据成员用于打印privateStringReader_srPrint=null;/打印的内容privateFont_printFont;/打印字体PrinterSettings_printerSettings=newPrinterSettings();/打印机设置PageSettings_pageSettings=newPageSettings();/页面设置,30,2.6.1预览创建打印预览对话框,将当前编辑器中的文本读到一个文本流StringReader中,设置打印字体与文件编辑器中的字体相同,设置PrintDocument控件的页面设置为用户设置的值,将PrintDocument控件与预览对话框关联起来,调用预览对话框,即可预览文本编辑器中的内容。,31,privatevoidmiFilePreview_Click(objectsender,EventArgse)PrintPreviewDialogdlgprintPreview=newPrintPreviewDialog();dlgprintPreview.Document=newSystem.Drawing.Printing.PrintDocument();dlgprintPreview.FormBorderStyle=FormBorderStyle.Fixed3D;dlgprintPreview.ShowDialog();,32,2.6.2打印创建打印对话框,将当前编辑器中的文本读到一个文本流StringReader中,设置打印字体与文件编辑器中的字体相同,设置PrintDocument控件的页面设置为用户设置的值,将PrintDocument控件与打印对话框关联起来,调用打印对话框,即可打印文本编辑器中的内容。,33,privatevoidmnPrint_Click(objectsender,EventArgse)dlgprint.Document=docPrint;if(dlgprint.ShowDialog()!=DialogResult.Cancel)docPrint.Print();,34,2.6.3设置页面这两个功能是关联的,以设置页面为主,在设置页面中包含了设置打印机功能。创建页面设置对话框,设置对话框的当前打印机参数和页面参数,显示对话框,用户可以修改打印机或页面的参数,确认后,即可保存当前的设置。,35,privatevoidmiPrintPageSetup_Click(objectsender,EventArgse)PageSettings_pageSettings=newPageSettings();/创建页面设置对话框PageSetupDialogdlgPageSetup=newPageSetupDialog();/使用用户指定的页面设置dlgPageSetup.PageSettings=_pageSettings;/显示页面设置对话框if(dlgPageSetup.ShowDialog()=DialogResult.OK)_pageSettings=dlgPageSetup.PageSettings;,36,2.7状态栏实现2.7.1确定信息区在状态栏添加五个ToolStripStatusLabel,其属性设置如下表。,37,设计完成后的效果如下图:,38,2.7.2在状态栏实时显示光标的位置响应文本编辑器rtbEditor的MouseDown消息,得到光标的位置,进而得到光标的行号和列号。响应文本编辑器rtbEditor的KeyUp消息,得到光标的位置,进而得到光标的行号和列号。,39,privatevoidrtbEditor_MouseDown(objectsender,MouseEventArgse)/根据光标所在象素位置,得到字符索引号intnCharIndex=rtbEditor.GetCharIndexFromPosition(newPoint(e.X,e.Y);/根据字符索引号,得到所在行号和列号intnRowNo=rtbEditor.GetLineFromCharIndex(nCharIndex);intnFirstCharIndex=rtbEditor.GetFirstCharIndexFromLine(nRowNo);intnColNo=nCharIndex-nFirstCharIndex;/在状态栏上显示行号和列号tsslRowNo.Text=string.Format(行:0,nRowNo+1);tsslColNo.Text=string.Format(列:0,nColNo);,40,2.7.3在状态栏实时显示键盘的状态在窗体的构造函数frmEditor()中添加如下语句:Application.Idle+=newEventHandler(Application_Idle)然后定义Application_Idle()方法,见程序。publicfrmEditor()InitializeComponent();Application.Idle+=newEventHandler(Application_Idle);,41,privatevoidApplication_Idle(objectsender,EventArgse)if(Control.IsKeyLocked(Keys.Insert)tsslInsert.Text=Ins;elsetsslInsert.Text=;if(Control.IsKeyLocked(Keys.NumLock)tsslNumLock.Text=Num;elsetsslNumLock.Text=;if(Control.IsKeyLocked(Keys.CapsLock)tsslCapsLock.Text=Caps;elsetsslCapsLock.Text=;if(Control.IsKeyLocked(Keys.Scroll)tsslScrollLock.Text=Scroll;elsetsslScrollLock.Text=;,42,2.8文本查找和替换2.8.1添加一个新的窗体文件,43,设计完成后的窗口如下:,44,2.8.2数据成员和属性设计为了便于功能实现,设计了四个数据成员和属性,如下:/要查找的字符串string_findStr;publicstringFindStrgetreturn_findStr;set,45,_findStr=value;txtFindFind.Text=_findStr;txtReplaceFind.Text=_findStr;/要替换的字符串string_replaceStr;publicstringReplaceStrgetreturn_replaceStr;set_replaceStr=value;,46,txtReplaceReplace.Text=_replaceStr;/查找或替换选项RichTextBoxFinds_findOption;publicRichTextBoxFindsFindOptiongetreturn_findOption;set_findOption=value;cbFindWholeWord.Checked=(_findOptioncbReplaceWholeWord.Checked=(_findOption,48,2.8.3实现“查找页”的功能在frmEditor.cs中添加Find方法,如下:publicvoidFind(stringfindStr,RichTextBoxFindsfindOption)_findStr=findStr;_findOption=findOption;nCharIndex=rtbEditor.Find(_findStr,nCharIndex,_findOption)+_findStr.Length;/查找字符串this.Activate();,49,在frmEditor.cs中添加“查找”菜单项的响应,将当前的查询和替换参数传到查找替换对话框,并以非模态对话框的形式显示查找替换对话框,如下:privatevoidmiEditFind_Click(objectsender,EventArgse)frmFindAndReplacedlgFind=newfrmFindAndReplace();dlgFind.FindStr=_findStr;dlgFind.FindOption=_findOption;dlgFind.Editor=this;dlgFind.Show();,50,在frmFindAndReplace.cs中响应“查找下一个”和“取消”二个按钮的消息,获取当前对话框的参数后,调用frmEditor.cs中定义的Find方法,如下:privatevoidbtnFindFindNext_Click(objectsender,EventArgse)_findStr=txtFindFind.Text;_findOption=RichTextBoxFinds.None;if(cbFindWholeWord.Checked)_findOption|=RichTextBoxFinds.WholeWord;if(cbFindMatchCase.Checked)_findOption|=RichTextBoxFinds.MatchCase;_editor.Find(_findStr,_findOption);,51,/查找页:取消,使用非模态对话框实现查找privatevoidbtnFindCancel_Click(objectsender,EventArgse)Close();,52,2.8.4实现“替换页”功能在frmEditor.cs中添加Replace和ReplaceAll方法,如下:publicvoidReplace(stringfindStr,stringreplaceStr,RichTextBoxFindsfindOption)_findStr=findStr;_replaceStr=replaceStr;_findOption=findOption;/替换字符串nCharIndex=0;/查找字符串if(rtbEditor.Find(_findStr,nCharIndex,_findOption)=0),53,privatevoidbtnReplaceReplaceAll_Click(objectsender,EventArgse)_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);,54,在frmEditor.cs中添加对“替换”菜单项的响应,将当前的查询和替换参数传到查找替换对话框,并以非模态对话框的形式显示查找替换对话框,如下:privatevoidbtnReplaceReplace_Click(objectsender,EventArgse)_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;,55,rtbEditor.SelectedText=_replaceStr;nCharIndex+=_replaceStr.Length;this.Activate();publicvoidReplaceAll(stringfindStr,stringreplaceStr,RichTextBoxFindsfindOption)_findStr=findStr;_replaceStr=replaceStr;_findOption=findOption;/查找字符串nCharIndex=0;while(rtbEditor.Find(_findStr,nCharIndex,_findOption)=0),56,/替换字符串rtbEditor.SelectedText=_replaceStr;nCharIndex+=_replaceStr.Length;this.Activate();在frmEditor.cs中添加对“替换”菜单项的响应,将当前的查询和替换参数传到查找替换对话框,并以非模态对话框的形式显示查找替换对话框,如下:,57,privatevoidmiEditReplace_Click(objectsender,EventArgse)frmFindAndReplacedlgReplace=newfrmFindAndReplace();dlgReplace.FindStr=_findStr;dlgReplace.ReplaceStr=_replaceStr;dlgReplace.FindOption=_findOption;dlgReplace.Editor=this;dlgReplace.Show();,58,在frmFindAndRep
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 合建的房子售卖合同范本
- 修理厂与修理工合同协议
- 合同连带责任协议书范本
- 农村耕地出租建房协议书
- 博主如何签独家协议合同
- 代签劳务合同协议书范本
- 合同权益转让协议书范本
- 变更股东外企补偿协议书
- 大产权房屋抵押合同范本
- 厂房租赁合同安全协议书
- 无人机原理课件
- 1.1 精微广大-绘画的功能和种类 教学设计-2023-2024学年高中美术人美版(2019)选择性必修1 绘画
- 音响设备消费行为预测-洞察及研究
- 手术部(室)医院感染控制标准WST855-2025解读课件
- 2025年河北高考生物试卷真题答案详解及备考指导
- 宁德新能源verify测试题库
- 2023年甘肃公交建集团清傅项目收费运营工作人员招聘笔试真题
- 中国烟草PPT模板
- 急性淋巴管炎的护理查房
- 江苏省综合评标专家库题库
- 农作物品种试验技术规程玉米
评论
0/150
提交评论