
- •Давайте не будем изобретать колесо.
- •Прежде всего: Данные
- •Рисование и Упорство
- •Объект 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
- •Проверяем
- •Итоги первой демонстрации
- •Затененный график
- •Значения вертикальной оси
- •Код Вертикальных Значений
- •Подвижные направляющие линии
- •Отображаем направляющие линии
- •Направляющие линии и отображенные значения
- •Вертикальные значения
- •Возможные улучшения
- •Охваченные темы
Финальное домоводство
Наконец, избавляемся от доступных объектов, которые больше не используются:
TextBrsh.Dispose()
TextFont.Dispose()
PattBrush.Dispose()
Restart Option
Опция «Уппс!»
Мы почти все сделали. Пользователь может ввести столько данных, сколько их будет нужно и диаграмма может обновляться каждый раз, чтобы отобразить данные и выбранные шаблон/цвет. Но может наступить время, когда пользователь захочет начать все с начала. Вместо того, чтобы заставить его закрыть приложение и запустить его сначала, давайте дадим ему кнопку, чтобы удалить данные и очистить панель для других данных. Этот код для события Click кнопки Restart, является всем необходимым:
Private Sub btnRestart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRestart.Click
UserData.Clear()
pnlChart.Invalidate()
End Sub
Наш новый друг - метод Invalidate - снова делает за нас большую часть работы, снова удаляя все данные из массива.
Выводы
В этой статье оригинальный код создания круговой диаграммы приближается еще ближе к сценарию реального мира, того, где пользователь вводит данные во время выполнения. Был введен метод Invalidate и мы увидели, как он вызывает перерисовку элемента, для которого он был вызван. Для заполнения сегментов диаграммы выбранными образцами из перечисления HatchStyle был использован HatchBrush. В итоге, эта статья охватывает следующее:
Array
Brush
ColorDialog
Dispose
DrawPie
DrawRectangle
DrawString
FillPie
FillRectangle
Объект Font
HatchBrush
HatchStyle
Invalidate
Pen
StartAngle
Structure
SweepAngle
System.Enum.GetNames
System.Enum.Parse
Если вы прочитали все три статьи в этой серии, я надеюсь, что теперь вы чувствуете себя очень удобно с несколькими ключевыми основными методами, свойствами и техниками класса Graphics. И я также надеюсь, что вы будете с нетерпением ждать нового на территории Части 4, куда мы вернемся для создания самой лучшей гистограммы.
Удачные диаграммы: GDI+ Работа с графикой. Часть 4
Автор: Ged Mead Перевод: Виталий Готовцов [Оригинал Статьи] [Обсудить в форуме]
Настройка
Первым делом давайте сгенерируем данные для отображения в диаграмме. Мы будем создавать их во время разработки, чтобы позволить себе продолжать разрабатывать основные части класса Graphics. Если вы предпочитаете получать данные, вводимые пользователем в режиме выполнения, то вы можете адаптировать технику, раскрытую в Части 3.
Создаем данные
Ниже показано то, каким должен стать наш стандартный код, чтобы создать переменные и генерировать и поместить данные. Я не стану ковыряться в деталях, потому что они полностью раскрыты в предыдущих статьях:
Option Strict On
Imports System.Drawing.Drawing2D
Imports System.Collections
Structure GraphData
Dim Country As String
Dim Sales As Integer
Dim BarColor As Color
Sub New(ByVal country As String, ByVal sales As Short, _
ByVal barcol As Color)
Me.Country = country
Me.Sales = sales
Me.BarColor = barcol
End Sub
End Structure
' Создаем переменные
‘ # пиксели вертикальной оси установлены из PictureBox Left
Dim LeftMargin As Integer = 35
' # пиксели оставшиеся неиспользованными с правого края PictureBox
Dim RightMargin As Integer = 15
' Число пикселей выше верхней базовой линии
Dim BaseMargin As Integer = 35
' Верхнее поле
Dim TopMargin As Integer = 10
' Устанавливает размер пространства между панелями
Dim BarGap As Integer = 12
Dim SalesData As New ArrayList
Dim HighSale As Double ' Maximum sales figure
Dim VertScale As Double ' Scaling used for bar heights
' Младшие изменения для этой версии:
' Объявляет переменную для хранения объекта Graphics
Dim g As Graphics
' Переменная для Bitmap который должен быть отображен в PictureBox
Dim bmap As Bitmap
' Длинна вертикальной оси
Dim VertLineLength As Integer
Dim BarWidth As Integer ' width of bars
Dim BaseLineLength As Integer ' X Axis length
Private Sub GetData()
SalesData.Clear() ' Avoid data duplication
' Генерирует данные и помещает их в массив
SalesData.Add(New GraphData("Belgium", 934, Color.Blue))
SalesData.Add(New GraphData("Greece", 385, Color.DarkOrange))
SalesData.Add(New GraphData("Portugal", 1029, Color.Green))
SalesData.Add(New GraphData("Spain", 729, Color.IndianRed))
SalesData.Add(New GraphData("Turkey", 1472, Color.Tomato))
SalesData.Add(New GraphData("UK", 1142, Color.Aquamarine))
End Sub