前言
一、计算日期
计算当前日期距离今天之前某个日期之间的时间差。
1、效果
开始运行显示:
点击图片任意位置:
2、界面设计
3、代码
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 计算日期
{
public partial class Form1 : Form
{
public bool isClick = false;
public Form1()
{
InitializeComponent();
//toolTip1控件
toolTip1.ToolTipTitle = "嘿嘿";
toolTip1.SetToolTip(this.pictureBox1, "徒弟喜欢她就点一下吧!");
}
private void Form1_Load(object sender, EventArgs e)
{
//初始化界面大小
this.Width = 210;
this.Height = 303;
this.MaximumSize = new Size(210, 303);
//计算日期
int days = (DateTime.Now - DateTime.Parse("2011-12-19")).Days;
int day=(DateTime.Parse("2012-5-19")-DateTime.Now).Days;
int hours=(DateTime.Parse("2012-5-19")-DateTime.Now).Hours;
int minutes=(DateTime.Parse("2012-5-19")-DateTime.Now).Minutes;
int seconds=(DateTime.Parse("2012-5-19")-DateTime.Now).Seconds;
label2.Text = DateTime.Now.ToLongDateString() + DateTime.Now.ToLongTimeString();
label5.Text = days + "天";
label6.Text = day + "天" + hours + "时" + minutes + "分" + seconds + "秒";
}
//定时器每秒中更新日期
private void timer1_Tick(object sender, EventArgs e)
{
int day = (DateTime.Parse("2012-5-19") - DateTime.Now).Days;
int hours = (DateTime.Parse("2012-5-19") - DateTime.Now).Hours;
int minutes = (DateTime.Parse("2012-5-19") - DateTime.Now).Minutes;
int seconds = (DateTime.Parse("2012-5-19") - DateTime.Now).Seconds;
label2.Text = DateTime.Now.ToLongDateString() + DateTime.Now.ToLongTimeString();
label6.Text = day + "天" + hours + "时" + minutes + "分" + seconds + "秒";
}
//界面的大小缩放
private void pictureBox1_Click(object sender, EventArgs e)
{
if (!isClick)
{
isClick = true;
this.MaximumSize = new Size(609, 303);
this.Width = 609;
this.Height = 303;
}
else
{
isClick = false;
this.Width = 210;
this.Height = 303;
this.MaximumSize = new Size(210, 303);
}
}
}
}
二、日期提醒器
1、效果
2、界面设计
3、代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
namespace DataReminderCS
{
public partial class ReminderForm : Form
{
private Dictionary<DateTime, string> _reminderData = new Dictionary<DateTime, string>();
public ReminderForm()
{
InitializeComponent();
}
/// <summary>
/// 添加按钮
/// </summary>
private void btnAdd_Click(object sender, EventArgs e)
{
_reminderData[mcDate.SelectionStart] = tbDateContent.Text;
string dateText = mcDate.SelectionStart.ToShortDateString();
//没有在lvDateList中找到当天的日程安排,则添加。
if (lvDateList.FindItemWithText(dateText) == null)
lvDateList.Items.Add(dateText);
}
//日期控件选择日期
private void mcDate_DateSelected(object sender, DateRangeEventArgs e)
{
if (_reminderData.ContainsKey(e.Start))
tbDateContent.Text = _reminderData[e.Start];
else
tbDateContent.Text = string.Empty;
}
private void cmsDateList_Opening(object sender, CancelEventArgs e)
{
if (lvDateList.SelectedItems.Count == 0)
{
e.Cancel = true;
}
}
//右键编辑
private void tsmiEdit_Click(object sender, EventArgs e)
{
mcDate.SelectionStart = DateTime.Parse(this.lvDateList.SelectedItems[0].Text);
tbDateContent.Text = _reminderData[mcDate.SelectionStart];
}
//右键删除
private void tsmiDelete_Click(object sender, EventArgs e)
{
DateTime dt = DateTime.Parse(this.lvDateList.SelectedItems[0].Text);
lvDateList.Items.Remove(this.lvDateList.SelectedItems[0]);
_reminderData.Remove(dt);
if (mcDate.SelectionStart == dt)
{
tbDateContent.Text = String.Empty;
}
}
/// <summary>
/// ToolTip提示
/// </summary>
private void lvDateList_SelectedIndexChanged(object sender, EventArgs e)
{
if (lvDateList.SelectedItems.Count > 0)
{
ListViewItem currentItem = lvDateList.SelectedItems[0];
ttDateContent.ToolTipTitle = currentItem.Text;
Point showPoint = Point.Add(currentItem.Position, new Size(60, 0));
ttDateContent.Show(_reminderData[DateTime.Parse(currentItem.Text)], lvDateList, showPoint, 5000);
}
}
/// <summary>
/// 序列化
/// </summary>
private void ReminderForm_FormClosing(object sender, FormClosingEventArgs e)
{
if (!cbAutoSave.Checked)
{
return;
}
try
{
BinaryFormatter bf = new BinaryFormatter();
using(FileStream fs=new FileStream("Data.dat",FileMode.Create))
{
bf.Serialize(fs, _reminderData);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
/// <summary>
/// 反序列化
/// </summary>
private void ReminderForm_Load(object sender, EventArgs e)
{
if (File.Exists("Data.dat"))
{
try
{
BinaryFormatter bf = new BinaryFormatter();
using (FileStream fs = new FileStream("Data.dat", FileMode.Open))
{
_reminderData = (Dictionary<DateTime, string>)bf.Deserialize(fs);
}
foreach (DateTime dt in _reminderData.Keys)
{
lvDateList.Items.Add(dt.ToShortDateString());
}
if (_reminderData.ContainsKey(mcDate.SelectionStart))
{
tbDateContent.Text = _reminderData[DateTime.Parse(mcDate.SelectionStart.ToShortDateString())];
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
/// <summary>
/// 验证方法
/// </summary>
/// <param name="data">要验证的字符串</param>
/// <returns></returns>
private bool ValidateFormat(string data)
{
int timeSplitIndex = data.IndexOf('-');
int dateSplitIndex = data.IndexOf(' ');
//如果没有空格或-,则认为格式不合法。
if (timeSplitIndex == -1 || dateSplitIndex == -1)
return false;
//尝试将时间转化为DateTime类型
try
{
string startTime = data.Substring(0, timeSplitIndex);
string endTime = data.Substring(timeSplitIndex + 1, dateSplitIndex - timeSplitIndex - 1);
DateTime startDateTime = DateTime.Parse(startTime);
DateTime endDateTime = DateTime.Parse(endTime);
//转化为DateTime类型时,日期为程序运行时的日期。
//此处判断防止用户自定义日期。
if (startDateTime.Date == DateTime.Today && endDateTime.Date == DateTime.Today)
return true;
else
return false;
}
catch
{
return false;
}
}
/// <summary>
/// 文本框的验证事件
/// </summary>
private void tbDateContent_Validating(object sender, CancelEventArgs e)
{
int lineIndex = 0;
foreach (string line in tbDateContent.Lines)
{
lineIndex++;
if(line!=null && line.Trim()!=string.Empty && !ValidateFormat(line))
{
e.Cancel = true;
break;
}
}
if (e.Cancel)
{
epContent.SetError(label1, string.Format("第{0}行验证出现错误!详情按F1", lineIndex));
}
else
{
epContent.Clear();
}
}
/// <summary>
/// timer事件
/// </summary>
private void tmrReminder_Tick(object sender, EventArgs e)
{
//在lvDateList中的且开启了提醒功能,才进行提示。
ListViewItem lvi = lvDateList.FindItemWithText(DateTime.Now.ToShortDateString());
if (lvi == null || !lvi.Checked)
return;
Queue<string> reminderMessage = new Queue<string>();
string reminderData = _reminderData[DateTime.Today];
string[] dataArray = reminderData.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
foreach (string data in dataArray)
{
//此处假设所有数据的格式均合法。
int timeSplitIndex = data.IndexOf('-');
int dateSplitIndex = data.IndexOf(' ');
string startTime = data.Substring(0, timeSplitIndex);
string date = data.Substring(dateSplitIndex + 1);
DateTime startDateTime = DateTime.Parse(startTime);
if (startDateTime.Hour == DateTime.Now.Hour && startDateTime.Minute == DateTime.Now.Minute)
reminderMessage.Enqueue(date);
}
while (reminderMessage.Count > 0)
{
MessageBox.Show("您的日程安排已到期:" + reminderMessage.Dequeue(), "日程安排提示窗口");
}
}
private void lvDateList_ItemDrag(object sender, ItemDragEventArgs e)
{
lvDateList.DoDragDrop(e.Item, DragDropEffects.Copy);
}
private void tbDateContent_DragEnter(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.Copy;
}
private void tbDateContent_DragDrop(object sender, DragEventArgs e)
{
ListViewItem lvi = (ListViewItem)e.Data.GetData(typeof(ListViewItem));
DateTime dt = DateTime.Parse(lvi.Text);
mcDate.SelectionStart = dt;
tbDateContent.Text = _reminderData[dt];
}
}
}