C#文档编辑器程序设计报告摘要

来源:互联网 发布:amd ryzen游戏优化 编辑:程序博客网 时间:2024/05/20 15:57

一、实验要求

该文档编辑器,至少完成以下功能:

文件操作: 新建,打开,保存,退出;       //支持rtf文件

编辑操作: 复制,剪切,粘贴,全选;

查找与替换: 设计查找(替换)窗口,支持查找(替换)操作 。

格式操作: 字体,颜色等.

界面设计应考虑美观,操作简便等问题,应有工具栏,右键菜单等;

 

二、设计思路

(1)为了使应用程序是实现多个窗口的操作,并且应考虑要添加工具栏,所以采用采用MDI设计界面风格。这样,在主程序添加菜单栏和工具栏,使得程序操作起来方便,设计更加美观。

(2)点击”新建”按钮,子窗口的文档编辑器是在RichTextBox控件内实现的。为了实现右键菜单,需要借助contextMenuStrip控件。过程如下:对RichTextBox的

ContextMenuStrip属性与ContextMenuStrip1进行绑定。在ContextMenuStrip1控件的事例对象进行菜单设置和方法编写。

(3)为了使得工具栏、主菜单栏、右键菜单的方法功能的一致,需要根据操作进行每个功能的Button、ToolStripMenuItem的enabled属性进行设置和刷新。防止不正确的操作步骤的发生和异常情况。

(4)对文件的操作“打开”操作:选择在打开窗口中获取openFileDialog1当前选定筛选框的引索获得文件类型并选择相应的文件流进行输出操作。并加载到RichTextBox控件中。“保存”操作则判断是否有修改,若有并提示保存操作。

此部分主要是主要涉及到文件格式流和文件I/0操作的知识点。

(5)对于“复制”,“黏贴”,“撤销”,“重做”,“剪切”的操作等,都是RichTextBox的copy、paste、undo、redo、cut等一些方法的调用。通过查询手册能获得RichTextBox的一些属性设置和方法调用能完成文本编辑器的大部分功能。

(6)实验对于“查找”和“替换”的跨窗口的操作。我采取的方法是这样的:Search类是一个窗口类,在Main类的内声明一个Search对象。Seach类内有一个子窗口subForm的属性。步骤大致如下:在点击“查找”操作时,首先获得当前活动的MDI窗口并实例化,之后将这个MDI窗口的事例对象赋值给Search类的subForm对象,并在Seach里编写查找的方法。查询结果会在MDI窗口显示。这样就可以在实现跨窗口的操作。

(7)字体和颜色的实现,VS里有fontDialog和colorDialog里实现。选择相应的颜色和字体赋值到SelectionFont属性和SelectionColor属性即可改变字体和颜色。

 

“新建”功能核心代码:

 

   /*文件菜单实现*/

        privatevoid 新建ToolStripMenuItem_Click(objectsender,EventArgs e)

        {

            wcount++;

            subFormdoc = new subForm();//创建子窗口

            doc.MdiParent = this;//指定当前窗口为MDI父窗口

            doc.name = "新建文本文档" + wcount;

            doc.Text = doc.name;

            doc.setToolStripStatusLabel1();//设置状态条

            doc.Show();

        }

 

 

 

“打开”功能核心代码:

private void 打开ToolStripMenuItem_Click(objectsender,EventArgs e)

        {

            openFileDialog1.FileName = "";

            if(openFileDialog1.ShowDialog() ==DialogResult.OK)

            {

                RichTextBoxStreamTypefileType;

                switch(openFileDialog1.FilterIndex)  //选择文件流类型

                {

                    case1:

                        fileType = RichTextBoxStreamType.RichText; //RTF格式

                        break;

                    case2:

                        fileType = RichTextBoxStreamType.PlainText; //文本格式

                        break;

                    default:

                        fileType = RichTextBoxStreamType.UnicodePlainText; //所以文件

                        break;

                }

                subFormdoc = new subForm();    //新建子窗口

                doc.MdiParent = this;//doc为子窗口

                doc.txtSource.LoadFile(openFileDialog1.FileName,fileType);//加载文件名

                doc.savePath =getFilePath(openFileDialog1.FileName);//存储路径

                doc.name =getFileName(openFileDialog1.FileName);//获取文件名

                doc.hasSetName = true;

                doc.hasChanged = false;

                doc.fileType = fileType;

                doc.Text = doc.name;

                doc.Show(); //显示文件内容

            }

        }

 

“替换”功能核心代码:

private voidbutton4_Click(object sender, EventArgs e)//全部替换操作

        {

            RichTextBoxFindsm = 0;

            if(checkBox1.Checked)

                m = RichTextBoxFinds.MatchCase;//定位正确搜索的位置

 

            while(doc.txtSource.Find(textBox1.Text, m) != -1)

            {

                if(doc.txtSource.SelectedText.Length > 0)

                    doc.txtSource.SelectedText= textBox2.Text; //替换操作

            }

        }

 

三、    程序运行效果图


1、保存:


2、颜色窗口:

 

 


 

4、实验总结

这次选择做文本编辑器,目的是想熟悉对窗口控件的操作。首先这次的实验我都能按要求完成,并且除了基本要求还增加不少的功能。譬如增加了文档的状态栏,可以显示当前光标的位置。并且还添加了窗口显示方式改变的功能。个人觉得还是挺满意的。

实验的最大难度应该是对文件的操作。之前的实验大多数都是没有保存数据或者都是通过数据库存储。这学期的数据库课程设计我是用C#和SQL Server2008完成的,所以对MDI窗口、控件有一定的了解。而文件的操作,要求熟悉OpenFileDialog、saveFileDialog等控件的操作,对他们的属性、操方法的使用都是有一定难度的。最后经过了查阅资料还是完成了实验的要求。初次之外,对于跨窗口的操作,我是采用窗口调用的方法来实现的,在一个窗口添加另一个窗口的属性对象,有点类似适配器那种模式实现。还有就是保持按钮操作的一致性。在某些按钮不能使用的时候用enbabled=false的设置去控制。总体而言,实验的难度不是特大,文件和控件是实验的两大重点。

总体一下这学期的.NET课程。给我的感受就是VS的窗口编程比JAVA方便很多,而且控件的使用都有中文的说明。所以在完成实验比较得心应手。但是对一些重要的知识点如委托、线程还是理解不够透彻。今后,我会在课余时间学习一下WINPHONE编程,应该我比较喜欢WIN 8的风格和微软的手机产品。所以,今后我还将继续努力,感谢老师这学期的栽培。


0 0
原创粉丝点击