Шаг 40.
Microsoft Visual C++ 2010. Начала.
Базовые компоненты. Компонент Timer

    На этом шаге мы рассмотрим назначение, основные свойства и пример использования этого компонента.

    Компонент Timer (рисунок 1) генерирует последовательность событий Tick.


Рис.1. Компонент Timer

    Обычно он используется для активизации с заданным периодом некоторых действий. Компонент является невизуальным (во время работы программы в окне не отображается). Свойства компонента приведены в таблице 1.

Таблица 1. Свойства компонента Timer
Свойство Описание
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.




Предыдущий шаг Содержание Следующий шаг