Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на BASIC / Visual Basic / Гед Мид. Удачные диаграммы GDI+ Работа с графикой [doc].doc
Скачиваний:
35
Добавлен:
02.05.2014
Размер:
870 Кб
Скачать
☆

Значения вертикальной оси

    Пока пользователь мог видеть текущее значение, отображенное на метке (Label), которое было полезным, но не всегда реалистичным. Однако на самой диаграмме текущее значение ограничено серыми горизонтальными линиями. В большинстве случаев мы хотим что-нибудь более определенное, чем это. Особенно было бы лучше получить значение в конце каждой направляющей линии, где хотелось бы нашему пользователю.     Всегда есть несколько способов достичь этого, один из самых простых – получить второй PictureBox, который содержит эти значения и поместить его рядом с picGraph PictureBox.

    Добавьте на форму второй PictureBox. Поместите его слева от оригинального PictureBox’а picGraph. Установите его размеры 30, 400. Это сделает его той же высоты, что и PictureBox picGraph. Назовите его picValue.     Легкий способ выровнять два PictureBox – применить меню Format в Visual Studio IDE. Вероятно, вы уже знаете все об этом, но просто на всякий случай:

  • Щелкните левой кнопкой мыши на одном из PictureBox’ов.

  • Нажмите на клавишу Control.

  • Кликните на втором PictureBox’е удерживая клавишу Control нажатой.

  • Выберите Format – Alighn – Tops в меню IDE:

  • Затем, выберите Format – Horisontal Spacing – Remove:

  • Если необходимо, вы можете вручную перетащить оба PictureBox’а в удобное место на форме.

  • Наконец, щелкните где-нибудь на главной форме (т.е. вне PictureBox’ов), чтобы убрать выделение.

Код Вертикальных Значений

Процедура, которая размещает линии и значения в новом PictureBox’е называется DrawVerticalValues. Вот она:

Private Sub DrawVerticalValues(ByVal PB As PictureBox)

' Рисуем вертикальные значения (снова применяем двойную буферизацию,

' хотя в этом нет необходимости)

' Шаг 1

Dim bmp As New Bitmap(PB.Width, PB.Height)

Dim gv As Graphics = Graphics.FromImage(bmp)

' Шаг 2

' Рисуем направляющие линии на полосках значений

For i As Integer = 40 To 400 Step 40

gv.DrawLine(Pens.WhiteSmoke, 0, i, PB.Width, i)

Next i

' Шаг 3

Dim NextMarker As Integer = 100

For i As Integer = 0 To 360 Step 40

gv.DrawString(CStr(NextMarker), New Font("Verdana", 8, FontStyle.Regular), Brushes.Black, 1, i)

NextMarker -= 10

Next

' Шаг 4

PB.Image = bmp

' Шаг 5

gv.Dispose()

End Sub

    Шаг 1 и Шаг 2 те же, что и обсуждавшиеся раньше, поэтому я не буду на них останавливаться.  Шаг 3 имеет задачу – заполнение PictureBox’а значениями.

  • Первое, он создает переменную, которая называется NextMarker и присваивает ей инициирующее значение 100. Это значение отражает значение Maximum ScrollBar.

  • Вторая строка в Шаге 3 устанавливает цикл. Из-за того, что значения Шага используются в цикле, в действительности это значит, что цикл будет выполнен десять раз.

  • В цикле DrawString применяется для того, чтобы писать следующую отметку значения на объекте Graphics PictureBox’а. Первое значение, которое будет написано, должно быть 100, следующее – 90, затем 80, и т.д. Причина того, что значения записываются в порядке убывания, заключается в том, что процедура работает, перемещаясь сверху к низу PictureBox’а и нам приходится уменьшать значения с каждым шагом.

  • Следующая строка кода просто уменьшает значение, которое мы собираемся отобразить следующим. В этом примере мы уменьшаем значение на 10 каждый раз.

  • Цикл завершается с ключевым словом Next.

    Шаги 4 и 5 снова просто повторяют логику, которую мы использовали в предыдущих процедурах рисования. Так что теперь у вас есть довольно простой способ вставить значения в вертикальный список показываемых значений. Затем нам нужно рассмотреть более реалистичную ситуацию, в которой диапазон значений, которые могут быть отображены, не должен быть точно предустановлен и рассчитан в PictureBox’е.