• C#编写一个较完整的记事本程序


     

    开发环境

    Visual Studio 2019

    • 至少需安装 .NET桌面开发

    在这里插入图片描述

    创建项目并配置

    创建窗体文件

    在这里插入图片描述

    配置项目名称及框架

    在这里插入图片描述

    设计界面

    创建窗体文件,将控件摆放位置如下,参考系统自带的记事本程序
    窗体控件分布

    窗体添加的控件和组件如下

    • 控件及组件在工具箱查找

    窗体所需添加的控件和组件

    窗体属性

    窗体属性

    快捷键设置

    • 杂项 --> ShortcutKeys

    在这里插入图片描述

    程序属性

    项目属性如下图,在创建项目时就已定好了框架,如果在另一台主机上的框架版本比目前项目框架版本低的话,则运行不起来

    • 文章末尾有整个程序的压缩包链接可下载,如需直接运行则需下载对应的.NET Framework 4.7.2框架

    项目属性

    程序图标可在此设置,生成程序后的图标如下图,此文件夹下的程序文件可在第二台主机上直接运行(项目inDebug目录下就是生成程序文件的存放位置,双击程序文件即可运行)

    项目生成文件的路径

    代码演示

    代码开头的using部分

    • 注释部分需自行添加
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.IO;//提供了关于文件、数据流的读取和写入操作
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using System.Diagnostics;//提供了用于与事件日志、性能计数器和系统进程进行交互的类

    主要功能

    1.新建文件:

        private void 新建NToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (txtBox.Modified == true)
            {
                DialogResult dr = MessageBox.Show("文件发生变化,是否更改保存?", "注意", MessageBoxButtons.YesNoCancel);
                if (dr == DialogResult.Yes)
                {
                    保存SToolStripMenuItem_Click(sender, e);
                    return;
                }
                else if (dr == DialogResult.Cancel)
                {
                    return;
                }
                txtBox.Clear();
                this.Text = "NewNotepad";
            }
            else
            {
                txtBox.Clear();
                this.Text = "NewNotepad";
            }
        }
    新建文件

    2.打开:

        private void 打开ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
                filename = openFileDialog.FileName;
                OpenFile();
            }
        }
        protected void OpenFile()
        {
            try
            {
                txtBox.Clear();
                txtBox.Text = File.ReadAllText(filename);
            }
            catch
            { MessageBox.Show("Error!"); }
        }
    打开

    3.保存:

        private void 保存SToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                StreamWriter sw = File.AppendText(Application.ExecutablePath);
                sw.Write(txtBox.Text);
                sw.Dispose();
            }
            catch
            {
                SaveFileDialog sf = new SaveFileDialog();
                sf.DefaultExt = "*.txt";
                sf.Filter = "文本文档(.txt)|*.txt";
                if (sf.ShowDialog() == DialogResult.OK)
                {
                    StreamWriter sw = File.AppendText(sf.FileName);
                    sw.Write(txtBox.Text);
                    sw.Dispose();
                }
            }
        }
    保存

    4.另存为:

        private void 另存为ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            string name;
            //SaveFileDialog类
            SaveFileDialog save = new SaveFileDialog();
            //过滤器
            save.Filter = "*.txt|*.TXT|(*.*)|*.*";
            //显示
            if (save.ShowDialog() == DialogResult.OK)
            {
                name = save.FileName;
                FileInfo info = new FileInfo(name);
                //info.Delete();
                StreamWriter writer = info.CreateText();
                writer.Write(txtBox.Text);
                writer.Close();
            }
        }
    另存为

    5.打印:

        private void 打印PToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //显示允许用户选择打印机的选项及其它打印选项的对话框
            this.printDialog.Document = this.printDocument;
            this.printDialog.PrinterSettings = this.pageSetupDialog.PrinterSettings;
            //向打印机发送打印指令
            if (this.printDialog.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    this.printDocument.Print();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "错误信息!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }
    打印

    6.编辑:

    • 根据输入是否输入内容控制是否启用功能
        private void 编辑ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            剪切ToolStripMenuItem.Enabled = txtBox.Modified;
            if (txtBox.SelectedText == "")
            {
                剪切ToolStripMenuItem.Enabled = false;
                复制ToolStripMenuItem.Enabled = false;
                删除ToolStripMenuItem.Enabled = false;
            }
            else
            {
                剪切ToolStripMenuItem.Enabled = true;
                复制ToolStripMenuItem.Enabled = true;
                删除ToolStripMenuItem.Enabled = true;
            }
            if (txtBox.Text == "")
            {
                查找ToolStripMenuItem.Enabled = false;
                查找下一个ToolStripMenuItem.Enabled = false;
                查找上一个ToolStripMenuItem.Enabled = false;
                替换ToolStripMenuItem.Enabled = false;
            }
            else
            {
                查找ToolStripMenuItem.Enabled = true;
                查找下一个ToolStripMenuItem.Enabled = true;
                查找上一个ToolStripMenuItem.Enabled = true;
                替换ToolStripMenuItem.Enabled = true;
            }
            if (Clipboard.GetText() == "")
                粘贴ToolStripMenuItem.Enabled = false;
            else
                粘贴ToolStripMenuItem.Enabled = true;
        }
    编辑

    7.查找:

    • 查找功能不够完善,混用查找上一项和查找下一项效果不理想
        TextBox txtInput = new TextBox()
        {
            Font = new Font("宋体", 10)
        };
        TextBox txtInputReplace = new TextBox()
        {
            Font = new Font("宋体", 10)
        };
        Label lblSearch = new Label
        {
            Text = "查找内容:",
            Size = new Size(65, 25),
            Location = new Point(5, 22)
        };
        Label lblDirection = new Label
        {
            Text = "查找方向:",
            Size = new Size(65, 25),
            Location = new Point(5, 58)
        };
        Button FindNext = new Button
        {
            Name = "btnFindNext",
            Text = "查找下一项",
            Size = new Size(80, 25),
            Location = new Point(265, 15)
        };
        Button Cancel = new Button
        {
            Name = "btnCancel",
            Text = "取消",
            Size = new Size(80, 25),
            Location = new Point(265, 50)
        };
        RadioButton down = new RadioButton
        {
            Name = "radDown",
            Text = "向下",
            Size = new Size(55, 25),
            Location = new Point(70, 53),
            Checked = true
        };
        RadioButton upward = new RadioButton
        {
            Name = "radUpward",
            Text = "向上",
            Size = new Size(55, 25),
            Location = new Point(140, 53),
            Checked = false
        };
        new Form FindForm = new Form
        {
            Text = "查找文本",
            FormBorderStyle = FormBorderStyle.FixedSingle,
            MaximizeBox = false,
            MinimizeBox = false
        };
        private void 查找ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //显示查找对话框
            txtInput.Size = new Size(190, 33);
            txtInput.Location = new Point(70, 15);
            txtInput.Multiline = true;
    
            FindNext.Click += new EventHandler(Direction_Click);
            //FindNext.Click += new EventHandler(Visible_Click);
    
            Cancel.Click += new EventHandler(Cancel_Click);
    
            FindForm.Controls.Add(lblSearch);
            FindForm.Controls.Add(lblDirection);
            FindForm.Controls.Add(txtInput);
            FindForm.Controls.Add(down);
            FindForm.Controls.Add(upward);
            FindForm.Controls.Add(FindNext);
            FindForm.Controls.Add(Cancel);
            FindForm.Top = this.Top + 50;
            FindForm.Left = this.Left + 50;
            FindForm.Height = 120;
            FindForm.Width = 380;
            FindForm.StartPosition = FormStartPosition.CenterParent;
            FindForm.ShowDialog();
        }
        private void Cancel_Click(object sender, EventArgs e)
        {
            //关闭对话框
            FindForm.Close();
            ReplaceForm.Close();
        }
        private void Direction_Click(object sender, EventArgs e)
        {
            //选择字符查找方向
            if (down.Checked == true)
            {
                Find_Click(sender, e);
            }
            else if (upward.Checked == true)
            {
                FindLast_Click(sender, e);
            }
        }
                int nextPosition, firstPosition;
        string word;
        Boolean IF = false;
        private void Find_Click(object sender, EventArgs e)
        {
            txtBox.Focus();
            FindWords(txtInput.Text);
        }
        private void FindWords(string words)
        {
            //向下查找字符
            if (nextPosition >= txtBox.Text.Length)
                nextPosition = 0;
            firstPosition = txtBox.Text.IndexOf(words, nextPosition);
            if (firstPosition == -1)
                nextPosition = 0;
            else
            {
                txtBox.Select(firstPosition, words.Length);
                nextPosition = firstPosition + 1;
            }
            word = words;
            IF = true;
        }
    查找

    在这里插入图片描述

    8. 查找下一项 :

        private void 查找下一个ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //查找下一项,如果未查找过,则显示查找对话框
            down.Checked = true;
            upward.Checked = false;
            try
            {
                FindWords(word);
            }
            catch
            {
                查找ToolStripMenuItem_Click(sender, e);
            }
        }
    查找下一项

    9.查找上一项:

        private void FindWordsLast(string words)
        {
            //向上查找字符
            if (IF == false)
                nextPosition = txtBox.Text.Length;
            if (nextPosition < 0)
                nextPosition = txtBox.Text.Length;
    
            firstPosition = txtBox.Text.LastIndexOf(words, nextPosition);
    
            if (firstPosition == -1)
                nextPosition = txtBox.Text.Length;
            else
            {
                txtBox.Select(firstPosition, words.Length);
                nextPosition = firstPosition - 1;
            }
            word = words;
            IF = true;
        }
        private void 查找上一个ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //查找上一项,如果未查找过,则显示查找对话框
            upward.Checked = true;
            down.Checked = false;
            try
            {
                FindWordsLast(word);
            }
            catch
            {
                查找ToolStripMenuItem_Click(sender, e);
            }
        }
    查找上一项

    10.替换:

        Label LblReplace = new Label
        {
            Name = "lblReplace",
            Text = "替换:",
            Size = new Size(55, 25),
            Location = new Point(15, 50)
        };
        Form ReplaceForm = new Form
        {
            Text = "替换文本",
            FormBorderStyle = FormBorderStyle.FixedSingle,
            MaximizeBox = false,
            MinimizeBox = false
        };
        private void 替换ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            txtInput.Size = new Size(190, 30);
            txtInput.Location = new Point(70, 12);
            txtInput.Multiline = true;
    
            txtInputReplace.Size = new Size(190, 30);
            txtInputReplace.Location = new Point(70, 47);
            txtInputReplace.Multiline = true;
    
            Button Replace = new Button
            {
                Name = "btnReplace",
                Text = "替换",
                Size = new Size(80, 25),
                Location = new Point(265, 15)
            };
            Replace.Click += new EventHandler(Replace_Click);
            Cancel.Click += new EventHandler(Cancel_Click);
    
            ReplaceForm.Controls.Add(lblSearch);
            ReplaceForm.Controls.Add(LblReplace);
            ReplaceForm.Controls.Add(txtInput);
            ReplaceForm.Controls.Add(txtInputReplace);
            ReplaceForm.Controls.Add(Replace);
            ReplaceForm.Controls.Add(Cancel);
            ReplaceForm.Top = this.Top + 50;
            ReplaceForm.Left = this.Left + 50;
            ReplaceForm.Height = 140;
            ReplaceForm.Width = 380;
            ReplaceForm.StartPosition = FormStartPosition.CenterParent;
            ReplaceForm.ShowDialog();
        }
        private void Replace_Click(object sender, EventArgs e)
        {
            txtBox.Text = txtBox.Text.Replace(txtInput.Text, txtInputReplace.Text);
        }
    替换

    在这里插入图片描述

    11. 字体选择:

    • 直接调用控件即可
        private void 字体ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //提示用户从本地计算机安装的字体中选择字体字号
            FontDialog fontDialog = new FontDialog();
            if (fontDialog.ShowDialog() == DialogResult.OK)
            {
                txtBox.Font = fontDialog.Font;
            }
        }
    字体选择

    在这里插入图片描述

    12. 关于记事本:

    • 新建一个窗口,根据自己的喜好添加标签及摆放位置
        private void 关于记事本ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //关于记事本说明
            Label lblTitle = new Label()
            {
                Text = "多功能记事本",
                Size = new Size(150, 25),
                Location = new Point(100, 50)
            };
            Label lblEdition = new Label()
            {
                Text = "版本号:个性测试版",
                Size = new Size(150, 25),
                Location = new Point(85, 100)
            };
            Label lblMail = new Label()
            {
                Text = "E-Mail:",
                Size = new Size(55, 25),
                Location = new Point(30, 180)
            };
            LinkLabel llblMail = new LinkLabel()
            {
                Text = "2417525822@qq.com",
                Size = new Size(110, 25),
                Location = new Point(85, 180)
            };
            Label lblCNDS = new Label()
            {
                Text = "CNDS博客:",
                Size = new Size(65, 25),
                Location = new Point(20, 220)
            };
            LinkLabel llblCNDS = new LinkLabel()
            {
                Text = "https://blog.csdn.net/UFO_Harold",
                Size = new Size(200, 25),
                Location = new Point(85, 220)
            };
            Form about = new Form
            {
                Text = "关于记事本",
                FormBorderStyle = FormBorderStyle.FixedSingle,
                MaximizeBox = false
            };
    
            llblCNDS.Click += new EventHandler(LlblCNDS_Click);
            about.Controls.Add(lblTitle);
            about.Controls.Add(lblEdition);
            about.Controls.Add(lblMail);
            about.Controls.Add(llblMail);
            about.Controls.Add(lblCNDS);
            about.Controls.Add(llblCNDS);
            about.Top = this.Top + this.Height / 2 - about.Height / 2;
            about.Left = this.Left + this.Width / 2 - about.Width / 2;
            about.StartPosition = FormStartPosition.CenterParent;
            about.ShowDialog();
        }
    关于记事本
    • 效果如图

    程序的关于记事本功能展示

    完整代码

    namespace Notepad
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            string filename = "";
            public Form1(string filename)
            {
                InitializeComponent();
                if (filename != null)
                {
                    this.filename = filename;
                    OpenFile();
                }
            }
            private void 新建NToolStripMenuItem_Click(object sender, EventArgs e)
            {
                if (txtBox.Modified == true)
                {
                    DialogResult dr = MessageBox.Show("文件发生变化,是否更改保存?", "注意", MessageBoxButtons.YesNoCancel);
                    if (dr == DialogResult.Yes)
                    {
                        保存SToolStripMenuItem_Click(sender, e);
                        return;
                    }
                    else if (dr == DialogResult.Cancel)
                    {
                        return;
                    }
                    txtBox.Clear();
                    this.Text = "NewNotepad";
                }
                else
                {
                    txtBox.Clear();
                    this.Text = "NewNotepad";
                }
            }
            private void 打开ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                if (openFileDialog.ShowDialog() == DialogResult.OK)
                {
                    filename = openFileDialog.FileName;
                    OpenFile();
                }
            }
            protected void OpenFile()
            {
                try
                {
                    txtBox.Clear();
                    txtBox.Text = File.ReadAllText(filename);
                }
                catch
                { MessageBox.Show("Error!"); }
            }
            private void 保存SToolStripMenuItem_Click(object sender, EventArgs e)
            {
                try
                {
                    StreamWriter sw = File.AppendText(Application.ExecutablePath);
                    sw.Write(txtBox.Text);
                    sw.Dispose();
                }
                catch
                {
                    SaveFileDialog sf = new SaveFileDialog();
                    sf.DefaultExt = "*.txt";
                    sf.Filter = "文本文档(.txt)|*.txt";
                    if (sf.ShowDialog() == DialogResult.OK)
                    {
                        StreamWriter sw = File.AppendText(sf.FileName);
                        sw.Write(txtBox.Text);
                        sw.Dispose();
                    }
                }
            }
            private void 另存为ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                string name;
                //SaveFileDialog类
                SaveFileDialog save = new SaveFileDialog();
                //过滤器
                save.Filter = "*.txt|*.TXT|(*.*)|*.*";
                //显示
                if (save.ShowDialog() == DialogResult.OK)
                {
                    name = save.FileName;
                    FileInfo info = new FileInfo(name);
                    //info.Delete();
                    StreamWriter writer = info.CreateText();
                    writer.Write(txtBox.Text);
                    writer.Close();
                }
            }
            private void 页面设置ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                //弹出页面设置界面
                pageSetupDialog.Document = printDocument;
                pageSetupDialog.ShowDialog();
            }
            private void 打印PToolStripMenuItem_Click(object sender, EventArgs e)
            {
                //显示允许用户选择打印机的选项及其它打印选项的对话框
                this.printDialog.Document = this.printDocument;
                this.printDialog.PrinterSettings = this.pageSetupDialog.PrinterSettings;
                //向打印机发送打印指令
                if (this.printDialog.ShowDialog() == DialogResult.OK)
                {
                    try
                    {
                        this.printDocument.Print();
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message, "错误信息!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
            }
            private void 退出XToolStripMenuItem_Click(object sender, EventArgs e)
            {
                Application.Exit();
            }
            private void 编辑ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                剪切ToolStripMenuItem.Enabled = txtBox.Modified;
                if (txtBox.SelectedText == "")
                {
                    剪切ToolStripMenuItem.Enabled = false;
                    复制ToolStripMenuItem.Enabled = false;
                    删除ToolStripMenuItem.Enabled = false;
                }
                else
                {
                    剪切ToolStripMenuItem.Enabled = true;
                    复制ToolStripMenuItem.Enabled = true;
                    删除ToolStripMenuItem.Enabled = true;
                }
                if (txtBox.Text == "")
                {
                    查找ToolStripMenuItem.Enabled = false;
                    查找下一个ToolStripMenuItem.Enabled = false;
                    查找上一个ToolStripMenuItem.Enabled = false;
                    替换ToolStripMenuItem.Enabled = false;
                }
                else
                {
                    查找ToolStripMenuItem.Enabled = true;
                    查找下一个ToolStripMenuItem.Enabled = true;
                    查找上一个ToolStripMenuItem.Enabled = true;
                    替换ToolStripMenuItem.Enabled = true;
                }
                if (Clipboard.GetText() == "")
                    粘贴ToolStripMenuItem.Enabled = false;
                else
                    粘贴ToolStripMenuItem.Enabled = true;
            }
            private void 撤销ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                if (txtBox.CanUndo)
                {
                    txtBox.Undo();
                    txtBox.ClearUndo();
                }
            }
            private void 剪切ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                txtBox.Cut();
            }
            private void 复制CToolStripMenuItem_Click(object sender, EventArgs e)
            {
                txtBox.Copy();
            }
            private void 粘贴PToolStripMenuItem_Click(object sender, EventArgs e)
            {
                txtBox.Paste();
            }
            private void 删除lToolStripMenuItem_Click(object sender, EventArgs e)
            {
                txtBox.SelectedText = string.Empty;
            }
            TextBox txtInput = new TextBox()
            {
                Font = new Font("宋体", 10)
            };
            TextBox txtInputReplace = new TextBox()
            {
                Font = new Font("宋体", 10)
            };
            Label lblSearch = new Label
            {
                Text = "查找内容:",
                Size = new Size(65, 25),
                Location = new Point(5, 22)
            };
            Label lblDirection = new Label
            {
                Text = "查找方向:",
                Size = new Size(65, 25),
                Location = new Point(5, 58)
            };
            Button FindNext = new Button
            {
                Name = "btnFindNext",
                Text = "查找下一项",
                Size = new Size(80, 25),
                Location = new Point(265, 15)
            };
            Button Cancel = new Button
            {
                Name = "btnCancel",
                Text = "取消",
                Size = new Size(80, 25),
                Location = new Point(265, 50)
            };
            RadioButton down = new RadioButton
            {
                Name = "radDown",
                Text = "向下",
                Size = new Size(55, 25),
                Location = new Point(70, 53),
                Checked = true
            };
            RadioButton upward = new RadioButton
            {
                Name = "radUpward",
                Text = "向上",
                Size = new Size(55, 25),
                Location = new Point(140, 53),
                Checked = false
            };
            new Form FindForm = new Form
            {
                Text = "查找文本",
                FormBorderStyle = FormBorderStyle.FixedSingle,
                MaximizeBox = false,
                MinimizeBox = false
            };
            private void 查找ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                //显示查找对话框
                txtInput.Size = new Size(190, 33);
                txtInput.Location = new Point(70, 15);
                txtInput.Multiline = true;
    
                FindNext.Click += new EventHandler(Direction_Click);
                //FindNext.Click += new EventHandler(Visible_Click);
    
                Cancel.Click += new EventHandler(Cancel_Click);
    
                FindForm.Controls.Add(lblSearch);
                FindForm.Controls.Add(lblDirection);
                FindForm.Controls.Add(txtInput);
                FindForm.Controls.Add(down);
                FindForm.Controls.Add(upward);
                FindForm.Controls.Add(FindNext);
                FindForm.Controls.Add(Cancel);
                FindForm.Top = this.Top + 50;
                FindForm.Left = this.Left + 50;
                FindForm.Height = 120;
                FindForm.Width = 380;
                FindForm.StartPosition = FormStartPosition.CenterParent;
                FindForm.ShowDialog();
            }
            private void Visible_Click(object sender, EventArgs e)
            {
                FindForm.Visible = false;
            }
            private void Cancel_Click(object sender, EventArgs e)
            {
                //关闭对话框
                FindForm.Close();
                ReplaceForm.Close();
            }
            private void Direction_Click(object sender, EventArgs e)
            {
                //选择字符查找方向
                if (down.Checked == true)
                {
                    Find_Click(sender, e);
                }
                else if (upward.Checked == true)
                {
                    FindLast_Click(sender, e);
                }
            }
            int nextPosition, firstPosition;
            string word;
            Boolean IF = false;
            private void Find_Click(object sender, EventArgs e)
            {
                txtBox.Focus();
                FindWords(txtInput.Text);
            }
            private void FindWords(string words)
            {
                //向下查找字符
                if (nextPosition >= txtBox.Text.Length)
                    nextPosition = 0;
                firstPosition = txtBox.Text.IndexOf(words, nextPosition);
                if (firstPosition == -1)
                    nextPosition = 0;
                else
                {
                    txtBox.Select(firstPosition, words.Length);
                    nextPosition = firstPosition + 1;
                }
                word = words;
                IF = true;
            }
            private void 查找下一个ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                //查找下一项,如果未查找过,则显示查找对话框
                down.Checked = true;
                upward.Checked = false;
                try
                {
                    FindWords(word);
                }
                catch
                {
                    查找ToolStripMenuItem_Click(sender, e);
                }
            }
            private void FindLast_Click(object sender, EventArgs e)
            {
                txtBox.Focus();
                FindWordsLast(txtInput.Text);
            }
            private void FindWordsLast(string words)
            {
                //向上查找字符
                if (IF == false)
                    nextPosition = txtBox.Text.Length;
                if (nextPosition < 0)
                    nextPosition = txtBox.Text.Length;
    
                firstPosition = txtBox.Text.LastIndexOf(words, nextPosition);
    
                if (firstPosition == -1)
                    nextPosition = txtBox.Text.Length;
                else
                {
                    txtBox.Select(firstPosition, words.Length);
                    nextPosition = firstPosition - 1;
                }
                word = words;
                IF = true;
            }
            private void 查找上一个ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                //查找上一项,如果未查找过,则显示查找对话框
                upward.Checked = true;
                down.Checked = false;
                try
                {
                    FindWordsLast(word);
                }
                catch
                {
                    查找ToolStripMenuItem_Click(sender, e);
                }
            }
            Label LblReplace = new Label
            {
                Name = "lblReplace",
                Text = "替换:",
                Size = new Size(55, 25),
                Location = new Point(15, 50)
            };
            Form ReplaceForm = new Form
            {
                Text = "替换文本",
                FormBorderStyle = FormBorderStyle.FixedSingle,
                MaximizeBox = false,
                MinimizeBox = false
            };
            private void 替换ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                txtInput.Size = new Size(190, 30);
                txtInput.Location = new Point(70, 12);
                txtInput.Multiline = true;
    
                txtInputReplace.Size = new Size(190, 30);
                txtInputReplace.Location = new Point(70, 47);
                txtInputReplace.Multiline = true;
    
                Button Replace = new Button
                {
                    Name = "btnReplace",
                    Text = "替换",
                    Size = new Size(80, 25),
                    Location = new Point(265, 15)
                };
                Replace.Click += new EventHandler(Replace_Click);
                Cancel.Click += new EventHandler(Cancel_Click);
    
                ReplaceForm.Controls.Add(lblSearch);
                ReplaceForm.Controls.Add(LblReplace);
                ReplaceForm.Controls.Add(txtInput);
                ReplaceForm.Controls.Add(txtInputReplace);
                ReplaceForm.Controls.Add(Replace);
                ReplaceForm.Controls.Add(Cancel);
                ReplaceForm.Top = this.Top + 50;
                ReplaceForm.Left = this.Left + 50;
                ReplaceForm.Height = 140;
                ReplaceForm.Width = 380;
                ReplaceForm.StartPosition = FormStartPosition.CenterParent;
                ReplaceForm.ShowDialog();
            }
            private void Replace_Click(object sender, EventArgs e)
            {
                txtBox.Text = txtBox.Text.Replace(txtInput.Text, txtInputReplace.Text);
            }
            private void 全选AToolStripMenuItem_Click(object sender, EventArgs e)
            {
                txtBox.SelectAll();
            }
            private void 自动换行ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                //默认自动换行,点击按钮打开或关闭自动换行
                if (自动换行ToolStripMenuItem.Checked == true)
                {
                    txtBox.WordWrap = false;
                    自动换行ToolStripMenuItem.Checked = false;
                }
                else
                {
                    txtBox.WordWrap = true;
                    自动换行ToolStripMenuItem.Checked = true;
                }
            }
            private void 字体ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                //提示用户从本地计算机安装的字体中选择字体字号
                FontDialog fontDialog = new FontDialog();
                if (fontDialog.ShowDialog() == DialogResult.OK)
                {
                    txtBox.Font = fontDialog.Font;
                }
            }
            private void Form1_SizeChanged(object sender, EventArgs e)
            {
                //窗体的txtBox控件随窗体改变而改变的大小
                if (状态栏ToolStripMenuItem.Checked == true && 工具栏TToolStripMenuItem.Checked == true)
                    txtBox.Height = this.Height - menuStrip.Height - toolStrip.Height - statusStrip.Height - 39;
                else if (状态栏ToolStripMenuItem.Checked == false && 工具栏TToolStripMenuItem.Checked == true)
                    txtBox.Height = this.Height - menuStrip.Height - toolStrip.Height - 39;
                else if (状态栏ToolStripMenuItem.Checked == true && 工具栏TToolStripMenuItem.Checked == false)
                    txtBox.Height = this.Height - menuStrip.Height - statusStrip.Height - 39;
                else
                    txtBox.Height = this.Height - menuStrip.Height - 39;
                txtBox.Width = this.Width - 16;
            }
            private void 工具栏TToolStripMenuItem_Click(object sender, EventArgs e)
            {
                //默认打开工具栏,点击按钮打开或关闭工具栏
                if (工具栏TToolStripMenuItem.Checked == true)
                {
                    toolStrip.Visible = false;
                    工具栏TToolStripMenuItem.Checked = false;
                    txtBox.Top = 25;
                }
                else if (工具栏TToolStripMenuItem.Checked == false)
                {
                    toolStrip.Visible = true;
                    工具栏TToolStripMenuItem.Checked = true;
                    txtBox.Top = 50;
                }
                Form1_SizeChanged(sender, e);
            }
            private void 放大ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                //放大字体大小
                var fontsize = txtBox.Font.Size;
                var fontFamily = txtBox.Font.FontFamily;
                txtBox.Font = new Font(fontFamily, fontsize + 1);
            }
            private void 缩小ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                //缩小字体大小
                var fontsize = txtBox.Font.Size;
                var fontFamily = txtBox.Font.FontFamily;
                txtBox.Font = new Font(fontFamily, fontsize - 1);
            }
            private void 恢复默认缩放ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                //恢复默认字体大小
                txtBox.Font = new Font(txtBox.Font.FontFamily, 11);
            }
            private void 状态栏ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                //默认显示状态栏,点击按钮显示或关闭状态栏
                if (状态栏ToolStripMenuItem.Checked == true)
                {
                    statusStrip.Visible = false;
                    状态栏ToolStripMenuItem.Checked = false;
                }
                else if (状态栏ToolStripMenuItem.Checked == false)
                {
                    statusStrip.Visible = true;
                    状态栏ToolStripMenuItem.Checked = true;
                }
                Form1_SizeChanged(sender, e);
            }
            //private int GetStringLen(string s)
            //{
            //    if (!string.IsNullOrEmpty(s))
            //    {
            //        int len = s.Length;
            //        for (int i = 0; i < s.Length; i++)
            //        {
            //            if (s[i] > 255)
            //                len++;
            //        }
            //        return len;
            //    }
            //    return 0;
            //}
            private void 查看帮助HToolStripMenuItem_Click(object sender, EventArgs e)
            {
                //调用系统自带的浏览器打开网页查看帮助
                Process.Start("https://jingyan.baidu.com/article/a24b33cdd86a0f19fe002be9.html");
            }
            private void 关于记事本ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                //关于记事本说明
                Label lblTitle = new Label()
                {
                    Text = "多功能记事本",
                    Size = new Size(150, 25),
                    Location = new Point(100, 50)
                };
                Label lblEdition = new Label()
                {
                    Text = "版本号:个性测试版",
                    Size = new Size(150, 25),
                    Location = new Point(85, 100)
                };
                Label lblMail = new Label()
                {
                    Text = "E-Mail:",
                    Size = new Size(55, 25),
                    Location = new Point(30, 180)
                };
                LinkLabel llblMail = new LinkLabel()
                {
                    Text = "2417525822@qq.com",
                    Size = new Size(110, 25),
                    Location = new Point(85, 180)
                };
                Label lblCNDS = new Label()
                {
                    Text = "CNDS博客:",
                    Size = new Size(65, 25),
                    Location = new Point(20, 220)
                };
                LinkLabel llblCNDS = new LinkLabel()
                {
                    Text = "https://blog.csdn.net/UFO_Harold",
                    Size = new Size(200, 25),
                    Location = new Point(85, 220)
                };
                Form about = new Form
                {
                    Text = "关于记事本",
                    FormBorderStyle = FormBorderStyle.FixedSingle,
                    MaximizeBox = false
                };
    
                llblCNDS.Click += new EventHandler(LlblCNDS_Click);
                about.Controls.Add(lblTitle);
                about.Controls.Add(lblEdition);
                about.Controls.Add(lblMail);
                about.Controls.Add(llblMail);
                about.Controls.Add(lblCNDS);
                about.Controls.Add(llblCNDS);
                about.Top = this.Top + this.Height / 2 - about.Height / 2;
                about.Left = this.Left + this.Width / 2 - about.Width / 2;
                about.StartPosition = FormStartPosition.CenterParent;
                about.ShowDialog();
            }
            private void LlblCNDS_Click(object sender, EventArgs e)
            {
                Process.Start("https://blog.csdn.net/UFO_Harold");
            }
            private void 新建toolStripButton_Click(object sender, EventArgs e)
            {
                新建NToolStripMenuItem_Click(this, e);
            }
            private void 另存为toolStripButton_Click(object sender, EventArgs e)
            {
                另存为ToolStripMenuItem_Click(this, e);
            }
            private void 保存StoolStripButton_Click(object sender, EventArgs e)
            {
                保存SToolStripMenuItem_Click(this, e);
            }
            private void 打印PtoolStripButton_Click(object sender, EventArgs e)
            {
                打印PToolStripMenuItem_Click(this, e);
            }
            private void 剪切toolStripButton_Click(object sender, EventArgs e)
            {
                剪切ToolStripMenuItem_Click(this, e);
            }
            private void 复制CtoolStripButton_Click(object sender, EventArgs e)
            {
                复制CToolStripMenuItem_Click(this, e);
            }
            private void 粘贴PtoolStripButton_Click(object sender, EventArgs e)
            {
                粘贴PToolStripMenuItem_Click(this, e);
            }
            private void 帮助HtoolStripButton_Click(object sender, EventArgs e)
            {
                查看帮助HToolStripMenuItem_Click(this, e);
            }
            private void Timer_Tick(object sender, EventArgs e)
            {
                //显示编辑光标所在几行几列
                int row = txtBox.GetLineFromCharIndex(txtBox.SelectionStart) + 1;
                int col = (txtBox.SelectionStart - txtBox.GetFirstCharIndexFromLine(txtBox.GetLineFromCharIndex(txtBox.SelectionStart))) + 1;
                toolStripStatusLblLocation.Text = "第 " + row + " 行, 第 " + col + " 列";
                toolStripStatusLblNow.Text = "" + DateTime.Now.ToLocalTime();
            }
            private void Form1_FormClosing(object sender, FormClosingEventArgs e)
            {
                //关闭窗体时如果已修改内容,则弹出是否保存对话框,否则直接关闭窗体
                if (txtBox.Modified == true)
                {
                    DialogResult dr = MessageBox.Show("文件发生变化,是否更改保存?", "注意", MessageBoxButtons.YesNoCancel);
                    if (dr == DialogResult.Yes)
                    {
                        保存SToolStripMenuItem_Click(sender, e);
                        return;
                    }
                    else if (dr == DialogResult.No)
                    {
                        return;
                    }
                    else if (dr == DialogResult.Cancel)
                    {
                        e.Cancel = true;
                    }
                }
            }
        }
    }

    运行结果

    win10环境下运行程序的结果

    注:

    1. 控件请自行改名,也可使用默认控件名,此次程序的控件均已自定义名称,然后再双击控件便会自动创建控件的事件函数并跳到代码页,全数copy代码到自己新建的程序可能运行不起来,因为控件的事件需要双击控件才跳转到事件函数,事件方法前出现引用不是为 0 即生效;
    2. 查找上一项下一项功能混用时会有一些bug,达不到预期效果,但能运行,不会报错,一点逻辑上的问题,目前没有想到解决方法,大家可自行深入摸索,如有可以改进的地方可联系博主;
    3. 整个项目源码的文件:(源码仅供学习交流使用,如需使用请安装.NET Framework 4.7.2框架,且图标可能因文件路径不同而无法显示,修改文件路径即可)

    该文是从CSND搬家过来的文章,已修正,觉得CSND不好用,搬至博客园在此安家,总的来说,在博客园的体验感比在CSDN好很多,往后请各位博友多多指教!我的博客园地址:https://www.cnblogs.com/Harold-popo

    • 状态栏图标设置

    在这里插入图片描述

    • 项目文件目录

    在这里插入图片描述

     

  • 相关阅读:
    PHP+JQUEY+AJAX实现分页
    Flume知识扩展
    Flume高级之自定义MySQLSource
    Flume监控之Ganglia
    Flume 概述/企业案例
    Yarn (转自之乎者也)
    MapReduce如何解决数据倾斜?
    JVM调优
    Hive性能优化
    HBase的二级索引
  • 原文地址:https://www.cnblogs.com/Harold-popo/p/12436682.html
Copyright © 2020-2023  润新知