首先声明一下:我是来撒狗粮的~哈哈~
程序员的女票一直是个世纪难题。
然而,有一名程序媛作为女票更是难上加难~
问题来了:程序媛女票生病了,工作太忙不记得吃药怎么办?
于是,桌面级备忘提醒神器应时而生(休息时间随便写着玩的,没什么技术含量,纯属娱乐)
话不多说,代码如下:
-
前台代码
其中字体 DFWawaW5 为引入的第三方字体库。可以换为任意基础字体,如果也想引入第三方字体库,可自行查阅资料。
<Window x:Class="TimerRemind.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="timerRemind" Height="280" Width="430" WindowStyle="None" ResizeMode="NoResize" Background="Transparent" Topmost="True" WindowStartupLocation="CenterScreen" Loaded="Grid_Loaded_1" WindowState="Minimized" ShowInTaskbar="False" AllowsTransparency="True" MouseDown="Window_MouseDown_1"> <Grid Margin="0,0,0,0"> <Label Name="L_RemindText" Content="Hi~" Background="Transparent" Foreground="Transparent" HorizontalAlignment="Center" VerticalContentAlignment="Center" FontSize="58" FontWeight="Bold" FontFamily="{StaticResource ResourceKey=DFWaWaW5}" MouseDown="L_RemindText_MouseDown"> </Label> </Grid> </Window>
-
后台代码
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Threading; using System.Xml; namespace TimerRemind { /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class MainWindow : Window { //创建定时器对象 DispatcherTimer dispatcherTimer = new DispatcherTimer(); //定义TimeSpan对象用来倒计时 TimeSpan ts = new TimeSpan(0, 0, 0); //默认提示保留的时间。时分秒。以 59 秒为例 const int WAITING_HOURS = 0; const int WAITING_MINUTES = 0; const int WAITING_SECONDS = 59; public MainWindow() { InitializeComponent(); //绑定计时器事件,时间间隔为 1 秒 dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick); dispatcherTimer.Interval = new TimeSpan(0, 0, 1); dispatcherTimer.IsEnabled = true; } /// <summary> /// 窗体加载时开启定时器,读取xml文档 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Grid_Loaded_1(object sender, RoutedEventArgs e) { //窗体加载默认最小化 WindowState = WindowState.Minimized; //开启计时器 dispatcherTimer.Start(); } /// <summary> /// 计时器事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void dispatcherTimer_Tick(object sender, EventArgs e) { //读取xml文档 var eList = ReadLineXML("reminder.xml"); var current_time = DateTime.Now.ToString("HH:mm:ss"); var rm = new Random(); //随机字体颜色 int r1 = rm.Next(50, 256); int r2 = rm.Next(50, 256); int r3 = rm.Next(50, 256); //随机位置,为了美观,四周空出 30 像素 Top = rm.Next(30, Convert.ToInt32(SystemParameters.PrimaryScreenHeight - Height) - 30); Left = rm.Next(30, Convert.ToInt32(SystemParameters.PrimaryScreenWidth - Width) - 30); foreach (var item in eList) { //读取 xml 文档结点属性 var time = item["time"]; var text = item["text"]; //如果为当前时间 if (current_time == time) { //重置倒计时 ts = new TimeSpan(WAITING_HOURS, WAITING_MINUTES, WAITING_SECONDS); //改变提示信息 L_RemindText.Content = text; //显示窗体 WindowState = WindowState.Normal; } //随机颜色 L_RemindText.Foreground = new SolidColorBrush(Color.FromArgb(122, Convert.ToByte(r1), Convert.ToByte(r2), Convert.ToByte(r3))); } //计时器 - 1 秒 ts = ts.Subtract(new TimeSpan(0, 0, 1)); //计时结束 if (ts.TotalSeconds < 0.0) { //字体颜色变为透明 窗体最小化隐藏 L_RemindText.Foreground = new SolidColorBrush(Color.FromArgb(0, 255, 255, 255)); WindowState = WindowState.Minimized; } } /// <summary> /// 读取XML文档 /// </summary> /// <param name="fileName"></param> private List<Dictionary<string, string>> ReadLineXML(string fileName) { List<Dictionary<string, string>> eList = new List<Dictionary<string,string>>(); XmlDocument xml = new XmlDocument(); if (string.IsNullOrEmpty(fileName) || !File.Exists(fileName)) { return eList; } xml.Load(fileName); XmlElement root = xml.DocumentElement;//获取根节点 XmlNodeList xnl = xml.SelectNodes("/reminder/event"); foreach (XmlNode item in xnl) { Dictionary<string, string> dic = new Dictionary<string, string>(); dic.Add("time", item.Attributes["time"].Value); dic.Add("text", item.Attributes["text"].Value); eList.Add(dic); } return eList; } /// <summary> /// MouseDown to Close /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void L_RemindText_MouseDown(object sender, MouseButtonEventArgs e) { L_RemindText.Foreground = new SolidColorBrush(Color.FromArgb(0, 255, 255, 255)); WindowState = WindowState.Minimized; } private void Window_MouseDown_1(object sender, MouseButtonEventArgs e) { L_RemindText.Foreground = new SolidColorBrush(Color.FromArgb(0, 255, 255, 255)); WindowState = WindowState.Minimized; } } }
-
reminder.xml
<reminder> <event time="15:30:00" text="小丫头~记得吃药啦 ~"> </event> <event time="16:00:00" text=" *-* 药吃完了吗?"> </event> </reminder>
由于本身就是闲余时间娱乐,所以信息的保存部分没有写,需要手动使用 xml 文档编辑需要提醒内容,使用时只需要将要提醒的时间和内容编辑入 xml 文档即可,xml 文档需要与 exe 文件同一目录
效果如下
鼠标点击提示信息可以关闭哦~~~