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

作者:摔跤猫子 时间:2022-01-23 06:14:38 

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

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

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

实现流程

1.1、创建项目

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

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

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

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

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

1.2、时间间隔配置页

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

/// <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指每当经过指定的时间间隔时发生的事件)

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

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

private void timer1_Tick(object sender, EventArgs e)
{

}
在事件中首先获取窗体NumericUupDowm控件的值,就是用户所输入的分钟数。

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

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

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

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标签到窗体上,分别用于图片、提示文字、倒计时等显示

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

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

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

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

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

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

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

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

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

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

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

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

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

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播放铃声同步提醒。

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

//播放声音
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控件,用于勾选是否开启自启。

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

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

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

/// <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事件生成对应的事件代码,调用上述函数即可实现开机自启效果。

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

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

1.5、日志记录

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

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

/// <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();
           }
       }
在窗体事件中调用上述函数。

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

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

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

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

1.6、最小化提示

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

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

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

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();    //隐藏窗口
           }
       }

来源:https://blog.csdn.net/weixin_42794881/article/details/128741732

标签:c#,闹钟,休息提醒
0
投稿

猜你喜欢

  • JavaWeb登录界面登录失败在同一页面进行提示的解决

    2023-11-26 15:51:34
  • java中的文件操作总结(干货)

    2023-11-08 22:24:29
  • 浅谈Unity中的Shader

    2022-03-25 05:15:07
  • SpringBoot参数校验与国际化使用教程

    2021-11-13 15:52:21
  • mybatis中数据加密与解密的实现

    2022-04-21 22:49:16
  • 详解springboot集成mybatis xml方式

    2022-08-05 09:04:54
  • Java 抽象类定义与方法实例详解

    2022-10-20 09:26:38
  • SpringBoot实现WebSocket即时通讯的示例代码

    2022-06-14 19:59:36
  • Java基于命令模式实现邮局发信功能详解

    2023-07-03 04:57:25
  • 深入理解C++中public、protected及private用法

    2023-07-02 11:30:17
  • @Value如何获取yml和properties配置参数

    2021-12-12 13:24:01
  • Java关于MyBatis缓存详解

    2021-11-01 00:40:20
  • Java实现图片验证码功能

    2021-12-07 12:58:55
  • 基于Spring Mvc实现的Excel文件上传下载示例

    2022-01-22 02:02:56
  • 关于LinkedList集合对元素进行增查删操作

    2022-09-23 11:48:45
  • SpringMVC + servlet3.0 文件上传的配置和实现代码

    2023-08-08 16:42:43
  • mybatis 查询返回Map<String,Object>类型

    2023-11-14 07:06:09
  • JAVA实现单例模式的四种方法和一些特点

    2023-11-02 05:38:20
  • SpringMVC 向jsp页面传递数据库读取到的值方法

    2022-03-29 00:51:15
  • 详解Spring Boot集成MyBatis(注解方式)

    2023-10-03 17:45:47
  • asp之家 软件编程 m.aspxhome.com