Representación de una gráfica circular mediante gráficos en c#.
[Tienes que estar registrado y conectado para ver esa imagen]En un proyecto windows forms agregamos el "using":
- Código:
-
using System.Drawing;
Utilizado para el "dibujo" o graficacion de figuras.
Necesitaremos agregar algunos controles al formulario:
-Un textbox para insertar valores.
-Un control panel sobre el cual dibujaremos la figura.
-Dos listBox, uno para visualizar los datos y el otro para visualizar los porcentajes de dichos datos.
-Tres botones: para agregar el dato, para borrar los datos y un tercero para graficar.
Dentro de la clase crearemos un vector de brochas para su posterior uso
- Código:
-
Brush[] brochas = new Brush[] { Brushes.Red, Brushes.Blue, Brushes.Green, Brushes.Aqua, Brushes.Black, Brushes.LavenderBlush, Brushes.LightPink, Brushes.Orange, Brushes.Purple, Brushes.Yellow };
También necesitaremos algunas variables para su posterior uso, ya que se utilizará en un botón, de esta manera solo declaramos el dato una vez.
- Código:
-
float totales = 0;
float anguloFinal = 0;
float anguloInicio = 0;
byte pincel = 0;
Con 10 brochas será suficiente para el ejemplo sin embargo se pueden utilizar más para no tener colores repetidos en la gráfica de barras.
En el evento click del boton "Agregar Dato":
- Código:
-
if (txtDato.Text != "")//Validación para que no halla valores nulos
{
lbDatos.Items.Add(txtDato.Text);
txtDato.Text = "";
txtDato.Focus();
}
En el evento click del boton "Borrar datos":
- Código:
-
lbDatos.Items.Clear();
lbPorcentaje.Items.Clear();
Como una validación extra, no permitiremos ingresar datos diferentes a números (backspace no funciona).
En el evento keyPress del TextBox validamos que no sea posible insertar caracteres que no sean te tipo numerico.
- Código:
-
if (!char.IsNumber(e.KeyChar))
{
e.Handled = true;
}
En el evento click del boton "graficar":
- Código:
-
Graphics grafico = pnGrafica.CreateGraphics();
//Creamos gráfico a partir de un panel (nuestro lienzo)
grafico.Clear(Color.White);
/* Se limpia el panel de color blanco */
lbPorcentaje.Items.Clear();
/* Se limpia las lista de "porcentaje"
for (int i = 0; i < lbDatos.Items.Count; i++)
totales += float.Parse(lbDatos.Items[i].ToString());
}//Se calcula la suma de los datos
System.Drawing.Font Fuente = new System.Drawing.Font("Courier New", 10, FontStyle.Bold);//Fuente
for (int j = 0; j < lbDatos.Items.Count; j++)
/* Por cada dato en la lista */
{
anguloFinal = (float.Parse( lbDatos.Items[j].ToString()) / totales) * 360;
/* Calculamos a cuanto equivale el primer dato en un circulo que es 360 grados */
lbPorcentaje.Items.Add((float.Parse(lbDatos.Items[j].ToString()) / totales) * 100);
grafico.FillPie(brochas[pincel],pnGrafica.ClientRectangle, anguloInicio,anguloFinal);
anguloInicio += anguloFinal;
if(pincel==9){ pincel=0;}
pincel++;
/* Angulo inicial es el angulo donde inicia el pastel y angulo final donde termina, claro que en caso de más datos el angulo inicial irá en aumento es decir mediante el porcentaje.*/
}
anguloInicio = 0;
anguloFinal = 0;
totales = 0;
pincel = 0;//se limpian las variables
Descargar:[url]
[Tienes que estar registrado y conectado para ver este vínculo] circular.zip
[/url]