Está en la página 1de 64

PROGRAMACION VISUAL

PROGRAMACION ORIENTADA A OBJETOS Programacin orientada a objetos La programacin orientada a objetos o POO (OOP segn sus siglas en ingls) es un paradigma de programacin que usa objetos y sus interacciones, para disear aplicaciones y programas informticos. Est basado en varias tcnicas, incluyendo herencia, abstraccin, polimorfismo y encapsulamiento. Su uso se populariz a principios de la dcada de los aos 1990. En la actualidad, existe variedad de lenguajes de programacin que soportan la orientacin a objetos.

Introduccin Los objetos son entidades que tienen un determinado estado, comportamiento (mtodo) e identidad: El estado est compuesto de datos, ser uno o varios atributos a los que se habrn asignado unos valores concretos (datos). El comportamiento est definido por los mtodos o mensajes a los que sabe responder dicho objeto, es decir, qu operaciones se pueden realizar con l. La identidad es una propiedad de un objeto que lo diferencia del resto, dicho con otras palabras, es su identificador (concepto anlogo al de identificador de una variable o una constante).

Un objeto contiene toda la informacin que permite definirlo e identificarlo frente a otros objetos pertenecientes a otras clases e incluso frente a objetos de una misma clase, al poder tener valores bien diferenciados en sus atributos. A su vez, los objetos disponen de mecanismos de interaccin llamados mtodos, que favorecen la comunicacin entre ellos. Esta comunicacin favorece a su vez el cambio de estado en los propios objetos. Esta caracterstica lleva a tratarlos como unidades indivisibles, en las que no se separa el estado y el comportamiento. Los mtodos (comportamiento) y atributos (estado) estn estrechamente relacionados por la propiedad de conjunto. Esta propiedad destaca que una clase requiere de mtodos para poder tratar los atributos con los que cuenta. El programador debe pensar indistintamente en ambos conceptos, sin separar ni darle mayor importancia a alguno de ellos. Hacerlo podra producir el hbito errneo de crear clases contenedoras de informacin por un lado y clases con mtodos que manejen a las primeras por el otro. De esta manera se estara realizando una programacin estructurada camuflada en un lenguaje de programacin orientado a objetos. La POO difiere de la programacin estructurada tradicional, en la que los datos y los procedimientos estn separados y sin relacin, ya que lo nico que se busca es el procesamiento de unos datos de entrada para obtener otros de salida. La programacin estructurada anima al programador a pensar sobre todo en trminos de procedimientos o funciones, y en segundo lugar en las estructuras de datos que esos procedimientos manejan. En la programacin estructurada slo se escriben funciones que procesan datos. Los programadores que emplean POO, en cambio, primero definen objetos para luego enviarles mensajes solicitndoles que realicen sus mtodos por s mismos.

Origen Los conceptos de la programacin orientada a objetos tienen origen en Simula 67, un lenguaje diseado para hacer simulaciones, creado por Ole-Johan Dahl y Kristen Nygaard del Centro de Cmputo Noruego en Oslo. En este centro, se trabajaba en simulaciones de naves, que fueron confundidas por la explosin combinatoria de cmo las diversas cualidades de diferentes naves podan afectar unas a las otras. La idea surgi al agrupar los diversos tipos de naves en diversas clases de objetos, siendo responsable cada clase de objetos de definir sus propios datos y comportamientos. Fueron refinados ms tarde en Smalltalk, desarrollado en Simula en Xerox PARC (cuya primera versin fue escrita sobre Basic) pero diseado para ser un sistema completamente dinmico en el cual los objetos se podran crear y modificar "sobre la marcha" (en tiempo de ejecucin) en lugar de tener un sistema basado en programas estticos. La programacin orientada a objetos se fue convirtiendo en el estilo de programacin dominante a mediados de los aos ochenta, en gran parte debido a la influencia de C++, una extensin del lenguaje de programacin C. Su dominacin fue consolidada gracias al auge de las Interfaces grficas de usuario, para las cuales la programacin orientada a objetos est particularmente bien adaptada. En este caso, se habla tambin de programacin dirigida por eventos. Las caractersticas de orientacin a objetos fueron agregadas a muchos lenguajes existentes durante ese tiempo, incluyendo Ada, BASIC, Lisp, Pascal, entre otros. La adicin de estas caractersticas a los lenguajes que no fueron diseados inicialmente para ellas condujo a menudo a problemas de compatibilidad y en la capacidad de mantenimiento del cdigo. Los lenguajes orientados a objetos "puros", por su parte, carecan de las caractersticas de las cuales muchos programadores haban venido a depender. Para saltar este obstculo, se hicieron muchas tentativas para crear nuevos lenguajes basados en mtodos orientados a objetos, pero permitiendo algunas caractersticas imperativas de maneras "seguras". El Eiffel de Bertrand Meyer fue un temprano y moderadamente acertado lenguaje con esos objetivos pero ahora ha sido esencialmente reemplazado por Java, en gran parte debido a la aparicin de Internet, y a la implementacin de la mquina virtual de Java en la mayora de navegadores. PHP en su versin 5 se ha modificado, soporta una orientacin completa a objetos, cumpliendo todas las caractersticas propias de la orientacin a objetos.

Conceptos fundamentales La programacin orientada a objetos es una forma de programar que trata de encontrar una solucin a estos problemas. Introduce nuevos conceptos, que superan y amplan conceptos antiguos ya conocidos. Entre ellos destacan los siguientes: Clase: definiciones de las propiedades y comportamiento de un tipo de objeto concreto. La instanciacin es la lectura de estas definiciones y la creacin de un objeto a partir de ellas. Herencia: (por ejemplo, herencia de la clase C a la clase D) Es la facilidad mediante la cual la clase D hereda en ella cada uno de los atributos y operaciones de C, como si esos atributos y operaciones hubiesen sido definidos por la misma D. Por lo tanto, puede usar los mismos mtodos y variables publicas declaradas en C. Los componentes registrados como "privados" (private) tambin se heredan, pero como no pertenecen a la clase, se mantienen escondidos al programador y slo pueden ser accedidos a travs de otros mtodos pblicos. Esto es as para mantener hegemnico el ideal de OOP. Objeto: entidad provista de un conjunto de propiedades o atributos (datos) y de comportamiento o funcionalidad (mtodos) los mismos que consecuentemente reaccionan a eventos. Se corresponde con los objetos reales del mundo que nos rodea, o a objetos internos del sistema (del programa). Es una instancia a una clase. Mtodo: Algoritmo asociado a un objeto (o a una clase de objetos), cuya ejecucin se desencadena tras la recepcin de un "mensaje". Desde el punto de vista del comportamiento, es lo que el objeto puede hacer. Un mtodo puede producir un cambio en las propiedades del objeto, o la generacin de un "evento" con un nuevo mensaje para otro objeto del sistema. Evento: Es un suceso en el sistema (tal como una interaccin del usuario con la mquina, o un mensaje enviado por un objeto). El sistema maneja el evento enviando el mensaje adecuado al objeto pertinente. Tambin se puede definir como evento, a la reaccin que puede desencadenar un objeto, es decir la accin que genera.

Mensaje: una comunicacin dirigida a un objeto, que le ordena que ejecute uno de sus mtodos con ciertos parmetros asociados al evento que lo gener. Propiedad o atributo: contenedor de un tipo de datos asociados a un objeto (o a una clase de objetos), que hace los datos visibles desde fuera del objeto y esto se define como sus caractersticas predeterminadas, y cuyo valor puede ser alterado por la ejecucin de algn mtodo. Estado interno: es una variable que se declara privada, que puede ser nicamente accedida y alterada por un mtodo del objeto, y que se utiliza para indicar distintas situaciones posibles para el objeto (o clase de objetos). No es visible al programador que maneja una instancia de la clase. Componentes de un objeto: atributos, identidad, relaciones y mtodos. Identificacin de un objeto: un objeto se representa por medio de una tabla o entidad que est compuesta por sus atributos y funciones correspondientes.

En comparacin con un lenguaje imperativo, una "variable", no es ms que un contenedor interno del atributo del objeto o de un estado interno, as como la "funcin" es un procedimiento interno del mtodo del objeto.

Caractersticas de la POO Existe un acuerdo acerca de qu caractersticas contempla la "orientacin a objetos", las caractersticas siguientes son las ms importantes: Abstraccin: denota las caractersticas esenciales de un objeto, donde se capturan sus comportamientos.Cada objeto en el sistema sirve como modelo de un "agente" abstracto que puede realizar trabajo, informar y cambiar su estado, y "comunicarse" con otros objetos en el sistema sin revelar cmo se implementan estas caractersticas. Los procesos, las funciones o los mtodos pueden tambin ser abstrados y cuando lo estn, una variedad de tcnicas son requeridas para ampliar una abstraccin.El proceso de abstraccin permite seleccionar las caractersticas relevantes dentro de un conjunto e identificar comportamientos comunes para definir nuevos tipos de entidades en el mundo real. La abstraccin es clave en el proceso de anlisis y diseo orientado a objetos, ya que mediante ella podemos llegar a armar un conjunto de clases que permitan modelar la realidad o el problema que se quiere atacar. Encapsulamiento: Significa reunir a todos los elementos que pueden considerarse pertenecientes a una misma entidad, al mismo nivel de abstraccin. Esto permite aumentar la cohesin de los componentes del sistema. Algunos autores confunden este concepto con el principio de ocultacin, principalmente porque se suelen emplear conjuntamente. Modularidad: Se denomina Modularidad a la propiedad que permite subdividir una aplicacin en partes ms pequeas (llamadas mdulos), cada una de las cuales debe ser tan independiente como sea posible de la aplicacin en s y de las restantes partes. Estos mdulos se pueden compilar por separado, pero tienen conexiones con otros mdulos. Al igual que la encapsulacin, los lenguajes soportan la Modularidad de diversas formas. Principio de ocultacin: Cada objeto est aislado del exterior, es un mdulo natural, y cada tipo de objeto expone una interfaz a otros objetos que especifica cmo pueden interactuar con los objetos de la clase. El aislamiento protege a las propiedades de un objeto contra su modificacin por quien no tenga derecho a acceder a ellas, solamente los propios mtodos internos del objeto pueden acceder a su estado. Esto asegura que otros objetos no pueden cambiar el estado interno de un objeto de maneras inesperadas, eliminando efectos secundarios e interacciones inesperadas. Algunos lenguajes relajan esto, permitiendo un acceso directo a los datos internos del objeto de una manera controlada y limitando el grado de abstraccin. La aplicacin entera se reduce a un agregado o rompecabezas de objetos. Polimorfismo: comportamientos diferentes, asociados a objetos distintos, pueden compartir el mismo nombre, al llamarlos por ese nombre se utilizar el comportamiento correspondiente al objeto que se est usando. O dicho de otro modo, las referencias y las colecciones de objetos pueden contener objetos de diferentes tipos, y la invocacin de un comportamiento en una referencia producir el comportamiento correcto para el tipo real del objeto referenciado. Cuando esto ocurre en "tiempo de ejecucin", esta ltima caracterstica se llama asignacin tarda o asignacin dinmica. Algunos

lenguajes proporcionan medios ms estticos (en "tiempo de compilacin") de polimorfismo, tales como las plantillas y la sobrecarga de operadores de C++. Herencia: las clases no estn aisladas, sino que se relacionan entre s, formando una jerarqua de clasificacin. Los objetos heredan las propiedades y el comportamiento de todas las clases a las que pertenecen. La herencia organiza y facilita el polimorfismo y el encapsulamiento permitiendo a los objetos ser definidos y creados como tipos especializados de objetos preexistentes. Estos pueden compartir (y extender) su comportamiento sin tener que volver a implementarlo. Esto suele hacerse habitualmente agrupando los objetos en clases y estas en rboles o enrejados que reflejan un comportamiento comn. Cuando un objeto hereda de ms de una clase se dice que hay herencia mltiple. Recoleccin de basura: la recoleccin de basura o garbage collector es la tcnica por la cual el entorno de objetos se encarga de destruir automticamente, y por tanto desvincular la memoria asociada, los objetos que hayan quedado sin ninguna referencia a ellos. Esto significa que el programador no debe preocuparse por la asignacin o liberacin de memoria, ya que el entorno la asignar al crear un nuevo objeto y la liberar cuando nadie lo est usando. En la mayora de los lenguajes hbridos que se extendieron para soportar el Paradigma de Programacin Orientada a Objetos como C++ u Object Pascal, esta caracterstica no existe y la memoria debe desasignarse manualmente.

Resumen La programacin orientada a objetos es un paradigma que utiliza objetos como elementos fundamentales en la construccin de la solucin. Surge en los aos 70. Un objeto es una abstraccin de algn hecho o ente del mundo real que tiene atributos que representan sus caractersticas o propiedades y mtodos que representan su comportamiento o acciones que realizan. Todas las propiedades y mtodos comunes a los objetos se encapsulan o se agrupan en clases. Una clase es una plantilla o un prototipo para crear objetos, por eso se dice que los objetos son instancias de clases.

Lenguajes orientados a objetos Simula (1967) es aceptado como el primer lenguaje que posee las caractersticas principales de un lenguaje orientado a objetos. Fue creado para hacer programas de simulacin, en donde los "objetos" son la representacin de la informacin ms importante. Smalltalk (1972 a 1980) es posiblemente el ejemplo cannico, y con el que gran parte de la teora de la programacin orientada a objetos se ha desarrollado. Entre los lenguajes orientados a objetos se destacan los siguientes: ABAP ABL Lenguaje de programacin de OpenEdge de Progress Software ActionScript ActionScript 3 Ada C++ C# Clarion Clipper (lenguaje de programacin) (Versin 5.x con librera de objetos Class(y)) D Object Pascal (Embarcadero Delphi) Gambas Harbour Eiffel Java JavaScript (la herencia se realiza por medio de la programacin basada en prototipos) Lexico (en castellano) Objective-C

Ocaml Oz R Perl (soporta herencia mltiple. La resolucin se realiza en preorden, pero puede modificarse al algoritmo linearization C3 por medio del mdulo Class::C3 en CPAN) PHP (a partir de su versin 5) PowerBuilder Python Ruby Smalltalk (Entorno de objetos puro) Magik (SmallWorld) Vala VB.NET Visual FoxPro (en su versin 6) Visual Basic 6.0 Visual DataFlex Visual Objects XBase++ Lenguaje DRP Lenguaje de programacin Scala (lenguaje usado por Twitter) http://www.scala-lang.org/page.jsp

Muchos de estos lenguajes de programacin no son puramente orientados a objetos, sino que son hbridos que combinan la POO con otros paradigmas. Al igual que C++ otros lenguajes, como OOCOBOL, OOLISP, OOPROLOG y Object REXX, han sido creados aadiendo extensiones orientadas a objetos a un lenguaje de programacin clsico. Un nuevo paso en la abstraccin de paradigmas de programacin es la Programacin Orientada a Aspectos (POA). Aunque es todava una metodologa en estado de maduracin, cada vez atrae a ms investigadores e incluso proyectos comerciales en todo el mundo.

VARIABLES Y FUNCIONES

Las Variables

Las variables, como su nombre lo indica, se utilizan para almacenar valores que tienen la propiedad de variar el contenido. Cuando hablamos de contenido nos referimos a cualquier tipo de datos, por ejemplo un nombre, una fecha, un color, un nmero etc... . A las variables se les asigna un nombre para poder utilizarlas. Por ejemplo puedo crear una variable llamada fecha y esta almacenar una fecha. A los nombres de las variables se los denomina identificadores. Cuando creamos variables, tenemos que tratar de asignarles un nombre que se relacione con el tipo de dato que queremos almacenar. Por ejemplo no tendra mucho sentido crear una variable llamada m y all guardar o almacenar un nombre o un apellido, por que cuando echemos vista al cdigo resultara ms difcil deducir que tipo de dato estoy guardando. Por ejemplo en este ltimo caso sera mucho ms lgico crear una variable llamada nombres y all guardar "Luciano", "Pedro", "Natalia" etc.. En visual basic a las variables conviene declararlas, o sea, avisarle a vb que vamos a utilizar dichas variables. A estas se las declara en el comienzo del cdigo y se les antepone la palabra reservada Dim, luego el nombre que nosotros queramos y seguido el tipo de dato que almacenar, por ejemplo si quiero almacenar en una variable llamada Numero

Dim numero As Integer

La palabra Integer le avisa a vsiaual basic que voy a guardar un nmero entero. Despus de declararla le podemos asignar un valor con el operador "=", ejemplo:

Dim numero As Integer numero = 1500

Pero hay que tener en cuenta que al declarar una variable, en este caso, de tipo integer, no podramos almacenar en ella una cadena de caracteres como por ejemplo un nombre o cualquier otro tipo de datos que no sea un nmero entero. Si sucedera esto nuestro programa dara un error en tiempo de ejecucin, mostrndonos un feo cartel dicindoos que no coinciden los tipos de datos.. Funciones para el tratamiento de cadenas Las funciones de cadena, como su nombre lo indica, se utilizan para trabajar y tratar las cadenas de caracteres. A continuacin las ms importantes de ellas.

Funcin Lcase y Ucase Estas dos funciones se utilizan para convertir cadenas de texto a minscula y mayscula. La funcin Lcase cambia o convierte una cadena de texto a minscula y un ejemplo de como utilizarla sera as:

Lcase (cadena que queremos convertir a minsculas)

Ejemplo:

Dim cadena As String cadena = "HOLA MUNDO" 'Convertimos cadena = LCase(cadena) 'La variable cadena ahora vale "hola mundo"

La funcin Ucase funciona de la misma manera que Lcase pero convierte el contenido de una cadena a maysculas. Por ejemplo, si tenemos un control Label1 que contiene un texto que dice: "Porcentaje de sueldos", escribiendo la siguiente lnea:

Label1 = UCase(Label1)

El control Label1 pasara a mostrar o mejor dicho contener en su propiedad caption:"PORCENTAJE DE SUELDOS".

Funcin Trim, LTrim y RTrim Estas tres funciones se utilizan para eliminar los espacios vacos de una cadena.

LTrim elimina los espacios vacos de la parte izquierda de la cadena, RTrim de la parte derecha y Trim de ambas partes. Ejemplos: Tenemos una variable llamada ciudad con el valor " Barcelona". Para eliminar los espacios vacos de la izquierda haramos lo siguiente:

ciudad = LTrim(ciudad)

Si en un TextBox quisieramos borrar todos los espacios vacos de la parte derecha de la cadena:

MiText = RTrim(MiText)

La Funcin Trim elimina todos los espacios vacos de ambos lados de la cadena. Ejemplo:

Pais Pas = Trim(Pais)

"

Argentina

"

Ahora el valor de Pas es igual a: "Argentina".

Funcin Len La funcin Len nos permite conocer la cantidad de caracteres que tiene una determinada cadena. O sea que esta funcin nos devuelve un nmero. Ejemplo:

Len (Aqu va la cadena que queremos averiguar su tamao)

Como la funcin Len devuelve un nmero debemos asignar ese nmero devuelto en una variable de tipo numrica. Ejemplo:

Dim TamanoCadena As Long Dim MiCadena As String MiCadena = "Me Llamo Eustaquio"

TamanoCadena = Len(MiCadena)

El valor de la variable TamanoCadena pasara a valer 18. Hay que tener en cuenta que la funcin Len tambin toma en cuenta los espacios vacos. Funcin Asc y Chr La funcin Asc nos permite obtener el cdigo ASCII de un de terminado caracter. Ejempos: Si queremos obtener el cdigo ASCII del caracter "a", que es el nmero 97 podramos hacer lo siguiente:

Dim num As Integer num = Asc("a")

En definitiva la funcin Asc lleva un solo parmetro de tipo String del cual queremos obtener dicho nmero. La Funcin Chr acta a la inversa de la funcin Asc, esto quiere decir, que a partir de un determinado nmero nos devolver el caracter ASCII. Obviamente que en vez de pasarle a la funcin un parmetro String es decir la letra, debemos pasarle un nmero ASCII y nos devolver el carcter asociado. Ejemplo:

Dim letra As String letra = Chr(97)

La variable pasa a valer en este caso el caracter "a" Funcin InsTr La funcin InStr se utiliza para buscar una cadena o parte de una cadena dentro de otra cadena. Si la funcin encuentra la cadena a buscar devuelve un nmero que representa la posicin donde encontr la cadena, si no la encuentra devuelve un 0. Los parmetros que lleva esta funcin son:

InStr (comienzo, Cadena donde buscar , La Cadena a buscar)

Como esta funcin devuelve un nmero debemos almacenarla en una variable de tipo numrica para utilizarla. Ejemplo:

Dim posicion As Integer

posicion = InStr("Estoy tomando mate", "mate")

En este ejemplo la funcin encontr la cadena "mate" en la posicin 15, o sea que la variable posicin pasa a valer 15. Si observamos bien, la funcin en el primer parmetro, denominado comienzo, nos pide que le digamos desde que posicin comenzar a buscar. En nuestro ejemplo, este parmetro lo obviamos, esto quiere decir que comenzar desde la posicin 0 de la cadena a buscar. Pero podramos especificar una posicin en particular, por ejemplo desde la 5 , 10 etc..., segn lo que necesitemos hacer. Otro ejemplo de InsTr : Este ejemplo, muestra como buscar dentro de un control TextBox, el cual tiene dos opciones, un botn para buscar la primera frase, y otro que sigue buscando a partir de donde est ubicda la seleccin. Para armar el ejemplo colocar un Textbox llamado Text_Buscar que es donde se ingresar la frase y otro TextBox llamado Text1 que tendr el texto. Este ltimo con la propiedad Multiline en True.

Tambin colocar dos CommandButton: Command1 y Command2

Colocar el siguiente cdigo fuente en el formulario:

Option Explicit

Private m_Pos As Integer

Sub buscar_cadena(ByVal Posicion As Integer)

Dim p As Integer, Frase As String

Frase = txt_Buscar

p = InStr(Posicion, Text1, Frase)

If p > 0 Then m_Pos = p

With Text1 .SelStart = m_Pos - 1 .SelLength = Len(Frase) .SetFocus End With Else MsgBox "No se encontr la frase", vbInformation Text1.SetFocus End If End Sub

Private Sub Command1_Click() 'Busca a pratir de la primera pocicin Call buscar_cadena(1) End Sub

Private Sub Command2_Click() 'Busca a partir del valor que tenga m_Pos

Call buscar_cadena(m_Pos + 1)

End Sub

Private Sub Form_Load() Command1.Caption = "Buscar" Command2.Caption = "Buscar siguiente" Me.Caption = "Ejemplo de InStr " End Sub

Nota: tambin hay una funcin similar a Instr llamada InstrRev , y lo que hace es devolver la posicin de la primera concurrencia de una cadena dentro de otra cadena, pero comenzando por el extremo derecho de la misma

En este enlace hay un ejemplo que usa la funcin instrRev Extraer de un path o ruta, solo la extensin del archivo Funcin Left, Right y Mid

Estas funciones son utilizadas para extraer partes de una cadena. La funcin Left: Tiene 2 parmetros: El primero es la cadena de la cual se extraern caracteres, y el segundo un nmero desde el cual comenzar a extraer caracteres desde la parte izquierda. Ejemplo:

Dim Cadena As String Cadena = Left("Ya es la madrugada", 9) 'Cadena, que es un string, sera igual a: "Ya es la"

Funcin Right: Es igual que la funcin Left pero comienza a extraer caracteres desde el lado derecho de la cadena. La funcin Mid: Tiene la misma funcin que las anteriores pero posee tres parmetros. Su sintaxis es:

Mid (cadena, inicio, longitud)

El parmetro cadena es la cadena a extraer caracteres. El parmetro Inicio es donde comenzar y el parmetro longitud, es la cantidad de caracteres a extraer de la cadena de caracteres

Ejemplos:

Dim nombre As String nombre = Mid("River perdi la copa", 7, 6) 'La variable nombre sera igual a: "perdi"

Este Otro ejemplo usa la funcin Mid para realizar un simple efecto tipo mquina de escribir. Colocar en un formulario un CommandButton y el siguiente cdigo fuente en el form.

Option Explicit

Sub Pausa(Segundos As Double)

Dim inicio As Double

' Devuelve la cantidad de segundos desde que inicio windows inicio = Timer

Do While (Timer - inicio) < Segundos ' pausa DoEvents Loop End Sub

Private Sub Command1_Click()

Dim texto As String

texto = "... Hola mundo --->>> "

Call MostrarTexto(texto, 0.1, Me)

End Sub

Private Sub MostrarTexto(Frase As String, _ Segundos As Double, _ Destino As Object)

Dim LenFrase As Integer Dim i As Integer Dim Caracter As String Dim texto As String

LenFrase = Len(Frase)

Do While i <= LenFrase Destino.Cls

DoEvents

i=i+1 ' Obtiene el siguiente caracter Caracter = Mid(Frase, i, 1) ' texto actual texto = texto & Caracter Destino.Print texto ' Imprimi e/ dibuja el texto ' pausa o delay Pausa Segundos DoEvents Loop End Sub

Private Sub Form_Load() Me.FontSize = 12 Me.Font.Bold = True Me.ForeColor = vbRed Command1.Caption = " Efecto de texto con mid " End Sub

Private Sub Form_Unload(Cancel As Integer) End End Sub

Funcin Str y Val

La funcin Val convierte una cadena en un nmero yla funcin Str un nmero en una cadena. Ejemplos:

cadena = "123456" cadena = Val(cadena) 'Ahora cadena vale 123456 cadena2 = 123456 cadena2 = Str(cadena2) 'Ahora cadena2 vale "123456"

Funciones para el tratamiento de nmeros Visual Basic posee muchas funciones para tratar nmeros. A continuacin las principales funciones.

Funcin Round La funcin Round se utiliza para redondear un nmero decimal, devolviendo un nmero entero.

Ejemplo:

Dim Mimumero As Long Minumero = Round(245.8) '(La funcin devuelve 246) Minumero = Round(245.3) '(La funcin devuelve 245) Minumero = Round(245.5) '(La funcin devuelve 245)

Round posee un parmetro opcional por si queremos incluir los dgitos decimales.

Rnd y Randomize - Nmeros aleatorios Para generar nmeros aleatorios, Visual Basic incluye 2 funciones: Rnd y Randomize. La funcin Rnd devuelve un nmero aleatorio, y esta posee un solo parmetro. Ejemplo :

Rnd (nmero)

Pero para poder generar dichos nmeros aleatorios, debemos utilizar previamente la funcin Randomize con la siguiente frmula:

Dim LimiteInferior As Integer Dim LimiteSuperior As Integer LimiteInferior = 20 LimiteSuperior = 40 MsgBox Int((LimiteInferior - LimiteSuperior + 1) * Rnd + LimiteInferior)

En el ejemplo anterior, se generarn nmeros aleatorios comprendidos entre el 20 y el 40 Nota: en este enlace pods ver un ejemplo que permite generar nmeros aleatorios no repetidos Funciones matemticas

Las principales funciones matemticas provistas por Visual Basic son: Abs: Devuelve el valor absoluto de una expresin numrica. Atn: Devuelve el arco tangente de un nmero. Cos: Devuelve el coseno de un ngulo. Exp: Devuelve el nmero "e" elevado a una potencia. Log: Devuelve el logaritmo natural de un nmero. Sgn: Devuelve un valor indicando el signo de un nmero. Sin: Devuelve el seno de un ngulo. Sqr: Devuelve la raz cuadrada de un nmero. Tan: Devuelve la tangente de un ngulo.

Funciones de formato Visual Basic posee varias funciones para darle formato a distintos tipos de datos e informacin. A continuacin se ve algunos ejemplos de las principales funciones: FormatCurrency: Esta funcin se utiliza para trabajar con nmeros con formato en dinero. Ejemplo:

si tenemos un nmero 3 y utilizamos la funcin nos devolvera "$3". FormatPercent: Esta funcin es utilizada para trabajar con porcentajes. Ejemplo: si tendramos un nmero 321, nos devolvera: "32,1%" . FormatDateTime: Esta funcin trabaja con fechas y horas. FormatNumber: Formatea expresiones nmeros

Resultado = FormatPercent(321) 'devuelve: "32.100,00%" Resultado = FormatCurrency(3) 'devuelve: "$3,00" Resultado = FormatDateTime("6-8-1978") 'La funcin devolvera: "06/08/1978"

NumDigitsAfterDecimal: Parmetro de tipo opcional. Este indicar cuantos nmeros decimales devolver la funcin: Ejemplo

cadena = FormatCurrency(325, 3) 'Devuelve: "$325,000"

Ejemplo de la funcin FormatDateTime Esta funcin, en el primer parmetro se le debe pasar la fecha u hora a formatear, y el segundo parmetro es el tipo de formato, pueden ser 5 tipos.

vbGeneralDate, vbLongDate, vbShortDate, vbLongTime y vbShortTime. Este parmetro es de tipo opcional. al colocar la coma dentro de la funcin , visual basic despliega la lista de constanetas mencionadas, como muestra el grfico:

Un ejemplo para ver estos formatos utilizando FormatDateTime: Colocar cinco option Button, cada botn de opcin mostrar los diferentes formatos en el caption del formulario, es decir en la barra de ttulo.

Cdigo en el formulario:

Private Sub Form_Load()

Option1.Caption = " vbGeneralDate " Option2.Caption = " vbLongDate " Option3.Caption = " vbShortDate " Option4.Caption = " vbLongTime " Option5.Caption = " vbShortTime "

End Sub Private Sub Option1_Click() Me.Caption = FormatDateTime(Now, vbGeneralDate) End Sub

Private Sub Option2_Click() Me.Caption = FormatDateTime(Now, vbLongDate) End Sub

Private Sub Option3_Click()

Me.Caption = FormatDateTime(Now, vbShortDate) End Sub

Private Sub Option4_Click() Me.Caption = FormatDateTime(Now, vbLongTime) End Sub

Private Sub Option5_Click() Me.Caption = FormatDateTime(Now, vbShortTime) End Sub

FormatNumber - Ejemplos: Formatea 0.489698 a 0,49

Dim Numero As Double Numero = 0.489698 Numero = FormatNumber(Numero, 2, vbFalse) MsgBox Numero

Formatea 1.958754 a 1,96

Dim Numero As Double Numero = 1.958754 Numero = FormatNumber(Numero, 2) MsgBox Numero

Funcin Format:

La funcin Format es mas completa que las anteriores funciones, porque puede manejar mas tipos de datos, y no devuelve solo cadenas, esta tambin puede devolver nmeros y fechas.

La funcin Format posee dos parmetros:

Format (Expresin, formato)

En el primero debemos colocar cualquier expresin vlida. El segundo es opcional y a continuacin veremos una descripcin de los formatos de VB: GeneralNumber: Devuelve el nmero sin formato. Currency: Devuelve el nmero en formato moneda, con el smbolo "$" y 2 decimales a las derecha.

Fixed: Devuelve como mnimo un dgito a la izquierda y 2 ala derecha del decimal. Standar: Similar a Fixed pero incluye un separador de miles. Percent: Multiplica el nmero por cien y le agrega el smbolo "%" True/False: Devuelve Verdadero para un valor distinto de 0,y Falso para 0. On/OFF: Devuelve "Activado" para un valor distinto de 0, y "Desactivado" para 0.

La forma de pasar el parmetro es entre comillas. Ejemplo:

cadena = Format(75, "Currency") ' Devolvera: "$75,00"

Nota: Si ingresamos un nmero decimal, debemos utilizar el "." y no la coma "," ya que la coma determina el comienzo de otro parmetro dentro de la funcin y Visual basic dara error de sintaxis

Funciones de formato para fechas y hora Ejemplos de los principales Formatos con nombre para el manejo de Fechas y Horas:

Funciones para Fechas Dim cadena As String cadena = Format("06/08/78", "General Date") ' Devuelve: "06/08/1978" cadena = Format("19/08/79", "Long Date") ' Devuelve : "Jueves 19 de Agosto de 1979". cadena = Format("19/8/79", "Medium Date") ' Devuelve: "19-Ago-1979" cadena = Format("17:08", "Short Time") ' "05:08" cadena = Format("17:08", "Medium Time") ' "05:08 PM" cadena = Format("17:08", "Long Time") ' "05:08:00 PM"

Funciones para calcular fechas Visual basic cuenta con una serie de funciones que nos permiten calcular fechas y horas, por ejemplo generar un intervalo de fechas, sumar y restar fechas y horas y otras operaciones y clculos DateAdd : Devuelve un Variant que contiene una fecha que indica el intervalo de tiempo que se ha agregado DateDiff : Devuelve el nmero de intervalos de tiempo entre dos fechas determinadas DatePart : Devuelve una parte especfica de una fecha dada

DateSerial : Devuelve un valor Date para un ao, mes y da determinados Ejemplos El siguiente ejemplo utiliza la funcin DateDiff para mostrar el itervalo entre dos fechas. El intervalo lo muestra en segundos , minutos, dias, semanas meses y aos, como muestra el siguiente grfico

Colocar en el formulario un Command1.

Option Explicit

' recibe las dos fechas como parmetros '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Private Sub Calcular(Fecha_Inicial As Date, _ Fecha_Final As Date)

Const Formato As String = "#,##0"

Me.Cls Me.Print "Calcular Intervalos entre las fechas " & Fecha_Inicial & _ " hasta :" & Fecha_Final & vbNewLine & String(150, "-") & vbNewLine

Me.Print Format(DateDiff("s", Fecha_Inicial, Fecha_Final), Formato) & " segundos" Me.Print Format(DateDiff("n", Fecha_Inicial, Fecha_Final), Formato) & " minutos" Me.Print Format(DateDiff("h", Fecha_Inicial, Fecha_Final), Formato) & " horas"

Me.Print Format(DateDiff("y", Fecha_Inicial, Fecha_Final), Formato) & " dias" Me.Print Format(DateDiff("WW", Fecha_Inicial, Fecha_Final), Formato) & " semanas" Me.Print Format(DateDiff("m", Fecha_Inicial, Fecha_Final), Formato) & " meses" Me.Print Format(DateDiff("yyyy", Fecha_Inicial, Fecha_Final), Formato) & " aos"

End Sub

Private Sub Command1_Click() ' le pasa las dos fechas a la funcin Call Calcular("01/01/2000", Date) End Sub

Private Sub Form_Load()

Me.AutoRedraw = True Command1.Caption = "calcular intervalos "

End Sub

Ejemplo con DateAdd Lo siguiente, muestra como aadir y restar fechas

' agrega 10 aos a la fecha actual MsgBox DateAdd("yyyy", 10, Date)

' Agrega cinco meses a la fecha actual MsgBox DateAdd("m", 5, Date)

' resta 1 dias a la fecha actual ( usa el signo -) MsgBox DateAdd("y", -1, Date)

Nota: para restar, usar el signo negativo, como se usa en el ltimo ejemplo. Para poder restar y agregar segundos a una hora, usar en el parmetro intervalo la "S", para minutos usar la "n", para horas la "h", para restar y sumar semanas la "ww" En el siguiente enlace pods ver algunos otros ejemplos que trabajan con dichas funciones Funciones para trabajar con fechas en visual basic Calcular edad de una persona usando DateDiff Averiguar con Dateserial, el Primer y ltimo da de un mes

Funciones para obtener la fecha u hora actual de la PC

Dim Cadena As String Cadena = Date ' Devuelve el da del sistema en este formato: "02/08/2004" Cadena = Time ' Devuelve la hora del sistema en este formato: "17:32:51" 'Funciones para establecer la fecha u hora de la PC: Date = (La fecha que queremos establecer) Time = (La hora que queremos establecer)

5 - Funciones para presentar mensajes Visual Basic posee 2 tipos de funciones para presentar mensajes, ellas son MsgBox e InputBox.

Funcin InputBox: La funcin InputBox presenta un mensaje al usuario, permitindole ingresar un valor en una caja de texto:

Como se dijo la funcin InputBox presenta un cuadro de dilogo donde el usuario puede ingresar un texto y luego aceptar o cancelar dicho cuadro de dilogo. Los parmetros principales de esta funcin son:

InputBox (Promt,Title, Default)

El parmetro Prompt especfica la leyenda que mostrar la caja de mensajes. El parmetro Title especifica el ttulo que llevar el cuadro de dilogo. El parmetro Default es el texto que mostrar la caja de texto.

El aspecto mas importante de InputBox es que nos devuelve una cadena con lo que haya ingresado el usuario en la caja de texto. Luego podemos realizar una tarea especfica dependiendo del valor devuelto. Ejemplo:

Dim retorno As String retorno = InputBox("Ingrese algo en la caja de texto", "Ejemplo")

MsgBox "Usted ingres:" & retorno

En el ejemplo anterior, en la variable Retorno se almacenar el valor que haya ingresado el usuario cuando haga Click en el botn de Aceptar. Cuando el usuario presiona Candelar, el InputBox devuelve una cadena vaca. Esto es importante tenerlo en cuenta para realizar una o tal accin Si quiseramos por ejemplo desplegar un InputBox, y que este no se cierre hasta que el usuario si o si haya ingresado un valor, podemos hacerlo de la siguiente forma, utilizando una condicin en un bucle Do Loop

Cdigo fuente en el formulario

Private Sub Form_Load()

Dim Dato As String

' Hasta que no se ingrese un dato, _ el InputBox no se cerrar Do Dato = InputBox("Ingresar algun dato", " Ejemplo ") Loop Until Dato <> ""

'Muestra el valor MsgBox Dato, vbInformation

End Sub

Enlace relacionado: InputBox con PasswordChar Funcin MsgBox:

La funcin MsgBox, que ya se vi varias veces en distintos ejemplos, es muy fcil de usar y se utiliza para mostrar distintos tipos de mensajes. Ejemplos de mensajes o cajas de texto con la funcin MsgBox que podemos mostrar:

Como se ve en los grficos anteriores, con MsgBox podemos tener variedad a la hora de mostrar un determinado mensaje, utilizando para ello las diferentes constantes que incorpora la funcin.

Los parmetros ms importantes son: Title : Es la leyenda que aparecer en el ttulo del mensaje. Texto : Es el Texto que mostrar el mensaje. Botones: En este parmetro se colocan las constantes que determinarn si la caja tiene uno o varios botones y el tipo de mensaje: informativo, de exclamacin de alerta etc... Cuando escribimos la coma dentro de la funcin en el parmetro botones, Visual Basic despliega una lista con las opciones o constantes que podemos utilizar.

OBJETOS

. Publicado originalmente en ingls en VB Online, edicin USA de Mayo'98 A pesar de que han pasado ms de dos aos y medio desde que la versin 4 del Visual Basic hiciera su aparicin, hay un elemento que an no est lo suficientemente extendido como debiera, quizs sea por "incomprendido", me refiero a los mdulos de clases, esa puerta al mundo de los objetos a la programacin orientada a objetos. No quiero decir que no se use este "nuevo" tipo de mdulo, me refiero a que si la forma de usarlo est lo suficientemente entendida como debiera. Por suerte la quinta versin de Visual Basic ha mejorado ese tipo de mdulos, poniendo a nuestro alcance un sistema mejorado para la programacin orientada a objetos. Bueno, casi orientada a objetos, no es plan de que los puristas empiecen a bombardearme el buzn de correo. Puede que muchos de los lectores digan: "yo hace tiempo que trabajo con las clases en Visual Basic", y me parece estupendo, aunque algunos "abusamos" de las clases y en ocasiones las usamos por "snobismo": como es nuevo hay que usarlo... He visto alguna que otra aplicacin que usa las clases (objetos) para situaciones en las que realmente no son necesarias, tambin he visto cdigo en los que el uso de un objeto (clase) solucionara algunos conflictos; la verdad es que no he tenido que buscar mucho para encontrar los listados a los que hago alusin... mirando mi propio cdigo tengo ejemplos de ambos casos...

Creo que el principal inconveniente con un uso ms extendido de los mdulos de clases en las aplicaciones de Visual Basic, bsicamente es su incomprensin... el no saber cundo usarlos y cuando nos puede beneficiar su uso en nuestros proyectos. Es curioso, porque desde que empezamos a crear un proyecto, estamos trabajando, directa o indirectamente, consciente o inconscientemente, con objetos: asignamos valores a sus propiedades y usamos los mtodos expuestos. Por tanto deberamos "cambiar" nuestro enfoque a la hora de crear un nuevo proyecto y planearlo como un puzzle en el que cada pieza pueda ser un objeto... y si estos objetos son lo ms independiente posible: mejor. Veamos un caso prctico en el que el uso de un objeto, (en forma de un mdulo de clase), puede solucionarnos algn que otro problema no desado. Este trozo de cdigo nos permite mostrar en la caja de texto de un combobox, mientras vamos escribiendo, el item que ms se parece de los que estn en la lista de items. En un principio, la implementacin la hice usando unos procedimientos pblicos que estaban en un mdulo BAS.

Este es el cdigo:

'Cdigo en Mdulo BAS Option Explicit

Dim Combo1Borrado As Boolean

Public Sub unCombo_KeyDown(KeyCode As Integer) If KeyCode = vbKeyDelete Then Combo1Borrado = True Else Combo1Borrado = False End If End Sub

Public Sub unCombo_KeyPress(KeyAscii As Integer) 'si se pulsa Borrar... ignorar la bsqueda al cambiar If KeyAscii = vbKeyBack Then Combo1Borrado = True Else Combo1Borrado = False End If End Sub

Public Sub unCombo_Change(ByVal sText As String, elCombo As ComboBox) Dim i As Integer, L As Integer

If Not Combo1Borrado Then L = Len(sText) With elCombo For i = 0 To .ListCount - 1

If StrComp(sText, Left$(.List(i), L), 1) = 0 Then .ListIndex = i .Text = .List(.ListIndex) .SelStart = L .SelLength = Len(.Text) - .SelStart Exit For End If Next End With End If End Sub

Para usarlo, simplemente hay que hacer esto:

'Cdigo en los eventos del Combo Private Sub Combo1_Change() Static YaEstoy As Boolean

On Local Error Resume Next

If Not YaEstoy Then YaEstoy = True unCombo_Change Combo1.Text, Combo1 YaEstoy = False End If

Err = 0 End Sub

Private Sub Combo1_KeyDown(KeyCode As Integer, Shift As Integer) unCombo_KeyDown KeyCode

End Sub

Private Sub Combo1_KeyPress(KeyAscii As Integer) unCombo_KeyPress KeyAscii End Sub

En caso de tener varios controles combo, llamaramos a estos procedimientos de igual forma, slo cambiando el nombre del combo al que hacemos referencia. Realmente no existe ningn problema... salvo si pudiesemos escribir en cada uno de ellos al mismo tiempo... De cualquier forma, usando una clase que se encargara del control de cada combo, nos librara de cualquier conflicto, por la sencilla razn de que cada uno de esos objetos creados para "tratar" cada combo mantiene de forma independiente las variables que necesita, a esto es lo que se llama "encapsulamiento"... Pero veamos el cdigo de la clase y cmo usarlo:

'Cdigo de la clase y cmo usarlo Option Explicit Dim elCombo As ComboBox Dim Combo1Borrado As Boolean Public Sub KeyDown(KeyCode As Integer) If KeyCode = vbKeyDelete Then Combo1Borrado = True Else Combo1Borrado = False End If End Sub

Public Sub KeyPress(KeyAscii As Integer) 'si se pulsa Borrar... ignorar la bsqueda al cambiar If KeyAscii = vbKeyBack Then Combo1Borrado = True Else Combo1Borrado = False End If

End Sub

Public Sub Change(ByVal sText As String) Dim i As Integer, L As Integer

If Not Combo1Borrado Then L = Len(sText) With elCombo For i = 0 To .ListCount - 1 If StrComp(sText, Left$(.List(i), L), 1) = 0 Then .ListIndex = i .Text = .List(.ListIndex) .SelStart = L .SelLength = Len(.Text) - .SelStart Exit For End If Next End With End If End Sub

Para usarlo, hay que crear una referencia a este tipo de objeto y despus poder usarlo, veamos parte del cdigo para implementar esta clase:

'En las declaraciones del form: Option Explicit

Dim cCombo1 As cBuscCbo

Private Sub Form_Load()

Set cCombo1 = New cBuscCbo Set cCombo1.Combo = Combo1 '... Private Sub Combo1_Change() Static YaEstoy As Boolean If Not YaEstoy Then YaEstoy = True cCombo1.Change Combo1.Text YaEstoy = False End If

End Sub

Private Sub Combo1_KeyDown(KeyCode As Integer, Shift As Integer) cCombo1.KeyDown KeyCode End Sub Private Sub Combo1_KeyPress(KeyAscii As Integer) cCombo1.KeyPress KeyAscii End Sub Private Sub Form_Unload(Cancel As Integer) Set cCombo1 = Nothing '... Usndolo de esta forma, cada objeto se encarga de un combo y si quisieramos ampliar su funcionalidad, tendramos la seguridad de que cualquier valor que deba conservar, (por ejemplo: una copia del contenido de los items de la lista), permaneceran "dentro" de cada objeto. Pero al usarlo de esta forma, bsicamente lo estamos usando como se haca al tener los procedimientos en el mdulo BAS, salvo que cada combo se guardara en una nueva instancia de la clase, manteniendo su propia copia de las variables. Aunque no es una buena forma de usarlo... cierto es que nos da "privacidad" en los datos, pero si tuviesemos otro combo en el que aplicar esto mismo habra que crear una nueva clase con un nombre diferente, por ejemplo: Dim cCombo2 As cBuscCbo

Set cCombo2 = New cBuscCbo

Set cCombo2.Combo = Combo2

Private Sub Combo2_Change() Static YaEstoy As Boolean

If Not YaEstoy Then YaEstoy = True cCombo2.Change Combo2.Text YaEstoy = False End If

End Sub Sera ms prctico crear una coleccin de este tipo de objeto y simplemente indicndole el nombre del combo que queremos usar, que sea la propia clase/coleccin la que se encargue de buscar el objeto apropiado, si es que existe, en otro caso nos devolvera un error. Veamos el cdigo de la clase/coleccin y cmo quedara el cdigo en el form en el que se emplee. Un detalle: El tipo de objeto "almacenado" en esta coleccin sera un objeto de la clase usada anteriormente, por tanto, podramos usarlo de cualquiera de las dos formas: con o sin coleccin...

'La clase / coleccin: Option Explicit

Dim colCombos As New Collection

Public Sub AddCombo(ByVal NewCombo As ComboBox) Dim tCombo As New cBuscCbo Dim elIndex As String

'Aadir un nuevo combo... On Local Error Resume Next

Set tCombo.Combo = NewCombo

With NewCombo elIndex = Format$(.Index, "000") If Err Then Err = 0 elIndex = "000" End If colCombos.Add tCombo, .Name & elIndex End With 'Si se produce un error es que ya existe

Set tCombo = Nothing Err = 0 End Sub

Public Function Item(ByVal Index As ComboBox) As cBuscCbo 'Este procedimiento hay que "marcarlo" como predeterminado 'esto slo es posible con el VB5 Dim elIndex As String

On Local Error Resume Next

With Index elIndex = Format$(.Index, "000") If Err Then elIndex = "000" End If Err = 0 Set Item = colCombos(.Name & elIndex) End With

If Err Then

'No existe Err.Raise Number:=vbObjectError + 1000, _ Source:="cCombos", _ Description:="Elemento no hallado" End If

End Function

'El cdigo a usar en el form: Option Explicit Dim Combos As cCombos Private Sub Form_Load()

Set Combos = New cCombos Combos.AddCombo Combo1 Combos.AddCombo Combo2 '... Private Sub Form_Unload(Cancel As Integer) Set Combos = Nothing '... Private Sub Combo1_Change() Static YaEstoy As Boolean

If Not YaEstoy Then YaEstoy = True With Combo1 Combos(Combo1).Change .Text End With YaEstoy = False End If

End Sub

Private Sub Combo1_KeyDown(KeyCode As Integer, Shift As Integer) Combos(Combo1).KeyDown KeyCode End Sub Private Sub Combo1_KeyPress(KeyAscii As Integer) Combos(Combo1).KeyPress KeyAscii End Sub 'En el Combo2 se usara el mismo cdigo, 'simplemente cambiando el nombre del Combo Private Sub Combo2_Change() Static YaEstoy As Boolean If Not YaEstoy Then YaEstoy = True With Combo2 Combos(Combo2).Change .Text End With YaEstoy = False End If End Sub Como comprobars, resulta ms fcil de usar de esta segunda forma, aunque si slo tienes un combo en el que quieres aplicar esta funcionalidad, no es necesario usar la clase/coleccin... Espero que, a pesar de no haber sido demasiado "tutorialista", te haya servido para "plantearte" el uso de las clases en Visual Basic y si quieres en prximos artculos, veriamos de una forma ms "didctica" cmo crear unas clases sencillas as como crear nuestras propias colecciones. Todo depende del inters que suscite este artculo.

MODELOS O MODULOS

Mdulos Automatizar las tareas rutinarias y crear soluciones empresariales Un mdulo es bsicamente un conjunto de declaraciones, instrucciones y procedimientos que se almacenan en una unidad con nombre para organizar el cdigo de Microsoft Visual Basic (Microsoft Visual Basic: versin visual del lenguaje de programacin Basic de alto nivel. Microsoft ha desarrollado Visual Basic para crear aplicaciones basadas en Windows.). Microsoft Access tiene dos tipos de mdulos: mdulos estndar (mdulo estndar: mdulo en el que puede colocar los procedimientos Sub y Function que desee que estn disponibles para otros procedimientos de la base de datos.) y mdulos de clase (mdulo de clase: mdulo que puede contener la definicin de un nuevo proyecto. Cada instancia de una clase crea un objeto nuevo. Los procedimientos definidos en el mdulo se convierten en propiedades y mtodos del objeto. Los mdulos de clase pueden existir solos o con formularios e informes.). Los mdulos, un conjunto de declaraciones y procedimientos de Visual Basic, se almacenan en una sola

unidad. Cuadro Objeto Cuadro Procedimiento Declaraciones Procedimientos Botn Vista Procedimiento Botn Ver mdulo completo

Mdulos de clases Los mdulos de formularios (mdulo de formulario: mdulo que incluye cdigo para todos los procedimientos de evento desencadenados por los eventos que suceden en un formulario especfico o en sus controles.) y los mdulos de informes (mdulo de informe: mdulo que incluye cdigo para todos los procedimientos de evento desencadenados por los eventos que tienen lugar en un informe especfico o en sus controles.) son mdulos de clases que estn asociados con un formulario o informe determinado. Los modulos de formularios y de informes contienen a menudo procedimientos de evento (procedimiento de evento: procedimiento que se ejecuta automticamente en respuesta a un evento iniciado por un usuario o cdigo de programa o el sistema desencadena.) que se ejecutan en respuesta a un evento en un formulario o informe. Puede usar los procedimientos de evento para controlar el comportamiento de los formularios e informes, y su respuesta a acciones de los usuarios, como hacer clic en un botn de comando. Cuando se crea el primer procedimiento de evento para un formulario o informe, Microsoft Access crea automticamente un mdulo de formulario o un mdulo de informe.

Para ver o agregar un procedimiento de formulario, elija uno de los objetos del formulario en el cuadro Objeto ... ... y, a continuacin, seleccione un evento en el cuadro Procedimiento. Los nombres de eventos que ya tienen procedimientos aparecen en negrita. Los procedimientos en los mdulos de formularios y de informes pueden llamar a procedimientos que haya agregado a los mdulos estndar. En Access 97 o versiones posteriores, los mdulos de clase pueden existir con independencia de un formulario o informe, y este tipo de mdulo de clase se muestra en la ventana Base de datos (ventana Base de datos: ventana que aparece cuando se abre una base de datos o un proyecto de Access. Muestra mtodos abreviados para crear objetos de base de datos nuevos y abrir otros existentes.). Puede usar un mdulo de clase para crear una definicin para un objeto personalizado. En Access 95, los mdulos de clase existen nicamente en asociacin con un formulario o informe. Mdulos estndar Los mdulos estndar contienen procedimientos generales que no estn asociados a ningn otro objeto y procedimientos usados con frecuencia que pueden ser ejecutados desde cualquier parte de la base de datos. Las principales diferencias entre un mdulo estndar y un mdulo de clase que no est asociado a un objeto determinado son el alcance y la duracin. El valor de las variables y constantes declaradas o existentes en un mdulo de clase sin un objeto asociado est disponible para su uso slo cuando el cdigo se est ejecutando y slo desde ese objeto.

Nombre y argumentos de la funcin Declaraciones e instrucciones de cdigo de Visual Basic Los mdulos estndar se muestran en Mdulos, bajo Objetos, en la ventana Base de datos (ventana Base de datos: ventana que aparece cuando se abre una base de datos o un proyecto de Access. Muestra mtodos abreviados para crear objetos de base de datos nuevos y abrir otros existentes.). Los formularios, informes y mdulos estndar se enumeran tambin en el Examinador de bjetos (Examinador de objetos: cuadro de dilogo que muestra informacin sobre objetos, propiedades, mtodos y constantes en el proyecto actual y en bibliotecas de objetos a las que se hace referencia, y que se utiliza para buscar un elemento, obtener ayuda sobre l o pegarlo en un mdulo.). Informacin general sobre el modelo de aplicaciones de Visual Basic Visual Basic proporciona un modelo bien definido para controlar el comportamiento de aplicaciones de Windows Forms: el modelo de aplicaciones de Visual Basic. Este modelo incluye eventos para controlar el inicio de la aplicacin y su cierre, as como eventos para detectar las excepciones no controladas. Tambin proporciona compatibilidad para desarrollar aplicaciones de instancia nica. El modelo de aplicaciones es

extensible, por lo que los desarrolladores que necesitan un mayor control pueden personalizar sus mtodos reemplazables. Usos del modelo de aplicaciones Una aplicacin tpica necesita realizar tareas cuando se inicia y se cierra. Por ejemplo, cuando se inicia, la aplicacin puede mostrar una pantalla de inicio, realizar conexiones a bases de datos, cargar un estado guardado, etc. Cuando la aplicacin se cierra, puede cerrar las conexiones a bases de datos, guardar el estado actual, etc. Adems, la aplicacin puede ejecutar el cdigo especfico cuando se cierra inesperadamente, como por ejemplo durante una excepcin no controlada. El modelo de aplicaciones de Visual Basic facilita la creacin de aplicaciones de instancia nica. Una aplicacin de instancia nica se diferencia de una aplicacin normal en que slo se puede ejecutar una instancia de la aplicacin en un momento dado. Al intentar iniciar otra instancia de una aplicacin de instancia nica se notifica a la instancia original (por medio del evento StartupNextInstance) que se ha intentado iniciar otra instancia de la aplicacin. La notificacin incluye los argumentos de la lnea de comandos de la instancia subsiguiente. Entonces se cierra la instancia subsiguiente de la aplicacin antes de que se pueda producir ninguna inicializacin. Se inicia una aplicacin de instancia nica y comprueba si es la primera instancia o una posterior de la aplicacin: Si es la primera instancia, se inicia como de costumbre. Cada intento posterior de iniciar la aplicacin, mientras est en ejecucin la primera instancia, produce un comportamiento muy diferente. El intento subsiguiente notifica a la primera instancia los argumentos de la lnea de comandos y, a continuacin, la cierra inmediatamente. La primera instancia controla el evento StartupNextInstance para determinar cules eran los argumentos de lnea de comandos de la instancia subsiguiente y contina ejecutndose. Este diagrama muestra cmo se seala una instancia subsiguiente a la primera instancia.

Controlando el evento StartupNextInstance puede controlar el comportamiento de su aplicacin de instancia nica. Por ejemplo, Microsoft Outlook se ejecuta normalmente como una aplicacin de instancia nica; cuando Outlook est en ejecucin e intenta iniciar Outlook de nuevo, el foco pasa a la instancia original pero no se abre otra instancia. Eventos del modelo de aplicaciones En el modelo de aplicacin se encuentran los eventos siguientes: Inicio de la aplicacin. La aplicacin provoca el evento Startup cuando se inicia. Controlando este evento, puede agregar cdigo que inicialice la aplicacin antes de que se cargue el formulario principal. El evento Startup tambin sirve para cancelar la ejecucin de la aplicacin durante la fase del proceso de inicio, si as lo desea. Puede configurar la aplicacin para mostrar una pantalla de inicio mientras se ejecuta el cdigo de inicio de la aplicacin. De manera predeterminada, el modelo de aplicaciones suprime la pantalla de inicio cuando se utilizan los argumentos de lnea de comandos /nosplash o -nosplash.

Aplicaciones de instancia nica. El evento StartupNextInstance se produce cuando se inicia una instancia posterior de una aplicacin de instancia nica. El evento pasa los argumentos de la lnea de comandos de la instancia subsiguiente. Excepciones no controladas. Si la aplicacin encuentra una excepcin no controlada, provoca el evento UnhandledException. Su controlador para ese evento puede examinar la excepcin y determinar si se debe continuar la ejecucin. El evento UnhandledException no se provoca en determinadas circunstancias. Para obtener ms informacin, vea My.Application.UnhandledException (Evento).

Cambios en la conectividad de red. Si cambia la disponibilidad de red del equipo, la aplicacin provoca el evento NetworkAvailabilityChanged. El evento NetworkAvailabilityChanged no se provoca en determinadas circunstancias. Para obtener ms informacin, vea My.Application.NetworkAvailabilityChanged (Evento).

Cierre de la aplicacin. La aplicacin proporciona el evento Shutdown para indicar cundo est a punto de cerrarse. En ese controlador de eventos, puede asegurarse de que se llevan a cabo las operaciones que debe realizar su aplicacin (cerrar y guardar, por ejemplo). Puede configurar su aplicacin para que se cierre cuando se cierra el formulario principal, o que slo se cierre cuando se hayan cerrado todos los formularios.

Disponibilidad De manera predeterminada, el modelo de aplicaciones de Visual Basic est disponible para los proyectos de formularios Windows Forms. Si configura la aplicacin para que utilice un objeto de inicio distinto, o para que inicie el cdigo de la aplicacin con un procedimiento Sub Main personalizado, puede que sea necesario que ese objeto o clase proporcione una implementacin de la base WindowsFormsApplicationBase para utilizar el modelo de aplicaciones. Para obtener informacin sobre cmo cambiar el objeto de inicio, vea Cmo: Cambiar el objeto inicial de una aplicacin

CUADRO DE TEXTO El control TextBox o Caja de texto se utiliza para Ingresar y/o visualizar Texto ( es un control de entrada de datos )

Si en nuestros programas no vamos a introducir Texto, me refiero a solo mostrarlo, valores etc..., es preferible y mas lgico utilizar un control Label en cambio de un control TextBox , ya que consume menos recursos La propiedad principal de este control se llama Text. Mediante ella podemos asignarle un texto ya sea en tiempo de diseo o tiempo de ejecucin al control. Si es en tiempo de diseo, debemos seleccionar el TextBox e ir a la ventana de propiedades y seleccionar Text. Dentro de ella podemos escribir el texto a ser mostrado. Si es en tiempo de ejecucin debemos escribir el nombre de el TextBox que queremos y al presionar el punto ".", vb despliega la lista de propiedades y mtodos del TextBox, y ah seleccionamos Text

Por ejemplo si quiero mostrar un texto en un control llamado Text1 se hara de esta forma:

Private Sub Form_Load() Text1.Text = "Un texto cualquiera" End Sub

Si quisiera mostrar el contenido de un control Label llamado Label1 en un control llamado text1 se hara as:

Private Sub Form_Load() Text1.Text = Label1.Caption End Sub

Nota , no es necesario escribir la propiedad Text seguida del nombre del control, ya que la propiedad Text es la propiedad por defecto, y Vb se dara automticamente cuenta que al no poner ninguna propiedad la asuma como tal, por ejemplo esto es vlido:

Private Sub Form_Load()

Text1 = "Un texto cualquiera" End Sub

Esto de las propiedades por defecto lo tienen la mayora de los controles, pero cada control tiene la suya, por ejemplo la propiedad default de un control Label es Caption, por lo que no es necesario escribirla, y Visual Basic no dara error:

Private Sub Form_Load() Label1 = "Hola" End Sub

Para un control Picture, la propiedad Picture es la que est establecida por defecto, y esto tampoco dara error y cargara una imagen perfectamente en el control sin indicar explcitamente la propiedad.

Private Sub Form_Load() Picture1 = LoadPicture("la ruta de una imagen") End Sub

Propiedad Multiline La propiedad Multiline o multilinea se utiliza para poder mostrar los saltos de carro o saltos de lnea y que el texto se vea en varias y no todo en un nica lnea. Los valores que posee son True que est activada y en False quiere decir que est deshabilitada. Por defecto cuando aadimos un TextBox, la propiedad est en False, osea que tenemos que indicarle nosotros a vb, ya sea desde la ventana de propiedades ponindola en true. Una cosa importante es que esto no lo podemos cambiar en tiempo de ejecucin mediante cdigo, si o si hay que establecerla desde la ventana de propiedades, ya que es una propiedad de solo lectura. Propiedad PasswordChar

Esta propiedad tiene la funcin de ocultar el verdadero contenido del TextBox por el caracter que le indiquemos, por ejemplo los TextBox de ingresos de contrasea, donde el texto se oculta pero no se pierde, solo impide visualizarlo:

Nota : para establecer el caracter a mostrar solo debemos indicarlo en la propiedad PasswordChar, pero solo funciona cuando la propiedad Multiline del Text est en False. Propiedad ScrollBars Esta propiedad permite que el TextBox tenga o no tenga barras de Scroll cuando el texto sea superior a las dimensiones de la caja de texto. Los valores que puede tener son: 0 indica que el textBox no mostrar Barras de desplazamiento, en 1 Solo barra Horizontal, 2 Solo barra Vertical y 3 ambas barras de desplazamiento. En esta imagen se ve un TextBox con la propiedad Scrollbars en 2, solo Vertical

Propiedad Locked Esta propiedad lo que hace es impedir que se pueda escribir en el TextBox, bloqueando la entrada de datos. Esta propiedad puede tener el Valor True o False, habilitado para el primero y False para el segundo. Por defecto est deshabilitada, es decir en False

Propiedad Maxlength La propiedad MaxLength se usa para limitar la cantidad de caracteres que se podrn ingresar. Por ejemplo si en el TextBox tuviesemos el texto "Domingo" y hacemos esto:

Private Sub Command4_Click() Text1.Text = "Domingo" Text1.MaxLength = 3 End Sub

El texto "Domingo" se podr visualizar pero si intentamos escribir en la caja de texto, no se podr ingresar mas de 3 caracteres. Es decir la propiedad recibe un nmero que identifica la longitud mxima permitida de letras a ingresar.

Propiedad SelStart y SelLength La primera lo que hace es devolver o establecee el punto inicial del texto seleccionado. en cambio SelLength devuelve o establece el nmero de caracteres seleccionados. El siguiente ejemplo utiliza estas dos propiedades, en conjunto con la propiedad Len de visual basic, para que al persionar la tecla Ctrl+A, se seleccione todo el contenido del TextBox

Private Sub Text1_KeyPress(KeyAscii As Integer)

If KeyAscii = 1 Then Text1.SelStart = 0 'Selecciona Todo el contenido de la caja de texto Text1.SelLength = Len(Text1.Text) End If End Sub

Algunos ejemplos del Uso del control TextBox Supongamos que quisieramos mostrar el contenido de un Text1 en un Text2, cuando presionamos un Command1, haramos asi:

Private Sub Command1_Click() 'Copiamos el texto de Text1 en el Text2 Text2 = Text1 End Sub

Si quisieramos cambiar el color de fondo (propiedad Backcolor) del TextBox para que sea igual al color de fondo del formulario haramos asi:

Private Sub Command1_Click() 'Le asignamos el mismo color al textbox que el que tiene el formulario _ utilizando la propiedad Backcolor Text1.BackColor = Me.BackColor End Sub

Este simple ejemplo lo que hace es cuando se escribe en el Text1, automticamente se imprime el mismo texto en un Text2. Para esto usamos el evento Change que significa cambio, es decir se ejecutar cada vez que el text1 cambie el contenido. Agregar 2 Text, text1 y Text2, pegar lo siguiente y luego escribir un texto en el Text1.

Private Sub Text1_Change() 'Le establecemos el contenido de Text1 en el control Text2 Text2 = Text1 End Sub

Este ejemplo lo que hace es cambiarle el color al fondo del control text en negro, el color de la fuente en verde, el tamao de la fuente, establecerla en negrita, y luego le asigna un texto "hola mundo".

Colocar un Command1 y un Text1

Private Sub Command1_Click() With Text1

.ForeColor = vbGreen .BackColor = vbBlack .FontSize = 12 .FontBold = True .Text = " Hola Mundo" End With End Sub

Hacer que un textBox admita solo nmeros y algunos otros caracteres indicados El siguiente ejemplo muestra como hacer , comprobando en el eventos KeyPress de un textbox, el valor del parmetro Keyascii, para que solo admita nmeros, la coma, el punto y la tecla de retroceso. Cualquier otro valor que no sea estos, el mismo retornar el valor 0. Colocar un Text1 y el siguiente cdigo en el formulario:

Option Explicit Private Sub Text1_KeyPress(KeyAscii As Integer) KeyAscii = Verificar_Tecla(KeyAscii) End Sub

Function Verificar_Tecla(Tecla_Presionada)

Dim Teclas As String

'Acepta todos los nmeros, la tecla Backspace, _ la tecla Enter, la coma y el punto

Teclas = "1234567890.," & Chr(vbKeyBack)

If InStr(1, Teclas, Chr(Tecla_Presionada)) Then

Verificar_Tecla = Tecla_Presionada Else ' Si no es ninguna de las indicadas retorna 0 Verificar_Tecla = 0 End If End Function

Esta funcin tambin puede ser utilizada en otros controles de entrada de datos, como por ejemplo los ComboBox, y la ventaja de utilizarlo, es que si tenemos muchos textbox o controles a los cuales deseamos

verificar las teclas presionadas, no tenemos que escribir y repetir cdigo en todos ellos, solo asignando al valor KeyAscii el valor retornado por la fuincin, para que el mismo acepte o no dichas teclas Nota: tambin hay una funcin de visual basicllamada IsNumeric, para poder determinar si un valor es un nmero Ejemplo para cargar el contenido de un archivo de texto en un TextBox Multiline Este simple ejemplo carga en un control textBox el contenido de un archivo seleccionado de tipo txt. El control tiene la propiedad Multiline en True y la propiedad ScrollBar en Both. Nota: en este enlace hay una descripcin bsica de las funciones de visual basic para el tratamiento de archivos, leer, guardar etc...

Colocar en un formulario un control Commondialog , un control textBox y un control Command1: Nota: al control textBox en la propiedadMultiline colocarle true y tambin establecerle los ScrollBar

Cdigo fuente en el formulario:

Private Sub Command1_Click() With CommonDialog1

.DialogTitle = " Seleccionar archivo" .Filter = "Archivos txt|*.txt" ' abre el cuadro de dilogo para seleccionar el txt .ShowOpen

If .FileName = "" Then Exit Sub

'Carga el archivo en el control Cargar_Txt .FileName

End With End Sub

Private Sub Form_Load() Command1.Caption = " Abrir archivo txt" End Sub

Sub Cargar_Txt(path As String) Dim linea As String If path = vbNullString Then Exit Sub

Text1 = ""

Open path For Input As #1

While Not EOF(1) 'Lee la linea del archivo Line Input #1, linea 'La carga en el textbox Text1 = Text1 & linea Wend 'Cierra el archivo abierto Close

End Sub

Redimensionar un TextBox al ancho y alto del formulario Este ejemplo simple lo que hace es que al redimensionar el formulario, o maximizarlo, el ancho y alto del control text, se adapte al ancho y alto del la ventana. Para ello el cdigo debe estar ubicado en el evento Resize del formulario, y para redimensionar el textbox ( o cualquier otro control) se utiliza el mtodo Move Ejemplo:

Private Sub Form_Resize()

'Primer y segundo parmetro es el valor Left y Top

'Parmetro 3 y 4, el ancho y alto del text _

que en este caso es el ancho y alto del formulario

Text1.Move 0, 0, Me.ScaleWidth, Me.ScaleHeight End Sub

Cambiar color de borde El textbox no tiene ninguna propiedad para cambiar el color de borde . El siguiente ejemplo muestra una forma simple de como simular esto utilizando controles Shape, como muestra la siguiente imagen donde los textbox son parecidos a los de estilo de windows xp

En el ejemplo, se recorren todos los controles del formulario mediante un bucle For each. Luego, se van creando los dems controles Shape en tiempo de ejecucin, uno para cada textbox , usando el mtodo Load que permite crear los controles en tiempo de ejecucin a partir de uno que est agregado en el formulario formando un array de controles

Controles Colocar en el formulario, un control Shape. Al control Shape especificarle en la propiedad Index el valor 0 pra formar el array de shape Luego agregar algunos textbox en el formulario Cdigo fuente en el formulario

' Posiciona el shape junto al textbox para simular el borde Sub Aplicar_Borde(Shape As Object, color_Borde As Long)

' Variable para recorrer todos los controles del formulario Dim el_Control As Object

'Recorre todos los controles For Each el_Control In Me

' .. si el control es un textbox If TypeOf el_Control Is TextBox Then

Dim i As Integer

'Si el Textbox est dentro de un contenedor, _ como un frame o picturebox, coloca el Shape _ dentro del mismo contenedor Set Shape(i).Container = el_Control.Container

'Propiedades para el shape Shape(i).BackStyle = 0 ' Fondo transparente Shape(i).BorderStyle = 1 ' Borde slido Shape(i).BorderWidth = 1 ' 0 Grosor del borde

' Ancho, alto, pos x y po y del shape Shape(i).Top = el_Control.Top - 10 Shape(i).Left = el_Control.Left - 10 Shape(i).Width = el_Control.Width + 30 Shape(i).Height = el_Control.Height + 30

' Estilo flat para el extbox el_Control.Appearance = 0 ' Le quitamos le borde al textbox el_Control.BorderStyle = 0 ' color del borde del shape Shape(i).BorderColor = color_Borde ' Lo hacemos visible Shape(i).Visible = True

i=i+1 ' Crea un shape en forma dinmica Load Shape(i)

End If Next End Sub

Private Sub Form_Load() Call Aplicar_Borde(Shape1, &H8000000D) End Sub

Nota. en este enlace hay un ejemplo para crear un listbox con borde personalizado tambin usando un control shape Pasar el foco entre Textbox al presionar la tecla enter Este ejemplo muestra una forma de poder, al presionar la tecla enter, pasarle el foco al siguiente textbox. Como en el ejemplo se utiliza la funcin SendKeys para enviar la pulsacin de la tecla Tab, el control que reciba el enfoque lo determinar la propiedad TabIndex Agregar un arreglo de controles textbox, por ejemplo Text1(0), Text1(1), Text1(2) etc...

Cdigo fuente en el formulario

Sub PasarFoco(KeyCode As Integer) ' si es la tecla enter ...

If KeyCode = 13 Then ' enva la pulsacin de tecla Tab y pasa el foco _ a la siguiente caja de texto SendKeys "{TAB}" End If End Sub

Private Sub Form_Load()

Dim i As Integer

' recorre la matriz de textbox For i = 0 To Text1.Count - 1 ' le especifica la propiedad tabIndex Text1(i).TabIndex = i + 1 Next

End Sub

Private Sub Text1_KeyPress(Index As Integer, KeyAscii As Integer) ' anvia como parmetro el valor del cdigo de la tacla Call PasarFoco(KeyAscii) End Sub

Borrar todos los textbox de un formulario Si queremos eliminar el contenido de todas las cajas de texto de un formulario, podemos utilizar un bocle For Each y el operador Type Of Ejemplo: La rutina LimpiarTextBox, recibe como parmetro el formulario, por ejemplo para limpiar todo el contenido de todas las cajas de texto que hay en el el formulario actual, se ejecutara la rutina de la siguiente forma:

Call LimpiarTextBox(Me) Colocar en el formulario, un CommandButton y varios controles TextBox Cdigo fuente en el Form

Option Explicit

' recibe como argumento el formulario '''''''''''''''''''''''''''''''''''''''''''''''''''''' Public Sub LimpiarTextBox(frm As Form) ' recorre todos los controles que hay en el formulario For Each Control In frm.Controls ' verifica que el control es de tipo TextBox If TypeOf Control Is TextBox Then '... Si es un Textbox, entonces lo limpia Control.Text = "" End If Next End Sub

' botn que limpia todos los textbox

''''''''''''''''''''''''''''''''''''' Private Sub Command1_Click() Call LimpiarTextBox(Me) End Sub

CUADROS DE DIALOGO En esta gua se describe el uso bsico con algunos ejemplos, de cmo utilizar los cuadros de dilogos comunes de windows que permiten Abrir un Archivo y el cuadro de dilogo guardar como Contenido: Introduccin Mtodo ShowOpen Propiedades principales del cuadro de dilogo Abrir Archivo Ejemplo para usar el CommonDialog Propiedad DialogTitle Propiedad Filter Propiedad InitDir Propiedad FileTitle Ejemplo 1 Ejemplo 2 Cuadro de dilogo guardar Archivo Ejemplo 1 Ejemplo 2 Ejemplo 3 Enlaces relacionados

Nota: En la siguiente pgina hay mas ejemplos relacionados Ejemplos sobre cuadro de dilogos en visual basic 1 - Introduccin Para poder utilizar dichos cuadros de dilogo hay que incluir al proyecto el ocx Microsoft Common Dialog Controls. Esto se hace desde el men Proyecto en la opcin componentes.

Una ves includo dicho ocx en nuestro proyecto, con el mismo podemos utilizar todos los cuadros de dilogo mencionados anteriormente. Para insertarlo e incorporarlo solo hay que hacerlo como cualquier otro control, es decir hacer un doble click sobre el mismo o seleccionarlo y dibujarlo en el formulario en que lo vamos a utilizar.

2 - Mtodo ShowOpen Para poder utilizar el cuadro que permite abrir y poder seleccionar archivos, se utiliza el mtodo ShowOpen. Al ejecutar este mtodo, automticamente se abre el cuadro de dilogo que nos permite seleccionar un fichero del disco. Antes de ver un ejemplo se describen algunas propiedades importantes. 3 - Propiedades principales del cuadro de dilogo Abrir Archivo FileName: Esta propiedad es una de las mas importantes, y lo que hace es devolvernos el nombre del archivo seleccionado del cuadro de dilogo y el path completo del mismo. DialogTitle: Establece y devuelve el nombre en la barra de ttulo, por ejemplo "Elija un archivo" FileTitle: Devuelve o establece el nombre del archivo seleccionado en un cuadro de dilogo "Abrir archivo" pero sin la ruta, es decir solo el nombre del fichero. el tipo de dato es String Filter: La propiedad Filter se utiliza para determinar las extensiones de archivos que mostrar el Commondialog. Esta propiedad es de tipo String, y a parte de especificar las extensiones que permitir mostrar el Commondialog tambin permite colocarles una descripcin a dichas extensiones. CancelError: Esta propiedad si est en True Indica si se produce un error cuando se elige el botn Cancelar del cuadro de dilogo. Por defecto est en False. DefaultExt: Devuelve o establece la extensin predeterminada del nombre de archivo del cuadro de dilogo. Este dato es de tipo String. InitDir: Esta propiedad es de tipo String y lo que hace es devolver o asignar el directorio de archivos inicial, es decir el que se mostrar al llamar al cuadro de dilogo.

4 - Ejemplo usando el CommonDialog Abrir Archivo: Como se mencion, para llamar a este cuadro se utiliza el mtodo ShowOpen. Por ejemplo:

CommonDialog1.ShowOpen

Al hacer esto se abre el mismo y podemos seleccionar un fichero. Cuando seleccionamos uno, el control Commondialog, en su propiedad FileName, nos devuelve la ruta del archivo elegido, en cambio si no se selecciona ninguno, la propiedad FileName devuelve una cadena vaca. Por ejemplo, este fragmento de cdigo lo que hace es, al presionar un botn abre el CommonDialog con ShowOpen, y luego de que nosotros seleccionamos un archivo, mostramos el path o ruta del mismo en un control Label1.

Private Sub Command1_Click() 'Abrimos el Commondialog con ShowOpen CommonDialog1.ShowOpen

'Si seleccionamos un archivo mostramos la ruta If CommonDialog1.FileName <> "" Then

Label1 = CommonDialog1.FileName

Else 'Si no mostramos un texto de advertencia de que no se seleccion _ ninguno, ya que FileName devuelve una cadena vaca Label1 = "No se seleccion ningn archivo"

End If

End Sub

Propiedad DialogTitle Para poder establecerle un ttulo al cuadro de dilogo, como por ejemplo, "Seleccione un fichero" o el texto que se quiera, se utiliza la propiedad DialogTitle, ejemplo:

'Le establecemos la propiedad DialogTitle CommonDialog.DialogTitle = "Seleccione un archivo"

'Abrimos el Commondialog con ShowOpen CommonDialog1.ShowOpen

Propiedad Filter Para poder permitir visualizar determinadas extensiones se utiliza la propiedad Filter. A esta propiedad que es de tipo String, se le indican las extensiones, con una descripcin, separadas por el caracter "|", creo que se llamaba Pipe si no me acuerdo mal. El siguiente ejemplo abre un cuadro de dilogo que visualiza solo archivos de texto con extensin .txt

CommonDialog.Filter = "Archivos de texto|*.txt" CommonDialog.ShowOpen

Este otro ejemplo visualiza, o mejor dicho filtra archivos con extensin exe, ocx y dll

'Le indicamos a la propieadad filter que muestre solo archivos exe, ocx y dll CommonDialog.Filter = "Archivos ejecutables|*.exe|Archivos Ocx|*.ocx|Archivos Dll|*.dll" CommonDialog.ShowOpen

Este otro ejemplo filtra archivos con extensin jpg, gif, ico, bmp y por ltimo damos la opcin de visualizar cualquier extensin indicndole *.*, es decir todos los archivos.

Private Sub Form_Load() 'Le indicamos a la propieadad Filter que muestre o filre solo archivos Jpg, Bmp, 'Gif, Ico y tambin la posibilidad de mostrar todas las extensiones (*.*) CommonDialog.Filter = "Archivos Jpg|*.jpg|Archivos Bmp|*.bmp|Archivos Gif|*.gif|Archivos de conos|*.ico|Todos los Archivos|*.*" CommonDialog.ShowOpen End sub

Nota: si no le especificamos nada a la propiedad Filter, por defecto muestra todos los archivos sin hacer un filtrado. Otra cosa importante: Al especificar la cadena que filtrar los archivos en la propiedad filter, estos no deben poseer un espacio, por ejemplo:

CommonDialog.Filter = "Archivos Jpg|*.jpg |Archivos Bmp|*.bmp" CommonDialog.ShowOpen

Si probs el ejemplo anterior, vers que podrs visualizar los archivos Bmp sin problemas, pero los jpg no los listar, ya que posee un espacio entre la extensin *.jpg y el caracter "|"

Propiedad InitDir

Para indicar el directorio inicial que mostrar el cuadro de dilogo al abrirse, se hace con la propiedad InitDir. El siguiente ejemplo abre el commondialog en el directorio "c:\windows". Cabe aclarar que primero debemos establecer la propiedad y luego llamar al mtodo ShowOpen.

CommonDialog.InitDir CommonDialog.ShowOpen

"c:\windows"

Propiedad FileTitle Como se dijo antes la propiedad FileName devuelve el path completo del archivo que se seleccion, pero si nosotros queremos obtener solo el nombre, es decir sin la ruta completa, podemos utilizar la propiedad FileTitle. Un Ejemplo:

'Titulo del cuadro de dialogo CommonDialog.DialogTitle = "Seleccione un archivo" 'Abrimos el CommonDialog CommonDialog.ShowOpen 'Mostramos el nombre del archivo seleccionado sin el path MsgBox "El nombre del archivo seleccionado es: " & CommonDialog.FileTitle

Importante: Cuando un usuario no selecciona ningn archivo del cuadro de dilogo, la propiedad FileName devuelve una cadena vaca. Muchas veces nosotros debemos comprobar que se ha seleccionado un archivo, depende a lo que hagamos. Por ejemplo si abrimos un cuadro de dilogo para abrir un archivo que luego se utilizar el path del mismo para leer el contenido, puede que la rutina de cdigo que lee el mismo de error ya que el nombre del archivo es un path vaco, es decir Error: no se ha encontrado el archivo Una forma de comprobarlo es con un simple IF. En el siguiente ejemplo, si al abrir el cuadro de dilogo, se presiona cancelar, se muestra un mensaje "no se ha seleccionado ningn fichero" ya que la propiedad FileName tiene el valor "", (una cadena vaca)

'Abrimos el CommonDialog CommonDialog.ShowOpen

If CommonDialog.FileName = "" Then 'No se ha seleccionado ningn archivo MsgBox "No se ha seleccionado ningn archivo", vbInformation Else 'Mostramos la ruta archivo seleccionado MsgBox CommonDialog.FileName End If

Ejemplo 1

Este ejemplo consiste en al presionar un commandButton se abrir un Commondialog para poder seleccionar un archivo del disco de tipo Gif. Luego ese archivo se visualiza en un control Image. Colocar un Commondialog1, un Command1 y un Image1

'Titulo del CommonDialog CommonDialog1.DialogTitle = "Seleccione el archivo gif"

'Extensin del CommonDialog CommonDialog1.Filter = "Archivos grficos gif|*.gif"

'Abrimos el CommonDialog CommonDialog1.ShowOpen

If CommonDialog1.FileName = "" Then 'No se ha seleccionado ningn archivo MsgBox "No se ha seleccionado ningn archivo", vbInformation Else 'Mostramos la ruta archivo seleccionado Image1.Picture = LoadPicture(CommonDialog1.FileName) End If

Ejemplo 2 Este otro ejemplo lo que hace es, al presionar un Command1 abrir el cuadro de dilogo para seleccionar archivos de texto con extensin txt. Una vez seleccionado un archivo del cuadro de dilogo, se lee el mismo y se carga el contenido del fichero en un control Text1. Colocar un commonDialog1, un control Command1 y un control Text1 con la propiedad Multiline en True

Private Sub Command1_Click() Dim Linea As String 'Titulo del CommonDialog CommonDialog1.DialogTitle = "Seleccione un archivo de texto"

'Extension del CommonDialog. Archivos txt CommonDialog1.Filter = "Archivos de texto Txt|*.txt"

'Abrimos el CommonDialog CommonDialog1.ShowOpen

If CommonDialog1.FileName = "" Then 'salimos de la rutina ya que no se ha seleccionado ningn archivo Exit Sub Else 'Borramos el contenido de Text1 Text1 = ""

'Abrimos el archivo para leerlo, pasndole la ruta con la pro _ piedad FileName del Commondialog Open CommonDialog1.FileName For Input As #1

While Not EOF(1) 'Leemos la lnea Line Input #1, Linea

'Vamos cargando las lneas ledas en el text1 Text1 = Text1 & Linea & vbNewLine Wend

'Cerramos el archivo abierto anteriormente Close End If End Sub

Cuadro de dilogo guardar Archivo Este cuadro de dilogo nos permite poder seleccionar un directorio y especificar el nombre del archivo para guardarlo. A diferencia del cuadro de dilogo anterior, para poder llamarlo, es decir visualizarlo y abrirlo se utiliza el mtodo ShowSave. Las propiedades del mismo son las mismas que utiliza el anterior cuadro de dilogo, las propiedades DialogTitle, Filter, InitDir, FileTitle, etc.. Ejemplo 1 - Cuadro de dilogo Guardar como El siguiente ejemplo lo que hace es al presionar un Command1 se llama al cuadro de dilogo GuardarComo. Luego hay que escribir un nombre de archivo y al presionar el botn Guardar se crear un archivo, que es de tipo txt, ya que le indicamos en la propiedad Filter que es de esta extensin, y luego usando la sentencia Open en modo OutPut crea el fichero con el contenido de un control Text1. Entonces para el ejemplo colocar un CommonDialog1, un control Text1 con la propiedad Multiline en true y un Command1 que abre el Commondialog.

Private Sub Command1_Click()

Dim Linea As String 'Titulo del CommonDialog CommonDialog1.DialogTitle = "Escriba el nombre del archivo de texto"

'Extension del CommonDialog. Archivo de tipo txt CommonDialog1.Filter = "Archivos de texto Txt|*.txt"

'Abrimos el CommonDialog CommonDialog1.ShowSave

If CommonDialog1.FileName = "" Then 'salimos ya que no se ha seleccionado ningn archivo Exit Sub Else If Text1 = "" Then MsgBox "Debe escribir algo en el text1 para poder crear el archivo" 'Salimos de la rutina ya que no hay nada que guardar Exit Sub End If 'Creamos un archivo con la sentencia OutPut, pasandole la ruta _ con la pro piedad FileName del Commondialog Open CommonDialog1.FileName For Output As #1

'Escribimos en el archivo el contenido de Text1 Print #1, Text1

'Cerramos el archivo Close End If End Sub

Ejemplo 2 - Cuadro de dilogo Guardar como Este ejemplo es similar al anterior, con la diferencia de que en ves de guardar el contenido de un control text1 para generar un archivo de texto, se graba una imagen de un control Picture1 en la ruta que le indiquemos y tambin con el nombre que le coloquemos en el cuadro de dilogo. Para grabar el contenido del Picture1 se utiliza la funcin SavePicture. Esta funcin tiene 2 parmetros, el primero es la imagen, en este caso le indicamos el control PictureBox que tiene dicho grfico cargado, el segundo parmetro es el path donde generar dicho archivo. El ejemplo guarda la imagen en formato bmp, por eso mismo en la propiedad Filter del CommonDialog le indicamos esta extensin.

Para probar el ejemplo coloca un Picture1 y cargarle un grfico. Luego coloca un Commondialog1 y un control Command1 que es el que llamar a dicho cuadro de dilogo, donde se deber escribir el nombre del archivo para guardarlo en otro ubicacin.

Private Sub Command1_Click() 'Titulo del CommonDialog CommonDialog1.DialogTitle = "seleccione la ruta y escriba el nombre del archivo imagen"

'Extension del CommonDialog. Archivo de tipo Bmp CommonDialog1.Filter = "Archivos Bmp|*.bmp" 'Abrimos el CommonDialog Guardar como CommonDialog1.ShowSave If CommonDialog1.FileName = "" Then 'salimos ya que no se ha escrito ningn nombre de archivo 'o se seleccion cancelar, por lo tanto FileName es una cadena vaca Exit Sub Else 'Grabamos el archivo SavePicture Picture1.Picture, CommonDialog1.FileName End If End Sub

Nota: Cuando abrimos el dilogo para escribir el nombre del archivo, no es necesario escribir la extensin, ya que la misma est especificada en la propiedad Filter. Si lo hacemos, suponiendo que escribimos MiArchivo.bmp, el archivo generado ser MiArchivo.Bmp.Bmp. Ejemplo 3 Este tercer ejemplo muestra como, utilizar el Cuadro de dilogo Abrir archivo para seleccionar un grfico y cargarlo en un control Image. Luego mediante otro Botn se Abre el utiliza el cuadro de dilogo Guardar, para poder guardar el mismo grfico en alguna ubicacin especifica y con otro nombre. Nota. Para guardar el grfico se utiliza la funcin SavePicture. Esta funcin requiere como parmetro, la imagen, en este caso es la que se encuentra cargada en el Image, y el path donde guardarlo, que en este caso es la ruta y nombre del archivo que hayamos elegido en el Commondialog Colocar un control Image1, un Command1 , un Command2 y un control CommonDialog llamado Commondialog1, como est en la imagen:

El cdigo fuente del formulario

'Carga la imagen en el control Image Private Sub Command1_Click()

With CommonDialog1

.DialogTitle = " Seleccionar imagen ra cargar en el image " 'Filtro para los archivos de imagen .Filter = "BMP|*.bmp|JPG|*.JPG|GIF|*.GIF|Todos los archivos|*.*"

'Muestra el cuadro de dilogo Arir archivo .ShowOpen

'si no se seleccion un archivo salimos If .FileName = "" Then Exit Sub Else ' Si no , cargamos la imagen seleccionada en el control Image1 = LoadPicture(.FileName) End If End With

End Sub

'Guarda la imagen del image en un nuevo archivo Private Sub Command2_Click() On Error GoTo errSub

'si el control Image no tiene una imagen sale de la rutina If Image1.Picture = 0 Then MsgBox "No se puede guardar. El image debe tener una imagen", vbCritical End If With CommonDialog1

'Filtro para guardar con la extencin BMP .Filter = "BMP|*.bmp"

' Muestra el cuadro de dilogo Guardar como .ShowSave

'Si el archivo es una cadena vaca salimos If .FileName = "" Then Exit Sub Else 'Si no, la guardamos SavePicture Image1, .FileName MsgBox " archivo guardado correctamente ", vbInformation End If

End With

Exit Sub

errSub: MsgBox Err.Description End Sub

Private Sub Form_Load()

Image1.Stretch = True Me.Caption = " Ejemplo para guardar una imagen con el" _ & "Commondialog y SavePicture "

Command1.Caption = " Cargar imagen " Command2.Caption = " Guardar imagen"

End Sub

Bueno esto es lo bsico sobre los Commondialog. Si te interesa poder utilizar los cuadros de dilogo de windows pero sin utilizar el ocx de Visual basic, pods hacerlo con el Api de windows. Hacerlo con el Api es mejor, ya que estamos dependiendo menos de archivos externos para nuestra aplicacin, en este caso el ocx COMDLG32.ocx . En este enlace pods descargar un mdulo que permite utilizar el cuadro de dilogo Abrir y commondialog para guardar: Mdulo bas para utilizar los Commondialog de windows usando el Api

APLICACIONES Ejemplos de aplicaciones de Visual Basic En estos ejemplos se muestran las tareas de arquitectura, proyecto, usuario y ensamblado. En esta seccin Ejemplo Application Events Muestra los eventos de aplicacin a los que se obtiene acceso a travs del Diseador de proyectos. Ejemplo ClickOnce Implementa y actualiza una aplicacin mediante ClickOnce. Ejemplo Console Application Muestra un ejemplo de entrada y salida utilizando la ventana de la consola. Ejemplo Consuming a Web Service Muestra cmo consumir diversos servicios Web de .NET Framework, incluidos los servicios que proporcionan el tiempo actual, una historieta y la conversin de divisas. Ejemplo Game Muestra la caracterstica My, la programacin orientada a objetos y el dibujo. Ejemplo Garbage Collection Muestra cmo se controla el recolector de elementos no utilizados de Common Language Runtime (CLR). Ejemplo Logging Utiliza el objeto My.Application.Log para registrar informacin en los archivos y registros de eventos. Ejemplo Multithreading Muestra dos maneras diferentes de implementar las tareas multiproceso. Ejemplo de automatizacin de Office Muestra la automatizacin de Microsoft Agent, Microsoft Word y Microsoft Excel. Ejemplo de reflexin Utiliza la reflexin para descubrir informacin de tipo en un ensamblado. Ejemplo Resources and Settings Muestra los objetos My.Settings y My.Resources. Ejemplo Send Mail

Muestra cmo enviar un mensaje de correo electrnico a travs de SMTP utilizando clases del espacio de nombres System.Web.Mail. Ejemplo Stack Frame Inspection Muestra cmo se recupera informacin mediante programacin sobre la pila de llamadas en cualquier punto desde el cdigo en ejecucin. Ejemplo System and Environment Information Muestra el uso de varias clases que proporcionan informacin del entorno. Ejemplo TCP Remoting Muestra cmo se utiliza la arquitectura remota de .NET Framework. Ejemplo User Information Proporciona informacin general sobre el objeto My.User y la plantilla Formulario de inicio de sesin. En este ejemplo se implementa una autenticacin personalizada sencilla. Ejemplo de actualizacin de Visual Basic 6.0 Presenta el ejemplo de Visual Basic 6.0 VCR en cdigo de Visual Basic 6.0 y de Visual Basic 2005. Referencia Referencia de My La caracterstica My proporciona acceso a la aplicacin y a las propiedades de usuario. My.Application (Objeto) El objeto My.Application proporciona acceso a las propiedades de aplicacin. Secciones relacionadas Ejemplos de datos En estos ejemplos se muestran las tareas de manipulacin de datos. Ejemplos de formularios Windows Forms de Visual Basic En estos ejemplos se muestran las aplicaciones de Windows Forms. Ejemplos del lenguaje Visual Basic En estos ejemplos se muestran los conceptos del lenguaje de Visual Basic. Ejemplos de componentes de servidor de Visual Basic En estos ejemplos se muestran aplicaciones que interactan con componentes del sistema operativo Windows. Ejemplos de seguridad en Visual Basic

En estos ejemplos se muestran las tareas de seguridad. Aplicaciones de ejemplo de Visual Basic

También podría gustarte