На этом шаге мы рассмотрим назначение, основные свойства и пример использования этого компонента.
Компонент Timer (рисунок 1) генерирует последовательность событий Tick.
Рис.1. Компонент Timer
Обычно он используется для активизации с заданным периодом некоторых действий. Компонент является невизуальным (во время работы программы в окне не отображается). Свойства компонента приведены в таблице 1.
Свойство | Описание |
---|---|
Interval | Период генерации события Tick. Задается в миллисекундах |
Enabled | Разрешение работы. Разрешает (значение True) или запрещает (значение False) генерацию события Tick |
Программа "Секундомер" (ее форма приведена на рисунке 2, а текст - в листинге ниже) демонстрирует использование компонента Timer.
Рис.2. Форма программы "Секундомер"
Во время создания формы свойству Interval таймера надо присвоить значение 500. Кнопка button1 предназначена как для запуска секундомера, так и для его остановки. В начале работы программы значение свойства Enabled компонента Timer равно False, поэтому таймер не работает (не генерирует события Tick). Процедура обработки события Click на кнопке button1 проверяет состояние таймера и, если он не работает, присваивает значение True свойству Enabled компонента Timer и тем самым запускает таймер. Процедура обработки события Tick инвертирует значение свойства Visible компонента label2 (в результате двоеточие мигает с периодом 0,5 секунд) и, если двоеточие скрыто, завершает свою работу. Если двоеточие отображается, то она увеличивает счетчик времени и выводит в поле компонентов label1 и label3 значения счетчиков минут и секунд (величину интервала с момента запуска секундомера). Если секундомер работает, то щелчок на кнопке Стоп (button1) останавливает секундомер.
Приведем текст приложения.
. . . . private: int m; // количество минут int s; // количество секунд . . . . // щелчок на кнопке Пуск/Стоп private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { if (timer1->Enabled) { // Таймер работает, значит, щелчок на кнопке Стоп. // Остановить таймер. timer1->Enabled = false; // Изменить текст на кнопке // и сделать доступной кнопку Сброс button1->Text = "Пуск"; button2->Enabled = true; label3->Visible = true; } else { // Таймер не работает, значит, щелчок на Пуск. // Запускаем таймер. timer1->Enabled = true; // изменить текст на кнопке button1->Text = "Стоп"; // и сделать недоступной кнопку Сброс button2->Enabled = false; } } // щелчок на кнопке Сброс private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) { m = 0; s = 0; label1->Text = "00"; label2->Text = "00"; } // сигнал от таймера private: System::Void timer1_Tick(System::Object^ sender, System::EventArgs^ e) { // двоеточие мигает с периодом 0.5 сек if (label3->Visible) { if (s < 59) { s++; if (s < 10) label2->Text = "0" + s.ToString(); else label2->Text = s.ToString(); } else { if (m < 59) { m++; if (m < 10) label1->Text = "0" + m.ToString(); else label1->Text = m.ToString(); s = 0; label2->Text = "00"; } else { m = 0; label1->Text = "00"; } } label3->Visible = false; } else label3->Visible = true; }
На следующем шаге мы рассмотрим компонент NumericUpDown.