c#作业二: 用C#实现一个记事本

C#实现一个简单记事本

一、功能说明与实验目标

  • 设计一个Windows应用程序——记事本。通过本章的学习,可以进一步掌握MenuStrip(菜单)、ToolStrip(工具栏)、RichTextBox(高级文本框)和StatusStrip(状态栏控件)等控件的使用,以及如何使用CommonDialog(公共对话框)实现对文本的存取、格式设置等操作。

二、完成过程

1.菜单

1.1 实现功能

1.1.1 文件(F)

Text属性Name属性ShortcutKeys属性(快捷键)ShowShortcutKeys属性
文件(&F)tsmiFileNone
新建(&N)tsmiNewCtrl+NTrue
打开(&O)tsmiOpenCtrl+OTrue
保存(&S)tsmiSaveCtrl+STrue
另存为(&A)tsmiSaveAsNone
退出(&X)tsmiCloseNone

代码:

 // 新建(N)
        private void 新建NCtrlNToolStripMenuItem_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;
                    }
                }
            }

        }

        //打开(O)
        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;

        }

        // 保存(S)
        private void tsmiSave_Click(object sender, EventArgs e)
        { 
            //由于这个没有改Name属性,所以和图片不太一样,对照就行
            // 若文件从磁盘打开并且修改了其内容
            if (b == true && rtxtNotepad.Modified == true)
            { 
                rtxtNotepad.SaveFile(odlgNotepad.FileName);
                s = true;
            }
            else if (b == false && rtxtNotepad.Text.Trim() != "" &&
                sdlgNotepad.ShowDialog() == DialogResult.OK)
            { 
                rtxtNotepad.SaveFile(sdlgNotepad.FileName);//保存语句
                s = true;
                b = true;
                odlgNotepad.FileName = sdlgNotepad.FileName;
            }

        }

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

        }

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

实现效果:
《c#作业二: 用C#实现一个记事本》

1.1.2 编辑(E)

Text属性Name属性ShortcutKeys属性(快捷键)ShowShortcutKeys属性
编辑(&E)tsmiEditNone
撤销(&U)tsmiUndoCtrl+ZTrue
复制(&C)tsmiCopyCtrl+CTrue
剪切(&T)tsmiCutCtrl+XTrue
粘贴(&P)tsmiPasteCtrl+VTrue
全选(&A)tsmiSelectAllCtrl+ATrue
日期(&D)tsmiDateF5True

代码:

        // 撤销(Z)
        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());//显示当前日期
        }

结果截图:
《c#作业二: 用C#实现一个记事本》

1.1.3 格式(O)和 查看(V)

Text属性Name属性Check属性
格式(&O)tsmiFormatFalse
自动换行(&W)tsmiAutoTrue
字体(&F)tsmiFontFalse
Text属性Name属性Checked属性
查看(&V)tsmiViewFalse
工具栏(&T)tsmiToolStripTrue
状态栏(&S)tsmiStatusStripTrue

“格式(O)”区代码:

  // 自动换行
        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;
            }

        }

结果截图:
《c#作业二: 用C#实现一个记事本》

“查看(V)”区代码:

 // 工具栏
        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;
                toolStrip1.Visible = false;
                // 设置多格式文本框左上角位置
                rtxtNotepad.Location = point;
                // 隐藏工具栏后,增加文本框高度
                rtxtNotepad.Height += toolStrip1.Height;
            }
            else
            { 
                /* 显示工具栏时,多格式文本框左上角位置的位置为(0,49), 因为工具栏的高度为25,加上菜单的高度24后为49 */
                point = new Point(0, 49);
                tsmiToolStrip.Checked = true;
                toolStrip1.Visible = true;
                rtxtNotepad.Location = point;
                rtxtNotepad.Height -= toolStrip1.Height;
            }

        }


        // 状态栏
        private void tsmiStatusStrip_Click(object sender, EventArgs e)
        { 
            if (tsmiStatusStrip.Checked == true)
            { 
                tsmiStatusStrip.Checked = false;
                stsNotepad.Visible = false;
                rtxtNotepad.Height += stsNotepad.Height;
            }
            else
            { 
                tsmiStatusStrip.Checked = true;
                stsNotepad.Visible = true;
                rtxtNotepad.Height -= stsNotepad.Height;
            }

        }

结果截图:
《c#作业二: 用C#实现一个记事本》

1.1.4 帮助(H)

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

代码:

 // 关于记事本
        private void tsmiAbout_Click(object sender, EventArgs e)
        { 
            frmAbout ob_FrmAbout = new frmAbout();
            ob_FrmAbout.Show();

        }

结果截图:
《c#作业二: 用C#实现一个记事本》

关于记事本具体实现:

控件类型控件名称属性设置结果
FromFrom2NamefrmAbout
FromFrom2Text关于记事本
FromFrom2StartPositionCenterScreen
FromFrom2MaximizeBoxFalse
FromFrom2AutoSizeModeGrowAndShrink
ButtonButton1NamebtnOk
ButtonButton1Text确定
LabelLabel1Text多功能记事本
LinkLabeLinkLabelText如有问题,请点这里

代码:

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

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

实现效果:

《c#作业二: 用C#实现一个记事本》

2.工具栏

代码:


        // 快捷工具栏
        private void toolStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
        { 
            int n;
            // 变量n用来接收按下按钮的索引号从0开始
            n = toolStrip1.Items.IndexOf(e.ClickedItem);
            switch (n)
            { 
                case 0:
                    新建NCtrlNToolStripMenuItem_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;

            }

        }

实现效果:
《c#作业二: 用C#实现一个记事本》

3.计时器

代码:

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

4.窗体

代码:

private void frmNotepad_SizeChanged(object sender, EventArgs e)
{ 
    frmNotepad ob_frmNotepad = new frmNotepad();
    tssLbl1.Width = this.Width / 2 - 12;
    tssLbl2.Width = tssLbl1.Width;
}

三、运行结果

《c#作业二: 用C#实现一个记事本》
《c#作业二: 用C#实现一个记事本》

四、总结

在实验操作过程中,不慎将部分代码删除而导致窗体崩溃,无法显示,也不知怎么的无法撤退。。。在百度无门后,探索了一番VS,突然发现它有自动纠错功能,只要鼠标点一下,就能帮助把代码修复好,如”添加方法“,自动帮我打出几行代码,窗体也回归正常。也遇到过“该项目不知道如何运行配置文件”的问题,搜索一番才知道是VS少下了一些组件。看来不仅得训练代码能力,熟练地使用工具也很重要。

五、源码地址

作业二仓库地址

    原文作者:恍若三人
    原文地址: https://blog.csdn.net/qq_51776197/article/details/124673976
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞