C#文本编辑器.docx
- 文档编号:18438552
- 上传时间:2023-08-18
- 格式:DOCX
- 页数:35
- 大小:203.77KB
C#文本编辑器.docx
《C#文本编辑器.docx》由会员分享,可在线阅读,更多相关《C#文本编辑器.docx(35页珍藏版)》请在冰点文库上搜索。
C#文本编辑器
第四讲Windows界面程序设计
简介
本讲涉及的控件有:
菜单、工具条、状态栏、分页控件、系统对话框(打开对话框、保存对话框、预览对话框、打印对话框、打印设置对话框、颜色对话框、字体对话框)、用户自定义对话框等。
1功能设计
1.1文件
新建:
新建一个编辑窗口;
打开:
弹出打开对话框,打开一个指定的文本文件;
保存:
如果当前有文件名,就保存当前编辑的文本文件,如果没有文件名,弹出保存对话框,保存当前编辑的文本文件;
另存为:
弹出保存对话框,将当前编辑的文本文件以指定的另一个文件名存盘;
退出:
结束当前编辑的文本文件,退出系统;
1.2编辑
剪切:
剪切选定内容,并放到剪切板;
复制:
复制选定内容,并放到剪切板;
粘贴:
将剪切板的内容插入到当前位置;
撤消:
撤消上次操作;
恢复:
恢复上次操作;
查找:
?
替换:
?
1.3格式
字体:
弹出字体对话框,设置选定文本的字体;
颜色:
弹出颜色对话框,设置选定文本的颜色;
左对齐:
当前段文本左对齐;
中对齐:
当前段文本中对齐;
右对齐:
当前段文本右对齐;
缩进:
当前段文本悬挂缩进;
1.4打印
预览:
预览编辑器中的内容;
打印:
打印编辑器中的内容;
设置:
设置默认打印页面;
2功能实现
2.1建立项目
解决方案(ChA201文本文件编辑器),项目名称(Editor),窗体文件(frmEditor);
测试结果:
2.2设计窗体
控件
属性
属性值
说明
Form
Name
frmEditor
Text
文本文件编辑器
Font
宋体,五号
MenuStrip
Name
msEditor
菜单条
ToolStripMenuItem
Name
mnFile
文件菜单
Text
文件
ToolStripMenuItem
Name
miFileNew
Text
新建
ToolStripMenuItem
Name
miFileOpen
Text
打开
ToolStripMenuItem
Name
miFileSave
Text
保存
ToolStripMenuItem
Name
miFileSaveAs
Text
另存为
ToolStripMenuItem
Name
miFileExit
Text
退出
ToolStripMenuItem
Name
mnEdit
编辑菜单
Text
编辑
ToolStripMenuItem
Name
miEditCut
Text
剪切
ToolStripMenuItem
Name
miEditCopy
Text
复制
ToolStripMenuItem
Name
miEditPaste
Text
粘贴
ToolStripMenuItem
Name
miEditUnDo
Text
撤消
ToolStripMenuItem
Name
miEditReDo
Text
恢复
ToolStripMenuItem
Name
miEditFind
Text
查找
ToolStripMenuItem
Name
miEditReplace
Text
替换
ToolStripMenuItem
Name
mnStyle
格式菜单
Text
格式
ToolStripMenuItem
Name
miStyleFont
Text
字体
ToolStripMenuItem
Name
miStyleColor
Text
颜色
ToolStripMenuItem
Name
miStyleAlignLeft
Text
左对齐
ToolStripMenuItem
Name
miStyleAlignCenter
Text
中对齐
ToolStripMenuItem
Name
miStyleAlignRight
Text
右对齐
ToolStripMenuItem
Name
miStyleIndent
Text
缩进
ToolStripMenuItem
Name
mnPrint
打印菜单
Text
打印
ToolStrip
Name
tsEditor
工具条
StatusStrip
Name
ssEditor
状态条
RichTextBox
Name
rtbEditor
富格式文本编辑器
Dock
Fill
OpenFileDialog
Name
dlgOpen
打开文件对话框
PrintDocument
Name
docPrint
打印文档控件
测试:
2.3文件功能实现
在frmEditor类的开始定义一个数据成员_fileName,用于保存当前正在编辑的文件名。
publicpartialclassfrmEditor:
Form
{
privatestring_fileName;//编辑的当前文件名
publicfrmEditor()
{
InitializeComponent();
}
......
}
2.3.1退出
实际上就是退出应用程序。
privatevoidmiFileExit_Click(objectsender,EventArgse)
{
Application.Exit();
}
2.3.2新建文件
实际上就是将rtbEditor中的内容清空,同时将当前正在编辑的文件名也设置为空。
privatevoidmiFileNew_Click(objectsender,EventArgse)
{
rtbEditor.Text="";
_fileName="";
}
2.3.3打开文件
设置文件打开对话框的过滤参数,即:
Filter=文本文件(*.txt)|*.txt|所有文件(*.*)|*.*,然后弹出一个打开对话框,用户指定一个文件,然后将文件的内容读入到rtbEditor中。
privatevoidmiFileOpen_Click(objectsender,EventArgse)
{
dlgOpen.Filter="文本文件(*.txt)|*.txt|富格式文件(*.rtf)|*.rtf|所有文件(*.*)|*.*";
if(dlgOpen.ShowDialog()==DialogResult.OK)
{
_fileName=dlgOpen.FileName;
if(Path.GetExtension(_fileName)==".rtf")
rtbEditor.LoadFile(_fileName,RichTextBoxStreamType.RichText);
else
rtbEditor.LoadFile(_fileName,RichTextBoxStreamType.PlainText);
}
}
测试:
选择菜单“文件|打开”时,弹出一个文件打开对话框,初始的路径为“我的文档”。
思考题:
?
如何指定打开对话框默认的路径?
2.3.4保存文件
文本编辑器类frmEditor有一个数据成员_fileName,用于保存当前正在编辑的文件名,新建文件时,设置_fileName为空。
选择“保存”菜单时,如果_fileName为空,动态创建一个保存对话框(默认扩展名、默认文件夹、默认文件类型),由用户指定保存的文件名,将编辑器中的内容保存到指定的文件中,然后修改_fileName。
privatevoidmiFileSave_Click(objectsender,EventArgse)
{
//如果文件名为空,表示是新文件,保存时需要用户指定文件名
if(_fileName=="")
{
//动态创建一个文件保存对话框
SaveFileDialogdlgSave=newSaveFileDialog();
//设置保存对话框的默认参数
dlgSave.InitialDirectory="c:
\tmp";
dlgSave.Filter="文本文件(*.txt)|*.txt|富格式文件(*.rtf)|*.rtf|所有文件(*.*)|*.*";
dlgSave.Title="保存我的文件";
//显示保存对话框
if(dlgSave.ShowDialog()==DialogResult.OK)//表示按下“确认”按钮
{
_fileName=dlgSave.FileName;//得到用户指定的文件名
//如果扩展名为rtf格式,则以RTF格式保存文件,否则以普通文本格式保存文件
if(Path.GetExtension(_fileName)==".rtf")
rtbEditor.SaveFile(_fileName,RichTextBoxStreamType.RichText);
else
rtbEditor.SaveFile(_fileName,RichTextBoxStreamType.PlainText);
}
}
//如果不是新文件,根据当前文件的格式保存当前文件
else
{
if(Path.GetExtension(_fileName)==".rtf")
rtbEditor.SaveFile(_fileName,RichTextBoxStreamType.RichText);
else
rtbEditor.SaveFile(_fileName,RichTextBoxStreamType.PlainText);
}
}
2.3.5另存为文件
弹出一个文件保存对话框,用户指定保存的文件名,将当前的文件内容保存到用户的指定文件中,并修改当前文件名_fileName。
(代码留给学生自己完成)
测试:
新建一个文件,输入文件内容,保存(这时需要指定新文件名,扩展名为txt),退出。
打开一个文本文件,添加一行文本,修改部分内容,删除一些内容,保存(这时不需要指定新文件名),另存为一个新文件,扩展名为rtf,退出。
打开一个扩展名为rtf文件的文件,退出。
2.4编辑功能实现
2.4.1剪切、复制、粘贴、撤消、恢复
这几个功能都是RichTextBox自身提供的,我们直接引用就可以了。
以Cut为例,其代码如下:
privatevoidmiEditCut_Click(objectsender,EventArgse)
{
rtbEditor.Cut();
}
测试:
新建一个文件,输入文件内容,保存(这时需要指定新文件名,扩展名为txt),退出。
思考题:
?
可以实现查找和替换功能?
2.5格式功能实现
2.5.1字体
创建一个字体对话框(dlgFont),弹出字体对话框,选择字体。
根据是否有选择文本,若有,修改选择文本的字体,否则,修改整个文本的字体。
privatevoidmiStyleFont_Click(objectsender,EventArgse)
{
//创建字体对话框
FontDialogdlgFont=newFontDialog();
dlgFont.ShowColor=true;
dlgFont.ShowApply=true;
//设置字体对框的默认字体,
//如果已经有选择文本,则设置为选择文本的字体和颜色
//否则设置为全文的字体和姿色
if(rtbEditor.SelectionLength>0)
{
dlgFont.Font=rtbEditor.SelectionFont;
dlgFont.Color=rtbEditor.SelectionColor;
}
else
{
dlgFont.Font=rtbEditor.Font;
dlgFont.Color=rtbEditor.ForeColor;
}
//显示字体对话框,且用户按下了“确认”按钮
if(dlgFont.ShowDialog()==DialogResult.OK)
{
//如果有选择文件,刚修改选择文本的字体和颜色
if(rtbEditor.SelectionLength>0)
{
rtbEditor.SelectionFont=dlgFont.Font;
rtbEditor.SelectionColor=dlgFont.Color;
}
//否则修改整个文本的字体和颜色
else
{
rtbEditor.Font=dlgFont.Font;
rtbEditor.ForeColor=dlgFont.Color;
}
}
}
2.5.2颜色
创建一个颜色对话框(dlgColor),设置颜色对话框的当前颜色(没有选定,就为编辑器的颜色,若有选定,就为选定文本的颜色),弹出颜色对话框,选择颜色。
测试:
首先打开一个文件,然后选择菜单“格式|字体”,弹出字体对话框,选择一种字体,然后确认对话框,观察编辑器中的字体变化。
选择菜单“格式|颜色”,弹出颜色对话框,选择一种颜色,然后确认对话框,观察编辑器中的颜色变化。
?
在字体对话框中怎么没有字体的颜色?
?
如何只改变选择部分的字体?
==>答案
设置字体对话框的一些属性(ShowColor,ShowApply);
只改变选择部分的字体(SelectionFont)和颜色(SelectionColor);
2.5.3左、中、右对齐
改变当前段的对齐方式,是RichEditBox自带的属性SelectionAlignment,下面的代码是实现了当前段的左对齐。
privatevoidmiStyleAlignLeft_Click(objectsender,EventArgse)
{
rtbEditor.SelectionAlignment=HorizontalAlignment.Left;
}
2.5.4缩进
改变当前段的缩进方式,是RichEditBox自带的属性SelectionHangingIndent(悬挂),SelectionIndent(左缩进),SelectionRightIndent(右缩进),下面的代码指定了当前段的左缩进。
privatevoidmiStyleIndent_Click(objectsender,EventArgse)
{
rtbEditor.SelectionIndent=20;
}
测试:
首先打开一个文件,然后选择菜单“格式|左对齐”,可以设置光标所在行左对齐,还可设置中对齐、右对齐、左缩进。
思考题:
?
如何设置首行缩进、悬挂缩进?
》首行缩进和悬挂缩进均采用SelectionHangingIndent进行设置,设置值为负值时,设置首行缩进,设置值为正值时,设置悬挂缩进。
2.6打印功能实现
无论是预览还是打印,主要还是要依赖PrintDocument控件来完成的,响应该控件的PrintPage事件,在该事件响应中真正输出每页的内容。
下面几个功能的实现,有些内容是相互关系,如:
要显示或打印的内容、当前显示或打印的字体、当前的打印机设置和页面设置,所以,添加四个数据成员如下:
//下面几个数据成员用于打印
privateStringReader_srPrint=null;//打印的内容
privateFont_printFont;//打印字体
PrinterSettings_printerSettings=newPrinterSettings();//打印机设置
PageSettings_pageSettings=newPageSettings();//页面设置
2.6.1预览
创建打印预览对话框,将当前编辑器中的文本读到一个文本流StringReader中,设置打印字体与文件编辑器中的字体相同,设置PrintDocument控件的页面设置为用户设置的值,将PrintDocument控件与预览对话框关联起来,调用预览对话框,即可预览文本编辑器中的内容。
2.6.2打印
创建打印对话框,将当前编辑器中的文本读到一个文本流StringReader中,设置打印字体与文件编辑器中的字体相同,设置PrintDocument控件的页面设置为用户设置的值,将PrintDocument控件与打印对话框关联起来,调用打印对话框,即可打印文本编辑器中的内容。
2.6.3设置打印机和设置页面
这两个功能是关联的,以设置页面为主,在设置页面中包含了设置打印机功能。
创建页面设置对话框,设置对话框的当前打印机参数和页面参数,显示对话框,用户可以修改打印机或页面的参数,确认后,即可保存当前的设置。
privatevoidmiPrintPrinterSetup_Click(objectsender,EventArgse)
{
//创建页面设置对话框
PageSetupDialogdlgPageSetup=newPageSetupDialog();
//使用用户指定的打印机设置:
这里需要既设置打印机设置,还要设置页面设置
dlgPageSetup.PrinterSettings=_printerSettings;
dlgPageSetup.PageSettings=_pageSettings;
//显示页面设置对话框
if(dlgPageSetup.ShowDialog()==DialogResult.OK)
_printerSettings=dlgPageSetup.PrinterSettings;
}
privatevoidmiPrintPageSetup_Click(objectsender,EventArgse)
{
//创建页面设置对话框
PageSetupDialogdlgPageSetup=newPageSetupDialog();
//使用用户指定的页面设置
dlgPageSetup.PageSettings=_pageSettings;
//显示页面设置对话框
if(dlgPageSetup.ShowDialog()==DialogResult.OK)
_pageSettings=dlgPageSetup.PageSettings;
}
测试:
首先打开一个文件,然后选择菜单“打印|预览”,可以看到预览效果,如下图。
选择菜单“打印|打印”,会弹出选择打印机对话框,确认打印机后,即可打印当前编辑器中的内容。
选择菜单“打印|设置打印机”,绘弹出页面设置对话框,其中包含选择打印机对话框,如下左图。
选择菜单“打印|设置页面”,绘弹出页面设置对话框,但其中不包含选择打印机对话框,如上右图。
思考题:
?
如何设置打印机?
?
如何设置打印文档的名称?
?
如果是富文本格式(不同段落不同文字都可能有不同的字体和大小)怎样实现打印?
2.7工具栏实现
2.7.1制作图标
每个按钮做一个图标文件,大小为16*16,参见FileNew.bmp,FileOpen.bmp,FileSave.bmp,EditCut.bmp,EditCopy.bmp,EditPaste.bmp。
2.7.2制作按钮
在工具栏添加按钮并装入每个按钮的图象,图标命名:
tsbFileName,tsbFileOpen,tsbFileSave,tsbEditCut,tsbEditCopy,tsbEditPaste
控件
属性
属性值
说明
ToolStripButton
Name
tsbFileNew
新建文件
Image
FileNew.bmp
imageTransparentColor
Olive
ToolStripButton
Name
tsbFileOpen
打开文件
Image
FileOpen.bmp
imageTransparentColor
Olive
ToolStripButton
Name
tsbFileSave
保存文件
Image
FileSave.bmp
imageTransparentColor
Olive
ToolStripButton
Name
tsbEditCut
剪切
Image
EditCut.bmp
imageTransparentColor
Olive
ToolStripButton
Name
tsbEditCopy
编辑
Image
EditCopy.bmp
imageTransparentColor
Olive
ToolStripButton
Name
tsbEditPaste
粘贴
Image
EditPaste.bmp
imageTransparentColor
Olive
设计完成后的效果如下图:
响应每个按钮的Click消息,分别选择对应菜单项的消息响应。
测试:
测试六个工具条按钮的功能是否与对应菜单项的功能一致。
添加每个按钮的ToolTipText;
每个按钮的响应对应相应菜单的功能。
2.8状态栏实现
希望象Word等软件一样,当光标移到某个菜单项上或工具条的某个工具上时,在状态栏显示对应菜单项或工具的功能说明。
此外,还可以显示光标当前行号、列号,键盘的当前状态信息:
是否按下插入键、数字锁定键、大小写转换键、滚动锁定键等。
2.8.1确定信息区
在状态栏添加五个ToolStripStatusLabel,其属性设置如下表。
控件
属性
属性值
说明
ToolStripStatusLabel
Name
tsslMenuTip
显示菜单项功能
Text
就绪
Spring
True
其宽度随对话框的宽度变化而变化
TextAlign
MiddleLeft
ToolStripStatusLabel
Name
tsslRowNo
显示行号
Text
行:
TextAlign
MiddleLeft
ToolStripStatusLabel
Name
tsslColNo
显示列号
Text
列:
TextAlign
MiddleLeft
ToolStripStatu
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C# 文本 编辑器