服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - 基于C#制作一个休息提醒闹钟的详细步骤

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

2023-03-09 13:58摔跤猫子 C#

小闹钟大家都应该很熟悉,它包括时间、事件,当达到某某时间时,事件发生了,并且还有一个提示信息,下面这篇文章主要给大家介绍了关于如何基于C#制作一个休息提醒闹钟的详细步骤,需要的朋友可以参考下

> 此文主要通过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 = @"SoftwareMicrosoftWindowsCurrentVersionRun";
                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}	 {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();    //隐藏窗口
            }
        }

总结

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

原文地址:https://blog.csdn.net/weixin_42794881/article/details/128741732

延伸 · 阅读

精彩推荐
  • C#Unity实现攻击范围检测并绘制检测区域

    Unity实现攻击范围检测并绘制检测区域

    这篇文章主要介绍了Unity实现攻击范围检测并绘制检测区域,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    画个小圆儿8222022-09-05
  • C#简单了解C#设计模式编程中的桥接模式

    简单了解C#设计模式编程中的桥接模式

    这篇文章主要介绍了C#设计模式编程中的桥接模式,桥接模式经常应用于解耦逻辑层与数据操作层,需要的朋友可以参考下...

    C#教程网10642021-11-12
  • C#C#自定义日志记录

    C#自定义日志记录

    这篇文章主要为大家详细介绍了C#自定义日志记录的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    深入学习ing12382021-12-07
  • C#C#算法之个位相加

    C#算法之个位相加

    这篇文章介绍了C#算法之个位相加,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...

    痴者工良9052022-12-20
  • C#C#连接MySQL数据库的方法步骤

    C#连接MySQL数据库的方法步骤

    最近两天在解决C#连接MySql数据库的问题,通过不同的从网上学习,最终找到了解决的办法,下面这篇文章主要给大家介绍了关于C#连接MySQL数据库的方法步骤,需...

    熊思宇5942023-02-28
  • C#Unity接入百度AI实现果蔬识别

    Unity接入百度AI实现果蔬识别

    本文将介绍如何利用Unity接入百度AI从而实现果蔬识别,可以做到识别近千种水果和蔬菜的名称,可自定义返回识别结果数。感兴趣的小伙伴可以了解一下...

    CoderZ10103502022-12-25
  • C#C#中Abstract 、Virtual和Override的使用及区别

    C#中Abstract 、Virtual和Override的使用及区别

    C#中virtual,abstract,override用于方法重载,子类覆盖了父类的相同方法,父类中的实现不可能再被外面调用。本文给大家重点介绍C#中Abstract 、Virtual和Overrid...

    雪人学习8862022-11-22
  • C#C#中Datetimepicker出现问题的解决方法

    C#中Datetimepicker出现问题的解决方法

    这篇文章主要给大家介绍了关于C#中Datetimepicker出现问题的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,...

    王银行7212022-03-05