Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
21 / 10 / 5
Регистрация: 07.01.2013
Сообщений: 222

При выставлении времени будильника, не правильно выставляются секунды

30.05.2014, 05:20. Показов 890. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет, всем!

Помогите разобраться. Пишу простенький будильник, и вроде все работает, но есть пару но.

"Но" первое:
При выставлении времени будильника, не правильно выставляются секунды (к примеру, ставя 1 секунду, в переменную может записаться 20 секунд или другое рандмное число секунд), с часами и минутами такой проблемы нет.

вот код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
private void установитьВремяToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Form2 f2 = new Form2();
 
            var dateTime = DateTime.Now;
 
            if (f2.ShowDialog() == DialogResult.OK)
            {
                dateTime1 = DateTime.Now.AddHours(Convert.ToDouble(f2.SendNum1));
                dateTime2 = DateTime.Now.AddMinutes(Convert.ToDouble(f2.SendNum2));
                dateTime3 = DateTime.Now.AddMinutes(Convert.ToDouble(f2.SendNum3));
 
                var timeSpan1 = (dateTime1 - dateTime);
                var timeSpan2 = (dateTime2 - dateTime);
                var timeSpan3 = (dateTime3 - dateTime);
 
                string s = string.Format("\r{0:00}:{1:00}:{2:00}", (int)timeSpan1.Hours, (int)timeSpan2.Minutes, (int)timeSpan3.Seconds);                
 
                alarmHours = (int)timeSpan1.Hours;
                alarmMinutes = (int)timeSpan2.Minutes;
                alarmSeconds = (int)timeSpan3.Seconds;
 
                string str = string.Format("Время для будильника выставленно на \n{0:00}:{1:00}:{2:00}", alarmHours, alarmMinutes, alarmSeconds);
                MessageBox.Show(str, "Будильник", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }            
        }
"Но" второе:
При наступлении выставленного времени (+/- рандомное число секунд из-за первого "Но"), нужное сообщение вылитает не один раз, а девять раз.
вот код:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
private void Alarm()
        {
            DateTime dt = DateTime.Now;
 
            int h = dt.Hour;
            int m = dt.Minute;
            int s = dt.Second;
 
            if ((alarmHours == h) && (alarmMinutes == m) && (alarmSeconds == s))
            {
                MessageBox.Show("Оно работает!!!!", "Урааааааа");
            }
        }
Функция Alarm() находиться в обработчике события timer1_Tick.

Заранее всем спасибо за любую помощь и конструктивную критику.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.05.2014, 05:20
Ответы с готовыми решениями:

Минуты и секунды перевести в секунды и в ISO 8601 формат времени
Добрый день/вечер/утро ув. знатоки php. Возник вопрос: time содержит в себе длительность (минуты и секунды) вида 41:35. Мне нужно на уровне...

Перевод времени из минут и секунды в секунды
Всем привет! Помогите с контрольными по С++, Я пока не совсем понимаю этот язык. Заранее Спасибо! 4.12 Написать программу, которая...

Диапазон времени для будильника
Добрый день, требуется например с 23:30 до 7:45 утра исполнять какое-либо действие, в остальное время другое. Т.е. время начала исполнения...

8
 Аватар для Spawn
995 / 893 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
30.05.2014, 07:12
Аццкий Прогер, первый кусок кода спрячьте и не показывайте никому...
C#
1
2
3
4
5
6
7
8
9
10
11
            Form2 f2 = new Form2();
 
 
            if (f2.ShowDialog() == DialogResult.OK)
            {
                // alarmTime - одна переменная вместо 3-х (часы, минуты, секунды)
                alarmTime = DateTime.Now + new TimeSpan(Convert.ToInt32(f2.SendNum1), Convert.ToInt32(f2.SendNum2), Convert.ToInt32(f2.SendNum3));
 
                string str = string.Format("Время для будильника выставлено на \n{0:HH:mm:ss}", alarmTime);
                MessageBox.Show(str, "Будильник", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
Соответствующим образом поменяем и исправим тут:
C#
1
2
3
4
5
6
7
8
private void Alarm()
        {
            if (DateTime.Now >= alarmTime)
            {
                MessageBox.Show("Оно работает!!!!", "Урааааааа");
                // таймер остановить не забываем
            }
        }
1
21 / 10 / 5
Регистрация: 07.01.2013
Сообщений: 222
30.05.2014, 11:12  [ТС]
Цитата Сообщение от Spawn Посмотреть сообщение
if (DateTime.Now >= alarmTime)
При таком условии, сообщение вылетает при старте программы, а не при наступлении нужного времени. Думаю спасет ситуацию знак равенства "==".

Цитата Сообщение от Spawn Посмотреть сообщение
alarmTime = DateTime.Now + new TimeSpan(Convert.ToInt32(f2.SendNum1), Convert.ToInt32(f2.SendNum2), Convert.ToInt32(f2.SendNum3));
А благодаря такой форме записи, в alarmTime записывается не то время, что мы выставляем в другой форме, а вообще рандомное. Или же я делаю что то не так.
0
 Аватар для Spawn
995 / 893 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
30.05.2014, 11:40
Цитата Сообщение от Аццкий Прогер Посмотреть сообщение
При таком условии, сообщение вылетает при старте программы, а не при наступлении нужного времени. Думаю спасет ситуацию знак равенства "==".
А зачем таймеру работать с начала программы?
Цитата Сообщение от Аццкий Прогер Посмотреть сообщение
А благодаря такой форме записи, в alarmTime записывается не то время, что мы выставляем в другой форме, а вообще рандомное. Или же я делаю что то не так.
Тогда объясните, что в тех трёх полях задаётся... я исходил из того, что там часы, минуты и секунды - через сколько сработать будильник должен.
0
21 / 10 / 5
Регистрация: 07.01.2013
Сообщений: 222
30.05.2014, 11:42  [ТС]
Цитата Сообщение от Spawn Посмотреть сообщение
А зачем таймеру работать с начала программы?
Потому что это часы с будильником.

Цитата Сообщение от Spawn Посмотреть сообщение
Тогда объясните, что в тех трёх полях задаётся... я исходил из того, что там часы, минуты и секунды - через сколько сработать будильник должен.
там три numericUpDown, которые находятся во второй форме, для выставления времени.
0
 Аватар для Spawn
995 / 893 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
30.05.2014, 11:49
Цитата Сообщение от Аццкий Прогер Посмотреть сообщение
Потому что это часы с будильником.
Ок, создайте переменную - будильник задан или нет.
Цитата Сообщение от Аццкий Прогер Посмотреть сообщение
там три numericUpDown, которые находятся во второй форме, для выставления времени.
C#
1
alarmTime = DateTime.Today + new TimeSpan(Convert.ToInt32(f2.SendNum1), Convert.ToInt32(f2.SendNum2), Convert.ToInt32(f2.SendNum3));
0
21 / 10 / 5
Регистрация: 07.01.2013
Сообщений: 222
30.05.2014, 12:01  [ТС]
Spawn, спасибо, теперь выставляется точное время.
Но осталась еще одна недоработка.

вот код Аларма:
C#
1
2
3
4
5
6
7
8
9
10
private void Alarm()
        {
            if (DateTime.Now >= alarmTime)
            {
                MessageBox.Show("Оно работает!!!!", "Урааааааа");
                isAlarmEnabled = false;
                timer1.Stop();
            }
            timer1.Start();
        }
При достижении установленного время, мэссэдж бокс вылазит раз 30, как сделать, чтобы все таки один раз выскакивал? Или это из-за того, что таймер стоп идет после строки "isAlarmEnabled = false;" а на это нужно время, за которое и успевает вылизти столько мэссэдж боксов?
0
 Аватар для Spawn
995 / 893 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
30.05.2014, 12:10
C#
1
2
3
4
5
6
7
8
        private void Alarm()
        {
            if (isAlarmEnabled && DateTime.Now >= alarmTime)
            {
                isAlarmEnabled = false;
                MessageBox.Show("Оно работает!!!!", "Урааааааа");
            }
        }
1
21 / 10 / 5
Регистрация: 07.01.2013
Сообщений: 222
30.05.2014, 12:14  [ТС]
Spawn, Спасибо большое. Все работает. Ушел теперь делать мелодию вместо сообщения
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.05.2014, 12:14
Помогаю со студенческими работами здесь

Диапазон времени для будильника
Добрый день, требуется например с 23:30 до 7:45 утра исполнять какое-либо действие, в остальное время другое. Т.е. время начала исполнения...

Многозадачность в C++, обновление системного времени каждые 4 секунды при этом работа программы не останавливается
Здравствуйте, как сделать так чтобы системное время выводилось в консоль независимо от работы программы, например после ввода cin, цикл не...

Фильтрация товаров при выставлении счета
Добрый день! Вопрос такой: Есть одна большая таблица товаров разных типов (пример: телевизоры - 50шт., холодильники - 50шт., и т.д.). ...

Найти вероятность того, что при двух отсчетах времени в одном секундомере будет допущена ошибка больше 0,08 секунды
Всем доброго времени суток. Очень прошу помочь с такой задачей :) : Шкала секундомера имеет цену деления 0,1 секунды. Время...

При выставлении XMP профиля система не грузится
Здравствуйте, проблема у меня в том что оперативная память при выставлении XPM профиля в настроек биоса он сразу же вырубает при повторном...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru