Прошел курс. Получил код Dreamspark. Ввожу код на сайте, пишет: Срок действия этого кода проверки уже истек. Проверьте, правильно ли введен код. У вас осталось две попытки. Вы также можете выбрать другой способ проверки или предоставить соответствующие документы, подтверждающие ваш академический статус.
Как активировать код? |
Опубликован: 25.03.2010 | Доступ: свободный | Студентов: 1446 / 158 | Оценка: 4.31 / 4.00 | Длительность: 25:42:00
Тема: Программирование
Специальности: Программист, Архитектор программного обеспечения
Теги:
Лекция 18:
Пользовательские компоненты
Добавление в компонент пользовательского события стандартным способом
В этом разделе мы добавим к классу пользовательское событие типовым способом, как это принято в большинстве приложений. Альтернативный способ, позволяющий контролировать добавление и удаление обработчиков из списка объекта-делегата, мы рассмотрим позднее.
- Добавьте в файл AlarmClock.cs часть класса, содержащую определение собственного события стандартным способом без использования базового поля
// Часть 3 namespace MyCompany.MyComponents { // Часть класса с определением собственного события // стандартным способом без использования базового поля partial class AlarmClock { // Объявляем делегат для события. В аргументах делегата // нужно указать полное имя вложенного класса public delegate void AlarmHandler(object sender, AlarmClock.AlarmEventArgs e); // Объявляем событие с доступностью не ниже делегата public event AlarmHandler Alarm; // Метод диспетчеризации события. Виртуальный и защищенный // для возможности переопределения в будущих потомках protected virtual void OnAlarm(AlarmEventArgs args) { // Проверяем наличие зарегистрированных // обработчиков и генерируем событие if (Alarm != null) Alarm(this, args); } } }Листинг 18.13 . Определение события стандартным способом в файле AlarmClock.cs
- Модифицируйте часть класса с обработчиком события Tick системного таймера, который мы создали ранее и который вызовет наше событие при наступлении времени alarmTime срабатывания будильника
// Часть 4 namespace MyCompany.MyComponents { // Часть класса с определением обработчика события Tick // системного таймера System.Windows.Forms.Timer timer1 partial class AlarmClock { // Обработчик события срабатывания системного таймера, созданного, // настроенного и зарегистрированного через визуальный конструктор. // Обработчик выполняется каждую секунду и проверяет, пришла ли пора // генерировать наше событие, на которое подпишется клиент компонента private void TimerHandler(object sender, EventArgs e) { DateTime now; // Текущее системное время AlarmEventArgs args; // В режиме разработки не выполнять if (!this.DesignMode) { now = DateTime.Now; // Если будильник не запущен и пришла пора запускать if (!alarmFired && now >= alarmTime) { // Создаем объект для передачи аргументов в событии args = new AlarmEventArgs(); // Заполняем объект текущим временем args.Time = now; // Вызываем метод диспетчеризации события Alarm this.OnAlarm(args); // Поднимаем флаг "Будильник запущен" alarmFired = true; } } } } }Листинг 18.14 . Обработчик события Tick системного таймера timer1 в файле AlarmClock.cs
- Откомпилируйте библиотеку наших компонентов, выполнив команду Build/Build MyComponents
- Перейдите в режим редактирования Form1.cs [Design] и убедитесь, что в панели Toolbox после компиляции появился новый компонент AlarmClock
Тестирование компонента AlarmClock
- Поместите новый компонент AlarmClock из панели Toolbox на форму Form1 приложения ComponentTest, выделите его экземпляр alarmClock1 и через панель Properties в режиме Events создайте обработчик для события Alarm
- Обработчик, добавленный в класс Form1 приложения ComponentTest, заполните следующим кодом
private void alarmClock1_Alarm(object sender, AlarmClock.AlarmEventArgs e) { // Если оператор выключения будильника поставить после // вызова модального диалогового окна, то генерация // событий прекратиться только после закрытия // очередного модального окна, поскольку только тогда // управление дойдет до этого оператора alarmClock1.Enabled = false;// Останавливаем системный таймер int hour = alarmClock1.CurrentTime.Hour; int minute = alarmClock1.CurrentTime.Minute; int second = alarmClock1.CurrentTime.Second; MessageBox.Show(String.Format("Сработал будильник!!!\n" + "Текущее время: {0} ч. {1} м. {2} с.", hour, minute, second), "Доцент Снетков В.М."); }Листинг 18.15 . Обработчик события Alarm в тестирующем классе Form1
- Добавьте в конец конструктора формы Form1 код установки времени срабатывания будильника и запуска системного таймера
// Конструктор формы public Form1() { InitializeComponent(); // Заполнение списка планетами for (int i = 0; i <= planets1.MaxIndex; i++) { listPlanets.Items.Add(String.Format( "{0}) {1}", i, planets1[i])); } listPlanets.SelectedIndex = 0; // Устанавливаем время срабатывания будильника // через 5 сек. после запуска системного таймера alarmClock1.AlarmTime = DateTime.Now.AddSeconds(5d); alarmClock1.Enabled = true;// Запускаем системный таймер }Листинг 18.16 . Конструктор формы Form1 файла Form1.cs приложения ComponentTest