C#第二次作业

完成了目标一、目标二和目标三


目标一:“简易记事本”开发

要求:金旭亮老师课程内容一样,1.打开一个txt文件,进行修改并保存。2.创建一个新的txt文件保存

代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace MyNotePad
{
    public partial class frmEditor : Form
    {
        public frmEditor()
        {
            InitializeComponent();
        }
        private String OriginalContent = "";
        private String _FileName = "";
        public String FileName
        {
            get
            { return _FileName; }
            set
            {
                _FileName = value;
                Text = Path.GetFileName(value) + "-我的记事本";//得到FileName的值
            }
        }
        private void label1_Click(object sender, EventArgs e)
        {

        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            lblTimer.Text = DateTime.Now.ToString();
        }

        private void frmEditor_Load(object sender, EventArgs e)
        {
            lblTimer.Text = "";
            lblInfo.Text = "";
            Text = "无标题-我的记事本";
        }

        private void btnOpen_Click(object sender, EventArgs e)
        {
            Open();
        }

        private void Open()
        {
            if (openFileDialog1.ShowDialog() == DialogResult.OK)//按打开键,按确认后
            {
                FileName = openFileDialog1.FileName;//把文件名赋给FileName
                try
                {
                    OriginalContent = File.ReadAllText(FileName);//读取这个文件的内容赋给OriginalContent
                    txtEditor.Text = OriginalContent;//内容在文本框中显示
                }
                catch (Exception)
                {
                    lblInfo.Text = "无法打开文件";
                }
            }
        }
        private void Save()//保存文件
        {
            bool ShouldSave = false;
            //如果文件名不为空,表明当前是文本框中的内容是来自于文件
            if (FileName != "")
            {
                //如果内容己更改
                if (txtEditor.Text != OriginalContent
                    && MessageBox.Show("文件己修改,保存吗?",
                    "保存文件",
                    MessageBoxButtons.YesNo) == DialogResult.Yes)
                {
                    ShouldSave = true;//修改已更改,标记为True
                }
            }
            else
            {
                //如果用户输入了内容,并且指定了一个文件名
                if (txtEditor.Text != "" && saveFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    FileName = saveFileDialog1.FileName;
                    ShouldSave = true;
                }
            }

            if (ShouldSave)//ShouldSave标记为true后
            {
                try
                {
                    File.WriteAllText(FileName, txtEditor.Text);
                    OriginalContent = txtEditor.Text;
                    lblInfo.Text = "文件己保存";
                }
                catch (Exception)
                {
                    lblInfo.Text = "文件保存失败";
                }

            }
        }

        private void txtEditor_TextChanged(object sender, EventArgs e)
        {

        }

        private void btnSave_Click(object sender, EventArgs e)
        {
            Save();
        }

        private void frmEditor_FormClosing(object sender, FormClosingEventArgs e)//按了关闭键后要进行的
        {
            Save();
        }
    }
}
      运行结果截图:

图1:运行主页;图二:输入内容,另存为;图三:打开已存在的txt文件;图四:标题已改为打开的文件名

体会感想:这个简易记事本是跟着金旭亮老师一步一步完成的,对于整个WinForm开发有了一定的了解,对于控件的一些常用属性也有了一定的了解和认识。也了解了开发的一些细节,例如老师教了一个编程规范,不要把功能代码直接写到控件响应的事件中,可选中代码,右键--重构-提取方法。学习了一个anchor属性,十分实用。另外,对于中间的部分代码还有待学习和实践,不能很好理解透彻,需要加强使用实践。


目标二:“顺序图片显示器”开发

要求:有5张图片(编号分别为1.jpg2.jpg,……,5.jpg),窗体有3个控件(PictureBox2个按钮);窗体刚开始显示”1.jpg“,按”上一张“则显示”5.jpg“(循环显示),按”下一张“则显示”2.jpg“,依此类推。

              代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace test2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void pictureBox1_Click(object sender, EventArgs e)
        {

        }
        int i; string[] pictureName = { @"F:\\picture\\1.jpg", @"F:\\picture\\2.jpg", @"F:\\picture\\3.jpg", @"F:\\picture\\4.jpg", @"F:\\picture\\5.jpg" };
        private void NextPic_Click(object sender, EventArgs e)
        {
            Next();
        }
        private void Next()
        {
            i++;
            if (i > 4)
            { i = 0; }
            pictureBox1.Image = new Bitmap(pictureName[i]);
        }
        private void LastPic_Click(object sender, EventArgs e)
        {
            Last();
        }
        private void Last()
        {
            i--;
            if (i < 0)
            {
                i = 4;
            }
            pictureBox1.Image = new Bitmap(pictureName[i]);
        }
    }
}
运行结果截图:


到第一张按“上一张”到第五张图片,到第五张按“下一张”循环到第第一张,如此类推


体会感想:先完成控件的一些基本设置,到代码部分,把图片的路径放到一个数组中,要点在于循环的那里,我写了个if语句来实现这个循环,还有一个小细节就是打开的时候的显示,要在控件的Image属性中放入第一张照片,否则一运行,是空白的。这个是用PictureBox做的,我尝试用了ImageList这个控件做,这个控件用起来就比较方法,但是有个缺点就是像素很低,即使挑到最大的像素照片还是被压缩了,显示得不清楚。


目标三:“随机图片显示器”开发,并记录自程序运行后每张图片已经显示的次数,把次数保存到文本文件中
目标:有若干张图片(自己确定,不少于5张,命名方法自定),窗体有3个控件(PictureBox,按钮,label);按下“随机显示”按钮,则随机显示一张图片,并给出该图片显示的次数在右边的label中;同时在“关闭”窗体时,把每张图片目前已经显示的次数写入到指定文件中,方便下次程序运行时使用。

代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace RandomPic
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }


        private void button1_Click(object sender, EventArgs e)
        {
            Random1();
        }
        string[] pictureName = { @"F:\\RandomPicture\\1.jpg", @"F:\\RandomPicture\\2.jpg", @"F:\\RandomPicture\\3.jpg", @"F:\\RandomPicture\\4.jpg", @"F:\\RandomPicture\\5.jpg", @"F:\\RandomPicture\\6.jpg" };
        static FileStream fs1 = new FileStream("F:\\1.txt", FileMode.Open);

        static StreamReader sr = new StreamReader(fs1);

        static string aa = sr.ReadLine(); int a = int.Parse(aa);
        static string bb = sr.ReadLine(); int b = int.Parse(bb);
        static string cc = sr.ReadLine(); int c = int.Parse(cc);
        static string dd = sr.ReadLine(); int d = int.Parse(dd);
        static string ff = sr.ReadLine(); int f = int.Parse(ff);
        static string gg = sr.ReadLine(); int g = int.Parse(gg);

        public void Random1()
        {

            Random r = new Random();
            int RandKey = r.Next(0, 6);
            pictureBox1.Image = new Bitmap(pictureName[RandKey]);
            if (RandKey == 0)
            {

                a++;

                label1.Text = "显示次数:" + a.ToString();
            }

            else if (RandKey == 1)
            {
                b++;
                label1.Text = "显示次数:" + b.ToString();

            }
            else if (RandKey == 2)
            {

                c++;

                label1.Text = "显示次数:" + c.ToString();

            }
            else if (RandKey == 3)
            {

                d++;

                label1.Text = "显示次数:" + d.ToString();

            }
            else if (RandKey == 4)
            {

                f++;

                label1.Text = "显示次数:" + f.ToString();

            }
            else if (RandKey == 5)
            {

                g++;

                label1.Text = "显示次数:" + g.ToString();

            }


        }

        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            sr.Close();
            StreamWriter sw = new StreamWriter("F:\\1.txt", false);
            sw.WriteLine("{0}\r\n{1}\r\n{2}\r\n{3}\r\n{4}\r\n{5}", a, b, c, d, f, g);

            sw.Close();
            fs1.Close();

        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Text = "随机显示照片";
        }
    }
}

注意事项:要在F盘建立个1.txt文件,并且输入六行0,每行一个0,相当于初始化;有一个文件夹放六张使用的照片,依次改名为1.jpg~6.jpg,注意程序的路径。

运行结果截图:


体会感想:这次的要点在于怎么从txt读出原来的数据,和运行后把数据后重新写入txt中。我先做出可以随机显示,可以叠加显示次数,难点在于读写。原本想着每修改一次就写入一次,发现有很多问题,我就想到在关闭的时候一次写入,读的时候一次读出。出现过写入的数据没能把原来的覆盖,这句StreamWriter sw = new StreamWriter("F:\\1.txt", false);是关键,要设置为false。途中还遇到很多读写的问题,后来去查资料了解清楚StreamReader,StreamWrite等用法。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值