Visual Basic. Программирование на Visual Basic

..........................................................................................................................

[ Главная ] [ Статьи ] [ Для новичков ] [ Примеры ] [ Программы ] [ Microsoft Agent 2.0 ] [ Пособие ] [ Уроки ] [ Разное ]
..........................................................................................................................


Урок № 15. Сводим всё вместе

Сводим всё вместе

В этом уроке мы попробуем написать нашу первую программу на Visual Basic - программу для решения квадратных уравнений. Может быть эта программа и не очень полезна в хозяйстве, но она хорошо вас ознакомит с принципами программирования на VB. Итак, приступим. Всмомним из урока 5 основные этапы разработки приложение на Visual Basic:

  1. Продумывание программы
  2. Проектирование интерфейса
  3. Написание программного кода
  4. Отлаживание программы
  5. Окончательная компиляция

Программу будем писать согласно этим пунктам:

1. Продумывание программы.

Что должна делать наша программа? - решать квадратные уравнения. Вспомним, как решаются квадратные уравнения.

a*x*x + b*x + c = 0

Чтобы решить такое уравнение, нужно найти его дискриминант и затем, корни. Дискрименант ищется по формуле:

D = b*b - 4*a*c

А корни:

Если дискриминант > 0, то

X1 = (b + (корень из D)) / 2*a
X2 = (b - (корень из D)) / 2*a

Если дискриминант = 0, то

X1 = X2 = b / 2*a

Если дискриминант < 0, то корней не существует.

Итак, что вышло:

Входные данные в программу - коэффициенты a,b,c. Данные будем вводить в текстовые поля для ввода (TextBox).

Выходные данные - корни (если они есть) и дискриминант. Данные будем выводить в элемент метку (Label). Запускать решение будем нажатием на кнопку (Command Button).

С первым пунктом разобрались. Переходим ко второму - проектирование интерфейса будущей программы.

2. Проектирование интерфейса.

Запустите Visual Basic. Выберите тип Standart EXE. Поместите на форму элементы управления, как показано на рисунке:

Visual Basic - здесь можно почитать и скачать статьи, книги, примеры, описания к API функциям

Нужные элементы управления выделены красным цветом. Для чего нужны эти элементы? Элемент метка (Label) нужен для отображения текста. Т.е. служит как бы подсказкой. В нём мы будем выводить наш дискрименант и корни. Элемент текстовое поле (TextBox) предназначен для ввода пользователем информации. Введённую информации можно легко получить в коде программы. Для этого у TextBox есть свойство Text. Ну, и наконец, элемент кнопка (CommandButton), нужен для запуска некоторого действия. В нашем случае действием будет решение квадратного уравнения. А запускаться оно будет при нажатии на кнопку.

Разместить элементы управления лучше следующим образом: поместите сначала на форму элемент Label. В окне Properties измените свойство Caption этого элемента на "A:". Затем перетащите на форму элемент TextBox так, чтобы он оказался рядом с элементом Label. Удалите текст из элемента TextBox (свойтво Text). Затем выделите оба этих элемента (используя Ctrl) и скопируйте их в буфер обмена клавишами Ctrl+C. Далее нажмите Ctrl+V. Visual Basic спросит вас, нужно ли создать массив из вставляемых элементов управления? Ответьте Нет. Теперь на форме появилась копия элементов Label и TextBox (для параметра B). Скопируйте таким же образом элементы для параметра C. У кнопки измените свойство Caption на "Решить!". Изменяя свойство Caption кнопки, вы, тем самым изменяете текст на самой кнопке. (Если этого не сделать, то пользователю нашей программы трудно было бы догадаться, что же произойдёт при нажатии на кнопку Command1!?). Обратите внимание на кнопки управления формой (справа вверху). Их 3 штуки: свернуть, развернуть и закрыть. Кнопка развернуть нашей форме совсем не к чему. Давайте её уберём. Для этого выделите форму (щёлкните по ней) и в окне Properties отредактируйте свойство BorderStyle. Вам предложат выбрать несколько значений из списка, а именно:

0-None - у формы не будет заголовка и кнопок управления.
1-Fixed Single - форма будет иметь заголовок и одну кнопку - закрыть.
2-Sizeable - задаётся по умолчанию. Форма имеет все 3 кнопки.
3-Fixed Dialog - то же, что и 1, но форму не будет видно на панели задач
4-Fixed ToolWindow - сокращённый вид заголовка и одна кнопка - закрыть
5-Sizeable ToolWindow - то же что и 4, но можно изменять размеры формы

Укажите 1 номер (Fixed Single). Обратите внимание на кнопки управления - осталась только одна - закрыть форму. Но куда же делась кнопка свернуть? Она могла бы нам пригодиться! Давайте вернём её. Для этого нужно установить свойство формы MinButton в True. Теперь всё ОК.

Ну и последний штрих. Зделаем текст "Результаты решения" подчёркнутым. Для этого выделите Label и найдите в окне Properties свойство Font. Если выделить это свойство, то справа появится маленькая кнопочка, при нажатии на которую откроется окно выбора шрифта. Возможно это окно вы уже где-то видели. Например при выборе шрифта в Блокноте. Дело в том, что это окно - одно из общих диалогов Windows (Common Dialogs). К ним относятся такие окна, как "Открытие файла", "Сохранение файла", "Настройки принтера", "Выбор цвета", "Выбор шрифта", "Выбор каталога", "Поиск и замена текста". такие окна не нужно создавать самому. Их предоставляет Windows. Итак, в окне выбора шрифта поставьте галочку - Подчёркнутый. Нажмите ОК.

Вы уже наверное давно заметили тот факт, что у разных элементов управления некоторые свойства часто повторяются (об этом я говорил на предыдущих уроках). Например свойство Caption, Name или свойство Font. Более того, свойство Name есть у ЛЮБОГО элемента управления. Это связано с объектно ориентированным программированием (ООП). Мы не будем подробно на этом останавливаться, т.к. сейчас это не столь важно. Позже, я постараюсь затронуть эту тему и рассказать про ООП. А пока примите это как факт.

Обратите внимание на имена (свойство Name в окне Properties) только что созданных элементов. Label1, Label2... Text1, Text2.... Command1. При создании нового элемента Visual Basic всегда даёт такие имена сам. В последствии они могут быть изменены. Вообще, имена элементов управления очень важная вещь. Такая же важная, как имена переменных. По этим именам вы будете обращаться к вашим элементам управления в коде программы. Существуют некоторые рекомендации по именованию элементов управления. Всегда придерживайтесь их!

Давайте переименуем элементы управления. Для этого измените свойство Name каждого элемента управления согласно таблице:

Назначение элемента управления
Имя (свойство 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). Напомню, что код для этого писать не нужно. За нас всё сделает Visual Basic и Windows. В этом то и заключается прелесть графического интерфейса пользователя (GUI). Мы только считаем введенные значения и всё.

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

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

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

Надеюсь, что вы уловили мою мысль. Если нет, то не отчаивайтесь, далее всё станет понятно.

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

Private Sub cmdCalculate_Click()

End Sub

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

Visual Basic - здесь можно почитать и скачать статьи, книги, примеры, описания к API функциям

В списке довольно много различных событий. В левом списке вы можете выбрать доступные элементы управления, которые помещены на форму. В данном случае в списке вы видите 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. Нажмите на кнопку "Решить!". Если вы всё делати правильно, то должны увидеть следующую картину:

Visual Basic - здесь можно почитать и скачать статьи, книги, примеры, описания к API функциям

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

Visual Basic - здесь можно почитать и скачать статьи, книги, примеры, описания к API функциям

Теперь всё в порядке! Программа работает! Можете поэкперементировать, вводя разные значения коэффициентов.

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



..........................................................................................................................

[ Главная ] [ Диски ] [ Книги ] [ Архив рассылки ] [ Архив новостей ] [ Готовые кусочки программ ] [ Карта сайта ]
..........................................................................................................................

По страницам сайта Visaul Progs
или Изучение Visual Basic
Рассылка 'По страницам сайта Visaul Progs' >>> Подпишись на рассылку - будешь получать новые статьи , примеры и много полезной информации из первых рук!!! >>>Если у вас есть статья которой нет на сайте
пришлите ее мне-------->
Послать статью
>>>Если вы хотите задать вопрос
пишите-------->
Мне нужна помощь


Рейтинг сайтов YandeG Rambler's Top100
Реклама:

...:::Design by Mystf0rse 2005-2010 year:::...