WinForm入门_编写“记事本”

  • 学习不是目的,创造才是目的。
  • 学习真正有效的方法之一:学以致用
构建一个软件系统(类似于搭积木)
具体开发的过程就像是拼图(将各软件基本构造块组合)

“记事本”的基本功能:
  1. 自定义的程序图标和主窗体图标;
  2. 实时时间显示;
  3. 调整窗体大小,文本框和显示事件的控件能够自动随之调整大小和位置;
  4. 核心功能:能判断用户是否对文档进行了修改(关闭时询问是否保存);
  5. 核心功能:“打开/保存”文件对话框(打开指定文件,并显示文件内容,修改后关闭窗口时提醒用户保存)。
基本构造块:
  1. TextBox控件(用于输入文本)
    1. 新建空白解决方案;
    2. 新建项目;
    3. 添加TextBox控件,并设置为多行;
    4. 设置允许TAB跳格;
    5. 允许回车输入;
    6. 支持滚动条;
    7. 运行结果:
  2. Timer控件(显示实时时间)
    1. 在组件中选择Timer控件,并拖到窗体中,发现只是显示在窗体设计器的下端(诸如Timer这样的“不可视”控件,只会出现在窗体设计器的下面)
    2. 设置时间间隔(每隔多少时间触发事件);
    3. 添加用于显示的标签;
    4. 为timer添加事件;
    5. 设置启用;
    6. 调试:右击项目:调试\启动新实例。
    7. 运行效果:
  3. OpenFileDialog 和 SaveFileDialog 组件的使用
    1. 新建项目;
    2. 添加组件:对话框\OpenFileDialog、SaveFileDialog;
    3. 添加按钮×2,设置按钮事件,打开对应对话框;
      • ShowDialog方法:显示windows所提供的“打开文件”的标准对话框
    4. 设置Dialog的属性:
      1. 将FileName属性值清空;
      2. 设置Filter(设置对话框所显示文件的筛选准则);
        • 格式:“在下拉列表项中显示的内容 | 用于筛选的文件名模式”
    5. 如何判断用户在打开窗口中点击了“确定”还是“取消”——ShowDialog方法的返回值与 DialogResult.OK 的比较。
  4. 控件的Dock 和 Anchor 属性在界面设计中的功用(实现改变窗口大小,输入框随之改变,但时间显示仍处于右下角)
    1. 新建项目,添加标签,设置标签的Anchor属性;
    2. 添加输入框,设置多行,设置Dock属性(用于设置控件的边框往哪个方向拓展完全填充,这里我们需要输入框的四周都留有间隙,所以不设置Dock,只设置Anchor属性);
Timer控件需要掌握的知识点:
  1. Interval、Enabled属性
  2. Tick事件


“记事本”实战
  1. 新建项目“MyNotepad”,更改窗体名称“frmEditor”;
  2. 添加“打开”按钮、“保存”按钮,并设置对应的控件名称;
  3. 添加用于显示时间的标签,并修改其文本 、控件名称、Anchor值(对齐右下角);
  4. 添加Timer控件,设置控件名称、Interval 为“1000”(每秒触发一次)、Enable 为“true”、事件;
  5. 添加用于显示提示信息的标签,并修改其文本、控件名称、Anchor值(对齐左下角);
  6. 为了操作方便及界面友好,双击界面空白设置窗体初始化方法;
  7. 添加文本框,并设置其控件名称、Anchor值(对齐四周四周);
  8. 添加打开文件对话框、保存文件对话框控件,设置其Filter属性;
  9. 编写打开方法;
    1. 定义一个用于保存文件原始内容(打开文件后的内容)的变量:private String OriginalContent;
    2. 定义使窗体显示文件名的方法;
    3. 设置窗体标题的初始值;
    4. 编写“打开”按钮事件,为了利于代码可读性,将打开代码抽取为方法open;
    5. 编写“保存”按钮事件;
      1. //保存到文件
                 private void save()
                {
                     //当内容已改变时,此标记为True
                     bool ShouldSave = false;
                     //如果文件名不为空,表明当前时文本框中的内容是来自于文件
                     if (Filename != "")
                    {
                         //如果内容改变
                         if (textBox1.Text != OriginalContent && MessageBox.Show( "文件已修改,是否保存?" , "保存文件" , MessageBoxButtons.YesNo) == DialogResult .Yes)
                        {
                            ShouldSave =  true;
                        }
                    }
                     else
                    {
                         //如果用户输入了内容,并制定了一个文件名
                         if (textBox1.Text != "" && saveFileDialog1.ShowDialog() == DialogResult.OK)
                        {
                            Filename = saveFileDialog1.FileName;
                            ShouldSave =  true;
                        }
                    }

                     if (ShouldSave)
                    {
                         try
                        {
                             File.WriteAllText(Filename, textBox1.Text);
                            OriginalContent = textBox1.Text;
                            lblInfo.Text =  "文件已保存" ;
                        }
                         catch
                        {
                            lblInfo.Text =  "文件保存失败!!" ;
                        }
                    }
                }
    6. 将“保存”方法save挂接到“保存”按钮,和窗体的关闭按钮上。
  10. 运行效果:
  11. 界面修改;
    1. 在窗体的 Icon 属性修改窗体图标;
    2. 在工程的 Properties 中修改程序图标;

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值