- •Основы работа с графикой на с#
- •Глава 1. Использование графики в Windows приложениях
- •Параграф 2. Создание линейных графиков
- •2.1. В качестве постановки задачи
- •2.2. Постановка задачи
- •2.3. Исходные данные
- •2.4. Проект решения
- •2.5. Конструкторы класса
- •2.6. Создаем объект для рисования
- •2.7. Рисуем оси
- •2.8. Рисуем сетку
- •2.8. Рисуем линию графика
- •2.10. Надписи на графике
- •Параграф 3. Создание гистограмм
- •Параграф 5. Базовый класс для рисования графиков
2.4. Проект решения
Создадим простой проект WindowsApplication решения с любым именем (у меня graph1). Поместим на форму три кнопки, в свойствах "Текст" которых напишем соответственно: "Линейная диаграмма", "Гистонрамма" и "Круговая диаграмма". Ниже кнопок поместим контрол PictureBox. Подберем удобное для себя расположение кнопок и PictureBox (в реальных программах для размещения удобнее использовать контролы TableLayoutPanel, но сейчас нас интересует графика, а не размещение).
В окне Solutation Explorer кликаем правой кнопкой мышки на узле решения (у меня graph1) и в контекстном меню выбираем Add\New Item. В окне Templates выбираем Class, даем ему имя, например PaintCl.cs и нажимаем кнопку Add. Будет создан пустой класс.
using System;
using System.Collections.Generic;
using System.Text;
namespace graph1
{
class PaintCl
{
}
}
Нашей задачей будет постепенное наполнение этого класса при минимуме добавления кода в основной файл кода приложения - Form1.cs.
Для начала создадим обработчик события нажатия кнопки "Линейный график" (клик мышкой на кнопке), а также обработчики для событий Load и FormClozed (первый можно кликом мышки на форме, второй через окно Properties формы - закладка Events - клик в окошечке против события FormClosed). Слегка преобразуем код, как показано ниже:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace graph1
{
public partial class Form1 : Form
{
private int viNumButton = 0;
private int viNumInRg=20;//20 - начальное значение
private string[,] rgsValues=null;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
//Здесь при создании реальной программы необходимо
//будет предусмотреть восстановление сохраненных
//параметров для приложения и графиков
}
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
//Здесь при создании реальной программы необходимо
//будет предусмотреть сохранение параметров
//для приложения и графиков
}
#region Создание массива значений
private void vCreateRg()
{
Random rnd = new Random(DateTime.Now.Millisecond);
Random rnd1 = new Random(DateTime.Now.Millisecond+5);
rgsValues = new string[viNumInRg, 2];
for (int i = 0; i < viNumInRg; i++)
{
rgsValues[i, 0] = Convert.ToString(((float)(rnd.Next(0, 10) * 100) +
(float)rnd1.Next(0, 99)) / (float)100);
rgsValues[i, 1] = "I-" + Convert.ToString(i+1);
}
}
#endregion
#region создание линейного графика
private void button1_Click(object sender, EventArgs e)
{
viNumButton = 1;
vCreateLinGr();
}
private void vCreateLinGr()
{
//Создаем массив значений для вывода на графике
vCreateRg();
}
#endregion
}
}
Назначение переменной viNumButton, будет ясно далее. Массив значений у нас создан. Осталось нарисовать по значениям массива график, используя класс.
