一、简述
记事本是Windows系统下非常常用的软件。通过C#实现多功能记事本,从中熟悉MenuStrip(菜单)、ToolStrip(工具栏)、RichTextBox(高级文本框)和StatusStrip(状态栏控件)等控件的使用,以及如何使用CommonDialog(公共对话框)实现对文本的存取、格式设置等操作。
二、记事本页面设计
------VS2019
新建一个Windows窗体应用程序,并命名为“Notepad”;更改窗体名称,单击窗体→右下角属性→text修改为“记事本”。
控件类型 | 控件名称 | 属性 | 设置结果 |
---|---|---|---|
Form | Form1 | Name | Form1 |
Text/StartPosition/Size | 记事本/CenterScreen/600,450 |
新建好“Notepad”项目后,在窗体上放置以下控件(各1个):
MenuStrip、ToolStrip、RichTextBox、StatusStrip、OpenFileDialog、SaveFileDialog、FontDialog、Timer
1、MenuStrip
横向依次输入【文件(F)】、【编辑(E)】、【格式(O)】、【查看(V)】和【帮助(H)】如下图所示
Text属性 | Name属性 | ShortcutKeys属性 | ShowShortcutKeys属性 | Checked属性 |
---|---|---|---|---|
文件(&F) | File | None | — | — |
新建(&N) | New | Ctrl+N | True | — |
打开(&O) | Open | Ctrl+O | True | — |
保存(&S) | Save | Ctrl+S | True | — |
另存为(&A) | SaveAs | None | — | — |
分隔符(用“-”来分隔) | — | — | — | — |
退出(&X) | Close | None | — | — |
Text属性 | Name属性 | ShortcutKeys属性 | ShowShortcutKeys属性 | Checked属性 |
---|---|---|---|---|
编辑(&E) | Edit | None | True | — |
撤销(&U) | Undo | Ctrl+Z | True | — |
分隔符(用“-”来分隔) | — | — | — | — |
复制(&C) | Copy | Ctrl+C | True | — |
剪切(&T) | Cut | Ctrl+X | True | — |
粘贴(&V) | Paste | Ctrl+V | True | — |
分隔符(用“-”来分隔) | — | — | — | — |
全选(&A) | SelectAll | Ctrl+A | True | — |
日期(&D) | Date | None | F5 | True |
Text属性 | Name属性 | ShortcutKeys属性 | ShowShortcutKeys属性 | Checked属性 |
---|---|---|---|---|
格式(&O) | Format | — | — | False |
自动换行(&W) | Auto | — | — | True |
字体(&F) | Font | — | — | False |
Text属性 | Name属性 | ShortcutKeys属性 | ShowShortcutKeys属性 | Checked属性 |
---|---|---|---|---|
查看(&V) | View | — | — | False |
工具栏(&T) | ToolStrip | — | — | True |
状态栏(&S) | StatusStrip | — | — | True |
Text属性 | Name属性 | ShortcutKeys属性 | ShowShortcutKeys属性 | Checked属性 |
---|---|---|---|---|
帮助(&H) | Help | — | — | — |
关于记事本(&A) | About | — | — | — |
2、ToolStrip
将ToolStrip控件拖入窗体后,右击工具栏–>插入标准项,同时可编辑标准项,这里只展示以下功能(新建,打开,保存,剪切,粘贴,复制)。
3、RichTextBox
将RichTextBox控件拖入窗体后,修改Anchor属性为“Top,Bottom,Left,Right”,使其随着窗体大小变化而变化。
4、StatusStrip
将StatusStrip控件拖入窗体后,修改Dock属性为“Bottom”,再修改Anchor属性为“Bottom,Left,Right”。然后右击窗体中的StatusStrip控件打开项集合编辑器,点击添加按钮,依次添加4个StatusLabel,分别命名为“CursorPosition”、“InterfaceRatio”、“CodingFormat”、“DateTime”,
接着依次修改Text属性为“光标定位”,“界面比例”,“编码格式”,“日期时间”。
5、OpenFileDialog
将OpenFileDialog控件拖入窗体后,修改Filter属性为“文本文件|*.txt|所有文件|*.*”。
6、SaveFileDialog
将SaveFileDialog控件拖入窗体后,修改Filter属性为“文本文件|*.txt”。
7、FontDialog
将FontDialog控件拖入窗体,可不做修改。
8、Timer
将Timer控件拖入窗体后,修改Enabled属性为“True”,Interval属性为“1000”,表示1秒种触发一次Tick事件,即1秒钟改变一次时钟。
三、代码实现
在实现各功能前,需在代码通用段声明两个bool型公共变量,“isOpen”用于判断文件是新建的还是从磁盘打开的,“isSave”用于判断文件是否被保存。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Notepad
{
public partial class Form1 : Form
{
bool isOpen = false;
bool isSave = false;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
}
}
(1)RichTextBox
当RichTextBox中的文本发生改变后,应当设置布尔变量“isSave”的值为false,表示文件未保存。
private void richTextBox1_TextChanged(object sender, EventArgs e)
{
isSave = false;
}
(2)MenuStrip
记事本绝大部分内容都由菜单来完成,以下通过代码分别实现文件(F)、编辑(E)、格式(O)、查看(V)、帮助(H)五大菜单项。
1、【文件】菜单
完成文件的新建、打开、保存、另存为功能,以及退出记事本程序。
(1)【新建】菜单项
单击该菜单项时新建一个空白文档,首先判断文件是从磁盘打开的还是新建的,若从磁盘打开则将isOpen设为“true”,否则设为“false”。每次保存文件后,都要将前面isSave设为“true”,表示文件已经被保存。
单击新建菜单时,如果当前文件是从磁盘打开的,并且已经过修改,则按OpenFileDialog控件的路径来保存文件。如果是新建的文件且内容不为空,则用SaveFileDialog控件来保存文件。
private void New_Click(object sender, EventArgs e)
{
if (isOpen == true || richTextBox1.Text.Trim() != "")
{
// 若文件未保存
if (isSave == false)