【windows程序设计作业】用c#语言实现记事本

这篇具有很好参考价值的文章主要介绍了【windows程序设计作业】用c#语言实现记事本。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

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


实验目标

实现Windows自带的记事本的部分功能外,并且还可以任意更改字体的字体类型、大小和颜色,并在状态栏中显示时间。为了方便用户的操作,还在程序的窗体上放置了一个工具栏。
记事本程序具有文件的新建、打开、保存功能;文字的复制、粘贴、删除功能;字体类型、格式的设置功能;查看日期时间等功能,并且用户可以根据需要显示或者隐藏工具栏和状态栏。

记事本界面设计

1.打开VS2013 单击 文件→新建→项目
2.选择 模版 → Visual C# → windows→ windows窗体应用程序 在下面的名称写Notepad
3.更改窗体名称 单击窗体,→右下角属性→text 修改为“记事本”
4.设置剩下的窗体属性
【windows程序设计作业】用c#语言实现记事本

界面设计

(1)MenuStrip(菜单控件)

1.单击窗体左边会出现工具箱→ 找到menustrip →拖动到窗体中
2.单击菜单栏→右下角属性→修改Name属性为“mnusNotepad”
3.单击 输入【文件(F)】、【编辑(E)】、【格式(O)】、【查看(V)】和【帮助(H)】如图所示
【windows程序设计作业】用c#语言实现记事本

4 设置【文件(F)】、【编辑(E)】、【格式(O)】、【查看(V)】和【帮助(H)】的属性→单击【文件(F)】、【编辑(E)】、【格式(O)】、【查看(V)】和【帮助(H)】找到对应的属性窗口,按照以下表格进行设置
【windows程序设计作业】用c#语言实现记事本【windows程序设计作业】用c#语言实现记事本
【windows程序设计作业】用c#语言实现记事本
【windows程序设计作业】用c#语言实现记事本

(2)ToolStrip(工具栏控件)

单击窗体左边会出现工具箱→ 找到“ToolStrip” →拖动到窗体中
单击工具栏→右下角属性→修改Name属性为“tlsNotepad”
右击工具栏→ 编辑项 可以看到我们的按钮成员 在这里我们可以删除或者增加,我们只设置几个简单的功能(新建,打开,保存,剪切,粘贴,复制)。【windows程序设计作业】用c#语言实现记事本

(3)RichTextBox(多格式文本框控件)

单击窗体左边会出现工具箱→ 找到“RichTextBox” →拖动到窗体中
单击工具栏→右下角属性→修改Name属性为“rtxtNotepad”
Anchor属性选择“Top,Bottom,Left,Right”,这样当窗体大小改变时,RichTextBox控件的大小也会跟着改变

(4)StatusStrip(状态栏控件)

添加StatusStrip控件,将其Name属性设为“stsNotepad”,将Dock属性设为“Bottom”再将Anchor属性设为“Bottom,Left,Right”。
然后打开【项集合编辑器】对话框
【windows程序设计作业】用c#语言实现记事本

下拉列表中保留默认的选择“StatusLabel”,然后单击【添加】按钮,依次添加2个StatusLabel,并分别命名为“tssLbl1”和“tssLbl2”,再将tssLbl1的Text属性设为“就绪”, tssLbl2的Text属性设为“显示日期、时间”。

(5)OpenFileDialog(打开对话框)

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

(6)SaveFileDialog(保存对话框)

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

(7)FontDialog(字体对话框)

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

(8)Timer(计时器控件)

从工具箱中找到Timer直接拖入窗体中 单击属性
本章介绍的记事本在状态栏中显示了时钟,这就需要使用一个Timer控件来实现。Timer控件的Name属性设为“tmrNotepad”,Enabled(激活的可行的)属性设为“True”,Interval(间隔,间距,幕间时间)属性设为“1000”,表示1秒种触发一次Tick事件,即1秒钟改变一次时钟。

用户界面

【windows程序设计作业】用c#语言实现记事本

编写主要程序代码

首先在代码的通用段声明以下两个公共变量,他们都是布尔型的,“b”用于判断文件是新建的还是从磁盘打开的,“s”用于判断文件是否被保存。
双击窗体,进入代码区填写以下代码

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


(1) 多格式文本框代码(RichTextBox)

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

(2) 菜单代码

1. 【文件(F)】菜单
(1) 【新建(N)】菜单项
        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;
                    }
                }
            }
        }      
(2) 【打开(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;
        }
      
(3) 【保存(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;
            }
        }      
      
(4) 【另存为(A)】菜单项
        private void tsmiSaveAs_Click(object sender, EventArgs e)
        {

            if (sdlgNotepad.ShowDialog() == DialogResult.OK)
            {
                rtxtNotepad.SaveFile(sdlgNotepad.FileName);
                s = true;
            }
        }
(5) 【退出(X)】菜单项
        private void tsmiClose_Click(object sender, EventArgs e)
        {
            Application.Exit();//程序结束
        }

2. 【编辑(E)】菜单

【编辑】菜单各菜单项的单击代码

        // 【撤销】菜单代码
        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());//显示当前日期
        }
3. 【格式(O)】菜单

【格式(O)】菜单用于设置打开或新建的文本内容是否自动换行,以及设置字体的格式功能。

(1) 【自动换行(W)】菜单项

此菜单项的Checked属性默认为“True”,文本内容按照文本框的宽度自动换行,否则只按段落标记换行。

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;
    }
}
(2) 【字体(F)】菜单项

单击此菜单项时,弹出字体对话框以调整选择内容的字体、颜色等属性。因此需要使用前面添加的FontDialog控件来实现。

        private void tsmiFont_Click(object sender, EventArgs e)
        {
            fdlgNotepad.ShowColor = true;
            if (fdlgNotepad.ShowDialog() == DialogResult.OK)
            {
                rtxtNotepad.SelectionColor = fdlgNotepad.Color;
                rtxtNotepad.SelectionFont = fdlgNotepad.Font;
            }
        }
4. 【查看(V)】菜单

【查看(V)】菜单用于设置记事本上是否显示工具栏和状态栏,这两个菜单项默认情况下是被选中的,可以通过单击相应的菜单项设置不同的显示效果。

(1) 【工具栏(T)】菜单项

该菜单项用于控制工具栏的显示和隐藏,默认状态下显示工具栏,当隐藏时应当修改多格式文本框的位置和高度。

        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,49),
                   因为工具栏的高度为25,加上菜单的高度24后为49 */
                point = new Point(0, 49);
                tsmiToolStrip.Checked = true;
                tlsNotepad.Visible = true;
                rtxtNotepad.Location = point;
                rtxtNotepad.Height -= tlsNotepad.Height;
            }
        }
(2) 【状态栏(S)】菜单项

该菜单项用于控制状态栏的显示和隐藏,默认状态下显示状态栏,当隐藏时应当修改多格式文本框的高度。

        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;
            }
        }
5. 【帮助(H)】菜单

本菜单只有一个菜单项【关于记事本(A)】,该菜单项调用一个窗体(frmAbout)显示本程序的一些相关信息。并用LinkLabel控件设置链接,通过它可以方便地给作者发送E-Mail。
设计好frmAbout窗体后,为了显示该窗体,需要编写【关于记事本(A)】菜单项的单击事件代码如下:

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

关于记事本

接下来单击Visual C# 2013的【项目】→【添加Windows窗体】菜单项,添加一个名为“frmAbout”的窗体

1. 界面设计

给窗体“frmAbout”添加几个Label、Button、LinkLabel和PictrueBox控件,按照图3.1信息设置好属性后的程序界面如所示。
【windows程序设计作业】用c#语言实现记事本
【关于记事本】窗体和窗体上各控件的属性设置如表所示。
【windows程序设计作业】用c#语言实现记事本

2. 编写代码

【确定】按钮

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

使用LinkLabel打开邮件或者网页

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

工具栏代码

工具栏提供了一些快捷按钮,用来方便用户的操作,用户按下按钮时相当于选择了某个菜单项,用switch语句实现如下,双击工具栏的空白部位,编写工具栏的ItemClicked事件代码如下:

       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 5:
                    tsmiCut_Click(sender, e);
                    break;
                case 6:
                    tsmiCopy_Click(sender, e);
                    break;
                case 7:
                    tsmiPaste_Click(sender, e);
                    break; 
                case 9:
                    tsmiAbout_Click(sender, e);
                    break;

            }
        }

计时器代码

要在状态栏的tssLbl2中显示当前时间,需要编写计时器控件的Tick事件(每秒钟触发一次)代码如下:

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

运行结果

【windows程序设计作业】用c#语言实现记事本
将其保存至D盘下
【windows程序设计作业】用c#语言实现记事本


总结

1.掌握了C#基本控件的使用及其属性的设置
2.熟悉了记事本中菜单的逻辑,如新建和保存时,均需先判断该文件是从磁盘打开还是新建的,根据不同情况使用OpenFileDialog或SaveFileDialog控件的路径来保存文件
3.熟悉了记事本设计的流程,即页面设计、控件属性设置、编写代码


仓库地址

https://gitee.com/xia-minzhe/programming-windows-.git文章来源地址https://www.toymoban.com/news/detail-448149.html

到了这里,关于【windows程序设计作业】用c#语言实现记事本的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C#程序设计——Windows应用程序开发,1、初步掌握Windows应用程序的设计方法。2、掌握常用窗体控件的使用方法。

    初步掌握Windows应用程序的设计方法。 掌握常用窗体控件的使用方法。 1、设计一个Windows应用程序,创建一个用于添加学生个人基本信息的窗体,窗体下方法同时滚动信息“天行健,君子以自强不息!”。   要示如下: 如图1所示,设计窗体界面控件的布局 图1 学生信息管理

    2024年02月10日
    浏览(85)
  • android studio大作业,android studio课程设计,记事本实现

    先看效果图 功能点实现: 登录,注册,记事本分类添加,删除,数据分析统计报表,数据库使用SQLlite 部分实现代码

    2024年02月11日
    浏览(57)
  • 基于微信小程序的班级学生作业管理系统设计与实现

    💗博主介绍:✌全网粉丝10W+,CSDN全栈领域优质创作者,博客之星、掘金/华为云/阿里云等平台优质作者。 👇🏻 精彩专栏 推荐订阅👇🏻 计算机毕业设计精品项目案例-200套 🌟 文末获取源码+数据库+文档 🌟 感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编

    2024年01月21日
    浏览(54)
  • 基于微信小程序的作业管理系统的设计与实现【附项目源码】分享

    基于微信小程序的作业管理系统的设计与实现: 源码地址: https://download.csdn.net/download/qq_41810183/88842836 一、引言 随着移动互联网的普及和微信小程序的广泛应用,教育领域也在积极探索如何利用这些新技术提升教学质量和效率。本需求文档旨在详细阐述一个基于微信小程序

    2024年04月15日
    浏览(39)
  • C语言程序设计—通讯录实现

    功能如下: 添加用户 修改用户 删除用户 查找用户(可重名) 按名字或年龄排序 显示用户 保存通讯录 日志追加  有如下知识点: 动态数组 结构体 枚举 自定义标识符和宏 文件打开与存储 函数 指针 循环  排序 简述特点: 将人员信息放在一个PeoInf的结构体中,再创建一个

    2024年02月09日
    浏览(43)
  • Java程序设计——作业一

    一.单选题(共3题,42.6分) 1 Java属于哪种语言?( ) A、 机器语言 B、 汇编语言 C、 高级语言 D、 以上都不对 正确答案: C 2 下面命令中,可以用来正确编译HelloWorld.java程序的是( ) A、 java HelloWorld B、 java HelloWorld.java C、 javac HelloWorld D、 javac HelloWorld.java 正确答案: D 3 以下

    2023年04月08日
    浏览(63)
  • Python 程序设计期末大作业

    Python 程序设计期末大作业 学生信息管理系统(Python) 简介:基本信息管理和学生成绩管理。基本信息管理模块的主要功能有学生信息的添加、删除、修改、显示和学生数据的导入导出,学生成绩管理模块的主要功能有统计课程最高分、最低分和平均分。 一、功能模块: 基

    2024年02月12日
    浏览(51)
  • Vj程序设计作业H7

    问题描述 在一条街上有 n 个卖菜的商店,按 1 至 n 的顺序排成一排,这些商店都卖一种蔬菜。 第一天,每个商店都自己定了一个价格。店主们希望自己的菜价和其他商店的一致,第二天,每一家商店都会根据他自己和相邻商店的价格调整自己的价格。具体的,每家商店都会

    2023年04月26日
    浏览(35)
  • 【C语言】用函数实现模块化程序设计

    前言:如果把所有的程序代码都写在一个主函数( main函数 )中,就会使主函数变得庞杂、头绪不清,使阅读和维护程序变得困难。此外,有时程序中要多次实现某一功能,如果重新编写实现此功能就会使得程序冗长、不精炼。 💖 博主CSDN主页:卫卫卫的个人主页 💞 👉 专栏分

    2024年02月08日
    浏览(146)
  • 【编译原理实验】 -- 词法分析程序设计原理与实现(C语言实现)

    目录 目标任务 设计要求 一、程序功能描述 二、正则文法 三、程序结构描述 四、代码  五、程序测试  测试用例1 测试结果1 测试用例2 测试结果2 以下为正则文法所描述的 C 语言子集单词符号的示例,请补充单词符号:++,--, , , += , -= ,*=, /= ,(逻辑与),||(逻辑或),

    2024年02月02日
    浏览(127)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包