C多文本编辑器考试.docx

上传人:b****8 文档编号:27575075 上传时间:2023-07-03 格式:DOCX 页数:21 大小:205.92KB
下载 相关 举报
C多文本编辑器考试.docx_第1页
第1页 / 共21页
C多文本编辑器考试.docx_第2页
第2页 / 共21页
C多文本编辑器考试.docx_第3页
第3页 / 共21页
C多文本编辑器考试.docx_第4页
第4页 / 共21页
C多文本编辑器考试.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

C多文本编辑器考试.docx

《C多文本编辑器考试.docx》由会员分享,可在线阅读,更多相关《C多文本编辑器考试.docx(21页珍藏版)》请在冰豆网上搜索。

C多文本编辑器考试.docx

C多文本编辑器考试

XX大学C#.NET

课程考试

设计题目

多文本编辑器的设计

起止日期

2008-2009学年第1学期

课程名称

C#.NET语言程序设计

设计成员及各自的工作说明

院系计算机系班级

人员组成及各自工作说明:

学号

姓名

主要工作说明

成绩

整个程序的设计及完成

设计内容

综合运用VisualC#.NET提供的标准控件,模仿Windows中的记事本和写字板的功能,自己设计一个多文档编辑工具。

项目/成绩

及格

不及格

系统分析设计

程序设计水平

内容完成情况

设计报告撰写质量

课程设计总结情况

附加说明:

综合成绩:

指导教师

年月日

 

一、题目:

多文本编辑器的设计

二、设计要求:

用C#的可视化环境通过制作一个RichTextBox这样一个文本编辑器,熟悉在可视化环境下编程,并且学会使用里面提供的一些组装好的一些工具,

三、设计思路及代码:

第一是:

新建一个RichTextBox,然后我最先想到的就是遨游里的选项卡非常好用而且人性化,怎么制作这样一个选项卡,怎么把RichTextBox放到里面,我就了解了TabControl工具并且最先想到的是用RichTextBox数组,每个选项卡分配一个RichTextBox[i],但是当关闭选项卡时就遇到问题了,不知道选项卡最后对应的是哪一个RichTextBox[i],然后就想出了把RichTextBox封装在选项卡里的想法,为了记录文件路径和文件是不是已经保存的状态,我顺便封装两个Label进去,因为要用到他们的text()属性记录这些信息,我们只对当前选项卡操作,首先用foreach语句获取选项卡里的控件类型,再进行相应操作。

这样最后解决了窗口关闭问题,以及新建窗口个数有限性的问题,我的这个程序理论上是可以新建无数多个窗口的,就看你内存如何了。

代码如下:

(文件打开的功能也差不多)

privatevoid新建ToolStripMenuItem_Click(objectsender,EventArgse)

{

stringstr="NewText"+(NF++);//获取选项卡名字

tabControl1.TabPages.Add(str);//增加选项卡

tabControl1.SelectTab(m++);//当前页转到下一页

tabControl1.TabStop=true;//允许tab键顺序

RichTextBoxr=newRichTextBox();

r.ContextMenuStrip=contextMenuStrip2;//增加右键菜单

r.TextChanged+=newEventHandler(Form1_TextChanged);//文本内容发生改变时执行的函数

r.Dock=System.Windows.Forms.DockStyle.Fill;

r.Location=newSystem.Drawing.Point(0,0);

Labell1=newLabel();

l1.Text=str;//保存路径

Labell2=newLabel();

l2.Text="新建";v++;//保存文件是不是保存的状态

l1.Dock=System.Windows.Forms.DockStyle.Bottom;

l2.Dock=System.Windows.Forms.DockStyle.Bottom;

tabControl1.SelectedTab.Controls.Add(r);

tabControl1.SelectedTab.Controls.Add(l1);

tabControl1.SelectedTab.Controls.Add(l2);//封装进去,注意句柄丢了,这样做到与选项卡一一对应。

……

}

第二是:

当RichTextBox的文本改变时,要改变文本是否保存的状态,这要给RichTextBox添加一个TextChanged处理函数Form1_TextChanged(objectsender,EventArgse):

voidForm1_TextChanged(objectsender,EventArgse)

{

……//获得控件r、l1、l2(第十设计思路)

if(l2.Text=="已保存"||l2.Text=="打开")

{

l2.Text="未保存";v++;

toolStripButton3.Enabled=true;

保存SToolStripMenuItem.Enabled=true;

}

elseif(l2.Text=="打开1")

{

l2.Text="打开";

toolStripButton3.Enabled=false;

保存SToolStripMenuItem.Enabled=false;

}

else

{toolStripButton3.Enabled=true;

保存SToolStripMenuItem.Enabled=true;

}

}

第三是:

当选项卡相互切换时,也有一些事情要处理的,比如说在一个选项卡里未保存文本,保存按钮需要保持可用状态,但是当切换到另一个选项卡时可能它是已经保存的,保存按钮继续保持不可用状态,这需要一些判断和处理,当然还有其他一些操作:

privatevoidtarget(objectsender,EventArgse)//窗口切换

{

……//获得选项卡里的控件,r为RichTextBox,l1为路径栏,l2为保存提示栏

if(l2!

=null)

{

if(l2.Text=="已保存"||l2.Text=="打开")

{

保存SToolStripMenuItem.Enabled=false;

toolStripButton3.Enabled=false;

}

else

{

保存SToolStripMenuItem.Enabled=true;

toolStripButton3.Enabled=true;

}

if(fc>0)查找下一个NToolStripMenuItem.Enabled=true;

else查找下一个NToolStripMenuItem.Enabled=false;

if(r.CanUndo)撤消ToolStripMenuItem.Enabled=true;

else撤消ToolStripMenuItem.Enabled=false;

}

if(l1!

=null&&l2!

=null)

{

if(隐藏路径ToolStripMenuItem.Checked==true)l1.Hide();

elsel1.Show();

if(隐藏保存提示栏ToolStripMenuItem.Checked==true)l2.Hide();

elsel2.Show();

}

}

第四是:

当选项卡关闭时也有一些处理,比如说文本没有保存的话要给用户一个保存修改的机会,要实现像遨游那样双击可以关闭,我设置了双击函数,并且选项卡的右键菜单的关闭选项的处理也直接使用这个双击函数,主要实现关闭选项卡的功能,但是为了使用户操作,我至少要有一个选项卡留在窗口不能关闭,所以最后一个选项卡不能关闭的:

voidtabControl1_DoubleClick(objectsender,EventArgse)

{

……//获得选项卡里的控件,r为RichTextBox,l1为路径栏,l2为保存提示栏

if(m>1)

{//当窗口数量m>1时才执行关闭功能

if(l2.Text=="已保存"||l2.Text=="打开")

{tabControl1.SelectedTab.Dispose();m--;}

else{stringmessage,title;DialogResultresult;//文本需要保存时要给出提示信息对话框

message="窗口正在关闭……\n\n但是文本未被保存!

\n\n是不是执行保存?

";

title="提醒你";

button=MessageBoxButtons.YesNoCancel;

icon=MessageBoxIcon.Warning;

result=MessageBox.Show(message,title,button,icon);

if(result.ToString()=="Yes")

{保存SToolStripMenuItem_Click(sender,e);tabControl1.SelectedTab.Dispose();m--;}

elseif(result.ToString()=="No")

{tabControl1.SelectedTab.Dispose();m--;}

else{}

}//endelse

}//endif(m>1)

}

第五是:

字体的设置,考虑要先获得所选文本的字体,要体现人性化智能化:

(颜色的设置也差不多)

privatevoid字体ToolStripMenuItem_Click(objectsender,EventArgse)

{

……//获得选项卡里的控件,r为RichTextBox,l1为路径栏,l2为保存提示栏

f=newFontDialog();f.ShowColor=true;f.ShowApply=true;//下面添加一个处理函数

f.Apply+=newEventHandler(f_Apply);f.ScriptsOnly=true;f.ShowEffects=true;

f.ShowHelp=true;f.AllowVerticalFonts=true;f.Color=r.SelectionColor;f.Font=r.SelectionFont;

f.ShowDialog();r.SelectionFont=f.Font;r.SelectionColor=f.Color;

}

voidf_Apply(objectsender,EventArgse)

{//当字体对话框的应用按钮被按下时发生

……//获得选项卡里的控件,r为RichTextBox,l1为路径栏,l2为保存提示栏

r.SelectionFont=f.Font;r.SelectionColor=f.Color;r.Focus();

}

第六是:

查找对话框的制作,说了这个其实替换对话框就不要说了:

privatevoidfindFun1(objectsender,EventArgse)

{//执行向下查找的功能,fs=0表示没有选择文本,否则选择了文本

……//获得选项卡里的控件,r为RichTextBox,l1为路径栏,l2为保存提示栏

if(r.SelectedText.Length==0)fs=0;stringstr1=find.textBox1.Text;if(str1.Length==0)return;

if(fs==0){start=r.SelectionStart-1;fs=1;}

else{start=r.SelectionStart;}

if(start==r.Text.Length-1)start--;start=r.Find(str1,start+1,RichTextBoxFinds.MatchCase);

f(start==-1)

{MessageBox.Show("已查找到文档的结尾!

","查找结束对话框");}

else{fs=1;}

r.Focus();

}

privatevoidfindFun2(objectsender,EventArgse)//执行向上查找的功能,fs=0表示没有选择文本

{……//获得选项卡里的控件,r为RichTextBox,l1为路径栏,l2为保存提示栏

intq,n,l;if(r.SelectedText.Length==0)fs=0;stringstr1=find.textBox1.Text;

if(str1.Length==0)return;start=r.SelectionStart;q=0;l=0;n=-1;

while(n

{if(fs>0&&n>=0)q=n;else{q=start;l--;}n=r.Find(str1,n+1,RichTextBoxFinds.MatchCase);

if(n>=start&&fs==0){r.SelectionLength=0;l--;}if(r.TextLength==0){l--;break;}fs=1;l++;

if(start==0)l=0;if(n==-1)break;

}

if(l<1)

{MessageBox.Show("已查找到文档的开头!

","查找结束对话框");r.SelectionStart=start;}

elser.SelectionStart=q;r.Focus();

}//函数结束

privatevoidfindClose(objectsender,EventArgse)

{//执行关闭查找对话框的功能,有些数据需要重置

fc=0;查找下一个NToolStripMenuItem.Enabled=false;find.Close();

}

privatevoid查找FToolStripMenuItem_Click(objectsender,EventArgse)

{

if(fc==1)find.Close();find=newForm2();fc=1;//查找对话框的数目为1

//如果已经存在查找对话框则关闭前一个,永远保持只有一个对话框给用户操作

查找下一个NToolStripMenuItem.Enabled=true;find.button3.Click+=newEventHandler(findFun1);

find.button2.Click+=newEventHandler(findFun2);//添加查找对话框按钮的处理函数,在上面

find.button1.Click+=newEventHandler(findClose);find.Show();

}

第七是:

获得系统时间->r.SelectedText=DateTime.Now.ToString();

第八是:

保存文件,另存为,这里列举保存的代码:

privatevoid保存SToolStripMenuItem_Click(objectsender,EventArgse)

{

……//获得选项卡里的控件,r为RichTextBox,l1为路径栏,l2为保存提示栏

if(l2!

=null)

{

if(l2.Text=="新建")//比较特殊,因为没有保存路径所以需要与用户进行对话

{SaveFileDialogsave=newSaveFileDialog();save.DefaultExt="*.rtf";save.Filter="*.rtf|*.rtf";

if(save.ShowDialog()==DialogResult.OK&&save.FileName.Length>0)

{

r.SaveFile(save.FileName);l2.Text="已保存";v--;l1.Text=save.FileName;

tabControl1.SelectedTab.Text=System.IO.Path.GetFileName(save.FileName);

}

}

elseif(l2.Text=="未保存")

{r.SaveFile(l1.Text);l2.Text="已保存";v--;}

if(l2.Text=="打开"){2.Text="已保存";}

}toolStripButton3.Enabled=false;保存SToolStripMenuItem.Enabled=false;//保存按钮不可用

}

第九是:

退出程序时的处理:

(没有保存的文件需要和用户进行对话,确定保存与否)

privatevoid退出ToolStripMenuItem_Click(objectsender,EventArgse)

{

if(v>0)//其中v是未保存文本的记数数量,有未保存的文本需要和用户取得对话

{stringmessage,title;DialogResultresult;title="提醒你";icon=MessageBoxIcon.Warning;

message="窗口正在关闭……\n\n但是文本未被全部保存!

\n\n是不是全部执行保存?

";

button=MessageBoxButtons.YesNoCancel;result=MessageBox.Show(message,title,button,icon);

if(result.ToString()=="Yes")

{for(intcount=0;count

{RichTextBoxr=null;Labell1=null,l2=null;tabControl1.SelectedIndex=count;

……//获得选项卡里的控件,r为RichTextBox,l1为路径栏,l2为保存提示栏

if(l2!

=null&&(l2.Text=="未保存"||l2.Text=="新建"))

{保存SToolStripMenuItem_Click(sender,e);}

}//endfor

this.Close();

}//endresult.ToString()=="Yes"

elseif(result.ToString()=="No")

{this.Close();}//endresult.ToString()=="No"

else{}//取消动作

}//endif(v>0)

else{this.Close();}//如果没有未保存的文本则直接关闭不需要提醒用户

}

第十是:

获得选项卡里的控件,r为RichTextBox,l1为路径栏,l2为保存提示栏,这样就差不多解决了整个程序了,因为程序的基本框架已经呈现了:

RichTextBoxr=null;

Labell1=null,l2=null;

foreach(ControlcintabControl1.SelectedTab.Controls)

{

if(cisRichTextBox)

{

r=(RichTextBox)c;

}

if(cisLabel)

{

if(l1==null)l1=(Label)c;

elseif(l2==null)l2=(Label)c;

}

}

第十一是:

获得绝对路径下的文件名,save.FileName是绝对路径:

tabControl1.SelectedTab.Text=System.IO.Path.GetFileName(save.FileName);

第十二是:

当按钮可用时要设置为true属性:

(否则设为flase)

另存为AToolStripMenuItem.Enabled=true;

剪切TToolStripMenuItem.Enabled=true;复制CToolStripMenuItem.Enabled=true;

删除ToolStripMenuItem.Enabled=true;查找FToolStripMenuItem.Enabled=true;

替换ToolStripMenuItem.Enabled=true;转到ToolStripMenuItem.Enabled=true;

全选ToolStripMenuItem.Enabled=true;时间与日期ToolStripMenuItem.Enabled=true;

字体ToolStripMenuItem.Enabled=true;段落ToolStripMenuItem.Enabled=true;

主题HToolStripMenuItem.Enabled=true;颜色AToolStripMenuItem.Enabled=true;

toolStripButton4.Enabled=true;toolStripButton5.Enabled=true;toolStripButton7.Enabled=true;

toolStripButton8.Enabled=true;toolStripButton9.Enabled=true;toolStripButton10.Enabled=true;

第十三是:

变量的说明:

(定义了几个全局变量下面分别说明)

intNF=1,m=0,v=0;//NF是记数新建文件的次数,只加不减,m是选项卡个数,动态变化

//v是需要进行保存的选项卡个数,也是动态变化的一个值

privateMessageBoxButtonsbutton;//退出时提示对话框的按钮风格

privateMessageBoxIconicon;//退出时提示对话框的图标风格

FontDialogf;//字体对话框,因为两个函数共用它所以设为全局变量

Form2

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 初中教育 > 学科竞赛

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1