记事本
https://github.com/mostimacc/Notepad.git
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 Notepad { public partial class frmNotepad : Form { /* 布尔变量b用于判断文件是新建的还是从磁盘打开的, true表示文件是从磁盘打开的,false表示文件是新建的,默认值为false*/ bool b = false; /* 布尔变量s用于判断文件件是否被保存, true表示文件是已经被保存了,false表示文件未被保存,默认值为true*/ bool s = true; public frmNotepad() { InitializeComponent(); } private void 打开0CtrlOToolStripMenuItem_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 保存SCtrlSToolStripMenuItem_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 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 黏贴PCtrlPToolStripMenuItem_Click(object sender, EventArgs e) { rtxtNotepad.Paste();//粘贴 } private void tssLbl2_Click(object sender, EventArgs e) { } private void tssLbl1_Click(object sender, EventArgs e) { } private void rtxtNotepad_TextChanged(object sender, EventArgs e) { s = false; } private void 新建NToolStripButton_Click(object sender, EventArgs e) { tsmiNew_Click(sender, e); } private void 打开OToolStripButton_Click(object sender, EventArgs e) { 打开0CtrlOToolStripMenuItem_Click(sender, e); } 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 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; } } 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; } } 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 tlsNotepad_ItemClicked(object sender, ToolStripItemClickedEventArgs e) { } private void tmrNotepad_Tick(object sender, EventArgs e) { tssLbl2.Text = System.DateTime.Now.ToString(); } private void 保存SToolStripButton_Click(object sender, EventArgs e) { 保存SCtrlSToolStripMenuItem_Click(sender, e); } private void 剪切UToolStripButton_Click(object sender, EventArgs e) { tsmiCut_Click(sender, e); } private void 复制CToolStripButton_Click(object sender, EventArgs e) { tsmiCopy_Click(sender, e); } private void 粘贴PToolStripButton_Click(object sender, EventArgs e) { 黏贴PCtrlPToolStripMenuItem_Click(sender, e); } private void 帮助LToolStripButton_Click(object sender, EventArgs e) { tsmiAbout_Click(sender, e); } private void 打印PToolStripButton_Click(object sender, EventArgs e) { } } }
通过本次的学习,可以进一步掌握MenuStrip(菜单)、ToolStrip(工具栏)、RichTextBox(高级文本框)和StatusStrip(状态栏控件)等控件的使用,以及如何使用CommonDialog(公共对话框)实现对文本的存取、格式设置等操作。
1. 在实现功能之前,首先实现记事本框体的定义,设置内容如下:

2. 设计基本功能界面

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

设置【文件(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 |
|||||||
到此 菜单栏框架设置完成!
(1) ToolStrip(工具栏控件)。
单击窗体左边会出现工具箱→ 找到“ToolStrip” →拖动到窗体中
单击工具栏→右下角属性→修改Name属性为“tlsNotepad”如图所示
右击工具栏→ 插入标准项 出现如图所示

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

为了看起来直观,这个我们不更改它们的Name属性了,接下来根据程序本身的需要,对添加的标准工具子项进行增加和删除,在设置好各子项的属性即可。
(2) RichTextBox(多格式文本框控件)。
单击窗体左边会出现工具箱→ 找到“RichTextBox” →拖动到窗体中
单击工具栏→右下角属性→修改Name属性为“rtxtNotepad”
Anchor属性选择“Top,Bottom,Left,Right”,这样当窗体大小改变时,RichTextBox控件的大小也会跟着改变。
(3) StatusStrip(状态栏控件)。
添加StatusStrip控件,将其Name属性设为“stsNotepad”,将Dock属性设为“Bottom”再将Anchor属性设为“Bottom,Left,Right”。然后单击右边的按钮,打开【项集合编辑器】对话框。
下拉列表中保留默认的选择“StatusLabel”,然后单击【添加】按钮,依次添加2个StatusLabel,并分别命名为“tssLbl1”和“tssLbl2”,再将tssLbl1的Text属性设为“就绪”, tssLbl2的Text属性设为“显示日期、时间”。
(4) OpenFileDialog(打开对话框)。
从工具箱中找到OpenFileDialog直接拖入窗体中 单击属性
当用户单击记事本的【文件】→【打开】菜单项时,使用打开对话框OpenFileDialog打开文件。OpenFileDialog控件的Name属性为“odlgNotepad”,Filter属性设为“RTF文件|*.rtf|所有文件|*.*”。
(5) SaveFileDialog(保存对话框)。
从工具箱中找到SaveFileDialog直接拖入窗体中 单击属性
当用户单击记事本的【文件】→【保存】(或【另存为】)菜单项时,使用保存对话框SaveFileDialog保存文件。SaveFileDialog控件的Name属性为“sdlgNotepad”,FileName属性改为“无标题”,Filter属性设为“RTF文件|*.rtf”。
(6) FontDialog(字体对话框)。
从工具箱中找到FontDialog直接拖入窗体中 单击属性
当用户单击记事本的【格式】→【字体】菜单项时,使用字体对话框FontDialog设置文本字体。FontDialog控件的Name属性为“fdlgNotepad”。
(7) Timer(计时器控件)。
从工具箱中找到Timer直接拖入窗体中 单击属性
本章介绍的记事本在状态栏中显示了时钟,这就需要使用一个Timer控件来实现。Timer控件的Name属性设为“tmrNotepad”,Enabled(激活的可行的)属性设为“True”,Interval(间隔,间距,幕间时间)属性设为“1000”,表示1秒种触发一次Tick事件,即1秒钟改变一次时钟。
最终的界面如图所示:




浙公网安备 33010602011771号