Скачать 146.56 Kb.
|
Занятие 15 «Процедуры и функции в Visual Basic. Диалог с пользователем.» В занятии рассказывается, как в своих проектах использовать команду и функцию MsgBox. Слушатели делают проект prjDialogue, реализующий диалог с пользователем, используя InputBox .и MsgBox. Кроме этого в занятии объясняется, как создавать новые процедуры и функции. Слушатель модифицирует проект prjDialogue так, чтобы каждый этап диалога был реализован в отдельной процедуре или функции 1. Окно MsgBox, команда MsgBox Для вывода различных сообщений в Visual Basic имеется окно, подобное InputBox – MsgBox. Почти все приложения Windows используют MsgBox, т. к. этот компонент входит в состав Windows. Visual Basic только предоставляет возможность его вызова.Вид окна может быть различным, но в его состав всегда входит: -текст сообщения (prompt); -заголовок (title); -пиктограмма; -набор кнопок. Синтаксис команды:MsgBox prompt [,type] [,title]где type – целая константа (или несколько констант), определяющая, какие кнопки (комбинации кнопок) и пиктограммы будут отображаться в окне сообщения. Необязательные параметры приведены в квадратных скобках.Параметр type определяет внешний вид MsgBox. Значение параметра формируется из нескольних частей, которые можно складывать: button, icon, default, modal, extras. Для категории параметра button, icon, default, modal можно использовать только одну из допустимых констант. Для категории extras допусткается применение комбинации значений. Ниже приведена таблица констант параметра type MsgBox.
Для того, чтобы лучше понять, какие значения какого параметра в операторе MsgBox что могут дать для окна сообщения, разберем несколько маленьких примеров. Начните новый проект, поместите на форму командную кнопку command1 и составьте для нее следующий код: Private Sub Command1_Click( ) MsgBox "Мое первое окно сообщения"End SubЕ сли теперь запустить проект на выполнение и щелкнуть на командной кнопке, то на экране появится вот такое окно сообщения: Чтобы оно пропало, нужно щелкнуть на его кнопке. Давайте теперь в строку кода попробуем вставить второй параметр (buttons). Сразу после того, как вы поставите запятую, следующую за вторым параметром, Visual Basic предложит вам список констант, которые вы можете выбрать: В ыберем из них vbCritical. Тогда строка кода примет вид: MsgBox "Мое первое окно сообщения", vbCriticalВ результате на окне сообщения окажется пиктограмма: Попробуйте поставить в качестве значения второго параметра константу vbQuestion. Окно станет таким: М ожно выбрать одну из четырех пиктограмм для отображения в окне сообщения. Предположим теперь, что вы хотите, чтобы в окне MsgBox отображались вопросительный знак, кнопки ДА, НЕТ, и при этом кнопка НЕТ была кнопкой по умолчанию. Кроме того, выполнение дальнейших операторов программы должно продолжаться только после закрытия окна (окно должно быть модальным окном приложения). Для этого следует просуммировать соответствующие значения: t$=vbYesNo Or vbQuestion Or DefaultButton2 Or vbApplicationModalОбратите внимание, что корректное суммирование значений констант выполняется оператором Or. Оператор будет таким: MsgBox “Первое окно сообщения”,t$ Не забудьте в коде определить переменную t$. В результате ваше окно сообщения будет иметь вид: Т ак как всем символьным константам Visual Basic соответствуют числовые значения, код, реализующий те же требования, мог бы выглядеть следующим образом: t$ = 4 + 32 + 256 + 0MsgBox “Первое окно сообщения”, t$ Попробуем теперь в строку кода добавить значение еще одного параметра title. Напишите, например, свою фамилию: MsgBox "Первое окно сообщения",t$, “Истомина”В строке заголовка окна сообщения напечатается ваша фамилия: 2 . Функция MsgBox( ) Если вам необходимо не только что-либо сообщить пользователю, но и получить информацию о том, какое решение принял пользователь, можно воспользоваться функцией MsgBox. Функция MsgBox( ) не только отображает окно сообщения, но еще и возвращает некоторое значение (ответ пользователя о том, какое он принял решение). Приведем формат функции MsgBox( ): Возвращаемое_значение= MsgBox (prompt [,type] [,title])Возвращаемое_значение позволяет определить, какую кнопку нажал пользователь. В таблице, которая приведена ниже, содержатся значения, возвращаемые функцией MsgBox:
Синтаксис команды предназначен для окна сообщения MsgBox с одной кнопкой, т. к. в этом случае возвращаемое значение не важно. Однако при запросах требуется вызывать MsgBox как функцию, т. к. возвращаемое значение используется для определения кнопки, нажатой пользователем. Необходимо корректно использовать функцию MsgBox. Обычными для нее являются вопросы типа: «Хотите ли Вы сохранить изменения в…?» (Да/Нет/Отмена). Вопрос должен формулироваться четко и ясно, чтобы пользователь мог дать на него однозначный ответ. Кнопка Default (активная по умолчанию) должна определяться таким образом, чтобы при случайном нажатии клавиши <Enter> действия, реализуемые в процедуре обработки нажатия кнопки по умолчанию, не могли нанести большого вреда. Например, не следует в окне с вопросом: «Удалить все внесенные изменения?» (Да/Нет) назначать кнопку Да по умолчанию.
Cделаем небольшой проект. Смысл проекта заключается в том, что пользователю в несколько этапов будут задаваться вопросы (с помощью окна InputBox). Ответы будут использоваться для некоторых вычислений или сравнений, после которых на каждом этапе ему с помощью функции MsgBox будет сообщаться об итогах данного этапа и будет предлагаться продолжить диалог или закончить его. Если пользователь принимает решение продолжить работать с программой, задаются вопросы следующего этапа, ответы на которые будут использоваться для некоторых вычислений или сравнений. И опять в окне MsgBox будет даваться некоторое сообщение пользователю и предложение продолжить или закончить диалог. Этапов в проекте может быть сколько угодно. Совместно мы сделаем один из них, еще два Вы сделаете самостоятельно. Если хотите, можете сделать и больше. На форму поместим одну командную кнопку (свойство Caption зададим – «Диалог»). Весь код проекта будем составлять в коде этой командной кнопки. На первом этапе запросим имя пользователя, после чего поприветствуем его, используя метод Print и функцию Tab, на форме. YourName = InputBox (“Как Вас зовут?”) Print Tab (10);”Приветствуем Вас,”;YourName Не забудьте объявить переменную YourName. Далее запросим возраст пользователя: YourAge = InputBox (“Сколько Вам лет?”, “Ваш возраст”) После этого запросим возраст соседа пользователя: HimAge = InputBox (“Сколько ему лет?”, “возраст соседа”) Вопросы первого этапа завершены. Обработаем их: сравним эти два возраста. С помощью функции MsgBox сообщим результаты сравнения пользователю и предложим перейти ко второму этапу. При этом пользователь должен иметь возможность выйти из программы и закончить отвечать на вопросы. Блок кода, в котором производится сравнение возрастов может быть таким: f$ = vbYesNo Or vbExclamation Or vbDefaultButton1 If YourAge > HimAge Then Answer1%=MsgBox("Вы старше соседа! Продолжим диалог?", f$) ElseIf HimAge > YourAge Then Answer1% = MsgBox("Ваш сосед старше Вас! Продолжим диалог?", f$) Else Answer1% = MsgBox("Вы одногодки! Продолжим диалог?", f$) End If На этом этапе окно MsgBox мы вызываем с помощью функции MsgBox, т. к. нам важен ответ пользователя на вопрос: хочет он продолжить работу с проектом или нет. Переменную, в которой будет храниться ответ пользователя, назовем Answer1%. Теперь обработаем ответ пользователя. Если он ответил <No>, то, согласно таблице, Answer1% = 7. Перед последней строкой процедуры (End Sub) поместим еще одну строку и слева обозначим ее меткой, например, 100: 100 Print: Print: Print Tab(5); “До свидания!” Если значение переменной Answer1% = 7, то будем делать переход на строку с меткой 100. Goto 100 После нее выполнится строка End Sub, то есть вопросов пользователю больше не будет, программа закончит свою работу. Если пользователь решил продолжить диалог (согласно таблице значение Answer1% = 6), то будем делать переход на следующий блок программного кода – этап 2. Первую строку кода этого этапа обозначим меткой 10: Goto 10 Тогда блок анализа ответа пользователя может выглядеть вот так: If Answer1% = 7 Then GoTo 100 Else GoTo 10 End If Не забудьте в начале процедуры объявить все необходимые переменные: Dim YourName As String, YourAge As Integer Dim HimAge As Integer, f$, Answer1% А теперь придумайте вопросы для следующих этапов диалога с пользователем, составьте код для них сначала в тетради, потом проверьте и отладьте его на компьютере.
Visual Basic – язык процедур. Как и во многих других языках программирования в Visual Basic весь программный код находится внутри процедур. Процедура – это подпрограмма (часть программного кода). Она начинается оператором Sub, заканчивается оператором End Sub. Между ними помещается код. Процедура обязательно имеет имя. Процедуры могут вызываться самим Visual Basic. Это процедуры обработки событий. Такие процедуры относятся к конкретному объекту и событию, связанному с ним. Имя процедуры обработки события состоит из имени объекта и имени события. Например: Private Sub Command1_Click( ) End Sub Можно создавать собственные процедуры, так называемые общие процедуры. Такие процедуры относятся к секции General (Declaration). Существует два способа добавления процедуры в проект. Первый способ заключается в том, чтобы написать код прямо в разделе General объявлений формы или модуля. Другой способ – использование пункта Add Procedure (добавить процедуру) из меню Tools (Сервис). Начните новый проект и добавьте общую процедуру: Public Sub Remember( ) Dim t As String t = vbOKOnly Or vbExclamation Or vbMsgBoxSetForeground MsgBox "Учи уроки!", t, "Напоминание" End SubПосле того, как общая процедура получила свое имя, она может быть вызвана и выполнена. Вызвать процедуру можно в любой другой процедуре кода с использованием оператора Call или просто указав ее имя, столько раз, сколько нужно по смыслу проекта. Использование ключевого слова Call делает программный код более удобным для чтения. Сделайте в своем проекте командную кнопку, а в ее коде вызов процедуры Remember( ): Call RememberТ еперь, если вы запустите проект на выполнение и щелкните на кнопке, увидите окно MsgBox: В любом другом месте программы, если вы захотите напомнить пользователю, что надо учить уроки, вам достаточно будет вставить в соответствующее место вызов процедуры Remember( ), а не писать ее снова. Процедуры общего назначения не связаны ни с каким событием, и их вызов разработчик осуществляет по собственному усмотрению.
Функция построена также, как процедура. Однако есть отличия. Как и в математике, результатом работы функции является только одно возвращаемое значение. Добавить в проект функцию можно теми же двумя способами, которые используются для добавления процедур: либо ввести код функции непосредственно в раздел General формы или модуля, либо с помощью диалогового окна Add Procedure. Для определения функции используется ключевое слово Function. В конце функции вместо End Sub пишется End Function. Добавьте в свой проект любым способом функцию, которая бы с помощью окна InputBox запрашивала имя пользователя. Public Function Surname( ) As StringSurname = InputBox("ВВедите свою фамилию", "фамилия") End FunctionВ объявлении функции определяется тип возвращаемого значения. Выполнить функцию можно в любом месте кода столько раз, сколько потребуется разработчику, использовав в коде возвращаемое ею значение. Например, можно напечатать на форме введенное пользователем имя: Print Surname
На предыдущем уроке вы сделали проект prjDialogue, в котором пользователю задавалось несколько вопросов в несколько этапов. На каждом этапе ответы пользователя анализировались, сравнивались, или с их помощью производились вычисления. На основе анализа делался некоторый вывод и печатался в окне MsgBox. Все этапы диалога с пользователем содержались в одной процедуре командной кнопки события Click( ). Процедура получилась громоздкая, плохо читаемая, со множеством ссылок. Попробуем изменить проект следующим образом: каждый этап диалога будем делать в отдельной процедуре общего назначения. Этап проекта, на котором пользователю задается вопрос об имени, и он приветствуется на форме, поместим в процедуру Name( ): Private Sub Name( ) Dim SurName As StringSurName = InputBox(“Как Вас зовут?”) Cls Print:Print:Print:Print FontSize = 14 Print Tab(5);”Приветствуем Вас,”; SurName End SubВ процедуре Age( ) будут задаваться вопросы и анализироваться ответы пользователя о возрасте: Private Sub Age( ) Dim YourAge%, HimAge%, Answer%,F $YourAge% = InputBox (“Сколько Вам лет?”,”ваш возраст”) HimAge%=InputBox (“Сколько лет Вашему соседу”,”сосед”) F$ = vbYesNo Or vbExclamation Or vbDefaultButton1 If YourAge% > HimAge% ThenAnswer%=MsgBox(“Вы старше своего соседа! Продолжим_ диалог?”, F$) ElseIf HimAge% > YourAge% ThenAnswer%=MsgBox(“Ваш сосед старше Вас! Продолжим_ диалог?”, F$) ElseAnswer%=MsgBox(“Вы одногодки! Продолжим диалог?”,F$) End IfIf Answer%< > 7 Then Call… Else Print: Print: Print Tab(5);”Большое спасибо за беседу.” Print Tab(10);”До свидания.” End If End SubВ последнем блоке процедуры, если пользователь не ответил «нет» на вопрос, хочет ли он продолжить диалог (переменная Answer%<>7), вызывается процедура следующего этапа (Call…), в противном случае процедура заканчивает свою работу, вопросы пользователю больше не задаются. Процедура командной кнопки будет иметь вид: Private Sub Command1_Click( ) Call NameCall Age End SubДоделайте код проекта, поместив код каждого этапа в отдельную процедуру. Такой код лучше читается, не имеет ссылок, его легче модифицировать. Например, чтобы поменять очередность этапов, достаточно указать другое имя процедуры в операторе Call.
В первом варианте проекта prjDialogue без отдельных процедур, чтобы проанализировать ответ пользователя о его желании продолжить диалог, на каждом этапе приходилось вводить новую переменную для ответа: answer1% - на первом этапе, answer2% - на втором этапе и т. д. Во втором варианте проекта для хранения ответа на аналогичный вопрос на первом этапе проекта в процедуре Age( ) объявлена переменная Answer%. Она объявлена с помощью оператора Dim. Эта переменная остается в действии, т. е. она «видима» только для операторов блока кода этой процедуры. После завершения работы процедуры эта переменная удаляется из памяти. Значит в процедуре следующего этапа проекта для хранения ответа пользователя на аналогичный вопрос можно объявить локальную переменную с тем же именем. Эта переменная «скрыта» для остальной части кода. Способность процедуры скрывать свою внутреннюю работу называется инкапсуляцией. Хорошо инкапсулированной называется такая процедура, которая не зависит от других частей кода и конкретных объектов. Такая процедура «работает» всегда одинаково. 8. Задания Сделайте проект prjDialogue, реализующий диалог с пользователем, описанный в пункте 6 и пришлите на проверку. |
Название книги по-русски в английской транслитерации, потом в квадратных... ... | Требования к оформлению тезисов докладов ... | ||
Правила оформления статей для Гост р 5-2008. Литература дается в порядке упоминания в статье. Ссылки в тексте оформляются в квадратных скобках, размещаются после... | Урок Установка параметров страницы. Набор текста. Тире и дефис Для подготовки документа к работе надо установить параметры страницы, параметры абзаца, а также параметры шрифта | ||
Ганичкина Людмила Михайловна Цель урока: познакомить учащихся с условным... Оборудование: модель предложения с моделями слов, звуковые фишки, задания на печатной основе с эталоном проверки, шарады | Программа по формированию навыков безопасного поведения на дорогах... Систематизировать знания по решению неполных квадратных и полных квадратных уравнений | ||
Реферат по математике на тему: Способы устного решения квадратных уравнений Решение квадратных уравнений с помощью выделения квадрата двучлена | Урок конференция по теме "Решение задач с помощью квадратных уравнений" 8-й класс Решение задач с помощью квадратных уравнений”. Продолжить закрепление решение квадратных уравнений по формуле | ||
Урок по теме «Решение квадратных уравнений». 8 класс Цели урока Обобщить, систематизировать, проверить основные умения и навыки решения квадратных уравнений | Параметры документа word реферата Структура реферата ... | ||
Урок по алгебре в 8 классе. Тема урока: способы решений квадратных уравнений. Цель урока Цель урока: провести игру «Счастливый случай» в закрепление и обобщение способов решения квадратных уравнений | Измерения параметров транзисторов Как оценить качество транзистора? Какие параметры транзистора надо знать, чтобы предугадать его работу в приемнике, усилителе? Как... | ||
Программа по формированию навыков безопасного поведения на дорогах... Сегодня мы познакомимся с очень интересными свойствами некоторых квадратных уравнений. Использование этих свойств при решении квадратных... | Тои дво ран) удк 551. 46+551. 5 (265) Дальневосточные моря, тихий океан, теплосодержание вод, межгодовая и сезонная изменчивость, ледовые параметры, циркуляция вод, промежуточные... | ||
Программа по формированию навыков безопасного поведения на дорогах... Обучающая – ввести понятия квадратного уравнения, корня квадратного уравнения; показать решения квадратных уравнений; формировать... | 2 3/271 «Параметры семантической характеристики слова в толковом словаре» «Параметры семантической характеристики слова в толковом словаре» аналитической ведомственной целевой программы “Развитие научного... |