课程: C# Windows程序设计学年第_ _学期第周月日教学内容备注项目一:文本编辑器的设计与实现【项目背景】文本编辑器有两类:单文档和多文档文本编辑器。
单文档文本编辑器一次只能打开一个文件,如果要打开另一个文件,必须关闭当前打开的文件,微软的写字板程序就是单文档字处理程序。
多文档文本编辑器允许同时打开多个文件,每个文件占用一个子窗口,微软的Word程序就是多文档字处理程序。
本项目主要介绍建立单文档文本编辑器的方法,通过分析现有文本编辑器的功能与操作过程,利用C#开发一个新的文本编辑器。
【主要内容与技能要求】(1)会进行复杂窗口设计(2)会对常见的文本编辑功能进行分析与编码实现(3)会设计多文档窗口一、预备知识本项目主要利用RichTextBox控件来构成文本编辑区域。
1、RichT extBox控件的主要属性属性SelectedText、SelectionLength、SelectionStart:属性SelectionFont:属性SelectionColor:属性Lines:属性Modified:事件SelectionChange:事件TextChanged:2、RichT extBox控件的主要方法方法Clear():方法Copy()、Cut()、Paste():方法SelectAll():方法Find():方法SaveFile()和LoadFile():课程: C# Windows程序设计学年第_ _学期第周月日教学内容备注方法Undo():方法Redo():二、功能设计与实现1、剪贴板功能放RichTextBox控件到窗体。
属性Name=richTextBox1,Dock=Fill,Text=""。
private void menuItemEditCut_Click(object sender,EventArgs e){ richTextBox1.Cut(); } //剪切private void menuItemEditCopy_Click(object sender,EventArgs e){ richTextBox1.Copy(); } //拷贝private void menuItemEditPaste_Click(object sender,EventArgs e){ richTextBox1.Paste(); } //粘贴private void menuItemEditUndo_Click(object sender,EventArgs e){ richTextBox1.Undo(); } //撤销private void menuItemEditRedo_Click(object sender,EventArgs e){ richTextBox1.Redo(); } //恢复2、存取文件功能文本编辑器都应具有文件存取功能,菜单顶级菜单项“文件”的弹出菜单中一般包括如下菜单项:新建、打开、关闭、保存和另存为等。
需要用到打开文件对话框(OpenFileDialog控件)和保存文件对话框(SaveFileDialog控件)。
和两个对话框的常用属性和方法:属性Filter:例如Filter=“纯文本文件(*.txt)|*.txt|所有文件(*.*)|*.*”属性FilterIndex:属性FileName:属性InitialDirectory:属性DefaultExt:方法ShowDialog():存取文件功能实现如下:课程: C# Windows程序设计学年第_ _学期第周月日教学内容备注把OpenFileDialog和SaveFileDialog控件放到窗体中。
为菜单增加顶级菜单项:文件,为其弹出菜单增加菜单项:新建、打开...、保存...、另存为...、退出。
修改这些菜单项的Name属性分别为:mainMenuFile、menuItemFileNew、menuItemFileOpen、menuItemFileSave、menuItemFileSaveAs、menuItemFileExit。
为Form1类中定义变量:string s_FileName=“”,记录当前编辑的文件名private void menuItemFileNew_Click(object sender,EventArgs e) //新建文件菜单项{ richTextBox1.Text=""; //或richTextBox1.Clear();s_FileName=""; //新建文件没有文件名。
}private void menuItemFileOpen_Click( //打开文件菜单项object sender,EventArgs e){ if(openFileDialog1.ShowDialog()==DialogResult.OK){ s_FileName=openFileDialog1.FileName;richTextBox1.LoadFile(openFileDialog1.FileName,RichTextBoxStreamType.PlainText);}}private void menuItemFileSaveAs_Click( //另存为菜单项object sender,EventArgs e){ if(saveFileDialog1.ShowDialog()==DialogResult.OK){ s_FileName=saveFileDialog1.FileName;richTextBox1.SaveFile(saveFileDialog1.FileName,RichTextBoxStreamType.PlainText);} //注意存取文件类型应一致。
}private void menuItemSaveFile_Click( //保存文件菜单项object sender,EventArgs e){ if(s_FileName.Length!=0)课程: C# Windows程序设计学年第_ _学期第周月日教学内容备注richTextBox1.SaveFile(s_FileName,RichTextBoxStreamType.PlainText);elsemenuItemFileSaveAs_Click(sender,e);}private void menuItemExit_Click( //退出菜单项object sender,EventArgs e){ Close(); }3、修改字体为修改使用的字体,可打开字体对话框FontDialog,选择指定字体。
可以按两种方式修改字体,如果未选中文本,表示以后键入的字符将按选定字体输入。
如果选中文本,则仅修改选定文本的字体。
修改字符颜色也根据同样原则。
修改字体要用到FontDialog控件可以用FontDialog对话框选定指定字体,FontDialog控件和OpenDialog控件的属性和方法基本相同,这里只介绍属性Font,它代表用FontDialog对话框选定的字体。
修改字体实现方法:放FontDialog控件到窗体,属性Name=fontDialog1。
为菜单增加顶级菜单项:格式,属性Name为mainMenuModel,为其弹出菜单增加菜单项:字体,属性Name为menuItemModelFont,为菜单“格式|字体”菜单项增加单击事件处理函数如下:private void menuItemModelFont_Click(object sender,EventArgs e){ if(fontDialog1.ShowDialog()==DialogResult.OK)richTextBox1.SelectionFont=fontDialog1.Font;}4、About对话框单击菜单"项目|添加Windows窗体"菜单项,弹出对话框,添加一个窗体,修改formAbout 窗体属性StartPosition=CenterParent,修改属性MaximizeBox=False,MinimizeBox=False,属性FormBorderStyle=FixedDialog标题为“确定”按钮单击事件处理函数如下:private void button1_Click(object sender,EventArgs e)课程: C# Windows程序设计学年第_ _学期第周月日教学内容备注{ Close(); }为菜单增加顶级菜单项:帮助,为其弹出菜单增加标题为“关于…”的菜单项,属性Name为menuItemAbout。
菜单“帮助|关于…”菜单项单击事件处理函数如下:private void menuItemAbout_Click(object sender,EventArgs e){ formAbout AboutDialog=new formAbout();AboutDialog.ShowDialog(this);//打开模式对话框} //注意不能使用Show()函数,它打开非模式对话框5、文本编辑器查找替换功能首先介绍模式对话框和非模式对话框的概念。
并使用非模式对话框在文本编辑器中实现查找和替换功能。
(1)模式对话框和非模式对话框模式对话框和非模式对话框的区别是:…两类对话框本质上都是窗体,是Form类的派生类,只是打开时使用的方法不一样,打开模式对话框,使用方法ShowDialog(),而打开非模式对话框,使用方法Show()。
(2)查找替换功能的实现建立新窗体,窗体文件名称为formFindReplace.cs,作为"查找替换"对话框。
窗体类名也为formFindReplace,为formFindReplace类增加变量:Form1 MainForm1;属性StartPosition=CenterParent,MaximizeBox=False,MinimizeBox=False, FormBorderStyle=FixedDialog, Text=“查找和替换”修改formFindReplace类构造函数如下,增加的参数form1是主窗体属性Name的值。
public formFindReplace(Form1 form1){ InitializeComponent();MainForm1=form1;//新增语句,记录主窗体属性Name的值}//有了Form1引用,可以在formFindReplace类中调用Form1类的公有方法查找替换对话框中标题为“查找下一个”按钮单击事件函数如下:private void buttonFind_Click(object sender,EventArgs e){ if(textBox1.Text.Length!=0)//MainForm1.FindRichTextBoxString方法见后面定义课程: C# Windows程序设计学年第_ _学期第周月日教学内容备注MainForm1.FindRichTextBoxString(textBox1.Text);elseMessageBox.Show(“查找字符串不能为空”,"提示",MessageBoxButtons.OK);} //MessageBox是对话框查找替换对话框中标题为“替换查到字符”按钮单击事件函数如下:private void buttonReplace_Click(object sender,EventArgs e){ if(textBox2.Text.Length!=0)MainForm1.ReplaceRichTextBoxString(textBox2.Text);else // MainForm1.ReplaceRichTextBoxString后面定义MessageBox.Show(“替换字符串不能为空”,"提示", MessageBoxButtons.OK);}为Form1类增加变量:int FindPostion=0,该变量用来记录下一次查找的开始位置。