Мой Kbyte.Ru
Рассылка Kbyte.Ru
Группы на Kbyte.Ru
Партнеры Kbyte.Ru
Реклама
Сделано руками
Сделано руками
> Статьи - Анатолий Присяжнюк -

Visual Basic .NET - Числа, математика, финансы

Все статьи / Числа, математика, финансы

Первая программа на VB 2005 для тех, кто имеет навыки программирования в VB 6.0

Автор: Анатолий Присяжнюк | добавлено: 03.03.2010, 15:35 | просмотров: 7726 (0+) | комментариев: 0 | рейтинг: *x5

Первую программу на Visual Basic 2005 Express мы будем создавать необычным образом – мы сразу же попробуем построить график функции y = | x^2 - 5x + 6 |. Решение этой задачки поможет нам написать в дальнейшем графический калькулятор, если, конечно, у вас будет желание сделать это.

* Запустите среду программирования.

* Установите для формы следующие свойства: в секции Appearance: Back Color = HighlightText, Text = Построение графика функции y = x^2-5x+6, в секции Design: (Name) = Grafik01, Localizable = True, в секции Layout: Size: With = 700, Height = 500 (можно и другие, в зависимости от монитора), StartPosition = CenterScreen.

* Расположите на форме следующие объекты, используя Панель инструментов: рисунок (PictureBox), 4 кнопки (Button), вертикальную линейку прокрутки (VScrollBar).

* Установите для PictureBox следующие свойства: в секции Appearance: Back Color = Transparent (прозрачный), в секции Design: (Name) = Graf1, Modifier = Friend, в секции Location: X = 12, Y = 27, в секции Size: Width = 607, Height = 396.

Из последних свойств видно, что названия свойств компонентов существенно изменились по сравнению с версией 6.0. Но эти изменения будут непривычными только в первое время, так как все объекты, которые будут использоваться в программах, будут иметь именно такую интерпретацию свойств, так как она более приближена к объектно-ориентированной парадигме. Собственно говоря, язык Visual Basic все больше приближается к С и Windows, более того, в языке предусмотрено возможность использования фрагментов на С++ и J+!

* Разместите кнопки на форме таким образом, чтобы они имели приблизительно такой вид (Рис. 1):

 

Рис. 1

Рис. 1

 

* Для свойств кнопок измените только значения поля Text (так, как указано на рисунке), кроме кнопки Button4, название которой будем изменять программно.

* Для компонента VScrollBar измените следующие свойства: Minimum = 5, Maximum = 100 i Value = 5.

Перейдем к написанию кода программы: здесь нас также ждет несколько неожиданностей.

 

Рис. 2

Рис. 2

 

* Дважды щелкните на форме (но не на объекте Picture).

Окно написания кода имеет две закладки: Form1.vb і Form1.vb[Design] (Рис. 2). Собственно говоря, окно написания кода программы расположено на первой закладке, а на второй – размещена сама форма со всеми компонентами, которые мы использовали. Само окно написания кода начинается с объявления классов, используемых в приложении. Так как мы дали форме имя Grafik01, то и класс имеет соответствующее название: Private Class Grafik01. Эти слова средой были вставлены автоматически и заканчиваются они соответствующим объявлением о завершении работы с классами формы: End Class, которые также автоматически cгенерированы средой. С понятием классов рекомендуется разобраться самостоятельно, взяв за основание любой учебник или курс по MSDN.

В окне свойств (Properties), концепция классов также отображается соответствующим образом, что видно из названия самого объекта – формы: Grafik01 System.Windows.Forms.Form (Рис. 3).

 

Рис. 3

Рис. 3

 

В раздел объявлений (Declarations), внесите код, указанный на Рис. 2:

 

Dim St As String
Dim i, i1 As Integer
Dim x, y As Double
Dim x1, y1 As Double
Dim dx, dy As Integer
Dim y0, y2, k, kk As Integer
Dim f As Boolean

 

Внимательный читатель может сделать замечание, что нам нужно объявлять каждую переменную с новой строки. Так, это было бы верно для VB 6.0 и ниже, разработчики VB 2005 (еще одно название – Whidbey), пошли на встречу пожеланиям многочисленной армии программистов и теперь такое описание переменных считается правильным, т.е. все переменные будут именно того типа, который нужен программисту, даже если их описано несколько в одной строке.

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

* Внесите самостоятельно код для события Click на кнопке Выход.

* Для процедуры загрузки формы внесите следующий код:

 

Private Sub Form1_Load(ByVal sender As System.Object, _
             ByVal e As System.EventArgs) Handles MyBase.Load
  k = 25
  f = False
  VScrollBar1.Value = k
  Button4.Text = k
  dx = Graf1.Width / 2
  dy = Graf1.Height / 2
End Sub

 

* Для кнопки Очистить лист внесите следующий код:

 

Private Sub Button2_Click(ByVal sender As System.Object, _
                ByVal e As System.EventArgs) Handles Button2.Click
  f = False
  Graf1.Refresh()
End Sub

 

* Для изменения значения вертикальной полосы прокрутки внесите следующий код:

 

Private Sub VScrollBar1_Scroll(ByVal sender As System.Object, _
                
ByVal e As System.Windows.Forms.ScrollEventArgs) _
                Handles VScrollBar1.Scroll
  k = VScrollBar1.Value
  Button4.Text = k
  If f = True Then
    Setka()
  End If
End Sub

 

* Для события Click на кнопке Построить график мы предусмотрим одновременно построение и координатной сетки, и графика функции, но выполнять эти построения будем следующим образом:

 

Private Sub Button1_Click(ByVal sender As System.Object, _
                ByVal e As System.EventArgs) Handles Button1.Click
  
Setka()
End Sub

 

А это значит, что мы должны создать собственную процедуру Setka()

 

* Создайте собственную процедуру Setka, в которую внесите следующий код:

 

Private Sub Setka()
  f = True
  Graf1.Refresh()
  Dim g As Graphics = Graf1.CreateGraphics
  Dim MyPen As New Pen(Color.Black)
  MyPen.DashStyle = Drawing2D.DashStyle.Solid
  MyPen.Color = System.Drawing.Color.Black
  MyPen.Width = 1
  For i = dy To 0 Step -k
    g.DrawLine(MyPen, 0, i, Graf1.Width, i)
  Next i
  For i = dy To Graf1.Height Step k
    g.DrawLine(MyPen, 0, i, Graf1.Width, i)
  Next i
  MyPen.Width = 2
  g.DrawLine(MyPen, 0, dy, Graf1.Width, dy)
  g.DrawLine(MyPen, Graf1.Width - 10, dy - 5, Graf1.Width, dy)
  g.DrawLine(MyPen, Graf1.Width - 10, dy + 5, Graf1.Width, dy)
  MyPen.Width = 1
  For i = dx To 0 Step -k
    g.DrawLine(MyPen, i, 0, i, Graf1.Height)
  Next i
  For i = dx To Graf1.Width Step k
    g.DrawLine(MyPen, i, 0, i, Graf1.Height)
  Next i
  MyPen.Width = 2
  g.DrawLine(MyPen, dx, 0, dx, Graf1.Height)
  g.DrawLine(MyPen, dx, 0, dx - 5, 10)
  g.DrawLine(MyPen, dx, 0, dx + 5, 10)
  MyPen.Color = System.Drawing.Color.Red
  i1 = 0
  x1 = (i1 - dx) / k
  y1 = -k * (x1 * x1 - 5 * x1 + 6) + dy
  y0 = y1
  For i = 0 To Graf1.Width Step 1
    x = (i - dx) / k
    y = -k * (x * x - 5 * x + 6) + dy
    y2 = y
    If y2 > dy Then
      y2 = dy - (y2 - dy)
    End If
    g.DrawLine(MyPen, i1, y0, i, y2)
    i1 = i
    y0 = y2
  Next i
End Sub

 

Обратим внимание на тот факт, что по сравнению с VB 6.0 изменились обращения к инструментам рисования. Для тех, кто пробовал программировать на С++ сразу становится понятным код, написанный в соответствии к требованиям объектно-ориентированного программирования. Для всех остальных мы рекомендуем детально самостоятельно разобраться с каждым из приведенных операторов, поскольку даже само написание соответствующих операторов графики изменилось существенным образом.

Еще существеннее изменилось обращение к клавиатуре. Продемонстрируем это. Давайте сделаем так, чтобы наш график имел возможность масштабироваться при нажатии клавиш + и – дополнительного (цифрового) поля клавиатуры. Это можно сделать разными способами, но простейшим для нас пока что будет использование таймера.

* Разместите инструмент Таймер (Timer) на форме и установите для него следующие свойства: Name = Timer1, Modifiers = Friend, Enabled = True, Interval = 1.

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

* Дважды щелкните на таймере и внесите следующий код:

 

Private Sub Timer1_Tick_1(ByVal sender As System.Object, _
                ByVal e As System.EventArgs) Handles Timer1.Tick
  If kk = True Then
    Setka()
    VScrollBar1.Value = k
    Button4.Text = k
  End If
  kk = False
End Sub

 

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

Самое интересное начинается сейчас, поскольку обрабатывать сообщения с клавиатуры стало намного проще, хотя и более непривычно.

Перед тем, как перейти к написанию кода обработки сообщений о нажатии клавиш, сделаем небольшое отступление. Понятно, что у нас на форме размещено уже несколько объектов, но наиболее значимым среди них для нас есть кнопка Построить график, поскольку именно после нажатия на неё на экране собственно и происходит нужное нам построение графика. Но при этом в системе происходит малозаметное, но очень значимое для нас событие: фокус передается именно этой кнопке. Поэтому, наверное, вполне логично будет обрабатывать сообщение с клавиатуры не для формы, а для указанной кнопки (Button1)!

 

Рис. 4

Рис. 4

 

* В окне написания кода установите курсор в процедуру нажатия на кнопку Построить график, как это показано на Рис. 4.

В списке объектов у вас должно быть написано Button1, а в списке событий – Click.

* Нажмите на кнопку разворачивания списка правее от события Click, и в открывшемся списке, выберите событие KeyDown.

Дело в том, что для клавиатуры наиболее значимыми есть события KeyDown, KeyPress и KeyUp, но более важную информацию о нажатии кнопки для нас будет передавать именно событие KeyDown – нажатие на кнопку.

* Внесите для этого события следующий код:

 

Private Sub Button1_KeyDown(ByVal sender As Object, ByVal e As _
        System.Windows.Forms.KeyEventArgs) Handles Button1.KeyDown
  If e.KeyCode = Keys.Add Then ' +
    kk = True
    k = k + 10
    If k > 100 Then
      k = 100
    End If
  End If
  If e.KeyCode = Keys.Subtract Then ' -
    kk = True
    k = k - 10
    If k < 10 Then
      k = 10
    End If
  End If
End Sub

 

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

Выполните ваше приложение. Если оно у вас заработало, значить вы всё сделали верно, и это действительно ваша первая программа на Visual Basic 2005. Если уж писать первую программу, то это должно быть что-то красивое (ведь мы уже умеем программировать на VB 6.0!), а не привычное всем “Hello, World”!

 

Рис. 5

 

Ваша программа должна иметь вид, показанный на Рис. 5, и реагировать на нажатие клавиш + и – дополнительного поля.

 

В следующей статье планируется рассмотреть работу с массивами и ответить на вопрос: как из ТОПОР сделать РОПОТ, причем сделаем это в виде игрушки.

 

Присяжнюк Анатолий Васильевич – Украина, г. Бердичев

e-mail: awpriss17@mail.ru

+ Добавить в избранное
    ? Помощь
Об авторе

Анатолий Присяжнюк

Присяжнюк Анатолий Васильевич - учитель информатики специализированной, с углубленным изучением информатики школы 17 г. Бердичев (Украина). Автор книг: "Вступление в программирование. Язык Паскаль", "Олимпиады Житомирской области до 2000 г.", "Уроки по Visual Basic". Специализируется на вопросах, связанных с преподаванием информатики, изучением программирования, организацией и проведением олимпиад по программированию.

См. также:
Профиль автора
Анатолий Присяжнюк
Другие статьи этого автора (всего: 2)
Последние комментарии (всего: 0)

Добавлять комментарии могут только зарегистрированные пользователи сайта.
Если у Вас уже есть учетная запись на Kbyte.Ru, пройдите процедуру авторизации OpenID.
Если Вы еще не зарегистрированы на Kbyte.Ru - зарегистрируйтесь.


Нет комментариев...

Авторизация
 
OpenID
Зарегистрируйся и получи 10% скидку на добавление своего сайта в каталоги! Подробнее »
Поиск по сайту
Люди на Kbyte.Ru
Реклама
Счетчики