Того же самого эффекта можно достичь и с помощью вкладки Class View (View ► Class View), выбрав в списке нужный элемент и изменив значение его свойства Name в окне свойств. Обратите внимание на то, что при этом в нем отображаются свойства кнопки button1 не как элемента интерфейса, а как поля класса. Можно изменить имена и вручную, но это более трудоемко и чревато ошибками.
Самое важное происходит в методе InitializeComponent.
В операторах 3 и 4 создаются экземпляры компонентов, затем для каждого из них задаются свойства, определяющие их положение, размер, вид и т. д. Обратите вниманиена операторы 6 и 7. В них регистрируются обработчики соответствующих событий. Механизм обработки событий тот же, что мы рассматривали в главе 10 (см. с. 232) — он описывается моделью «публикация — подписка».
Например, для кнопки button1, в составе которой есть событие Click, регистрируется обработчик button1_Click. являющийся закрытым методом класса Form1. Это значит, что при наступлении события нажатия на кнопку (об этом сообщит операционная система) будет вызван соответствующий обработчик.
Имя обработчика формируется средой автоматически из имени экземпляра компонента и имени события. Обратите внимание на то, что обработчикам передаются два параметра: объект-источник события и запись, соответствующая типу события.
ПРИМЕЧАНИЕ
При задании обработчика можно задать и другое имя, для этого оно записывается справа от имени соответствующего события на вкладке Events окна свойств.
После создания экземпляров компонентов и настройки их свойств компоненты заносятся в коллекцию, доступ к которой выполняется через свойство Controls (операторы 8 и 9). Если этого не сделать, компоненты не будут отображаться на форме. Коллекция поддерживает методы добавления и удаления компонентов (Add и Remove).
Таким образом, для размещения компонента на форме необходимо выполнить три действия:
1. Создать экземпляр соответствующего класса.
2. Настроить свойства экземпляра, в том числе зарегистрировать обработчик
событий.
3. Поместить экземпляр в коллекцию компонентов формы.
Операторы 5 и 10 используются для того, чтобы все изменения в свойства элементов вносились одновременно. Для этого в операторе 5 внесение изменений «замораживается», а в операторе 10 разрешается.
В теле обработчиков событий (операторы 11 и 12) программист может наконец-то самостоятельно написать код, который будет выполняться при наступлении события. Добавим в эти строки операторы, выводящие окна сообщений с соответствующим текстом:
MessageBox.Show("Нажата кнопка button1"): // 11
MessageBox.Show("Нажата клавиша " + e.KeyChar); // 12
Здесь используетсяпростейший вариант статического метода Show класса MessageBox, определенного в пространстве имен System.Windows.Forms. Существуют более десяти перегруженных вариантов этого метода, позволяющих варьировать вид выводимой информации, например задать заголовок окна и наименования отображаемых на нем кнопок.
Прежде чем приступить к изучению форм и элементов управления, размещаемых на формах, необходимо рассмотреть их общего предка — класс Control.