用C#语言实现记事本
2021/5/12 1:25:10
本文主要是介绍用C#语言实现记事本,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
用C#语言实现记事本
1.创建wins窗体应用程序项目,修改form窗体属性如下
2.加入菜单menustrip控件并按要求设计菜单栏框架
3.继续依次加入ToolStrip、RichTextBox、StatusStrip控件,OpenFileDialog、SaveFileDialog、FontDialog对话框,Timer组件,并设置好相应属性,得到的设置界面如下图
4.进行代码编写以实现实际功能
-
首先在代码的通用段声明以下两个公共变量,他们都是布尔型的,“b”用于判断文件是新建的还是从磁盘打开的,“s”用于判断文件是否被保存。
bool b = false; bool s = true;
-
多格式文本框的TextChanged事件代码
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; } }
- 【工具栏】菜单代码
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 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”);//打开百度网页 }
*工具栏代码
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;*/ // 我们不用case3 case 4: tsmiCut_Click(sender, e); break; case 5: tsmiPaste_Click(sender, e); break; /*case 6: tsmiPaste_Click(sender, e); break; */ // 我们不用case6 case 7: tsmiAbout_Click(sender, e); break; } }
5.运行结果展示
6.心得体会
通过本次实验作业,再一次加深了我对窗体应用程序中控件、组件、对话框的认识,新建文件时打开磁盘使用OpenFileDialog控件,保存文件时需使用SaveFileDialog控件等等,还有在工具栏、菜单栏等菜单项时可采用switch语句实现。
7.gitee仓库链接
仓库链接
这篇关于用C#语言实现记事本的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-11-18微软研究:RAG系统的四个层次提升理解与回答能力
- 2024-11-15C#中怎么从PEM格式的证书中提取公钥?-icode9专业技术文章分享
- 2024-11-14云架构设计——如何用diagrams.net绘制专业的AWS架构图?
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#
- 2024-01-24Advanced .Net Debugging 1:你必须知道的调试工具