一.实验内容:

二.记事本所需功能:

(1)记事本程序具有文件的新建、打开、保存功能;

(2)文字的复制、粘贴、删除功能;字体类型、格式的设置功能;

(3)查看日期时间等功能,并且用户可三根据需要显示或者隐藏工具栏和状态栏。

三.设计的步骤和方法:

3.1-界面设计

(1)新建一个Windows窗体应用程序

(2)单机窗口,找到右下角属性, 按右表更改属性值:

控件类型

控件名称

属性

设置结果

Form

Form1

Name

frmNotepad

Text

记事本

StartPosition(起始位置)

CenterScreen(中央屏幕)

Size

600, 450

eg:

(3)MenuStrip(菜单控件)

1.单击窗体左边会出现工具箱→ 找到menustrip →拖动到窗体中

   2.单击菜单栏→右下角属性→修改Name属性为“mnusNotepad”

3.单击 MenuStrip(菜单控件),输入【文件(F)】、【编辑(E)】、【格式(O)】、【查看(V)】和【帮助(H)

4.

设置【文件(F)】、【编辑(E)】、【格式(O)】、【查看(V)】和【帮助(H)】的属性→

单击【文件(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

                 

到此 菜单栏框架设置完成!

(4).ToolStrip(工具栏控件)。

  1.单击窗体左边会出现工具箱→ 找到“ToolStrip” →拖动到窗体中,单击工具栏→右下角属性→修改Name属性为“tlsNotepad”如图所示

  2.点该工具栏右边侧三角→ 插入标准项   出现如图所示

  3.

右击工具栏→ 编辑项  可以看到我们的  按钮成员 在这里我们可以删除或者增加,为了新手学习,我们只设置几个简单的功能(新建,打开,保存,剪切,粘贴,复制)。其它我们不再设置。

(5)RichTextBox(多格式文本框控件)。

1.单击窗体左边会出现工具箱→ 找到“RichTextBox” →拖动到窗体中,单击工具栏→右下角属性→修改Name属性为“rtxtNotepad”

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

(6)  StatusStrip(状态栏控件)。

  1.添加StatusStrip控件,将其Name属性设为“stsNotepad”,将Dock属性设为“Bottom”再将Anchor属性设为“Bottom,Left,Right”。

  -----》   

  2.然后单机打开【项集合编辑器】对话框,如图所示。

3.

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

  (7) OpenFileDialog(打开对话框)。

    1.从工具箱中找到OpenFileDialog直接拖入窗体中 单击属性当用户单击记事本的【文件】→【打开】菜单项时,使用打开对话框OpenFileDialog打开文件。

     2.OpenFileDialog控件的Name属性为“odlgNotepad”,Filter属性设为“RTF文件|*.rtf|所有文件|*.*”。

  (8)SaveFileDialog(保存对话框)。

      1.从工具箱中找到SaveFileDialog直接拖入窗体中 单击属性当用户单击记事本的【文件】→【保存】(或【另存为】)菜单项时,

使用保存对话框SaveFileDialog保存文件。SaveFileDialog控件的      Name属性为“sdlgNotepad”,FileName属性改为“无标题”,Filter属性设为“RTF文件|*.rtf”。

  (9) FontDialog(字体对话框)。

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

  (10) Timer(计时器控件)。

      1.从工具箱中找到Timer直接拖入窗体中 单击属性本章介绍的记事本在状态栏中显示了时钟,这就需要使用一个Timer控件来实现。

Timer控件的Name属性设为“tmrNotepad”,Enabled(激活的可行     的)属性设为“True”,Interval(间隔,间距,幕间时间)属性设为“1000”,表示1秒种触发一次Tick事件,即1秒钟改变一次时钟。

最终设置界面如下图所示到此,用户界面设计完毕,接下来介绍具体的实现过程及源代码的编写。

3-2:

编写程序代码

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

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

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

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

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

bool b = false;

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

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

bool s = true;

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

如图所示:

接下来介绍多格式文本框(rtxtNotepad)、菜单(mnusNotepad)、工具栏(tlsNotepad)、计时器(tmrNotepad)对象的程序代码。

(1)  多格式文本框代码(RichTextBox)

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

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

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

// 多格式文本框的TextChanged事件代码

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

private void rtxtNotepad_TextChanged(object sender, EventArgs e)

{

// 文本被修改后,设置s为false,表示文件未保存

s = false;

}

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

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

如图所示:

(2)  菜单代码

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

1. 【文件(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;

}

}

}

}

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

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

(2) 【打开(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;

}

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

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

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

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

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

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

// 【保存】菜单代码

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

private void tsmiSave_Click(object sender, EventArgs e)

{//由于这个没有改Name属性,所以和图片不太一样,对照就行

// 若文件从磁盘打开并且修改了其内容

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)】菜单项

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

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

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

// 【另存为】菜单代码

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

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();//程序结束

}

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

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

3) 【编辑(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());//显示当前日期

}

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

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

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

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

(1) 【自动换行(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;

}

}

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

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

(2) 【字体(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;

}

}

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

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

(1) 【工具栏(T)】菜单项

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

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

// 【工具栏】菜单代码(不是必须的)

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

private void tsmiToolStrip_Click(object sender, EventArgs e)

{

}

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

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

(2) 【状态栏(S)】菜单项(不是必须的)

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

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

// 【状态栏】菜单代码

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

private void tsmiStatusStrip_Click(object sender, EventArgs e)

{

if (tsmiStatusStrip.Checked == true)

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

}

tsmiStatusStrip.Checked = false;

stsNotepad.Visible = false;

rtxtNotepad.Height += stsNotepad.Height;

}

else

{

tsmiStatusStrip.Checked = true;

stsNotepad.Visible = true;

rtxtNotepad.Height -= stsNotepad.Height;

}

}

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

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

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

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

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

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

// 【关于记事本】菜单代码

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

private void tsmiAbout_Click(object sender, EventArgs e)

{

frmAbout ob_FrmAbout = new frmAbout();

ob_FrmAbout.Show();

}

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

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

1.4  关于记事本

接下来单击Visual C# 2013的【项目】→【添加Windows窗体】菜单项,添加一个名为“frmAbout”的窗体,如图所示。

1.  界面设计

然后给窗体“frmAbout”添加几个Label、Button、LinkLabel和PictrueBox控件,按照图3.1信息设置好属性后的程序界面如所示。

图17-10  【关于】用户界面

【关于记事本】窗体和窗体上各控件的属性设置如表3.1所示。

2.  编写代码

本部分的代码很简单,单击【确定】按钮关闭本窗体。并且利用LinkLabel控件

代码如下:

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

// 【关于记事本】代码

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

// 【确定】按钮

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事件代码如下:

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

// 工具栏的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;

}

}

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

// 工具栏的ItemClicked事件代码

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

1.6  计时器代码

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

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

// 计时器控件的Tick事件代码

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

private void tmrNotepad_Tick(object sender, EventArgs e)

{

tssLbl2.Text = System.DateTime.Now.ToString();

}

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

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

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

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

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

// 窗体的的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 frmNotepad_Load(object sender, EventArgs e)
{

}

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

}

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)
{
//由于这个没有改Name属性,所以和图片不太一样,对照就行
// 若文件从磁盘打开并且修改了其内容
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 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());//显示当前日期
}

//**********************格式菜单**************************************

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

}
//****************************************************查看菜单***************************8
private void tsmiToolStrip_Click(object sender, EventArgs e)
{

}

private void tsmiStatusStrip_Click(object sender, EventArgs e)
{
if (tsmiStatusStrip.Checked == true)
{
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;
}

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 tlsNotepad_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
{
int n;
// 变量n用来接收按下按钮的索引号从0开始
n = tlsNotepad.Items.IndexOf(e.ClickedItem);
switch (n)
{
case 0:
tsmiNew_Click(sender, e);
break;
case 1:
tsmiOpen_Click(sender, e);
break;
case 2:
tsmiSaveAs_Click(sender, e);
break;
/*case 3:
tsmiCopy_Click(sender, e);
break;*/ // 我们不用case3

case 4:
tsmiCut_Click(sender, e);
break;
case 5:
tsmiPaste_Click(sender, e);
break;
/*case 6:
tsmiPaste_Click(sender, e);
break; */ // 我们不用case6

tsmiAbout_Click(sender, e);
break;

}

}

private void tmrNotepad_Tick(object sender, EventArgs e)
{

tssLbl2.Text = System.DateTime.Now.ToString();

}
}
}

用C#语言实现记事本的更多相关文章

  1. C语言打印记事本内搜索字符串所在行信息

    本程序采用C语言编写,使用方法: 1.双击“甲骨文字符串查询作品.exe”运行程序; 2.运行前请确保此可执行程序目录下有1.txt文件. 3.根据提示输入一个字符串,程序将显示存在所搜索字符串的所有 ...

  2. C语课设心得分享(二)

    咱们今儿说说IDE的事儿. IDE是「集成开发环境」的意思,比如咱们常用的VC6.0,就是开发C语言所用的IDE的一种.对于IDE的认识,可能有些朋友有点儿模糊,咱们捋一捋,我也会给出一些IDE方面的 ...

  3. 操作系统模仿CMD

    实验一.命令解释程序的编写 专业:商软(2)班   姓名:列志华  学号:201406114254 一.        实验目的 (1)掌握命令解释程序的原理: (2)掌握简单的DOS调用方法: (3 ...

  4. 听说高手都用记事本写C语言代码?那你知道怎么编译运行吗?

    坊间传闻高手都喜欢用记事本写代码,那么问题来了,我们以C语言为例,如何用记事本编译运行呢?其实最简单的方式就是安装GCC编译器,在记事本编写C语言程序,然后再在命令行用GCC编译运行,下面我简单介绍一 ...

  5. c语言读取字符在记事本中出现次数

    程序使用说明: 此程序可以统计出名称为1.txt的文件中/出现的次数 但是仅支持单个英文字母和标点符号查询,不支持汉字. 在本程序生成的exe根目录下放一个1.txt, 即可查询出该字符在1.txt记 ...

  6. C语言编译过程以及Windows中的gcc编译程序(通过cmd、记事本)

    C语言的编译过程 1)预处理:宏定义展开.头文件展开.条件编译等,同时将代码中的注释删除,这里并不会检查语法 2)编译:检查语法,将预处理后的文件编译生成汇编文件 3)汇编:将汇编文件生成目标文件(二 ...

  7. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_04 IO字节流_5_文件存储的原理和记事本打开文本显示原理

    原理 流对象指向这个文件a.txt 往文件中写数据,写的时候比较特殊 97转换成二进制是多少呢? 输入97然后选择二进制.转换后为 1100001 硬盘上实际存的是97的二进制 97查询阿斯克码表就是 ...

  8. InstallShield 脚本语言学习笔记

    InstallShield脚本语言是类似C语言,利用InstallShield的向导或模板都可以生成基本的脚本程序框架,可以在此基础上按自己的意愿进行修改和添加.     一.基本语法规则      ...

  9. SharePonit 2010 更改另存为列表模板的语言类型

    从朋友处得来一个列表模板:AccessApplicationSharePoint.stp 将其通过:网站操作----网站设置----列表模板,上传进去.然后去创建列表,发现找不到此模板. 根据多年老司 ...

  10. Eclipse中文语言包安装和设置中文Doc

    1.安装中文语言包 Eclipse所有的扩展功能都是以插件的形式添加上去的,安装插件时有多种形式,下面是比较常用的两种: 直接将插件中的文件复制到Eclipse对于的目录中.优点是安装时很方便,缺点是 ...

随机推荐

  1. TP5--数据库基本操作

    /** * 插入数据 * 执行成功返回影响数据的条数,执行失败返回false */ //添加一条数据 $data = [ 'name'=>'wangwu', 'pwd'=>123456 ] ...

  2. JiaoZiVideoPlayer模拟用户点击,切换播放引擎!~

    默认播放及模拟用户点击播放按钮 jzvideoPlayerStandard.startButton.performClick() 切换播放引擎及使用Ijkplayer JZVideoPlayer.se ...

  3. react video

    import React, { useRef, useState, useCallback } from 'react'; import './style.scss'; const typeCheck ...

  4. 一种简单方便的postgresql插件multicorn安装方法 ---yum install multicorn10.x86_64

    Yum 安装multicorn的方法,一下子解决了之前make&make install方式安装的各种问题必须记录一下. 1.yum search multicorn----找到需要的包 2. ...

  5. call与apply的区别与共同点

    call与apply区别 共同点:都会立即执行函数 call:是以逗号为间隔,传递多个参数 apply:是以数组来进行传递多个参数

  6. 6. C语言bool类型

    C89没有定义布尔类型,所以C语⾔判断真假时以0为假,⾮0为真.所以我们通常使⽤逻辑变量的做法: 1 //宏定义布尔类型 2 3 #define BOOL int 4 5 #define TRUE 1 ...

  7. 1144. 递减元素使数组呈锯齿状 (Medium)

    问题描述 1144. 递减元素使数组呈锯齿状 (Medium) 给你一个整数数组 nums,每次 操作 会从中选择一个元素并 将该元素的值减少 1. 如果符合下列情况之一,则数组 A 就是 锯齿数组: ...

  8. 测试elasticsearch保存时报找不到类型的错误

    java测试存储数据到es时报错:...ActionRequestValidationException: Validation Failed: 1: type is missing... /** * ...

  9. 统计学习导论之R语言应用(三):线性回归R语言代码实战

    统计学习导论(ISLR) 参考资料 The Elements of Statistical Learning An Introduction to Statistical Learning 统计学习导 ...

  10. python 识别登陆验证码图片(完整代码)

    在编写自动化测试用例的时候,每次登录都需要输入验证码,后来想把让python自己识别图片里的验证码,不需要自己手动登陆,所以查了一下识别功能怎么实现,做一下笔记. 首选导入一些用到的库,re.Imag ...