- •Давайте не будем изобретать колесо.
- •Прежде всего: Данные
- •Рисование и Упорство
- •Объект 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
- •Проверяем
- •Итоги первой демонстрации
- •Затененный график
- •Значения вертикальной оси
- •Код Вертикальных Значений
- •Подвижные направляющие линии
- •Отображаем направляющие линии
- •Направляющие линии и отображенные значения
- •Вертикальные значения
- •Возможные улучшения
- •Охваченные темы
Удачные диаграммы: Вторая помощь в круговых диаграммах. Часть 3
Автор: Ged Mead Перевод: Виталий Готовцов [Оригинал Статьи] [Обсудить в форуме] Скачать исходный код к статье
Разметка формы
Поскольку эти статьи имеют целью показать вам, как использовать классы Graphics, я не буду углубляться в не-графический материал там, где это возможно. Так, чтобы сократить процесс создания формы Windows и его элементов управления я подключил проект, содержащий скелетную форму (т.е. содержащую элементы управления, но без графического кода. Вы найдете ее в папке, названной «Skeleton» («Скелет»), в приложенном zip-файле. Форма и ее элементы управления выглядят так:
Конечно, если вы предпочитаете создать форму сами – действуйте. Я буду сообщать вам используемые названия и другие детали для элементов управления, по мере приближения к ним.
Давайте начнем писать код
Вставьте эти операторы в начало кода формы:
Option Strict On
Imports System.Drawing.Drawing2D
Imports System.Collections
Как в предыдущих статьях, для разделения данных и массива, хранящего их, используем Структуру (Structure). Это делается быстро и легко, и должно уже быть известно вам к настоящему времени.
Structure GraphData
Dim Name As String
Dim Amount As Decimal
Dim Clr As Color
Dim Pattern As HatchStyle
End Structure
' Массив для хранения данных, которые вводятся пользователем
Dim UserData As New ArrayList
Эта структура подобна той, которую мы создавали в Части 1 – первые три поля (Name, Amount и Clr) представляют те же элементы. Дополнительный элемент (Pattern) будет содержать выбранные пользователем HatchStyles (Стили штриховок). Framework предлагает диапазон из более чем 50 стилей – в основном они предлагают выбор цветных штриховок. Картинка ниже показывает несколько типовых образцов:
Временные переменные
Из того, что мы делали в частях 1 и 2 вы должны знать, что мы будем создавать экземпляры User Defined Value Type (Определенные Пользователем Типы Значений) (GraphData) и будем присваивать значения каждому из четырех полей. В этой версии мы позволим пользователю делать это во время выполнения. Так же нам нужна пара переменных, которые временно будут содержать значение элементов Цвет (Color) и HatchStyle, пока пользователь будет выбирать остальные значения. Добавьте эти строки в область деклараций, где вы создавали массив:
Dim clrPicked As Drawing.Color = Color.Black
Dim hatchPicked As HatchStyle = HatchStyle.DarkHorizontal
Вы увидите, что в код включены значения по умолчанию (Black и DarkHorizontal (Черный и Темный горизонтальный)). Это сделано для того, чтобы избежать ошибки, если пользователь забудет выбрать какой-либо из этих элементов.
Элементы пользовательского ввода
TextBox Если игнорировать ярлыки, первым элементом управления на форме будет TextBox. Если вы создаете свой проект, его нужно назвать txtName. NumericUpDown Следующий элемент – NumericUpDown, названный nudValue. Вы можете установить его Min, Max и значение, которое захотите сами. Кнопка «Select Color» Далее на форме находится кнопка. Я назвал ее btnColor, но имя не имеет значения.
ColorDialog
Событие нажатия на кнопку открывает ColorDialog, из которого пользователь может выбрать цвет для штриховки. Добавьте ColorDialog в вашу форму, если это необходимо (он уже включен в предложенный скелетный проект). Следующий код содержит выбранный пользователем цвет:
Private Sub btnColor_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnColor.Click
' Получает выбранный пользователем цвет
Dim ColorPicker As New ColorDialog
Dim Choice As DialogResult = ColorPicker.ShowDialog
If Choice <> DialogResult.Cancel Then
clrPicked = ColorPicker.Color
End If
End Sub
ComboBox «Select Pattern»
Четвертый элемент пользовательского ввода – ComboBox, который следует назвать cboPattern.
Этот ComboBox позволяет пользователю выбрать любой HatchStyle для использования в круговой диаграмме. Поэтому мы должны заполнить комбо этим списком. К счастью, VB.NET дает нам крайне легкий способ сделать это. Поместите этот код в событие Form_Load, чтобы получить названия стилей штриховки и наполнить ими ComboBox:
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
' Заполняем combobox всеми доступными HatchStyles
Dim patts() As String
patts = System.Enum.GetNames(GetType(HatchStyle))
cboPattern.Items.AddRange(patts)
End Sub
Способность получить эти Enumeration (Перечисления) и манипулировать ими, как диапазоном, может быть очень полезной. Альтернативой является ручное добавление каждого значение в код каждой строки с помощью «Items.Add», что не очень привлекательно! Теперь пользователь может выбрать HatchStyle из ComboBox и когда это происходит, мы записываем выбор пользователя в переменную, которую мы создали для этого раньше, и назвали Hatchpicked. Код в событии комбобокса SelectedIndexChanged выглядит так:
Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles cboPattern.SelectedIndexChanged
hatchPicked = CType(System.Enum.Parse(GetType(HatchStyle), _
cboPattern.Text), HatchStyle)
End Sub
Фактически этот код проверяет выбор пользователя, который является строковым типом в комбобоксе, находит его соответствие в перечислении HatchStyle и сохраняет его.