用C编写文本编辑器实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

用C#编写“文本编辑器”实验报告
实验3 项目名称:文本编辑器
1、实验目的和要求
通过本实验,使得学生理解操作系统目录与文件的概念,掌握文件流的读写操作。

要求编写一个满足以下条件的文本编辑器程序。

(1)程序界面与操作系统中的记事本界面类似。

(2)程序可以打开、保存和编辑txt文本文件。

(3)程序可以查找和替换文本内容中的指定字符串
2、程序代码
using System;
using System.Collections.Generic;
using ponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace 记事本
{
public partial class frmNotepad : Form
{
bool b = false;//布尔变量b用于判断文件是新建的还是从磁盘打开。

true表示文件从磁盘打开的,false表示文件是新建的,默认值为false
bool s = true;//布尔变量s用于判断文件是否被保存。

false表示未被保存,默认值为true
public frmNotepad()
{
InitializeComponent();
}
/*多格式文本框TextChange的事件代码*/
private void rtxtNotepad_TextChanged(object sender, EventArgs e)
{
//文本被修改后,设置s为false,表示文件未被保存
s = false;
}
/*【新建】菜单代码*/
private void tsmiNew_Click(object sender, EventArgs e)
{
//判断当前文件是否从磁盘打开,或者新建时文档不为空,并且文件未被保存
if (b == true || rtxtNotepad.Text.Trim() != "")
{
//若文件未被保存
if (s == false)
{
string result;
result = MessageBox.Show("文件尚未保存,是否保存?", "保存文件", MessageBoxButtons.YesNoCancel).ToString();
switch (result)
{
case "Yes":
//若文件是从磁盘打开的
if (b == true)
{
//按文件打开的路径保存文件
rtxtNotepad.SaveFile(odlgNotepad.FileName);
}
//若文件不是从磁盘打开的
else if (sdlgNotepad.ShowDialog() == DialogResult.OK)
{
rtxtNotepad.SaveFile(sdlgNotepad.FileName);
}
s = true;
rtxtNotepad.Text = "";
break;
case "No":
b = false;
rtxtNotepad.Text = "";
break;
}
}
}
}
/*【打开】菜单代码*/
private void tsmiOpen_Click(object sender, EventArgs e)
{
if (b == true || rtxtNotepad.Text.Trim() != "")
{
string result;
result = MessageBox.Show("文件尚未保存,是否保存?", "保存文件", MessageBoxButtons.YesNoCancel).ToString();
switch (result)
{
case "Yes":
if (b == true)
{
rtxtNotepad.SaveFile(odlgNotepad.FileName);
}
else if (sdlgNotepad.ShowDialog() == DialogResult.OK)
{
rtxtNotepad.SaveFile(sdlgNotepad.FileName);
}
s = true;
rtxtNotepad.Text = "";
break;
case "No":
b = false;
rtxtNotepad.Text = "";
break;
}
}
odlgNotepad.RestoreDirectory = true;
if ((odlgNotepad.ShowDialog() == DialogResult.OK) && odlgNotepad.FileName != "")
{
rtxtNotepad.LoadFile(odlgNotepad.FileName);
b = true;
}
s = true;
}
/*【保存】菜单代码*/
private void tsmiSave_Click(object sender, EventArgs e)
{
//若文件从磁盘打开并且修改了其内容
if (b == true && rtxtNotepad.Modified == true)
{
rtxtNotepad.SaveFile(odlgNotepad.FileName);
s = true;
}
else if (b == false && rtxtNotepad.Text.Trim() != "" && sdlgNotepad.ShowDialog() == DialogResult.OK)
{
rtxtNotepad.SaveFile(sdlgNotepad.FileName);
s = true;
b = true;
odlgNotepad.FileName = sdlgNotepad.FileName;
}
}
/*【另存为】菜单代码*/
private void tsmiSaveAs_Click(object sender, EventArgs e)
if (sdlgNotepad.ShowDialog() == DialogResult.OK)
{
rtxtNotepad.SaveFile(sdlgNotepad.FileName);
s = true;
}
}
/*【退出】菜单代码*/
private void tsmiClose_Click(object sender, EventArgs e)
{
Application.Exit();
}
//【撤销】菜单代码
private void tsmiUndo_Click(object sender, EventArgs e)
{
rtxtNotepad.Undo();
}
//【复制】菜单代码
private void tsmiCopy_Click(object sender, EventArgs e)
{
rtxtNotepad.Copy();
}
//【剪切】菜单代码
private void tsmiCut_Click(object sender, EventArgs e)
{
rtxtNotepad.Cut();
}
//【粘贴】菜单代码
private void tsmiPaste_Click(object sender, EventArgs e)
{
rtxtNotepad.Paste();
}
//【全选】菜单代码
private void tsmiSelectAll_Click(object sender, EventArgs e) {
rtxtNotepad.SelectAll();
}
//【日期】菜单代码
private void tsmiDate_Click(object sender, EventArgs e)
{
rtxtNotepad.AppendText(System.DateTime.Now.ToString()); }
//【自行换行】菜单代码
private void tsmiAuto_Click(object sender, EventArgs e)
if (tsmiAuto.Checked == false)
{
tsmiAuto.Checked = true;//选中该菜单项
rtxtNotepad.WordWrap = true;//设置为自动换行
}
else
{
tsmiAuto.Checked = false;
rtxtNotepad.WordWrap = false;
}
}
//【字体】菜单代码
private void tsmiFont_Click(object sender, EventArgs e)
{
fdlgNotepad.ShowColor = true;
if (fdlgNotepad.ShowDialog() == DialogResult.OK)
{
rtxtNotepad.SelectionColor = fdlgNotepad.Color;
rtxtNotepad.SelectionFont = fdlgNotepad.Font;
}
}
//【工具栏】菜单代码
private void tsmiToolStrip_Click(object sender, EventArgs e)
{
Point point;
if (tsmiToolStrip.Checked == true)
{
point = new Point(0, 25);//隐藏工具栏时,把坐标设为(0,25),因为菜单的高度为24
tsmiToolStrip.Checked = false;
tlsNotepad.Visible = false;
rtxtNotepad.Location = point;//设置多格式文本框左上角的位置
rtxtNotepad.Height += tlsNotepad.Height;//隐藏工具栏后,增加文本框的高度
}
else
{
//显示工具栏时,多格式文本框左上角的位置为(0,50),因为工具栏的高度25加上菜单的高度25=50
point = new Point(0, 50);
tsmiToolStrip.Checked = true;
tlsNotepad.Visible = true;
rtxtNotepad.Location = point;
rtxtNotepad.Height -= tlsNotepad.Height;
}
}
//【状态栏】菜单代码
private void tsmiStatusStrip_Click(object sender, EventArgs e)
{
if (tsmiStatusStrip.Checked == true)
{
tsmiStatusStrip.Checked = false;
stsNotepad.Visible = false;
rtxtNotepad.Height += stsNotepad.Height;
}
else
{
tsmiStatusStrip.Checked = true;
stsNotepad.Visible = true;
rtxtNotepad.Height -= stsNotepad.Height;
}
}
//【关于记事本】菜单代码
private void tsmiAbout_Click(object sender, EventArgs e)
{
frmAbout ob_FrmAbout = new frmAbout();
ob_FrmAbout.Show();
}
private void tlsNotepad_ItemClicked(object sender, ToolStripItemClickedEventArgs e) {
int n;//变量n用来接收按下按钮的索引号
n = tlsNotepad.Items.IndexOf(e.ClickedItem);
switch (n)
{
case 1:
tsmiNew_Click(sender, e);
break;
case 2:
tsmiOpen_Click(sender, e);
break;
case 3:
tsmiSave_Click(sender, e);
break;
case 4:
tsmiCut_Click(sender, e);
break;
case 5:
tsmiCopy_Click(sender, e);
break;
case 6:
tsmiPaste_Click(sender, e);
break;
case 7:
tsmiAbout_Click(sender, e);
break;
}
}
//计时器控件代码
private void tmrNotepad_Tick(object sender, EventArgs e)
{
tssLbl2.Text = System.DateTime.Now.ToString();
}
//窗体的sizechanged事件代码(为使得改变窗体大小时,状态栏随之改变)
private void frmNotepad_SizeChanged(object sender, EventArgs e)
{
frmNotepad ob_frmNotepad = new frmNotepad();
tssLbl1.Width = this.Width / 2 - 12;
tssLbl2.Width = tssLbl1.Width;
}
}
}
3、实验结果及程序运行界面。

相关文档
最新文档