我们在实际开发中会遇到实现C#打印文档的需求,那么如何设计一个编辑处理程序呢,它可以实现编辑和打印、打印预览文档。那么下面我们就详细向你介绍C#打印文档的具体的操作和实现。
C#打印文档操作方式:
C#打印文档1.新建一个项目
项目中有两个form(Form1,Form2)
C#打印文档2.在Form1中添加菜单
mainMenu1,一个richTextBox1(定义为Public),一个打印文档控件PrintDocument,名称为MyPrintDC。一个状态栏名称为myStatus。
菜单项有:
文件(mnFile){新建(mnNew),打开(mnOpen),保存(mnSave),页面设置(mnPageSetup),打印预览(mnPrintView),打印(mnPint),退出(mnClose)}
编辑(mnEdit){复制(mnCopy),剪切(mnCut),粘贴(mnPaste),查找(mnSearch)}
关于(mnAbout)
C#打印文档3.在Form2中添加一个标签:
查找内容,文本(txtSearch),命令按钮(btnSearch) 查找一下个,命令按钮(btnCancel)取消4.Form1中代码:
C#打印文档之加入引用:
- using System.IO;
C#打印文档之在控件定义阶段中加入:
- private StringReader myReader;
- private Form2 f;
C#打印文档之Form1窗体的构造函数中:
- f=new Form2();
- f.Owner =this;
- f.Hide();
C#打印文档之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);
- }
- }
- }
- }
C#打印文档之新建菜单(mnNew):
- this.CheckSave();
- this.richTextBox1.Clear();
- this.myStatus.Text ="新建文件";
C#打印文档之打开菜单(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 ="打开文件";
C#打印文档之保存菜单(mnSave):
- this.myStatus.Text ="保存文件";
- SaveFileDialog svfDialog=new SaveFileDialog();
- svfDialog.Filter ="文本文件|*.*|富文本格式文件|*.rtf|所有文件|*.*";
- if (svfDialog.ShowDialog()==DialogResult.OK)
- {
- this.richTextBox1.SaveFile(svfDialog.FileName,
- RichTextBoxStreamType.PlainText);
- }
C#打印文档之控件的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;
- }
- }
C#打印文档之页面设置菜单(mnPageSetup):
- PageSetupDialog mypgDialog=new PageSetupDialog();
- mypgDialog.Document =this.MyPrintDC;
- try
- {
- mypgDialog.ShowDialog();
- }
- catch
- {
- this.MyPrintDC.PrintController.OnEndPrint(
- this.MyPrintDC,new System.Drawing.Printing.PrintEventArgs());
- }
C#打印文档之打印预览菜单(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());
- }
- }
C#打印文档之复制菜单(mnCopy):
- if (this.richTextBox1.SelectedText!="")
- {
- Clipboard.SetDataObject(this.richTextBox1.SelectedText);
- this.mnCopy.Enabled =false;
- this.mnCut.Enabled =false;
- this.mnPaste.Enabled =true;
- }
C#打印文档之剪切菜单(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;
- }
C#打印文档之粘贴菜单(mnPaste):
- IDataObject d=Clipboard.GetDataObject();
- this.richTextBox1.SelectedText =(string)d.GetData(DataFormats.Text);
C#打印文档之查找菜单(mnSearch):
- f.Show();
C#打印文档之富文本框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;
- }
C#打印文档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();
C#打印文档的实际操作和具体的步骤就向你介绍到这里,希望对你了解和学习C#打印文档的实现有所帮助。
【编辑推荐】