实验十七 文本编辑器.docx

上传人:b****8 文档编号:28920475 上传时间:2023-07-20 格式:DOCX 页数:15 大小:99.27KB
下载 相关 举报
实验十七 文本编辑器.docx_第1页
第1页 / 共15页
实验十七 文本编辑器.docx_第2页
第2页 / 共15页
实验十七 文本编辑器.docx_第3页
第3页 / 共15页
实验十七 文本编辑器.docx_第4页
第4页 / 共15页
实验十七 文本编辑器.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

实验十七 文本编辑器.docx

《实验十七 文本编辑器.docx》由会员分享,可在线阅读,更多相关《实验十七 文本编辑器.docx(15页珍藏版)》请在冰豆网上搜索。

实验十七 文本编辑器.docx

实验十七文本编辑器

实验十七文本编辑器

【实验目的】

●掌握界面设计过程中菜单、工具栏与状态栏的使用方法

●掌握对话框和RichTextBox控件的使用方法。

●掌握界面布局的步骤和技术

【实验步骤】

一.单文档文本编辑器

创建窗体应用程序,项目名称为L17_1.

1.文件存取功能

文本编辑器都具有文件存取功能,包括新建、打开、关闭、保存和另存为等功能。

(1)为新建菜单项增加事件处理函数如下:

privatevoidmenuItemFileNew_Click(objectsender,System.EventArgse)

{richTextBox1.Text="";//或richTextBox1.Clear();

s_FileName="";//新建文件没有文件名。

}

(2)为打开文件菜单项增加事件处理函数如下:

privatevoidmenuItemFileOpen_Click(objectsender,System.EventArgse)

{if(openFileDialog1.ShowDialog()==DialogResult.OK)

{s_FileName=openFileDialog1.FileName;

richTextBox1.LoadFile(openFileDialog1.FileName,

RichTextBoxStreamType.PlainText);

}

}

(3)为另存为菜单项增加事件处理函数如下:

privatevoidmenuItemFileSaveAs_Click(objectsender,System.EventArgse)

{if(saveFileDialog1.ShowDialog()==DialogResult.OK)

{s_FileName=saveFileDialog1.FileName;

richTextBox1.SaveFile(saveFileDialog1.FileName,

RichTextBoxStreamType.PlainText);

}//注意存取文件类型应一致。

}

(4)为保存文件菜单项增加事件处理处理函数如下:

privatevoidmenuItemSaveFile_Click(objectsender,System.EventArgse)

{if(s_FileName.Length!

=0)

richTextBox1.SaveFile(s_FileName,RichTextBoxStreamType.PlainText);

else

menuItemFileSaveAs_Click(sender,e);//调用另存为菜单项事件处理函数

}

(5)为退出菜单项增加事件处理函数如下:

privatevoidmenuItemExit_Click(objectsender,System.EventArgse)

{Close();}

2.文本的编辑功能

剪贴、复制、粘贴、撤销和恢复

privatevoidMenuItemEditCut_Click(objectsender,EventArgse)

{

//todo剪切

}

privatevoidMenuItemEditCopy_Click(objectsender,EventArgse)

{

//todo复制

}

privatevoidMenuItemEditPaste_Click(objectsender,EventArgse)

{

//todo粘贴

}

privatevoidMenuItemEditUndo_Click(objectsender,EventArgse)

{

//todo撤销

}

privatevoidMenuItemEditRedo_Click(objectsender,EventArgse)

{

//todo恢复

}

查找替换功能

(6)建立查找替换对话框。

添加Windows窗体,输入窗体文件名称:

formFindReplace.cs。

(7)

修改formFindReplace窗体

●属性StartPosition=CenterParent,表示打开对话框时,对话框在父窗口的中间。

●修改属性MaximizeBox=False,MinimizeBox=False,表示没有最大化和最小化按钮,既不能最大化和最小化。

●FormBorderStyle=FixedDialog,窗口不能修改大小。

●属性Text="查找和替换"。

●修改属性TopMost=true,使该窗口打开时总在其它窗体的前边。

在窗体中增加两个Label控件,属性Text分别为"查找字符串"和"替换字符串"。

两个TextBox控件,属性Text=""。

两个按钮,属性Text分别为"查找下一个"和"替换查到字符"。

对话框界面如右图。

(8)为formFindReplace窗体增加变量:

Form1MainForm1;

(9)修改formFindReplace类构造函数如下(阴影部分是所做的修改):

publicformFindReplace(Form1form1)//增加参数

{

//Windows窗体设计器支持所必需的

InitializeComponent();

//TODO:

在InitializeComponent调用后添加任何构造函数代码

MainForm1=form1;//新增语句,这里Form1是主窗体的属性Name的值

}//有了Form1,可以在formFindReplace窗体中调用主窗体的公有方法

(10)为主窗体Form1增加方法如下,该方法将被formFindReplace窗体类调用。

publicvoidFindRichTextBoxString(stringFindString)

{}//以后步骤将在此方法中增加查找语句

(11)formFindReplace窗体中查找下一个按钮单击事件处理函数如下:

privatevoidbuttonFind_Click(objectsender,System.EventArgse)

{if(textBox1.Text.Length!

=0)//如果查找字符串不为空,调用主窗体查找方法

MainForm1.FindRichTextBoxString(textBox1.Text);//上步增加的方法

else

MessageBox.Show("查找字符串不能为空","提示",MessageBoxButtons.OK);

}//MessageBox时对话框

(12)为主窗体Form1增加方法如下,该方法将被formFindReplace窗体类调用。

publicvoidReplaceRichTextBoxString(stringReplaceString)

{}//以后步骤将在此方法中增加替换语句

(13)为替换查到字符按钮单击事件增加事件处理函数如下:

privatevoidbuttonReplace_Click(objectsender,System.EventArgse)

{if(textBox2.Text.Length!

=0)//如果查找字符串不为空,调用主窗体替换方法

MainForm1.ReplaceRichTextBoxString(textBox2.Text);

else//方法MainForm1.ReplaceRichTextBoxString见(26)中定义

MessageBox.Show("替换字符串不能为空","提示",MessageBoxButtons.OK);

}

(14)为Form1窗体增加变量:

intFindPostion=0,记录查找位置。

(15)为Form1窗体编辑菜单项中增加子菜单项:

查找和替换。

为查找和替换菜单项单击事件增加事件处理函数如下:

privatevoidmenuItemFindReplace_Click(objectsender,System.EventArgse)

{FindPostion=0;

formFindReplaceFindReplaceDialog=newformFindReplace(this);//注意this

FindReplaceDialog.Show();//打开非模式对话框使用Show()方法

}

(16)为在前边定义的Form1主窗体的FindRichTextBoxString方法增加语句如下:

publicvoidFindRichTextBoxString(stringFindString)

{if(FindPostion>=richTextBox1.Text.Length)//已查到文本底部

{MessageBox.Show("已到文本底部,再次查找将从文本开始处查找",

"提示",MessageBoxButtons.OK);

FindPostion=0;

return;

}//下边语句进行查找,返回找到的位置,返回-1,表示未找到,参数1是要找的字符串

//参数2是查找的开始位置,参数3是查找的一些选项,如大小写是否匹配,查找方向等

FindPostion=richTextBox1.Find(FindString,

FindPostion,RichTextBoxFinds.MatchCase);

if(FindPostion==-1)//如果未找到

{MessageBox.Show("已到文本底部,再次查找将从文本开始处查找",

"提示",MessageBoxButtons.OK);

FindPostion=0;//下次查找的开始位置

}

else//已找到

{richTextBox1.Focus();//主窗体成为注视窗口

FindPostion+=FindString.Length;

}//下次查找的开始位置在此次找到字符串之后

}

(17)为在前边定义的Form1主窗体的ReplaceRichTextBoxString方法增加语句如下:

publicvoidReplaceRichTextBoxString(stringReplaceString)

{if(richTextBox1.SelectedText.Length!

=0)//如果选取了字符串

richTextBox1.SelectedText=ReplaceString;//替换被选的字符串

}

(18)编译,运行,输入若干字符,选中菜单项:

编辑/查找和替换,打开对话框,注意该对话框可以在不关闭的情况下,转到主窗体,并且总是在其它窗体的前边,因此它是一个典型的非模式对话框。

在对话框中输入查找和替换的字符,单击标题为查找下一个的按钮,可以找到所选字符,并被选中,单击标题为替换所选字符按钮,可以看到查找到的字符被替换。

运行效果如右图:

3.修改字体属性

格式菜单中有字体字号和颜色两种功能。

(19)字体字号设置

放FontDialog控件到窗体,属性Name=fontDialog1。

增加顶级菜单项:

格式,为格式顶级菜单项的弹出菜单增加菜单项:

字体,属性Name分别为mainMenuModel和menuItemModelFont,为字体菜单项增加事件处理函数如下:

privatevoidmenuItemModelFont_Click(objectsender,System.EventArgse)

{//todo

}

(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.PrintEventArgse提供了一些附加信息,主要有:

●e.Cancel:

布尔变量,设置为true,将取消这次打印作业。

●e.Graphics:

所使用的打印机的设备环境,参见第五章。

●e.HasMorePages:

布尔变量。

PrintPage事件处理函数打印一页后,仍有数据未打印,退出事件处理函数前设置HasMorePages=true,退出PrintPage事件处理函数后,将再次引发PrintPage事件,打印下一页。

●e.MarginBounds:

打印区域的大小,是Rectangle结构,元素包括左上角坐标:

Left和Top,宽和高:

Width和Height。

单位为1/100英寸。

●e.MarginBounds:

打印纸的大小,是Rectangle结构。

单位为1/100英寸。

●e.PageSettings:

PageSettings类对象,包含用对话框PageSetupDialog设置的页面打印方式的全部信息。

可用帮助查看PageSettings类的属性。

下边为这3个事件编写事件处理函数,具体步骤如下:

(21)在最后一个using语句之后增加语句:

usingSystem.IO;

usingSystem.Drawing.Printing;

(22)本例打印或预览RichTextBox中的内容,增加变量:

StringReaderstreamToPrint=null。

如果打印或预览文件,改为:

StreamReaderstreamToPrint,流的概念参见第六章。

增加打印使用的字体的变量:

FontprintFont。

(23)放PrintDocument控件到窗体,属性name为printDocument1。

(24)为printDocument1增加BeginPrint事件处理函数如下:

privatevoidprintDocument1_BeginPrint(objectsender,

System.Drawing.Printing.PrintEventArgse)

{printFont=richTextBox1.Font;//打印使用的字体

streamToPrint=newStringReader(richTextBox1.Text);//打印richTextBox1.Text

}//如预览文件改为:

streamToPrint=newStreamReader("文件的路径及文件名");

(25)printDocument1的PrintPage事件处理函数如下。

streamToPrint.ReadLine()读入一段数据,可能打印多行。

本事件处理函数将此段数据打印在一行上,因此方法必须改进。

privatevoidprintDocument1_PrintPage(objectsender,

System.Drawing.Printing.PrintPageEventArgse)

{floatlinesPerPage=0;//记录每页最大行数

floatyPos=0;//记录将要打印的一行数据在垂直方向的位置

intcount=0;//记录每页已打印行数

floatleftMargin=e.MarginBounds.Left;//左边距

floattopMargin=e.MarginBounds.Top;//顶边距

stringline=null;//从RichTextBox中读取一段字符将存到line中

//每页最大行数=一页纸打印区域的高度/一行字符的高度

linesPerPage=e.MarginBounds.Height/printFont.GetHeight(e.Graphics);

//如果当前页已打印行数小于每页最大行数而且读出数据不为null,继续打印

while(count

=null))

{//yPos为要打印的当前行在垂直方向上的位置

yPos=topMargin+(count*printFont.GetHeight(e.Graphics));

e.Graphics.DrawString(line,printFont,Brushes.Black,

leftMargin,yPos,newStringFormat());//打印,参见第五章

count++;//已打印行数加1

}

if(line!

=null)//是否需要打印下一页

e.HasMorePages=true;//需要打印下一页

else

e.HasMorePages=false;//不需要打印下一页

}

(26)为printDocument1增加EndPrint事件处理函数如下:

privatevoidprintDocument1_EndPrint(objectsender,

System.Drawing.Printing.PrintEventArgse)

{if(streamToPrint!

=null)

streamToPrint.Close();//释放不用的资源

}

打印设置对话框控件PageSetupDialog

Windows窗体的PageSetupDialog控件是一个页面设置对话框,用于在Windows应用程序中设置打印页面的详细信息,对话框的外观如图4.8.2。

图4.8.2

用户使用此对话框能够设置纸张大小(类型)、纸张来源、纵向与横向打印、上下左右的页边距等。

在打开对话框前,首先设置其属性Document为指定的PrintDocument类对象,用来把页面设置保存到PrintDocument类对象中。

为文本编辑器增加页面设置功能的具体步骤如下:

(27)为文件顶级菜单项的弹出菜单增加菜单项:

页面设置。

(28)放PageSetupDialog控件到窗体,属性name为pageSetupDialog1。

(29)为页面设置菜单项增加单击事件处理函数如下:

privatevoidmenuItem5_Click(objectsender,System.EventArgse)

{pageSetupDialog1.Document=printDocument1;

pageSetupDialog1.ShowDialog();

}

(30)打开对话框pageSetupDialog1后,如果单击了确定按钮,PageSetupDialog对话框中所做的的页面设置被保存到PrintDocument类对象printDocument1中,如果单击了取消按钮,不保存这些修改,维持原来的值。

当调用PrintDocument.Print方法来实际打印文档时,引发PrintPage事件,该事件处理函数的第二个参数e提供了这些设置信息。

打印预览

用PrintPreviewDialog类可以在屏幕上显示PrintDocument的打印效果,既打印预览。

实现打印预览的具体步骤如下:

(31)为文件顶级菜单项的弹出菜单增加菜单项:

打印预览。

(32)放PrintPreviewDialog控件到窗体,属性name为printPreviewDialog1。

(33)为打印预览菜单项增加单击事件处理函数如下:

privatevoidmenuItemPrintView_Click(objectsender,System.EventArgse)

{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)为打印菜单项增加单击事件处理函数如下:

(不能打印?

privatevoidmenuItemPrint_Click(objectsender,System.EventArgse)

{printDialog1.Document=printDocument1;

if(printDialog1.ShowDialog(this)==DialogResult.OK)

printDocument1.Print();

}

(38)编译,运行,输入若干字符,试验一下打印效果。

5.实现About对话框

(39)添加Windows窗体,输入窗体文件名称:

formAbout.cs。

(40)修改formAbout属性

●StartPosition=CenterParent,表示打开对话框时,对话框在父窗口的中间。

●MaximizeBox=False,MinimizeBox=False,表示没有最大化和最小化按钮,既不能最大化和最小化。

●FormBorderStyle=FixedDialog,窗口不能修改大小。

●Text="关于记事本"。

可以在窗体中增加各种控件,显示作者、版权等信息。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 小学教育 > 其它课程

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1