Visual Basic .NET на уроках информатики

Управление формами Windows

Разбить на страницы
Показывать лекцию целиком

В этой лекции вы узнаете, как:

  • добавлять в программу новые формы;
  • изменять положение формы на рабочем столе Microsoft Windows;
  • добавлять в форму элементы управления во время выполнения программы;
  • изменять размещение объектов в форме;
  • указывать, какой объект запускать первым.
  • В части 3 вы узнали, как создавать сложные программы на Microsoft Visual Basic .NET, с использованием модулей, массивов, коллекций, текстовых файлов и приложений Microsoft Office. В части 4 вы снова обратитесь к интерфейсу пользователя и узнаете, как создавать проекты с несколькими формами, эффектами анимации, использовать визуальное наследование и добавлять в приложения Visual Basic поддержку печати.

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

    Что нового в Visual Basic .NET?

  • В Visual Basic .NET вы не можете устанавливать свойства второй формы проекта, не имея экземпляра переменной формы, которой вы хотите управлять.
  • В Visual Basic 6 вы могли устанавливать положение формы на рабочем столе Windows при ее запуске с помощью графического окна Form Layout (Внешний вид формы). В Visual Basic .NET окна Form Layout (Внешний вид формы) нет, но для установки размера и положения формы при ее запуске можно использовать новое свойство формы, которое называется DesktopBounds.
  • В Visual Basic 6 вы могли добавить в форму новые элементы управления во время выполнения с помощью кода программы. В Visual Basic .NET есть аналогичная возможность. Изменения синтаксиса добавления элементов управления во время выполнения будут обсуждаться в этой лекции.
  • Новое свойство объектов, размещенных в форме - Anchor - указывает, какие стороны этих объектов должны оставаться на постоянном расстоянии от краев формы, когда форма изменяет свой размер. Новое свойство Dock заставляет объект оставаться прикрепленным к краю формы при изменении ее размера. Свойства Anchor и Dock позволяют создавать формы, в которых объекты изменяют размеры в соответствии с изменением размера формы.
  • В Visual Basic 6 вы могли строить проекты MDI (multiple document interface - многодокументный интерфейс), создав родительскую MDI-форму с помощью команды Add MDI Form (Добавить MDI-форму) из меню Project (Проект). В Visual Basic .NET родительские MDI-формы являются простыми формами, у которых свойство 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 Form Designer, расположенном в верхней части каждой новой формы. К настоящему моменту вы узнали о коде программы достаточно, чтобы понять большую часть этого кода.

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

    В следующих упражнениях показано, как использовать вторую форму для отображения справочной информации о программе Lucky Seven, с которой вы работали в предыдущих лекциях. Добавьте вторую форму с помощью команды Add Windows Form (Добавить форму Windows) из меню Project (Проект), а отображать эту форму на экране будете в коде программы с помощью метода ShowDialog. Вторая форма будет отображать файл Readme.txt, который использовался для отображения справочной информации в лекции 14.

    Добавление второй формы

  • Запустите Visual Studio, а затем откройте проект Lucky Seven, расположенный в папке c:\vbnet03sbs\Гл.15\lucky seven. Проект Lucky Seven - это тот же самый игровой автомат, с которым вы работали в предыдущей лекции, за исключением того, что он не включает созданного вами проекта развертывания.
  • Отобразите в Конструкторе Windows Forms главную форму (Form1.vb), если она еще не отображается.
  • Чтобы добавить в проект вторую форму, щелкните на команде 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. Она появится в Обозревателе решений, как показано здесь.

    Совет. С помощью Обозревателя решений можно переименовать или удалить файлы. Чтобы переименовать файл, щелкните правой кнопкой мыши на файле, а затем на команде Rename (Переименовать). Чтобы удалить файл из вашего проекта, щелкните правой кнопкой мыши на файле, а затем на команде Exclude From Project (Исключить из проекта). Чтобы удалить файл из вашего проекта и стереть его с диска вашего компьютера, выделите этот файл, а затем нажмите на Delete (Удалить).

    Теперь необходимо добавить в форму 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 текущей формы (Me) на значение DialogResult.OK. Это значение является константой Visual Basic, указывающей, что диалоговое окно закрыто, при этом вызывающую процедуру должно вернуться значение "OK". Более сложное диалоговое окно может с помощью параллельных процедур событий кнопок возвращать и другие значения, такие, как DialogResult.Cancel, DialogResult.No, DialogResult.Yes и DialogResult.Abort. Однако когда устанавливается свойство DialogResult, форма автоматически закрывается.

  • Прокрутите код программы в Редакторе кода в начало. Введите следующий оператор Imports:

    Imports System.IO

    Этот оператор создает в проекте ссылку на библиотеку классов, содержащую класс StreamReader. Класс StreamReader не связан непосредственно с определением или использованием дополнительных форм - я просто использую его как быстрый способ добавления в новую используемую мною форму текстовой информации.

  • Снова отобразите форму HelpInfo.vb, а затем сделайте двойной щелчок мышью на фоне формы. В Редакторе кода появится процедура события 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. Теперь вы добавите объект кнопки и некий код в первую форму.

    Отображение второй формы с помощью процедуры события

  • Щелкните в Обозревателе решений на Form1.vb, а затем щелкните на кнопке View Designer (Просмотреть конструктор). В среде разработки появится форма Lucky Seven. Теперь необходимо добавить в нижний правый угол формы кнопку Справка.
  • Используйте элемент управления 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 (Начать) стандартной панели инструментов.

    Примечание. Готовый проект Multiple Forms лежит в папке c:\vbnet03sbs\Гл.15\multiple forms.

    Появится главная форма Lucky Seven.

  • Чтобы немного поиграть в игру, щелкните семь или восемь раз на кнопке Крутить. Ваш экран будет выглядеть примерно так.

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

  • Чтобы просмотреть весь файл Readme, используйте вертикальную полосу прокрутки.
  • Чтобы закрыть форму HelpInfo.vb, щелкните на кнопке OK. Форма закроется, и снова станет активной первая форма.
  • Еще несколько раз щелкните на кнопке Крутить, а затем снова щелкните на кнопке Справка. Снова появится форма HelpInfo.vb, работающая точно так же, как и в первый раз. Обратите внимание, что пока активна вторая форма, вы не можете активизировать первую. Это происходит из-за того, что вторая форма является диалоговым окном или модальной формой, и прежде, чем вы сможете продолжить работу с программой, необходимо закрыть ее.
  • Щелкните на кнопке OK, а затем на кнопке Закрыть первой формы. Программа остановится, и вернется среда разработки.
  • Использование свойства DialogResult в вызывающей форме

    Хотя в примере программы 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

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

    Размещение форм на рабочем столе Windows

    Вы узнали, как добавлять в проект на 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 для размещения формы

  • Щелкните на команде Close Solution (Закрыть решение) в меню File (Файл), а затем создайте в папке c:\vbnet03sbs\Гл.15 новый проект с именем My Desktop Bounds.
  • Если форма проекта не отображается, отобразите ее сейчас.
  • Щелкните на форме, чтобы в окне Properties (Свойства) отобразились ее свойства.
  • Установите свойство 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 (Проект).

    Установка свойства DesktopBounds

  • Используйте элемент управления 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 (Начать).

    Примечание. Готовая программа Desktop Bounds лежит в папке c:\vbnet03sbs\Гл.15\desktop bounds.

    Visual Basic отображает на рабочем столе первую форму.

  • Щелкните на кнопке Создать форму. Visual Basic отображает показанное ниже диалоговое окно Моя новая форма, имеющее размеры и положение, указанные вами в коде программы.

    Обратите внимание, что нельзя изменить размер второй формы из-за того, что свойство FormBorderStyle было установлено на значение FixedDialog.

  • Закройте вторую форму, а затем первую форму. Ваша программа завершит выполнение, и вернется среда разработки.
  • Минимизация, максимизация и восстановление размеров окон

    В дополнение к установке размера и расположения формы Visual Basic, вы можете минимизировать форму на панель задач Windows, максимизировать форму так, что она займет весь экран, или восстановить ее нормальный размер. Эти настройки могут быть изменены либо во время разработки, либо во время выполнения в зависимости от текущих значений в программе.

    Чтобы максимизировать или минимизировать форму, проверьте, что доступны кнопки формы для максимизации и минимизации. С помощью окна Properties (Свойства) или кода программы укажите следующие настройки:

    MaximizeBox = True
    MinimizeBox = True

    Затем в коде программы или с помощью окна Properties (Свойства) установите свойство WindowState формы на значение 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. Эта новая форма будет действовать как диалоговое окно, которое отображает текущую дату.

    Создание новых элементов управления Label и Button

  • Щелкните на команде Close Solution (Закрыть решение) в меню File (Файл), а затем создайте в папке c:\vbnet03sbs\Гл.15 новый проект с именем My Add Controls.
  • Отобразите форму (Form1.vb), а затем откройте окно Properties (Свойства).
  • Используйте элемент управления 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 (Начать).

    Примечание. Готовая программа Add Controls лежит в папке c:\vbnet03sbs\Гл.15\add controls.

    Visual Basic отображает на рабочем столе первую форму.

  • Щелкните на кнопке Отобразить дату. Visual Basic отобразит на рабочем столе вторую форму, и эта форма будет содержать объект метки и объект кнопки, которые вы определили с помощью кода программы. Показанный на рисунке вверху следующей страницы объект метки содержит текущую дату.
  • Чтобы закрыть новую форму, щелкните на кнопке Отмена.
  • Снова щелкните на кнопке Отобразить дату. Новая форма появится точно так же, как это было в первый раз.
  • Чтобы закрыть форму, нажмите на (Esc). Так как вы установили свойство CancelButton объекта btnCancel, оба действия (щелчок на кнопке Отмена и нажатие (Esc)) приводят к одинаковому результату.
  • Чтобы завершить выполнение программы, щелкните на кнопке Закрыть формы. Программа остановится, и вернется среда разработки.

  • Организация элементов управления в форме

    Когда вы программно добавляете в форму элементы управления, то чтобы правильно разместить их, необходимо использовать метод проб и ошибок. В этом случае Конструктор Windows Forms вам не поможет - только координаты (x, y) свойств Location и Size, значения которых совсем неочевидны, если у вас нет хорошего двухмерного воображения или времени на многократные запуски программы для проверки размещения объектов.

    К счастью Visual Basic .NET содержит несколько свойств, которые позволяют организовать объекты в форме во время выполнения. Они включают свойство Anchor, которое заставляет объект на форме оставаться на одном и том же расстоянии от указанного края формы, и свойство Dock, которое заставляет объект оставаться прикрепленным к одному из краев формы. Свойства Anchor и Dock можно использовать при проектировании, но я обнаружил, что они также очень полезны при программном расположении объектов во время выполнения. В следующем упражнении показано, как работают эти свойства.

    Закрепление и пристыковка объектов во время выполнения

  • Щелкните на команде Close Solution (Закрыть решение) в меню File (Файл), а затем создайте в папке c:\vbnet03sbs\Гл.15 новый проект с именем My Anchor and 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 and Dock лежит в папке c:\vbnet03sbs\Гл.15\anchor and dock.

    Появится форма, имеющая разработанный вами вид.

  • Переместите указатель мыши в нижний левый угол формы так, чтобы он изменился на указатель изменения размера, а затем увеличьте размер формы. Обратите внимание, что размер и положение объектов в форме не изменились.
  • Верните форме ее первоначальный размер.
  • Щелкните на кнопке Разместить формы. Объект области вывода изображений будет прикреплен к верхнему краю формы. Размер области вывода изображений также изменится, и ее края прилипнут к левому и правому краям формы, как показано ниже.

    Обратите внимание, что значок, выведенный в области изображений, искажен, что является результатом процесса прикрепления.

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

  • Немного поэкспериментируйте со свойствами Anchor и Dock. Когда закончите, щелкните на кнопке Закрыть формы, чтобы закрыть программу.
  • Теперь у вас есть необходимые навыки, чтобы добавлять в проект новые формы, размещать их на рабочем столе Windows, заполнять их новыми элементами управления и размещать эти элементы управления с помощью кода программы. Вы получили большой опыт, связанный с работой с новыми формами в программе на Visual Basic.

    Следующий шаг: определение загрузочного объекта

    Если ваш проект содержит более одной формы, то какая из этих форм будет загружаться первой при запуске вашего приложения? Хотя Visual Basic обычно первой загружает ту форму, которая была в проекте создана первой (Form1.vb), вы можете изменить загружаемую Visual Basic первой форму, изменив одну настройку в диалоговом окне Property Pages (Страницы свойств) проекта. Вы также можете указать Visual Basic выполнить сначала процедуру с именем Sub Main, которая может объявлять открытые переменные и после выполнения каких-либо действий или проверок загружать одну или несколько форм. Имея возможность указать, какую форму или процедуру следует загружать первой, вы можете создавать поистине хорошо настраиваемый и адаптируемый интерфейс пользователя вашей программы.

    В следующем упражнении показано, как изменять первую загружаемую форму, которая отображается Visual Basic при запуске вашей программы. Вы также узнаете, как устанавливать в качестве загрузочного объекта вашего проекта процедуру Sub Main.

    Переключение с Form1 на Form2

  • Щелкните на команде Close Solution (Закрыть решение) в меню File (Файл), а затем создайте в папке c:\vbnet03sbs\Гл.15 новый проект с именем My Startup Form.
  • Если Form1.vb еще не отображается, то отобразите ее на экране.
  • Щелкните на команде Add Windows Form (Добавить форму Windows) в меню Project (Проект). Чтобы продемонстрировать, как работает переключение загрузочных форм, необходимо добавить в проект новую форму.
  • Чтобы добавить в Обозреватель решений вторую форму (Form2.vb), щелкните на Открыть.
  • Щелкните в Обозревателе решений на значке проекта My Startup Form, а затем щелкните на Properties (Свойства) в меню Project (Проект). Откроется диалоговое окно Startup Form Property Pages (Страницы свойств Startup Form), показанное ниже.

    Диалоговое окно Property Pages (Страницы свойств) позволяет настроить свойства, которые применяются ко всему проекту. В данном случае для указания новой загрузочной формы используется раскрывающийся список Startup Object (Начальный объект).

  • Щелкните на раскрывающемся списке Startup Object (Начальный объект), а затем на Form2. Visual Basic изменит загрузочную форму вашего проекта с Form1 на Form2. Когда программа будет запущена, будет отображена Form2, а форма Form1 появится только в том случае, если она будет открыта с помощью метода Show или ShowDialog.
  • Чтобы закрыть диалоговое окно Property Pages (Страницы свойств), щелкните на OK.
  • Щелкните на кнопке Start (Начать) панели инструментов. Программа запустится в среде разработки, и появится Form2.
  • Чтобы завершить выполнение программы, щелкните на кнопке Закрыть формы.
  • Теперь вы должны добавить в проект модуль с процедурой Sub Main и установить ее в качестве загрузочного объекта так, чтобы выполнение начиналось со стандартного модуля.

    Запуск программы с Sub Main

  • Чтобы добавить в Обозревателе решений модуль Module1.vb, щелкните в меню Project (Проект) на команде Add New Item (Добавить новый компонент), далее на шаблоне Module, а затем на Open (Открыть).
  • Если Module1 не откроется в Редакторе кода, выберите Module1.vb в Обозревателе решений, а затем щелкните на кнопке View Code (Просмотреть код).
  • Введите между операторами программы 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 объекты форм были доступны в модулях автоматически, и не было необходимости создавать новые экземпляры.

  • Щелкните в Обозревателе решений на значке проекта My Startup Form, а затем на Properties (Свойства) в меню Project (Проект). Появится окно Startup Form Property Pages (Страницы свойств Startup Form).
  • Щелкните на раскрывающемся списке Startup Object (Начальный объект), а затем щелкните на Sub Main. Visual Basic изменит загрузочную форму вашего проекта с Form2 на Sub Main. Когда программа будет запущена, первой будет выполнена процедура Sub Main, а затем будет отображено окно Form1.
  • Чтобы закрыть диалоговое окно Property Pages (Страницы свойств), щелкните на OK.
  • Щелкните на кнопке Start (Начать) панели инструментов. Программа запустится на выполнение в среде разработки, и будет выполнена процедура Sub Main. Вы увидите такое окно сообщения.

  • Щелкните в окне сообщения на OK. Процедура Sub Main закроет это окно сообщения и отобразит Form1 как новое диалоговое окно программы.
  • Чтобы завершить выполнение программы, щелкните на кнопке Закрыть формы.
  • Хотя это демонстрационное упражнение довольно простое, вы можете видеть, что Visual Basic предоставляет достаточную гибкость в вопросе запуска вашей программы. Вы можете указать в качестве начала вашего приложения различные формы, а можете добавить в ваш проект процедуру Sub Main и начать выполнение непосредственно с кода программы.

    Совет. Если вы хотите написать приложение Visual Basic совсем без графического интерфейса пользователя, необходимо создать консольное приложение - проект Visual Studio .NET, который обрабатывает ввод и вывод с помощью консоли командной строки (символьного окна, которое также известно как командная строка). За дополнительной информацией о написании консольных приложений обратитесь к справочной системе Visual Basic.

    Краткая справка по лекции 15

    Чтобы Сделайте следующее
    Добавить в программу новые формы Щелкните на стрелке вниз справа от кнопки Add New Item (Добавить новый компонент) на стандартной панели инструментов, а затем щелкните на Add Windows Form (Добавить форму Windows) или в меню Project выберите пункт Add Windows Form (Добавить форму Windows), а затем щелкните на Open (Открыть).
    Создать и изменить новую форму с помощью кода программы

    Создайте новую форму с помощью ключевых слов Dim и New и класса Form, а затем установите все требуемые свойства. Например:

    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. В коде, чтобы изменить состояние окна формы, установите свойство формы WindowState на значение FormWindowState.Minimized, FormWindowState.Maximized или FormWindowState.Normal.
    Добавить в форму элементы управления во время выполнения программы

    Создайте элемент управления требуемого типа, установите его свойства, а затем добавьте его в коллекцию 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.)
    Страницы:

    В этой лекции вы узнаете, как:

  • добавлять в программу новые формы;
  • изменять положение формы на рабочем столе Microsoft Windows;
  • добавлять в форму элементы управления во время выполнения программы;
  • изменять размещение объектов в форме;
  • указывать, какой объект запускать первым.
  • В части 3 вы узнали, как создавать сложные программы на Microsoft Visual Basic .NET, с использованием модулей, массивов, коллекций, текстовых файлов и приложений Microsoft Office. В части 4 вы снова обратитесь к интерфейсу пользователя и узнаете, как создавать проекты с несколькими формами, эффектами анимации, использовать визуальное наследование и добавлять в приложения Visual Basic поддержку печати.

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

    Что нового в Visual Basic .NET?

  • В Visual Basic .NET вы не можете устанавливать свойства второй формы проекта, не имея экземпляра переменной формы, которой вы хотите управлять.
  • В Visual Basic 6 вы могли устанавливать положение формы на рабочем столе Windows при ее запуске с помощью графического окна Form Layout (Внешний вид формы). В Visual Basic .NET окна Form Layout (Внешний вид формы) нет, но для установки размера и положения формы при ее запуске можно использовать новое свойство формы, которое называется DesktopBounds.
  • В Visual Basic 6 вы могли добавить в форму новые элементы управления во время выполнения с помощью кода программы. В Visual Basic .NET есть аналогичная возможность. Изменения синтаксиса добавления элементов управления во время выполнения будут обсуждаться в этой лекции.
  • Новое свойство объектов, размещенных в форме - Anchor - указывает, какие стороны этих объектов должны оставаться на постоянном расстоянии от краев формы, когда форма изменяет свой размер. Новое свойство Dock заставляет объект оставаться прикрепленным к краю формы при изменении ее размера. Свойства Anchor и Dock позволяют создавать формы, в которых объекты изменяют размеры в соответствии с изменением размера формы.
  • В Visual Basic 6 вы могли строить проекты MDI (multiple document interface - многодокументный интерфейс), создав родительскую MDI-форму с помощью команды Add MDI Form (Добавить MDI-форму) из меню Project (Проект). В Visual Basic .NET родительские MDI-формы являются простыми формами, у которых свойство 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 Form Designer, расположенном в верхней части каждой новой формы. К настоящему моменту вы узнали о коде программы достаточно, чтобы понять большую часть этого кода.

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

    В следующих упражнениях показано, как использовать вторую форму для отображения справочной информации о программе Lucky Seven, с которой вы работали в предыдущих лекциях. Добавьте вторую форму с помощью команды Add Windows Form (Добавить форму Windows) из меню Project (Проект), а отображать эту форму на экране будете в коде программы с помощью метода ShowDialog. Вторая форма будет отображать файл Readme.txt, который использовался для отображения справочной информации в лекции 14.

    Добавление второй формы

  • Запустите Visual Studio, а затем откройте проект Lucky Seven, расположенный в папке c:\vbnet03sbs\Гл.15\lucky seven. Проект Lucky Seven - это тот же самый игровой автомат, с которым вы работали в предыдущей лекции, за исключением того, что он не включает созданного вами проекта развертывания.
  • Отобразите в Конструкторе Windows Forms главную форму (Form1.vb), если она еще не отображается.
  • Чтобы добавить в проект вторую форму, щелкните на команде 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. Она появится в Обозревателе решений, как показано здесь.

    Совет. С помощью Обозревателя решений можно переименовать или удалить файлы. Чтобы переименовать файл, щелкните правой кнопкой мыши на файле, а затем на команде Rename (Переименовать). Чтобы удалить файл из вашего проекта, щелкните правой кнопкой мыши на файле, а затем на команде Exclude From Project (Исключить из проекта). Чтобы удалить файл из вашего проекта и стереть его с диска вашего компьютера, выделите этот файл, а затем нажмите на Delete (Удалить).

    Теперь необходимо добавить в форму 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 текущей формы (Me) на значение DialogResult.OK. Это значение является константой Visual Basic, указывающей, что диалоговое окно закрыто, при этом вызывающую процедуру должно вернуться значение "OK". Более сложное диалоговое окно может с помощью параллельных процедур событий кнопок возвращать и другие значения, такие, как DialogResult.Cancel, DialogResult.No, DialogResult.Yes и DialogResult.Abort. Однако когда устанавливается свойство DialogResult, форма автоматически закрывается.

  • Прокрутите код программы в Редакторе кода в начало. Введите следующий оператор Imports:

    Imports System.IO

    Этот оператор создает в проекте ссылку на библиотеку классов, содержащую класс StreamReader. Класс StreamReader не связан непосредственно с определением или использованием дополнительных форм - я просто использую его как быстрый способ добавления в новую используемую мною форму текстовой информации.

  • Снова отобразите форму HelpInfo.vb, а затем сделайте двойной щелчок мышью на фоне формы. В Редакторе кода появится процедура события 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. Теперь вы добавите объект кнопки и некий код в первую форму.

    Отображение второй формы с помощью процедуры события

  • Щелкните в Обозревателе решений на Form1.vb, а затем щелкните на кнопке View Designer (Просмотреть конструктор). В среде разработки появится форма Lucky Seven. Теперь необходимо добавить в нижний правый угол формы кнопку Справка.
  • Используйте элемент управления 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 (Начать) стандартной панели инструментов.

    Примечание. Готовый проект Multiple Forms лежит в папке c:\vbnet03sbs\Гл.15\multiple forms.

    Появится главная форма Lucky Seven.

  • Чтобы немного поиграть в игру, щелкните семь или восемь раз на кнопке Крутить. Ваш экран будет выглядеть примерно так.

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

  • Чтобы просмотреть весь файл Readme, используйте вертикальную полосу прокрутки.
  • Чтобы закрыть форму HelpInfo.vb, щелкните на кнопке OK. Форма закроется, и снова станет активной первая форма.
  • Еще несколько раз щелкните на кнопке Крутить, а затем снова щелкните на кнопке Справка. Снова появится форма HelpInfo.vb, работающая точно так же, как и в первый раз. Обратите внимание, что пока активна вторая форма, вы не можете активизировать первую. Это происходит из-за того, что вторая форма является диалоговым окном или модальной формой, и прежде, чем вы сможете продолжить работу с программой, необходимо закрыть ее.
  • Щелкните на кнопке OK, а затем на кнопке Закрыть первой формы. Программа остановится, и вернется среда разработки.
  • Использование свойства DialogResult в вызывающей форме

    Хотя в примере программы 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

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

    Размещение форм на рабочем столе Windows

    Вы узнали, как добавлять в проект на 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 для размещения формы

  • Щелкните на команде Close Solution (Закрыть решение) в меню File (Файл), а затем создайте в папке c:\vbnet03sbs\Гл.15 новый проект с именем My Desktop Bounds.
  • Если форма проекта не отображается, отобразите ее сейчас.
  • Щелкните на форме, чтобы в окне Properties (Свойства) отобразились ее свойства.
  • Установите свойство 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 (Проект).

    Установка свойства DesktopBounds

  • Используйте элемент управления 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 (Начать).

    Примечание. Готовая программа Desktop Bounds лежит в папке c:\vbnet03sbs\Гл.15\desktop bounds.

    Visual Basic отображает на рабочем столе первую форму.

  • Щелкните на кнопке Создать форму. Visual Basic отображает показанное ниже диалоговое окно Моя новая форма, имеющее размеры и положение, указанные вами в коде программы.

    Обратите внимание, что нельзя изменить размер второй формы из-за того, что свойство FormBorderStyle было установлено на значение FixedDialog.

  • Закройте вторую форму, а затем первую форму. Ваша программа завершит выполнение, и вернется среда разработки.
  • Минимизация, максимизация и восстановление размеров окон

    В дополнение к установке размера и расположения формы Visual Basic, вы можете минимизировать форму на панель задач Windows, максимизировать форму так, что она займет весь экран, или восстановить ее нормальный размер. Эти настройки могут быть изменены либо во время разработки, либо во время выполнения в зависимости от текущих значений в программе.

    Чтобы максимизировать или минимизировать форму, проверьте, что доступны кнопки формы для максимизации и минимизации. С помощью окна Properties (Свойства) или кода программы укажите следующие настройки:

    MaximizeBox = True
    MinimizeBox = True

    Затем в коде программы или с помощью окна Properties (Свойства) установите свойство WindowState формы на значение 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. Эта новая форма будет действовать как диалоговое окно, которое отображает текущую дату.

    Создание новых элементов управления Label и Button

  • Щелкните на команде Close Solution (Закрыть решение) в меню File (Файл), а затем создайте в папке c:\vbnet03sbs\Гл.15 новый проект с именем My Add Controls.
  • Отобразите форму (Form1.vb), а затем откройте окно Properties (Свойства).
  • Используйте элемент управления 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 (Начать).

    Примечание. Готовая программа Add Controls лежит в папке c:\vbnet03sbs\Гл.15\add controls.

    Visual Basic отображает на рабочем столе первую форму.

  • Щелкните на кнопке Отобразить дату. Visual Basic отобразит на рабочем столе вторую форму, и эта форма будет содержать объект метки и объект кнопки, которые вы определили с помощью кода программы. Показанный на рисунке вверху следующей страницы объект метки содержит текущую дату.
  • Чтобы закрыть новую форму, щелкните на кнопке Отмена.
  • Снова щелкните на кнопке Отобразить дату. Новая форма появится точно так же, как это было в первый раз.
  • Чтобы закрыть форму, нажмите на (Esc). Так как вы установили свойство CancelButton объекта btnCancel, оба действия (щелчок на кнопке Отмена и нажатие (Esc)) приводят к одинаковому результату.
  • Чтобы завершить выполнение программы, щелкните на кнопке Закрыть формы. Программа остановится, и вернется среда разработки.

  • Организация элементов управления в форме

    Когда вы программно добавляете в форму элементы управления, то чтобы правильно разместить их, необходимо использовать метод проб и ошибок. В этом случае Конструктор Windows Forms вам не поможет - только координаты (x, y) свойств Location и Size, значения которых совсем неочевидны, если у вас нет хорошего двухмерного воображения или времени на многократные запуски программы для проверки размещения объектов.

    К счастью Visual Basic .NET содержит несколько свойств, которые позволяют организовать объекты в форме во время выполнения. Они включают свойство Anchor, которое заставляет объект на форме оставаться на одном и том же расстоянии от указанного края формы, и свойство Dock, которое заставляет объект оставаться прикрепленным к одному из краев формы. Свойства Anchor и Dock можно использовать при проектировании, но я обнаружил, что они также очень полезны при программном расположении объектов во время выполнения. В следующем упражнении показано, как работают эти свойства.

    Закрепление и пристыковка объектов во время выполнения

  • Щелкните на команде Close Solution (Закрыть решение) в меню File (Файл), а затем создайте в папке c:\vbnet03sbs\Гл.15 новый проект с именем My Anchor and 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 and Dock лежит в папке c:\vbnet03sbs\Гл.15\anchor and dock.

    Появится форма, имеющая разработанный вами вид.

  • Переместите указатель мыши в нижний левый угол формы так, чтобы он изменился на указатель изменения размера, а затем увеличьте размер формы. Обратите внимание, что размер и положение объектов в форме не изменились.
  • Верните форме ее первоначальный размер.
  • Щелкните на кнопке Разместить формы. Объект области вывода изображений будет прикреплен к верхнему краю формы. Размер области вывода изображений также изменится, и ее края прилипнут к левому и правому краям формы, как показано ниже.

    Обратите внимание, что значок, выведенный в области изображений, искажен, что является результатом процесса прикрепления.

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

  • Немного поэкспериментируйте со свойствами Anchor и Dock. Когда закончите, щелкните на кнопке Закрыть формы, чтобы закрыть программу.
  • Теперь у вас есть необходимые навыки, чтобы добавлять в проект новые формы, размещать их на рабочем столе Windows, заполнять их новыми элементами управления и размещать эти элементы управления с помощью кода программы. Вы получили большой опыт, связанный с работой с новыми формами в программе на Visual Basic.

    Следующий шаг: определение загрузочного объекта

    Если ваш проект содержит более одной формы, то какая из этих форм будет загружаться первой при запуске вашего приложения? Хотя Visual Basic обычно первой загружает ту форму, которая была в проекте создана первой (Form1.vb), вы можете изменить загружаемую Visual Basic первой форму, изменив одну настройку в диалоговом окне Property Pages (Страницы свойств) проекта. Вы также можете указать Visual Basic выполнить сначала процедуру с именем Sub Main, которая может объявлять открытые переменные и после выполнения каких-либо действий или проверок загружать одну или несколько форм. Имея возможность указать, какую форму или процедуру следует загружать первой, вы можете создавать поистине хорошо настраиваемый и адаптируемый интерфейс пользователя вашей программы.

    В следующем упражнении показано, как изменять первую загружаемую форму, которая отображается Visual Basic при запуске вашей программы. Вы также узнаете, как устанавливать в качестве загрузочного объекта вашего проекта процедуру Sub Main.

    Переключение с Form1 на Form2

  • Щелкните на команде Close Solution (Закрыть решение) в меню File (Файл), а затем создайте в папке c:\vbnet03sbs\Гл.15 новый проект с именем My Startup Form.
  • Если Form1.vb еще не отображается, то отобразите ее на экране.
  • Щелкните на команде Add Windows Form (Добавить форму Windows) в меню Project (Проект). Чтобы продемонстрировать, как работает переключение загрузочных форм, необходимо добавить в проект новую форму.
  • Чтобы добавить в Обозреватель решений вторую форму (Form2.vb), щелкните на Открыть.
  • Щелкните в Обозревателе решений на значке проекта My Startup Form, а затем щелкните на Properties (Свойства) в меню Project (Проект). Откроется диалоговое окно Startup Form Property Pages (Страницы свойств Startup Form), показанное ниже.

    Диалоговое окно Property Pages (Страницы свойств) позволяет настроить свойства, которые применяются ко всему проекту. В данном случае для указания новой загрузочной формы используется раскрывающийся список Startup Object (Начальный объект).

  • Щелкните на раскрывающемся списке Startup Object (Начальный объект), а затем на Form2. Visual Basic изменит загрузочную форму вашего проекта с Form1 на Form2. Когда программа будет запущена, будет отображена Form2, а форма Form1 появится только в том случае, если она будет открыта с помощью метода Show или ShowDialog.
  • Чтобы закрыть диалоговое окно Property Pages (Страницы свойств), щелкните на OK.
  • Щелкните на кнопке Start (Начать) панели инструментов. Программа запустится в среде разработки, и появится Form2.
  • Чтобы завершить выполнение программы, щелкните на кнопке Закрыть формы.
  • Теперь вы должны добавить в проект модуль с процедурой Sub Main и установить ее в качестве загрузочного объекта так, чтобы выполнение начиналось со стандартного модуля.

    Запуск программы с Sub Main

  • Чтобы добавить в Обозревателе решений модуль Module1.vb, щелкните в меню Project (Проект) на команде Add New Item (Добавить новый компонент), далее на шаблоне Module, а затем на Open (Открыть).
  • Если Module1 не откроется в Редакторе кода, выберите Module1.vb в Обозревателе решений, а затем щелкните на кнопке View Code (Просмотреть код).
  • Введите между операторами программы 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 объекты форм были доступны в модулях автоматически, и не было необходимости создавать новые экземпляры.

  • Щелкните в Обозревателе решений на значке проекта My Startup Form, а затем на Properties (Свойства) в меню Project (Проект). Появится окно Startup Form Property Pages (Страницы свойств Startup Form).
  • Щелкните на раскрывающемся списке Startup Object (Начальный объект), а затем щелкните на Sub Main. Visual Basic изменит загрузочную форму вашего проекта с Form2 на Sub Main. Когда программа будет запущена, первой будет выполнена процедура Sub Main, а затем будет отображено окно Form1.
  • Чтобы закрыть диалоговое окно Property Pages (Страницы свойств), щелкните на OK.
  • Щелкните на кнопке Start (Начать) панели инструментов. Программа запустится на выполнение в среде разработки, и будет выполнена процедура Sub Main. Вы увидите такое окно сообщения.

  • Щелкните в окне сообщения на OK. Процедура Sub Main закроет это окно сообщения и отобразит Form1 как новое диалоговое окно программы.
  • Чтобы завершить выполнение программы, щелкните на кнопке Закрыть формы.
  • Хотя это демонстрационное упражнение довольно простое, вы можете видеть, что Visual Basic предоставляет достаточную гибкость в вопросе запуска вашей программы. Вы можете указать в качестве начала вашего приложения различные формы, а можете добавить в ваш проект процедуру Sub Main и начать выполнение непосредственно с кода программы.

    Совет. Если вы хотите написать приложение Visual Basic совсем без графического интерфейса пользователя, необходимо создать консольное приложение - проект Visual Studio .NET, который обрабатывает ввод и вывод с помощью консоли командной строки (символьного окна, которое также известно как командная строка). За дополнительной информацией о написании консольных приложений обратитесь к справочной системе Visual Basic.

    Краткая справка по лекции 15

    Чтобы Сделайте следующее
    Добавить в программу новые формы Щелкните на стрелке вниз справа от кнопки Add New Item (Добавить новый компонент) на стандартной панели инструментов, а затем щелкните на Add Windows Form (Добавить форму Windows) или в меню Project выберите пункт Add Windows Form (Добавить форму Windows), а затем щелкните на Open (Открыть).
    Создать и изменить новую форму с помощью кода программы

    Создайте новую форму с помощью ключевых слов Dim и New и класса Form, а затем установите все требуемые свойства. Например:

    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. В коде, чтобы изменить состояние окна формы, установите свойство формы WindowState на значение FormWindowState.Minimized, FormWindowState.Maximized или FormWindowState.Normal.
    Добавить в форму элементы управления во время выполнения программы

    Создайте элемент управления требуемого типа, установите его свойства, а затем добавьте его в коллекцию 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.)
    Вернуться к учебному плану