Ход работы:
-
Изучить теоретическую часть.
-
Выполнить задания, следуя указаниям.
-
Ответить на контрольные вопросы (в устной форме).
-
Предъявить преподавателю результаты работы программы и исходные коды.
-
Оформить отчет в соответствии с ходом работы (тема, цель, условие задачи, программный код, результаты тестирования программы, выводы).
Теоретическая часть
Добавление в программу новых форм
Во многих случаях для взаимодействия с пользователем одной формы вполне достаточно. Но если вам требуется обмениваться с пользователем большим объемом информации, Visual Basic позволяет добавить в программу дополнительные формы. Каждая новая формы рассматривается как объект, который наследует свои свойства от класса System.Windows.Forms.Form. Первая форма программы называется Form1.vb. Последующие формы называются Form2.vb, Form3.vb и т.д. Следующая таблица содержит список способов практического применения дополнительных форм в вашей программе.
Каждая новая форма имеет уникальное имя и свой собственный набор объектов, свойств, методов и процедур событий.
Форма
|
Описание
|
"Титульная" форма
|
Форма, которая при запуске программы отображает сообщение приветствия, графику или информацию об авторских правах.
|
Инструкции программы
|
Форма, которая отображает информацию и подсказки о том, как работать с программой.
|
Диалоговые окна
|
Дополнительные диалоговые окна, которые принимают данные и отображают результаты работы программы.
|
Содержимое документов
|
Форма, которая отображает содержимое одного или более файлов и изображений, используемых в программе.
|
Как используются формы
VisualBasic позволяет пользоваться формами достаточно гибко. Вы можете сделать все формы программы видимыми одновременно, а можете загружать и выгружать формы по мере их необходимости. Если вы выводите сразу несколько форм, то можете разрешить пользователю переключаться между ними, а можете управлять порядком, в котором эти формы используются. Форма, которой при ее отображении на экране передается фокус ввода, называется диалоговым окном. Диалоговые окна (называемые в VisualBasic 6 модальными формами ) сохраняют фокус ввода до тех пор, пока пользователь не нажмет на OK, на Cancel ( Отмена ) или не закроет ее другим способом. Чтобы в VisualBasic .NET отобразить существующую форму как диалоговое окно, откройте ее с помощью метода ShowDialog.
Если вы хотите отобразить форму, на которую пользователь сможет переключиться, используйте вместо метода ShowDialog метод Show. В Visual Basic 6 формы, которые могли терять фокус ввода, назывались немодальными формами, и вы по-прежнему можете услышать такое их название. Большинство приложений для Microsoft Windows использует для отображения информации обычные немодальные формы, так как они дают пользователю большую гибкость, и при создании новой формы в Microsoft Visual Studio этот стиль является стилем по умолчанию. Так как формы - это просто члены класса System.Windows.Forms.Form, вы также можете создать и отобразить формы с помощью кода программы.
Чтобы узнать, как в приложении на Visual Basic определяется форма по умолчанию, изучите код в разделе, сгенерированном Windows Form Designer, расположенном в верхней части каждой новой формы.
Использование свойства DialogResult в вызывающей форме
Вы можете эффективно использовать в программе на VisualBasic свойство DialogResult, которое присваивается в диалоговом окне. Более сложное диалоговое окно может предлагать пользователю дополнительные кнопки – Cancel (Отмена ), Yes (Да), No (Нет), Abort (Прервать) и так далее. Каждая кнопка диалогового окна может быть ассоциирована со своим типом действия в главной программе. А в каждой процедуре события кнопки диалогового окна можно присваивать свойству DialogResult формы значение, соответствующее названию кнопки, как это сделано в следующем операторе программы:
Задание на лабораторную работу.
Создать приложение для Windows "Семерка" (LuckySeven). Эта программа имитирует игровой автомат со "счастливыми" Для отображения справочной информации о программе «Семерка» использовать вторую форму. Добавьте вторую форму с помощью команды Вторая форма должна отображать файл Readme.txt, который должен содержать справочную информацию.
Порядок выполнения работы
Графический интерфейс "Семерки" имеет две кнопки, три поля для показа "счастливых" чисел, цифровую фотографию, символизирующую выигрыши, и текст "Счастливая семерка". Чтобы сконструировать этот интерфейс, нужно создать семь объектов на форме Семерка, а затем изменить некоторые свойства в каждом из них. Затем нужно добавить код программы для кнопок Крутить и Выход, который обрабатывает нажатия пользователя на этих кнопках и генерирует случайные числа. Чтобы создать эту программу с самого начала, необходимо выполнить в Visual Basic три основных шага по разработке программы: создать интерфейс пользователя, настроить свойства и написать код программы. В таблице описан этот процесс для "Семерки".
Таблица 2.1.
|
Шаг программирования
|
Число элементов
|
Создать графический интерфейс пользователя
|
7 объектов
|
Настроить свойства
|
12 свойств
|
Написать код программы
|
2 объекта
|
Создание пользовательского интерфейса
Создайте новый проект командой Создать проект (New Project) из меню Файл (File) (порядок создания нового проекта подробно описан в лабораторной работе № 1).
Выберите элемент Приложение Windows Forms и нажмите кнопку ОК.
В области элементов выберите элемент управления Button и добавьте на форму две кнопки.
Добавьте надписи, которые используются в программе для показа чисел.В области элементов выберите элемент управления Label. И создайте на форме четыре надписи с именами Label1, Label2, Label3 и Label4.
Ваши надписи будут выглядеть примерно так, как показано на иллюстрации ниже. (Если надписи выглядят не вполне правильно, их размер можно изменить.)
Добавление изображения
Теперь добавьте на форму рамку для рисунка, чтобы показать графический приз, когда пользователь выбросит "7".В области элементов выберите элемент управления PictureBox.
Нарисуйте большой прямоугольник прямо под тремя надписями для цифр. В результате поле рисунка должна выглядеть так.
Этот объект в программе будет называться PictureBox1, и это имя в дальнейшем используется при написании кода программы.
Теперь нужно настроить интерфейс, задав несколько свойств.
Настройка свойств кнопки
Щелкните на первой кнопке Button1.Текущее значение свойства Text измените на слово "Крутить" и нажмите клавишу (Enter).
Измените свойство Text для второй кнопки так, чтобы там было написано "Выход".
Настройка свойств надписей для чисел
Выберите первую надпись, предназначенную для чисел (Label1 ), а затем, удерживая нажатой клавишу (Shift), щелкните на второй и третьей надписях. Вокруг каждой из надписей, по которой вы щелкаете, появляются прямоугольники выделения и маркеры изменения размера. Выделите все три надписи и отпустите клавишу (Shift). Теперь нужно изменить свойства TextAlign, BorderStyle и Font так, чтобы числа, которые будут появляться в этих надписях, находились в центре, были обведены рамкой и показывались одним и тем же шрифтом одинакового размера. Все эти свойства перечислены в окне Свойства в категории Внешний вид.
В окне Свойства выберите TextAlign, а затем нажмите справа на стрелку раскрывающегося списка. Появляется схема, показывающая варианты центровки текста в пределах поля надписи. Выберите вариант форматирования по центру MiddleCenter.
Теперь измените свойство BorderStyle. Выберите его в списке и нажмите справу стрелку раскрывающегося списка. Выберите FixedSingle, чтобы добавить вокруг каждой надписи тонкую рамку.
Теперь измените шрифт для надписей, изменив параметры свойства Font. Выберите его в окне Свойства, а затем нажмите справа кнопку многоточия. Появится диалоговое окно Шрифт, показанное ниже.
Измените шрифт на Times New Roman, стиль шрифта - на жирный, а его размер - на 24, а затем нажмите OK. Шрифт, стиль и размер текста на надписях изменятся на новые.
Теперь удалите текст для этих трех надписей, чтобы при запуске программы эти поля были пустыми. Выбор шрифта для надписей сохранится, так как он является отдельным свойством. Чтобы это сделать, необходимо выбрать каждую из надписей по отдельности и с помощью клавиши Delete очистить свойство Text.
Установка свойств описательной надписи
Выберите объект четвертой надписи Label4.
В окне Свойства измените свойство Text на "Счастливая семерка".
Щелкните на свойстве Font, а затем на кнопке многоточия.
В диалоговом окне Шрифт измените шрифт на Arial, стиль шрифта - на жирный и размер - на 18. Нажмите OK, при этом шрифт надписи обновится.
Теперь измените цвет отображаемого текста. В окне Свойства выберите ForeColor и во втором столбце нажмите стрелку раскрывающегося списка. Выберите пурпурный цвет на закладке Польз.(Custom). Цвет текста в поле надписи изменится на пурпурный.
Свойства поля для изображения
Объект для показа изображения будет содержать картинку с человеком, платящим игроку деньги при выигрыше (то есть когда в числовых надписях формы есть хотя бы одна семерка). Чтобы задать размеры картинки, нужно изменить свойство SizeMode, а в свойстве Image следует указать имя JPEG-файла, который будет загружен в поле изображения. Следует также задать свойство Visible, которое определяет состояние изображения в начале работы программы.
Установка свойств поля изображения
На поле формы щелкните на объекте поля изображения.
В окне Свойства выберите свойство SizeMode, которое находится в категории Поведение. Нажмите на стрелке раскрывающегося списка и выберите StretchImage. Если для SizeMode выбрано значение StretchImage, то прежде чем показать файл изображения, VisualStudio изменит его размер так, чтобы оно в точности совпадало с размерами поля.
В окне Свойства выберите свойство Image, а затем щелкните на кнопке многоточия во втором столбце. Появится диалоговое окно Открыть и выберите файл jpg с нужным изображением.
В окне Properties Свойства в категории Behavior (Поведение) выберите свойство Visible. Чтобы сделать изображение невидимым при запуске программы, выберите False.
Готовая форма должна выглядеть примерно так, как показано на рисунке ниже.
Дважды щелкните мышью на строке заголовка окна Properties (Свойства) , чтобы вернуть его в его закрепленное положение.
Написание кода
Таблицы значений свойств
Таблица 2.2.
|
Объект
|
Свойство
|
Значение
|
Button1
|
Text
|
"Крутить"
|
Button2
|
Text
|
"Выход"
|
Label1, Label2, Label3
|
BorderStyle
|
FixedSingle
|
Font
|
Times New Roman, жирный, 24 пункта
|
Text
|
(пусто)
|
TextAlign
|
MiddleCenter
|
Label4
|
Text
|
"Счастливая семерка"
|
Font
|
Arial, жирный, 18 пунктов
|
ForeColor
|
Purple
|
PictureBox1
|
Image
|
"абсолютный адрес файла с изображением"
|
SizeMode
|
StretchImage
|
Visible
|
False
|
Работа в Редакторе кода
В поле формы дважды щелкните мышью на кнопке Выход. В центральном окне среды разработки VisualStudioпоявится редактор кодаМежду строками PrivateSub и EndSub введите
Дважды щелкните мышью на кнопке Крутить. Между строками PrivateSub и EndSub введите следующие ниже строки программы:
Функция Rnd в каждой строке возвращает случайное число в интервале между 0 и 1 (число с десятичной запятой и несколькими знаками после нее), а функция Int возвращает целую часть произведения этого случайного числа на 10. Это вычисление дает нам случайные числа в интервале между 0 и 9 - именно то, что нам требуется для нашего приложения игрового автомата.
Затем необходимо выполнить в нашем коде одно обязательное действие - скопировать эти случайные числа в три поля надписей на форме, но прежде, чем это сделать, эти числа должны быть преобразованы в текст с помощью функции CStr (converttostring - преобразовать в текст). Обратите внимание, как CStr, Int и Rnd объединены вместе в одно выражение в программе - они работают совместно и дают результат аналогично математической формуле. После вычисления и преобразования эти значения присваиваются свойствам Text первых трех надписей формы.
Последняя группа операторов программы проверяет, не равняется ли одно из случайных чисел "7". Если одно или несколько из этих чисел равны "7", то программа показывает средневековое изображение выплаты денег, а звуковой сигнал провозглашает о победе.
Запуск программы "Семерка"
Нажмите кнопку Начать отладку(Start) на стандартной панели инструментов. Программа "Семерка" будет скомпилирована и запущена в среде программирования. Появится созданный вами графический интерфейс.
Нажмите кнопку Крутить. Программа найдет три случайных числа и покажет их в надписях на форме.
Так как в первом поле надписи выпала "7", появляется цифровое фото, изображающее выплату денег, и компьютер издает звуковой сигнал. Вы выиграли! Звук, который вы услышите, зависит от установок в окне Soundsand Devises (Звуки и аудиоустройства) в панели управления Windows - чтобы сделать звук в этой игре интереснее, измените звук, установленный по умолчанию, на что-нибудь более динамичное.
Нажмите кнопку Крутить еще несколько раз, наблюдая за результатом "вращений" в числовых полях.
Почти в половине ваших экспериментов вы будете выигрывать (реальные шансы - 2,8 раза из 10; просто вам поначалу везет). В дальнейшем можно будет усложнить игру, выводя цифровое фото только тогда, кода появятся две или три семерки, или подсчитывая текущую сумму выигрышей.
Когда вы закончите экспериментировать с вашим новым детищем, нажмите кнопку Выход. Программа остановится, и на экране снова появится среда программирования.
Совет. Если вы снова запустите программу, то заметите, что "Семерка" показывает ту же самую последовательность случайных чисел. Здесь нет никакой ошибки - функция Rnd в VisualBasic спроектирована так, чтобы сначала отображать повторяющуюся последовательность чисел, чтобы программа выдавала одни и те же предсказуемые результаты в целях отладки. Чтобы создать истинно "случайные" числа, нужно использовать функцию Randomize.
Следующий шаг: внесение дополнений в программу
Добавьте в программу "Семерка" специальный оператор с именем Randomize.
Теперь вы должны добавить в процедуру Form_Load - специальную процедуру, которая ассоциирована с формой и исполняется каждый раз при запуске программы - оператор Randomize.
Чтобы перейти к тексту процедуры Form_Load, дважды щелкните мышью на форме (но не на одном из ее объектов). В редакторе кода появится процедура Form_Load.
Введите , а затем нажмите на клавишу со стрелкой вниз. Оператор Randomize добавлен в программу и будет исполняться каждый раз при ее запуске. Чтобы создать истинно случайную начальную точку для функции Rnd в процедуре Button1_Click, в Randomize используются системные часы. При использовании Randomize программа будет каждый раз выдавать новую последовательность, и числа не будут повторяться.
-
Запустите новую версию "Семерки".
Работа с несколькими формами
Использование второй формы для отображения справочной информации о программе «Семерка». Добавьте вторую форму с помощью команды Добавить форму Windows из меню Проект, а отображать эту форму на экране будете в коде программы с помощью метода ShowDialog. Вторая форма будет отображать файл Readme.txt, который должен содержать справочную информацию.
Добавление второй формы
Чтобы добавить в проект вторую форму, щелкните на команде Добавить форму Windows в меню Проект. Вы увидите такое диалоговое окно.
Введите в текстовом поле Имя (Name) имя файла HelpInfo.vb, а затем щелкните наДобавить (Open). В проект Семерка будет добавлена вторая форма с именем HelpInfo.vb. Она появится в Обозревателе решений, как показано здесь.
Теперь необходимо добавить в форму HelpInfo.vb несколько элементов управления.
Используйте элемент управления Label и нарисуйте в верхней части формы HelpInfo.vb метку. Сделайте длину этой метки равной ширине формы так, чтобы в ней уместился длинный текст.
Используйте элемент управления TextBox и создайте объект текстового поля.
Установите свойство Multiline этого объекта текстового поля на значение True, чтобы можно было изменить размер этого объекта.
Измените размер объекта текстового поля так, чтобы он заполнял почти все пространство формы.
Используйте элемент управления Button и создайте в нижней части формы объект кнопки.
Установите для объектов формы HelpInfo.vb следующие свойства:
Объект
|
Свойство
|
Установка
|
Label1
|
Text
|
"Инструкции по работе с игровым автоматом Счастливая семерка"
|
TextBox1
|
Scrollbars
|
Vertical
|
Text
|
пустой (empty)
|
Button1
|
Text
|
"OK"
|
HelpInfo.vb
|
Text
|
"Справка"
|
Форма HelpInfo.vb выглядит так.
Теперь необходимо ввести строку кода программы в процедуру события Button1_Click формы HelpInfo.vb.
Чтобы отобразить в Редакторе кода процедуру события Button1_Click, сделайте двойной щелчок мышью на кнопке OK.
Введите следующий оператор программы:
Форма HelpInfo.vb действует в этом проекте как диалоговое окно, так как она открывается в процедуре события Form1 с помощью метода ShowDialog. После того, как пользователь изучил справочную информацию в этом диалоговом окне, кнопка OK закрывает форму, устанавливая свойство DialogResultтекущей формы (Me) на значение DialogResult.OK. Это значение является константой VisualBasic, указывающей, что диалоговое окно закрыто, при этом вызывающую процедуру должно вернуться значение "OK". Более сложное диалоговое окно может с помощью параллельных процедур событий кнопок возвращать и другие значения, такие, как DialogResult.Cancel, DialogResult.No, DialogResult.Yes и DialogResult.Abort. Однако когда устанавливается свойство DialogResult, форма автоматически закрывается.
Прокрутите код программы в Редакторе кода в начало. Введите следующий оператор Imports:
Этот оператор создает в проекте ссылку на библиотеку классов, содержащую класс StreamReader. Класс StreamReader не связан непосредственно с определением или использованием дополнительных форм - просто используем его как быстрый способ добавления в новую используемую форму текстовой информации.
Снова отобразите форму HelpInfo.vb, а затем сделайте двойной щелчок мышью на фоне формы. В Редакторе кода появится процедура события HelpInfo_Load.
Введите следующие операторы программы:
Вместо того чтобы вводить содержимое справочного файла в свойство Text объекта текстового поля, для открытия, чтения и отображения в объекте текстового поля файла Readme.txt используйте класс StreamReader. Файл Readme.txt является документом поддержки продукта, содержащим информацию об использовании программы Счастливая семерка. Он содержит инструкции по работе, информацию по деинсталляции и контактную информацию. К сожалению, выводить русские символы с помощью этого метода затруднительно. Поэтому мы выведем содержимое англоязычного файла Readme.txt, который вы самостоятельно создадите.
StreamReader - это альтернативный по отношению к использованию функции Visual Basic FileOpen способ открывать текстовый файл, предоставляемый .NET Framework. Чтобы использовать StreamReader, необходимо включить в начало кода вашей формы библиотеку классов System.IO. Затем объявите переменную (StreamToDisplay) типа StreamReader, которая будет хранить содержимое текстового файла, и откройте этот текстовый файл, указав путь к нему. Наконец, с помощью метода ReadToEnd, который получает из файла весь текст, начиная с текущей позиции (начало текстового фала) и до конца этого файла, вы считываете содержимое текстового файла в переменную StreamToDisplay, и присваиваете ее свойству Text текстового поля. Оператор StreamReader.Close закрывает текстовый файл, а метод Select удаляет выделение из текста, размещенного в объекте текстового поля.
Вы закончили создание формы HelpInfo.vb. Теперь вы добавите объект кнопки и некий код в первую форму.
Отображение второй формы с помощью процедуры события
Щелкните в Обозревателе решений на Form1.vb, а затем щелкните на кнопке Просмотреть конструктор. В среде разработки появится форма Семерка. Теперь необходимо добавить в нижний правый угол формы кнопку Справка.
Используйте элемент управления Button и нарисуйте в нижнем правом углу формы небольшую кнопку.
Используйте окно Свойства, чтобы установить свойство Text кнопки на значение Справка. Ваша форма должна выглядеть примерно так.
Чтобы отобразить в Редакторе кода процедуру события Button3_Click, сделайте двойной щелчок мышью на кнопке Справка.
Введите следующие операторы программы:
Эти операторы демонстрируют, как объявлять и отображать в коде программы вторую форму. VisualBasic .NET требует, чтобы перед использованием второй формы явно объявили переменную типа формы. Добавив в проект форму HelpInfo.vb, вы создали класс с именем HelpInfo; теперь вы используете его для объявления с помощью оператора Dim переменной с именем frmHelpDialog.
Второй оператор программы использует переменную frmHelpDialog, открывая форму HelpInfo.vb как диалоговое окно с помощью метода ShowDialog. Также можно использовать для открытия этой формы метод Show, но в этом случае VisualBasic не рассматривал бы HelpInfo.vb как диалоговое окно; форма была бы немодальной, и пользователь мог бы переключаться между этой и главной формами по мере необходимости. В дополнение к этому свойство DialogResult в процедуре события Button1_Click формы HelpInfo.vb не закрывало бы форму HelpInfo.vb - вместо этого потребовался бы оператор программы Me.Close
При создании собственных проектов помните о различиях между модальными и немодальными формами. Между этими типами форм существуют заметные различия, и вы обнаружите, что каждый из них дает пользователю определенные выгоды.
Теперь запустите программу, чтобы увидеть, как работает приложение, содержащее несколько форм.
Запуск программы
Щелкните на кнопке Начать отладку стандартной панели инструментов.
Появится главная форма LuckySeven.
Чтобы немного поиграть в игру, щелкните семь или восемь раз на кнопке Крутить.
Щелкните на кнопке Справка первой формы. VisualBasic откроет вторую форму проекта (HelpInfo.vb) и отобразит в объекте текстового поля файл Readme.txt. Форма будет выглядеть примерно так.
Чтобы просмотреть весь файл Readme, используйте вертикальную полосу прокрутки.
Чтобы закрыть форму HelpInfo.vb, щелкните на кнопке OK. Форма закроется, и снова станет активной первая форма.
Еще несколько раз щелкните на кнопке Крутить, а затем снова щелкните на кнопке Справка. Снова появится форма HelpInfo.vb, работающая точно так же, как и в первый раз. Обратите внимание, что пока активна вторая форма, вы не можете активизировать первую. Это происходит из-за того, что вторая форма является диалоговым окном или модальной формой, и прежде, чем вы сможете продолжить работу с программой, необходимо закрыть ее.
Щелкните на кнопке OK, а затем на кнопке Закрыть первой формы. Программа остановится, и вернется среда разработки.
Использование свойства DialogResult в вызывающей форме
В вызывающей процедуре события - другими словами, в процедуре события Button3_Click формы Form1 - вы напишите дополнительный код программы, который будет определять, на какой кнопке диалогового окна щелкнул пользователь. Эта информация передается обратно в вызывающую процедуру через свойство DialogResult, которое содержится в имени переменной, использованном для объявления и создания экземпляра второй формы. Например, следующий код в Form1 может быть использован для того, чтобы проверить, щелкнул ли пользователь на кнопке OK, Cancel или какой-либо еще кнопке диалогового окна. (Первые две строки у вас есть, они показывают имя переменной, которое необходимо использовать.)
Подобные процедуры событий, которые объявляют переменную, открывают диалоговое окно и обрабатывают выбор, сделанный в этом диалоговом окне, позволяют добавлять в программы любое количество форм и создавать интерфейс пользователя, который выглядит профессионально, является гибким и дружественным к пользователю.
Контрольные вопросы:
Назвать класс, свойства которого наследует каждая форма.
Характеристики модальных и немодальных окон.
Назначение функций CStr, Int и Rnd.
Назначение и различия методов Show и ShowDialog.
Назначение оператора в программе.
Что нам дает использование класса StreamReader.
Использование свойства DialogResult в вызывающей форме
Лабораторная работа №10
Разработка многооконного приложения
Цель: научиться создавать многооконные приложения (MDI-приложения).
|