Проект с несколькими формами
Создать приложение, которое работает в двух или нескольких окнах. В этом случае для каждого окна понадобится в проекте своя форма.
Создадим новый проект. При этом, как обычно, будет автоматически создана форма Forml. Чтобы добавить в проект еще одну форму, - Project —» Add New Item —» в возникшем окне Add New Item выбираем Windows Form —> Open.
Вы видите, что в окне Solution Explorer появился значок Form2.vb, а в проект добавилась форма Form2, которую мы видим в окне Form2.vb[de- sign].
Щелкните по значку Forml.vb в окне Solution Explorer, затем View —» Code, затем проделайте то же для другой формы - и вот в проекте уже 4 окна: окно кода и окно конструктора для каждой из форм. Таким образом VB предоставляет удобную возможность программировать все происходящее в каждой форме в окне кода, принадлежащем именно этой форме.
Запустите проект. На экране появилась первая форма, а вторая - нет. Зайдите в Project WindowsAppIicationl Properties и в качестве стартового объекта выберите Form2. Теперь на экране появилась вторая форма, а первая нет. Снова выберите Forml.
Добавьте в проект стандартный модуль. Поместите в окна кода модуля и обеих форм следующий текст:
Модуль
Module Modulel
Public F1 As Forml
Public F2 As Form2
End Module
Первая форма
Private Sub Button 1 _Click(ByVal sender As System.Object, ByVal e As System. EventArgs) Handles Buttonl .Click
Me.BackColor = Color.Blue
F2.BackColor = Color. Yellow
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
TextBoxl .Text = "Форма Forml приветствует саму себя!"
F2.TextBox1 .Text = "Привет форме 2 от формы 1!"
F2.Focus()
End Sub
Private Sub Forml_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
F1 = Me
End Sub
Private Sub Button3_Click(ByVaI sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
F2 = New Form2
F2.Show()
End Sub
Вторая форма
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Buttonl .Click
Me.BackColor = Color. White
F1 .BackColor = Color.Tomato
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
TextBoxl .Text = "Форма Form2 приветствует саму себя!"
F1 .TextBoxl .Text = "Привет форме 1 от формы 2!"
F1.Focus()
End Sub
Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
TextBoxl .Text = "Я родилась!"
End Sub
Модули обычно используются в качестве общедоступного склада для переменных, констант, процедур, функций и других элементов VB.
В нашем случае модуль понадобился для объявления двух общедоступных переменных: F1 и F2.
Зачем они нужны?
Почему именно модуль?
Переменная F1 объявляется как объект класса Forml. Это значит, что после загрузки формы Forml мы хотим к ней обращаться по имени F1. Но этого мало. С этой же целью в процедуру Forml_Load вставлен оператор
F1 = Me
чтобы "все" знали, что F1 ссылается именно на этот "экземпляр" формы.
После запуска проекта форма Forml появляется на экране. Чтобы появилась и форма Form2, нажимаем кнопку Button3. Оператор
F2 = New Form2
порождает эту форму как объект класса Form2. А чтобы форма стала видна, выполняется оператор
F2.Show()
Теперь у вас на экране обе формы и вы можете работать с каждой из них, нажимая кнопки и вводя текст в текстовые поля .
Посмотрите на содержимое процедур Button 1 Click в обоих окнах кода. Вы видите, что первая строка обеих процедур красит своего хозяина, вторая соседа. Таким образом, в каждом окне кода можно, как обычно, писать операторы, приказывающие что-то сделать в форме хозяине данного окна, а можно с таким же успехом писать операторы, приказывающие что-то сделать в любой другой форме проекта.
Чтобы VB понимал о какой форме идет речь, перед именем свойства, принадлежащего чужой форме, нужно писать имя этой формы (в нашем случае F1 или F2) с точкой. Если же форма своя, то вместо имени хозяина можно писать слово Me или вообще ничего не писать.
Так, в процедуре Button l Click первой формы вместо
Me.BackColor = Color.Blue
можно написать
F1 .BackColor = Color.Blue или просто
BackColor = Color.Blue
Теперь посмотрите на содержимое процедур Button2_Click в обоих окнах кода. Вы видите, что первая строка обеих процедур выводит текст в текстовое поле TextBoxl своего хозяина, вторая - в текстовое поле TextBoxl соседа. Третья строка обеих процедур при помощи метода Focus, принадлежащего соседу, переводит фокус на соседа. Таким образом, мы можем обращаться не только к свойствам чужой формы, но и к ее элементам управления, и к методам. К ним тоже применимо соглашение об имени хозяина с точкой.
Из одной формы можно обращаться не только к свойствам, объектам и методам, принадлежащим другой форме, но и к переменным, процедурам и другим элементам. Правило везде одно:
Перед именем элемента, принадлежащего другой форме, нужно ставить имя формы- хозяина с точкой.
Структура проекта и решения. Окно Solution Explorer
Solution Explorer предназначен для того, чтобы в удобной форме показывать нам составные части проекта, добавлять, переименовывать и удалять их. Информация в окне представлена в виде древовидной структуры. Она позволяет наглядно видеть вхождение одних компонентов проекта в другие. При этом не всегда те "папки", которые мы видим в окне, являются настоящими папками Windows.
Начнем просмотр снизу. Нижние строки отражают тот факт, что проект состоит из трех модулей; формы Forml, формы Form2 и стандартного модуля Module 1.
В нашем случае каждый из трех упомянутых модулей сохраняется на диске в своем файле, в чем вы можете убедиться, зайдя в Windows в папку проекта. Не всегда это бывает так. в одном файле может хранится несколько модулей.
Щелкая в окне Solution Explorer по нужному модулю, а затем (для форм) по одной из двух кнопок слева на панели окна (View Code и View Designer), мы можем удобно переключаться между различными окнами модулей.
Щелкая правой клавишей мыши в окне Solution Explorer по нужному модулю, а затем в открывшемся контекстном меню выбирая нужный пункт, вы можете этот модуль переименовывать (Rename), копировать (Сору), вырезать (Cut), удалять из проекта (Exclude From Project), удалять с диска (Delete), просматривать и изменять его свойства (Properties). Только не забывайте, что речь идет о файлах модулей, а не о самих модулях как программном тексте в окнах кода. Так, переименовав указанным способом файл Forml.vb, вы не тронули имя этой формы, в чем вы можете убедиться, зайдя в окно свойств формы. И наоборот.
!! Важное замечание. Переименовав форму (а не ее файл) в окне свойств формы, вы не сможете запустить проект, если он с этой формы стартует. Вам понадобится зайти в Windows Applicationl Properties и выбрать там имя формы.
Выше расположена "папка" References (Ссылки), внутри которой в нашем случае перечислены 5 пространств имен из библиотеки классов .NET Framework, которыми ваш проект имеет право пользоваться. Если сотрете оттуда какое-нибудь пространство имен, например System.Drawing, и ваш проект тут же разучится рисовать, зато будет меньше расходовать ресурсов компьютера.
Если вы знаете, что в вашем компьютере где-то есть другие библиотеки, пусть даже не принадлежащие к библиотеке классов .NET Framework, которые умеют делать что-нибудь интересное, щелкните правой клавишей мыши по "папке" References и добавьте нужную ссылку. После этого вы можете попытаться использовать их интересные возможности в своем проекте.
Второй справа на панели окна Solution Explorer на рисунке показана кнопка Show All Files. Она нужна для знатоков, которые хотят увидеть в окне Solution Explorer кроме всего прочего еще и многочисленные файлы, входящие в проект.