Controles dibujados por el usuario
Actualización: noviembre 2007
Gracias a .NET Framework podrá programar fácilmente controles propios. Puede crear un control de usuario, que es un conjunto de controles estándar unidos mediante código, o bien diseñar un control propio desde el principio. Es posible, incluso, utilizar la herencia para crear un control que herede de un control existente y hacer adiciones a su funcionalidad inherente. Independientemente del método que se utilice, .NET Framework proporciona la funcionalidad necesaria para dibujar una interfaz gráfica personalizada para cualquier control que se cree.
La representación de un control se realiza mediante la ejecución del código del método OnPaint del control. El único argumento del método OnPaint es un objeto PaintEventArgs que proporciona toda la información y la funcionalidad necesarias para representar el control. El objeto PaintEventArgs proporciona, en forma de propiedades, dos objetos principales que se utilizarán para la representación del control:
Objeto ClipRectangle: rectángulo que representa la parte del control que se dibujará. Puede ser el control entero o parte del mismo, dependiendo de cómo se dibuje el control.
Objeto Graphics: encapsula varios objetos y métodos orientados a gráficos que proporcionan la funcionalidad necesaria para dibujar el control.
Para obtener más información acerca del objeto Graphics y cómo utilizarlo, vea Cómo: Crear objetos Graphics para dibujar.
El evento OnPaint se inicia cada vez que se dibuja o se actualiza el control en la pantalla, y el objeto ClipRectangle representa el rectángulo en el que tendrá lugar el proceso de dibujo. Si es necesario actualizar todo el control, ClipRectangle representará el tamaño del control entero. En cambio, si sólo es necesario actualizar parte del control, el objeto ClipRectangle representará únicamente la región que se debe dibujar de nuevo. Un ejemplo sería cuando un control se ve oscurecido parcialmente por otro control o formulario en la interfaz de usuario.
Cuando herede de la clase Control, deberá reemplazar el método OnPaint y proporcionar en él código de representación gráfica. Si desea proporcionar una interfaz gráfica personalizada para un control de usuario o un control heredado, reemplace el método OnPaint. A continuación se muestra un ejemplo:
Protected Overrides Sub OnPaint(ByVal pe As PaintEventArgs)
' Call the OnPaint method of the base class.
MyBase.OnPaint(pe)
' Declare and instantiate a drawing pen.
Dim myPen As System.Drawing.Pen = New System.Drawing.Pen(Color.Aqua)
' Draw an aqua rectangle in the rectangle represented by the control.
pe.Graphics.DrawRectangle(myPen, New Rectangle(Me.Location, Me.Size))
End Sub
protected override void OnPaint(PaintEventArgs pe)
{
// Call the OnPaint method of the base class.
base.OnPaint(pe);
// Declare and instantiate a new pen.
System.Drawing.Pen myPen = new System.Drawing.Pen(Color.Aqua);
// Draw an aqua rectangle in the rectangle represented by the control.
pe.Graphics.DrawRectangle(myPen, new Rectangle(this.Location,
this.Size));
}
protected void OnPaint(PaintEventArgs pe)
{
// Call the OnPaint method of the base class.
super.OnPaint(pe);
// Declare and instantiate a new pen.
System.Drawing.Pen myPen = new System.Drawing.Pen(Color.get_Aqua());
// Draw an aqua rectangle in the ClipRectangle.
pe.get_Graphics().DrawRectangle(myPen, pe.get_ClipRectangle());
}
El ejemplo anterior muestra cómo dibujar un control con una representación gráfica muy sencilla. Llama al método OnPaint de la clase base, crea un objeto Pen para dibujar y, finalmente, dibuja una elipse en el rectángulo determinada por los parámetros Location y Size del control. Aunque la mayor parte del código de representación será significativamente más complicada que éste, este ejemplo muestra el uso del objeto Graphics contenido en el objeto PaintEventArgs. Observe que, si está heredando de una clase que ya tiene una representación gráfica, como, por ejemplo, UserControl o Button y no desea incorporar esa representación en la propia, no deberá llamar al método OnPaint de la clase base.
El código del método OnPaint del control se ejecutará cuando el control se dibuje por primera vez y siempre que se actualice. Para asegurarse de que el control se dibuje de nuevo cada vez que cambie de tamaño, agregue la línea siguiente al constructor del control:
SetStyle(ControlStyles.ResizeRedraw, True)
SetStyle(ControlStyles.ResizeRedraw, true);
SetStyle(ControlStyles.ResizeRedraw, true);
Nota: |
---|
Utilice la propiedad Control.Region para implementar un control no rectangular. |
Vea también
Tareas
Cómo: Crear objetos Graphics para dibujar
Conceptos
Variedades de controles personalizados