Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП.docx
Скачиваний:
4
Добавлен:
14.11.2019
Размер:
58.48 Кб
Скачать

Проект с несколькими формами

Создать приложение, которое работает в двух или нескольких окнах. В этом случае для каждого окна понадобится в проекте своя форма.

Создадим новый проект. При этом, как обычно, будет автоматически создана форма 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 кроме всего прочего еще и многочисленные файлы, входящие в проект.