用C#语言编写记事本

一、功能说明
实现记事本功能。其具有文件的新建、打开、保存功能;文字的复制、粘贴、删除功能;字体类型、格式的设置功能;查看日期时间等功能,并且用户可以根据需要显示或者隐藏工具栏和状态栏。
效果图:

二、主要步骤与代码
窗体属性:
Name:frmNotepad
Text:记事本
StartPosition:CenterScreen
Size:600, 450
通用段说明:

//*************************************************************************
        /* 布尔变量b用于判断文件是新建的还是从磁盘打开的,
           true表示文件是从磁盘打开的,false表示文件是新建的,默认值为false*/
        bool b = false;
        /* 布尔变量s用于判断文件件是否被保存,
           true表示文件是已经被保存了,false表示文件未被保存,默认值为true*/
        bool s = true;
        //*************************************************************************

界面设计:
1、菜单
单击窗体左边会出现工具箱→ 找到menustrip →拖动到窗体中
单击菜单栏→右下角属性→修改Name属性为“mnusNotepad”
单击mnusNotepad输入(文件(F)、编辑(E)、格式(O)、查看(V)、帮助(H))
单击文件(F)输入(新建(N) Ctrl+N、打开(O) Ctrl+O、保存(S) Ctrl+S、另存为(A)、退出(X))
单击编辑(E)输入(撤销(V) Ctrl+Z、复制© Ctrl+C、剪切(T) Ctrl+X、粘贴§ Ctrl+V、全选(A) Ctrl+A、日期(D) F5)
单击格式(O)输入(自动换行(W)、字体(F))
单击查看(V)输入(工具栏(T)、状态栏(S))
单击帮助(H)输入(关于记事本(A))

属性设置:
Text属性 Name属性 ShortcutKeys属性 ShowShortcutKeys属性
文件(&F) tsmiFile None -
新建(&N) tsmiNew Ctrl+N True
打开(&O) tsmiOpen Ctrl+O True
保存(&S) tsmiSave Ctrl+S True
另存为(&A) tsmiSaveAs None -
分隔符(用“-”来分隔)
退出(&X) tsmiClose None -

Text属性 Name属性 ShortcutKeys属性 ShowShortcutKeys属性
编辑(&E) tsmiEdit None -
撤销(&U) tsmiUndo Ctrl+Z True
分隔符
复制(&C) tsmiCopy Ctrl+C True
剪切(&T) tsmiCut Ctrl+X True
粘贴(&P) tsmiPaste Ctrl+V True
分隔符
全选(&A) tsmiSelectAll Ctrl+A True
日期(&D) tsmiDate F5 True

Text属性 Name属性 Checked属性
格式(&O) tsmiFormat False
自动换行(&W) tsmiAuto True
字体(&F) tsmiFont False

Text属性 Name属性 Checked属性
查看(&V) tsmiView False
工具栏(&T) tsmiToolStrip True
状态栏(&S) tsmiStatusStrip True

Text属性 Name属性
帮助(&H) tsmiHelp
关于记事本(&A) tsmiAbout

private void tsmiNew_Click(object sender, EventArgs e)
        {
            // 判断当前文件是否从磁盘打开,或者新建时文档不为空,并且文件未被保存
            if (b == true || rtxtNotepad.Text.Trim() != "")
            {
                // 若文件未保存
                if (s == false)
                {
                    string result;
                    result = MessageBox.Show("文件尚未保存,是否保存?",
                        "保存文件", MessageBoxButtons.YesNoCancel).ToString();
                    switch (result)
                    {
                        case "Yes":
                            // 若文件是从磁盘打开的
                            if (b == true)
                            {
                                // 按文件打开的路径保存文件
                                rtxtNotepad.SaveFile(odlgNotepad.FileName);
                            }
                            // 若文件不是从磁盘打开的
                            else if (sdlgNotepad.ShowDialog() == DialogResult.OK)
                            {
                                rtxtNotepad.SaveFile(sdlgNotepad.FileName);
                            }
                            s = true;
                            rtxtNotepad.Text = "";
                            break;
                        case "No":
                            b = false;
                            rtxtNotepad.Text = "";
                            break;
                    }
                }
            }
        }

        private void tsmiOpen_Click(object sender, EventArgs e)
        {
            if (b == true || rtxtNotepad.Text.Trim() != "")
            {
                if (s == false)
                {
                    string result;
                    result = MessageBox.Show("文件尚未保存,是否保存?",
                        "保存文件", MessageBoxButtons.YesNoCancel).ToString();
                    switch (result)
                    {
                        case "Yes":
                            if (b == true)
                            {
                                rtxtNotepad.SaveFile(odlgNotepad.FileName);
                            }
                            else if (sdlgNotepad.ShowDialog() == DialogResult.OK)
                            {
                                rtxtNotepad.SaveFile(sdlgNotepad.FileName);
                            }
                            s = true;
                            break;
                        case "No":
                            b = false;
                            rtxtNotepad.Text = "";
                            break;
                    }
                }
            }
            odlgNotepad.RestoreDirectory = true;
            if ((odlgNotepad.ShowDialog() == DialogResult.OK) && odlgNotepad.FileName != "")
            {
                rtxtNotepad.LoadFile(odlgNotepad.FileName);//打开代码语句
                b = true;
            }
            s = true;
        }

        private void tsmiSave_Click(object sender, EventArgs e)
        {
            // 若文件从磁盘打开并且修改了其内容
            if (b == true && rtxtNotepad.Modified == true)
            {
                rtxtNotepad.SaveFile(odlgNotepad.FileName);
                s = true;
            }
            else if (b == false && rtxtNotepad.Text.Trim() != "" &&
                sdlgNotepad.ShowDialog() == DialogResult.OK)
            {
                rtxtNotepad.SaveFile(sdlgNotepad.FileName);//保存语句
                s = true;
                b = true;
                odlgNotepad.FileName = sdlgNotepad.FileName;
            }
        }

        private void tsmiSaveAs_Click(object sender, EventArgs e)
        {
            if (sdlgNotepad.ShowDialog() == DialogResult.OK)
            {
                rtxtNotepad.SaveFile(sdlgNotepad.FileName);
                s = true;
            }
        }

        private void tsmiClose_Click(object sender, EventArgs e)
        {
            Application.Exit();//程序结束
        }

        private void tsmiUndo_Click(object sender, EventArgs e)
        {
            rtxtNotepad.Undo();//撤销
        }

        private void tsmiCopy_Click(object sender, EventArgs e)
        {
            rtxtNotepad.Copy();//复制
        }

        private void tsmiCut_Click(object sender, EventArgs e)
        {
            rtxtNotepad.Cut();//剪切
        }

        private void tsmiPaste_Click(object sender, EventArgs e)
        {
            rtxtNotepad.Paste();//粘贴
        }

        private void tsmiSelectAll_Click(object sender, EventArgs e)
        {
            rtxtNotepad.SelectAll();//全选
        }

        private void tsmiDate_Click(object sender, EventArgs e)
        {
            rtxtNotepad.AppendText(System.DateTime.Now.ToString());//显示当前日期
        }

        private void tsmiAuto_Click(object sender, EventArgs e)
        {
            if (tsmiAuto.Checked == false)
            {
                tsmiAuto.Checked = true;            // 选中该菜单项
                rtxtNotepad.WordWrap = true;        // 设置为自动换行
            }
            else
            {
                tsmiAuto.Checked = false;
                rtxtNotepad.WordWrap = false;
            }
        }

        private void tsmiFont_Click(object sender, EventArgs e)
        {
            fdlgNotepad.ShowColor = true;
            if (fdlgNotepad.ShowDialog() == DialogResult.OK)
            {
                rtxtNotepad.SelectionColor = fdlgNotepad.Color;
                rtxtNotepad.SelectionFont = fdlgNotepad.Font;
            }
        }

        private void tsmiToolStrip_Click(object sender, EventArgs e)
        {
            Point point;
            if (tsmiToolStrip.Checked == true)
            {
                // 隐藏工具栏时,把坐标设为(0,24),因为菜单的高度为24
                point = new Point(0, 24);
                tsmiToolStrip.Checked = false;
                tlsNotepad.Visible = false;
                // 设置多格式文本框左上角位置
                rtxtNotepad.Location = point;
                // 隐藏工具栏后,增加文本框高度
                rtxtNotepad.Height += tlsNotepad.Height;
            }
            else
            {
                /* 显示工具栏时,多格式文本框左上角位置的位置为(0,78),
                   因为工具栏的高度,加上菜单的高度后为78 */
                point = new Point(0, 78);
                tsmiToolStrip.Checked = true;
                tlsNotepad.Visible = true;
                rtxtNotepad.Location = point;
                rtxtNotepad.Height -= tlsNotepad.Height;
            }
        }

        private void tsmiAbout_Click(object sender, EventArgs e)
        {
            frmAbout ob_FrmAbout = new frmAbout();
            ob_FrmAbout.Show();
        }

2、工具栏
单击窗体左边会出现工具箱→ 找到“ToolStrip” →拖动到窗体中
单击工具栏→右下角属性→修改Name属性为“tlsNotepad”
右击工具栏→ 插入标准项
右击工具栏→ 编辑项,可以看到按钮成员,在这里可以删除或者增加,我只设置几个简单的功能(新建,打开,保存,剪切,粘贴,复制)

private void tlsNotepad_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
            int n;
            // 变量n用来接收按下按钮的索引号从0开始
            n = tlsNotepad.Items.IndexOf(e.ClickedItem);
            switch (n)
            {
                case 0:
                    tsmiNew_Click(sender, e);
                    break;
                case 1:
                    tsmiOpen_Click(sender, e);
                    break;
                case 2:
                    tsmiSave_Click(sender, e);
                    break;
                /*case 3:
                    tsmiCopy_Click(sender, e);
                    break;*/ // 我们不用case3

                case 4:
                    tsmiCut_Click(sender, e);
                    break;
                case 5:
                    tsmiPaste_Click(sender, e);
                    break;
                /*case 6:
                    tsmiPaste_Click(sender, e);
                    break; */ // 我们不用case6
                case 7:
                    tsmiAbout_Click(sender, e);
                    break;
            }
        }

3、文本框
单击窗体左边会出现工具箱→ 找到“RichTextBox” →拖动到窗体中
单击工具栏→右下角属性→修改Name属性为“rtxtNotepad”
Anchor属性选择“Top,Bottom,Left,Right”

private void rtxtNotepad_TextChanged(object sender, EventArgs e)
        {
            // 文本被修改后,设置s为false,表示文件未保存
            s = false;
        }

4、状态栏
添加StatusStrip控件,将其Name属性设为“stsNotepad”,将Dock属性设为“Bottom”再将Anchor属性设为“Bottom,Left,Right”。然后单击Items右边的【…】 按钮,打开【项集合编辑器】对话框,下拉列表中保留默认的选择“StatusLabel”,然后单击【添加】按钮,依次添加2个StatusLabel,并分别命名为“tssLbl1”和“tssLbl2”,再将tssLbl1的Text属性设为“就绪”, tssLbl2的Text属性设为“显示日期、时间”。

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

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

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

8、计时器
从工具箱中找到Timer直接拖入窗体中 单击属性
Timer控件的Name属性设为“tmrNotepad”,Enabled(激活的可行的)属性设为“True”,Interval(间隔,间距,幕间时间)属性设为“1000”,表示1秒种触发一次Tick事件,即1秒钟改变一次时钟。

private void tmrNotepad_Tick(object sender, EventArgs e)
        {
            tssLbl2.Text = System.DateTime.Now.ToString();
        }

9、关于记事本设计
单击【项目】→【添加Windows窗体】菜单项,添加一个名为“frmAbout”的窗体。
给窗体“frmAbout”添加几个Label、Button、LinkLabel控件。
属性设置:
Form Form2 :
Name:frmAbout
Text:关于记事本
StartPosition:CenterScreen
MaximizeBox:False
AutoSizeMode:GrowAndShrink
Button Button1:
Name:btnOk
Text:确定
Label Label1:
Text:多功能记事本
LinkLabe LinkLabel
Text:如有问题,点击这里

// 【确定】按钮
        private void btnOk_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            System.Diagnostics.Process.Start("http://www.baidu.com");
        }

截图:

三、结果展示

四、Gitee
https://gitee.com/muxinji/windows

  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; namespace Mickey记事本 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } // 用于存储当前操作的文件的名称 private string textFileName = ""; private string filePath = ""; private void 新建_Click(object sender, EventArgs e) { textFileName = ""; // 新建一个文本时,若输入框中的内容不为空,应先提示“是否保存” if (inputInfo.Text != string.Empty) { // 若用户选择“是”,应弹出保存文件的对话框 if (MessageBox.Show("是否保存当前文件?", "Mickey温馨提示", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Information) == DialogResult.Yes) { // 保存文件 Save(); Text = "新建-Mickey记事本"; inputInfo.Text = ""; } else if (MessageBox.Show("是否保存当前文件?", "Mickey温馨提示", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Information) == DialogResult.No) { // 用户选择不保存时将输入框中的内容清除 inputInfo.Text = ""; } } } private void 打开_Click(object sender, EventArgs e) { OpenFileDialog openFile = new OpenFileDialog(); openFile.Filter = "文本文件(*.txt)|*.txt"; if (openFile.ShowDialog() == DialogResult.OK) { StreamReader sr = new StreamReader(openFile.FileName); inputInfo.Text = sr.ReadToEnd(); sr.Close(); FileInfo fileInfo = new FileInfo(openFile.FileName); // 把标题改为打开的文件的名称 Text = "*" + fileInfo.Name + "-Mickey记事本"; textFileName = fileInfo.Name; } } private void 保存_Click(object sender, EventArgs e) { Save(); } // “保存” private void Save() { if (!textFileName.Equals("")) { SaveFileDialog saveFile = new SaveFileDialog(); // 默认保存格式 saveFile.Filter = "文本文件(*.txt)|*.txt"; StreamWriter sw = new StreamWriter(filePath, false); sw.Write(inputInfo.Text); sw.Close(); MessageBox.Show("文件保存成功!", "Mickey温馨提示"); filePath = saveFile.FileName; // 把标题改为打开的文件的名称 Text = textFileName + "-Mickey记事本"; } else { // 成员变量为“”,说明文件第一次保存,执行“另存为”操作 HoldFile(); } } private void HoldFile() { // 若用户选择另保存文件 SaveFileDialog saveFile = new SaveFileDialog(); // 默认保存格式 saveFile.Filter = "文本文件(*.txt)|*.txt"; if (saveFile.ShowDialog() == DialogResult.OK) { StreamWriter sw = new StreamWriter(saveFile.FileName, false); sw.WriteLine(inputInfo.Text); sw.Close(); MessageBox.Show("文件保存成功!", "Mickey温馨提示"); filePath = saveFile.FileName; } // 判断是第一次保存还是第二次 if (textFileName.Equals("")) { FileInfo fileInfo = new FileInfo(saveFile.FileName); Text = fileInfo.Name + "-Mickey记事本"; textFileName = fileInfo.Name; } else { // 把标题改为打开的文件的名称 Text = textFileName + "-Mickey记事本"; } } private void 另存为_Click(object sender, EventArgs e) { HoldFile(); } private void 页面设置_Click(object sender, EventArgs e) { this.pageSetupDialog1.Document = this.printDocument1; pageSetupDialog1.ShowDialog(); } private void 打印_Click(object sender, EventArgs e) { if (inputInfo.Text.Length < 1) { MessageBox.Show("请确保要打印的文件的内容不为空!", "Mickey温馨提示"); return; } else { // 设置Document的属性 this.printDialog1.Document = this.printDocument1; this.printDialog1.PrinterSettings = this.pageSetupDialog1.PrinterSettings; if (this.printDialog1.ShowDialog() == DialogResult.OK) { try { this.printDocument1.Print(); } catch (Exception ex) { MessageBox.Show(ex.Message, "错误信息", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } } private void 退出_Click(object sender, EventArgs e) { // 退出时应提示用户是否保存当前文本文件 DialogResult result = MessageBox.Show("是否将更改保存?", "Mickey温馨提示", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Information); if (result == DialogResult.Yes) { Save(); Application.Exit(); } else if (result == DialogResult.No) { Application.Exit(); } } // 这个成员变量用来存储用户选择进行操作的字符串 private string selectedInfo = ""; private void 编辑_Click(object sender, EventArgs e) { if ((inputInfo.SelectedText.Equals("")) && (selectedInfo.Equals(""))) { 剪切.Enabled = false; 复制.Enabled = false; 粘贴.Enabled = false; 删除.Enabled = false; } else { 剪切.Enabled = true; 复制.Enabled = true; 粘贴.Enabled = true; 删除.Enabled = true; } } private void 撤销_Click(object sender, EventArgs e) { this.inputInfo.Undo(); } private void 剪切_Click(object sender, EventArgs e) { selectedInfo = inputInfo.SelectedText; this.inputInfo.Cut(); } private void 复制_Click(object sender, EventArgs e) { this.inputInfo.Copy(); } private void 粘贴_Click(object sender, EventArgs e) { this.inputInfo.Paste(); } private void 删除_Click(object sender, EventArgs e) { this.inputInfo.SelectedText = ""; } private void 查找_Click(object sender, EventArgs e) { if (inputInfo.Text == string.Empty) { MessageBox.Show("请确保要查找的文件的内容不为空!", "Mickey温馨提示"); } else { //Form2 fr2 = new Form2(); //fr2.sender(this); //fr2.Show(); } } private void 查找下一个_Click(object sender, EventArgs e) { } private void 全选_Click(object sender, EventArgs e) { this.inputInfo.SelectAll(); //全选_Click(sender,e); } private void 时间日期_Click(object sender, EventArgs e) { inputInfo.Text += "现在时间是:" + DateTime.Now.ToString(); } private void 自动换行_Click(object sender, EventArgs e) { if (自动换行.Checked == true) { inputInfo.WordWrap = true; } else { inputInfo.WordWrap = false; } } private void 字体_Click(object sender, EventArgs e) { FontDialog fontDialog = new FontDialog(); if (fontDialog.ShowDialog() == DialogResult.OK) { inputInfo.Font = fontDialog.Font; } } private void 查看_Click(object sender, EventArgs e) { if (inputInfo.Text.Length > 0) { 状态栏.Enabled = true; } else { 状态栏.Enabled = false; } } private void 状态栏_Click(object sender, EventArgs e) { if (状态栏.Checked == true) { 状态栏.Checked = false; statusStrip1.Visible = false; } else { 状态栏.Checked = true; statusStrip1.Visible = true; } } private void 查看帮助_Click(object sender, EventArgs e) { string help = @"C:\Users\狗狗Mickey\Desktop\help.txt"; Help.ShowHelp(this, help); } private void 关于记事本_Click(object sender, EventArgs e) { AboutBox1 about = new AboutBox1(); about.Show(); } } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值