2013-04-22 3 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 (отправитель объекта, EventArgs e) { DateTime theDay = dateTimePicker1.Value; pictureBox3.Visible = true; MessageBox.Show («данные сохранены»); timer1.Enabled = true; } private void timer1_Tick (объект отправитель, EventArgs e) { если (DateTime.Now.CompareTo (theDay)> 0) // проверяет, находится ли теперь послеDay { theDay = DateTime.MaxValue; timer1.Enabled = false; MessageBox.Show («Напоминание») ' – Tlapy

ответ

0

Вы можете просто сравнить:

if(dateTimePicker1.Value==DateTime.Now) 

Оба дата и время.

Но есть одна проблема с вышеуказанным кодом. Он сравнивает время с миллисекундами, вероятно, никогда не будет таким же. Таким образом, вы можете изменить свой код, чтобы что-то вроде

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

(DateTime1 - Datetime2) является отрезок времени более abote этот класс на MSDN

+1

таймер должен был указывать в той же миллисекунде, чтобы работать. действительно плохое решение – x4rf41

2

строк используют DonT первую очередь:

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"); 
    } 
} 

точные совпадения (==) для даты не рекомендуется, так как таймер может перепрыгнуть через точное время, и это никогда не будет правдой.

Edit: мой comparission был неправильным путем, он должен быть правильным в настоящее время

+0

Спасибо, это похоже на то, что мне нужно. Но у меня есть один вопрос, может быть, очень глупый еще .. Когда я использую это: частная пустота button1_Click (объект отправителя, EventArgs е) { DateTime theDay = dateTimePicker1.Value;} частный недействительным Timer1_Tick (объект отправителя , EventArgs e) { if (DateTime.Now.CompareTo (theDay)> 0) { theDay = DateTime.MaxValue; MessageBox.Show («Напоминание»); } Это ошибка: имя 'theDay' не существует в текущем контексте. Я supposte Я должен определить, где-то в другом месте ... Могли бы, пожалуйста, объяснить мне, где и как? В публичном частичном классе? – Tlapy

0

Если вы хотите создать приложение для напоминания вместо использования сравнений времени даты Вы бы лучше использовать Open Source планировщик, как Quartz.NET.

Очень прост в использовании, и Quartz.NET tutorials отличные.

Вам нужно всего лишь определить CRON Triggers, необходимый для каждого напоминания, и Quartz.NET будет нести ответственность за запуск события при срабатывании триггера. В случае, если вы можете выполнять любые действия, которые хотите отправить почту, установить значения и т. Д.

Лучшие вещи из кварца - это то, что с его планировщика вы даже можете запланировать периодические напоминания очень легко. Я успешно использовал его в трех официальных продуктах без каких-либо хлопот.

Смежные вопросы