C#小项目之记事本

news2024/11/25 18:26:43

C#小项目之记事本

子窗体设计

image-20230526233330408

frmChild.cs

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;
using System.Drawing.Text;
using System.Collections;
using System.IO;
namespace notepad
{
    public partial class frmChild : Form
    {
        public frmChild()
        {
            InitializeComponent();
        }
        //编辑文本时
        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            toolStripLabelMake.Text = "*";
        }
        //窗体加载事件
        private void frmChild_Load(object sender, EventArgs e)
        {
            //加载时要加载,要加载系统字体
            InstalledFontCollection myFonts = new InstalledFontCollection();
            //获取InstalledFontCollection对象的数组
            FontFamily[] ff = myFonts.Families;
            //声明一个ArrayList变量
            ArrayList list = new ArrayList();
            //获取系统数组的列表中集合的长度
            int count = ff.Length;

            //使用for循环把字体名称写入到toolStripComboBoxFonts
            for (int i = 0; i < count; i++)
            {
                string FontName = ff[i].Name;
                toolStripComboBoxFonts.Items.Add(FontName);
            }
            
        }
        //加粗按钮
        private void toolStripButtonBold_Click(object sender, EventArgs e)
        {
            //点击按钮加粗,加粗时再点击按钮取消加粗
            if (textBoxNote.Font.Bold == false)
            {
                textBoxNote.Font = new Font(textBoxNote.Font,FontStyle.Bold);
            }
            else
            {
                textBoxNote.Font = new Font(textBoxNote.Font, FontStyle.Regular);
            }
                
        }
        //倾斜按钮
        private void toolStripButtonItalic_Click(object sender, EventArgs e)
        {
            if (textBoxNote.Font.Italic == false)
            {
                textBoxNote.Font = new Font(textBoxNote.Font, FontStyle.Italic);
            }
            else
            {
                textBoxNote.Font = new Font(textBoxNote.Font, FontStyle.Regular);
            }
        }
        //改变选择字体的索引事件
        private void toolStripComboBoxFonts_SelectedIndexChanged(object sender, EventArgs e)
        {
            string fontName = toolStripComboBoxFonts.Text;
            float fontSize = float.Parse(toolStripComboBoxSize.Text);
            textBoxNote.Font = new Font(fontName, fontSize);
        }

        private void toolStripComboBoxSize_SelectedIndexChanged(object sender, EventArgs e)
        {
            string fontName = toolStripComboBoxFonts.Text;
            float fontSize = float.Parse(toolStripComboBoxSize.Text);
            textBoxNote.Font = new Font(fontName, fontSize);
        }

        private void toolStripComboBoxSize_TextChanged(object sender, EventArgs e)
        {
            string fontName = toolStripComboBoxFonts.Text;
            float fontSize = float.Parse(toolStripComboBoxSize.Text);
            textBoxNote.Font = new Font(fontName, fontSize);
        }
        //保存文档
        private void toolStripButtonSave_Click(object sender, EventArgs e)
        {
            if (textBoxNote.Text.Trim() != "")
            {
                if (this.Text == "")
                {
                    //新建一个保存文件的对话框
                    //创建一个筛选器\过滤器
                    saveFileDialog1.Filter = ("文本文档(*.txt)|*.txt");
                    //判断用户点击的是保存按钮还是取消按钮
                    if (saveFileDialog1.ShowDialog() == DialogResult.OK)
                    {
                        //保存文件到用户指定的目录
                        //获取用户选择的文件及路径
                        string path = saveFileDialog1.FileName;
                        //保存文件到指定路径
                        StreamWriter sw = new StreamWriter(path, false);
                        //保存文件到指定路径
                        sw.WriteLine(textBoxNote.Text.Trim());
                        //把窗体text属性设置为保存后的文件路径
                        this.Text = path;
                        //释放资源
                        sw.Flush();
                        sw.Close();
                    }
                }
                else
                {
                    //保存文件到用户指定的目录
                    //获取用户选择的文件及路径
                    string path = this.Text;
                    //保存文件到指定路径
                    StreamWriter sw = new StreamWriter(path, false);
                    //保存文件到指定路径
                    sw.WriteLine(textBoxNote.Text.Trim());
                    //清理缓存
                    sw.Flush();
                    sw.Close();
                }
            }
            else
            {
                MessageBox.Show("空文档 不能保存","信息提示",MessageBoxButtons.OK,MessageBoxIcon.Error);
            }
        }
        //打开文档
        private void toolStripButtonOpen_Click(object sender, EventArgs e)
        {
            //新建一个保存文件的对话框
            //创建一个筛选器\过滤器
            openFileDialog1.Filter = ("文本文档(*.txt) | *.txt");
            //判断用户点击的是打开按钮还是取消按钮
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                //获取打开文档的路径
                string path = openFileDialog1.FileName;
                //通用编码
                StreamReader sr = new StreamReader(path,Encoding.UTF8);
                //读取文档中的数据流
                string text = sr.ReadToEnd();
                textBoxNote.Text = text;
                //将打开的文件路径写在当前窗体的属性中
                this.Text = path;
                //打开文件时清除记号标签
                toolStripLabelMake.Text = "";
                sr.Close();
            }
        }
        //窗体关闭事件
        private void frmChild_FormClosing(object sender, FormClosingEventArgs e)
        {
            //判断记号label是否时*号
            if(toolStripLabelMake.Text=="*")
            {
                //如果是*进入代码,提示用户尚未保存
                DialogResult dr = MessageBox.Show("文档尚未保存,确定要继续退出吗?","信息询问",MessageBoxButtons.YesNo,MessageBoxIcon.Question); 
                //如果用户选择的是 确定 按钮,
                if(dr == DialogResult.Yes)
                {
                    this.Dispose();
                }
                else
                {
                    e.Cancel = true;
                }
            }
        }
        //新建按钮
        private void toolStripButton1_Click(object sender, EventArgs e)
        {
            textBoxNote.Text = "";
            toolStripLabelMake.Text = "";
        }
    }
}

所有窗体都是Form窗体的派生类

textBox1_TextChanged事件

当变更textBox_Text的内容时进入此函数,在子窗体右上角显示*代表修改过

		//编辑文本时
        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            toolStripLabelMake.Text = "*";
        }

frmChild_Load子窗体加载事件

当子窗体在加载时执行该函数,把系统字体存储在FontFamily数组,方便后续使用

 private void frmChild_Load(object sender, EventArgs e)
        {
            //加载时要加载,要加载系统字体
            InstalledFontCollection myFonts = new InstalledFontCollection();
            //获取InstalledFontCollection对象的数组
            FontFamily[] ff = myFonts.Families;
            //声明一个ArrayList变量
            ArrayList list = new ArrayList();
            //获取系统数组的列表中集合的长度
            int count = ff.Length;

            //使用for循环把字体名称写入到toolStripComboBoxFonts
            for (int i = 0; i < count; i++)
            {
                string FontName = ff[i].Name;
                toolStripComboBoxFonts.Items.Add(FontName);
            }
            
        }

toolStripButtonBold_Click鼠标点击加粗事件

点击加粗如果当前是加粗就取消加粗,不是就加粗

private void toolStripButtonBold_Click(object sender, EventArgs e)
        {
            //点击按钮加粗,加粗时再点击按钮取消加粗
            if (textBoxNote.Font.Bold == false)
            {
                textBoxNote.Font = new Font(textBoxNote.Font,FontStyle.Bold);
            }
            else
            {
                textBoxNote.Font = new Font(textBoxNote.Font, FontStyle.Regular);
            }
                
        }

toolStripButtonItalic_Click鼠标点击倾斜事件

点击倾斜效果如果当前是倾斜就取消倾斜,不是就倾斜

private void toolStripButtonItalic_Click(object sender, EventArgs e)
        {
            if (textBoxNote.Font.Italic == false)
            {
                textBoxNote.Font = new Font(textBoxNote.Font, FontStyle.Italic);
            }
            else
            {
                textBoxNote.Font = new Font(textBoxNote.Font, FontStyle.Regular);
            }
        }

toolStripComboBoxFonts_SelectedIndexChanged改变选择字体的索引事件

改变字体为下拉框中选中的字体

private void toolStripComboBoxFonts_SelectedIndexChanged(object sender, EventArgs e)
        {
            string fontName = toolStripComboBoxFonts.Text;
            float fontSize = float.Parse(toolStripComboBoxSize.Text);
            textBoxNote.Font = new Font(fontName, fontSize);
		}

toolStripComboBoxSize_TextChanged改变字体大小事件

改变字体大小为下拉框中选中的字体大小

private void toolStripComboBoxSize_TextChanged(object sender, EventArgs e)
        {
            string fontName = toolStripComboBoxFonts.Text;
            float fontSize = float.Parse(toolStripComboBoxSize.Text);
            textBoxNote.Font = new Font(fontName, fontSize);
        }

toolStripButtonSave_Click点击保存按钮

注释很详细

private void toolStripButtonSave_Click(object sender, EventArgs e)
        {
            if (textBoxNote.Text.Trim() != "")
            {
                if (this.Text == "")
                {
                    //新建一个保存文件的对话框
                    //创建一个筛选器\过滤器
                    saveFileDialog1.Filter = ("文本文档(*.txt)|*.txt");
                    //判断用户点击的是保存按钮还是取消按钮
                    if (saveFileDialog1.ShowDialog() == DialogResult.OK)
                    {
                        //保存文件到用户指定的目录
                        //获取用户选择的文件及路径
                        string path = saveFileDialog1.FileName;
                        //保存文件到指定路径
                        StreamWriter sw = new StreamWriter(path, false);
                        //保存文件到指定路径
                        sw.WriteLine(textBoxNote.Text.Trim());
                        //把窗体text属性设置为保存后的文件路径
                        this.Text = path;
                        //释放资源
                        sw.Flush();
                        sw.Close();
                    }
                }
                else
                {
                    //保存文件到用户指定的目录
                    //获取用户选择的文件及路径
                    string path = this.Text;
                    //保存文件到指定路径
                    StreamWriter sw = new StreamWriter(path, false);
                    //保存文件到指定路径
                    sw.WriteLine(textBoxNote.Text.Trim());
                    //清理缓存
                    sw.Flush();
                    sw.Close();
                }
            }
            else
            {
                MessageBox.Show("空文档 不能保存","信息提示",MessageBoxButtons.OK,MessageBoxIcon.Error);
            }
        }

toolStripButtonOpen_Click点击打开按钮

注释很详细

 private void toolStripButtonOpen_Click(object sender, EventArgs e)
        {
            //新建一个保存文件的对话框
            //创建一个筛选器\过滤器
            openFileDialog1.Filter = ("文本文档(*.txt) | *.txt");
            //判断用户点击的是打开按钮还是取消按钮
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                //获取打开文档的路径
                string path = openFileDialog1.FileName;
                //通用编码
                StreamReader sr = new StreamReader(path,Encoding.UTF8);
                //读取文档中的数据流
                string text = sr.ReadToEnd();
                textBoxNote.Text = text;
                //将打开的文件路径写在当前窗体的属性中
                this.Text = path;
                //打开文件时清除记号标签
                toolStripLabelMake.Text = "";
                sr.Close();
            }
        }

frmChild_FormClosing窗体关闭事件

关闭前没有保存弹出提示框,已经保存就直接关闭,通过判断*

private void frmChild_FormClosing(object sender, FormClosingEventArgs e)
        {
            //判断记号label是否时*号
            if(toolStripLabelMake.Text=="*")
            {
                //如果是*进入代码,提示用户尚未保存
                DialogResult dr = MessageBox.Show("文档尚未保存,确定要继续退出吗?","信息询问",MessageBoxButtons.YesNo,MessageBoxIcon.Question); 
                //如果用户选择的是 确定 按钮,
                if(dr == DialogResult.Yes)
                {
                    this.Dispose();
                }
                else
                {
                    e.Cancel = true;
                }
            }
        }

toolStripButton1_Click点击新建按钮事件

点击新建子窗口,初始化内容都为空

private void toolStripButton1_Click(object sender, EventArgs e)
        {
            textBoxNote.Text = "";
            toolStripLabelMake.Text = "";
        }

frmParent.cs

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 frmParent : Form
    {
        public frmParent()
        {
            InitializeComponent();
        }
        //新建
        private void ToolStripMenuItemNew_Click(object sender, EventArgs e)
        {
            //实例化一个子窗体对象
            frmChild child = new frmChild();
            //设置子窗体的父窗体
            child.MdiParent = this;
            //打开子窗体
            child.Show();
        }
        //关闭
        private void ToolStripMenuItemClose_Click(object sender, EventArgs e)
        {
            Form frm = this.ActiveMdiChild;
            frm.Close();
        }
        //关闭全部
        private void ToolStripMenuItemCloseALL_Click(object sender, EventArgs e)
        {
            //this.MdiChildren获取父窗体的子窗体的集合
            foreach (Form form in this.MdiChildren)
            {
                Form frm = this.ActiveMdiChild;
                frm.Close();
            }
        }
        //退出
        private void ToolStripMenuItemExit_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}

image-20230526234920672

ToolStripMenuItemNew_Click点击新建子窗口

点击新建自然要打开一个子窗口,然后设置新打开的子窗口的父窗口为当前窗口,最后显示子窗口

private void ToolStripMenuItemNew_Click(object sender, EventArgs e)
        {
            //实例化一个子窗体对象
            frmChild child = new frmChild();
            //设置子窗体的父窗体
            child.MdiParent = this;
            //打开子窗体
            child.Show();
        }

ToolStripMenuItemClose_Click点击关闭窗口

关闭当前活动的窗口,颜色效果不一样

private void ToolStripMenuItemClose_Click(object sender, EventArgs e)
        {
            Form frm = this.ActiveMdiChild;
            frm.Close();
        }

ToolStripMenuItemCloseALL_Click点击关闭全部

关闭所有打开的窗口

private void ToolStripMenuItemCloseALL_Click(object sender, EventArgs e)
        {
            //this.MdiChildren获取父窗体的子窗体的集合
            foreach (Form form in this.MdiChildren)
            {
                Form frm = this.ActiveMdiChild;
                frm.Close();
            }
        }

ToolStripMenuItemExit_Click点击退出

直接关闭父窗口,所有的子窗口都会关闭

private void ToolStripMenuItemExit_Click(object sender, EventArgs e)
        {
            this.Close();
        }

演示效果

初始

image-20230526235734471

点击文件中的新建

可以产生多个子窗口,取决于新建了多少个

image-20230526235758855

点击打开

打开电机驱动.txt

image-20230526235857641

显示如下

左上角会显示路径

image-20230526235920916

点击加粗

image-20230527000006880

点击倾斜

image-20230527000049208

选择字体

image-20230527000143296

选择字号

image-20230527000200567

保存

在内容中输入文字,右上角出现星号,表示没保存

image-20230527000312045

直接点击×

弹出未保存的提示框

image-20230527000336255

点击保存在X

可以直接退出

关闭当前激活的窗口

第一个颜色与其他不同,即为当前激活的窗口

image-20230527000520129

关闭全部窗口

image-20230527000621605

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/574368.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第 2 章 Servlet 编程

文章目录 第 2 章 Servlet 编程2.1 Servlet 简介2.2 Servlet 基础2.2.1 用记事本写一个 Servlet2.2.2 Servlet 体系结构2.2.3 Servlet 接口2.2.4 Servlet 生命周期2.2.5 Servlet 生命周期示例 2.3 Servlet API编程常用接口和类2.3.1 GenericServlet 类2.3.2 HttpServlet类2.3.3…

使用object.defineProperty来更新数据示例

Object.defineProperty() 方法会直接在一个对象上定义一个新属性&#xff0c;或者修改一个对象的现有属性&#xff0c;并返回此对象。 Object.defineProperty&#xff08;&#xff09;可以为对象的属性添加特性&#xff0c;每一个被添加过的属性&#xff0c;都会拥有属于自己的…

公司来了个00后,真是卷死了呀,辞职信已经写好了·····

人们都说00后躺平了&#xff0c;但是有一说一&#xff0c;该卷的还是卷。这不&#xff0c;三月份春招我们公司来了个00后&#xff0c;工作没两年&#xff0c;跳槽到我们公司起薪20K&#xff0c;都快接近我了。 后来才知道人家是个卷王&#xff0c;从早干到晚就差搬张床到工位睡…

chatgpt赋能python:Python单行命令:while

Python单行命令&#xff1a;while 介绍 在Python中&#xff0c;while循环是一种重复执行代码块的结构&#xff0c;只要满足循环条件&#xff0c;就会一直循环下去。而单行命令则是指一行代码就完成了某个任务。在Python语言中&#xff0c;我们可以使用单行命令在 while循环中…

springcloud高频面试题

springcloud的组件有哪些 注册中心&#xff1a;euraka、nacos、zookeeper 注册中心及配置中心&#xff1a;nacos 远程调用&#xff1a;feign、dubbo 负载均衡&#xff1a;ribbon 服务熔断&#xff1a;hystrix、sentinel 网关&#xff1a;zuul、gateway eureka注册中心的作用 …

JAVA面试八股整理——基础部分

JAVA 基础 JVM JDK JRE JVM java虚拟机&#xff0c;针对不同的系统&#xff0c;使用相同的字节码会给出相同结果。一次编译&#xff0c;随处可运行 JDK Java SDK 提供给开发者使用&#xff0c;创建和编译Java程序。包含了JRE&#xff0c;同时包含了其它工具&#xff08;jav…

Deepin 23的最佳新功能和亮点

Deepin是一个基于Linux的操作系统&#xff0c;以其美观、简洁和易用的用户界面而闻名。Deepin 23是Deepin操作系统的最新版本&#xff0c;引入了许多令人兴奋的新功能和亮点&#xff0c;为用户提供了更好的体验和更多的功能。 本文将详细介绍Deepin 23的最佳新功能和亮点。 1…

教你彻底卸载MySQL 并重装(保姆级教程 )

前言&#xff1a;都是自己踩过的坑&#xff08;其他博主也有&#xff0c;不过我的特殊&#xff0c;按步骤走完重新安装仍要输入原密码&#xff0c;本篇主要解决和我问题类似的情况&#xff09;&#xff0c;跟着以下步骤走就行。 步骤一&#xff1a;关闭MySQL服务 右击【计算机】…

@Transactional @Aysnc 循环依赖 事务同步问题

文章目录 学习链接场景最初版本TestControllerTestService问题 Lazy版本 事务同步报错版本&#xff1a;TestServiceLazy正常启动版本&#xff08;有问题&#xff09;Lazy 注册事务同步 学习链接 Async学习及循环依赖 场景 我们要做的事情很简单&#xff1a; 现在我们需要…

高校智能用电管理系统的应用探讨

摘 要&#xff1a;随着现代科学技术的发展&#xff0c;在高校中开始广泛应用智能化技术&#xff0c;改善学生宿舍的用电管理模式&#xff0c;提高宿舍的管理水平&#xff0c;有利于实现高校宿舍用电管理的科学化。本文主要阐述传统高校宿舍用电管理模式&#xff0c;设计高校智能…

tektronix泰克TDS3054B数字荧光示波器

TDS3054B示波器体积小巧、便于携带、可用电池供电&#xff0c;所以可在任何需要的地方使用。安装电池 后&#xff0c;其重量还不到5 公斤。即便是在现场工作&#xff0c;也可通过选购的插入式热敏打印机当场打印测量 结果。 用户还可通过选购的应用模块轻而易举地使TDS3000B 系…

Web3小白科普系列:加密社区行业黑话全解(第一弹)

加密货币的快速发展创造了属于自己的全新语言&#xff0c;其中充满了黑话和首字母缩写&#xff0c;可能会让新手不知所措。本期《Web3小白科普系列&#xff1a;加密社区行业黑话全解》旨在解释加密世界中经常使用的、旁人难以解读的术语。我们将深入探究流行俚语的起源和含义&a…

专转本大忌,老实说这样备考真的考不上

&#xff08;1&#xff09;目标院校定太高&#xff0c;报考全凭主观臆断&#xff0c;没有深入了解学校专业和今年的考情&#xff0c;结果自身实力不够导致错失升本的机会。 &#xff08;2&#xff09;盲目追求学习时间却不追求效率&#xff0c;经常熬夜通宵学习&#xff0c;结…

开发工具---Eclipse 教程Ⅰ

Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。 Eclipse 是 Java 的集成开发环境&#xff08;IDE&#xff09;&#xff0c;当然 Eclipse 也可以作为其他开发语言的集成开发环境&#xff0c;如C&#xff0c;C&#xff0c;PHP&#xff0c;和 Ruby 等。 Eclipse 附带…

JavaScript面向对象编程

在这里插入代码片## 1. 构造函数和new命令 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" con…

PLX31-EIP-MBS 以太网/IP到Modbus串行

PLX31-EIP-MBS ProSoft Technology的EtherNet/IP to Modbus串行通信网关允许在EtherNet/IP PACs或设备与支持Modbus的PACs或设备之间进行高速双向数据传输。 EtherNet/IP PACs包括Rockwell Automation ControlLogix和CompactLogix&#xff0c;以及几款施耐德电气控制器。Mod…

NameServer总结

NameServer是一个注册中心&#xff0c;提供服务注册和服务发现的功能。NameServer可以集群部署&#xff0c;集群中每个节点都是对等的关系&#xff08;没有像ZooKeeper那样在集群中选举出一个Master节点&#xff09;&#xff0c;节点之间互不通信。服务注册 Broker启动的时候会…

Eclipse教程Ⅲ

Eclipse 菜单 Eclipse 查看的菜单栏通常包含以下几个菜单&#xff1a; File 菜单Edit 菜单Navigate 菜单Search 菜单Project 菜单Run 菜单Window 菜单Help 菜单 通过 Eclipse 插件你可以添加新的菜单和菜单项。 菜单描述 菜单名描述FileFile 菜单运行你打开文件&#xff0c;…

同余方程 乘法逆元 扩展欧几里得算法 5.26

同余方程 乘法逆元 扩展欧几里得算法 526 同余方程 乘法逆元 扩展欧几里得算法_哔哩哔哩_bilibili 给定整数a,b,m&#xff0c;求解同余方程axb(mod m). 如果x存在整数解&#xff0c;则输出任意一个&#xff1b; 如果不存在&#xff0c;则输出none 例&#xff1a; 8x4(mod…

动态线程池 dynamic-tp 源码

目录 1. 介绍 2. Spring 环境整合配置源码 2.1 DtpBeanDefinitionRegistrar 2.2 DtpPostProcessorRegistrar 2.3 ApplicationContextHolder 2.4 DtpBaseBeanConfiguration 2. 动态线程池 DtpLifecycle 生命周期源码 3. 动态线程池 DtpRegistry 注册源码 4. 动态线程池…