Mostrando entradas con la etiqueta Visual Basic 6. Mostrar todas las entradas
Mostrando entradas con la etiqueta Visual Basic 6. Mostrar todas las entradas

lunes, 8 de septiembre de 2008

File System Object, FSO

A través del File System Object o Modelo de Objetos del Sistema de Archivos es posible manipular (crear, modificar, mover y eliminar) directorios y archivos, así como también obtener información de las mismos. Lo más importante es el poder manipular datos en estas estructuras.

Este modelo de objetos se encuentra contenido en una biblioteca de tipos llamada Scripting (Scrrun.dll), la cual permite la manipulación de archivos de texto mediante el objeto TextStream aunque para manipular archivos binarios se utiliza el comando Open con el indicador Binary.

Este Modelo de objetos tiene los siguientes objetos:

  • Drive
  • Folder
  • Files
  • FileSystemObject
  • TextStream

Para utilizar este Modelo es necesario:

  • Utilizar el método CreateObject o dimensionar una variable como objeto tipo FileSystemObject y crear un objeto.
    1. Set fso = CreateObject("Scripting.Objeto_FileSystemObject")
    2. Dim fso As New FileSystemObject
  • Utilizar el método adecuado en el objeto creado.
  • Es necesario tener acceso a las propiedades del objeto.

Nota: Este Modelo de objetos es redundante, es decir, los siguientes escenarios tienen el mismo objetivo:

  • Copiar un archivo utilizando el método CopyFile del Objeto FileSystemObject
  • Copiar un archivo utilizando el método Copy del objeto File

Las siguientes constantes son utiles para los argumentos la manipular objetos FSO:

 Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 3
Const TristateUseDefault = -2
Const TristateTrue = -1

Drive

A través de este objeto es posible obtener información de las unidades lógicas, el espacio que tienen libre, o si son unidades compartidas.

    Set fsoTmp = fso.GetDrive(fso.GetDriveName(unidad.Drive))
MsgBox fsoTmp.VolumeName
MsgBox "Espacio total : " & FormatNumber(fsoTmp.TotalSize / 1024, 0) & "kb"
MsgBox "Espacio libre : " & FormatNumber(fsoTmp.FreeSpace / 1024, 0) & "kb"

Folder

A través de este objeto es posible crear, eliminar o mover directorios, también es posible obtener la ruta y nombres de estos.

Crear directorio:

 Private Sub cmdMakeDir_Click()
fso.CreateFolder ("c:\" & txtDir)
End Sub

¿Existe el directorio o se creo?

 Set fsoTmp = fso.GetFolder("c:\" & txtDir)
If fso.FolderExists(fsoTmp) Then
MsgBox "Existe"
Else
MsgBox "No existe"
End If

Files

A través de este objeto es posible crear, eliminar o mover archivos, también es posible obtener la ruta y nombres de estos.

Abrir un archivo:

    Set fsoTmp = fso.CreateTextFile("c:\" & txtDir & "\" & txtFile, True)
Set fsoTmp = fso.OpenTextFile("c:\" & txtDir & "\" & txtFile, 2)

    Set fsoTmp = fso.GetFile("c:\" & txtDir & "\" & txtFile)
Set fsoX = fsoTmp.OpenAsTextStream(2, -2)

Escribir datos en un archivo:

    Set fsoTmp = fso.GetFile("c:\" & txtDir & "\" & txtFile)
Set fsoX = fsoTmp.OpenAsTextStream(2, -2)
fsoX.Write (txtData) 'Escribe una línea
fsoX.WriteLine (txtData2) 'Escribe una linea con un caracter de nueva línea
fsoX.WriteBlankLines (5) 'Escribe 5 caracteres de nueva línea
fsoX.Close

Leer datos de un archivo:

    Set fsoTmp = fso.GetFile("c:\sol\test.txt")
Set fsoX = fso.GetFile("c:\sol\test.txt").OpenAsTextStream(ForReading)
txtFileData = fsoX.ReadLine
fsoX.Close

FileSystemObject

Objeto primordial, el cual permite crear, eliminar y obtener información, además de controlar unidades, directorios y archivos.

 Set fso = CreateObject("Scripting.FileSystemObject")

TextStream

A través de este objeto es posible leer y escribir archivos de texto.

Tipos de Acceso a Archivos

Visual Basic tiene 3 tipos de acceso a archivos:

  1. Secuencial, lee y escribe archivos de texto en bloques continuos.

    Es posible abrir un archivo para acceso secuencial para realizar las siguientes tareas:

    • Leer caracteres desde un archivo (Input)
    • Escribir caracteres a un archivo (Output)
    • Agregar caracteres a un archivo (Append)

    Si utiliza Input el archivo debe existir o de lo contrario se produce un error.

    Si utiliza Output o Append la instrucción Open primero crea el archivo y después lo abre.

    Una vez que el archivo fué abierto con Input, Output o Append es necesario cerrarlo con la instrucción Close.

  2. Aleatorio, lee y escribe archivos binarios de texto o estructurados como registros de longitud fija.
  3. Binario, lee y escribe archivos estructurados de forma arbitraria.

El código que se presenta a continuación, espera que el usuario capture el contenido para el archivo MsFileName, y al dar clic en el botón [Write] almacena en el archivo MsFileName el contenido del txtWrite.

Al dar clic en el botón [Read Line], muestra la primer línea que contiene el archivo MsFileName en txtRead.

Al dar clic en el botón [Read By Line], lee el contenido del archivo MsFileName línea por línea y lo muestra en txtLine, además se indica el número de línea que se va leyendo.

 Option Explicit
Dim MsPathName As String
Dim MsFileName As String
Dim MsAux As String
Private Sub Form_Load()
MsPathName = "C:\"
MsFileName = "FileName.txt"
sBar.SimpleText = "Type the content of the file"
End Sub
Private Sub cmdWrite_Click()
Open MsPathName & MsFileName For Output As #1
Write #1, txtWrite
Close #1
sBar.SimpleText = "The content was added"
End Sub

Private Sub cmdRead_Click()
Open MsPathName & MsFileName For Input As #1
Input #1, MsAux
Close #1
txtRead = MsAux
sBar.SimpleText = "Now you can see the content of the file"
End Sub
Private Sub cmdReadLine_Click()
Dim LsNextLine As String
Dim LnCount As Integer
LnCount = 1
Open MsPathName & MsFileName For Input As #1
Do Until EOF(1)
Line Input #1, LsNextLine
txtLine = txtLine & LnCount & " : " & LsNextLine & vbNewLine
LnCount = LnCount + 1
Loop
Close #1
End Sub
Leer más...

El componente ActiveX

Los Componentes ActiveX son fragmentos de código reutilizable y datos conformado por uno o más objetos creados mediante la tecnología ActiveX.

Los componentes ActiveX interactúan con la aplicación y entre sí mediante una relación Cliente-Servidor, donde el cliente es el código de aplicación o componente que utiliza las características de un componente y el servidor es el componente y los objetos que tiene asociados.

Un componente ActiveX implementado como parte de un archivo ejecutable (.exe) es un servidor fuera de proceso y se ejecuta en su propio proceso.

Un componente ActiveX implementado como biblioteca de vínculos dinámicos (.dll) es un servidor en proceso y se ejecuta en el mismo proceso que la aplicación cliente.

Las aplicaciones que no cruzan los límites del proceso para acceder a sus propiedades, métodos y eventos de un objeto son más rápidas (servidores en proceso).

Ejemplo : Excel

  • Project » References
  • Seleccionar Microsoft Excel <versión> Object library
  • Agregue el siguiente código:
 Private Sub Form_Load()
Dim cAxExcelApp As Excel.Application
Dim cAxExcelBook As Excel.Workbook
Dim cAxExcelSheet As Excel.Worksheet

Set cAxExcelApp = New Excel.Application
Set cAxExcelBook = cAxExcelApp.Workbooks.Add
Set cAxExcelSheet = cAxExcelBook.Worksheets.Add

cAxExcelSheet.Cells(1, 1).Value = "www.informatique.com.mx"
cAxExcelSheet.Cells(2, 1).Value = "Visual Basic 6"
cAxExcelSheet.Cells(3, 1).Value = "Componentes ActiveX"

cAxExcelSheet.SaveAs "c:\ejExcel.xls"

cAxExcelBook.Close

cAxExcelApp.Quit

Set cAxExcelApp = Nothing
Set cAxExcelBook = Nothing
Set cAxExcelSheet = Nothing
End Sub

Al emplear una variable de la clase genérica Object, ActiveX usa enlaces en tiempode ejecución, lo que puede acelerar las referecnias a objetos.

Asignar una referencia de objeto mediante CreateObject

 Set variableObjeto = CreateObject(nombreClaseCalificadoObjeto)

Asignar una referencia de objeto mediante GetObject

 Set variableObjeto = GetObject(nombreRuta,nombreClaseCalificadoObjeto)

Blogazos.com. Lo Mejor de los Blogs en Español
Leer más...

lunes, 1 de septiembre de 2008

Eventos del objeto Connection

Clase

Un Objeto Visual Basic se crea a partir de una Clase, por lo tanto un objeto es una instancia de una clase. Para utilizar un objeto se debe mantener una referencia a este mediante una variable de objeto.

La Clase define las interfaces de un objeto y si este es público.

Las descripciones de las Clases se almacenan en bibliotecas de tipos y es posible verlas con el explorador de proyectos [Ctrl] + [R] o File/View/Project Explorer.

Interfaz

Una interfaz es el conjunto de propiedades y métodos de un objeto.

Public Class

Se declara una clase de tipo publica para poder cambiar los datos pertenecientes a un objeto mediante su interfaz (propiedades y métodos).

Private Class

Se declara una clase de tipo privada para ocultar los datos a el código que no pertenece al objeto.

Crear una Clase

Para crear una Clase en VB6 es necesario agregar un Módulo de Clase de la misma forma que agrega un formulario.

Los datos de cada instancia de un módulo de clase sólo existen durante la duración del objeto, es decir, se crean cuando se crea el objeto y se destruyen cuando se destruye el objeto.

Agregar propiedades y métodos a una clase

Las propiedades representan datos de un objeto y los métodos representan acciones que un objeto puede realizar definiendo su comportamiento, juntos representan la interfaz de la clase.

Propiedades

Agregar propiedades a una Clase significa agregar variables públicas al módulo de clase

 Public nombreVariable1 as tipo
Public nombreVariable2 as tipo
Public nombreVariable3 as tipo

Si las variables se declaran como Private significa que sólo podrán ser accesibles desde el código del módulo de la clase.

 Private nombreVariable4 as tipo
Private nombreVariable5 as tipo
Private nombreVariable6 as tipo

Cuando escriba el nombre del objeto y después el símbolo punto (.) se desplegaran únicamente las propiedades públicas del objeto, las privadas no se presentan.

Para acceder al valor de una propiedad se utiliza un procedimiento llamado Property Get, para establecer el valor de una propiedad se utiliza el procedimiento Property Let para el caso de propiedades de tipo objeto se utiliza Property Set.

 Public Property Let nombrePropiedad(ByVal nuevoValor as tipo)
nombrePropiedad
End Property

Propiedad de solo lectura

Para crear una propiedad de solo lectura, se debe omitir el procedimiento Property Let y para las variables de objeto el procedimiento Property Set.

Propiedades Predeterminadas

Una Propiedad Predeterminada es aquella propiedad del objeto que no necesita escribirse explícitamente para asignarle un valor tan sólo basta el nombre del objeto para asignarle valor, por ejemplo los controles Label y Text tienen propiedades predeterminadas por lo que es posible escribir:

 Label1 = "etiqueta"
Text1 = "Texto"

Lo anterior también es posible haciendo referencia explícita de la propiedad a la cual deseamos asignarle valor:

 Label1.Caption = "etiqueta"
Text1.Text = "Texto"

Agregar eventos a una clase

Los eventos se declaran mediante la palabra reservada Event, un evento puede tener argumentos ByVal y ByRef.

Las propiedades y métodos pertenecen a las interfaces entrantes y los eventos a las interfaces salientes.

Ejemplo de Clase

  • Agregue un módulo de clase, llamado Persona y agregue el siguiente código:

     Option Explicit

    Public sNombre As String
    Public nEdad As Integer
    Public dFechaNac As Date
    Private nSalario As Long
    Private nNomina As Long

    Property Let asignarNomina(nNumero)
    nNomina = nNumero
    End Property

    Property Get obtenerNomina() As Long
    obtenerNomina = nNomina
    End Property

    Property Let asignarSalario(nCantidad)
    nSalario = nCantidad
    End Property

    Property Get obtenerSalario() As Long
    obtenerSalario = nSalario
    End Property
  • Agregue los siguientes controles a un formulario:

    1. txtNombre
    2. txtEdad
    3. txtFechaNac
    4. lblNomina
    5. lblSalario
  • En el evento Load del formulario agregue el siguiente código:

     Option Explicit
    Dim cEmpleado As Persona
    Private Sub Form_Load()
    Set cEmpleado = New Persona
    cEmpleado.sNombre = "Gerardo Ángeles Nava"
    cEmpleado.nEdad = 33
    cEmpleado.dFechaNac = #9/21/1971#
    cEmpleado.asignarNomina = 90276094
    cEmpleado.asignarSalario = 54321

    txtNombre = cEmpleado.sNombre
    txtEdad = cEmpleado.nEdad
    txtFechaNac = cEmpleado.dFechaNac

    lblNomina = cEmpleado.obtenerNomina
    lblSalario = cEmpleado.obtenerSalario
    End Sub
  • Ejecute la aplicación [F5].

Polimorfismo

Los objetos Visual Basic pueden implementar interfaces adicionales para proporcionar polimorfismo, es decir, permite manipular diferentes tipos de objetos sin preocuparse del Tipo. Las interfaces múltiples permiten que los programas evolucionen con el tiempo, agregando nueva funcionalidad sin afectar el código existente.

El Polimorfismo significa que muchas clases pueden proporcionar la misma propiedad o el mismo método y quien invoca no tiene porque saber la clase a la que pertenece el objeto antes de llamar a la propiedad o método, por ejemplo suponga que existe la Clase Vehículo y las clases Automovil y Motocicleta, tanto Automovil como Motocicleta tienen en común el método Mover, estos objetos posiblemente son del tipo Vehículo.

En un Lenguaje Orientado a Objetos el Polimorfismo es posible a través de la Herencia, pero en el caso de Visual Basic que no es un Lenguaje Orientado a Objetos no utiliza la Herencia para proporcionar Polimorfismo, sino que lo proporciona mediante múltiples interfaces ActiveX. Una Interfaz es un conjunto de propiedades y métodos relacionados.

Al construir el método Mover puede ser que reciba como parámetro un objeto Mover(ByVal Distancia as Object) por lo que Visual Basic compila una parte de código adicional para preguntar si el objeto incorpora el método invocado o pueder ser que el método pertenece a la interfaz Vehículo y todas sus clases de Vehículo implementan esta interfaz para enlazarlos en tiempo de diseño Mover(ByVal Distancia as Vehículo).

Clase Abstracta

Una clase Abstracta es aquella que no tiene código de implementación, el propósito de que no tenga código es proporcionar una plantilla de interfaz que pueda agregar a otras clases, de esta manera se construye después el código requerido para cumplir un objetivo.

Visual Basic no puede crear realmente una clase Abstracta, ya que una clase Abstracta es una clase a partir de la cual no puede crear objetos, pero en Visual Basic es posible crear objetos de clases que no contengan código, por lo tanto deberá tener cuidado al tratar de simular este concepto.

Para que sea posible implementar una interfaz, por ejemplo Vehículo en la clase Automovil se debe emplear la palabra reservada Implements:

 Implements Vehículo 'Esto se escribe en la clase Automovil

Lo anterior significa que se compromete a implementar los métodos y propiedades de la interfaz Vehículo, por lo que será necesario anteceder al nombre del método o propiedad el nombre de la interfaz seguido de un guión bajo (_) y del nombre del método o propiedad.

 Private Sub Vehiculo_Mover(ByVal Distancia As Double)
rem código
End Sub

Si no implementa los métodos y propiedades entonces Visual Basic marcara un error indicando que es necesario hacer la implementación de métodos y propiedades.

Es necesario declarar los métodos y propiedades de tipo Private porque si se declararán como Public formarian parte de la interfaz Automovil o Motociclea y tendrian el mismo enlace original.

Ejemplo : Método que devuelve Valor

La clase abstracta Vehiculo contiene el código:

 Option Explicit
Public Function Mover(ByVal Distancia As Double) As Double
Rem Carece de Código
End Function

La clase Automovil implementa la clase Vehiculo:

 Option Explicit
Implements Vehiculo
Private Function Vehiculo_Mover(ByVal Distancia As Double) As Double
Vehiculo_Mover = Distancia
End Function

La clase Motocicleta implementa la clase Vehiculo:

 Option Explicit
Implements Vehiculo
Private Function Vehiculo_Mover(ByVal Distancia As Double) As Double
Vehiculo_Mover = 12.34
End Function

El código del formulario contiene:

 Option Explicit
Dim MotoCross As Motocicleta
Dim Porsche As Automovil
Dim V As Vehiculo

Private Sub Form_Load()
Set MotoCross = New Motocicleta
Set V = MotoCross
MsgBox "La Motocicleta se movio : " & V.Mover(5)

Set Porsche = New Automovil
Set V = Porsche
MsgBox "El automovil se movio : " & V.Mover(10)
End Sub

Ejemplo : Implementar Propiedades

Agregue una propiedad a la clase Abstracta Vehiculo:

 Public nVelocidad As Double

Visual Basic implementa las propiedades como parejas de procedimientos de propiedad:

    Get
    Let o Set

Por lo anterior es necesario implementar ambos procedimientos en las clases que implementan la clase Vehiculo:

 Implements Vehiculo
Private nVelMoto As Double

Private Property Get Vehiculo_nVelocidad() As Double
Vehiculo_nVelocidad = nVelMoto
End Property
Private Property Let Vehiculo_nVelocidad(ByVal nArgVelocidad As Double)
nVelMoto = nArgVelocidad
End Property

¿Que devuelve el siguiente código?

    Dim Byke As Motocicleta
Dim Veh As Vehiculo
Set Byke = New Motocicleta
Set Veh = Byke
MsgBox TypeName(Veh)

Salida: Motocicleta

Devuelve Motocicleta porque al asignar Byke a Veh Visual Basic internamente evalua si Motocicleta acepta la interfaz Vehiculo si no acepta la interfaz se genera un error, si acepta la interfaz el objeto se asigna a la variable y a través de esta solo se accede a los métodos y propiedades de la interfaz Vehiculo.

Procure no hacer uso para estos casos de un objeto genérico Object pues la variable declarada de este tipo solo accede a la última interfaz asignada.

Reutilización de Código

Es posible reutilizar código mediante las formas Binario y Origen.

Binario

La reutilización de código Binario es posible mediante la creación y uso de un objeto, por ejemplo los controles. COM es otro mecanismo para la reutilización de código binario, llamado agregación, la cual utiliza una interfaz completa sin modificaciones y quien proporciona la implementación es una instancia de la clase agregada, Visual Basic no acepta esta forma de reutilización de código. Los componentes ActiveX son otro mecanismo más en la reutilización de código y en la programación orientada a objetos.

Un objeto se destruye cuando se libera la última referencia al mismo, para ello Visual Basic efectua el seguimiento de referencias a objetos para saber cuando se libera la última referencia a un objeto, lo cual no es muy fiable, lo más fiable es la información que proporciona COM cuando el recuento de referencias es o no cero, esto sucede cuando se produce un error en el evento Terminate del objeto.

Por lo anterior se recomienda:

  • Declarar variables de objeto como tipos de clases en vez de As Object
  • No utilizar el objeto Collection por si solo, ya que las referecnias se almacenan en variables Variant que al igual que las variables declaradas As Object pueden contener referecnias a objetos de cualquier clase.
  • Cree sus propias clases de colección que acepten objetos de una única clase.
  • Organice los objetos de forma jerárquica, para realizar su recorrido.
  • No declare variables As New, si utiliza una variable así después de haberla establecido a Nothing, Visual Basic crea otro objeto.

Origen

La reutilización de código fuente es posible crearlo copiando y modificando el código origen.

Is

El operador Is se utiliza para comparar si dos variables hacen referencia al mismo objeto, ejemplo:

 Dim vLbl As Variant
Set vLbl = Label1
MsgBox vLbl Is Label1

Lo anterior regresa el valor True.

Friend

Además de declarar propiedades o métodos de tipo Public o Private, es posible declararlos como Friend, de esta manera actuan como miembros Public, es decir, parecen parte de la interfaz de una Clase pero no lo son.

Al no ser parte de la interfaz de un objeto las propiedades o métodos Friend los programas que utilizan los objetos del componente no pueden tener acceso a estos, pero son visibles para todos los demás objetos del componente, por lo que permiten una comunicación interna segura.

Parent

La propiedad Parent devuelve una referencia al contenedor del objeto. Cada propiedad Parent de un objeto hijo mantiene una referencia al objeto padre, por lo que no se podrá destruir ninguno de los objetos.

Para poder eliminar las referencias es posible establecer un método de limpieza del objeto padre, el cual establezca todas las propiedades de objeto a Nothing así como también los objetos Collection.

Cuando se destruye un objeto Collection Visual Basic establece todas las referencias de objeto que contenia a Nothing.

Tenga cuidado con los objetos que se compongan de otros objetos porque de nuevo no se podrán destruir los objetos, lo cual llevaria a tener más métodos de limpieza al nivel de los hijos.



Directorio de Blogs de México
Leer más...

Lectura de archivos de Access

El siguiente código muestra como leer un archivo Access, tenga en cuenta lo siguiente:

  1. Nombre del archivo Access : NWIND.MDB
  2. El archivo NWIND.MDB se encuentra localizado en el mismo directorio de la aplicación
  3. Es necesario crear una Referencia para hacer uso de los objetos Connection y Recordset
    • Seleccionar del menú principal Project » References
    • Seleccionar Microsoft ActiveX Data Objects 2.0 Library
  4. Los controles a utilizar son:
    • TextBox txtProductId
    • TextBox txtProductName
    • TextBox txtUnitPrice
    • CommandButton cmdConectar
    • CommandButton cmdConsulta
    • CommandButton cmdFirst
    • CommandButton cmdAnterior
    • CommandButton cmdSiguiente
    • CommandButton cmdLast
    • StatusBar sbMsg
   Option Explicit
Dim conexion As Connection
Dim rsConexion As Recordset

Private Sub cmdConectar_Click()
On Error GoTo miManejadorErr
Set conexion = New Connection
conexion.Provider = "Microsoft.Jet.OLEDB.4.0"
conexion.ConnectionString = "Data Source = NWIND.MDB"
conexion.CursorLocation = adUseClient
conexion.Open
sbMsg.SimpleText = "Conectado a la fuente de datos"
miManejadorErr:
If Err.Number > 0 Then
Dim strErr
strErr = strErr & "Description : " & Err.Description & Chr(13)
strErr = strErr & "HelpContext : " & Err.HelpContext & Chr(13)
strErr = strErr & "Number : " & Err.Number & Chr(13)
strErr = strErr & "Source : " & Err.Source & Chr(13)
sbMsg.SimpleText = strErr
Resume Next
End If
End Sub

Private Sub cmdConsulta_Click()
On Error GoTo miManejadorErr
Dim comProd As Command
Set comProd = New Command
comProd.ActiveConnection = conexion
comProd.CommandText = "Select * from Products"
Set rsConexion = comProd.Execute
txtProductId.Text = rsConexion!productid
txtProductName.Text = rsConexion!ProductName
txtUnitPrice.Text = rsConexion!UnitPrice
sbMsg.SimpleText = "Consultando..."

miManejadorErr:
If Err.Number > 0 Then
Dim strErr
strErr = strErr & "Description : " & Err.Description & Chr(13)
strErr = strErr & "HelpContext : " & Err.HelpContext & Chr(13)
strErr = strErr & "Number : " & Err.Number & Chr(13)
strErr = strErr & "Source : " & Err.Source & Chr(13)
MsgBox strErr
Resume Next
End If
End Sub

Private Sub cmdDesconectar_Click()
On Error GoTo miManejadorErr
conexion.Close
Set conexion = Nothing
sbMsg.SimpleText = "Desconectado de la fuente de datos"
miManejadorErr:
If Err.Number > 0 Then
Dim strErr
strErr = strErr & "Description : " & Err.Description & Chr(13)
strErr = strErr & "HelpContext : " & Err.HelpContext & Chr(13)
strErr = strErr & "Number : " & Err.Number & Chr(13)
strErr = strErr & "Source : " & Err.Source & Chr(13)
MsgBox strErr
Resume Next
End If
End Sub

Private Sub cmdAnterior_Click()
If rsConexion.AbsolutePosition = 1 Then
sbMsg.SimpleText = "No hay registros anteriores"
Else
rsConexion.MovePrevious
txtProductId.Text = rsConexion!productid
txtProductName.Text = rsConexion!ProductName
txtUnitPrice.Text = rsConexion!UnitPrice
sbMsg.SimpleText = "Registro número : " & rsConexion.AbsolutePosition
End If
End Sub
Private Sub cmdFirst_Click()
rsConexion.MoveFirst
txtProductId.Text = rsConexion!productid
txtProductName.Text = rsConexion!ProductName
txtUnitPrice.Text = rsConexion!UnitPrice
End Sub
Private Sub cmdLast_Click()
rsConexion.MoveLast
txtProductId.Text = rsConexion!productid
txtProductName.Text = rsConexion!ProductName
txtUnitPrice.Text = rsConexion!UnitPrice
End Sub

Private Sub cmdSiguiente_Click()
If rsConexion.AbsolutePosition = rsConexion.RecordCount Then
sbMsg.SimpleText = "No hay más registros"
Else
rsConexion.MoveNext
txtProductId.Text = rsConexion!productid
txtProductName.Text = rsConexion!ProductName
txtUnitPrice.Text = rsConexion!UnitPrice
End If
End Sub

Directorio Web
Mitote.com.mx :: Directorio web
Leer más...

Controles ActiveX

Crear una interface de usuario para un control ActiveX es similar a crear una forma estándar Visual Basic, se colocan los controles necesarios y se provee el código que define su comportamiento.

Controles

Los Controles son objetos reutilizables que incluyen elementos visuales y código, con Visual Basic es posible crear formas y cajas de diálogo. Los Controles deben ser colocados en algún tipo de contenedor como una forma o una aplicación.

Clases de Controles

Un control creado en Visual Basic es conocido como Control Class, el cual actua como una plantilla para el control. El Control Class es compilado dentro de un archivo .ocx, para utilizar el control en una aplicación, se coloca el control en la forma, la cual crea una instancia en tiempo de diseño del control, cuando el usuario ejecuta la aplicación que contiene el control, el usuario obtiene una instancia en tiempo de ejecución del control.

Archivos de Proyecto

El código fuente y los valores de las propiedades para un control class son almacenados en un archivo de texto con extensión .ctl. Un archivo .ctl es equivalente a un archivo Visual Basic .frm que es utilizado para almacenar los elementos gráficos en las formas.

Un Visual Basic ActiveX control project puede contener uno o más archivos .ctl cada uno de los cuales define un control class separado, cuando se compila un control project es creado un archivo .ocx que contiene todos los controles del proyecto.

Un control ActiveX incluye un objeto UserControl y constituent controls

Pasos para crear un ActiveX Control

  1. Crear un ActiveX Control project
  2. Crear la interfaz de usuario para el control
  3. Crear las propiedades y métodos para el control
  4. Crear los procedimientos de eventos que constituyen el control
  5. Exponer eventos del control
  6. Crear páginas de propiedades para el control
  7. Probar y buscar errores en el control

El objeto UserControl

El objeto UserControl es el fundamento para contruir controles. Cada ActiveX control que es creado con Visual Basic contiene un objeto UserControl

El objeto UserControl contiene modulos de código y visual designers, cuando se abre un UserControl en modo diseño el objeto es desplegado en una ventana visual designer, es posible utilizar el visual designer para colocar constituent controls en el objeto UserControl tal y como se haria en una forma Visual Basic.

Constituent Controls

Un Constituent Controls es una isntancia de un control que se coloca en un objeto UserControl, cuando se coloca un ActiveX en una forma, una instancia del objeto UserControl es creada, junto con las instancias de cualquier Constituent Controls colocado en el objeto UserControl.

Eventos UserControl

Un control ActiveX es un cliente que se ejecuta en una forma o en algún otro tipo de contenedor, por lo tanto sus eventos se comportan un tanto diferentes que los eventos de control de un proyecto .exe estándar.

Al crear un control el objeto UserControl actua como un anteproyecto para colocar el control en una forma o en otro contenedor, se utiliza este anteproyecto para crear una instancia del control, cuando el control es creado una serie de eventos de control ocurren.

Evento AmbientChanged

El evento AmbientChanged ocurre cuando una propiedad de ambiente cambia. Para habilitar al control para responder a cualquier cambio a las propiedades de ambiente del contenedor en tiempo de diseño, se coloca el código en el evento AmbientChanged, este evento tiene un argumento PropertyName que identifica cual de las propiedades cambio.

Objeto Ambient

El objeto Ambient permite leer los valores de las propiedades de ambiente.

La Propiedad Enabled

La propiedad Enabled es otra propiedad de ambiente a considerar al diseñar el control. Para el soporte correcto de esta propiedad es necesario escribir los procedimientos Get y Let para la propiedad Enabled que delegan la disponibilidad del control para el objeto UserControl.

Características de los Controles

Visual Basic provee varias propiedades y un evento que son posibles utilizar para administrar la apariencia del control, por ejemplo es posible establecer el valor de la propiedad BackStyle del objeto UserControl para hacer transparente un control, sólo debe tenerse en cuenta que esto puede afectar el desempeño del control, también por ejemplo la mayoria de los controles tienen una interfaz de usuario visible aunque es posible crear un control que sea invisible en tiempo de ejecución para ello se establece la propiedad InvisibleAtRuntime del objeto UserControl.

Para evitar desajustes en tamaño de los controles estos deben responder al evento Resize para que trabaje en conjunto con la aplicación contenedora, también será necesario proveer un manejador de errores para el evento.

Los controles ActiveX pueden tener una propiedad llamada About que puede ser utilizada de manera informativa, como el nombre de la empresa que creo el control, derechos de autor, fecha de creación, etc.

Para mostrar un bitmap personalizado en el Visual Basic Control Toolbox, se utiliza la propiedad ToolboxBitmap del objeto UserControl, el bitmap debe tener un tamaño de 16 por 15 pixeles, si utiliza otro tamaño será escalado a este tamaño.

Visual Basic incluye un Wizard para crear un control y permite especificar que propiedades, métodos y eventos que podrían constituir la definición de la interfaz del control, para utilizarlo seleccione del menú principal:

Add-Ins » Add-In Manager » VB 6 ActiveX Ctrl Interface Wizard » Loaded/Unloaded

Crear un Control ActiveX

  1. Crear un nuevo proyecto, seleccionar ActiveX control
  2. Cambiar el nombre del ActiveX a un nombre descriptivo con el prefijo ctl
  3. Colocar controles y escribir el código necesario
  4. Debbuging test, seleccionando la opción Use existing browser
  5. Agregar un proyecto Standard EXE
  6. Seleccionar del menú principal Window » NombreProyecto - NombreActiveX(UserControl)

    Se agrega un icono del control en el contenedor General

  7. Seleccione el control ActiveX creado de General y coloquelo en la forma
  8. Seleccione el proyecto Standard EXE de la ventana Proyect Explorer, dar clic al botón derecho del mouse y seleccionar la opción Set as Start Up
Leer más...

Class module o Módulo de clase

Un Módulo de Clase es un tipo de código-módulo Visual Basic, su extensión es .cls y es similar a un módulo standard en cuanto a que contiene funcionalidad que puede ser utilizada por otros módulos dentro de la aplicación. La diferencia principal es que un módulo de clase provee la funcionalidad en la forma de un objeto, cada módulo de clase define un tipo de objeto, por lo que puede existir más de un módulo de clase en una aplicación.

Para utilizar un módulo de clase en la aplicación, es necesario crear una instancia de la clase, para acceder a las propiedades, métodos y eventos del objeto definido en la clase.

 Dim miCasa As Casa 'declaracion de la variable tipo Casa
Set miCasa = New Casa 'instancia

Es posible crear un módulo de clase y agregar métodos, propiedades y eventos manualmente:

   Dim empleado As Persona

Set empleado = New Persona
empleado.edad = 33
empleado.estado = True
empleado.nombre = "Gerardo"

También es posible utilizar el Class Builder Add-In para automatizar el proceso de agregar métodos, propiedades y eventos a una clase.

Si se definen las variables como Private sólo son visibles para el módulo de clase en sí.

Es posible crear propiedades por default para un objeto, estas propiedades son las que se establecen si el usuario no provee el valor de la propiedad cuando trabaja con el objeto.

Para crear un método, se crea un procedimiento o función dentro del módulo de clase:

   Public Function nombre_Funcion(parámetros) As tipoDato
'instrucciones
nombre_Funcion = valorRegreso
End Function

Para crear un evento se siguen dos pasos:

  1. Declarar el evento en la sección de declaraciones generales (General Declarations) de un módulo de clase.

    Public Event nombre_Evento(parametros)

  2. Levantar el evento, es decir, cuando se desea que el evento ocurra se utiliza la sentencia RaiseEvent y pasar el nombre del evento y cualquier argumento que el evento utilice.
     Public Sub nombreMetodo()
    RaiseEvent nombre_Evento(argumentos)
    End Sub

Es posible disparar mensajes de error al crear módulos de clase, para ello se utiliza el método Raise del objeto Err:

ERR.Raise Numero, fuente, descripción, archivoAyuda, contextoAyuda

Una vez que se termina de trabajar con la clase es conveniente liberar los recursos que la clase utilizo a través del empleo de la sentencia Nothing:

Set nombreIntanciaClase = Nothing

Class Builder Add-In

Seleccione del menú principal:

  • Add-Ins » Add-In Manager
  • VB 6 Class Builder Utility
  • Load Behavior » Loaded/Unloaded

Una vez cargado Class Builder, seleccione de nuevo del menú principal:

  • Add-Ins » Class Builder

La accion anterior abre la ventana Class Builder donde es posible definir las propiedades, métodos y eventos de la clase.

Los módulos de clase tienen dos eventos built-in:

  1. Initialize, ocurre cuando una instancia de una clase es creada pero antes de la inicialización de cualquier propiedad. Utilice este evento para inicializar culquier dato utilizado por la clase.
  2. Terminate, ocurre cuando la variable objeto está fuera del ámbito o se establece con el valor Nothing. Utilice este evento para almacenar información, descargar formas o realizar tareas que deban ocurrir cuando la clase termina.

Para indicar que una propiedad es la propiedad por default estando activa la ventana de Clase se puede hacer a través del Class Builder o seleccionar del menú principal:

  • Tools » Procedure Attributes » Advanced
  • Seleccionar la propiedad a establecer como propiedad por default
  • Seleccionar de la lista Procedure ID
  • el valor (Default)

Por ejemplo es posible crear un módulo de clase el cual es un objeto de fuente de datos:

  1. Seleccionar del menú principal Project » Add Class Module
  2. Cambiar el nombre del módulo de clase por un nombre descriptivo
  3. Cambiar la propiedad DataSourceBehavior al valor 1 - vbDataSource
  4. Seleccionar del menú principal Project » References
  5. Seleccionar Microsoft ActiveX Data Objects 2.0 Library
  6. En la sección General Declarations del módulo de clase definir:
    • Una variable tipo Connection
    • Una variable tipo Recordset
    •  Option Explicit
      Private cnProducts As Connection
      Private rsProducts As Recordset
    • Escribir el siguiente código para el evento Initialize:
       Private Sub Class_Initialize()
      Set cnProducts = New Connection
      Set rsProducts = New Recordset
      cnProducts.Provider = "Microsoft.Jet.OLEDB.4.0"
      cnProducts.Open "Data Source=NWIND.MDB"
      rsProducts.Open "SELECT * FROM Products", cnProducts, adOpenStatic
      End Sub
    • Escribir el siguiente código para el evento GetDataMemeber:
       Private Sub Class_GetDataMember(DataMember As String, Data As Object)
      Set Data = rsProducts
      End Sub

    --- Agregar la funcionalidad de la clase (métodos) ---

    • Método para moverse al registro siguiente:
       Sub registroSiguiente()
      rsProducts.MoveNext
      End Sub
    • Método para moverse al registro anterior:
       Sub registroAnterior()
      rsProducts.MovePrevious
      End Sub
  7. Agregar a la forma un TextBox y un CommandButton (txtProduct, cmdObtenerDatos)
  8. Seleccionar del menún principal Project » References
  9. Seleccionar Microsoft ActiveX Data Binding Collection
  10. En la sección General Declarations de la forma definir:
    • Una variable del tipo de la clase creada CProducts
    • Una variable tipo BindingCollection
    •  Option Explicit
      Dim clProducts As CProducts
      Dim bcProducts As BindingCollection
    • Agregar el siguiente código para el botón cmdObtenerDatos:
       Private Sub cmdObtenerDatos_Click()
      Set clProducts = New CProducts
      Set bcProducts = New BindingCollection
      Set bcProducts.DataSource = clProducts
      bcProducts.Add txtProduct, "Text", "ProductName"
      bcProducts.Add frmProducts, "Caption", "ProductID"
      End Sub
  11. Agregar a la forma dos CommandButton (cmdRegistroSiguiente, cmdRegistroanterior):
    • Para el código del boton cmdRegistroAnterior escribir:
       Private Sub cmdRegistroAnterior_Click()
      clProducts.RegistroAnterior
      End Sub
    • Para el código del boton cmdRegistroSiguiente escribir:
       Private Sub cmdRegistroSiguiente_Click()
      clProducts.RegistroSiguiente
      End Sub
Leer más...

Data environment y data report designer

Data Environment

Otra manera de trabajar con ADO es a través del Data Environment, el cual nos pertmite configurar la conexión a la fuente de datos para ello debe seleccionar del menú principal:

Project » Add Data Environment

Lo anterior abre una ventana donde aparece un DataEnvironment1 con un Connection1. Si le da un clic a Connection1 es posible cambiarle el nombre, si selecciona Connection1 y da clic al botón derecho del mouse aparece un popUp menú donde puede seleccionar Properties, esta acción abre una ventana de configuración del vínculo de datos, dividida por 4 secciones:

  1. Proveedor, donde debe seleccionar un OLE DB provider, al dar clic en siguiente continua en la sección 2
  2. Conexión, donde debe proporcionar los datos de conexión a la fuente de datos. Se recomienda dar clic al botón [Probar Conexión] en caso de no existir errores mostrara el mensaje "La Prueba de conexión fue satisfactoria". (Implementación de un Control de Datos ADO).
  3. Avanzadas, donde se configura la red.
  4. Todas, muestra las propiedades del vínculo de datos establecidas.

El Data Environment se agrega como un objeto en la jerarquía de proyectos en el directorio Designers de la ventana de exploración de proyecto, para utilizarlo de doble clic sobre el Data Environment y se mostrara su ventana.

Una vez agregado un Data Environment es posible ver la estructura de una base de datos (tablas, campos, vistas) a través del Data View Window, para ello se debe seleccionar del menú principal:

View » Data View Window y expandir los niveles de información deseados.

Data Report Designer

Microsoft Data Report designer es un generador versatil de reportes de datos, se utiliza en conjunto con una fuente de datos (Data Environment) y es posible crear reportes de distintas tablas, así como imprimir y exportar el reporte a una variedad de formatos.

Para utilizar un Data Report seleccione del menú principal:

  • Project » Add Data Report

    (Si no se presenta la opción Add Data Report abra la ventana de componentes y de clic en Designers y seleccione Add Data Report).

  • Agrege desde Data View Window los campos al reporte.
  • Establezca el valor de la propiedad DataSource con el nombre del objeto Data Environment a utilizar.
  • Establezca el valor de la propiedad DataMember con el nombre del objeto Command a utilizar.

Es posible dar clic al botón derecho del mouse y seleccionar por ejemplo Insert Control » Current page number para insertar en el reporte el número de página correspondiente.

Para presentar el reporte utilice la propiedad Show del objeto Data Report creado:

nombre_DataReport.Show

Leer más...

ADO Programaticamente

Si se trabaja con ADO programaticamente se utilizan principalmente 3 objetos ADO:

  1. Connection, se utiliza para crear una conexión a la fuente de datos.
  2. Command, se utiliza para regresar datos de una conexión. Los objetos Command pueden también manipular datos en una fuente de datos o invocar un stored procedure.

    A través de este objeto se definen los datos que se necesitan obtener de una conexión.

    Para agregar un command abra el objeto Data Environment, seleccione la conexión, de clic al botón derecho del mouse y seleccione Add Command, después seleccione el objeto agregado command, de clic al botón derecho del mouse y seleccione Properties donde deberá establacer la configuración correspondiente, por ejemplo seleccionar si es un strored procedure o una sentencia SQL para lo cual es de gran ayuda dar clic al botón [SQL Builder...] el cual ayuda a la construcción de la sentencia SQL.

    Acceder al resultado de un command

    Es posible seleccionar los objetos del Data Wiew Window por ejemplo seleccionar el objeto command y arrastrarlo a la forma con lo cual Visual Basic agrega los campos necesarios a la forma.

  3. Recordset, es utilizado para almacenar el resultado de una consulta a la fuente de datos.

    Para acceder a los registros obtenidos por un objeto command se utiliza el objeto Recordset:

    nombre_ObjetoDataEnvironment.rsNombreObjetoCommand

    Note que el recordset es una propiedad del objeto command creado, y su nombre se compone del prefijo rs seguido del nombre del objeto command, a su vez un recordset tiene propiedades, eventos y métodos.


venta piso
Leer más...

viernes, 22 de agosto de 2008

Enumeración

Enum

Una enumeración es un conjunto de constantes asociadas a valores númericos (Long). Para declarar una enumeración se utiliza la palabra reservada Enum y puede ser de tipo Private o Public.

La primer constante de una enumeración inicia con el valor 0, pero es posible asignar valores explícitamente a las constantes.

 Public Enum Calificacion
MB = 10
B = 8
S = 6
NA = 5
NP = 0
End Enum
Leer más...

Type

TypeOf

Compara el tipo de dato de un valor contra un objeto y regresa un valor booleano.

Por lo regular se aplica en intrucciones If - Then - Else

    Dim o As Object
Set o = New Collection
MsgBox TypeOf o Is Object

Regresa: True|Verdadero

TypeName

Regresa un string que contiene el nombre del tipo de dato del valor evaluado

    Dim o As Object
Set o = New Collection
MsgBox TypeName(o)

Regresa: "Collection"

Leer más...

Distribución de una aplicación

Una vez puesta a punto y finalizada la aplicación será necesario distribuirla al usuario o usuarios mediante un programa de instalación que realice tareas como:

  • Copiar todos los archivos necesarios para ejecutar la aplicación
  • Crear la estructura de directorios que contendrán los archivos necesarios para ejecutar la aplicación
  • Registrar archivos
  • Crear un menú de inicio o grupo
  • Crear un icono en el escritorio del usuario

Visual Basic puede hacer esto por nosotros para ello es necesario seguir 2 pasos:

  1. Packaging, será necesario empaquetar los archivos que requiere la aplicación en 1 o más archivos .cab (cabinet file) y que puedan ser colocados en la ubicación deseada, también será necesario crear los programas de instalación para ciertos tipos de empaquetamientos. Un archivo con extesión .cab es un archivo comprimido.
  2. Deployment, será necesario poner la aplicación empaquetada en un medio de almacenamiento para que los usuario puedan instalarla lo cual significa por ejemplo copiar el paquete a un disco, una ubicación de red o sitio web.

Visual Basic provee 2 herramientas necesarias para realizar lo anterior:

  1. Package and Deployment Wiward, automatiza varios de los pasos involucrados en la distribución de aplicaciones y proporciona varias opciones de la forma en la que se desea configurar los archivos .cab.
  2. Setup Toolkit, permite personalizar algunas de las cosas que ocurren durante el proceso de intalación.

Existen 3 formas de iniciar el Package and Deployment Wiward:

  1. Ejecutarlo desde Visual Basic como un add-in
  2. Ejecutarlo como un componente stand-alone fuera del ambiente de desarrollo
  3. Ejecutarlo en modo silencioso utilizando el Package and Deployment Wiward desde Visual Basic como un Add-in

Para utilizar el Package and Deployment Wiward desde Visual Basic, primero es necesario cargarlo desde el Add-In Manager:

Menú Add-ins » Add-In Manager » Package and Deployment Wiward » Loaded/Unloaded » OK

Una vez cargado el Package and Deployment Wiward será necesario empaquetar la aplicación.

Empaquetar una Aplicación

Empaquetar una aplicación es el acto de crear un paquete que puede instalar una aplicación en una máquina.

Un paquete consiste de archivos .cab o archivos que contienen el proyecto comprimido y otros archivos necesarios para instalar y ejecutar la aplicación. Estos archivos pueden contener un programa de instalación, archivos secundarios .cab o otros archivos necesarios.

Es posible crea dos tipos de paquetes: standard packages o Internet packages, por ejemplo si se planea distribuir la aplicación sobre un medio de almacenamiento será necesario crear standard packages para la aplicación, pero si planea distribuir la aplicación via un sitio intranet o internet se debería crear Internet packages.

Pasos para crear standard packages:

  1. Abir el proyecto a empaquetar utilizando el wizard
  2. Seleccionar del menú principal Run» Start with full compile
  3. Seleccionar del menú principal File » Make (para generar archivo .exe)
  4. Menú Add-ins » Add-In Manager » Package and Deployment Wiward » Loaded/Unloaded » OK

    Esta acción agrega la opción Package and Deployment Wizard al menú Add-Ins

  5. Seleccionar del menú principal Add-Ins » Package and Deployment Wizard
  6. En la pantalla principal clic en Package
  7. Selecionar el tipo de paquete como Standard Setup Package » Next
  8. Seleccionar el directorio donde el paquete podría ser ensamblado » Next
  9. Se indica seleccionar los archivos a incluir como parte de la aplicación » Next
  10. Seleccionar entre Single Cab o Multiple cabs (para generar un sólo archivo .cab o varios) » Next
  11. Proporcionar el título para ser desplegado cuando el programa de instalación se ejecute » Next
  12. Seleccionar la estructura del grupo de menú Start y sus elementos los cuales podrían ser creados por el proceso de instalación » Next
  13. Modificar en caso necesario cualquier ubicación de archivos » Next
  14. Seleccionar cualquier archivo que se desee instalar como compartido en caso de que sean utilizados por más de un programa » Next
  15. Proporcione el nombre del archivo bajo el cual se almacenara la configuración de la sesión actual
  16. Seleccione Finish para crear el paquete (se crea un reporte de empaquetamiento el cual puede ser almacenado para futuras referencias)
Leer más...

Objetos

Es posible crear y trabajar con varios tipo de objetos como: controls, forms, menus y objetos genericos en Visual Basic Integrated Development Environment (IDE), por ejemplo:

   Dim frmMiForma As Form
Dim txtMiCajaTexto As TextBox
Dim lblMiEtiqueta As Label
Dim ctlGenerico As Control

Para asociar una variable tipo objeto con un control particular se utiliza la sentencia Set:

Set txtMiCajaTexto = frmAltaEmpleados.txtNombre

Una vez realizada la asignación, es posible utilizar la variable como un Alias para el nombre del control.

txtMiCajaTexto.Text = "Hello World!"

También es posible utilizar una variable tipo objeto generico, la cual puede asumir el valor de cualquier tipo de objeto:

   Dim oGenerico As Object
Set oGenerico = txtNombre
oGenerico.Text = "Rebeca"
Set oGenerico = New frmAltaEmpleado 'el objeto es una nueva instancia de una forma
oGenerico.Show
oGenerico.Nothing 'Se destruye el objeto

Suponga que tiene varios controles del mismo tipo y dada cierta acción es necesario establecer ciertas propiedades de estos controles, hacerlo control a control puede ser una tarea poco eficiente pensando en que es posible automatizarla, por lo que Visual Basic permite trabajar con arreglos de objetos, para ello primero declare un arreglo del tipo que sean sus controles:

Dim aBotones(5) As CommandButton

Después inicialice el arreglo:

   Set aBotones(1) = cmdAlta
Set aBotones(2) = cmdBaja
Set aBotones(3) = cmdCambio
Set aBotones(4) = cmdConsulta
Set aBotones(5) = cmdSalir

Por último automatice el estado de sus controles:

   Dim i As Integer
For i = 1 To 5
aBotones(i).Enabled = False
Next
Leer más...

Colecciones

Una Colección es un conjunto ordenado de elementos que pueden ser referenciados como una unidad.

Un objeto Collection provee una forma conveniente para referir un grupo relacionado de elementos como un simple objeto. Los elementos o miembros en una colección sólo necesitan estar relacionados por el hecho de que existen en la colección, pero no necesitan compartir el mismo tipo de dato.

El objeto Collection tiene las siguiente propiedades y métodos:

* Add, agrega un elemento a la colección
* Count, regresa el número de elementos en la colección. Sólo lectura.
* Item, regresa un elemento por índice o por llave
* Remove, borra un elemento de la colección por íncide o por llave

Key es un valor de tipo string, se utiliza el método Add para asociar una llave con un elemento

Index es un valor long entre 1 y el número de elementos en la colección.

A diferencia de un arreglo las colecciones comienzan en el índice número 1 y cada vez que se emplea el método Remove() se actualiza el índice de las colecciones, así como su propiedad Count.

Dim colColores As New Collection

Private Sub crearColeccion_Click()
colColores.Add "rojo"
colColores.Add "Amarillo"
colColores.Add "blanco"
colColores.Add "azul"
colColores.Add "verde"
colColores.Add "negro"
End Sub

Private Sub mostrarElementosColeccion_Click()
Dim sTmp
Dim i
If colColores.Count Then
For i = 1 To (colColores.Count)
sTmp = sTmp & i & " : " & colColores.Item(i) & Chr(13)
Next
MsgBox sTmp
Else
MsgBox "Primero de clic en [Crear Colección]" 'crearColeccion_Click()
End If
End Sub

Private Sub eliminarPrimerElementoColeccion_Click()
If colColores.Count Then
MsgBox "Se elimino el elemento : " & colColores(1)
colColores.Remove (1)
Else
MsgBox "La colección no tiene elementos"
End If
End Sub

Vueling
Leer más...

Eventos del mouse

Existen 3 tipos de eventos del mouse en Visual Basic

  1. MouseDown, ocurre cuando el usuario da clic a cualquier botón del mouse.
  2. MouseUp, ocurre cuando el usuario libera cualquier botón del mouse.
  3. MouseMove, ocurre cuando el usuario mueve el mouse.

Cada uno de los eventos anteriores reciben 4 parámetros:

  1. button, regresa un valor que permite identificar a que botón se le dio clic: vbLeftButton, vbRightButton, vbMiddleButton
  2. shift, regresa un valor que permite identificar que tecla o teclas se mantienen presionadas: vbShiftMask = SHIFT, vbCtrlMask = CTRL, vbAlttMask = ALT, posibles combinaciones CTRL + SHIFT = (2+1) = 3
  3. x, regresa la posición actual X, relativa a la esquina superior izquierda
  4. y, regresa la posición actual Y, relativa a la esquina superior izquierda
   Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
sbMouse.SimpleText = "Coordenadas del Mouse (" + CStr(X) + ", " + CStr(X) + ")"
End Sub

Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = vbRightButton Then
DatosUsuario.PopupMenu mnuOtro
End If
Dim Msg
Select Case Button
Case vbRightButton
Msg = "Botón derecho liberado"
Case vbMiddleButton
Msg = "Botón medio liberado"
Case vbLeftButton
Msg = "Botón izquierdo liberado"
End Select
Select Case Shift
Case vbShiftMask
Msg = Msg & " + Shift"
Case vbCtrlMask
Msg = Msg & " + Ctrl"
Case vbAltMask
Msg = Msg & " + Alt"
Case vbShiftMask + vbAltMask
Msg = Msg & " + Shift + Alt"
End Select
sbMouse.SimpleText = Msg
End Sub
Leer más...

Drag and Drop

Dragging, acción de mantener presionado un botón (down) del mouse.

Dropping, acción de liberar un botón (up) del mouse.

Existen 2 tipos de drag y drop:

  1. Drag/Drop dentro de una aplicación, seleccionar y mover objetos dentro de una misma aplicación
  2. Drag/Drop entre aplicaciones, seleccionar y mover objetos de una aplicación a aplicación

Propiedad DragMode

La propiedad DragMode puede establecerse en tiempo de diseño o de ejecución si se da el valor vbAutomatic a está propiedad el usuario puede mover el control en cualquier momento, Visual Basic despliega un recuadro del control cuando este comienza a moverse.

duke.DragMode = vbAutomatic

Cuando se establece esta propiedad en modo automático, el control no recibe eventos del mouse como el evento Click.

También es posible establecer esta propiedad en modo manual dandole el valor vbManual que es el valor por default de la propiedad.

El siguiente código muestra como se indica iniciar el drag (vbBeginDrag) de un control:

   Private Sub nombrePictureBox_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
nombrePictureBox.Drag vbBeginDrag
End Sub

El siguiente código muestra como se indica finalizar el drag (vbEndDrag) de un control:

   Private Sub nombrePictureBox_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
nombrePictureBox.Drag vbEndDrag
End Sub

Cuando el usuario libera el botón del mouse mientras mueve un objeto el drag para, pero el control no mueve de manera automática el objeto a la nueva posición, ya que es necesario escribir el código para el movimiento del control.

Establecer el valor de la propiedad DragMode o invocar el método Drag solamente habilita un control para ser movido, es necesario determinar que podría pasarle al control cuando se termine de mover.

Antes de escribir el código para mover un control, primero es necesario identificar la fuente (source) que es el control que comienza a ser movido por el usuario y el destino (target) que es la forma o control que puede recibir el control que es movido.

Evento DragDrop

El evento DragDrop provee 3 parámetros:

  1. source, se refiere al control que es liberado
  2. X, regresa la ubicación X en la que el control es liberado
  3. Y, regresa la ubicación Y en la que el control es liberado
   Private Sub Form_DragDrop(Source As Control, X As Single, Y As Single)
Source.Move X, Y
End Sub

Propiedad DragIcon

Por default Visual Basic despliega un contorno del control fuente cuando un usuario mueve un control, es posible cambiar esta imagen a través de la propiedad DragIcon del control fuente:

nombrePictureBox.DragIcon = LoadPicture("nombreImagen.ico")

Leer más...

Tool Bar

Usualmente un ToolBar son botones representados por un icono el cual ejecuta una función de la aplicación.

Para representar un ToolBar a través de un icono primero se debe asociar este a un control ImageList.

Un control ImageList contiene una colección de ListImages que contienen objetos picture, cada uno puede ser referenciado por su índice o llave.

Para construir un ImageList:

  1. Agregue un control ImageList a la forma
  2. Seleccione el control y de clic al botón derecho del mouse para seleccionar Propiedades
  3. Seleccione General Tab, seleccione el tamaño de la imagen
  4. Seleccione Images Tab, de clic en Insert Picture, para insertar el número deseado de imagenes dentro del control ImageList, por último clic en [OK].

Para crear un ToolBar:

  1. Agregue un control TollBar
  2. despliegue las propiedades del control
  3. Seleccione General Tab para establecer que el valor de la propiedad ImageList sea igual al nombre del control ImageList al cual se desea asociar
  4. Seleccione Buttons Tab de clic al botón [Insert Button] para agregar nuevos botones
  5. Asigne las propiedades:
    • Key, regresa o establece un string que identifica de manera única a un miembro en una colección
    • ToolTipText, regresa o establece un tool tip (ayuda contextual)
    • Image, regresa o establece un valor que especifica cual de los objetos ImageList en un control ImageList se utilizará con otro objeto.

El control Toolbar contiene una colección de objetos botones los cuales comparten un evento Click, es posible determinar que botón se activo evaluando su propiedad Key de un objeto Button dentro del procedimiento de eventos Buttonclick.

   Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)
Select Case Button.Key
Case "almacenar"
'instrucciones
Case "abrir"
'instrucciones
Case "ayuda"
'instrucciones
Case "salir"
'instrucciones
End Select
End Sub
Leer más...

Barra de estado

El control Status Bar es utilizado para desplegar información de varios tipos de manera discreta o poco llamativa en un área localizada por lo común en la parte inferior de la forma (por default su alineación es vbAlignBottom).

El control Status Bar también puede desplegar y actualizar información de manera automática, por ejemplo:

  • Estado de las teclas CAPS LOCK, NUM LOCK, INSERT y SCROLL LOCK
  • Tiempo
  • Fecha

Además puede contener texto y bitmaps, se pueden desplegar mensajes de la aplicación en la barra de estado utilizando la propiedad Text.

Para agregar una barra de estado seleccione:

Del menú principal Project » Components » Microsoft Windows Common Controls 6.0

Dibuje un control Status Bar en la forma, seleccionelo y de clic al botón derecho del mouse para seleccionar la opción propiedades

El control Status Bar puede dividirse en paneles los cuales pueden ser referenciados por el índice que se les asigna de manera automática o en vez del índice numérico es posible escribir un nombre que lo identifique y que se utilizará para referenciar al panel, ejemplo:

nombreStatusBar.Panels(1).Text = "cadena de texto"

nombreStatusBar.Panels("nombreDescriptivo").Text = "cadena de texto"

Si la barra de estado sólo contendrá un panel se recomienda establecer su propiedad Style con el valor sbrSimple, para poder desplegar texto se utiliza la propiedad SimpleText:

nombreStatusBar.SimpleText = "cadena de texto"

Leer más...

Menús

Un menú consiste de varios elementos relacionados, algunos de los cuales son más visibles que otros, los elementos de un menú son:

  • Menu Bar, es una barra de herramientas especial en la parte superior de la pantalla, la cual contien las opciones que integra un menú, este elemento no se puede ocultar, pero es posible agregar o borrar opciones, en otras palabras es el menú principal.
  • Menu, contiene la lista de comandos que aparecen cuando se da clic a una opción del Menu Bar, en otras palabras es un submenú-principal.
  • Menu Item, tambien llamado command, hace referencia a una de las opciones listadas en un menú, cada menú debería contener al menos un command, en otras palabras son las opciones que integran un menú.
  • Submenu, un submenu o menú en cascada, es un menú que bifurca en otras opciones al seleccionar un item menu que contiene una flecha que apunta hacia abajo que indica que un nuevo menú podría aparecer cuando el usuario selecciona ese command.
  • Pop-Up Menu, es un menú sensitivo al contexto que tipicamente aparece cuando se da clic al botón derecho del mouse, este menú contiene comandos que son asociados con el objeto al que se dio clic.

    Existen 2 tipos de menús Pop-Up:

    1. System
    2. Custom

    Para crear un menú Pop-Up, se crea de igual forma a través del Menu Editor pero se selecciona la opción Visible para indicar que no estará visible, una vez creado el menú Pop-Up se invoca vía código:

     If Button = vbRightButton Then
    nombreForma.PopupMenu mnuNombreMenuPopUp
    End If

Visual Basic posee un editor para crear menús, para utilizarlo seleccione:

Del menú principal Tools » Menu Editor

Cuando este creando menús y requiera de un shortcut para indicar que la opción tiene esta capacidad antes de la letra que señala el shortcut escriba un ampersand (&).

Leer más...

Más sobre errores

Run-Time Errors: Errores en Tiempo de Ejecución

Run-Time Errors, aquellos errores imprevistos que ocurren durante la ejecución de una aplicación, por ejemplo si el usuario olvido insertar el medio de almacenamiento en la unidad lectora o si selecciona una entrada de archivo inválida.

Es posible prevenir estos errores en tiempo de ejecución a través de manejadores de errores que atrapan o interceptan errores y pueden corregir el problema, esperar una respuesta por parte del usuario que solucione el error o almacenar los datos antes de terminar la aplicación, los errores que pueden ser controlados son llamados Trappable Errors y le proceso de interceptar o atrapar un error se conoce como error trapping.

Manejador de Error (error handler) es una rutina para atrapar y responder a errores en la aplicación. Se recomienda agregar un manejador de errores a cualquier procedimiento donde se pueda anticipar la posibilidad de un error en tiempo de ejecución.

Cuando una aplicación ocurre desde el ambiente de desarrollo Visual Basic muestra un mensaje que permite entrar en modo de búsqueda de errores (Debug) o terminar la aplicación.

Si un error ocurre en tiempo de ejecución cuando la aplicación está corriendo como un archivo ejecutable Visual Basic muestra un mensaje de error y termina la aplicación.

El proceso de diseñar un manejador de errores involucra 3 pasos:

  1. Establecer o habilitar un error trap (proceso de atrapar un error) indicando a la aplicación donde bifucar cuando ocurra un error.

    Visual Basic habilita un error trap cuando ejecuta la sentencia On Error, el error trap permanece habilitado mientras el procedimiento contenido está activo. Sólo un error trap a la vez puede ser habilitado en cualquier procedimiento, por lo que un error trap debe residir en el procedimiento local, no es posible utilizar la sentencia On Error para bifurcar hacia otro procedimiento.

    Para deshabilitar un error trap utilice la sentencia On Error GoTo 0.

  2. Escribir una rutina de manejo de errores que responda a todos los errores anticipadamente.

    El primer paso en la escritura de una rutina de manejo de errores es agregar una etiqueta para marcar el principio del manejo de errores. La etiqueta deberia tener un nombre descriptivo y seguida de un dos puntos (:).

    Una convención es colocar el código de manejo de errores al final del procedimiento con una sentencia Exit Sub o Exit Function inmediatamente antes de la etiqueta, esto permite al procedimiento eliminar la ejecución del manejo de errores si no ocurren errores.

  3. Salir de la rutina de manejo de errores.

    es posible salir de una rutina de manejo de errores utilizando la sentencia Resume o Resume Next, la sentencia Resume podría ejecutar la línea de código que causa el error, mientras que la sentencia Resume Next podría ejecutar la línea de código siguiente a la línea de código que causa el error.

    Por lo general se podría utilizar Resume en cualquier momento que el manejador de errores pueda corregir el error y Resume Next cuando el manejador de errores no puede corregir el error.

  • Resume, regresa a la sentencia que causo el error, utilice esta sentencia para repetir una operación después de corregir el error.
  • Resume Next, regresa a la sentencia siguiente de una que causo el error.
  • Resume línea o etiqueta, regresa a una línea o número de línea especifica.

La sentencia On Error Resume Next causa que los errores sean ignorados, si un error ocurre en tiempo de ejecución, el proceso continua con la línea siguiente.

La sentencia On Error GoTo 0 deshabilita el error trap.

   Sub nombreProcedimiento()
On Error GoTo miManejadorDeErrores
'instrucciones
Exit Sub
miManejadorDeErrores:
'instrucciones
REsume[0]/Resume Next/Resume linea/Err.Raise:=número
End Sub

Objeto Err

El objeto Err contiene información acerca del error ocurrido, este objeto tiene propiedades y métodos que pueden utilizarse para checar que error ocurrio, para limpiar el valor del error o para causar un error.

Propiedades del Objeto Err

  • Number, entero que indica el último error ocurrido, en algunos casos el manejador de errores puede ser habilitado para corregir un error y continuar con el proceso sin interrumpir al usuario o notificar al usuario de un error y entonces tomar una acción basada en la respuesta del usuario.
  • Description, string que contiene una descripción del error ocurrido.
  • Source, contiene el nombre de la aplicación que genero el error.

El objeto Err tiene 3 propiedades adicionales.

  Private Sub abrirArchivo_Click()
On Error GoTo miManejadorErr
Open "c:\archivoInexistente.txt" For Input As #1
End
miManejadorErr:
Dim strErr
strErr = strErr & "Description : " & Err.Description & Chr(13)
strErr = strErr & "HelpContext : " & Err.HelpContext & Chr(13)
strErr = strErr & "Number : " & Err.Number & Chr(13)
strErr = strErr & "Source : " & Err.Source & Chr(13)
MsgBox strErr
Resume Next
End Sub

Métodos del Objeto Err

  • Clear, limpia un error cuando se establece el valor de Err.Number con 0, utilice este método cuando se manejen errores inline
  • Raise, causa un error, utilice este método para pasar un error de regreso al procedimiento que lo invoco. Si se requiere generar y atrapar errores propios, comience el esquema de numeración con 32767 y trabaje los números de forma descendente: Err.Raise 23000

Un manejador de errores Inline no contiene etiquetas o sentencias Resume.

Manejo de Errores Inline

Es posible escribir manejadores de errores Inline en vez de bifurcar al manejador de errores establecido, para ello:

  1. Incluir en el código la sentencia On Error Resume Next
  2. Evaluar el valor Err.Number después de cada sentencia que pueda generar un error
  3. Utilizar el método Err.Clear restablecer el número de error

Error Trapping

Existen 3 procesos generales para interceptar o atrapar un error:

  1. Break on All Errors, si se establece esta opción Visual Basic ignora cualquier sentencia On Error y continua en break mode si ocurre cualquier error en tiempo de ejecución. Esta opción es utilizada para buscar errores mientras se ejecuta la aplicación dentro del ambiente de desarrollo Visual Basic.
  2. Break in Class Module, si se establece esta opción cuando se busca un error en un proyecto ActiveX Component, causa que el componente ActiveX continue en Break mode antes que pasar el error de regreso a la aplicación cliente.
  3. Break on Unhandled Errors, cuando se establece esta opción, Visual Basic continua en Break mode sobre cualquier error que no tenga un manejador de error especifico.

Para establecer alguno de los procesos anteriores seleccione:

Del menún principal Options » General Tab » seleccionar uno de los procesos Error Trapping

Leer más...

Validación de datos

Validación de Datos

Es posible validar la entrada de datos, así como los datos mismos a través del uso de propiedades, métodos, eventos y funciones Visual Basic.

Función isNumeric

La función isNumeric regresa el valor True si el argumento es numérico, si el argumento no es numérico regresa el valor False.

    If isNumeric(txtNombre.Text) Then
'instrucciones
Else
'Error : Dato inválido, se requiere un valor numérico
End If

Consideraciones para los eventos del Teclado

La programación que responde a un evento se le conoce como Controlador, si esta programación responde a un evento de teclado es un Controlador de teclado, el cual puede reaccionar a nivel control, es decir, la programación es para un control específico o a nivel formulario en donde el formulario primero responde a los eventos del teclado.

Eventos del Teclado:

  1. KeyPress, al presionar una tecla correspondiente a un carácter ASCII.
  2. KeyDown, al presionar cualquier tecla.
  3. KeyUp, al dejar de presionar cualquier tecla.

Unicamente el objeto que tiene el enfoque puede recibir un evento del teclado.

Un formulario tiene el enfoque cuando este está activo y ningún otro control tiene el enfoque.

Si se establece la propiedad del formulario KeyPreview con el valor True, el formulario recibe todos los eventos del teclado para cada control antes de que el control los reconozca lo que provoca que al presionar una tecla determinada se produzca una misma acción sin importar que control tenga el enfoque en ese momento.

Utilice los eventos KeyDown y KeyUp para detectar condiciones que evento KeyPress no detecta:

  • Combinaciones [Caps Lock] + [Ctrl] + [Alt].
  • Teclas de dirección (izquierda, derecha, arriba y abajo).
  • [PgUp] , [PgDn], [Home], [Del]
  • Teclado numérico.
  • KeyPress unicamente responde a una tecla que se está presionando
  • Teclas de función no asignadas a comandos de menú.

Los eventos del teclado no se excluyen mutuamente, al presionar una tecla se disparan los eventos:

  • KeyDown y
  • KeyPress

Seguidos del evento:

  • KeyUp

Si se presiona una tecla que el evento KeyPress no detecta unicamente se dispara el el evento:

  • KeyDown, seguido de
  • KeyUp

Evento KeyPress

El evento KeyPress ocurre cuando un usuario proporciona un carácter ASCII estándar, pero no responde a teclas especiales como teclas de función, teclas de navegación, la tecla [Del], ya que no proporcionan caracteres ASCII estándar, utilice los eventos KeyDown y KeyUp para responder a este tipo de teclas.

Este evento también reconoce las teclas [Enter], [Tab] y [Bk sp].

Las teclas de función no provocan un evento KeyPress.

Eventos KeyUp y KeyDown

En cualquier momento hay una actividad del teclado y es registrada a través de los eventos KeyDown y KeyUp, cada uno de estos eventos provee un código de tecla que identifica que tecla fué presionada.

No hay garantía de que el evento KeyUp ocurra por cada evento KeyDown, si el usuario mantiene presionada una tecla se reciben múltiples eventos KeyDown y sólo un evento KeyUp, por ejemplo el siguiente código supone validar la entrada para aceptar sólo dígitos y borrar cualquier caracter que no sea dígito, pero si se mantiene presionada una tecla ocurren varios eventos KeyPress y sólo un evento KeyUp por lo que no permite borrar siempre los caracteres que no sean dígitos:

Dim val Private Sub txtNumero2_KeyPress(KeyAscii As Integer) val = txtNumero2.Text End Sub Private Sub txtNumero2_KeyUp(KeyCode As Integer, shift As Integer) If KeyCode <> 57 Then txtNumero2.Text = val End If End Sub

El argumento keyascii regresa un valor entero que corresponde a un código de carácter ASCII.

Keycode

A través del argumento Keycode es posible identificar el valor ASCII o la constante del código de tecla.

El siguiente código muestra el Keycode del caracter ingresado, pruebe cual es el resultado cuando se ingresa el caracter a o A.

Private Sub txtKeycode_KeyDown(KeyCode As Integer, shift As Integer) MsgBox KeyCode End Sub

Salida: Para a y A el Keycode es 65.

Para identificar si es a o A utilice el argumento shift

Las teclas de números y las teclas de signos de puntuación tienen los mismos códigos de tecla que el código ANSI del número en la tecla, por ejemplo 1 y ! es el valor que regresa Asc(1), por lo que si se requiere diferenciar entre 1 y ! es necesario utilizar el argumento shift.

Argumento shift

Es posible utilizar el argumento shift con los eventos KeyDown y KeyUp para determinar el estado de la tecla, por ejemplo si son mayúsculas:

Private Sub txtCompany_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKey_caracter_a_determinar And Shift = 1 Then MsgBox "caracter en mayúscula" End Sub

Chr

La función Chr(keyAscii) convierte un código carácter ASCII en el carácter correspondiente

Ucase, Lcase

Las funciones Ucase(string) y Lcase(string) convierten una cadena a mayúsculas o minúsculas respectivamente.

El siguiente código convierte los caracteres ingresados en el campo a minúsculas:

Private Sub txtLower_KeyPress(KeyAscii As Integer) KeyAscii = Asc(LCase(Chr(KeyAscii))) End Sub

El siguiente código convierte los caracteres ingresados en el campo a mayúsculas:

Private Sub txtUpper_KeyPress(KeyAscii As Integer) KeyAscii = Asc(UCase(Chr(KeyAscii))) End Sub

Nota: utilice el examinador de objetos ([F2]) para consultar las constantes de teclas (KeyCodeConstants).

Si requiere modificar el comportamiento predeterminado de una tecla simplemente asigne un valor distinto a KeyAscii:

Private Sub txtComportamiento_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then KeyAscii = 0 End Sub

El código anterior evita la reproducción del sonido que se produce cuando se pulsa la tecla enter cuando no hay ninún botón predeterminado en el formulario.

GotFocus, LostFocus y SetFocus

La habilidad para recibir las entradas del usuario a través del mouse o teclado recibe el nombre de foco (Focus). En Visual Basic una forma puede tener varias cajas de texto, pero sólo una caja de texto tiene el foco y puede recibir la entrada a través del teclado.

Los eventos GotFocus y LostFocus ocurren cuando un objeto recibe el foco o cuando pierde el foco. No todos los controles tienen la habilidad de recibir la entrada del usuario.

Para asignar el foco a un control se invoca el método SetFocus

Evento Validate

El evento Validate ocurre antes de que un control pierda el foco y sólo ocurre cuando la propiedad CausesValidation del control que recibe el foco es True.

El evento Validate también incluye el argumento Cancel el cual causa que el control mantenga el foco cuando su valor es True.

Private Sub txtNombre_Validate(Cancel As Boolean) If Not IsNumeric(txtNombre.Text) Then Cancel = True End If End Sub

Por default la propiedad CausesValidation tiene el valor True, si se cambia el valor a False no se logra el efecto deseado que es no permitir cambiar el foco a otro control hasta que se proporcione un valor válido para el control que se está evaluando.

Propiedad MaxLength

La propiedad MaxLength puede ser utilizada para establecer el número máximo de caracteres permitidos que pueden contener una caja de texto, el sistema emite un sonido (beep) cuando el usuario trata de escribir más caracteres que los especificados en la propiedad.

Por default el valor de la propiedad MaxLength tiene el valor 0 para no reestringir el número de caracteres a escribir. Es posible establecer esta propiedad en tiempo de diseño o ejecución.

Propiedad PasswordChar

La propiedad PasswordChar permite sustituir la entrada de caracteres de una caja de texto por un caracter especifico a fin de ocultar lo que escribe el usuario, lo cual es muy común para la entradas de contraseñas o claves. La propiedad Text contiene exactamente lo que el usuario escribio.

Propiedad Locked (Habilitado/Deshabilitado)

La propiedad Locked determina cuando el usuario puede editar la entrada de una caja de texto, si la propiedad se establece con el valor True el usuario puede ver el contenido de la caja de texto pero no puede editarlo, es decir, la propiedad Locked hace que una caja de texto sea sólo de lectura hasta que la propiedad cambie de valor programaticamente.

Propiedad Mask

La propiedad Mask define una mascara de entrada, la cual se puede establecer en tiempo de diseño o ejecución.

Esta propiedad en muy útil para aceptar entradas de datos que coincidan con el formato especifico de la mascara, este formato se compone de caracteres especificos para la entrada de mascaras, por ejemplo los caracteres numericos corresponden al caracter #, para caracteres alfabéticos se emplea el caracter ? suponga que desea que la entrada solo acepte 3 caracteres numéricos, para ello escriba:

La propiedad Mask corresponde a un control especial llamado "Microsoft Masked Edit Control 6.0", no esta contemplado en Toolbox por lo que es necesario agregar el control, para ello selecccione:

Opción project del menú » Components » Microsoft Masked Edit Control 6.0

nombreForma.nombreMaskEdBox.Mask = "###"

Para quitar la mascara del control, solamente la cadena vacía a la propiedad Mask

nombreForma.nombreMaskEdBox.Mask = ""

Propiedad Format de un Control MaskEdBox

La propiedad Format define el formato que se desea utilizar cuando se despliega e imprime el contenido de un control.

Propiedad ClipText de un Control MaskEdBox

Al especificar una propiedad Mask para un control MaskEdBox si se trata de desplegar el resultado contendra los caracteres de la mascara y lo que el usuario escribio, si sólo necesitamos obtener lo que el usuario escribio se obtiene a través de la propiedad ClipText, ejemplo:

Form1.mascara.Mask = "(#-#-#)" 'podria mostrar "(4-6-9)" MsgBox mascara.ClipText 'podria mostrar "469"

Propiedad AutoTab de un Control MaskEdBox

Una vez que el usuario proporciono la entrada necesaria en un control MaskEdBox es posible establecer la propiedad AutoTab con el valor True para indicar que de manera automática al terminar la entrada válida de datos se mueva al siguiente control.

Evento ValidationError de un Control MaskEdBox

Una vez que el usuario proporciono la entrada en un control MaskEdBox es posible utilizar el evento ValidationError para verificar que la entrada sea la correcta, por ejemplo el usuario puede no completar la entrada si omite escribir un caracter.

Propiedad Enabled

La propiedad Enabled nos permite habilitar o desahabilitar un control.

nombre_Control.enabled = False 'deshabilita el control

Recorrer los Controles Contenidos en una Forma

Es posible realizar un tipo de acción con cada uno de los controles que contiene una forma sin necesidad de conocer de antemano su propiedad Name o la cantidad de controles o su tipo, para ello empleamos la sentencia de control For Each y la función TypeOf, ejemplo:

Dim ctrl As Control Dim nCajasTexto Dim nMascaras Dim nEtiquetas Dim nBotones For Each ctrl In Form1.Controls If TypeOf ctrl Is TextBox Then nCajasTexto = nCajasTexto + 1 If TypeOf ctrl Is MaskEdBox Then nMascaras = nMascaras + 1 If TypeOf ctrl Is Label Then nEtiquetas = nEtiquetas + 1 If TypeOf ctrl Is CommandButton Then nBotones = nBotones + 1 'ctrl.nombrePropiedad = "valor" 'Es posible asignar valores a cada control Next MsgBox "Esta forma contiene " & CStr(nCajasTexto) & " cajas de texto" _ & Chr(13) & CStr(nMascaras) & " mascaras" _ & Chr(13) & CStr(nEtiquetas) & " etiquetas" _ & Chr(13) & CStr(nBotones) & " botones"

¿Los Datos Proporciondos son Correctos?

Otra forma de validar datos es checar la entrada de los mismos antes de continuar su proceso, para ello se válida dato por dato:

  Private Sub cmdProcesarDatos_Click()
Dim i, nPos
lblMsg.Caption = ""
If txtNombreUsr = "" Then
lblMsg.Caption = Chr(13) & "El nombre de usuario es requerido."
txtNombreUsr.SetFocus
Exit Sub
End If
For i = 0 To Len(txtNombreUsr.Text)
nPos = InStr(txtNombreUsr.Text, CStr(i))
If nPos > 0 Then
lblMsg.Caption = Chr(13) & "Nombre Usuario no puede contener números"
txtNombreUsr.SetFocus
Exit Sub
End If
Next
If Not IsNumeric(txtNumDepto.Text) Then
lblMsg.Caption = Chr(13) & "Número de Departamenteo sólo puede contener dígitos"
txtNumDepto.SetFocus
Exit Sub
End If
lblMsg.ForeColor = vbWhite
lblMsg.Caption = Chr(13) & "Procesando Datos, espere..."
End Sub
Leer más...