Будильник зі звуком на c # - програмування на c, c # і java

У цій статті ми детально розберемо, як створити програму-будильник зі звуком на C # в Windows Forms.

Для початку створюємо форму. Виглядає вона ось так:

Тут у нас Label з ось такими властивостями

Будильник зі звуком на C # - vscode.ru

На ньому у нас буде показано поточний час.

Нижче йде MaskedTextBox. Відмінність MaskedTextBox'a від простого TextBox'a в тому, що в ньому можна задавати маску, яка допомагає користувачеві вводити правильний тип даних.

Налаштування MaskedTextBox'a проходить наступним чином. В даному елементі, при його виділенні в правому верхньому куті з'являється невелика стрілка. При натисканні спливе віконце, як показано нижче. Натискаємо "Установка маски".

У MaskedTextBox ми будемо вводити час для будильника. За всіма стандартами час завжди показується через двокрапку - години: хвилини: секунди. Ясна річ, що користувачеві самому кожен раз писати двокрапка між годинами і хвилинами дуже незручно, тому ми полегшуємо йому введення даних, В вікні, яке відкриється після натискання на "Установку маски" вибираємо рядок Time. Вона відразу переведе введені користувачем дані в формат DateTime і дозволить не возитися в двокрапкою між годинами і хвилинами.

Натискаємо "ОК". Тепер для того, щоб поставити час, користувачеві треба ввести лише чотири цифри. Перші дві - це годинник, останні дві - хвилини.

Також в "Властивості" для MaskedTextBox'a ми змінили розмір тексту:

Під MaskedTextBox'ом у нас заховався Label2:

Потрібен він нам для того, щоб отримувати в себе значення з MaskedTextBox'a. і доповнювати його, один з наших таймерів отримає відомості, коли повинен задзвонити будильник.

Далі йдуть два Button'a - перший буде заводити будильник, а другий вимикати його, коли дзвінок спрацює.

Також додаємо два Timer'a. Перший показуватиме час, а другий буде відповідати за те, щоб будильник спрацював вчасно.

З дизайном розібралися. Далі натискаємо правою кнопкою миші на формі і вибираємо "Перейти до коду".

Насамперед підключаємо бібліотеку роботи зі звуком:

Спочатку ми оголошуємо перший таймер, так як він у нас буде на увазі, і йому треба буде надати осудний зовнішній вигляд.

Далі оголошуємо змінну, яка запустить нам в потрібний момент мелодію. В даному випадку мелодія лежить на диску F, а сам файл називається 1.wav.

Обов'язково до прочитання: бібліотека System.Media може працювати лише з форматом WAV PCM. Інакше в програмі буде помилка. В інтернеті є багато програм, які переводять файли музики в цей формат, та й сам цей формат ще можна знайти на просторах мережі, головне, щоб він був оцифрований за допомогою PCM.

Також ми оголошуємо змінну типу bool (має тільки два стани - true і false). Знадобиться вона нам для того, щоб змінювати принцип роботи кнопки "Завести будильник". Пізніше ми призначимо цій кнопці друге "стан" - "Прибрати будильник", коли той буде заведений. Так при натисканні на одну кнопку при різних значеннях змінної b дана кнопка буде виконувати різну роботу.

Ці три змінні ми винесли в саму основу коду для того, щоб будь-які функції, які будуть далі мали до них доступ, тому що якщо, наприклад, оголосити змінну bool b в будь-якої окремої функції, то інші функції не зможуть отримати до цієї змінної доступ, вони просто не знайдуть її.

Далі ми повертаємося в форму і двічі натискаємо на неї лівою кнопкою миші, щоб перенестися в до ділянки коду завантаження форми. Код, написаний там, буде виконуватися при завантаженні форми, тобто відразу при запуску програми. Там ми пишемо наступне:

Рядок button2.Enabled = false закриває доступ до кнопки "Зупинити будильник". Ми зробили це для того, щоб користувач не натискав на неї завчасно. Пізніше ми зробимо її клікабельно під час запуску дзвінка будильника, щоб можна було його зупинити.

Рядком timer01.Interval == 1000 ми оголошуємо, що наш таймер, який відповідає за даний час, буде оновлюватися в формі кожні 1000 мілісекунд (інакше кажучи, кожну секунду). Нам це необхідно, так як у нас в Label'e останні два "символу" відведені під секунди.

Наступний рядок означає, що таймер буде реагувати і спрацьовувати при подію "Tick". Подія Tick буде описано нижче, в ньому буде зазначено, що в Label'e потрібно показувати поточний час. Інакше кажучи, таймер завдяки timer01 .Interval буде кожну секунду виконувати подія поновлення часу в Label'е. використовуючи timer01.Tick.

Ну, і, нарешті, ми запускаємо наш таймер. При завантаженні форми він відразу ж буде показувати поточний час.

Тепер ми знову повертаємося в нашу форму і двічі натискаємо внизу сторінки на.

Ось і відкрилася виборча дільниця коду з назвою timer1_Tick. Саме той код, який ми зараз напишемо всередині тіла цієї функції, буде оновлюватися кожну секунду в формі.

Як вже було сказано раніше, тут ми виведемо в Label1 наше время. Усередині тіла функції timer1_Tick пишемо:

Спочатку ми записуємо годинник, потім хвилини, потім секунди. Частина коду, що відповідає за годинник виглядає так: DateTime.Now.Hour.ToString ( "00"). дослівно це приблизно перекладається як "Время.Сейчас.Часи.Строкой" тобто ми виводимо поточну кількість годин у вигляді рядка (спочатку такі значення мають тип DateTime, тому їх все треба переводити в рядок). Те ж саме пишемо для хвилин (тільки замість Hour - Minute) і секунд (Second). Між ними ми прописуємо двокрапки, щоб наш час не злипаються в одне число і було Новомосковскбельно.

Але що ж за дужки з нулями? Ми пишемо це для того, щоб час виводилося в звичному нам форматі: 00:00:00. Без цих нулів, наприклад, 9 годин, 5 хвилин і 14 секунд будуть виглядати в програмі так: 9.5.14. Це трохи ріже очі, через це ми завантажуємо нулі в ті значення часу, які записані однією цифрою (тобто всі числа менше десяти). Таким чином час у нас буде виглядати як 09.05.14, і це набагато приємніше. Інакше кажучи, якщо в даний момент час двозначне, наприклад, 12 годин, то замість першого нуля пишеться 1, а замість другого - 2. Якщо ж час - 5 годин ранку, то перший нуль залишається недоторканим, а ось замість другого пишеться цифра 5. Таким же чином заповнюються і хвилини, і секунди.

Отже, наш таймер, що показує час, працює. Йдемо далі -разбіраемся з кнопкою "Завести будильник". Для цього в формі два рази натискаємо на неї.

Тут нам знадобиться наша буллевая зміна b. Ми зробимо так, що при натисканні на цю кнопку можна було і завести будильник, і зняти його з заводу.

Виглядати в формі це буде так:

Ця кнопка в залежності від певної ситуації буде виконувати два протилежних дії. Зараз ми напишемо перший випадок, коли нам треба буде завести будильник. При натисканні на кнопку у нас запуститься другий таймер, який почне відраховувати години, хвилини і секунди до моменту часу, який буде вказано в maskedTextBox'e. доступ до maskedTextBox'у буде закритий до повторного натискання на кнопку (щоб ніхто не зміг змінювати вже зазначений час, поки будильник заведений), а текст на кнопці буде змінено на "Прибрати будильник".

При натисканні на цю кнопку зупиняється мелодія, потім кнопка "Зупинити будильник" знову стає недоступною (до нового заводу будильника і нового програвання мелодії), повертається MaskedTextBox1. якого не було, тому що, як ми пам'ятаємо, при заводі він ховається, а замість нього залишається Label2. текст на кнопці заводу / зняття будильника змінюється на "Завести будильник", і b стає в значенні false (щоб при натисканні на кнопку "Завести будильник", спрацював потрібний нам код.

Ось і все, роботу коду можна перевірити за посиланням нижче: