Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа1.doc
Скачиваний:
1
Добавлен:
29.07.2019
Размер:
143.87 Кб
Скачать

Назначение элемента управления Имя (свойство Name)

A: - параметр A txtParamA

B: - параметр B txtParamB

C: - параметр C txtParamC

Кнопка для запуска решения cmdCalculate

Label, с вычисленным дискриминантом lblD

Label, с корнем X1 lblX1

Label, с корнем X2 lblX2

Форма, содержащая все эти элементы frmMain

Остальные элементы переименовывать не обязательно, т.к. мы к ним не будем обращаться в коде программы. Но, если хотите, можете переименовать.

Интерфейс готов. Он конечно не претендует на звание самого удобного и красивого интерфейса года ;), но для начала сойдёт. Всё равно, в дальнейшем, уже после написания кода программы, вы сможете изменить интерфейс по вашему вкусу.

3. Написание программного кода.

  1. Вводим исходные данные в текстовые поля (a,b,c).

  2. После нажатия на кнопку, производим вычисление дискриминанта и корней.

  3. Выводим полученные значения в метки (Label'и).

Нам необходимо написать обработчик события клик (Click) нашей кнопки - cmdCalculate. Что значит обработчик события? Обработчик события - это процедура, которая будет выполняться всякий раз, когда произойдёт то или иное событие. Например событе Click.

Click

Происходит при нажатии (отпускании) кнопки мышки над объектом. Оно также может происходить при смене некоторого значения объекта.

Для формы такое событие выполняется при клике на свободном месте формы, или по отключённому элементу управления (т.е. когда его Enabled = False).

Вообще событие происходит и для правой кнопки мыши и для левой. Но для элементов CheckBox, CommandButton, Listbox, и OptionButton происходит только при нажатии левой кнопки мыши.

Для ComboBox или ListBox оно происходит и при клике мышкой и также при смене текущего элемента клавишами курсора.

Происходит при нажатии на "ПРОБЕЛ" у элементов CommandButton, OptionButton, или CheckBox, когда те имею фокус.

При нажатии на ENTER при фокусе на элементе CommandButton (то бишь гашей кнопке) и когда установлено свойство Default.

Происходит при нажатии на ESC когда форма имеет Cancel кнопку - CommandButton с установленым свойством Cancel.

Также происходит при нажатии на горячую последовательность. Например, если кнопка имеет Caption - "&Go", то при нажатии Alt+G запуститься событие.

Также, событие Click может быть сгенерировано в следующих случаях в коде: Установка значения Value для OptionButton и CheckBox.

Оно происходит всякий раз при нажатии на кнопку. Т.е., если запустить программу на выполнение и не нажимать на кнопку cmdCalculate ничего не произойдёт. Но как только вы кликните по кнопке, произойдёт выполнение кода, который написан в процедуре обработки события Click (процедуре с именем cmdCalculate_Click). Он будет выполняться всякий раз, когда пользователь кликнет по кнопке. В этом то и состоит та самая Событийно-Управляемая модель программирования, которая отличается от плоских последовательных программ (Turbo Паскаля, например). Программирование на Visual Basic целиком и полностью базируется на этой Событийно-Управяемой модели.

Чтобы создать обработчик события Click необходимо сделать двойной клик по нашей кнопке cmdCalculate (при двойном клике, VB создаёт заготовку обработчика события - по-умолчанию. У кнопки, это событие Click, у формы - Load, у таймера - Timer и т.д.). Visual Basic создаст для вас заготовку процедуры, которая будет выглядеть следующим образом:

Private Sub cmdCalculate_Click()

End Sub

Чтобы создать обработчик для другого события, необходимо выбрать событие в правом списке в окне кода:

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

Так же, как и некоторое свойства элементов управления, события тоже повторяются. Например, событие Click. Оно есть и у элемента кнопки (Command Button), и у элемента метки (Label) и у многих других. Есть оно и у формы. Это очень облегчает процесс программирования. Не нужно тратить много времени на изучение каждого элемента управления, т.к. многое повторяется.

Заметьте также, что у процедуры обработки события Click нет входных параметров, о чём нам говорят пустые скобки. Добавить свои параметры в эту процедуру нельзя. У процедур обработки некоторых других событий могут быть параметры. Например, у события MouseMove (координаты курсора мыши) или KeyUp (код отжатой клавиши). Эти параметры передаются незаметно для программиста, и их можно использовать по своему усмотрению (а можно и вовсе не использовать).

Теперь давайте приступим непосредственно к программированию. Для начала объявим переменные с типом Double (для хранения вещественных чисел):

Private Sub cmdCalculate_Click()     ' объявляем переменные     Dim paramA As Double     Dim paramB As Double     Dim paramC As Double     Dim x1 As Double     Dim x2 As Double     Dim D As Double End Sub

Теперь считаем введённые параметры a, b и с. Для этого присвоим переменным paramA, paramB и paramC значения свойства Text всех 3-х полей для ввода (TextBox'ов). Мы можем это сделать потому, что Visual Basic сам преобразует число в виде строки в обычное число с плавающей точкой.

paramA = txtParamA.Text paramB = txtParamB.Text paramC = txtParamC.Text

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

Теперь нам нужно рассчитать дискриминант. Для этого присвоим переменной D, которая будет хранить значение дискриминанта, следующее выражение:

D = (paramB * paramB) - (4 * paramA * paramC)

Скобки я поставил для наглядности. Ставить их в данном случае не обязательно, т.к. умножение всё равно выполниться до вычитания. (вспомните, что умножение имеет больший приоритет, чем вычитание).

Теперь, зная значение дискриминанта, нужно сравнить его с нулём. Если он больше нуля, то вычислить оба корня, если равен нулю, то вычислить один корень, ну а если меньше, то ничего не вычислять и выдать сообщение о том, что корней нет. Такое ветвление мы организуем с помощью оператора If:

If D > 0 Then     x1 = (paramB + Sqr(D)) / (2 * paramA)     x2 = (paramB - Sqr(D)) / (2 * paramA)     lblD.Caption = "Дискриминант: " & D     lblX1.Caption = "Корень №1: " & x1     lblX2.Caption = "Корень №2: " & x2 ElseIf D = 0 Then     x1 = paramB / (2 * paramA)     x2 = x1     lblD.Caption = "Дискременант: " & D     lblX1.Caption = "Корень №1: " & x1     lblX2.Caption = "Корень №2 = Корню №1" ElseIf D < 0 Then     lblD.Caption = "Дискриминант: " & D     lblX1.Caption = "Корней нет!"     lblX2.Caption = ""     MsgBox "Дискриминант меньше нуля! Корней нет!", vbCritical End If

Не забывайте про отступы! С ними код намного нагляднее.

Корень мы вычисляем встроенной функцией VB - Sqr (от Square). В выражениях, которые мы присваиваем свойству Caption у меток, мы используем оператор конкатенации (склеивание строк). Им мы склеиваем строку слева от & со строкой справа. Откуда берётся строка справа? Ведь там переменные типа Double!? Как я уже говорил, Visual Basic неявно занимается преобразованием типов. В данном случае перед конкатенацией, числа Double сначала преобразуются в строку.

В принципе, программа уже готова. Давайте проверим её работоспособность. Нажмите кнопку Start. Появится наша форма. Введите значение в поля: a = 3, b = -6, c = 2. Нажмите на кнопку "Решить!". Если вы всё делали правильно, то должны увидеть следующую картину:

Дело в том, что строка для вывода в Label не вписывается в его размеры. Поэтому происходит перенос на следующую строчку. Чтобы этого избежать, закройте программу и установите свойство меток AutoSize в True (Совет: Чтобы не устанавливать это свойство 3 раза для каждой метки, выдели их сразу все 3 и установите свойство.). Свойство AutoSize - подгоняет размер метки так, чтобы текст в свойстве Caption полностью уместился в одну строчку и не переносился на другую. Теперь снова запустите программу, введите те же значения и нажмите на кнопку:

Теперь всё в порядке! Программа работает! Но, обратите внимание! Что произойдёт, если мы, не введя значения в поля , нажмём на кнопку? Что тогда присвоиться нашим переменным? Или, что будет, если мы введём нули в качестве коэффициентов? В обоих случаях Visual Basic сгенерирует ошибку.