2013-04-22 81 views
1

我想在C#中创建一个应用程序 - visual studio 2010.这个应用程序就像提醒一样。您将注释放入文本框中,并使用DateTimePicker来选择何时需要提醒注意事项。
问题是我不知道如何做到这一点。时间提醒应用程序C#

我选择日期和时间从dateTimePicker的:

dateTimePicker1.Format = DateTimePickerFormat.Custom; 
dateTimePicker1.CustomFormat = "dd/MM/yyyy HH:mm:ss"; 

现在我需要从dateTimePicker的当前日期和时间比较时,如果该值是一样的表演与一些文本的消息按钮。

我不确定我是否可以使用计时器以及如何比较这些值?这样:-)

string timese = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss"); 
string theDay = dateTimePicker1.Value.ToShortDateString(); 

private void timer1_Tick(object sender, EventArgs e) 
{ 
    if (theDay == theDay2) 
    { 
     MessageBox.Show ("Reminder"); 
    } 
} 
+0

你能帮我看看我的代码中的问题在哪里吗? ' private DateTime theDay; private void button6_Click(object sender,EventArgs e) DateTime theDay = dateTimePicker1.Value; pictureBox3.Visible = true; MessageBox.Show(“data saved”); timer1.Enabled = true; } 私人无效timer1_Tick(对象发件人,EventArgs的) { 如果(DateTime.Now。CompareTo(theDay)> 0)//检查现在是否在日期之后 theDay = DateTime.MaxValue; timer1.Enabled = false; MessageBox.Show(“Reminder”)' – Tlapy 2013-04-22 19:30:53

回答

0

东西,你可以只是比较:

if(dateTimePicker1.Value==DateTime.Now) 

两个都是日期时间。

但上面的代码有一个问题。它将时间与毫秒进行比较,可能永远不会相同。所以,你可以像

if(dateTimePicker1.Value-DateTime.Now).TotalSeconds<2) 

更改您的代码的东西(DateTime1 - DATETIME2)是时间跨度更abote这个类是MSDN

+1

定时器必须在完全相同的毫秒内打勾才能工作。非常糟糕的解决方案 – x4rf41 2013-04-22 14:02:52

2

不使用字符串首先:

DateTime theDay = dateTimePicker1.Value; 

private void timer1_Tick(object sender, EventArgs e) 
{ 
    if (DateTime.Now.CompareTo(theDay) > 0) // checks if now is after theDay 
    { 
     theDay = DateTime.MaxValue; 
     // makes sure there wont be multiple MessageBox due to event queuing 
     // you could also just stop the timer here 
     MessageBox.Show ("Reminder"); 
    } 
} 

完全匹配(==)不推荐使用日期,因为计时器可能跳过确切的时间,并且它永远不会成立。

编辑:我是作仪走错了路,它应该是正确的,现在

+0

谢谢,这似乎正是我需要的。但是我有一个问题,也许很愚蠢仍然.. 当我使用这个: 私人无效的button1_Click(对象发件人,EventArgs的){ 日期时间 = theDay dateTimePicker1.Value;} 私人无效timer1_Tick(对象发件人,EventArgs e) if(DateTime.Now.CompareTo(theDay)> 0) theDay = DateTime.MaxValue; MessageBox.Show(“Reminder”); } 显示错误:名称'theDay'在当前上下文中不存在。我认为我必须在其他地方定义天...可以请解释我在哪里以及如何?在公共部分班? – Tlapy 2013-04-22 15:48:18

0

如果你想建立一个提醒应用,而不是使用日期时间的比较,你会过得更好使用开源调度像Quartz.NET

它的使用方法非常简单,Quartz.NET tutorials都非常优秀。

你只需要定义所需的每个提醒的CRON Triggers和Quartz.NET将处理时发生触发击发事件的责任。在事件中,你可以做你希望的任何行动像发送邮件,设定值等..

约石英的最好的事情是,因为它的调度器,你甚至可以很轻松地安排定期提醒。我已经成功地在三种官方产品中使用它,没有任何麻烦。