C#WinFrom 打造个人记事本 -功能篇

需要使用的控件和处理类

        OpenFileDiaLog控件
        SaveFileDialog控件
        FontDialog控件
        字节流处理类 
        AboutBox控件 

详解控件和字节流处理类

OpenFileDiaLog控件
这里写图片描述

SaveFileDialog控件
这里写图片描述

FontDialog控件
这里写图片描述

字节流处理类
这里写图片描述

AboutBox控件
这里写图片描述


任务目标

    1.新建文档
    2.打开文档
    3.保存文档
    4.全选、剪切、粘贴、复制
    5.设置字体
    6.设置是否自动换行
    7.在线帮助
    8.及时记录字数
    9.查找

实践步骤

    1.设置全局变量
    2.使用字节流实现打开、保存和新建
    3.实现菜单条、工具条、右键菜单的复制、剪切、粘贴、全选
    4.设置字体
    5.实现状态栏字数统计
    6.实现在线帮助觉状态栏广告
    7.实现退出和关闭窗体事件
    8.实现查找和关于

控件使用小技巧

1.OpenFileDialog 和 saveFileDialog 的 Filter(过滤器) 属性设置
这里写图片描述

书写格式:任意名字|*.txt //这样在打开本地资源,只会显示 txt格式的文档
        多种格式以 "|" 分隔即可。

2.StatusStrip 的 IsLink 属性设置
这里写图片描述

使用方法:设置 IsLink 的属性值为 true //它就会把 文字突出显示,如下图

这里写图片描述

3.多个控件共同使用一个事件,节省代码
如图,两个控件都使用了打开浏览器,访问我的博客:

http://blog.csdn.net/LiHaoYang11
这里只需要写一个事件,然后设置另一个控件的事件即可,操作如图:
这里写图片描述


代码实现部分

ps:接下来的控件都是放在 父容器上即可,不需要排放位置。
这里写图片描述

1.设置全局变量

        // 设置全局变量
        string filepath = ""; //文件的路径
        bool status = false; //当前文档的保存状态 默认是没有保存

2.实现 打开文件 功能

        //1.首先添加鼠标点击监听事件
        private void toolStripButton2_Click(object sender, EventArgs e)
        {
            /**
               openFileDialog1.ShowDialog(); //调用控件且显示 返回值是      
                                              DialogResult类型
                DialogResult.OK //点击了打开按钮

                //所以这段代码就是 判断是否打开了文件
             */
            if(openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                //记录打开的文件名及绝对路径
                filepath = openFileDialog1.FileName;  

                /**
                 使用StreamReader :使用系统编码 打开文档
                 * 
                 * filepath:文件的绝对路径
                 * Encoding.Default:文件默认的编码格式
                 */
                StreamReader sr = new 
                StreamReader(filepath,Encoding.Default);

                //将流中的字符写到文本框上
                richTextBox1.Text = sr.ReadToEnd();

                //关闭字节流
                sr.Close();

                //设置窗体标题 this指代父容器
                this.Text = "李昊阳专用记事本"+filepath;

                //设置文档状态 已保持(因为没有修改文档内容)
                status = true;
            }
        }

3.实现 保存文件 功能

1.首先把保存文件的方法单独创建,因为后面会用到

        //保存文件方法 返回是否保存成功
        private bool saveFile() 
        {
            //判断是 新文件 还是旧文件 通过filepath判断
            if (filepath == "") //新文档
            {
                //判断是否点击了保存
                if (saveFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    //获取到新文件的保存路径
                    filepath = saveFileDialog1.FileName;

                    /*
                        参数解释
                        filepath:写入路径
                        false:表示覆盖,true就是追加
                        Encoding.Default:使用系统默认编码格式
                    */
                    StreamWriter sw = new 
                    StreamWriter(filepath, false, Encoding.Default);

                    //从文本框中得到内容
                    sw.WriteLine(richTextBox1.Text);

                    sw.Flush();//写入

                    sw.Close();//关闭流

                    /**
                    最好加try...catch... 有的磁盘是只读
                    */

                    status = true; //设置状态 表示文件保存成功

                    //设置窗体标题 
                    this.Text = "李昊阳专用记事本" + filepath;
                }
                else //如果点击不是ok,返回false
                {
                    MessageBox.Show("你取消了保存!","警告");

                    //返回状态没有保存
                    return status;
                }
            }
            else //旧文档
            {
                StreamWriter sw = new 
                StreamWriter(filepath, false, Encoding.Default);

                //从文本框中得到内容

                sw.Flush();//写入

                sw.Close();//关闭流

                status = true; //设置状态 
            }
            return status;
        }

2,调用 保存方法 实现保存功能

        //给保存控件添加鼠标点击事件
        private void toolStripButton3_Click(object sender, EventArgs e)
        {
            //如果文件状态为true,表示保存成功
            if (saveFile())
            {
                //弹出提示框
                MessageBox.Show("文档保存成功!");
            }
        }

4.实现 新建文件 功能

        //给新建
        private void toolStripButton1_Click(object sender, EventArgs e)
        {

            if(status == false)//如果文件没保存
            {
                if(richTextBox1.Text !="") //且文件内容不为空
                {
                    string msg ="当前文档的内容不为空,且没有保存,是否保存";

                    //三个参数:提示内容,提示标题,ok或取消按钮
                    if (MessageBox.Show(msg, "警告", 
                    MessageBoxButtons.OKCancel)==DialogResult.OK)
                    {
                        /**
                        点击ok,保存文件,因为saveFile()已经声明了文件状态
                        所以这里不需要重复声明
                        */
                        saveFile();
                    }

                }
            }

5.剪切、粘贴、复制、全选、功能

1.剪切功能

 private void toolStripButton4_Click(object sender, EventArgs e)
        {
            //调用 richTextBox 的 剪切 功能
            richTextBox1.Cut();

            //文件发生了变化
            status = false;
        }

2.复制

        private void toolStripButton5_Click(object sender, EventArgs e)
        {
            richTextBox1.Copy();
        }

3.粘贴

        private void toolStripButton6_Click(object sender, EventArgs e)
        {
            richTextBox1.Paste();
            //文件发生了变化
            status = false;
        }

4.全选

        private void 全选ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            richTextBox1.SelectAll();
        }

6.字体 设置 功能

        //设置字体
        private void 字体设置ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //关联起来 把richTextBox1的默认值 赋值给 fontDialog1
            fontDialog1.Font = richTextBox1.Font;
            fontDialog1.Color = richTextBox1.ForeColor;

            //显示设置字体对话框 且点击 确定
            if(fontDialog1.ShowDialog() == DialogResult.OK)
            {
                //把设置fontDialog1设置的值 赋值给 richTextBox1
                richTextBox1.Font = fontDialog1.Font;
                richTextBox1.ForeColor = fontDialog1.Color;
            }
            //文件状态
            status = false;
        }

7.自动换行 功能

        private void 查找ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //判读是否是处于自动换行
            if (richTextBox1.WordWrap == false)
            {
                richTextBox1.WordWrap = true;
            }
            else 
            {
                richTextBox1.WordWrap = false;
            }
        }

8.统计当前状态文本框内的字数

        //状态栏 统计字数
        private void richTextBox1_TextChanged(object sender, EventArgs e)
        {
            num.Text = richTextBox1.Text.Length.ToString();
            status = false;
        }

9.在线帮助(其实就是打开浏览器,让他访问一个网站)

        //在线帮助
        private void 在线帮组ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //新启动一个线程
            System.Diagnostics.Process.Start
            ("http://blog.csdn.net/LiHaoYang11");//这是我的博客
        } 

10.退出功能

        private void 退出EToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (status == false)//文件状态没保存
            {
                if (richTextBox1.Text != "")//richTextBox1 内容不为空
                {
                    string msg ="当前文档的内容不为空,且没有保存,是否保存";
                    //三个参数:提示内容,提示标题,ok或取消按钮
                    if (MessageBox.Show(msg, "警告", 
                    MessageBoxButtons.OKCancel)==DialogResult.OK)
                    {
                        if (saveFile())//保存文档成功
                        {
                            Application.Exit(); //退出 
                        }
                    }

                }
            }
            else 
            {
                Application.Exit();//文档保存了 直接退出
            }
        }

11.窗体右上角的关闭按钮的处理。
这里要用到一个事件,FormClosing(当窗体关闭时触发)

        //点击x退出 窗体的操作
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            if(status == false)//如果文件没有保存
            {
                if(richTextBox1.Text !="")//richTextBox1上还有内容
                {
                    string msg = "当前文本内容未保存,是否保存";
                    if (filepath != "") //文档路径不为空
                    {
                        msg = "内容已发生变化,是否保存!";

                        //提示保存,且使用Switch来处理
                        switch(MessageBox.Show(msg,"警
                        告",MessageBoxButtons.YesNoCancel))
                        {
                            case DialogResult.Yes: //选择了是
                                if(saveFile()) //保存
                                {
                                    Application.Exit();
                                }
                                break;

                            case DialogResult.No: //选择了 否
                                e.Cancel = false;//不执行操作,直接关闭窗体
                                break;

                            case DialogResult.Cancel: //选择了 取消
                                e.Cancel = true;//取消退出,回到窗体
                                break;
                        }
                    }
                }
            }
        }

11.查找 功能

        //查找
        private void toolStripButton8_Click(object sender, EventArgs e)
        {
            /**
                三个参数:
                    要查询的字符串
                    查询开始位置
                    查询方式(这里使用的是 定位大小写书写正确的)
            */
            richTextBox1.Find(tt_key.Text.Trim(),
            0,RichTextBoxFinds.MatchCase);
        }

12.关于功能

1.关于 框 的 添加、设置和 应用
a.右键项目-> 添加 -> 新建项 -> “关于” 框

b. “关于” 框 显示的内容 在 AssemblyInfo.cs 文件中设置

c.给窗体的 关于 添加 “关于” 框,代码实现

        //关于
        private void 关于ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            AboutBox1 ab = new AboutBox1();
            ab.Show();
        }
d.设置 点击 "关于" 框 中的 确定 按钮关闭 "关于" 框 
        //点击确定按钮,关闭 "关于" 框 ps: 这是在AboutBox1类
        private void okButton_Click(object sender, EventArgs e)
        {
            this.Close();
        }

至此我的记事本项目完成!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值