sábado, 29 de noviembre de 2014

Módulos de Clase en Visual Basic

La diferencia principal entre clases y módulos consiste en que pueden crearse instancias de clases como objetos pero no de módulos. Como sólo existe una copia de los datos de un módulo estándar, cuando una parte del programa cambia una variable pública en un módulo estándar, cualquier otra parte del programa obtendrá el mismo valor si lee luego esa variable. En comparación, los datos de objeto existen individualmente para cada objeto con instancias. Otra distinción es que, a diferencia de los módulos estándar, las clases pueden implementar interfaces.
7825002w.alert_note(es-es,VS.90).gifNota:
Cuando el modificador Shared se aplica a un miembro de clase, está asociado con la propia clase en lugar de con una instancia determinada de la clase. Se tiene acceso directo al miembro mediante el nombre de clase, de la misma manera que se tiene acceso a los miembros de módulos. Para obtener más información acerca de miembros compartidos, consulte Miembros compartidos en Visual Basic.
Las clases y los módulos también emplean ámbitos diferentes para sus miembros. Los miembros definidos dentro de una clase tienen el ámbito de una instancia específica de la clase y sólo existen mientras dure el objeto. Para tener acceso a los miembros de clases desde el exterior de una clase, debe utilizar los nombres completos con el formato Objeto.Miembro.
Por otro lado, los miembros declarados dentro de un módulo son de manera predeterminada accesibles públicamente y se puede obtener acceso a ellos mediante cualquier código que tenga acceso al módulo. Esto significa que las variables en un módulo estándar son de hecho variables globales porque son visibles desde cualquier parte del proyecto y existen durante toda la vida útil del programa.

Manejo de Excepciones en Visual Basic.net

Control estructurado de excepciones
 
En el control estructurado de excepciones, los bloques de código se encapsulan y cada uno de ellos tiene uno o varios controladores asociados. Cada controlador especifica una forma de condición de filtro para el tipo de excepción que controla. Cuando el código de un bloque protegido genera una excepción, se busca por orden en el conjunto de controladores correspondientes y se ejecuta el primero que contenga una condición de filtro coincidente. Un método puede tener varios bloques de control estructurado de excepciones y dichos bloques pueden además estar anidados.
La instrucción Try...Catch...Finally se utiliza específicamente para el control estructurado de excepciones.
Aquí en este manualillo solo se explicará este método, el control estructurado de excepciones.
Visual Basic admite el control estructurado de excepciones, que facilita la tarea de crear y mantener programas mediante controladores de errores consistentes y exhaustivos. El control estructurado de excepciones es un código diseñado para detectar y dar respuesta a los errores que se producen durante la ejecución, mediante la combinación de una estructura de control (similar a Select Case o While) con excepciones, bloques de código protegidos y filtros.
 
El uso de la instrucción Try…Catch…Finally permite proteger bloques de código con posibilidades de generar errores. Los controladores de excepciones pueden anidarse, y las variables que se declaren en cada bloque tendrán un ámbito local.
 
 
Try
‘El código que puede producir el error
Catch [filtros opcionales o tipos de errores a capturar]
‘Código para cuando se produzca un error
 [bloques catch adicionales]
Finally
‘Código para cuando aparezca o no un error
End Try
 
El bloque Try de un controlador de excepción Try...Catch...Finally contiene la sección del código que el controlador de errores va a supervisar. Si se produce un error durante la ejecución de cualquier parte del código de esta sección, Visual Basic examinará cada instrucción Catch de Try...Catch...Finally hasta que encuentre una cuya condición coincida con el error. Si la encuentra, el control se transferirá a la primera línea de código del bloque Catch. Si no se encuentra una instrucción Catch coincidente, la búsqueda continuará en las instrucciones Catch del bloque Try...Catch...Finally exterior que contiene el bloque en el que ocurrió la excepción. Este proceso se prolongará a lo largo de toda la pila hasta que se encuentre un bloque Catch coincidente en el procedimiento actual. De no encontrarse, se produciría un error.
El código de la sección Finally siempre se ejecuta en último lugar, inmediatamente antes que el bloque de control de errores pierda su ámbito, con independencia de que se ejecute el código de los bloques Catch. Sitúe el código de limpieza (el código que cierra los archivos y libera los objetos, por ejemplo) en la sección Finally.
 
Filtrar errores en el bloque Catch
Los bloques Catch ofrecen tres opciones para filtrar errores específicos. En una de ellas, los errores se filtran basándose en la clase de la excepción (en este caso ClassLoadException), como se muestra en el siguiente código:
Try  
   ' "Try" block.
Catch e as ClassLoadException  
   ' "Catch" block.
Finally  
   ' "Finally" block.
End Try
Si se produce un error ClassLoadException, se ejecuta el código del bloque Catch especificado.
En la segunda opción para filtrar errores, la sección Catch puede filtrar cualquier expresión condicional. Un uso común de este formato del filtro Catch consiste en comprobar números de error específicos, como se muestra en el código siguiente:
Try
   ' "Try" block.
Catch When ErrNum = 5 'Type mismatch.
   ' "Catch" block.
Finally
   ' "Finally" block.
End Try
 
Cuando Visual Basic encuentra el controlador de errores coincidente, ejecuta el código de este controlador y pasa el control al bloque Finally.
 
Nota   Al buscar un bloque Catch que controle una excepción, se evalúa el controlador de cada bloque hasta encontrar uno que coincida. Puesto que estos controladores pueden ser llamadas a funciones, es posible que se produzcan efectos secundarios no esperados; por ejemplo, una llamada de este tipo puede cambiar una variable pública y provocar que ésta se utilice en el código de un bloque Catch distinto que termina controlando la excepción.
La tercera alternativa, consiste en combinar las primeras dos opciones y utilizar ambas para el control de excepciones.
El bloque Finally siempre se ejecuta, con independencia de cualquier otra acción que tenga lugar en los bloques Catch anteriores. No puede utilizar Resume o Resume Next en el control estructurado de excepciones.
 
Ahora se realizarán una serie de ejemplos que aclararán lo expuesto
 
Ejemplo 1.
 
Module Module1
 
    Sub Main()
        Dim sValor As String
        Dim iNumero As Integer
        Try
            'Aqui comienza el control de errores
            Console.WriteLine("Introducir un número")
            sValor = Console.ReadLine
            'Si no hemos introducido ningún número
            iNumero = sValor 'aquí se producira un error
 
        Catch
            'Si se produce un error, se generará una excepción
            'que capturamos en este bloque de código
            'manipulador de excepción, definido por Catch
            Console.WriteLine("Error al introducir el número" & ControlChars.CrLf & "el valor {0} es incorrecto", sValor)
        End Try
        Console.Read()
    End Sub
 
End Module
 
Esta y las siguientes 2 líneas no pertenecen al código anterior
Observen que antes de module1 no están declaradas Option Explicit On o
Option Strict On.

Tipos de Errores en Visual Basic

En Visual Basic, los errores (también denominados excepciones) se dividen en tres categorías: errores de sintaxis, errores en tiempo de ejecución y errores lógicos.          

Errores de sintaxis 

Los errores de sintaxis son aquellos que aparecen mientras se escribe el código. Visual Basic comprueba el código mientras se escribe en la ventana Editor de código y alerta si se comete un error, por ejemplo, si se escribe mal una palabra o se usa un elemento del lenguaje de forma incorrecta. Los errores sintácticos son los errores más frecuentes. Se pueden corregir fácilmente en el entorno de codificación en cuanto se producen.
Nota Nota
La instrucción Option Explicit es una medida para evitar los errores de sintaxis. Le obliga a declarar, por anticipado, todas las variables que se vayan a utilizar en la aplicación. De este modo, cuando se utilicen las variables en el código, cualquier error tipográfico que se produzca se capturará de forma inmediata, y podrá corregirse.

Errores en tiempo de ejecución 

Los errores en tiempo de ejecución son aquellos que aparecen solamente después de la compilación y la ejecución del código. Pueden darse errores de este tipo, por ejemplo, en fragmentos de código aparentemente correctos, por no presentar errores sintácticos, pero que no se ejecutan correctamente. Por ejemplo, podría escribir correctamente una línea de código que abre un archivo. Pero, si el archivo está dañado, la aplicación no podrá ejecutar la función Open y se detendrá su ejecución. La mayoría de los errores de este tipo pueden corregirse modificando el código que presenta errores, para después compilarlo y volver a ejecutarlo.

Errores lógicos 

Los errores lógicos son aquellos que aparecen cuando la aplicación está en funcionamiento. Son a menudo resultados no deseados o inesperados en respuesta a acciones del usuario. Por ejemplo, una clave mal escrita u otra influencia externa podría hacer que la aplicación dejase de funcionar aún siendo correctos los parámetros, o que simplemente no funcionase. Por lo general, los errores lógicos son los más difíciles de corregir, puesto que no siempre está claro dónde se originan.

Controles en Visual Basic

En Visual Basic existen tres categorías generales de controles: Controles intrínsecos, Controles ActiveX, Objetos insertables
 
1. Controles intrínsecos
Estos controles se encuentran dentro del archivo ejecutable de Visual Basic. Los controles intrínsecos están siempre incluidos en el cuadro de herramientas, no como los controles Activex, que se pueden quitar o agregar al cuadro de herramientas. A continuación una lista de controles intrínsecos.
Nombre de controlNombre de claseDescripción
   
Casilla de verificaciónCheckBoxPresenta una opción de tipoVerdadero o Falso.
Cuadro combinadoComboBoxCambina un cuadro de texto y un cuadro de lista.
Botón de comandoCommandButtonEjecuta un comando o una acción cuando el usuario hace clic en él.
DatosDataPermite conectar una base de datos existente y presentar información en ella en los formularios.
Cuadro de lista de directoriosDirListBoxPresenta directorios y rutas de acceso.
Cuadro de lista de archivosFileListBoxPresenta una lista de archivos.
Cuadro de lista de unidadesDriveListBoxPresenta una lista de unidades de disco validas.
MarcoFrameProporciona un contenedor visual y funcional para los controles.
Barras de desplazamiento horizontal y verticalHScrollBar y VScrollBarPermite que un usuario agregue barras de desplazamiento a controles que no las tienen de forma automática.
ImagenImagePresenta mapas de bits, iconos o metarchivos de Windows, archivos JPEG o GIF, y actúa como un botón de comando cuando se hace clic en él.
EtiquetaLabelPresenta texto con el cual el usuario no puede interactuar ni modificar.
LíneaLineAgrega un segmento de línea recta a un formulario.
Cuadro de listaListBoxPresenta una lista de elementos entre los que el usuario puede elegir.
Contenedor OLEOLEIncrusta datos en una aplicación de Visual Basic.
Botón de opciónOptionButtonEl control OptionButton, como parte de un grupo de opciones con otros botones de opción. Presenta varias opciones entre las ue el usuario sólo puede elegir una.
Cuadro de imágenPictureboxPresenta mapas de bits, íconos o metarchivos de Windows y otros tipos de archivos graficos compatibles. También presenta texto o actúa como contenedor visual para otros controles..
FormaShapeAgrega un rectángulo, un cuadrado, una elipse o un circulo a un formulario, marco o cuadro de imagen.
Cuadro de textoTextBoxProporciona una área para escribir o presentar texto.
CronómetroTimerEjecuta eventos periódicos a intervalos de tiempo específicado.

2. Controles ActiveX
Son aquellos controles que existen como archivos independientes con extensión nombre de archivo .ocx. Entre éstos se incluyen los controles disponibles en todas las ediciones de Visual Basic (controles cuadrícula, cuadro combinado y lista enlazados a datos y varios más) y los que sólo están disponibles en la Edición Profesional y la Edición Empresarial (como Listview, Toolbar, Animation y Tabbed Dialog). A estos también se suman los controles Activex de otros fabricantes.
Nombre de controlNombre de claseDescripción
Control de datos ADOADODCCrea una conexión a una base de datos de datos mediane ADO. Asignable a la propiedad DataSource de otros controles, como el control DataGrid.
Dialogo comúnCommonDialogProporciona un conjunto de cuadros de diálogo estándar para operaciones como abrir y guardar archivos, establecer opciones de impresión y seleccionar colores y fuentes.
Cuadro combinado enlazado a datosDataGridProporciona las mayorías de las opciones del control ComboBox estándar, así como mayor capacidad de acceso a datos.
Cuadrícula Apex enlazada a datosDataGridControl con apariencia de una hoja de cálculo vinculado aun origén de datos como un control de datos ADO. Es posible la lectura y la modificación del recordset.
Cuadro de lista enlazado a datos.DataListProporciona la mayoría de de las características del control ListBox estándar, asi como mayor capacidad de acceso a datos.
FlexGrid de MicrosoftMSFlexGridControl con apariencia de hoja de cálculo de sólo lectura que se puede vincular al diseñador de entorno de datos para mostrar recordset jerárquicos
 
3. Objetos insertables
Como un objeto Worksheet de Microsoft Excel que contienen la lista de los empleados de su empresa, o un objeto Calendar de Microsoft Project que contiene la información del calendario de un proyecto. Puesto que estos objetos se pueden agregar al cuadro de herramientas, se les considera controles.
Convenciones de nomenclatura de los controles
Cuando crea un objeto (un formulario o un control) por primera vez, Visual Basic establece su propiedad Name a un valor predeterminado. Por ejemplo, todos los botones de comando tienen la propiedad Name establecida inicialmente a Commandn, donde n es 1, 2, 3 y así sucesivamente. Visual Basci llama al primer botón de comando de un formulario Command1, al segundo Command2 y al tercero Command3.
Puede mantener los nombres predeterminados; sin embargo, cuando tiene varios controles del mismo tipo, es más lógico modificar las propiedades Name para que sean algo más descriptivas. Como puede ser dificil distinguir entre el botón Command1 de miForm y el botón Command1 de SubForm, la convención de nomenclatura es recomendable, especialmente cuando una aplicación se compone de varios módulos de formulario, módulos estándar y módulos de clase.
Puede usar un prefijo para describir la clase, seguido de un nombre descriptivo del control. El uso de convención de nombres hace que el código sea más autodescriptivo y agrupa objetos similares alfabéticamente en el cuadro de lista Objeto. Por ejemplo:
chkSoloLectura
Los nombres de los formularios y los controles:
  • Deben empezar por una letra
  • Sólo deben contener letras, números y el carácter de subrayado (_); no se permiten signos de puntuación ni espacios en blanco.
  • No pueden tener una longitud mayor de 40 caracteres.
Para más información vea: Programar con estilo
Valores de los controles
Todos los controles tienen una propiedad que se puede usar para almacenar u obtener valores mediante una referencia al control, sin mencionar el nombre de la propiedad.
Este se denomina valor del control y normalmente es la propiedad más importante o la más frecuentemente utilizada del control.
Cuando quiera hacer una referencia a la propiedad de un control que es el valor de dicho control, puede hacerlo sin especificar el nombre de la propiedad. Por ejemplo, esta línea de código establece la propiedad Text de un cuadro de texto.
Text1 = "Este texto se asigna a la propiedad Text de Text1"
En este ejemplo, la propiedad Caption de Label1 se establece a la propiedad FileName de File1 cuando el usuario hace clic en un archivo del cuadro de lista de archivos:
Private File1_Click()
   Label1 = File1
End Sub
En la tabla siguiente se enumeran las propiedades consideradas como valor de control.
ControlValor
CheckBoxValue
ComboBoxText
CommandButtonValue
CommonDialogAction
DataCaption
DataComboText
DataGridText
DataListText
DirListBoxPath
DriveListBoxDrive
FileListBoxFileName
FlexGridText
FrameCaption
HScrollBarValue
ImagePicture
LabelCaption
LineVisible
ListBoxText
OptionButtonValue
PictureBoxPicture
ShapeShape
TextBoxText
TimerEnabled
VScrollBarValue

Como Agregar Controles a Formularios de Windows Form

La mayoría de los formularios se diseñan agregando controles a la superficie del formulario para definir una interfaz de usuario. Un control es un componente de un formulario que se utiliza para mostrar información o aceptar los datos introducidos por el usuario. Para obtener más información sobre controles, vea Controles de Windows Forms.
Nota Nota
Los cuadros de diálogo y comandos de menú que se ven pueden diferir de los descritos en la Ayuda, en función de los valores de configuración o de edición activos. Para cambiar la configuración, elija Importar y exportar configuraciones en el menú Herramientas. Para obtener más información, vea Valores de configuración de Visual Studio.

Para dibujar un control en un formulario

  1. Abra el formulario. Para obtener más información, vea Cómo: Mostrar formularios Windows Forms en el diseñador.
  2. En el Cuadro de herramientas, haga clic en el control que desee agregar al formulario.
  3. En el formulario, haga clic en el punto en que desee que se encuentre la esquina superior izquierda del control y arrastre hasta donde desee que se encuentre la esquina inferior derecha del control.
    El control se agregará al formulario con la ubicación y el tamaño especificados.
    Nota Nota
    Cada control tiene definido un tamaño predeterminado. Puede agregar un control al formulario con su tamaño predeterminado arrastrándolo desde el Cuadro de herramientas al formulario.

Para agregar un control a un formulario

  1. Abra el formulario. Para obtener más información, vea Cómo: Mostrar formularios Windows Forms en el diseñador.
  2. En el Cuadro de herramientas, haga clic en el control que desee y arrástrelo al formulario.
    El control se agregará al formulario en la ubicación especificada, con su tamaño predeterminado.                            
  3. Para agregar un control a un formulario mediante programación

    • En el método que controla el evento Click del botón dentro de la clase del formulario, inserte código similar al siguiente para agregar una referencia a la variable de control, establecer el valor de Location para el control y agregar el control:              
      Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
         Dim MyText As New TextBox()
         MyText.Location = New Point(25, 25)
         Me.Controls.Add(MyText)
      End Sub
     

Windows Form VB.NET

Puesto que los formularios son la unidad básica de una aplicación, es importante realizar algunas consideraciones sobre su función y su diseño. Un formulario es, en última instancia, una hoja en blanco que el desarrollador rellena con controles, para crear una interfaz de usuario, y con código, para procesar los datos. Para ese fin, Visual Studio proporciona un entorno de desarrollo integrado que ayuda a escribir el código, así como un completo conjunto de controles escrito con .NET Framework. La funcionalidad de estos controles se complementa con el código escrito por el desarrollador, lo que permite desarrollar fácil y rápidamente las soluciones deseadas.

Como Crear un Formulario MDI

Para crear formularios MDI secundarios

  1. Cree un formulario primario MDI con una estructura de menús que contenga los elementos de menú Archivo y Ventana de nivel superior y los elementos de menú Nuevo y Cerrar. Para obtener más información, vea Cómo: Crear formularios principales MDI.
  2. En la lista desplegable que se encuentra en la parte superior de la ventana Propiedades, seleccione el elemento de menú correspondiente al elemento Ventana y establezca el valor de la propiedad MdiList en true.
    Esto habilitará al menú Ventana para que mantenga una lista de ventanas secundarias MDI abiertas, con una marca de verificación junto a la ventana secundaria activa.
  3. En el Explorador de soluciones, haga clic con el botón secundario en el proyecto, haga clic en Agregar y seleccione Agregar nuevo elemento.
    Este formulario será la plantilla de los formularios MDI secundarios.
    Nota Nota
    El formulario secundario MDI que creará en este paso es un Windows Form estándar. Por tanto, tendrá una propiedad Opacity, que permite controlar la transparencia del formulario. Sin embargo, la propiedad Opacity está diseñada para ventanas de alto nivel. No la utilice con formularios MDI secundarios, porque pueden surgir problemas.
  4. En el cuadro de diálogo Agregar nuevo elemento, seleccione Windows Form (en Visual Basic o Visual C#) o Aplicación de Windows Forms (.NET) (en Visual C++) desde el panel Plantillas. En el cuadro Nombre, asigne al formulario el nombre Form2. Haga clic en el botón Abrir para agregar el formulario al proyecto.
    Se abrirá el Diseñador de Windows Forms, donde se mostrará el formulario Form2.
  5. En el Cuadro de herramientas, arrastre un control RichTextBox al formulario.
  6. En la ventana Propiedades, establezca la propiedad Anchor en Top, Left y la propiedad Dock en Fill.
    Esto hace que el control RichTextBox llene por completo el área del formulario MDI secundario, aunque se cambie el tamaño del formulario.
  7. Cree un controlador de eventos Click para el elemento de menú Nuevo. Para obtener información sobre cómo crear controladores de eventos, vea Cómo: Crear controladores de eventos con el diseñador.
  8. Inserte el código siguiente para crear un nuevo formulario MDI secundario cuando el usuario haga clic en el elemento de menú Nuevo.
    Nota Nota
    En el ejemplo siguiente, el controlador de eventos controla el evento Click para MenuItem2. Tenga presente que, en función de las características específicas de la arquitectura de la aplicación, podría ser que el elemento de menú Nuevo no fuese MenuItem2.
     
    Protected Sub MDIChildNew_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem2.Click
       Dim NewMDIChild As New Form2()
       'Set the Parent Form of the Child window.
       NewMDIChild.MdiParent = Me
       'Display the new form.
       NewMDIChild.Show()
    End Sub
    
    
    
  9. Presione F5 para ejecutar la aplicación. Observe que al seleccionar Nuevo en el menú Archivo, puede crear nuevos formularios MDI secundarios de los que se hará un seguimiento en el menú Ventana.