Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Событийно-управляемая модель выполнения оконного приложения
Исходный текст первого оконного приложения соответствует правилам языка C#: программа состоит из классов (одного класса Program) и имеет «точку входа» - метод Main. В нем выполняется оператор, выполнение которого и реализует поведение простого окна: Application.Run(new Form()); Здесь «работает» статический метод Run класса Application. Класс Application предоставляет несколько статических методов и свойств для управления оконным приложением. Для создания оконного приложения необходимо уметь «запускать» оконное приложение – это и делает метод Run. Теперь разберемся, что при этом происходит. В момент запуска на экране появляется изображение окна. Далее запускается цикл обработки событий. Событием называется порция информации, автоматически создаваемая операционной системой (Windows) в ответ на физическое или логическое внешнее воздействие. Например, пользователь щелкнул левой кнопкой мыши. В этом случае событие возникнет, если этот щелчок был выполнен по «особому» месту, например по кнопке, нарисованной в окне. Возникновение события еще не означает, что программа на него отреагирует каким-то ответным действием. Для этого необходимо, чтобы программист, создавший эту программу, реализовал программный фрагмент, отвечающий за реакцию на это событие. В терминах языка C# - это метод-обработчик события. После того, как этот метод завершит свою работу, программа переходит к ожиданию следующего «достойного внимания» события. Если новое событие возникло раньше того, когда было обработано текущее событие, новое событие не теряется, а помещается в очередь событий. Такой цикл обработки событий завершается, когда возникает некоторой специальное событие, приводящее к завершению работы приложения. Описанный здесь сценарий работы оконного приложения схематически изображен на следующем рисунке:
Мы видели, что даже первое оконное приложение уже реагирует на целый ряд стандартных событий. Где же обработчики этих событий? Эти обработчики определены в стандартном классе Form. Наша первая программа, хотя и выглядит как стандартное окно Windows, является весьма пассивной, поскольку не реагирует ни на какие события, кроме «неинтересных» стандартных событий управления окном. Заставим программу действовать интереснее: когда пользователь щелкнет мышью по любой кнопке, на ее поверхности появится текущее время.
Для достижения этой цели необходимо выполнить 2 действия: 1. Написать специальный метод-обработчик для реакции на требуемое событие. 2. Связать этот метод с событием элемента управления. Измененный текст программы теперь выглядит следующим образом: 01. using System; 02. using System.Windows.Forms; 03. using System.Drawing; 04. static class Program 05. { 06. private static int FormHeight=300; 07. private static int FormWidth=500; 08. private static Form f; 09. private static Button b1; 10. private static Button b2; 11. static void Main() 12. { 13. //создание и настройка формы 14. f = new Form(); 15. f.ClientSize = new Size(FormWidth, FormHeight); 16. //создание и настройка первой кнопки 17. b1 = new Button(); 18. b1.Left = FormWidth / 5; 19. b1.Top = FormHeight / 3; 20. b1.Width = FormWidth / 5; //ширина кнопки 21. b1.Height = FormHeight / 3; //высота кнопки 22. b1.Click += ButtonClick; 23. //создание и настройка второй кнопки 24. b2 = new Button(); 25. b2.Bounds = new Rectangle(3*FormWidth / 5, FormHeight / 3, FormWidth / 5, FormHeight / 3); 26. b2.Click += ButtonClick; 27. //добавление кнопок на форму 28. f.Controls.Add(b1); 29. f.Controls.Add(b2); 30. //запуск цикла обработки событий 31. Application.Run(f); 32. } 33. private static void ButtonClick(object sender, EventArgs ea) 34. { 35. ((Button)sender).Text = DateTime.Now.ToString(); 36. } 37. } Полужирным шрифтом выделенны изменения в тексте. 1. В классе Program уже появился второй метод. В дальнейшем классы будут содержать довольно большое количество методов. Как Вы уже должны знать, эти методы могут безпрепятсвенно пользоваться общей для них информацией, содержащейся в переменных класса (даже если ети переменные закрыты – private). Поэтому важная информация, интенсивно используемая методами класса, обычно представлена переменными класса. В нашем примере переменными стали размеры окна FormHeight и FormWidth (стр.06 и 07), сама форма f (стр. 08) и кнопки b1 и b2 (стр. 09 и 10). 2. Метод-обработчик написан как метод класса Program (стр.33-36). При написании методов-обработчиков нужно соблюдать следующие требования: А) обработчик никогда ничего не возвращает (void); Б) первым параметром обработчика обычно является переменная типа object – общего базового класса всех классов.NET. Существуют ситуации, когда тип этого параметра может быть другим.
В) вторым параметром обработчика является переменная класса EventArgs или производного от него. Решение о том, что обработчик будет методом класса Program, не является обязательным требованием. В нашем случае это сделано для сохранения простоты программы. Использование модификаторов private и static также не является обязательным. В нашем случае обработчик является закрытым, потому что используется только в классе Program, а статическим потому, что используется в статическом методе Main. 3. Связь обработчика с событием-щелчком для кнопок b1 и b2 определена в стр. 22 и 26. Это обязательно делается оператором присваивания +=. Обратите внимание на «странность» этих операторов. Операция += в данном случае совсем не занимается арифметическим накоплением числовой информации. Правым ее операндом является название метода-обработчика. В то же время в левой части += указано событие Click для кнопки b1 и b2. Упрощенное (но в принципе правильное) представление о том, чем яляется событие – это список названий методов-обработчиков, которые срабатывают, когда с элементом управления происходит соответствующее внешнее воздействие. Разработчики классов для стандартных элементов управления предусмотрели для них довольно большой спектр событий.
В нашей программе обе кнопки используют одинаковый обработчик. Но ведь в процессе обработки надпись должна измениться именно на той кнопке, по которой щелкнул пользователь. Для этого и используется первый параметр обработчика – он ссылается на тот объект, с которым произошло событие. События могут происходить с любыми объектами (даже не визуальными элементами управления). Поэтому тип этого параметра – object. Внутри обработчика этот параметр нужно явным образом приводить к требуемому типу (в нашем случае – Button). Для получения текущей даты и времени обработчик использует статическое свойство Now класса DateTime.
|
||||||
Последнее изменение этой страницы: 2021-12-15; просмотров: 47; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.224.37.89 (0.008 с.) |