WPF 闹钟定时弹出提醒窗口
选择定时模式,选择提醒模式,输入你想在提醒窗口上显示的内容。点击START按钮即可开始定时。当到达指定定时时间,就会弹出提醒窗口。
背景
现在人们的工作压力越来越大,很多人为了尽快完成工作,经常一坐到座位上就进入忘我状态,直到膀胱提醒他该暂停一下工作,才离开座位。长期的久坐已经给这群人带来了很多身体上的不适,甚至疾病。长期久坐会导致血液循环不良,消化减退,肩周炎劲椎病,脱发,甚至提前进入更年期。博主最近就发现颈椎不舒服,浑身肌肉酸痛,甚至发际线都在往上移。这跟我每天的工作状态密切相关,由于博主过分热爱工作,一旦进入工作状态就废寝忘食,经常坐下来就是半天。所以我开发了这个小程序,让它提醒我要定时起来活动一下。
功能介绍
- 定时模式: 研究标明,每过一个小时起来活动一下身体是最好的时间间隔。定时模式的前两个选项分别是:整点:即每到整点提醒。半点:即每到整半点提醒。 如果这两种模式不适合你,还有第三个模式,自定义模式:即由你输入任意时间,单位/分钟。
- 提醒模式: 提醒模式也分为三种,单次、五次、自定义时间,单位/分钟(我称之为狂躁模式) 。
次数的意思为:提醒窗口弹出的次数,只有你点击关闭窗口后才会再次弹出。
- 显示内容: 即提醒窗口上显示的内容。输入显示内容后,点击START按钮即可开始定时。
思路: 利用System.Timers.Timer 产生1ms定时,在每次定时事件Timer_Tick内对当前时间判断,如果到达定时时间就弹出Form窗体。
总结:
1.还没有领悟面对对象编程的思维。定义了很多公共字段,标志位等。但是功能上是可以的,也做了挺长时间,从0开始,不会就百度,先不修改了,交作业吧。
2.对数据绑定还是不懂, Binding = " ",path = " "。有时候要Path,有时候不用。对Combobox的数据选择也还是很迷惑。虽然网上有很多专门的文章,但是看了当时感觉明白了,到用的时候就不会了。
3.这玩意儿自学真的太难了(本身不是这个专业),一点专业基础都没有,全新的领域,真难啊。另外英语好真的很有帮助,很多函数,类,命名空间都是按照功能来命名的。不用每遇到一个都去百度,或者上MSDN。
致谢 感谢网络上各位大佬的文章,为我及时解惑答疑。包括但不局限于以下的每篇文章。
下载
安装包及源代码链接:https://pan.baidu.com/s/1NZQJ0z9FkpwJGVG9ywasIA 密码:ahpg
演示 视频链接: https://v.youku.com/v_show/id_XNDIzMDYwNjQ4MA==.html?spm=a2h0k.11417342.soresults.dtitle
Xaml.CS部分代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Threading;
using System.Windows.Forms;
using System.Drawing;
using System.ComponentModel;
using System.Runtime.InteropServices;
using System.Windows.Media.Animation;
namespace AlarmClock
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public static uint gTimeTicks = 0;
public int FormShowTimes = 0;
public bool ItsTimeToShowForm = false;
public bool LastItsTimeToShowForm = false;
public bool IWantStartAlarmClock = false;
public StartTiming _startTiming;
public DateTime TheAlarmTime;
public DateTime RestTime;
public TimeMode _timeModeSec;
public WarnMode _warnMode;
public Form _warnForm;
public Form _warnFormWarnInput;
public Form _warnFormTimeInput;
public System.Windows.Forms.TextBox _textBoxShowContent;
public System.Windows.Forms.TextBox _textBoxWarn;
public System.Windows.Forms.TextBox _textBoxTime;
public Graphics _clockGraphics;
public Time2Angle _tm2angle;
public NotifyIcon notifyIcon;
public MainWindow()
{
InitializeComponent();
WarnModeComboBox.ItemsSource = WarnModeList;
TimeModeComboBox.ItemsSource = TimeModeList;
InitTimer();
_startTiming = new StartTiming();
_tm2angle = new Time2Angle();
CanvasTime.DataContext = _tm2angle;
DrawScale();
Window_MainWindow.Closing += Window_MainWindow_Closing;
}
private void Window_MainWindow_Closing(object sender, CancelEventArgs e)
{
//throw new NotImplementedExcepti