操作方式:
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)
4.Form1中代码:
加入引用:
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();