Este documento describe la herencia visual de formularios en .NET. Explica que la herencia visual permite derivar un formulario de otro formulario base, heredando sus propiedades y comportamientos. Detalla cómo crear un formulario heredado en el diseñador y cómo los eventos y métodos se ejecutan tanto en el formulario base como en el derivado. Finalmente, presenta un ejemplo práctico de un formulario base que devuelve datos y un formulario heredado que los muestra en una grilla, demostrando la reutilización de código a través de la her
Configuracion de zend framework y ejemplo en mysql
A toda máquina con herencia visual
1. A Toda Máquina Con Herencia
Visual .NET
Fecha: 03/Sep/2005 (31/08/05)
Autor: Lic. Giovanni Cuadra Reyes
AmericanCollege IT Manager
Email: giovanni_cuadra@hotmail.com
gcuadra@americancollege.edu.ni
!!!Tecnología de la Programación!!!
Managua, Nicaragua.
Introducción
Cuando decidí escribir este artículo acerca de Herencia Visual .NET, estaba trabajando
una aplicación en la cual utilice gran parte herencia de formularios, y fue con el
propósito en dar a conocer una forma más practica en simplificar horas de trabajo en el
diseño de formularios y porque no decirlo en la escritura de código.
Si no me falla la memoria en la versión empresarial de Microsoft Visual Basic 6.0,
Microsoft presento en los complementos de esta herramienta una forma de reutilizar los
formularios a partir de diseños personalizados por el desarrollador o por plantillas que la
misma herramienta traía consigo. De tal forma que podíamos reutilizar formularios y
código sin afectar el original y los mismos podíamos convertirlos en plantillas de
diseño. Aunque este tipo de implementación esta muy lejos de ser el concepto de
Herencia Visual .NET, proporciono en su época los mecanismos para que esta misma
fuese implementada en versiones futuras de Visual Studio y totalmente mejorada hasta
llegar a lo que hoy en día conocemos como Herencia Visual de Formularios Windows.
Este artículo esta orientado a lo que es Herencia Visual .NET, como trabaja, como se
comportan los formularios heredados con respecto a los formularios bases, como se
comportan los métodos y/o eventos en su ejecución y en como estos elementos pueden
ejecutar código desde una clase base a una clase derivada.
Qué es la Herencia Visual de Formularios
2. La Herencia Visual de Formularios podría definirse como el duplicado de un formulario
a partir de otro, denominado original o formulario base o clase base, de otra forma
dicha, podría también ser definido como una clase derivada de formulario por una clase
base de formulario. El formulario base o clase base, seria de donde se deriva el
formulario heredado o clase heredada a la cual se le denomina clase derivada. Por lo
tanto el formulario base hereda sus características de la clase base
System.Windows.Forms.Form, mientras que el formulario derivado, sus características
son heredadas directamente del formulario base.
A continuación muestro un ejemplo de lo anteriormente expuesto:
La figura 1.0 Muestra la clase base.
La figura 2.0 Muestra la clase derivada.
Recordemos que los formularios en VB.NET no son mas que una clase que pueden
heredar un nuevo formulario a partir de técnicas estándares de herencia visual. Por lo
tanto unas de las funcionalidades de la herencia visual es por ejemplo que a partir de un
3. formulario base se puede representar un tamaño estandar de objetos, como lo son
botones, cajas de texto y otros controles contenido dentro del mismo. Por el cual
cualquier formulario derivado de esa base, tendrá las misma formas de controles y
tamaños y posición.
Herencia Visual en Microsoft Visual Basic .NET
Los diseñadores de formularios Windows soportan herencia de formularios. En el
diseñador, aparece un el menú de proyectos la opción herencia de formularios. Se
ejecuta esta opción y a continuación se visualiza una pantalla el cual solicita el nombre
del nuevo formulario heredado. A continuación muestro el menú para ejecutar la opción
:
La figura 3.0 Muestra la opción que permite crear un formulario heredado.
4. La figura 4.0 Muestra las plantilla para herencia de formularios.
Todos los eventos manejados que se especifican en el formulario base, automáticamente
trabajan de la misma forma que en los formularios heredados. Por ejemplo, si un botón
en un formulario base especifica un evento manejado, dicha de otra forma esta
programado. En el formulario heredado los botones llaman a los eventos manejados de
la clase base. Por lo tanto, si se agrega un evento manejado en la clase heredada para un
componente en la clase base, ambos eventos son ejecutados, con la diferencia que el
evento de la clase base se dispara primero, seguido del evento manejado de la clase
heredada.
Otro comportamiento interesante es que los eventos manejados del formulario base
pueden sobrescribirse, sin embargo para poder cumplir esto, será necesario utilizar la
palabra reservada Overridable en la definición de los eventos manejados de la clase
base y entonces se crea un nuevo método en la clase heredada con la misma lista de
parámetros.
No se debe utilizar la palabra reservada Handles en los métodos sobrescritos en los
formularios heredados. Por lo tanto si se quiere llamar a eventos manejados de un
formulario base dentro de un método Overridden se requiere utilizar el objeto MyBase
para acceder al formulario base.
Hay que recordar también que la herencia de formularios no es una operación en línea.
Por ejemplo, si se actualiza el formulario base con el objetivo en reemplazar objetos, se
tendrá que ejecutar el depurador con el propósito de actualizar todos los formularios
5. heredados que provienen del formulario base modificado, dicho de otra forma,
recompilar la aplicación nuevamente. Tomando en cuenta que el formulario heredado
tiene que estar cerrado.
Por último, las propiedades de los formularios heredados pueden ser programados y
personalizados como las de cualquier otro formulario, todo es que la propiedad
Modifiers de los controles del formulario base sea cambiada a Protected la cual seria el
alcance que tendrían las propiedades del formulario base. Modifiers
predeterminadamente se encuentra como Friend el cual especifica que su alcance es
solo para la clase base.
Implementando una solución con Visual Basic .NET
A continuación muestro un ejemplo muy sencillo utilizando herencia visual de
formularios. Los siguientes requisitos serán necesarios:
Microsoft Visual
Basic .NET 2003
Microsoft SQL Server 2000
Microsoft Windows XP o superior
Computador Pentium o superior
Memória RAM 128 o superior
Monitor VGA de ‘’15 o superior
A continuación muestro el siguiente formulario el cual estará definido como el
formulario base de la aplicación, así como el código dentro del mismo:
Protected Const SQL_INFOCONNECTION As String = _
6. "Server=localhost;" & _
"DataBase=Northwind;" & _
"Integrated Security=SSPI"
Protected Connect As Boolean = False
Protected connectionString As String = SQL_INFOCONNECTION
Protected Function GetDataSource() As DataSet
Static ConnectionString As String = SQL_INFOCONNECTION
Static Connect As Boolean = False
'--Crear instancia al formulario del status de conexión.
Dim frmStatusMessage As New frmStatus
'--Primera vez que se conecta.
If Not Connect Then
'--Mensaje al usuario de intento de conexión.
frmStatusMessage.Show("Conectando con el servidor de datos...")
End If
'--Inicializar el intento de conexión para entrar al ciclo.
Dim IsConnecting As Boolean = True
While IsConnecting
Try
'--Inicializar conexión a la base de datos.
Dim cnNorthwind As New SqlConnection(ConnectionString)
'--Ejecutar adaptador con la tabla productos.
Dim da As New SqlDataAdapter( _
"SELECT ProductID, ProductName, UnitPrice, UnitsInStock " & _
"FROM products", cnNorthwind)
Dim dsProducts As New DataSet
'--Inicializar y llenar dataset.
dsProducts.Clear()
7. da.Fill(dsProducts, "Products")
IsConnecting = False
Connect = True
frmStatusMessage.Close()
'--Retornar conjunto de datos a su destino.
Return dsProducts
Catch exc As Exception
'--Cerrar formulario
frmStatusMessage.Close()
'--Enviar mensaje al usuario.
System.Windows.Forms.MessageBox.Show(exc.Message, "Herencia Visual .NET", _
MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1)
End Try
End While
'--Cerrar formulario.
frmStatusMessage.Close()
End Function
Private Sub btnCerrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
btnCerrar.Click
'--Cerrar el form y terminar la aplicación.
Me.Close()
End
End Sub
En el código anterior se crea una función que permite crear conexión con la base de
datos de SQL Server 2000 y la cual enviara el conjunto de datos a un control enlazado.
El clic del botón cerrar cierra cualquier formulario heredado, ya que primeramente se
ejecuta el método clic del formulario base y luego el método clic del formulario
heredado.
A continuación se muestra el formulario heredado en tiempo de diseño, así como su
código :
8. '--Inicializar grid y crear estilos.
With Me.grdProductos
.CaptionText = "Lista de productos desglosada"
.DataSource = GetDataSource().Tables(0)
End With
'--Aplicar estilos al grid.
Dim dgTableStyle1 As New DataGridTableStyle
With dgTableStyle1
.AlternatingBackColor = Color.Red
.BackColor = Color.WhiteSmoke
.ForeColor = Color.MidnightBlue
.GridLineColor = Color.Gainsboro
.GridLineStyle = System.Windows.Forms.DataGridLineStyle.None
.HeaderBackColor = Color.MidnightBlue
.HeaderFont = New Font("Tahoma", 8.0!, FontStyle.Bold)
9. .HeaderForeColor = Color.WhiteSmoke
.LinkColor = Color.Teal
.MappingName = "Products"
.SelectionBackColor = Color.CadetBlue
.SelectionForeColor = Color.WhiteSmoke
End With
Dim grdColStyle1 As New DataGridTextBoxColumn
With grdColStyle1
.HeaderText = "ID. Producto"
.MappingName = "ProductID"
.Width = 50
End With
Dim grdColStyle2 As New DataGridTextBoxColumn
With grdColStyle2
.HeaderText = "Descripción"
.MappingName = "ProductName"
.Width = 225
End With
Dim grdColStyle3 As New DataGridTextBoxColumn
With grdColStyle3
.HeaderText = "Precio"
.MappingName = "UnitPrice"
.Width = 70
End With
Dim grdColStyle4 As New DataGridTextBoxColumn
With grdColStyle4
.HeaderText = "Cantidad en almacen"
.MappingName = "UnitsInStock"
10. .Width = 70
End With
dgTableStyle1.GridColumnStyles.AddRange _
(New DataGridColumnStyle() _
{grdColStyle1, grdColStyle2, grdColStyle3, grdColStyle4})
Me.grdProductos.TableStyles.Add(dgTableStyle1)
El código anterior tiene dos objetivos. El primero es pasar el conjunto de resultados al
grid, dicha información viene desde la función diseñada del formulario base. Esta
función esta declarada como Protected la cual permite un alcance único a clases
derivadas de su propia clase base. La segunda parte es estilizar el grid con colores y
formas más vistosas.
Como se puede apreciar, hay código dentro del formulario base que es ejecutado y hay
código dentro del formulario heredado. La diferencia de ambos radica, que el código del
formulario base puede ser utilizado en sus clases derivadas en este caso en el formulario
heredado con la función que retorna el conjunto de resultados. En el formulario
heredado hay código que solamente puede ser ejecutado en el mismo, no en clases
derivadas. Ya que el formulario heredado es una clase derivada.
Para finalizar muestro el formulario heredado en tiempo de ejecución:
11. Conclusiones
La herencia visual .NET es un camino más en el perfeccionamiento para el desarrollo de
aplicaciones Windows. Pues con algunas cuantas líneas de código es posible obtener
una aplicación robusta, escalable, ágil que posea las mismas características visuales del
resto de formularios utilizados. Minimizando de esta manera el tratamiento y desarrollo
de formularios y controles para la misma.
Cada aplicación bien desarrollada es sinónimo de solución. Y cada solución es
Tamaño 65 KB