Конструктор в программировании

Самый простой способ создать форму-это использовать конструктор Windows Forms в Visual Studio .NET. Разработчик может использовать визуальные инструменты для компоновки формы. А дизайнер переводит макет в исходный код Visual Basic .NET. Если у вас нет Visual Studio .NET, вы можете написать Visual Basic .ЧИСТЫЙ код напрямую и вообще не использовать конструктор. В этом разделе будут продемонстрированы оба метода. Программно форма определяется путем получения класса из класса формы (определенного в System.Windows.Формы). Класс Form содержит ноу-хау для отображения пустой формы. Включая строку заголовка и другие удобства. Которые мы ожидаем от формы Windows.

Добавление элементов в новый класс и переопределение элементов. Унаследованных от класса Form. Добавляют визуальные элементы и поведение в новую форму.

Создание формы с помощью Visual Studio .NET

Создание графического приложения в Visual Studio .NET:

  1. Выберите ФайлСоздатьПроект. Появится диалоговое окно Новый проект, как показано на рис. 4-1.

    Рис. 4-1. Диалоговое окно Новый проект

  2. Выберите проекты Visual Basic в области Типы проектов в левой части диалогового окна.

  3. Выберите приложение Windows на панели Шаблоны в правой части диалогового окна.

  4. Введите имя в текстовое поле Имя.

  5. Нажмите кнопку ОК. Visual Studio .NET создает проект с формой в нем и отображает форму в конструкторе. Как показано на рис .4-2.

Рис. 4-2. Конструктор Windows Forms

Чтобы просмотреть код, созданный конструктором форм Windows Forms Designer. Щелкните правой кнопкой мыши форму и выберите пункт Просмотр кода. Выполнение этого для пустой формы, показанной на рис. 4-2, показывает код, показанный здесь:

Публичный класс Form1 Наследует Систему.Windows.Формы.Форма Сгенерированный дизайнером форм Windows код 

Конечный класс

Это показывает определение класса с именем Form1, который наследует от класса Form. Конструктор Windows Forms также создает много шаблонного кода. Который не должен быть изменен разработчиком. По умолчанию он скрывает этот код от просмотра. Чтобы увидеть код, нажмите на символ“+”. Который появляется слева от строки с надписью “Windows Form Designer generated code”.

Пример 4-1. Код, сгенерированный конструктором Windows Forms для пустой формы

Публичный класс Form1 Наследует Систему.Windows.Формы.Форма #Регион Public Sub New( ) MyBase.New( ) - Этот вызов необходим конструктору форм Windows. 

InitializeComponent( ) 'Добавьте любую инициализацию после вызова InitializeComponent( ) Конец Подводной Лодки -Форма переопределяет dispose для очистки списка компонентов. Защищенные Перегрузки Переопределяют Sub Dispose(ByVal disposing As Boolean) Если утилизировать То Если Нет (компоненты-Это Ничто). То компоненты.Располагать( ) Конец Если Конец Если Моя база.Dispose(disposing) Конец Подводной Лодки Частные компоненты Как Система.ComponentModel.Контейнер 'ПРИМЕЧАНИЕ: Следующая процедура требуется конструктором форм Windows

- Его можно изменить с помощью конструктора форм Windows. - Не изменяйте его с помощью редактора кода. Диагностика.ComponentModel.Container( ) Me.Text = Конец Подводной Лодки #Конечный регион Конечный класс

Конструктор Windows Forms автоматически генерирует код для четырех членов класса:

Новый метод (конструктор класса)

Конструктор вызывает конструктор базового класса. А затем вызывает метод InitializeComponent. Предоставленный разработчиком код инициализации должен следовать за вызовом InitializeComponent. После создания конструктора конструктор больше не прикасается к нему.

Способ утилизации

Метод Dispose-это когда объект избавляется от любых дорогостоящих ресурсов.

В этом случае он вызывает метод Dispose базового класса. Чтобы дать ему возможность освободить любые дорогостоящие ресурсы. Которые он может удерживать. А затем вызывает метод Dispose поля components. (Дополнительные сведения о поле компоненты см. в следующем пункте.) Это. В свою очередь. Вызывает методы Dispose для каждого отдельного компонента в коллекции. Если производный класс использует какие-либо дорогостоящие ресурсы. Разработчик должен добавить код сюда. Чтобы освободить их. Когда форма больше не нужна, весь код, использующий эту форму, должен вызывать

метод Dispose формы. После того, как метод Dispose сгенерирован, дизайнер больше не прикасается к нему.

Поле компоненты

Поле компоненты-это объект типа IContainer (определенный в Системе.пространство имен ComponentModel). Созданный дизайнером код использует поле компоненты для управления завершением компонентов. Которые могут быть добавлены в форму (например. Компонент Таймера).

Метод InitializeComponent

Код в этом методе не должен быть изменен или добавлен разработчиком каким-либо образом. Конструктор Windows Forms автоматически обновляет его по мере необходимости.

При добавлении элементов управления в форму с помощью конструктора в этот метод добавляется код для создания экземпляров элементов управления во время выполнения и установки их начальных свойств. Обратите также внимание в примере 4-1, что свойства самой формы (такие как Текст и Имя) инициализируются в этом методе.

Одна вещь, отсутствующая в этом определении класса, — это основной метод. Вспомним из главы 2, что .СЕТЕВЫЕ приложения должны предоставлять общедоступный, общий основной метод. Этот метод вызывается средой CLR при запуске приложения. Так почему же сгенерированная дизайнером форма не включает в себя основной метод? Это потому, что Visual Basic .СЕТЕВОЙ компилятор в Visual Studio .NET автоматически создает его по мере компиляции кода. Другими словами, в скомпилированном коде есть Основной метод, хотя в исходном коде его нет. Основной метод в скомпилированном коде является членом класса Form1 и эквивалентен этому:

Система.Нарезание резьбы.Нитки.currentThread.Состояние квартиры = _ Система.Нарезание резьбы.Многоквартирный дом.STA Система.Windows.Формы.Приложение.Выполнить(Новая форма 1( )) Конец Подводной Лодки

Обратите внимание. Что Visual Basic .Компилятор командной строки NET не генерирует автоматически метод Main. Этот метод должен появиться в исходном коде. Если требуется использовать компилятор командной строки.

Следующие шаги в разработке формы-назвать файл кода чем-то значимым и задать некоторые свойства формы. Такие как текст заголовка. Чтобы изменить имя файла кода формы. Щелкните его правой кнопкой мыши в окне Обозревателя решений и выберите пункт Переименовать. Если вы следуете вместе с этим примером, введите HelloWindows.vbв качестве имени файла.

Изменение имени файла не приводит к изменению имени класса. Чтобы изменить имя класса. Щелкните правой кнопкой мыши форму в конструкторе и выберите пункт Свойства. В окне Свойства измените значение свойства Name. Для этого примера измените имя на “HelloWindows”.

Чтобы изменить заголовок формы, установите для свойства Text формы новое значение. Установите для свойства Text в этом примере значение “Программирование Visual Basic .NET”.

Затем в форму можно добавить элементы управления из Visual Studio .NET toolbox. Чтобы отобразить панель инструментов, выберите ВидПанель инструментов в Visual Studio .Главное меню СЕТИ. В этом примере дважды щелкните элемент управления Label в панели инструментов. Чтобы добавить элемент управления Label в форму. Используйте окно Свойств, чтобы изменить Текстовое свойство метки на “Hello, Windows!”. А ее свойство шрифта-на Arial 24pt.

Затем дважды щелкните элемент управления Button в панели инструментов. Чтобы добавить элемент управления Button в форму. Используйте окно Свойств, чтобы изменить свойство Name кнопки на “OKButton”. А ее Текстовое свойство-на “OK”.

Наконец, расположите элементы управления по своему желанию. Определите размер элемента управления Label и привлекательной формы и установите свойство FormBorderStyle формы в “FixedToolWindow”. Полученная форма должна выглядеть примерно так, как показано на рис. 4-3.

Рис. 4-3. Форма с элементами управления

Нажмите клавишу F5, чтобы построить и запустить программу. Результат должен выглядеть примерно так, как показано на рисунке 4-4.

Рисунок 4-4. Привет, Windows!, созданный дизайнером Windows Forms Designer

Код, сгенерированный разработчиком, показан в примере 4-2.

Пример 4-2. Привет, Windows! код, сгенерированный конструктором Windows Forms Designer

Публичный класс HelloWindows Наследует Систему.Windows.Формы.Форма #Регион Public Sub New( ) MyBase.New( ) - Этот вызов необходим конструктору форм Windows. InitializeComponent( ) 'Добавьте любую инициализацию после вызова InitializeComponent( ) Конец Подводной лодки -Форма переопределяет dispose для очистки списка компонентов. Защищенные Перегрузки Переопределяют Sub Dispose(ByVal disposing As Boolean) Если утилизировать То Если Нет (компоненты-Ничто). То компоненты.Располагать( ) Конец, Если Конец, Если MyBase.Dispose(утилизация) Конец Подводной лодки Друг с Меткой Событий 1 Как Система.Windows.Формы.Этикетка Друг WithEvents OKButton Как Система.Windows.Формы.Кнопка Частные компоненты Как Система.ComponentModel.Контейнер ПРИМЕЧАНИЕ: Для конструктора форм Windows требуется следующая процедура 'Не изменяйте его с помощью редактора кода. Диагностика.Private Sub InitializeComponent( ) Me.Label1 = Новая система.Windows.Формы.Этикетка( ) Me.OKButton = Новая система.Windows.Формы.Button( ) Me.SuspendLayout( ) ' Шрифт = Новая система.Рисование.Шрифт(Система.Рисование.Стиль шрифта.Регулярный, _ Система.Рисование.GraphicsUnit.Point, CType(0, Байт)) Я.Этикетка1.Местоположение = Новая Система.Рисование.Точка(8, 8) Me.Label1.Name = Я.Этикетка1.Размер = Новая система.Рисование.Размер(264, 48) Me.Label1.TabIndex = 0 Me.Label1.Text = ' Я.Кнопка Местоположение = Новая Система.Рисование.Точка(280, 16) Я,ОкБуттон.Имя = Я,ОкБуттон.TabIndex = 1 Me.OKButton.Текст = '' HelloWindows' Me.AutoScaleBaseSize = Новая Система.Рисование.Размер(5, 13) Me.ClientSize = Новая система.Рисование.Размер(362, 58) Me.AddRange(Новая система.Windows.Формы.Me.FormBorderStyle = _ Система.Windows.Формы.ФормБордерСтайл.FixedToolWindow Me.Name = Me.Text = Me.ResumeLayout(False) Конец Подводной лодки #Конечный регион Конечный класс

Обратите внимание. Что дизайнер внес в код следующие изменения:

  • Два поля друга были добавлены в класс, по одному для каждого из элементов управления. Которые были добавлены в форму:

    Друг с Меткой Событий 1 Как Система.Windows.Формы.Этикетка Друг WithEvents OKButton Как Система.Windows.Формы.Кнопка

    FriendКлючевое слово делает элементы видимыми для другого кода в проекте. Но скрывает их от кода. Работающего в других сборках.

    WithEventsКлючевое слово позволяет классу HelloWindows обрабатывать события. Генерируемые элементами управления. В показанном коде обработчики событий еще не были добавлены, но вы увидите. Как это сделать позже в этом разделе.

    Обратите внимание. Что имена полей соответствуют именам элементов управления. Как показано в окне Свойства.

  • Код был добавлен в метод InitializeComponent для создания экземпляров двух элементов управления и назначения их ссылок на поля элементов:

    Me.Label1 = Новая система.Windows.Формы.Label( ) Me.OKButton = Новая система.Windows.Формы.Кнопка( )
  • В метод InitializeComponent был добавлен код для установки различных свойств метки. Кнопки и формы. Некоторые из этих назначений непосредственно соответствуют настройкам. Выполненным в окне Свойств. В то время как другие являются неявным результатом других действий. Выполняемых в конструкторе (например. Изменение размера формы).

Добавление обработчиков событий

Hello, Windows!Приложение, созданное до сих пор, имеет кнопку OK. Но приложение еще не реагирует на нажатия кнопок. Чтобы добавить обработчик событий Click для кнопки OK. Дважды щелкните ее в конструкторе Windows Forms. Дизайнер отвечает, переключаясь на представление кода формы и вставляя подпрограмму. Которая обрабатывает событие Click (т. е. она будет вызвана. Когда пользователь запущенного приложения нажмет кнопку OK). Подпрограмма, которую создает дизайнер, выглядит следующим образом (обратите внимание. Что я добавил символ продолжения строки для печати в этой книге):

Частный суб OkButton_Click(ByVal sender As System.Объект, _ БыВал е Как Система.EventArgs) Обрабатывает OKButton.Щелчок Конец Подводной Лодки

Затем можно добавить тело подпрограммы. Это было бы вероятной реализацией для этого обработчика событий:

Частный суб OkButton_Click(ByVal sender As System.Объект, _ БыВал е Как Система.EventArgs) Обрабатывает OKButton.Click Me.Close( ) Me.Dispose( ) Конец Подводной Лодки

Альтернативным способом добавления обработчика событий является использование раскрывающихся списков в верхней части окна представления кода формы. В раскрывающемся списке слева выберите объект. Для которого вы хотите добавить обработчик событий. Затем в правом раскрывающемся списке выберите нужное событие. См .Рис. 4-5.

Рис. 4-5. Добавление обработчика событий с помощью раскрывающихся списков представления кода

Обработчики событий могут быть введены непосредственно в код формы. Если вы знаете правильную подпись для обработчика. Подписи обработчиков событий документируются в библиотеке Microsoft Developer Network ( MSDN).