C#实现记事本(练习2)

目录

一、项目简介

二、记事本界面设计

2.1 创建项目

2.2 按照以下参数修改此窗体的属性

三、代码编写

3.1 RichTextBox代码

3.2相关功能介绍

3.2.1 编辑菜单功能

3.2.2 格式菜单功能

3.2.3 查看菜单功能

3.2.4 帮助菜单功能

 3.3 工具栏代码

四、部分功能展示

五、Gitee地址

六、小结

一、项目简介

设计一个Windows应用程序——记事本,装载了MenuStrip(菜单)、ToolStrip(工具栏)、RichTextBox(高级文本框)和StatusStrip(状态栏控件)等控件,以及使用CommonDialog(公共对话框)实现对文本的存取、格式设置等操作。

项目图片样式展示:

二、记事本界面设计

2.1 创建项目

新建一个Windows窗体应用程序,并命名为“Notepad”。

2.2 按照以下参数修改此窗体的属性

属性设置结果
NamemunsNotepad
Text记事本
StartPositionCenterScreen
Size904, 809

2.3安装控件
2.3.1 MenuStrip(菜单控件)
(1)单击窗体左边会出现工具箱→ 找到menustrip →拖动到窗体中,修改Name属性为“mnusNotepad”


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


(3)设置【文件(F)】、【编辑(E)】、【格式(O)】、【查看(V)】和【帮助(H)】的属性→
单击【文件(F)】、【编辑(E)】、【格式(O)】、【查看(V)】和【帮助(H)】找到对应的属性窗口,按照以下表格进行设置

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.3.2 ToolStrip(工具栏控件)
单击窗体左边会出现工具箱→ 找到“ToolStrip” →拖动到窗体中
单击工具栏→右下角属性→修改Name属性为“tlsNotepad”如图所示
右击工具栏→ 插入标准项 出现图标

2.3.3 RichTextBox(多格式文本框控件)
单击窗体左边会出现工具箱→ 找到“RichTextBox” →拖动到窗体中
单击工具栏→右下角属性→修改Name属性为“rtxtNotepad”如图所示
Anchor属性选择“Top,Bottom,Left,Right”,这样当窗体大小改变时,RichTextBox控件的大小也会跟着改变


2.3.4 StatusStrip(状态栏控件)
添加StatusStrip控件,将其Name属性设为“stsNotepad”,将Dock属性设为“Bottom”再将Anchor属性设为“Bottom,Left,Right”。
右键“编辑项”,下拉列表中保留默认的选择“StatusLabel”,然后单击【添加】按钮,依次添加2个StatusLabel,并分别命名为“tssLbl1”和“tssLbl2”,再将tssLbl1的Text属性设为“就绪”, tssLbl2的Text属性设为“显示日期、时间”。


2.3.5 RichTextBox(多格式文本框控件)
从工具箱中找到OpenFileDialog直接拖入窗体中 单击属性
当用户单击记事本的【文件】→【打开】菜单项时,使用打开对话框OpenFileDialog打开文件。OpenFileDialog控件的Name属性为“odlgNotepad”,Filter属性设为“RTF文件|.rtf|所有文件|.*”。

public bool issave = false;
public bool tchange = false;


2.3.6 SaveFileDialog(保存对话框)
从工具箱中找到SaveFileDialog直接拖入窗体中 单击属性
当用户单击记事本的【文件】→【保存】(或【另存为】)菜单项时,使用保存对话框SaveFileDialog保存文件。SaveFileDialog控件的Name属性为“sdlgNotepad”,FileName属性改为“无标题”,Filter属性设为“RTF文件|*.rtf”。

2.3.7 FontDialog(字体对话框)
从工具箱中找到FontDialog直接拖入窗体中 单击属性
当用户单击记事本的【格式】→【字体】菜单项时,使用字体对话框FontDialog设置文本字体。FontDialog控件的Name属性为“fdlgNotepad”。

2.3.8 Timer(计时器控件)
从工具箱中找到Timer直接拖入窗体中 单击属性
本章介绍的记事本在状态栏中显示了时钟,这就需要使用一个Timer控件来实现。Timer控件的Name属性设为“tmrNotepad”,Enabled(激活的可行的)属性设为“True”,Interval(间隔,间距,幕间时间)属性设为“1000”,表示1秒种触发一次Tick事件,即1秒钟改变一次时钟。

三、代码编写

首先在该Form类中定义两个bool型变量,对应保存文件以及文字更改。

public bool issave = false;
public bool tchange = false;

3.1 RichTextBox代码

当向文字框内输入内容后,该段代码运行,含义为:文字已经change且未save。

private void richTextBox1_TextChanged(object sender, EventArgs e)
{
    tchange = true;
    issave = false;
}

3.1.1新建

private void isbsave()
        {
            if (issave == false && tchange == true)
            {
                if (MessageBox.Show("是否保存数据", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    save();
                }
            }
        }        
private void 新建ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            isbsave();
            richTextBox1.ResetText();
            issave = false;
            tchange = false;
            fname = "";
        }

其中isbsasve()函数功能在于文字框中存在内容且未保存的情况下生成如下窗口

 3.1.2 打开

打开键对应执行open函数,将fname修改为该文件名,将文件内容载入文本框中。

private void open()
        {
            openFileDialog1.Title = "打开";
            openFileDialog1.FileName = "";
            openFileDialog1.Filter = "文本文件|*.txt;";
            openFileDialog1.FilterIndex = 1;
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                fname = openFileDialog1.FileName;
                richTextBox1.LoadFile(fname, RichTextBoxStreamType.PlainText);
                issave = false;
                tchange = false;
            }
        }
private void 打开ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            open();
        }

3.1.3保存

private void 保存ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            save();
        }
private void save()
        {
            if (fname == "")
            {
                saveFileDialog1.Title = "保存";
                this.saveFileDialog1.Filter = "文本文件|*.txt;";
                if (this.saveFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    if (saveFileDialog1.FileName != "")
                    {
                        richTextBox1.SaveFile(saveFileDialog1.FileName, RichTextBoxStreamType.PlainText);
                        issave = true;
                    }
                }
            }
            else
            {
                richTextBox1.SaveFile(fname, RichTextBoxStreamType.PlainText);
                issave = true;
            }
        }

3.1.4另存为

private void 另存为ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            osave();
        }
private void osave()
        {
            saveFileDialog1.Title = "另存为";
            this.saveFileDialog1.Filter = "文本文件|*.txt;";
            if (this.saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
                if (saveFileDialog1.FileName != "")
                {
                    richTextBox1.SaveFile(saveFileDialog1.FileName, RichTextBoxStreamType.PlainText);
                    issave = true;
                }
            }
        }

3.1.5退出

private void 退出ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

3.2相关功能介绍

3.2.1 编辑菜单功能

该部分代码多为自带函数,较为简单,于一个代码框内放置。

private void 撤销ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            richTextBox1.Undo();
        }
private void 剪切ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            richTextBox1.Cut();
        }
private void 复制ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            richTextBox1.Copy();
        }
private void 粘贴ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            richTextBox1.Paste();
        }
private void 删除ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.richTextBox1.SelectedText = "";
        }
private void 全选ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            richTextBox1.SelectAll();
        }
private void 日期ToolStripMenuItem_Click_1(object sender, EventArgs e)
        {
            DateTime dt;
            dt = DateTime.Now;
            richTextBox1.AppendText(dt.Year.ToString() + "年 " + dt.Month.ToString() + "月 " + dt.Day.ToString() + "日" + dt.Hour.ToString() + "时 " + dt.Minute.ToString() + "分");
        }

3.2.2 格式菜单功能

自动换行

private void 自动换行ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            textWordWrap();
        }
private void textWordWrap()
        {
            if (自动换行ToolStripMenuItem.Checked = !自动换行ToolStripMenuItem.Checked)
            {
                richTextBox1.WordWrap = true;
            }
            else
            {
                richTextBox1.WordWrap = false;
            }
        }

3.2.3 查看菜单功能

状态栏

private void 状态栏ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            statusBar();
        }
private void statusBar()
        {
            if (状态栏ToolStripMenuItem.Checked = !状态栏ToolStripMenuItem.Checked)
            {
                statusStrip1.Visible = true;
                scriptstatus();
            }
            else
            {
                statusStrip1.Visible = false;
            }
        }

3.2.4 帮助菜单功能

对于记事本,使用一个新窗口显示记事本相关信息,本界面的内容可自由编辑。

private void 对于记事本ToolStripMenuItem_Click(object sender ,EventArgs e)
        {
            Form2 form2 = new Form2();
            form2.Show();
        }

 3.3 工具栏代码

此部分是工具栏的点击实现

private void toolStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
            int n;
            n = toolStrip1.Items.IndexOf(e.ClickedItem);
            switch(n)
            {
                case 0:
                    新建ToolStripMenuItem_Click(sender, e);
                    break;
                case 1:
                    打开ToolStripMenuItem_Click(sender, e);
                    break;
                case 2:
                    保存ToolStripMenuItem_Click(sender, e);
                    break;
                case 3:
                    关于记事本ToolStripMenuItem_Click(sender, e);
                    break;
                case 4:
                    剪切ToolStripMenuItem_Click(sender, e);
                    break;
                case 5:
                    粘贴ToolStripMenuItem_Click(sender, e);
                    break;
                case 7:
                    关于记事本ToolStripMenuItem_Click(sender, e);
                    break;
            }
        }

四、部分功能展示

关于记事本的部分功能

 

 

五、Gitee地址

https://gitee.com/fall-cherry-as-arrow/notepad/commits/master

六、小结

        一开始的时候感觉都不会,但是想到老师上课和我们讲的要动脑思考,去发现其中的奥妙,这次实验报告写了很久,所以还是老师说的编程并不需要去死记硬背一些指令,而是去理解,一些指令在理解的基础上去编,会发现很简单。并且我感觉这是一个需要耐心的工作,在编程的过程会遇到各种各样的困难,如果没有耐心,就很容易打退堂鼓,那做不好这件事。要有耐心,知道有错误后,就得从头到尾反复地看,去发现错误。当你编完后,再运行成功了,你会感觉非常的快乐,就会特别有成就感。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值