查看文章 |
案例:设计一个编辑处理程序,可以编辑和打印、打印预览文档。 1.新建一个项目,其中有两个form(Form1,Form2) 2.在Form1中添加菜单mainMenu1,一个richTextBox1(定义为Public),一个打印文档控件PrintDocument,名称为MyPrintDC。一个状态栏名称为myStatus。 菜单项有: 文件(mnFile){新建(mnNew),打开(mnOpen),保存(mnSave),页面设置(mnPageSetup),打印预览(mnPrintView),打印(mnPint),退出(mnClose)} 编辑(mnEdit){复制(mnCopy),剪切(mnCut),粘贴(mnPaste),查找(mnSearch)} 关于(mnAbout) 3.在Form2中添加一个标签:查找内容,文本(txtSearch),命令按钮(btnSearch) 查找一下个,命令按钮(btnCancel)取消 加入引用: using System.IO;
在控件定义阶段中加入: private StringReader myReader; private Form2 f;
Form1窗体的构造函数中: f=new Form2(); f.Owner =this; f.Hide(); Form1窗体中定义一个方法CheckSave () private void CheckSave() { if (this.richTextBox1.Text!="") { if (MessageBox.Show("是否保存当前文件?","确认",MessageBoxButtons.OKCancel,MessageBoxIcon.Question)==DialogResult.OK) { this.myStatus.Text ="保存文件"; SaveFileDialog svfDialog=new SaveFileDialog(); svfDialog.Filter ="文本文件|*.*|富文本格式文件|*.rtf|所有文件|*.*"; if (svfDialog.ShowDialog()==DialogResult.OK) { this.richTextBox1.SaveFile(svfDialog.FileName,RichTextBoxStreamType.PlainText); } } } } 新建菜单(mnNew): this.CheckSave(); this.richTextBox1.Clear(); this.myStatus.Text ="新建文件"; 打开菜单(mnOpen): this.CheckSave(); OpenFileDialog opfDialog=new OpenFileDialog (); opfDialog.Filter ="文本文件|*.*|富文本格式文件|*.rtf|所有文件|*.*"; if (opfDialog.ShowDialog()==DialogResult.OK) { this.richTextBox1.LoadFile(opfDialog.FileName,RichTextBoxStreamType.PlainText); } this.myStatus.Text ="打开文件"; 保存菜单(mnSave): this.myStatus.Text ="保存文件"; SaveFileDialog svfDialog=new SaveFileDialog(); svfDialog.Filter ="文本文件|*.*|富文本格式文件|*.rtf|所有文件|*.*"; if (svfDialog.ShowDialog()==DialogResult.OK) { this.richTextBox1.SaveFile(svfDialog.FileName,RichTextBoxStreamType.PlainText); } 打印文档控件的PrintPage事件代码(MyPrintDC): private void MyPrintDC_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) { //打印文档打印页面事件代码 this.myReader=new StringReader(this.richTextBox1.Text);//定义字符读流 Graphics myGraphics=e.Graphics; Font myPrintFont=this.richTextBox1.Font; //计算一页行数 float iLinePage=e.MarginBounds.Height/myPrintFont.GetHeight(myGraphics); int iLineNumber=0;//打印行数 float fyPosition=0;//打印时的纵坐标 float fMarginLeft=e.MarginBounds.Left;//纸页面左边界 float fMarginTop=e.MarginBounds.Top; string strLine=""; while ((iLineNumber<iLinePage)&&(strLine=myReader.ReadLine())!=null) { fyPosition=fMarginTop+iLineNumber*myPrintFont.GetHeight(myGraphics); myGraphics.DrawString(strLine,myPrintFont,new SolidBrush(Color.Black),fMarginLeft,fyPosition,new StringFormat()); iLineNumber++; } if (strLine!=null) { e.HasMorePages=true; } else { e.HasMorePages =false; } } 页面设置菜单(mnPageSetup): PageSetupDialog mypgDialog=new PageSetupDialog(); mypgDialog.Document =this.MyPrintDC; try { mypgDialog.ShowDialog(); } catch { this.MyPrintDC.PrintController.OnEndPrint(this.MyPrintDC,new System.Drawing.Printing.PrintEventArgs()); } 打印预览菜单(mnPrintView): PrintPreviewDialog myptViewDialog=new PrintPreviewDialog(); myptViewDialog.Document =this.MyPrintDC; try { myptViewDialog.ShowDialog(); } catch { this.MyPrintDC.PrintController.OnEndPrint(this.MyPrintDC,new System.Drawing.Printing.PrintEventArgs()); } 打印菜单(mnPrint): PrintDialog ptDialog=new PrintDialog(); ptDialog.Document =this.MyPrintDC; if (ptDialog.ShowDialog()==DialogResult.OK) { try { this.MyPrintDC.Print(); } catch { this.MyPrintDC.PrintController.OnEndPrint(this.MyPrintDC,new System.Drawing.Printing.PrintEventArgs()); } } 复制菜单(mnCopy): if (this.richTextBox1.SelectedText!="") { Clipboard.SetDataObject(this.richTextBox1.SelectedText); this.mnCopy.Enabled =false; this.mnCut.Enabled =false; this.mnPaste.Enabled =true; } 剪切菜单(mnCut): if (this.richTextBox1.SelectedText!="") { Clipboard.SetDataObject(this.richTextBox1.SelectedText); this.richTextBox1.SelectedText =""; this.mnCopy.Enabled =false; this.mnCut.Enabled =false; this.mnPaste.Enabled =true; } 粘贴菜单(mnPaste): IDataObject d=Clipboard.GetDataObject(); this.richTextBox1.SelectedText =(string)d.GetData(DataFormats.Text); 查找菜单(mnSearch): f.Show(); 富文本框richTextBox1的文件选择改变事件(SelectionChanged) if (this.richTextBox1.SelectedText!="") { this.mnCut.Enabled =true; this.mnCopy.Enabled =true; } else { this.mnCut.Enabled =false; this.mnCopy.Enabled =false; this.mnPaste.Enabled =true; } 4.Form2中的代码: 定义一个整型变量: private int findPlace=0; 命令按钮"查找下一个"代码 if (this.txtSearch.Text !="") { Form1 mainform=(Form1)this.Owner; if (mainform.richTextBox1.Text.Length>0) { if((this.findPlace=mainform.richTextBox1.Text.IndexOf(this.txtSearch.Text,this.findPlace))==-1) { MessageBox.Show("没有找到!"); this.findPlace =0; } else { mainform.richTextBox1.Select(this.findPlace,this.txtSearch.Text.Length); this.findPlace=this.findPlace+this.txtSearch.Text.Length; mainform.Activate(); } } } 命令按钮"取消"代码: this.Hide(); this.Owner.Show();
|