Я покажу как можно создать диаграмму и гистограмму на C#, не пользуясь никакой библиотекой. Для этого создадим две формы Form1 и DiagramCreator На форме Form1 размещаем два текстовых поля, две кнопки и menuStrip и так же statusStrip и lable для информации как на рисунке ниже,: код формы будет выглядеть следующим образом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Collections; namespace DiagramAndGistogram { public partial class Form1 : Form { ArrayList diagrammaSectors = new ArrayList(); ArrayList diagrammaColors = new ArrayList(); ArrayList gistogrammaRectangles = new ArrayList(); ArrayList gistogrammaColors = new ArrayList(); public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Graphics g = this.CreateGraphics(); DiagramCreator dc = null; if (((Button)sender).Name == "button1") { if (textBox1.Text != "" && Convert.ToInt32(textBox1.Text) < 361) dc = new DiagramCreator(Convert.ToInt32(textBox1.Text),"Диаграмма"); } else { if (textBox2.Text != "") dc = new DiagramCreator(Convert.ToInt32(textBox2.Text),"Гистограмма"); } if (dc != null) { DialogResult r = dc.ShowDialog(); if (r == DialogResult.OK) { if (((Button)sender).Name == "button1") { int grad = 0; for (int i = 0; i < dc.procents.Count; i++) { g.FillPie(new SolidBrush(((Color)dc.colors[i])), new Rectangle(0, 150, 200, 200), grad, ((int)dc.procents[i])); diagrammaSectors.Add(((int)dc.procents[i])); diagrammaColors.Add(((Color)dc.colors[i])); grad += ((int)dc.procents[i]); } } else { for (int i = 0, addW = 0; i < dc.procents.Count; i++, addW += 20) { if (i == 1) addW -= 20; g.FillRectangle(new SolidBrush(((Color)dc.colors[i])), new Rectangle(292 + addW, 400 - ((int)dc.procents[i]), 20, ((int)dc.procents[i]))); gistogrammaColors.Add(((Color)dc.colors[i])); gistogrammaRectangles.Add(((int)dc.procents[i])); } } } } } private void построениеДиаграмыToolStripMenuItem_Click(object sender, EventArgs e) { MessageBox.Show("Диаграмма состоит из секторов, в суме градусы всех секторов должны быть 360, т.е. например 6 секторов по 60 градусов. Секторам задаются разные цвета для чёткого отображения.", "Информация о построение диаграмм"); } private void построениеГистограммыToolStripMenuItem_Click(object sender, EventArgs e) { MessageBox.Show("Гистограмма отображает табличные данные при помощи графика из прямоугольников. Чаще всего ширина этих прямоугольников одинакава, а высота определяется передаваемым параметром. За дополнительной информацией обратитесь на сайт http://ru.wikipedia.org/wiki/Гистограмма", "Информация о построение гистограммы"); } private void закрытьToolStripMenuItem_Click(object sender, EventArgs e) { Application.Exit(); } private void Form1_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; if (gistogrammaColors.Count != 0) { for (int i = 0, addW = 0; i < gistogrammaRectangles.Count; i++, addW += 20) { if (i == 1) addW -= 20; g.FillRectangle(new SolidBrush(((Color)gistogrammaColors[i])), new Rectangle(292 + addW, 400 - ((int)gistogrammaRectangles[i]), 20, ((int)gistogrammaRectangles[i]))); } } if (diagrammaColors.Count != 0) { int grad = 0; for (int i = 0; i < diagrammaSectors.Count; i++) { g.FillPie(new SolidBrush(((Color)diagrammaColors[i])), new Rectangle(0, 150, 200, 200), grad, ((int)diagrammaSectors[i])); grad += ((int)diagrammaSectors[i]); } } } } } |
Перейдем ко второй […]