El método OnPaint() y gráficos en un formulario.

31. March 2008 04:07 by Oscar.SS in Desarrollo Windows  //  Tags:   //   Comments (3)

Hace unas semanas hablábamos sobre la persistencia de gráficos en los controles de un formulario. Ahora vamos a comentar como dibujar sobre un formulario.

En este caso, para que los gráficos persistan, no es necesario crear un mapa de bits, aunque también es posible hacerlo. Bastará con que implementemos todas las instrucciones de dibujo en el evento Paint() de nuestro formulario (o de nuestros controles). Así de fácil.

Dado que dibujar utilizando el evento Paint() no necesita muchas explicaciones, vamos a ver otra técnica basada en dibujar con el método virtual OnPaint().

¿Dónde está definido el método OnPaint()?. El método virtual OnPaint() pertenece a la clase Control del espacio de nombres System.Windows.Forms.

¿Cómo está definido el método OnPaint()?. Como ya he comentado antes es un método virtual. Esto quiere decir que puede ser redefinido (override) en las clases derivadas de la clase base. Estos conceptos son de POO y por lo tanto, profundizaremos en ellos en otro artículo.

¿Qué hace el método OnPaint()?. Simplemente provoca el evento Paint() del formulario.

¿Por qué utilizar el método OnPaint()?. Como se puede ver en la definición MSDN del método OnPaint(), este contiene un parámetro “e” del tipo PaintEventArgs que proporciona datos de eventos. Más concretamente, proporciona la propiedad Graphics y la propiedad ClipRectangle sobre la que se va a dibujar. Es decir, que con el parámetro “e” tenemos toda la información necesaria para poder dibujar directamente.

Solo queda aclarar que al redefinir este método, Visual Studio genera automáticamente una llamada al método OnPaint() de la clase base. Es decir;

base.OnPaint(e);

Esto es necesario para evitar problemas por ejemplo con los estilos virtuales de los sistemas operativos.

¡Pasemos a la acción!. Abramos el editor de Visual Studio y dibujemos sobre el formulario un triangulo que será rellenado por un color especificado.

Aquí os dejo el código de esta sencilla aplicación que no merece más que algunos comentarios. Como siempre al final veremos una imagen con el resultado de ejecutar nuestra aplicación.

 

namespace Gráficos_OnPaint
{
    
public partial class Form1 : Form
    {
        
public Form1()
        {
            InitializeComponent()
;
        
}
        
protected override void OnPaint(PaintEventArgs e)
        {
            
//Llamada al método de la clase base.
            
base.OnPaint(e);

            
//Establecemos los vértices de un triángulo.
            
Point Vertice1 = new Point(50200);
            
Point Vertice2 = new Point(250200);
            
Point Vertice3 = new Point(15050);

            
//Cargamos en memoria (instanciar) un objeto GraphicsPath. 
            
GraphicsPath ruta = new GraphicsPath();

            
//Establecemos una secuencia de lineas sobre el objeto "ruta".
            
ruta.AddLine(Vertice1, Vertice2);
            
ruta.AddLine(Vertice2, Vertice3);
            
ruta.AddLine(Vertice3, Vertice1);

            
//Dibujamos la secuencia de lineas.
            
e.Graphics.DrawPath(new Pen(Color.Black, 4), ruta);

            
//Rellenamos con un color el interior de la secuencia de lineas.
            
e.Graphics.FillPath(new SolidBrush(Color.Orange), ruta);
        
}
    }
}


Comments (3) -

Panchillo
Panchillo
4/6/2013 10:31:50 PM #

Muy buena, gracias me sirvió y entendí que no es necesario utilizar el método OnPaint(), solo basta agregar la librería Drawing.Drawing2D y crear el objeto Graphics para usar DrawPath etc, eso para algunos como yo que no suelo usar OnPaint.
Gracias de nuevo

Oscar.SS
Oscar.SS
4/8/2013 10:45:43 AM #

Hola Panchillo, gracias a tí por comentar y perdón por tardar en aprovar el comentario. Un saludo

Recent Comments

Comment RSS

Month List