《制作主菜单、制作工具栏,设定状态栏,设计用户界面》由会员分享,可在线阅读,更多相关《制作主菜单、制作工具栏,设定状态栏,设计用户界面(37页珍藏版)》请在金锄头文库上搜索。
1、软件技术系 赵磊JimC* *2文本编辑器的实现 任务一: About对话框 任务二:文本编辑器查找替换功能 任务三:提示用户保存已被修改的文件 任务四:打印和打印预览 任务五:编写多文档界面应用程序本次课程的主要任务 * *3任务一 About对话框: 前边介绍的OpenFileDialog、 SaveFileDialog和FontDialog控件都是类库中预 先定义的对话框,本节介绍如何创建满足一定要 求的自定义对话框。对话框其实就是窗体,其基 类和主窗体一样,是 System.Windows.Forms.Form。只是一般对话 框只有关闭按钮,没有最大化和最小化按钮,对 话框的边界是固定
2、的,不能改变。设计自定义对 话框是经常遇到的工作。文本编辑器的实现* *4文本编辑器的实现(16)在VS2005集成环境中,单击菜单“项目|添加 Windows窗体“菜单项,弹出对话框(见图4.4),在“ 模板(T)“编辑框中选择“Windows窗体“,在“名称栏 (N)“编辑框中输入窗体文件名称:formAbout.cs, 单击“添加(A)“按钮,可以见到一个新窗体。从文件 formAbout.cs中可以看到新建窗体类名为 formAbout。这个窗体将作为About对话框。* *5文本编辑器的实现图 4.4 添加新项对话框* *6文本编辑器的实现(17)修改formAbout窗体属性Sta
3、rtPosition=CenterParent,表示 打开窗体时,窗体在父窗口的中间;修改属性MaximizeBox=False ,MinimizeBox=False,表示窗体没有最大化和最小化按钮,既窗 体不能最大化和最小化;属性FormBorderStyle=FixedDialog,使 窗体不能改变大小;属性Text=“关于记事本“。可以在窗体中增加 各种控件,例如,小图标,Label控件等。本例仅增加Label控件表 示版权信息,其属性Text=“版权所有“。一个按钮,属性Text=“确 定“,该按钮单击 事件处理函数如下:private void button1_Click(objec
4、t sender,EventArgs e) Close(); * *7文本编辑器的实现(18)为菜单增加顶级菜单项:帮助,为其弹出菜单增加标题为“关 于“的菜单项,属性Name为menuItemAbout。菜单“帮助|关于 “菜单项单击事件处理函数如下: private void menuItemAbout_Click(object sender,EventArgs e) formAbout AboutDialog=new formAbout(); AboutDialog.ShowDialog(this);/打开模式对话框 /注意不能使用Show()函数,它打开非模式对话框(19)编译运行,单
5、击菜单“帮助|关于“菜单项,将打开formAbout 对话框(如图4.5),并且不关闭此对话框,不能操作主窗体,一般 把这样的对话框叫做模式对话框。* *8任务二 文本编辑器查找替换功能:本节首先介绍模式对话框和非模式对话框的概念。并使用非 模式对话框在文本编辑器中实现查找和替换功能。模式对话框和非模式对话框 模式对话框和非模式对话框的区别是:打开模式对话框后 ,只有关闭该模式对话框,才能操作其他窗体,例如前边讲到的 SaveDialog和OpenDialog都是典型的模式对话框。而打开非模 式对话框后,不必退出该模式对话框,就可以操作其他窗口,例 如字处理程序中的查找和替换对话框就是典型的非
6、模式对话框。 两类对话框本质上都是窗体,是Form类的派生类,只是打开时 使用的方法不一样,打开模式对话框,使用方法ShowDialog(), 而打开非模式对话框,使用方法Show()。文本编辑器的实现* *9文本编辑器的实现查找替换功能的实现 (20)参照4.5节的方法,建立“查找替换“对话框。设定窗体文件名称为 formFindReplace.cs,从文件formFindReplace.cs可以看到新建窗体类名也为 formFindReplace。 (26)修改窗体formFindReplace属性StartPosition=CenterParent,表示打开对话 框时,对话框在父窗口的中
7、间;修改属性MaximizeBox=False, MinimizeBox=False,表示窗体没有最大化和最小化按钮,即窗体不能最大化和 最小化;为了使窗口不能修改大小,设置属性FormBorderStyle=FixedDialog; 属性Text=“查找和替换“。在窗体中增加两个Label控件,属性Text分别为“查找字 符串“和“替换字符串“。两个TextBox控件,属性Text=“。两个按钮,属性Text分 别为“查找下一个“和“替换查到字符“。修改属性TopMost=true,使该窗口打开时 总在其他窗体的前边。对话框界面如图4.6。图 4.6 查找和替换对话 框* *10文本编辑器的
8、实现(22)为formFindReplace类增加变量:Form1 MainForm1; (23)在创建窗体对象时,要自动调用构造函数。如果在 formFindReplace类构造函数中,把主窗体对象的引用(即Form1类 Name值)传递给“查找替换“窗体,“查找替换“窗体就可以用主窗体 对象的引用调用主窗体中的方法了。修改formFindReplace类构造 函数如下,阴影部分是所做的修改。/增加的参数form1是主窗体属性Name的值 public formFindReplace(Form1 form1) InitializeComponent(); MainForm1=form1; /
9、新增语句,记录主窗体属性Name的值 /有了Form1引用,可以在formFindReplace类中调用Form1类的公有方法* *11文本编辑器的实现(24)为主窗体Form1类增加方法如下,该方法将被窗体 formFindReplace类的方法调用。 public void FindRichTextBoxString(string FindString)/查找方法 /以后步骤将在此方法中增加查找语句,参数为要查找的字符串。(25)formFindReplace窗体中标题为“查找下一个“的按钮单击事件 处理函数如下: private void buttonFind_Click(object
10、sender,EventArgs e) /如果查找字符串不为空,调用主窗体查找方法 if(textBox1.Text.Length!=0) /调用上步增加的查找方法MainForm1.FindRichTextBoxString(textBox1.Text); else MessageBox.Show(“查找字符串不能为空“,“提示“, MessageBoxButtons.OK); * *12文本编辑器的实现(26)在Form1类中增加方法如下,该方法将被窗体 formFindReplace类的方法调用。 public void ReplaceRichTextBoxString(string R
11、eplaceString)/替换方法 /以后步骤将在此方法中增加替换语句,参数为要替换的字符串。(27)formFindReplace窗体中标题为“替换查到字符“的按钮单击事 件处理函数如下: private void buttonReplace_Click(object sender,EventArgs e) /如果替换字符串不为空,调用主窗体替换方法 if(textBox2.Text.Length!=0)/调用上步增加的替换方法 MainForm1.ReplaceRichTextBoxString(textBox2.Text); else MessageBox.Show(“替换字符串不能为
12、空“,“提示“, MessageBoxButtons.OK); * *13文本编辑器的实现(28)为Form1类增加变量:int FindPostion=0,该变量用来记录下 一次查找的开始位置。 (29)为Form1窗体菜单的“编辑“顶级菜单项的弹出菜单增加菜单项 :查找和替换,属性Name为menuItemFindReplace。“查找和替 换“菜单项单击事件处理函数如下: private void menuItemFindReplace_Click(object sender,EventArgs e) FindPostion=0; /下句中的this是Form1类对象引用 formFin
13、dReplace FindReplaceDialog=new formFindReplace(this); FindReplaceDialog.Show(); /打开非模式对话框使用Show()方法* *14文本编辑器的实现(30)第24步在主窗体Form1类中定义了FindRichTextBoxString方法,现为其增 加语句如下: public void FindRichTextBoxString(string FindString) if(FindPostion=richTextBox1.Text.Length)/如已查到文本底部,提示用户 MessageBox.Show(“已到文本底
14、部,再次查找将从文本开始处查找“,“提示 “,MessageBoxButtons.OK);FindPostion=0;/下次查找的开始位置return; /用Find方法查找,返回找到的位置,返回-1,表示未找到,参数1是要找的字符串/参数2是查找的开始位置,参数3是查找的一些选项,如大小写是否匹配,查找方向等 FindPostion=richTextBox1.Find(FindString,FindPostion,RichTextBoxFinds.MatchCase); if(FindPostion=-1)/-1表示未找到匹配字符串,提示用户 MessageBox.Show(“未找到匹配字符
15、串,再次查找将从文本开始处查找”,“提示”, MessageBoxButtons.OK); FindPostion=0;/下次查找的开始位置 else/找到匹配字符串 richTextBox1.Focus(); /主窗体成为注视窗口FindPostion+=FindString.Length; /下次查找的开始位置在此次找到字符串之后 * *15文本编辑器的实现(31)第26步在Form1类增加了一个替换字符串的方法 ReplaceRichTextBoxString,这里为其增加语句如下: 图 4.7 查找和替换运行结果 public void ReplaceRichTextBoxString
16、(string ReplaceString) if(richTextBox1.SelectedText.Length!=0)/如果选定了被替换字符串 richTextBox1.SelectedText=ReplaceString; /替换被选定的字符串(32)编译运行,输入若干字符,单击应用程序菜单“编辑|查找和替换“菜单项, 打开标题为“查找和替换“对话框。注意可以不关闭该对话框,操作主窗体,并且 该对话框总是在主窗体的前边,它是一个典型的非模式对话框。在对话框中输 入查找和替换的字符,单击标题为“查找下一个“的按钮,可以找到所选字符,并 被选中,单击标题为“替换查到字符“的按钮,可以看到已被选中的查找到的字符 被替换。运行效果如图4.7。* *16文本编辑器的实现图 4.7 查找和替换运行结果* *17任务三 提示用户保存已被修改的文件: 使用单文档文本编辑器,