文章目录

  • 一、描述
  • 二、记事本简介
  • 三、记事本界面设计
  • 四、源代码
  • 五、运行结果
  • 六、源代码

一、描述

本博客介绍如何使用Visual Studio 2019设计一个Windows应用程序——记事本,通过学习,可以进一步掌握MenuStrip(菜单)、ToolStrip(工具栏)、RichTextBox(高级文本框)和StatusStrip(状态栏控件)等控件的使用,以及如何使用CommonDialog(公共对话框)实现对文本的存取、格式设置等操作。(说明:所有代码必须在英文状态下使用!)

二、记事本简介

记事本是一种常用的软件,在微软的Windows中,自带了一个记事本软件,Windows 10下的记事本软件如下图所示。

三、记事本界面设计

新建一个Windows窗体应用程序,并命名为“Notepad”
更改窗体名称 单击窗体, →右下角属性→text 修改为“记事本”如图所示

按下表设置剩下的窗体属性



1)界面设计
新建好“Notepad”项目后,定位到记事本程序的窗体设计器窗口,然后依次在窗体上放置以下控件(各1个):
(1)MenuStrip(菜单控件)。

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

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

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


(2) ToolStrip(工具栏控件)。

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

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

3.右击工具栏→ 插入标准项 出现如图所示

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

为了看起来直观,这个我们不更改它们的Name属性了。

(3) RichTextBox(多格式文本框控件)。
1.单击窗体左边会出现工具箱→ 找到“RichTextBox” →拖动到窗体中

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

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

(4) StatusStrip(状态栏控件)。
1.添加StatusStrip控件,将其Name属性设为“stsNotepad”,将Dock属性设为“Bottom”再将Anchor属性设为“Top, Left”。

2.然后单击 右边的 按钮,打开【项集合编辑器】对话框。

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

5) OpenFileDialog(打开对话框)。
从工具箱中找到OpenFileDialog直接拖入窗体中 单击属性
当用户单击记事本的【文件】→【打开】菜单项时,使用打开对话框OpenFileDialog打开文件。OpenFileDialog控件的Name属性为“odlgNotepad”,Filter属性设为

RTF文件|.rtf|所有文件|.*

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

RTF文件|*.rtf

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

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

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

关于记事本
接下来单击【项目】→【添加Windows窗体】菜单项,添加一个名为“frmAbout”的窗体,如图所示。

界面设计
然后给窗体“frmAbout”添加几个Label、Button、LinkLabel控件,如图所示。

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

四、源代码

namespace 记事本
{public partial class frmNotepad : Form{bool b = false;bool s = true;public frmNotepad(){InitializeComponent();}private void NotePad_Load(object sender, EventArgs e){}private void rtxtNotePad_TextChanged(object sender, EventArgs e){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){// 若文件从磁盘打开并且修改了其内容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;}}private void tsmiToolStrip_Click(object sender, EventArgs e){Point point;if (tsmiToolStrip.Checked == true){//隐藏工具栏时,把坐标设为(0,24),因为菜单的高度未24point = 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 += rtxtNotePad.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){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:tsmiSave_Click(sender, e);break;/*case 3:tsmiCopy_Click(sender,e);break;*/case 4:tsmiCut_Click(sender, e);break;case 5:tsmiPaste_Click(sender, e);break;/*case 6:tsmiPaste_Click(sender,e);break;*/case 7:tsmiAbout_Click(sender, e);break;}}private void tmrNotePad_Tick(object sender, EventArgs e){tssLbl2.Text = System.DateTime.Now.ToString();}private void toolTip1_Popup(object sender, PopupEventArgs e){}private void toolStripMenuItem4_Click(object sender, EventArgs e){}private void toolStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e){}private void tsmiFile_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 label1_Click(object sender, EventArgs e){}private void frmAbout_Load(object sender, EventArgs e){}//*************************************************************************// 【关于记事本】代码//*************************************************************************// 【确定】按钮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");}}
}

五、运行结果


六、源代码

源码

Windows应用程序——记事本相关推荐

  1. 使用C#设计一个Windows应用程序——记事本

    文章主要内容:通过本文介绍学习,可以进一步掌握MenuStrip(菜单).ToolStrip(工具栏).RichTextBox(高级文本框)和StatusStrip(状态栏控件)等控件的使用,以及如何 ...

  2. Windows程序设计——简单记事本

    总体框架目录 一.简介 二.记事本功能简介与实现 (一)新建文件 (二)界面设计 (1)MenuStrip(菜单控件) (2)ToolStrip(工具栏控件) (3)RichTextBox(多格式文本 ...

  3. 基于Windows的桌面程序——记事本的制作

    1.新建项目 启动Visual Studio .NET ,在"文件"菜单上,指向"添加",然后单击"新建项目"打开"新建项目&qu ...

  4. linux里运行windows,在Linux上运行Windows应用程序

    当前位置:我的异常网» Linux/Unix » 在Linux上运行Windows应用程序 在Linux上运行Windows应用程序 www.myexceptions.net  网友分享于:2015- ...

  5. 网页设计师的必备选择20 +必需的Windows应用程序

    今天给网页设计师推荐20几个windows下提高工作效率的应用程序,对于设计师来说是必不可少的,希望大家喜欢 1. Skybound Stylizer 虽然我更喜欢使用Firebug时,我发现&quo ...

  6. Windows应用程序文件格式转换控件LEADTOOLS ePrint Professional

    2019独角兽企业重金招聘Python工程师标准>>> LEADTOOLS ePrint Professional控件是一个多功能一体化文件转换解决方案,它可帮助您将任何Window ...

  7. C++ Windows 窗体程序入门 - 1.你的第亿个窗体程序

    〇.前言-------------------- + 学Windows窗体已经有一段时日了,奈何没有什么浅显易懂(&便宜!!)的书籍 , 就想来 , 算是记笔记吧 , 顺便还能给你们总结一些经 ...

  8. 2021年用于开发构建本机原生Windows应用程序软件的6大C ++ IDE开发工具简介

    集成软件开发环境(IDE)是一种软件应用程序,为应用程序开发提供了完整的功能集.代码通常以文本格式编写,您可以使用记事本,Word,Wordpad等文本编辑器轻松地编辑或修改代码.但是,对于开发人员( ...

  9. Python如何启动windows本地程序

    要在Windows上使用Python启动本地程序,您可以使用subprocess模块.具体而言,您可以使用subprocess.call()或subprocess.Popen()函数来启动一个本地程序 ...

最新文章

  1. 如何识别和避免间谍软件
  2. 修改了/etc/systemd/system.conf以后必须使用daemon-reexec
  3. 轻量级HTTP服务器Nginx(安装篇)
  4. POJ2411-Mondriaan's Dream【状态压缩dp】
  5. java requestparams_java – 如何验证@RequestParams不为空?
  6. 2017.5.8 文化之旅 思考记录
  7. matlab2016a 问题及解决方法记录
  8. kvm虚拟化学习笔记(二)之linux kvm虚拟机安装
  9. IsPostBack结论
  10. php课程设计学生信息管理系统,学生成绩管理系统/学生信息管理系统
  11. 有第三方扩展组件的layui 文档地址
  12. Mujoco 基本教程
  13. ie11加载项启用不了 java,IE11网页加载项和控件不能运行怎么办
  14. SpringBoot微信公众号开发
  15. Python进阶之Scrapy抓取阳光政务平台
  16. 赛百味的中英文菜单对照
  17. SAM简单介绍(百度翻译)
  18. 2019-4-29-win10-uwp-使用-Border-布局
  19. LOD(Levels of detail)细节层次3D优化
  20. 2021-06-08STC15F2K602S串口2驱动代码

热门文章

  1. gzip、bzip2、zip、rar、7z、compress 加压、解压
  2. vue相关的面试题应该怎么答
  3. 多暂估的库存如何调整_会计们看过来 暂估存货小知识
  4. 个人云平台 Sandstorm
  5. 手机彩铃java工程项目_4G中手机彩铃业务信令过程简述
  6. QWidget事件消息
  7. HTML实例之下拉菜单
  8. BNUOJ 34971 BALLS
  9. 使用Win32 Disk Imager烧录镜像到U盘
  10. js trim()方法兼容性IE8