基于Windows的桌面程序——记事本的制作

本文介绍如何使用C#和Visual Studio开发一个简单的记事本应用,涵盖项目创建、界面设计、菜单功能实现及文件操作等内容。

1.新建项目

启动Visual Studio .NET ,在“文件”菜单上,指向“添加”,然后单击“新建项目”打开“新建项目”对话框。 从 Visual C# 项目列表中选择“Windows 应用程序”项目模板

新建项目成功后会有一个初始表格Form1

选定From1,将其属性“Text”设置成“记事本”

 

 

2.向主窗体添加控件

分别在工具栏中向form中添加一个MenuStrip控件、一个RichTextBox控件、一个OpenFileDialog控件、一个SaveFileDialog控件、一个FontDialog控件。控件属性为

3.MenuStrip控件设置菜单

设置属性完毕后,为MenuStrip控件设置菜单:“文件”菜单包括“新建”、“打开”、“保存”、“另存为”、“退出”子菜单项。“编辑”菜单包括“撤销”、“重做”、“剪切”、“复制”、“粘贴”、“删除”、“查找”、“替换”等子菜单项。“格式”菜单包括“字体”、“颜色”子菜单项。

如图:三个主菜单和文件的子菜单:

4.为设计窗口编码

设计窗口告一段落后,我们要分别为每个菜单编码了,编码只需要双击将要编码的菜单图案就进入了对应函数,比如上边第二张图,双击“新建”,就可以进入private void 新建ToolStripMenuItem_Click(object sender, EventArgs e)的空函数

  1. 文件菜单的“新建”菜单

    private void 新建ToolStripMenuItem_Click(object sender, EventArgs e)

            {

                txtNote.Text = "";

            }

  2.  文件菜单的“打开”菜单:Form1的代码窗口的最前端,添加  using System.IO;因为文件的输入输出操作需要用到该命名空间的类和方法。然后双击菜单项“打开”,进入该菜单项的编码窗口,并编写“打开”的单击事件程序
    
    	private void 打开ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                //添加文本过滤器,(*.txt)显示在文件类型里,中间用|隔开,|后面代表过滤txt以外的其他类型文件,让记事本默认打开.txt文件,所以过滤器的index为前者:1
                openFileDialog1.Filter = ""文本文件(*.txt)|*.txt|所有文件(*.*)|*.*";
                openFileDialog1.FilterIndex = 1;
                //是否存储文件路径,在这里是存储,在做动态菜单的时候会让显示曾经加载路径
                openFileDialog1.RestoreDirectory = true;
                //读取文本文件
                StreamReader sr = null;
                if (this.openFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    sr = new StreamReader(openFileDialog1.FileName,System.Text.Encoding.Unicode);
                    txtNote.Text = sr.ReadToEnd();
                    sr.Close();
                    filename = openFileDialog1.FileName;
    }
            }
    
  3. 保存   点击退出按钮或记事本框的×时的保存控制
  1. 添加全局布尔变量isChange
  2. 保存另存在sw.Close后边加isChange = false;
  3. 双击整个编辑form txtNote_TextChanged(object sender, EventArgs e):isChange = true
  4. 打开Form1_FormClosing(object sender, FormClosingEventArgs e),复制退出代码,加e.canc
 private void 保存ToolStripMenuItem_Click(object sender, EventArgs e)
        {
                        if (filename == "")
            {
                saveFileDialog1.Filter = "文本文件(*.txt)|*.txt|所有文件(*.*)|*.*";
                saveFileDialog1.Title = "Save an Text File";
                if (saveFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    filename = saveFileDialog1.FileName;
                    StreamWriter sw = new StreamWriter(filename, false, System.Text.Encoding.Default);

                    // MessageBox.Show( sw.Encoding.ToString());
                    if (sw != null)
                    {
                        // 创建新文件后,向其中写入测试内容
                        sw.Write(txtNote.Text);
                        sw.Close();
                        isChange = false;
                    }
                }
            }
            else
            {
                //直接保存,不显示对话框
                StreamWriter sw = new StreamWriter(filename, false, System.Text.Encoding.Default);
                if (sw != null)
                {
                    // 创建新文件后,向其中写入测试内容
                    sw.Write(txtNote.Text);
                    sw.Close();
                    isChange = false;
                }
            }
        }

4.退出——退出前要判断是否已经保存文本,如果已经保存就不提示,如果未保存,提示是否保存

 private void 退出ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (isChange)
            {
                DialogResult dr = MessageBox.Show("文本变化,是否保存?", "提示", MessageBoxButtons.YesNoCancel);
                if (dr == DialogResult.Yes)
                {
                    //保存
                    保存ToolStripMenuItem_Click(sender, e);
                    Application.Exit();
                }
                if (dr == DialogResult.No)
                {
                    //退出
                    Application.Exit();
                }
              

            }
            else
                Application.Exit();
        }

 

5.编辑菜单的几个编程

9、编辑做法      
 private void 复制ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Clipboard.SetText(txtNote.SelectedText);
        }

        private void 剪切ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Clipboard.SetText(txtNote.SelectedText);
            txtNote.SelectedText = "";
        }

        private void 粘贴ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            txtNote.SelectedText = Clipboard.GetText();
        }

        private void 撤销ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            
            txtNote.Undo();
        }

        private void 重做ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            txtNote.Redo();
        }

格式菜单:

  private void 字体ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (this.fontDialog1.ShowDialog() == DialogResult.OK)
            {
                txtNote.SelectionFont = fontDialog1.Font;
            }
        }

        private void 颜色ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (this.colorDialog1.ShowDialog() == DialogResult.OK)
            {
                txtNote.SelectionColor = colorDialog1.Color;
            }
           
        }

6.弹出式菜单

在 “模拟记事本”中要加入有关“编辑”这部分菜单的弹出菜单功能,用鼠标右键单击txtNote时能弹出“剪切”、“复制”、“粘贴”几个菜单项

   1.在窗体上放置一个contextMenuStrip控件。名称为contextMenuStrip1

   2.contextMenuStrip控件创建“剪切”、“复制”、“粘贴”几个菜单项。

   3.设置文本框控件txtNoteContextMenu属性的值为contextMenuStrip1

   4.相同功能编程方法

 

7.动态菜单:每次打开文件之后可以自动显示之前打开的路径

    1.方法是在“文件”下的“退出”菜单项前加两个分隔条。退出按钮右击——插入——Separator,并设置visible属性为FALSE

 

2.在窗体的代码窗口的最前端,在public partial class Form1 : Form后面的“{”下,添加

             private int n = 0;

3.在设计窗口,双击“打开”菜单项,进入代码窗口,修改原来的程序为下段程序:

private void 打开ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            openFileDialog1.Filter="文本文件(*.txt)|*.txt|所有文件|(*.*)";
            openFileDialog1.FilterIndex=1;
            openFileDialog1.RestoreDirectory=true ;
            //读取文本文件
            StreamReader sr=null;
            if (this.openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                sr = new StreamReader(openFileDialog1.FileName, 							System.Text.Encoding.Unicode);
                txtNote.Text = sr.ReadToEnd();
	sr.Close();     
 	//添加动态菜单,显示打开的文件名
                n++;                
                toolStripMenuItem5.Visible = true;
                ToolStripMenuItem tool1 = new ToolStripMenuItem();
                tool1.Name = "DynMenu" + n.ToString();
                tool1.Text = openFileDialog1.FileName;
                //将菜单项插入到第一个分隔条后
                文件ToolStripMenuItem.DropDownItems.Insert(5, tool1);
                //如果显示的文件超过4个,删除第2个分隔条钱的菜单项
                if (n > 4)
                    文件ToolStripMenuItem.DropDownItems.RemoveAt(9);
                //动态菜单结束}
}

 

7.添加新建、打开、保存、复制、剪切、粘贴的工具栏

   创建工具栏的步骤如下:

   1.在窗体上添加一个ToolStrip控件,这时,在窗体的菜单下边,自动会出现ToolStrip控件编辑器。

   2.单击ToolStrip控件的下拉按钮,在下拉式列表中选择各种按钮。

   3.设置每个按钮的名称,或取默认名称。

   4.设置每个按钮的Image属性,赋予一个合适的图标。

   5.双击工具栏上的每个按钮,进入代码窗口,为该按钮编写事件响应程序。

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值