En programando en C# 23 veremos todo lo relacionado a gráficos en formularios.
Este es el último post relacionado a este lenguaje, la idea es que les haya dejado una base de estudios para que luego investiguen por su propia cuenta cómo hacer determinadas cosas sin la necesidad de tener a alguien que les haga un manual completo para usar una lógica determinada a aprender a programar. Con estos post ustedes se pueden mandar solos a googlear el cómo hacer determinadas cosas que buscan hacer.
Para iniciar, en primer lugar crearemos un formulario nuevo. Al iniciar vamos a la ventanita de abajo a la derecha que dice propiedades y hacer click en el botón de eventos (el que tiene un rayito amarillo) y bajar con la barra de posición vertical hasta encontrar la fila que diga "Paint", allí hacer doble click al casillero de al lado y te mandará al código de la ventana.
Cuando hacés doble click, generás un evento como si hiciera doble click sobre un botón para poner la programación dentro.
Como verán, al generar este evento, también trae una librería nueva: "using System.Drawing;"
<?
private bool dibujar = false;//Declaro una variable booleana, la idea es que genere un "encendido" y "apagado"
public Form1()
{
InitializeComponent();
}
private void paint(object sender, PaintEventArgs e)
{
if (dibujar)
{
Pen lapiz = new Pen(Color.Black); //Con esto se genera el "lapiz" con el cual van a dibujar las formas geométricas que pueden hacer.
//Si quieren hacer figuras, tienen que crear líneas de distinto típo, curbas, rectas, etc que no las pienso explicar acá. La idea es dar una base de cómo funciona esto y luego investiguen por su lado.
Graphics area = e.Graphics; //Esto genera que el área de gráficos a dibujar sea la que devuelve la entidad PaintEventArgs que está al inicio del método.
Rectangle rectangulo = new Rectangle(this.ClientRectangle.X + 30, this.ClientRectangle.Y + 30, this.ClientRectangle.X + 30, this.ClientRectangle.Y + 30); // Acá se genera un rectángulo desde una entidad X e Y que devuelve la clase Form que están programando. Esto hace que genere las coordenadas desde la esquina superior derecha de la ventana como punto 0 de X e Y.
Brush colores = new SolidBrush(Color.Red); //Esto genera que todo lo que se "pinte" de este color, se cargue como una entidad dentro de la que sea lápiz o FillXX para pintar la superficie.
area.FillRectangle(colores, rectangulo);//Acá se carga un rectángulo de color rojo con bordes rojos.
area.DrawRectangle(lapiz, rectangulo);//Acá se dibuja sobre los bordes rojos un rectángulo transparente con bordes negros (el primer color negro se creó en el paréntesis cuando creamos la entidad lapiz.
FontStyle estilo = FontStyle.Bold | FontStyle.Underline; //Con esto se crea el estilo de letra a dibujar (es para hacer texto como mapa de bits, sirve mucho para hacer impresiones.
Font tipoLetra = new Font("Arial", 12, estilo);//Acá se determina el típo de letra, el tamaño y se carga el estilo.
area.DrawString(" Top-10 ", tipoLetra, colores, this.ClientRectangle.X + 5, this.ClientRectangle.Y + 5 );//Acá se dibuja el texto que querés poner en el gráfico. Lo que está entre comillas puede ser una variable string cargada previamente con un texto completo de alguna página en word o algo así.
area.PageUnit = GraphicsUnit.Pixel;// Esto genera que todo lo que está dibujado se mida como tamaños en pixeles o en milimetros, etc.
lapiz.Dispose(); //Para que esto sea efectivo y no ocupemos y sobrecarguemos la memoria cada vez que apretamos el botón para dibujar, tenemos que borrar los objetos, sino la memoria se irá sobrecargando y luego comenzará a paginar la memoria hasta que llegue un punto que su computadora quede tildada.
colores.Dispose();
}
else
{
e.Dispose(); //Lo mismo con el objeto que tenemos como área de dibujo.
}
}
>
Con el siguiente método se genera el gráfico en el formulario:
<?
private void button1_Click(object sender, EventArgs e)
{
if (dibujar) //Esto es una especie de switch para la luz... si está encendida la apagás al apretar el botón, sino la prendés.
{
dibujar = false;
}
else
{
dibujar = true;
}
this.Invalidate();//Con esto generás que se "recargue" la ventana y aparece el gráfico.
}
>
Para generar rectas, circulos, curbas y otras figuras, hay clases hechas para que las puedan formar. Eso se lo dejo para que investiguen ustedes.
Por otro lado recuerden esto, para hacer una impresión donde tengan que formar renglones, cada renglón es un rectangulo invisible dentro de un rectángulo mas grande que es donde está el alto de la página y el ancho.
Para dividir un string en renglones hay que hacer un vector de string y al string que van a hacer los renglones, generar el salto de página dentro del método del string split.
<?
string[] ElRenglon;
ElRenglon = texto.Split(';');//"texto" es un string como cualquier otro, "n" es el salto de línea y "r" vuelve el carretel al inicio de cada oración (sirve para archivos de texto).
//El método Split lo que hace es que el texto al llegar a ese caracter guarde todo el dato de string en el primer vector libre que encuentre.
//Luego sigue hasta encontrar devuelta el caracter ';' y guarda el siguiente dato, o sea desde el anterior caracter, hasta el siguiente en el espacio de vector siguiente, libre. Y así hasta completar el vector con todo el texto. Luego cada renglón será una de las posiciones del vector.
>
Este es el último post de los Programando en C#. Los siguientes posts serán de java. Cualquier consulta de lo básico, manden MP.
Después de este post ya se pueden considerar con conocimientos suficientes para que puedan investigar como hacer cosas más interesantes y comprender su lógica de funcionamiento cuando la estudien.