Curso de Visual Basic .NET

1.3 Mas sobre el código Vb .NET

Volvamos a revisar algunos elementos más teóricos del código que tenemos en pantalla, vamos explicar el porqué del resto de las líneas de código. Así iremos conociendo términos que luego en temas posteriores acabaremos de encajar y entender. Partimos de nuestro código de ejemplo:

Public Class Form1
Inherits System.Windows.Forms.Form
 

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
             System.EventArgs) Handles Button1.Click
    MsgBox("Hola " & TextBox1.Text)
End Sub

End Class

Sabemos que este es todo el código del formulario y del programa...sólo esto? Pues si y no, digamos que el código que se ejecuta si que está visible pero el código que define al formulario está oculto. Este código generado por el diseñador o IDE está oculto por una técnica que se llama Esquematización u Outlining. Esta técnica permite definir zonas y regiones de código que pueden ser expandidas o contraídas desde el propio editor, haciendo clic en los indicadores de código:

En nuestro ejemplo el diseñador ha creado una zona con el nombre "Código generado por el Diseñador de Windows Forms". Si pulsamos en el símbolo mas vemos como se expande esa zona y si volvemos a pulsar se contrae. Por curiosidad haz lo siguiente: deja el código contraído y márcalo para copiar el texto, abre el bloc de notas (Notepad) y pega ese texto... resultado se ha copiado también el código oculto.

La verdad es que nos puede sorprender tanto código para este simple programa, sobre todo para los antiguos programadores que os podréis sentir u poco desconcertados al intentar leer el código. Pero no es tan complicado, aunque aquí lo voy a explicar no es necesario que lo entiendas completamente, sirva como un avance de la sintaxis y código del mundo .NET. (pero presta la máxima atención posible, merece la pena invertir tiempo en esta explicación)



1.4 Análisis del código fuente del formulario

Vamos a realizar un pequeño análisis de este código oculto que añade .NET de forma automática. Veremos su aparente complejidad, sobre todo para los programadores de Visual Basic 6 que en lugar de encontrar con algo mas sencillo en esta versión de VB se encuentran con todo esto... tranquilos no es tanta la diferencia sigamos...

Vamos a intentar explicar qué es todo el código oculto que tenemos en el IDE. Es necesario empezar a familiarizarnos con estas palabras clave y conceptos para comenzar a comprender un poco el funcionamiento de .NET

En este código tenemos la posibilidad de crear el formulario a partir de código, es decir sin necesidad del entorno anterior de controles-ratón-formulario. Podemos por código decirle que en tal posición va un cuadro de texto con unas propiedades determinadas, un botón... esto es algo que no existía en versiones anteriores ya que en VB6 el código de creación del formulario no era accesible por el programador. Además si este código lo crea automáticamente el diseñador... ¿de qué tenemos que preocuparnos? él lo genera por nosotros. Aun así veamos las partes más interesantes:



La clase formulario

Todos los formularios son objetos y el código de un objeto se escribe con una clase.  Recordemos un poco estos términos, un objeto es cada uno de los elementos de programación de que disponemos: formularios, botones, bases de datos, ... y una clase es digamos la plantilla para crear ese elemento. Es decir con la clase "botón" podemos crear y manipular botones.

Seguimos, como el formulario es una clase y debemos crear este formulario hay que utilizar las palabras clave Class y End Class y heredar esta clase de la clase Form con la palabra clave Inherits. Tranquilo... esto significa que tenemos que crear un formulario nuevo, ya sabes que VB.NET le pone un nombre por defecto Form1 y para que el programa sepa que esto es un formulario le decimos que lo "herede" de la clase Form, es decir, utiliza la plantilla Form para crear un formulario para mi programa que se va a llamar Form1. Finalmente la clase Form pertenece al espacio de nombres (recuerda los Namespace del capítulo 1) System.Windows.Forms y contiene todas las clases relacionadas con el formulario y controles. Veamos ahora el código:

Public Class Form1
    Inherits System.Windows.Forms.Form
    ...
    ...
End Class

Que significa crea un formulario llamado Form1 y que herede las características o créalo a partir de la clase Form. VB sabe qué es la clase Form así que creará un elemento Form1 a partir de las especificaciones que tiene para crear objetos de tipo Form o escrito entero: System.Windows.Forms.Form

Nota: El "spacename" mas importante dijimos en el primer capítulo que era System. De elle parten otros adecuados a diferentes acciones: acceso a bases de datos System.Data, para dibujar: System.Drawing, para trabajar con los elementos de Windows: System.Windows y de ahí uno de los componentes de los entornos que son los formularios: System.Windows.Forms. Vale, este spacename contiene todos los elementos de los formularios: cuadros de texto, botones, lista, .... y obviamente el propio formulario así que:

Crea un formulario a partir del objeto Form del spacename System.Windows.Forms:

Inherits System.Windows.Forms.Form

¿Que tal.. mejor? Pues si lo habéis entendido hemos avanzado más de lo que parece, ánimo. Por el hecho de establecer una relación de herencia entre Form y Form1, toda la funcionalidad de la clase Form (clase padre o base) pasa a la nueva clase Form1 (clase hija o derivada) a la que podemos añadir nuevas características. Sigamos con el código...



El método constructor New()

Todas las clases deben tener un método constructor que es el primero que se ejecuta cuando es instanciado un objeto de la clase y dentro se escribe el código para inicializar el objeto.

Ahora veremos que son estos términos. El método constructor es la propia acción de crear el objeto a partir de su clase. Es decir creamos el coche (objeto) a partir de su definición (clase). El termino instanciado equivale a hacer referencia al objeto. Es decir decimos que un objeto es instanciado cuando hacemos uso de él, por lo tanto, debe crearse si no lo está,  el método constructor para una clase en Vb.NET es New(), es decir para crear un nuevo objeto utilizaremos el método New:

Public Sub New()
    MyBase.New()
   
    'El Diseñador de Windows Forms requiere esta llamada.
    InitializeComponent()
   
    'Agregar cualquier inicialización después de la llamada a InitializeComponent()
   
End Sub

Puesto que nuestra clase Form1 (formulario del programa de ejemplo) hereda de la clase Form, en el método constructor de Form1 llamamos al método constructor de la clase base com Mybase.New(). La palabra clave Mybase representa al objeto de la clase padre. Finalmente iniciamos el componente con InitializeComponent que inicia los componentes del formulario: sus propiedades, controles, ...



Formulario y creación de controles

El tercer paso es la creación y configuración del formulario que creamos con el ratón en el diseñador gráfico. Aquí tenemos los controles que insertamos: botones, cuadro de texto y etiqueta, veamos como lo gestiona esta parte del código.

<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
Me.Label1 = New System.Windows.Forms.Label
Me.TextBox1 = New System.Windows.Forms.TextBox
Me.Button1 = New System.Windows.Forms.Button
Me.cmdcerrar = New System.Windows.Forms.Button
Me.SuspendLayout()
'
'Label1
'
Me.Label1.Location = New System.Drawing.Point(16, 32)
Me.Label1.Name = "Label1"
Me.Label1.TabIndex = 0
Me.Label1.Text = "Nombre"
 

Si vemos la primera parte lo que hace es crear los controles que vamos a utilizar en el formulario. Y los crea a partir de  su clase, por ejemplo: Me.Label1 = New System.Windows.Forms.Label. Sabemos que la palabra clave ME hace referencia al propio formulario luego crea en este formulario un elemento que se va a llamar Label1 y lo creas a partir de la plantilla o clase System.Windows.Forms.Label es decir te vas a comportar como una etiqueta de texto. Fíjate en el último control que creamos cmdcerrar, puesto que le pusimos ese nombre a la hora de crear el formulario, para crearlo Vb.NET debe hacer: crea en este formulario un control que se llame CMDCERRAR y lo vas a crear a partir de la plantilla System.Windows.Forms.Button por lo tanto será un botón. Hasta ahora bastante lógico ¿no? Vale una vez creados tenemos que ponerles todas las propiedades que le ha asignado el programador: color, etiqueta de texto, tipo de letra... de eso se encargan  las siguientes instrucciones por ejemplo Me.Label1.Text = "Nombre" le asigna la cadena de texto "Nombre" a una etiqueta que se llama Label1, creada arriba.

Nota: Debemos hacer caso especial a la advertencia que nos pone el código:

'NOTA: el Diseñador de Windows Forms requiere el siguiente procedimiento
'Puede modificarse utilizando el Diseñador de Windows Forms.
'No lo modifique con el editor de código.

Es decir no debemos modificar este código que incluye el diseñador.

Como hemos dicho antes dentro del código de InitializeComponent la palabra clave Me nos permite referirnos a cualquier elemento del formulario actual desde dentro del propio formulario. Para terminar decir que las instrucciones Me.SuspendLayout() y Me.ResumeLayout(False) que están entre la asignación de las propiedades de los controles lo que permiten es detener por un momento la visualización de los elementos o controles en pantalla para evitar efectos raros en la visualización. Digamos que se pintan ocultos con todas sus propiedades y luego su hacen todos visibles a la vez, así evitamos problemas en su visualización.



Finalizar el formulario y liberar recursos

Cuando ya no necesitemos el formulario debemos liberar sus recursos (un eterno problema en Windows, los programas cogen recursos y luego no los liberan correctamente). El método Dispose() , indicar a VB.NET que el formulario ya no se va a utilizar y que todos los recursos que ha estado usando quedan a disposición del entorno para que el recolector de basura de la plataforma, los recupere cuando considere necesario. Esto se hace para el formulario y para sus elementos:

'Form reemplaza a Dispose para limpiar la lista de componentes.
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
    If disposing Then
        If Not (components Is Nothing) Then
            components.Dispose()
        End If
    End If
    MyBase.Dispose(disposing)
End Sub

Y de momento es suficiente. Sólo quería que vieses que podemos declarar objetos de un determinado tipo, luego los creo y por fin después de utilizarlos los debo eliminar. También hemos visto que ese código oculto contiene toda la información necesaria para crear el formulario con sus controles: botones, etiquetas, ... y con todas las propiedades de éstos.

Ver video en formato de Flash Ver el código del programa

Ahora vamos a grabar el proyecto para ver de qué partes se compone...



1.5 Ficheros de un proyecto

Al crear un proyecto éste crea unas carpeta con varios ficheros que todos conforman el proyecto. En nuestro ejemplo:

Los programadores de versiones anteriores habréis observado que no se parece prácticamente en nada en esta versión .NET. Veamos un poco los ficheros que lo componen según su extensión:

  • VB. Es el código fuente Visual Basic. A diferencia de Visual Basic 6 estos ficheros pueden contener módulos, módulos de clase, formularios, ... es decir ya no se distinguen entre .bas .fmr sino que todos son .vb
  • VBPROJ. Fichero del proyecto. Tiene toda la información de los elementos que forman parte del proyecto
  • SLN. solución. Una solución es el medio que utiliza .NET para agrupar varios proyectos. Estos pueden estar escritos en el mismo lenguaje o distintos (bastante tenemos con VB como para escribir fragmentos en distintos lenguajes ¿no?).
  • VBPROJ.USER. Información sobre las opciones de usuario de proyecto.
  • RESX. Plantilla de recursos en formato XML
  • EXE. Aplicación ejecutable
  • PDB. Información sobre la depuración de la aplicación

En la carpeta bin del proyecto se genera el fichero ejecutable que es lo único que necesitamos para ejecutar nuestro programa en otros equipos.

Y con esto finalizamos esta pequeña introducción a una aplicación Windows realizada con .NET . Esta explicación nos ha servido para tener una primera toma de contacto seria con la base de .Net Framework que son las clases y su uso. De hecho, una vez entendido es algo realmente sencillo y fácil de utilizar, así que esto nos ha acercado un poco a su filosofía. Para descansar de esta teoría vamos a conocer y practicar  un poco con el IDE y los formularios...



Si desea obtener un acceso sin restricciones a los contenidos del curso de Visual Basic .NET y disfrutar de todas las herramientas del aula virtual (Videos explicativos streaming, acceso a los foros, chat, ejercicios resueltos, la ayuda del tutor, audioconferencia, estudio de grabación, test y actividades de autoevaluación, etc...) puede inscribirse completamente gratis y comenzar a realizar de forma inmediata el curso.