В этой лекции вы узнаете, как:
В части 3 вы узнали, как создавать сложные программы на Microsoft Visual Basic .NET, с использованием модулей, массивов, коллекций, текстовых файлов и приложений Microsoft Office. В части 4 вы снова обратитесь к интерфейсу пользователя и узнаете, как создавать проекты с несколькими формами, эффектами анимации, использовать визуальное наследование и добавлять в приложения Visual Basic поддержку печати.
В этой лекции вы узнаете, как добавлять в приложение дополнительные формы, предназначенные для обработки ввода, вывода или специальных сообщений. Вы также узнаете, как использовать свойство DesktopBounds для задания размера и положения формы, как во время выполнения программы добавлять в форму элементы управления, как изменять расположение объектов в форме и как указать форму или процедуру, которая должна быть запущена при запуске программы.
DesktopBounds.Anchor - указывает, какие стороны этих объектов должны оставаться на постоянном расстоянии от краев формы, когда форма изменяет свой размер. Новое свойство Dock заставляет объект оставаться прикрепленным к краю формы при изменении ее размера. Свойства Anchor и Dock позволяют создавать формы, в которых объекты изменяют размеры в соответствии с изменением размера формы.IsMdiContainer установлено на значение True. Дочерние MDI-формы являются обычными формами, у которых свойство MdiParent установлено равным имени родительской формы.Каждая из программ, которые вы до сих пор писали, использовала для ввода и вывода только одну форму. Во многих случаях для взаимодействия с пользователем одной формы вполне достаточно. Но если вам требуется обмениваться с пользователем большим объемом информации, Visual Basic позволяет добавить в программу дополнительные формы. Каждая новая формы рассматривается как объект, который наследует свои свойства от класса System.Windows.Forms.Form. Первая форма программы называется Form1.vb. Последующие формы называются Form2.vb, Form3.vb и т.д. (Вы можете изменить имена форм по умолчанию в диалоговом окне Add New Item или с помощью Обозревателя решений). Следующая таблица содержит список способов практического применения дополнительных форм в вашей программе.
Каждая новая форма имеет уникальное имя и свой собственный набор объектов, свойств, методов и процедур событий.
| Форма или формы | Описание |
|---|---|
| "Титульная" форма | Форма, которая при запуске программы отображает сообщение приветствия, графику или информацию об авторских правах. |
| Инструкции программы | Форма, которая отображает информацию и подсказки о том, как работать с программой. |
| Диалоговые окна | Дополнительные диалоговые окна, которые принимают данные и отображают результаты работы программы. |
| Содержимое документов | Форма, которая отображает содержимое одного или более файлов и изображений, используемых в программе. |
Visual Basic позволяет пользоваться формами достаточно гибко. Вы можете сделать все формы программы видимыми одновременно, а можете загружать и выгружать формы по мере их необходимости. Если вы выводите сразу несколько форм, то можете разрешить пользователю переключаться между ними, а можете управлять порядком, в котором эти формы используются. Форма, которой при ее отображении на экране передается фокус ввода, называется диалоговым окном. Диалоговые окна (называемые в Visual Basic 6 модальными формами ) сохраняют фокус ввода до тех пор, пока пользователь не нажмет на OK, на Cancel ( Отмена ) или не закроет ее другим способом. Чтобы в Visual Basic .NET отобразить существующую форму как диалоговое окно, откройте ее с помощью метода ShowDialog.
Если вы хотите отобразить форму, на которую пользователь сможет переключиться, используйте вместо метода ShowDialog метод Show. В Visual Basic 6 формы, которые могли терять фокус ввода, назывались немодальными формами, и вы по-прежнему можете услышать такое их название. Большинство приложений для Microsoft Windows использует для отображения информации обычные немодальные формы, так как они дают пользователю большую гибкость, и при создании новой формы в Microsoft Visual Studio этот стиль является стилем по умолчанию. Так как формы - это просто члены класса System.Windows.Forms.Form, вы также можете создать и отобразить формы с помощью кода программы.
Чтобы узнать, как в приложении на Visual Basic определяется форма по умолчанию, изучите код в разделе, сгенерированном Windows
В следующих упражнениях показано, как использовать вторую форму для отображения справочной информации о программе Lucky Seven, с которой вы работали в предыдущих лекциях. Добавьте вторую форму с помощью команды Add Windows Form (Добавить форму Windows) из меню Project (Проект), а отображать эту форму на экране будете в коде программы с помощью метода ShowDialog. Вторая форма будет отображать файл Readme.txt, который использовался для отображения справочной информации в лекции 14.
Чтобы добавить в проект вторую форму, щелкните на команде Add Windows Form (Добавить форму Windows) в меню Project (Проект). Вы увидите такое диалоговое окно.

Вы используете диалоговое окно Add New Item (Добавление нового элемента) для добавления в ваш проект на Visual Basic новых форм, классов, модулей и других компонент. Хотя вы выбрали команду Add Windows Form (Добавить форму Windows), формы - не единственные перечисленные здесь компоненты (по умолчанию выделен шаблон Windows Form). Диалоговое окно Add New Item (Добавление нового элемента) достаточно гибко и если вы передумали добавлять форму, то можете выбрать другую компоненту.
Введите в текстовом поле Name (Имя) имя файла HelpInfo.vb, а затем щелкните на Open (Открыть). В проект Lucky Seven будет добавлена вторая форма с именем HelpInfo.vb. Она появится в Обозревателе решений, как показано здесь.

Теперь необходимо добавить в форму HelpInfo.vb несколько элементов управления.
Label и нарисуйте в верхней части формы HelpInfo.vb метку. Сделайте длину этой метки равной ширине формы так, чтобы в ней уместился длинный текст.TextBox и создайте объект текстового поля.Multiline этого объекта текстового поля на значение True, чтобы можно было изменить размер этого объекта.Button и создайте в нижней части формы объект кнопки.Установите для объектов формы HelpInfo.vb следующие свойства:
| Объект | Свойство | Установка |
|---|---|---|
| Label1 | Text | "Инструкции по работе с игровым автоматом Счастливая семерка" |
| TextBox1 | Scrollbars | Vertical |
| Text | пустой (empty) | |
| Button1 | Text | "OK" |
| HelpInfo.vb | Text | "Справка" |
Форма HelpInfo.vb выглядит так.

Теперь необходимо ввести строку кода программы в процедуру события Button1_Click формы HelpInfo.vb.
Button1_Click, сделайте двойной щелчок мышью на кнопке OK.Введите следующий оператор программы:
Me.DialogResult = DialogResult.OK
Форма HelpInfo.vb действует в этом проекте как диалоговое окно, так как она открывается в процедуре события Form1 с помощью метода ShowDialog. После того, как пользователь изучил справочную информацию в этом диалоговом окне, кнопка OK закрывает форму, устанавливая свойство DialogResult DialogResult.OK. Это значение является константой Visual Basic, указывающей, что диалоговое окно закрыто, при этом вызывающую процедуру должно вернуться значение "OK". Более сложное диалоговое окно может с помощью параллельных процедур событий кнопок возвращать и другие значения, такие, как DialogResult.Cancel, DialogResult.No, DialogResult.Yes и DialogResult.Abort. Однако когда устанавливается свойство DialogResult, форма автоматически закрывается.
Прокрутите код программы в Редакторе кода в начало. Введите следующий оператор Imports:
Imports System.IO
Этот оператор создает в проекте ссылку на библиотеку классов, содержащую класс StreamReader. Класс StreamReader не связан непосредственно с определением или использованием дополнительных форм - я просто использую его как быстрый способ добавления в новую используемую мною форму текстовой информации.
HelpInfo_Load. Это процедура события, которая запускается при первой загрузке формы в память и отображении ее на экране.Введите следующие операторы программы:
Dim StreamToDisplay As StreamReader
StreamToDisplay = _
New StreamReader("c:\vbnet03sbs\Гл.15\readme.txt")
TextBox1.Text = StreamToDisplay.ReadToEnd
StreamToDisplay.Close()
TextBox1.Select(0, 0)
Вместо того чтобы вводить содержимое справочного файла в свойство Text объекта текстового поля (что может занять много времени), для открытия, чтения и отображения в объекте текстового поля файла Readme.txt я использовал класс StreamReader. Если вы прочитали лекции 14, то должны помнить, что файл Readme.txt является документом поддержки продукта, содержащим информацию об использовании программы Lucky Seven. Он содержит инструкции по работе, информацию по деинсталляции и контактную информацию. К сожалению, выводить русские символы с помощью этого метода затруднительно. Поэтому мы выведем содержимое англоязычного файла Readme.txt, который находится в папке c:\vbnet03sbs\Гл.15\.
Класс StreamReader был представлен в лекции 12, но вы до сих пор не видели, как он используется в примере кода. StreamReader - это альтернативный по отношению к использованию функции Visual Basic FileOpen способ открывать текстовый файл, предоставляемый .NET Framework. Чтобы использовать StreamReader, необходимо включить в начало кода вашей формы библиотеку классов System.IO. Затем объявите переменную ( StreamToDisplay ) типа StreamReader, которая будет хранить содержимое текстового файла, и откройте этот текстовый файл, указав путь к нему. Наконец, с помощью метода ReadToEnd, который получает из файла весь текст, начиная с текущей позиции (начало текстового фала) и до конца этого файла, вы считываете содержимое текстового файла в переменную StreamToDisplay, и присваиваете ее свойству Text текстового поля. Оператор StreamReader.Close закрывает текстовый файл, а метод Select удаляет выделение из текста, размещенного в объекте текстового поля.
Вы закончили создание формы HelpInfo.vb. Теперь вы добавите объект кнопки и некий код в первую форму.
Button и нарисуйте в нижнем правом углу формы небольшую кнопку.Используйте окно Properties (Свойства), чтобы установить свойство Text кнопки на значение Справка. Ваша форма должна выглядеть примерно так.

Button3_Click, сделайте двойной щелчок мышью на кнопке Справка.Введите следующие операторы программы:
Dim frmHelpDialog As New HelpInfo() frmHelpDialog.ShowDialog()
Эти операторы демонстрируют, как объявлять и отображать в коде программы вторую форму. В отличие от Visual Basic 6, который позволял просто ссылаться на вторую форму в коде с помощью имени (методика, называемая неявным созданием экземпляра), Visual Basic .NET требует, чтобы перед использованием второй формы явно объявили переменную типа формы. Добавив в проект форму HelpInfo.vb, вы создали класс с именем HelpInfo; теперь вы используете его для объявления с помощью оператора Dim переменной с именем frmHelpDialog.
Второй оператор программы использует переменную frmHelpDialog, открывая форму HelpInfo.vb как диалоговое окно с помощью метода ShowDialog. Также можно использовать для открытия этой формы метод Show, но в этом случае Visual Basic не рассматривал бы HelpInfo.vb как диалоговое окно; форма была бы немодальной, и пользователь мог бы переключаться между этой и главной формами по мере необходимости. В дополнение к этому свойство DialogResult в процедуре события Button1_Click формы HelpInfo.vb не закрывало бы форму HelpInfo.vb - вместо этого потребовался бы оператор программы
Me.Close
При создании собственных проектов помните о различиях между модальными и немодальными формами. Между этими типами форм существуют заметные различия, и вы обнаружите, что каждый из них дает пользователю определенные выгоды.
Теперь запустите программу, чтобы увидеть, как работает приложение, содержащее несколько форм.
Щелкните на кнопке Start (Начать) стандартной панели инструментов.
Появится главная форма Lucky Seven.
Чтобы немного поиграть в игру, щелкните семь или восемь раз на кнопке Крутить. Ваш экран будет выглядеть примерно так.

Щелкните на кнопке Справка первой формы. Visual Basic откроет вторую форму проекта (HelpInfo.vb) и отобразит в объекте текстового поля файл Readme.txt. Форма будет выглядеть примерно так.

Хотя в примере программы Multiple Forms я этого не продемонстрировал, вы можете эффективно использовать в программе на Visual Basic свойство DialogResult, которое присваивается в диалоговом окне. Более сложное диалоговое окно может предлагать пользователю дополнительные кнопки - Cancel ( Отмена ), Yes (Да), No (Нет), Abort (Прервать) и так далее. Каждая кнопка диалогового окна может быть ассоциирована со своим типом действия в главной программе. А в каждой процедуре события кнопки диалогового окна можно присваивать свойству DialogResult формы значение, соответствующее названию кнопки, как это сделано в следующем операторе программы:
Me.DialogResult = DialogResult.Cancel ' пользователь щелкнул на кнопке Cancel
В вызывающей процедуре события - другими словами, в процедуре события Button3_Click формы Form1 - вы можете написать дополнительный код программы, который будет определять, на какой кнопке диалогового окна щелкнул пользователь. Эта информация передается обратно в вызывающую процедуру через свойство DialogResult, которое содержится в имени переменной, использованном для объявления и создания экземпляра второй формы. Например, следующий код в Form1 может быть использован для того, чтобы проверить, щелкнул ли пользователь на кнопке OK, Cancel или какой-либо еще кнопке диалогового окна. (Первые две строки не новы, но они показывают имя переменной, которое необходимо использовать.)
Dim frmHelpDialog As New HelpInfo()
frmHelpDialog.ShowDialog()
If frmHelpDialog.DialogResult = DialogResult.OK Then
MsgBox("Пользователь нажал OK")
ElseIf frmHelpDialog.DialogResult = DialogResult.Cancel Then
MsgBox("пользователь нажал Отмена")
Else
MsgBox("Была нажата другая кнопка")
End If
Подобные процедуры событий, которые объявляют переменную, открывают диалоговое окно и обрабатывают выбор, сделанный в этом диалоговом окне, позволяют добавлять в программы любое количество форм и создавать интерфейс пользователя, который выглядит профессионально, является гибким и дружественным к пользователю.
Вы узнали, как добавлять в проект на Visual Basic формы, и как открывать и закрывать эти формы с помощью кода программы. Но какой инструмент или настройка определяют расположение форм на рабочем столе Windows при работе программы? Размещение форм на экране во время выполнения отличается от расположения форм при их создании в среде разработки Visual Studio. В этом разделе вы узнаете, как размещать формы именно там, где они должны находиться во время выполнения, так что пользователи увидят именно то, что вы хотите, чтобы они увидели.
В Visual Basic 6 расположением форм во время выполнения управлял графический инструмент Form Layout (Внешний вид формы). Вы перетаскивали в окне Form Layout (Внешний вид формы) маленький значок формы туда, где хотели увидеть окончательную форму во время выполнения, и Visual Basic записывал указанные координаты экрана. В Visual Basic .NET окна Form Layout (Внешний вид формы) нет, но вы по-прежнему можете точно указать расположение ваших форм на рабочем столе Windows. Инструмент, который вы используете, является не графическим окном размещения, а свойством с именем DesktopBounds, которое есть у каждой формы вашего проекта. Свойство DesktopBounds может быть прочитано или установлено во время выполнения, и оно принимает в качестве аргумента размеры прямоугольника - то есть две пары точек, которые указывают координаты верхнего левого угла окна и нижнего правого угла окна. Эти координатные точки выражаются в пикселях, а расстояния до верхнего левого и нижнего правого углов измеряются от верхнего левого угла экрана. (Подробнее о координатной системе Visual Basic вы узнаете в следующей лекции .) Так как свойство DesktopBounds принимает в качестве аргумента структуру прямоугольника, оно позволяет установить и размер формы, и ее расположение на рабочем столе Windows.
Кроме свойства DesktopBounds существует более простой механизм установки положения формы, который можно использовать во время разработки, хотя у него и меньше возможностей. Этот механизм - свойство StartPosition, которое позиционирует форму на рабочем столе Windows с помощью одной из следующих настроек свойства: Manual, CenterScreen, WindowsDefaultLocation или WindowsDefaultBounds. Значением по умолчанию свойства StartPosition является значение WindowsDefaultLocation. Если вы принимаете это значение, Visual Basic позволит расположить форму на рабочем столе там, где Windows сочтет нужным - обычно в верхнем левом углу экрана.
Если вы установите StartPosition на значение Manual, то можете вручную указать расположение формы с помощью свойства Location, в котором первое число (x) - это расстояние от левого края экрана, а второе число (y) - это расстояние от верхнего края экрана. (Подробнее о свойстве Location вы узнаете в следующей лекции .) Если вы устанавливаете StartPosition на значение CenterScreen, то форма появится в центре рабочего стола Windows. (Это моя любимая настройка свойства StartPosition.) Если вы установите StartPosition на значение WindowsDefaultBounds, то размер формы будет изменен так, чтобы он соответствовал стандартному окну приложения Windows, а затем форма будет открыта в расположении формы Windows по умолчанию. Если вы установите StartPosition на значение CenterParent, форма будет отображена в центре родительской формы. Это последнее значение особенно полезно в так называемых MDI-приложениях (многодокументный интерфейс), в которых родительское и дочерние окна имеют определенные связи.
В следующих упражнениях показано, как установить свойства StartPosition и DesktopBounds для размещения формы Visual Basic. Для размещения ваших форм на рабочем столе Windows во время выполнения вы можете использовать любую из этих методик.
StartPosition на значение CenterScreen. Изменение свойства StartPosition на CenterScreen указывает Visual Basic отобразить форму при запуске программы в центре рабочего стола Windows.Чтобы запустить приложение, щелкните на кнопке Start (Начать). Visual Basic загрузит форму и отобразит ее в центре экрана, как показано ниже.

StartPosition на значение Manual. Установка этого свойства на значение Manual указывает Visual Basic разместить форму в соответствии со значениями, записанными в свойстве Location.Location на значение 100, 50. Свойство Location указывает положение верхнего левого угла формы.Чтобы запустить приложение, щелкните на кнопке Start (Начать). Visual Basic загрузит форму и отобразит ее на рабочем столе Windows в 100 пикселях от левого и 50 пикселях от верхнего краев экрана, как показано ниже.

Вы провели эксперименты с несколькими базовыми параметрами свойства StartPosition, определяющего расположение формы. Теперь вы будете использовать свойство DesktopBounds для задания размера и положения окна второй формы во время выполнения программы. Вы также узнаете, как создавать новую форму во время выполнения без использования команды Add Windows Form (Добавить форму Windows) из меню Project (Проект).
Button и добавьте в форму объект кнопки, а затем измените свойство Text этого объекта кнопки на Создать форму.Button1_Click, сделайте двойной щелчок мышью на кнопке Создать форму.Введите следующий код программы:
'Создаем вторую форму с именем form2 Dim form2 As New Form 'Определяем свойство Text и стиль границ формы form2.Text = "Моя новая форма" form2.FormBorderStyle = FormBorderStyle.FixedDialog 'Указываем, что положение формы устанавливается вручную form2.StartPosition = FormStartPosition.Manual 'Объявляем структуру Rectangle, хранящую размеры формы 'Верхний левый угол формы (200, 100) 'Ширина и высота формы (300, 250) Dim Form2Rect As New Rectangle(200, 100, 300, 250) 'Устанавливаем границы формы с помощью этого объекта Rectangle form2.DesktopBounds = Form2Rect 'Отображаем форму как модальное диалоговое окно form2.ShowDialog()
Когда пользователь щелкает на кнопке Создать форму, эта процедура события создает новую форму с заголовком "Моя новая форма" и фиксированным стилем границ. Чтобы создать новую форму с помощью кода программы, необходимо использовать оператор Dim, а также указать имя переменной формы и класс Form, который автоматически включается в проект как часть пространства имен System.Windows.Forms. Затем установите свойства Text, FormBorderStyle, StartPosition и DesktopBounds. Свойство StartPosition устанавливается на значение FormStartPosition.Manual, что указывает, что положение формы задается вручную. Свойство DesktopBounds задает размеры и положение формы и в качестве аргумента требует тип Rectangle. Тип Rectangle - это структура, которая определяет прямоугольный регион и автоматически включается в проекты на Visual Basic. С помощью оператора Dim объявляется переменная Form2Rect типа Rectangle и инициализируется значениями размеров и положения формы. В конце этой процедуры события новая форма с помощью метода ShowDialog открывается как диалоговое окно.
Чтобы запустить программу, щелкните на кнопке Start (Начать).
Visual Basic отображает на рабочем столе первую форму.
Щелкните на кнопке Создать форму. Visual Basic отображает показанное ниже диалоговое окно Моя новая форма, имеющее размеры и положение, указанные вами в коде программы.

Обратите внимание, что нельзя изменить размер второй формы из-за того, что свойство FormBorderStyle было установлено на значение FixedDialog.
В дополнение к установке размера и расположения формы Visual Basic, вы можете минимизировать форму на панель задач Windows, максимизировать форму так, что она займет весь экран, или восстановить ее нормальный размер. Эти настройки могут быть изменены либо во время разработки, либо во время выполнения в зависимости от текущих значений в программе.
Чтобы максимизировать или минимизировать форму, проверьте, что доступны кнопки формы для максимизации и минимизации. С помощью окна Properties (Свойства) или кода программы укажите следующие настройки:
MaximizeBox = True MinimizeBox = True
Затем в коде программы или с помощью окна Properties (Свойства) установите свойство формы на значение Minimized, Maximized или Normal. Если вы используете код, добавьте константу FormWindowState, как показано ниже. Например, следующий оператор программы минимизирует форму и помещает ее на панель задач Windows:
WindowState = FormWindowState.Minimized
Чтобы управлять максимально и минимально возможными размерами формы, с помощью окна Properties (Свойства) установите при разработке формы свойства MaximumSize или MinimumSize. Чтобы установить MaximumSize и MinimumSize в коде, используйте структуру Size, показанную ниже, которая аналогична структуре Rectangle, использовавшейся в предыдущем упражнении:
Dim FormSize As New Size(400, 300) MaximumSize = FormSize
До этого момента вы добавляли объекты в формы с помощью Области элементов и Конструктора Windows Forms. Однако вы также можете создавать объекты Visual Basic в формах во время выполнения - либо для того, чтобы сократить время разработки, либо чтобы отреагировать на текущие потребности программы. Например, можно сгенерировать простое диалоговое окно, содержащее объекты для обработки вводимых данных.
Создание объектов очень просто, так как базовые классы, которые определяют элементы управления в Области элементов, доступны всем программам. Объекты объявляются и их экземпляры создаются с помощью ключевых слов Dim и New. Следующий оператор программы показывает, как работает этот процесс при создании в форме нового объекта кнопки с именем button1:
Dim button1 as New Button
После того, как вы создали объект во время выполнения, можно использовать код для настройки его свойств. В частности, полезно указать имя и расположение объекта, так как вы не указали их вручную с помощью Конструктора Windows Forms. Например, следующие операторы программы настраивают свойства Text и Location нового объекта кнопки:
button1.Text = "Нажми меня" button1.Location = New Point(20, 25)
Наконец, ваш код должен добавить этот новый объект в коллекцию Controls формы, на которой он был создан, чтобы он стал видимым в программе и активным:
form2.Controls.Add(button1)
Вы можете использовать этот процесс для добавления в форму Visual Basic любого элемента управления из Области элементов. Имя класса, которое вы используете для объявления и создания экземпляра элемента управления - это вариант имени, которое появляется в свойстве Name для каждого элемента управления.
Следующее упражнение демонстрирует, как во время выполнения можно добавить в новую форму элементы управления Label и Button. Эта новая форма будет действовать как диалоговое окно, которое отображает текущую дату.
Button и добавьте в форму объект кнопки, а затем измените свойство Text этого объекта кнопки на Отобразить дату.Button1_Click, сделайте двойной щелчок мышью на кнопке Отобразить дату.Введите следующий код программы:
'Объявляем новую форму и объекты элементов управления Dim form2 As New Form Dim lblDate As New Label Dim btnCancel As New Button ' Устанавливаем свойства метки lblDate.Text = "Текущая дата: " DateString lblDate.Size = New Size(150, 50) lblDate.Location = New Point(80, 50) ' Устанавливаем свойства кнопки btnCancel.Text = "Отмена" btnCancel.Location = New Point(110, 100) ' Устанавливаем свойства формы form2.Text = "Текущая дата" form2.CancelButton = btnCancel form2.StartPosition = FormStartPosition.CenterScreen 'Добавляем новые объекты в коллекцию Controls form2.Controls.Add(lblDate) form2.Controls.Add(btnCancel) 'Отображаем форму как диалоговое окно form2.ShowDialog()
Эта процедура события отображает на экране новую форму, содержащую объекты метки и кнопки. Объект метки содержит текущую дату в соответствии с системными часами вашего компьютера (полученную с помощью DateString ), а свойство Text объекта кнопки установлено на Отмена. Вы добавляете элементы управления в форму, объявляя переменные для хранения этих элементов управления, устанавливая свойства этих объектов и добавляя объекты в коллекцию Controls. В этом упражнении я также впервые демонстрирую свойства Size и CancelButton. Свойство Size требует структуры Size. Для создания структуры Size используется ключевое слово New. Свойство CancelButton позволяет пользователю закрыть диалоговое окно, нажав на (Esc) или щелкнув на кнопке Отмена. (Эти два действия считаются эквивалентными.)
Чтобы запустить программу, щелкните на кнопке Start (Начать).
Visual Basic отображает на рабочем столе первую форму.
CancelButton объекта btnCancel, оба действия (щелчок на кнопке Отмена и нажатие (Esc)) приводят к одинаковому результату.Чтобы завершить выполнение программы, щелкните на кнопке Закрыть формы. Программа остановится, и вернется среда разработки.

Когда вы программно добавляете в форму элементы управления, то чтобы правильно разместить их, необходимо использовать метод проб и ошибок. В этом случае Конструктор Windows Forms вам не поможет - только координаты (x, y) свойств Location и Size, значения которых совсем неочевидны, если у вас нет хорошего двухмерного воображения или времени на многократные запуски программы для проверки размещения объектов.
К счастью Visual Basic .NET содержит несколько свойств, которые позволяют организовать объекты в форме во время выполнения. Они включают свойство Anchor, которое заставляет объект на форме оставаться на одном и том же расстоянии от указанного края формы, и свойство Dock, которое заставляет объект оставаться прикрепленным к одному из краев формы. Свойства Anchor и Dock можно использовать при проектировании, но я обнаружил, что они также очень полезны при программном расположении объектов во время выполнения. В следующем упражнении показано, как работают эти свойства.
PictureBox, а затем добавьте по центру верхней части формы объект области вывода изображений.TextBox и создайте текстовое поле.Multiline этого текстового поля на значение True, чтобы можно было изменить размер этого объекта.Button и добавьте в нижнем правом углу формы объект кнопки.Установите для формы и ее объектов следующие свойства:
| Объект | Свойство | Установка |
|---|---|---|
| PictureBox1 | Image | "c:\vbnet03sbs\Гл.16\sun.ico" |
| SizeMode | StretchImage | |
| Button1 | Text | "Разместить" |
| Form1 | Text | "Примеры Anchor и Dock" |
Ваша формы должна выглядеть примерно так.

Button1_Click, сделайте двойной щелчок мышью на кнопке Разместить.Введите следующий код программы:
PictureBox1.Dock = DockStyle.Top TextBox1.Anchor = AnchorStyles.Bottom Or _ AnchorStyles.Left Or AnchorStyles.Right Or _ AnchorStyles.Top Button1.Anchor = AnchorStyles.Bottom Or _ AnchorStyles.Right
Когда выполняется эта процедура события, свойство Dock объекта PictureBox1 используется для пристыковки области изображения к верхней части формы. Это заставляет верхний край объекта области изображения прикоснуться и "прилипнуть" к верхнему краю формы - почти так, как работает собственная функция среды разработки Visual Studio. Единственное удивительное в поведении объекта здесь то, что объект области вывода изображений также изменяет свой размер так, что его края прилипают к левому и правому краям формы. В следующих шагах вы увидите это поведение.
Далее используется свойство Anchor для объектов TextBox1 и Button1. Свойство Anchor будет поддерживать текущее расстояние от указанных краев формы, даже если размер формы буде меняться. Заметьте, что свойство Anchor поддерживает текущее расстояние от объекта для указанных краев формы - оно не прикрепляет объект к указанному краю, если он к нему уже не прикреплен. В этом примере указано, что объект TextBox1 должен быть зафиксирован по всем расстояниям от краев формы (сверху, снизу, слева и справа). Для объединения выбора краев я использую оператор Or. Объект Button1 я закрепляю относительно нижнего и правого краев формы.
Чтобы запустить программу, щелкните на кнопке Start (Начать).
Появится форма, имеющая разработанный вами вид.
Щелкните на кнопке Разместить формы. Объект области вывода изображений будет прикреплен к верхнему краю формы. Размер области вывода изображений также изменится, и ее края прилипнут к левому и правому краям формы, как показано ниже.

Обратите внимание, что значок, выведенный в области изображений, искажен, что является результатом процесса прикрепления.
Снова увеличьте размер формы. Когда вы будете изменять размер формы, область вывода изображений и объект текстового поля также будут менять свои размеры. Так как текстовое поле закреплено по всем четырем сторонам, расстояние между краями формы и текстового поля остаются постоянными. При изменении размера становится ясно, что объект кнопки меняет свое положение. Хотя расстояние между объектом кнопки и верхним и левым краями формы меняется, расстояние до нижнего и правого краев остается неизменным, как показано здесь.

Anchor и Dock. Когда закончите, щелкните на кнопке Закрыть формы, чтобы закрыть программу.Теперь у вас есть необходимые навыки, чтобы добавлять в проект новые формы, размещать их на рабочем столе Windows, заполнять их новыми элементами управления и размещать эти элементы управления с помощью кода программы. Вы получили большой опыт, связанный с работой с новыми формами в программе на Visual Basic.
Если ваш проект содержит более одной формы, то какая из этих форм будет загружаться первой при запуске вашего приложения? Хотя Visual Basic обычно первой загружает ту форму, которая была в проекте создана первой (Form1.vb), вы можете изменить загружаемую Visual Basic первой форму, изменив одну настройку в диалоговом окне Property Pages (Страницы свойств) проекта. Вы также можете указать Visual Basic выполнить сначала процедуру с именем Sub Main, которая может объявлять открытые переменные и после выполнения каких-либо действий или проверок загружать одну или несколько форм. Имея возможность указать, какую форму или процедуру следует загружать первой, вы можете создавать поистине хорошо настраиваемый и адаптируемый интерфейс пользователя вашей программы.
В следующем упражнении показано, как изменять первую загружаемую форму, которая отображается Visual Basic при запуске вашей программы. Вы также узнаете, как устанавливать в качестве загрузочного объекта вашего проекта процедуру Sub Main.
Щелкните в Обозревателе решений на значке проекта My Startup Form, а затем щелкните на Properties (Свойства) в меню Project (Проект). Откроется диалоговое окно Startup Form Property Pages (Страницы свойств Startup Form), показанное ниже.

Диалоговое окно Property Pages (Страницы свойств) позволяет настроить свойства, которые применяются ко всему проекту. В данном случае для указания новой загрузочной формы используется раскрывающийся список Startup Object (Начальный объект).
Form2. Visual Basic изменит загрузочную форму вашего проекта с Form1 на Form2. Когда программа будет запущена, будет отображена Form2, а форма Form1 появится только в том случае, если она будет открыта с помощью метода Show или ShowDialog.Form2.Теперь вы должны добавить в проект модуль с процедурой Sub Main и установить ее в качестве загрузочного объекта так, чтобы выполнение начиналось со стандартного модуля.
Введите между операторами программы Module и End Module следующий код:
Public MyForm1 As New Form1()
Public MyForm2 As New Form2()
Public Sub Main()
MsgBox("Это Sub Main")
'поместите дополнительный код здесь
MyForm1.ShowDialog()
End Sub
Когда вы добавляете в ваш проект процедуру Sub Main, необходимо ввести ее в стандартном модуле. Процедура Sub Main должна быть объявлена как Public и не должна принимать никаких аргументов (за исключением консольных приложений, которые скоро будут обсуждаться). Заметьте, что в дополнение к определению процедуры Sub Main, которая отображает окно сообщения, а затем открывает Form1 как диалоговое окно, я также объявил две открытые переменные, представляющие в проекте Form1 и Form2. Для создания экземпляров объектов Form1 и Form2 используется ключевое слово New. В Visual Basic 6 объекты форм были доступны в модулях автоматически, и не было необходимости создавать новые экземпляры.
Sub Main. Visual Basic изменит загрузочную форму вашего проекта с Form2 на Sub Main. Когда программа будет запущена, первой будет выполнена процедура Sub Main, а затем будет отображено окно Form1.Щелкните на кнопке Start (Начать) панели инструментов. Программа запустится на выполнение в среде разработки, и будет выполнена процедура Sub Main. Вы увидите такое окно сообщения.

Sub Main закроет это окно сообщения и отобразит Form1 как новое диалоговое окно программы.Хотя это демонстрационное упражнение довольно простое, вы можете видеть, что Visual Basic предоставляет достаточную гибкость в вопросе запуска вашей программы. Вы можете указать в качестве начала вашего приложения различные формы, а можете добавить в ваш проект процедуру Sub Main и начать выполнение непосредственно с кода программы.
| Чтобы | Сделайте следующее |
|---|---|
| Добавить в программу новые формы | Щелкните на стрелке вниз справа от кнопки Add New Item (Добавить новый компонент) на стандартной панели инструментов, а затем щелкните на Add Windows Form (Добавить форму Windows) или в меню Project выберите пункт Add Windows Form (Добавить форму Windows), а затем щелкните на Open (Открыть). |
| Создать и изменить новую форму с помощью кода программы | Создайте новую форму с помощью ключевых слов Dim form2 As New Form form2.Text = "My New Form" |
| Отобразить форму на экране | Используйте метод Show или ShowDialog. Например: form2.ShowDialog() |
| Поместить загрузочную форму на рабочем столе Windows | Установите свойство StartPosition на одно из возможных значений, таких, как CenterScreen или CenterParent. |
| Задать размер и положение загрузочный формы на рабочем столе Windows с помощью кода | Установите StartPosition на значение Manual, объявите структуру Rectangle, которая определяет размер и положение формы, а затем используйте свойство DesktopBounds для задания размера и положения формы на рабочем столе. Например: form2.StartPosition = FormStartPosition.Manual Dim Form2Rect As New Rectangle _ (200, 100, 300, 250) form2.DesktopBounds = Form2Rect |
| Минимизировать, максимизировать или восстановить размер формы во время выполнения программы | При разработке формы установите ее свойства MaximizeBox и MinimizeBox формы на значение True. В коде, чтобы изменить состояние окна формы, установите свойство формы |
| Добавить в форму элементы управления во время выполнения программы | Создайте элемент управления требуемого типа, установите его свойства, а затем добавьте его в коллекцию Controls формы. Например: Dim button1 as New Button button1.Text = "Нажми меня" button1.Location = New Point(20, 25) form2.Controls.Add(button1) |
| Закрепить объект на определенном расстоянии от указанных краев формы | Установите свойство Anchor объекта и укажите края, расстояния до которых вы хотите сохранить неизменными. При указании нескольких краев используйте оператор Or. Например: Button1.Anchor = AnchorStyles.Bottom Or _ AnchorStyles.Right |
| Прикрепить объект к одному из краев формы | Установите свойство Dock этого объекта и укажите край, к которому вы хотите прикрепить объект. Например: PictureBox1.Dock = DockStyle.Top |
| Указать загрузочный объект проекта | Щелкните в Обозревателе решений на значке проекта, а затем щелкните на Properties (Свойства) в меню Project (Проект). В раскрывающемся списке Startup Object (Начальный объект) укажите загрузочный объект. (Выберите либо форму проекта, либо процедуру Sub Main.) |
В этой лекции вы узнаете, как:
В части 3 вы узнали, как создавать сложные программы на Microsoft Visual Basic .NET, с использованием модулей, массивов, коллекций, текстовых файлов и приложений Microsoft Office. В части 4 вы снова обратитесь к интерфейсу пользователя и узнаете, как создавать проекты с несколькими формами, эффектами анимации, использовать визуальное наследование и добавлять в приложения Visual Basic поддержку печати.
В этой лекции вы узнаете, как добавлять в приложение дополнительные формы, предназначенные для обработки ввода, вывода или специальных сообщений. Вы также узнаете, как использовать свойство DesktopBounds для задания размера и положения формы, как во время выполнения программы добавлять в форму элементы управления, как изменять расположение объектов в форме и как указать форму или процедуру, которая должна быть запущена при запуске программы.
DesktopBounds.Anchor - указывает, какие стороны этих объектов должны оставаться на постоянном расстоянии от краев формы, когда форма изменяет свой размер. Новое свойство Dock заставляет объект оставаться прикрепленным к краю формы при изменении ее размера. Свойства Anchor и Dock позволяют создавать формы, в которых объекты изменяют размеры в соответствии с изменением размера формы.IsMdiContainer установлено на значение True. Дочерние MDI-формы являются обычными формами, у которых свойство MdiParent установлено равным имени родительской формы.Каждая из программ, которые вы до сих пор писали, использовала для ввода и вывода только одну форму. Во многих случаях для взаимодействия с пользователем одной формы вполне достаточно. Но если вам требуется обмениваться с пользователем большим объемом информации, Visual Basic позволяет добавить в программу дополнительные формы. Каждая новая формы рассматривается как объект, который наследует свои свойства от класса System.Windows.Forms.Form. Первая форма программы называется Form1.vb. Последующие формы называются Form2.vb, Form3.vb и т.д. (Вы можете изменить имена форм по умолчанию в диалоговом окне Add New Item или с помощью Обозревателя решений). Следующая таблица содержит список способов практического применения дополнительных форм в вашей программе.
Каждая новая форма имеет уникальное имя и свой собственный набор объектов, свойств, методов и процедур событий.
| Форма или формы | Описание |
|---|---|
| "Титульная" форма | Форма, которая при запуске программы отображает сообщение приветствия, графику или информацию об авторских правах. |
| Инструкции программы | Форма, которая отображает информацию и подсказки о том, как работать с программой. |
| Диалоговые окна | Дополнительные диалоговые окна, которые принимают данные и отображают результаты работы программы. |
| Содержимое документов | Форма, которая отображает содержимое одного или более файлов и изображений, используемых в программе. |
Visual Basic позволяет пользоваться формами достаточно гибко. Вы можете сделать все формы программы видимыми одновременно, а можете загружать и выгружать формы по мере их необходимости. Если вы выводите сразу несколько форм, то можете разрешить пользователю переключаться между ними, а можете управлять порядком, в котором эти формы используются. Форма, которой при ее отображении на экране передается фокус ввода, называется диалоговым окном. Диалоговые окна (называемые в Visual Basic 6 модальными формами ) сохраняют фокус ввода до тех пор, пока пользователь не нажмет на OK, на Cancel ( Отмена ) или не закроет ее другим способом. Чтобы в Visual Basic .NET отобразить существующую форму как диалоговое окно, откройте ее с помощью метода ShowDialog.
Если вы хотите отобразить форму, на которую пользователь сможет переключиться, используйте вместо метода ShowDialog метод Show. В Visual Basic 6 формы, которые могли терять фокус ввода, назывались немодальными формами, и вы по-прежнему можете услышать такое их название. Большинство приложений для Microsoft Windows использует для отображения информации обычные немодальные формы, так как они дают пользователю большую гибкость, и при создании новой формы в Microsoft Visual Studio этот стиль является стилем по умолчанию. Так как формы - это просто члены класса System.Windows.Forms.Form, вы также можете создать и отобразить формы с помощью кода программы.
Чтобы узнать, как в приложении на Visual Basic определяется форма по умолчанию, изучите код в разделе, сгенерированном Windows
В следующих упражнениях показано, как использовать вторую форму для отображения справочной информации о программе Lucky Seven, с которой вы работали в предыдущих лекциях. Добавьте вторую форму с помощью команды Add Windows Form (Добавить форму Windows) из меню Project (Проект), а отображать эту форму на экране будете в коде программы с помощью метода ShowDialog. Вторая форма будет отображать файл Readme.txt, который использовался для отображения справочной информации в лекции 14.
Чтобы добавить в проект вторую форму, щелкните на команде Add Windows Form (Добавить форму Windows) в меню Project (Проект). Вы увидите такое диалоговое окно.

Вы используете диалоговое окно Add New Item (Добавление нового элемента) для добавления в ваш проект на Visual Basic новых форм, классов, модулей и других компонент. Хотя вы выбрали команду Add Windows Form (Добавить форму Windows), формы - не единственные перечисленные здесь компоненты (по умолчанию выделен шаблон Windows Form). Диалоговое окно Add New Item (Добавление нового элемента) достаточно гибко и если вы передумали добавлять форму, то можете выбрать другую компоненту.
Введите в текстовом поле Name (Имя) имя файла HelpInfo.vb, а затем щелкните на Open (Открыть). В проект Lucky Seven будет добавлена вторая форма с именем HelpInfo.vb. Она появится в Обозревателе решений, как показано здесь.

Теперь необходимо добавить в форму HelpInfo.vb несколько элементов управления.
Label и нарисуйте в верхней части формы HelpInfo.vb метку. Сделайте длину этой метки равной ширине формы так, чтобы в ней уместился длинный текст.TextBox и создайте объект текстового поля.Multiline этого объекта текстового поля на значение True, чтобы можно было изменить размер этого объекта.Button и создайте в нижней части формы объект кнопки.Установите для объектов формы HelpInfo.vb следующие свойства:
| Объект | Свойство | Установка |
|---|---|---|
| Label1 | Text | "Инструкции по работе с игровым автоматом Счастливая семерка" |
| TextBox1 | Scrollbars | Vertical |
| Text | пустой (empty) | |
| Button1 | Text | "OK" |
| HelpInfo.vb | Text | "Справка" |
Форма HelpInfo.vb выглядит так.

Теперь необходимо ввести строку кода программы в процедуру события Button1_Click формы HelpInfo.vb.
Button1_Click, сделайте двойной щелчок мышью на кнопке OK.Введите следующий оператор программы:
Me.DialogResult = DialogResult.OK
Форма HelpInfo.vb действует в этом проекте как диалоговое окно, так как она открывается в процедуре события Form1 с помощью метода ShowDialog. После того, как пользователь изучил справочную информацию в этом диалоговом окне, кнопка OK закрывает форму, устанавливая свойство DialogResult DialogResult.OK. Это значение является константой Visual Basic, указывающей, что диалоговое окно закрыто, при этом вызывающую процедуру должно вернуться значение "OK". Более сложное диалоговое окно может с помощью параллельных процедур событий кнопок возвращать и другие значения, такие, как DialogResult.Cancel, DialogResult.No, DialogResult.Yes и DialogResult.Abort. Однако когда устанавливается свойство DialogResult, форма автоматически закрывается.
Прокрутите код программы в Редакторе кода в начало. Введите следующий оператор Imports:
Imports System.IO
Этот оператор создает в проекте ссылку на библиотеку классов, содержащую класс StreamReader. Класс StreamReader не связан непосредственно с определением или использованием дополнительных форм - я просто использую его как быстрый способ добавления в новую используемую мною форму текстовой информации.
HelpInfo_Load. Это процедура события, которая запускается при первой загрузке формы в память и отображении ее на экране.Введите следующие операторы программы:
Dim StreamToDisplay As StreamReader
StreamToDisplay = _
New StreamReader("c:\vbnet03sbs\Гл.15\readme.txt")
TextBox1.Text = StreamToDisplay.ReadToEnd
StreamToDisplay.Close()
TextBox1.Select(0, 0)
Вместо того чтобы вводить содержимое справочного файла в свойство Text объекта текстового поля (что может занять много времени), для открытия, чтения и отображения в объекте текстового поля файла Readme.txt я использовал класс StreamReader. Если вы прочитали лекции 14, то должны помнить, что файл Readme.txt является документом поддержки продукта, содержащим информацию об использовании программы Lucky Seven. Он содержит инструкции по работе, информацию по деинсталляции и контактную информацию. К сожалению, выводить русские символы с помощью этого метода затруднительно. Поэтому мы выведем содержимое англоязычного файла Readme.txt, который находится в папке c:\vbnet03sbs\Гл.15\.
Класс StreamReader был представлен в лекции 12, но вы до сих пор не видели, как он используется в примере кода. StreamReader - это альтернативный по отношению к использованию функции Visual Basic FileOpen способ открывать текстовый файл, предоставляемый .NET Framework. Чтобы использовать StreamReader, необходимо включить в начало кода вашей формы библиотеку классов System.IO. Затем объявите переменную ( StreamToDisplay ) типа StreamReader, которая будет хранить содержимое текстового файла, и откройте этот текстовый файл, указав путь к нему. Наконец, с помощью метода ReadToEnd, который получает из файла весь текст, начиная с текущей позиции (начало текстового фала) и до конца этого файла, вы считываете содержимое текстового файла в переменную StreamToDisplay, и присваиваете ее свойству Text текстового поля. Оператор StreamReader.Close закрывает текстовый файл, а метод Select удаляет выделение из текста, размещенного в объекте текстового поля.
Вы закончили создание формы HelpInfo.vb. Теперь вы добавите объект кнопки и некий код в первую форму.
Button и нарисуйте в нижнем правом углу формы небольшую кнопку.Используйте окно Properties (Свойства), чтобы установить свойство Text кнопки на значение Справка. Ваша форма должна выглядеть примерно так.

Button3_Click, сделайте двойной щелчок мышью на кнопке Справка.Введите следующие операторы программы:
Dim frmHelpDialog As New HelpInfo() frmHelpDialog.ShowDialog()
Эти операторы демонстрируют, как объявлять и отображать в коде программы вторую форму. В отличие от Visual Basic 6, который позволял просто ссылаться на вторую форму в коде с помощью имени (методика, называемая неявным созданием экземпляра), Visual Basic .NET требует, чтобы перед использованием второй формы явно объявили переменную типа формы. Добавив в проект форму HelpInfo.vb, вы создали класс с именем HelpInfo; теперь вы используете его для объявления с помощью оператора Dim переменной с именем frmHelpDialog.
Второй оператор программы использует переменную frmHelpDialog, открывая форму HelpInfo.vb как диалоговое окно с помощью метода ShowDialog. Также можно использовать для открытия этой формы метод Show, но в этом случае Visual Basic не рассматривал бы HelpInfo.vb как диалоговое окно; форма была бы немодальной, и пользователь мог бы переключаться между этой и главной формами по мере необходимости. В дополнение к этому свойство DialogResult в процедуре события Button1_Click формы HelpInfo.vb не закрывало бы форму HelpInfo.vb - вместо этого потребовался бы оператор программы
Me.Close
При создании собственных проектов помните о различиях между модальными и немодальными формами. Между этими типами форм существуют заметные различия, и вы обнаружите, что каждый из них дает пользователю определенные выгоды.
Теперь запустите программу, чтобы увидеть, как работает приложение, содержащее несколько форм.
Щелкните на кнопке Start (Начать) стандартной панели инструментов.
Появится главная форма Lucky Seven.
Чтобы немного поиграть в игру, щелкните семь или восемь раз на кнопке Крутить. Ваш экран будет выглядеть примерно так.

Щелкните на кнопке Справка первой формы. Visual Basic откроет вторую форму проекта (HelpInfo.vb) и отобразит в объекте текстового поля файл Readme.txt. Форма будет выглядеть примерно так.

Хотя в примере программы Multiple Forms я этого не продемонстрировал, вы можете эффективно использовать в программе на Visual Basic свойство DialogResult, которое присваивается в диалоговом окне. Более сложное диалоговое окно может предлагать пользователю дополнительные кнопки - Cancel ( Отмена ), Yes (Да), No (Нет), Abort (Прервать) и так далее. Каждая кнопка диалогового окна может быть ассоциирована со своим типом действия в главной программе. А в каждой процедуре события кнопки диалогового окна можно присваивать свойству DialogResult формы значение, соответствующее названию кнопки, как это сделано в следующем операторе программы:
Me.DialogResult = DialogResult.Cancel ' пользователь щелкнул на кнопке Cancel
В вызывающей процедуре события - другими словами, в процедуре события Button3_Click формы Form1 - вы можете написать дополнительный код программы, который будет определять, на какой кнопке диалогового окна щелкнул пользователь. Эта информация передается обратно в вызывающую процедуру через свойство DialogResult, которое содержится в имени переменной, использованном для объявления и создания экземпляра второй формы. Например, следующий код в Form1 может быть использован для того, чтобы проверить, щелкнул ли пользователь на кнопке OK, Cancel или какой-либо еще кнопке диалогового окна. (Первые две строки не новы, но они показывают имя переменной, которое необходимо использовать.)
Dim frmHelpDialog As New HelpInfo()
frmHelpDialog.ShowDialog()
If frmHelpDialog.DialogResult = DialogResult.OK Then
MsgBox("Пользователь нажал OK")
ElseIf frmHelpDialog.DialogResult = DialogResult.Cancel Then
MsgBox("пользователь нажал Отмена")
Else
MsgBox("Была нажата другая кнопка")
End If
Подобные процедуры событий, которые объявляют переменную, открывают диалоговое окно и обрабатывают выбор, сделанный в этом диалоговом окне, позволяют добавлять в программы любое количество форм и создавать интерфейс пользователя, который выглядит профессионально, является гибким и дружественным к пользователю.
Вы узнали, как добавлять в проект на Visual Basic формы, и как открывать и закрывать эти формы с помощью кода программы. Но какой инструмент или настройка определяют расположение форм на рабочем столе Windows при работе программы? Размещение форм на экране во время выполнения отличается от расположения форм при их создании в среде разработки Visual Studio. В этом разделе вы узнаете, как размещать формы именно там, где они должны находиться во время выполнения, так что пользователи увидят именно то, что вы хотите, чтобы они увидели.
В Visual Basic 6 расположением форм во время выполнения управлял графический инструмент Form Layout (Внешний вид формы). Вы перетаскивали в окне Form Layout (Внешний вид формы) маленький значок формы туда, где хотели увидеть окончательную форму во время выполнения, и Visual Basic записывал указанные координаты экрана. В Visual Basic .NET окна Form Layout (Внешний вид формы) нет, но вы по-прежнему можете точно указать расположение ваших форм на рабочем столе Windows. Инструмент, который вы используете, является не графическим окном размещения, а свойством с именем DesktopBounds, которое есть у каждой формы вашего проекта. Свойство DesktopBounds может быть прочитано или установлено во время выполнения, и оно принимает в качестве аргумента размеры прямоугольника - то есть две пары точек, которые указывают координаты верхнего левого угла окна и нижнего правого угла окна. Эти координатные точки выражаются в пикселях, а расстояния до верхнего левого и нижнего правого углов измеряются от верхнего левого угла экрана. (Подробнее о координатной системе Visual Basic вы узнаете в следующей лекции .) Так как свойство DesktopBounds принимает в качестве аргумента структуру прямоугольника, оно позволяет установить и размер формы, и ее расположение на рабочем столе Windows.
Кроме свойства DesktopBounds существует более простой механизм установки положения формы, который можно использовать во время разработки, хотя у него и меньше возможностей. Этот механизм - свойство StartPosition, которое позиционирует форму на рабочем столе Windows с помощью одной из следующих настроек свойства: Manual, CenterScreen, WindowsDefaultLocation или WindowsDefaultBounds. Значением по умолчанию свойства StartPosition является значение WindowsDefaultLocation. Если вы принимаете это значение, Visual Basic позволит расположить форму на рабочем столе там, где Windows сочтет нужным - обычно в верхнем левом углу экрана.
Если вы установите StartPosition на значение Manual, то можете вручную указать расположение формы с помощью свойства Location, в котором первое число (x) - это расстояние от левого края экрана, а второе число (y) - это расстояние от верхнего края экрана. (Подробнее о свойстве Location вы узнаете в следующей лекции .) Если вы устанавливаете StartPosition на значение CenterScreen, то форма появится в центре рабочего стола Windows. (Это моя любимая настройка свойства StartPosition.) Если вы установите StartPosition на значение WindowsDefaultBounds, то размер формы будет изменен так, чтобы он соответствовал стандартному окну приложения Windows, а затем форма будет открыта в расположении формы Windows по умолчанию. Если вы установите StartPosition на значение CenterParent, форма будет отображена в центре родительской формы. Это последнее значение особенно полезно в так называемых MDI-приложениях (многодокументный интерфейс), в которых родительское и дочерние окна имеют определенные связи.
В следующих упражнениях показано, как установить свойства StartPosition и DesktopBounds для размещения формы Visual Basic. Для размещения ваших форм на рабочем столе Windows во время выполнения вы можете использовать любую из этих методик.
StartPosition на значение CenterScreen. Изменение свойства StartPosition на CenterScreen указывает Visual Basic отобразить форму при запуске программы в центре рабочего стола Windows.Чтобы запустить приложение, щелкните на кнопке Start (Начать). Visual Basic загрузит форму и отобразит ее в центре экрана, как показано ниже.

StartPosition на значение Manual. Установка этого свойства на значение Manual указывает Visual Basic разместить форму в соответствии со значениями, записанными в свойстве Location.Location на значение 100, 50. Свойство Location указывает положение верхнего левого угла формы.Чтобы запустить приложение, щелкните на кнопке Start (Начать). Visual Basic загрузит форму и отобразит ее на рабочем столе Windows в 100 пикселях от левого и 50 пикселях от верхнего краев экрана, как показано ниже.

Вы провели эксперименты с несколькими базовыми параметрами свойства StartPosition, определяющего расположение формы. Теперь вы будете использовать свойство DesktopBounds для задания размера и положения окна второй формы во время выполнения программы. Вы также узнаете, как создавать новую форму во время выполнения без использования команды Add Windows Form (Добавить форму Windows) из меню Project (Проект).
Button и добавьте в форму объект кнопки, а затем измените свойство Text этого объекта кнопки на Создать форму.Button1_Click, сделайте двойной щелчок мышью на кнопке Создать форму.Введите следующий код программы:
'Создаем вторую форму с именем form2 Dim form2 As New Form 'Определяем свойство Text и стиль границ формы form2.Text = "Моя новая форма" form2.FormBorderStyle = FormBorderStyle.FixedDialog 'Указываем, что положение формы устанавливается вручную form2.StartPosition = FormStartPosition.Manual 'Объявляем структуру Rectangle, хранящую размеры формы 'Верхний левый угол формы (200, 100) 'Ширина и высота формы (300, 250) Dim Form2Rect As New Rectangle(200, 100, 300, 250) 'Устанавливаем границы формы с помощью этого объекта Rectangle form2.DesktopBounds = Form2Rect 'Отображаем форму как модальное диалоговое окно form2.ShowDialog()
Когда пользователь щелкает на кнопке Создать форму, эта процедура события создает новую форму с заголовком "Моя новая форма" и фиксированным стилем границ. Чтобы создать новую форму с помощью кода программы, необходимо использовать оператор Dim, а также указать имя переменной формы и класс Form, который автоматически включается в проект как часть пространства имен System.Windows.Forms. Затем установите свойства Text, FormBorderStyle, StartPosition и DesktopBounds. Свойство StartPosition устанавливается на значение FormStartPosition.Manual, что указывает, что положение формы задается вручную. Свойство DesktopBounds задает размеры и положение формы и в качестве аргумента требует тип Rectangle. Тип Rectangle - это структура, которая определяет прямоугольный регион и автоматически включается в проекты на Visual Basic. С помощью оператора Dim объявляется переменная Form2Rect типа Rectangle и инициализируется значениями размеров и положения формы. В конце этой процедуры события новая форма с помощью метода ShowDialog открывается как диалоговое окно.
Чтобы запустить программу, щелкните на кнопке Start (Начать).
Visual Basic отображает на рабочем столе первую форму.
Щелкните на кнопке Создать форму. Visual Basic отображает показанное ниже диалоговое окно Моя новая форма, имеющее размеры и положение, указанные вами в коде программы.

Обратите внимание, что нельзя изменить размер второй формы из-за того, что свойство FormBorderStyle было установлено на значение FixedDialog.
В дополнение к установке размера и расположения формы Visual Basic, вы можете минимизировать форму на панель задач Windows, максимизировать форму так, что она займет весь экран, или восстановить ее нормальный размер. Эти настройки могут быть изменены либо во время разработки, либо во время выполнения в зависимости от текущих значений в программе.
Чтобы максимизировать или минимизировать форму, проверьте, что доступны кнопки формы для максимизации и минимизации. С помощью окна Properties (Свойства) или кода программы укажите следующие настройки:
MaximizeBox = True MinimizeBox = True
Затем в коде программы или с помощью окна Properties (Свойства) установите свойство формы на значение Minimized, Maximized или Normal. Если вы используете код, добавьте константу FormWindowState, как показано ниже. Например, следующий оператор программы минимизирует форму и помещает ее на панель задач Windows:
WindowState = FormWindowState.Minimized
Чтобы управлять максимально и минимально возможными размерами формы, с помощью окна Properties (Свойства) установите при разработке формы свойства MaximumSize или MinimumSize. Чтобы установить MaximumSize и MinimumSize в коде, используйте структуру Size, показанную ниже, которая аналогична структуре Rectangle, использовавшейся в предыдущем упражнении:
Dim FormSize As New Size(400, 300) MaximumSize = FormSize
До этого момента вы добавляли объекты в формы с помощью Области элементов и Конструктора Windows Forms. Однако вы также можете создавать объекты Visual Basic в формах во время выполнения - либо для того, чтобы сократить время разработки, либо чтобы отреагировать на текущие потребности программы. Например, можно сгенерировать простое диалоговое окно, содержащее объекты для обработки вводимых данных.
Создание объектов очень просто, так как базовые классы, которые определяют элементы управления в Области элементов, доступны всем программам. Объекты объявляются и их экземпляры создаются с помощью ключевых слов Dim и New. Следующий оператор программы показывает, как работает этот процесс при создании в форме нового объекта кнопки с именем button1:
Dim button1 as New Button
После того, как вы создали объект во время выполнения, можно использовать код для настройки его свойств. В частности, полезно указать имя и расположение объекта, так как вы не указали их вручную с помощью Конструктора Windows Forms. Например, следующие операторы программы настраивают свойства Text и Location нового объекта кнопки:
button1.Text = "Нажми меня" button1.Location = New Point(20, 25)
Наконец, ваш код должен добавить этот новый объект в коллекцию Controls формы, на которой он был создан, чтобы он стал видимым в программе и активным:
form2.Controls.Add(button1)
Вы можете использовать этот процесс для добавления в форму Visual Basic любого элемента управления из Области элементов. Имя класса, которое вы используете для объявления и создания экземпляра элемента управления - это вариант имени, которое появляется в свойстве Name для каждого элемента управления.
Следующее упражнение демонстрирует, как во время выполнения можно добавить в новую форму элементы управления Label и Button. Эта новая форма будет действовать как диалоговое окно, которое отображает текущую дату.
Button и добавьте в форму объект кнопки, а затем измените свойство Text этого объекта кнопки на Отобразить дату.Button1_Click, сделайте двойной щелчок мышью на кнопке Отобразить дату.Введите следующий код программы:
'Объявляем новую форму и объекты элементов управления Dim form2 As New Form Dim lblDate As New Label Dim btnCancel As New Button ' Устанавливаем свойства метки lblDate.Text = "Текущая дата: " DateString lblDate.Size = New Size(150, 50) lblDate.Location = New Point(80, 50) ' Устанавливаем свойства кнопки btnCancel.Text = "Отмена" btnCancel.Location = New Point(110, 100) ' Устанавливаем свойства формы form2.Text = "Текущая дата" form2.CancelButton = btnCancel form2.StartPosition = FormStartPosition.CenterScreen 'Добавляем новые объекты в коллекцию Controls form2.Controls.Add(lblDate) form2.Controls.Add(btnCancel) 'Отображаем форму как диалоговое окно form2.ShowDialog()
Эта процедура события отображает на экране новую форму, содержащую объекты метки и кнопки. Объект метки содержит текущую дату в соответствии с системными часами вашего компьютера (полученную с помощью DateString ), а свойство Text объекта кнопки установлено на Отмена. Вы добавляете элементы управления в форму, объявляя переменные для хранения этих элементов управления, устанавливая свойства этих объектов и добавляя объекты в коллекцию Controls. В этом упражнении я также впервые демонстрирую свойства Size и CancelButton. Свойство Size требует структуры Size. Для создания структуры Size используется ключевое слово New. Свойство CancelButton позволяет пользователю закрыть диалоговое окно, нажав на (Esc) или щелкнув на кнопке Отмена. (Эти два действия считаются эквивалентными.)
Чтобы запустить программу, щелкните на кнопке Start (Начать).
Visual Basic отображает на рабочем столе первую форму.
CancelButton объекта btnCancel, оба действия (щелчок на кнопке Отмена и нажатие (Esc)) приводят к одинаковому результату.Чтобы завершить выполнение программы, щелкните на кнопке Закрыть формы. Программа остановится, и вернется среда разработки.

Когда вы программно добавляете в форму элементы управления, то чтобы правильно разместить их, необходимо использовать метод проб и ошибок. В этом случае Конструктор Windows Forms вам не поможет - только координаты (x, y) свойств Location и Size, значения которых совсем неочевидны, если у вас нет хорошего двухмерного воображения или времени на многократные запуски программы для проверки размещения объектов.
К счастью Visual Basic .NET содержит несколько свойств, которые позволяют организовать объекты в форме во время выполнения. Они включают свойство Anchor, которое заставляет объект на форме оставаться на одном и том же расстоянии от указанного края формы, и свойство Dock, которое заставляет объект оставаться прикрепленным к одному из краев формы. Свойства Anchor и Dock можно использовать при проектировании, но я обнаружил, что они также очень полезны при программном расположении объектов во время выполнения. В следующем упражнении показано, как работают эти свойства.
PictureBox, а затем добавьте по центру верхней части формы объект области вывода изображений.TextBox и создайте текстовое поле.Multiline этого текстового поля на значение True, чтобы можно было изменить размер этого объекта.Button и добавьте в нижнем правом углу формы объект кнопки.Установите для формы и ее объектов следующие свойства:
| Объект | Свойство | Установка |
|---|---|---|
| PictureBox1 | Image | "c:\vbnet03sbs\Гл.16\sun.ico" |
| SizeMode | StretchImage | |
| Button1 | Text | "Разместить" |
| Form1 | Text | "Примеры Anchor и Dock" |
Ваша формы должна выглядеть примерно так.

Button1_Click, сделайте двойной щелчок мышью на кнопке Разместить.Введите следующий код программы:
PictureBox1.Dock = DockStyle.Top TextBox1.Anchor = AnchorStyles.Bottom Or _ AnchorStyles.Left Or AnchorStyles.Right Or _ AnchorStyles.Top Button1.Anchor = AnchorStyles.Bottom Or _ AnchorStyles.Right
Когда выполняется эта процедура события, свойство Dock объекта PictureBox1 используется для пристыковки области изображения к верхней части формы. Это заставляет верхний край объекта области изображения прикоснуться и "прилипнуть" к верхнему краю формы - почти так, как работает собственная функция среды разработки Visual Studio. Единственное удивительное в поведении объекта здесь то, что объект области вывода изображений также изменяет свой размер так, что его края прилипают к левому и правому краям формы. В следующих шагах вы увидите это поведение.
Далее используется свойство Anchor для объектов TextBox1 и Button1. Свойство Anchor будет поддерживать текущее расстояние от указанных краев формы, даже если размер формы буде меняться. Заметьте, что свойство Anchor поддерживает текущее расстояние от объекта для указанных краев формы - оно не прикрепляет объект к указанному краю, если он к нему уже не прикреплен. В этом примере указано, что объект TextBox1 должен быть зафиксирован по всем расстояниям от краев формы (сверху, снизу, слева и справа). Для объединения выбора краев я использую оператор Or. Объект Button1 я закрепляю относительно нижнего и правого краев формы.
Чтобы запустить программу, щелкните на кнопке Start (Начать).
Появится форма, имеющая разработанный вами вид.
Щелкните на кнопке Разместить формы. Объект области вывода изображений будет прикреплен к верхнему краю формы. Размер области вывода изображений также изменится, и ее края прилипнут к левому и правому краям формы, как показано ниже.

Обратите внимание, что значок, выведенный в области изображений, искажен, что является результатом процесса прикрепления.
Снова увеличьте размер формы. Когда вы будете изменять размер формы, область вывода изображений и объект текстового поля также будут менять свои размеры. Так как текстовое поле закреплено по всем четырем сторонам, расстояние между краями формы и текстового поля остаются постоянными. При изменении размера становится ясно, что объект кнопки меняет свое положение. Хотя расстояние между объектом кнопки и верхним и левым краями формы меняется, расстояние до нижнего и правого краев остается неизменным, как показано здесь.

Anchor и Dock. Когда закончите, щелкните на кнопке Закрыть формы, чтобы закрыть программу.Теперь у вас есть необходимые навыки, чтобы добавлять в проект новые формы, размещать их на рабочем столе Windows, заполнять их новыми элементами управления и размещать эти элементы управления с помощью кода программы. Вы получили большой опыт, связанный с работой с новыми формами в программе на Visual Basic.
Если ваш проект содержит более одной формы, то какая из этих форм будет загружаться первой при запуске вашего приложения? Хотя Visual Basic обычно первой загружает ту форму, которая была в проекте создана первой (Form1.vb), вы можете изменить загружаемую Visual Basic первой форму, изменив одну настройку в диалоговом окне Property Pages (Страницы свойств) проекта. Вы также можете указать Visual Basic выполнить сначала процедуру с именем Sub Main, которая может объявлять открытые переменные и после выполнения каких-либо действий или проверок загружать одну или несколько форм. Имея возможность указать, какую форму или процедуру следует загружать первой, вы можете создавать поистине хорошо настраиваемый и адаптируемый интерфейс пользователя вашей программы.
В следующем упражнении показано, как изменять первую загружаемую форму, которая отображается Visual Basic при запуске вашей программы. Вы также узнаете, как устанавливать в качестве загрузочного объекта вашего проекта процедуру Sub Main.
Щелкните в Обозревателе решений на значке проекта My Startup Form, а затем щелкните на Properties (Свойства) в меню Project (Проект). Откроется диалоговое окно Startup Form Property Pages (Страницы свойств Startup Form), показанное ниже.

Диалоговое окно Property Pages (Страницы свойств) позволяет настроить свойства, которые применяются ко всему проекту. В данном случае для указания новой загрузочной формы используется раскрывающийся список Startup Object (Начальный объект).
Form2. Visual Basic изменит загрузочную форму вашего проекта с Form1 на Form2. Когда программа будет запущена, будет отображена Form2, а форма Form1 появится только в том случае, если она будет открыта с помощью метода Show или ShowDialog.Form2.Теперь вы должны добавить в проект модуль с процедурой Sub Main и установить ее в качестве загрузочного объекта так, чтобы выполнение начиналось со стандартного модуля.
Введите между операторами программы Module и End Module следующий код:
Public MyForm1 As New Form1()
Public MyForm2 As New Form2()
Public Sub Main()
MsgBox("Это Sub Main")
'поместите дополнительный код здесь
MyForm1.ShowDialog()
End Sub
Когда вы добавляете в ваш проект процедуру Sub Main, необходимо ввести ее в стандартном модуле. Процедура Sub Main должна быть объявлена как Public и не должна принимать никаких аргументов (за исключением консольных приложений, которые скоро будут обсуждаться). Заметьте, что в дополнение к определению процедуры Sub Main, которая отображает окно сообщения, а затем открывает Form1 как диалоговое окно, я также объявил две открытые переменные, представляющие в проекте Form1 и Form2. Для создания экземпляров объектов Form1 и Form2 используется ключевое слово New. В Visual Basic 6 объекты форм были доступны в модулях автоматически, и не было необходимости создавать новые экземпляры.
Sub Main. Visual Basic изменит загрузочную форму вашего проекта с Form2 на Sub Main. Когда программа будет запущена, первой будет выполнена процедура Sub Main, а затем будет отображено окно Form1.Щелкните на кнопке Start (Начать) панели инструментов. Программа запустится на выполнение в среде разработки, и будет выполнена процедура Sub Main. Вы увидите такое окно сообщения.

Sub Main закроет это окно сообщения и отобразит Form1 как новое диалоговое окно программы.Хотя это демонстрационное упражнение довольно простое, вы можете видеть, что Visual Basic предоставляет достаточную гибкость в вопросе запуска вашей программы. Вы можете указать в качестве начала вашего приложения различные формы, а можете добавить в ваш проект процедуру Sub Main и начать выполнение непосредственно с кода программы.
| Чтобы | Сделайте следующее |
|---|---|
| Добавить в программу новые формы | Щелкните на стрелке вниз справа от кнопки Add New Item (Добавить новый компонент) на стандартной панели инструментов, а затем щелкните на Add Windows Form (Добавить форму Windows) или в меню Project выберите пункт Add Windows Form (Добавить форму Windows), а затем щелкните на Open (Открыть). |
| Создать и изменить новую форму с помощью кода программы | Создайте новую форму с помощью ключевых слов Dim form2 As New Form form2.Text = "My New Form" |
| Отобразить форму на экране | Используйте метод Show или ShowDialog. Например: form2.ShowDialog() |
| Поместить загрузочную форму на рабочем столе Windows | Установите свойство StartPosition на одно из возможных значений, таких, как CenterScreen или CenterParent. |
| Задать размер и положение загрузочный формы на рабочем столе Windows с помощью кода | Установите StartPosition на значение Manual, объявите структуру Rectangle, которая определяет размер и положение формы, а затем используйте свойство DesktopBounds для задания размера и положения формы на рабочем столе. Например: form2.StartPosition = FormStartPosition.Manual Dim Form2Rect As New Rectangle _ (200, 100, 300, 250) form2.DesktopBounds = Form2Rect |
| Минимизировать, максимизировать или восстановить размер формы во время выполнения программы | При разработке формы установите ее свойства MaximizeBox и MinimizeBox формы на значение True. В коде, чтобы изменить состояние окна формы, установите свойство формы |
| Добавить в форму элементы управления во время выполнения программы | Создайте элемент управления требуемого типа, установите его свойства, а затем добавьте его в коллекцию Controls формы. Например: Dim button1 as New Button button1.Text = "Нажми меня" button1.Location = New Point(20, 25) form2.Controls.Add(button1) |
| Закрепить объект на определенном расстоянии от указанных краев формы | Установите свойство Anchor объекта и укажите края, расстояния до которых вы хотите сохранить неизменными. При указании нескольких краев используйте оператор Or. Например: Button1.Anchor = AnchorStyles.Bottom Or _ AnchorStyles.Right |
| Прикрепить объект к одному из краев формы | Установите свойство Dock этого объекта и укажите край, к которому вы хотите прикрепить объект. Например: PictureBox1.Dock = DockStyle.Top |
| Указать загрузочный объект проекта | Щелкните в Обозревателе решений на значке проекта, а затем щелкните на Properties (Свойства) в меню Project (Проект). В раскрывающемся списке Startup Object (Начальный объект) укажите загрузочный объект. (Выберите либо форму проекта, либо процедуру Sub Main.) |
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.