记事本(C#)

目录

记事本的准备

记事本简介

记事本的界面

需要用到的控件

记事本编写过程

 创建项目

 添加控件

 修改属性

form 

ToolStrip(工具栏控件) 

RichTextBox(多格式文本框控件) 

StatusStrip(状态栏控件) 

OpenFileDialog(打开对话框) 

SaveFileDialog(保存对话框) 

FontDialog(字体对话框) 

Timer(计时器控件) 

编写代码 

多格式文本框代码(RichTextBox) 

   菜单代码

【打开(O)】菜单项 

【保存(S)】菜单项 

【另存为(A)】菜单项 

【退出(X)】菜单项 

  【编辑(E)】菜单

【格式(O)】菜单 

【自动换行(W)】菜单项 

【字体(F)】菜单项 

【查看(V)】菜单 

【工具栏(T)】菜单项 

【状态栏(S)】菜单项 

 【帮助(H)】菜单

关于记事本 

完成一个记事本界面 

 编写代码 

工具栏代码 

计时器代码 

窗体代码 

 总代码

 关于记事本代码

结果的简单展示 

 gitee代码仓库的地址


记事本的准备

记事本简介

这里的记事本就如同微软中windows中自带的记事本,能够进行对文本的简单操作如存文件、复制、粘贴、修改字体等。而我这次的记事本比自带的记事本多了几个图标快捷键按钮,基于能力只有功能可用。

记事本的界面

 以下是两个界面的最终结果对比,左边是我制作的最终界面,右边是系统自带界面。

 

需要用到的控件

MenuStrip(菜单控件)

ToolStrip(工具栏控件)

RichTextBox(多格式文本框控件)

StatusStrip(状态栏控件)

OpenFileDialog(打开对话框)

SaveFileDialog(保存对话框)

FontDialog(字体对话框)

Timer(计时器控件) 

记事本编写过程

 创建项目

 添加控件

就是把上述的那几个控件拖到设计界面上。具体做法就是从工具箱中找到相应的控件,然后鼠标左击按着拖到Form1.cs[设计]界面上。 

 修改属性

form 

Form

Form1

Name

frmNotepad

Text

记事本

StartPosition(起始位置)

CenterScreen(中央屏幕)

Size

600, 450

而这些属性都是点击需要更改属性的控件,然后在属性页面如下图中找到相应内容 后更改到需要的属性

修改Name属性为“mnusNotepad”

然后单击完成如下图的(其中有些功能我还没有实现)

 

 然后修改成如下属性

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

ToolStrip(工具栏控件) 

修改Name属性为“tlsNotepad”

右击工具栏→ 插入标准项

 然后就会出现如下标准项

 

属性可以根据自己的需求更改

RichTextBox(多格式文本框控件) 

单击工具栏→右下角属性→修改Name属性为“rtxtNotepad”

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

StatusStrip(状态栏控件) 

添加StatusStrip控件,将其Name属性设为“stsNotepad”,将Dock属性设为“Bottom”再将Anchor属性设为“Bottom,Left,Right”。然后单击右边的按钮,打开【项集合编辑器】对话框,如图所示。 

 下拉列表中保留默认的选择“StatusLabel”,然后单击【添加】按钮,依次添加2个StatusLabel,并分别命名为“tssLbl1”和“tssLbl2”,再将tssLbl1的Text属性设为“就绪”, tssLbl2的Text属性设为“显示日期、时间”。

OpenFileDialog(打开对话框) 

从工具箱中找到OpenFileDialog直接拖入窗体中 单击属性

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

SaveFileDialog(保存对话框) 

从工具箱中找到SaveFileDialog直接拖入窗体中 单击属性

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

FontDialog(字体对话框) 

从工具箱中找到FontDialog直接拖入窗体中 单击属性

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

Timer(计时器控件) 

从工具箱中找到Timer直接拖入窗体中 单击属性

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

最终结果界面如开始展示的界面 

编写代码 

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

双击窗体,进入代码区填写以下代码

//*************************************************************************

/* 布尔变量b用于判断文件是新建的还是从磁盘打开的,

   true表示文件是从磁盘打开的,false表示文件是新建的,默认值为false*/

bool b = false;

/* 布尔变量s用于判断文件件是否被保存,

   true表示文件是已经被保存了,false表示文件未被保存,默认值为true*/

bool s = true;

//*************************************************************************

 如图所示:

多格式文本框代码(RichTextBox) 

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

双击RichTextBox,进入代码区填写以下代码

private void rtxtNotepad_TextChanged(object sender, EventArgs e)
{
    // 文本被修改后,设置s为false,表示文件未保存
    s = false;
}

   菜单代码

在本章介绍的记事本程序中,几乎所有的功能都是通过菜单来实现的,本小节将介绍各菜单项的单击事件代码 

【文件(F)】菜单 

【文件(F)】菜单的功能是完成文件的新建、打开、保存、另存为功能,以及退出记事本程序,下面对各个菜单项的源代码进行详细的说明。

(1) 【新建(N)】菜单项

单击该菜单项时新建一个空白文档,首先应该判断文件是从磁盘打开的还是新建的,若从磁盘打开则将前面定义的变量(b)设为“true”,否则设为“false”。这样做可以根据这个变量对文件进行相应的操作。并且每次保存文件后,都要将前面定义的变量(s)设为“true”,表示文件已经被保存。

单击新建菜单时,如果当前文件是从磁盘打开的,并且已经过修改,则要按OpenFileDialog控件的路径来保存文件。

如果是新建的文件且内容不为空,则需要用SaveFileDialog控件来保存文件,【新建(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;
            }
        }
    }
}

【打开(O)】菜单项 

单击该菜单项时,如果是要从磁盘或其他设备打开“*.rtf”文件,同样要作出判断,所不同的是判断后用OpenFileDialog控件打开文件,并且每次保存文件后,都要将前面定义的变量(s)设为“true”,表示文件已经被保存。代码如下:

双击“打开“,进入代码区填写以下代码

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

【保存(S)】菜单项 


单击此菜单项保存文本框的内容,需要判断该文件是从磁盘打开还是新建的,如果是从磁盘打开的,则要判断是否有更改,只有有更改时才进行保存操作,否则不作任何处理。如果是新建的文档就调用SaveFileDialog控件保存文件,然后把bool变量b改为“true”,同时把SaveFileDialog控件的文件路径赋给OpenFileDialog控件,这样下次打开文件时,文件路径默认为刚刚保存文件的路径,并且每次保存文件后,都要将前面定义的变量(s)设为“true”,表示文件已经被保存。代码如下:

双击“保存“,进入代码区填写以下代码

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

【另存为(A)】菜单项 

将文件另存为后,要将前面定义的变量(s)设为“true”,表示文件已经被保存。本菜单项的代码如下:

双击“另存为“,进入代码区填写以下代码

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

【退出(X)】菜单项 

本菜单项的功能是退出记事本程序,代码如下:

双击“退出” 填入以下代码

private void tsmiClose_Click(object sender, EventArgs e)
{
    Application.Exit();//程序结束
}

  【编辑(E)】菜单

【编辑(E)】菜单用于完成撤销(撤销最近一次对文本框的编辑操作)、复制(复制选中的文本内容)、剪切(剪切选中的文本内容)、粘贴(粘贴剪贴板中的内容)、全选(选中多格式文本框中所有的内容)以及将当前日期追加至文本文件的功能。【编辑(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());//显示当前日期
}

【格式(O)】菜单 

【格式(O)】菜单用于设置打开或新建的文本内容是否自动换行,以及设置字体的格式功能。 

【自动换行(W)】菜单项 

此菜单项的Checked属性默认为“True”,文本内容按照文本框的宽度自动换行,否则只按段落标记换行,【自动换行(W)】菜单项的代码如下 

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

【字体(F)】菜单项 

单击此菜单项时,弹出字体对话框以调整选择内容的字体、颜色等属性。因此需要使用前面添加的FontDialog控件来实现。【字体(F)】菜单项的单击事件代码如下 

private void tsmiFont_Click(object sender, EventArgs e)
{
    fdlgNotepad.ShowColor = true;
    if (fdlgNotepad.ShowDialog() == DialogResult.OK)
    {
        rtxtNotepad.SelectionColor = fdlgNotepad.Color;
        rtxtNotepad.SelectionFont = fdlgNotepad.Font;
    }
}

【查看(V)】菜单 

【查看(V)】菜单用于设置记事本上是否显示工具栏和状态栏,这两个菜单项默认情况下是被选中的,可以通过单击相应的菜单项设置不同的显示效果。 

【工具栏(T)】菜单项 

该菜单项用于控制工具栏的显示和隐藏,默认状态下显示工具栏,当隐藏时应当修改多格式文本框的位置和高度。代码如下 

private void tsmiToolStrip_Click(object sender, EventArgs e)
{
    Point point;
    if (tsmiToolStrip.Checked == true)
    {
        // 隐藏工具栏时,把坐标设为(0,24),因为菜单的高度为24
        point = new Point(0, 24);
        tsmiToolStrip.Checked = false;
        tlsNotepad.Visible = false;
        // 设置多格式文本框左上角位置
        rtxtNotepad.Location = point;
        // 隐藏工具栏后,增加文本框高度
        rtxtNotepad.Height += tlsNotepad.Height;
    }
    else
    {
        /* 显示工具栏时,多格式文本框左上角位置的位置为(0,49),
           因为工具栏的高度为25,加上菜单的高度24后为49 */
        point = new Point(0, 49);
        tsmiToolStrip.Checked = true;
        tlsNotepad.Visible = true;
        rtxtNotepad.Location = point; 
        rtxtNotepad.Height -= tlsNotepad.Height;
    }
}

【状态栏(S)】菜单项 

该菜单项用于控制状态栏的显示和隐藏,默认状态下显示状态栏,当隐藏时应当修改多格式文本框的高度。代码如下: 

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

 【帮助(H)】菜单

本菜单只有一个菜单项【关于记事本(A)】,该菜单项调用一个窗体(frmAbout)显示本程序的一些相关信息。并用LinkLabel控件设置链接,通过它可以方便地给作者发送E-Mail。frmAbout窗体的设计将在后面说明。

设计好frmAbout窗体后,为了显示该窗体,需要编写【关于记事本(A)】菜单项的单击事件代码如下:

private void tsmiAbout_Click(object sender, EventArgs e)
{
    frmAbout ob_FrmAbout = new frmAbout();
    ob_FrmAbout.Show();
}

关于记事本 

完成一个记事本界面 

添加一个名为“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

如有问题,点击这里

 再将界面改为如下图所示

 编写代码 

//*************************************************************************
// 【关于记事本】代码
//*************************************************************************

// 【确定】按钮
private void btnOk_Click(object sender, EventArgs e)
{
    this.Close();
}

// 使用LinkLabel打开邮件或者网页
private void llblEmail_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
   System.Diagnostics.Process.Start(“http://www.baidu.com”);
}

当然这一部分的内容可以根据自己的需求自行更改 

工具栏代码 

工具栏提供了一些快捷按钮,用来方便用户的操作,用户按下按钮时相当于选择了某个菜单项,用switch语句实现如下,双击工具栏的空白部位,编写工具栏的ItemClicked事件代码如下 

private void tlsNotepad_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
		{
			int n;
			// 变量n用来接收按下按钮的索引号从0开始
			n = tlsNotepad.Items.IndexOf(e.ClickedItem);
			switch (n)
			{
				case 0:
					新建NToolStripButton_Click(sender, e);
					break;
				case 1:
					打开OToolStripButton_Click(sender, e);
					break;
				case 2:
					保存SToolStripButton_Click(sender, e);
					break;
				/*case 3:
					tsmiCopy_Click(sender, e);
					break;*/ // 我们不用case3

				case 4:
					剪切UToolStripButton_Click(sender, e);
					break;
				case 5:
					粘贴PToolStripButton_Click(sender, e);
					break;
				/*case 6:
					tsmiPaste_Click(sender, e);
					break; */ // 我们不用case6
				case 7:
					tsmiAbout_Click(sender, e);
					break;

			}

		}

		private void 打开OToolStripButton_Click(object sender, EventArgs e)
		{

		}

		private void 保存SToolStripButton_Click(object sender, EventArgs e)
		{

		}

		private void 剪切UToolStripButton_Click(object sender, EventArgs e)
		{

		}

		private void 复制CToolStripButton_Click(object sender, EventArgs e)
		{

		}

		private void 粘贴PToolStripButton_Click(object sender, EventArgs e)
		{

		}

计时器代码 

 要在状态栏的tssLbl2中显示当前时间,需要编写计时器控件的Tick事件(每秒钟触发一次)代码如下

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

窗体代码 

可以不需要这段代码,当我们在窗体属性设置成auto的时候会自动调整

在改变窗体大小时(例如最大化窗口或使用鼠标改变窗口大小),为了使状态栏中的标签也随之改变其宽度,应当编写窗体的SizeChanged事件代码如下 

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

 总代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace 记事本
{
	public partial class frmNotepad : Form
	{//*************************************************************************
	 /* 布尔变量b用于判断文件是新建的还是从磁盘打开的,
		true表示文件是从磁盘打开的,false表示文件是新建的,默认值为false*/
		bool b = false;
		/* 布尔变量s用于判断文件件是否被保存,
		   true表示文件是已经被保存了,false表示文件未被保存,默认值为true*/
		bool s = true;
		//*************************************************************************

		public frmNotepad()
		{
			InitializeComponent();
		}

		private void 撤销UCtrlToolStripMenuItem_Click(object sender, EventArgs e)
		{
			rtxtNotepad.Undo();//撤销
		}

		private void rtxtNotepad_TextChanged(object sender, EventArgs e)
		{
			s = false;
		}

		private void stsNotepad_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
		{

		}

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

		}

		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;

		}

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

		}

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

		}

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

		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 时间日期ToolStripMenuItem_Click(object sender, EventArgs e)
		{
			rtxtNotepad.AppendText(System.DateTime.Now.ToString());//显示当前日期
		}

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

		}

		private void 工具栏ToolStripMenuItem_Click(object sender, EventArgs e)
		{
			Point point;
			if (工具栏ToolStripMenuItem.Checked == true)
			{
				// 隐藏工具栏时,把坐标设为(0,24),因为菜单的高度为24
				point = new Point(0, 24);
				工具栏ToolStripMenuItem.Checked = false;
				tlsNotepad.Visible = false;
				// 设置多格式文本框左上角位置
				rtxtNotepad.Location = point;
				// 隐藏工具栏后,增加文本框高度
				rtxtNotepad.Height += tlsNotepad.Height;
			}
			else
			{
				/* 显示工具栏时,多格式文本框左上角位置的位置为(0,49),
				   因为工具栏的高度为25,加上菜单的高度24后为49 */
				point = new Point(0, 49);
				工具栏ToolStripMenuItem.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;
			}

		}

		private void tsmiAbout_Click(object sender, EventArgs e)
		{
			frmAbout ob_FrmAbout = new frmAbout();
			ob_FrmAbout.Show();

		}

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

		}

		private void 新建NToolStripButton_Click(object sender, EventArgs e)
		{

		}

		private void tlsNotepad_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
		{
			int n;
			// 变量n用来接收按下按钮的索引号从0开始
			n = tlsNotepad.Items.IndexOf(e.ClickedItem);
			switch (n)
			{
				case 0:
					新建NToolStripButton_Click(sender, e);
					break;
				case 1:
					打开OToolStripButton_Click(sender, e);
					break;
				case 2:
					保存SToolStripButton_Click(sender, e);
					break;
				/*case 3:
					tsmiCopy_Click(sender, e);
					break;*/ // 我们不用case3

				case 4:
					剪切UToolStripButton_Click(sender, e);
					break;
				case 5:
					粘贴PToolStripButton_Click(sender, e);
					break;
				/*case 6:
					tsmiPaste_Click(sender, e);
					break; */ // 我们不用case6
				case 7:
					tsmiAbout_Click(sender, e);
					break;

			}

		}

		private void 打开OToolStripButton_Click(object sender, EventArgs e)
		{

		}

		private void 保存SToolStripButton_Click(object sender, EventArgs e)
		{

		}

		private void 剪切UToolStripButton_Click(object sender, EventArgs e)
		{

		}

		private void 复制CToolStripButton_Click(object sender, EventArgs e)
		{

		}

		private void 粘贴PToolStripButton_Click(object sender, EventArgs e)
		{

		}

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

		

		private void toolStripStatusLabel2_Click(object sender, EventArgs e)
		{

		}
	}
}

 关于记事本代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace 记事本
{
	public partial class frmAbout : Form
	{
		public frmAbout()
		{
			InitializeComponent();
		}

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

结果的简单展示 

 

这样就保存了一个文本文件 

然后关于记事本可以弹出如下界面 

 

 gitee代码仓库的地址

https://gitee.com/zhang-tian_yu/notepad.git

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值