用C#语言实现记事本

一、功能要求

        这是一个简易的记事本,它可以任意更改字体的字体类型、大小和颜色,并在状态栏中显示时间。为了方便用户的操作,还在程序的窗体上放置了一个工具栏。记事本程序具有文件的新建、打开、保存功能;文字的复制、粘贴、删除功能;字体类型、格式的设置功能;查看日期时间等功能,并且用户可以根据需要显示或者隐藏工具栏和状态栏。

二、记事本界面设计

1、创建项目


(1)新建项目

打开VS,新建项目,选择windows窗体应用程序,命名为Notepad。


(2)修改窗体属性

按下图修改窗体属性:

控件类型

控件名称

属性

设置结果

Form

Form1

Name

frmNotepad

Text

记事本

StartPosition(起始位置)

CenterScreen(中央屏幕)

Size

600, 450

2、界面设计

依次在窗体上放置以下控件:


(1)菜单控件 MenuStrip

①在控件属性中,修改控件Name为“mnusNotepad”。

单击,依次输入【文件(F)】、【编辑(E)】、【格式(O)】、【查看(V)】和【帮助(H)】

 ③按下表,依次设置其属性

Text属性

Name属性

ShortcutKeys属性

(快捷键)

ShowShortcutKeys属性

文件(&F)

tsmiFile

None

新建(&N)

tsmiNew

Ctrl+N

True

打开(&O)

tsmiOpen

Ctrl+O

True

保存(&S)

tsmiSave

Ctrl+S

True

另存为(&A)

tsmiSaveAs

None

分隔符(用“-”来分隔)

退出(&X)

tsmiClose

None

Text属性

Name属性

ShortcutKeys属性

ShowShortcutKeys属性

编辑(&E)

tsmiEdit

None

撤销(&U)

tsmiUndo

Ctrl+Z

True

分隔符

复制(&C)

tsmiCopy

Ctrl+C

True

剪切(&T)

tsmiCut

Ctrl+X

True

粘贴(&P)

tsmiPaste

Ctrl+V

True

分隔符

全选(&A)

tsmiSelectAll

Ctrl+A

True

日期(&D)

tsmiDate

F5

True

Text属性

Name属性

Check属性

格式(&O)

tsmiFormat

False

自动换行(&W)

tsmiAuto

True

字体(&F)

tsmiFont

False

Text属性

Name属性

Checked属性

查看(&V)

tsmiView

False

工具栏(&T)

tsmiToolStrip

True

状态栏(&S)

tsmiStatusStrip

True

Text属性

Name属性

帮助(&H)

tsmiHelp

关于记事本(&A)

tsmiAbout

(2)工具栏控件ToolStrip

①在属性中修改Name为“tlsNotepad”。

②右击工具栏,点击“插入标准项”。结果如下:

在这里插入图片描述
(3)多格式文本框控件 RichTextBox

① 修改Name属性为“rtxtNotepad”
② Anchor属性选择“Top,Bottom,Left,Right”,这样当窗体大小改变时,RichTextBox控件的大小也会跟着改变。

(4)状态栏控件 StatusStrip

修改Name属性设为“stsNotepad”

②将Dock属性设为“Bottom”。

③将Anchor属性设为“Bottom,Left,Right”。然后单击右边的按钮。

单击Items(Collection)右边的…,打开【项集合编辑器】对话框。下拉列表中保留默认的选择“StatusLabel”,然后单击【添加】按钮,依次添加2个StatusLabel,并分别命名为“tssLbl1”和“tssLbl2”,再将tssLbl1的Text属性设为“就绪”, tssLbl2的Text属性设为“显示日期、时间”。


(5)对话框

① 打开对话框 OpenFileDialog

功能:
当用户单击记事本的【文件】→【打开】菜单项时,使用打开对话框OpenFileDialog打开文件。
控件设置:
Name属性为“odlgNotepad”,Filter属性设为“RTF文件|.rtf|所有文件|.*”。


② 保存对话框 SaveFileDialog

功能:
当用户单击记事本的【文件】→【保存】(或【另存为】)菜单项时,使用保存对话框SaveFileDialog保存文件。
控件设置:
Name属性为“sdlgNotepad”,FileName属性改为“无标题”,Filter属性设为“RTF文件”


③ 字体对话框 FontDialog

功能:
当用户单击记事本的【格式】→【字体】菜单项时,使用字体对话框FontDialog设置文本字体。
控件设置:
Name属性为“fdlgNotepad”。


(6)计时器控件 Timer

功能:
状态栏中显示了时钟,这就需要使用一个Timer控件来实现。
属性设置:
Name属性设为“tmrNotepad”,Enabled(激活的可行的)属性设为“True”,Interval(间隔,间距,幕间时间)属性设为“1000”,表示1秒种触发一次Tick事件,即1秒钟改变一次时钟。

 三、编写代码

1.双击窗体,进入代码区


代码的通用段声明以下两个公共变量,均为布尔型,“b”用于判断文件是新建的还是从磁盘打开的,“s”用于判断文件是否被保存。

 

2、 多格式文本框代码


当多格式文本框中的文本发生改变后,应当设置布尔变量“s”的值为false,表示文件未保存,因此编写多格式文本框的TextChanged事件代码如下:

 3、菜单代码

(1)【文件(F)】菜单

  1. 【新建(N)】菜单项
 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;
                    }
                }
            }
        }

      2.【打开(O)】菜单项

 private void tsmiOpen_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;
                            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;
        }

      3.【保存(S)】菜单项

 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;
            }
        }

      4.【另存为(A】菜单项

 private void tsmiSaveAs_Click(object sender, EventArgs e)
        {
            if(sdlgNotepad.ShowDialog()==DialogResult.OK)
            {
                rtxtNotepad.SaveFile(sdlgNotepad.FileName);
                s = true;
            }
        }

      5.【退出(X)】菜单项

private void tsmiClose_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

(2)【编辑(E)】菜单

 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());
        }

(3)【格式(O)】菜单

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;
            }
        }

(4)【查看(V)】菜单

private void tsmiToolStrip_Click(object sender, EventArgs e)
        {
            Point point;
            if(tsmiToolStrip.Checked==true)
            {
                point = new Point(0, 24);
                tsmiToolStrip.Checked=false;
                tlsNotepad.Visible=false;
                rtxtNotepad.Location=point;
                rtxtNotepad.Height += tlsNotepad.Height;
            }
            else
            {
                point=new Point(0, 49);
                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;
            }
        }

(5)【帮助(H)】菜单

 private void 关于记事本AToolStripMenuItem_Click(object sender, EventArgs e)
        {
            frmAbout ob_FrmAbout=new frmAbout();
            ob_FrmAbout.Show();
        }

4.关于记事本

(1)页面设计

① 新添加【添加Windows窗体】菜单项,添加一个名为“frmAbout”的窗体
② 给窗体“frmAbout”添加几个Label、Button、LinkLabel和PictrueBox控件
③ 按下图信息设置好属性:

控件类型

控件名称

属性

设置结果

Form

Form2

Name

frmAbout

Text

关于记事本

StartPosition

CenterScreen

MaximizeBox

False

AutoSizeMode

GrowAndShrink

Button

Button1

Name

btnOk

Text

确定

Label

Label1

Text

多功能记事本

LinkLabe

LinkLabel

Text

如有问题,点击这里

(2)代码 

 private void btnOk_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            System.Diagnostics.Process.Start("http://www.baidu.com");
        }

5、工具栏代码

 private void tlsNotepad_ItemClicked_1(object sender, ToolStripItemClickedEventArgs e)
        {
            int n;
            n = tlsNotepad.Items.IndexOf(e.ClickedItem);
            switch (n)
            {
                case 0:
                    tsmiNew_Click(sender, e); break;
                case 1:
                    tsmiOpen_Click(sender, e); break;
                case 2:
                    tsmiSave_Click(sender, e); break;
                /* case 3:
                     tsmiCopy_Click(sender,e); break;*/
                case 4:
                    tsmiCut_Click(sender, e); break;
                case 5:
                    tsmiPaste_Click(sender, e); break;
                case 7:
                    tsmiAuto_Click(sender, e); break;
            }
        }

6、计时器代码

     private void tmrNotepad_Tick(object sender, EventArgs e)
        {
            tssLbl2.Text = System.DateTime.Now.ToString();
        }

7、窗体代码

  private void frmNotepad_SizeChanged(object sender,EventArgs e)
        {
            frmNotepad ob_frmNotepad= new frmNotepad();
            tssLbl1.Width = this.Width / 2 - 12;
            tssLbl1.Width = tssLbl1.Width;
        }

四、效果图

 五、总结

      本次实验设计了一个Windows应用程序——记事本,进一步掌握MenuStrip(菜单)、ToolStrip(工具栏)、RichTextBox(高级文本框)和StatusStrip(状态栏控件)等控件的使用,以及如何使用CommonDialog(公共对话框)实现对文本的存取、格式设置等操作。平时看起来普普通通甚至是遭人嫌弃的记事本,但是想要做出来还是需要花费一定的时间和精力。在这过程中,也能增加自己对于WinForm的熟练度。同时,也可以在此基础之上让记事本变得更加美观。

六、gitee仓库地址

windows作业: 存储本学期windows作业源代码

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值