Сегодня мы создадим программу, которая будет при запуске показывать нам цифровые часы и дату.
Для начала создаём форму. У нас она такая:
Всё, что у нас тут есть — это два Label’a + Timer.
Настраиваем Label’ы, переименовываем, увеличиваем шрифт — всё по усмотрению программиста.
Теперь переходим к коду, щёлкнув правой кнопкой мыши по форме и выбрав соответствующую команду.
Сразу после строки public partial class Form1 : Form объявим таймер. Делается это так:
1 2 3 |
public partial class Form1 : Form { Timer timer = new Timer(); |
Объявляем мы его в самом начале, чтобы все функции, которые у нас будут внутри, принимали его в расчёт (если он будет объявлен в какой-то одной отдельной функции, то вторая функция не будет его видеть).
Теперь рам надо включить наш таймер. Для этого мы возвращаемся в форму и дважды щёлкаем на неё левой кнопкой мыши.
Нас переносит в код, который будет срабатывать при загрузке формы (то есть, с самого начала работы программы). Здесь мы пишем следующее:
1 2 3 4 5 6 |
private void Form1_Load(object sender, EventArgs e) { timer.Interval = 1000; timer.Tick += new EventHandler(timer1_Tick); timer.Start(); } |
Первая строка устанавливает интервал обновления таймера. Число 1000 означает, что таймер будет обновляться каждые 1000 миллисекунд, т.е. каждую секунду.
Вторая строка очень важна — она срабатывает при каком-либо событии «Tick» в таймере. У нас она будет срабатывать каждые 1000 миллисекунд, пока включен таймер. Именно благодаря ней пользователь будет видеть смену часов, минут и секунд на циферблате. Само событие мы опишем ниже в функции timer1_Tick.
Третьей строкой мы запускаем наш таймер.
Теперь мы возвращаемся в форму и дважды кликаем на значке таймера () внизу.
Вот и открылась у нас функция timer1_Tick. Мы запишем в неё определённый код, и каждые 1000 миллисекунд этот код будет исполняться заново.
Внутри нашей функции мы сначала объявим некоторые переменные:
1 2 3 4 5 |
int h = DateTime.Now.Hour; int m = DateTime.Now.Minute; int s = DateTime.Now.Second; string time = ""; |
В переменную h мы будем записывать часы, в переменную m — минуты, в s — секунды.
Переменная строкового типа time нам нужна, чтобы мы записали первые три переменные в строку для вывода в форму.
Теперь мы сделаем один «трюк», предназначенный скорее для красоты вида, нежели для функционала и качества работы.
Дело в том, что мы привыкли видеть форму времени в виде, грубо говоря, 00:00:00, то есть две цифры на вывод часов, две цифры на минуты и две цифры на секунды (например, 06:03:09 или 12:01:05).Время же из свойства DateTime.Now не имеет нулей перед цифрами, которые меньше десяти (иначе говоря, время будет выглядеть так: 6:3:9 или 12:1:5). Согласитесь, это не очень удобно и привычно видеть. Поэтому мы исправим благодаря оператору условия if.
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 27 28 29 30 |
if (h < 10) { time += "0" + h; } else { time += h; } time += ":"; if (m < 10) { time += "0" + m; } else { time += m; } time += ":"; if (s < 10) { time += "0" + s; } else { time += s; } |
Сначала мы задаём условие, что если h<10, то есть если часы показывают время от 0 до 9 часов, то в таком случае в строку time мы добавляем перед h ноль, чтобы у нас получилось не просто время 5 часов, а 05 часов. Иначе (else) мы просто добавляем в time переменную h без нулей.
То же самое мы проделываем с минутами и секундами, не забывая при этом между часами и минутами, а также минутами и секундами поставить двоеточие.
Теперь давайте, для большего понимания, что мы сделали, поговорим о работе строки time. Мы поочерёдно записываем в неё часы (с нулём или без), минуты (аналогично) и секунды (аналогично). Между ними мы ставим двоеточие. Именно поэтому после первых двух условий у нас имеются строки
1 |
time += ":"; |
Итак, в самом начале работы программы строка time у нас пустая (мы выше объявили её такой, с правой стороны поставив пустые кавычки: string time = «»). Как только запускается таймер, в строку сначала записываются часы, принимая во внимание, больше ли 10 это время или меньше.
То есть вместо пустого пространства в строке теперь что-то типа «12», если у нас в данный момент 12 часов. После этого в строку записывается двоеточие, теперь строка выглядит так: «12:». Затем мы записываем минуты, опять учитывая, сколько знаков в них. Получится, например, так :»12:06″. Опять ставим двоеточие: «12:06:». Заканчивается запись секундами: «12:06:34». И перезаписываться наша строка от пустоты до полной формы времени будет каждые 1000 миллисекунд, то есть каждую секунду, чтобы мы видели, как меняется циферблат секунд, а впоследствии и минут с часами.
Однако пока что наша строка просто существует, но пользователь не видит её, не видит, сколько время в данный момент.
Поэтому мы выводим нашу строку в форму через Label. У нас это label2, с наиболее крупным шрифтом.
1 |
label2.Text = time; |
Наши часы готовы. Уже можно наблюдать за ходом времени, запустив проект. Но мы ещё решили выставить дату. Делается это аналогичным образом. Поэтому ниже мы пишем:
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 |
string data = ""; int day = DateTime.Now.Day; int month = DateTime.Now.Month; int year = DateTime.Now.Year; if (day < 10) { data += "0" + day; } else { data += day; } data += "."; if(month<10) { data += "0" + month; } else { data += month; } data += "."; data += year; label1.Text = data; |
Разница лишь в том, что мы добавляем нули только перед днями и месяцами, года у нас и так четырёхзначные, а вместо двоеточий мы ставим просто точки. В итоге у нас получается примерно такой вид: 16.02.2015.
И мы так же записываем это всё в Label, но уже в другой.
В итоге у нас получается вот такая программка:
Скачать исходник программы на языке C# можете ниже:
Скачать исходник
Поделиться в соц. сетях:
спасиб
Спасибо, просто отлично описано и объяснено
Спасибо. Пригодилось