文本编辑器
一、实验名称
文本编辑器的制作
二、实验要求
用C#的可视化环境通过制作一个RichTextBox这样一个文本编辑器,熟
悉在可视化环境下编程,并且学会使用里面提供的一些组装好的一些工具。
三、实验内容
综合运用Visual C#.NET提供的标准控件,模仿Windows中的记事本和
Word文档的功能,制作一个自己的文档编辑工具。
四、实验步骤及部分代码解析
此应用程序选择了使用RichTextBox控件,之所以选用RichTextBox是因
为它在允许用户输入和编辑文本的同时提供了比普通的 TextBox控件更高级
的格式特征。
第一是:实现文件菜单的功能,新建项目,放置RichTextBox控件到窗体,
修改相应的属性,这里不再详述。放置MenuStrip控件到窗体,增加顶级菜单
项文件,弹出菜单项分别为:新建、打开、保存、另存为、页面设置、打印预
览、打印、属性、关闭当前窗口和退出。如下图所示:
当改变了文本内容点击新建或关闭窗口时,应提示是否保存当前的修改,
增加函数如下:
第 1 页 共 13 页
文本编辑器
public bool IfSaveOldFile()
{bool ReturnValue = true;
if (bSave)
{System.Windows.Forms.DialogResult dr;
dr = MessageBox.Show(this, "您要保存当前的修改吗?", "保存当前更改吗?",
MessageBoxButtons. YesNoCancel, MessageBoxIcon.Question);
switch (dr){
case System.Windows.Forms.DialogResult.Yes: //单击了yes按钮,保存修改
bSave = false; //保存文件后,应使bSave为false
if (s_4lename.Length != 0)
richTextBox1.SaveFile(s_4lename, RichTextBoxStreamType.PlainText);
else{SaveFileDialog saveFileDialog1 = new SaveFileDialog();
if (saveFileDialog1.ShowDialog() == DialogResult.OK){
s_4lename = saveFileDialog1.FileName;
richTextBox1.SaveFile(s_4lename, RichTextBoxStreamType.PlainText);}
} ReturnValue = true;
break;
case System.Windows.Forms.DialogResult.No:
bSave = false;
ReturnValue = true;
break;
case System.Windows.Forms.DialogResult.Cancel:
ReturnValue = true;
break; }}
return ReturnValue;}
定义布尔型变量bSave=false来跟踪控件RichTextBox中的文本内容是否
被修改,当文本内容发生变化时bSave=true,表示要询问用户是否保存当前已
被修改的文件。
private void richTextBox1_TextChanged(object sender, EventArgs e)
{ bSave = true; } //控件的TextChanged事件处理函数
第 2 页 共 13 页
文本编辑器
新建、另存为和退出的事件处理函数分别如下所示:
private void 新建NToolStripButton_Click(object sender, EventArgs e)
{if (!IfSaveOldFile()) //原文件没有变更
return;
FormChild formChild = new FormChild();
formChild.Show();}
private void MenuItemFileSaveAs_Click(object sender, EventArgs e)
{if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{richTextBox1.SaveFile(saveFileDialog1.FileName,RichTextBoxStreamType.Pl
ainText);
bSave = false; }}
private void 退出ToolStripMenuItem_Click(object sender, EventArgs e)
{if (IfSaveOldFile())
Close();}
第二是:实现剪贴板的功能,剪贴板的功能实现较为简单,只是其中的剪
切和复制及全选在程序初始运行时应为灰色(不可用),当文本框中有内容且
至少有部分被选中后才可用。剪贴板的实现方法及部分代码如下:
剪切、复制及全选菜单项的事件处理函数如下:
private void 剪切ToolStripMenuItem_Click(object sender, EventArgs e)
{richTextBox1.Cut();} //剪切
private void 复制ToolStripMenuItem_Click(object sender, EventArgs e)
{ richTextBox1.Copy(); } //复制
private void 全选ToolStripMenuItem_Click(object sender, EventArgs e)
{richTextBox1.SelectAll();} //全选
第 3 页 共 13 页
文本编辑器
为RichTextBox控件的MouseCaptureChanged事件添加处理函数如
下:
private void richTextBox1_MouseCaptureChanged(object sender,
EventArgs e)
{if (richTextBox1.SelectedText.Length > 0)
{剪切ToolStripMenuItem.Enabled = true;
剪切UToolStripButton.Enabled = true;
复制ToolStripMenuItem.Enabled = true;
复制CToolStripButton.Enabled = true;
全选ToolStripMenuItem.Enabled = true;}
else{剪切ToolStripMenuItem.Enabled =false;
剪切UToolStripButton.Enabled=false;
复制ToolStripMenuItem.Enabled = false;
复制CToolStripButton.Enabled = false;
全选ToolStripMenuItem.Enabled = false; }}
第三是:修改字体、修改字体颜色和修改背景颜色的实验方法,为修改使用的
字体,可打开字体对话框FontDialog,选择指定字体。可以按两种方式修改字
体,如果未选中文本,表示以后键入的字符将按选定字符输入。如果选中文
本,则仅修改选定文本的字体。修改字体颜色和背景颜色也根据同样原则。这
里只简要说明实验修改字体颜色的实现的方法。
放置colorDialog控件到窗体,增加颜色菜单项的事件处理函数如下:
private void 字体颜色ToolStripMenuItem_Click(object sender, EventArgs e)
{if (colorDialog1.ShowDialog() == DialogResult.OK)
richTextBox1.SelectionColor = colorDialog1.Color; }
单击字体颜色菜单项后弹出修改字体颜色的对话框:
第 4 页 共 13 页