C# 制作文本编辑器.docx
- 文档编号:12835684
- 上传时间:2023-06-08
- 格式:DOCX
- 页数:22
- 大小:185.66KB
C# 制作文本编辑器.docx
《C# 制作文本编辑器.docx》由会员分享,可在线阅读,更多相关《C# 制作文本编辑器.docx(22页珍藏版)》请在冰点文库上搜索。
C#制作文本编辑器
C#2010制作文本编辑器
本练习制作的是仿微软记事本的文本编辑器,包括记事本中的大部分功能。
该文本编辑器采用的是单文档界面(SDI),界面包括菜单栏、状态栏及文本编辑区。
本练习将通过文件存取、ContextMenuStrip和RichTextBox等控件及鼠标事件等的使用来完成文本编辑器的所有功能,具体步骤如下所示:
1.制作主窗体
(1)程序分析首先需要了解的是该程序都包含有哪些功能,记事本的基本功能包括文本操作功能、文本编辑功能和文本格式编辑功能等。
其中,文本操作功能又包括新建文件、打开文件、保存文件和退出等;文本编辑功能包括撤销、剪切、复制、粘贴、查找等;文本格式编辑功能则包括文本自动换行和字体设置。
(2)在VisualStudio中创建名为TextEditor的Windows应用程序项目。
在该项目的设计视图中,将Form1的Text属性设置为“无标题-文本编辑器”。
(3)从【工具箱】的【菜单和工具栏】窗口中选择MenuStrip(菜单)控件拖至Windows窗体中。
然后,对MenuStrip和ToolStripMenuItem(菜单项)的Text属性进行设置,如图10-2所示。
图10-2添加MenuStrip控件
(4)在设计视图中,单击【文件】菜单。
然后,在【属性】面板中,单击属性DropDownItems的【浏览】按钮
,弹出【项集合编辑器】对话框,如图10-3所示。
图10-3【项集合编辑器】对话框
(5)在【项集合编辑器】对话框中,在【选择项】下拉框中选择“Separator”,并单击【添加】按钮,在【成员】列表框就会显示添加的ToolMenuSeparator控件。
然后,用户可以以同样的方式为其他菜单项添加菜单分隔符,如图10-4所示。
图10-4添加菜单分隔符
(6)在菜单下方添加RichTextBox控件,并在【属性】面板中设置其name为“WordBoard”、Anchor属性值为“Top,Bottom,Left,Right”,BackColor为“Transparent”,BorderStyle为Fixed3D,如图10-5所示。
图10-5添加RichTextBox控件
(7)然后,在窗体的底部添加StatusStrip控件,并将其宽度设置与RichTextBox控件宽度相同,Text属性值清空,如图10-6所示。
图10-6添加StatusStrip控件
2.文本操作功能
(1)在Form1.cs代码文件中,定义两个成员变量,分别是strFileName和strRTF,并定义Form1_Load()函数,在该函数中对strRTF变量进行初始化,代码如下所示。
publicpartialclassForm1:
Form
{
stringstrFileName="";//文件名
stringstrRTF="";//用户判断文本框内容是否变化,以至于新建、打开和关闭窗体时好作判断
privatevoidForm1_Load(objectsender,EventArgse)
{
strRTF=WordBoard.Rtf;//用WordBoard.Rtf初始化strRTF
}
}
(2)为Form1添加窗体载入函数Form1_Load()。
然后,定义函数newTxt()用于当用户单击【新建】菜单时弹出保存对话框保存当前文件,代码如下所示。
//新建
privatevoidnewTxt(objectsender,EventArgse)
{
if(strRTF==WordBoard.Rtf)//判断是否已修改文件内容
{
WordBoard.Text="";
strFileName="无标题-文本编辑器";
strRTF=WordBoard.Rtf;
}
else{
DialogResultdr=MessageBox.Show("文件已修改,要保存此文件吗?
","提示",MessageBoxButtons.OKCancel,MessageBoxIcon.Information);
if(dr==DialogResult.OK)
{
menuSave_Click(sender,e);
if(strRTF!
=WordBoard.Rtf)return;//单击保存对话框中的取消按钮或输入了错误的文件名时不退出
}
else{
return;
}
}
this.Text=strFileName;
}
(3)定义函数menuOpen_Click()用于打开已有的TXT文件,在该函数中需要判断当前文件内容是否修改及是否保存,还需要判断用户打开的是否是TXT文件,代码如下所示。
//打开
privatevoidmenuOpen_Click(objectsender,EventArgse)
{
//****************判断打开前的文本是否已保存*********************
if(strRTF!
=WordBoard.Rtf)
{
DialogResultdrMsg=MessageBox.Show("文档内容已修改,但没有保存,现在是否进行保存?
",
"询问",MessageBoxButtons.YesNoCancel,MessageBoxIcon.Question);
if(drMsg==DialogResult.Yes)
{
menuOthersave_Click(sender,e);
if(strRTF!
=WordBoard.Rtf)return;//单击保存对话框中的取消按钮或输入了错误的文件名时不退出
}
if(drMsg==DialogResult.Cancel)return;
}
//***************************************************
WordBoard.Text="";
strFileName="";
strRTF=WordBoard.Rtf;//用strRTF存放新建后的文本,注意,rtxtContent.Rtf是文本框中整个带格式的文本
//*******************************************************
stringstr="";
OpenFileDialogopenFile=newOpenFileDialog();
openFile.InitialDirectory=@"c:
\";
openFile.Filter="文本文件(*.txt)|*.txt";
DialogResultdr=openFile.ShowDialog();
if(dr==DialogResult.OK)
{
strFileName=Path.GetFileName(openFile.FileName);
str=Path.GetExtension(strFileName).ToLower();
switch(str)
{
case".txt":
WordBoard.LoadFile(strFileName,RichTextBoxStreamType.PlainText);
strRTF=WordBoard.Rtf;//用strRTF存放打开后的文本
break;
default:
MessageBox.Show("不支持该类文件!
");
strFileName="";//清空错误的文件名,为保存文件做好准备
break;
}
this.Text=strFileName.ToString()+"-文本编辑器";
}
}
(4)定义menuSave_Click()函数用于保存当前文档,在该函数中还需要判断用户是否是已保存过的文件,代码如下所示。
//保存
privatevoidmenuSave_Click(objectsender,EventArgse)
{
inti=0;
stringstr="";
if(strFileName=="")
{
menuOthersave_Click(sender,e);//调用另存为函数
}
else
{
i=strFileName.IndexOf(".",0);
if(i!
=-1)str=strFileName.Substring(i).ToLower();
switch(str)
{
case".txt":
WordBoard.SaveFile(strFileName,RichTextBoxStreamType.RichText);
break;
}
strRTF=WordBoard.Rtf;//用strRTF存放保存后的文本
}
}
(5)定义menuOthersave_Click()函数用于将当前文档另存,在该函数中需要判断用户是否确定文档另存,代码如下所示。
//另存为
privatevoidmenuOthersave_Click(objectsender,EventArgse)
{
inti=0;
stringstr="";
SaveFileDialogsaveFile=newSaveFileDialog();//另存为对话框
saveFile.InitialDirectory=@"c:
\";
saveFile.Filter="文本文件(*.txt)|*.txt";
DialogResultdr=saveFile.ShowDialog();
if(dr==DialogResult.OK)//是否确定另存
{
strFileName=Path.GetFileName(saveFile.FileName);
i=strFileName.IndexOf(".",0);
if(i!
=-1)str=strFileName.Substring(i).ToLower();
switch(str)
{
case".txt":
WordBoard.SaveFile(strFileName,RichTextBoxStreamType.PlainText);
strRTF=WordBoard.Rtf;//用strRTF存放保存后的文本
break;
default:
MessageBox.Show("不支持该类文件!
");
strFileName="";//清空错误的文件名,为保存文件做好准备
break;
}
this.Text=strFileName;
}
else{
this.Text="无标题-文本编辑器";
}
}
(6)定义print_Click()和menuExit_Click()函数分别用于打印文件和退出程序,代码如下所示。
//打印
privatevoidprint_Click(objectsender,EventArgse)
{
PrintDialogprintdialog1=newPrintDialog();//打印对话框
printdialog1.ShowDialog();
}
//退出
privatevoidmenuExit_Click(objectsender,EventArgse)
{
Application.Exit();
}
3.基本文本操作功能
(1)文本操作功能所需函数已定义完毕,接下来就是基本文本编辑功能函数。
首先,定义较为简单的文本编辑功能函数,代码如下所示。
//撤销
privatevoidundo_Click(objectsender,EventArgse)
{
WordBoard.Undo();
}
//恢复
privatevoidredo_Click(objectsender,EventArgse)
{
WordBoard.Redo();
}
//剪切
privatevoidcut_Click(objectsender,EventArgse)
{
WordBoard.Cut();
}
//复制
privatevoidcopy_Click(objectsender,EventArgse)
{
WordBoard.Copy();
}
//粘贴
privatevoidpaste_Click(objectsender,EventArgse)
{
WordBoard.Paste();
}
//删除
privatevoiddelete_Click(objectsender,EventArgse)
{
WordBoard.SelectedText="";
}
//全选
privatevoidselectAll_Click(objectsender,EventArgse)
{
WordBoard.SelectAll();
}
//日期/时间
privatevoiddatetime_Click(objectsender,EventArgse)
{
WordBoard.SelectedText=DateTime.Now.ToString();
}
4.高级文本操作功能
(1)接下来需要新建查询窗体Form2。
在【解决方案资源管理器】中,右击“TextEditor”树状菜单元素,执行【添加】|【Windows窗体】命令,在弹出的【添加新项】对话框中,选择“Windows窗体”模版,输入名称为“Form2.cs”,如图10-7所示。
图10-7添加新项
(2)在Form2设计视图中,向窗体中添加Label、TextBox、Button、CheckBox、GroupBox和RadioButton控件,并在【属性】面板中对其属性进行设置,如图10-8所示。
图10-8查找窗体设计
(3)在Form2.cs代码文件中,定义button1_Click()函数用于查询用户输入。
在该函数中需要判断用户是否选择“区分大小写”,及查询方向,代码如下所示。
Form1f1;
intloc=-1;
boolflag=false;
StringtxtB;
//查找
privatevoidbutton1_Click(objectsender,EventArgse)
{
try
{
if(textBox1.Text.Trim()=="")//去空格
{
MessageBox.Show("请输入查找内容!
","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
return;
}
f1=(Form1)this.Owner;
if(checkBox1.Checked==false)//是否区分大小写
{
loc=f1.WordBoard.Text.ToLower().IndexOf(textBox1.Text.ToLower().Trim1);
txtB=textBox1.Text.ToLower().Trim();
}
else
{
loc=f1.WordBoard.Text.IndexOf(textBox1.Text.Trim(),loc+1);
txtB=textBox1.Text.Trim();
}
if(loc!
=-1)//是否查询到最后
{
if(up.Checked)//向上查询
{
inti=f1.WordBoard.SelectionStart;
if(i==0)
i=1;
elseif(i>=0)
i=f1.WordBoard.Find(txtB,0,i-1,RichTextBoxFinds.Reverse);
elseif(i<0)
i=0;
}
else{//向下查询
f1.WordBoard.Select(loc,txtB.Length);
}
f1.WordBoard.Focus();
flag=true;
}
else
{
if(flag)
{
MessageBox.Show("查找完毕!
","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
flag=false;
}
else
MessageBox.Show("没有找到!
","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
}
}
catch(Exceptionec)
{
MessageBox.Show(ec.Message.ToString(),"提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
}
}
(4)定义函数canncel()用于当用户单击【取消】按钮取消查询时,关闭查询对话框时使用,代码如下所示。
//取消
privatevoidcanncel(objectsender,EventArgse)
{
this.Close();
}
(5)再次新建Windows窗体,名称为“Form3.cs”。
向该窗体中添加Label、TextBox、Button和CheckBox控件,并对这些控件的属性进行设置,如图10-9所示。
图10-9添加窗体设计
(6)在Form2.cs代码文件中,定义button2_Click()函数用于在文件中一一查找并替换用户输入的内容,代码如下所示。
Form1f1;
intloc=-1;
boolflag=false;
//替换
privatevoidbutton2_Click(objectsender,EventArgse)
{
try
{
if(textBox2.Text.Trim()=="")//去空格
{
MessageBox.Show("请输入您要替换的内容!
","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
return;
}
f1=(Form1)this.Owner;
if(loc!
=-1)
{
f1.WordBoard.SelectedText=textBox2.Text;
f1.WordBoard.Focus();
button1_Click(sender,e);
flag=true;
}
else
{
if(flag)
{
MessageBox.Show("替换完毕!
","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
flag=false;
}
else
MessageBox.Show("不合法替换!
","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
}
}
catch(Exceptiones)
{
MessageBox.Show(es.Message.ToString(),"提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
}
}
(7)定义button3_Click()函数用于将当前文件中用户输入的查询内容全部替换为用户输入的替换内容,代码如下所示。
intstart;
//全部替换
privatevoidbutton3_Click(objectsender,EventArgse)//全部替换
{
f1=(Form1)this.Owner;
stringstr1,str2;
str1=textBox1.Text;
str2=textBox2.Text;
start=0;
start=f1.WordBoard.Find(str1,start,RichTextBoxFinds.MatchCase);
while(start!
=-1)
{
f1.WordBoard.SelectedText=str2;
start+=str2.Length;
start=f1.WordBoard.Find(str1,start,RichTextBoxFinds.MatchCase);
}
MessageBox.Show("已替换到文档的结尾","替换结束对话框",MessageBoxButtons.OK);
start=0;
f1.WordBoard.Focus();
}
(8)定义button1_Click()函数用于查找用户输入的内容,【替换】窗体中的查找函数与【查找】窗体中的查找函数基本相同,不同的是不需要区分大小写,代码如下所示。
//查找
privatevoidbutton1_Click(objectsender,EventArgse)
{
try
{
if(textBox1.Text.Trim()=="")//去空格
{
MessageBox.Show("请输入查找内容!
","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
return;
}
f1=(Form1)this.Owner;
loc=f1.WordBoard.Text.IndexOf(textBox1.Text.Trim(),loc+1);
if(loc!
=-1)//是否查询到文档末尾
{
f1.WordBoard.Select(loc,textBox1.Text.Trim().Length);
f1.WordBoard.Focus();
flag=true;
}
else
{
if(flag)
{
MessageBox.Show("查找完毕!
","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
flag=false;
}
else
MessageBox.Show("没有找到!
","提示",MessageBoxButtons.OK,Me
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C# 制作文本编辑器 制作 文本 编辑器