系统小闹钟V1.0 C#程序小例

2024-04-24 08:18

本文主要是介绍系统小闹钟V1.0 C#程序小例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

因为发现自己经常计划好了做些什么事儿,到点儿了有时候经常忘,于是自己用C#写了一个系统闹钟程序。

目前是V1.0版本 后期还会继续优化。。

程序实例可在本网资源中下载http://download.csdn.net/detail/tskyfree/4239406

软件名称:Clock v1.0

软件功能:设定闹钟

具体详解:
                      左侧显示系统当前日期

                      显示系统当前时间:图形化表盘+数字化显示

                      区间模式:
                                 设定任务名称
                                 设定任务起止时间
                                 显示当前任务状态
                                 填写合理时间并设定,任务中可随时终止或退出程序

                     计时模式:
                                 设定任务名称
                                 设定距任务执行的倒计时时间
                                 显示当前任务状态
                                 填写合理时间并设定,任务中可随时终止或退出程序

                     窗体最小化后不显示在任务栏中,在右下侧托盘区显示小图标,点击小图标可还原  窗体

                     任务计时到达终止条件时:自动弹出提示,窗体置顶

                     支持快捷键操作 Alt+相应快捷键

作者:TskyFree

开发环境:visual studio 2010

日期:2012年4月

截图展示:

 

 

代码实现:

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 ClockApp
{public partial class Form1 : Form{//定义计时字段private string startTime;private string endTime;private int countDownLimit;public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){//初始化窗体initFrom();//功能初始化initClockPlay();initAreaModel();initCountDownModel();}//初始化窗体private void initFrom(){this.ShowInTaskbar = true;    //显示在任务栏中this.WindowState = FormWindowState.Normal; //窗体正常大小显示notifyIcon1.Visible = false;  //隐藏小图标}//窗体最小化处理private void Form1_SizeChanged(object sender, EventArgs e){if (this.WindowState == FormWindowState.Minimized){//窗体隐藏this.ShowInTaskbar = false;//快捷图标显示notifyIcon1.Visible = true;   //注意顺序notifyIcon1.BalloonTipText = "小闹钟";notifyIcon1.BalloonTipTitle = "提示";notifyIcon1.ShowBalloonTip(50);  //气球提示淡出}}//托盘图标点击事件private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e){this.ShowInTaskbar = true;    //显示在任务栏中this.WindowState = FormWindowState.Normal; //窗体正常大小显示notifyIcon1.Visible = false;  //隐藏小图标}        //窗体退出事件private void From_Close(object sender, EventArgs e){this.Close();}        //********************************************************************//左侧钟表计时private void timer1_Tick(object sender, EventArgs e){//更新显示系统时间DateTime dateNow = DateTime.Now;label2.Text = dateNow.ToString("HH:mm:ss");ClockPos posNow = new ClockPos();competeClockPos(dateNow, ref posNow);//更新时、分、秒针lineShape1.X1 = posNow.horX1;lineShape1.Y1 = posNow.horY1;lineShape1.X2 = posNow.horX2;lineShape1.Y2 = posNow.horY2;lineShape2.X1 = posNow.minX1;lineShape2.Y1 = posNow.minY1;lineShape2.X2 = posNow.minX2;lineShape2.Y2 = posNow.minY2;lineShape3.X1 = posNow.secX1;lineShape3.Y1 = posNow.secY1;lineShape3.X2 = posNow.secX2;lineShape3.Y2 = posNow.secY2;}//左侧钟表初始化private void initClockPlay(){//更新显示系统时间DateTime dateNow = DateTime.Now;label2.Text = dateNow.ToString("HH:mm:ss");ClockPos posNow = new ClockPos();competeClockPos(dateNow, ref posNow);//更新时、分、秒针lineShape1.X1 = posNow.horX1;lineShape1.Y1 = posNow.horY1;lineShape1.X2 = posNow.horX2;lineShape1.Y2 = posNow.horY2;lineShape2.X1 = posNow.minX1;lineShape2.Y1 = posNow.minY1;lineShape2.X2 = posNow.minX2;lineShape2.Y2 = posNow.minY2;lineShape3.X1 = posNow.secX1;lineShape3.Y1 = posNow.secY1;lineShape3.X2 = posNow.secX2;lineShape3.Y2 = posNow.secY2;//钟表开始计时timer1.Start();//显示当前日期DateTime date = DateTime.Now;label1.Text = date.ToString("yyyy年MM月dd日");//显示当前时间label2.Text = date.ToString("HH:mm:ss");}//计算表钟位置private void competeClockPos(DateTime dateTime,ref ClockPos pos){//计算钟表圆心int clockX = ovalShape1.Location.X + ovalShape1.Height / 2;int clockY = ovalShape1.Location.Y + ovalShape1.Height / 2;//得到当前时分秒int hor = dateTime.Hour%12;int min = dateTime.Minute;int sec = dateTime.Second;//计算坐标pos.horX1 = pos.minX1 = pos.secX1 = clockX;pos.horY1 = pos.minY1 = pos.secY1 = clockY;pos.horX2 = (int)(pos.horX1 + (pos.horLength * Math.Sin((hor / 12.0) * 2.0 * Math.PI)));pos.horY2 = (int)(pos.horY1 - (pos.horLength * Math.Cos((hor / 12.0) * 2.0 * Math.PI)));pos.minX2 = (int)(pos.minX1 + (pos.minLength * Math.Sin((min / 60.0) * 2.0 * Math.PI)));pos.minY2 = (int)(pos.minY1 - (pos.minLength * Math.Cos((min / 60.0) * 2.0 * Math.PI)));pos.secX2 = (int)(pos.secX1 + (pos.secLength * Math.Sin((sec / 60.0) * 2.0 * Math.PI)));pos.secY2 = (int)(pos.secY1 - (pos.secLength * Math.Cos((sec / 60.0) * 2.0 * Math.PI)));}//********************************************************************//区间模式计时private void timer2_Tick(object sender, EventArgs e){//检查是否时间到if (String.Compare(endTime,label2.Text) <= 0){//停止计时,提示用户timer2.Stop();//初始化窗体initFrom();this.TopMost = true;  //窗体置顶DialogResult msgBtn = MessageBox.Show("哎呀!"+textBox1.Text+"时间到了~","时间到!",MessageBoxButtons.OK,MessageBoxIcon.Information);while (DialogResult == DialogResult.OK){MessageBox.Show("\a");}//区间模式初始化initAreaModel();                }}//初始化区间模式private void initAreaModel(){//初始化当前状态label7.Text = "无任务";//初始化访问限制textBox1.Enabled = true;dateTimePicker1.Enabled = true;dateTimePicker2.Enabled = true;button1.Enabled = true;  //可设定button2.Enabled = false; //不可终止}//区间模式点击设定private void areaTimeSet(object sender, EventArgs e){//获取数据startTime = dateTimePicker1.Text;endTime = dateTimePicker2.Text;//检验起始和终止时间的合法性if ((String.Compare(startTime, label2.Text) <= 0) && (String.Compare(endTime, label2.Text) >= 0)){//开始计时timer2.Start();//修改其他访问性textBox1.Enabled = false;dateTimePicker1.Enabled = false;dateTimePicker2.Enabled = false;button1.Enabled = false;button2.Enabled = true;   //可随时终止//修改状态label7.Text = "任务中...\n\n开始于:" + startTime + "\n\n预计结束于:" + endTime;}elseMessageBox.Show("时间的设定与当前时间不合乎常理。\n请仔细检查,重新设定!", "出错了", MessageBoxButtons.OK, MessageBoxIcon.Error);}//区间模式点击终止private void areaTimeEnd(object sender, EventArgs e){//停止任务计时timer2.Stop();//重新初始化initAreaModel();}//********************************************************************//初始化倒计时模式private void initCountDownModel(){//初始化当前状态label14.Text = "无任务";//初始化访问限制textBox2.Enabled = true;textBox3.Enabled = true;textBox4.Enabled = true;textBox5.Enabled = true; button4.Enabled = true;  //可设定button6.Enabled = false; //不可终止}//倒计时模式计时private void timer3_Tick(object sender, EventArgs e){//更新状态countDownLimit--;int horLeft = countDownLimit / (60 * 60);                        //剩余小时int minLeft = (countDownLimit - horLeft*60*60) / 60;             //剩余分钟int secLeft = countDownLimit - horLeft * 60 * 60 - minLeft * 60; //剩余秒数label14.Text = "任务中...\n\n剩余时间:"+horLeft.ToString()+"小时"+minLeft+"分钟"+secLeft+"秒";//检查是否时间到if (0 == countDownLimit){timer3.Stop();//初始化窗体initFrom();this.TopMost = true;  //窗体置顶MessageBox.Show("哎呀!" + textBox2.Text + "时间到了~", "时间到!", MessageBoxButtons.OK, MessageBoxIcon.Information);//区间模式初始化initCountDownModel();                }}//倒计时模式点击设定private void CountDownTimeSet(object sender, EventArgs e){//获取数据countDownLimit = int.Parse(textBox3.Text)*60*60 + int.Parse(textBox4.Text)*60 + int.Parse(textBox5.Text);//检验倒计时时间的合法性if (countDownLimit <= 0) //不能是负数,不能超过24小时MessageBox.Show("倒计时不能是零或负数!\n请仔细检查,重新设定!", "出错了", MessageBoxButtons.OK, MessageBoxIcon.Error);else if(countDownLimit > 24 * 60 * 60)MessageBox.Show("倒计时不能超过一天!\n请仔细检查,重新设定!", "出错了", MessageBoxButtons.OK, MessageBoxIcon.Error);else    //倒计时设定正确{//开始计时timer3.Start();//修改其他访问性textBox2.Enabled = false;textBox3.Enabled = false;textBox4.Enabled = false;textBox5.Enabled = false;button4.Enabled = false;button6.Enabled = true;   //可随时终止//修改状态label14.Text = "任务中...";}}//倒计时模式点击终止private void CountDownTimeEnd(object sender, EventArgs e){//停止任务计时timer3.Stop();//重新初始化initCountDownModel();}}
}
 

public class ClockPos { public int horLength = 40;  //时针长度 public int minLength = 55;  //分针长度 public int secLength = 65;  //秒针长度

        //时分秒针的起始坐标 public int secX1;   public int secX2; public int secY1; public int secY2; public int minX1; public int minX2; public int minY1; public int minY2; public int horX1; public int horX2; public int horY1; public int horY2; }


 

 

 

 

这篇关于系统小闹钟V1.0 C#程序小例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/931215

相关文章

C#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

C#实现一键批量合并PDF文档

《C#实现一键批量合并PDF文档》这篇文章主要为大家详细介绍了如何使用C#实现一键批量合并PDF文档功能,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言效果展示功能实现1、添加文件2、文件分组(书签)3、定义页码范围4、自定义显示5、定义页面尺寸6、PDF批量合并7、其他方法

C#下Newtonsoft.Json的具体使用

《C#下Newtonsoft.Json的具体使用》Newtonsoft.Json是一个非常流行的C#JSON序列化和反序列化库,它可以方便地将C#对象转换为JSON格式,或者将JSON数据解析为C#对... 目录安装 Newtonsoft.json基本用法1. 序列化 C# 对象为 JSON2. 反序列化

JWT + 拦截器实现无状态登录系统

《JWT+拦截器实现无状态登录系统》JWT(JSONWebToken)提供了一种无状态的解决方案:用户登录后,服务器返回一个Token,后续请求携带该Token即可完成身份验证,无需服务器存储会话... 目录✅ 引言 一、JWT 是什么? 二、技术选型 三、项目结构 四、核心代码实现4.1 添加依赖(pom

C#文件复制异常:"未能找到文件"的解决方案与预防措施

《C#文件复制异常:未能找到文件的解决方案与预防措施》在C#开发中,文件操作是基础中的基础,但有时最基础的File.Copy()方法也会抛出令人困惑的异常,当targetFilePath设置为D:2... 目录一个看似简单的文件操作问题问题重现与错误分析错误代码示例错误信息根本原因分析全面解决方案1. 确保

基于C#实现PDF转图片的详细教程

《基于C#实现PDF转图片的详细教程》在数字化办公场景中,PDF文件的可视化处理需求日益增长,本文将围绕Spire.PDFfor.NET这一工具,详解如何通过C#将PDF转换为JPG、PNG等主流图片... 目录引言一、组件部署二、快速入门:PDF 转图片的核心 C# 代码三、分辨率设置 - 清晰度的决定因

C# LiteDB处理时间序列数据的高性能解决方案

《C#LiteDB处理时间序列数据的高性能解决方案》LiteDB作为.NET生态下的轻量级嵌入式NoSQL数据库,一直是时间序列处理的优选方案,本文将为大家大家简单介绍一下LiteDB处理时间序列数... 目录为什么选择LiteDB处理时间序列数据第一章:LiteDB时间序列数据模型设计1.1 核心设计原则

基于Python实现自动化邮件发送系统的完整指南

《基于Python实现自动化邮件发送系统的完整指南》在现代软件开发和自动化流程中,邮件通知是一个常见且实用的功能,无论是用于发送报告、告警信息还是用户提醒,通过Python实现自动化的邮件发送功能都能... 目录一、前言:二、项目概述三、配置文件 `.env` 解析四、代码结构解析1. 导入模块2. 加载环