
- •Давайте не будем изобретать колесо.
- •Прежде всего: Данные
- •Рисование и Упорство
- •Объект 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
- •Проверяем
- •Итоги первой демонстрации
- •Затененный график
- •Значения вертикальной оси
- •Код Вертикальных Значений
- •Подвижные направляющие линии
- •Отображаем направляющие линии
- •Направляющие линии и отображенные значения
- •Вертикальные значения
- •Возможные улучшения
- •Охваченные темы
5C. Названия стран
Названия стран отображены внизу каждой панели. В одной из следующих статей мы узнаем более интересные и иллюстративные способы, но пока нас устроит простой текст, использующий DrawString. Так как процесс подобен тому, который мы уже использовали в этом проекте, комментированный код, я надеюсь, будет иметь смысл для вас на этом уровне:
' Устанавливаем начальную точку первой строки
Dim TextStartX As Integer = LeftMargin + BarGap + 4
' Создаем кисть для рисования текста
Dim TextBrsh As Brush = New SolidBrush(Color.Black)
' Создаем экземпляр объекта Font для отображения текста
Dim TextFont As New Font("Arial", 11, FontStyle.Bold)
For Each gd As GraphData In SalesData
' Рисуем название страны
g.DrawString(gd.Country, TextFont, TextBrsh, TextStartX, _
CInt(PBBarChart.Height - (BaseMargin - 4)))
' Перемещаем начальную точку вправо
TextStartX += CInt(BarWidth + BarGap)
Next
Шаг 6: Все показано!
Вы, возможно, уже вставили следующую строку кода, если вы выбрали «пробовать все на ходу», чтобы увидеть, что диаграмма растет. Если вы этого не сделали, то настало время для этого. Это не кажется важным, но на самом деле, это ключевая строка в процессе. Она берет объект Bitmap, на котором вы рисовали свою диаграмму и, наконец, показывает ее пользователю. Это происходит присваиванием Bitmap свойству Image элемента PictureBox.
' Назначаем изображение нарисованной диаграммы изображению picturebox
PBBarChart.Image = bmap
Как мы узнали в Части 1, вам следует избавиться от всех доступных объектов, когда они будут не нужны. Этот код решает такую задачу:
' Избавляемся от рисующих объектов
g.Dispose()
LinePen.Dispose()
BarBrush.Dispose()
ValueFont.Dispose()
TextFont.Dispose()
End Sub
Снова, если вы не проверяли код во время чтения, то вам нужно добавить код для события click кнопки:
Private Sub btnDraw_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnDraw.Click
' Генерируем данные
GetData()
' Затем рисуем диаграмму
DrawChart()
End Sub
И вот у вас есть ваша первая простая, но работающая, гистограмма.
Итоги
Эта статья построена на основных возможностях и техниках, охваченных в Части 1, а также добавила некоторые новые. Мы видели, что с очень маленьким количеством кода гистограмма может быть создана на пустом месте. Вычисляя масштаб, мы гарантировали, что панели точно представляют цифры продаж, используя всю высоту доступной для рисования области. Благодаря использованию переменных для представления значений, таких, как поля вокруг диаграммы, код стал легче для чтения и редактирования. Благодаря использованию двойной буферизации, диаграмма была нарисована на объекте Bitmap вне поля зрения пользователя, а затем изображение было применено к PictureBox после ее завершения. Эта техника уменьшила мерцание, а также гарантировала, что после того, как диаграмма была показана, она будет сохранена (это значит, что она будет перерисована, когда бы не была скрыта или изменена каким-либо образом). Хотя завершенный код совсем короток, были использованы несколько важных методов класса Graphics и других навыков рисования: -
Объект Bitmap
Кисти
Создание объекта Graphics из Image
Избавление от объекта Graphics
Рисование на элементе PictureBox
Рисование линии
Рисование прямоугольника
Рисование строки
Закрашивание прямоугольника
Объект Font
Метод Offset
Кисти
Точки
Объект Rectangle
Масштабирование
В Части 3 мы вернемся к круговой диаграмме и будем применять пользовательский ввод во время исполнения для создания диаграммы, основываясь на пользовательских данных и покажем результат. Сплошные цвета диаграммы также будут заменены HatchStyle выбранным пользователем.