Проект без формы, но со стандартным модулем
Создайте проект. В окне Solution Explorer сотрите значок формы Form1.vb, ответив ОК на предупреждение компьютера. Все – проект лишился формы, а значит и окна кода, принадлежавшего этой форме. Что же теперь делать, где программировать?
Создаем модуль. Ваши действия: Project ® Add New Item (Добавить новый компонент) ® в возникшем окне Add New Item (Рис. 21.1) выбираем Module ® Open.
Рис. 21.1
Вы видите, что в окне Solution Explorer появился значок Module1.vb (Рис. 21.2),
Рис. 21.2
а в проект добавилось окно Module1.vb, явно предназначенное для ввода кода:
Module Module1
End Module
Кстати, пролистайте список компонентов в окне Add New Item. Там вы увидите много полезных и любопытных вещей, которые можно вставлять в проект. Здесь и форма, и класс, и собственный элемент управления (User Control), и Интернет-страничка, и просто текстовый файл, и графические файлы (в том числе иконки и курсоры), и многое другое.
В наш проект добавился так называемый стандартный модуль или просто модуль. Мы уже знаем, что некие модули наряду с классами входят в состав пространств имен. Теперь мы видим, что эти самые модули могут входить и в состав проекта. Ну что ж, посмотрим на них «живьем», проверим, на что они способны.
Обратите внимание, что окно кода для модуля появилось, а вот соответствующего окна конструктора, куда бы мы могли помещать кнопки, метки и другие элементы управления, нет. Его и не будет. Ничего похожего на форму тоже не появилось. Ни формы, ни кнопок, ни меток, никаких других элементов управления в модуле кода нет и быть не может. Ничего такого, что можно увидеть. Получается, что если форма без кода – тело без души, то модуль – душа без тела.
Процедура Main. Запустите проект. VB жалуется на ошибки. Дело в том, что он привык при запуске загружать форму, а формы нет. Эту проблему нужно решать. И решать ее нужно еще и вот по какой причине. Как мы раньше заставляли VB выполнять то, что написано в окне кода? Создавая процедуры обработки событий, самыми популярными из которых были Form1_Load и Button1_Click, а затем, после запуска проекта, щелкая по кнопкам. Теперь формы нет, элементов управления нет, кнопок, по которым можно было бы щелкнуть, нет, событий тоже нет, обрабатывать нечего. Тогда, если мы даже и запишем какой-то код в окне кода модуля, как заставим его выполниться?
На этот случай в модуле (и не только в нем) может существовать процедура с именем Main. Давайте создадим ее:
Module Module1
Sub Main()
Dim x As Integer = InputBox("Введите число")
MsgBox(x ^ 2)
End Sub
End Module
Теперь нам нужно сказать компьютеру, что начинать выполнение проекта нужно не с загрузки формы, которой все равно нет, а с выполнения процедуры Main в модуле Module1. Ваши действия: Project ® WindowsApplication1 Properties ® в возникшем окне (Рис. 21.3) в поле Startup object (объект, с которого стартовать) выбираем Module1 ® ОК.
Рис. 21.3
В это же поле Startup object вам нужно заходить, когда вы переименовали форму Form1, чтобы сообщить VB, что проект нужно запускать с формы, имеющей уже другое имя.
Запускаем проект. Все сработало. Обошлись без формы. Обратите внимание, что работа проекта завершилась сама, автоматически, а когда стартовым объектом является форма, для завершения работы проекта приходится прикладывать усилия.
В окне кода нашего модуля вы можете объявлять какие угодно переменные и записывать какие угодно процедуры пользователя, запуская их из процедуры Main. То есть создавать полноценную программу. Конечно, нужно помнить, что без формы и элементов управления возможности ваши ограничены. Однако множество задач решается и без них. Ну, например, задача суммирования всех чисел из некоего файла.
Модулей добавлять в проект можно сколько угодно.
Термином модуль часто называют не только стандартный модуль, но и форму, и неведомый пока нам модуль класса и, как это ни странно, структуру. Я тоже буду так делать, когда это не будет вызывать путаницы.