VS中用C#编写简单记事本

一、前言

这应该算是C#窗体界面编程的一个小实验把

二、实现

首先先拉一个窗体,再拖一些控件(menuStrip,contextMenuStrip,timer,richTextBox)

然后界面暂时设置成这个样子。

相应的属性、热键、快捷键自己设定好,细心点,需要点时间,应该不难。
完成了界面的设置和属性的设定,基本完成了1/3

接下来就是功能的实现。

【0】当加载窗体UI的时候

        //注意设置的私有成员名称,后面将会用到,名字可以自己设定
        private OpenFileDialog od = new OpenFileDialog();
        private SaveFileDialog sd = new SaveFileDialog();
        private bool richboxTextHasChanged = false;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            od.FileName = "";
            od.Filter = "TXT FILE(*.txt)|*.txt";
            sd.Filter = "TXT FILE(*.txt)|*.txt";
            label2.Text = "时间:" + DateTime.Now.ToLongTimeString().ToString();
            timer1.Enabled = true;
            timer1.Interval = 100;
        }

注意里面设置的私有成员噢,后面将会泳道。

【1】当点击新建功能的时候
 

        private void 新建ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (od.FileName != "" && richboxTextHasChanged == true && MessageBox.Show("文本内容已更改\n是否保存修改?", "信息提示", MessageBoxButtons.OKCancel) == System.Windows.Forms.DialogResult.OK)
            {//若文本改动,首先保存
                richTextBox1.SaveFile(od.FileName, RichTextBoxStreamType.PlainText);
            }
            //不然初始化界面
            od.FileName = "";
            this.Text = "记事本";
            this.richTextBox1.Clear();
            this.richboxTextHasChanged = false;
        }

【2】当点击打开功能的时候

        private void 打开ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            od.ShowDialog();//选择打开文本文件
            if (od.FileName != "")
            {
                //将文本文件里面的内容加载到界面内
                richTextBox1.LoadFile(od.FileName, RichTextBoxStreamType.PlainText);
                this.Text = od.FileName + "-记事本";
            }
        }

【3】当点击保存功能的时候

        private void 保存ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (od.FileName != "")
            {
                richTextBox1.SaveFile(od.FileName, RichTextBoxStreamType.PlainText);
            }
            else
                MessageBox.Show("请先打开文本文件", "信息提示", MessageBoxButtons.OK);
        }

【4】当点击另存为功能的时候

        private void toolStripMenuItem1_Click(object sender, EventArgs e)
        {
            if (sd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                richTextBox1.SaveFile(sd.FileName, RichTextBoxStreamType.PlainText);
            }
        }

【5】当点击退出功能的时候

        private void 退出ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.Dispose();
            this.Close();
        }

【6】当点击剪切功能的时候

        private void 剪切ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            richTextBox1.Cut();
        }

【7】当点击复制功能的时候

        private void 复制ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            richTextBox1.Copy();
        }

【8】当点击粘贴功能的时候

        private void 粘贴ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            richTextBox1.Paste();
        }

【9】当点击字体功能的时候

        private void 字体ToolStripMenuItem_Click(object sender, EventArgs e)
        {//设置字体
            FontDialog fd = new FontDialog();
            fd.ShowDialog();
            richTextBox1.Font = fd.Font;
        }

【10】当点击全选功能的时候

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

【11】当点击日期功能的时候

        private void 时间日期DToolStripMenuItem_Click(object sender, EventArgs e)
        {
            richTextBox1.AppendText(System.DateTime.Now.ToString());
        }

将会在文本后面追加上当前日期时间信息。

【12】当点击查看帮助功能的时候

        private void 查看帮助ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            System.Diagnostics.Process.Start("https://answers.microsoft.com/en-us/windows/forum/apps_windows_10");
        }

这时候提供一个网址,就是会打开记事本的帮助网页。

【13】点击关于记事本的时候

        private void 关于记事本AToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //这里的AboutBox是自己编写的一个界面,调用就好,里面随便写写自己这个记事本的版本信息啥的就可以了
            AboutBox.Form1 about = new AboutBox.Form1();
            about.ShowDialog();
        }

这里的AboutBox是自己编写的一个界面,调用这个界面就好,里面随便写写自己这个记事本的版本信息啥的就可以了。

例如:我的

ContextMenuStrip里面的功能同上一样实现,相应的拷贝一下就好了。

【14】richTextBox监听事件1

        private void richTextBox1_TextChanged(object sender, EventArgs e)
        {
            richboxTextHasChanged = true;
        }

给richTextBox设置一个事件,当文本内容改变的时候,就将richboxTextHasChanged设置为true表明文本内容有改动

【15】richTextBox监听事件2

        private void richTextBox1_SelectionChanged(object sender, EventArgs e)
        {
            if (richTextBox1.SelectedText != "")//如果鼠标选中了文本内容
            {
                this.剪切ToolStripMenuItem.Enabled = true;
                this.复制ToolStripMenuItem.Enabled = true;
                this.剪切TToolStripMenuItem.Enabled = true;
                this.复制CToolStripMenuItem.Enabled = true;
            }
            else//如果鼠标没有选中文本内容
            {
                this.剪切ToolStripMenuItem.Enabled = false;
                this.复制ToolStripMenuItem.Enabled = false;
                this.剪切TToolStripMenuItem.Enabled = false;
                this.复制CToolStripMenuItem.Enabled = false;
            }
        }

有些功能只有在选中了文本的时候才能使用,我们设置一个这样的监听事件,当有文本被选中的时候,就将这些功能起作用,否则不能让这些功能起作用。

【16】右下角显示时间信息

        private void timer1_Tick(object sender, EventArgs e)
        {
            //没隔一段时间更新下时间信息
            label2.Text = "时间:"+DateTime.Now.ToLongTimeString().ToString();
        }

更新时间信息,让时间及时更新。

【17】richTextBox监听事件3

        //鼠标点击的时候触发
        private void richTextBox1_MouseDown(object sender, MouseEventArgs e)
        {
            int index = richTextBox1.GetFirstCharIndexOfCurrentLine();
            int line = richTextBox1.GetLineFromCharIndex(index) + 1;
            int col = richTextBox1.SelectionStart - index + 1;
            label1.Text = "第 " + line.ToString() + " 行,第 " + col.ToString() + " 列";
        }

        //首次按下某个键的时候触发
        private void richTextBox1_KeyDown(object sender, KeyEventArgs e)
        {
            int index = richTextBox1.GetFirstCharIndexOfCurrentLine();
            int line = richTextBox1.GetLineFromCharIndex(index) + 1;
            int col = richTextBox1.SelectionStart - index + 1;
            label1.Text = "第 " + line.ToString() + " 行,第 " + col.ToString() + " 列";
        }

通过这两个监听事件,让左下角的标签时刻显示出当前正在编辑的行列数。

三、运行效果

【1】打开功能

【2】编辑文本时

【3】帮助功能

【4】关于记事本功能

其他功能不再演示(过于占版面),大概跟记事本差不多,虽然比真的记事本弱很多。

四、实验总结

通过此次实验我加深了对MenuStrip,ContextMenuStrip,RichText,FontDialog,OpenFileDialog,SaveFileDialog等控件的使用,以及对RichText的Cut、Clear、Copy、Paste等方法熟悉。
最后我实现了相应的窗体的构造,下拉框、弹出框都先构造其框架,再加上其热键和快捷键,最后实现其功能
最后不仅实现了上面老师要求的一些东西,还自己加上了时间的显示以及当前鼠标所在行列的显示
功能都相应的实现了,通过此次实验我学到了实际的操作,进步很大,也深深体会到了VS用C#编辑窗体程序真的很强大。
运行情况如上截图

最后感觉自己编写出了一个最最最简单的记事本出来了。

菜鸡进步史······runing······

猜你喜欢

转载自blog.csdn.net/lfy905805357/article/details/81107356