文本编辑器
实验要求
至少完成以下功能:文件操作: 新建,打开,保存,退出; //支持rtf文件
编辑操作: 复制,剪切,粘贴,全选;
查找与替换: 设计查找(替换)窗口,支持查找(替换)操作 。
格式操作: 字体,颜色等.
界面设计应考虑美观,操作简便等问题,应有工具栏,右键菜单等;
设计思路
定义一个父窗口类Form1,定义一个文本编辑窗口类Editor,在Form1上添加各种功能操作按钮,如新建、打开、查找等,每次新建或打开,就新增一个Editor实例,并将其父窗口指定为Form1,各种按钮的操作对象均为Form1中的当前活动子窗口(Editor)this.ActiveMdiChild,符合一般用户的操作习惯;文本编辑窗口类Editor只有两个控件,文本框richtextbox和右键菜单contextMenuStrip,一个属性Boolean类属性isEdited,用来表示当前文本是否被编辑过;
程序退出时,用foreach语句逐个检测子窗口的isEdited属性,若为true,则执行保存操作,否则直接关闭;保存时,若该属性为false,则不用进行任何操作;
查找和替换:定义查找窗口类FindForm,利用richtextbox的Find函数,找到第一个匹配的字符串,记录此时位置,从该处开始继续用Find函数,查找下一个。替换操作大同小异,结合while语句,查找出全部匹配的字符串,并替换。
核心代码:
Form1.cs
private void Form1_Load(object sender, EventArgs e)
{
新建ToolStripMenuItem.PerformClick();
activeForm = ((Editor)(this.ActiveMdiChild));
this.Text = activeForm.Text;
foreach (FontFamily font in FontFamily.Families)
//加载系统安装字体名称到ComboBox控件
{
this.ComboFontType.Items.Add(font.Name);
}
}
private void 新建ToolStripMenuItem_Click(object sender, EventArgs e)
{
Editor frm = new Editor();
formCount++;
newTexterCount++;
frm.Tag = true;
frm.MdiParent = this;
frm.Text = "新建文本文档" + newTexterCount.ToString();
frm.Show();
}
private void 保存ToolStripMenuItem_Click(object sender, EventArgs e)
{
if ((Boolean)this.ActiveMdiChild.Tag && ((Editor)this.ActiveMdiChild).isEdited)
//如果是新建的文本且编辑过,转向另存为
另存为ToolStripMenuItem