Una introducción a la programación de un control VB.NET con herencia

La construcción de componentes personalizados completos puede ser un proyecto muy avanzado. Pero puede crear una clase VB.NET que tenga muchas de las ventajas de un componente de caja de herramientas con mucho menos esfuerzo. Así es cómo!

Para tener una idea de lo que necesita hacer para crear un componente personalizado completo, intente este experimento:

-> Abra un nuevo proyecto de aplicación de Windows en VB.NET.
-> Agregue un CheckBox de la Caja de herramientas al formulario.
-> Haga clic en el botón "Mostrar todos los archivos" en la parte superior del Explorador de soluciones.

Esto mostrará los archivos que Visual Studio crea para su proyecto (para que no tenga que hacerlo). Como nota al pie histórica, el compilador VB6 hizo muchas de las mismas cosas, pero nunca se pudo acceder al código porque estaba enterrado en el "código p" compilado. También podría desarrollar controles personalizados en VB6, pero fue mucho más difícil y requirió una utilidad especial que Microsoft suministró solo para ese propósito.

En la forma Designer.vb encontrará que el código siguiente se ha agregado automáticamente en las ubicaciones correctas para admitir el componente CheckBox. (Si tiene una versión diferente de Visual Studio, su código puede ser ligeramente diferente). Este es el código que Visual Studio escribe para usted.

'Requerido por los componentes privados del Diseñador de formularios de Windows _ Como System.ComponentModel.IContainer'NOTA: Se requiere el siguiente procedimiento' por parte del Diseñador de formularios de Windows 'Se puede modificar con el Diseñador de formularios de Windows.' No lo modifique con el editor de código . _Private Sub InitializeComponent () Me.CheckBox1 = New System.Windows.Forms.CheckBox () Me.SuspendLayout () "CheckBox1 'Me.CheckBox1.AutoSize = True Me.CheckBox1.Location = New System.Drawing.Point (29, 28 ) Me.CheckBox1.Name = "CheckBox1" ... y así sucesivamente ... 

Este es el código que debe agregar a su programa para crear un control personalizado. Tenga en cuenta que todos los métodos y propiedades del control CheckBox real están en una clase proporcionada por .NET Framework: System.Windows.Forms.CheckBox. Esto no es parte de su proyecto porque está instalado en Windows para todos los programas .NET. Pero hay un lote de eso.

Otro punto a tener en cuenta es que si está utilizando WPF (Windows Presentation Foundation), la clase .NET CheckBox proviene de una biblioteca completamente diferente llamada System.Windows.Controls. Este artículo solo funciona para una aplicación de formularios Windows Forms, pero los principios de herencia aquí funcionan para cualquier proyecto VB.NET.

Supongamos que su proyecto necesita un control que se parezca mucho a uno de los controles estándar. Por ejemplo, una casilla de verificación que cambió de color o mostró una pequeña "cara feliz" en lugar de mostrar el pequeño gráfico de "verificación". Vamos a construir una clase que haga esto y le mostraremos cómo agregarlo a su proyecto. Si bien esto podría ser útil por sí solo, el objetivo real es demostrar los VB.NET herencia.

Comencemos a codificar

Para comenzar, cambie el nombre del CheckBox que acaba de agregar a oldCheckBox. (Es posible que desee dejar de mostrar "Mostrar todos los archivos" nuevamente para simplificar el Explorador de soluciones). Ahora agregue una nueva clase a su proyecto. Hay varias formas de hacer esto, incluyendo hacer clic derecho en el proyecto en el Explorador de soluciones y seleccionar "Agregar" y luego "Clase" o seleccionar "Agregar clase" debajo del elemento del menú Proyecto. Cambie el nombre del archivo de la nueva clase a nuevoCheckBox para mantener las cosas en orden. Finalmente, abra la ventana de código para la clase y agregue este código:

Clase pública newCheckBox hereda CheckBox Private CenterSquareColor As Color = Color.Red Protected Overrides Sub OnPaint (ByVal pEvent _ As PaintEventArgs) Dim CenterSquare _ As New Rectangle (3, 4, 10, 12) MyBase.OnPaint (pEvent) If Me.Checked Then pEvent.Graphics.FillRectangle (New SolidBrush (CenterSquareColor), CenterSquare) End If End SubEnd Class

(En este artículo y en otros en el sitio, se utilizan muchas continuaciones de línea para mantener las líneas cortas para que quepan en el espacio disponible en la página web).

Lo primero que debe notar sobre su nuevo código de clase es el Hereda palabra clave. Eso significa que todas las propiedades y métodos de un VB.NET Framework CheckBox son automáticamente parte de este. Para apreciar cuánto trabajo ahorra, debe haber intentado programar algo como un componente CheckBox desde cero.

Hay dos cosas clave para notar en el código anterior:

El primero es el código que usa Anular para reemplazar el comportamiento estándar de .NET que tendría lugar para un OnPaint evento. Un evento OnPaint se activa cada vez que Windows nota que parte de su pantalla tiene que ser reconstruida. Un ejemplo sería cuando otra ventana destapa parte de su pantalla. Windows actualiza la pantalla automáticamente, pero luego llama al evento OnPaint en su código. (El evento OnPaint también se llama cuando el formulario se crea inicialmente). Entonces, si anulamos OnPaint, podemos cambiar la apariencia de las cosas en la pantalla.

La segunda es la forma en que Visual Basic crea CheckBox. Cada vez que el padre está "marcado" (es decir, Me.Comprobado es Cierto), entonces el nuevo código que proporcionamos en nuestra clase NewCheckBox volverá a colorear el centro de CheckBox en lugar de dibujar una marca de verificación.