当前位置 : 主页 > 网络编程 > c#编程 >

基于C#制作一个休息提醒闹钟的详细步骤

来源:互联网 收集:自由互联 发布时间:2023-03-22
目录 实现流程 1.1、创建项目 1.2、时间间隔配置页 1.3、闹钟提醒页 1.4、开机自启动配置 1.5、日志记录 1.6、最小化提示 总结 此文主要通过WinForm来制作一个休息提醒闹钟,通过设置时间
目录
  • 实现流程
    • 1.1、创建项目
    • 1.2、时间间隔配置页
    • 1.3、闹钟提醒页
    • 1.4、开机自启动配置
    • 1.5、日志记录
    • 1.6、最小化提示
  • 总结

    > 此文主要通过WinForm来制作一个休息提醒闹钟,通过设置时间间隔进行提醒,避免沉浸式的投入到工作或者学习当中,战斗的同时也要照顾好自己。

    实现流程

    1.1、创建项目

    打开Visual Studio,右侧选择创建新项目。

    搜索框输入winform,选择windows窗体应用,填写对应的保存路径点击下一步,创建成功后如下图,会有一个默认打开的Form窗体。

    1.2、时间间隔配置页

    准备闹钟图片素材,修改窗体图标及标题样式。

    通过设置窗体Text以及Icon等属性进行配置,同时配置StartPosition属性值为CenterScreen,让窗体默认居中显示。

    在左侧工具箱拖拽Label、Buttom、NumericUpDown、timer等控件,实现页面大致布局。

    双击窗体,进入代码界面,在顶部定义一个计数器字段。

    private int MinCounter = 0;
    
    在窗体编辑界面上双击启动按钮,生成对应的点击事件代码。

    在启动按钮点击事件中增加业务逻辑代码如下:还原计数器为0、禁用启动按钮、释放停止按钮、启动定时器。

    /// <summary>
    /// 启动按钮点击事件
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void btnStart_Click(object sender, EventArgs e)
    {
        MinCounter = 0;
        btnStart.Enabled = false;
        btnEnd.Enabled = true;
        timer1.Enabled = true;
    }
    
    在窗体编辑页单击timer控件,双击Tick,进入到对应的代码中。(Tick指每当经过指定的时间间隔时发生的事件)

    private void timer1_Tick(object sender, EventArgs e)
    {
      
    }
    
    在事件中首先获取窗体NumericUupDowm控件的值,就是用户所输入的分钟数。

    int min = tbMin.Value;
    
    业务代码:如果计数器等于用户所输入的分钟数,则跳转提示窗体并禁用timer控件,否则计数器的值+1。

      private void timer1_Tick(object sender, EventArgs e)
      {
            if (MinCounter == tbMin.Value)
            {
                timer1.Enabled = false;
                using (message msg = new message(tbMin.Value.ToString()))
                {
                    tip.ShowDialog();
                }
                MinCounter = 0;
                timer1.Enabled = true;
            }
            else
            {
                MinCounter++;
            }
        }
    

    1.3、闹钟提醒页

    选中项目新建一个窗体,名字自定义,按上述步骤修改窗体标题及图标属性;随后在工具箱拖拽三个label标签到窗体上,分别用于图片、提示文字、倒计时等显示

    准备一个素材图,并通过其中一个label控件的image属性进行导入,然后修改AutoSize属性值为False。

    在提示窗体中定义几个字段,分别用于控制窗体关闭倒计时、显示已工作时长等作用。

    private static int CLOSE_SEC = 300;
    private string STR_MIN = "";
    private int RUN_SEC = 0;
    
    在窗体事件中接收传递过来的参数,并进行显示。

     public TipForm(string _min)
     {
         STR_MIN = _min;
         InitializeComponent();
     }
    
    窗体加载事件中设置label2的Text属性为提示信息。

    label2.Text = "亲,您又工作了"+ STR_MIN + "分钟,该休息一下啦!";
    
    在工具箱拖拽一个timer控件到窗体上,通过其Tick属性设置倒计时秒数显示及窗体关闭事件。

     private void timer1_Tick(object sender, EventArgs e)
     {
         RUN_SEC++;
         if (RUN_SEC >= CLOSE_SEC)
         {
             RUN_SEC = 0;
             Close();
         } else
         {
             label2.Text = "[" + (CLOSE_SEC - RUN_SEC) + "秒后自动关闭]";
         }
     }
    
    可以再进行优化,窗体加载时通过Player播放铃声同步提醒。

     	//播放声音
    	string wavFile = Application.StartupPath + @"\alarm.wav";
    	Stream sm = null;
    	if (File.Exists(wavFile))
    	{
    	sm = new FileStream(wavFile, FileMode.Open);
    	} else
    	{
    	sm = Properties.Resources.Alarm02;
    	}
    	SoundPlayer player = new SoundPlayer(sm);
    	player.Play();
    	player.Dispose();
    

    1.4、开机自启动配置

    回到Form1窗体,在工具箱拖拽出一个checkBox控件,用于勾选是否开启自启。

    实现一个函数,设置应用程序开机自动运行。

     		/// <summary>
            /// 设置应用程序开机自动运行
            /// </summary>
            /// <param name="fileName">应用程序的文件名</param>
            /// <param name="isAutoRun">是否自动运行,为false时,取消自动运行</param>
            /// <returns>返回1成功,非1不成功</returns>
            public static String SetAutoRunByReg(string fileName, bool isAutoRun)
            {
                string reSet = string.Empty;
                RegistryKey reg = null;
                try
                {
                    if (!File.Exists(fileName))
                    {
                        reSet = "设置/取消自动启动发生异常:" + fileName + "文件不存在!";
                    }
                    string key = @"Software\Microsoft\Windows\CurrentVersion\Run";
                    string name = Path.GetFileName(fileName);
                    reg = Registry.LocalMachine.OpenSubKey(key, true);
                    if (reg == null)
                    {
                        reg = Registry.LocalMachine.CreateSubKey(key);
                    }
                    if (isAutoRun)
                    {
                        reg.SetValue(name, fileName);
                        reSet = "1";
                    }
                    else
                    {
                        if (reg.GetValue(name) != null)
                        {
                            reg.DeleteValue(name);
                        }
                        reSet = "1";
                    }
    
                }
                catch (Exception ex)
                {
                    reSet = "设置/取消自动启动发生异常:[" + ex.Message + "],请尝试用管理员身份运行!";
                }
                finally
                {
                    if (reg != null)
                    {
                        reg.Close();
                    }
                }
                return reSet;
            }
    双击checkbox的click事件生成对应的事件代码,调用上述函数即可实现开机自启效果。

     //开机自动启动并最小化
     private void chkBoxBoot_Click(object sender, EventArgs e)
     {
         string res = SetAutoRunByReg(Application.ExecutablePath, chkBoxBoot.Checked);
         if (res != "1")
         {
             MessageBox.Show(res);
         }
     }
    

    1.5、日志记录

    在Form1窗体定义一个函数记录启动以及操作日志并存入文本。

     /// <summary>
            /// 写日志
            /// </summary>
            /// <param name="msg">日志文本</param>
            /// <param name="add_datetime">是否添加时间戳</param>
            public static void writeLog(string msg, bool add_datetime)
            {
                string logfile = Application.StartupPath + "/log.txt";
                using (StreamWriter w = File.AppendText(logfile))
                {
                    if (add_datetime)
                    {
                        w.WriteLine("{0}\t {1}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss", DateTimeFormatInfo.InvariantInfo), msg);
                    }
                    else
                    {
                        w.WriteLine("{0}", msg);
                    }
    
                    w.Flush();
                    w.Close();
                }
            }
    
    在窗体事件中调用上述函数。

    在项目文件夹-> bin文件夹 -> Debug文件夹查看日志。

    1.6、最小化提示

    通过Form1的Closing、Resize等属性进行配置,实现windows提示效果。

      private void Form1_FormClosing(object sender, FormClosingEventArgs e)
            {
                //注意判断关闭事件Reason来源于窗体按钮,否则用菜单退出时无法退出!
                if (e.CloseReason == CloseReason.UserClosing)
                {
                    e.Cancel = true;    //取消"关闭窗口"事件
                    this.WindowState = FormWindowState.Minimized;    //使关闭时窗口向右下角缩小的效果
                    notifyIcon1.Visible = true;
                    notifyIcon1.ShowBalloonTip(3000, "提示", "程序未退出,它在这里!", ToolTipIcon.Info);
                    this.Hide();
                    return;
                }
            }
    
            private void Form1_Resize(object sender, EventArgs e)
            {
                if (this.WindowState == FormWindowState.Minimized)    //最小化到系统托盘
                {
                    notifyIcon1.Visible = true;    //显示托盘图标
                    notifyIcon1.ShowBalloonTip(3000, "提示", "程序未退出,它在这里!", ToolTipIcon.Info);
                    this.Hide();    //隐藏窗口
                }
            }
    

    总结

    到此这篇关于基于C#制作一个休息提醒闹钟的文章就介绍到这了,更多相关C#制作休息提醒闹钟内容请搜索自由互联以前的文章或继续浏览下面的相关文章希望大家以后多多支持自由互联!

    上一篇:基于C#实现一个温湿度监测小工具
    下一篇:没有了
    网友评论