
- •Давайте не будем изобретать колесо.
- •Прежде всего: Данные
- •Рисование и Упорство
- •Объект Graphics
- •Начинаем
- •Расположение и Размер
- •Вычислите Общее значение
- •Вычислите Доли и Нарисуйте Диаграмму
- •Рисуем диаграмму
- •Улучшите диаграмму
- •Заголовок
- •Пули (Bullets) и Информация о Компании
- •Расположите После Использования
- •Все сделано!
- •Нарисуем это!
- •Давайте начнем
- •Шаг 1: генерация данных
- •Шаг 2: Получаем элемент управления
- •Повторно используемые значения
- •Шаг 3: Установка полей, промежутки и размеры
- •Шаг 4а: Объекты Graphics и Bitmap
- •Шаг 4b: Вертикальная ось
- •Шаг 4c: Отметки и текст
- •Шаг 4d: Время для проверки
- •Шаг 5: Горизонтальная ось и панели
- •5B. Панели
- •5C. Названия стран
- •Шаг 6: Все показано!
- •Удачные диаграммы: Вторая помощь в круговых диаграммах. Часть 3
- •Разметка формы
- •Давайте начнем писать код
- •Временные переменные
- •Элементы пользовательского ввода
- •Получение данных
- •Создание диаграммы
- •Рисуем Panel
- •Финальное домоводство
- •Опция «Уппс!»
- •Настройка
- •Создаем данные
- •Элементы управления
- •Вертикальная ось
- •Точечные отметки шкалы
- •Проверяем 1, 2, 3
- •Базовая линия (ось X)
- •3D Панели
- •Последние штрихи
- •Удачные диаграммы. Часть 5 - Линейные графики
- •Данные для образца
- •Переменные
- •Внешние границы диаграммы
- •Объект Graphics
- •Вертикальная ось
- •Отметки
- •Горизонтальная ось (a.K.A. Базовая линия)
- •Рисование Линии (Линий)
- •Расчет вертикальной шкалы
- •Создаем и рисуем первый сегмент линии
- •Превращающаяся и исчезающая проблема линий
- •Первый сегмент линии
- •Остающиеся сегменты линии
- •Преобразования
- •Рисуем преобразованную линию
- •Проверяем
- •Отображаем месяцы
- •Отображаем результат
- •Соединения линий
- •Линии сетки
- •Горизонтальные линии сетки
- •Вертикальные линии сетки
- •Последнее отображение
- •Удачные диаграммы. Часть 6 - Динамическая линейная диаграмма
- •Элементы управления формы
- •Инициирующий код
- •Рисование направляющих линий диаграммы
- •Как это работает
- •Отображаем значения
- •Использование Vertical ScrollBar
- •Проверяем
- •Итоги первой демонстрации
- •Затененный график
- •Значения вертикальной оси
- •Код Вертикальных Значений
- •Подвижные направляющие линии
- •Отображаем направляющие линии
- •Направляющие линии и отображенные значения
- •Вертикальные значения
- •Возможные улучшения
- •Охваченные темы
Вертикальные значения
Наконец, нам нужно применить тот же метод мышления к процедуре, которая заполняет picValues PictureBox’а направляющими линиями и числами. Хотя код, расположенный ниже, со всеми его переменными, заместившими предыдущие, жестко вписанные, значения, кажется более сложным, логика кода, фактически, такая же. Надеюсь, комментарии и названия переменных помогут вам понять, как эта версия отражает версию с кодированными переменными.
Private Function DisplayVerticalValues(ByVal PB As PictureBox, ByVal HowManyChunks As Single, _
ByVal MinValue As Single, ByVal MaxValue As Single) As Bitmap
' Шаг 1
Dim bmp As New Bitmap(PB.Width, PB.Height)
Dim gv As Graphics = Graphics.FromImage(bmp)
' Шаг 2
' Рисуем направляющие линии с полосками значений
' Получаем общую доступную высоту и делим ее на части
' Это значение представляет количество пикселей
Dim TotalPixels As Integer = PB.Height
Dim SingleChunk As Single = TotalPixels / HowManyChunks
For i As Single = SingleChunk To TotalPixels Step SingleChunk
gv.DrawLine(Pens.WhiteSmoke, 0, i, PB.Width, i)
Next i
' Шаг 3
' Рисуем Numbers как текст, точно размещая по вертикали
' Начинаем с наибольшего допустимого значения
Dim NextMarker As Integer = MaxValue
Dim ValueRange As Single = MaxValue - MinValue
' В цикле рисуем числа пропорционально уменьшая их по одному
For i As Single = 0 To TotalPixels Step SingleChunk
gv.DrawString(CStr(NextMarker), New Font("Verdana", 8, FontStyle.Regular), Brushes.Black, 1, i)
NextMarker -= (ValueRange / HowManyChunks)
Next
' Шаг 4
Return bmp
' Шаг 5
gv.Dispose()
End Function
Итак, у вас есть различные изменения и улучшения, необходимые, чтобы сделать исходную идею более гибкой. Вы можете теперь развить общий подход для любого специфического источника данных так, как вам необходимо для достижения ваших целей.
Возможные улучшения
Следующим логическим шагом было бы создание классов Chart и Library, чтобы сделать ваш код более переносимым между приложениями. Следуя этому, если вы собираетесь использовать многие из этих видов диаграмм долгое время в будущем, было бы неплохо создать свой элемент управления и добавить его в Visual Studio Toolbox. В настоящее время нас устраивает этот набор процедур создающих линейную диаграмму. Класс, библиотека и пользовательский элемент будут ждать лучших времен. Тем не менее, мы раскрыли очень многое в этой статье и разработали удобный способ создания динамических линейных диаграмм. Мы прошли долгий путь от первого примера круговой диаграммы в Части 1!
Охваченные темы
В этой статье мы раскрыли следующие темы:
Кисти (Brushes)
Метод Dispose
Двойная буферизация
Метод DrawLine
Метод DrawImage
DrawString
Метод FillPolygone
Объект Font
Элемент меню Format
Метод Graphics.FromImage
Перья (Pens)
Масштабирование
Метод TranslateTransform
Пример
Весь описанный код, включенный в приложенный образец решения, был создан с помощью VB.NET 2003. Скачать пример можно по ссылке.