C#編寫一個較完整的記事本程序


 

開發環境

Visual Studio 2019

  • 至少需安裝 .NET桌面開發

在這里插入圖片描述

創建項目並配置

創建窗體文件

在這里插入圖片描述

配置項目名稱及框架

在這里插入圖片描述

設計界面

創建窗體文件,將控件擺放位置如下,參考系統自帶的記事本程序
窗體控件分布

窗體添加的控件和組件如下

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

窗體所需添加的控件和組件

窗體屬性

窗體屬性

快捷鍵設置

  • 雜項 --> ShortcutKeys

在這里插入圖片描述

程序屬性

項目屬性如下圖,在創建項目時就已定好了框架,如果在另一台主機上的框架版本比目前項目框架版本低的話,則運行不起來

  • 文章末尾有整個程序的壓縮包鏈接可下載,如需直接運行則需下載對應的.NET Framework 4.7.2框架

項目屬性

程序圖標可在此設置,生成程序后的圖標如下圖,此文件夾下的程序文件可在第二台主機上直接運行(項目\bin\Debug目錄下就是生成程序文件的存放位置,雙擊程序文件即可運行)

項目生成文件的路徑

代碼演示

代碼開頭的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

  • 狀態欄圖標設置

在這里插入圖片描述

  • 項目文件目錄

在這里插入圖片描述

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM