C# - 音乐小闹钟_BetaV2.0

  • 时间:2017-11-21 作者:byzqy

 介绍:

  虽然上一版本基本实现了闹钟的功能,但是界面、功能、用户体验(简直谈不上体验^_^),以及众多的bug,所以升级,刻不容缓!

还是先看一下BetaV2.0的最终效果:

  

工具/原料:

  (操作系统:Windos 7/10,开发工具:Visual Studio 2015,目标框架:.NET Framework 4)

  Windows窗体(1个)

  用到的控件:Label、ComboBox、Button、CheckBox、PictureBox

  新增的控件:Panel(2个)

  组件:Timer

  素材:

  ①wav格式的音频文件(若干)

  

  ②txt格式文本文件(若干,用来存放歌曲对应歌词文本)

  

  ③jpg/gif格式图片(若干,用来显示歌曲对应的歌手)

  

  ④gif格式图片(1张,用来表示歌曲处于播放状态,替代上一版本的音符图片)

  

代码/逻辑:

  用Windows小画家画了一张图,帮助理清代码结构。(右键在新标签页查看清晰原图!)

部分代码:(来自文件:Form.cs)

        //自定方法:初始化
        private void startup()      //登录成功后初始化用户界面
        {
            //time to string 界面显示当前时间
            labelCurrentValue.Text = DateTime.Now.ToString();
            //int to string 选择框默认显示时间(位数不足2位,前面补0.)
            comboBox1.Text = Convert.ToString(DateTime.Now.Hour).PadLeft(2, '0');
            comboBox2.Text = Convert.ToString(DateTime.Now.Minute).PadLeft(2, '0');
            comboBox3.Text = Convert.ToString(DateTime.Now.Second).PadLeft(2, '0');
            //为界面和后台设置闹钟初始默认值
            alarm_hour = DateTime.Now.Hour;
            alarm_minute = DateTime.Now.Minute;
            alarm_second = DateTime.Now.Second;
            alarm_time = 00 + ":" + 00 + ":" + 00;

            //time to string 闹钟显示时间
            labelAlarmValue.Text = Convert.ToDateTime(alarm_time).ToString();

            //默认铃声编号
            comboBox4.Text = Convert.ToString(1);
            ringNumber = 1;

            label3.Text = "";

            //检测文件夹内文件个数
            string musicDirPath = Application.StartupPath + "\\music\\";
            System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(musicDirPath);
            fileNum = dir.GetFiles().Length;


            //动态获取铃声数量选择列表
            IList<string> list = new List<string>();

            for (int a = 1; a <= fileNum; a++)
            {
                list.Add(a.ToString());
            }
            comboBox4.DataSource = list;
        }

        //登录按钮
        private void buttonLogin_Click(object sender, EventArgs e)
        {
            string name = textBoxName.Text.Trim();
            string pwd = textBoxPwd.Text;

            if (checkBoxRememberPwd.Checked)
            {
            }
            else
            {
                if (name == "admin" && pwd == "admin")
                {
                    //登录成功
                    panelLoginFace.Visible = false;
                    panelUserFace.Visible = true;

                    //开放窗体最大化按钮功能
                    this.MaximizeBox = true;

                    //开放歌手和歌词控件显示功能
                    pictureBoxSinger.Visible = true;
                    textBoxLyrics.Visible = true;

                    //初始化用户界面
                    startup();

                } else if(name == "" || pwd == "")
                {
                    if (name == "")
                    {
                        MessageBox.Show("用户名不能为空!");
                    }
                    else if(pwd == "")
                    {
                        MessageBox.Show("请输入密码!");
                    }
                    
                }
                else
                {
                    MessageBox.Show("用户名或密码输入错误,请重新输入!");
                    textBoxName.Clear();
                    textBoxPwd.Clear();
                    textBoxName.Focus();//让文本获得焦点
                }
            }

            
        }

        //重置按钮
        private void buttonReset_Click(object sender, EventArgs e)
        {
            textBoxName.Clear();
            textBoxPwd.Clear();
            textBoxName.Focus();//让文本获得焦点
        }

        //鼠标光标进入控件区域
        private void labelAuthor_MouseEnter(object sender, EventArgs e)
        {
            pictureBoxAuthor.Visible = true;
        }

        //鼠标光标离开控件区域
        private void labelAuthor_MouseLeave(object sender, EventArgs e)
        {
            pictureBoxAuthor.Visible = false;
        }
View Code

实现的功能/存在的问题:

1、新增了登录界面,不过登录界面没有使用“窗体”,而是使用 Panel 控件的 Visible 属性,通过登录前显示,登录后隐藏来完成的!用户名和密码都是写死在code里的。虽然设置一个登录界面没什么意义,不过也算是向个性化和定制化迈出了一小步![尴尬脸^_^] Panel 的一个好处就是可以将众多的控件给包起来,方便统一管理:比如说移动,或者更换背景颜色!

2、在PictureBox控件种装入自己的微信二维码截图,也是一种时髦的介绍自己的方式。同样是通过 PictureBox 的 Visible 属性来实现的!为Label控件(“@作者”)添加 MouseEnter 事件和 MouseLeave 事件,在分别在两个事件中设置 PictureBox 的显示和隐藏。当鼠标光标悬停于 Label 上时,就会看到效果!

3、……so many bugs!ˇˍˇ 主要的铃声试听部分仍需改善~ (敬请期待BetaV3.0)


 

--The End!(本篇完)

 

posted @ 2017-11-22 10:39  菊次郎的秋天  阅读(460)  评论(0编辑  收藏  举报