Vous êtes sur la page 1sur 4616

Visual Studio 2005 Visual Basic

Copyright© 2016 Microsoft Corporation

El contenido de este documento se ha retirado y ya no se actualiza o admite. Algunos vínculos podrían no funcionar. El contenido retirado
representa la versión más reciente actualizada de este contenido.
Conceptos del lenguaje Visual Basic

Visual Basic
Microsoft Visual Basic 2005 es una evolución del lenguaje Visual Basic que está diseñado para generar de manera productiva
aplicaciones con seguridad de tipos y orientadas a objetos. Visual Basic permite a los desarrolladores centrar el diseño en
Windows, el Web y dispositivos móviles. Como con todos los lenguajes que tienen por objetivo Microsoft .NET Framework, los
programas escritos en Visual Basic se benefician de la seguridad y la interoperabilidad de lenguajes.
Esta generación de Visual Basic continúa la tradición de ofrecer una manera rápida y fácil de crear aplicaciones basadas en
.NET Framework.
Esta versión de Visual Basic vuelve a incluir la compatibilidad para Editar y continuar e incluye nuevas características para el
desarrollo rápido de aplicaciones. Una de estas características, llamada My, proporciona acceso rápido a las tareas frecuentes
de .NET Framework, así como información e instancias de objeto predeterminadas que estén relacionadas con la aplicación y
su entorno en tiempo de ejecución. Las nuevas características de idioma incluyen la continuación de bucle, la eliminación
garantizada de recursos, la sobrecarga de operadores, los tipos genéricos y los eventos personalizados. Visual Basic también
integra completamente .NET Framework y Common Language Runtime (CLR), que proporcionan interoperabilidad de
lenguajes, recolección de elementos no utilizados, seguridad mejorada y control de versiones.
En esta sección
Introducción a Visual Basic
Ayuda a empezar a trabajar mediante una lista de lo nuevo y lo que está disponible en diversas ediciones del producto.
Paseo con guía por Visual Basic
Ofrece una guía paso a paso por diversos aspectos de la programación con Visual Basic.
Ayuda para usuarios de Visual Basic 6.0
Explica las diferencias que presenta Visual Basic entre la versión 6.0 y la versión actual.
Actualizar aplicaciones en Visual Basic
Muestra cómo actualizar diversos tipos de código de Visual Basic.
Desarrollo de aplicaciones con Visual Basic
Explica distintos aspectos del desarrollo en Visual Basic, como el editor de código, la seguridad, el control de excepciones, la
depuración y el uso de la biblioteca de clases de .NET Framework.
Guía de programación en Visual Basic
Es una introducción a los componentes básicos de Visual Basic, un lenguaje de programación orientado a objetos.
Referencia (Visual Basic)
Contiene información sobre el lenguaje y el compilador de Visual Basic.
Aplicaciones de ejemplo de Visual Basic
Contiene información acerca de los ejemplos.
Secciones relacionadas
Introducción a Visual Studio
Proporciona información acerca de las nuevas características, información general de alto nivel sobre Visual Studio y .NET
Framework, y sugerencias para empezar.
Entorno de desarrollo integrado de Visual Studio
Analiza las herramientas compartidas que permiten diseñar, desarrollar, depurar e implementar aplicaciones.
Aplicaciones, componentes y servicios basados en Windows
Trata las aplicaciones para Windows, componentes de distintos tipos, servicios Web XML, servicios de Windows, aplicaciones
de consola y aplicaciones de 64 bits.
Programación de .NET Framework en Visual Studio
Explica el desarrollo de aplicaciones con .NET Framework.
Visual Web Developer
Explica cómo crear aplicaciones Web.
Referencia de la biblioteca de clases de .NET Framework
Proporciona entrada a la biblioteca de clases, interfaces y tipos de valor que están incluidas en Microsoft .NET Framework
SDK.
Visual Studio Tools para Office
Le guía para aprovechar las mejoras de productividad introducidas en Microsoft .NET Framework versión 2.0 para extender
Microsoft Office Word 2003, Microsoft Office Excel 2003 y Microsoft Office Outlook 2003.
Desarrollo de dispositivos inteligentes
Explica el desarrollo de software que se ejecuta en dispositivos inteligentes basados en Windows CE, como por ejemplo
dispositivos Pocket PC y Smartphones.
Conceptos del lenguaje Visual Basic

Introducción a Visual Basic


Esta sección de la documentación sirve como introducción al desarrollo de aplicaciones con Visual Basic.
En esta sección
Lo nuevo en Visual Basic
Explica las nuevas características de Visual Basic.
Ediciones de Visual Basic
Describe las características incluidas con Visual Studio y .NET Framework.
Tutoriales del lenguaje Visual Basic
Proporciona una lista de páginas de Ayuda que explican aspectos del lenguaje Visual Basic.
Recursos adicionales para programadores de Visual Basic
Proporciona una lista de sitios Web y grupos de noticias que le ayudarán a encontrar la solución a los problemas más
comunes.
Cómo se utiliza Visual Basic
Proporciona páginas de vínculos clasificadas por categorías que llevan a páginas de Ayuda del tipo "Cómo" dedicadas a
aspectos importantes de la programación.
Secciones relacionadas
Decidir qué tecnologías y herramientas utilizar
Proporciona una guía interactiva para ayudar a elegir el enfoque o la tecnología que se debe utilizar, al igual que vínculos a
información adicional.
Programación orientada a objetos en Visual Basic
Proporciona vínculos a páginas que presentan la programación orientada a objetos y describen cómo crear sus propios
objetos y cómo utilizar objetos para simplificar la escritura del código.
Aplicaciones de ejemplo de Visual Basic
Proporciona vínculos al código de ejemplo de Visual Basic.
Utilizar la Ayuda en Visual Studio
Explica cómo utilizar filtros y proporciona vínculos a páginas sobre cómo buscar Ayuda, utilizar el índice y buscar
información en MSDN Library.
Personalizar el entorno de desarrollo
Trata sobre cómo establecer opciones para el entorno de desarrollo integrado (IDE), tales como teclas de método abreviado
y preferencias de depuración.
Soporte técnico
Explica cómo recibir asistencia y proporcionar información al servicio técnico.
Visual Studio
Proporciona vínculos a la documentación de Visual Studio.
Ediciones de Visual Studio
Enumera las características de las tres ediciones de Visual Studio.
Visual C#
Proporciona los vínculos a la documentación sobre desarrollo de aplicaciones con Visual C#.
Visual C++
Proporciona vínculos a la documentación de Visual C++.
Visual J#
Incluye los vínculos a la documentación sobre desarrollo de aplicaciones con Visual J#.
Visual Studio Tools para Office
Proporciona información sobre cómo utilizar Microsoft Office y Visual Studio como parte de una aplicación empresarial.
Conceptos del lenguaje Visual Basic

Lo nuevo en Visual Basic


En esta página se describen las características nuevas y mejoradas que se incluyen en esta versión de Visual Basic para Visual
Studio 2005. Seleccione en los vínculos siguientes para leer información más detallada sobre una característica.
Nota
Si está migrando desde Visual Basic 6.0 a Visual Basic 2005, hay varios temas que le ayudarán a realizar el paso a la nueva ve
rsión. Para obtener más información, vea Lo nuevo para usuarios de Visual Basic 6.0.

Compilador y lenguaje Visual Basic


Las mejoras realizadas en Visual Basic 2005 simplifican el código fuente y permiten la interacción con componentes que usan
funciones avanzadas. Para obtener más información, vea Lo nuevo en el lenguaje Visual Basic y
Lo nuevo en el compilador de Visual Basic.
Desarrollo de Visual Basic con My
Visual Basic 2005 proporciona características nuevas para el desarrollo rápido de aplicaciones que pretende mejorar la
productividad y facilidad de uso a la vez que aumenta la funcionalidad. Una de estas características, llamada My, proporciona
acceso a las funciones de .NET Framework utilizadas habitualmente, así como información e instancias de objeto
predeterminadas que estén relacionadas con la aplicación y su entorno en tiempo de ejecución. Esta información se organiza
en un formato compatible con IntelliSense y se dispone lógicamente en función del uso. Para obtener más información, vea
Desarrollo con la función My.
Desarrollo de aplicaciones
El My.Application (Objeto) proporciona acceso a una aplicación, permitiéndole actualizarla fácilmente y registrar información
de la misma. My.Application también se puede utilizar para tener acceso a los argumentos de línea de comandos de una
aplicación o para ejecutar código cuando se inicia o se cierra una aplicación. Para obtener más información, vea
Actualizar una aplicación, Registrar información de la aplicación y Acceso a una aplicación en ejecución en Visual Basic.
Portapapeles
El My.Computer.Clipboard (Objeto) proporciona acceso fácil para leer del Portapapeles y escribir en él, junto con métodos para
borrarlo y determinar qué tipo de datos se almacenan en él. Para obtener más información, vea
Almacenar y leer datos en el Portapapeles.
Recursos del equipo
Es posible tener acceso a muchos recursos informáticos a través de objetos My, incluidos el reloj, el teclado, el mouse, los
puertos y el Registro del equipo. Para obtener más información, vea Acceso a los recursos del equipo.
Entrada/salida de archivos
El My.Computer.FileSystem (Objeto) proporciona métodos y propiedades de acceso a archivos que simplifican el proceso de
E/S de archivos. TextFieldParser (Objeto) permite analizar grandes archivos de texto delimitados o de ancho fijo, mientras que
métodos como WriteAllText, WriteAllBytes, ReadAllText y ReadAllBytes realizan la lectura y escritura en los archivos de
forma intuitiva a la vez que aumentan el rendimiento. De forma semejante, los métodos GetFileInfo, GetDirectoryInfo y
GetDriveInfo proporcionan información sobre los archivos, directorios y unidades. Para obtener más información, vea
Analizar archivos de texto con el objeto TextFieldParser.
Operaciones de red
El My.Computer.Network (Objeto) proporciona métodos y propiedades para cargar y descargar archivos, así como para
comprobar el estado de la conexión y determinar si los equipos remotos están disponibles. Para obtener más información, vea
Realizar operaciones de red.
Recursos
El My.Resources (Objeto) permite tener acceso a recursos como los de audio, de iconos y adaptados a otros idiomas. Para
obtener más información, vea Acceso a los recursos de la aplicación.
Puede agregar y administrar recursos mediante la página Recursos del Diseñador de proyectos. Para obtener más
información, vea Página Recursos, Diseñador de proyectos.
Configuración del usuario y de la aplicación
El My.Settings (Objeto) le permite conservar y cambiar la configuración del usuario, así como leer la configuración de la
aplicación. Para obtener más información, vea Acceso a la configuración de la aplicación..
También puede administrar la configuración de la aplicación mediante la página Configuración del Diseñador de
proyectos. Para obtener más información, vea Página Configuración, Diseñador de proyectos.
Acceso a datos
Visual Basic 2005 incluye varias características nuevas para ayudar a desarrollar aplicaciones que tengan acceso a los datos.
Asistente para la configuración de orígenes de datos simplifica la conexión de su aplicación a los datos incluidos en bases de
datos, servicios Web y objetos creados por los usuarios.
La nueva característica Ventana Orígenes de datos proporciona una ubicación central para ver los datos disponibles para su
proyecto y los asociados con éste, además de reducir la complejidad del enlace de datos permitiendo arrastrar elementos
desde la ventana hasta los formularios para crear controles enlazados a datos.
Tareas como rellenar conjuntos de datos, ejecutar consultas y ejecutar procedimientos almacenados se pueden realizar ahora
mediante el nuevo objeto TableAdapter generado por Visual Studio. La nueva característica de datos locales permite incluir
archivos de base de datos de Microsoft Access y archivos de base de datos de Microsoft SQL Server Express directamente en
su aplicación. Para obtener una lista completa de las características nuevas, vea Lo nuevo en datos.
Mejoras en tiempo de diseño
Editar y continuar
Editar y continuar le permite realizar cambios en su aplicación mientras se está ejecutando bajo el depurador, sin necesidad
de detener y reiniciar la aplicación. Los cambios que realice durante el modo de interrupción se aplicarán inmediatamente al
reanudar la ejecución de su aplicación.
Para obtener más información, vea Editar y continuar (Visual Basic).
Edición de atributos en la ventana Propiedades
Ahora puede editar atributos comunes que se aplican a sus clases y métodos de la ventana Propiedades en lugar de tener que
aplicarlos en el código.
Para obtener más información, vea Cómo: Editar atributos de código.
Filtrado de IntelliSense
Ahora puede ajustar el nivel de detalle proporcionado por IntelliSense en el Editor de código. Cuando se muestra la ventana de
IntelliSense, puede excluir los miembros menos utilizados si hace clic en la ficha Común o ver todo lo que está disponible si
hace clic en la ficha Todos. Ajustando el nivel, puede omitir los miembros poco frecuentes o raros cuando no son necesarios, o
bien incluirlos cuando lo son.
Para obtener más información, vea Listas de finalización filtradas en Visual Basic.
IntelliSense en zona
IntelliSense en zona es una característica de IntelliSense de Visual Basic que muestra determinados elementos de la lista de
finalización de instrucciones con un color diferente si no tienen permisos suficientes para ejecutarse en la zona de seguridad
especificada. Esta compatibilidad en tiempo de diseño le permite desarrollar más fácilmente aplicaciones que se ejecuten en
confianza parcial.
Para obtener más información, vea Opciones de IntelliSense específicas de Visual Basic. Vea también
Cómo: Establecer una zona de seguridad para una aplicación ClickOnce.
Fragmentos de código de IntelliSense
La biblioteca de fragmentos de código de IntelliSense consta de 380 partes de código preescritas. Puede agregar estas rutinas
reutilizables a su código y editarlas utilizando los punteros que contiene el código. Los fragmentos de código están disponibles
al hacer clic con el botón secundario del mouse (ratón) en el Editor de código y después en Insertar fragmento de código.
También están disponibles a través de los métodos abreviados de teclado.
Las tareas relacionadas con fragmentos de código van desde crear una excepción personalizada hasta enviar un mensaje de
correo electrónico o dibujar un círculo. Algunas son simples expansiones para las estructuras de programación comunes. La
biblioteca es extensible; puede crear tareas de código que se ajusten a sus necesidades comerciales y agregarlas a la biblioteca.
También puede descargar más tareas de biblioteca de proveedores de software de otros fabricantes y de sitios de la
comunidad de Visual Basic.
Para obtener más información, vea Fragmentos de código de IntelliSense de Visual Basic y
Cómo: Insertar fragmentos de código en el código (Visual Basic).
Corrección de errores y advertencias
Con la función Corrección inteligente de errores de compilación, el Editor de código puede sugerir soluciones para los
errores y advertencias comunes y permitirle seleccionar la corrección adecuada, que se aplicará a su código. Cuando se
produce un error, si aparece un símbolo bajo el lado derecho de la línea ondulada, al colocar el puntero del mouse sobre ella el
símbolo se convierte en un panel de etiquetas inteligentes. Al hacer clic en el panel de etiquetas inteligentes se abre la ventana
auxiliar Opciones de corrección de errores, que proporciona una descripción del error, sugiere posibles formas de corregirlo
y, cuando es posible, le permite obtener una vista previa de la corrección.
Para obtener más información, vea Corrección automática de la compilación inteligente y
Configurar advertencias en Visual Basic.
Ayudante de excepciones
Cuando está depurando una aplicación, el Ayudante de excepciones se abre de manera predeterminada para ayudar con las
excepciones no controladas. Si lo prefiere, puede cambiar el entorno para que el asistente aparezca cuando se produzca una
excepción dentro de su código. El Ayudante de excepciones muestra el tipo de excepción, el mensaje concreto para la
excepción que se ha producido, una lista de sugerencias para solucionar el problema y posibles acciones que llevar a cabo.
Para obtener más información, vea Cómo: Corregir errores en tiempo de ejecución con el Ayudante de excepciones.
Documentación XML
La documentación de código XML le permite documentar sus clases en código y exponer esa documentación como XML. La
documentación XML resultante se puede utilizar y mostrar de diversas maneras, permitiéndole crear la documentación para su
código mientras lo escribe.
Para obtener más información, vea Cómo: Crear documentación XML en Visual Basic.
Esquema del documento (Ventana)
La ventana Esquema del documento ahora admite vistas de esquema para formularios Windows Forms además de páginas
Web y páginas HTML de ASP.NET. Puede utilizar la ventana Esquema del documento para desplazarse entre los controles de
formularios Windows Forms cuando está en la vista Diseño del editor. Para tener acceso a esta ventana, en el menú Ver, haga
clic en Otras ventanas y, a continuación, haga clic en Esquema del documento. Para obtener más información, vea
Esquema del documento (Ventana)
Diseñador de proyectos para administrar proyectos, configuraciones y recursos
El Diseñador de proyectos proporciona una ubicación centralizada para administrar las propiedades, configuraciones y
recursos del proyecto. Para abrirlo, seleccione el comando Propiedades del menú Proyecto.
Para obtener más información, vea Introducción al Diseñador de proyectos.
Diseñador de configuración
La página Configuración del Diseñador de proyectos le permite especificar la configuración de aplicación de un proyecto,
que puede ser de ámbito de usuario o de ámbito de aplicación. Esta característica reemplaza las propiedades dinámicas. Para
obtener más información, vea Página Configuración, Diseñador de proyectos.
Diseñador de recursos
El Diseñador de recursos es una herramienta de interfaz de usuario que le permite administrar los recursos (como cadenas,
imágenes, iconos, sonido y archivos) utilizados por un proyecto. Crea recursos con establecimiento inflexible de tipos a los que
puede tener acceso en tiempo de ejecución mediante el My.Resources (Objeto). Para obtener información sobre cómo tener
acceso a los recursos a través del objeto My.Resources, vea Acceso a los recursos de la aplicación.
La página Recursos del Diseñador de proyectos aloja una instancia del Diseñador de recursos que almacena y mantiene
los recursos en una ubicación única (Resources.resx). Para obtener más información, vea
Página Recursos, Diseñador de proyectos.
Implementación ClickOnce
La implementación ClickOnce permite publicar aplicaciones de consola, y las basadas en Windows, de actualización automática
que se pueden instalar, actualizar y ejecutar tan fácilmente como las aplicaciones Web. Para obtener más información, vea
Implementación ClickOnce.
Las nuevas fichas Seguridad, Firma y Publicar del Diseñador de proyectos le permiten personalizar su implementación
ClickOnce. Utilice el nuevo comando Publicar del menú Generar (o del menú contextual del Explorador de soluciones) para
abrir el Asistente para publicación, una herramienta para guiarle a través del proceso de publicación de su aplicación. Para
obtener más información, vea Panel Publicar, Diseñador de proyectos, Página Firma, Diseñador de proyectos y
Página Seguridad, Diseñador de proyectos.
Implementación de aplicaciones de 64 bits
Tanto la implementación de ClickOnce como la de Windows Installer admiten la instalación en plataformas de 64 bits. Para
obtener más información, vea Implementar aplicaciones de 64 bits.
Ejemplos expandidos
Visual Basic 2005 incluye más de 60 aplicaciones de ejemplo. Las nuevas características incluyen:
Implementación ClickOnce
Programación con el objeto My
Mejoras de lenguaje, incluidos los genéricos y los comentarios de XML
Acceso a datos
Para obtener más información, vea Aplicaciones de ejemplo de Visual Basic.
Actualizar desde Visual Basic 6.0
Las herramientas de actualización de Visual Basic 2005 presentan numerosas mejoras, incluida la capacidad de actualizar
muchos controles ActiveX de Visual Basic 6.0 a sus equivalentes de Visual Basic 2005.
Para obtener más información, vea Lo nuevo en actualización.
Vea también
Conceptos
Lo nuevo en Visual Studio 2005
Lo nuevo en formularios Windows Forms y controles de formularios Windows Forms
Lo nuevo en ASP.NET
Lo nuevo en los proyectos Web
Lo nuevo en el desarrollo Web de Visual Studio
Lo nuevo en implementación
Conceptos del lenguaje Visual Basic

Lo nuevo en el lenguaje Visual Basic


Visual Basic 2005 presenta nuevas características de lenguaje, incluida la continuación de bucles, la disposición garantizada de
recursos, las propiedades de acceso combinado, los tipos de datos sin signo y que aceptan valores NULL, la sobrecarga de
operadores, los tipos parciales y genéricos, los eventos personalizados y la comprobación de la compatibilidad con
Common Language Specification (CLS).
Esta página muestra características nuevas del lenguaje Visual Basic con Visual Basic 2005. Para obtener un análisis de
características y funcionalidad que han cambiado de versiones anteriores, vea
Cambios en el lenguaje para usuarios de Visual Basic 6.0.
Continue Statement
Visual Basic proporciona ahora una instrucción Continue, que pasa inmediatamente a la iteración siguiente de un bucle Do,
For o While. Para obtener más información, vea Cómo: Pasar a la siguiente iteración de un bucle y
Instrucción Continue (Visual Basic).
Acceso a formularios de Visual Basic 6.0
Ahora Visual Basic permite hacer referencia a un formulario definido, como Form1, mediante su nombre de clase, en lugar de
crear de forma explícita una instancia de él. Para obtener más información, vea Cómo: Obtener acceso a un formulario.
IsNot (Operador)
Ahora Visual Basic proporciona un operador IsNot, con el que puede evitar utilizar los operadores Not e Is en un orden
extraño. Para obtener más información, vea Cómo: Comprobar si dos objetos son iguales y IsNot (Operador).
Operador TryCast
Ahora, Visual Basic proporciona el operador de conversión de tipos TryCast, que devuelve Nothing si se produce un error al
intentar la conversión, a diferencia de CType y DirectCast, que provocan el error InvalidCastException. Para obtener más
información, vea TryCast.
Using (Instrucción)
Ahora Visual Basic ofrece un bloque Using...End Using para garantizar la disposición de un recurso del sistema cuando su
código deja el bloque por cualquier razón. Para obtener más información, vea Cómo: Deshacerse de un recurso del sistema y
Instrucción Using (Visual Basic).
Límite inferior cero explícito en una matriz
Ahora Visual Basic permite a una declaración de matriz especificar el límite inferior (0) de cada dimensión junto con el límite
superior. Para obtener más información, vea Cómo: Especificar el límite inferior cero de una matriz.
Propiedades con niveles de acceso combinados
Ahora Visual Basic permite declarar una propiedad con diferentes niveles de acceso en sus procedimientos Get y Set. Para
obtener más información, vea Cómo: Declarar una propiedad con niveles de acceso mixtos.
Tipos sin signo
Ahora Visual Basic admite tipos de datos enteros sin signo (UShort, UInteger y ULong) así como el tipo SByte con signo.
Para obtener más información, vea Cómo: Llamar a una función de Windows que adopta tipos sin signo,
Cómo: Optimizar el almacenamiento de enteros positivos con tipos sin signo, UInteger (Tipo de datos),
ULong (Tipo de datos, Visual Basic), UShort (Tipo de datos, Visual Basic) y SByte (Tipo de datos, Visual Basic).
Tipos que aceptan valores NULL
Ahora Visual Basic admite extensiones de tipos de valor que pueden tomar sus valores normales o un valor nulo. Un valor nulo
(NULL) es útil para indicar que una variable no tiene ningún valor definido porque la información no está disponible
actualmente. Para obtener más información, vea Tipos de valores y tipos de referencia y
Tipos de valor que puede que no tengan un valor definido.
Sobrecarga de operadores
Ahora Visual Basic permite definir un operador estándar (como +, &, Not o Mod) en una clase o estructura definidas. Para
obtener más información, vea Cómo: Utilizar una clase que define operadores, Cómo: Definir un operador y
Operator (Instrucción).
Separación de código con tipos parciales
Ahora Visual Basic proporciona un mecanismo para permitir al entorno de desarrollo integrado (IDE) separar el código
generado de su código escrito en archivos de código fuente independientes. La mayor parte de las veces, sólo tiene que utilizar
el código que ha escrito. Para obtener más información, vea Partial (Visual Basic).
Tipos genéricos
Ahora Visual Basic admite parámetros de tipo en clases genéricas, estructuras, interfaces, procedimientos y delegados. Un
argumento de tipo correspondiente especifica en tiempo de compilación el tipo de datos de uno de los elementos del tipo
genérico. Para obtener más información, vea Tipos genéricos en Visual Basic.
Eventos personalizados
Ahora Visual Basic permite mayor control sobre el comportamiento detallado de los eventos. Puede declarar eventos
personalizados utilizando la palabra clave Custom como un modificador de la instrucción Event. En un evento personalizado,
especifica exactamente qué sucede cuando el código agrega o quita un controlador de eventos del evento o cuando el código
provoca el evento. Para obtener ejemplos, vea Event (Instrucción), Cómo: Declarar eventos que evitan que se pierda memoria y
Cómo: Declarar eventos que evitan bloqueos. Para mantener compatibilidad con versiones anteriores de código existente, la
palabra clave Custom no es una palabra clave reservada.
Opciones de comprobación del compilador
Visual Basic 2005 introduce nuevas opciones de comprobación del compilador. Las opciones /nowarn y
/warnaserror (Visual Basic) permiten controlar las advertencias de forma más detallada. Ahora estas opciones del compilador
incluyen una lista de identificadores de advertencia como parámetro opcional para especificar a qué advertencias se aplica la
opción.
Comprobación de la compatibilidad con CLS
Ahora Visual Basic genera una advertencia para cada línea de código que contiene cualquier especificación u operación no
compatible con Common Language Specification (CLS).
Comprobación de variables no inicializadas
Ahora Visual Basic genera una advertencia para cada variable potencialmente no inicializada. Las variables adquieren este
estado si existe al menos una ruta de acceso de ejecución posible que no asigna ningún valor a la variable antes de utilizarla.
Para obtener más información, vea Configurar advertencias en Visual Basic.
Vea también
Referencia
Resumen de tipos de datos
Conceptos
Lo nuevo en Visual Studio 2005
Escribir código compatible con CLS
Duración de los objetos: cómo se crean y destruyen
Otros recursos
Referencia de Visual Basic
Control de excepciones y errores en Visual Basic
Conceptos del lenguaje Visual Basic

Lo nuevo en el compilador de Visual Basic


Visual Basic 2005 incluye nuevas opciones y otros cambios del compilador.
Compilación condicional
Visual Basic presenta las nuevas constantes de compilación condicional siguientes para todos los proyectos:
TRACE. Valor booleano que se puede establecer para especificar que los métodos de la clase Trace generan el resultado
en la ventana Resultados.
VBC_VER. Versión de Visual Basic, en formato major.minor. Para Visual Basic 2005, el valor de VBC_VER es 8.0.
Para obtener más información, vea Constantes de compilación condicional
Opciones predeterminadas de la línea de comandos en Vbc.rsp
El compilador de la línea de comandos de Visual Basic almacena ahora las opciones predeterminadas de la línea de comandos
en el archivo Vbc.rsp, en el mismo directorio que el compilador de la línea de comandos, Vbc.exe. Vbc.rsp se puede modificar
para cambiar la configuración de las opciones predeterminadas de la línea de comandos.
Nuevas opciones de la línea de comandos
Hay siete nuevas opciones de compilador de la línea de comandos:
La opción /codepage especifica la página de códigos que se debe utilizar para abrir archivos de código fuente.
La opción /doc genera un archivo de documentación XML basado en comentarios incluidos en el código.
La opción /errorreport proporciona una manera conveniente de informar a Microsoft sobre un error del compilador
interno de Visual Basic.
La opción /filealign especifica el tamaño de las secciones del archivo de resultados.
La opción /noconfig especifica que el compilador no debe hacer referencia automáticamente a los ensamblados .NET
Framework normalmente utilizados o importar los espacios de nombres System y Microsoft.VisualBasic.
La opción /nostdlib quita la referencia automática al ensamblado System.dll y otros ensamblados normalmente
utilizados.
La opción /platform especifica el procesador que es el destino del archivo de resultados en las situaciones donde es
necesario especificarlo explícitamente.
/nowarn y /warnaserror
Las opciones /nowarn y /warnaserror proporcionan más control sobre cómo se controlan las advertencias. Estas opciones del
compilador ahora toman una lista de identificadores de advertencias como parámetro opcional, para especificar a qué
advertencias se aplica la opción.
Vea también
Conceptos
Lo nuevo en el lenguaje Visual Basic
Conceptos del lenguaje Visual Basic

Ediciones de Visual Basic


Este tema detalla y describe las características incluidas en varias ediciones de Visual Basic.
Plantillas de proyecto de Visual Basic
La mejor manera de crear proyectos nuevos es utilizar las plantillas o los asistentes para aplicaciones de Visual Basic. Las
plantillas de proyecto se utilizan junto con los marcos de trabajo de aplicación y las bibliotecas para crear programas de inicio.
La siguiente tabla muestra qué plantillas de proyecto de Visual Basic están disponibles en las distintas ediciones de Visual
Studio.
Plantilla Microsoft Visual Basic 200 Visual Studio 2005 S Visual Studio 2005 Professional
5 Express tandard y superiores
Sitio Web ASP.NET X X

Servicio Web ASP.NET X X

Sitio Web ASP.NET Crystal Reports X

Biblioteca de clases X X X

Aplicación de consola X X X

Aplicación Crystal Reports X

Aplicación de dispositivo X X

Proyecto vacío X X X

Sitio Web vacío X X

Plantilla de Excel X

Libro de Excel X

Starter Kit de la colección de película X X X


s

Complemento de Outlook X

Starter Kit de sitios Web personales X X

Pocket PC 2003: Biblioteca de clases X X

Pocket PC 2003: Biblioteca de clases X X


(1.0)

Pocket PC 2003: Aplicación de conso X X


la

Pocket PC 2003: Aplicación de conso X X


la (1.0)
Pocket PC 2003: Biblioteca de contro X X
les

Pocket PC 2003: Aplicación de dispo X X


sitivo

Pocket PC 2003: Aplicación de dispo X X


sitivo (1.0)

Pocket PC 2003: Proyecto vacío X X

Pocket PC 2003: Proyecto vacío (1.0) X X

Starter Kit del protector de pantalla X X X

Proyecto de SQL Server X

Smartphone 2003: Biblioteca de clas X X


es (1.0)

Smartphone 2003: Aplicación de co X X


nsola (1.0)

Smartphone 2003: Aplicación de dis X X


positivo (1.0)

Smartphone 2003: Proyecto vacío (1 X X


.0)

Proyecto de prueba X

Biblioteca de controles Web X X

Aplicación para Windows X X X

Windows CE 5.0: Biblioteca de clases X X

Windows CE 5.0: Aplicación de cons X X


ola

Windows CE 5.0: Biblioteca de contr X X


oles

Windows CE 5.0: Aplicación de dispo X X


sitivo

Windows CE 5.0: Proyecto vacío X X

Biblioteca de controles de Windows X X

Servicio de Windows X

Documento de Word X
Plantilla de Word X

Para obtener más información sobre las plantillas y los elementos disponibles de proyectos, vea
Plantillas de proyectos predeterminadas en Visual Studio. Para obtener información sobre tipos de archivo
Tipos de archivo y extensiones de archivo en Visual Basic, Visual C# y Visual J#.
Herramientas visuales
Los diseñadores siguientes se incluyen en Visual Basic.
Característica Descripción Microsoft Visual S Visual Studio
Visual Basi tudio 20 2005 Professi
c 2005 Exp 05 Stan onal y superi
ress dard ores
Diseñador de Web Forms Proporciona un conjunto de herramienta X
s visuales para trabajar con controles y p
áginas de formularios Web Forms de ASP
.NET.

Diseñador de Windows Forms Proporciona un conjunto de herramienta X X X


s visuales para trabajar con controles y fo
rmularios Windows Forms.

Diseñador de componentes Proporciona un conjunto de herramienta X


s visuales para trabajar con componentes
no visuales.

Diseñador de esquemas XML (Diseñador XML) Proporciona un conjunto de herramienta X


s visuales para trabajar con esquemas X
ML, conjuntos de datos ADO.NET y docu
mentos XML.

Visual Database Tools Proporciona un conjunto de herramienta X X X


s para trabajar con bases de datos.

Vista de clases Muestra los símbolos definidos, a los que X X


se hace referencia o a los que se llama en
la aplicación que está desarrollando.

Crystal Reports Proporciona herramientas con el fin de cr X


ear informes para aplicaciones para Wind
ows y Web.

Visor de informes Proporciona las herramientas de informe X


s para las aplicaciones personalizadas.

Para ver una lista completa de las características en las distintas ediciones de Visual Studio, vea Ediciones de Visual Studio.
Vea también
Tareas
Cómo: Modificar las propiedades y los valores de configuración del proyecto
Referencia
Valores de configuración de Visual Basic
Conceptos
Aspectos básicos de instalación y configuración
Ediciones de Visual Database Tools
Tipos de proyectos en Visual Basic Express
Otros recursos
Ediciones de Visual Studio
Conceptos del lenguaje Visual Basic

Tutoriales del lenguaje Visual Basic


Los tutoriales proporcionan instrucciones detalladas para los escenarios más comunes, por eso son un buen punto de partida
para empezar a conocer el producto o algún área de la aplicación en particular.
En esta sección
Tutorial: Declarar y provocar eventos
Ilustra cómo se declaran y producen eventos en Visual Basic.
Controlar eventos
Explica cómo controlar eventos a través de la palabra clave estándar WithEvents o de las nuevas palabras clave
AddHandler/RemoveHandler.
Definir clases
Explica cómo declarar una clase y sus campos, propiedades, métodos y eventos.
Llamar a las API de Windows
Explica cómo utilizar las instrucciones Declare para llamar a las API de Windows. Aporta información sobre cómo utilizar
atributos para controlar el cálculo de referencias a llamadas a la API y cómo exponer una llamada a la API como método de
una clase.
Crear e implementar interfaces
Muestra cómo se declaran e implementan interfaces en Visual Basic.
Subprocesamiento múltiple
Muestra cómo crear una aplicación de subprocesamiento múltiple que busque las repeticiones de una palabra en un archivo
de texto.
Control estructurado de excepciones
Muestra cómo crear y mantener programas con un control de errores muy completo y cómo utilizar Try...Catch...Finally.
Crear objetos COM con Visual Basic
Muestra cómo crear objetos COM en Visual Basic, con o sin la plantilla de clases COM.
Implementar la herencia mediante objetos COM
Explica cómo utilizar Visual Basic 6.0 para crear un objeto COM que contenga una clase y utilizarlo como clase base en Visual
Basic.
Manipular archivos y carpetas en Visual Basic
Muestra cómo utilizar las funciones de Visual Basic para determinar información relativa a un archivo, buscar una cadena en
un archivo y escribir en él.
Manipular archivos con métodos de .NET Framework
Muestra cómo utilizar los métodos de .NET Framework para determinar información relativa a un archivo, buscar una
cadena en un archivo y escribir en él.
Secciones relacionadas
Tutoriales de Visual Basic
Proporciona vínculos a tutoriales de Visual Basic que tratan sobre aplicaciones distribuidas, datos, servicios Web, formularios
Windows Forms, formularios Web Forms, creación de componentes y controles, servicios de Framework, actualizaciones,
internacionalización y accesibilidad.
Conceptos del lenguaje Visual Basic

Recursos adicionales para programadores de Visual Basic


Los siguientes sitios Web y grupos de noticias pueden ayudarle a encontrar respuestas a problemas comunes.
Recursos de Microsoft
En el Web
Ayuda y soporte técnico de Microsoft
Proporciona acceso a los artículos de Knowledge Base (KB), a las descargas y actualizaciones, difusiones Web sobre soporte
técnico y otros servicios.
Centro para desarrolladores de Microsoft Visual Basic
Proporciona ejemplos de código, información de actualización, descargas gratuitas y contenido técnico.
Registro Web del equipo de Microsoft Visual Basic
Proporciona acceso al registro Web del equipo de Visual Basic.
Microsoft ASP.NET
Proporciona artículos, demostraciones, vistas previas de herramientas y otra información para el desarrollo Web en Visual
Basic.
GotDotNet para Visual Basic
Contiene artículos, ejemplos y otra información de interés para los desarrolladores de Visual Basic.
Charlas, foros y grupos de discusión
Foros de MSDN
Proporciona foros de discusión basados en Web para muchas tecnologías de Microsoft, incluidas Visual Basic y .NET
Framework.
Grupos de discusión de MSDN
Ofrece la experiencia de un grupo de noticias y permite ponerse en contacto como una comunidad de expertos de todo el
mundo.
Charlas de MSDN
Proporciona discusiones sobre productos o tecnologías de Microsoft. Uno o más expertos de Microsoft alojan cada charla.
Están disponibles las transcripciones de las charlas finalizadas.
Vídeos y difusiones por Web
Visual Basic en películas
Muestra 101 cortometrajes que intentan proporcionar las nuevas habilidades en Visual Basic a todos los usuarios, desde el
principiante al desarrollador avanzado.
Channel9
Proporciona comunidad continua a través de vídeos, Wikis y foros.
Recursos de otros proveedores
El sitio Web de MSDN proporciona información sobre sitios de otros fabricantes y grupos de noticias de interés. Para obtener
la lista más actual de recursos disponible, vea el sitio Web de MSDN Visual Basic Community.
En el Web
DevX Visual Basic Zone
Proporciona artículos técnicos detallados para el desarrollador de Visual Basic que se pasa a Visual Basic 2005.
devCity.NET
Proporciona acceso a más de 5.000 artículos sobre Microsoft Visual Basic y páginas Active Server (ASP), código fuente,
tutoriales y contenido enviado por los usuarios cuando se suscriba a vbCity.NET.
Vea también
Otros recursos
Introducción a Visual Basic
Interactuar con otros desarrolladores
Compatibilidad de productos y accesibilidad
Conceptos del lenguaje Visual Basic

Cómo se utiliza Visual Basic


Cómo... es su puerta de enlace a temas clave basados en las tareas de la programación de Visual Basic y el desarrollo de
aplicaciones. En este tema se presentan las categorías básicas de lo que puede hacer con Visual Basic. Los vínculos
proporcionan punteros a páginas importantes de Ayuda sobre procedimientos.
Aprendizaje del lenguaje Visual Basic (Cómo se utiliza Visual Basic)
Programación orientada a objetos … Administrar el flujo de control … Trabajar con variables … Controlar errores y
excepciones … etc.
Actualización para usuarios de Visual Basic 6 (Cómo se procede en Visual Basic)
Actualizar una aplicación Visual Basic 6 … Obtener información sobre .NET Framework … etc.
Acceso a datos (Cómo se utiliza en Visual Basic)
Introducción … Cargar datos … Validar datos … etc.
Implementación (Cómo se utiliza en Visual Basic)
Implementación con ClickOnce … Utilizar proyectos de instalación … Utilizar otros proyectos de implementación … etc.
Aplicaciones para Windows (Cómo se crean en Visual Basic)
Formularios y controles … Datos … Impresión … etc.
Aplicaciones Web (Cómo se crean en Visual Basic)
Implementar un sitio Web … Formularios y controles Web de usuario … Implementar un sitio Web … etc.
Servicios Web (Cómo se utilizan en Visual Basic)
Crear un servicio Web … Llamar a un servicio Web … Depurar un servicio Web ... etc.
Programar en Office (Cómo se procede en Visual Basic)
Aplicaciones de Excel … Aplicaciones de Word … etc.
Aplicaciones para Smart Device (Cómo se procede en Visual Basic)
Trabajar con datos … Trabajar con controles … Implementar aplicaciones para dispositivos inteligentes … etc.
Seguridad (Cómo se implementa en Visual Basic)
Aplicaciones Web … Aplicaciones para Windows …Componentes … etc.
Depurar y probar (Cómo se procede en Visual Basic)
Depurar aplicaciones … Supervisar aplicaciones … etc.
Conceptos del lenguaje Visual Basic

Actualización para usuarios de Visual Basic 6 (Cómo se procede


en Visual Basic)
Esta página vincula a temas de la Ayudar sobre cómo ponerse en marcha con Visual Basic .NET si ha actualizado de la versión
Visual Basic 6. Para ver otras categorías de tareas frecuentes tratadas en la Ayuda, vea Cómo se utiliza Visual Basic.
En general
Ayuda para usuarios de Visual Basic 6.0
Resalta los cambios de las distintas características desde Visual Basic 6.0.
Lo nuevo en el lenguaje Visual Basic
Describe las características de lenguaje nuevas y mejoradas, como herencia, interfaces, reemplazos, miembros compartidos y
sobrecarga.
Tutorial: actualización de una aplicación de Visual Basic 6.0 con la versión actual de Visual Basic
Muestra la actualización de una aplicación de ejemplo de gráficos de Visual Basic a Visual Basic .NET. Además de ilustrar el
proceso de actualización, este tutorial resalta las diferencias en las arquitecturas gráficas entre Visual Basic 6.0 y Visual
Basic .NET.
Preparar una aplicación de Visual Basic 6.0 para la actualización
Detalla varios puntos que puede llevar a cabo para optimizar la actualización con un poco de preparación.
Si sigue las recomendaciones de este tema, podrá minimizar y, en algunos casos, eliminar los cambios necesarios tras la
actualización del proyecto a Visual Basic .NET.
Consideraciones previas a la actualización
Describe las áreas que ya no son compatibles con versiones anteriores.
Desarrollo con la función My
Describe la característica de Visual Basic diseñada para proporcionar acceso a la información y a las instancias de objeto
predeterminadas relacionadas con la aplicación y su entorno en tiempo de ejecución.
Recursos adicionales para programadores de Visual Basic
Para obtener información sobre los distintos sitios de Microsoft y de otros fabricantes para Visual Basic.
Actualizar una aplicación Visual Basic 6
Trabajar con Visual Basic 6.0 y la versión actual de Visual Basic
Resalta los cambios de las distintas características desde Visual Basic 6.0.
Tutorial: actualización de una aplicación de Visual Basic 6.0 con la versión actual de Visual Basic
Muestra la actualización de una aplicación de ejemplo de gráficos de Visual Basic a Visual Basic .NET. Además de ilustrar el
proceso de actualización, este tutorial resalta las diferencias en las arquitecturas gráficas entre Visual Basic 6.0 y Visual
Basic .NET.
Actualizar desde Visual Basic 6.0
Proporciona los vínculos a temas de la Ayudar que muestran cómo actualizar las aplicaciones y obtener información
rápidamente sobre los cambios de Visual Basic 2005.
Cómo: Actualizar un proyecto con el Asistente para actualización de Visual Basic
Describe paso a paso la actualización de un proyecto de Visual Basic 6 mediante un asistente de fácil uso.
Preparar una aplicación de Visual Basic 6.0 para la actualización
Detalla varios puntos que puede llevar a cabo para optimizar la actualización con un poco de preparación.
Si sigue las recomendaciones de este tema, podrá minimizar y, en algunos casos, eliminar los cambios necesarios tras la
actualización del proyecto a Visual Basic .NET.
Consideraciones previas a la actualización
Describe las áreas que ya no son compatibles con versiones anteriores.
Describe las áreas que ya no son compatibles con versiones anteriores.
Interoperabilidad COM
Describe la interoperabilidad COM en el contexto de las aplicaciones Visual Basic.
Recursos adicionales para programadores de Visual Basic
Para obtener información sobre los distintos sitios de Microsoft y de otros fabricantes para Visual Basic.
Trabajar con datos (para los usuarios de Visual Basic 6)
Acceso a datos para usuarios de Visual Basic 6.0
Describe varias diferencias tanto conceptualmente como en relación con las tareas entre ADO y ADO.NET.
Comparación de ADO.NET con ADO
Explica ADO.NET para los que están familiarizados con ADO.
Aprender .NET Framework
Información general y conceptual sobre .NET Framework
Explica las características de Common Language Runtime y la biblioteca de clases de .NET Framework.
Visual Studio y .NET Framework
Explica los conceptos básicos de la programación en .NET desde una perspectiva de Visual Basic.
Introducción a la biblioteca de clases de .NET Framework en Visual Studio
Explica cómo utilizar espacios de nombres y ensamblados.
VBRun
El Centro de recursos de Visual Basic 6.0. Proporciona los vínculos a las descargas, artículos, grupos de noticias, grupos de
usuarios y otros recursos. http://msdn.microsoft.com/vbrun/
Recursos adicionales para programadores de Visual Basic
Para obtener información sobre los distintos sitios de Microsoft y de otros fabricantes para Visual Basic.
Vea también
Conceptos
Cómo se utiliza Visual Basic
Conceptos del lenguaje Visual Basic

Aprendizaje del lenguaje Visual Basic (Cómo se utiliza Visual


Basic)
Esta página proporciona vínculos a ayuda sobre tareas frecuentes de programación en Visual Basic. Para ver otras categorías
de tareas frecuentes tratadas en la Ayuda, vea Cómo se utiliza Visual Basic.
En general
Lo nuevo en Visual Basic
Muestra las nuevas y mejoradas características disponibles con este lanzamiento de Visual Basic en Visual Studio 2005.
Cambios en el lenguaje para usuarios de Visual Basic 6.0
Proporciona una lista de cambios, con vínculos a los detalles, sobre cómo el lenguaje de Visual Basic ha cambiado desde
Visual Basic 6.0.
Programación orientada a objetos con Visual Basic 2005
Cuándo utilizar la herencia
Explica cuándo utilizar la herencia en lugar de interfaces.
Fundamentos de la herencia
Se describen los modificadores de herencia, la forma de reemplazar métodos y propiedades, MyClass y MyBase.
Cómo: Definir un operador
Muestra cómo definir el comportamiento de un operador estándar (como por ejemplo *, <> o And) cuando uno o ambos
operandos son del tipo de su clase o estructura.
Cómo: Obtener acceso a los miembros de un objeto
Explica cómo leer, escribir o llamar a un miembro de un objeto que ha creado.
Cómo: Definir varias versiones de un procedimiento
Explica cómo definir un procedimiento en varias versiones sobrecargándolo, utilizando el mismo nombre pero una lista de
parámetros diferente para cada versión.
Trabajar con propiedades
Cómo: Establecer un valor en una propiedad
Muestra cómo almacenar un valor en una propiedad.
Cómo: Obtener un valor de una propiedad
Muestra cómo recuperar el valor almacenado en una propiedad.
Cómo: Declarar y llamar a una propiedad predeterminada en Visual Basic
Muestra cómo declarar y llamar a una propiedad a la que se puede tener acceso sin utilizar su nombre.
Cómo: Declarar una propiedad con niveles de acceso mixtos
Muestra cómo declarar propiedades con diferentes niveles de acceso para almacenar y recuperar.
Cómo: Crear una propiedad
Muestra cómo crear una propiedad.
Utilizar la herencia
Cómo: Definir una clase que usa miembros de una clase existente.
Muestra el código de ejemplo para crear una clase que deriva de otra clase.
Cómo: Ocultar una variable heredada
Muestra cómo utilizar la palabra clave Shadows para ocultar una variable heredada.
Cómo: Obtener acceso a una variable que oculta una clase derivada
Muestra cómo tener acceso a una variable de clase base que está oculta en una clase derivada.
Trabajar con procedimientos
Cómo: crear un procedimiento
Explica cómo declarar un procedimiento para realizar una tarea que se necesita en varios lugares en su código.
Cómo: Llamar a un procedimiento que devuelve un valor
Muestra dos maneras de llamar a un procedimiento Function y utilizar el valor que se devuelve.
Cómo: Llamar a un procedimiento que no devuelve un valor
Discute cómo llamar a un procedimiento Sub, que realiza una tarea pero no devuelve ningún valor al código que lo llama.
Cómo: Definir un parámetro para un procedimiento
Está dedicado a la definición de una lista de parámetros para aceptar los valores pasados al procedimiento por el código de
llamada.
Cómo: Pasar argumentos a un procedimiento
Muestra cómo pasar un valor a un procedimiento proporcionando un argumento para cada uno de sus parámetros.
Administrar el flujo de control del programa
Cómo: Dividir secciones de código grandes en secciones más pequeñas.
Explica cómo utilizar procedimientos para conseguir la programación estructurada en su código
Cómo: Interrumpir y combinar instrucciones en código
Está dedicado a cómo interrumpir una única instrucción en varias líneas de código fuente y combinar varias instrucciones en
una sola línea de código fuente.
Cómo: Agregar un comentario al código (Visual Basic)
Muestra dos maneras de colocar los comentarios explicativos en su código fuente.
Instrucciones condicionales
Cómo: Ejecutar instrucciones en función de una o varias condiciones
Muestra cómo utilizar construcciones If...Then...Else para ejecutar diferentes bloques de instrucciones que dependen de
varias condiciones.
Funciones y subrutinas
Cómo: crear un procedimiento
Explica cómo declarar un procedimiento para realizar una tarea que se necesita en varios lugares en su código.
Cómo: Llamar a un procedimiento que devuelve un valor
Muestra dos maneras de llamar a un procedimiento Function y utilizar el valor que se devuelve.
Cómo: Llamar a un procedimiento que no devuelve un valor
Discute cómo llamar a un procedimiento Sub, que realiza una tarea pero no devuelve ningún valor al código que lo llama.
Cómo: Definir un parámetro para un procedimiento
Está dedicado a la definición de una lista de parámetros para aceptar los valores pasados al procedimiento por el código de
llamada.
Cómo: Pasar argumentos a un procedimiento
Muestra cómo pasar un valor a un procedimiento proporcionando un argumento para cada uno de sus parámetros.
Recorrer instrucciones
Cómo: Pasar a la siguiente iteración de un bucle
Explica cómo omitir la iteración actual de un bucle y continuar en la iteración siguiente.
Cómo: Ejecutar varias instrucciones de forma repetida
Muestra cómo ejecutar un bloque de instrucciones un número fijo de veces o hasta que se cumple una condición.
Cómo: Recorrer en iteración una colección de Visual Basic
Muestra un bucle For Each...Next, que ejecuta las mismas instrucciones para cada elemento de una colección.
Cómo: Mejorar el rendimiento de un bucle
Está dedicado a cómo elegir el tipo de datos más eficiente para la variable de control de un bucle.
Trabajar con colecciones, genéricos y matrices
Cómo: Definir colecciones en clases propias
Muestra cómo definir y utilizar un objeto Collection simple de Visual Basic.
Administrar objetos propios con colecciones
Explica los criterios que se deben tener en cuenta al elegir el tipo de colección para agrupar los objetos relacionados.
Cómo: Agregar, eliminar y recuperar los elementos de una colección
Describe las operaciones fundamentales de agregar un nuevo elemento, quitar un elemento existente y recuperar un
elemento.
Cómo: Crear una colección de objetos
Está dedicado a las colecciones Visual Basic y las colecciones de genéricos, cómo crearlas y cómo recorrerlas en iteración.
Colecciones
Cómo: Crear una matriz de objetos
Explica las matrices como una manera alternativa de agrupar los objetos relacionados.
Solucionar problemas de colecciones
Enumera problemas comunes encontrados con colecciones y muestra cómo solucionarlos.
Genéricos
Cómo: Utilizar una clase genérica
Muestra cómo utilizar una clase que toma uno o más parámetros de tipo.
Cómo: Pasar una matriz a un procedimiento o una propiedad
Explica cómo pasar una matriz de valores a un procedimiento o propiedad utilizando la lista de argumentos.
Cómo: Definir una clase que pueda proporcionar la misma funcionalidad en tipos de datos diferentes
Muestra cómo definir una clase única que se adapta a distintos tipos de datos para realizar la misma funcionalidad.
Matrices
Cómo: Crear una matriz
Muestra dos maneras de crear un objeto de matriz y asignarlo a una variable de matriz.
Cómo: Inicializar una variable de matriz
Explica cómo almacenar una matriz en una variable de matriz y cómo establecer su longitud y sus valores de elemento.
Cómo: Inicializar una matriz escalonada
Muestra cuatro maneras de almacenar una matriz de matrices o matriz escalonada, en una variable, y cómo establecer su
longitud y valores de elemento.
Cómo: Inicializar una matriz multidimensional
Muestra cuatro maneras de almacenar una matriz de más de una dimensión en una variable y cómo establecer su longitud y
valores de elemento.
Cómo: Establecer un valor en una matriz
Describe cómo almacenar un valor en un elemento de matriz.
Cómo: Ordenar una matriz en Visual Basic
Explica cómo ordenar alfabéticamente los elementos de una matriz.
Cómo: Invertir el contenido de una matriz en Visual Basic
Muestra cómo invertir el orden de los elementos de una matriz.
Cómo: Especificar el límite inferior cero de una matriz
Trata cómo hacer que su código sea más fácil de leer declarando el límite inferior de una matriz como cero.
Trabajar con variables
Cómo: Crear una variable nueva
Está dedicado a la instrucción Dim y a las distintas palabras clave y cláusulas puede utilizar para crear una variable.
Cómo: Crear un objeto
Trata las variables de objeto y cómo crear una instancia de una clase.
Cómo: Introducir y extraer los datos de una variable
Describe cómo almacenar y recuperar el valor de una variable.
Declarar e inicializar variables
Cómo: Declarar una variable de objeto y asignarle un objeto en Visual Basic
Explica el tipo de datos Object y cómo asignarle un objeto de cualquier tipo.
Cómo: Contener más de un valor en una variable
Explica los tipos de datos compuestos como las estructuras, matrices y clases, que pueden contener varios valores.
Cómo: Contener valores verdaderos y falsos en una variable
Explica el tipo de datos Boolean y cómo declarar las variables para que contengan valores lógicos.
Cómo: Prolongar la duración de una variable
Describe la palabra clave Static y cómo utilizarla hacer que una variable exista después de que deja de existir su elemento
contenedor.
Cómo: Determinar si dos objetos están relacionados
Muestra cómo utilizar el método GetType para averiguar si un objeto hereda de otro.
Ámbito de variable de control
Cómo: Controlar el ámbito de una variable
Explica los niveles de ámbito y cómo utilizarlos para controlar qué código puede realizar una referencia a una variable.
Cómo: Controlar la disponibilidad de una variable
Explica los diferentes niveles de acceso y cómo asignar uno a una variable para controlar qué código puede leerla o escribir
en ella.
Cómo: Ocultar una variable con el mismo nombre que su variable
Muestra dos maneras de utilizar el sombreado para ocultar una variable con otra que tenga el mismo nombre.
Interactuar con tipos de datos
Tipos de datos en Visual Basic
Describe cómo asignar un tipo de datos a distintos tipos de elementos de programación.
Caracteres y cadenas
Cómo: Contener caracteres en una variable
Explica los tipos de datos Char y String y cómo declarar las variables para que contengan valores de caracteres.
Cómo: Comprobar si una cadena coincide con un modelo
Muestra cómo utilizar el operador Like para hacer coincidir un carácter de una cadena contra una variedad de conjuntos de
caracteres.
Cómo: Quitar secciones de una cadena (Visual Basic)
Explica cómo quitar todas las apariciones de una subcadena de una cadena.
Valores numéricos
Cómo: Contener los números enteros en una variable
Explica los tipos de datos SByte, Short, Integer y Long, y cómo declarar las variables para que contengan valores enteros
con signo.
Cómo: Contener los dígitos más significativos de una variable
Explica el tipo de datos Decimal y cómo declarar las variables para que contengan hasta 29 dígitos significativos.
Cómo: Contener el número mayor posible en una variable
Explica los tipos de datos ULong, Decimal, Single y Double, y cómo declarar las variables para que contengan valores muy
grandes.
Cómo: Contener las fracciones en una variable
Explica los tipos de datos Single y Double y cómo declarar las variables para que contengan valores fraccionarios.
Convertir tipos de datos
Cómo: Convertir un objeto en otro tipo en Visual Basic
Está dedicado a las conversiones desde el tipo de datos Object a un tipo de datos más específico.
Fecha y hora
Cómo: Mantener los valores de fecha y hora de una variable
Explica el tipo de datos Date y cómo declarar las variables para que contengan valores de fecha y hora.
Tipos sin signo
Cómo: Optimizar el almacenamiento de enteros positivos con tipos sin signo
Explica el tipo de datos UInteger y cómo declarar las variables que contengan valores enteros positivos con la máxima
eficiencia.
Cómo: Llamar a una función de Windows que adopta tipos sin signo
Explica los tipos de datos Byte, UShort, UInteger y ULong, y cómo interactuar con las funciones que utilizan tipos sin signo.
Moneda
Cómo: Mantener los valores de moneda de una variable.
Explica el tipo de datos Decimal y cómo declarar las variables para que contengan valores de moneda.
Programar mediante el uso de eventos
Cómo: Llamar a un controlador de eventos en Visual Basic
Muestra cómo definir un evento y un controlador de eventos y utiliza la instrucción AddHandler para asociarlos.
Cómo: Crear controladores de eventos en el Editor de código de Visual Basic
Proporciona instrucciones para escribir código que responda a eventos en el Editor de código de Visual Basic.
Cómo: Provocar un evento (Visual Basic)
Muestra cómo definir un evento y utiliza la instrucción RaiseEvent para hacer que el evento se produzca.
Tutorial: Declarar y provocar eventos
Explica paso a paso el proceso de declarar y producir eventos para una clase.
Tutorial: Controlar eventos
Muestra cómo crear un procedimiento controlador de eventos.
Controlar errores y excepciones
Cómo: Recuperar información de un objeto de error
Muestra cómo obtener información de las propiedades del objeto Err.
Cómo: Mantener el control cuando se produce un error
Muestra cómo ejecutar un bloque concreto de instrucciones si se produce una excepción especificada mientras se ejecuta el
código.
Tutorial: Control estructurado de excepciones
Proporciona un tutorial para crear una aplicación simple e insertar el código de control de excepciones.
Cómo: Comprobar código con un bloque Try...Catch en Visual Basic
Muestra cómo utilizar un bloque Try...Catch para comprobar una sección de código.
Ejemplos
Ejemplos del lenguaje Visual Basic
Estos ejemplos muestran los conceptos del lenguaje Visual Basic.
Vea también
Conceptos
Cómo se utiliza Visual Basic
Conceptos del lenguaje Visual Basic

Acceso a datos (Cómo se utiliza en Visual Basic)


Esta página proporciona vínculos a ayuda sobre tareas frecuentes de Visual Basic con datos. Para ver otras categorías de tareas
frecuentes tratadas en la Ayuda, vea Cómo se utiliza Visual Basic.
En general
Lo nuevo en datos
Proporciona información y vínculos a nuevas características de datos para aplicaciones de datos de cliente.
Introducción a Data Access
Proporciona vínculos a temas sobre la creación de aplicaciones que funcionan con datos, mediante el uso de Visual Studio.
Crear aplicaciones de datos con Visual Studio
Describe el proceso de crear una aplicación de datos en Visual Studio.
Tutorial: Crear una aplicación de datos sencilla
Proporciona instrucciones paso a paso para crear una aplicación de acceso a datos básica.
Acceso a datos para usuarios de Visual Basic 6.0
Describe cambios al acceso a datos y a las herramientas de datos
ADO.NET
Proporciona vínculos a temas que explican las características de acceso a datos en .NET Framework.
Información general de datos locales
Describe las características de Visual Studio para trabajar con bases de datos de SQL Server Express y Access.
Enlace de objetos en Visual Studio
Describe las características de Visual Studio para enlazar datos a objetos.
Acceso a datos en ASP.NET (Visual Studio)
Proporciona vínculos con información acerca de cómo trabajar con datos en páginas Web ASP.NET.
Datos en las soluciones de Office
Contiene vínculos a temas que explican cómo funcionan los datos en soluciones de Office.
Datos en proyectos de dispositivos administrados
Describe cómo administrar datos para los dispositivos de Visual Studio.
Mostrar datos en formularios Windows Forms
Información general sobre la presentación de datos
Describe el proceso de mostrar datos en formularios Windows Forms.
Ventana Orígenes de datos
Describe cómo crear formularios enlazados a datos arrastrando elementos desde la Ventana de orígenes de datos.
Cómo: Enlazar datos con controles existentes
Describe cómo enlazar un control existente a un campo de datos concreto.
Cómo: Mostrar datos en un control DataGridView de formularios Windows Forms
Describe cómo presentar datos en un DataGridView o en un formulario Windows Forms.
Cómo: Mostrar datos en controles individuales de formularios Windows Forms
Describe cómo presentar datos en controles individuales o en un formulario Windows Forms.
Cómo: Mostrar datos relacionados en una aplicación para Windows
Describe cómo presentar datos de tablas relacionadas en un conjunto de datos o en un formulario Windows Forms.
Cómo: Agregar una consulta parametrizada a un formulario en una aplicación para Windows
Describe cómo modificar un formulario Windows Forms existente para incluir controles con el fin de ingresar parámetros y
ejecutar una consulta.
Cómo: Establecer el control que se creará al arrastrar desde la ventana de orígenes de datos
Describe cómo establecer el control que se creará al arrastrar elementos desde la Ventana de orígenes de datos a un
formulario Windows Forms.
Cómo: Agregar controles personalizados a la ventana Orígenes de datos
Describe cómo modificar la lista de controles disponibles para los elementos en la Ventana de orígenes de datos y cómo
agregar controles personalizados a dicha lista.
Cómo: Abrir la ventana Orígenes de datos
Describe cómo abrir la Ventana de orígenes de datos en el IDE de Visual Studio.
Tutorial: Mostrar datos en un formulario en una aplicación para Windows
Proporciona detalles paso a paso para consultar los datos de una base de datos y mostrar éstos últimos en un formulario
Windows Forms.
Tutorial: Mostrar datos relacionados en un formulario en una aplicación para Windows
Proporciona detalles paso a paso para mostrar los datos de dos tablas relacionadas y mostrar dichos datos en un formulario
Windows Forms.
Tutorial: Crear un formulario para buscar datos en una aplicación para Windows
Proporciona detalles paso a paso para crear un formulario Windows Forms que busca registros en una base de datos de
acuerdo con los valores ingresados por un usuario.
Tutorial: Crear una tabla de búsqueda
Proporciona detalles paso a paso para mostrar los datos de una tabla en base a los datos seleccionados en otra tabla.
Tutorial: Pasar datos entre formularios en una aplicación para Windows
Proporciona detalles paso a paso para pasar valores de un formulario a un segundo formulario en una aplicación.
Tutorial: Crear un control de usuario que admita el enlace de datos simple
Proporciona detalles paso a paso para crear un control personalizado con atributos específicos para trabajar con enlace de
datos de formularios Windows Forms.
Conectar aplicaciones a datos
Conectarse a datos en Información general de Visual Studio
Proporciona información sobre cómo conectar la aplicación a datos con herramientas en tiempo de diseño y objetos de
conexión ADO.NET, mediante Visual Studio.
Asistente para la configuración de orígenes de datos
Proporciona información sobre cómo conectar a datos y crear orígenes de datos, mediante la ejecución del Asistente para
configuración de orígenes de datos.
Cómo: Guardar una cadena de conexión
Describe cómo guardar información de conexión en la aplicación.
Cómo: Editar una cadena de conexión
Describe cómo editar la información de conexión existente previamente guardada en la aplicación.
Cómo: Conectarse a los datos de un objeto
Describe cómo enlazar datos a valores de la propiedad en objetos mediante el Asistente para configuración de orígenes
de datos.
Cómo: Conectarse a los datos de una base de datos
Describe cómo crear una conexión entre la aplicación y una base de datos mediante el Asistente para configuración de
orígenes de datos.
Cómo: Conectarse a los datos de un servicio Web
Describe cómo crear una conexión entre la aplicación y los datos devueltos desde un servicio Web mediante el Asistente
para configuración de orígenes de datos.
Cómo: Conectarse a los datos de una base de datos de Access
Describe cómo crear una conexión entre la aplicación y una base de datos de Access mediante el Asistente para
configuración de orígenes de datos.
Cómo: Conectarse a los datos de una base de datos de SQL Express
Describe cómo crear una conexión entre la aplicación y una base de datos SQL Express mediante el Asistente para
configuración de orígenes de datos.
Cómo: Crear conexiones a bases de datos de SQL Server
Describe cómo crear cadenas de conexión a las bases de datos de SQL Server.
Cómo: Crear conexiones a bases de datos de Access
Describe cómo crear cadenas de conexión a las bases de datos de Access.
Cómo: Crear conexiones a bases de datos de Oracle
Describe cómo crear cadenas de conexión a las bases de datos de Oracle.
Tutorial: Conexión a los datos de una base de datos
Proporciona detalles paso a paso para crear una conexión entre la aplicación y una base de datos.
Tutorial: Conectarse a datos en una base de datos de SQL Server Express
Proporciona detalles paso a paso para crear una conexión entre la aplicación y una base de datos SQL Express.
Tutorial: Conectarse a datos en un servicio Web
Proporciona detalles paso a paso para crear una conexión entre la aplicación y un servicio Web.
Tutorial: Conectarse a datos en objetos
Proporciona detalles paso a paso para crear una conexión entre la aplicación y las propiedades de un objeto.
Tutorial: Conectarse a datos en una base de datos de Access
Proporciona detalles paso a paso para crear una conexión entre la aplicación y un archivo de base de datos de Access.
Conectar a orígenes de datos
Describe el objeto de conexión ADO.NET y cómo usarlo para conectarse a un origen de datos.
Modificar datos
Cómo: Agregar filas a un DataTable
Proporciona pasos para crear objetos DataRow y agregarlos a una tabla de datos.
Cómo: Editar filas en un objeto DataTable
Proporciona pasos para editar una fila de datos existente en una tabla de datos.
Cómo: Eliminar filas en un DataTable
Proporciona pasos para eliminar filas de datos concretas en una tabla de datos.
Cómo: Desactivar restricciones al llenar un conjunto de datos
Proporciona detalles para deshabilitar temporalmente la comprobación de restricciones en un conjunto de datos.
Cómo: Confirmar cambios en un conjunto de datos
Proporciona información y detalles para aceptar cambios realizados a los datos en un conjunto de datos.
Cómo: Comprobar si hay filas modificadas
Proporciona pasos para determinar si han cambiado los datos de un conjunto de datos.
Cómo: Recuperar filas modificadas
Proporciona detalles para devolver filas de datos cambiadas desde la última vez que se aceptaron cambios.
Cómo: Buscar una fila específica en un objeto DataTable
Proporciona detalles para encontrar datos en una tabla de datos mediante un valor de clave principal o un valor de columna.
Cómo: Obtener versiones específicas de una fila de datos
Proporciona detalles para devolver filas de datos concretas mediante la enumeración DataRowVersion.
Cómo: Localizar filas con errores
Proporciona detalles para encontrar datos en una tabla de datos que ha sido marcada con un error.
Guardar datos
Información general sobre cómo guardar datos
Proporciona vínculos a temas que explican cómo enviar datos actualizados de una aplicación a la base de datos.
Cómo: Guardar cambios de un conjunto de datos en una base de datos
Proporciona detalles sobre cómo devolver datos actualizados a una base de datos mediante TableAdapters y DataAdapters.
Cómo: Actualizar datos utilizando un TableAdapter
Proporciona detalles sobre cómo devolver datos actualizados a una base de datos mediante TableAdapters.
Cómo: Insertar nuevos registros en una base de datos
Proporciona información detallada sobre la creación de nuevos registros en una base de datos.
Cómo: Actualizar los registros de una base de datos
Proporciona información detallada sobre el envío de registros modificados de vuelta a la base de datos.
Cómo: Eliminar registros de una base de datos
Proporciona detalles sobre cómo quitar registros de una base de datos.
Tutorial: Guardar datos en una base de datos (Tabla única)
Proporciona detalles paso a paso para guardar los datos modificados en una tabla de datos en la base de datos subyacente.
Tutorial: Guardar datos en una base de datos (Varias tablas)
Proporciona detalles paso a paso para guardar los datos modificados en dos tablas de datos relacionadas en la base de datos
subyacente.
Tutorial: Guardar datos en una transacción
Proporciona instrucciones detalladas paso a paso para guardar datos mediante el espacio de nombres System.Transactions.
Trabajar con TableAdapters
Información general sobre TableAdapter
Explica qué son los TableAdapters y las herramientas disponibles para crearlos.
Asistente para la configuración de consultas de TableAdapter
Describe cómo ejecutar el asistente y proporciona detalles para cada pantalla de éste.
Cómo: Crear TableAdapters
Proporciona pasos para crear un nuevo TableAdapter.
Cómo: Editar TableAdapters
Proporciona pasos para editar TableAdapters existentes.
Cómo: Crear consultas de TableAdapter
Proporciona pasos para agregar una consulta a un TableAdapter existente.
Cómo: Editar consultas de TableAdapter
Proporciona pasos para editar consultas de TableAdapter existentes.
Trabajar con valores Null en un TableAdapter
Proporciona los pasos necesarios para habilitar valores nulos en parámetros de TableAdapter.
Cómo: Ver las consultas en un TableAdapter
Explica cómo ver las consultas existentes en un TableAdapter.
Cómo: Crear consultas parametrizadas de TableAdapter
Proporciona pasos para crear consultas de TableAdapter que acepten parámetros.
Cómo: Agregar consultas globales a un conjunto de datos
Proporciona pasos para crear un TableAdapter con una consulta que devuelva un valor único.
Tutorial: Crear un objeto TableAdapter con varias consultas
Proporciona instrucciones paso a paso para crear un TableAdapter y agregar una consulta a éste.
Diseñar y mostrar informes
ReportViewer Web Server and Windows Forms Controls
Describe dos nuevos controles ReportViewer que se pueden utilizar para incrustar informes en una aplicación para Windows
o basada en Web.
Creating Reports (con Crystal Reports)
Proporciona información detallada sobre cómo utilizar el Diseñador de Crystal Reports incrustado dentro de Visual Studio.
Ejemplos de datos
Ejemplos de datos
Estos ejemplos muestran el acceso a datos.
Obtener datos
Información general sobre cómo rellenar conjuntos de datos y consultar datos
Describe cómo cargar datos en conjuntos de datos y cómo ejecutar procedimientos almacenados y consultas contra una
base de datos.
Cómo: Llenar un conjunto de datos con datos
Proporciona detalles para cargar datos en conjuntos de datos mediante TableAdapters y DataAdapters.
Cómo: Crear y ejecutar una instrucción SQL que devuelva filas
Proporciona detalles para crear y ejecutar instrucciones SQL que devuelvan filas mediante consultas de TableAdapter y
objetos Command.
Cómo: Crear y ejecutar una instrucción SQL que devuelve un único valor
Proporciona detalles para crear y ejecutar instrucciones SQL que devuelvan valores únicos mediante consultas de
TableAdapter y objetos Command.
Cómo: Crear y ejecutar una instrucción SQL que no devuelva ningún valor
Proporciona detalles para crear y ejecutar instrucciones SQL que no devuelvan valores mediante consultas de TableAdapter
y objetos Command.
Cómo: Ejecutar un procedimiento almacenado que devuelve filas
Proporciona detalles para ejecutar procedimientos almacenados que devuelvan filas mediante consultas de TableAdapter y
objetos Command.
Cómo: Ejecutar un procedimiento almacenado que devuelve un único valor
Proporciona detalles para ejecutar procedimientos almacenados que devuelvan valores únicos mediante consultas de
TableAdapter y objetos Command.
Cómo: Ejecutar un procedimiento almacenado que no devuelve valores
Proporciona detalles para ejecutar procedimientos almacenados que no devuelvan valores mediante consultas de
TableAdapter y objetos Command.
Cómo: Establecer y obtener parámetros para objetos de comandos
Proporciona detalles para asignar valores a parámetros en consultas y procedimientos almacenados y leer valores en
parámetros devueltos desde los comandos ejecutados.
Validar datos
Información general sobre validación de datos
Proporciona información general sobre los eventos que se pueden utilizar para analizar los datos antes de confirmarlos en el
conjunto de datos.
Cómo: Validar datos mientras se modifica una columna
Describe cómo validar datos durante el evento ColumnChanging.
Cómo: Validar datos mientras se modifica la fila
Describe cómo validar datos durante el evento RowChanging.
Tutorial: Agregar validación a un conjunto de datos
Proporciona información paso a paso para agregar el código de validación a un conjunto de datos.
Trabajar con conjuntos de datos
Cómo: Crear un conjunto de datos con tipo
Explica cómo crear un conjunto de datos con tipo mediante las herramientas de diseño en Visual Studio.
Cómo: Extender la funcionalidad de un conjunto de datos
Explica cómo y dónde colocar el código al ampliar la funcionalidad de un conjunto de datos con tipo.
Cómo: Crear DataTables
Proporciona pasos para crear una nueva DataTable con el Diseñador de DataSet.
Cómo: Agregar columnas a un DataTable
Proporciona pasos para crear una nueva DataColumn en una DataTable existente.
Cómo: Establecer el tipo de datos de un objeto DataColumn
Explica cómo establecer o cambiar la propiedad de tipo de datos de una DataColumn.
Cómo: Cambiar el título de un objeto DataColumn
Explica cómo establecer el título de una DataColumn en el nombre de columna o algo más.
Cómo: Establecer el valor predeterminado de un objeto DataColumn
Proporciona detalles para establecer el valor inicial para una nueva DataColumn.
Cómo: Restringir una columna de datos para contener valores únicos
Explica cómo establecer una DataColumn para que no pueda contener valores duplicados.
Cómo: Establecer una columna de datos como clave principal
Explica cómo establecer una DataColumn para que sea la clave principal en DataTable.
Cómo: Crear columnas de datos que muestren expresiones
Explica cómo establecer una DataColumn para que muestre un valor calculado.
Cómo: Crear DataRelations con el Diseñador de Dataset
Explica cómo utilizar el Diseñador de Dataset para agregar un objeto DataRelation a un conjunto de datos.
Tutorial: Crear un DataTable en el Diseñador de Dataset
Proporciona instrucciones paso a paso para crear una DataTable y definir la DataColumn que constituye su estructura.
Tutorial: Crear un conjunto de datos con el Diseñador de Dataset
Proporciona instrucciones paso a paso para crear un conjunto de datos con tipo sin la ayuda del Asistente para
configuración de orígenes de datos.
Administrar usuarios y conflictos múltiples
Introducción a la concurrencia de datos en ADO.NET
Proporciona información general sobre los distintos métodos de control de concurrencia.
Cómo: Controlar errores de concurrencia
Describe cómo utilizar el objeto DBConcurrencyException para identificar las excepciones de concurrencia y el registro
real que provocó el error.
Tutorial: Controlar una excepción de concurrencia
Proporciona instrucciones paso a paso para identificar y resolver un error de concurrencia.
Trabajar con SQL Server 2005
Proyectos de SQL Server
Proporciona información general de qué proyectos SQL Server existen y los diferentes elementos que se pueden crear en
uno.
Ventajas de utilizar código administrado para crear objetos de base de datos
Proporciona una explicación breve de los beneficios de utilizar un lenguaje .NET para crear objetos de base de datos de SQL
Server.
Atributos para proyectos de servidor SQL Server y objetos de base de datos
Proporciona información sobre los diferentes atributos utilizados en proyectos SQL Server.
Cómo: Crear un proyecto de SQL Server
Proporciona pasos detallados para crear un nuevo proyecto SQL Server.
Cómo: Implementar elementos de proyecto de SQL Server en un servidor SQL Server
Proporciona pasos detallados para implementar un proyecto SQL Server a la base de datos.
Cómo: Crear y ejecutar un procedimiento CLR almacenado de SQL Server
Proporciona pasos detallados para crear un procedimiento almacenado en código administrado.
Cómo: Crear y ejecutar un agregado CLR de SQL Server
Proporciona pasos detallados para crear un agregado en código administrado.
Cómo: Crear y ejecutar un desencadenador CLR de SQL Server
Proporciona pasos detallados para crear un activador en código administrado.
Cómo: Crear y ejecutar una función CLR de servidor SQL Server definido por el usuario
Proporciona pasos detallados para crear una función definida por el usuario en código administrado.
Cómo: Crear y ejecutar un tipo CLR de servidor SQL Server definido por el usuario
Proporciona pasos detallados para crear un tipo definido por el usuario en código administrado.
Depurar SQL Server 2005
Cómo: Depurar un procedimiento almacenado de SQL CLR
Muestra cómo depurar procedimientos almacenados de un servidor SQL Server.
Tutorial: Depurar un desencadenador de SQL CLR
Muestra cómo pasar de un procedimiento almacenado a un activador cuando se desencadena.
Tutorial: Depurar un agregado definido por el usuario de SQL CLR
Muestra cómo pasar a un agregado definido por el usuario.
Tutorial: Depurar una función escalar definida por el usuario de SQL CLR
Muestra cómo pasar a una función escalar definida por el usuario.
Tutorial: Depurar una función con valores de tabla definida por el usuario de SQL CLR
Muestra cómo pasar a una función con valores de tabla definida por el usuario.
Tutorial: Depurar un tipo definido por el usuario de SQL CLR
Muestra cómo pasar a un tipo definido por el usuario.
Muestra cómo pasar a un tipo definido por el usuario.
Depuración de bases de datos de SQL CLR
Describe cómo depurar los objetos de base de datos de CLR.
Tutorial: Depurar un procedimiento almacenado de T-SQL
Muestra cómo depurar procedimientos almacenados de un servidor SQL Server.
Tutorial: Depurar un desencadenador de T-SQL
Muestra cómo pasar de un procedimiento almacenado a un activador cuando se desencadena.
Tutorial: Depurar una función definida por el usuario de T-SQL
Muestra cómo pasar de un procedimiento almacenado a una función definida por el usuario.
Depuración de bases de datos de T-SQL
Describe cómo depurar objetos de la base de datos T-SQL.
Tutoriales sobre datos
Tutorial: Agregar validación a un conjunto de datos
Proporciona información paso a paso para agregar el código de validación a un conjunto de datos.
Tutorial: Conexión a los datos de una base de datos
Proporciona detalles paso a paso para crear una conexión entre la aplicación y una base de datos.
Tutorial: Conectarse a datos en una base de datos de SQL Server Express
Proporciona detalles paso a paso para crear una conexión entre la aplicación y una base de datos SQL Express.
Tutorial: Conectarse a datos en un servicio Web
Proporciona detalles paso a paso para crear una conexión entre la aplicación y un servicio Web.
Tutorial: Conectarse a datos en una base de datos de Access
Proporciona detalles paso a paso para crear una conexión entre la aplicación y un archivo de base de datos de Access.
Tutorial: Conectarse a datos en objetos
Proporciona detalles paso a paso para crear una conexión entre la aplicación y las propiedades de un objeto.
Tutorial: Crear un conjunto de datos con el Diseñador de Dataset
Proporciona instrucciones paso a paso para crear un conjunto de datos con tipo sin la ayuda del Asistente para configuración
de orígenes de datos.
Tutorial: Crear un DataTable en el Diseñador de Dataset
Proporciona instrucciones paso a paso para crear un T:System.Data.DataTable y definir el T:System.Data.DataColumns que
constituye su estructura.
Tutorial: Crear una tabla de búsqueda
Proporciona detalles paso a paso para mostrar los datos de una tabla de acuerdo con los datos seleccionados en otra tabla.
Tutorial: Crear una relación entre tablas de datos
Proporciona instrucciones paso a paso para crear dos tablas de datos con el Diseñador de DataSet y agregar una relación
entre ellas.
Tutorial: Crear un objeto TableAdapter con varias consultas
Proporciona instrucciones paso a paso para crear un TableAdapter y agregar una consulta a éste.
Tutorial: Crear un formulario para buscar datos en una aplicación para Windows
Proporciona detalles paso a paso para crear un formulario Windows Forms que busca registros en una base de datos de
acuerdo con los valores ingresados por un usuario.
Tutorial: Crear un control de usuario que admita el enlace de datos simple
Proporciona detalles paso a paso para crear un control personalizado con atributos específicos para trabajar con enlace de
datos de formularios Windows Forms.
Tutorial: Mostrar datos en un formulario en una aplicación para Windows
Proporciona detalles paso a paso para consultar los datos de una base de datos y mostrar éstos últimos en un formulario
Windows Forms.
Tutorial: Mostrar datos relacionados en un formulario en una aplicación para Windows
Proporciona detalles paso a paso para mostrar los datos de dos tablas relacionadas y mostrar dichos datos en un formulario
Windows Forms.
Temas de tutorial: acceso a datos en ASP.NET (Visual Studio)
Proporciona vínculos a los temas del tutorial que tratan el acceso a datos en páginas Web.
Ejemplos
Ejemplos de datos
Estos ejemplos muestran el uso de datos en aplicaciones de Visual Basic.
Vea también
Conceptos
Cómo se utiliza Visual Basic
Conceptos del lenguaje Visual Basic

Implementación (Cómo se utiliza en Visual Basic)


Esta página proporciona vínculos a temas de la Ayuda sobre tareas de implementación de Visual Basic de uso generalizado.
Para ver otras categorías de tareas frecuentes tratadas en la Ayuda, vea Cómo se utiliza Visual Basic.
En general
Elegir una estrategia de implementación
Compara la tecnología ClickOnce con la de Windows Installer.
Implementar aplicaciones de 64 bits
Describe las consideraciones generales para implementar una aplicación de 64 bits.
Agregar requisitos previos personalizados
Describe cómo instalar los paquetes de los componentes compartidos o de los componentes del sistema que son requisitos
previos para ejecutar la aplicación.
Tareas de implementación de Windows Installer
Esta sección contiene las tareas de implementación normales de Windows Installer.
Implementación con ClickOnce
Cómo: Publicar aplicaciones ClickOnce
Describe cómo publicar una aplicación ClickOnce en un servidor Web, recurso compartido de archivos o medios extraíbles.
Cómo: Especificar los archivos que se van a publicar mediante ClickOnce
Describe cómo publicar ciertos archivos o instalar ciertos archivos en base a condiciones.
Cómo: Cambiar el idioma de publicación de una aplicación ClickOnce
Describe cómo establecer el lenguaje y la referencia cultural de su equipo de desarrollo. Si se publica una aplicación
adaptada, será necesario especificar un lenguaje y una referencia cultural para que coincida con la versión localizada.
Cómo: Instalar requisitos previos mediante una aplicación ClickOnce
Describe cómo elegir un conjunto de componentes de requisitos previos para empaquetar junto con su aplicación.
Cómo: Administrar actualizaciones de aplicaciones ClickOnce
Describe cómo especificar cuándo y cómo se llevarán a cabo las comprobaciones de actualización, si éstas son obligatorias y
donde debe comprobar dichas actualizaciones la aplicación.
Cómo: Habilitar la configuración de seguridad para aplicaciones ClickOnce
Describe cómo permitir la configuración de seguridad a fin de publicar la aplicación.
Cómo: Firmar aplicaciones y manifiestos de implementación
Describe cómo realizar una prueba de nombre seguro a un manifiesto.
Cómo: Implementar una aplicación de 64 bits utilizando ClickOnce
Describe cómo publicar una aplicación de 64 bits con ClickOnce.
Publicar aplicaciones
Cómo: Publicar aplicaciones ClickOnce
Describe cómo publicar una aplicación ClickOnce en un servidor Web, recurso compartido de archivos o medios extraíbles.
Cómo: Especificar los archivos que se van a publicar mediante ClickOnce
Describe cómo publicar ciertos archivos o instalar ciertos archivos en base a condiciones.
Cómo: Cambiar el idioma de publicación de una aplicación ClickOnce
Describe cómo establecer el lenguaje y la referencia cultural de su equipo de desarrollo. Si se publica una aplicación
adaptada, será necesario especificar un lenguaje y una referencia cultural para que coincida con la versión localizada.
Cómo: Instalar requisitos previos mediante una aplicación ClickOnce
Describe cómo elegir un conjunto de componentes de requisitos previos para empaquetar junto con su aplicación.
Cómo: Administrar actualizaciones de aplicaciones ClickOnce
Describe cómo especificar cuándo y cómo se llevarán a cabo las comprobaciones de actualización, si éstas son obligatorias y
donde debe comprobar dichas actualizaciones la aplicación.
Cómo: Incrementar automáticamente la versión de publicación de ClickOnce
Describe los incrementos al número de revisión de la versión de publicación cuando se publica una aplicación.
Cómo: Especificar el modo de instalación de ClickOnce
Describe cómo determinar si la aplicación estará disponible sin conexión o con conexión.
Cómo: Establecer las propiedades del proyecto de implementación
Describe las categorías de propiedades de implementación: propiedades de proyectos generales y propiedades dependientes
de la configuración.
Cómo: Especificar la instalación por usuario o por equipo
Describe cómo especificar si desea instalar la aplicación para todos los usuarios del equipo o sólo para el usuario que hace la
instalación.
Firmar manifiestos
Cómo: Firmar aplicaciones y manifiestos de implementación
Describe cómo realizar una prueba de nombre seguro a un manifiesto.
Cómo: Retrasar la firma de un ensamblado (Visual Studio)
Describe cómo utilizar la firma atrasada o parcial para proporcionar la clave pública, difiriendo la suma de la clave privada
hasta que se entrega el ensamblado.
Implementar aplicaciones seguras
Cómo: Establecer una zona de seguridad para una aplicación ClickOnce
Describe cómo iniciar un conjunto base de permisos y agregar los permisos requeridos por su aplicación uno a la vez.
Implementar con proyectos de instalación (Windows Installer)
Cómo: Crear o agregar un proyecto de instalación
Describe cómo crear proyectos de instalación, los cuales se utilizan para crear archivos Windows Installer (.msi). Existen dos
tipos de proyectos de instalación: Estándar y Web.
Tutorial: Implementar una aplicación basada en Windows
Proporciona instrucciones sobre cómo crear un instalador para una aplicación para Windows que establece accesos directos
y asociaciones de archivos, agrega una entrada al Registro, muestra cuadros de diálogo personalizados y comprueba la
versión de Internet Explorer durante la instalación.
Tutorial: Crear una acción personalizada
Muestra el proceso de crear una acción personalizada de DLL para dirigir a un usuario a una página Web al final de una
instalación.
Cómo: Crear Windows Installer para una plataforma de 64 bits
Describe cómo crear instaladores para aplicaciones y componentes de 64 bits.
Cómo: Instalar los requisitos previos en la implementación de Windows Installer
Describe cómo elegir un conjunto de componentes de requisitos previos para empaquetar junto con su aplicación.
Otros proyectos de implementación
Cómo: Crear o agregar un proyecto de módulo de combinación
Crea un archivo de módulo de combinación (.msm) que incluye todos los archivos, recursos, entradas del Registro y lógica
de instalación para su componente.
Cómo: Crear o agregar un proyecto CAB
Crea archivos contenedores (.cab) que se pueden utilizar para descargar componentes en un explorador Web. Esta opción
debe utilizarse cuando el código se vaya a ejecutar en un equipo cliente y no en un servidor.
Cómo: Agregar módulos de combinación a un proyecto de implementación
Crea módulos de combinación propios utilizando Visual Studio o se pueden utilizar los módulos de combinación existentes,
los cuales están disponibles para muchos componentes estándar de Microsoft y de otros fabricantes.
Vea también
Conceptos
Cómo se utiliza Visual Basic
Conceptos del lenguaje Visual Basic

Aplicaciones para Smart Device (Cómo se procede en Visual


Basic)
Esta página vincula a temas de la Ayuda sobre tareas muy utilizadas de Visual Basic para aplicaciones de dispositivos
inteligentes. Para ver otras categorías de tareas frecuentes tratadas en la Ayuda, vea Cómo se utiliza Visual Basic.
En general
Cómo: Crear aplicaciones para dispositivos utilizando Visual C# o Visual Basic
Describe la creación de proyectos administrados para dispositivos, la cual sigue el mismo proceso general que se utiliza en la
creación de proyectos para el escritorio.
Tutorial: Crear aplicaciones de Windows Forms para un dispositivo
Muestra una sencilla aplicación de Windows Forms, ya sea con Visual Basic .NET o Visual C#, y luego ejecuta la aplicación en
el emulador Pocket PC.
Tutorial: Hola a todos: Ejemplo de interoperabilidad COM para Smart Devices
Muestra cómo combinar en una solución un objeto COM simple y una aplicación administrada.
Cómo: Cambiar la orientación y la resolución de formularios (Dispositivos)
Muestra cómo cambiar las propiedades de orientación (rotación) predeterminadas; también se aplica si se instaló un SDK en
el cual estas propiedades faltan o son incorrectas.
Cómo: Agregar un objeto comercial como origen de datos (Dispositivos)
Muestra cómo agregar un objeto comercial como origen de datos en los proyectos para dispositivos inteligentes.
Trabajar con datos en dispositivos inteligentes
Cómo: Crear consultas parametrizadas (Dispositivos)
Describe cómo crear consultas parametrizadas; supone que se cuenta con una base de datos de SQL Server Mobile
disponible en la Ventana de orígenes de datos.
Cómo: Crear aplicaciones Principal-Detalle (Dispositivos)
Ilustra aplicaciones Principal-Detalle; supone que se cuenta con una base de datos de SQL Server Mobile con relaciones entre
tablas disponible en la Ventana de orígenes de datos.
Cómo: Agregar un servicio Web como origen de datos (Dispositivos)
Muestra cómo agregar un servicio Web como un origen de datos en sus proyectos para dispositivos inteligentes.
Cómo: Agregar una base de datos de SQL Server como origen de datos (Dispositivos)
Muestra cómo utilizar las bases de datos de SQL Server como orígenes de datos en sus proyectos de dispositivos
administrados.
Implementar aplicaciones para dispositivos inteligentes
Tutorial: Empaquetar una solución Smart Device para su implementación
Muestra cómo utilizar Visual Studio 2005 para empaquetar su aplicación y sus recursos en un archivo .cab, de modo que se
pueda implementar en un dispositivo inteligente de usuario final.
Cómo: Firmar una aplicación de Visual Basic o Visual C# (Dispositivos)
Muestra los pasos para firmar una aplicación para dispositivos administrada.
Trabajar con controles
Tutorial: Crear controles de usuario para dispositivos
Crea una biblioteca de controles y un control de usuario para incluirla. Se distingue entre un control de usuario, una
combinación de controles de formularios Windows Forms en una unidad reutilizable única y un control personalizado,
control que requiere una interfaz de usuario o una funcionalidad no disponibles mediante los controles estándar.
Depurar y probar aplicaciones
Diferencias entre depuradores de dispositivos y de escritorio
Describe las diferencias entre los depuradores de dispositivos, que admiten la mayoría de las características de los
Describe las diferencias entre los depuradores de dispositivos, que admiten la mayoría de las características de los
depuradores de escritorio, con algunas excepciones.
Tutorial: Depurar un formulario Windows Forms
Ilustra la forma de depurar un formulario Windows Forms.
Tutorial: Depurar un formulario Web Forms
Ilustra la forma de depurar un formulario Web Forms.
Tutorial: Depurar un servicio Web XML
Ilustra la forma de depurar un servicio Web XML.
Ejemplos
Ejemplos y tutoriales (Proyectos de dispositivos inteligentes)
Estos ejemplos muestran las técnicas utilizadas para resolver distintos desafíos de programación de los dispositivos.
Vea también
Conceptos
Cómo se utiliza Visual Basic
Cómo se desarrollan aplicaciones para Smart Device
Conceptos del lenguaje Visual Basic

Programar en Office (Cómo se procede en Visual Basic)


Esta página proporciona vínculos a la Ayuda de las tareas de programación más habituales en Office. Muestran código de
ejemplo de Visual Basic en el contexto de Visual Studio Tools para Office. Para ver otras categorías de tareas frecuentes
tratadas en la Ayuda, vea Cómo se utiliza Visual Basic.
En general
Cómo: Actualizar los proyectos de nivel de documento
Describe los pasos a seguir para aprovechar el nuevo sistema de proyectos y herramientas que se ofrecen en la más reciente
versión de Microsoft Visual Studio Tools para Microsoft Office System.
Cómo: Instalar ensamblados de interoperabilidad primario de Office
Proporciona los pasos para instalar los ensamblados de interoperabilidad primarios de Microsoft Office 2003 necesarios en
los equipos de usuarios finales.
Cómo: Establecer la información de configuración para una solución de Office
Describe cómo puede agregar manualmente un archivo .config a su proyecto de Office.
Cómo: Crear herramientas de Visual Studio para proyectos de Office
Describe cómo se utiliza el Asistente para proyectos de Microsoft Office cuando se crea un proyecto de Word o de Excel
utilizando un documento o un libro nuevo o existente.
Cómo: Automatizar aplicaciones de Office con ensamblados de interoperabilidad primarios
Describe cómo se puede utilizar el código administrado para automatizar otras aplicaciones de Office, como Microsoft Office
PowerPoint 2003 en Visual Studio.
Cómo: Agregar controles a documentos de Office
Describe cómo se pueden agregar controles de formularios Windows Forms a documentos de Excel 2003 y Word 2003 en
tiempo de diseño o en tiempo de ejecución.
Tutorial: Conceder y quitar permisos para una solución de Office
Proporciona una demostración paso a paso de los fundamentos de seguridad de las soluciones de Visual Studio Tools para
Office.
Cómo: Implementar soluciones de Office
Describe tres formas diferentes de implementar una solución de Office: implementar el documento y el ensamblado en una
red, implementar ambos localmente o implementar el ensamblado en una red y el documento localmente.
Aplicaciones de Excel
Cómo: Ejecutar los cálculos de Excel mediante programación
Muestra cómo utilizar el método Calculate para ejecutar todos los cálculos en un intervalo, al igual que en todos los libros
abiertos.
Cómo: Controlar errores en proyectos de Office
Explica cómo afecta la interacción del código administrado y no administrado al control de errores en los proyectos de
Microsoft Office Word 2003 y Microsoft Office Excel 2003.
Cómo: Mostrar una cadena en la celda de una hoja de cálculo
Muestra cómo mostrar texto en una celda mediante programación. Se puede crear un rango con nombre para hacer
referencia a la celda.
Aplicaciones de Word
Cómo: Utilizar cuadros de diálogo integrados en Word
Proporciona un ejemplo que muestra cómo sacar partido de los cuadros de diálogo integrados de Word para mostrar los
datos proporcionados por el usuario.
Cómo: Crear barras de herramientas de Office mediante programación
Proporciona un ejemplo que muestra cómo crear mediante programación una barra de herramientas que contenga dos
botones en Word 2003.
Aplicaciones de Outlook
Cómo: Crear un elemento de correo electrónico
Proporciona un ejemplo que muestra cómo crear un elemento de correo electrónico en Microsoft Outlook 2003.
Cómo: Agregar iconos personalizados a elementos de barras de herramientas y de menús
Proporciona un ejemplo que aplica un icono a un comando de un menú personalizado.
Datos en las soluciones de Office
Cómo: Almacenar en memoria caché un origen de datos de un documento de Office mediante programación
Muestra cómo agregar un origen de datos mediante programación a la memoria caché del documento llamando al método
StartCaching y pasando el origen de datos.
Cómo: Asignar esquemas a documentos de Word en Visual Studio
Muestra cómo asignar un esquema XML a un documento mientras el documento está abierto en un proyecto de Visual
Studio Tools para Office, con las mismas herramientas de Word 2003 que se utilizan cuando el documento está abierto fuera
de Visual Studio.
Tutorial: Enlazar una celda de una hoja de cálculo a un campo de una base de datos
Le guía paso a paso por los aspectos básicos del enlace de un campo de datos único de una base de datos de SQL Server a
un rango con nombre de Excel 2003.
Cómo: Rellenar documentos con datos de objetos
Muestra cómo tener acceso a datos que están almacenados en objetos de documentos de Word 2003 es parecido a trabajar
con proyectos de formularios Windows Forms.
Etiquetas inteligentes y paneles de acciones
Tutorial: Insertar texto en un documento de un Panel de acciones
Le guía paso a paso por el proceso de crear un panel de acciones que rellena un documento de Word 2003 con texto escrito
por el usuario en el panel de acciones.
Cómo: Crear y modificar propiedades personalizadas para documentos
Describe cómo se puede crear y modificar propiedades de documento personalizadas si hay información adicional que
desea almacenar con un documento o libro.
Ejemplos
Ejemplos del desarrollo de Office
Estos ejemplos muestran cómo utilizar Microsoft Visual Studio 2005 Tools para Microsoft Office System para aprovechar las
características disponibles en Microsoft Office Word 2003 y Microsoft Office Excel 2003.
Vea también
Conceptos
Cómo se utiliza Visual Basic
Cómo se utiliza Visual Studio Tools para Office
Conceptos del lenguaje Visual Basic

Aplicaciones Web (Cómo se crean en Visual Basic)


Esta página vincula con temas de la Ayuda sobre tareas de Visual Basic ampliamente utilizadas para crear aplicaciones Web.
Para ver otras categorías de tareas frecuentes tratadas en la Ayuda, vea Cómo se utiliza Visual Basic.
En general
Lo nuevo en el desarrollo Web de Visual Studio
Describe Visual Web Developer, un conjunto de herramientas y utilidades para crear aplicaciones Web ASP.NET.
Tutorial: Crear una página Web básica en Visual Web Developer
Proporciona una primera introducción a la creación y edición de una página Web ASP.NET en Visual Studio, incluida
información general del entorno de desarrollo Web.
Tutorial: Edición HTML básica en Visual Web Developer
Presenta las características de edición de HTML de Visual Web Developer.
Tutorial: Depurar páginas Web en Visual Web Developer
Proporciona información general de cómo utilizar el depurador con páginas Web.
Utilizar formularios Web Forms y controles
Cómo: Validar entradas requeridas para controles de servidor ASP.NET
Muestra cómo especificar que un usuario proporcione información en un control determinado agregando un control
RequiredFieldValidator a la página y vinculándolo al control requerido.
Cómo: Responder a la selección del usuario en un control CheckBox de servidor Web
Proporciona instrucciones para escribir un controlador de eventos que responda directamente cuando el usuario haga clic en
un control CheckBox individual.
Cómo: Determinar la selección en controles List de servidor Web
Proporciona instrucciones para obtener tres valores asociados con una selección de lista: el valor de índice de la selección, el
texto (valor que se muestra) de la selección y el valor, si existe, de la selección.
Cómo: Permitir que los usuarios seleccionen elementos en los controles DataList de servidor Web
Proporciona instrucciones para incluir un botón Seleccionar en el que los usuarios pueden hacer clic para resaltar un
elemento.
Cómo: Agregar filas y celdas dinámicamente a un control Table de servidor Web
Proporciona instrucciones para crear filas y celdas para un control Table en tiempo de ejecución.
Cómo: Agregar controles a una página Web ASP.NET mediante programación
Utiliza un evento de cambio de lista desplegable para agregar etiquetas a una página de formularios Web Forms en tiempo
de ejecución.
Cómo: Agregar secuencias de comandos de cliente a las páginas Web ASP.NET dinámicamente
Proporciona información sobre cómo utilizar el código del servidor para agregar a una página una secuencia de comandos
de cliente mediante programación.
Implementar un sitio Web
Tutorial: Publicar un sitio Web
Proporciona un paseo guiado sobre cómo compilar un sitio Web en ensamblados que se pueden implementar a un servidor
Web.
Tutorial: Copiar un sitio Web mediante la herramienta Copiar sitio Web
Proporciona un paseo guiado sobre cómo crear un sitio Web y copiar los archivos a un servidor Web de producción.
Implementar un sitio Web
Cómo: Crear páginas de contenido para una página principal de ASP.NET (Visual Studio)
Proporciona instrucciones para crear una página de contenido, una página Web ASP.NET que se asocia con una página
principal.
Cómo: Pasar valores entre páginas Web ASP.NET
Proporciona información sobre qué hacer si su aplicación redirige (se desplaza) una página Web ASP.NET a otra y si desea
pasar información de la página de origen a la página de destino.
Cómo: Redirigir los usuarios a otra página
Proporciona instrucciones para redirigir a los usuarios desde una página Web ASP.NET a otra.
Cómo: Hacer referencia al contenido de la página principal ASP.NET
Muestra cómo utilizar el código en páginas de contenido para hacer referencia a las propiedades, métodos y controles de la
página principal, con algunas restricciones.
Cómo: Aplicar temas de ASP.NET
Muestra cómo establecer un tema en el nivel de la aplicación y nivel de página.
Tipos de validación para controles de servidor ASP.NET
Muestra los tipos de controles de validación disponibles y cómo utilizarlos.
Tutorial: Crear páginas Web principal-detalle en Visual Studio
Muestra las distintas maneras de trabajar con datos en varios controles y en varias tablas, incluidos aquéllos que tienen una
relación principal-detalle.
Tutorial: Crear elementos reutilizables con controles de usuario ASP.NET
Muestra cómo crear un control de usuario ASP.NET que actúe como control selector; el control se compone de dos cuadros
de lista, con un conjunto de elecciones en un cuadro de lista (el origen).
Tutorial: Crear páginas Web para dispositivos móviles
Crea dos páginas Web que se heredan de la clase MobilePage diseñadas para un dispositivo móvil.
Tutorial: Personalizar un sitio Web mediante temas en Visual Studio
Muestra cómo utilizar temas para aplicar un aspecto coherente a las páginas y controla su sitio Web.
Tutorial: Integrar el seguimiento en ASP.NET con las técnicas de seguimiento de System.Diagnostics
Describe cómo integrar las técnicas de trazado ASP.NET con las técnicas de trazado System.Diagnostics y escribe todos los
mensajes de seguimiento en un resultado de trazado único.
Tutorial: Utilizar los recursos de adaptación con ASP.NET
Muestra una manera eficaz de crear páginas Web adaptadas, utilizando recursos para el texto y los controles de su página en
base al lenguaje y a la referencia cultural del usuario.
Tutorial: Crear una página de elementos Web en Visual Web Developer
Muestra los componentes y tareas esenciales para trabajar con elementos Web en un diseñador visual como Visual Studio.
Actualizar desde ASP
Conversión de proyectos Web de Visual Studio .NET
Incluye información sobre los aspectos de la conversión de Visual Studio 2005 desde proyectos de Visual Studio 2003 .NET.
Solucionar problemas de conversión a Visual Web Developer
Describe situaciones y sugiere soluciones para aquellas circunstancias en las cuales sus aplicaciones Web se comportarán de
manera diferente después de la conversión que hicieron antes.
Vea también
Conceptos
Cómo se utiliza Visual Basic
Cómo se utiliza Visual Web Developer
Conceptos del lenguaje Visual Basic

Servicios Web (Cómo se utilizan en Visual Basic)


Esta página vincula con temas de la Ayuda sobre tareas de Visual Basic ampliamente utilizadas para crear aplicaciones basadas
en Web. Para ver otras categorías de tareas frecuentes tratadas en la Ayuda, vea Cómo se utiliza Visual Basic.
En general
Tutorial: Crear y usar un servicio Web ASP.NET en Visual Web Developer
Muestra cómo crear un servicio Web XML simple en Visual Web Developer.
Tutorial: Crear un servicio Web XML utilizando Visual Basic o Visual C#
Explica cómo se crea un servicio Web XML que convierte temperaturas medidas en grados Fahrenheit a grados Celsius.
Cómo: Crear un proyecto Servicio Web ASP.NET
Proporciona instrucciones para crear un servicio Web XML mediante la plantilla de proyecto de servicio Web ASP.NET.
Cómo: Conectarse a los datos de un servicio Web
Describe cómo crear una conexión entre la aplicación y los datos devueltos desde un servicio Web mediante el Asistente
para la configuración de orígenes de datos.
Crear un servicio Web
Tutorial: Crear y usar un servicio Web ASP.NET en Visual Web Developer
Muestra cómo crear un servicio Web XML simple en Visual Web Developer.
Tutorial: Crear un servicio Web XML utilizando Visual Basic o Visual C#
Explica cómo se crea un servicio Web XML que convierte temperaturas medidas en grados Fahrenheit a grados Celsius.
Cómo: Crear un proyecto Servicio Web ASP.NET
Proporciona instrucciones para crear un servicio Web XML mediante la plantilla de proyecto de servicio Web ASP.NET.
Cómo: Conectarse a los datos de un servicio Web
Describe cómo crear una conexión entre la aplicación y los datos devueltos desde un servicio Web mediante el Asistente
para la configuración de orígenes de datos.
Depurar e implementar un servicio Web
Ejecutar paso a paso un servicio Web XML
Describe cómo retroceder y avanzar entre una aplicación cliente y un servicio Web XML.
Cómo: Implementar servicios Web XML en código administrado
Ofrece instrucciones sobre cómo implementar un servicio Web mediante varios métodos.
Cómo: Depurar servicios Web XML en código administrado
Ofrece instrucciones sobre cómo depurar un servicio Web mediante varios métodos.
Llamar a un servicio Web
Tutorial: Obtener acceso a un servicio Web XML utilizando Visual Basic o Visual C#
Describe el proceso de obtención de acceso a un servicio Web XML desde una aplicación creada con Visual Basic o Visual C#.
Cómo realizar una llamada asincrónica desde un cliente de servicios Web
Muestra cómo realizar una llamada asincrónica a un servicio Web desde una aplicación cliente.
Cómo explorar servicios Web XML existentes creados mediante ASP.NET
Proporciona información acerca de la funcionalidad del servicio Web, incluidos los métodos de servicio Web que
implementa, sus parámetros y los tipos de devolución.
Cómo: Llamar a un servicio Web
Muestra cómo llamar a un método de servicio Web para definir un valor de cadena.
Cómo: Agregar un servicio Web XML a un proyecto Web existente en código administrado
Ofrece instrucciones sobre cómo agregar un servicio Web a un proyecto Web existente.
Vea también
Conceptos
Cómo se utiliza Visual Basic
Cómo se utiliza Visual Web Developer
Conceptos del lenguaje Visual Basic

Aplicaciones para Windows (Cómo se crean en Visual Basic)


Esta página incluye vínculos a ayuda para tareas frecuentes de Visual Basic realizadas en la creación de aplicaciones para Windows. Para
ver otras categorías de tareas frecuentes tratadas en la Ayuda, vea Cómo se utiliza Visual Basic.
En general
Estructura de un programa de Visual Basic
Muestra el esquema general de un programa simple de Visual Basic.
Tutorial: Crear un formulario Windows Forms sencillo
Muestra cómo crear una aplicación simple de tipo "Hola, mundo".
Utilizar controles y formularios Windows Forms
Lo nuevo en formularios Windows Forms y controles de formularios Windows Forms
Muestra las nuevas y mejoradas características disponibles con esta versión de Visual Studio.
Lo nuevo para usuarios de formularios Windows Forms para Visual Basic 6.0
Resalta los cambios clave para los usuarios de Visual Basic 6.
Trabajar con formularios
Tiempo de diseño
Cómo: Elegir el formulario de inicio en una aplicación para Windows
Proporciona instrucciones para establecer el primer formulario que se muestra al ejecutar la aplicación.
Cómo: Conectar varios eventos con un único controlador de eventos en formularios Windows Forms
Proporciona instrucciones para asignar la misma funcionalidad a múltiples controles por medio de eventos.
Cómo: Crear una interfaz de usuario de varios paneles con formularios Windows Forms
Describe cómo se crea una interfaz de usuario de varios paneles similar a la que se utiliza en Microsoft Outlook.
Cómo: Agregar imágenes de fondo a formularios Windows Forms
Describe cómo colocar una imagen de fondo en un control o en el mismo formulario.
Cómo: Establecer información sobre herramientas en controles de un formulario Windows Forms en tiempo de diseño
Describe cómo establecer ToolTips en el código o en el diseñador.
Cómo: Reasignar controles existentes en un elemento primario diferente
Proporciona direcciones para asignar controles existentes a un nuevo contenedor primario.
Cómo: Agregar controles ActiveX a formularios Windows Forms
Ofrece indicaciones para trabajar con controles ActiveX heredados.
Cómo: Proporcionar ayuda en una aplicación para Windows
Explica cómo utilizar el componente HelpProvider para vincular controles a archivos de un sistema de Ayuda.
Cómo: Crear teclas de acceso para controles de Windows Forms
Proporciona información acerca de la creación de métodos abreviados de teclado predefinidos.
Cómo: Heredar formularios Windows Forms
Ofrece instrucciones para crear formularios heredados en el código.
Cómo: Heredar de controles de formularios Windows Forms existentes
Describe cómo crear un control heredado.
Tiempo de ejecución
Cómo: Agregar o quitar controles de una colección en tiempo de ejecución
Explica cómo agregar y quitar controles en un panel en tiempo de ejecución.
Cómo: Habilitar estilos visuales en Windows XP
Proporciona instrucciones para utilizar la propiedad EnableVisualStyles para darles a los formularios y controles la apariencia
estándar de Windows XP.
Cómo: Hacer invisible un formulario Windows Forms de inicio
Proporciona instrucciones para establecer la visibilidad inicial de un formulario en tiempo de ejecución.
Cómo: Mantener un formulario Windows Forms en primer plano
Proporciona instrucciones para hacer que el formulario Windows Forms permanezca en primer plano en tiempo de ejecución.
Cómo: Mostrar formularios Windows Forms modales y no modales
Proporciona instrucciones para mostrar un cuadro de diálogo de forma modal y no modal.
Cómo: Hacer un control no visible en tiempo de ejecución
Proporciona instrucciones sobre cómo crear un control de usuario que sea invisible en tiempo de ejecución.
Controles comunes
ControlesTextBox
Cómo: Seleccionar texto en el control TextBox de formularios Windows Forms
Explica cómo resaltar texto en un cuadro de texto.
Cómo: Insertar comillas en una cadena (formularios Windows Forms)
Explica cómo agregar comillas a una cadena de un cuadro de texto.
Cómo: Mostrar barras de desplazamiento en el control RichTextBox de formularios Windows Forms
Describe las diversas opciones disponibles para las barras de desplazamiento en el control RichTextBox.
Cómo: Crear un cuadro de texto de sólo lectura (formularios Windows Forms)
Explica cómo impedir que se cambie el contenido de un cuadro de texto.
Cómo: Crear un cuadro de texto de contraseña con el control TextBox de formularios Windows Forms
Explica cómo ocultar lo que se escribe en un cuadro de texto.
Cómo: Controlar el punto de inserción en un control TextBox de formularios Windows Forms
Ofrece indicaciones para especificar dónde aparece el punto de inserción cuando un control de edición recibe el foco por primera vez.
Cómo: Recuperar datos del Portapapeles
Describe cómo obtener acceso a los datos almacenados en el Portapapeles.
Cómo: Agregar datos al Portapapeles
Describe un método para insertar información en el Portapapeles mediante programación.
Cómo: Enlazar datos al control MaskedTextBox
Ilustra cómo cambiar el formato cuando los datos de una base de datos no coinciden con el formato esperado por la definición de la
máscara.
Tutorial: Trabajar con el control MaskedTextBox
Muestra las características clave del control MaskedTextBox.
Controles RichTextBox
Cómo: Cargar archivos en el control RichTextBox de formularios Windows Forms
Proporciona instrucciones para cargar un archivo existente en el control RichTextBox.
Cómo: Mostrar barras de desplazamiento en el control RichTextBox de formularios Windows Forms
Describe las diversas opciones disponibles para las barras de desplazamiento en el control RichTextBox.
Cómo: Establecer atributos de fuente para el control RichTextBox de formularios Windows Forms
Describe cómo establecer la familia de fuente, el tamaño, el estilo y el color del texto en el control RichTextBox.
Cómo: Establecer sangrías, sangrías francesas y párrafos con viñetas con el control RichTextBox de formularios Windows Forms
Describe cómo dar formato a los párrafos en el control RichTextBox.
Cómo: Habilitar operaciones de arrastrar y colocar con el control RichTextBox de formularios Windows Forms
Proporciona instrucciones para arrastrar datos al control RichTextBox.
Cómo: Mostrar vínculos de estilo Web con el control RichTextBox de formularios Windows Forms
Explica cómo enlazar con sitios Web desde el control RichTextBox.
Controles Button
Cómo: Responder a clics de botones en formularios Windows Forms
Explica el uso más básico de un botón en un formulario de una aplicación para Windows.
Cómo: Designar un botón de formularios Windows Forms como botón para aceptar mediante el Diseñador
Muestra cómo establecer un botón como el botón Aceptar.
Cómo: Designar un botón de formularios Windows Forms como botón para cancelar mediante el Diseñador
Muestra cómo establecer un botón como el botón Cancelar.
Controles CheckBox y RadioButton
Control CheckBox
Cómo: Establecer opciones con los controles CheckBox de formularios Windows Forms
Describe cómo utilizar una casilla de verificación para establecer opciones tales como las propiedades de un objeto.
Cómo: Responder a clics en casillas de verificación de formularios Windows Forms
Explica cómo utilizar una casilla de verificación para determinar las acciones de la aplicación.
Controles RadioButton
Cómo: Agrupar controles RadioButton de formularios Windows Forms para que funcionen como un conjunto
Explica cómo agrupar botones de opción en un conjunto, en el que sólo es posible seleccionar un botón.
Controles ListBox, ComboBox y CheckedListBox
Cómo: Enlazar un control ComboBox o ListBox de formularios Windows Forms a datos
Ofrece indicaciones para enlazar un control basado en una lista a un origen de datos.
Cómo: Crear una tabla de búsqueda para un control ComboBox, ListBox o CheckedListBox de Windows Forms
Ofrece indicaciones para mostrar y almacenar datos de formulario en formatos útiles.
Cómo: Agregar y quitar elementos de un control ComboBox, CheckedListBox o ListBox de formularios Windows Forms
Proporciona instrucciones para agregar o quitar elementos de la lista de elementos de un control.
Cómo: Obtener acceso a elementos específicos de un control ComboBox, CheckedListBox o ListBox de formularios Windows Forms
Ofrece indicaciones para determinar, mediante programación, qué elemento de una lista aparece en una posición especificada.
Cómo: Ordenar el contenido de un control ComboBox, CheckedListBox o ListBox de formularios Windows Forms
Explica cómo ordenar los datos de una lista en su origen de datos.
Control CheckedListBox
Cómo: Determinar los elementos activados en el control CheckedListBox de formularios Windows Forms.
Describe cómo examinar una lista para determinar los elementos que están comprobados.
Control DataGridView
Cómo: Enlazar datos al control DataGridView de formularios Windows Forms mediante el diseñador
Describe cómo utilizar la opción Elegir origen de datos en la etiqueta inteligente del control para conectar a los datos.
Cómo: Crear un formulario principal-detalle mediante dos controles DataGridView de formularios Windows Forms
Proporciona un código que indica cómo mostrar datos de dos tablas de base de datos relacionadas, de modo que los valores que
aparecen en un control DataGridView dependan de la fila actualmente seleccionada en otro control.
Cómo: Validar datos en el control DataGridView de formularios Windows Forms
Proporciona un código que indica cómo validar los datos proporcionados por el usuario para evitar errores de formato en la entrada de
datos.
Cómo: Controlar los errores que se producen durante la entrada de datos en el control DataGridView de formularios Windows Forms
Proporciona un código que indica cómo controlar los errores en la entrada de datos que se originan a partir del origen de datos cuando
el usuario intenta confirmar un nuevo valor.
Cómo: Impedir la adición y eliminación de filas en el control DataGridView de formularios Windows Forms mediante el Diseñador
Describe cómo utilizar la etiqueta inteligente del control para evitar que los usuarios agreguen o eliminen filas.
Cómo: Especificar valores predeterminados para nuevas filas en el control DataGridView de formularios Windows Forms
Describe cómo rellenar con anterioridad la fila para que los nuevos registros ahorren tiempo de entrada de datos.
Cómo: Crear un control DataGridView no enlazado en formularios Windows Forms
Proporciona un código que indica cómo rellenar el control con datos en forma manual.
Cómo: Agregar una columna independiente a un control DataGridView de formularios Windows Forms enlazado a datos
Describe cómo complementar los datos de un origen de datos enlazado mostrando columnas adicionales e independientes.
Cómo: Mostrar imágenes en celdas del control DataGridView de formularios Windows Forms
Describe cómo crear una columna de imagen que muestre un icono en cada celda.
Cómo: Alojar controles en celdas DataGridView de formularios Windows Forms
Describe cómo implementar la interfaz IDataGridViewEditingControl y crear tipos personalizados derivados de DataGridViewCell y
DataGridViewColumn para mostrar un control DateTimePicker cuando una celda está en modo de edición.
Tutorial: Validar datos en el control DataGridView de formularios Windows Forms
Describe cómo validar los datos proporcionados por el usuario para evitar errores de formato en la entrada de datos.
Tutorial: Controlar los errores que se producen durante la entrada de datos en el control DataGridView de formularios Windows Forms
Describe cómo controlar los errores en la entrada de datos que se originan a partir del origen de datos cuando el usuario intenta
confirmar un nuevo valor.
Tutorial: Crear un control DataGridView sin enlazar en formularios Windows Forms
Describe cómo rellenar el control con datos en forma manual.
Diseño y formato de DataGridView
Cómo: Inmovilizar columnas en el control DataGridView de formularios Windows Forms mediante el Diseñador
Describe cómo utilizar el cuadro de diálogo Editar columnas para evitar que columnas concretas se desplacen.
Cómo: Crear columnas de sólo lectura en el control DataGridView de formularios Windows Forms mediante el Diseñador
Describe cómo utilizar el cuadro de diálogo Editar columnas para evitar que los usuarios editen valores en columnas concretas.
Cómo: Habilitar la reordenación de columnas en el control DataGridView de formularios Windows Forms mediante el Diseñador
Describe cómo utilizar la etiqueta inteligente del control para permitir que los usuarios reorganicen columnas.
Cómo: Cambiar el orden de las columnas en el control DataGridView de formularios Windows Forms mediante el Diseñador
Describe cómo utilizar el cuadro de diálogo Editar columnas para reorganizar columnas.
Cómo: Agregar y quitar columnas en el control DataGridView de formularios Windows Forms mediante el Diseñador
Describe cómo utilizar los cuadros de diálogo Agregar columnas y Editar columnas para rellenar y modificar la colección de
columnas.
Controles ListView y TreeView
Tutorial: Crear una interfaz de tipo Explorador con los controles ListView y TreeView mediante el Diseñador
Muestra cómo crear una aplicación para Windows de aspecto profesional utilizando dos controles comunes.
Control ListView
Cómo: Agregar y quitar elementos con el control ListView de Windows Forms
Describe cómo agregar o quitar elementos de una vista de lista.
Cómo: Agregar capacidades de búsqueda a un control ListView
Describe dos maneras de ofrecer capacidades de búsqueda a un usuario: coincidencia de texto y búsqueda de ubicación.
Cómo: Seleccionar un elemento del control ListView de formularios Windows Forms
Muestra cómo seleccionar mediante programación un elemento en un control ListView de formularios Windows Forms.
Cómo: Mostrar iconos del control ListView de formularios Windows Forms
Explica cómo asociar una vista de lista con una lista de imágenes adecuada para mostrar iconos grandes o pequeños.
Cómo: Mostrar subelementos en columnas con el control ListView de formularios Windows Forms
Proporciona instrucciones para mostrar información en columnas acerca de cada elemento de la lista.
Control TreeView
Cómo: Establecer iconos del control TreeView de formularios Windows Forms
Proporciona instrucciones para mostrar iconos para los nodos de una vista de árbol.
Cómo: Agregar y quitar nodos con el control TreeView de formularios Windows Forms
Proporciona instrucciones para agregar y quitar nodos de una vista de árbol.
Cómo: Determinar en qué nodo de TreeView se hizo clic (formularios Windows Forms)
Proporciona instrucciones para determinar en qué nodo de una vista de árbol se hizo clic, de modo que la aplicación pueda responder
de forma adecuada.
Controles contenedores
Cómo: Dividir una ventana horizontalmente
Describe cómo controlar la orientación del divisor dentro del control SplitContainer.
Cómo: Crear una interfaz de usuario de varios paneles con formularios Windows Forms
Crea una interfaz de usuario de varios paneles similar a la que se utiliza en Microsoft Outlook.
Cómo: Abarcar filas y columnas en un control TableLayoutPanel
Describe cómo expandir un control por las filas y columnas adyacentes en TableLayoutPanel.
Tutorial: Organizar controles en formularios Windows Forms mediante TableLayoutPanel
Describe cómo crear un formulario con un diseño que se organiza a sí mismo apropiadamente a medida que cambia de tamaño o
cuando el contenido cambia de tamaño.
Tutorial: Organizar controles en formularios Windows Forms mediante FlowLayoutPanel
Describe cómo crear un formulario con un diseño que se organiza a sí mismo apropiadamente a medida que cambia de tamaño o
cuando el contenido cambia de tamaño.
Controles Picture e Image
Cómo: Cargar una imagen mediante el Diseñador (formularios Windows Forms)
Describe cómo cargar y mostrar una imagen en un formulario en tiempo de diseño mediante el establecimiento de las propiedades.
Cómo: Establecer imágenes en tiempo de ejecución (formularios Windows Forms)
Proporciona instrucciones para mostrar y borrar una imagen en tiempo de ejecución.
Cómo: Modificar el tamaño o la situación de una imagen en tiempo de ejecución (formularios Windows Forms)
Explica qué hace la propiedad SizeMode y cómo se establece.
Cómo: Recortar y ajustar la escala de las imágenes
Explica cómo recortar y escalar imágenes vectoriales y de trama mediante programación.
Controles Date-Setting
Control DateTimePicker
Cómo: Establecer y devolver fechas con el control DateTimePicker de formularios Windows Forms
Describe los pasos necesarios para establecer la fecha en el control y para tener acceso a la fecha seleccionada por el usuario.
Cómo: Mostrar una fecha en un formato personalizado con el control DateTimePicker de formularios Windows Forms
Explica cómo utilizar cadenas de formato para mostrar fechas en el formato preferido.
Control MonthCalendar
Cómo: Seleccionar un intervalo de fechas en el control MonthCalendar de formularios Windows Forms
Explica cómo seleccionar mediante programación un intervalo de fechas desde el control MonthCalendar.
Cómo: Mostrar días específicos en negrita con el control MonthCalendar de formularios Windows Forms
Explica cómo establecer que determinadas fechas se muestren en negrita.
Cómo: Mostrar más de un mes en el control MonthCalendar de formularios Windows Forms
Explica cómo configurar el control MonthCalendar para mostrar varios meses simultáneamente.
Cómo: Cambiar la apariencia del control MonthCalendar de formularios Windows Forms
Explica cómo personalizar la apariencia del control MonthCalendar.
Acceso a datos (para formularios Windows Forms)
Lo nuevo en datos
Proporciona información y vínculos a nuevas características de datos para aplicaciones de nivel de datos y cliente.
Cómo: Mostrar datos en un control DataGridView de formularios Windows Forms
Describe cómo presentar datos en un control DataGridView.
Tutorial: Pasar datos entre formularios en una aplicación para Windows
Proporciona detalles paso a paso para pasar valores de un formulario a un segundo formulario en una aplicación.
Tutorial: Mostrar datos en un formulario en una aplicación para Windows
Proporciona detalles paso a paso para consultar datos desde una base de datos y mostrar los datos en un formulario.
Tutorial: Crear un control de usuario que admita el enlace de datos simple
Proporciona detalles paso a paso sobre cómo crear un control personalizado con atributos específicos para trabajar con el enlace de
datos de los formularios Windows Forms.
Tutorial: Crear un formulario para buscar datos en una aplicación para Windows
Proporciona detalles paso a paso para crear un formulario que busca registros en una base de datos en base a los valores ingresados
por un usuario.
Tutorial: Conectarse a datos en objetos
Proporciona detalles paso a paso para crear una conexión entre su aplicación y las propiedades de un objeto.
Menús y barras de herramientas
Control ToolStrip
Cómo: Crear un control ToolStrip básico de formularios Windows Forms con elementos estándar mediante el Diseñador
Muestra cómo crear un ToolStrip y agregar siete controles ToolStripButton que representan las tareas típicas.
Cómo: Situar un control ToolStripItem en un control ToolStrip
Describe cómo colocar un ToolStripButton en el extremo más a la izquierda o más a la derecha de un ToolStrip.
Cómo: Deshabilitar ToolStripMenuItems mediante el Diseñador
Describe cómo deshabilitar comandos de menús completos y de menús individuales.
Cómo: Ocultar ToolStripMenuItems mediante el Diseñador
Describe cómo ocultar comandos de menús completos y de menús individuales.
Cómo: Mover elementos ToolStripMenuItems
mueve los menús completos de nivel superior y sus elementos de menú a un lugar diferente en el MenuStrip.
Cómo: Cambiar la apariencia del texto y las imágenes de ToolStrip en formularios Windows Forms
Describe cómo definir y modificar la organización de texto e imágenes en controles ToolStripItem.
Menús contextuales
Cómo: Asociar un menú contextual con un componente NotifyIcon de formularios Windows Forms
Indica los pasos para agregar un menú contextual a un componente NotifyIcon, de manera que proporcione un menú de comandos
cuando un usuario haga clic en él con el botón secundario del mouse.
Cómo: Agregar y quitar elementos de menú con el componente ContextMenu de formularios Windows Forms
Explica cómo agregar y quitar elementos de un menú contextual.
Enlace de datos con controles
Cómo: Controlar errores y excepciones que se producen con el enlace de datos
Muestra cómo utilizar el componente BindingSource para controlar sin problemas los errores que ocurren en una operación de enlace
de datos.
Control BindingSource
Cómo: Enlazar controles de Windows Forms con el componente BindingSource mediante el Diseñador
Describe cómo enlazar controles a un origen de datos, de modo que, en tiempo de ejecución, los usuarios pueden modificar y guardar
los datos relacionados con su aplicación.
Cómo: Crear una tabla de búsqueda con el componente BindingSource de formularios Windows Forms
Muestra cómo utilizar un cuadro combinado para mostrar el campo con la relación de clave externa del elemento primario a la tabla
secundaria.
Cómo: Reflejar las actualizaciones de los orígenes de datos en un control de Windows Forms con BindingSource
Muestra cómo responder a los cambios en el origen de datos mediante el componente BindingSource.
Cómo: Ordenar y filtrar datos ADO.NET con el componente BindingSource de formularios Windows Forms
Muestra cómo utilizar el componente BindingSource para aplicar ordenaciones y filtros a los datos mostrados.
Cómo: Enlazar a un servicio Web mediante el componente BindingSource de formularios Windows Forms
Muestra cómo utilizar el componente BindingSource para enlazar a un servicio Web.
Control BindingNavigator
Cómo: Explorar datos con el control BindingNavigator de formularios Windows Forms
Proporciona pasos para enlazar un control BindingNavigator a un origen de datos.
Cómo: Desplazarse por un conjunto de datos con el control BindingNavigator de formularios Windows Forms
Muestra cómo utilizar un control BindingNavigator para desplazarse a través de los registros en un DataSet.
Cómo: Agregar los botones Cargar, Guardar y Cancelar al control BindingNavigator de formularios Windows Forms
Enlaza un control de cuadro de texto a los datos; a continuación un control ToolStrip agregado al formulario se modifica para incluir
los botones cargar, guardar y cancelar.
Imprimir
Cómo: Crear trabajos de impresión estándar de formularios Windows Forms
Explica cómo utilizar el componente PrintDocument para imprimir desde un formulario Windows Forms
Cómo: Completar trabajos de impresión de formularios Windows Forms
Explica cómo alertar a los usuarios cuando se completa un trabajo de impresión.
Cómo: Imprimir un archivo de texto de varias páginas en formularios Windows Forms
Describe cómo enviar texto a la impresora.
Cómo: Mostrar el componente PrintDialog
Explica cómo mostrar el cuadro de diálogo y dónde guarda éste las propiedades.
Cómo: Mostrar la vista preliminar en aplicaciones de Windows Forms
Describe cómo mostrar a los usuarios el control PrintPreviewDialog.
Cómo: Seleccionar las impresoras conectadas al equipo de un usuario en formularios Windows Forms
Describe cómo cambiar la impresora utilizada para la impresión mediante el componente PrintDialog en tiempo de ejecución.
Cómo: Capturar datos proporcionados por el usuario de un componente PrintDialog en tiempo de ejecución
Explica cómo modificar las opciones de impresión seleccionadas mediante programación mediante el componente PrintDialog.
Controles de usuario y controles personalizados
Tutorial: Crear un control compuesto con Visual Basic
Crea un control de usuario simple y, a continuación, extiende su funcionalidad a través de herencia.
Cómo: Comprobar el comportamiento de un control de usuario en tiempo de ejecución
Muestra el uso del contenedor de prueba UserControl proporcionado por Visual Studio.
Cómo: Heredar de una clase UserControl
Muestra la herencia con la clase UserControl.
Cómo: Crear controles compuestos
Muestra cómo crear un control de usuario, una biblioteca de clases de control, y cómo heredar desde un control de usuario.
Agregar controles al control de usuario
Muestra los fundamentos básicos de trabajar con un control de usuario.
Agregar código al control de usuario
Muestra los fundamentos básicos de trabajar con un control de usuario.
Interfaz de múltiples documentos (MDI)
Cómo: Crear formularios principales MDI
Proporciona instrucciones para crear el contenedor para los diferentes documentos de una aplicación MDI.
Cómo: Crear formularios MDI secundarios
Proporciona instrucciones para crear una o más ventanas que funcionen dentro de un formulario MDI primario.
Cómo: Organizar formularios MDI secundarios
Proporciona instrucciones para organizar las ventanas secundarias de una aplicación MDI, disponerlas en mosaico o disponerlas en
cascada.
Cómo: Determinar el formulario secundario MDI activo
Proporciona instrucciones para comprobar cuál es la ventana secundaria que tiene el foco y enviar su contenido al Portapapeles.
Cómo: Enviar datos al formulario secundario MDI activo
Proporciona instrucciones para transportar información a la ventana secundaria activa.
Cómo: Crear una lista de ventanas MDI con MenuStrip (formularios Windows Forms)
Explica cómo utilizar la interfaz de documentos múltiples (MDI) para crear una lista de todos los formularios secundarios activos en el
menú Ventana del elemento primario.
Gráficos
Cómo: Dibujar una forma con contorno
Describe cómo dibujar una forma.
Cómo: Crear un degradado lineal
Muestra cómo crear un degradado lineal mediante la clase LinearGradientBrush.
Cómo: Crear un degradado de trazado
Describe cómo crear un degradado de trazado mediante la clase PathGradientBrush.
Cómo: Crear figuras a partir de líneas, curvas y formas
Muestra cómo utilizar un GraphicsPath para crear figuras.
Cómo: Crear objetos Graphics para dibujar
Muestra cómo crear objetos Graphics para dibujar.
Cómo: Crear imágenes en miniatura
Describe cómo crear imágenes en miniatura.
Cómo: Crear texto vertical
Describe cómo dibujar texto alineado verticalmente con GDI+.
Cómo: Alinear texto dibujado
Muestra cómo dar formato a texto de GDI+.
Cómo: Dibujar una línea en un formulario Windows Forms
Muestra cómo dibujar una línea.
Cómo: Girar, reflejar y sesgar imágenes
Describe cómo dibujar imágenes giradas, reflejadas y sesgadas.
Cómo: Dibujar texto en un formulario Windows Forms
Describe cómo dibujar texto.
Cómo: Cargar y mostrar mapas de bits
Describe cómo cargar y dibujar mapas de bits.
Cómo: Cargar y mostrar metarchivos
Muestra cómo cargar y dibujar metarchivos.
Cómo: Recortar y ajustar la escala de las imágenes
Explica cómo recortar y ajustar la escala de imágenes vectoriales y de trama.
Adaptar y globalizar formularios Windows Forms
Tutorial: Adaptar formularios Windows Forms
Muestra cómo crear y utilizar un archivo de recursos para un proyecto de aplicación para Windows.
Tutorial: Crear un diseño que ajuste las proporciones para la localización
Explica cómo crear un diseño que se ajusta proporcionalmente cuando traduce los valores de cadena mostrados a otros idiomas.
Cómo: Admitir la localización en formularios Windows Forms mediante AutoSize y el control TableLayoutPanel
Muestra cómo crear diseños que se pueden adaptar a distintas longitudes de cadena de texto que no pueden preverse en tiempo de
diseño.
Cómo: Establecer la referencia cultural y la referencia cultural de la interfaz de usuario para la globalización de formularios Windows Forms
Explica cómo establecer las propiedades CurrentCulture y CurrentUICulture para determinar qué recursos se cargan para una
aplicación y qué formato se le da a la información.
Cómo: Mostrar texto de derecha a izquierda en formularios Windows Forms para la globalización
Proporciona instrucciones para mostrar texto que fluye de derecha a izquierda en formularios Windows Forms.
Cómo: Crear un diseño de formularios Windows Forms que sea apropiado para la localización
Muestra cómo utilizar un control TableLayoutPanel para generar un formulario que responde bien a la adaptación.
Administrar recursos de aplicación
Cómo: Recuperar recursos de cadena en Visual Basic
Muestra cómo obtener acceso y recuperar un recurso de cadena mediante el objeto My.Resources.
Cómo: Recuperar una imagen del Portapapeles en Visual Basic
Muestra cómo recuperar una imagen del Portapapeles.
Cómo: Agregar o quitar recursos
Muestra cómo utilizar el Diseñador de recursos para agregar o quitar recursos para su proyecto.
Cómo: Agregar o quitar recursos de cadena
Muestra cómo utilizar el panel Cadenas del Diseñador de recursos para agregar o quitar recursos de cadena para su proyecto.
Trabajar con archivos, carpetas y unidades
Cómo: Crear un archivo en Visual Basic
Indica cómo crear un archivo.
Cómo: Mover un archivo en Visual Basic
Muestra cómo mover un archivo a un directorio diferente.
Cómo: Cambiar el nombre de un archivo en Visual Basic
Muestra cómo cambiar el nombre de un archivo.
Cómo: Eliminar un archivo en Visual Basic
Explica cómo eliminar un archivo.
Cómo: Crear una copia de un archivo en el mismo directorio en Visual Basic
Muestra cómo crear una copia de un archivo en el mismo directorio.
Leer desde archivos
Cómo: Leer texto de archivos con Streamreader (Visual Basic)
Explica cómo utilizar StreamReader para leer en un archivo.
Cómo: Leer archivos de texto en Visual Basic
Explica cómo leer de un archivo de texto.
Cómo: Leer archivos de texto existentes en Mis documentos (Visual Basic)
Explica cómo leer de un archivo de texto del directorio Mis documentos.
Cómo: Leer archivos binarios en Visual Basic
Explica cómo leer de un archivo binario.
Trabajar con archivos
Cómo: Determinar la extensión de un archivo en Visual Basic
Explica cómo determinar la extensión de un archivo.
Cómo: Determinar cuándo se creó un archivo en Visual Basic
Explica cómo determinar cuándo se creó un archivo.
Cómo: Determinar la ruta de acceso absoluta de un archivo en Visual Basic
Muestra cómo determinar la ruta de acceso absoluta de un archivo.
Cómo: Determinar si un archivo está oculto en Visual Basic
Muestra cómo determinar si un archivo está oculto.
Cómo: Determinar si existe un archivo en Visual Basic
Muestra cómo determinar si un archivo existe.
Cómo: Analizar rutas de acceso a archivos en Visual Basic
Muestra cómo utilizar métodos My para combinar rutas de acceso a archivos.
Cómo: Validar rutas de acceso y nombres de archivo en Visual Basic
Muestra cómo determinar si una cadena representa un nombre de archivo o una ruta de acceso.
Trabajar con unidades
Cómo: Determinar la etiqueta de volumen de una unidad en Visual Basic
Muestra cómo determinar la etiqueta del volumen de una unidad.
Cómo: Determinar el tipo de una unidad en Visual Basic
Muestra cómo determinar el tipo de una unidad.
Cómo: Determinar el espacio total de una unidad en Visual Basic
Explica cómo determinar el espacio total de una unidad.
Cómo: Determinar el directorio raíz de una unidad en Visual Basic
Muestra cómo determinar el directorio raíz de una unidad.
Escribir en archivos
Cómo: Escribir en archivos binarios en Visual Basic
Explica cómo se puede escribir en un archivo binario.
Cómo: Escribir texto en archivos del directorio Mis documentos en Visual Basic
Explica cómo se puede crear un nuevo archivo de texto en el directorio Mis documentos y cómo se puede escribir en él.
Cómo: Escribir texto en archivos con un objeto StreamWriter en Visual Basic
Explica cómo se puede escribir en un archivo con un objeto StreamWriter.
Trabajar con carpetas
Cómo: Crear un directorio en Visual Basic
Muestra cómo crear un directorio.
Cómo: Determinar los atributos de un directorio en Visual Basic
Explica cómo determinar los atributos de un directorio.
Cómo: Mover un directorio en Visual Basic
Explica cómo mover un directorio.
Cómo: Determinar si existe un directorio en Visual Basic
Explica cómo determinar si existe un archivo.
Cómo: Eliminar un directorio en Visual Basic
Explica cómo eliminar un directorio.
Registrar y rastrear eventos
Tutorial: Filtrar el resultado de My.Application.Log
Está dedicado a cómo filtrar los resultados de los registros My.Application.Log.
Tutorial: Determinar el lugar en el que My.Application.Log escribe la información
Está dedicado a cómo determinar dónde escribe My.Application.Log la información.
Tutorial: Crear agentes de escucha de registro personalizados
Está dedicado a cómo crear un agente de escucha de registro personalizado para My.Application.Log.
Cómo: Escribir mensajes de registro
Está dedicado a cómo escribir información de eventos en los registros de la aplicación.
Cómo: Escribir el registro de eventos de una aplicación
Está dedicado a cómo configurar My.Application.Log para que escriba información en un registro de eventos.
Cómo: Registrar excepciones en Visual Basic
Está dedicado a cómo escribir información de excepciones en los registros de la aplicación.
Utilizar plantillas de aplicación
Cómo: Crear un proyecto de aplicación para Windows
Muestra cómo crear un proyecto de aplicación para Windows mediante el entorno de desarrollo integrado (IDE).
Interoperar con COM
Tutorial: Implementar la herencia mediante objetos COM
Se describe la forma de utilizar objetos COM existentes como base de nuevos objetos.
Tutorial: Crear objetos COM con Visual Basic 2005
Muestra el proceso de crear objetos COM con (o sin) la plantilla de clase COM.
Cómo: Hacer referencia a objetos COM desde Visual Basic
Describe la forma de agregar referencias a objetos COM que tienen biblioteca de tipos.
Cómo: Hacer referencia a la instancia actual de un objeto
Muestra cómo utilizar la palabra clave Me para hacer referencia a la instancia en la que el código se está ejecutando actualmente.
Administrar la configuración de la aplicación
Cómo: Leer la configuración de la aplicación en Visual Basic
Muestra cómo tener acceso a los formularios de una aplicación para determinar los valores de configuración del usuario.
Cómo: Conservar la configuración del usuario en Visual Basic
Muestra cómo tener acceso a los formularios de una aplicación para guardar valores de configuración de usuario actualizados.
Cómo: Agregar o quitar valores de configuración de la aplicación
Muestra cómo utilizar la página Configuración del Diseñador de proyectos para agregar o quitar valores de configuración de la
aplicación.
Acceso a los recursos del equipo
Cómo: Recibir cadenas de puertos serie en Visual Basic
Muestra cómo recibir una cadena desde el puerto serie de un equipo.
Cómo: Mostrar los puertos serie disponibles en Visual Basic
Indica cómo mostrar los puertos serie disponibles.
Cómo: Iniciar una aplicación y enviarle pulsaciones de teclas (Visual Basic)
Muestra cómo iniciar una aplicación y enviarle pulsaciones de teclas.
Utilizar el Portapapeles
Cómo: Escribir en el Portapapeles en Visual Basic
Muestra cómo escribir datos en el Portapapeles.
Cómo: Recuperar una imagen del Portapapeles en Visual Basic
Muestra cómo recuperar una imagen del Portapapeles.
Cómo: Leer el Portapapeles en Visual Basic
Muestra cómo leer datos del Portapapeles.
Reproducir sonidos
Cómo: Recuperar recursos de sonido en Visual Basic
Muestra cómo utilizar el objeto My.Resources para recuperar un recurso de audio.
Cómo: Reproducir sonidos del sistema en Visual Basic
Muestra cómo utilizar el objeto My.Computer.Audio para reproducir un sonido del sistema.
Cómo: Reproducir sonidos en Visual Basic
Muestra cómo utilizar el objeto My.Computer.Audio para reproducir un sonido de un archivo de sonido o un recurso de aplicación en
segundo plano.
Cómo: Reproducir sonidos en bucle en Visual Basic
Muestra cómo utilizar el objeto My.Computer.Audio para reproducir un sonido de un archivo de sonido o un recurso de aplicación
como bucle continuo.
Cómo: Detener la reproducción de sonidos en segundo plano en Visual Basic
Muestra cómo utilizar el objeto My.Computer.Audio para detener un sonido que se está reproduciendo en segundo plano.
Trabajar con el registro
Tutorial: Crear una clave del Registro y cambiar sus valores
Muestra cómo utilizar el objeto My.Computer.Registry para crear una clave de Registro y establecer sus valores.
Cómo: Establecer los valores de las claves del Registro en Visual Basic
Muestra cómo utilizar el objeto My.Computer.Audio para establecer un valor en una clave de Registro.
Cómo: Leer un valor a partir de una clave del Registro en Visual Basic
Muestra cómo utilizar el objeto My.Computer.Audio para leer un valor de una clave de Registro.
Cómo: Eliminar una clave del Registro de Visual Basic
Muestra cómo utilizar el objeto My.Computer.Audio para eliminar una clave de Registro.
Cómo: Determinar si existe un valor en una clave del Registro en Visual Basic
Muestra cómo utilizar el objeto My.Computer.Audio para determinar si existe un valor en una clave de Registro específica.
Utilizar el registro de eventos
Tutorial: Explorar los registros de eventos, los orígenes de eventos y las entradas
Le guía a través de las principales áreas funcionales del registro de eventos en una aplicación de Visual Studio.
Cómo: Borrar registros de eventos
Ofrece indicaciones para eliminar entradas de un registro de eventos.
Cómo: Crear y quitar registros de eventos personalizados
Ofrece indicaciones para crear registros de eventos personalizados en el equipo local.
Cómo: Eliminar registros de eventos
Ofrece indicaciones para eliminar un registro existente y todas sus entradas.
Cómo: Leer entradas de un registro de eventos
Ofrece indicaciones para leer entradas de registros de eventos.
Cómo: Determinar si existe un origen de eventos
Ofrece indicaciones para consultar si existe un registro específico.
Trabajar con redes
Cómo: Cargar un archivo en Visual Basic
Muestra cómo cargar un archivo y almacenarlo en una ubicación remota utilizando My.Computer.Network.
Cómo: Comprobar el estado de conexión en Visual Basic
Muestra cómo determinar si el equipo tiene una conexión de red activa.
Cómo: Determinar si un equipo remoto está disponible en Visual Basic
Explica cómo utilizar el método Ping para determinar si un equipo remoto o el host está disponible.
Usar el control de código fuente
Cómo: Abrir un proyecto o una solución desde un control de código fuente
Describe cómo abrir un proyecto o solución desde el control de código fuente.
Cómo: Agregar un proyecto al control de código fuente
Describe los procedimientos necesarios para agregar un proyecto al control de código fuente.
Escribir aplicaciones seguras
Tutorial: Comprobar la complejidad de las contraseñas (Visual Basic).
Muestra cómo determinar si una cadena tiene las características de una contraseña segura.
Tutorial: Implementar autenticación y autorización personalizadas
Muestra cómo implementar autenticación y autorización personalizadas, y cómo reemplazar la identidad predeterminada del
subproceso de la aplicación.
Tutorial: Cifrar y descifrar cadenas en Visual Basic
Explica cómo cifrar y descifrar cadenas utilizando el algoritmo de cifrado de datos estándar (DES).
Cómo: Determinar si un usuario está en un grupo
Muestra cómo utilizar el objeto My.User para determinar la función del usuario.
Cómo: Determinar el nombre de inicio de sesión de un usuario
Muestra cómo utilizar el objeto My.User para obtener el nombre de inicio de sesión del usuario.
Ejemplos
Ejemplos de formularios Windows Forms de Visual Basic
Estos ejemplos muestran las aplicaciones de los formularios Windows Forms.
Vea también
Conceptos
Cómo se utiliza Visual Basic
Conceptos del lenguaje Visual Basic

Seguridad (Cómo se implementa en Visual Basic)


Esta página proporciona vínculos a temas de la Ayuda sobre tareas de seguridad de Visual Basic de uso generalizado. Para ver
otras categorías de tareas frecuentes tratadas en la Ayuda, vea Cómo se utiliza Visual Basic.
En general
Seguridad y desarrollo en Visual Basic
Describe las tres áreas habituales en las que debe consultar los problemas de seguridad.
Seguridad en Visual Studio
Ofrece vínculos y punteros a conceptos de seguridad básicos, incluidas las técnicas de codificación de seguridad.
Conceptos básicos sobre la seguridad de acceso a código
Describe la seguridad de acceso a código y sus usos más comunes.
Seguridad basada en funciones
Proporciona información general sobre la seguridad basada en funciones de .NET Framework.
Procedimientos recomendados para directivas de seguridad
Proporciona información dirigida a los programadores de Windows acerca de los procedimientos recomendados para
proteger el software.
Microsoft Security Developer Center
Proporciona información sobre el modo en que trabaja Microsoft para ayudarle a mantener las aplicaciones y los sistemas
seguros, desde los sistemas de escritorio hasta los sistemas de red; e incluye vínculos a recursos de seguridad para los
profesionales informáticos (IT).
Cómo: Modificar conexiones de bases de datos
Aconseja sobre temas tales como almacenar la cadena de la conexión a bases de datos.
Procedimientos recomendados
Procedimientos recomendados para directivas de seguridad
Proporciona información dirigida a los programadores de Windows acerca de los procedimientos recomendados para
proteger el software.
Seguridad Web
Proteger servicios Web XML creados mediante ASP.NET
Explica cómo funciona la autenticación y la autorización para los servicios Web ASP.NET.
Seguridad de sitios Web ASP.NET (Visual Studio)
En los ejemplos de esta sección se muestra cómo crear aplicaciones ASP.NET que incorporen varios tipos de seguridad.
Limitar el acceso a los sitios Web ASP.NET
Describe la forma de controlar el acceso a los archivos de un proyecto Web, y el nivel de acceso de cada individuo a la
aplicación.
Seguridad de Windows
Información general sobre la seguridad en formularios Windows Forms
Explica brevemente el modelo de seguridad de .NET Framework y los pasos básicos necesarios para garantizar que los
formularios Windows Forms de la aplicación sean seguros.
Impresión más segura en formularios Windows Forms
Explica cómo tener acceso a características de impresión en un entorno parcialmente confiable.
Acceso más seguro a archivos y datos en formularios Windows Forms
Explica cómo tener acceso a archivos y datos en un entorno parcialmente confiable.
Implementación y seguridad con ClickOnce
Describe los permisos sobre las aplicaciones implementadas mediante la tecnología ClickOnce, que se ejecuta en su
Describe los permisos sobre las aplicaciones implementadas mediante la tecnología ClickOnce, que se ejecuta en su
"recinto", con permisos limitados basados en una zona de seguridad.
Seguridad de componentes
Seguridad de acceso a código
Proporciona información conceptual sobre seguridad de código y describe el enfoque que utiliza .NET Framework para
asegurar los componentes.
Seguridad imperativa
Describe cómo utilizar comprobaciones imperativas de seguridad para proteger líneas de código sensible contra el uso no
autorizado.
Seguridad de una base de datos
Cómo: Modificar conexiones de bases de datos
Aconseja sobre temas tales como almacenar la cadena de la conexión a bases de datos.
Ejemplos
Ejemplos de seguridad en Visual Basic
Estos ejemplos muestran las tareas de seguridad.
Vea también
Conceptos
Cómo se utiliza Visual Basic
Conceptos del lenguaje Visual Basic

Depurar y probar (Cómo se procede en Visual Basic)


Esta página incluye vínculos a la Ayuda sobre tareas comunes de compilación, depuración y comprobación en Visual Basic.
Para ver otras categorías de tareas frecuentes tratadas en la Ayuda, vea Cómo se utiliza Visual Basic.
En general
Tutorial: Depurar un formulario Windows Forms
Ilustra la forma de depurar una aplicación de Windows Forms.
Tutorial: Depurar un formulario Web Forms
Ilustra la forma de depurar un formulario Web Forms.
Tutorial: Depurar un servicio Web XML
Ilustra la forma de depurar un servicio Web XML.
Crear aplicaciones
Cómo: Preparar y administrar versiones de generación
Explica cómo establecer el orden de generación y las opciones para guardar, y cómo generar y volver a generar una solución
o un proyecto.
Cómo: Administrar configuraciones de generación a las que se han aplicado opciones del desarrollador de Visual Basic
Explica cómo crear y editar información de configuración de generación en Visual Basic.
Cómo: Configurar proyectos para plataformas de destino
Explica cómo configurar un proyecto destinado a una plataforma concreta.
Depurar las aplicaciones
Depurar la aplicación de Visual Basic
Proporciona punteros a la documentación para las características de depuración integradas en Visual Studio.
Cómo: Iniciar una ejecución
Proporciona instrucciones sobre cómo iniciar la depuración.
Cómo: Avanzar en el código
Explica cómo ejecutar el código línea a línea.
Cómo: Utilizar la ventana Procesos
Muestra cómo comenzar a utilizar la ventana Procesos.
Cómo: Establecer un punto de interrupción simple
Muestra cómo pausar una aplicación en un punto determinado.
Cómo: Utilizar el cuadro de diálogo Inspección rápida
Muestra una manera rápida de examinar y evaluar variables y expresiones.
Cómo: Aplicar tareas de edición en modo de interrupción con Editar y continuar
Explica cómo editar su código en modo de interrupción y después continuar sin detener y reiniciar la ejecución.
Cómo: Corregir errores en tiempo de ejecución con el Ayudante de excepciones
Explica cómo tener acceso a sugerencias de solución de problemas cuando el código encuentra una excepción.
Cómo: Depurar una aplicación de confianza parcial
Muestra cómo depurar una aplicación de confianza parcial que tiene intención de implementar con ClickOnce.
Probar las aplicaciones
Cómo: Compilar y ejecutar un proyecto en Visual Basic
Describe las opciones de compilación y ejecución que están a su disposición en el entorno de desarrollo.
Detectar y corregir defectos de código administrado
Proporciona punteros a instrucciones sobre cómo utilizar Microsoft Visual Studio 2005 Team Edition para Software
Developers para detectar y corregir los defectos del código.
Controlar aplicaciones
Tutorial: Explorar los registros de eventos, los orígenes de eventos y las entradas
Muestra cómo sus aplicaciones y componentes pueden registrar información sobre eventos importantes. Puede utilizar estos
registros para auditar el acceso al sistema, solucionar problemas y reproducir patrones de uso.
Cómo: Realizar el seguimiento del código en una aplicación
Describe los pasos principales involucrados en la instrumentación y el seguimiento.
Cómo: Realizar compilación condicional con Trace y Debug
Proporciona instrucciones para incluir opciones de seguimiento en aplicaciones compiladas.
Vea también
Conceptos
Cómo se utiliza Visual Basic
Conceptos del lenguaje Visual Basic

Paseo con guía por Visual Basic


Si no conoce Visual Basic 2005 o es la primera vez que programa, éste es el lugar para comenzar. El paseo guiado de Visual
Basic consiste en una serie de lecciones secuenciales que presentan los fundamentos de programación de Visual Basic 2005.
En esta sección
Introducción a Visual Basic Express
Una serie de temas que presentan Microsoft Visual Basic 2005 Express y el entorno de desarrollo de Visual Basic.
Crear el primer programa en Visual Basic
En esta sección, verá lo fácil que es crear un programa para mostrar páginas Web.
Introducción al lenguaje de programación Visual Basic
En esta sección, obtendrá información sobre los fundamentos del lenguaje Visual Basic.
Crear la apariencia visual de un programa: introducción a los formularios Windows Forms
En esta sección, obtendrá información sobre cómo utilizar formularios y controles para crear una interfaz de usuario.
¿Qué salió mal? Encontrar y corregir errores mediante depuración
En esta sección, obtendrá información sobre cómo utilizar las herramientas de depuración en Visual Basic 2005.
Administrar registros: utilizar datos en un programa
En esta sección, obtendrá información sobre cómo trabajar con bases de datos.
Programar con objetos: utilizar clases
En esta sección, obtendrá información sobre los fundamentos de la programación orientada a objetos.
Objetos visibles: crear el primer control de usuario
En esta sección, obtendrá información sobre cómo crear un control reutilizable.
Dibujar imágenes: utilizar gráficos
En esta sección, obtendrá información sobre las posibilidades gráficas de Visual Basic 2005.
Distribuir un programa
En esta sección, obtendrá información sobre cómo compartir programas con otros usuarios.
Avanzar: ¿A dónde puedo ir desde aquí?
Una serie de temas que se vinculan a los recursos adicionales para llegar a dominar Visual Basic 2005.
Cómo se utiliza Visual Basic Express
Una serie de temas que se vinculan con información específica de la tarea.
Referencia
Referencia de Visual Basic
Describe todos los elementos programables de Visual Basic
Conceptos del lenguaje Visual Basic

Introducción a Visual Basic Express


Ya sea un usuario experimentado de Visual Basic 6.0 que busca actualizarse, un programador experimentado interesado en
aprender Visual Basic por primera vez o incluso alguien totalmente nuevo en la programación de equipos, Microsoft Visual
Basic 2005 Express se ha diseñado para todos los usuarios. Más que sólo una versión desfasada de Visual Basic, Microsoft
Visual Basic 2005 Express se generó expresamente para facilitar la programación y que sea más divertida que nunca.
El paseo guiado de Visual Basic incluye una serie de lecciones que le ayudarán a aumentar rápidamente la velocidad con el
lenguaje de Visual Basic y las herramientas de Visual Basic Express. Antes de comenzar, es posible que desee revisar algunos
de los temas de esta sección para familiarizarse con algunas de las funciones de Visual Basic Express. Si es nuevo en
programación, puede comenzar el aprendizaje con Crear el primer programa en Visual Basic y regresar después a estos temas.
En esta sección
Introducción a Visual Basic Express
Más que sólo una herramienta de aprendizaje, Visual Basic Express proporciona un entorno de desarrollo completo a los
programadores primerizos y aficionados que están interesados en generar aplicaciones de Windows Forms, aplicaciones de
consola y bibliotecas de clases.
Información general sobre la herramienta Visual Basic Express
Proporciona información general de Visual Basic Express; programa para crear aplicaciones mediante el lenguaje Visual
Basic.
Cómo: trabajar con una aplicación existente
Si ya está familiarizado con Visual Basic y tiene una aplicación con la cual desea trabajar, abrir una aplicación existente es
fácil.
Starter Kits: Comience a crear aplicaciones rápidamente
Visual Basic Express proporciona Kits de inicio para ayudarle a iniciar la escritura de programa en seguida.
Tipos de proyectos en Visual Basic Express
Visual Basic Express permite crear diversos tipos de aplicaciones, incluso las aplicaciones de Windows Forms, aplicaciones de
consola y bibliotecas de clases.
Solución de problemas de Visual Basic Express
Aunque Visual Basic Express hace más fácil la programación, puede que no siempre se comporte exactamente como se
espera.
Secciones relacionadas
Paseo con guía por Visual Basic
El paseo guiado de Visual Basic es una serie de lecciones secuenciales que presenta los conceptos básicos de programación
en Visual Basic 2005.
Crear el primer programa en Visual Basic
En realidad, la mejor forma de obtener información sobre programación con Visual Basic es crear un programa.
Avanzar: ¿A dónde puedo ir desde aquí?
Ahora que ha finalizado las lecciones en Paseo con guía por Visual Basic, es hora de continuar.
Ayuda para usuarios de Visual Basic 6.0
Sus conocimientos de Visual Basic 6.0 le ayudará enseguida a ser productivo utilizando Visual Basic 2005.
Lo nuevo para usuarios de Visual Basic 6.0
Si es un usuario experimentado de Visual Basic 6.0, encontrará varias características nuevas o significativamente mejoradas
en Visual Basic 2005, que facilitan el desarrollo con Visual Basic y la hacen más eficaz que cualquier versión anterior.
Conceptos del lenguaje Visual Basic

Introducción a Visual Basic Express


Si puede imaginar un programa informático, probablemente puede crearlo con Microsoft Visual Basic 2005 Express. Desde un
programa sencillo que muestre un mensaje hasta una aplicación completa con acceso a una base de datos o a un servicio Web,
Visual Basic Express le proporciona las herramientas que necesita.
Más que una simple herramienta de aprendizaje, Visual Basic Express proporciona un entorno de desarrollo totalmente
funcional para programadores principiantes y aficionados que están interesados en generar aplicaciones de Windows Forms,
aplicaciones de consola y bibliotecas de clases. Los Starter Kits y otras características preliminares permiten a los
desarrolladores sin experiencia utilizar muchas características de Visual Basic.
¿Qué es Visual Basic Express?
Visual Basic Express es una versión económica de Visual Basic. Es tanto una herramienta para aprender a programar en Visual
Basic, como una herramienta de desarrollo funcional para programadores que no necesitan la versión completa de Visual
Basic. Pero Visual Basic Express es más que un subconjunto de Visual Basic: incluye muchas características que simplifican más
que nunca la programación en Visual Basic.
La manera mejor de obtener información sobre lo que puede hacer con Visual Basic Express es examinar las lecciones incluidas
en Paseo con guía por Visual Basic. Cuando termine, estará familiarizado con las herramientas y los conceptos de Visual Basic,
y preparado para empezar a escribir sus propios programas.
¿A quién va dirigido Visual Basic Express?
Visual Basic Express es una herramienta eficaz capaz de crear aplicaciones y componentes plenamente funcionales que se
pueden compartir con otros usuarios. No va dirigida, sin embargo, a desarrolladores profesionales ni a programadores que
trabajan en un entorno de equipo. Otras versiones de Visual Basic proporcionan características que satisfacen las necesidades
avanzadas de programación profesional y en equipo.
Si tiene que escribir aplicaciones que conecten con una base de datos en red, interactúen con Microsoft Office, sean
compatibles con dispositivos móviles o sistemas operativos de 64 bits o requieran depuración remota, necesitará una versión
más avanzada de Visual Basic.
Nota
Visual Basic Express no admite el desarrollo de aplicaciones Web; si desea realizar desarrollo Web puede descargar Visual W
eb Developer Express.

Obtener ayuda
Los archivos de Ayuda que se incluyen con Visual Basic Express son un subconjunto de MSDN Library para Visual Studio 2005
Express, que a su vez es un subconjunto de MSDN Online Library completa. Si se conecta a Internet, puede tener acceso a
cualquier tema de Ayuda en la biblioteca completa. Si no dispone de acceso en línea o determina no instalar MSDN Library
para Visual Studio 2005 Express, quizá algunos temas de Ayuda no estén disponibles. Para obtener más información, vea
Solución de problemas de Visual Basic Express.
Vea también
Conceptos
Tipos de proyectos en Visual Basic Express
Otros recursos
Introducción a Visual Basic Express
Paseo con guía por Visual Basic
Conceptos del lenguaje Visual Basic

Tipos de proyectos en Visual Basic Express


Microsoft Visual Basic 2005 Express le permite crear varios tipos de aplicaciones, como las aplicaciones de Windows Forms,
aplicaciones de consola y bibliotecas de clases. Cada aplicación que se crea está contenida en su propio proyecto, y se
proporcionan plantillas de proyecto que le ayudarán a empezar.
Cuando se crea un nuevo proyecto, los iconos de los cuadros de diálogo Nuevo proyecto y Agregar proyecto representan
los tipos de proyecto disponibles y sus plantillas. Las siguientes plantillas de proyecto están disponibles cuando abre un nuevo
proyecto en Visual Basic Express.
Tipos de proyecto
Plantilla de proyecto Se utiliza para crear
Plantilla de aplicaciones para Windows Se utiliza con el fin de crear aplicaciones para Windows que se ejecuten localmente en l
os equipos de los usuarios. Puede generar desde una simple herramienta de una única
ventana como la calculadora de Windows hasta una aplicación completa con varias ve
ntanas y funciones avanzadas.

Plantilla de biblioteca de clases Se utiliza para crear clases reutilizables o componentes que se pueden compartir con o
tros proyectos.

Plantilla de aplicación de consola Se utiliza para crear aplicaciones de la línea de comandos, programas que se ejecutan
desde un símbolo del sistema de Windows y no tienen ninguna interfaz visual.

Plantilla Starter Kit de mi colección Se utiliza para crear la aplicación de ejemplo pre-integrada Mi cinemateca, que puede
de películas personalizar para satisfacer sus propias necesidades. Para obtener más información, ve
a Starter Kits: Comience a crear aplicaciones rápidamente.

Plantilla Starter Kit del protector de Se utiliza para crear la aplicación de ejemplo pre-integrada Protector de pantalla, que p
pantalla uede personalizar para satisfacer sus propias necesidades. Para obtener más informaci
ón, vea Starter Kits: Comience a crear aplicaciones rápidamente.
Nota
Aunque no hay ninguna plantilla de proyecto para las bibliotecas de controles de Windows, todavía puede crear sus propios
controles mediante la plantilla Biblioteca de clases. Para obtener más información, vea
Objetos visibles: crear el primer control de usuario.

Vea también
Conceptos
Introducción a Visual Basic Express
Otros recursos
Paseo con guía por Visual Basic
Conceptos del lenguaje Visual Basic

Información general sobre la herramienta Visual Basic Express


En este tema se proporciona información general de Visual Basic Express, un programa para crear aplicaciones mediante el
lenguaje Visual Basic. Igual que un programa como Microsoft Outlook proporciona diversas herramientas para trabajar con
correo electrónico, Visual Basic Express es un kit de herramientas con el que realizar una amplia gama de tareas de
programación.
Sugerencia
Si es principiante en programación, quizá desee finalizar el paseo guiado por Visual Basic, un conjunto de lecciones diseñado
para enseñar los conceptos básicos, y después volver a este tema. Para iniciar el paseo, vea
Crear el primer programa en Visual Basic.

El proceso de desarrollo
Visual Basic Express facilita el proceso de desarrollar aplicaciones; en la mayoría de los casos, el proceso consta de los pasos
siguientes:
Cree un proyecto. Un proyecto contiene todos los archivos necesarios para la aplicación y almacena información sobre
la aplicación. A veces, una aplicación contendrá más de un proyecto, por ejemplo, un proyecto de aplicación para
Windows y uno o varios proyectos de biblioteca de clases. Tal aplicación se denomina solución, que es sólo otro
nombre para un grupo de proyectos.
Diseñe la interfaz de usuario. Para ello, puede arrastrar distintos controles, como botones y cuadros de texto, a una
superficie de diseño conocida como formulario. Puede establecer propiedades que definan el aspecto y comportamiento
del formulario y de sus controles.
Nota
Para aplicaciones que no tienen ninguna interfaz de usuario, como bibliotecas de clases o aplicaciones de consola, este
paso no es necesario.

Escriba el código. A continuación, tendrá que escribir el código de Visual Basic que define cómo se comportará la
aplicación y cómo interactuará con el usuario. Visual Basic Express facilita la escritura de código con características como
Intellisense, finalización automática y miniprogramas.
Pruebe el código. Siempre deseará probar la aplicación para asegurarse de que se comporta del modo que esperaba;
este proceso se conoce como depuración. Visual Basic Express dispone de herramientas de depuración que facilitan la
búsqueda y corrección de errores en el código de forma interactiva.
Distribuya la aplicación. Una vez que la aplicación está completa, puede instalar el programa final en el equipo o
distribuirlo y compartirlo con otros usuarios. Visual Basic Express utiliza una nueva tecnología conocida como
publicación de ClickOnce, que permite implementar fácilmente una aplicación con un asistente y proporcionar versiones
actualizadas de la aplicación si más adelante realiza cambios.
Familiarizarse
A primera vista, la interfaz de usuario de Visual Basic Express, también conocida como entorno de desarrollo integrado o IDE,
puede resultar extraña, pero una vez que se familiarice, la encontrará fácil de utilizar. En las secciones siguientes se describen
las partes del IDE que más utilizará.
Al iniciar
Cuando abre por primera vez Visual Basic Express, verá que la ventana Página de inicio ocupa la mayor parte. La Página de
inicio contiene una lista de los proyectos recientes en los que se puede hacer clic, un área Introducción con vínculos a temas
de Ayuda importantes y una lista de vínculos a artículos en línea y otros recursos. Si se conecta a Internet, esta lista se
actualizará regularmente.
Puede cambiar lo que aparece en la Página de inicio para que se ajuste a sus preferencias personales. Para obtener más
información, vea Cómo: Personalizar la sección de noticias de la Página de inicio.
En el lado derecho del IDE, se muestra la ventana Explorador de soluciones. Inicialmente está en blanco, pero aquí es donde
se mostrará la información sobre su proyecto o grupos de proyectos conocidos como soluciones. Para obtener más
información, vea Utilizar el Explorador de soluciones.
Figura 1: Explorador de soluciones

En el lado izquierdo del IDE, se muestra una ficha vertical marcada Cuadro de herramientas. También está en blanco
inicialmente, pero a medida que trabaja se rellenará con elementos que se pueden utilizar para la tarea en la que está
trabajando. Para obtener más información, vea Usar el Cuadro de herramientas.
En la parte superior del IDE hay una barra de menús y una barra de herramientas. Los menús y los botones de la barra de
herramientas cambian según la tarea del momento, tómese algo de tiempo para explorar y ver qué opciones están disponibles.
También puede personalizar los menús y la barra de herramientas para que se ajusten a sus preferencias personales. Para
obtener más información, vea Cómo: Personalizar las barras de herramientas (Visual Studio).
En la parte más inferior del IDE hay una barra de estado que muestra Listo. Cuando trabaja en el IDE, la barra de estado
cambia y muestra mensajes relacionados con la tarea en curso, por ejemplo, la barra de estado muestra información sobre el
progreso de un proyecto que está generando.
Modo de diseño
Cuando abre o crea un proyecto, el aspecto del IDE cambia al modo de diseño. Ésta es la parte visual de Visual Basic, donde se
diseña el aspecto de la aplicación.
Figura 2: IDE en el modo de diseño

En el modo de diseño, la Página de inicio se cubre con otra ventana conocida como Diseñador de Windows Forms, que es
básicamente un lienzo en blanco que representa la interfaz de usuario de la aplicación. Observe que la Página de inicio
todavía está disponible haciendo clic en la ficha correspondiente en el Diseñador de Windows Forms.
Cuando está visible el Diseñador de Windows Forms, el cuadro de herramientas contiene varios controles
(representaciones de botones, campos de texto, cuadrículas, etc.) que se pueden colocar en el formulario y organizar como se
desee. Para obtener más información, vea Diseñador de Windows Forms.
También observará que aparece una nueva ventana, la ventana Propiedades, bajo la ventana Explorador de soluciones.
Aquí es donde establecerá las distintas propiedades que definen el aspecto y comportamiento del formulario y sus controles.
Para obtener más información, vea Propiedades (Ventana).
De forma predeterminada, no se muestra la ventana Lista de tareas en la parte inferior del IDE, pero proporciona un lugar
donde puede llevar un seguimiento de las tareas que es necesario realizar o anotar cuando programa. Para obtener más
información, vea Lista de tareas (Visual Studio).
Si hace doble clic en un formulario o control, se abre una nueva ventana llamada Editor de código. Aquí es donde escribe el
código real para la aplicación. El Editor de código es algo más que un simple editor de texto, ya que utiliza una tecnología
conocida como IntelliSense que facilita la escritura del código al proporcionar información según escribe. Para obtener más
información, vea Opciones de IntelliSense específicas de Visual Basic.
Nota
Para algunos tipos de proyectos, como los proyectos de bibliotecas de clase que no disponen de interfaz de usuario, se mu
estra el Editor de código en lugar del Diseñador de Windows Forms.

Modo de ejecución
Cuando ejecuta o depura la aplicación, el IDE cambia a modo de ejecución. Se inicia la aplicación y aparece una ventana
adicional relacionada con la depuración. Cuando está en el modo de ejecución, no puede hacer cambios en el Diseñador de
Windows Forms, la ventana Propiedades ni en el Explorador de soluciones, pero puede modificar el código en el Editor de
código.
Figura 3: Formulario de Visual Basic en el modo de interrupción

En el modo de ejecución, aparece una nueva ventana conocida como la ventana Inmediato en la parte inferior del IDE. Si
coloca la aplicación en el modo de interrupción, puede consultar valores y probar el código en la ventana Inmediato. Para
obtener más información, vea Inmediato (Ventana).
Durante la ejecución se pueden mostrar ventanas adicionales y observar los valores de variables, mostrar los resultados y
otras tareas de depuración seleccionándolas en el menú Depurar.
Otras ventanas importantes
Hay numerosas ventanas adicionales en el IDE, cada una para una tarea de programación concreta. Algunas de las más
comunes se muestran a continuación.
La ventana Lista de errores aparece en la parte inferior del IDE si se escribe código incorrecto o aparecen otros errores
en tiempo de diseño. Para obtener más información, vea Lista de errores (Ventana).
La ventana del Examinador de objetos se utiliza para examinar las propiedades, métodos y eventos de los objetos que
se pueden utilizar en la aplicación. Para obtener más información, vea Examinador de objetos.
El Diseñador de proyectos se utiliza para configurar las propiedades de la aplicación, incluidos los recursos, el
comportamiento de depuración, la configuración de implementación y mucho más. Para obtener más información, vea
Introducción al Diseñador de proyectos.
El Explorador de base de datos permite visualizar y utilizar bases de datos existentes o crear y diseñar otras nuevas.
Para obtener más información, vea Explorador de servidores/Explorador de bases de datos.
Personalización
Visual Basic Express permite personalizar el IDE cambiando el diseño de ventana, seleccionando qué ventanas se van a
mostrar, agregando o eliminando comandos de menú y botones de la barra de herramientas, etcétera. Para obtener más
información, vea Personalizar el entorno de desarrollo.
Obtener ayuda
Cuando trabaja en Visual Basic Express, la Ayuda está siempre disponible presionando una tecla. Tanto si está en el Editor de
código o en cualquier otra ventana, al presionar la tecla F1 se muestra el tema de Ayuda más relacionado con lo que esté
haciendo en ese momento. Por ejemplo, si tiene abierto el Editor de código y el cursor se encuentra en la palabra clave
Inherits, se inicia el explorador de la Ayuda y se muestra un tema que describe el uso de la instrucción Inherits.
Nota
Los archivos de Ayuda que se incluyen con Visual Basic Express son un subconjunto de MSDN Library para Visual Studio 200
5 Express, que a su vez es un subconjunto de MSDN Online Library completa. Si se conecta a Internet, tiene acceso a cualquie
r tema de Ayuda de la biblioteca completa. Si no dispone de acceso en línea o decide no instalar MSDN Library para Visual St
udio 2005 Express, es posible que algunos temas de Ayuda no estén disponibles.

También se puede iniciar la Ayuda desde el menú Ayuda y encontrar los temas que busca utilizando las ventanas Contenido
o Índice, o la ficha Buscar. Para obtener más información, vea Ayuda sobre la Ayuda (Ayuda de Microsoft Document Explorer).
Vea también
Otros recursos
Crear el primer programa en Visual Basic
Paseo con guía por Visual Basic
Ayuda para usuarios de Visual Basic 6.0
Guía de programación en Visual Basic
Crear aplicaciones basadas en Windows
Conceptos del lenguaje Visual Basic

Cómo: trabajar con una aplicación existente


Si ya está familiarizado con Visual Basic y tiene una aplicación con la cual desea trabajar, le será fácil abrir una aplicación
existente.
Para abrir una aplicación existente
1. En el menú Archivo, haga clic en Abrir proyecto.
2. En el cuadro de diálogo Abrir proyecto, seleccione el proyecto que se va a abrir y haga clic en Abrir.
Vea también
Conceptos
Utilizar el Explorador de soluciones
Otros recursos
Administrar propiedades del proyecto con el Diseñador de proyectos
Actualizar aplicaciones creadas en versiones anteriores de Visual Basic
Conceptos del lenguaje Visual Basic

Starter Kits: Comience a crear aplicaciones rápidamente


Los Starter Kit son una especie de plantilla o programa modelo para aprender nuevas herramientas y técnicas de
programación, así como para crear fácilmente una aplicación funcional. Los Starter Kit incluyen ejemplos de código,
documentación y otros recursos útiles.
Puede utilizar un Starter Kit tal como está o personalizarlo. Puede compartirlo fácilmente con amigos y colaboradores u otros
miembros de la comunidad de Visual Basic. Todos los Starter Kit de Microsoft Visual Basic 2005 Express incluyen tutoriales
para ayudarle a personalizarlos. Además, todo el código incluye comentarios para ayudarle a entender cómo funciona.
Starter Kits de Visual Basic
Visual Basic Express incluye varios Starter Kit. Puede encontrar los Starter Kit de Visual Basic en el cuadro de diálogo Nuevo
proyecto, al que tiene acceso desde el menú Archivo. Seleccione el que desea y comience a programar.
Starter Kit: My Movie Collection
El Starter Kit My Movie Collection es una aplicación de ejemplo diseñada para ayudarle a organizar su colección de películas y
buscar información en línea. La aplicación es muy personalizable, puede personalizarla y cambiarla para organizar lo que
recopile.
Puede utilizar My Movie Collection, cuando se genera, para hacer lo siguiente:
Incluir la información descriptiva sobre la colección de películas.
Almacenar y guardar la información en una base de datos.
Buscar información en línea sobre las películas.
Starter Kit: Screen Saver
El Starter Kit Screen Saver le ayuda a crear un protector de pantalla de Windows que muestra canales RSS de Internet
actualizados en su pantalla. El proyecto viene listo para compilar y ejecutar, pero es fácil de personalizar.
Algunas personalizaciones fáciles incluyen:
Seleccionar su propia imagen predeterminada integrada
Establecer múltiples imágenes de fondo.
Modificar la lista de canales RSS.
Generar su propio protector de pantalla.
Utilizar servicios Web XML para mostrar información, por ejemplo, mostrar información meteorológica.
Introducción: Iniciar el Starter Kit
El primer paso para iniciar y ejecutar el Starter Kit es cargar el kit. Puede ejecutar la aplicación y ver algunas de las tareas
simples que puede realizar.
Para cargar y ejecutar la aplicación
1. En el menú Archivo, haga clic en Nuevo proyecto.
2. En el cuadro de diálogo Nuevo proyecto, haga clic en el Starter Kit que desea de la lista de Plantillas instaladas de
Visual Studio y haga clic en Aceptar.
Se carga el proyecto de tipo Starter Kit.
Nota
Puede cambiar el nombre de la versión de la aplicación en el cuadro Nombre.

3. Presione F5 para ejecutar la aplicación.


4. Siga los pasos del tutorial del Starter Kit para comenzar a entender y personalizar la aplicación.
Vea también
Referencia
Nuevo proyecto (Cuadro de diálogo)
Conceptos
Cómo: Crear Starter Kits
Otros recursos
Starter Kits
Conceptos del lenguaje Visual Basic

Solución de problemas de Visual Basic Express


Aunque Visual Basic Express facilita la programación, es posible que no siempre se comporte como se espera. A medida que
avanza en Paseo con guía por Visual Basic o escribe sus programas, es probable que encuentre ayuda en este tema si surgen
problemas.
No funciona una lección del paseo guiado
A medida que avanza en las lecciones del paseo guiado, puede encontrarse con que el programa no se ejecuta o no se
comporta del modo que debería. En la mayoría de los casos, se producen errores porque se ha omitido un paso o se ha escrito
mal el código.
Sugerencia
Cuando escribe código para una lección del paseo guiado, utilice el botón Copiar código, del tema de Ayuda, y pegue el cód
igo en el Editor de código; es más sencillo que escribirlo y tiene menos probabilidades de cometer un error.

También es posible que, debido a los cambios de última hora en el producto, los pasos o el código de la lección sean
incorrectos. Las versiones en línea de estos temas se actualizan constantemente, por lo que puede haber una nueva versión en
línea corregida del tema.
Para corregir los errores de una lección
1. Vuelva al paso en el que el programa funcionó por última vez y siga detenidamente los pasos restantes.
2. Revise el código que haya escrito y cerciórese de que coincide exactamente con el código de la lección.
3. Presione F5 para ejecutar el programa.
Si el programa todavía no se ejecuta ni se comporta como se espera, compruebe si hay disponible una versión
actualizada del tema. Para obtener más información, vea más adelante "No se puede obtener acceso a un tema de
Ayuda".
No se puede encontrar un comando u opción
Las opciones disponibles en los cuadros de diálogo y los nombres y ubicaciones de los comandos de menú que se ven podrían
diferir de lo que se describe en la Ayuda, según los valores de configuración o de edición activos. Para cambiar la
configuración, elija Importar y exportar configuraciones en el menú Herramientas. Para obtener más información, vea
Valores de configuración de Visual Studio.
No se puede obtener acceso a un tema de Ayuda
Los archivos de Ayuda que se incluyen con Visual Basic Express son un subconjunto de MSDN Library para Visual Studio 2005
Express, que a su vez es un subconjunto de MSDN Online Library completo. Durante la instalación existe la opción de instalar
MSDN Library para Visual Studio 2005 Express, si decidió no instalarla en su momento, plantéese hacerlo ahora.
No funciona un vínculo
Los vínculos a temas que no se incluyen en MSDN Library para Visual Studio 2005 Express mostrarán la página Información
no encontrada, pero puede tener acceso a los temas buscándolos en MSDN Online Library.
Para tener acceso a un tema cuando no funciona un vínculo
1. En el menú Ayuda, haga clic en Buscar.
Se abrirá la Página de búsqueda.
2. En el cuadro de búsqueda, escriba el texto que se mostró en el vínculo y, a continuación, haga clic en Buscar.
Se realizará la búsqueda y se presentarán los resultados.
3. Seleccione la ficha MSDN Online, en la parte derecha de la Página de búsqueda.
Nota
Si no se muestra MSDN Online, quizá el sistema de Ayuda no esté configurado para el acceso en línea. Para obtener
más información, vea más adelante "Cómo: habilitar el acceso en línea".

4. Haga clic en el título del tema que más se aproxime al texto del vínculo original.
Se descargará el tema y se mostrará.
No funciona presionar F1
Al presionar F1 en cualquier parte del IDE, se debería mostrar Ayuda contextual. Aún cuando no se incluyan todos los temas en
MSDN Library para Visual Studio 2005 Express, si está conectado a Internet, tendrá acceso a cualquier tema de Ayuda de toda
la biblioteca con F1. Si no tiene acceso en línea o ha elegido no habilitar la Ayuda en línea, algunos temas de Ayuda no estarán
disponibles con F1.
Puede cambiar en cualquier momento las opciones de la Ayuda como se describe a continuación.
Cómo: habilitar el acceso en línea
La primera vez que tiene acceso a la ayuda de Visual Basic Express se le solicita que determine cómo se configurará la Ayuda
en línea. Las opciones son intentar primero encontrar la versión de un tema en línea, intentar primero la Ayuda instalada
localmente y buscar en línea si no se encuentra, o utilizar sólo la Ayuda local.
Sugerencia
Si tiene acceso a Internet, configure la Ayuda de modo que compruebe primero la Ayuda en línea; si hay disponible una versi
ón más reciente de un tema, siempre tendrá la información más actualizada.

Puede cambiar en cualquier momento las opciones de la Ayuda como se describe a continuación.
Nota
Para obtener acceso a la Ayuda en línea, debe tener una conexión activa con Internet y si dispone de un servidor proxy o de u
n firewall debe configurarlo para permitir el acceso a MSDN Online Library.

Para habilitar el acceso en línea


1. Si aún no está abierto, abra Visual Basic en el menú Inicio de Windows.
2. En el menú Herramientas, haga clic en Opciones.
3. En el cuadro de diálogo Opciones, active la casilla de verificación Mostrar todas las configuraciones.
4. Expanda el nodo Ayuda bajo Entorno y, a continuación, haga clic en En línea.
5. En el cuadro Cuando cargue contenido de la Ayuda, haga clic en Intentar primero contenido en línea y luego
local o Intentar primero contenido local y luego con conexión.
Ahora debería tener acceso a la Ayuda en línea.
La base de datos no refleja los cambios
Un archivo de base de datos local puede incluirse como un archivo en un proyecto. La primera vez que conecte la aplicación a
un archivo local de base de datos, puede elegir entre crear una copia de la base de datos en el proyecto o conectarse al archivo
existente en su ubicación actual.
Si decide crear una copia de la base de datos, en función de la configuración de archivo, es posible que se cree una nueva copia
de la base de datos cada vez que se ejecuta el proyecto, que sobrescribirá la versión que contiene los cambios. Para obtener
más información, vea Cómo: Administrar archivos de datos locales en los proyectos.
Vea también
Tareas
Solucionar problemas de acceso a datos en Visual Studio
Solucionar problemas de tipos de datos
Conceptos
Solucionar problemas de implementación ClickOnce
Recursos para solucionar problemas de errores en el entorno de desarrollo
Conceptos del lenguaje Visual Basic

Crear el primer programa en Visual Basic


La mejor manera de aprender a programar con Visual Basic es crear realmente un programa. Los ejercicios siguientes le guían
por el proceso de creación de un programa para ver páginas Web.
Si no entiende todo enseguida, no se preocupe; los conceptos presentados aquí se tratarán con más detalle en otras secciones
del Paseo con guía por Visual Basic.
En esta sección
Paso 1: crear un proyecto en Visual Basic
Paso 2: Crear una interfaz de usuario
Paso 3: personalizar aspecto y comportamiento
Paso 4: agregar código de Visual Basic
Paso 5: ejecutar y probar un programa
Secciones relacionadas
Información detallada: comprender propiedades, métodos y eventos
Tipos de proyectos en Visual Basic Express
Introducción al lenguaje de programación Visual Basic
Crear la apariencia visual de un programa: introducción a los formularios Windows Forms
Centro de recursos de Visual Basic Express (http://msdn.microsoft.com/vbasic/express)
Conceptos del lenguaje Visual Basic

Paso 1: crear un proyecto en Visual Basic


El primer paso para crear un programa de Visual Basic es abrir Visual Studio y crear un proyecto. Esto se hará al crear
cualquier programa de Visual Basic.
Para crear un proyecto para el programa
1. En el menú Inicio de Windows, elija Microsoft Visual Basic 2005 Express.
Aparecerá la pantalla de bienvenida a Visual Basic Express. Ésta es la interfaz para Visual Basic 2005 Express, también
conocida como entorno de desarrollo integrado o IDE.
2. En el menú Archivo, haga clic en Nuevo proyecto.
Aparece el cuadro de diálogo Nuevo proyecto.
3. Seleccione Aplicación para Windows y haga clic en Aceptar.
Se muestra un nuevo formulario en el IDE y se agregan los archivos necesarios para el proyecto a la ventana Explorador
de soluciones. Si éste es el primer proyecto de Aplicación para Windows que ha creado, se denomina
"WindowsApplication1".
Información detallada
Acaba de crear un proyecto para el programa de exploración Web. Un proyecto en Visual Basic es un lugar para almacenar
partes del programa y mantenerlas organizadas.
Cuando crea un nuevo proyecto por primera vez, sólo existe en la memoria. Si cierra el entorno de desarrollo integrado (IDE)
de Visual Basic, se le pide que guarde o descarte el proyecto. Cuando lo guarde, puede darle un nombre más significativo.
Al abrir el cuadro de diálogo Nuevo proyecto, había diversos tipos de proyectos entre los cuales elegir. El programa de
exploración Web es una Aplicación para Windows normal; es decir, un programa que se puede ejecutar desde el menú Inicio.
Al crear el proyecto, aparecía un formulario (también conocido como diseñador de formularios) en el entorno de desarrollo
integrado (IDE). Este formulario representa una ventana que se mostrará cuando se ejecuta el programa. Muchos programas
muestran más de una ventana, por lo que un proyecto puede contener múltiples formularios.
Pasos siguientes
En la siguiente lección, aprenderá a agregar controles al formulario para generar la aplicación de exploración Web
Siguiente lección: Paso 2: Crear una interfaz de usuario
Vea también
Conceptos
Tipos de proyectos en Visual Basic Express
Otros recursos
Crear el primer programa en Visual Basic
Conceptos del lenguaje Visual Basic

Paso 2: Crear una interfaz de usuario


Es el momento de comenzar a crear un explorador Web. Se utilizará Microsoft Visual Basic 2005 Express para generar la
interfaz de usuario (la parte visible con la cual interactúan los usuarios) agregando controles del Cuadro de herramientas al
formulario.
El Cuadro de herramientas se encuentra en el lado izquierdo de Visual Studio y consta de varias fichas, como Datos,
Componentes y Todos los formularios Windows Forms. Dentro de cada ficha hay un conjunto de entradas, que
representan controles o componentes que se pueden agregar a la aplicación. Por ejemplo, la ficha Todos los formularios
Windows Forms tiene entradas denominadas Textbox, Button y Checkbox que representan los controles que puede
agregar a la aplicación arrastrándolos al formulario.
Para agregar controles a la aplicación
1. Haga clic en el panel Cuadro de herramientas.
Se abrirá el Cuadro de herramientas.
Sugerencia
El Cuadro de herramientas es más fácil de utilizar si mantiene la ventana abierta. Puede hacer esto haciendo clic en el
icono Ocultar automáticamente, que parece una chincheta.

2. Haga clic en la ficha Todos los formularios Windows Forms del Cuadro de herramientas, seleccione el control Panel
y arrastre un panel a la esquina superior izquierda del formulario.
Sugerencia
Si tiene dificultades para encontrar el control correcto, haga clic con el botón secundario del mouse (ratón) en el Cuadr
o de herramientas y seleccione Ordenar elementos alfabéticamente.

3. En la misma ficha, arrastre un control Button y colóquelo en la parte superior del control Panel.
Sugerencia
Puede cambiar la posición de los controles mediante una operación de arrastrar y colocar. También puede cambiar el t
amaño de los controles haciendo clic y arrastrando el borde o la esquina del control.

4. Desde la misma ficha, arrastre un control TextBox y colóquelo en la parte superior del control Panel.
5. Finalmente, en la ficha Todos los formularios Windows Forms, seleccione un control WebBrowser y colóquelo debajo
del control Panel.
Sugerencia
Si tiene abierta la ventana Cuadro de herramientas, es posible que desee cerrarla ahora para tener más espacio de tr
abajo. Puede hacerlo haciendo clic una vez más en el icono Ocultar automáticamente.

Información detallada
Acaba de agregar cuatro controles al formulario. Los controles contienen código que define el aspecto que tendrán y las tareas
que pueden realizar.
Por ejemplo, considere el control Button: casi todos los programas tienen un botón "Aceptar" o un botón "Salir". Si bien podría
escribir su propio código para dibujar un botón en la pantalla, cambiar su apariencia cuando se presione y realizar alguna tarea
cuando se haga clic en él, hacerlo para cada programa enseguida se convertirá en un asunto tedioso. El control Button ya
contiene el código necesario para hacer estas tareas, lo que le ahorra mucho trabajo innecesario.
Como puede ver, el Cuadro de herramientas contiene numerosos controles y cada uno de ellos tiene un propósito único. Los
controles Panel se pueden utilizar para contener otros controles, como los que acaba de agregar. Los controles Button se
utilizan generalmente para realizar tareas cuando el usuario hace clic en ellos; por ejemplo, cerrar el programa. Los controles
TextBox se utilizan para escribir texto en una pantalla a través del teclado. Un control WebBrowser proporciona funciones de
exploración Web integradas similares a Internet Explorer: seguro que no desea escribir todo el código de esa función.
En próximas lecciones aprenderá a personalizar la apariencia de éstos y de otros muchos controles, así como también a
escribir el código que define su comportamiento. Además de utilizar los controles del Cuadro de herramientas, también
puede crear sus propios controles, los que se conocen como controles de usuario; también se hablará de ellos en una próxima
lección.
Pasos siguientes
Acaba de agregar todos los controles necesarios a la aplicación. Probablemente tendrá un aspecto tosco y sin terminar, ¡pero
es que es cierto! En la siguiente lección, utilizará la ventana Propiedades para establecer las propiedades que controlarán el
aspecto y el comportamiento de la aplicación.
Siguiente lección: Paso 3: personalizar aspecto y comportamiento
Vea también
Tareas
Paso 1: crear un proyecto en Visual Basic
Otros recursos
Crear el primer programa en Visual Basic
Controles que se utilizan en formularios Windows Forms
Conceptos del lenguaje Visual Basic

Paso 3: personalizar aspecto y comportamiento


En la lección anterior, se creó una interfaz de usuario agregando controles a la aplicación. En este punto, sin embargo, ésta no
parece ni funciona como una aplicación finalizada. En esta lección, establecerá las propiedades para controlar la apariencia de
los controles, utilizando la ventana Propiedades.
Para establecer las propiedades de los controles
1. En el Diseñador de Windows Forms, seleccione el control Panel.
La ventana Propiedades ubicada en la esquina inferior derecha del IDE muestra todas las propiedades para el control
Panel denominado Panel1.
2. En la ventana Propiedades, seleccione la propiedad Dock y, a continuación, haga clic en la flecha a la derecha. Se
mostrará una ventana pequeña de selección de propiedades con varios cuadros.
Sugerencia
La propiedad Dock se encuentra bajo la categoría Diseño. Puede ordenar las propiedades alfabéticamente haciendo cl
ic en el botón AZ de la ventana Propiedades.

3. Haga clic en el cuadro superior en la ventana de selección de propiedades para establecer la propiedad Dock en Top. El
control Panel se expandirá para rellenar la parte superior del formulario.
4. En el Diseñador de Windows Forms, seleccione el control WebBrowser. En la ventana Propiedades, para establecer la
propiedad Dock en Fill seleccione la propiedad Dock, haga clic en la flecha a la derecha y seleccione el cuadro del centro
de la ventana de selección de propiedades.
5. En el Diseñador de Windows Forms, seleccione el control Button.
6. En la ventana Propiedades, seleccione la propiedad Text del control Button. En la columna de la derecha, elimine
Button1 y reemplácelo por Go!.

7. Cambie el tamaño o vuelva a ubicar cualquiera de los controles y cambie nuevamente el tamaño del formulario según
sus preferencias.
Nota
Los controles TextBox y Button deben permanecer en la parte superior de Panel o no podrá verlos cuando se ejecuta l
a aplicación.

Información detallada
En esta lección, se establecen varias propiedades que cambian la apariencia de los controles para la aplicación. Una propiedad
en Visual Basic representa un atributo de un objeto, en este caso, un control. Por ejemplo, un atributo de un control Button es
el texto que muestra. En este caso, se establece la propiedad Text para mostrar "Ir". Para obtener más información sobre las
propiedades, vea Información detallada: comprender propiedades, métodos y eventos.
Las propiedades pueden tomar muchos tipos diferentes de valores además del texto. Por ejemplo, la propiedad Dock utilizó
una ventana de selección de propiedades para mostrar las opciones disponibles. Otros valores de la propiedad pueden ser
números, una opción que se selecciona de una lista, o una opción true o false.
Si se cambió el tamaño de un control o se reubicó, también se establecieron las propiedades. Las propiedades Size y Location
determinan el tamaño y la ubicación del control en el formulario. Para ver esto en acción, seleccione la propiedad Size en la
ventana Propiedades y utilice el mouse para cambiar el tamaño del control. Cuando se suelta el botón del mouse, los nuevos
valores Size se mostrarán en la ventana Propiedades.
Además de establecer las propiedades en la ventana Propiedades, la mayoría de éstas se pueden establecer escribiendo un
código. En una próxima lección, aprenderá más acerca de cómo escribir el código para establecer las propiedades.
Pasos siguientes
La interfaz de usuario ahora está completa. Todo lo que tiene que hacer es agregar las instrucciones (también llamadas código)
para ver cómo desea que funcione el programa. En la siguiente lección, se agregará una línea de código al programa.
Siguiente lección: Paso 4: agregar código de Visual Basic
Vea también
Tareas
Paso 1: crear un proyecto en Visual Basic
Paso 2: Crear una interfaz de usuario
Conceptos
Información detallada: comprender propiedades, métodos y eventos
Otros recursos
Crear el primer programa en Visual Basic
Conceptos del lenguaje Visual Basic

Información detallada: comprender propiedades, métodos y


eventos
Todos los objetos en el lenguaje de Visual Basic, incluidos los formularios y controles, tienen sus propias propiedades, métodos
y eventos. Las propiedades pueden considerarse como los atributos de un objeto, los métodos como sus acciones y los
eventos como sus respuestas.
Un objeto corriente como un globo de helio también tiene propiedades, métodos y eventos. Las propiedades de un globo
incluyen atributos visibles como su alto, diámetro y color. Otras propiedades describen su estado (inflado o desinflado) o
atributos que no se ven, como su edad. Todos los globos tienen estas propiedades, aunque sus valores pueden diferir de un
globo a otro.
Un globo también tiene métodos o acciones conocidas que puede realizar. Tiene un método para inflarse (llenarlo con helio),
un método para desinflarse (expulsar su contenido) y un método para elevarse (soltarlo). Asimismo, todos los globos pueden
tener estos métodos.
Los globos también tienen respuestas a ciertos eventos externos. Por ejemplo, un globo responde al evento de ser pinchado
desinflándose o al evento de ser soltado elevándose.
Propiedades, métodos y eventos

Un globo tiene propiedades (Color, Alto y Diámetro), responde a eventos (Puncture) y puede ejecutar métodos (Deflate,
MakeNoise).
Propiedades
Si pudiera programar un globo, el código de Visual Basic podría parecerse al siguiente "código" que establece las propiedades
de un globo.
Balloon.Color = Red
Balloon.Diameter = 10
Balloon.Inflated = True

Observe el orden del código: el objeto (Globo) seguido por la propiedad (Color) seguida por la asignación del valor (= Rojo).
Puede cambiar el color del globo sustituyendo un valor diferente.
Métodos
Los métodos de un globo se denominan de este modo.
Balloon.Inflate
Balloon.Deflate
Balloon.Rise(5)

El orden es parecido al de una propiedad: el objeto (un nombre), seguido por el método (un verbo). En el tercer método, hay un
elemento adicional, llamado argumento, que especifica la distancia a que se elevará el globo. Algunos métodos tendrán uno o
más argumentos para describir aún más la acción que se va a realizar.
Eventos
El globo podría responder a un evento de la siguiente manera.

Sub Balloon_Puncture()
Balloon.MakeNoise("Bang")
Balloon.Deflate
Balloon.Inflated = False
End Sub

En este caso, el código describe el comportamiento del globo cuando se produce un evento Puncture: llama al método
MakeNoise con un argumento "Bang", (el tipo de ruido a realizar), luego llama al método Deflate. Puesto que el globo ya no
está inflado, la propiedad Inflated se establece en False.
Si bien, en realidad no puede programar un globo, puede programar un formulario o control de Visual Basic. Como
programador, es el responsable. Decida las propiedades que se deben cambiar, los métodos que se deben invocar o los
eventos que se deben responder para lograr la apariencia y el comportamiento deseados.
Pasos siguientes
En la siguiente lección, se agregará una línea de código al programa.
Próxima lección: Paso 4: agregar código de Visual Basic
Vea también
Otros recursos
Guía de programación en Visual Basic
Conceptos del lenguaje Visual Basic

Paso 4: agregar código de Visual Basic


En la lección anterior, se utilizó la ventana Propiedades para configurar las propiedades de los controles en el formulario. En
esta lección, se agregará el código que controlará las funciones del programa.
Para agregar el código y la funcionalidad al programa
1. En el Diseñador de Windows Forms, haga doble clic en el control Button .
Se abre una nueva ventana denominada Editor de código. Aquí es donde se agrega todo el código para el programa.
2. En el Editor de código, escriba lo siguiente.
VB
WebBrowser1.Navigate(Textbox1.Text)

Este código se ejecutará cuando los usuarios hagan clic en el botón.


Sugerencia
Cuando el Editor de código se abre, el cursor se coloca automáticamente dentro del procedimiento Button; sólo tiene q
ue empezar a escribir.

Información detallada
Es posible que haya observado que cuando se abre el Editor de código, éste ya contiene algún código con el siguiente aspecto:
Private Sub Button1_Click(ByVal sender As System.Object...
|
End Sub

Este código es un controlador de eventos, también denominado procedimiento Sub. Cualquier código dentro de este
procedimiento (entre Sub y End Sub) se ejecuta cada vez que se haga clic en el botón. También puede haber observado que el
cursor se encontraba dentro del procedimiento de evento, de manera que todo lo que tuvo que hacer fue escribir.
El código que escribió (WebBrowser1.Navigate(TextBox1.Text)) le indica al programa que utilice el método Navigate del
control (denominado WebBrowser1) WebBrowser con un argumento de TextBox1.Text (el valor contenido en la propiedad
Text del control TextBox). Para obtener más información sobre las propiedades, los métodos y los eventos vea
Información detallada: comprender propiedades, métodos y eventos
Si no entiende el código, no se preocupe, aprenderá mucho más sobre la escritura de código en las siguientes lecciones.
Pasos siguientes
La aplicación está ahora completa. En la siguiente lección, se ejecutará la primera aplicación de Visual Basic.
Siguiente lección: Paso 5: ejecutar y probar un programa
Vea también
Tareas
Paso 1: crear un proyecto en Visual Basic
Paso 2: Crear una interfaz de usuario
Paso 3: personalizar aspecto y comportamiento
Conceptos
Información detallada: comprender propiedades, métodos y eventos
Otros recursos
Crear el primer programa en Visual Basic
Conceptos del lenguaje Visual Basic

Paso 5: ejecutar y probar un programa


Ahora que el programa está terminado, es hora de ejecutarlo y probarlo. Para programas complejos, la prueba puede ser un
proceso largo y difícil, que se analizará en detalle en una lección posterior. Afortunadamente, en este programa todo lo que
debe hacer es ejecutarlo.
Para ejecutar el programa
1. Conecte su equipo a Internet.
2. En el menú Depurar del IDE de Visual Basic, haga clic en Iniciar depuración.
Este comando ejecuta el programa.
Sugerencia
El acceso directo para ejecutar el programa es F5.

3. En el cuadro de texto, escriba http://www.microsoft.com/spanish y haga clic en el botón Ir.


El control WebBrowser del programa va a la página principal de Microsoft. Desde allí, puede desplazarse por cualquier
vínculo relacionado. Para visitar otra página Web, escriba la dirección en el cuadro de texto y haga clic en el botón Ir.
4. Para cerrar el programa, en el menú Depuración, haga clic en Detener depuración.
Sugerencia
También puede finalizar el programa haciendo clic en el botón Cerrar situado en la esquina superior derecha del form
ulario.

Información detallada
En esta lección se ejecutó el programa para ver si funcionaba. Para la mayoría de los programas de Visual Basic, se repetirá
este proceso muchas veces. Generalmente, después de agregar nuevo código, ejecutará el programa para ver si el código lleva
a cabo la acción que se espera; de lo contrario, deberá corregirlo. Este proceso se llama depuración; se analizará en detalle en
una lección posterior.
Puede parecer increíble que el programa vaya a una página Web y que la muestre, como resultado de escribir una sola línea de
código. Esto es lo bueno de Visual Basic, todo el código necesario se integra en el control WebBrowser, lo que le permite
ahorrar tiempo y esfuerzo. Si tuviera que hacerlo todo personalmente, tomaría cientos o incluso miles de líneas de código.
Solución de problemas
Si el programa no se ejecuta ni muestra la página Web, hay algunas cosas que puede comprobar:
Asegúrese de estar conectado a Internet. Abra Internet Explorer e intente desplazarse a la página principal de Microsoft.
Si funciona en Internet Explorer, también debe funcionar en el programa.
Asegúrese de que escribió la dirección (http://www.microsoft.com/spanish) correctamente.
Regrese y compruebe Paso 2: Crear una interfaz de usuario y asegúrese de que colocó los controles correctos en el
formulario.
Regrese a Paso 4: agregar código de Visual Basic y asegúrese de que escribió el código correctamente.
Pasos siguientes
¡Enhorabuena! Ha completado su primer programa de Visual Basic. Ha mostrado cómo se pueden desarrollar programas
eficaces en forma rápida y fácil utilizando Visual Basic. En las siguientes lecciones, se presentarán más características del
lenguaje de programación de Visual Basic.
Siguiente lección: Introducción al lenguaje de programación Visual Basic
Vea también
Tareas
Paso 1: crear un proyecto en Visual Basic
Paso 2: Crear una interfaz de usuario
Paso 3: personalizar aspecto y comportamiento
Paso 4: agregar código de Visual Basic
Otros recursos
Crear el primer programa en Visual Basic
¿Qué salió mal? Encontrar y corregir errores mediante depuración
Conceptos del lenguaje Visual Basic

Introducción al lenguaje de programación Visual Basic


Microsoft Visual Basic 2005 Express es una manera rápida y sencilla de crear programas para Microsoft Windows. Aunque no
tenga experiencia de programación en Windows, con Visual Basic dispone de un completo conjunto de herramientas para
simplificar las tareas de desarrollo.
¿Y qué es Visual Basic? "Visual" hace referencia al método utilizado para crear lo que ve el usuario, la interfaz gráfica de
usuario o GUI. "Basic" hace referencia al lenguaje de programación BASIC, de Beginners All-Purpose Symbolic Instruction Code
(Código de Instrucción Simbólico Todo Propósito para Principiantes), un lenguaje utilizado por más programadores que
cualquier otro lenguaje en la historia de la informática. Puede crear programas útiles sólo con aprender algunas de sus
características. Los vínculos siguientes le servirán para empezar a programar en Visual Basic; cada vínculo incluye ejemplos, así
como acceso a información adicional.
Programar los conceptos
¿Qué es exactamente un lenguaje de programación? Los vínculos siguientes le darán cierta información general sobre lo que
es un lenguaje y cómo almacena diferentes tipos de información.
Término Definición
Conceptos básicos: funcionamiento de la programación Cómo funciona un lenguaje de programación y terminolo
gía básica.

Representación de palabras, números y valores con variables Cómo las variables almacenan valores y representan info
rmación, así como la manera de utilizarlas.

Palabras y texto: utilizar variables de cadena para organizar palabras Cómo utilizar una variable String para representar palab
ras y texto.

Matrices: variables que representan más de un valor Cómo utilizar una variable Array para representar varios
valores del mismo tipo.

Aritmética: crear expresiones con variables y operadores Cómo escribir código que realiza operaciones aritméticas.

Comparaciones: Utilizar expresiones para comparar valores Cómo escribir código que compara valores numéricos.

Su primer programa
¿Preparado para un poco de programación real? Los vínculos siguientes le guiarán por el proceso de creación de un programa
simple y le mostrarán cómo buscar los errores del programa.
Término Definición
Hacer que el equipo haga algo: escribir el primer procedimiento Cómo escribir código que indica a su programa qu
e realice una acción determinada.

Hacer que un programa repita acciones: establecer bucles For...Next Cómo escribir código que repite acciones en su pr
ograma y cuenta las veces que éstas se han realiza
do.

Hacer que un programa elija entre dos posibilidades: la instrucción If...Then Cómo escribir código que hace cosas diferentes en
respuesta a condiciones diferentes.

Qué hacer cuando algo sale mal: control de errores Cómo escribir código que controla los errores de s
us programas. También obtendrá información sobr
e los diferentes tipos de errores.

Más sobre Visual Basic


Los vínculos siguientes le ayudarán a aumentar su conocimiento de programación y de Visual Basic 2005.
Término Definición
Información detallada: comprender propiedades, métodos y eventos Cómo funcionan las propiedades
, los métodos y los eventos.

Información detallada: tipos de datos Cómo se almacenan los datos uti


lizando los diferentes tipos de va
riables.

Información detallada: convertir un tipo de variable en otro Cómo convertir datos de un tipo
en otro, junto con algunos errore
s comunes de este proceso.

Información detallada: utilizar Do...While y Do...Until para repetir hasta obtener una condición Cómo utilizar las instrucciones D
o...While y Do...Until para repe
tir código basándose en ciertas c
ondiciones.

Información detallada: utilizar Select Case para decidir entre varias opciones Cómo ejecutar código basándos
e en varias condiciones donde h
ay muchas elecciones.

Paseo con guía por Visual Basic Más cosas que puede hacer con
el lenguaje de programación Vis
ual Basic 2005
Conceptos del lenguaje Visual Basic

Conceptos básicos: funcionamiento de la programación


Antes de comenzar el aprendizaje del lenguaje de programación Visual Basic, puede ser útil comprender lo que es un lenguaje
de programación y cómo funciona, incluso alguna terminología de programación. El mejor punto de partida es comenzar con
los conceptos básicos.
Cómo funciona la programación
Por sí solo, un equipo no es muy inteligente.
Esencialmente, un equipo es sólo un gran grupo de pequeños modificadores electrónicos que están activados o desactivados.
Al establecer diferentes combinaciones de estos modificadores, se logra que el equipo realice alguna acción, por ejemplo, que
muestre algo en la pantalla o que emita un sonido. Eso es la programación en su concepto más básico: decirle a un equipo qué
hacer.
Claro está que comprender qué combinación de modificadores logrará que el equipo haga lo que se desea será una gran tarea;
aquí es donde los lenguajes de programación adquieren un papel importante.
¿Qué es un lenguaje de programación?
Las personas se expresan utilizando un lenguaje con muchas palabras. Los equipos utilizan un lenguaje simple que consta sólo
de números 1 y 0, con un 1 que significa "activado" y un 0 que significa "desactivado". Tratar de hablar con un equipo en su
propio lenguaje sería como tratar de hablar con los amigos utilizando el código Morse, se puede hacer, pero ¿para qué?
Un lenguaje de programación actúa como un traductor entre el usuario y el equipo. En lugar de aprender el lenguaje nativo del
equipo (conocido como lenguaje máquina), se puede utilizar un lenguaje de programación para dar instrucciones al equipo de
un modo que sea más fácil de aprender y entender.
Un programa especializado conocido como compilador toma las instrucciones escritas en el lenguaje de programación y las
convierte en lenguaje máquina. Esto significa que, como desarrollador de Visual Basic, no precisa entender lo que el equipo
hace o cómo lo hace, sólo es necesario entender cómo funciona el lenguaje de programación de Visual Basic.
Descripción general del lenguaje Visual Basic
En mucho sentidos, el lenguaje Visual Basic es muy parecido al lenguaje cotidiano. Cuando se habla o escribe, se utilizan
diferentes tipos de palabras, como nombres o verbos, que definen cómo se utilizan. Visual Basic también tiene diferentes tipos
de palabras, conocidas como elementos de programación, que definen cómo se utilizan para escribir programas.
Los elementos de programación de Visual Basic incluyen instrucciones, declaraciones, métodos, operadores y palabras clave. A
medida que avance en las siguientes lecciones, irá aprendiendo más sobre estos elementos y cómo utilizarlos.
El lenguaje escrito y hablado también tiene reglas, o sintaxis, que definen el orden de las palabras en una frase. Visual Basic
también tiene su sintaxis, al comienzo resulta extraña pero realmente es muy simple. Por ejemplo, para decir "La velocidad
máxima de mi automóvil es 55", se escribiría:
Car.Speed.Maximum = 55

Más adelante aprenderá más sobre la sintaxis y las herramientas de Visual Basic, por ejemplo IntelliSense, que es una guía para
utilizar la sintaxis correcta al escribir los programas.
El lenguaje hablado y escrito también posee su estructura: por ejemplo, un libro consta de capítulos con párrafos que
contienen frases. Los programas escritos en Visual Basic también tiene una estructura: los módulos son como los capítulos, los
procedimientos como los párrafos y las líneas de código como las frases.
Pasos siguientes
En esta lección, aprendió lo que es un lenguaje de programación y cómo funciona. En la siguiente lección, aprenderá a utilizar
el lenguaje de programación Visual Basic. No se preocupe, en poco tiempo estará hablando Visual Basic.
Siguiente lección: Representación de palabras, números y valores con variables
Vea también
Tareas
Representación de palabras, números y valores con variables
Conceptos
Información detallada: comprender propiedades, métodos y eventos
Introducción al lenguaje de programación Visual Basic
Otros recursos
Crear el primer programa en Visual Basic
Guía de programación en Visual Basic
Conceptos del lenguaje Visual Basic

Representación de palabras, números y valores con variables


Las variables son un concepto importante en programación. Una variable es una letra o un nombre que puede almacenar un
valor. Al crear programas, se pueden utilizar variables para almacenar números, por ejemplo, el alto de un edificio, o palabras,
por ejemplo, el nombre de una persona. Resumiendo, se pueden utilizar variables para representar cualquier tipo de
información que el programa necesite.
Puede surgir la pregunta, "¿Por qué utilizar una variable cuando en su lugar se puede utilizar simplemente la información?"
Como su nombre indica, las variables pueden cambiar el valor que representan cuando el programa se está ejecutando. Por
ejemplo, puede escribir un programa para realizar el seguimiento del número de caramelos que tiene en un frasco en su
escritorio. Dado que los dulces se comen, es probable que la cantidad de caramelos del frasco cambie con el tiempo. En lugar
de volver a escribir el programa cada vez que quiere comerse un caramelo, puede representar el número de caramelos con
una variable que cambia con el tiempo.
Almacenar información en variables
Hay tres pasos para utilizar una variable:
1. Declarar la variable. Indicar al programa el nombre y el tipo de variable que se desea utilizar.
2. Asignar la variable. Proporcionar un valor a la variable.
3. Utilizar la variable. Recuperar el valor contenido en la variable y utilizarlo en el programa.
Declarar variables
Cuando declara una variable, tiene que decidir cómo llamarla y qué tipo de datos asignarle.
Se declara una variable utilizando las palabras clave Dim y As, como se muestra a continuación.
VB
Dim aNumber As Integer

Esta línea de código indica al programa que se desea utilizar una variable denominada aNumber, que almacene números
enteros (el tipo de datos Integer).
Puesto que aNumber es un Integer, sólo puede almacenar números enteros. Por ejemplo, si desea almacenar 42,5 utilizará el
tipo de datos Double. Y si desea almacenar una palabra, utilizará un tipo de datos String. Otro tipo de datos que vale la pena
mencionar en este punto es Boolean, que puede almacenar un valor True o False.
Aquí hay más ejemplos de cómo declarar las variables.
VB
Dim aDouble As Double
Dim aName As String
Dim YesOrNo As Boolean

Para obtener más información sobre otros tipos de variable, vea Información detallada: tipos de datos.
Asignar variables
Se asigna un valor a la variable con el signo =, que a veces se denomina operador de asignación, como se muestra en el
ejemplo siguiente.
VB
aNumber = 42

Esta línea de código toma el valor 42 y lo almacena en la variable declarada previamente denominada aNumber.
Declarar y asignar variables con un valor predeterminado
Como se muestra anteriormente, puede declarar una variable en una línea de código y asignar más tarde el valor en otra línea.
Esto puede producir un error si intenta utilizar la variable antes de asignarle un valor.
Por esa razón, es mejor declarar y asignar las variables en una línea única. Aunque no sepa aún el valor que contendrá la
variable, puede asignar un valor predeterminado. El código para declarar y asignar las mismas variables mostradas
anteriormente será similar al siguiente.
VB
Dim aDouble As Double = 0
Dim aName As String = "default string"
Dim YesOrNo As Boolean = True

Si declara las variables y asigna los valores predeterminados en una sola línea, puede evitar posibles errores. Todavía puede
utilizar la asignación para dar después un valor diferente a la variable.
Inténtelo
En este ejercicio, escribirá un breve programa que crea cuatro variables, les asigna valores y a continuación muestra cada valor
en una ventana llamada cuadro de mensaje. Comencemos creando el proyecto donde se almacenará el código.
Para crear el proyecto
1. Si aún no está abierto, abra Visual Basic en el menú Inicio de Windows.
2. En el menú Archivo, haga clic en Nuevo proyecto.
3. En el cuadro de diálogo Nuevo proyecto, en el panel Plantillas, haga clic en Aplicación para Windows.
4. En el cuadro Nombre, escriba Variables y haga clic en Aceptar.
Visual Basic creará los archivos para el programa y abrirá el Diseñador de Windows Forms.
A continuación, creará las variables.
Para crear las variables y mostrar sus valores
1. Haga doble clic en el formulario.
El Editor de código abrirá una sección de código llamada Form1_Load. Esta sección de código, denominada
procedimiento, contiene las instrucciones que se llevarán a cabo cuando se cargue por primera vez el formulario en la
memoria.
2. En el procedimiento Form1_Load, escriba el siguiente código.
VB
Dim anInteger As Integer = 42
Dim aSingle As Single = 39.345677653
Dim aString As String = "I like candy"
Dim aBoolean As Boolean = True

Este código declara cuatro variables: Integer, Single, String y Boolean—, y asigna sus valores predeterminados.
Sugerencia
Al escribir el código, quizá haya observado que después de escribir As, aparece una lista de palabras bajo el cursor. Esta
característica se llama Intellisense. Le permite escribir las primeras letras de una palabra y seleccionarla en la lista. Una
vez seleccionada, presione la tecla TAB para finalizar la palabra.

Nota
Siempre que representa texto real en un programa, éste debe aparecer entre comillas (""). Esto le dice al programa que
interprete el texto como texto real en lugar de interpretarlo como un nombre de variable. Cuando asigna a una variable
Boolean un valor True o False, no pone la palabra entre comillas, porque True y False son palabras clave de Visual Ba
sic, con significados especiales propios.

3. Debajo del código que escribió en el paso anterior, escriba lo siguiente.


VB
MsgBox(anInteger)
MsgBox(aSingle)
MsgBox(aString)
MsgBox(aBoolean)

VB
End

Las primeras cuatro líneas del código le dicen al programa que muestre cada valor que asignó en el paso anterior en una
nueva ventana, utilizando la función MsgBox. La línea final indica al programa que finalice después de ejecutar este
procedimiento: se utiliza la instrucción End.
4. Presione F5 para ejecutar el programa.
Haga clic en el botón Aceptar en cada ventana según aparezcan. Observe que sucesivamente se muestra el valor de cada
variable y, a continuación, el programa finaliza. Después de que el programa finaliza, puede regresar y cambiar los
valores que se asignaron en el código y ejecutar la aplicación de nuevo: verá que se muestran los nuevos valores.
Pasos siguientes
En esta lección, aprendió los aspectos básicos sobre las variables. En la siguiente lección, aprenderá sobre las variables String.
Siguiente lección: Palabras y texto: utilizar variables de cadena para organizar palabras
Vea también
Tareas
Palabras y texto: utilizar variables de cadena para organizar palabras
Información detallada: convertir un tipo de variable en otro
Conceptos
Conceptos básicos: funcionamiento de la programación
Información detallada: tipos de datos
Conceptos del lenguaje Visual Basic

Información detallada: tipos de datos


Los tipos de datos en Visual Basic determinan la clase de valores o datos que se puede almacenar en una variable, y cómo se
almacenan esos datos. ¿Por qué hay tipos de datos diferentes? Piense en ello de esta manera: si tiene tres variables, dos de las
cuales contienen números y la tercera contiene un nombre, puede realizar operaciones aritméticas con las dos primeras, pero
no puede realizarlas con la que almacena el nombre. Asignar un tipo de datos a una variable facilita determinar cómo se
puede, o no se puede, utilizar la variable.
Nota
Los tipos de datos también se utilizan en otros elementos de programación como constantes, propiedades y funciones. Obte
ndrá más información sobre los otros usos de los tipos de datos en una lección posterior.

Tipos de datos para números


La mayoría de los programas informáticos tratan con números de una forma u otra. Hay varias maneras diferentes de expresar
números, Visual Basic cuenta con varios tipos de datos numéricos que tratan eficazmente con números.
El tipo de dato numérico que más se utiliza es Integer, utilizado para representar un número entero (un número sin parte
fraccionaria). Cuando se elige un tipo de datos para representar números enteros, hay que utilizar el tipo de datos Long si la
variable va a almacenar números mayores que dos mil millones; de lo contrario, el tipo Integer es más útil.
No todos los números son números enteros; por ejemplo, cuando se divide dos números enteros, el resultado es a menudo un
número entero más una fracción (9 dividido por 2 es igual a 4,5). El tipo de datos Double se utiliza para representar números
que tienen una parte fraccionaria.
Nota
Hay tipos de datos numéricos adicionales como Decimal, Short, SByte y UInteger; éstos se suelen utilizar en programas m
uy grandes donde puede ser un problema utilización de la memoria o la velocidad. De momento, los tipos de datos numéric
os básicos es todo lo que va a necesitar. Si desea obtener más información sobre los tipos de datos avanzados, vea
Tipos de datos numéricos.

Tipos de datos para texto


La mayoría de los programas también tratan con texto, ya sea mostrando información al usuario o capturando texto escrito
por el usuario. El texto normalmente se almacena en el tipo de datos String, que puede contener una serie de letras, números,
espacios y otros caracteres. El tipo String puede tener cualquier longitud, desde una frase o un párrafo a sólo un carácter o
nada en absoluto (cadena nula).
Por cada variable que representa un único carácter, también hay un tipo de datos Char. Si sólo necesita contener un carácter
en una única variable, utilice el tipo de datos Char en lugar de String.
Otros tipos de datos
Además de texto y números, los programas a veces necesitan almacenar otros tipos de información, como un valor verdadero
o falso, una fecha, o datos que tienen un significado especial para el programa.
Para aquellos valores que se pueden representar como verdadero/falso, sí/no o activado/desactivado, Visual Basic cuenta con
el tipo de datos Boolean. Una variable Boolean puede contener uno de dos valores posibles: True o False.
Aunque se pueden representar las fechas y horas como números, el tipo de datos Date facilita la tarea de calcular fechas u
horas, como, por ejemplo, el número de días que quedan hasta su cumpleaños o el número de minutos que faltan hasta la
hora de comer.
Si necesita almacenar más de un tipo de datos en una única variable, puede utilizar un tipo de datos compuesto. Los tipos de
datos compuestos incluyen matrices, estructuras y clases. Más adelante obtendrá más información sobre estos tipos de datos.
Finalmente, hay casos en los que el tipo de datos que necesita almacenar debe ser distinto en momentos diferentes. El tipo de
datos Object le permite declarar una variable y a continuación definir después su tipo de datos. También obtendrá más
información sobre el tipo de datos Object en una lección posterior.
Pasos siguientes
En la lección siguiente, "Palabras y texto: utilización de variables de cadena para organizar palabras", obtendrá más
información sobre cómo trabajar con variables de cadena para formar frases.
Siguiente lección: Palabras y texto: utilizar variables de cadena para organizar palabras
Vea también
Tareas
Palabras y texto: utilizar variables de cadena para organizar palabras
Representación de palabras, números y valores con variables
Conceptos
Tipos de datos en Visual Basic
Conceptos del lenguaje Visual Basic

Palabras y texto: utilizar variables de cadena para organizar


palabras
En esta lección, aprenderá a utilizar el tipo de datos String para representar palabras y texto.
En la lección anterior, aprendió a utilizar las variables para almacenar los datos en el programa y que cada variable debe ser
del tipo adecuado para los datos que almacenará. En esta lección, aprenderá sobre el tipo de datos String utilizado para
almacenar el texto.
¿Qué es una cadena?
Una cadena es cualquier serie de caracteres de texto, como letras, números, caracteres especiales y espacios. Las cadenas
pueden ser frases y oraciones legibles, como "El rápido zorro de color café salta sobre el perro perezoso" o una combinación
aparentemente ininteligible como "@#fTWRE^3 35Gert".
Las variables String se crean del mismo modo que otras variables: declarando primero la variable y asignándole un valor,
como se muestra a continuación.
VB
Dim aString As String = "This is a string"

Al asignar un texto real (también denominado literales de cadena) a una variable String, el texto debe estar entre comillas ("").
También puede utilizar el carácter = para asignar una variable String a otra variable String, como se muestra en este ejemplo.
VB
Dim aString As String = "This is a string"
...
Dim bString As String = ""
bString = aString

El código anterior establece el valor de bString en el mismo valor que aString (This is a string).

Puede utilizar el carácter & para combinar dos o más cadenas secuencialmente en una nueva cadena, como se muestra a
continuación.
VB
Dim aString As String = "Across the Wide"
Dim bString As String = "Missouri"
Dim cString As String = ""
cString = aString & bString

El ejemplo anterior declara tres variables de String y asigna respectivamente "Across the Wide" y "Missouri" a las dos
primeras y luego asigna los valores combinados de las dos primeras a la tercera variable. ¿Cuál cree que es el valor de
cString? Le puede sorprender saber que el valor es Across the WideMissouri porque no hay ningún espacio al final de
aString o al principio de bString. Las dos cadenas están simplemente unidas. Si desea agregar espacios o cualquier otro
símbolo entre dos cadenas, debe hacerlo mediante un literal de cadena, como " ", como se muestra a continuación.

Dim aString As String = "Across the Wide"


Dim bString As String = "Missouri"
Dim cString As String = ""
cString = aString & " " & bString

El texto contenido ahora en cString dice Across the Wide Missouri.

Inténtelo
Para unir las cadenas
1. En el menú Archivo, haga clic en Nuevo proyecto.
2. En el cuadro de diálogo Nuevo proyecto:
a. En el panel Plantillas, haga clic en Aplicación para Windows.
b. En el cuadro Nombre, escriba Concatenación.
c. Haga clic en Aceptar.
Se abre un nuevo proyecto de formularios Windows Forms.
3. Haga doble clic en el formulario para abrir el Editor de código.
4. En el procedimiento del evento Form1.Load, declare cuatro variables de cadena y asigne los valores de cadena, como se
muestra a continuación:
VB
Dim aString As String = "Concatenating"
Dim bString As String = "Without"
Dim cString As String = "With"
Dim dString As String = "Spaces"

5. Agregue el siguiente código para concatenar las cadenas y mostrar los resultados:
VB
' Displays "ConcatenatingWithoutSpaces".
MsgBox(aString & bString & dString)

... ' Displays "Concatenating With Spaces".


MsgBox(aString & " " & cString & " " & dString)

El texto mostrado en el cuadro de mensaje es el resultado de la unión de las variables de cadena asignadas en un paso
anterior. En el primer cuadro, las cadenas están unidas sin espacios. En el segundo, los espacios se insertan
explícitamente entre cada cadena.
Pasos siguientes
En esta lección, aprendió a declarar y asignar cadenas y también a unirlas con el operador de concatenación &. En la siguiente
lección, "Matrices: variables que representan más de un valor", aprenderá a crear variables para almacenar grupos de
elementos similares.
Siguiente lección: Matrices: variables que representan más de un valor
Vea también
Tareas
Matrices: variables que representan más de un valor
Representación de palabras, números y valores con variables
Conceptos
Introducción al lenguaje de programación Visual Basic
Conceptos del lenguaje Visual Basic

Matrices: variables que representan más de un valor


En esta lección, aprenderá a utilizar matrices para almacenar grupos de valores.
Como aprendió en las lecciones anteriores, las variables se utilizan para almacenar diferentes tipos de datos que el programa
utiliza. Hay otro tipo de variable denominado matriz que proporciona una manera conveniente de almacenar diversos valores
del mismo tipo.
Por ejemplo, suponga que está escribiendo un programa para un equipo de béisbol y desea almacenar los nombres de todos
los jugadores que se encuentran en el campo de juego. Puede crear nueve variables de cadenas separadas, una para cada
jugador o puede declarar una variable de matriz que se parezca al código que aparece a continuación.
VB
Dim players() As String

Una variable de matriz se declara colocando paréntesis después del nombre de la variable. Si se sabe cuántos valores se
necesita almacenar, también se puede especificar el tamaño de la matriz en la declaración de la siguiente manera.
VB
Dim players(8) As String

Puede parecer extraño que el tamaño de la matriz sea 8 cuando un equipo del béisbol tiene 9 jugadores. Esto se debe a que la
matriz está formada por una cantidad de valores o elementos, que comienzan con el elemento 0 y terminan con el número
especificado en la declaración. En este caso, la matriz contiene los elementos 0 a 8, de un total de nueve.
Asignar valores a las matrices
Al igual que con otros tipos de valores, debe asignar valores a las matrices. Para ello, se hace referencia al número del
elemento como parte de la asignación, como se muestra a continuación.
VB
players(0) = "John"
players(3) = "Bart"

En el código anterior, el valor John se asigna al primer elemento de la matriz (elemento 0) y el valor Brett se asigna al cuarto
elemento (elemento 3). Los elementos de la matriz no se tienen que asignar en orden y cualquier elemento sin asignar tendrá
un valor predeterminado; en este caso, una cadena vacía.
Al igual que con otros tipos de valores, puede declarar y asignar los valores a una matriz en una línea única de la siguiente
manera.
VB
Dim players() As Integer = {1, 2, 3, 4, 5, 6, 7, 8, 9}

En este caso, las llaves indican una lista de valores. Los valores se asignan a los elementos en el orden mostrado. Observe que
no se especifica el tamaño de la matriz, lo determina el número de elementos que se muestran.
Recuperar valores de las matrices
Así como se utilizan números para especificar la posición de un elemento en una matriz, el número de elementos se utiliza
para especificar qué valor desea recuperar.
VB
Dim AtBat As String
AtBat = players(3)
El código anterior recupera el cuarto elemento de la matriz y lo asigna a la variable de cadena AtBat.
Inténtelo
Para almacenar los valores en una matriz
1. En el menú Archivo, seleccione Nuevo proyecto.
2. En el cuadro de diálogo Nuevo proyecto, en el panel Plantillas, haga clic en Aplicación para Windows.
3. En el cuadro Nombre, escriba MyFirstArray y, a continuación, haga clic en Aceptar.
Se abre un nuevo proyecto de formularios Windows Forms.
4. En el Cuadro de herramientas, arrastre un control Textbox al formulario.
5. En el Cuadro de herramientas, arrastre un control Button al formulario.
6. Haga doble clic en Button para abrir el Editor de código.
7. En el procedimiento de evento Button1_Click, agregue el siguiente código:
VB
Dim players() As String = {"Dan", "Fred", "Bart", "Carlos", _
"Ty", "Juan", "Jay", "Sam", "Pedro"}
Dim i As Integer = CInt(Textbox1.Text)
MsgBox(players(i) & " is on first base.")

Observe que el código anterior utiliza la función CInt para convertir el valor String (TextBox1.Text) en un Integer (i).
Puede obtener más información sobre las conversiones en Información detallada: convertir un tipo de variable en otro.
8. Presione F5 para ejecutar el programa.
9. Escriba un número comprendido entre 0 y 8 en el cuadro de texto y haga clic en el botón. Se muestra el nombre que
corresponde a ese elemento en un cuadro de mensaje.
Pasos siguientes
En esta lección, aprendió a utilizar las matrices para almacenar y recuperar grupos de valores similares.
En la siguiente lección, aprenderá a utilizar operadores aritméticos para crear expresiones.
Siguiente lección: Aritmética: crear expresiones con variables y operadores
Vea también
Tareas
Aritmética: crear expresiones con variables y operadores
Palabras y texto: utilizar variables de cadena para organizar palabras
Conceptos
Información general sobre matrices en Visual Basic
Conceptos del lenguaje Visual Basic

Aritmética: crear expresiones con variables y operadores


En esta lección, aprenderá a crear expresiones para realizar operaciones aritméticas y devolver valores.
Una expresión es un segmento de código que realiza operaciones aritméticas y, a continuación, devuelve un valor. En el
siguiente ejemplo se muestra una expresión de suma simple.
5+4
Cuando se evalúa, la expresión 5 + 4 devuelve el valor 9 y se compone de dos partes: los operandos (5 y 4), que son los
valores en los que se realiza la operación, y el operador (+), que especifica la operación que se va a realizar.
Utilizar valores devueltos por expresiones
Para que una expresión sea útil, se debe realizar una acción con el valor que se devuelve. Lo más común es asignar el valor a
una variable, tal como se muestra a continuación.
VB
Dim anInteger As Integer = 5 + 4

Este ejemplo declara una nueva variable Integer, llamada anInteger y le asigna el valor devuelto por 5 + 4 .
Operadores aritméticos
Las expresiones habitualmente se utilizan para realizar operaciones aritméticas con variables: suma, resta, multiplicación o
división. La tabla siguiente describe los operadores normalmente utilizados para operaciones aritméticas.
Operador Descripción Ejemplo
+ (suma) Devuelve la suma de dos operandos 5+4

- (resta) Devuelve la diferencia de dos operandos 5-4

* (multiplicación) Devuelve el producto de dos operandos 5*4

/ (división) Devuelve el cociente de dos operandos 5/4

El tipo de variable que se utiliza al realizar la operación aritmética puede afectar el resultado. La división de dos números a
menudo da como resultado un valor que no es un número entero. Por ejemplo, cuando se divide 3 por 2, el resultado es 1,5. Si
se asigna el valor devuelto de esa expresión a una variable Integer, se redondeará al número entero más cercano. Al realizar la
división, se debe utilizar una variable Double para almacenar el valor devuelto.
Nota
También se puede convertir una variable de un tipo de datos en otra mediante las funciones de conversión de Visual Basic. P
ara obtener más información, vea Información detallada: convertir un tipo de variable en otro.

Inténtelo
Para sumar números
1. En el menú Archivo, elija Nuevo proyecto.
2. En el cuadro de diálogo Nuevo proyecto, en el panel Plantillas, haga clic en Aplicación para Windows.
3. En el cuadro Nombre, escriba Arithmetic y haga clic en Aceptar.
Se abrirá un nuevo proyecto de formularios Windows Forms.
4. En el Cuadro de herramientas, arrastre dos controles Textbox al formulario.
5. En el Cuadro de herramientas, arrastre un control Button al formulario.
6. Haga doble clic en Button para abrir el Editor de código.
7. En el procedimiento de evento Button1_Click, escriba el siguiente código.
VB
Dim A As Double = Textbox1.Text
Dim B As Double = Textbox2.Text

MsgBox(A + B)
MsgBox(A - B)
MsgBox(A * B)
MsgBox(A / B)

Las primeras dos líneas declaran las variables A y B, que contendrán los valores numéricos utilizados en este programa y
asignarán los valores de los dos controles TextBox (su texto) a las variables A y B.
Las cuatro líneas finales crean expresiones con las dos variables y cada uno de los operadores aritméticos básicos y
muestran los resultados de esas expresiones en un cuadro de mensaje.
8. Presione F5 para ejecutar la aplicación.
9. Escriba un número en cada uno de los cuadros de texto y haga clic en Button1.
Nota
Si escribe algún otro carácter en los cuadros de texto, se producirá un error.

Las expresiones se crean utilizando los dos números que se escriben y cada uno de los cuatro operadores aritméticos
básicos (suma, resta, multiplicación y división). El resultado de cada expresión se muestra en un cuadro de mensaje.
Pasos siguientes
En este tema, aprendió a crear y utilizar expresiones. También aprendió acerca de los operandos y operadores y cómo crear
una expresión. Ahora puede pasar a la lección siguiente, Comparaciones: Utilizar expresiones para comparar valores o
aprender más sobre convertir variables en tipos diferentes en Información detallada: convertir un tipo de variable en otro. Si
elige "Información detallada" terminará y, a continuación, pasará a la lección siguiente.
Vea también
Tareas
Información detallada: convertir un tipo de variable en otro
Conceptos
Operadores aritméticos en Visual Basic
Conceptos del lenguaje Visual Basic

Información detallada: convertir un tipo de variable en otro


Como ha visto, hay variables de diferentes tipos. El tipo determina la clase de datos que puede contener una variable. Una
variable de tipo Integer sólo puede contener datos numéricos sin separadores decimales. Una variable de tipo String sólo
puede contener texto.
¿Qué pasa cuándo desea mostrar un valor Integer en un control TextBox que requiere una variable de tipo String? La
respuesta es que los datos se deben convertir de un tipo a otro. En este tema, estudiará cómo convertir los datos de un tipo en
otro y aprenderá algunas técnicas utilizadas para la conversión de datos, así como algunos de sus problemas habituales.
Convertir variables en texto
Cada variable de Visual Basic se puede convertir en texto utilizando una función especial llamada CStr (que viene de abreviar
Convert to String). Esta función, como el nombre implica, devuelve los datos representados por la variable como de tipo
String. El procedimiento siguiente muestra un ejemplo sencillo de convertir un valor Integer en texto.
¡Inténtelo!
Para convertir una variable en texto
1. En el menú Archivo, haga clic en Nuevo proyecto.
2. En el cuadro de diálogo Nuevo proyecto, en el panel Plantillas, haga clic en Aplicación para Windows.
3. En el cuadro Nombre, escriba Conversion y haga clic en Aceptar.
Se abrirá un nuevo proyecto de formularios Windows Forms.
4. Haga doble clic en el formulario para abrir el Editor de código.
5. En el controlador del evento Form1_Load, escriba el siguiente código.
VB
Dim anInteger As Integer = 54
MsgBox(CStr(anInteger))

Este código declara una variable de tipo entero llamada anInteger, le asigna un valor de 54 y, a continuación, convierte
ese valor en texto y lo muestra en un cuadro de mensaje llamando a la función CStr.
6. Presione F5 para compilar y ejecutar la aplicación. Aparece un cuadro de mensaje que indica 54.
Probemos algo sólo por diversión. En el Editor de código, cambie la línea que indica MsgBox(CStr(anInteger)) para que
indique MsgBox(anInteger) y presione F5 para ejecutarla. ¿Qué pasa? El programa se comporta exactamente como hizo
antes. Visual Basic es lo suficientemente inteligente como para saber que lo que desea realmente es convertir la variable
de tipo Integer en texto para que se muestre en el cuadro de mensaje. Sin embargo, no puede confiar en este
comportamiento para todas las clases: existen muchos tipos de variables que no se pueden convertir automáticamente.
Por consiguiente, es una buena práctica usar siempre la función CStr, aun cuando una variable se convertiría
automáticamente en texto.
Además de la conversión de variables Integer en texto, se puede utilizar la función CStr en cualquier tipo de dato numérico,
como Double o Long. También se puede utilizar para convertir la información de Date y tipos de datos Boolean en texto.
Para obtener más información sobre los tipos de datos, vea Información detallada: tipos de datos.
Conversión entre tipos de datos numéricos
Como aprendió en la lección aritmética, a veces el resultado de una operación aritmética no se puede expresar como un valor
de tipo Integer. Así como Visual Basic tiene una función para convertir los números en texto, también tiene funciones para
convertir las variables de un tipo de datos numéricos en otro. Por ejemplo, puede utilizar la función CDbl (de Convert to
Double) en una operación aritmética para devolver un número fraccionario al trabajar con variables de tipo Integer. El
procedimiento siguiente muestra cómo utilizar la función CDbl al dividir dos enteros.
¡Inténtelo!
Para convertir tipos de datos numéricos
1. En el Editor de código, elimine el código que escribió en el procedimiento anterior y escriba lo siguiente:
VB
Dim A As Integer = 1
Dim B As Integer = 2
MsgBox(CDbl(A / B))

Este código declara dos variables de tipo Integer (A y B), les asigna los valores 1 y 2 y, a continuación, convierte el
resultado de la operación de división (A / B) utilizando la función CDbl y lo muestra en un cuadro de mensaje.
2. Presione F5 para compilar y ejecutar la aplicación. Aparece un cuadro de mensaje que indica 0.5.
Visual Basic también tiene funciones para otros tipos de variables numéricas. Por ejemplo, si agrega dos variables de tipo
Double y desea redondear el resultado al número entero más cercano, utilice la función CInt. Otras funciones de conversión
numéricas son CByte, CDec, CLng y CShort. Para obtener una lista de todas las funciones de conversión de Visual Basic, vea
Funciones de conversión de tipos.
Pasos siguientes
En esta lección, obtuvo información sobre cómo convertir variables numéricas en texto y la conversión entre los diferentes
tipos de estas variables. En la lección siguiente, Comparaciones: Utilizar expresiones para comparar valores, aprenderá a
evaluar expresiones.
Vea también
Tareas
Aritmética: crear expresiones con variables y operadores
Conceptos
Información detallada: tipos de datos
Otros recursos
Conversiones de tipos en Visual Basic
Conceptos del lenguaje Visual Basic

Comparaciones: Utilizar expresiones para comparar valores


En esta lección, obtendrá información sobre cómo utilizar los operadores de comparación para crear expresiones que
comparan valores.
En la última lección, obtuvo información sobre cómo utilizar operadores aritméticos para crear expresiones numéricas y
devolver valores numéricos. Se puede utilizar otro tipo de operador, los operadores de comparación, para comparar valores
numéricos y devolver valores Boolean (True o False).
Los operadores de comparación se utilizan frecuentemente para comparar valores y tomar decisiones basadas en esa
comparación. La toma de decisiones en el programa se tratará exhaustivamente en
Hacer que un programa elija entre dos posibilidades: la instrucción If...Then.
La siguiente tabla resume los operadores de comparación:
Operador Descripción Ejemplos
= (igual) Devuelve True si el número del lado izquierdo es igual al número del lado derecho. 5 = 4 (falso)
4 = 5 (falso)
4 = 4 (verdadero
)

<> (distinto de) Devuelve True si el número de la izquierda no es igual al número de la derecha. 5 <> 4 (True)
4 <> 5 (True)
4 <> 4 (False)

> (mayor que) Devuelve True si el número de la izquierda es mayor que el número de la derecha. 5 > 4 (True)
4 > 5 (False)
4 > 4 (False)

< (menor que) Devuelve True si el número de la izquierda es menor que el número de la derecha. 5 < 4 (False)
4 < 5 (True)
4 < 4 (False)

>= (mayor o igual qu Devuelve True si el número de la izquierda es mayor o igual que el número de la dere 5 >= 4 (True)
e) cha.
4 >= 5 (False)
4 >= 4 (True)

<= (menor o igual qu Devuelve True si el número de la izquierda es menor o igual que el número de la dere 5 <= 4 (False)
e) cha.
4 <= 5 (True)
4 <= 4 (True)
Inténtelo
Para comparar expresiones
1. En el menú Archivo, haga clic en Nuevo proyecto.
2. En el cuadro de diálogo Nuevo proyecto, en el panel Plantillas, haga clic en Aplicación para Windows.
3. En el cuadro Nombre, escriba Comparison y haga clic en Aceptar.
Se abrirá un nuevo proyecto de formularios Windows Forms.
4. En el Cuadro de herramientas, arrastre dos controles Textbox al formulario.
5. En el Cuadro de herramientas, arrastre un control Button al formulario.
6. Haga doble clic en Button para abrir el Editor de código.
7. En el controlador de eventos Button1_Click, escriba el siguiente código:
VB
Dim A As Double = CDbl(Textbox1.Text)
Dim B As Double = CDbl(Textbox2.Text)
MsgBox(A > B)
MsgBox(A < B)
MsgBox(A = B)

Las dos primeras líneas declaran las variables A y B, que contendrán los valores numéricos usados en este programa;
utilizan la instrucción CDbl para convertir el texto de Textbox1 y Textbox2 en valores numéricos. Finalmente, las últimas
tres líneas crean expresiones que permiten comparar las dos variables mediante tres operadores de comparación básicos
y muestran los resultados de esas expresiones en tres cuadros de mensaje.
8. Presione F5 para ejecutar la aplicación.
9. Escriba un número en cada uno de los cuadros de texto y haga clic en Button1.
El primer cuadro de mensaje mostrará True si A (el número que escribió en el primer cuadro de texto) es mayor que B (el
número que escribió en el segundo cuadro de texto); de lo contrario, mostrará False. El segundo cuadro de mensaje
mostrará True si A es menor que B, y el tercer cuadro de mensaje mostrará True si ambos números son iguales.
Pruebe a escribir diferentes números en los cuadros de texto para ver cómo cambian los resultados.
Pasos siguientes
En esta lección obtuvo información sobre cómo utilizar los operadores de comparación para comparar valores numéricos. En
la siguiente lección, aprenderá a crear un procedimiento, código que realiza una acción, y a llamarlo.
Siguiente lección: Hacer que el equipo haga algo: escribir el primer procedimiento
Vea también
Tareas
Aritmética: crear expresiones con variables y operadores
Información detallada: convertir un tipo de variable en otro
Hacer que un programa elija entre dos posibilidades: la instrucción If...Then
Conceptos
Operadores de comparación en Visual Basic
Conceptos del lenguaje Visual Basic

Hacer que el equipo haga algo: escribir el primer


procedimiento
En esta lección, aprenderá a crear un procedimiento, un bloque de código independiente que se puede ejecutar desde otros
bloques de código, y a crear parámetros para los procedimientos.
Un procedimiento es simplemente un fragmento de código que indica al programa que realice una acción. Aunque es posible
que no lo haya notado, ya se han utilizado procedimientos en las lecciones anteriores. Por ejemplo, la función MsgBox tiene
un procedimiento integrado que realiza la acción de mostrar un cuadro de diálogo.
Mientras Visual Basic tiene muchos procedimientos integrados para realizar las acciones comunes, siempre habrá casos en que
se desea que el programa realice una acción que un procedimiento integrado no puede controlar. Por ejemplo, la función
MsgBox no puede mostrar un cuadro de diálogo con una imagen. Debe escribir un procedimiento para realizar esta tarea.
¿Qué es un procedimiento?
Un procedimiento es un bloque de código independiente que se puede ejecutar desde otros bloques de código. En general,
cada procedimiento contiene el código necesario para realizar una tarea. Por ejemplo, puede tener un procedimiento llamado
PlaySound que contiene el código necesario para reproducir un archivo de onda. Aunque puede escribir código que
reproduzca un sonido cada vez que el programa deba realizar un ruido, tiene más sentido crear un procedimiento único al que
se pueda llamar en cualquier parte del programa.
Un procedimiento se ejecuta llamándolo en el código. Por ejemplo, para ejecutar el procedimiento PlaySound, simplemente
se agrega una línea de código al programa con el nombre del procedimiento, como se muestra a continuación.
PlaySound

Es todo lo que tiene que hacer. Cuando el programa llegue a esa línea, irá al procedimiento PlaySound y ejecutará el código
contenido allí. A continuación, el programa regresa a la siguiente línea que viene después de la llamada a PlaySound.
Puede llamar a tantos procedimientos como desee. Los procedimientos se ejecutan en el orden de llamada. Por ejemplo,
podría tener también un procedimiento llamado DisplayResults; para ejecutarlo después de ejecutar el procedimiento
PlaySounds, llame a los procedimientos como se muestra a continuación.
PlaySounds
DisplayResults

Funciones y Subs
Existen dos tipos de procedimientos: funciones y subrutinas (llamadas a veces sub). Una función devuelve un valor al
procedimiento que la llamó, mientras que una subrutina simplemente ejecuta código. Se llama a una subrutina cuando una
línea de código, que contiene el nombre de ésta, se agrega al programa como en el siguiente ejemplo.
DisplayResults

Las funciones son diferentes, porque las funciones no sólo ejecutan códigos, también devuelven un valor. Por ejemplo, imagine
una función llamada GetDayOfWeek que devuelve un Integer que indica el día de la semana. Se llama a esta función primero
mediante la declaración de una variable para almacenar el valor devuelto y luego se asigna el valor devuelto a la variable para
un uso posterior, tal como se muestra a continuación.
Dim Today As Integer
Today = GetDayOfWeek

En este ejemplo, el valor devuelto por la función se copia a la variable denominada Today y se almacena para un uso posterior.
Escribir procedimientos
Los procedimientos se escriben colocando primero una declaración de procedimiento. Una declaración de procedimiento
realiza varias acciones: indica si el procedimiento es una función o una subrutina, denomina el procedimiento y detalla todos
los parámetros que puede tener (los parámetros se analizarán en detalle más adelante en esta lección). A continuación, se
ofrece un ejemplo de una declaración de procedimiento sencilla.
VB
Sub MyFirstSub()
End Sub
La palabra clave Sub indica al programa que este procedimiento es una subrutina y no devolverá un valor. El nombre de la
subrutina (MyFirstSub) viene a continuación y el paréntesis vacío indica que no hay parámetros para este procedimiento.
Finalmente, la palabra clave End Sub indica el fin de la subrutina. Todos los códigos que tiene que ejecutar esta subrutina van
entre estas dos líneas.
Declarar funciones es similar, pero, además, se debe especificar el tipo de valor devuelto (como por ejemplo,Integer, String,
etc.). Por ejemplo, una función que devolvió un valor Integer puede ser similar a la siguiente.
VB
Function MyFirstFunction() As Integer
End Function

Las palabras clave As Integer indican que la función devolverá un valor Integer . Para devolver un valor desde una función,
utilice la palabra clave Return, como se muestra en el ejemplo siguiente.
VB
Function GetTheNumberOne() As Integer
Return 1
End Function

Este procedimiento devolverá el número 1.


Inténtelo
Para crear procedimientos
1. En el menú Archivo, seleccione Nuevo proyecto.
2. En el cuadro de diálogo Nuevo proyecto, en el panel Plantillas, haga clic en Aplicación para Windows.
3. En el cuadro Nombre, escriba MyFirstProcedure y, a continuación, haga clic en Aceptar.
Se abre un nuevo proyecto de formularios Windows Forms.
4. Haga doble clic en el formulario para abrir el Editor de código.
5. En el Editor de código, busque la línea que contiene End Class. Éste es el fin de la sección de código que compone el
formulario. Inmediatamente antes de esta línea, agregue el siguiente procedimiento:
VB
Function GetTime() As String
Return CStr(Now)
End Function

Esta función utiliza el procedimiento Now integrado para obtener la hora actual, luego utiliza la función CStr para
convertir el valor devuelto por Now en una String legible. Finalmente, ese valor String se devuelve como el resultado
de la función.
6. Sobre la función que agregó en el paso anterior, agregue el siguiente Sub.
VB
Sub DisplayTime()
MsgBox(GetTime)
End Sub

Esta subrutina llama a la función GetTime y muestra el resultado que devolvió en un cuadro de mensaje.
7. Finalmente, agregue una línea al controlador de eventos Form1_Load que llama a la subrutina DisplayTime, como se
muestra en el ejemplo.
VB
DisplayTime()

8. Presione F5 para ejecutar el programa.


Cuando el programa se inicia, se ejecuta el procedimiento de evento Form1_Load . Este procedimiento llama a la
subrutina DisplayTime, de manera que la ejecución del programa va al procedimiento de subrutina DisplayTime. Esa
subrutina a su vez llama a la función GetTime, por lo que la ejecución del programa va a la función GetTime. Esta
función devuelve una String que representa el tiempo para el procedimiento de subrutina DisplayTime, el que muestra
esa cadena en un cuadro de mensaje. Después de que la subrutina termina de ejecutarse, el programa continúa
normalmente y muestra el formulario.
Parámetros en funciones y subrutinas
A veces se deberá proporcionar información adicional a los procedimientos. Por ejemplo, en el procedimiento PlaySound, se
desea reproducir uno de varios sonidos diferentes. La información acerca de qué sonido reproducir se puede proporcionar
utilizando los parámetros.
Los parámetros se parecen mucho a las variables. Tienen un tipo y un nombre y almacenan información al igual que las
variables. Se pueden utilizar como variables en un procedimiento. Las dos diferencias principales entre los parámetros y las
variables son:
Los parámetros se declaran en la declaración de procedimiento, no en líneas individuales de código.
Sólo se pueden utilizar los parámetros en el procedimiento en el que se declaran.
Los parámetros se declaran en la declaración de procedimiento, en los paréntesis que siguen al nombre del procedimiento. La
palabra clave As se utiliza para declarar el tipo y la palabra clave ByVal precede generalmente a cada parámetro. Visual Basic
agregará automáticamente esta palabra clave si no se agrega, ésta tiene una función bastante avanzada que va más allá de los
temas tratados en esta lección.
A continuación, se muestra un ejemplo de una subrutina con parámetros.
VB
Sub PlaySound(ByVal SoundFile As String, ByVal Volume As Integer)
My.Computer.Audio.Play(SoundFile, Volume)
End Sub

Se llamará a la subrutina con los valores para los parámetros como se muestra a continuación.
VB
PlaySound("Startup.wav", 1)

También se pueden declarar los parámetros para las funciones exactamente de la misma forma que lo haría con las subrutinas.
Inténtelo
Para crear una función con parámetros
1. En el menú Archivo, seleccione Nuevo proyecto.
2. En el cuadro de diálogo Nuevo proyecto, en el panel Plantillas, haga clic en Aplicación para Windows.
3. En el cuadro Nombre, escriba parameters y haga clic en Aceptar.
Se abre un nuevo proyecto de formularios Windows Forms.
4. En el Cuadro de herramientas, arrastre dos controles Textbox al formulario.
5. En el Cuadro de herramientas, arrastre un control Button al formulario.
6. Haga doble clic en Button para abrir el Editor de código.
7. Inmediatamente después de la línea End Sub del controlador de eventos Button1_Click, agregue el siguiente
procedimiento:
VB
Function AddTwoNumbers(ByVal N1 As Integer, ByVal N2 As Integer) _
As Integer
Return N1 + N2
End Function

8. En el procedimiento Button1_Click, agregue el código siguiente:


VB
Dim aNumber As Integer = CInt(Textbox1.Text)
Dim bNumber As Integer = CInt(Textbox2.Text)
MsgBox(AddTwoNumbers(aNumber, bNumber))

Este código declara dos enteros y convierte el texto de los dos cuadros de texto en valores enteros. Luego pasa dichos
valores a la función AddTwoNumbers y muestra el valor devuelto en un cuadro de mensaje.
9. Presione F5 para ejecutar el programa.
10. Escriba un valor numérico en cada cuadro de texto y haga clic en el botón. Se sumarán los dos números y el resultado se
mostrará en un cuadro de mensaje.
Pasos siguientes
En esta lección, aprendió la diferencia entre funciones y subrutinas, y cómo crear cada uno de estos dos procedimientos.
También aprendió a llamar a los procedimientos y a crear procedimientos con parámetros.
En la siguiente lección, aprenderá a utilizar la instrucción For...Next para repetir las acciones.
Siguiente lección: Hacer que un programa repita acciones: establecer bucles For...Next
Vea también
Tareas
Comparaciones: Utilizar expresiones para comparar valores
Conceptos
Procedimientos en Visual Basic
Conceptos del lenguaje Visual Basic

Hacer que un programa repita acciones: establecer bucles


For...Next
En esta lección, aprenderá a utilizar la instrucción For...Next para repetir las acciones en el programa y para contar cuántas
veces se han realizado estas acciones.
Cuando escribe un programa, debe repetir las acciones con frecuencia. Por ejemplo, suponga que está escribiendo un método
que muestra una serie de números en pantalla. Deseará repetir la línea de código que muestra el número las veces que sea
necesario.
El bucle For...Next le permite especificar un número y repetir un código contenido dentro de ese bucle para el número
específico de veces. El siguiente ejemplo muestra cómo aparece un bucle For...Next en un código.
VB
Dim i As Integer = 0
For i = 1 To 10
DisplayNumber(i)
Next

El bucle For...Next comienza con una variable de contador, i. Ésta es una variable que utiliza el bucle para contar la cantidad
de veces que se ha ejecutado. La siguiente línea (For i = 1 to 10) le dice al programa cuántas veces se debe repetir el bucle y
los valores i que va a tener.
Cuando el código entra en el bucle For...Next, se inicia con i que contiene el primer valor, en este caso 1. El programa ejecuta
las líneas de código entre la línea For y la línea Next, en este caso llamando al método DisplayNumber con un parámetro de i
(en este caso también 1).
Cuando se alcanza la línea Next, se agrega 1 a i y la ejecución de programa regresa nuevamente a la línea For. Esto se repite
hasta que el valor de i es mayor que el segundo número en la línea For, en este caso 10. Cuando esto sucede, el programa
continúa con cualquier código después de la línea Next.
Inténtelo
Para utilizar la instrucción For...Next
1. En el menú Archivo, seleccione Nuevo proyecto.
2. En el cuadro de diálogo Nuevo proyecto, en el panel Plantillas, haga clic en Aplicación para Windows.
3. En el cuadro Nombre, escriba ForNext y haga clic en Aceptar.
Se abre un nuevo proyecto de formularios Windows Forms.
4. En el Cuadro de herramientas, arrastre un control TextBox y un control Button al formulario.
5. Haga doble clic en Button para abrir el Editor de código.
6. En el controlador de eventos Button1_Click, escriba el siguiente código:
VB
Dim i As Integer = 0
Dim NumberOfRepetitions As Integer = CInt(Textbox1.Text)
For i = 1 To NumberOfRepetitions
MsgBox("This line has been repeated " & i & " times")
Next

7. Presione F5 para ejecutar el programa.


8. En el cuadro de texto, escriba un número y haga clic en el botón.
Aparece un Cuadro de mensaje las veces indicadas en el cuadro de texto.
Pasos siguientes
En este tema, ha aprendido a utilizar el bucle For...Next para repetir un código un número específico de veces. En este punto,
puede continuar con la siguiente lección en las series,
Hacer que un programa elija entre dos posibilidades: la instrucción If...Then o puede explorar otro tipo de bucle en
Información detallada: utilizar Do...While y Do...Until para repetir hasta obtener una condición.
Vea también
Tareas
Hacer que el equipo haga algo: escribir el primer procedimiento
Referencia
Instrucción For...Next (Visual Basic)
Conceptos
Estructuras de decisión
Conceptos del lenguaje Visual Basic

Información detallada: utilizar Do...While y Do...Until para


repetir hasta obtener una condición
En esta lección, aprenderá a utilizar las instrucciones Do...While y Do...Until para repetir el código basándose en algunas
condiciones.
En la lección anterior, aprendió a utilizar la instrucción For...Next para recorrer un bloque de código un número específico de
veces, pero ¿qué ocurre si el número de veces que el código se debe repetir es diferente para algunas condiciones? Las
instrucciones Do...While y Do...Until permiten repetir un bloque de código mientras cierta condición sea True o hasta que
cierta condición sea True.
Por ejemplo, si se disponía de un programa para agregar una serie de números, pero nunca deseó que la suma de los números
fuera mayor que 100. Se podría utilizar la instrucción Do...While para llevar a cabo la suma de la siguiente forma:
VB
Dim sum As Integer = 0
Do While sum < 100
sum = sum + 10
Loop

En el código anterior, la línea Do While evalúa la variable sum para ver si es menor que 100; si lo es, se ejecuta la siguiente línea
de código; si no lo es, se desplaza a la línea siguiente del código a continuación de Loop. La palabra clave Loop le dice al código
que regrese a la línea DoWhile y evalúe el nuevo valor de sum.
Inténtelo
Para utilizar una instrucción Do...While
1. En el menú Archivo, seleccione Nuevo proyecto.
2. En el cuadro de diálogo Nuevo proyecto, en el panel Plantillas, haga clic en Aplicación para Windows.
3. En el cuadro Nombre, escriba DoWhile y haga clic en Aceptar.
Se abre un nuevo proyecto de formularios Windows Forms.
4. En el Cuadro de herramientas, arrastre un control TextBox y un control Button al formulario.
5. Haga doble clic en Button para abrir el Editor de código.
6. En el controlador de eventos Button1_Click, escriba el siguiente código:
VB
Dim sum As Integer = 0
Dim counter As Integer = 0
Do While sum < 100
sum = sum + CInt(Textbox1.Text)
counter = counter + 1
Loop
MsgBox("The loop has run " & CStr(counter) & " times!")

7. Presione F5 para ejecutar el programa.


8. En el cuadro de texto, escriba un número y haga clic en el botón.
Aparece un cuadro de mensaje que muestra el número de veces que se agregó a sí mismo el número antes de llegar a
100.
9. En el menú Depurar, elija Detener depuración para finalizar el programa. Mantenga abierto este proyecto. Más
adelante se agregarán elementos.
Instrucción Do...Until
La instrucción Do...While repite un bucle mientras una condición permanece True, pero a veces es posible que desee que el
código se repita a sí mismo hasta que una condición se convierta True. Puede utilizar la instrucción Do...Until del siguiente
modo.
VB
Dim sum As Integer = 0
Do Until sum >= 100
sum = sum + 10
Loop

Este código es similar al código para la instrucción Do...While, sólo que esta vez, el código evalúa la variable sum para ver si es
igual a o mayor que 100.
Inténtelo
Para utilizar una instrucción Do...Until
1. Agregue el siguiente código debajo de la línea MsgBox.
VB
Dim sum2 As Integer = 0
Dim counter2 As Integer = 0
Do Until sum2 >= 100
sum2 = sum2 + CInt(Textbox1.Text)
counter2 = counter2 + 1
Loop
MsgBox("The loop has run " & CStr(counter2) & " times!")

2. Presione F5 para ejecutar el programa.


3. En el cuadro de texto, escriba un número y haga clic en el botón.
Aparece un segundo cuadro de mensaje que muestra el número de veces que se agregó el número a sí mismo antes de
igualar 100 o más.
Pasos siguientes
En este tema, aprendió a utilizar los bucles Do...While y Do...Until para repetir el código de forma condicional. En este punto,
puede continuar con la siguiente lección, Hacer que un programa elija entre dos posibilidades: la instrucción If...Then.
Vea también
Tareas
Hacer que un programa repita acciones: establecer bucles For...Next
Referencia
Instrucción Do...Loop (Visual Basic)
Conceptos del lenguaje Visual Basic

Hacer que un programa elija entre dos posibilidades: la


instrucción If...Then
En esta lección, aprenderá a utilizar la instrucción If...Then para ejecutar el código basado en condiciones.
Los programas deben realizar diferentes acciones en respuesta a distintas condiciones. Por ejemplo, quizá desee que el
programa compruebe qué día de la semana es y haga algo diferente dependiendo del día. La instrucción If...Then permite
evaluar una condición y ejecutar las diferentes secciones de código basándose en los resultados de esa condición.
El siguiente ejemplo muestra cómo funciona la instrucción If...Then.
VB
If My.Computer.Clock.LocalTime.DayOfWeek = DayOfWeek.Monday Then
MsgBox("Today is Monday!")
End If

Cuando se ejecuta este código, se evalúa la condición (la parte entre If y Then). Si la condición es true, se ejecuta la siguiente
línea de código y se muestra un cuadro de mensaje; si es false, el código pasa a la línea End If. En otras palabras, el código
estipula "Si hoy es lunes, muestre el mensaje".
Inténtelo
Para utilizar la instrucción If...Then
1. En el menú Archivo, seleccione Nuevo proyecto.
2. En el cuadro de diálogo Nuevo proyecto, en el panel Plantillas, haga clic en Aplicación para Windows.
3. En el cuadro Nombre, escriba IfThen y haga clic en Aceptar.
Se abre un nuevo proyecto de formularios Windows Forms.
4. Haga doble clic en el formulario para abrir el Editor de código.
5. En el controlador de eventos Form1_Load, escriba el siguiente código.
VB
If My.Computer.Clock.LocalTime.DayOfWeek = DayOfWeek.Saturday Or _
My.Computer.Clock.LocalTime.DayOfWeek = DayOfWeek.Sunday Then
MsgBox("Happy Weekend!")
End If

6. Presione F5 para ejecutar el programa.


Si hoy es sábado o domingo, aparecerá un cuadro de mensaje indicándole Happy Weekend!. De lo contrario, no aparecerá
ningún cuadro de mensaje.
7. En el menú Depurar, seleccione Detener depuración para finalizar el programa. Mantenga abierto este proyecto. Se
utilizará en el siguiente procedimiento, "Para utilizar la cláusula Else".
Es posible que haya observado en el ejemplo anterior que la instrucción If...Then utilizó el operador Or para evaluar varias
condiciones ("Si es sábado Or si es domingo"). Puede utilizar los operadores Or y And para evaluar tantas condiciones como
desee en una instrucción If...Then única.
La cláusula Else
Ha visto cómo utilizar la instrucción If...Then para ejecutar el código si una condición es true, pero ¿qué pasa si desea ejecutar
un código si una condición es true, pero otro si es false? En este caso, puede utilizar la cláusula Else. La cláusula Else le permite
especificar un bloque de códigos que se ejecutará si la condición es false. El siguiente ejemplo muestra cómo funciona la
cláusula Else.
VB
If My.Computer.Clock.LocalTime.DayOfWeek = DayOfWeek.Friday Then
MsgBox("Today is Friday!")
Else
MsgBox("It isn't Friday yet!")
End If

En este ejemplo, se evalúa la expresión; si es true, se ejecuta la siguiente línea de código y se muestra el primer cuadro de
mensaje. Si es false, el código se desplaza a la cláusula Else y se ejecuta la línea Else siguiente, que muestra el segundo cuadro
de mensaje.
Inténtelo
Para utilizar la cláusula Else
1. Cambie el código en la instrucción If...Then de la siguiente forma.
VB
If My.Computer.Clock.LocalTime.DayOfWeek = DayOfWeek.Saturday Or _
My.Computer.Clock.LocalTime.DayOfWeek = DayOfWeek.Sunday Then
MsgBox("Happy Weekend!")
Else
MsgBox("Happy Weekday! Don't work too hard!")
End If

2. Presione F5 para ejecutar el programa. El programa mostrará ahora un cuadro de mensaje que indica si es un fin de
semana o un día de la semana, con contenido adecuado.
Nota
Para cambiar el día de la semana haga doble clic en la hora en la barra de tareas de Windows, si desea probar la ejecuci
ón de los dos bloques de código. (La barra de tareas es la que contiene el botón Inicio de Windows; de manera predet
erminada, se encuentra en la parte inferior del escritorio y la hora se muestra en la esquina derecha).

Pasos siguientes
En esta lección, aprendió a utilizar la instrucción If...Then junto con la cláusula Else para hacer que el programa ejecute
selectivamente los bloques de códigos basándose en las condiciones en el tiempo de ejecución. Para la siguiente lección, puede
elegir entre examinar cómo seleccionar el código para ejecución y leer
Información detallada: utilizar Select Case para decidir entre varias opciones o continuar con la siguiente lección,
Qué hacer cuando algo sale mal: control de errores.
Vea también
Tareas
Hacer que un programa repita acciones: establecer bucles For...Next
Comparaciones: Utilizar expresiones para comparar valores
Referencia
Instrucción If...Then...Else (Visual Basic)
Conceptos del lenguaje Visual Basic

Información detallada: utilizar Select Case para decidir entre


varias opciones
En esta lección, aprenderá a utilizar la instrucción Select Case para ejecutar código basado en múltiples condiciones.
En la lección anterior, aprendió a utilizar las instrucciones If...Then para ejecutar diferentes bloques de código según las
condiciones. Aunque es posible evaluar más de dos condiciones en una instrucción If...Then mediante la palabra clave ElseIf,
la instrucción Select Case proporciona una manera mucho mejor de evaluar varias condiciones.
La instrucción Select Case permite utilizar tantas condiciones (o casos) como sea necesario, y conviene escribir el código para
situaciones en las que hay muchas opciones. Por ejemplo, suponga que el programa utilizó una variable String para
almacenar una opción de color y se necesitaba obtener el valor de color. El código para la instrucción Select Case podría ser
similar al siguiente:
VB
Select Case Color
Case "red"
MsgBox("You selected red")
Case "blue"
MsgBox("You selected blue")
Case "green"
MsgBox("You selected green")
End Select

Cuando se ejecuta este código, la línea Select Case determina el valor (Color) de la expresión. Suponga que Color es una
variable String y que esta variable es un parámetro para un método que contiene la instrucción Select Case. El valor de Color
se compara con el valor para la primera instrucción Case. Si el valor coincide, se ejecuta la siguiente línea de código y el código
pasa a la línea End Select; si el valor no coincide, se evalúa la siguiente línea Case.
La instrucción Case adopta muchas formas distintas; en el ejemplo anterior es String. Pero puede ser cualquier tipo de datos o
expresión.
Puede evaluar un intervalo de números utilizando la palabra clave To, como sigue:
VB
Case 1 To 10

En este ejemplo, cualquier número entre 1 y 10 será una coincidencia.


También puede evaluar varios valores en una sola instrucción Case separándolos con comas de la siguiente forma:
VB
Case "red", "white", "blue"

En este ejemplo, cualquiera de los tres valores producirá una coincidencia.


También puede utilizar operadores de comparación y la palabra clave Is para evaluar los valores de la siguiente manera.
VB
Case Is > 9

En este ejemplo, cualquier número mayor que 9 provocará una coincidencia.


Case Else
El ejemplo anterior funciona cuando conoce todas las condiciones posibles, pero ¿qué sucede si hay una condición con la que
no contaba? Por ejemplo, si el valor de Color es yellow, el código simplemente evaluará los tres casos sin encontrar una
coincidencia y no se mostrará ningún cuadro de mensaje.
La instrucción Case Else se puede utilizar para ejecutar el código cuando no se encuentra ninguna coincidencia, como en el
siguiente ejemplo.
VB
Select Case Color
Case "red"
MsgBox("You selected red")
Case "blue"
MsgBox("You selected blue")
Case "green"
MsgBox("You selected green")
Case Else
MsgBox("Please choose red, blue, or green")
End Select

En el código anterior, si el valor de Color es yellow el código lo comparará con las primeras tres líneas Case sin encontrar una
coincidencia. Cuando se llega a la línea Case Else, se ejecuta la siguiente línea de código antes de pasar a End Select.
Para utilizar la instrucción Select Case
1. En el menú Archivo, seleccione Nuevo proyecto.
2. En el cuadro de diálogo Nuevo proyecto, en el panel Plantillas, haga clic en Aplicación para Windows.
3. En el cuadro Nombre, escriba SelectCase y haga clic en Aceptar.
Se abre un nuevo proyecto de formularios Windows Forms.
4. En el Cuadro de herramientas, arrastre un control TextBox y un control Button al formulario.
5. Haga doble clic en el botón para abrir el Editor de código.
6. En el controlador de eventos Button1_Click, escriba el siguiente código.
VB
Dim Number As Integer = CInt(Textbox1.Text)
Select Case Number
Case 1
MsgBox("Less than 2")
Case 2 To 5
MsgBox("Between 2 and 5")
Case 6, 7, 8
MsgBox("Between 6 and 8")
Case 9 To 10
MsgBox("Greater than 8")
Case Else
MsgBox("Not between 1 and 10")
End Select

7. Presione F5 para ejecutar el programa.


8. En el cuadro de texto, escriba un número y haga clic en el botón.
Aparecerá un cuadro de mensaje que muestra el mensaje de la instrucción Case que coincide con el número que ha
especificado.
Pasos siguientes
En este tema, aprendió a utilizar la instrucción Select Case para elegir entre varias condiciones. Ahora puede continuar con la
siguiente lección, "Qué hacer cuando algo sale mal: control de errores".
Siguiente lección: Qué hacer cuando algo sale mal: control de errores
Vea también
Tareas
Qué hacer cuando algo sale mal: control de errores
Hacer que un programa elija entre dos posibilidades: la instrucción If...Then
Referencia
Instrucción Select...Case (Visual Basic)
Conceptos del lenguaje Visual Basic

Qué hacer cuando algo sale mal: control de errores


En esta lección, aprenderá a crear código de control de errores básico para los programas.
Incluso los programas mejor diseñados a veces encuentran errores. Algunos errores son defectos en el código que se pueden
encontrar y corregir. Otros errores son una consecuencia natural del programa; por ejemplo, el programa puede intentar abrir
un archivo que ya está en uso. En casos así, los errores se pueden predecir, pero no evitar. Como desarrollador, es su trabajo
predecir estos errores y ayudar a que el programa los solucione.
Errores en tiempo de ejecución
Un error que se produce mientras un programa se está ejecutando se llama error en tiempo de ejecución. Los errores en
tiempo de ejecución se producen cuando un programa trata de hacer algo para lo cual no fue diseñado. Por ejemplo, si el
programa intenta realizar una operación no válida, como convertir una cadena no numérica en un valor numérico, se
producirá un error en tiempo de ejecución.
Cuando se produce un error en tiempo de ejecución, el programa produce una excepción, que soluciona los errores buscando
código dentro del programa para tratar el error. Si no se encuentra tal código, se detiene el programa y se tiene que reiniciar.
Dado que esto puede conducir a la pérdida de datos, es prudente crear el código de control de errores dondequiera que se
tenga previsto que se produzcan errores.
El bloque Try...Catch...Finally.
Se puede utilizar el bloque Try...Catch...Finally para controlar errores en tiempo de ejecución en el código. Puede utilizar Try
para un segmento de código; si ese código produce una excepción, salta al bloque Catch y se ejecuta el código del bloque
Catch. Después de que ese código ha finalizado, se ejecuta cualquier código en el bloque Finally. La instrucción End Try cierra
el bloque Try...Catch...Finally completo. En el ejemplo siguiente se ilustra cómo se utiliza cada bloque.
VB
Try
' Code here attempts to do something.
Catch
' If an error occurs, code here will be run.
Finally
' Code in this block will always be run.
End Try

Primero, se ejecuta el código del bloque Try. Si se ejecuta sin error, el programa omite el bloque Catch y ejecuta el código del
bloque Finally. Si se produce un error en el bloque Try, la ejecución salta inmediatamente al bloque Catch y se ejecuta el
código que se encuentra allí; luego se ejecuta el código del bloque Finally.
Inténtelo
Para utilizar el bloque Try...Catch
1. En el menú Archivo, seleccione Nuevo proyecto.
2. En el cuadro de diálogo Nuevo proyecto, en el panel Plantillas, haga clic en Aplicación para Windows.
3. En el cuadro Nombre, escriba TryCatch y haga clic en Aceptar.
Se abre un nuevo proyecto de formularios Windows Forms.
4. En el Cuadro de herramientas, arrastre un control TextBox y un control Button al formulario.
5. Haga doble clic en Button para abrir el Editor de código.
6. En el controlador de eventos Button1_Click, escriba el siguiente código:
VB
Try
Dim aNumber As Double = CDbl(Textbox1.Text)
MsgBox("You entered the number " & aNumber)
Catch
MsgBox("Please enter a number.")
Finally
MsgBox("Why not try it again?")
End Try

7. Presione F5 para ejecutar el programa.


8. En el cuadro de texto, escriba un valor numérico y haga clic en el botón. Aparece un cuadro de mensaje que muestra el
número que ha escrito, seguido por una invitación para volver a intentarlo.
9. A continuación, escriba un valor no numérico en el cuadro de texto, como una palabra y haga clic en el botón. Esta vez,
cuando el programa intente convertir el texto del cuadro de texto en un número, no podrá hacerlo y se producirá un
error. En lugar de finalizar el código en el bloque Try, se ejecuta el bloque Catch y aparece un cuadro de mensaje
solicitando que se escriba un número. Se ejecuta el bloque Finally y se le invita a intentarlo de nuevo.
Pasos siguientes
En esta lección, aprendió a utilizar los bloques Try...Catch...Finally para crear una estructura básica de control de errores. Esta
lección finaliza la introducción al lenguaje Visual Basic. En la siguiente serie de lecciones, aprenderá a crear la interfaz de
usuario para los programas.
Próxima lección: Crear la apariencia visual de un programa: introducción a los formularios Windows Forms
Vea también
Tareas
Hacer que un programa elija entre dos posibilidades: la instrucción If...Then
Conozca sus errores: tres tipos de errores de programación
Referencia
Instrucción Try...Catch...Finally (Visual Basic)
Otros recursos
Control estructurado de excepciones en Visual Basic
Conceptos del lenguaje Visual Basic

Crear la apariencia visual de un programa: introducción a los


formularios Windows Forms
La interfaz de usuario es la parte del programa que ven los usuarios cuando ejecutan el programa. Una interfaz de usuario
suele estar formada por una ventana o formulario principal y varios controles, como botones, campos para la introducción de
texto, etc. Los programas de Visual Basic que se ejecutan en el equipo se denominan Aplicaciones de Windows Forms y la
interfaz de usuario se crea mediante los controles de formularios Windows Forms.
Las lecciones de esta sección le mostrarán cómo crear una interfaz de usuario utilizando algunos de los controles de
formularios Windows Forms más comunes.
En esta sección
Comunicarse con el usuario del programa: interfaz de usuario
Interactuar con el usuario: utilizar botones
Mostrar y recibir texto: utilizar etiquetas y cuadros de texto
Hacer que el programa reaccione ante el usuario: crear un controlador de eventos
Obtener opciones seleccionadas por el usuario: utilizar casillas de verificación y botones de opción
Cómo ilustrar: mostrar imágenes
Proporcionar opciones al usuario: crear menús en tiempo de diseño
A tiempo: utilizar controles Timer para realizar acciones regulares
Secciones relacionadas
Información detallada: compartir un controlador de eventos
Información detallada: utilizar varios grupos de botones de opción
Información detallada: más información acerca de los menús
Paseo con guía por Visual Basic
¿Qué salió mal? Encontrar y corregir errores mediante depuración
Introducción al lenguaje de programación Visual Basic
Conceptos del lenguaje Visual Basic

Comunicarse con el usuario del programa: interfaz de usuario


En esta lección, aprenderá lo que es una interfaz de usuario (UI), qué son los controles y cómo agregar controles a una interfaz
de usuario.
En los primeros días de los equipos personales, los usuarios interactuaban con programas principalmente a través de una línea
de comandos. Se iniciaba un programa y después se hacía una pausa para recibir los datos proporcionados por el usuario. La
mayoría de los programas utilizados hoy, sin embargo, se ejecutan en una o varias ventanas que permiten que el usuario se
comunique, o relacione, con el programa escribiendo, haciendo clic en los botones, eligiendo elementos en los menús
preestablecidos y así sucesivamente. En estas lecciones y las subsiguientes, aprenderá a generar interfaces de usuarios propias
basadas en Windows.
Utilizar formularios
Los formularios son las unidades de creación básicas para la interfaz de usuario. Cada formulario del programa representa una
ventana que se aparece a los usuarios. Al trabajar en el IDE (entorno de desarrollo integrado) de Visual Basic, un formulario es
el diseñador que se utiliza para diseñar la interfaz de usuario, lo que sería similar a utilizar Windows Paint para dibujar una
imagen.
Los controles se utilizan en el diseñador para crear la apariencia de la interfaz de usuario. Un control es un objeto que tiene un
aspecto y comportamiento predefinidos. Por ejemplo, un control Button tiene el aspecto y el comportamiento de un botón de
comando: cuando un usuario hace clic en él, cambia para mostrarlo.
Cada control de Visual Basic tiene una finalidad. Por ejemplo, los controles TextBox se utilizan para introducir texto, mientras
que los controles PictureBox se utilizan para mostrar imágenes. Hay más de cincuenta controles diferentes incluidos en Visual
Basic; también se pueden crear controles propios conocidos como controles de usuario. Obtendrá más información sobre cada
tipo de control en lecciones posteriores.
Al diseñar la interfaz de usuario, se arrastran los controles desde el Cuadro de herramientas, se colocan en un formulario,
luego se ubican y se cambian de tamaño para crear el aspecto deseado. Puede cambiar el aspecto aún más estableciendo
propiedades de formularios y controles en la ventana Propiedades. Por ejemplo, los formularios y la mayoría de los controles
tienen una propiedad BackColor que se utiliza para establecer su color de fondo.
Las propiedades también se utilizan para definir el comportamiento de un formulario o control. Por ejemplo, la propiedad
ShowInTaskbar de un formulario determina si el formulario aparecerá en la barra de tareas de Windows cuando se esté
ejecutando el programa. Mediante el uso de propiedades, puede personalizar la apariencia y el comportamiento de la interfaz
de usuario.
Inténtelo
Para cambiar las propiedades de un formulario
1. En el menú Archivo, seleccione Nuevo proyecto.
2. En el cuadro de diálogo Nuevo proyecto, en el panel Plantillas, haga clic en Aplicación para Windows.
3. En el cuadro Nombre, escriba FirstForm y haga clic en Aceptar.
Se crea un nuevo proyecto de formularios Windows Forms. Aparece un nuevo formulario en la ventana principal y sus
propiedades son visibles en la ventana Propiedades, en la esquina inferior derecha del IDE de Visual Basic.
4. Haga clic en el formulario una vez para seleccionarlo.
5. En la ventana Propiedades, cambie la propiedad Text para que se lea "Mi primer formulario" y presione ENTRAR.
El texto en la parte superior del formulario cambia después de especificar el nuevo valor.
6. En la ventana Propiedades, cambie la propiedad BackColor a un color diferente seleccionando un color desde la lista
desplegable.
Observe que la propiedad BackColor se cambia a través de una interfaz especial. Esta interfaz le permite ver el color
antes de seleccionarlo y le permite elegir entre los colores utilizados actualmente por el sistema, colores estándar Web o
una selección de colores más personalizada. También puede escribir sólo el nombre del color (por ejemplo, Red) en el
cuadro en la ventana Propiedades.
Experimente cambiando otras propiedades del formulario. Cuando esté listo, continúe con el siguiente procedimiento.
Agregar controles al formulario
En este procedimiento, agregará los controles al formulario seleccionando el control en la ventana Cuadro de herramientas,
que se encuentra normalmente en el lado izquierdo del IDE de Visual Basic, y arrastrándolo al formulario. Se manipularán las
propiedades de los controles.
Para agregar controles al formulario
1. Desde el Cuadro de herramientas, arrastre un control Button, un control TextBox, un control Label y finalmente un
control CheckBox hasta el formulario.
2. Seleccione el control Button y arrástrelo alrededor del formulario para cambiar su ubicación.
Observe cómo aparecen las instrucciones cuando lo arrastra cerca de los otros controles. Estas instrucciones pueden
ayudarle a colocar los controles en forma precisa.
3. Repita el proceso con los otros controles hasta que la interfaz de usuario tenga el aspecto que desea.
4. Seleccione el control Button, luego haga clic y arrastre el cuadrado blanco de la esquina inferior derecha para cambiar el
tamaño.
5. Pruebe las propiedades de control durante algunos minutos. Haga clic en cada control en el formulario para
seleccionarlo y cambie algunas de sus propiedades en la ventana Propiedades. Entre las propiedades que puede tratar
de cambiar se encuentran: Font, BackColor, ForeColor y Text.
6. Presione F5 para ejecutar el programa. Aparecerá una ventana con los controles que acaba de agregar. Observe que
puede hacer clic en el botón, activar y desactivar la casilla de verificación y escribir en el cuadro de texto.
Pasos siguientes
En esta lección, aprendió a crear un formulario y a agregarle controles. También aprendió a cambiar propiedades de
formularios y controles en la ventana Propiedades. En las siguientes lecciones, revisaremos con mayor detención algunos de
los controles.
Próxima lección: Interactuar con el usuario: utilizar botones
Vea también
Conceptos
Información detallada: comprender propiedades, métodos y eventos
Otros recursos
Crear la apariencia visual de un programa: introducción a los formularios Windows Forms
Conceptos del lenguaje Visual Basic

Interactuar con el usuario: utilizar botones


En esta lección, obtendrá información sobre cómo agregar un control Button a un formulario, cómo cambiar el aspecto del
botón y cómo escribir código que se ejecute cuando se haga clic en él.
La manera más fácil para los usuarios de interactuar con el programa es mediante botones. Por ejemplo, muchos programas
tienen botones Salir. Como se vio en la lección anterior, el control Button de Visual Basic parece y se comporta como botón
de comando. El control Button también tiene eventos predefinidos que se pueden utilizar para iniciar acciones tales como
finalizar un programa.
Utilizar los botones
En general, los botones son controles rectangulares que tienen una apariencia elevada en el formulario. Sin embargo, hay
muchas propiedades que se pueden establecer para cambiar su apariencia. La más obvia es la propiedad Text, que determina
el texto mostrado y este texto se muestra en la fuente o el tipo de letra determinado por la propiedad Font. La propiedad
BackColor determina el color del botón y la propiedad ForeColor determina el color del texto.
Cuando el usuario hace clic en un botón en tiempo de ejecución, el control Button provoca el evento Click. Cuando aparece un
evento, los controles ejecutan el código como respuesta a esos eventos. Puede escribir código que se ejecute creando un
controlador de eventos.
Un controlador de eventos es un método que se ejecuta cuando ocurre un evento. Cuando el usuario hace clic en un botón, el
evento Click del botón tiene un controlador de eventos. Es más fácil de lo que parece y, en el ejemplo siguiente, obtendrá
información sobre cómo escribir un controlador de eventos. Los eventos y los controladores de eventos se tratarán con más
detalle en Hacer que el programa reaccione ante el usuario: crear un controlador de eventos.
¡Inténtelo!
Para utilizar los botones
1. En el menú Archivo, seleccione Nuevo proyecto.
2. En el cuadro de diálogo Nuevo proyecto, en el panel Plantillas, haga clic en Aplicación para Windows.
3. En el cuadro Nombre, escriba ButtonExample y haga clic en Aceptar.
Se abrirá un nuevo proyecto de formularios Windows Forms.
4. En el Cuadro de herramientas, arrastre un control Button hasta el formulario.
5. En la ventana Propiedades, cambie la propiedad Text para que se lea: What time is it? y, a continuación, presione
ENTRAR.
Observe que el texto no se ajusta en el botón.
6. En la ventana Propiedades, seleccione la propiedad AutoSize y establezca su valor en True.
El botón cambia de tamaño para ajustar el texto.
7. En el formulario, haga doble clic en el botón para abrir el Editor de código.
Se abre el Editor de código en medio de un método denominado Button1_Click. Éste es el controlador de eventos
Button1.Click. El código que escribe aquí se ejecutará cuando se haga clic en el botón.
8. En el controlador del evento Button1_Click, escriba la siguiente línea de código.
VB
MsgBox("The current time is " & Now.ToShortTimeString)

9. Presione F5 para ejecutar el programa.


El programa comienza y aparece el formulario. Cuando hace clic en Button, aparece un cuadro de mensaje que muestra
la hora actual.
Pasos siguientes
En esta lección, obtuvo información sobre cómo agregar un botón a un formulario y cómo agregar código que se ejecutará
cuando el usuario hace clic en el botón con el mouse. En la lección siguiente, obtendrá información sobre cómo trabajar con
los controles diseñados para mostrar y recibir texto: los controles Label y TextBox.
Siguiente lección: Mostrar y recibir texto: utilizar etiquetas y cuadros de texto
Vea también
Tareas
Comunicarse con el usuario del programa: interfaz de usuario
Referencia
Información general sobre el control Button (formularios Windows Forms)
Conceptos
Información detallada: comprender propiedades, métodos y eventos
Otros recursos
Crear la apariencia visual de un programa: introducción a los formularios Windows Forms
Conceptos del lenguaje Visual Basic

Mostrar y recibir texto: utilizar etiquetas y cuadros de texto


En este tema, aprenderá a utilizar los controles Label y TextBox para mostrar texto y aceptar la entrada de texto del usuario.
Una de las maneras más fáciles de transmitir y recibir la información de los usuarios es a través de texto. Puede mostrar texto
sobre la funcionalidad de un programa y también recibir datos como texto del usuario y utilizarlos en el programa. Visual Basic
proporciona dos controles diseñados para mostrar y recibir el texto. Son los controles Label y TextBox.
Mostrar texto con el control Label
El control Label es el control primario para mostrar texto. Éste aparece en el formulario como texto delimitado por un área de
forma rectangular. Generalmente, el color de esta área es igual que el color del formulario, por lo que aparece como si fuera
texto del formulario.
Dado que el control Label tiene como objetivo principal mostrar texto, las propiedades más importantes para un control Label
son las propiedades que controlan su aspecto. La propiedad Text contiene el texto que se muestra en el control Label. La
propiedad Font determina la fuente con la que se mostrará el texto en la propiedad Text. La propiedad ForeColor determina el
color del texto en sí y la propiedad BackColor determina el color del área que rodea el texto.
Recibir texto con el control TextBox
Cuando se necesita mostrar y recibir texto, se diseña el control TextBox para controlar el trabajo. Además de mostrar el texto,
el control TextBox permite a los usuarios escribir texto en el control TextBox en tiempo de ejecución, y el programa puede
recuperar ese texto.
Al igual que con el control Label, las propiedades que son más importantes para el control TextBox son aquéllas relacionadas
con la apariencia. Una propiedad importante es la propiedad Text, que representa el texto del control TextBox. Cuando un
usuario escribe en el control TextBox, la propiedad Text se actualiza para reflejar los cambios. De este modo, el texto que se
muestra en el control TextBox siempre refleja el valor de la propiedad Text.
También hay propiedades que afectan al comportamiento del control TextBox. La propiedad Multiline determina si el control
TextBox permite varias líneas. Si esta propiedad se establece en False, el control TextBox siempre tendrá exactamente una
línea de alto y no se podrá ampliar verticalmente. Si se establece en True, el control TextBox permite varias líneas y puede
tener el alto deseado.
Inténtelo
Para crear una interfaz de usuario con los controles Label y Textbox
1. En el menú Archivo, seleccione Nuevo proyecto.
2. En el cuadro de diálogo Nuevo proyecto, en el panel Plantillas, haga clic en Aplicación para Windows.
3. En el cuadro Nombre, escriba TextBoxExample y, a continuación, haga clic en Aceptar.
Se abrirá un nuevo proyecto de formularios Windows Forms.
4. En el Cuadro de herramientas, arrastre un control TextBox, Label y Button hasta el formulario.
5. Seleccione el control Label y arrástrelo sobre el control TextBox.
6. En la ventana Propiedades, cambie la propiedad Text del control Label al siguiente código.
Enter your name and click the button.

Ahora que ha creado una interfaz de usuario básica, deberá agregar algo de código al programa y estará listo para probarlo.
Para agregar el código y probar el programa
1. Haga doble clic en el control Button para abrir el Editor de código.
El Editor de código se abre en el controlador de eventos Button1_Click.
2. Agregue la siguiente línea de código al controlador de eventos Button1_Click.
VB
MsgBox("Your Name is " & Textbox1.Text)
3. Presione F5 para ejecutar el programa.
4. Cuando aparezca el formulario, escriba su nombre en el control TextBox y haga clic en el botón. Aparece un cuadro de
mensaje que muestra el texto del control TextBox. Cambie el texto y haga clic en el botón nuevamente. Cada vez que
haga clic en el botón, se mostrará el texto actualizado.
Pasos siguientes
En este tema, obtuvo información acerca de los controles Label y TextBox y de cómo se pueden utilizar para mostrar y recibir
texto. En el siguiente tema, aprenderá a crear métodos para controlar los eventos de los controles. Aunque ya ha aprendido a
crear algunos controladores de eventos básicos, como el controlador del evento Button_Click, aprenderá a crear métodos
para controlar algunos de los otros eventos que ocurren a los controles.
Siguiente lección: Hacer que el programa reaccione ante el usuario: crear un controlador de eventos
Vea también
Tareas
Interactuar con el usuario: utilizar botones
Referencia
Información general sobre el control Label (formularios Windows Forms)
Información general sobre el control TextBox (formularios Windows Forms)
Conceptos del lenguaje Visual Basic

Hacer que el programa reaccione ante el usuario: crear un


controlador de eventos
En esta lección, aprenderá a crear un controlador de eventos.
Como se ha visto en lecciones anteriores, los controles tienen propiedades, métodos y eventos y se utilizan para crear la
interfaz de usuario. Los eventos son situaciones especiales que le pueden suceder a un control. Por ejemplo, se puede hacer
clic en un control, se puede escribir texto en él, el puntero del mouse se puede mover sobre el control y así sucesivamente.
Cuando se produce algo interesante, el control provoca un evento; es decir, envía una señal al programa para hacerle saber
que ha sucedido algo. El programa comprueba si tiene algún método para controlar dicho evento. Tales métodos se
denominan controladores de eventos. Un ejemplo es un método que se ejecuta cuando se hace clic en un botón, como el
método que se creó en Interactuar con el usuario: utilizar botones.
Puede crear controladores de eventos para una variedad de eventos de control. En esta lección, creará controladores de
eventos para controlar los eventos MouseEnter y MouseLeave de un botón: los eventos que se provocan cuando se mueve un
mouse sobre un control.
¡Inténtelo!
Para controlar el evento MouseEnter
1. En el menú Archivo, seleccione Nuevo proyecto.
2. En el cuadro de diálogo Nuevo proyecto, en el panel Plantillas, haga clic en Aplicación para Windows.
3. En el cuadro Nombre, escriba EventHandler y, a continuación, haga clic en Aceptar.
Se abre un nuevo proyecto de formularios Windows Forms.
4. En el Cuadro de herramientas, arrastre un control Button hasta el formulario.
5. En las ventanas Propiedades, establezca la propiedad AutoSize en True.
6. En el menú Ver, elija Código para abrir el Editor de código.
Justo sobre el Editor de código, observe los dos cuadros desplegables. El cuadro de la izquierda contiene una lista de
todos los controles que aparecen en el formulario, al igual que Form1, (General) y (Eventos de Form1). El cuadro de la
derecha muestra cada uno de los eventos disponibles para el elemento que se muestra en el cuadro de la izquierda.
7. En el cuadro de la izquierda, elija Button1.
8. En el cuadro de la derecha, elija MouseEnter.
Aparece un nuevo controlador de eventos denominado Button1_MouseEnter en el Editor de código.
9. En el controlador de eventos Button1_MouseEnter, escriba el siguiente código.
VB
Button1.Text = "The Mouse has entered"

10. Presione F5 para ejecutar la aplicación. Pase el puntero del mouse sobre el botón. Observe que cuando el puntero del
mouse pasa sobre Button1, el texto del botón cambia.
Agregar otro controlador de eventos
Quizá haya notado en el ejemplo anterior que aunque el texto de Button1 cambia cuando el puntero del mouse pasa sobre él,
cuando éste se quita, el texto no vuelve a cambiar. Si desea que el texto cambie cuando el mouse ya no está sobre el botón,
debe controlar el evento MouseLeave además del evento MouseEnter.
Para controlar el evento MouseLeave
1. En el Editor de código, asegúrese de que está seleccionado Button1 en la lista desplegable de la izquierda y seleccione
MouseLeave del cuadro desplegable de la derecha.
Aparece un nuevo controlador de eventos denominado Button1_MouseLeave en el Editor de código.
2. En el controlador de eventos Button1_MouseLeave , escriba el siguiente código.
VB
Button1.Text = "The mouse has left"

3. Presione F5 para ejecutar la aplicación.


Ahora cuando el puntero del mouse pasa sobre el botón, el texto cambia a The mouse has entered, pero cuando el
mouse ya no está sobre el botón, el texto cambia a The mouse has left.
Pasos siguientes
En esta lección, aprendió cómo crear un controlador de eventos utilizando el Editor de código. Ahora, puede pasar a la
siguiente lección en la secuencia,
Obtener opciones seleccionadas por el usuario: utilizar casillas de verificación y botones de opción o examinar los
controladores de eventos con Información detallada: compartir un controlador de eventos. Si elige la segunda opción, debe
guardar el proyecto EventHandler para utilizarlo en esa lección.
Vea también
Tareas
Mostrar y recibir texto: utilizar etiquetas y cuadros de texto
Referencia
Información general sobre el control Label (formularios Windows Forms)
Información general sobre el control TextBox (formularios Windows Forms)
Conceptos del lenguaje Visual Basic

Información detallada: compartir un controlador de eventos


En esta lección, aprenderá a crear un controlador de eventos compartido que controla eventos para más de un control.
En la lección anterior, Hacer que el programa reaccione ante el usuario: crear un controlador de eventos, aprendió a escribir un
código en respuesta a los eventos MouseEnter y MouseLeave para un control Button. Sin embargo, ¿qué pasa si tiene dos o
más controles Button y desea mostrar el mismo mensaje para todos ellos? Se puede escribir el código en los controladores de
eventos para cada control, pero afortunadamente, hay una manera más fácil.
Si examina atentamente los métodos controladores de eventos para el evento MouseEnter, observará que la declaración
Method (Private Sub Button1_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) Handles
Button1.MouseEnter) contiene una cláusula Handles (Handles Button1.MouseEnter). Como es lógico, la palabra clave
Handles le dice al controlador de eventos cuáles eventos debe controlar.
Para compartir un controlador de eventos entre varios controles, simplemente debe agregar los nombres de los controles
adicionales y el nombre del evento que desea controlar. Luego, el controlador de eventos recibe una notificación cuando se
produce el evento para cualquiera de dichos controles. Por ejemplo, si tiene dos controles Button y desea utilizar el mismo
controlador de eventos para ambos, la cláusula Handles puede tener el siguiente aspecto.
Handles Button1.MouseEnter, Button2.MouseEnter.

Ahora tiene un método único que controla el evento MouseEnter para ambos controles, pero ¿cómo sabe el controlador de
eventos cuál control provocó el evento? Si examina nuevamente la declaración Method, observará la cláusula ByVal sender
As Object; la palabra clave Sender le dice al controlador de eventos cuál objeto (en este caso cuál control) provocó el evento.

Inténtelo
Para compartir un controlador de eventos
1. Abra el proyecto EventHandler que creó en la lección anterior. Si no lo guardó, primero deberá regresar a la lección
anterior, Hacer que el programa reaccione ante el usuario: crear un controlador de eventos y finalizar los procedimientos
de dicha lección.
2. En el Explorador de soluciones, seleccione Form1.vb y, a continuación, en el menú Ver elija Diseñador.
3. En el Cuadro de herramientas, arrastre otro control Button hasta el formulario.
4. En la ventana Propiedades, establezca la propiedad AutoSize en True.
5. En el menú Ver, elija Código para abrir el Editor de código.
6. En la declaración de método Button1_MouseEnter (Private Sub Button1_MouseEnter(ByVal sender As Object,
ByVal e As System.EventArgs) Handles Button1.MouseEnter), cambie la cláusula Handles para que se lea Handles
Button1.MouseEnter, Button2.MouseEnter.

7. En el cuerpo de la declaración de evento, reemplace el código con lo siguiente.


VB
If sender.Equals(Button1) Then
Button1.Text = "The mouse has entered Button1"
Else
Button2.Text = "The mouse has entered Button2"
End If

Este código comprueba si el remitente era Button1 , si es así, se actualiza la propiedad Text de Button1, si no lo es, se
actualiza la propiedad Text de Button2.
8. En la declaración de método Button1_MouseLeave, cambie la cláusula Handles para que se lea de la siguiente manera.
Handles Button1.MouseLeave, Button2.MouseLeave.

9. En el cuerpo de la declaración de evento, reemplace el código con lo siguiente.


VB
sender.Text = "The mouse has left"

En este caso, el código establece la propiedad Text del remitente (Button1 o Button2) en la misma cadena.
10. Presione F5 para ejecutar la aplicación.
Ahora, cuando el puntero del mouse (ratón) pasa sobre el botón, el texto cambia a The mouse has entered junto con el
nombre del botón, y cuando el mouse ya no está sobre el botón, el texto vuelve a ser The mouse has left.
Intente agregar más controles al formulario y modificar las cláusulas Handles para incluirlos, ni siquiera deben ser del
mismo tipo.
Pasos siguientes
En esta lección, aprendió a compartir un controlador de evento único entre varios controles. En la siguiente lección, aprenderá
a utilizar dos nuevos tipos de controles, los controles CheckBox y RadioButton, para presentar opciones a los usuarios.
Siguiente lección: Obtener opciones seleccionadas por el usuario: utilizar casillas de verificación y botones de opción
Vea también
Tareas
Hacer que el programa reaccione ante el usuario: crear un controlador de eventos
Conceptos del lenguaje Visual Basic

Obtener opciones seleccionadas por el usuario: utilizar casillas


de verificación y botones de opción
En esta lección, aprenderá a utilizar casillas de verificación y botones de opción para presentar y recuperar las elecciones del
usuario.
Cuando se crea la interfaz de usuario para el programa, a menudo se necesita un modo de presentar las elecciones. Por
ejemplo, suponga que escribió una aplicación para tomar las órdenes para una pizzería; deseará que los usuarios puedan
seleccionar cualquiera o todas las variedades de ingredientes para cubrir la pizza. El control CheckBox proporciona una
representación visual que hace que esta opción sea fácil de crear.
El control CheckBox se compone de una etiqueta de texto y un cuadro que el usuario puede seleccionar. Cuando el usuario
hace clic en el cuadro, aparece una marca de verificación en él. Si se vuelve a hacer clic en el cuadro, la marca de verificación
desaparece. El estado de la casilla de verificación se puede recuperar utilizando la propiedad CheckBox.Checked. Si el cuadro
muestra una marca de verificación, la propiedad devuelve True. Si no se muestra ninguna comprobación, la propiedad
devuelve False.
Inténtelo
Para utilizar casillas de verificación
1. En el menú Archivo, seleccione Nuevo proyecto.
2. En el cuadro de diálogo Nuevo proyecto, en el panel Plantillas, haga clic en Aplicación para Windows.
3. En el cuadro Nombre, escriba UserChoices y, a continuación, haga clic en Aceptar.
Se abre un nuevo proyecto de formularios Windows Forms.
4. En el Cuadro de herramientas, arrastre un control Button y tres controles CheckBox hasta el formulario.
5. En la ventana Propiedades, cambie la propiedad Text de CheckBox1, CheckBox2 y CheckBox3 para que diga
Pepperoni, Sausage y Mushrooms respectivamente.

6. En la ventana Propiedades, cambie la propiedad Text de Button1 para que diga Order Pizza.

7. En el formulario, haga doble clic en el botón; se abrirá el controlador de eventos Button1_Click en el Editor de código.
8. Agregue el código siguiente al controlador de eventos Button1_Click:
VB
Dim toppings As String = ""
If CheckBox1.Checked = True Then
toppings &= "Cheese "
End If
If CheckBox2.Checked = True Then
toppings &= "Peppers "
End If
If CheckBox3.Checked = True Then
toppings &= "Mushrooms"
End If
If toppings <> "" Then
MsgBox("Your pizza has the following toppings: " & toppings)
End If

9. Presione F5 para ejecutar el programa. Cuando aparezca el formulario, seleccione algunos ingredientes y haga clic en el
botón. Se muestra un cuadro de mensaje que indica su elección de ingredientes para la pizza.
Utilizar botones de opción para realizar elecciones exclusivas
Acaba de aprender a permitir que un usuario elija alguna o todas las diversas opciones. Pero ¿qué pasa si desea que el usuario
elija sólo una de varias opciones? En este caso, puede utilizar el control RadioButton.
A diferencia de las casillas de verificación, los botones de opción siempre funcionan como parte de un grupo. Al seleccionar un
botón de opción inmediatamente se borran todos los otros botones de opción en el grupo. Al definir un grupo de botones de
opción, se indica al usuario que "tiene este conjunto de opciones entre las que puede elegir una y solamente una".
Puede utilizar grupos de controles RadioButton para permitir a los usuarios elegir entre las opciones exclusivas. Por ejemplo,
puede permitir que un usuario elija salsa normal o salsa picante en la pizza, pero no ambas. Como un control CheckBox,
puede recibir información sobre el estado del control RadioButton de la propiedad RadioButton.Checked.
Para utilizar botones de opción
1. En el Cuadro de herramientas, arrastre dos controles RadioButton al formulario.
2. En la ventana Propiedades, establezca la propiedad Text para RadioButton1 en Sauce Regular.
3. Establezca la propiedad Checked para RadioButton1 en True.
Sugerencia
Al definir un grupo de elecciones, siempre debe establecer una elección para que sea el valor predeterminado.

4. En la ventana Propiedades, establezca la propiedad Text para RadioButton2 en Spicy Sauce.

5. En el formulario, haga doble clic en el botón para abrir el controlador de eventos Button1_Click en el Editor de código.
6. En el controlador de eventos Button1_Click, agregue el siguiente código:
VB
If RadioButton1.Checked = True Then
MsgBox("You chose regular sauce")
Else
MsgBox("You chose spicy sauce")
End If

7. Presione F5 para ejecutar el programa. Elija uno de los botones de opción y, a continuación, haga clic en el botón Order
Pizza. Se mostrará un cuadro de mensaje que tiene en cuenta su elección.
Intente seleccionar ambos botones de opción al mismo tiempo. Observe que los botones de opción son excluyentes.
Después de hacer clic en uno, el otro se borra automáticamente.
Pasos siguientes
En esta lección, aprendió a utilizar los controles CheckBox y RadioButton para proporcionar a los usuarios las elecciones en
la interfaz de usuario. En este punto, puede seguir con la siguiente lección, Cómo ilustrar: mostrar imágenes o aprender a crear
varios grupos de botones de opción con Información detallada: utilizar varios grupos de botones de opción. Si elige la segunda
opción, debe guardar el proyecto UserChoices para utilizarlo en la próxima lección.
Vea también
Referencia
Información general sobre el control CheckBox (formularios Windows Forms)
Información general sobre el control RadioButton (formularios Windows Forms)
Conceptos del lenguaje Visual Basic

Información detallada: utilizar varios grupos de botones de


opción
En esta lección, aprenderá a crear varios grupos de botones de opción mutuamente exclusivos en un formulario único.
En la lección anterior aprendió a crear un grupo de botones de opción con el fin de presentar un conjunto de opciones
mutuamente excluyentes. ¿Qué sucede, sin embargo, si necesita presentar dos o más conjuntos diferentes de opciones? Verá
que todos los controles RadioButton de un formulario se tratan como un grupo único, lo que permite seleccionar un solo
botón de opción.
Afortunadamente, Visual Basic tiene varios controles conocidos como controles contenedores que pueden contener otros
controles. Colocando un control contenedor en el formulario y colocando después controles RadioButton dentro del control
contenedor, puede tener varios grupos de botones de opción en el mismo formulario.
Los controles contenedores más comunes son el control GroupBox y el control Panel. La diferencia principal entre ambos es
que el control GroupBox tiene un borde visible a su alrededor y el control Panel no lo tiene. Cuando se utiliza un control
contenedor para agrupar botones de opción, el control GroupBox es la mejor elección porque el borde proporciona una
indicación visual de que las opciones del grupo están relacionadas.
¡Inténtelo!
Para utilizar un control GroupBox como un contenedor
1. Abra el proyecto UserChoices que creó en la lección anterior. Si no lo guardó, necesitará regresar primero a la lección
anterior, Obtener opciones seleccionadas por el usuario: utilizar casillas de verificación y botones de opción, y finalizar
los procedimientos.
2. En el Explorador de soluciones, seleccione Form1.vb y, a continuación, en el menú Ver elija Diseñador.
3. En el Cuadro de herramientas, arrastre un control GroupBox hasta el formulario.
4. En la ventana Propiedades, cambie la propiedad Text del control GroupBox para que se lea Select a crust.

5. Con el control GroupBox seleccionado, arrastre dos controles RadioButton del Cuadro de herramientas y colóquelos
sobre el control GroupBox.
6. En la ventana Propiedades, cambie las propiedades Text de RadioButton3 y RadioButton4 a Thin crust y Thick
crust, respectivamente.

7. En el formulario, haga doble clic en el botón Pedir pizza para abrir el controlador del evento Button1_Click del Editor
de código.
8. En el controlador del evento Button1_Click, agregue el siguiente código:
VB
If RadioButton3.Checked = True Then
MsgBox("You chose a thin crust")
Else
MsgBox("You chose a thick crust")
End If

9. Presione F5 para ejecutar el programa. Elija uno de los botones de opción y, a continuación, haga clic en el botón Pedir
pizza. Se muestra un cuadro de mensaje que tiene en cuenta su elección. Observe que se conserva su selección de salsa.
Pasos siguientes
En esta lección, ha aprendido a utilizar un control contenedor para agrupar controles RadioButton. En la lección siguiente
aprenderá a mostrar imágenes.
Próxima lección: Cómo ilustrar: mostrar imágenes
Vea también
Tareas
Obtener opciones seleccionadas por el usuario: utilizar casillas de verificación y botones de opción
Cómo: Agrupar controles con el control GroupBox de formularios Windows Forms
Referencia
Información general del control Panel (formularios Windows Forms)
Conceptos del lenguaje Visual Basic

Cómo ilustrar: mostrar imágenes


En esta lección aprenderá a utilizar un control PictureBox para mostrar imágenes y a mostrar una imagen como imagen de
fondo en un formulario.
Se dice que una imagen vale más que mil palabras y, de hecho, muchos programas las utilizan para transmitir información.
Hay varias maneras de mostrar imágenes en Visual Basic: la más común es utilizando un control PictureBox.
Los controles PictureBox actúan como un contenedor para las imágenes; se elige la imagen que se va a mostrar estableciendo
la propiedad Image. La propiedad Image se puede establecer en la ventana Propiedades o se puede escribir el código para
decirle al programa cuál imagen se va mostrar.
Otras propiedades útiles para el control PictureBox son la propiedad AutoSize, que determina si PictureBox se expandirá
para ajustar la imagen, y la propiedad SizeMode, que se puede utilizar para expandir, centrar o ampliar la imagen dentro del
control PictureBox.
Antes de agregar una imagen a un control PictureBox, generalmente se agregará el archivo de imagen al proyecto como un
recurso. Una vez que se agrega un recurso al proyecto, puede volver a utilizarlo cuantas veces lo desee: por ejemplo, se puede
mostrar la misma imagen en varios lugares.
Inténtelo
Para agregar una imagen como un recurso
1. En el menú Archivo, seleccione Nuevo proyecto.
2. En el cuadro de diálogo Nuevo proyecto, en el panel Plantillas, haga clic en Aplicación para Windows.
3. En el cuadro Nombre, escriba Pictures y haga clic en Aceptar.
Se abre un nuevo proyecto de formularios Windows Forms.
4. En la ventana Explorador de soluciones, haga doble clic en el nodo My Project para abrir el Diseñador de proyectos.
5. En el Diseñador de proyectos, haga clic en la ficha Recursos.
6. Haga clic en Agregar recurso y, a continuación, elija Agregar archivo existente de la lista desplegable.
Se abrirá el cuadro de diálogo Agregar archivo existente a los recursos. Si no ve ningún archivo de imagen, vaya a
una carpeta que sí contiene imágenes.
7. Seleccione un archivo de imagen (con una extensión de archivo .bmp, .gif o .jpg) y haga clic en Abrir. Para este ejemplo,
es mejor elegir una imagen pequeña.
La imagen se agregará al proyecto y aparecerá en la ventana Administrador de recursos.
8. Repita los dos pasos anteriores para agregar una segunda imagen al proyecto.
9. En el menú Archivo, elija Cerrar. Si se le solicita guardar los cambios, elija Sí.
Para mostrar imágenes utilizando un control PictureBox
1. En el Explorador de soluciones, seleccione Form1.vb y en el menú Ver elija Diseñador.
2. En el Cuadro de herramientas, arrastre un control PictureBox hasta el formulario.
3. En la ventana Propiedades, haga clic en el botón ... ubicado junto a la propiedad Image para abrir el cuadro de diálogo
Seleccionar recurso.
4. En la lista Entrada, elija una de las imágenes que agregó y haga clic en Aceptar.
5. Seleccione la propiedad SizeMode y establézcala en AutoSize.
Observe cómo el control PictureBox cambia automáticamente de tamaño para ajustar la imagen.
6. En el formulario, haga doble clic en el control PictureBox para abrir el controlador de eventos PictureBox1_Click en el
Editor de código.
7. Agregue el código siguiente al controlador de eventos PictureBox1_Click.
Nota
Deberá reemplazar "MyPictureName2" con el nombre real de la segunda imagen que agregó anteriormente.

VB
PictureBox1.Image = My.Resources.MyPictureName2

8. Presione F5 para ejecutar el programa. Cuando aparece el formulario, haga clic en la imagen para que aparezca la
segunda imagen.
Mostrar una imagen de fondo en un formulario
Además de mostrar una imagen en un control PictureBox, también puede mostrar una imagen como el fondo para el
formulario. La propiedad BackgroundImage de un formulario se utiliza para mostrar una imagen que aparecerá detrás de
cualquier otro control en el formulario, casi igual que un papel tapiz en el escritorio de Windows.
Así como Windows permite elegir si el papel tapiz está centrado, en mosaico o expandido para rellenar la pantalla, se puede
utilizar la propiedad BackgroundImageLayout para hacer lo mismo para un formulario.
Sugerencia
Muchos de los otros controles, como Panel, GroupBox e incluso el control Button también tienen una propiedad Backgroun
dImage. Pruébelos.

Inténtelo
Para mostrar una imagen de fondo en un formulario
1. En el Explorador de soluciones, seleccione Form1.vb y en el menú Ver elija Diseñador.
2. Seleccione el formulario haciendo clic en él fuera del control PictureBox.
3. En la ventana Propiedades, haga clic en el botón ... ubicado junto a la propiedad BackgroundImage para abrir el
cuadro de diálogo Seleccionar recurso.
4. En la lista Entrada, elija una de las imágenes que agregó antes y haga clic en Aceptar.
Observe que la imagen se muestra en el formulario detrás de PictureBox y se ordena en mosaico de manera
predeterminada.
Nota
Si la imagen en el control PictureBox es demasiado grande, es posible que no se pueda ver la imagen de fondo. En est
e caso, seleccione el control PictureBox y arrástrelo hacia la parte inferior del formulario.

5. Seleccione la propiedad BackgroundImageLayout y establézcala en Stretch.


Observe cómo la imagen se expande para rellenar todo el formulario.
6. Haga doble clic en el formulario para abrir el Editor de código.
7. Asegúrese de que Eventos de Form1 esté seleccionado en el cuadro desplegable del lado izquierdo y elija Hacer clic
desde el cuadro desplegable del lado derecho.
8. Agregue el código siguiente al controlador de eventos Form1_Click
VB
If Me.BackgroundImageLayout = ImageLayout.Stretch Then
Me.BackgroundImageLayout = ImageLayout.Center
Else
Me.BackgroundImageLayout = ImageLayout.Stretch
End If
9. Presione F5 para ejecutar el programa. Cuando aparece el formulario, haga clic en él para cambiar el diseño.
Pasos siguientes
En esta lección, aprendió a utilizar el control PictureBox para mostrar imágenes y también aprendió a utilizar la propiedad
BackgroundImage de un formulario. En la siguiente lección aprenderá a crear menús para presentar opciones a los usuarios.
Próxima lección: Proporcionar opciones al usuario: crear menús en tiempo de diseño
Vea también
Tareas
Obtener opciones seleccionadas por el usuario: utilizar casillas de verificación y botones de opción
Cómo: Establecer el fondo de un control Panel de formularios Windows Forms
Referencia
Información general del control PictureBox (Formularios Windows Forms)
Conceptos del lenguaje Visual Basic

Proporcionar opciones al usuario: crear menús en tiempo de


diseño
En esta lección, aprenderá a crear menús y a escribir un código que se ejecuta cuando se seleccionan los elementos de menú.
Los menús proporcionan a los usuarios una manera fácil y familiar de realizar elecciones relacionadas con el programa. Los
usos comunes para los menús incluyen: exponer las opciones del programa, agregar accesos directos para tareas comunes
como cortar y pegar o cargar y guardar los archivos.
Visual Basic facilita la implementación de los menús. Puede utilizar el control MenuStrip para crear menús gráficamente.
Cuando se arrastra hasta un formulario, el control MenuStrip aparece como un cuadro con las palabras "escriba aquí"
situadas en la parte superior del formulario. Puede hacer clic en el cuadro y escribir en él para crear los títulos de menú.
Cuando se establece el título para un elemento de menú, se pueden crear elementos de menú adicionales abajo y a la derecha
del primero, lo que le permite ampliar el menú con tantos elementos o subelementos adicionales como desee. Cuando la
apariencia del menú se ha completado, puede crear controladores de eventos para controlar los eventos Click para cada
elemento.
Inténtelo
Para agregar un menú
1. En el menú Archivo, seleccione Nuevo proyecto.
2. En el cuadro de diálogo Nuevo proyecto, en el panel Plantillas, haga clic en Aplicación para Windows.
3. En el cuadro Nombre, escriba Menus y haga clic en Aceptar.
Se abre un nuevo proyecto de formularios Windows Forms.
4. En el Cuadro de herramientas, arrastre un control MenuStrip hasta el formulario.
Independientemente de dónde lo coloca, el control MenuStrip se asocia a la parte más alta del formulario.
Es posible que haya observado que hay un icono MenuStrip1 agregado en un área gris debajo del formulario, esta área
se denomina bandeja de componentes. Si hace clic fuera del control MenuStrip, desaparecerá, puede volverlo a ver
haciendo clic en el icono MenuStrip1.
5. En el formulario, haga clic en el control MenuStrip, escriba File y, a continuación, presione Entrar.
Aparecen nuevos cuadros para las entradas adicionales del menú abajo y a la derecha del primer elemento de menú.
Éstos constituyen espacios para los elementos adicionales del menú. Puede continuar agregando elementos de menú en
cualquier dirección hasta que se complete el menú.
6. En el cuadro situado debajo del primer cuadro, escriba Exit y, a continuación, presione Entrar.
7. Haga doble clic en el menú Salir para abrir el Editor de código.
8. En el controlador de eventos ExitToolStripMenuItem_Click, escriba el siguiente código.
VB
Application.Exit()

9. Presione F5 para ejecutar el programa. Con el mouse (ratón), seleccione el menú Archivo y, a continuación, elija Salir. Se
cierra la aplicación.
En esta lección, aprendió a utilizar el control MenuStrip para diseñar los menús. Ahora, puede continuar con la siguiente
lección sobre los temporizadores o puede explorar maneras más avanzadas de utilizar los menús en
Información detallada: más información acerca de los menús y luego seguir con la lección de los temporizadores.
Próxima lección: A tiempo: utilizar controles Timer para realizar acciones regulares
Vea también
Tareas
Cómo ilustrar: mostrar imágenes
Conceptos del lenguaje Visual Basic

Información detallada: más información acerca de los menús


En esta lección, aprenderá a habilitar o deshabilitar menús en tiempo de ejecución, así como a crear menús emergentes.
En la lección anterior, aprendió a utilizar el control MenuStrip para crear menús que permitan a los usuarios elegir opciones
relacionadas con el programa. Sin embargo, en ciertos casos, es posible que algunas opciones sólo estén disponibles en
determinados momentos. Por ejemplo, un comando de menú Copiar sólo estará disponible si hay algo que se pueda copiar.
La mayoría de los programas deshabilitan, en lugar de ocultar, los comandos de menú cuando no están disponibles. Cuando
un elemento de menú se deshabilita, el texto del menú pasa a estar atenuado y, al hacer clic en el elemento de menú, no se
realiza ninguna acción. Al utilizar un control MenuStrip, puede deshabilitar y habilitar elementos de menú mediante la
propiedad Enabled de MenuItem.
¡Inténtelo!
Para deshabilitar o habilitar elementos de menú
1. En el menú Archivo, seleccione Nuevo proyecto.
2. En el cuadro de diálogo Nuevo proyecto, en el panel Plantillas, haga clic en Aplicación para Windows.
3. En el cuadro Nombre, escriba Menus2 y haga clic en Aceptar.
Se abrirá un nuevo proyecto de formularios Windows Forms.
4. En el Cuadro de herramientas, arrastre un control MenuStrip y un control TextBox hasta el formulario.
5. En el formulario, haga clic en el control MenuStrip y escriba Edit, a continuación, presione ENTRAR.
6. En el cuadro situado debajo del primer cuadro, escriba Copy,, a continuación, presione ENTRAR.
7. En la ventana Propiedades, establezca la propiedad Enabled de CopyToolStripMenuItem en False.
8. Haga doble clic en el control TextBox para abrir el Editor de código.
9. En el controlador del evento TextBox1_TextChanged, escriba el siguiente código.
VB
If Textbox1.Text <> "" Then
CopyToolStripMenuItem.Enabled = True
Else
CopyToolStripMenuItem.Enabled = False
End If

10. Presione F5 para ejecutar el programa. Haga clic en el menú Edición; el elemento de menú Copiar estará deshabilitado.
Escriba algún texto en el control TextBox y, a continuación, vuelva a hacer clic en el menú Edición; el elemento de menú
Copiar estará ahora habilitado.
Crear menús emergentes
Muchos programas utilizan menús emergentes, también conocidos como menús contextuales, para facilitar el acceso a los
comandos que se utilizan normalmente. El acceso a un menú contextual se obtiene haciendo clic con el botón secundario del
mouse en un formulario o en un control en tiempo de ejecución. Puede crear sus propios menús contextuales en Visual Basic
utilizando un control ContextMenuStrip.
Al igual que sucede con el control MenuStrip, cuando arrastra un control ContextMenuStrip hasta un formulario, el control
ContextMenuStrip aparece como un cuadro en la parte superior del formulario con el texto "Escriba aquí" en su interior, y se
agrega un icono a la bandeja de componentes. A diferencia de MenuStrip, sólo pueden agregarse elementos adicionales
debajo del primer elemento de menú, creándose un menú vertical.
Además, es necesario que ContextMenuStrip esté asociado al formulario o al control donde desee que aparezca. Esto se
realiza estableciendo la propiedad ContextMenuStrip del formulario o del control en el nombre del control
ContextMenuStrip. Puede asociar un solo control ContextMenuStrip a tantos controles como desee.
Inténtelo
Para crear un menú contextual
1. En el menú Archivo, seleccione Nuevo proyecto.
2. En el cuadro de diálogo Nuevo proyecto, en el panel Plantillas, haga clic en Aplicación para Windows.
3. En el cuadro Nombre, escriba ContextMenus y haga clic en Aceptar.
Se abrirá un nuevo proyecto de formularios Windows Forms.
4. En el Cuadro de herramientas, arrastre un control ContextMenuStrip hasta el formulario.
5. En la ventana Propiedades, seleccione la propiedad ContextMenuStrip del formulario y elija ContextMenuStrip1 en
la lista desplegable.
6. En el formulario, haga clic en el control ContextMenuStrip y escriba Option1, a continuación, presione ENTRAR.
7. En el cuadro situado debajo del primer cuadro, escriba Option2,, a continuación, presione ENTRAR.
8. Haga doble clic en el elemento de menú Option1 para abrir el Editor de código.
9. En el controlador del evento Option1ToolStripMenuItem_Click, escriba el siguiente código.
VB
MsgBox("You chose Option 1")

10. En el Editor de código, seleccione Option2ToolStripMenuItem en el cuadro desplegable izquierdo y, a continuación,


elija Hacer clic en del cuadro desplegable derecho.
Aparecerá un nuevo controlador de eventos denominado Option2ToolStripMenuItem _Click en el editor de código.
11. En el controlador del evento Option2ToolStripMenuItem _Click, escriba el código siguiente:
VB
MsgBox("You chose Option 2")

12. Presione F5 para ejecutar el programa. Haga clic con el botón secundario del mouse en el formulario y después en uno
de los elementos del menú contextual: aparecerá un cuadro de mensaje que notifica la opción elegida.
Pasos siguientes
En esta lección, aprendió a habilitar y deshabilitar menús, así como a crear un menú contextual. En el tema siguiente, aprenderá
a utilizar un tipo diferente de control, Timer, para realizar acciones.
Siguiente lección: A tiempo: utilizar controles Timer para realizar acciones regulares
Vea también
Tareas
Proporcionar opciones al usuario: crear menús en tiempo de diseño
Cómo: Asociar un objeto ContextMenuStrip con un control
Referencia
Información general sobre el control MenuStrip (formularios Windows Forms)
Conceptos del lenguaje Visual Basic

A tiempo: utilizar controles Timer para realizar acciones


regulares
En esta lección, obtendrá información sobre cómo utilizar el componente Timer para realizar acciones no solicitadas por datos
proporcionados por el usuario.
A veces, encontrará de utilidad realizar acciones repetidamente en los programas, por ejemplo, guardar un archivo cada pocos
minutos o actualizar la interfaz de usuario. El componente Timer permite realizar las acciones fijas regularmente sin ninguna
entrada por parte del usuario.
El componente Timer se diferencia de los controles que ha utilizado hasta ahora en que no tiene una representación visual en
tiempo de ejecución. Los controles que no tienen ninguna representación visual se conocen como componentes. Dado que el
usuario no puede de ninguna manera interactuar directamente con el componente Timer, se ejecuta en segundo plano.
El componente Timer tiene dos propiedades y un evento que son los más utilizados. La propiedad Enabled determina si el
componente Timer funciona. Si la propiedad Enabled se establece en True, el componente Timer está activo. Si la propiedad
Enabled se establece en False, el componente Timer no está activo.
La propiedad Interval determina el número de milisegundos entre los pasos del componente Timer. Por ejemplo, si la
propiedad Interval se establece en 1000, el componente Timer provocará el evento Tick cada 1.000 milisegundos o cada
segundo.
El componente Timer provoca el evento Tick a intervalos regulares que dependen del valor de la propiedad Interval. Puede
agregar código a un controlador de eventos Timer.Tick y este código se ejecutará cuando el evento Tick se active.
Al establecer las propiedades Enabled y Interval y al agregar el código al controlador de eventos Tick, puede crear código
que se ejecute a intervalos regulares sin necesidad de la acción del usuario.
Inténtelo
Para utilizar un componente Timer
1. En el menú Archivo, seleccione Nuevo proyecto.
2. En el cuadro de diálogo Nuevo proyecto, en el panel Plantillas, haga clic en Aplicación para Windows.
3. En el cuadro Nombre, escriba Timer y haga clic en Aceptar.
Se abrirá un nuevo proyecto de formularios Windows Forms.
4. En el Cuadro de herramientas, arrastre un control Label y un control Timer hasta el formulario.
El componente Timer no aparece en el propio formulario, sino en la bandeja de componentes bajo el formulario. Esto es
porque el componente Timer no tiene una representación visual.
5. Seleccione el componente Timer y, a continuación, en la ventana Propiedades, establezca la propiedad Enabled en
True y la propiedad Interval en 1000.
6. Haga doble clic en el componente Timer para abrir el Editor de código.
7. En el controlador del evento Timer1_Tick, escriba el siguiente código.
VB
Label1.Text = My.Computer.Clock.LocalTime.ToLongTimeString

8. Presione F5 para ejecutar la aplicación.


El texto de la etiqueta se actualiza cada segundo con la hora correcta.
Pasos siguientes
En esta lección, obtuvo información sobre cómo utilizar el componente Timer para ejecutar código a intervalos regulares. Con
el componente Timer puede programar que el código se ejecute según ciertos intervalos regulares. Ésta es la última lección de
esta sección del paseo guiado.
En la sección siguiente, obtendrá información sobre cómo utilizar las herramientas de Visual Basic para encontrar y corregir
errores en su programa.
Siguiente lección: ¿Qué salió mal? Encontrar y corregir errores mediante depuración
Vea también
Tareas
Proporcionar opciones al usuario: crear menús en tiempo de diseño
Referencia
Información general sobre el componente Timer (formularios Windows Forms)
Conceptos del lenguaje Visual Basic

¿Qué salió mal? Encontrar y corregir errores mediante


depuración
Al escribir un programa, se pueden producir y se producirán errores. Es posible que se cometa un error tipográfico, el
programa se puede comportar no como lo esperaba o no se puede ejecutar en lo absoluto. Cuando hay un error en el
programa, debe encontrarlo y corregirlo, el proceso de encontrar y corregir los errores se denomina depuración.
En las siguientes lecciones, aprenderá sobre varias técnicas para depurar un programa Visual Basic.
En esta sección
Encontrar errores: introducción a la depuración en Visual Basic
Conozca sus errores: tres tipos de errores de programación
Error ortográfico: encontrar y eliminar errores del compilador
¡Uff! A mi programa no le ha gustado Encontrar y eliminar errores en tiempo de ejecución
¿Qué? Esto no debiera haber ocurrido. Detectar errores lógicos
Agregar notas a programas: utilizar comentarios
Secciones relacionadas
Información detallada: qué ocurriría si... Comprobar código en la ventana Inmediato
Crédito extra: todavía hay algo erróneo
Crear la apariencia visual de un programa: introducción a los formularios Windows Forms
Administrar registros: utilizar datos en un programa
Paseo con guía por Visual Basic
Conceptos del lenguaje Visual Basic

Encontrar errores: introducción a la depuración en Visual Basic


En esta lección, obtendrá información sobre cómo corregir errores del programa mediante la depuración.
No importa lo minuciosamente que se diseñe un programa o se escriba el código, siempre pueden aparecer errores. En
ocasiones los errores impedirán que se inicie el programa, unas veces harán que el programa deje de ejecutarse o se bloquee y
otras se ejecutará pero no ofrecerá los resultados esperados.
Y, por supuesto, cuando los errores aparecen, querrá encontrarlos y corregirlos. Los errores de un programa se conocen
normalmente como errores, y el proceso de encontrarlos y corregirlos se denomina depurar.
El proceso de depuración es iterativo; es decir, se repetirá una y otra vez. Por lo general, escribe código, ejecuta el programa
hasta que aparece un error, encuentra el error, lo corrige y, a continuación, ejecuta el programa de nuevo.
En la mayoría de los casos, no necesita detener el programa para corregirlo. Puede corregir el código donde apareció el error y
seguir ejecutando el programa desde allí; este proceso se llama Editar y continuar.
La depuración se realiza en el IDE (entorno de desarrollo integrado) de Visual Basic, que contiene varios comandos y ventanas
especiales para ayudar a encontrar los errores. Obtendrá más información en las lecciones siguientes.
¡Inténtelo!
Nota
En este ejemplo hay una excepción. Las excepciones son objetos que se crean (y producen) cuando el programa detecta un er
ror. Se crean distintos tipos de excepciones, dependiendo del tipo de error generado. Con los valores predeterminados del us
uario, si se produce una excepción cuando se ejecuta el programa de Visual Basic, aparecerá un cuadro de diálogo que descri
be el error y ayuda a corregirlo.

Para utilizar el proceso de editar y continuar


1. En el menú Archivo, seleccione Nuevo proyecto.
2. En el cuadro de diálogo Nuevo proyecto, en el panel Plantillas, haga clic en Aplicación para Windows.
3. En el cuadro Nombre, escriba Edit y haga clic en Aceptar.
Se abrirá un nuevo proyecto de formularios Windows Forms.
4. Haga doble clic en el formulario para abrir el Editor de código.
5. En el controlador del evento Form_Load, agregue el siguiente código:
VB
Dim number As Integer = 1
Dim numbers As String = ""
MsgBox(numbers + 1)

6. Presione F5 para ejecutar el programa. Se detendrá el programa y se mostrará un cuadro de diálogo de excepciones con
el mensaje "No se controló InvalidCastException".
La excepción ha ocurrido porque hay un error tipográfico en el código. Se utilizó la variable equivocada: debería ser
number, Integer, no numbers, que es una variable String.

Observe que el programa todavía está en ejecución; está en el modo de interrupción de depuración. Con Editar y
continuar, puede corregir el error sin tener que detener el programa (ni volver a ejecutarlo para comprobarlo).
7. En el Editor de código, cambie numbers + 1 por number + 1.

8. Presione F5 para continuar. Debe aparecer un cuadro de mensaje con el número 2.


Pasos siguientes
En esta lección, obtuvo información sobre cómo depurar, corregir un error y seguir ejecutando su programa. En la lección
siguiente conocerá los distintos tipos de errores.
Siguiente lección: Conozca sus errores: tres tipos de errores de programación
Vea también
Otros recursos
¿Qué salió mal? Encontrar y corregir errores mediante depuración
Crear la apariencia visual de un programa: introducción a los formularios Windows Forms
Paseo con guía por Visual Basic
Conceptos del lenguaje Visual Basic

Conozca sus errores: tres tipos de errores de programación


En esta lección, conocerá los diferentes tipos de errores que pueden aparecer al escribir un programa.
Incluso los programadores más experimentados cometen errores; y conocer cómo depurar una aplicación y encontrar esos
errores es una parte importante de la programación. No obstante, antes de obtener información sobre el proceso de
depuración, conviene conocer los tipos de errores que deberá buscar y corregir.
Los errores de programación pertenecen a tres categorías: errores de compilación, errores en tiempo de ejecución y errores
lógicos. Las técnicas para depurar cada uno de ellos se tratarán en las tres lecciones siguientes.
Errores de compilación
Los errores de compilación, también conocidos como errores del compilador, son errores que impiden que su programa se
ejecute. Cuando se presiona F5 para ejecutar un programa, Visual Basic compila el código en un lenguaje binario que entiende
el equipo. Si el compilador de Visual Basic se encuentra con código que no entiende, emite un error de compilador.
La mayoría de los errores del compilador se deben a errores cometidos al escribir el código. Por ejemplo, puede escribir mal
una palabra clave, omitir alguna puntuación necesaria o intentar utilizar una instrucción End If sin antes utilizar una
instrucción If.
Afortunadamente el Editor de código de Visual Basic fue diseñado para identificar estos errores antes de que se intente
ejecutar el programa. Aprenderá a encontrar y corregir los errores de compilación en la lección siguiente,
Error ortográfico: encontrar y eliminar errores del compilador.
Errores en tiempo de ejecución
Los errores en tiempo de ejecución son errores que aparecen mientras se ejecuta su programa. Estos errores aparecen
normalmente cuando su programa intenta una operación que es imposible que se lleve a cabo.
Un ejemplo de esto es la división por cero. Suponga que tiene la instrucción siguiente:
Speed = Miles / Hours

Si la variable Hours tiene un valor de 0, se produce un error en tiempo de ejecución en la operación de división. El programa se
debe ejecutar para que se pueda detectar este error y si Hours contiene un valor válido, no se producirá el error.
Cuando aparece un error en tiempo de ejecución, puede utilizar las herramientas de depuración de Visual Basic para
determinar la causa. Aprenderá a encontrar y corregir los errores en tiempo de ejecución en la lección
¡Uff! A mi programa no le ha gustado Encontrar y eliminar errores en tiempo de ejecución.
Errores lógicos
Los errores lógicos son errores que impiden que su programa haga lo que estaba previsto. Su código puede compilarse y
ejecutarse sin errores, pero el resultado de una operación puede generar un resultado no esperado.
Por ejemplo, puede tener una variable llamada FirstName y establecida inicialmente en una cadena vacía. Después en el
programa, puede concatenar FirstName con otra variable denominada LastName para mostrar un nombre completo. Si olvida
asignar un valor a FirstName, sólo se mostrará el apellido, no el nombre completo como pretendía.
Los errores lógicos son los más difíciles de detectar y corregir, pero Visual Basic también dispone de herramientas de
depuración que facilitan el trabajo. Aprenderá a encontrar y corregir los errores lógicos en
¿Qué? Esto no debiera haber ocurrido. Detectar errores lógicos.
Pasos siguientes
En esta lección, obtuvo información sobre las tres categorías de errores de programación. En la lección siguiente obtendrá
información sobre cómo depurar los errores del compilador.
Siguiente lección: Error ortográfico: encontrar y eliminar errores del compilador
Vea también
Tareas
Encontrar errores: introducción a la depuración en Visual Basic
Otros recursos
¿Qué salió mal? Encontrar y corregir errores mediante depuración
Conceptos del lenguaje Visual Basic

Error ortográfico: encontrar y eliminar errores del compilador


En esta lección, aprenderá a encontrar y corregir los errores del compilador.
Como vimos en la lección anterior, los errores del compilador aparecen cuando el compilador de Visual Basic se encuentra con
código irreconocible, generalmente porque se cometió algún error al escribir. Dado que los errores del compilador impiden
que se ejecute un programa, deberá encontrarlos y corregirlos, o depurarlos, antes de ejecutar el programa.
Encontrar y corregir errores del compilador
Encontrar los errores del compilador es bastante fácil, ya que el programa no se ejecuta hasta que se han corregido. Cuando
presiona F5, si hay algún error del compilador, aparecerá un cuadro de diálogo que indica "Errores al generar. ¿Desea
continuar?". Si selecciona Sí, se ejecutará la última versión sin errores del programa; si selecciona No, el programa se
detendrá y aparecerá la ventana Lista de errores.
La ventana Lista de errores muestra toda la información sobre el error, incluida su descripción y ubicación en el código. Si
hace doble clic en el error en la Lista de errores, se resaltará la línea incorrecta del código en el Editor de código. También
puede presionar F1 para mostrar Ayuda y obtener más información sobre el error y cómo corregirlo.
El Editor de código de Visual Basic también puede ayudar a encontrar y corregir los errores del compilador antes incluso de
que se intente ejecutar el programa. Mediante una característica llamada IntelliSense, Visual Basic observa el código a medida
que se escribe y si encuentra código que producirá un error del compilador, lo subraya con una línea ondulada de color azul. Si
mantiene presionado el mouse sobre esa línea, se muestra un mensaje que describe el error. Si la ventana Lista de errores
está visible, también mostrará los mensajes de error.
Inténtelo
Para encontrar y corregir errores del compilador
1. En el menú Archivo, seleccione Nuevo proyecto.
2. En el panel Plantillas, en el cuadro de diálogo Nuevo proyecto, haga clic en Aplicación para Windows.
3. En el cuadro Nombre, escriba CompilerErrors y haga clic en Aceptar.
Se abre un nuevo proyecto de formularios Windows Forms.
4. Haga doble clic en el formulario para abrir el Editor de código.
5. En el controlador de eventos Form_Load, agregue el siguiente código.
VB
End If

6. Presione ENTRAR. Verá una línea ondulada de color azul debajo de End If.

Si mantiene presionado el mouse sobre la línea, verá el mensaje "'End If' debe ir precedida por la instrucción 'If' "
correspondiente.
7. Cambie el código para que tenga la siguiente apariencia.
VB
If 1 < 2 Then
End If

Observe que ha desaparecido la línea ondulada de color azul.


8. Agregue la nueva línea de código siguiente después de la instrucción If... Then.
VB
MgBox("Hello")
9. Presione F5 para ejecutar el programa. Aparecerá un cuadro de diálogo con el mensaje "Errores al generar. ¿Desea
continuar y ejecutar la última versión generada correctamente?"
10. Haga clic en No. Se mostrará la ventana Lista de errores con el mensaje de error "No se ha declarado el 'nombre
MgBox'".
11. Haga doble clic en el mensaje de error de la Lista de errores y cambie el código por MsgBox("Hello").
12. Presione F5 de nuevo. Ahora el programa debería ejecutarse y causar la aparición de un cuadro de mensaje.
Pasos siguientes
En esta lección, aprendió a encontrar y corregir los errores del compilador. En la siguiente lección, aprenderá a corregir un tipo
diferente de error, el error en tiempo de ejecución. Siguiente lección:
¡Uff! A mi programa no le ha gustado Encontrar y eliminar errores en tiempo de ejecución
Vea también
Tareas
Conozca sus errores: tres tipos de errores de programación
Encontrar errores: introducción a la depuración en Visual Basic
Conceptos del lenguaje Visual Basic

¡Uff! A mi programa no le ha gustado Encontrar y eliminar


errores en tiempo de ejecución
En esta lección, aprenderá a depurar un programa y a corregir errores en tiempo de ejecución.
Como aprendió en su momento, los errores en tiempo de ejecución se producen cuando el programa intenta realizar una
operación que es imposible finalizar. Cuando se produce un error en tiempo de ejecución, el programa se detiene y aparece un
mensaje de error; debe depurar el error y corregirlo para que el programa pueda continuar.
Encontrar y corregir errores en tiempo de ejecución
La mayoría de los errores en tiempo de ejecución se producen porque se cometió un error en el código; por ejemplo, olvidó
asignar un valor a una variable antes de utilizarla. Cuando se ejecute el programa y se descubra el error, el programa se
detendrá y el cuadro de diálogo Ayudante de excepciones se mostrará en la ventana Editor de código. Cuando esto sucede,
el programa está en modo de interrupción, que es el modo en que se realiza la depuración.
El cuadro de diálogo Ayudante de excepciones contiene una descripción del error, así como sugerencias para la solución de
problemas que indican la causa. Puede hacer clic en las sugerencias sobre solución de problemas para mostrar los temas de
Ayuda y obtener más detalles.
Es necesario corregir el error para que pueda continuar con el programa; para ello, debe inspeccionar el código para encontrar
la causa del error. Por ejemplo, si sospecha que se produjo un error porque una variable contiene el valor equivocado, estando
todavía en el modo de interrupción, puede utilizar IntelliSense para ver el valor de la variable. Cuando se coloca el mouse
sobre la variable en el Editor de código, la información sobre herramientas muestra el valor de la variable. Si el valor no es lo
que esperaba, compruebe en el código anterior dónde se estableció el valor y después arregle el código y continúe.
Inténtelo
Para revisar el valor de una variable
1. En el menú Archivo, seleccione Nuevo proyecto.
2. En el panel Plantillas, en el cuadro de diálogo Nuevo proyecto, haga clic en Aplicación para Windows.
3. En el cuadro Nombre, escriba RunTimeErrors y haga clic en Aceptar.
Se abrirá un nuevo proyecto de formularios Windows Forms.
4. Haga doble clic en el formulario para abrir el Editor de código.
5. En el controlador de eventos Form_Load, agregue el siguiente código.
VB
Dim miles As Integer = 0
Dim hours As Integer = 0
Dim speed As Integer = 0

VB
miles = 55
speed = miles / hours
MsgBox(CStr(speed) & " miles per hour")

6. Presione F5 para ejecutar el programa. Aparece un cuadro de diálogo Ayudante de excepciones con el mensaje "No se
controló OverflowException".
Una línea de puntos que va del cuadro de diálogo a su archivo de código señala la línea de código que produjo el error.
Observe que la primera sugerencia sobre solución de problemas del Ayudante de excepciones indica que debe
asegurarse de no estar dividiendo por cero.
7. Mueva el mouse sobre la variable miles y manténgalo ahí durante unos segundos. La información sobre herramientas
que verá dice "miles 55".
8. Ahora mueva el mouse sobre la variable hours; la información sobre herramientas debe decir "hours 0".
Debido a que no se puede dividir por cero y el valor de hours es cero, ya ha encontrado la causa del error: no haber
actualizado el valor de hours.
9. Agregue la siguiente línea de código sobre la línea miles = 55.

VB
hours = 2

10. Haga clic en la flecha amarilla situada en el margen izquierdo del código y arrástrela hasta la línea hours = 2.

Esto permite que el programa continúe desde esa línea en lugar de continuar desde la línea que contiene el error. Para
que se reconozca la solución del error es necesario ejecutar la nueva línea de código recién agregada.
11. Presione F5 para que el programa continúe. Aparece un cuadro de diálogo que muestra "28 miles per hour".
Pasos siguientes
En esta lección, aprendió a encontrar y corregir errores en tiempo de ejecución. En la lección siguiente obtendrá información
sobre el tercer tipo de errores de programación: los errores lógicos. Puede explorar técnicas de depuración más avanzadas en
Información detallada: qué ocurriría si... Comprobar código en la ventana Inmediato y continuar después con la lección de los
errores lógicos.
Siguiente lección: ¿Qué? Esto no debiera haber ocurrido. Detectar errores lógicos
Vea también
Tareas
Error ortográfico: encontrar y eliminar errores del compilador
Conozca sus errores: tres tipos de errores de programación
Encontrar errores: introducción a la depuración en Visual Basic
Conceptos del lenguaje Visual Basic

Información detallada: qué ocurriría si... Comprobar código en


la ventana Inmediato
En esta lección, aprenderá a evaluar y ejecutar un código utilizando la ventana Inmediato.
En la lección anterior, aprendió cómo corregir errores en tiempo de ejecución utilizando el Ayudante de excepciones. Sin
embargo, a veces es posible que no esté claro cómo corregir un error y se desee probar una posible corrección sin cambiar el
código. Una ventana de depuración especial, la ventana Inmediato, permite hacer eso y más.
La ventana Inmediato
Cuando el programa está en modo de interrupción, se puede utilizar la ventana Inmediato para ejecutar fragmentos de
código o evaluar variables y expresiones. Por ejemplo, si aparece un error en tiempo de ejecución debido a una variable vacía,
puede comprobar el valor de la variable. Puede utilizar también la ventana Inmediato para asignar un valor a esa variable y
comprobar cómo se ejecuta el resto del programa.
Sugerencia
Cuando ejecuta el programa en modo de depuración, puede poner el programa en modo de interrupción en cualquier mom
ento, seleccionando Interrumpir del menú Depurar.

Para ejecutar el código en la Ventana Inmediato escríbalo como lo haría en el Editor de código y presione ENTRAR. Para
evaluar una variable o expresión, escriba un signo de interrogación seguido por la variable o expresión que desea evaluar y
presione ENTRAR, el resultado se mostrará en la siguiente línea.
¡Inténtelo!
Para probar el código en la ventana Inmediato
1. En el menú Archivo, seleccione Nuevo proyecto.
2. En el panel Plantillas, en el cuadro de diálogo Nuevo proyecto, haga clic en Aplicación para Windows.
3. En el cuadro Nombre, escriba Immediate y haga clic en Aceptar.
Se abre un nuevo proyecto de formularios Windows Forms.
4. En el Cuadro de herramientas, arrastre dos controles TextBox y un control Button al formulario.
5. Haga doble clic en el botón para abrir el Editor de código.
6. En el controlador de eventos Button_Click, agregue el siguiente código.
VB
Dim miles As Integer = 0
Dim hours As Integer = 0
Dim speed As Integer = 0

VB
miles = CInt(Textbox1.Text)
hours = CInt(Textbox2.Text)
speed = miles / hours
MsgBox(CStr(speed) & " miles per hour")

7. Presione F5 para ejecutar el programa. Escriba 100 en el primer cuadro de texto y, a continuación, escriba 0 en el segundo
cuadro de texto.
8. Haga clic en Button1. El programa se detendrá y aparecerá el cuadro de diálogo Ayudante de excepciones con el
mensaje "No se controló OverflowException".
9. En la ventana Inmediato en la parte inferior del IDE, escriba ?miles y presione ENTRAR.
El valor 100 debe aparecer en la línea siguiente.
Sugerencia
Puede abrir en cualquier momento la ventana Inmediato eligiendo Ventanas, Inmediato en el menú Depurar.

10. Escriba ?hours y presione ENTRAR.


El valor 0 debe aparecer en la línea siguiente.
11. Escriba hours = 4 y presione ENTRAR. Escriba ?hours y presione ENTRAR.

Observe que el valor de hours es ahora 4, el valor que especificó en la línea anterior. Puede cambiar el valor de hours en
la ventana Inmediato sin cambiar el código del programa.
12. Presione F5 para continuar. Se mostrará un cuadro de mensaje con el resultado.
Sugerencia
Para evitar que se produzca este error en tiempo de ejecución, agregue un controlador de errores que compruebe que
hay un número válido en el bloque Try y muestre un mensaje al usuario en el bloque Catch. Para obtener más informa
ción sobre controladores de errores, vea Qué hacer cuando algo sale mal: control de errores.

Pasos siguientes
En esta lección, aprendió a utilizar la ventana Inmediato para comprobar los valores y ejecutar el código. En la siguiente
lección aprenderá a encontrar y corregir errores lógicos.
Siguiente lección: ¿Qué? Esto no debiera haber ocurrido. Detectar errores lógicos
Vea también
Tareas
¡Uff! A mi programa no le ha gustado Encontrar y eliminar errores en tiempo de ejecución
Qué hacer cuando algo sale mal: control de errores
Conceptos del lenguaje Visual Basic

¿Qué? Esto no debiera haber ocurrido. Detectar errores lógicos


En esta lección, aprenderá a encontrar errores lógicos en el programa.
En lecciones anteriores, aprendió a encontrar y corregir errores del compilador y errores en tiempo de ejecución. El tercer tipo
de error de programación, los errores lógicos, puede ser el más difícil de descubrir. Con los errores lógicos no se obtiene
ninguna advertencia, se ejecutará el programa pero proporcionará resultados incorrectos. Es necesario investigar el código y
determinar la razón del problema.
Afortunadamente, las herramientas de depuración de Visual Basic pueden ayudar. Dos técnicas de depuración, que establecen
puntos de interrupción e instrucciones paso a paso a través del código, permiten inspeccionar el código línea por línea
mientras se ejecuta para encontrar el error.
Se puede establecer un punto de interrupción en el Editor de código para cualquier línea ejecutable de código. Cuando se
ejecuta el programa, los puntos de interrupción fuerzan que se detenga y el programa entra en el modo de interrupción
cuando llega a esa línea de código. Puede obtener la información que desee sobre el estado del programa en ese momento.
Puede comprobar el valor de cualquier variable, comprobar expresiones en la ventana Inmediato o realizar cambios en el
código con Editar y continuar.
Cuando está en modo de interrupción, puede recorrer el código, ejecutando línea por línea para ver cómo funciona. Al
presionar la tecla F8, se ejecutará la línea de código actual y se detendrá en la línea siguiente. Puede inspeccionar los valores de
variables para ver cómo cambian de una línea a la siguiente.
Si la línea de código actual llama a una función o procedimiento Sub en otra parte del código, cuando presiona F8, la ejecución
se desplazará a ese procedimiento. Una vez que se haya ejecutado ese procedimiento, el programa volverá a la línea siguiente
a la que llamó al procedimiento. Si no desea recorrer un procedimiento, puede presionar MAYÚS+F8 para saltarlo.
Inténtelo
Para observar un error lógico
1. En el menú Archivo, seleccione Nuevo proyecto.
2. En el panel Plantillas, en el cuadro de diálogo Nuevo proyecto, haga clic en Aplicación para Windows.
3. En el cuadro Nombre, escriba LogicErrors y haga clic en Aceptar.
Se abre un nuevo proyecto de formularios Windows Forms.
4. Desde el Cuadro de herramientas, arrastre dos controles TextBox y un control Button hacia el formulario.
5. Haga doble clic en Button1 para abrir el Editor de código.
6. En el controlador de eventos Button1_Click, agregue el siguiente código.
VB
Dim minutes As Integer = CInt(Textbox1.Text)
Dim miles As Double = CDbl(Textbox2.Text)
Dim hours As Double = 0
hours = minutes / 60
MsgBox("Average speed " & GetMPH(hours, miles))

7. Debajo de la línea End Sub, agregue la siguiente función.

VB
Function GetMPH(ByVal miles As Double, ByVal hours As Double) _
As String
GetMPH = CStr(miles / hours)
End Function

8. Presione F5 para ejecutar el programa. En el primer cuadro de texto, escriba 10 (para representar 10 minutos) y en el
segundo cuadro de texto, escriba 5 (para representar las millas) y, a continuación, haga clic en Button1.
Aparecerá un cuadro con el mensaje "Average speed 0.03333334" (velocidad media 0,03333334) ; no obstante, si
recorre 5 millas en diez minutos, la respuesta correcta serían 30 mph.
Mantenga abierto el proyecto: en el siguiente procedimiento aprenderá cómo encontrar el error lógico.
Encontrar errores lógicos
En el último ejemplo, algo está obviamente mal con la lógica del programa. Según el resultado, viaja menos de una milla por
hora, no treinta millas por hora como espera, pero ¿dónde está el error?
En el siguiente procedimiento se establecerá un punto de interrupción y se examinará el código para encontrar el error.
Inténtelo
Para establecer un punto de interrupción y recorrer el código
1. En el Editor de código, busque la línea hours = minutes / 60 y haga clic en el margen izquierdo.

Aparecerá un punto rojo en el margen y el código resaltado en rojo, lo que representa un punto de interrupción.
2. Presione F5 para ejecutar el programa nuevamente. En el primer cuadro de texto, escriba 10 y en el segundo cuadro de
texto, escriba 5. Haga clic en Button1.
El programa se detendrá cuando llegue al punto de interrupción. La línea hours = minutes / 60 aparecerá resaltada en
amarillo.
Inspeccione los valores de las variables manteniendo el mouse sobre ellos; el valor de hours debe ser 0 y el valor de
minutes debe ser 10.

3. Presione F8 para ejecutar la línea hours = minutes / 60 y pasar a la siguiente línea.

Inspeccione los valores de las variables de la línea MsgBox("Average speed " & GetMPH(hours, miles)), el valor de
hours debe ser ahora 0.166666672 y el valor de miles debe ser 5.0.

4. Presione F8 de nuevo para ejecutar la línea actual.


Observe que la ejecución baja a la línea Function GetMPH.

Inspeccione los valores de las variables en esta línea; observará que el valor de miles es ahora 0.166666672 y el de hours
es 5.0, lo contrario de lo que eran en la línea anterior. Ha encontrado el error.
Mantenga abierto el proyecto: en el siguiente procedimiento aprenderá a corregir el error lógico.
Corregir errores lógicos
En el último procedimiento, los valores para las variables miles y hours cambiaron de lugar. ¿Puede identificar la causa?
Si examina la línea MsgBox("Average speed " & GetMPH(hours, miles)), verá que a la función GetMPH se pasan dos
argumentos, hours y miles, en ese orden. Si examina la declaración de función Function GetMPH(ByVal miles As Double,
ByVal hours As Double)..., observará que los argumentos se muestran como miles primero y como hours después.

Se produjo un error en la lógica porque los argumentos se pasaron en el orden equivocado, produciendo un cálculo incorrecto.
Si los argumentos hubieran sido de tipos diferentes, habría visto un error en tiempo de ejecución, pero como los argumentos
eran del mismo tipo, no se produjo el error. Fue un error simple, pero el error resultante fue difícil de encontrar.
En el siguiente procedimiento se establecerá un punto de interrupción y se recorrerá el código para encontrar el error.
Inténtelo
Para corregir el error lógico
1. En el Editor de código, cambie la línea MsgBox("Average speed " & GetMPH(hours, miles)) para que se lea de la
siguiente manera:
VB
MsgBox("Average speed " & GetMPH(miles, hours))
2. Haga clic en el punto rojo en el margen izquierdo para borrar el punto de interrupción.
3. Presione F5 para ejecutar el programa. En el primer cuadro de texto, escriba 10 y en el segundo cuadro de texto, escriba
5. A continuación, haga clic en Button1.

Esta vez el cuadro de mensaje debe mostrar el resultado correcto, "Average speed 30" (velocidad media 30).
Puede parecer que se corrigió el programa, pero hay otro error lógico aun más difícil de encontrar. Si desea probar y
encontrarlo, mantenga el proyecto abierto, lo utilizará de nuevo en la lección Crédito extra: todavía hay algo erróneo.
Pasos siguientes
En esta lección, aprendió a encontrar y corregir un error lógico. Ahora puede continuar con la siguiente lección acerca del uso
de comentarios o ponerse a prueba y encontrar otro error lógico en Crédito extra: todavía hay algo erróneo.
Siguiente lección: Agregar notas a programas: utilizar comentarios
Vea también
Tareas
¡Uff! A mi programa no le ha gustado Encontrar y eliminar errores en tiempo de ejecución
Conozca sus errores: tres tipos de errores de programación
Encontrar errores: introducción a la depuración en Visual Basic
Conceptos del lenguaje Visual Basic

Crédito extra: todavía hay algo erróneo


En esta lección, aprenderá a rastrear un error lógico que sólo se produce en situaciones determinadas.
En la lección anterior, ¿Qué? Esto no debiera haber ocurrido. Detectar errores lógicos, aprendió a encontrar y corregir un error
de lógica. En el código de ejemplo de esa lección, aún existe un error grave oculto: uno que es más difícil de encontrar porque
sólo se produce en situaciones determinadas.
Probar un programa
Como desarrollador, se encuentra en desventaja cuando debe probar el programa para ver si se comporta según lo deseado.
Sabe cómo debe funcionar, de modo que es improbable que se cometa un error que pueda revelar un error lógico. Sin
embargo, un usuario que no esté familiarizado con el programa puede y hará cosas en las que no ha pensado.
Por ejemplo, en un programa que calcula millas por hora dividiendo el número de millas recorridas por el número de horas
que demoró el viaje, ¿qué pasa si el usuario escribe cero para las horas o las millas? Probémoslo y vea.
Inténtelo
Para probar el programa
1. Abra el proyecto LogicErrors que se creó en la lección anterior,
¿Qué? Esto no debiera haber ocurrido. Detectar errores lógicos.
Nota
Si no finalizó o no guardó el proyecto anterior, deberá regresar y finalizarlo antes de poder continuar.

2. Presione F5 para ejecutar el programa. En el primer cuadro de texto, escriba 0 (para representar minutos) y en el
segundo escriba 5 (para representar millas) y, a continuación, haga clic en Button1.
Se muestra un cuadro de mensaje con el mensaje "Velocidad media infinito."
Mantenga abierto el proyecto: en el siguiente procedimiento aprenderá a encontrar el error lógico.
5 dividido por 0 = ¿Infinito?
En el procedimiento anterior, es posible que "Infinito" no sea lo que se esperaba, pero es matemáticamente correcto: 0 cabe en
5 un número infinito de veces. Sin embargo, éste no es el resultado que se desea que los usuarios del programa vean. ¿Puede
pensar en una forma de evitar esto?
Podría pensar en agregar un controlador de errores, un procedimiento descrito en la lección
Qué hacer cuando algo sale mal: control de errores. Sin embargo, en este caso no funcionaría porque el resultado "Infinito" no
es un error, únicamente no es lo que desea.
Puesto que no es útil mostrar una velocidad de cero, una manera de corregir el problema es probar un valor de cero y advertir
al usuario que debe escribir un número mayor. Mientras se realiza esto, también se puede evitar que el usuario escriba
números negativos, puesto que los números negativos también pueden generar un resultado falso.
En el siguiente procedimiento, se modificará el código en el controlador de eventos Button1_Click para llamar sólo a la
función GetMPH si los valores son mayores que cero.
Inténtelo
Para corregir el error
1. En el Editor de código, cambie el código en el controlador de eventos Button1_Click de la siguiente manera:
VB
Dim minutes As Integer = CInt(Textbox1.Text)
Dim miles As Double = CDbl(Textbox2.Text)
Dim hours As Double = 0
If minutes <= 0 Or miles <= 0 Then
MsgBox("Please enter a number greater than zero")
Else
hours = minutes / 60
MsgBox("Average speed " & GetMPH(miles, hours))
End If

2. Presione F5 para ejecutar el programa nuevamente. En el primer cuadro de texto, escriba 0, y en el segundo, escriba 5. A
continuación, haga clic en Button1.
Aparecerá el cuadro de mensaje indicándole que especifique un número mayor que 0. Inténtelo probando el programa
con otras combinaciones de números hasta que esté seguro de que se ha corregido el error.
Pasos siguientes
En esta lección, aprendió a encontrar y corregir un error lógico que produjo un comportamiento inesperado. En la siguiente
lección, aprenderá a utilizar los comentarios en el código.
Siguiente lección: Agregar notas a programas: utilizar comentarios
Vea también
Tareas
¿Qué? Esto no debiera haber ocurrido. Detectar errores lógicos
Qué hacer cuando algo sale mal: control de errores
Conozca sus errores: tres tipos de errores de programación
Encontrar errores: introducción a la depuración en Visual Basic
Referencia
/ (Operador, Visual Basic)
Conceptos del lenguaje Visual Basic

Agregar notas a programas: utilizar comentarios


En esta lección, obtendrá información sobre cómo crear comentarios en el código de sus programas.
El código que forma un programa puede ser difícil de leer y entender, sobre todo si el usuario no es la persona que lo escribió
originalmente. Al utilizar comentarios, puede crear notas para sí mismo o para otros usuarios del código.
Los comentarios son entradas de texto del Editor de código y que omite el compilador de Visual Basic cuando se ejecuta el
programa. Por tanto, puede escribir una nota que explique lo que hace una sección determinada del programa, o bien un aviso
para finalizar las tareas de programación incompletas.
El comentario se crea iniciando una línea con el carácter '. El ejemplo siguiente muestra cómo crear un comentario.
VB
' This is a comment. WOW!

También puede agregar comentarios al final de las líneas, así como usar el carácter '. Este procedimiento suele realizar para
proporcionar comentarios sobre líneas individuales de código, como se ve en el ejemplo siguiente.
VB
MsgBox("Hello World!") ' This line causes a message box to appear.

Al igual que con los comentarios de una única línea, el programa omite todo lo que vaya después del carácter ' de esa línea.
Utilizar comentarios para depuración
Otro uso común de los comentarios es evitar temporalmente que una línea de código se ejecute mientras depura su programa.
Por ejemplo, suponga que tenía una línea que mostraba un cuadro de mensaje.
VB
MsgBox("Hello World!")

Si quiere ejecutar el programa sin mostrar esa línea, pero no desea eliminarla permanentemente, utilice el carácter del
comentario (') para ocultarla temporalmente de su programa, tal y como se muestra a continuación.
VB
' MsgBox("Hello World!")

Como todo lo que va después del carácter ' se omite, el programa se ejecutará sin ejecutar esa línea. Puede quitar el carácter '
después y se mostrará el cuadro de mensaje.
¡Inténtelo!
Para insertar comentarios
1. En el menú Archivo, elija Nuevo proyecto.
2. En el cuadro de diálogo Nuevo proyecto, en el panel Plantillas, haga clic en Aplicación para Windows.
3. En el cuadro Nombre, escriba Comments y, a continuación, haga clic en Aceptar.
Se abrirá un nuevo proyecto de formularios Windows Forms.
4. Haga doble clic en el formulario para abrir el Editor de código.
5. En el controlador del evento Form1_Load, escriba el siguiente código.
VB
' This code will cause two message boxes to appear
MsgBox("This is Message Box 1") ' Display Message Box 1
MsgBox("This is Message Box 2") ' Display Message Box 2

6. Presione F5 para ejecutar el programa.


El programa se inicia y se muestran los dos cuadros de mensaje de uno en uno.
7. En el menú Depurar, elija Detener depuración para finalizar el programa.
8. En el Editor de código, agregue un carácter de comentario (') a la primera línea del cuadro de mensaje, para que se lea lo
siguiente.
VB
' MsgBox("This is MessageBox 1") ' Ignore Message Box 1

9. Presione F5 para ejecutar el programa.


Observe que esta vez el programa omite la primera línea del cuadro de mensaje y sólo se muestra el segundo cuadro de
mensaje.
Pasos siguientes
En esta lección, obtuvo información sobre cómo utilizar los comentarios para crear notas en su código y volver inactivas
temporalmente líneas de código individuales. Con esta información finalizan las lecciones sobre la depuración. En el conjunto
siguiente de lecciones, obtendrá información sobre cómo utilizar una base de datos para almacenar y recuperar información
para el programa.
Siguiente lección: Administrar registros: utilizar datos en un programa
Vea también
Conceptos
Comentarios en código
Otros recursos
¿Qué salió mal? Encontrar y corregir errores mediante depuración
Conceptos del lenguaje Visual Basic

Administrar registros: utilizar datos en un programa


La mayoría de los programas utiliza los datos de una forma u otra. Por ejemplo, en una lección anterior, especificó datos en
forma de números; esos datos se utilizaron en un cálculo con el resultado devuelto en un cuadro de mensajes.
En programas muy simples, los datos se representan como campos dentro del programa. Sin embargo, para programas más
complejos, los datos se almacenan en una estructura separada del programa, denominada base de datos.
En este conjunto de lecciones, aprenderá a crear una base de datos y a utilizarla para mostrar y actualizar datos de los
programas.
En esta sección
Almacenar y obtener acceso a datos
Crear la primera base de datos
Obtener la información necesaria: conectarse a una base de datos existente
Mostrar información al usuario: mostrar datos en la interfaz de usuario
Agregar o modificar registros: actualizar datos
Secciones relacionadas
Paseo con guía por Visual Basic
Conceptos del lenguaje Visual Basic

Almacenar y obtener acceso a datos


En esta lección, aprenderá a utilizar una base de datos para almacenar datos y tener acceso a ellos.
Los datos son un concepto central en programación. La mayoría de los programas utilizan datos de una manera u otra. Por
ejemplo, en una lección anterior, escribió datos en forma de números; después se utilizaron esos datos en un cálculo y se
devolvieron en un cuadro de mensaje.
En programas muy simples, los datos se representan como campos dentro del programa. Sin embargo, para programas más
complejos, los datos se almacenan en una estructura separada del programa, denominada base de datos.
¿Qué es una base de datos?
Una base de datos es una colección de datos, almacenados en un archivo independiente del programa. Los datos almacenados
en una base de datos pueden ser de muchos tipos distintos: texto, números, imágenes y otros. Pueden conectarse distintos
programas a la misma base de datos para ver y actualizar los datos que contiene.
Una base de datos se divide generalmente en una o más tablas. Una tabla es una colección de registros relacionados. Por
ejemplo, si utilizó una base de datos que contenía los datos de un negocio pequeño, debería tener una tabla que representara
los productos, otra tabla para los pedidos y otra para los clientes.

Cada tabla se organiza en una cuadrícula de columnas y filas. Las columnas representan las categorías de los datos de un
registro y las filas representan los registros individuales. Por ejemplo, en la ilustración anterior, la tabla Orders contiene una
fila o registro separado que representa cada pedido y columnas que representan el producto pedido, junto con la cantidad y el
precio.
Introducción a los datos
Para tener acceso a los datos de una base de datos del programa, debe tener primero una base de datos. Con Visual Basic,
podrá crear fácilmente su propia base de datos o utilizar una base de datos creada por otra persona.
Con Visual Basic Express puede tener acceso a dos tipos diferentes de bases de datos: bases de datos de Microsoft SQL Server
o de Microsoft Access. Para el propósito de estas lecciones, se utilizará una base de datos de SQL Server.
Cuando tenga una base de datos, puede conectarla al programa utilizando un objeto llamado DataSet y, a continuación,
conectar los campos o controles de un formulario a los datos de la base de datos utilizando una técnica llamada enlace de
datos.
Cuando un campo del programa, como un control TextBox , se enlaza a una columna de una tabla de base de datos, se
pueden mostrar los datos de esa columna en el cuadro de texto, modificarlos en dicho cuadro de texto y guardarlos en la base
de datos, o bien escribirlos en un nuevo registro y agregarlos a la base de datos.
Aunque esto puede sonar complicado, en realidad no es difícil. Las herramientas de base de datos de Visual Basic facilitan el
trabajo con los datos, como verá en las siguientes lecciones.
Pasos siguientes
En esta lección, aprendió lo que es una base de datos y cómo se relaciona con el programa. En la siguiente lección, aprenderá a
crear una base de datos que puedan utilizar los programas que esté creando.
Nota
Para crear y tener acceso a una base de datos de SQL Server con Visual Basic Express, también debe instalar SQL Server Expr
ess. Se instala de manera predeterminada cuando se instala Visual Basic Express; sin embargo, si eligió no instalarlo, deberá
hacerlo para poder continuar con la siguiente lección.

Siguiente lección: Crear la primera base de datos


Vea también
Otros recursos
Administrar registros: utilizar datos en un programa
Paseo con guía por Visual Basic
Conceptos del lenguaje Visual Basic

Crear la primera base de datos


En esta lección, aprenderá a crear una base de datos que utilizará en lecciones posteriores para crear un programa de libreta
de direcciones.
En la lección anterior, aprendió que una base de datos se puede utilizar para almacenar y recuperar datos para los programas
de Visual Basic. Primero, debe tener una base de datos a la cual tener acceso. Si bien se puede utilizar una base de datos
existente, para estas lecciones aprenderá a crear una nueva base de datos mediante Visual Database Tools, que se incluye en
Visual Basic.
Requisitos previos
Para crear y tener acceso a una base de datos de SQL Server con Visual Basic Express, también debe instalar SQL Server
Express. Éste se instala de manera predeterminada durante la instalación de Visual Basic Express, sin embargo, si decidió no
instalarlo, deberá hacerlo antes de continuar.
Inténtelo
Para crear una base de datos
1. En el menú Archivo, seleccione Nuevo proyecto.
2. En el cuadro de diálogo Nuevo proyecto, en el panel Plantillas, haga clic en Aplicación para Windows.
3. En el cuadro Nombre, escriba FirstDatabase y haga clic en Aceptar.
Se abre un nuevo proyecto de formularios Windows Forms.
4. En el menú Proyecto, elija Agregar nuevo elemento.
5. En el cuadro de diálogo Agregar nuevo elemento, seleccione Base de datos SQL.
6. En el cuadro Nombre, escriba FirstDatabase y haga clic en Agregar.
Se iniciará el Asistente para la configuración de orígenes de datos.
7. En el Asistente para la configuración de orígenes de datos, haga clic en Cancelar.
Se agregará una nueva base de datos, FirstDatabase.mdf, al proyecto y aparecerá en el Explorador de soluciones.
Agregar una tabla
Como puede ver en el procedimiento anterior, crear una base de datos es fácil. En este punto, la base de datos no es útil,
puesto que no contiene datos. En el siguiente procedimiento, se agregará una tabla a la base de datos, en este caso, una tabla
para almacenar información de direcciones.
Inténtelo
Para agregar una tabla a la base de datos
1. En el menú Ver, seleccione Explorador de base de datos.
2. En el Explorador de base de datos, expanda el nodo (haga clic en el signo más) FirstDatabase.mdf y seleccione el
nodo Tables.
3. En el menú Datos, elija Agregar nueva Tabla.
Se abrirá una ventana del Diseñador de tablas.
4. En la ventana Propiedades, seleccione Nombre y escriba Addresses.
5. En la ventana del Diseñador de tablas, seleccione el campo Nombre de columna y escriba FirstName.
6. Seleccione el campo Tipo de datos y seleccione nvarchar (50) de la lista desplegable; se activará automáticamente la
columna AllowNulls.
Ahora se ha definido la primera columna en la nueva tabla.
Repita los dos pasos anteriores para agregar cuatro columnas más con los siguientes valores:
a. Nombre de columna: LastName, Tipo de datos: nvarchar(50)
b. Nombre de columna: StreetAddress, Tipo de datos: nvarchar(50)
c. Nombre de columna: City, Tipo de datos: nvarchar(50)
d. Nombre de columna: Phone, Tipo de datos: nvarchar(50)
7. En el menú Archivo, elija Guardar direcciones.
Agregar una clave
Ahora tiene una tabla en la base de datos que puede utilizar para almacenar datos de nombres, direcciones y teléfonos para la
libreta de direcciones. El siguiente paso es: agregar una clave para evitar registros duplicados.
Una columna clave, también conocida como una clave principal, designa una columna o columnas en la tabla como un valor
único. Sólo puede haber una fila en la tabla que contenga este valor; si intenta escribir una segunda fila con el mismo valor
recibirá un error.
En el caso de la tabla Addresses, designe las columnas FirstName y LastName como clave principal, si bien puede conocer
varias personas con el mismo nombre o apellido, es improbable que conozca dos personas con ambos.
Inténtelo
Para agregar una clave a la tabla
1. En el Diseñador de tablas, desactive la casilla de verificación Permitir valores nulos para las filas Nombre y Apellido
2. Seleccione las filas Nombre y Apellido.
Sugerencia
Puede hacer clic en el cuadrado gris a la izquierda del campo Nombre, presionar la tecla CTRL y hacer clic en la fila Las
tName para seleccionar ambos.

3. En el menú Diseñador de tablas, elija Establecer clave principal.


Aparecerá un pequeño símbolo de llave a la izquierda de cada fila.
4. En el menú Archivo, elija Guardar direcciones.
Agregar datos
Ahora tiene una base de datos que contiene una tabla única, Addresses. Por supuesto, una base de datos no es muy útil a
menos que contenga datos. En el siguiente procedimiento, se agregarán algunos datos a la tabla Addresses. Si desea, puede
sustituir los nombres y las direcciones de las personas que conoce por aquellos proporcionados en el ejemplo.
Inténtelo
Para agregar datos a la tabla
1. En el Explorador de base de datos, expanda el nodo Tables, seleccione el nodo Direcciones y, a continuación en el
menú Datos, elija Mostrar datos de tabla.
Se abrirá una ventana de tabla de datos.
2. En la ventana de tabla de datos, seleccione el campo Nombre y escriba Samantha.
Nota
Observe que cuando selecciona el campo por primera vez, aparece el valor NULL en cada campo; null es un término de
la base de datos que significa que el campo está vacío.

3. Seleccione el campo LastName y escriba Smith.


4. Seleccione el campo Dirección y escriba 123 45th Ave. E.

5. Seleccione el campo City y escriba Seattle.


6. Seleccione el campo Phone, escriba 2065550100 y presione la tecla TAB.
Ahora ha definido el primer registro en la tabla Addresses.
Repita los cinco pasos anteriores para agregar dos registros más con los siguientes valores:
a. FirstName: Michael, LastName: Alexander, StreetAddress: 789 W. Capital Way, City: Tacoma, Phone:
2065550101.

b. FirstName: Andrea, LastName: Dunker, StreetAddress: 722 Moss Bay Blvd, City: Kirkland, Phone: 2065550102.

7. En el menú Archivo, seleccione Guardar todo para guardar el proyecto y la base de datos.
Según ha escrito los datos, quizá haya observado un pequeño icono de lápiz junto a los datos, que desaparece al utilizar la
tecla TAB para moverse a la fila siguiente. El icono de lápiz significa que los datos no se han guardado en la base de datos.
Cuando se desplaza fuera de la fila en la que está escribiendo los datos, los datos de la fila completa se guardan
automáticamente en la base de datos.
Pasos siguientes
En esta lección, aprendió a crear una base de datos, agregar una tabla de base de datos y luego a agregar registros a la tabla en
el IDE. En la siguiente lección, aprenderá a utilizar una base de datos en el programa.
Próxima lección: Obtener la información necesaria: conectarse a una base de datos existente.
Vea también
Tareas
Almacenar y obtener acceso a datos
Otros recursos
Administrar registros: utilizar datos en un programa
Paseo con guía por Visual Basic
Conceptos del lenguaje Visual Basic

Obtener la información necesaria: conectarse a una base de


datos existente
En esta lección, obtendrá información sobre cómo conectar su programa a una base de datos existente.
La conexión a una base de datos existente es un procedimiento muy sencillo. Puede utilizar las herramientas visuales de Visual
Basic Express para explorar la base de datos y agregar una copia local al proyecto. En esta lección, creará un nuevo proyecto y
lo conectará a la base de datos Addresses que creó en la lección anterior.
¡Inténtelo!
Para conectar a una base de datos existente
1. En el menú Archivo, elija Nuevo proyecto.
2. En el cuadro de diálogo Nuevo proyecto, en el panel Plantillas, haga clic en Aplicación para Windows.
3. En el cuadro Nombre, escriba Addresses y haga clic en Aceptar.
Se abrirá un nuevo proyecto de formularios Windows Forms.
4. En el Explorador de soluciones, seleccione el nodo FirstDatabase.mdf.
5. En la ventana Propiedades, seleccione la propiedad Copiar en el directorio de resultados y cambie el valor a Copiar
si es posterior.
6. En el Explorador de soluciones, haga clic en la ficha Orígenes de datos .
7. En la ventana Orígenes de datos, seleccione Agregar nuevo origen de datos.
Se abrirá el Asistente para la configuración de orígenes de datos.
8. Seleccione Base de datos y, a continuación, haga clic en Siguiente.
9. Haga clic en el botón Nueva conexión.
Se abrirá el cuadro de diálogo Agregar conexión.
10. En el cuadro de diálogo Agregar conexión, si Origen de datos no es Archivo de base de datos de Microsoft SQL
Server (cliente SQL), haga clic en el botón Cambiar y seleccione Archivo de base de datos de Microsoft SQL, en el
cuadro de diálogo Cambiar origen de datos. Haga clic en Aceptar.
11. Haga clic en el botón Examinar, desplácese a la ubicación donde guardó la base de datos FirstDatabase.mdf y haga clic
en Abrir.
12. Haga clic en Aceptar para cerrar el cuadro de diálogo y, a continuación, en el Asistente para la configuración de
orígenes de datos, haga clic en Siguiente. Si se le pide copiar el archivo de datos en su proyecto, haga clic en Sí.
13. En la página siguiente del asistente, estará seleccionada la casilla de verificación Sí, guardar la conexión como. Haga
clic en Siguiente para continuar.
14. En la página Elija los objetos de base de datos, expanda el nodo Tablas y, a continuación, active la casilla de
verificación de la tabla Addresses.
15. Haga clic en Finalizar para finalizar.
Se ha agregado un archivo de base de datos local a su proyecto. Observe que se ha agregado un objeto
FirstDatabaseDataSet a la ventana Orígenes de datos.

16. En el menú Archivo, elija Guardar todo para guardar el proyecto.


Pasos siguientes
En esta lección, obtuvo información sobre cómo agregar una base de datos local al proyecto. En la lección siguiente, obtendrá
información sobre cómo crear una interfaz de usuario para mostrar los registros de la base de datos.
Siguiente lección: Mostrar información al usuario: mostrar datos en la interfaz de usuario
Vea también
Tareas
Crear la primera base de datos
Otros recursos
Administrar registros: utilizar datos en un programa
Paseo con guía por Visual Basic
Conceptos del lenguaje Visual Basic

Mostrar información al usuario: mostrar datos en la interfaz de


usuario
En esta lección, obtendrá información sobre cómo crear una interfaz de usuario básica para ver los datos en su base de datos
local.
Ahora que ha creado una conexión a un archivo de base de datos local, el paso siguiente es crear una interfaz de usuario para
mostrar los datos. La programación subyacente a la recuperación de los datos de una base de datos y mostrarlos en una
interfaz de usuario es muy complicada. Afortunadamente, Visual Basic crea y configura automáticamente los objetos de datos
necesarios para usted, por lo que todo lo que necesita hacer es seleccionar y colocar los objetos. En esta lección, obtendrá
información sobre cómo crear un sencillo formulario de visualización de datos.
¡Inténtelo!
Para crear un formulario de acceso a datos
1. Abra el proyecto Addresses de la lección anterior. Si no lo ha finalizado todavía, vaya a
Obtener la información necesaria: conectarse a una base de datos existente y finalice la lección antes de continuar.
2. En el Explorador de soluciones, seleccione Form1.vb y, a continuación, en el menú Ver elija Diseñador.
3. En el Explorador de soluciones, haga clic en la ficha Orígenes de datos .
En la ventana Orígenes de datos, explore sin prisas los nodos FirstDatabaseDataSet y Addresses. Puede expandir el
nodo Addresses para ver todos los campos individuales de la tabla.
4. Arrastre el nodo Addresses desde la ventana Orígenes de datos al formulario.
Nota
Algunos controles se agregan automáticamente al formulario, además se crean y se agregan varios componentes a la
bandeja de componentes debajo del formulario. Hay un control DataGridView que mostrará las filas y columnas de la
tabla y un control para la exploración (AddressesBindingNavigator). Asimismo, Visual Basic crea componentes que s
e conectan a la base de datos, administran la recuperación y actualización de datos y almacenan los datos en un DataS
et local (AddressesBindingSource, AddressesTableAdapter y FirstDatabaseDataSet, respectivamente).

5. Seleccione el control AddressesDataGridView y en la ventana Propiedades, establezca la propiedad Dock en Fill


(haga clic en el botón central).
De esta forma, se expandirá la cuadrícula para rellenar el formulario.
6. Presione F5 para ejecutar el programa.
Los datos de la tabla Addresses se muestran en el control DataGridView en el formulario. Puede utilizar los controles en
BindingNavigator para desplazarse entre las filas e incluso agregar o eliminar registros. También puede realizar
cambios en los registros modificando los datos mostrados en la cuadrícula, pero estos cambios no se guardarán a menos
que haga clic en el icono Guardar datos. En el tema siguiente, obtendrá información sobre cómo guardar los cambios
automáticamente en el conjunto de datos.
Pasos siguientes
En esta lección, obtuvo información sobre cómo utilizar las herramientas visuales de Visual Basic para crear una interfaz de
usuario básica orientada a datos. En la lección siguiente, obtendrá información sobre cómo crear un formulario de entrada de
datos y cómo guardar los cambios en la base de datos.
Siguiente lección: Agregar o modificar registros: actualizar datos
Vea también
Tareas
Obtener la información necesaria: conectarse a una base de datos existente
Otros recursos
Administrar registros: utilizar datos en un programa
Paseo con guía por Visual Basic
Conceptos del lenguaje Visual Basic

Agregar o modificar registros: actualizar datos


En esta lección, obtendrá información sobre cómo crear un formulario de entrada de datos para actualizar los datos de la base
de datos local.
En las últimas tres lecciones, ha creado una base de datos, ha agregado un archivo de base de datos al proyecto y ha creado
una interfaz de usuario básica. Como ha podido observar, pudo hacer cambios en los datos de las direcciones e incluso
agregar nuevos registros, pero si cerró el programa y lo inició de nuevo, se han perdido esos cambios.
En realidad estos datos eran una copia de los datos de la base de datos, almacenados en un DataSet local. Cada vez que el
programa se inicia, DataSet recupera sus datos de la base de datos. Cuando los cambios se realizan en el DataSet, no se
realizan en la base de datos.
Si hace clic en el botón Guardar en el control AddressesBindingNavigator, todos los cambios se copian del DataSet a la
base de datos. Como es probable que el usuario no siempre recuerde guardar el trabajo, agregue código para guardar los
cambios automáticamente a la base de datos al cerrar el programa. Mientras esté en él, también podrá cambiar la interfaz de
usuario para facilitar la entrada de datos.
¡Inténtelo!
Para actualizar su archivo de base de datos local
1. Abra el proyecto Addresses de la lección anterior. Si no ha finalizado todavía la lección anterior, vaya a
Mostrar información al usuario: mostrar datos en la interfaz de usuario y complete los pasos.
2. En el Explorador de soluciones, seleccione Form1 y, a continuación, en el menú Ver elija Diseñador.
3. En el formulario, seleccione el control AddressesDatGridView y elimínelo.
4. En el Explorador de soluciones, haga clic en la ficha Orígenes de datos .
5. En la ventana Orígenes de datos, seleccione la tabla Direcciones y, a continuación, seleccione Detalles en la lista
desplegable.
6. Arrastre el nodo Addresses desde la ventana Orígenes de datos al nuevo formulario.
Se agregan controles TextBox por cada campo de la tabla, junto con los controles Label que describen los campos.
7. Haga doble clic en el formulario para abrir el Editor de código.
8. En la lista desplegable Eventos, haga clic en FormClosing.
9. En el controlador de eventos Form1_FormClosing, escriba el siguiente código:

Me.AddressesBindingSource.EndEdit()
Me.AddressesTableAdapter.Update(Me.FirstDatabaseDataSet.Addresses)

Este código hace que AddressesTableAdapter copie cualquier cambio del conjunto de datos a la base de datos local.
10. Presione F5 para ejecutar el programa.
Realice cambios en parte de los datos o agregue un nuevo registro y, a continuación, cierre el formulario.
11. Presione F5 de nuevo. Los cambios deben haberse guardado.
En este conjunto de lecciones, obtuvo información sobre cómo crear una base de datos y un programa para tener acceso a la
base de datos. En el conjunto siguiente de lecciones, obtendrá información sobre clases, las guías para objetos que puede
reutilizar en sus programas.
Siguiente lección: Programar con objetos: utilizar clases
Vea también
Tareas
Obtener la información necesaria: conectarse a una base de datos existente
Otros recursos
Administrar registros: utilizar datos en un programa
Paseo con guía por Visual Basic
Conceptos del lenguaje Visual Basic

Programar con objetos: utilizar clases


Como aprendió en una lección anterior, los programas de Visual Basic se generan con objetos como formularios y controles.
Los objetos también pueden representar cosas reales como una persona, un equipo, o incluso algo más abstracto como una
cuenta bancaria.
Una clase es simplemente una representación de un tipo de objeto; piense en él como el plano del objeto. Así como un solo
plano puede utilizarse para generar varios edificios, una clase puede utilizarse para crear múltiples copias de un objeto.
En las lecciones siguientes, aprenderá a utilizar las clases en los programas de Visual Basic.
En esta sección
¿Qué es una clase?
Modelar un objeto en una situación real: crear la primera clase
Agregar propiedades a una clase
Agregar métodos a una clase
Probar una clase
Generar una clase en una clase existente: utilización de la herencia
Realizar seguimientos: utilizar colecciones para administrar varios objetos
Secciones relacionadas
Información detallada: crear varias versiones del mismo método con sobrecarga
Información detallada: reemplazar miembros
Información detallada: utilizar un bucle For Each...Next en una colección
Conceptos del lenguaje Visual Basic

¿Qué es una clase?


En esta lección, aprenderá a utilizar clases para representar objetos en sus programas.
Como aprendió en una lección anterior, los programas de Visual Basic se crean con objetos como formularios o controles. Los
objetos también se pueden utilizar para representar cosas reales como personas, equipos informáticos o incluso algo más
abstracto, como una cuenta bancaria.
Una clase es simplemente una representación de un tipo de objeto; piense en ella como un plano que describe el objeto. Así
como un plano puede utilizarse para construir varios edificios, una clase puede utilizarse para crear varias copias de un objeto.
Aunque puede que no se haya dado cuenta, ya ha utilizado las clases. Por ejemplo, el control TextBox lo define una clase
TextBox, que define su aspecto y sus funciones. Cada vez que arrastra un control TextBox a un formulario, realmente está
creando una nueva instancia de la clase TextBox.
Cada control TextBox es una copia exacta, aunque distinta, de la clase que lo define, la clase TextBox. Puesto que cada objeto
es una "instancia" independiente de una clase, la acción de crear una clase se denomina creación de instancias.
Hasta ahora ha agregado los controles TextBox a su formulario arrastrándolos desde el Cuadro de herramientas, pero
también puede crear instancias de un objeto TextBox en su código si utiliza la palabra clave New.
VB
Dim Textbox1 As New TextBox

Obtendrá más información sobre crear y utilizar las clases en las lecciones siguientes.
¿Qué hay dentro de una clase?
En una lección anterior, Información detallada: comprender propiedades, métodos y eventos, aprendió que todos los objetos
tienen propiedades que describen sus atributos, métodos que definen sus acciones y eventos que definen sus respuestas.
Igualmente, la clase que define un objeto tiene sus propias propiedades, métodos y eventos ( a veces llamados miembros) que
se pasan a todas las instancias de esa clase.
Por ejemplo, una clase que representa una cuenta bancaria podría tener propiedades como AccountNumber o AccountBalance,
métodos como CalculateInterest y eventos como BalanceChanged. Una vez creada la instancia de un objeto de cuenta
bancaria, puede tener acceso a sus propiedades, métodos y eventos de igual manera que si se tratara de un objeto TextBox.
Algunos miembros de una clase son privados; sólo se tiene acceso a ellos mediante código dentro de la clase. Por ejemplo, una
clase de cuenta bancaria puede tener un método para calcular un saldo. Lo lógico es permitir que un programa lea ese balance
pero no que pueda cambiarlo directamente.
Puede ocultar los miembros de una clase si los declara como Private o exponerlos si los declara como Public. También puede
permitir el acceso a una propiedad y a la vez impedir que el programa cambie su valor declarándolo como ReadOnly. El
código siguiente muestra cómo podría ser una clase BankAccount.
VB
Class BankAccount
Private AccountNumber As String
Private AccountBalance As Decimal
Public Sub UpdateBalance()
' add code to recalculate balance.
End Sub
ReadOnly Property Balance() As Decimal
Get
Return AccountBalance
End Get
End Property
End Class

Pasos siguientes
En este tema, obtuvo información sobre los fundamentos de clases y sobre cierta terminología nueva. En la lección siguiente
aprenderá a crear una clase.
Próxima lección: Modelar un objeto en una situación real: crear la primera clase
Vea también
Conceptos
Información detallada: comprender propiedades, métodos y eventos
Clases: como planos para objetos
Otros recursos
Programar con objetos: utilizar clases
Conceptos del lenguaje Visual Basic

Modelar un objeto en una situación real: crear la primera clase


En esta lección, aprenderá a crear una clase mediante un proyecto de bibliotecas de clase.
En la lección anterior, aprendió que las clases se pueden utilizar como un plano que modela objetos del mundo real. Una de las
mejores razones para utilizar clases es que una vez que ha creado una clase para cierto tipo de objeto, puede reutilizar esa
clase en cualquier proyecto.
Por ejemplo, muchos de los programas que escribe pueden involucrar personas: un programa de libreta de direcciones para
mantener seguimiento de amigos, un programa de administrador de contactos para los contactos comerciales o un programa
para realizar un seguimiento de empleados. Aunque los programas pueden ser considerablemente diferentes, los atributos
que se aplican a una persona serían los mismos. Cada persona tiene nombre, edad, dirección y número de teléfono.
En esta lección y las siguientes creará una clase que representa una persona; puede guardar esta clase y utilizarla en otros
programas que escriba en el futuro.
Las clases se pueden crear de tres maneras: como parte del código en un módulo de formulario en un proyecto de aplicación
para Windows, como un módulo de clase separado agregado a un proyecto de aplicación para Windows o como un
proyecto de bibliotecas de clase independiente.
Crear clases
Habrá observado que en algunas de las lecciones anteriores al hacer doble clic en un formulario y abrir el Editor de código se
veía algo parecido a lo siguiente.

Public Class Form1


Private Sub Form1_Load...

End Sub
End Class

Correcto, el formulario realmente es una clase, marcada por instrucciones Class y End Class y cualquier código que se haya
escrito entre las dos instrucciones es parte de la clase. Aunque de manera predeterminada un módulo de formulario contiene
sólo una clase única, puede crear módulos adicionales agregando código debajo de la instrucción End Class, tal como se
ilustra a continuación:

Public Class Form1


' Form1 code here
End Class
Public Class MyFirstClass
' Your class code here
End Class

La desventaja de crear clases de esta manera es que sólo están disponibles dentro del proyecto donde se crearon. Si desea
compartir una clase con otros proyectos, puede colocarla en un módulo de clase.
Módulos de clase
Un módulo de clase es un archivo de código separado, que contiene una o más clases. Como es un archivo independiente, se
puede reutilizar en otros proyectos. Los módulos de clase se pueden crear de dos maneras: como un módulo agregado a un
proyecto de aplicación para Windows o como un proyecto de bibliotecas de clase independiente.
Puede agregar un nuevo módulo de clase a un proyecto existente seleccionando Clase en el cuadro de diálogo Agregar
nuevo elemento, disponible en el menú Proyecto. Para trabajar en esta unidad de lecciones, creará un proyecto de
bibliotecas de clase independiente.
Inténtelo
Para crear un proyecto de biblioteca de clases
1. En el menú Archivo, elija Nuevo proyecto.
2. En el panel Plantillas, del cuadro de diálogo Nuevo proyecto, haga clic en Biblioteca de clases.
3. En el cuadro Nombre, escriba Persons y haga clic en Aceptar.
Se abrirá un nuevo proyecto de bibliotecas de clase y el Editor de código mostrará el módulo de clase Class1.vb.
4. En el Explorador de soluciones, haga clic con el botón secundario del mouse en Class1.vb y seleccione Cambiar
nombre y, a continuación, cambie el nombre a Persons.vb.
Observe que el nombre en el Editor de código también cambia a Persons.vb.
5. En el menú Archivo, elija Guardar todo.
6. En el cuadro de diálogo Guardar proyecto, haga clic en Guardar.
Sugerencia
En lugar de guardar el proyecto en la ubicación predeterminada, podría crear un directorio en el cual puede almacenar
todas sus clases para reutilizarlas. Puede especificar esa carpeta en el campo Location del cuadro de diálogo Guardar
proyecto antes de guardar.

De momento, mantenga el proyecto abierto, lo utilizará en la lección siguiente.


Pasos siguientes
En esta lección, aprendió a crear un módulo de clase. Sin embargo, una clase vacía no es muy útil, en la siguiente lección,
aprenderá a agregar propiedades a las clases.
Siguiente lección: Agregar propiedades a una clase
Vea también
Tareas
Cómo: Agregar nuevos elementos de proyecto
Conceptos
¿Qué es una clase?
Otros recursos
Programar con objetos: utilizar clases
Conceptos del lenguaje Visual Basic

Agregar propiedades a una clase


En esta lección, aprenderá a agregar propiedades a la clase que creó en la lección anterior.
En una lección anterior, Información detallada: comprender propiedades, métodos y eventos, aprendió que todos los objetos
tienen atributos y que las propiedades representan atributos. En esa lección creó una clase Persons que representa una
persona; las personas tienen atributos como el nombre y la edad, por lo que la clase Persons necesita propiedades que
representen dichos atributos.
Se pueden agregar propiedades a una clase de dos maneras: como campo o como procedimiento de propiedad. También
puede determinar cómo funciona una propiedad utilizando los modificadores Public, ReadOnly o WriteOnly.
Campos y procedimientos de propiedad
Los campos son variables públicas dentro de una clase que se pueden establecer o leer desde fuera de la clase. Resultan de
utilidad para propiedades que no se tienen que validar, por ejemplo, un valor Boolean (True o False). En el caso de la clase
Persons, se puede tener una propiedad Boolean denominada Alive, que especifica si una persona está viva o muerta. Puesto
que hay sólo dos valores posibles, un campo funciona bien para esta propiedad.
Para agregar un campo a una clase, el código podría ser como el que sigue.
VB
Public Alive As Boolean

La mayoría de las propiedades, sin embargo, son más complejas; en la mayor parte de los casos deseará utilizar un
procedimiento de propiedad para agregar una propiedad a una clase. Los procedimientos de propiedad tienen tres partes: una
declaración de una variable privada para almacenar el valor de la propiedad; un procedimiento Get que expone el valor; y un
procedimiento Set que, como indica su nombre, establece el valor.
Por ejemplo, un procedimiento de propiedad para una propiedad Name de la clase Persons podría ser como el que sigue.
VB
Private nameValue As String
Public Property Name() As String
Get
Name = nameValue
End Get
Set(ByVal value As String)
nameValue = value
End Set
End Property

La primera línea de código declara una variable String privada, nameValue que almacenará el valor de la propiedad. El
procedimiento de propiedad en sí comienza con Public Property y termina con End Property.
El procedimiento Get contiene el código que se ejecutará cuando desee leer su valor; por ejemplo, si lee la propiedad
Persons.Name, el código devolverá el valor almacenado en la variable nameValue.

El procedimiento Set contiene código que se utiliza para asignar un nuevo valor a la variable nameValue usando un valor
pasado como argumento value. Por ejemplo, si escribió el código Persons.Name = "John", el valor String John se pasará
como argumento value; el código del procedimiento Set lo asignará a la variable NameValue para su almacenamiento.
Se preguntará por qué complicarse tanto en lugar de utilizar un campo que represente la propiedad Name. En el mundo real,
hay ciertas reglas para los nombres: por ejemplo, los nombres normalmente no contienen números. Puede agregar código al
procedimiento Set para comprobar el argumento value y devolver un error si contiene números.
En el siguiente procedimiento, se agregará un campo y tres propiedades a la clase Persons.
Inténtelo
Para agregar propiedades a la clase
1. Abra el proyecto Persons que creó en la lección anterior. Si no lo guardó, primero deberá regresar a la lección anterior,
Modelar un objeto en una situación real: crear la primera clase, y realizar hasta el final los procedimientos de esa lección.
2. En el Explorador de soluciones, seleccione Persons.vb y en el menú Ver seleccione Código.
3. Agregue el siguiente código de declaración debajo de la línea Public Class Persons.

VB
Private firstNameValue As String
Private middleNameValue As String
Private lastNameValue As String
Public Alive As Boolean

4. Agregue los siguientes procedimientos de propiedad debajo del código de declaración.


VB
Public Property FirstName() As String
Get
FirstName = firstNameValue
End Get
Set(ByVal value As String)
firstNameValue = value
End Set
End Property

Public Property MiddleName() As String


Get
MiddleName = middleNameValue
End Get
Set(ByVal value As String)
middleNameValue = value
End Set
End Property

Public Property LastName() As String


Get
LastName = lastNameValue
End Get
Set(ByVal value As String)
lastNameValue = value
End Set
End Property

5. En el menú Archivo, elija Guardar todo para guardar el trabajo.


Propiedades de sólo lectura y escritura
A veces una propiedad se establece una vez y no cambia nunca durante la ejecución del programa. Por ejemplo, una propiedad
que representa un número de empleado nunca debe cambiar, de modo que otro programa lo puede leer, pero no se permitirá
que ese programa cambie su valor.
La palabra clave ReadOnly se utiliza para especificar que un valor de propiedad se puede leer pero no modificar. Si intenta
asignar un valor a una propiedad ReadOnly , aparecerá un error en el Editor de código.
Para crear una propiedad de sólo lectura, deberá crearse un procedimiento de propiedad con un procedimiento Get, pero sin
procedimiento Set, tal como se muestra a continuación.
VB
Private IDValue As Integer
ReadOnly Property ID() As Integer
Get
ID = IDValue
End Get
End Property

De igual forma, la palabra clave WriteOnly permite establecer un valor de propiedad pero no permite que se lea; por ejemplo,
no permite que otros programas lean una propiedad de contraseña. Puede utilizar ese valor para realizar acciones dentro de la
clase, pero deseará que siga siendo privado.
Para crear una propiedad de sólo escritura, se creará una propiedad con un procedimiento Set pero sin procedimiento Get, tal
como se muestra a continuación.
VB
Private passwordValue As String
WriteOnly Property Password() As String
Set(ByVal value As String)
passwordValue = value
End Set
End Property

Los procedimientos de propiedad ReadOnly y WriteOnly también son útiles cuando se desea tomar un valor de propiedad y
convertirlo en un valor diferente. Por ejemplo, pensemos en la edad de una persona. A diferencia del nombre, la edad cambia
con el tiempo, si ha asignado la edad a una clase y la lee de nuevo un año después, sería incorrecta.
En la clase Persons, puede evitarlo agregando dos propiedades: una propiedad WriteOnly BirthYear que representa el año de
nacimiento, que nunca cambia, y una propiedad ReadOnly Age que devuelve un valor calculando la diferencia entre el año en
curso y el año de nacimiento.
Inténtelo
Para agregar propiedades ReadOnly y WriteOnly a la clase
1. Agregue el siguiente código de declaración debajo de las otras declaraciones en la parte superior del módulo de clase.
VB
Private birthYearValue As Integer

2. Agregue los siguientes procedimientos de propiedad debajo del código de declaración.


VB
WriteOnly Property BirthYear() As Integer
Set(ByVal value As Integer)
birthYearValue = value
End Set
End Property

ReadOnly Property Age() As String


Get
Age = My.Computer.Clock.LocalTime.Year - birthYearValue
End Get
End Property

3. En el menú Archivo, elija Guardar todo para guardar el trabajo.


Pasos siguientes
En esta lección, obtuvo información sobre las propiedades y las diferentes maneras de agregarlas a la clase. En la siguiente
lección, aprenderá a agregar métodos a la clase para que pueda realizar acciones.
Siguiente lección: Agregar métodos a una clase
Vea también
Tareas
Modelar un objeto en una situación real: crear la primera clase
Conceptos
Comparación de procedimientos de propiedades y campos
Otros recursos
Programar con objetos: utilizar clases
Conceptos del lenguaje Visual Basic

Agregar métodos a una clase


En esta lección, aprenderá a agregar métodos a una clase para que pueda realizar acciones.
En una lección anterior, Información detallada: comprender propiedades, métodos y eventos, aprendió que la mayoría de los
objetos tiene acciones que puede realizar; estas acciones se conocen como métodos. La clase Persons que creó en la lección
Modelar un objeto en una situación real: crear la primera clase representa a una persona. Hay muchas acciones que pueden
realizar las personas y para la clase Persons, esas acciones se pueden expresar como métodos de clase.
Métodos de una clase
Los métodos de una clase son simplemente procedimientos Sub o Function declarados dentro de la clase. Por ejemplo, una
clase Account puede tener un procedimiento Sub denominado Recalculate, que actualizará el balance o un procedimiento
Function denominado CurrentBalance para devolver el último balance. El código para declarar esos métodos puede ser
similar al siguiente.
VB
Public Sub Recalculate()
' add code to recalculate the account.
End Sub
Public Function CurrentBalance(ByVal AccountNumber As Integer) As Double
' add code to return a balance.
End Function

Si bien la mayoría de los métodos de clase son públicos, también se pueden agregar métodos que sólo la clase en sí puede
utilizar. Por ejemplo, la clase Persons puede tener su propia función para calcular la edad de una persona. Al declarar la
función como Private, no se puede ver o llamar desde fuera de la clase.
El código para una función privada puede ser similar al siguiente:
VB
Private Function CalcAge(ByVal year As Integer) As Integer
CalcAge = My.Computer.Clock.LocalTime.Year - year
End Function

Más tarde puede cambiar el código que calcula el valor CalcAge y el método seguirá funcionando bien sin cambiar ningún
código que utilice el método. Ocultar el código que realiza el método se conoce como encapsulación.
En la clase Persons, se creará un método público que devuelve un nombre completo y una función privada para calcular la
edad.
Inténtelo
Para agregar un método a la clase
1. Abra el proyecto Persons que creó en la lección anterior. Si no lo guardó, primero deberá regresar a la lección anterior,
Agregar propiedades a una clase y finalizar los procedimientos.
2. En el Explorador de soluciones, seleccione Persons.vb y, en el menú Ver, elija Código.
3. Agregue el siguiente código a continuación de los procedimientos de propiedad.
VB
Public Function FullName() As String
If middleNameValue <> "" Then
FullName = firstNameValue & " " & middleNameValue & " " _
& lastNameValue
Else
FullName = firstNameValue & " " & lastNameValue
End If
End Function

VB
Private Function CalcAge(ByVal year As Integer) As Integer
CalcAge = My.Computer.Clock.LocalTime.Year - year
End Function

4. Modifique el código en el procedimiento de la propiedad Age para utilizar la función privada.


VB
ReadOnly Property Age() As String
Get
' Age = My.Computer.Clock.LocalTime.Year - birthDateValue
Age = CalcAge(birthYearValue)
End Get
End Property

5. En el menú Archivo, elija Guardar todo para guardar el trabajo.


Pasos siguientes
En esta lección, aprendió a agregar métodos públicos y privados a una clase. Puede obtener más información sobre los
métodos en Información detallada: crear varias versiones del mismo método con sobrecarga o puede continuar con la
siguiente lección y aprender a utilizar y probar la clase que creó.
Siguiente lección: Probar una clase
Vea también
Tareas
Agregar propiedades a una clase
Otros recursos
Programar con objetos: utilizar clases
Conceptos del lenguaje Visual Basic

Información detallada: crear varias versiones del mismo


método con sobrecarga
En esta lección, aprenderá a agregar a la clase varias versiones de un método.
En la lección anterior, aprendió a agregar métodos a la clase Persons. A veces hay casos en los que un método único no sirve;
por ejemplo, es probable que deba pasar diferentes tipos de datos al método en distintas situaciones o quizá desee devolver
formatos diferentes como resultado.
Se pueden crear varias versiones de un método mediante una técnica llamada sobrecarga. Cuando una clase tiene más de un
método con el mismo nombre pero con un conjunto de argumentos diferente, el método se sobrecarga.
Sobrecarga
Para crear un método sobrecargado, agregue dos o más procedimientos Sub o Function a la clase, cada uno con el mismo
nombre. En las declaraciones de procedimiento, el conjunto de argumentos para cada procedimiento debe ser distinto o se
producirá un error.
El siguiente ejemplo muestra un método con dos sobrecargas, una que acepta una String y la otra que acepta un Integer
como argumento.
VB
Public Sub TestFunction(ByVal input As String)
MsgBox(input)
End Sub
Public Sub TestFunction(ByVal input As Integer)
MsgBox(CStr(input))
End Sub

Si se debe llamar a este método desde el código y pasarle una cadena, se ejecutaría la primera sobrecarga y un cuadro de
mensaje mostraría la cadena; si se le pasó un número, se ejecutaría la segunda sobrecarga y el número se convertiría en una
cadena y aparecería en el cuadro de mensaje.
Puede crear tantas sobrecargas como sea necesario y cada una de ellas puede contener un número diferente de argumentos.
En la clase Persons, se agregará un método con dos sobrecargas para devolver la inicial del segundo nombre de una persona;
una sólo con la inicial y la otra con la inicial seguida por un punto.
Inténtelo
Para crear un método sobrecargado
1. Abra el proyecto Persons que creó en la lección anterior. Si no lo guardó, regrese a la lección anterior,
Agregar métodos a una clase y finalice los procedimientos.
2. En el Explorador de soluciones, seleccione Persons.vb y, en el menú Ver, elija Código.
3. Agregue el siguiente código debajo de los métodos existentes.
VB
Public Function MiddleInitial() As String
MiddleInitial = Left$(middleNameValue, 1)
End Function

Public Function MiddleInitial(ByVal period As Boolean) As String


MiddleInitial = Left$(middleNameValue, 1) & "."
End Function

4. En el menú Archivo, elija Guardar todo para guardar el trabajo.


Pasos siguientes
En esta lección, aprendió a crear un método sobrecargado. En la lección siguiente, aprenderá a utilizar la clase que creó en un
proyecto de prueba.
Siguiente lección: Probar una clase
Vea también
Tareas
Agregar métodos a una clase
Conceptos
Consideraciones sobre la sobrecarga de procedimientos
Otros recursos
Programar con objetos: utilizar clases
Paseo con guía por Visual Basic
Conceptos del lenguaje Visual Basic

Probar una clase


En esta lección, aprenderá a crear una instancia de una clase para probar la clase.
En lecciones anteriores, creó una clase Persons y le otorgó propiedades y métodos. Lo que ha hecho hasta ahora es agregar
código, ahora es el momento de utilizar la clase Persons y asegurarse de que funcione según lo esperado.
Crear una instancia de una clase
Aunque es posible que no se haya dado cuenta, ha estado utilizando clases en muchas de las lecciones anteriores. Los
formularios y controles son en realidad clases; cuando arrastra un control Button a un formulario, está creando realmente una
instancia de la clase Button.
También puede crear instancias de cualquier clase en el código utilizando una declaración con la palabra clave New. Por
ejemplo, para crear una nueva instancia de la clase Button, agregará el código siguiente.
VB
Dim aButton As New Button

Para utilizar y probar la clase Persons, debe crear primero un proyecto de prueba y agregar una referencia al módulo de clase.
Inténtelo
Para crear un proyecto de prueba para la clase
1. Abra el proyecto Persons que creó en la lección anterior. Si no lo guardó, primero deberá volver a la lección anterior,
Agregar métodos a una clase y finalizar los procedimientos.
2. En el menú Archivo, elija Agregar y seleccione Nuevo proyecto.
3. En el cuadro de diálogo Nuevo proyecto, en el panel Plantillas, haga clic en Aplicación para Windows.
4. En el cuadro Nombre, escriba PersonsTest y haga clic en Aceptar.
5. En el Explorador de soluciones, seleccione el proyecto PersonsTest y en el menú Proyecto, elija Establecer como
proyecto de inicio.
6. En el Explorador de soluciones, seleccione el proyecto PersonsTest y en el menú Proyecto, elija Agregar referencia.
Se abrirá el cuadro de diálogo Agregar referencia.
7. Haga clic en la ficha Proyectos, seleccione Personas y haga clic en Aceptar.
8. Haga doble clic en el formulario para abrir el Editor de código y escriba la siguiente declaración justo debajo de la línea
Public Class Form1.

VB
Dim person1 As New Persons.Persons

Esto declara una nueva instancia de la clase Persons. Se preguntará por qué tuvo que escribir dos veces Persons: la
primera instancia es el módulo de clase Persons.vb; la segunda instancia es la clase Persons dentro de ese módulo.
9. En el menú Archivo, elija Guardar todo.
Probar una clase
El siguiente paso es agregar una interfaz de usuario y un código que utilice la clase Persons. Agregará cuadros de texto donde
el usuario especificará los valores para cada una de las propiedades (excepto la propiedad de sólo lectura Age), una casilla de
verificación para el campo Alive y botones para probar cada uno de los métodos públicos.
Inténtelo
Para probar la clase
1. En el Explorador de soluciones, seleccione Form1 y en el menú Ver, seleccione Diseñador.
2. En el Cuadro de herramientas, arrastre cuatro controles TextBox, un control CheckBox y dos controles Button al
formulario.
3. Seleccione el primer control Button y, a continuación, en la ventana Propiedades, establezca su propiedad Text en
Update.

4. Seleccione el segundo control Button y, a continuación, en la ventana Propiedades, establezca su propiedad Text en
Full Name.

5. Haga doble clic en el primer botón (Update) para abrir el Editor de código y en el controlador de eventos
Button1_Click, agregue el siguiente código.
VB
With person1
.FirstName = Textbox1.Text
.MiddleName = Textbox2.Text
.LastName = Textbox3.Text
.BirthYear = Textbox4.Text
.Alive = CheckBox1.Checked
End With

Observe que cuando escribe, se muestra una lista que contiene todos los miembros de la clase Persons. Puesto que se
agregó como una referencia, IntelliSense muestra la información sobre la clase tal como lo haría para cualquier otra
clase.
6. En el controlador de eventos Button2_Click, agregue el siguiente código.
VB
' Test the FullName method.
MsgBox(person1.FullName)

' test the Age property and CalcAge method.


MsgBox(CStr(person1.Age) & " years old")

' Test the Alive property.


If person1.Alive = True Then
MsgBox(person1.FirstName & " is alive")
Else
MsgBox(person1.FirstName & " is no longer with us")
End If

7. Presione F5 para ejecutar el proyecto y mostrar el formulario.


a. En el primer cuadro de texto, escriba su nombre.
b. En el segundo cuadro de texto, escriba su segundo nombre.
c. En el tercer cuadro de texto, escriba su apellido.
d. En el cuarto cuadro de texto, escriba el año de cuatro dígitos en el que nació (por ejemplo, 1983).
e. Después, active la casilla de verificación.
8. Haga clic en el botón Actualizar para establecer las propiedades de la clase y haga clic en el botón Full Name.
Se mostrarán tres cuadros de mensaje, con su nombre completo, edad y estado.
9. En el menú Archivo, elija Guardar todo.
Probar los métodos sobrecargados
Si finalizó la lección opcional Información detallada: crear varias versiones del mismo método con sobrecarga, también
deseará probar los métodos sobrecargados que agregó a la clase Persons. Si no finalizó la lección, puede regresar y hacerlo
ahora o puede omitir el siguiente procedimiento.
Inténtelo
Para probar los métodos sobrecargados
1. En el Explorador de soluciones, seleccione Form1 y en el menú Ver, seleccione Diseñador.
2. En el Cuadro de herramientas, arrastre dos controles más Button al formulario.
3. Seleccione el tercer control Button y en la ventana Propiedades establezca su propiedad Text en With.
4. Seleccione el cuarto control Button y en la ventana Propiedades establezca su propiedad Text en Without.
5. Haga doble clic en el primer botón (With) para abrir el Editor de código y escriba el siguiente código en el controlador de
eventos Button3_Click.
VB
MsgBox(person1.FirstName & " " & person1.MiddleInitial(True) & _
" " & person1.LastName)

Observe que cuando escribe, se muestra una lista que contiene todos los miembros de la clase Persons. Puesto que se
agregó como una referencia, IntelliSense muestra la información sobre la clase tal como lo haría para cualquier otra
clase.
6. En el controlador de eventos Button4_Click, agregue el siguiente código.
VB
MsgBox(person1.FirstName & " " & person1.MiddleInitial & _
" " & person1.LastName)

7. Presione F5 para ejecutar el proyecto y mostrar el formulario.


a. En el primer cuadro de texto, escriba su nombre.
b. En el segundo cuadro de texto, escriba su segundo nombre.
c. En el tercer cuadro de texto, escriba su apellido.
d. En el cuarto cuadro de texto, escriba el año de cuatro dígitos en el que nació (por ejemplo, 1983).
e. Después, active la casilla de verificación.
8. Haga clic en el botón Actualizar para establecer las propiedades de la clase y haga clic en el botón With.
Aparecerá un cuadro de mensaje que muestra su nombre con un punto después de la inicial del segundo nombre
9. Haga clic en el botón Without.
Aparecerá un cuadro de mensaje que muestra su nombre sin un punto después de la inicial del segundo nombre
10. En el menú Archivo, elija Guardar todo.
Pasos siguientes
En esta lección, aprendió a crear un proyecto de prueba y a utilizarlo para probar las propiedades y los métodos de la clase. En
la siguiente lección, aprenderá a utilizar la herencia para crear una clase basada en una clase existente.
Siguiente lección: Generar una clase en una clase existente: utilización de la herencia.
Vea también
Tareas
Agregar métodos a una clase
Información detallada: crear varias versiones del mismo método con sobrecarga
Conceptos del lenguaje Visual Basic

Generar una clase en una clase existente: utilización de la


herencia
En esta lección, aprenderá a utilizar la herencia para crear una clase basada en una clase existente.
Muchos objetos de la vida real tienen atributos y comportamientos en común, por ejemplo, todos los automóviles tienen
ruedas y motores, y pueden avanzar y detenerse (es de esperar). Sin embargo, algunos automóviles tienen atributos que no
son comunes, por ejemplo, un descapotable tiene una parte superior que se puede mover y bajar electrónica o manualmente.
Si se creó un objeto para representar un automóvil, se pueden incluir propiedades y métodos para todos los atributos y
comportamientos comunes, pero no se podrían agregar atributos como la cubierta de un descapotable, puesto que dicho
atributo no es generalizable a todos los automóviles.
Mediante el uso de la herencia, se puede crear una clase "descapotable" que deriva de la clase automóvil. Ésta hereda todos los
atributos de la clase automóvil y puede agregar los atributos y comportamientos que son únicos de un auto descapotable.
Heredar a partir de una clase existente
La instrucción Inherits se utiliza para declarar una nueva clase, denominada clase derivada, basada en una clase existente
conocida como clase base. Las clases derivadas heredan todas las propiedades, los métodos, los eventos, los campos y las
constantes definidos en la clase base. El siguiente código muestra la declaración para una clase derivada.
VB
Class DerivedClass
Inherits BaseClass
End Class

Se pueden crear instancias de la nueva clase DerivedClass, se puede tener acceso a sus propiedades y métodos como
BaseClass y se pueden agregar nuevas propiedades y métodos que son específicos de la nueva clase. Para ver un ejemplo,
observe la clase Persons que creó en las lecciones anteriores.
Suponga que desea una clase que represente jugadores de béisbol: los jugadores del béisbol tienen todos los atributos
definidos en la clase Persons, pero también tienen atributos únicos, como su número y posición. En lugar de agregar esas
propiedades a la clase Persons, se creará una nueva clase derivada que se hereda de Persons, a la que se agregan las nuevas
propiedades.
Inténtelo
Para crear una clase derivada
1. Abra el proyecto Persons que creó en la lección anterior. Si no lo guardó, regrese a Probar una clase y finalice los
procedimientos.
2. En el Explorador de soluciones, seleccione el nodo del proyecto Persons.
3. En el menú Proyecto, elija Agregar clase.
4. En el cuadro de diálogo Agregar nuevo elemento, escriba Players en el cuadro Nombre, a continuación, haga clic en
Agregar.
Se agregará un nuevo módulo de clase al proyecto.
5. En el Editor de código, agregue lo siguiente justo debajo de la línea Public Class Players.

VB
Inherits Persons

6. Agregue el siguiente código para definir dos nuevas propiedades.


VB
Private numberValue As Integer
Private positionValue As String
Public Property Number() As Integer
Get
Number = numberValue
End Get
Set(ByVal value As Integer)
numberValue = value
End Set
End Property
Public Property Position() As String
Get
Position = positionValue
End Get
Set(ByVal value As String)
positionValue = value
End Set
End Property

7. En el menú Archivo, elija Guardar todo.


Probar la clase Players
Habrá creado ahora una clase Players derivada de la clase Persons. En el procedimiento siguiente, creará un nuevo programa
para probar la clase Players.
Para crear un proyecto de prueba para la clase
1. En el menú Archivo, elija Agregar y, después, seleccione Nuevo proyecto.
2. En el cuadro de diálogo Agregar nuevo proyecto, en el panel Plantillas, seleccione Aplicación para Windows.
3. En el cuadro Nombre, escriba PlayerTest y haga clic en Aceptar.
4. Se agregará un nuevo proyecto de formularios Windows Forms al Explorador de soluciones y se mostrará un nuevo
formulario.
5. En el Explorador de soluciones, seleccione el proyecto PlayerTest y en el menú Proyecto, elija Establecer como
proyecto de inicio.
6. En el Explorador de soluciones, seleccione el proyecto PlayerTest y en el menú Proyecto, elija Agregar referencia.
Se abrirá el cuadro de diálogo Agregar referencia.
7. Haga clic en la ficha Proyectos, elija Persons y haga clic en Aceptar.
8. Haga doble clic en el formulario para abrir el Editor de código y escriba la siguiente declaración justo debajo de la línea
Public Class Form1.

VB
Dim player1 As New Persons.Players
Dim player2 As New Persons.Players

9. Esto declara dos nuevas instancias de la clase Players.


10. En el menú Archivo, elija Guardar todo.
Para probar la clase derivada
1. En el Explorador de soluciones, seleccione Form1 en el proyecto PlayerTest y en el menú Ver, elija Código.
2. En el Editor de código, agregue el siguiente código al procedimiento de evento Form1_Load.
VB
With player1
.FirstName = "Andrew"
.LastName = "Cencini"
.Number = 43
.Position = "Shortstop"
End With
With player2
.FirstName = "Robert"
.LastName = "Lyon"
.Number = 11
.Position = "Catcher"
End With

3. En el Explorador de soluciones, seleccione Form1 en el proyecto PlayerTest y en el menú Ver, elija Diseñador.
4. En el Cuadro de herramientas, arrastre dos controles Button al formulario.
5. Seleccione el primer control Button y en la ventana Propiedades establezca su propiedad Text en At Bat.

6. Seleccione el segundo control Button y en la ventana Propiedades establezca su propiedad Text en On Deck.

7. Haga doble clic en el primer botón (At Bat) para abrir el Editor de código y escriba el siguiente código en el controlador
de eventos Button1_Click.
VB
MsgBox(player1.Position & " " & player1.FullName & ", #" & _
CStr(player1.Number) & " is now at bat.")

Observe que está utilizando el método FullName que se heredó de la clase base Persons.
8. En el controlador de eventos Button2_Click, agregue el siguiente código.
VB
MsgBox(player2.Position & " " & player2.FullName & ", #" & _
CStr(player2.Number) & " is on deck.")

9. Presione F5 para ejecutar el programa. Haga clic en cada botón para ver los resultados.
10. En el menú Archivo, elija Guardar todo.
Pasos siguientes
En esta lección, aprendió a heredar desde una clase existente y a ampliar la clase derivada. Puede obtener más información
sobre herencia en Información detallada: reemplazar miembros o puede continuar con la siguiente lección, que trata sobre
colecciones.
Siguiente lección: Realizar seguimientos: utilizar colecciones para administrar varios objetos
Vea también
Conceptos
Fundamentos de la herencia
Conceptos del lenguaje Visual Basic

Información detallada: reemplazar miembros


En esta lección, aprenderá a reemplazar un miembro de una clase derivada.
En la lección anterior, aprendió a heredar de una clase base y a extender la clase derivada con nuevas propiedades. Además de
agregar nuevas propiedades o métodos a una clase derivada, también es posible que desee cambiar, o reemplazar, el
comportamiento de propiedades o métodos existentes.
Por ejemplo, podría crear una clase Truck que se derive de una clase Car con un método StartEngine. Si el objeto Truck tiene
un motor diesel, el proceso de encendido del motor puede ser distinto al de un objeto Car; en este caso, puede que desee
reemplazar el método StartEngine para que se adapte mejor al objeto Truck.
Reemplazar propiedades y métodos
De manera predeterminada, no se pueden reemplazar las propiedades ni los métodos en una clase. Para permitir que una
clase derivada reemplace una propiedad o un método, se debe marcar como reemplazable declarándolo con la palabra clave
Overridable.
Public Overridable Property EngineType As String
Public Overridable Sub StartEngine(ByVal EngineType As String)

Al heredar de una clase base, las propiedades y los métodos que están marcados como Overridable se pueden utilizar tal
como están o se pueden modificar para satisfacer las necesidades del usuario declarándolos con la palabra clave Overrides.
Public Overrides Property EngineType As String
Public Overrides Sub StartEngine(ByVal EngineType As String)

En la clase Players que se creó en la lección anterior, puede que se desee reemplazar el método FullName para incluir el
número del jugador y eliminar el código que devuelve un segundo nombre.
Inténtelo
Para reemplazar el método FullName
1. Abra el proyecto Persons que creó en la lección anterior. Si no lo guardó, regrese a la lección anterior,
Generar una clase en una clase existente: utilización de la herencia y complete los procedimientos.
2. En el Explorador de soluciones, seleccione el nodo Persons.vb y, en el menú Ver, elija Código.
3. En el Editor de código, modifique la declaración del método FullName de la siguiente manera.
VB
Public Overridable Function FullName() As String

4. En el Explorador de soluciones, seleccione el nodo Players.vb y, en el menú Ver, elija Código.


5. En el Editor de código, agregue el siguiente código a la clase.
VB
Public Overrides Function FullName() As String
FullName = FirstName & " " & LastName & ", #" & numberValue
End Function

6. En el Explorador de soluciones, seleccione el nodo Form1.vb en el proyecto PlayerTest y, a continuación, en el menú


Ver, elija Código.
7. En el Editor de código, modifique el código de evento Button1_Click de la siguiente manera.
VB
MsgBox(player1.Position & " " & player1.FullName & _
" is now at bat.")
8. Modifique el código de evento Button2_Click de la siguiente manera.
VB
MsgBox(player2.Position & " " & player2.FullName & _
" is on deck.")

9. Presione F5 para ejecutar el programa y haga clic en cada botón para mostrar los resultados.
Observe que los resultados son los mismos que antes, aun cuando ahora se está utilizando el método FullName
reemplazado.
10. En el menú Archivo, elija Guardar todo.
Pasos siguientes
En esta lección, aprendió a reemplazar un método. En la siguiente lección, aprenderá a utilizar las colecciones para administrar
grupos de objetos similares.
Siguiente lección: Realizar seguimientos: utilizar colecciones para administrar varios objetos
Vea también
Tareas
Generar una clase en una clase existente: utilización de la herencia
Referencia
Overridable
Overrides
Conceptos del lenguaje Visual Basic

Realizar seguimientos: utilizar colecciones para administrar


varios objetos
En esta lección, aprenderá a utilizar una colección para administrar grupos de objetos.
En una lección anterior, aprendió a utilizar matrices para administrar grupos de variables. Aunque las matrices también se
utilizan para administrar grupos de objetos, Visual Basic tiene un tipo de objeto especial denominado colección, el cual se
puede utilizar para almacenar y recuperar grupos de objetos similares.
Al igual que una matriz, cada elemento de un objeto Collection tiene un índice que se puede utilizar para identificar dicho
elemento. Además, cada elemento de un objeto Collection tiene una clave, un valor String que se puede utilizar para
identificar el elemento. La ventaja de utilizar una clave es que no necesita recordar el índice de un elemento; en su lugar, puede
referirse a él a través de un nombre significativo.
Crear una colección
Las colecciones son útiles cuando el programa utiliza varias instancias de la misma clase. Por ejemplo, examine la clase
Players que creó en una lección anterior. Es probable que necesite varios objetos Players para representar un equipo de
béisbol.
El primer paso para crear una colección es crear una instancia de un objeto Collection, tal como se muestra en la siguiente
declaración.
VB
Dim baseballTeam As New Collection

Cuando se crea el objeto Collection, se puede utilizar el método Add para agregarle elementos y el método Remove para
eliminarlos. Cuando agregue elementos, primero especifique el elemento que se va a agregar y luego el valor String que se va
a utilizar como clave.
VB
baseballTeam.Add(playerObject, "Player's Name")

Al quitar un elemento, utilice la clave para especificar el elemento que se va a quitar.


VB
baseballTeam.Remove("Player's Name")

En el siguiente procedimiento, se agregarán dos nuevos objetos Players y, a continuación, se creará una colección team y se le
agregarán los objetos Players, mediante la propiedad Position como una clave.
Inténtelo
Para crear una colección de objetos
1. Abra el proyecto Persons que creó en la lección anterior. Si no lo guardó, regrese a la lección anterior,
Generar una clase en una clase existente: utilización de la herencia y finalice los procedimientos.
2. En el Explorador de soluciones, en el proyecto PlayerTest, seleccione el nodo Form1.vb y en el menú Ver, seleccione
Código.
3. En el Editor de código, agregue lo siguiente a la sección de declaraciones (debajo de la declaración para player2).
VB
Dim player3 As New Persons.Players
Dim player4 As New Persons.Players
Dim team As New Collection
4. Agregue el siguiente código al procedimiento de evento Form1_Load.
VB
With player3
.FirstName = "Eduardo"
.LastName = "Saavedra"
.Number = 52
.Position = "First Base"
End With

With player4
.FirstName = "Karl"
.LastName = "Jablonski"
.Number = 22
.Position = "Pitcher"
End With

team.Add(player1, player1.Position)
team.Add(player2, player2.Position)
team.Add(player3, player3.Position)
team.Add(player4, player4.Position)

5. En el Explorador de soluciones, en el proyecto PlayerTest, seleccione el nodo Form1.vb. A continuación, en el menú


Ver, elija Diseñador.
6. En el Cuadro de herramientas, arrastre un control ComboBox hasta el formulario.
7. En la ventana Propiedades, seleccione la propiedad Items y haga clic en el botón ....
8. En el Editor de la colección de cadenas, escriba lo siguiente y haga clic en Aceptar.
Catcher

First Base

Pitcher

Shortstop

9. Haga doble clic en el control ComboBox para abrir el Editor de código y escriba el siguiente código en el controlador de
eventos ComboBox1_SelectedIndexChanged.

Dim SelectedPlayer As Persons.Players


SelectedPlayer = team(ComboBox1.SelectedItem)
MsgBox("Playing " & ComboBox1.SelectedItem & " is " & _
SelectedPlayer.FullName & "!")

10. Presione F5 para ejecutar el programa. Seleccione una posición de la lista desplegable, aparecerá en un cuadro de
mensaje el jugador para esa posición.
Pasos siguientes
En esta lección, aprendió a utilizar un objeto Collection para administrar un grupo de objetos. En este momento, puede
aprender más sobre las colecciones en Información detallada: utilizar un bucle For Each...Next en una colección o puede
continuar con el siguiente grupo de lecciones y aprender a crear sus propios controles.
Siguiente lección: Objetos visibles: crear el primer control de usuario
Vea también
Tareas
Información detallada: utilizar un bucle For Each...Next en una colección
Información detallada: reemplazar miembros
Generar una clase en una clase existente: utilización de la herencia
Conceptos
Clase de colección de Visual Basic
Otros recursos
Objetos visibles: crear el primer control de usuario
Conceptos del lenguaje Visual Basic

Información detallada: utilizar un bucle For Each...Next en una


colección
En esta lección, obtendrá información sobre cómo utilizar un bucle For Each...Next para recorrer una colección.
En una lección anterior, obtuvo información sobre cómo utilizar un bucle For...Next para ejecutar un bloque de código un
determinado número de veces. Los objetos de la colección de Visual Basic admiten un tipo especial de bucle, el bucle For
Each...Next, que se utiliza para ejecutar un bloque de código para cada elemento de la colección, en lugar de ejecutar el
bloque un número fijo de veces.
Agregar un bucle For Each... Next
En la lección anterior, agregó manualmente al control ComboBox los valores de la propiedad Position de los objetos Players
en la colección de equipos. Aunque este sistema funciona para el ejemplo, no es el procedimiento recomendado, pues cada vez
que agregue un nuevo jugador, también tendrá que actualizar la colección Items del control ComboBox.
Una manera mucho más adecuada consiste en agregar los valores Position a la colección Items recorriendo la colección team
con un bucle For Each...Next.
En un bucle For...Next, primero debe declarar una variable de contador; con un bucle For Each...Next primero debe declarar
una variable de objeto. El código siguiente muestra un bucle For Each...Next.
VB
Dim player As Persons.Players
For Each player In team
ComboBox1.Items.Add(player.Position)
Next

En este caso, no importa cuántos Players tenga, el método ComboBox1.Items.Add se ejecutará una vez para cada objeto
Players de la colección equipos y el valor Position se agregará a la lista.

Inténtelo
Para recorrer una colección
1. Abra el proyecto Persons de la lección anterior. Si no lo ha acabado, regrese a la lección anterior,
Realizar seguimientos: utilizar colecciones para administrar varios objetos, y complete los procedimientos.
2. En el Explorador de soluciones, seleccione el nodo Form1.vb en el proyecto PlayerTest y, a continuación, en el menú
Ver, elija Diseñador.
3. Seleccione el control ComboBox. A continuación, en la ventana Propiedades, seleccione la propiedad Items y haga clic
en el botón ....
4. En el Editor de la colección de cadenas, elimine las cuatro entradas existentes y, a continuación, haga clic en Aceptar.
5. Haga doble clic en el formulario para abrir el Editor de código.
6. En el Editor de código, agregue lo siguiente a la sección de declaraciones (debajo de la declaración para team).
VB
Dim player As Persons.Players
For Each player In team
ComboBox1.Items.Add(player.Position)
Next

7. Presione F5 para ejecutar el programa. Seleccione una posición de la lista desplegable. El jugador de esa posición se
mostrará en un cuadro de mensaje.
Pasos siguientes
En esta lección, ha utilizado un bucle For Each...Next en una colección. En las lecciones siguientes, creará otro tipo de objeto:
un control de usuario.
Siguiente lección: Objetos visibles: crear el primer control de usuario
Vea también
Tareas
Realizar seguimientos: utilizar colecciones para administrar varios objetos
Referencia
Instrucción For Each...Next (Visual Basic)
Otros recursos
Programar con objetos: utilizar clases
Conceptos del lenguaje Visual Basic

Objetos visibles: crear el primer control de usuario


En el conjunto de lecciones anteriores ha aprendido a trabajar con clases. Las clases que ha creado se pueden reutilizar en
otros programas, de modo que no tiene que escribir una y otra vez el mismo código.
Los controles también son clases que se pueden reutilizar en varios proyectos. Probablemente se encontrará diseñando la
misma interfaz una y otra vez, por ejemplo, agregando controles TextBox para especificar el nombre y los apellidos y, a
continuación, agregando código para combinarlos en un nombre completo. ¿No sería más práctico evitar todo ese trabajo
extra?
De ahí proceden los controles de usuario. Imagine que un control de usuario es como una clase para crear objetos visibles
(controles personalizados que podrá reutilizar igual que los controles que se incluyen en Visual Basic 2005). La mayoría de los
controles de usuario son controles compuestos, es decir, controles que se componen de uno o varios controles estándar de
Visual Basic 2005.
En las lecciones siguientes, aprenderá a crear un control de usuario compuesto que puede reutilizar en otros programas.
En esta sección
Comprender el Diseñador de controles de usuario
Agregar controles al control de usuario
Agregar código al control de usuario
Probar un control de usuario
Secciones relacionadas
Información detallada: agregar propiedades con valores con nombre
Información detallada: personalizar el control de usuario
Conceptos del lenguaje Visual Basic

Comprender el Diseñador de controles de usuario


En esta lección, aprenderá a crear un control con el Diseñador de controles de usuario.
En el conjunto anterior de lecciones, aprendió a utilizar un proyecto de bibliotecas de clase para crear clases. Un control de
usuario simplemente es una clase que se puede ver. Exactamente igual que los controles estándar que vienen con Visual Basic
2005, los controles de usuario se puede colocar en formularios durante el diseño y aparecen al ejecutarse el programa.
Cuando diseña programas, organiza los controles y decide su apariencia en el diseñador de formularios. Hay también un
diseñador para los controles de usuario, el diseñador de controles de usuario, que le permite a usted, al desarrollador,
decidir la apariencia del control.
Crear controles de usuario
Un control de usuario es similar a cualquier otra clase, pero con la posibilidad agregada de poder colocarlo en el Cuadro de
herramientas y mostrarlo en un formulario. Donde un módulo de clase tiene sólo código, un módulo de control de usuario
tiene código y un diseñador. El Diseñador de controles de usuario es similar a un diseñador de formularios: tiene las
propiedades para controlar el aspecto y comportamiento del control de usuario.
Las maneras de crear controles de usuario son ligeramente distintas, en función de la versión de Visual Basic que esté
utilizando: Visual Basic 2005 tiene un tipo de proyecto de biblioteca de controles de Windows; en Visual Basic Express,
debe crear primero un proyecto de bibliotecas de clase y luego agregarlo a una plantilla de controles de usuario.
¡Inténtelo!
Para crear un control de usuario mediante Visual Basic Express
1. En el menú Archivo, haga clic en Nuevo proyecto.
2. En el panel Plantillas, del cuadro de diálogo Nuevo proyecto, haga clic en Biblioteca de clases y luego en Aceptar.
3. En el menú Proyecto, haga clic en Agregar control de usuario.
4. En el cuadro de diálogo Agregar nuevo elemento, seleccione Control de usuario.
5. En el cuadro Nombre, escriba NamesControl y haga clic en Agregar.
Se agregará una nueva plantilla Control de usuario al proyecto y se abrirá el Diseñador de controles de usuario.
6. En el Explorador de soluciones, haga clic con el botón secundario del mouse en Class1.vb y elija Suprimir, a
continuación, haga clic en Aceptar.
7. En el menú Archivo, haga clic en Guardar todo.
8. En el cuadro de diálogo Guardar proyecto, especifique NamesUserControl y haga clic en Guardar.

Para crear un control de usuario en Visual Studio 2005


1. En el menú Archivo, haga clic en Nuevo proyecto.
2. En el panel Plantillas, del cuadro de diálogo Nuevo proyecto, haga clic en Biblioteca de controles de Windows.
3. En el cuadro Nombre, escriba NamesControl y, a continuación, haga clic en Aceptar.
Se agregará una nueva plantilla Control de usuario al proyecto y se abrirá el Diseñador de controles de usuario.
4. En el menú Archivo, haga clic en Guardar todo.
5. En el cuadro de diálogo Guardar proyecto, especifique NamesUserControl y haga clic en Guardar.
Pasos siguientes
En esta lección, aprendió a crear un proyecto que tiene un control de usuario y a mostrar el Diseñador de controles de
usuario. Aunque no se utilizan mucho los controles en blanco, en la lección siguiente verá el modo de agregar controles al
control de usuario para crear la interfaz de usuario.
Próxima lección: Agregar controles al control de usuario
Vea también
Otros recursos
Objetos visibles: crear el primer control de usuario
Programar con objetos: utilizar clases
Paseo con guía por Visual Basic
Conceptos del lenguaje Visual Basic

Agregar controles al control de usuario


En esta lección aprenderá a agregar controles para crear un control de usuario compuesto.
Diseño de un control de usuario
Como se mencionó anteriormente, el tipo de control de usuario más común es un control compuesto, aquél que está formado
por uno o más controles de formularios Windows Forms estándar. Se pueden agregar controles a plantillas Control de
usuario arrastrándolos desde el Cuadro de herramientas hasta el Diseñador de controles de usuario, del mismo modo
que lo haría cuando diseña formularios.
Una vez que ha agregado un control, puede cambiar su tamaño y moverlo en el diseñador, asimismo, puede establecer sus
propiedades en la ventana Propiedades.
En este ejemplo, agregará un control Label para mostrar un nombre completo, y tres controles TextBox para especificar el
primer nombre, el segundo nombre y el apellido.
Inténtelo
Para agregar controles a un Control de usuario
1. Abra el proyecto NamesUserControl que creó en la lección anterior. Si no lo guardó, primero deberá regresar a la lección
anterior, Comprender el Diseñador de controles de usuario, y realizar hasta el final los procedimientos de esa lección.
2. En el Explorador de soluciones, seleccione NamesControl.vb y en el menú Ver seleccione Diseñador.
3. En el Cuadro de herramientas, arrastre un control Label al diseñador.
Sugerencia
El Cuadro de herramientas es más fácil de utilizar si mantiene la ventana abierta. Puede hacer esto haciendo clic en el
icono Ocultar automáticamente, que parece una chincheta.

4. En la ventana Propiedades, cambie la propiedad Name a FullName.


5. En el Cuadro de herramientas, arrastre tres controles Textbox al diseñador. Puede organizarlos como quiera.
6. En la ventana Propiedades, cambie las propiedades Name por FirstName, MiddleName y LastName.
7. En el menú Archivo, elija Guardar todo para guardar el trabajo.
Pasos siguientes
En esta lección, ha visto cómo agregar controles en el Diseñador de controles de usuario y establecer sus propiedades.
Ahora puede agregar código al control para que realmente realice una tarea útil. En la lección siguiente se muestra cómo
escribir el código que manejará el control de usuario para mostrar los nombres y el apellido; también se expondrán nuevas
propiedades.
Siguiente lección: Agregar código al control de usuario
Vea también
Tareas
Comprender el Diseñador de controles de usuario
Otros recursos
Objetos visibles: crear el primer control de usuario
Programar con objetos: utilizar clases
Paseo con guía por Visual Basic
Conceptos del lenguaje Visual Basic

Agregar código al control de usuario


En esta lección, aprenderá a agregar código al control de usuario para mostrar el nombre completo y exponer nuevas
propiedades.
Como los controles estándar, los controles de usuario tienen propiedades, métodos y eventos. Como desarrollador, escribirá
código para controlar los eventos del control y decidirá qué propiedades se expondrán al usuario del control.
Controlar eventos en un control de usuario
Para que el control de usuario sea de utilidad, tendrá que escribir algún código que controle los eventos del control. Un
procedimiento de control de eventos de un control de usuario no es distinto del que se escribe para un formulario o un
control.
En este ejemplo, escribirá un procedimiento de evento que actualizará la etiqueta FullName con el contenido de los cuadros
FirstName, MiddleName y LastName según escriba, con el controlador de eventos TextChanged.

Inténtelo
Para agregar código a un control de usuario
1. Abra el proyecto NamesUserControl que creó en la lección anterior. Si no lo guardó, primero deberá regresar a la lección
anterior, Comprender el Diseñador de controles de usuario, y realizar hasta el final los procedimientos de esa lección.
2. En el Explorador de soluciones, seleccione NamesControl.vb y en el menú Ver elija Código.
3. En el Editor de código, agregue el siguiente código para el controlador de eventos FirstName_TextChanged.

Private Sub FirstName_TextChanged(ByVal sender As System.Object, ByVal e As System.Eve


ntArgs) Handles FirstName.TextChanged, MiddleName.TextChanged, LastName.TextChanged
' Display the contents of the three text boxes in the label.
FullName.Text = FirstName.Text & " " & MiddleName.Text & " " & LastName.Text
End Sub

4. Presione F5 para ejecutar el programa. Se abrirá el UserControl TestContainer y se mostrará el control de usuario.
5. Escriba el nombre, segundo nombre y apellido en los tres cuadros de texto; según escriba, se mostrará el nombre en la
etiqueta FullName.
Si se fija en el código que ha especificado antes, observará que la cláusula Handles de la declaración controla el evento
TextChanged de los tres controles TextBox. No importa qué cuadro de texto escriba primero, siempre se actualizará la
etiqueta FullName según escriba.
Exponer las propiedades de un control de usuario
Las propiedades de los controles estándar permiten establecer y recuperar valores de un control en tiempo de diseño y en
tiempo de ejecución. También deseará que determinadas propiedades del control de usuario estén disponibles para que pueda
establecerlas en la ventana Propiedades durante el diseño y hacer referencia a ellas en el código.
Exponer propiedades en un control de usuario es muy similar a exponer propiedades en una clase, la diferencia principal es
que puede exponer también las propiedades de los controles contenidos en el control de usuario. Como sucede con las clases,
se declara una propiedad y se agrega código a los procedimientos Get y Set. Si expone una propiedad de un control
contenido, no tendrá que declarar una variable privada para almacenar el valor, la propiedad del control lo almacena
automáticamente.
Tal y como está ahora, no hay modo de recuperar el texto que se especifica en los controles FirstName, MiddleName y LastName
de la etiqueta FullName. Necesita exponer los valores como propiedades para que el control resulte útil. Dado que no desea
que el valor de la etiqueta FullName se modifique fuera de su propio código, deseará exponerlo como una propiedad de sólo
lectura.
Inténtelo
Para agregar propiedades
1. En el Editor de código, agregue el código siguiente para exponer los valores FirstName, MiddleName y LastName como
propiedades.

Property FirstNameText() As String


Get
Return FirstName.Text
End Get
Set(ByVal value As String)
FirstName.Text = value
End Set
End Property
Property MiddleNameText() As String
Get
Return MiddleName.Text
End Get
Set(ByVal value As String)
MiddleName.Text = value
End Set
End Property
Property LastNameText() As String
Get
Return LastName.Text
End Get
Set(ByVal value As String)
LastName.Text = value
End Set
End Property

2. Agregue el código siguiente para exponer el valor de la etiqueta FullName como una propiedad de sólo lectura.

ReadOnly Property FullNameText() As String


Get
Return FullName.Text
End Get
End Property

3. Presione F5 para ejecutar el programa.


4. En el UserControl TestContainer, desplácese a la parte inferior de la cuadrícula Propiedades y seleccione la propiedad
FirstNameText. Escriba su nombre y, a continuación, seleccione la propiedad FullNameText; el cuadro de texto
FirstName debería mostrar el nombre y la propiedad FullNameText debería coincidir.
Pruebe a cambiar algunas de las demás propiedades en la cuadrícula Propiedades y el propio control para ver cómo se
relacionan. Esto es lo que un usuario del control experimentará en tiempo de diseño.
5. En el menú Archivo, elija Guardar todo para guardar el trabajo.
Pasos siguientes
En esta lección, ha visto cómo controlar los eventos de un control de usuario y cómo exponer algunas de sus propiedades.
Puede obtener más información sobre las propiedades en Información detallada: agregar propiedades con valores con nombre
o puede continuar con la siguiente lección y aprender a utilizar la clase que creó.
Siguiente lección: Probar un control de usuario
Vea también
Tareas
Agregar controles al control de usuario
Otros recursos
Objetos visibles: crear el primer control de usuario
Programar con objetos: utilizar clases
Paseo con guía por Visual Basic
Conceptos del lenguaje Visual Basic

Probar un control de usuario


En esta lección, aprenderá a probar un control de usuario en otro proyecto y observar su comportamiento en tiempo de
ejecución.
Comportamiento en tiempo de ejecución
Una vez que ha terminado el control de usuario y probado su comportamiento en tiempo de diseño en TestContainer,
también deseará saber cómo se comporta cuando se utiliza en un programa. Visual Basic 2005 facilita la prueba del control de
usuario agregando un proyecto de aplicación para Windows.
El control de usuario aparece automáticamente en el Cuadro de herramientas y puede agregarlo a un formulario y
establecer sus propiedades igual que si se tratara de cualquier otro control.
Inténtelo
Para probar el control de usuario
1. Abra el proyecto NamesUserControl que creó en la lección anterior. Si no lo guardó, primero deberá regresar a la lección
anterior, Agregar código al control de usuario, y realizar hasta el final los procedimientos de esa lección.
2. En el menú Archivo, elija Agregar y haga clic en Nuevo proyecto.
3. En el cuadro de diálogo Agregar nuevo proyecto, seleccione Aplicación para Windows.
4. En el cuadro Nombre, escriba UserControlTest y haga clic en Aceptar.
Se agregará un nuevo proyecto en el Explorador de soluciones y se mostrará un nuevo formulario.
5. En el Explorador de soluciones, seleccione el proyecto UserControlTest y en el menú Proyecto, seleccione
Establecer como proyecto de inicio.
6. En el Cuadro de herramientas, seleccione NamesControl y arrástrelo hasta el formulario.
7. En la ventana Propiedades, establezca las propiedades FirstNameText, MiddleNameText y LastNameText que
correspondan a su nombre.
8. Presione F5 para ejecutar el programa. Cambie los nombres de los cuadros de texto para asegurarse de que la etiqueta
se actualiza correctamente.
9. En el menú Archivo, elija Guardar todo para guardar el trabajo.
Pasos siguientes
En esta lección, ha visto cómo se agrega el control de usuario a un formulario y su comportamiento en tiempo de ejecución. En
este momento, puede continuar aprendiendo sobre controles de usuario en
Información detallada: personalizar el control de usuario o puede continuar con el siguiente grupo de lecciones sobre gráficos.
Siguiente lección: Dibujar imágenes: utilizar gráficos
Vea también
Tareas
Agregar código al control de usuario
Otros recursos
Objetos visibles: crear el primer control de usuario
Programar con objetos: utilizar clases
Paseo con guía por Visual Basic
Conceptos del lenguaje Visual Basic

Información detallada: personalizar el control de usuario


En esta lección, obtendrá información sobre cómo personalizar el control de usuario para hacerlo más útil.
Agregar etiquetas
En la última lección, probó que el control de usuario NamesControl funcionaba debidamente. Quizá también haya pensado
posibles formas para mejorarlo. Por ejemplo, no resulta obvio qué nombre debe escribirse en qué cuadro de texto y no hay
modo de saber con certeza si los usuarios han especificado tres nombres.
Para que el control de usuario resulte de mayor utilidad, puede agregar etiquetas que identifiquen todos los cuadros de texto.
Podría establecer el texto para que las etiquetas indicaran "Nombre", "Segundo nombre" y "Apellido", pero, ¿qué sucede si
después decide que prefiere una "Inicial de segundo nombre"? Es preferible crear propiedades para el texto de etiqueta de
modo que pueda cambiar el texto en tiempo de diseño y dar un valor predeterminado a cada propiedad.
Inténtelo
Para personalizar el control de usuario
1. Abra el proyecto NamesUserControl que creó en la lección anterior. Si no lo guardó, primero deberá regresar a la lección
anterior, Probar un control de usuario, y realizar hasta el final los procedimientos de esa lección.
2. En el Explorador de soluciones, seleccione NamesControl.vb y en el menú Ver seleccione Diseñador.
3. En el Cuadro de herramientas, arrastre tres controles Label al diseñador y coloque uno sobre cada TextBox.
4. En el Explorador de soluciones, seleccione NamesControl.vb y en el menú Ver elija Código.
5. En el Editor de código, agregue el código siguiente para crear las propiedades para el texto de la etiqueta.

Private text1 As String = "First Name"


Property Label1Text() As String
Get
Return text1
End Get
Set(ByVal value As String)
text1 = value
Label1.Text = text1
End Set
End Property
Private text2 As String = "Middle Name"
Property Label2Text() As String
Get
Return text2
End Get
Set(ByVal value As String)
text2 = value
Label2.Text = text2
End Set
End Property
Private text3 As String = "Last Name"
Property Label3Text() As String
Get
Return text3
End Get
Set(ByVal value As String)
text3 = value
Label3.Text = text3
End Set
End Property
Observe que el código declara tres variables Private para el texto de etiqueta y que las declaraciones incluyen el valor
predeterminado que se va a mostrar.
6. En el Editor de código, seleccione (NamesControl Events) del cuadro de lista desplegable izquierdo y, a continuación,
seleccione el evento Load del cuadro de lista desplegable derecho.
7. Agregue el código siguiente al controlador de eventos NamesControl_Load.

' Initialize the three labels


Me.Label1.Text = Label1Text
Me.Label2.Text = Label2Text
Me.Label3.Text = Label3Text

8. En el menú Generar, elija Generar solución.


9. En el Explorador de soluciones, seleccione Form1.vb y en el menú Ver elija Diseñador.
Compruebe que las etiquetas tienen el texto predeterminado. Intente cambiar la propiedad Label1Text en la ventana
Propiedades y compruebe que también cambia en el control.
10. En el menú Archivo, elija Cerrar para cerrar el Diseñador de Windows Forms.
Agregar validación
Otra personalización de utilidad sería agregar código para validar lo que se escribe con el fin de asegurarse de que es correcto.
En lugar de validar cada uno de los controles TextBox, puede escribir código de validación para el control de usuario
completo.
La mayoría de los controles tiene un evento Validating que se produce cuando se desplaza el foco fuera del control; aquí es
donde especificará el código de validación. En este caso, deseará escribir el código para asegurarse de que cada cuadro de
texto contiene un nombre.
Si están vacíos uno o varios cuadros de texto, deseará mostrar un cuadro de mensaje para recordar al usuario que especifique
su nombre. Puede exponer una propiedad que contenga un mensaje predeterminado; de ese modo, el usuario del control
puede cambiar el mensaje lo que dice el mensaje.
También es posible que el usuario del control no requiera un segundo nombre, de modo que también deseará agregar una
propiedad Boolean para desactivar la validación para el cuadro de texto MiddleName.
Inténtelo
Para agregar la validación
1. En el Editor de código, agregue código para dos propiedades relacionadas con la validación, una para especificar si el
segundo nombre es necesario y otra para especificar el mensaje que se mostrará si no se supera la validación.

Private required As Boolean = True


Property MiddleNameRequired() As Boolean
Get
Return required
End Get
Set(ByVal value As Boolean)
required = value
End Set
End Property
Private errormessage As String = "Please enter your name."
Property ValidationErrorMessage() As String
Get
Return errormessage
End Get
Set(ByVal value As String)
errormessage = value
End Set
End Property
2. En el Editor de código, seleccione (NamesControl Events) del cuadro de lista desplegable izquierdo y, a continuación,
seleccione el evento Validating del cuadro de lista desplegable derecho.
3. Agregue el código siguiente al controlador de eventos NamesControl_Validating.

If MiddleNameRequired = True Then


If FirstName.Text = "" Or MiddleName.Text = "" Or _
LastName.Text = "" Then
MsgBox(ValidationErrorMessage)
End If
Else
' Middle name isn't required.
If FirstName.Text = "" Or LastName.Text = "" Then
MsgBox(ValidationErrorMessage)
End If
End If

4. En el menú Generar, elija Generar solución.


5. En el Explorador de soluciones, seleccione Form1.vb y en el menú Ver elija Diseñador.
Seleccione el control de usuario en el formulario y compruebe que aparecen las dos nuevas propiedades en la ventana
Propiedades.
6. En el Cuadro de herramientas, arrastre un control Button al formulario.
7. Presione F5 para ejecutar el programa.
Escriba el nombre y apellido, pero no escriba un segundo nombre. Haga clic en el botón y se mostrará un cuadro de
mensaje que contiene elValidationErrorMessage.
8. En el menú Archivo, elija Guardar todo para guardar el trabajo.
Pasos siguientes
En esta lección, ha visto cómo personalizar el control de usuario para hacerlo más útil. En la lección siguiente, aprenderá a
utilizar gráficos para dibujar imágenes y texto.
Siguiente lección: Dibujar imágenes: utilizar gráficos
Vea también
Tareas
Probar un control de usuario
Otros recursos
Objetos visibles: crear el primer control de usuario
Programar con objetos: utilizar clases
Paseo con guía por Visual Basic
Conceptos del lenguaje Visual Basic

Dibujar imágenes: utilizar gráficos


En una lección anterior, aprendió a crear la interfaz de usuario utilizando formularios y controles. En ocasiones, es posible que
desee personalizar el aspecto del programa con imágenes o efectos que no se pueden crear con controles.
En Visual Basic, puede utilizar métodos gráficos para dibujar prácticamente cualquier cosa en un formulario o en un control. En
este conjunto de lecciones, se darán a conocer las funciones gráficas en Visual Basic.
En esta sección
Ver gráficos
Dibujar formas en un formulario
Dibujar texto en un formulario
Dibujar una imagen en un formulario
Secciones relacionadas
Cómo ilustrar: mostrar imágenes
Paseo con guía por Visual Basic
Conceptos del lenguaje Visual Basic

Ver gráficos
En esta lección, aprenderá a utilizar los métodos de gráficos en Visual Basic para dibujar en un formulario.
En una lección anterior, aprendió a mostrar imágenes en un formulario utilizando un control PictureBox. Eso funciona bien si
ya tiene una imagen, pero a veces deseará dibujar algo directamente en el formulario. Por ejemplo, puede desear dibujar una
línea para separar dos campos o un círculo para resaltar una etiqueta importante.
En Visual Basic, puede utilizar métodos de gráficos para dibujar prácticamente cualquier cosa en un formulario o en un control.
Fundamentos de gráficos
Antes de comenzar a dibujar, hay algunas cosas que debe saber. La pantalla de un equipo se compone de miles de puntos
diminutos llamados píxeles; al definir el color de cada píxel, el programa controla lo que se muestra en la pantalla. Por
supuesto, la mayoría de este trabajo ya se realiza automáticamente en el código que define formularios y controles.
Piense en un formulario como en un lienzo en el que puede dibujar o pintar: al igual que un lienzo real, un formulario tiene
dimensiones. Mientras un lienzo real se mide en pulgadas o centímetros, un formulario se mide en píxeles. Un sistema de
coordenadas determina donde se ubica cada píxel, con la coordenada X que mide de izquierda a derecha y la coordenada Y
que mide de arriba a abajo.
Las coordenadas se inician en la esquina superior izquierda del formulario, de manera que si desea dibujar un punto único 10
píxeles desde la izquierda y 10 píxeles hacia abajo, las coordenadas X e Y se expresarán como 10, 10.
Los píxeles también se utilizan para expresar el ancho y alto de los gráficos. Para definir un cuadrado que tiene 100 píxeles de
ancho y 100 píxeles de alto, cuya esquina superior izquierda se encuentra 10 píxeles a la izquierda y 10 píxeles hacia abajo, se
expresará en coordenadas como 10, 10, 100, 100.
El acto de dibujar en la pantalla se conoce como pintar. Los formularios y controles tienen un evento Paint que aparece
siempre que es necesario volver a dibujarlo, por ejemplo cuando se muestra un formulario por primera vez o cuando otra
ventana lo ha cubierto. Generalmente, cualquier código que escribe para mostrar los gráficos lo tiene el controlador de eventos
Paint.
Dibujar una línea
Para dibujar una línea en un formulario, hay dos cosas que debe definir: las coordenadas y el color. Como se observó
anteriormente, las coordenadas X e Y se expresan en píxeles. Para una línea, hay dos conjuntos de coordenadas: la ubicación
inicial seguida por la ubicación final.
Al igual como utilizaría un lápiz para dibujar una línea en una página de papel, Visual Basic utiliza un objeto Pen para dibujar
en el formulario. Pen define el aspecto de la línea; en este caso, el color. En el siguiente procedimiento, dibujará líneas
horizontales, verticales y diagonales en un formulario.
Inténtelo
Para dibujar líneas
1. En el menú Archivo, elija Nuevo proyecto.
2. En el panel Plantilla, en el cuadro de diálogo Nuevo proyecto, haga clic en Aplicación para Windows.
3. En el cuadro Nombre, escriba Lines y haga clic en Aceptar.
Se abre un nuevo proyecto de formularios Windows Forms.
4. Haga doble clic en el formulario para abrir el Editor de código y seleccione Pintar de la lista desplegable Eventos.
5. En el controlador de eventos Form1_Paint, agregue el siguiente código.
VB
' Draw a 400 pixel black line 25 pixels from the top of the form.
e.Graphics.DrawLine(Pens.Black, 0, 25, 400, 25)
' Draw a 500 pixel red line 100 pixels from the left of the form.
e.Graphics.DrawLine(Pens.Red, 100, 0, 100, 500)
' Draw a diagonal blue line from the upper left to the lower right.
e.Graphics.DrawLine(Pens.Blue, 0, 0, Me.Width, Me.Height)
6. Presione F5 para ejecutar el programa. Debe ver tres líneas en el formulario.
Pasos siguientes
En esta lección, aprendió los fundamentos de los gráficos y cómo dibujar líneas. En la siguiente lección, aprenderá a dibujar
formas como rectángulos y círculos.
Siguiente lección: Dibujar formas en un formulario
Vea también
Tareas
Cómo ilustrar: mostrar imágenes
Otros recursos
Dibujar imágenes: utilizar gráficos
Paseo con guía por Visual Basic
Conceptos del lenguaje Visual Basic

Dibujar formas en un formulario


En esta lección, aprenderá a dibujar formas como rectángulos o círculos en un formulario.
En la lección anterior, aprendió a dibujar líneas en un formulario utilizando el método gráfico DrawLine y un objeto Pen.
Además del método DrawLine, Visual Basic también tiene métodos gráficos para dibujar formas y objetos gráficos conocidos
como pinceles para rellenar formas.
Dibujar formas simples
Dibujar una forma es similar a dibujar una línea: se deben definir las coordenadas y el color con los que se va a dibujar.
Mientras que una línea adopta las coordenadas que definen un punto inicial y final, una forma como un cuadrado o un
rectángulo adopta coordenadas que describen su esquina superior izquierda, su ancho y su alto.
Los círculos y óvalos (también conocidos como elipses) no tienen esquina superior izquierda, por lo que en su lugar las
coordenadas describen la esquina superior izquierda de su rectángulo delimitador: un rectángulo imaginario del mismo ancho
y alto del círculo u óvalo.
Inténtelo
Para dibujar formas
1. En el menú Archivo, seleccione Nuevo proyecto.
2. En el panel Plantillas, en el cuadro de diálogo Nuevo proyecto, seleccione Aplicación para Windows.
3. En el cuadro Nombre, escriba Shapes y, a continuación, haga clic en Aceptar.
Se abrirá un nuevo proyecto de formularios Windows Forms.
4. Haga doble clic en el formulario para abrir el Editor de código y seleccione Pintar en la lista desplegable Eventos.
5. En el controlador del evento Form1_Paint, agregue el siguiente código.
VB
' Draw a 200 by 150 pixel green rectangle.
e.Graphics.DrawRectangle(Pens.Green, 10, 10, 200, 150)
' Draw a blue square
e.Graphics.DrawRectangle(Pens.Blue, 30, 30, 150, 150)
' Draw a 150 pixel diameter red circle.
e.Graphics.DrawEllipse(Pens.Red, 0, 0, 150, 150)
' Draw a 250 by 125 pixel yellow oval.
e.Graphics.DrawEllipse(Pens.Yellow, 20, 20, 250, 125)

6. Presione F5 para ejecutar el programa. Debería ver cuatro formas en el formulario.


Mantenga el proyecto abierto: le agregará elementos en el procedimiento siguiente.
Dibujar formas con relleno
Hasta ahora, las formas que ha dibujado son sólo contornos. Para dibujar formas con colores sólidos, debe utilizar uno de los
métodos de relleno, como FillRectangle o FillEllipse. Los métodos de relleno utilizan un objeto Brush, otro tipo de objeto
gráfico que puede pintar.
Al rellenar una forma con un color diferente, deberá definir coordenadas que sean más pequeñas que la forma; de lo contrario
se cubrirá el borde. Por ejemplo, para rellenar un cuadrado con las coordenadas 0, 0, 150, 150, se especificará un relleno
con las coordenadas 1, 1, 148, 148, que tiene en cuenta el grosor de un píxel de la línea.
Para dibujar formas con relleno
1. En el controlador del evento Form1_Paint, agregue el siguiente código debajo del código que escribió antes.
VB
' Fill the circle with the same color as its border.
e.Graphics.FillEllipse(Brushes.Red, 0, 0, 150, 150)
' Fill the square with a different color.
e.Graphics.FillRectangle(Brushes.Aquamarine, 31, 31, 148, 148)

2. Presione F5 para ejecutar el programa.


Observe que el cuadrado con relleno aparece por encima del círculo con relleno, pero esa parte de su borde ha
desaparecido. El orden en el que se llama a los métodos gráficos determina el orden en el que se dibujan; en este caso, el
círculo con relleno se dibujó después del rectángulo con borde azul.
Trate de cambiar el orden de los métodos y vea lo que pasa.
Pasos siguientes
En esta lección, aprendió a dibujar y a rellenar formas. En la lección siguiente, aprenderá a dibujar un texto utilizando métodos
gráficos.
Siguiente lección: Dibujar texto en un formulario
Vea también
Tareas
Ver gráficos
Otros recursos
Dibujar imágenes: utilizar gráficos
Paseo con guía por Visual Basic
Conceptos del lenguaje Visual Basic

Dibujar texto en un formulario


En esta lección, aprenderá a dibujar un texto en un formulario mediante la utilización de métodos gráficos.
En una lección anterior, aprendió a mostrar texto mediante un control Label. Sin embargo, hay casos en los que podrá o
deberá dibujar el texto personalmente utilizando métodos gráficos. Por ejemplo, si desea que el texto esté inclinado, no puede
utilizar un control Label, pero sí puede utilizar métodos gráficos para dibujar texto en cualquier ángulo.
Dibujar texto
Para dibujar texto en un formulario o control, se utiliza el método gráfico DrawString. Al igual que los otros métodos de
dibujo, DrawString toma un objeto Brush que determina el color y las coordenadas que especifican dónde dibujar el texto, en
este caso, las coordenadas X e Y de la esquina superior izquierda del rectángulo delimitador para el texto.
El método DrawString también tiene dos argumentos adicionales: la cadena que desea dibujar y la fuente que determina el
aspecto del texto. Para especificar la fuente, primero debe crear un objeto Font y utilizar dicho objeto como un argumento al
método DrawString.
Inténtelo
Para dibujar texto
1. En el menú Archivo, seleccione Nuevo proyecto.
a. En el cuadro de diálogo Nuevo proyecto, en el panel Plantillas, haga clic en Aplicación para Windows.
b. En el cuadro Nombre, escriba DrawText y haga clic en Aceptar.
Se abre un nuevo proyecto de formularios Windows Forms.
2. Haga doble clic en el formulario para abrir el Editor de código y seleccione Pintar de la lista desplegable Eventos.
3. En el controlador de eventos Form1_Paint, agregue el siguiente código.
VB
' Create a font object.
Dim aFont As New System.Drawing.Font("Arial", 22, FontStyle.Bold)
' Display the text with the DrawString method.
e.Graphics.DrawString("Graphics are fun!", aFont, Brushes.Black, _
20, 10)

4. Presione F5 para ejecutar el programa. Debe poder ver el texto que se muestra en el formulario.
Mantenga abierto el proyecto: continuará utilizándolo en el siguiente procedimiento.
Dibujar texto girado
Para dibujar texto en un ángulo, debe utilizar otro tipo de método gráfico que se llama transformación. Hay varios tipos de
transformaciones disponibles para diversos efectos gráficos; en este caso, se utilizará el método RotateTransform.
El método RotateTransform toma un argumento único, el ángulo en que se girará el texto. La transformación se realiza en la
línea del código a continuación del método RotateTransform; también se puede utilizar para girar formas o líneas dibujadas
con otros métodos de dibujo.
Inténtelo
Para dibujar texto girado
1. En el controlador de eventos Form1_Paint, agregue el siguiente código debajo del código que escribió antes.
VB
' Rotate the text 45 degrees.
e.Graphics.RotateTransform(45)
e.Graphics.DrawString("And exciting too!", aFont, Brushes.Red, _
100, 0)

2. Presione F5 para ejecutar el programa. Debe poder ver el texto girado que se muestra en el formulario.
Pasos siguientes
En esta lección, aprendió a utilizar el método DrawString para mostrar texto. En la siguiente lección, aprenderá a mostrar una
imagen mediante la utilización de métodos gráficos.
Siguiente lección: Dibujar una imagen en un formulario
Vea también
Tareas
Dibujar formas en un formulario
Otros recursos
Dibujar imágenes: utilizar gráficos
Paseo con guía por Visual Basic
Conceptos del lenguaje Visual Basic

Dibujar una imagen en un formulario


En esta lección, aprenderá a mostrar una imagen utilizando llamadas a gráficos.
En una lección anterior, aprendió a mostrar una imagen mediante un control PictureBox. También es posible mostrar una
imagen de un archivo utilizando métodos gráficos de Visual Basic. Al igual que en la lección anterior, es necesario utilizar los
métodos gráficos en lugar de un control PictureBox si desea hacer algo especial como girar la imagen.
Mostrar una imagen
Para mostrar una imagen en un formulario o en un control, utilice el método gráficos DrawImage. El método DrawImage
toma una imagen de mapa de bits como argumento, junto con las coordenadas X e Y que definen la esquina superior izquierda
de la imagen.
Inténtelo
Para mostrar una imagen girada
1. En el menú Archivo, seleccione Nuevo proyecto.
2. En el panel Plantillas, en el cuadro de diálogo Nuevo proyecto, haga clic en Aplicación para Windows.
3. En el cuadro Nombre, escriba DrawImage y haga clic en Aceptar.
Se abrirá un nuevo proyecto de formularios Windows Forms.
4. En el Explorador de soluciones, haga doble clic en el nodo Mi proyecto para abrir el Diseñador de proyectos.
5. En el Diseñador de proyectos, haga clic en la ficha Recursos, seleccione Agregar recursos y, a continuación, Agregar
archivo existente.
6. En el cuadro de diálogo Agregar archivo existente a los recursos, vaya a cualquier archivo de imagen, selecciónelo y,
a continuación, haga clic en Abrir.
7. En el Explorador de soluciones, seleccione el nodo Form1 y, en el menú Ver, seleccione Código para abrir el Editor de
código.
8. En el Editor de código, seleccione la opción Pintar de la lista desplegable Eventos.
9. En el controlador de eventos Form1_Paint, agregue el siguiente código.
VB
e.Graphics.RotateTransform(45)
e.Graphics.DrawImage(My.Resources.picture, 50, 0)

Nota
Reemplace picture con el nombre del recurso que agregó en un paso anterior.

10. Presione F5 para ejecutar el programa. Debería ver la imagen girada en el formulario.
Pasos siguientes
En esta lección, aprendió a mostrar una imagen girada en un formulario. Así finalizan las lecciones sobre gráficos. En el
siguiente conjunto de lecciones, aprenderá a compartir los programas que cree.
Siguiente lección: Distribuir un programa
Vea también
Tareas
Dibujar texto en un formulario
Otros recursos
Dibujar imágenes: utilizar gráficos
Paseo con guía por Visual Basic
Conceptos del lenguaje Visual Basic

Distribuir un programa
Hay varias maneras de compartir el programa con otros. Mediante el uso de la publicación de ClickOnce, se puede poner el
programa a disposición en un CD-ROM o DVD-ROM, o bien puede publicarlo en un sitio Web donde otros usuarios puedan
descargarlo y ejecutarlo. También puede enviarlo por correo electrónico o simplemente copiarlo en un disco.
En esta sección
Compartir un programa: introducción a la implementación
Distribuir un programa en CD: publicar con ClickOnce
Secciones relacionadas
Información detallada: incluir requisitos previos en el programa
Información detallada: distribuir un programa en Internet
Enviar un programa por correo electrónico: crear un archivo comprimido
Obtener un programa por correo electrónico: extraer un programa comprimido
Conceptos del lenguaje Visual Basic

Compartir un programa: introducción a la implementación


En esta lección, aprenderá diferentes maneras de compartir programas con otras personas.
Una vez que termina de escribir, probar y depurar, es probable que desee compartir su obra maestra con los demás. El proceso
de realizar copias del programa y distribuirlas se conoce como implementación.
Tal vez piense que puede copiar los archivos de programa en otro equipo y ejecutar el programa. Sin embargo, en muchos
casos se encontrará con que el programa no se ejecuta. Esto es porque la mayoría de los programas depende de otro software
conocidos como componentes que se deben instalar en el otro equipo. Si intenta ejecutar el programa y falta un componente,
el programa no se ejecutará.
Publicación de ClickOnce
Visual Basic incluye herramientas para implementar el programa con un método conocido como publicación de ClickOnce, que
facilita la implementación incluyendo e instalando automáticamente todos los componentes necesarios junto con el programa.
ClickOnce permite publicar el programa en un CD-ROM o DVD que puede compartir con otros usuarios.
Si tiene acceso a un servidor Web, también puede utilizar ClickOnce para publicar el programa en un sitio Web; el programa se
puede descargar a través de Internet. Si cambia el programa más adelante, puede publicar la nueva versión y cualquier
persona que lo haya descargado podrá descargar automáticamente la nueva versión la siguiente vez que lo ejecute.
Para publicar un programa utilizando ClickOnce, debe tener acceso a un grabador de CD o DVD o a un servidor Web. Si no
tiene acceso a ninguno de estos dispositivos, puede compartir el programa comprimiéndolo y copiándolo en un disquete o
enviándolo a través del correo electrónico.
Pasos siguientes
En este tema, aprendió sobre la implementación y publicación de ClickOnce. En la siguiente lección, aprenderá a publicar el
programa utilizando ClickOnce.
Siguiente lección: Distribuir un programa en CD: publicar con ClickOnce
Vea también
Tareas
Enviar un programa por correo electrónico: crear un archivo comprimido
Otros recursos
Distribuir un programa
Conceptos del lenguaje Visual Basic

Distribuir un programa en CD: publicar con ClickOnce


En esta lección, aprenderá a publicar el programa en un CD-ROM o DVD para compartirlo con otros usuarios.
Para compartir el programa con otros usuarios, primero deberá crear un programa de instalación y copiarlo en un CD-ROM u
otro soporte. Además del programa en sí, el programa de instalación deberá incluir otros componentes o archivos necesarios
para que el programa se ejecute; éstos se conocen como requisitos previos.
Como imaginará, determinar exactamente qué requisitos necesita puede ser una tarea difícil; afortunadamente las
herramientas de publicación de ClickOnce en Visual Basic realizan estas y otras tareas. También puede utilizar la publicación de
ClickOnce para publicar el programa en Internet o en una red local. Sin embargo, en esta lección, publicará el programa en un
CD.
Nota
Para publicar un programa en un CD-ROM o DVD, debe tener el hardware y software adecuados en el equipo que está utiliza
ndo para escribir el programa. Si puede grabar CDs de música, también debería poder publicar en un CD. Si no dispone de e
sta posibilidad, quizá aún pueda compartir el programa utilizando otro método (para obtener más información, vea
Enviar un programa por correo electrónico: crear un archivo comprimido).

Publicar con ClickOnce


Publicar el programa mediante ClickOnce es un proceso bastante sencillo, en el que se realizan algunas elecciones en el
Asistente para publicación y se graban los archivos resultantes en un CD.
Antes de publicar el programa, pruébelo y asegúrese de que se ejecuta sin ningún error. Cuando está listo para publicar, puede
iniciar el Asistente para publicación eligiendo el comando Publicar en el menú Generar.
El Asistente para publicación consta de tres pasos. El primer paso es seleccionar dónde desea ubicar el programa de
instalación y cualquier archivo asociado. Si está publicando en un CD, seleccione una carpeta en el disco local; más adelante
volverá a seleccionar esta ubicación para grabar el programa en un CD. El segundo paso es especificar cómo instalarán los
usuarios el programa; en este caso, desde un CD-ROM.
El paso final implica especificar si el programa buscará automáticamente una versión más reciente del programa cada vez que
se inicie. Si tiene acceso a un servidor Web, es posible publicar versiones actualizadas del programa en él, tal como se describe
en Información detallada: distribuir un programa en Internet. Sin embargo, en este caso, como está publicando en un CD, el
programa no tendrá la capacidad para buscar actualizaciones.
Cuando se ejecuta el Asistente para publicación, éste determina automáticamente cualquier requisito previo para el
programa. De manera predeterminada, los requisitos previos como .NET Framework no se empaquetan realmente con el
programa de instalación; durante la instalación, el programa de instalación busca los requisitos previos y, si es necesario, los
descarga e instala desde Internet.
Para incluir los requisitos previos del programa de instalación en el CD, establezca una propiedad en el Diseñador de
proyectos. Sin embargo, debe descargar primero los archivos redistribuibles para los requisitos previos en su equipo local.
Para obtener más información, vea Información detallada: incluir requisitos previos en el programa.
Inténtelo
Para publicar en un CD
1. En el menú Archivo, seleccione Abrir proyecto.
2. En el cuadro de diálogo Abrir proyecto, vaya a cualquier proyecto Aplicación para Windows que haya creado en una
lección anterior y haga clic en Abrir.
3. Presione F5 para ejecutar el proyecto. Si hay algún error, deberá corregirlo antes de continuar.
4. En el menú Depurar, elija Detener depuración.
5. En el menú Generar, seleccione Publicar nombre de proyecto, donde Nombre de proyecto es el nombre del
proyecto.
Se iniciará el Asistente para publicación.
6. En la página ¿Dónde desea publicar la aplicación? del Asistente para publicación, escriba la ruta de acceso donde
desea publicar el programa, por ejemplo , C:\My Programs. Si la carpeta no existe, se le solicitará que la cree.

Haga clic en Siguiente para ir a la siguiente página del asistente.


7. En la página ¿Cómo instalarán los usuarios la aplicación?, seleccione Desde un CD-ROM o un DVD-ROM y haga
clic en Siguiente.
8. En la página ¿Dónde buscará la aplicación las actualizaciones?, seleccione La aplicación no comprobará si hay
actualizaciones.
9. Haga clic en Finalizar. El programa se publicará en la ubicación que especificó en la primera página del asistente.
Ahora puede utilizar la aplicación de grabación de CD o DVD para grabar un CD o DVD para el programa. Debe incluir
todos los archivos en la carpeta donde publicó el programa.
10. Lleve el CD o DVD listos a otro equipo y ejecute el archivo Setup.exe. Si se debe instalar cualquier requisito previo como
.NET Framework, se le solicitará descargarlo e instalarlo.
11. Una vez finalizada la instalación, puede ejecutar el programa desde el acceso directo que se encuentra en el menú Inicio.
Para aprender a empaquetar los requisitos previos con el programa, mantenga abierto el proyecto, lo utilizará en la
lección Información detallada: incluir requisitos previos en el programa.
Pasos siguientes
En esta lección, aprendió a publicar un programa en un CD-ROM utilizando la publicación de ClickOnce. Ahora, tiene varias
opciones para continuar.
Si tiene acceso a un servidor Web y desea aprender a publicar el programa en Internet, vea
Información detallada: distribuir un programa en Internet.
Si no puede grabar un CD-ROM o DVD-ROM, vea Enviar un programa por correo electrónico: crear un archivo comprimido.
Si desea aprender a empaquetar los requisitos previos con el programa, vea
Información detallada: incluir requisitos previos en el programa.
De lo contrario, ha terminado la parte principal del paseo guiado. Puede pasar al siguiente tema para ver algunas sugerencias
sobre recursos para conocer más acerca de Visual Basic.
Siguiente lección: Avanzar: ¿A dónde puedo ir desde aquí?
Vea también
Conceptos
Compartir un programa: introducción a la implementación
Conceptos del lenguaje Visual Basic

Información detallada: incluir requisitos previos en el


programa
En esta lección, aprenderá a empaquetar los componentes necesarios con el programa mediante la publicación de ClickOnce.
De manera predeterminada, los programas publicados mediante la tecnología ClickOnce descargarán cualquier requisito
previo necesario desde Internet durante la instalación. Si intenta instalar el programa en un equipo que no tiene acceso a
Internet, la instalación puede fallar.
Para evitar esto, se pueden empaquetar los requisitos previos, como por ejemplo, los archivos redistribuibles de .NET
Framework junto con el programa.
Nota
Si todas las personas que van a instalar el programa tienen acceso a Internet, se debe utilizar el método predeterminado; de
esta forma, si una versión más reciente del requisito previo está disponible, se obtendrá la última versión.

Incluir requisitos previos


Para incluir los requisitos previos con el programa, cambie la propiedad Publishing en el Diseñador de proyectos. Observe
que si incluye un requisito previo, debe incluir todos los requisitos previos; no puede incluir un requisito previo y haber
descargado otro de Internet.
Inténtelo
Para incluir requisitos previos
1. Abra el proyecto de la lección anterior, Distribuir un programa en CD: publicar con ClickOnce.
2. En el Explorador de soluciones, seleccione el nodo del proyecto y en el menú Proyecto, elija Propiedades.
Se abrirá el Diseñador de proyectos.
3. En el Diseñador de proyectos, haga clic en la ficha Publicar.
4. Haga clic en el botón Requisitos Previos para abrir el cuadro de diálogo Requisitos Previos.
5. En el cuadro de diálogo Requisitos previos, active la casilla de verificación Descargar los requisitos previos desde la
misma ubicación que mi aplicación y haga clic en Aceptar
6. En el menú Generar, seleccione Publicar nombre de proyecto, donde Nombre de proyecto es el nombre del
proyecto.
Se inicia el Asistente para publicación.
7. Haga clic en Finalizar para publicar el programa.
Nota
Es posible que se le solicite descargar los archivos redistribuibles de .NET Framework si aún no lo ha hecho.

8. En el Explorador de Windows, vaya a la ubicación donde se publicó el programa y compruebe que los archivos Setup.exe
y Dotnetfx.exe están allí.
Pasos siguientes
En esta lección, aprendió a publicar los requisitos previos junto con el programa. Ahora, tiene varias opciones para continuar.
Si tiene acceso a un servidor Web y desea aprender a publicar el programa en Internet, vea
Información detallada: distribuir un programa en Internet.
Si no puede grabar un CD-ROM o DVD-ROM, vea Enviar un programa por correo electrónico: crear un archivo comprimido.
De lo contrario, está listo con las lecciones en el paseo guiado. Puede pasar al siguiente tema para ver algunas sugerencias
sobre otros recursos para conocer más acerca de Visual Basic.
Siguiente lección: Avanzar: ¿A dónde puedo ir desde aquí?
Vea también
Tareas
Distribuir un programa en CD: publicar con ClickOnce
Conceptos
Compartir un programa: introducción a la implementación
Conceptos del lenguaje Visual Basic

Información detallada: distribuir un programa en Internet


En esta lección, aprenderá a utilizar la publicación de ClickOnce para implementar el programa en un servidor Web.
En la lección anterior, aprendió a publicar un programa en un CD-ROM o DVD-ROM. Si tiene acceso a un servidor Web,
también puede utilizar ClickOnce con el fin de publicar el programa para que esté disponible en Internet.
Además de conseguir que el programa tenga una difusión más amplia, la publicación en un servidor Web permite aprovechar
las funciones de actualización automática de ClickOnce. Si posteriormente publica una nueva versión del programa, cuando un
usuario trate de ejecutarlo se le pedirá que descargue e instale la nueva versión.
Nota
Para publicar en un servidor Web, el servidor Web debe ejecutar IIS (Servicios de Internet Information Server), las Extensione
s de FrontPage deben estar instaladas y debe tener privilegios administrativos en IIS.

Publicar en un servidor Web


Publicar en un servidor Web es similar a publicar en un CD-ROM o DVD-ROM; sólo debe realizar algunas elecciones en el
Asistente para publicación.
Una opción es si el programa estará disponible sin conexión, es decir, cuando el equipo no esté conectado a Internet. Si el
programa está disponible con y sin conexión, se agregará una entrada en el menú Inicio de Windows para que el usuario
pueda iniciar el programa. Si el programa está disponible sólo con conexión, se descargará cada vez que un usuario desee
ejecutarlo y no se agregará al menú Inicio.
¡Inténtelo!
Para publicar en un servidor Web
1. En el menú Archivo, seleccione Abrir proyecto.
2. En el cuadro de diálogo Abrir proyecto, vaya a cualquier proyecto de Aplicación para Windows y haga clic en Abrir.
3. Presione F5 para ejecutar el proyecto. Si hay algún error, deberá corregirlo antes de continuar.
4. En el menú Depurar, elija Detener depuración.
5. En el menú Generar, seleccione Publicar nombre de proyecto, donde Nombre de proyecto es el nombre del
proyecto.
Se iniciará el Asistente para publicación.
6. En la página ¿Dónde desea publicar la aplicación? del Asistente para publicación, escriba la dirección URL del sitio
Web donde desea publicar el programa, por ejemplo http://www.microsoft.com/myprogram.
Nota
Para publicar en un servidor Web, el servidor Web debe ejecutar IIS (Servicios de Internet Information Server), las Exten
siones de FrontPage deben estar instaladas y debe tener privilegios administrativos en IIS.

Haga clic en Siguiente para ir a la siguiente página del asistente.


7. En la página ¿La aplicación estará disponible sin conexión?, seleccione el valor predeterminado Sí, esta aplicación
está disponible con o sin conexión.
8. Haga clic en Finalizar para publicar el programa.
El programa se publicará en el sitio Web especificado y se creará una página HTML.
9. En otro equipo, abra Internet Explorer, vaya a la dirección URL que escribió en el paso 6 y haga clic en el vínculo Instalar
para instalar el programa.
Pasos siguientes
En esta lección, ha aprendido a publicar un programa en un sitio Web utilizando la publicación de ClickOnce. Son varias las
opciones sobre qué hacer a continuación.
Si no puede grabar un CD-ROM o DVD-ROM, vea Enviar un programa por correo electrónico: crear un archivo comprimido.
Si desea aprender a empaquetar requisitos previos con el programa, vea
Información detallada: incluir requisitos previos en el programa.
De lo contrario, ya ha acabado con las lecciones del paseo guiado. Puede pasar al siguiente tema para ver sugerencias sobre
otros recursos y conocer más acerca de Visual Basic.
Siguiente lección: Avanzar: ¿A dónde puedo ir desde aquí?
Vea también
Conceptos
Compartir un programa: introducción a la implementación
Conceptos del lenguaje Visual Basic

Enviar un programa por correo electrónico: crear un archivo


comprimido
En esta lección, aprenderá a empaquetar un programa como un archivo comprimido y enviarlo a través del correo electrónico.
Cuando haya finalizado su programa, probablemente querrá compartir su trabajo con sus amigos y colegas. La mejor manera
de publicar el programa en un CD-ROM o DVD-ROM es mediante el método de publicación ClickOnce. Si no tiene acceso a
una grabadora de CD o DVD, puede distribuir su programa empaquetándolo en un archivo comprimido y enviándolo por
correo electrónico.
Nota
Nunca debe abrir datos adjuntos de ningún tipo, incluidos los archivos .zip, procedentes de un remitente que no sea de confi
anza. Los datos adjuntos no deseados o no solicitados pueden contener virus que consigan bloquear o apropiarse de su equi
po, o robar sus datos personales. Por razones similares, no debe enviar su aplicación a personas que no la estén esperando.

Para la mayoría de los programas sencillos, puede empaquetar el archivo ejecutable (.exe) y el archivo de configuración
(.config) en un archivo comprimido y distribuirlo. Por ejemplo, si tiene un programa sencillo denominado Calculator,
necesitará el archivo Calculator.exe y el archivo Calculator.exe.config, que encontrará en el directorio your Visual Studio
Projects/Calculator/Calculator/bin, donde your Visual Studio Projects es el directorio donde se almacenan sus
proyectos de Visual Studio, normalmente My Documents/Visual Studio/Projects.
Nota
Todos los programas creados con Visual Basic requieren Microsoft .NET Framework version 2.0. Si va a distri
buir el programa a través de correo electrónico, asegúrese de que .NET Framework ya está instalado en los e
quipos de los destinatarios.

Sugerencia
La aplicación .NET Framework se distribuye con muchos otros programas o se puede descargar del sitio Web de
Microsoft. Puede comprobar si tiene instalado .NET Framework si abre el Panel de control, Agregar o quitar
programas y busca Microsoft .NET Framework version 2.0.

Para programas más complicados, como los programas que incluyen una base de datos local, podría necesitar
incluir archivos adicionales. En este caso es mejor publicar el programa mediante la publicación ClickOnce,
en lugar de enviarlo por correo electrónico.
¡Inténtelo!
El procedimiento siguiente muestra cómo comprimir un archivo mediante la opción predeterminada Carpetas
comprimidas (en zip) de Windows. Si instaló un programa diferente para trabajar con archivos .zip, los pasos
necesarios para comprimir un archivo pueden ser diferentes.
Para enviar un programa sencillo por correo electrónico
1. Seleccione un proyecto que haya finalizado y ejecútelo; a continuación, en el Explorador de Windows,
desplácese a la carpeta de proyecto.
2. En la carpeta de proyecto, abra la carpeta que tiene el nombre del proyecto, abra la carpeta llamada Bin
y seleccione la carpeta Debug.
3. Seleccione el archivo ProjectName.exe (donde ProjectName es el nombre del proyecto), haga clic con el
botón secundario del mouse en el archivo y elija Enviar a, Carpeta comprimida (en zip).
Se creará un nuevo archivo denominado ProjectName.zip y se agregará al directorio. Puede enviar este
archivo como dato adjunto de un mensaje de correo electrónico.
Pasos siguientes
En esta lección, ha obtenido información sobre cómo empaquetar un programa para enviarlo a través del correo
electrónico. En la lección siguiente, aprenderá a extraer y ejecutar un programa que haya recibido.
Siguiente lección: Obtener un programa por correo electrónico: extraer un programa comprimido
Vea también
Tareas
Distribuir un programa en CD: publicar con ClickOnce
Conceptos
Compartir un programa: introducción a la implementación
Otros recursos
Distribuir un programa
Conceptos del lenguaje Visual Basic

Obtener un programa por correo electrónico: extraer un


programa comprimido
En esta lección, aprenderá a extraer y ejecutar un programa que recibió de un amigo o colega a través del correo electrónico.
En ocasiones, es posible que los amigos y colegas deseen compartir con el usuario su trabajo pesado. En la última lección,
aprendió a agregar el programa a un archivo comprimido (en zip) de manera que se pueda enviar por correo electrónico. En
esta lección, aprenderá a abrir y ejecutar un programa que recibe por correo electrónico.
Nota
Nunca debe abrir los datos adjuntos de ningún tipo, incluido un archivo .zip de un remitente que no sea de confianza. Los dat
os adjuntos no deseados o no solicitados podrían contener virus y pueden bloquear o intervenir el equipo o robar informaci
ón personal. Por la misma razón, no debe enviar la aplicación a nadie que no la espera.

Inténtelo
Para extraer un programa comprimido (en zip)
1. Desplácese al archivo .zip que creó en la lección anterior. Si no ha completado esta lección, tome un momento para
finalizar Enviar un programa por correo electrónico: crear un archivo comprimido.
2. Haga clic con el botón secundario del mouse en el archivo .zip y elija Extraer todo.
Se abre el Asistente para extracción.
3. En el asistente, haga clic en el botón Siguiente.
Se muestra el panel Seleccione un destino.
4. Escriba la ruta de acceso para la carpeta donde desee instalar el programa o haga clic en el botón Examinar para
desplazarse a la carpeta y haga clic en Siguiente.
Se extraen los archivos y se muestra el panel Extracción finalizada.
5. Active la casilla de verificación Mostrar archivos extraídos y, a continuación, haga clic en Finalizar.
Se abre una nueva ventana del Explorador de Windows en la carpeta que eligió en el paso anterior.
6. Haga doble clic en el archivo .exe ProgramName (dónde ProgramName es el nombre del programa) para ejecutar el
programa.
Nota
Todos los programas creados con Visual Basic requieren Microsoft .NET Framework version 2.0. Si va a distribuir el pro
grama por correo electrónico, asegúrese de que .NET Framework está instalado en los equipos de todos los destinatari
os.

Sugerencia
.NET Framework se distribuye con muchos otros programas. También se puede descargar del sitio Web de Microsoft. P
uede comprobar si lo tiene instalado si abre el Panel de control, Agregar o quitar programas y busca Microsoft .NE
T Framework version 2.0.

Pasos siguientes
En esta lección, aprendió a extraer y ejecutar un programa que recibió por correo electrónico de una fuente de confianza.
También aprendió que es peligroso ejecutar cualquier archivo de un origen que no sea de confianza. Ahora ha finalizado los
aspectos básicos. Puede darse un tiempo para explorar Visual Basic personalmente y escribir algunos programas o puede leer
las sugerencias para aprender más sobre Visual Basic.
Siguiente lección: Avanzar: ¿A dónde puedo ir desde aquí?
Vea también
Tareas
Enviar un programa por correo electrónico: crear un archivo comprimido
Otros recursos
Distribuir un programa
Paseo con guía por Visual Basic
Conceptos del lenguaje Visual Basic

Avanzar: ¿A dónde puedo ir desde aquí?


Ha finalizado las lecciones de Paseo con guía por Visual Basic. Todavía no es un experto en Visual Basic, pero ya conoce lo
suficiente como para comenzar a escribir sus programas.
Si ya tiene una idea para un programa, comience a ponerla en marcha. Si desea obtener más información sobre Visual Basic,
consulte lo siguiente.
Para obtener más información
Aumentar la productividad: desarrollo rápido de aplicaciones
En los comienzos de la programación, podría llevar días o incluso semanas finalizar un programa, aunque fuera sencillo.
Sugerencias y trucos: no sabía que pudiera hacerlo
En el paseo guiado por Visual Basic, ha aprendido diversas cosas sobre el producto, pero sólo es una pequeña muestra de las
posibilidades de Visual Basic 2005.
Recursos para todos: ayuda de mis amigos
No siempre es sencillo aprender a programar, incluso los desarrolladores experimentados encuentran problemas que no
pueden resolver solos.
Más información: recursos para aprender sobre Visual Basic
Una vez finalizadas las lecciones del paseo guiado por Visual Basic, tendrá suficiente información para comenzar a escribir
programas pero, por supuesto, no será un experto.
Comience a programar: Ejemplos y Starter Kits
Hay algo mejor que escribir código: no tener que escribirlo. Visual Basic 2005 facilita la reutilización del código contenido en
los temas de Ayuda, las aplicaciones de ejemplo y los Starter Kit.
Profundizar: deseo obtener más información sobre...
El paseo guiado por Visual Basic presenta algunas de las operaciones que puede realizar con Visual Basic Express y Visual
Basic 2005, pero apenas roza la superficie. Si desea profundizar en algún aspecto que se haya cubierto en el paseo guiado,
éste es el lugar para comenzar.
Vea también
Tareas
Solución de problemas de Visual Basic Express
Conceptos
Cómo se utiliza Visual Basic Express
Otros recursos
Distribuir un programa
Paseo con guía por Visual Basic
Conceptos del lenguaje Visual Basic

Aumentar la productividad: desarrollo rápido de aplicaciones


En los primeros días de la programación, finalizar un programa sencillo llevaba días o incluso semanas. Cuando se presentó
por primera vez Visual Basic en 1991, revolucionó la programación, ya no era necesario escribir código para crear una interfaz
de usuario ni había que preocuparse por la administración de memoria. Esta nueva manera de programar se denominó
desarrollo rápido de aplicaciones o RAD (Rapid Application Development).
La ventaja principal de la programación RAD es el aumento de la productividad. Visual Basic 2005 presenta muchas
características que ayudan a crear mejores aplicaciones en menos tiempo. A continuación se enumeran algunas de esas
características.
Nota
Si utiliza Visual Basic Express, quizá algunos vínculos de Ayuda en esta página no estén disponibles, en función de las opcion
es que seleccione durante la instalación. Para obtener más información, vea Solución de problemas de Visual Basic Express.

Fragmentos de código
Un modo de aumentar la productividad es evitar escribir el mismo código una y otra vez. Visual Basic 2005 incluye una
biblioteca de código con 500 miniprogramas aproximadamente, denominados fragmentos de código de IntelliSense, listos
para ser insertados en una aplicación. Cada miniprograma realiza una tarea de programación completa, como crear un archivo,
enviar un mensaje de correo electrónico o dibujar un círculo. Puede insertar un miniprograma en el código fuente con unos
pocos clics del mouse (ratón).
Una vez que se inserta el miniprograma, se resaltan los fragmentos de código que es preciso sustituir; puede especificar sus
valores si lo prefiere. Por ejemplo, un fragmento de código que dibuja una línea en un formulario tendrá valores para el color,
la ubicación y la longitud. Puede cambiar estos valores según sus necesidades personales, o no hacer nada y dibujar una línea
con los valores predeterminados.
También puede crear miniprogramas que satisfagan sus necesidades, agregarlos a la biblioteca y utilizarlos cuando necesite.
Cuando cree miniprogramas, deberá decidir qué partes del código se resaltarán y cuáles serán los valores predeterminados.
Para obtener más información, vea Crear y utilizar fragmentos de código de IntelliSense.
Una tarea común que se puede llevar a cabo con fragmentos de código es leer y escribir texto en un archivo. El procedimiento
siguiente muestra cómo los fragmentos de código pueden hacerle más productivo.
Inténtelo
Para utilizar fragmentos de código
1. En el menú Archivo, seleccione Nuevo proyecto.
2. En el panel Plantillas, en el cuadro de diálogo Nuevo proyecto, haga clic en Aplicación para Windows.
3. En el cuadro Nombre, escriba Snippets y, a continuación, haga clic en Aceptar.
Se abre un nuevo proyecto de formularios Windows Forms.
4. Haga doble clic en el formulario para abrir el Editor de código.
5. En el Editor de código, haga clic con el botón secundario del mouse en el controlador de eventos Form1_Load y elija
Insertar fragmento de código en el menú desplegable.
Se mostrará una lista de categorías de miniprograma.
6. Haga doble clic en Procesar unidades, carpetas y archivos
Se mostrará una lista de miniprogramas.
7. Haga doble clic en Escribir texto en un archivo.
Se insertará el código siguiente y se resaltarán "C\Test.txt" y "Text".

My.Computer.FileSystem.WriteAllText("C:\Test.txt", "Text", True)


Nota
El método WriteAllText creará el archivo si no existe. Si ya existe, agregará el texto al final del archivo.

8. Reemplace "C\Test.txt" con "C\MySnippetTest.txt" y "Text" por "This is really fast!".

9. Agregue un segundo miniprograma, haga clic con el botón secundario del mouse y seleccione Insertar fragmento de
código en el menú.
10. Haga doble clic en Procesar unidades, carpetas y archivos
11. Haga doble clic en Leer texto desde un archivo.
Se insertará el código siguiente y se resaltará "C\Test.txt".

Dim fileContents As String


fileContents = My.Computer.FileSystem.ReadAllText("C:\Test.txt")

12. Reemplace "C\Test.txt" por "C\MySnippetTest.txt".


13. Agregue el código siguiente debajo del último miniprograma para mostrar el resultado.

MsgBox(fileContents)

14. Presione F5 para ejecutar el programa.


Se creará un archivo con el texto especificado y se mostrará un cuadro de mensaje con el contenido del archivo.
Dedique algún tiempo a familiarizarse con los miniprogramas de código incluidos en Visual Basic 2005, le ahorrarán mucho
tiempo y esfuerzo cuando escriba código. Para obtener más información, vea Cómo: Administrar fragmentos de código.
Desarrollo con la función My
Otra característica RAD incluida en Visual Basic 2005 se llama My. My es un conjunto de objetos que contienen las funciones
más utilizadas relacionadas con el equipo, la aplicación, el usuario, etc. Puede considerar My una marcación rápida para llegar
a funciones que, de otro modo, requerirían mucho código adicional.
Por ejemplo, suponga que desea determinar el número de versión de la aplicación. En la versión anterior de Visual Basic, el
código se parecería al siguiente.

Dim VersionNumber As String


VersionNumber = System.Diagnostics.FileVersionInfo.GetVersionInfo _ (System.Reflection.Asse
mbly.GetExecutingAssembly.Location).FileVersion

Con el nuevo objeto My.Application, se parece a éste.

Dim VersionNumber As String


VersionNumber = My.Application.Info.Version.ToString

Como puede ver, el procedimiento My es mucho más sencillo (y mucho más fácil de descubrir), lo que ahorra tiempo y
esfuerzo. Aun así, podría utilizar la otra manera de determinar el número de versión, pero ¿por qué hacerlo?
Aunque quizá no se haya dado cuenta, ya ha utilizado My en varias lecciones anteriores. Cuando escriba código para una
próxima aplicación, explore los objetos My escribiendo My y desplazándose por la lista de elementos que aparece. Para obtener
más información, vea Desarrollo con la función My.
IntelliSense
A medida que avanzaba por las lecciones y escribía código, quizá haya observado que según escribía, aparecía una lista
desplegable de opciones en el Editor de código. Éste es un ejemplo de la característica conocida como IntelliSense.
IntelliSense ofrece varias características que facilitan el acceso a referencias del lenguaje. Al escribir el código, no necesita
abandonar el Editor de código para obtener información sobre los elementos del lenguaje. Puede quedarse donde está, buscar
la información que necesite, insertar elementos del lenguaje directamente en el código e, incluso, dejar que IntelliSense
termine de escribir el texto automáticamente.
IntelliSense también es de utilidad en la depuración. En el Editor de código, puede mover el cursor sobre una variable para
mostrar información sobre herramientas con el valor actual de la variable. IntelliSense también está disponible al escribir el
código en la ventana Inmediato. Para obtener más información, vea Utilizar IntelliSense.
Pasos siguientes
En esta lección, ha conocido algunas de las características de productividad de Visual Basic 2005. Hay muchas otras que le
ayudan a conseguir que Visual Basic 2005 sea la mejor herramienta para el desarrollo rápido de aplicaciones; a continuación
se muestran vínculos a algunas de ellas.
En la lección siguiente, aprenderá algunas de las cosas más sorprendentes que puede hacer con Visual Basic 2005.
Siguiente lección: Sugerencias y trucos: no sabía que pudiera hacerlo
Vea también
Conceptos
Avanzar: ¿A dónde puedo ir desde aquí?
Cómo se utiliza Visual Basic Express
Otros recursos
Distribuir un programa
Paseo con guía por Visual Basic
Conceptos del lenguaje Visual Basic

Sugerencias y trucos: no sabía que pudiera hacerlo


En el paseo guiado de Visual Basic ha aprendido a hacer diversas tareas, pero sólo son una pequeña muestra de las
posibilidades de Visual Basic 2005. Incluso los expertos en Visual Basic descubren constantemente nuevas sugerencias y
trucos. A continuación se presentan cosas menos conocidas que se pueden hacer con el producto.
Nota
Si utiliza Visual Basic Express, es posible que algunos vínculos de esta página de Ayuda no estén disponibles, en función de la
s opciones seleccionadas durante la instalación. Para obtener más información, vea
Solución de problemas de Visual Basic Express.

Crear formularios Windows Forms con forma


¿Se ha cansado de los formularios rectangulares? ¿Desee crear una apariencia "decapada" para su aplicación, como el
Reproductor de Windows Media? Es sencillo con Visual Basic 2005: puede crear una imagen de mapa de bits con la forma que
desee y utilizarla como un formulario, agregando código de modo que se pueda mover y cerrar. Para obtener más
información, vea Cómo: Crear formularios Windows Forms no rectangulares.
Crear ventanas divisorias
¿Desea crear un formulario como el Document Explorer que está utilizando ahora, con dos o más áreas que el usuario pueda
cambiar de tamaño? El control SplitContainer de formularios Windows Forms permite hacerlo sin ningún código. Sólo tiene
que soltar un control SplitContainer en el formulario y luego agregar controles sobre éste; el comportamiento de cambio de
tamaño está disponible automáticamente cuando se ejecuta la aplicación.
También puede agregar varios controles SplitContainer al formulario para tener regiones de tamaño variable dentro de
regiones, lo que permite crear una aplicación parecida a Microsoft Outlook. Para obtener más información, vea
SplitContainer (Control, formularios Windows Forms).
Reproducir sonidos
Si crea un juego, probablemente deseará que el programa reproduzca sonidos en respuesta a distintos eventos. El objeto
My.Computer.Audio permite hacer exactamente eso, reproducir archivos de onda que puede incluir en la aplicación o incluso
reproducir archivos directamente desde Internet. Para obtener más información, vea My.Computer.Audio (Objeto).
Guardar las preferencias del usuario
Probablemente haya observado que muchas aplicaciones basadas en Windows "recuerdan" sus preferencias, como el modo en
que se organizan las ventanas o las barras de herramientas que se mostraron la última vez que utilizó la aplicación. Puede
hacer lo mismo en sus programas creando y utilizando la configuración de la aplicación para almacenar información y
recuperarla la próxima vez que se ejecuta la aplicación. Para obtener más información, vea
Información general sobre la configuración de la aplicación.
Agregue personalización
¿Se ha preguntado alguna vez cómo las páginas Web recuerdan el nombre de un usuario y muestran mensajes como
"Bienvenido de nuevo (insert your name here)" ? Puede hacer algo similar en su aplicación utilizando la propiedad
My.User.Name (Propiedad) para obtener el nombre del usuario que ha iniciado la sesión en curso en el equipo. Para obtener
más información, vea My.User (Objeto).
Utilizar código de Visual Basic 6.0
¿Tiene un ejemplo de código de Visual Basic 6.0 que le gustaría utilizar en Visual Basic 2005? La herramienta Actualizar
código de Visual Basic 6 convierte el código de Visual Basic 6.0 y lo inserta en el código de Visual Basic 2005. Si no se puede
traducir completamente el código, se agregarán comentarios con vínculos a temas de Ayuda que describen lo que necesita
hacer para que funcione el código. Para obtener más información, vea
Cómo: Actualizar código de Visual Basic 6.0 con el cuadro de diálogo Actualizar código de Visual Basic 6.
Utilizar el subprocesamiento múltiple para mejorar el rendimiento
Las aplicaciones de Visual Basic pueden realizar varias tareas a la vez utilizando una técnica llamada subprocesamiento
múltiple. El subprocesamiento múltiple es un proceso en el que una tarea se ejecuta en un subproceso de ejecución
independiente, lo que mejora el rendimiento y la capacidad de respuesta del programa.
Por ejemplo, supongamos que tiene un programa que descarga un archivo de Internet: la descarga podría llevar mucho
tiempo e impediría que el usuario realizara nada más hasta que terminara. Si se realiza la descarga en un subproceso
independiente, el usuario puede realizar otras operaciones mientras se descarga el archivo en segundo plano. Para obtener
más información, vea Subprocesamiento múltiple en Visual Basic.
Visual Basic 2005 también tiene un componente BackgroundWorker que facilita realizar tareas en segundo plano. Para
obtener más información, vea Tutorial: Implementar un formulario que utiliza una operación en segundo plano.
Crear documentación XML
La documentation XML permite agregar comentarios a una clase o control de usuario para que otro programador entienda
cómo utilizarlos. Por ejemplo, suponga que el control de usuario tiene una propiedad denominada "Stretch", el nombre no le
indica lo que la propiedad realmente hace. La documentación XML permite agregar una descripción como "Determina si se
expandirá el texto para rellenar la pancarta"; se mostrará la descripción en la ventana Propiedades y en IntelliSense. Para
obtener más información, vea Documentar el código con XML (Visual Basic).
Instalar .NET Framework junto con su programa
Todo programa creado con Visual Basic 2005 requiere que el motor en tiempo de ejecución de .NET Framework esté instalado
en el equipo en el que se ejecutará el programa; algunos programas pueden requerir otros archivos o requisitos previos. Si
comparte el programa usando la publicación ClickOnce, puede utilizar una característica llamada requisito previo de inicio para
incluir estos archivos e instalarlos automáticamente. Para obtener más información, vea
Cómo: Instalar requisitos previos mediante una aplicación ClickOnce.
Pasos siguientes
En esta lección, se han descrito algunas de las cosas que puede hacer con Visual Basic 2005. Por supuesto, son sólo algunos
ejemplos, a medida que utilice Visual Basic 2005, descubrirá muchas más cosas que no sabía que podía hacer.
En la lección siguiente, aprenderá sobre los modos de conectar con otros usuarios de Visual Basic 2005.
Siguiente lección: Recursos para todos: ayuda de mis amigos
Vea también
Tareas
Aumentar la productividad: desarrollo rápido de aplicaciones
Conceptos
Avanzar: ¿A dónde puedo ir desde aquí?
Cómo se utiliza Visual Basic Express
Otros recursos
Paseo con guía por Visual Basic
Conceptos del lenguaje Visual Basic

Recursos para todos: ayuda de mis amigos


No siempre es sencillo aprender a programar, incluso los desarrolladores experimentados encuentran problemas que son
incapaces de resolver sin ayuda. Hay afortunadamente varios millones de desarrolladores en el mundo que utilizan Visual
Basic y muchos de ellos están deseosos de prestar su colaboración.
Nota
Si utiliza Visual Basic Express, quizá algunos vínculos de Ayuda en esta página no estén disponibles, en función de las opcion
es que seleccione durante la instalación. Para obtener más información, vea Solución de problemas de Visual Basic Express.

Utilizar los foros para intercambiar información


Una de las mejores maneras de obtener ayuda adicional para Visual Basic es visitando un foro en línea, una comunidad virtual
donde los usuarios intercambian preguntas y respuestas. Quizá haya observado el botón Formular una pregunta, en la barra
de herramientas del visor de Ayuda: si hace clic en ese botón le llevará a la página de búsqueda de foros de la comunidad
MSDN. Cuando escribe una pregunta, se realiza una búsqueda que devuelve todas las respuestas existentes relacionadas con
la pregunta.
Nota
Debe tener una conexión activa a Internet y, si dispone de un servidor proxy o de un firewall, debe configurarlo para permitir
el acceso a los foros de la comunidad MSDN.

Una pregunta o respuesta individual en un foro se conoce como mensaje publicado (post); una colección de preguntas y
respuestas sobre un tema se conoce como conversación (thread). Si no encuentra una conversación anterior en la que se
responda a su pregunta, puede enviar un mensaje al foro con la pregunta concreta y comprobar más tarde si alguien ha
contestado.
Sugerencias para utilizar los foros:
Lea primero la documentación de Visual Basic. Si se incluye un tema en la Ayuda, no espere que otros usuarios lo
investiguen. Ahora bien, si dispone de la Ayuda pero no la comprende, pregunte lo que desee.
Busque en el foro para ver si ya se ha formulado la pregunta y se ha contestado. Si su pregunta es muy frecuente, tal vez
se omita.
Elija el foro correcto. Si expone una pregunta sobre lenguaje Visual Basic en un foro de formularios Windows Forms, es
menos probable que reciba una respuesta que si la expone en el foro del lenguaje Visual Basic.
Utilice un título descriptivo para su exposición. Si pregunta "¿Puede ayudarme alguien? es menos probable que le
contesten que si pregunta "¿Sabe alguien cómo crear un control de usuario con un fondo transparente?
Formule la pregunta con claridad. Explique lo que intenta hacer y lo que no funciona; incluya lo que ya ha probado y los
resultados que obtuvo.
Incluya código donde sea adecuado. Si una línea determinada de código produce un error, incluya código suficiente para
dejar claro qué se intenta conseguir con esa línea. No intente, sin embargo, exponer la aplicación completa y esperar que
alguien la depure.
Si hace una pregunta, intente contestar a la pregunta de otra persona. Cuanto más dispuesto esté a ayudar a otros
usuarios de la comunidad, más dispuestos estarán a ayudarlo.
Sea educado. Si alguien contesta su pregunta, agradézcaselo. Recuerde que todos los que contestan a las preguntas en el
foro lo hacen de modo voluntario.
Además de los foros de la comunidad MSDN, hay otros muchos relacionados con Visual Basic, formularios Windows Forms y
otras tecnologías. Algunos están disponibles eligiendo Comunidad de Codezone en el menú Comunidad de Visual Basic
2005 o puede buscar en línea.
Inténtelo
Para visitar un foro
1. En el menú Comunidad de Visual Basic 2005, seleccione Formular una pregunta.
Se mostrará la página de búsqueda de foros de la comunidad MSDN.
2. En el campo Especifique una o más palabras clave, escriba VB Transparent User Control y haga clic en Buscar.

Se mostrarán los mensajes publicados anteriores que coincidan con las palabras clave si hay alguna disponible.
3. Revise los mensajes para ver si alguno explica cómo crear un control de usuario transparente.
Si ninguno responde a su pregunta, exponga una pregunta más concreta seleccionando General de Visual Basic de la
lista ¿No se encuentra la contestación?.
4. Para ver si se ha contestado a su pregunta, en el menú Comunidad, elija Comprobar estado de la pregunta.
Sugerencia
También puede elegir que se le notifique por correo electrónico, mensajería instantánea o incluso mediante un mensaj
e de texto al teléfono móvil cuando se da una respuesta en una conversación (thread). Cuando escribe o responde a un
mensaje en un foro, sólo tiene que hacer clic en el botón Enviar alerta.

Otros recursos de la comunidad


Además de los foros en línea, hay otros muchos recursos que pueden ayudar según va aprendiendo a utilizar Visual Basic
2005.
La página de inicio que se muestra cuando inicia Visual Basic Express contiene una sección Noticias que muestra vínculos a
eventos de la comunidad como chats en línea y difusiones por Web que están disponibles para todos los usuarios. Estos
vínculos se actualizan regularmente.
Sugerencia
El canal RSS proporciona los vínculos en la página de inicio; puede elegir los tipos de vínculos que desea ver. Para obtener
más información, vea Cómo: Personalizar la sección de noticias de la Página de inicio.

La función de búsqueda en la Ayuda permite buscar no sólo en el sistema de Ayuda local, sino también en MSDN Online
Library y en la comunidad de Codezone, una colección de recursos en línea para Visual Basic. MSDN Online Library puede
contener versiones más recientes de temas de Ayuda, así como artículos que no se encuentran en la documentación; los sitios
Web que forman la comunidad de Codezone contienen información de utilidad de muchos expertos en Visual Basic.
Nota
Para obtener acceso a MSDN Online Library y a la comunidad de Codezone, debe tener una conexión activa a Internet y si dis
pone de un servidor proxy o de un firewall debe configurarlo para permitir el acceso. Además, la Ayuda debe configurarse pa
ra el acceso en línea. Para obtener más información, vea
Cómo: Incluir contenido en línea en los resultados de búsquedas y de la Ayuda F1.

El equipo de Visual Basic de Microsoft siempre está interesado en su opinión, tanto si desea sugerir una mejora para Visual
Basic 2005, informar de un error en el producto o hacer sugerencias relacionadas con la documentación.
El Centro de comentarios del producto permite especificar sugerencias sobre el producto y la documentación e informar de
errores, así como conocer las opiniones de otros usuarios. También puede hacer un seguimiento de sus sugerencias e
informes de errores, votar sobre características propuestas y mucho más. Para tener acceso al Centro de comentarios del
producto, en el menú Comunidad, elija Enviar comentarios.
El Centro de desarrollo de Microsoft Visual Basic contiene artículos que se actualizan con frecuencia y otra información sobre
Visual Basic. Para tener acceso al Centro de desarrollo, en el menú Comunidad, elija Centro de desarrollo.
El sitio de la comunidad de CodeWise es un recurso para sugerencias de terceros, ejemplos de código, consejo y noticias de
expertos independientes en Microsoft .NET Framework y Microsoft Visual Studio 2005. Para obtener acceso al sitio de la
comunidad de CodeWise, en el menú Comunidad, seleccione Comunidad de Codezone.
Los grupos de usuarios son organizaciones de desarrolladores locales con intereses similares (hay muchos grupos de usuarios
en todo el mundo dedicados a Visual Basic y Visual Basic 2005). La mayoría de los grupos de usuarios se reúnen regularmente
para intercambiar información, técnicas de codificación y establecer contacto con otros desarrolladores. Si vive en una ciudad
grande, lo más probable es que haya un grupo de usuarios de Visual Basic cerca.
Pasos siguientes
En esta lección, ha conocido algunos de los recursos disponibles para la comunidad de Visual Basic en el mundo. En la lección
siguiente, verá otros recursos para obtener más información sobre Visual Basic 2005.
Siguiente lección: Más información: recursos para aprender sobre Visual Basic
Vea también
Tareas
Sugerencias y trucos: no sabía que pudiera hacerlo
Conceptos
Avanzar: ¿A dónde puedo ir desde aquí?
Cómo se utiliza Visual Basic Express
Otros recursos
Paseo con guía por Visual Basic
Conceptos del lenguaje Visual Basic

Más información: recursos para aprender sobre Visual Basic


Después de finalizar todas las lecciones del paseo guiado por Visual Basic, tendrá suficiente información para comenzar a
escribir programas aunque no sea un experto. Incluso los profesionales experimentados en Visual Basic nunca dejan de
aprender, nadie sabe todo lo que hay que saber sobre Visual Basic 2005. A continuación se ofrecen algunas sugerencias para
continuar aprendiendo Visual Basic.
Nota
Si utiliza Visual Basic Express, quizá algunos vínculos de Ayuda en esta página no estén disponibles, en función de las opcion
es que seleccione durante la instalación. Para obtener más información, vea Solución de problemas de Visual Basic Express.

Obtener Ayuda cuando se trabaja


Para muchas personas, la mejor manera de aprender es con la práctica. La manera más sencilla de obtener ayuda al trabajar en
el IDE (entorno de desarrollo integrado) de Visual Basic Express es presionando la tecla F1 para mostrar ayuda contextual.
Al presionar F1 cuando está seleccionada una ventana en el IDE, aparece un tema de Ayuda que describe la ventana y
cómo utilizarla.
Al presionar F1 en el modo de diseño cuando está seleccionado un control, se muestra un tema de Ayuda sobre ese
control.
Al presionar F1 en la ventana Propiedades, se muestra la Ayuda para la propiedad seleccionada.
Al presionar F1 en el Editor de código, se muestra el tema de Referencia del lenguaje correspondiente a la palabra clave
más cercana a la ubicación del cursor actual.
Inténtelo
Para mostrar Ayuda contextual.
1. En el menú Archivo, seleccione Nuevo proyecto.
2. En el cuadro de diálogo Nuevo proyecto, en el panel Plantillas, haga clic en Aplicación para Windows.
3. Seleccione el formulario y en la ventana Propiedades seleccione la propiedad KeyPreview.
4. Presione F1.
Se mostrará un tema de Ayuda que explica la propiedad KeyPreview.
Sugerencia
Quizá haya observado que algunos temas de Ayuda incluyen sintaxis y ejemplos de código para lenguajes distintos de
Visual Basic. Si desea mostrar sólo la sintaxis y el código de Visual Basic, señale Filtro de lenguaje, situado junto al pri
ncipio del tema de Ayuda; en la lista desplegable, desactive las casillas de verificación de todas las entradas excepto Vis
ual Basic (Uso). Se recordará esta configuración hasta que la cambie.

5. Haga doble clic en el formulario para abrir el Editor de código y escriba lo siguiente en el controlador de eventos
Form1_Load.

Dim CurrentUser As String


CurrentUser = My.User.Name

6. Sitúe el cursor dentro de la palabra Name y presione F1.


Se mostrará un tema de Ayuda de la propiedad My.User.Name.
7. Sitúe el cursor dentro de la palabra User y presione F1 de nuevo.
Se mostrará un tema de Ayuda del objeto My.User.
Documentación de productos
La documentación de Visual Basic 2005 contiene información abundante para aprender Visual Basic, incluidos varios temas
"Cómo", tutoriales e información conceptual detallada, así como temas de referencia para cada miembro de .NET Framework.
Tomarse algún tiempo examinando la documentación es una buena manera de descubrir características de Visual Basic 2005
que quizá desconozca.
En función de las elecciones que hizo cuando instaló Visual Basic Express, algunos de los temas quizá no están disponibles. Los
archivos de Ayuda que se incluyen con Visual Basic Express son un subconjunto limitado de MSDN Library para Visual Studio
2005 Express, que a su vez es un subconjunto de MSDN Online Library completo. Durante la instalación, tuvo la opción de
instalar MSDN Library para Visual Studio 2005 Express, si decidió no instalarla, considere hacerlo ahora.
En MSDN Online Library hay disponible documentación adicional del producto y versiones actualizadas de temas incluidos en
MSDN Library para Visual Studio 2005 Express. Para obtener acceso a MSDN Online Library, en el menú Comunidad,
seleccione Centro para desarrolladores y, a continuación, en la página principal del centro para desarrolladores de Microsoft
Visual Basic, seleccione Biblioteca.
Nota
Para obtener acceso a MSDN Online Library, debe tener una conexión activa a Internet y, si dispone de un servidor proxy o d
e un firewall, debe configurarlo para que permita el acceso.

Recursos en línea
Con varios millones de programadores que utilizan Visual Basic, no es de extrañar que existan numerosos recursos en línea
para obtener información sobre Visual Basic. Una búsqueda en MSN de la palabra clave Visual Basic devuelve más de 49
millones de resultados; una búsqueda de la palabra clave Visual Basic 2005 devuelve más de 2 millones. Con tantos recursos
en línea, ¿por dónde comenzar?
El mejor lugar para comenzar a buscar recursos de aprendizaje en línea es el centro para desarrolladores de Microsoft Visual
Basic, disponible en el menú Comunidad. El centro para desarrolladores se actualiza constantemente con nuevos artículos
sobre Visual Basic, así como vínculos a manuales en línea, multimedia y difusiones por Web, tutoriales, etcétera. Sólo tiene que
hacer clic en el vínculo Aprendizaje de Visual Basic en la página principal del centro para desarrolladores de Microsoft
Visual Basic.
Otro buen lugar para comenzar es la comunidad de CodeWise, también disponible en el menú Comunidad. El sitio de la
comunidad de CodeWise es un recurso en línea para sugerencias de terceros, ejemplos de código, consejo y noticias de
expertos independientes en Visual Basic y Visual Basic 2005.
Los miembros de la comunidad de CodeWise han establecido la especialización en herramientas y tecnologías para
desarrolladores de Microsoft. Ofrecen una amplia gama de contenido en sus comunidades en línea, así como oportunidades
para compartir opiniones y aprender de otros usuarios.
Recursos adicionales
Si prefiere métodos de aprendizaje más tradicionales, hay muchas otras oportunidades.
Hay numerosos libros sobre Visual Basic 2005, desde un nivel de principiante hasta usos concretos de Visual Basic 2005, como
la programación de juegos. Puede explorar la sección de programación de la biblioteca local, librería o librero en línea para ver
lo que hay publicado.
Sugerencia
Asegúrese de que los libros que selecciona tratan de Visual Basic 2005 y no de una versión anterior de Visual Basic. Aunque
mucho del material escrito para las versiones anteriores todavía son válidos, en algunos casos hay técnicas más recientes y
mejores en Visual Basic 2005.

Muchos facultades, universidades y escuelas técnicas ofrecen cursos sobre Visual Basic 2005, algunos específicos de Visual
Basic Express. Compruebe los cursos que se imparten en su zona.
Pasos siguientes
En esta lección, se detalla dónde seguir aprendiendo Visual Basic. En la siguiente lección, aprenderá a buscar y utilizar código
de ejemplo.
Próxima lección: Comience a programar: Ejemplos y Starter Kits
Vea también
Tareas
Recursos para todos: ayuda de mis amigos
Conceptos
Avanzar: ¿A dónde puedo ir desde aquí?
Cómo se utiliza Visual Basic Express
Otros recursos
Paseo con guía por Visual Basic
Conceptos del lenguaje Visual Basic

Profundizar: deseo obtener más información sobre...


El paseo guiado por Visual Basic presenta algunas de las operaciones que puede realizar con Visual Basic Express y Visual Basic
2005, pero apenas roza la superficie. Si desea profundizar en algún aspecto que se haya cubierto en el paseo guiado, éste es el
lugar para comenzar.
Nota
Si utiliza Visual Basic Express, quizá algunos vínculos de Ayuda en esta página no estén disponibles, en función de las opcion
es que seleccione durante la instalación. Para obtener más información, vea Solución de problemas de Visual Basic Express.

Para obtener más información sobre el lenguaje Visual Basic


Convenciones de código y estructura de programas
Contiene documentación sobre la estructura básica y las convenciones de código de Visual Basic, como las convenciones de
nomenclatura, los comentarios en el código y las limitaciones de Visual Basic.
Características del lenguaje Visual Basic
Proporciona información general sobre los componentes esenciales de Visual Basic.
Elementos declarados en Visual Basic
Trata las variables, constantes, enumeraciones, estructuras, propiedades, métodos, procedimientos, argumentos de
procedimientos, valores devueltos de funciones, eventos, delegados, interfaces y clases.
Procedimientos en Visual Basic
Explica los procedimientos Sub, Function, Property y Operator, además de temas avanzados como procedimientos
recursivos y sobrecargados.
Flujo de control en Visual Basic
Muestra cómo regular el flujo de la ejecución del programa.
Desarrollo con la función My
Describe una nueva característica denominada My, que proporciona acceso a la información y a las instancias de objeto
predeterminadas relacionadas con una aplicación y su entorno en tiempo de ejecución.
Para obtener más información sobre controles y formularios Windows Forms
Introducción a los formularios Windows Forms
Describe con detalle cómo aprovechar las posibilidades de los formularios Windows Forms para mostrar datos, controlar los
datos proporcionados por el usuario e implementar aplicaciones con facilidad y con una gran seguridad.
Mejorar las aplicaciones de Windows Forms
Describe características mejoradas que permiten generar aplicaciones basadas en Windows de gran calidad.
Aplicaciones para Windows (Cómo se crean en Visual Basic)
Esta página vincula con temas de Ayuda sobre tareas de Visual Basic ampliamente utilizadas para crear aplicaciones basadas
en Windows.
Controles que se utilizan en formularios Windows Forms
Lista alfabética de los controles y componentes que se utilizan en formularios Windows Forms.
Controles de formularios Windows Forms por función
Muestra los controles y componentes de formularios Windows Forms según la función general.
Lo nuevo en formularios Windows Forms y controles de formularios Windows Forms
Muestra las nuevas y mejoradas características disponibles en esta versión de Visual Basic 2005.
Para obtener más información sobre depuración y control de errores
Depurar la aplicación de Visual Basic
Esta página proporciona punteros a la documentación sobre las características de depuración integradas en Visual Basic
2005.
Cómo: Corregir errores en tiempo de ejecución con el Ayudante de excepciones
El Ayudante de excepciones, que aparece siempre que se produce una excepción en tiempo de ejecución en el depurador,
muestra el tipo de excepción, sugerencias de solución de problemas y las medidas correctoras que se pueden aplicar
mediante el Ayudante de excepciones.
Cómo: Aplicar tareas de edición en modo de interrupción con Editar y continuar
Puede utilizar la opción Editar y continuar para modificar el código en modo de interrupción y, posteriormente, continuar sin
detener ni reiniciar la ejecución.
Cómo: Establecer un punto de interrupción simple
El depurador de Visual Studio proporciona muchas maneras de establecer los puntos de interrupción. En este tema se
ofrecen dos maneras rápidas de establecer puntos de interrupción simples.
Cómo: Corregir los errores del compilador con la función de corrección automática
Muestra cómo se corrigen los errores del compilador en el Editor de código mediante la característica Corrección
automática de compilación inteligente.
Información general sobre el control estructurado de excepciones de Visual Basic
Describe y muestra el control estructurado de excepciones en Visual Basic.
Para obtener más información sobre bases de datos
Obtener acceso a datos en aplicaciones de Visual Basic
Visual Basic incluye varias nuevas características para ayudar en el desarrollo de las aplicaciones que tienen acceso a los
datos.
Información general sobre la presentación de datos
Muestre los datos a los usuarios de la aplicación enlazando los datos a los controles en un formulario. Cree controles
enlazados a datos arrastrando elementos de la ventana Orígenes de datos a un formulario Windows Forms.
Información general sobre orígenes de datos
Los orígenes de datos representan los datos disponibles para la aplicación y se muestran en la ventana Orígenes de datos.
Información general sobre TableAdapter
TableAdapters proporcionan comunicación entre la aplicación y una base de datos.
Tutorial: Mostrar datos relacionados en un formulario en una aplicación para Windows
Proporciona detalles paso a paso sobre cómo mostrar los datos de dos tablas relacionadas y mostrarlos en un formulario
Windows Forms.
Validar datos
Los conjuntos de datos proporcionan eventos específicos que se producen a medida que cambian los valores de las filas de
datos. Es posible crear controladores de eventos para validar estos cambios en función de las necesidades de una aplicación.
Para obtener más información sobre programación orientada a objetos
Introducción a los objetos en Visual Basic
Proporciona una introducción a los términos y conceptos utilizados en la programación orientada a objetos.
Crear y utilizar objetos
Muestra cómo crear y utilizar instancias de clases.
Administrar grupos de objetos
Proporciona técnicas para trabajar con matrices y colecciones de objetos.
Descripción de las clases
Explica la creación y duración de objetos en un procedimiento paso a paso.
Interfaces en Visual Basic
Describe qué son las interfaces y cómo pueden utilizarse en las aplicaciones.
Herencia en Visual Basic
Describe cómo definir clases que sirvan como base para otras clases.
Para obtener más información sobre controles de usuario y componentes
Property (Instrucción)
Declara el nombre de una propiedad y los procedimientos de propiedades que se utilizan para almacenar y recuperar el
valor de la propiedad.
Crear y utilizar componentes en Visual Basic
Define el término "componente" y describe cómo y cuándo crear componentes.
Cómo: Trabajar con controles ActiveX
Ilustra la forma de utilizar controles ActiveX para agregar características al Cuadro de herramientas de Visual Studio.
Constantes y enumeraciones en Visual Basic
Trata el almacenamiento de valores que no cambian para un uso repetido.
Información general sobre las enumeraciones
Explica cómo almacenar y dar nombre a conjuntos de valores de constante relacionados.
Para obtener más información sobre gráficos
Gráficos y dibujos en formularios Windows Forms
Contiene los vínculos a temas que describen y muestran cómo utilizar la interfaz gráfica en formularios Windows Forms.
Introducción a la programación de gráficos
Describe cómo llevar a cabo tareas básicas con GDI+.
Utilizar fuentes y texto
Muestra cómo dibujar texto y utilizar fuentes y familias de fuentes.
Utilizar contenedores de gráficos
Muestra cómo administrar estados de objetos gráficos y contenedores de gráficos anidados.
Gráficos de doble búfer
Muestra cómo reducir el parpadeo con búfer doble.
Controles compatibles con dibujos propietarios integrados
La característica de dibujo propietario de formularios Windows Forms, que también se conoce como dibujo personalizado,
es una técnica para cambiar la apariencia visual de determinados controles.
Para obtener más información sobre implementación
Información general sobre la implementación de ClickOnce
Describe el propósito de ClickOnce y la forma de resolver los problemas principales de la implementación de aplicaciones de
Windows Forms en los equipos cliente.
Elegir una estrategia de implementación de ClickOnce
Explica las distintas maneras en las que puede implementar una aplicación ClickOnce en los equipos cliente, incluidas las
ventajas y las limitaciones de cada estrategia.
Elegir una estrategia de actualización de ClickOnce
Describe las distintas opciones disponibles para actualizar una aplicación ClickOnce una vez instalada, incluidas las
suscripciones de actualización automatizada y las actualizaciones a petición.
Solucionar problemas en implementaciones ClickOnce
Describe los problemas más comunes que aparecen al implementar aplicaciones ClickOnce y cómo resolverlos.
Vea también
Tareas
Comience a programar: Ejemplos y Starter Kits
Conceptos
Avanzar: ¿A dónde puedo ir desde aquí?
Cómo se utiliza Visual Basic Express
Otros recursos
Paseo con guía por Visual Basic
Conceptos del lenguaje Visual Basic

Comience a programar: Ejemplos y Starter Kits


Hay algo mejor que escribir código: no tener que escribir código; Visual Basic 2005 facilita la reutilización de código contenido
en temas de Ayuda, aplicaciones de ejemplo y Starter Kits.
Nota
Si está utilizando Visual Basic Express, algunos de los vínculos de la Ayuda pueden no estar disponibles, dependiendo de las
opciones que elija durante la instalación. Para obtener más información, vea Solución de problemas de Visual Basic Express.

Copiar código
Puede que haya notado mientras trabajaba en las lecciones que, siempre que había bloques de código en los temas de Ayuda,
también había vínculos marcados como Copiar código. Haciendo clic en el vínculo Copiar código de un tema de la Ayuda se
copia en el Portapapeles el código de ese bloque; después puede pegarlo directamente en el Editor de código en lugar de
escribirlo.
Muchos temas de Ayuda contienen ejemplos de código para mostrar cómo podría utilizar un elemento determinado del
lenguaje, propiedad o función. Aunque puede que no corresponda exactamente a lo que desea hacer, puede copiarlos en su
código como punto de partida y, a continuación, modificarlos para adecuarlos a sus necesidades cambiando los nombres de
variables y referencias.
Utilizar las aplicaciones de ejemplo
Visual Basic 2005 incluye varias aplicaciones de ejemplo que pueden darle una ventaja para crear sus propios programas. Las
aplicaciones de ejemplo son proyectos completos que se pueden cargar en Visual Basic 2005 y ejecutar sin necesidad de
modificación. En la mayoría de los casos, no son muy útiles como programas; sin embargo, a menudo contienen mucho código
útil.
Por ejemplo, la aplicación de ejemplo Game muestra un juego sencillo de formularios Windows Forms, completado con
gráficos de GDI+, características de temporizador, configuración del usuario y almacenamiento de la puntuación máxima. Si
está escribiendo su propio juego de cartas, el código de la interfaz de usuario del ejemplo Game no será de mucha utilidad. Sin
embargo, el código para almacenar y mostrar las puntuaciones máximas podría ser muy útil: puede copiarlo y utilizarlo en su
programa tal y como está.
En otros casos, puede que desee tomar la aplicación de ejemplo y utilizarla como punto de partida, modificándola y
agregándola para adaptarla a sus necesidades. Aun cuando el ejemplo no hace exactamente lo que desea, con frecuencia es
más fácil usarlo que empezar desde cero. Para obtener más información, vea Aplicaciones de ejemplo de Visual Basic Express.
Starter Kits
Los Starter Kits son parecidos a las aplicaciones de ejemplo, pero a diferencia de la mayoría de los ejemplos, son aplicaciones
completas que se pueden utilizar por sí solas. Por ejemplo, el Starter Kit My Movie Collection es una aplicación completa para
mantener un registro de su colección de películas en DVD.
Como las aplicaciones de ejemplo, los Starter Kits se pueden utilizar como un punto de partida para su propio programa. Si
desea crear un programa para mantener un registro de los archivos de música en lugar de las películas, puede personalizar
fácilmente el kit My Movie Collection para ajustarlo a sus necesidades. Para ser de más ayuda, los Starter Kits contienen
sugerencias para la personalización, además del código de ejemplo. Para obtener más información, vea
Starter Kits: Comience a crear aplicaciones rápidamente.
Reutilizar su propio código
Después de haber estado programando durante algún tiempo, probablemente se dará cuenta de que está escribiendo una y
otra vez el mismo código. Por ejemplo, podría escribir código para un control TextBox que sólo permita que se escriban
números. En lugar de escribir el mismo código para cada programa, puede escribir una vez el código y guardarlo arrastrándolo
hacia el Cuadro de herramientas. La próxima vez que necesite ese código, puede arrastrarlo de nuevo al Editor de código
para insertarlo en su código.
Sugerencia
Si cree que está guardando mucho código en el Cuadro de herramientas, puede que le resulte difícil encontrar el código q
ue necesita. También puede guardar el código como un Fragmento de código y tener acceso al mismo exactamente igual qu
e lo hace con los Fragmentos de código que se entregan con Visual Basic 2005.
Buscar código
Además del código que va incluido con Visual Basic Express, hay muchos otras fuentes para obtener código, tanto de Microsoft
como de otros fabricantes. Puede buscar fragmentos de código, plantillas y starter kits, ejemplos y controles eligiendo
Búsqueda de la comunidad en el menú Comunidad. Para obtener más información, vea
Cómo: Buscar fragmentos de código en línea.
También puede buscar en la Ayuda para encontrar temas que contienen código. Para obtener más información, vea
Cómo: Buscar temas con código de muestra.
Pasos siguientes
En esta lección, aprendió varias opciones para buscar código de manera que no sea necesario escribirlo manualmente. En la
lección siguiente, averiguará dónde obtener información detallada sobre las distintas características de Visual Basic Express.
Próxima lección: Profundizar: deseo obtener más información sobre...
Vea también
Tareas
Más información: recursos para aprender sobre Visual Basic
Conceptos
Avanzar: ¿A dónde puedo ir desde aquí?
Cómo se utiliza Visual Basic Express
Otros recursos
Paseo con guía por Visual Basic
Conceptos de Visual Basic

Ayuda para usuarios de Visual Basic 6.0


Como desarrollador experimentado, ha empleado mucho tiempo y esfuerzo en aprender Visual Basic 6.0. A primera vista,
puede parecer que Visual Basic 2005 es radicalmente diferente y que deberá volver a aprenderlo todo. Sin embargo, aunque
han cambiado muchas cosas, la experiencia general de desarrollar en Visual Basic continúa siendo básicamente la misma. Sus
conocimientos de Visual Basic 6.0 le ayudará enseguida a ser productivo utilizando Visual Basic 2005.
Deberá aprender muchos cambios respecto a Visual Basic 6.0 y dejar de lado algunos hábitos anteriores. Han cambiado
algunas reglas del lenguaje (tareas como depurar e implementar e incluso la terminología), a menudo de manera sutil. En
última instancia, los cambios hacen que Visual Basic 2005 sea más fácil y eficaz.
Los temas siguientes le ayudarán a identificar los cambios realizados en Visual Basic 2005.
En esta sección
Entorno de desarrollo integrado para usuarios de Visual Basic 6.0
Cambia en el entorno de desarrollo.
Administración de proyectos para usuarios de Visual Basic 6.0
Cambia en el sistema de proyectos.
Programación Web para usuarios de Visual Basic 6.0
Cambia en el desarrollo relacionado con Web.
Clases Web para usuarios de Visual Basic 6.0
Cambia en los proyectos de WebClass (también denominados proyectos de aplicación de IIS).
Acceso a datos para usuarios de Visual Basic 6.0
Cambia en el acceso a datos y las herramientas de datos.
Creación de componentes para usuarios de Visual Basic 6.0
Cambia en la creación de componentes.
Controles de usuario para usuarios de Visual Basic 6.0
Cambia en los proyectos de UserControl (también denominados proyectos de controles ActiveX). Proporciona un vínculo a
información sobre el objeto PropertyBag.
Formularios Windows Forms para usuarios de Visual Basic 6.0
Cambia en los formularios.
Depuración para usuarios de Visual Basic 6.0
Cambia en la depuración.
Instalación e implementación para usuarios de Visual Basic 6.0
Cambia en la implementación e instalación.
Globalización y localización para usuarios de Visual Basic 6.0
Cambia en la localización.
Programación de la API de Windows para usuarios de Visual Basic 6.0
Cambia en el acceso a la API de Windows.
Acceso al Registro para usuarios de Visual Basic 6.0
Cambia en el establecimiento y recuperación de configuraciones del Registro.
Equivalentes de constante para usuarios de Visual Basic 6.0
Cambia en las constantes que han cambiado en Visual Basic 2005.
Bibliotecas de objetos y espacios de nombres para usuarios de Visual Basic 6.0
Diferencias y similitudes entre las bibliotecas de objetos de Visual Basic 6.0 y los espacios de nombres de Visual Basic 2005.
Bibliotecas en tiempo de ejecución para usuarios de Visual Basic 6.0
Diferencia entre los archivos en tiempo de ejecución de Visual Basic 6.0 y Common Language Runtime de .NET Framework.
Secciones relacionadas
Cambios en el lenguaje para usuarios de Visual Basic 6.0
Cambia en el lenguaje Visual Basic.
Controles de formularios Windows Forms para usuarios de Visual Basic 6.0
Cambia en los controles.
Actualizar desde Visual Basic 6.0
Convertir aplicaciones a Visual Basic 2005.
Lo nuevo en Visual Basic
Características nuevas de Visual Basic 2005.
Conceptos de Visual Basic

Lo nuevo para usuarios de Visual Basic 6.0


Si es un usuario experimentado de Visual Basic 6.0, encontrará múltiples características nuevas o significativamente mejoradas
en Visual Basic 2005, que facilitan el desarrollo con Visual Basic y la hacen más eficaz que cualquier versión anterior. La
siguiente lista destaca algunos de los cambios más importantes y proporciona los vínculos para obtener información detallada.
Lo nuevo en el lenguaje Visual Basic
Visual Basic ofrece numerosas características nuevas y mejoradas como herencia, interfaces y sobrecarga, que lo convierten en
un eficaz lenguaje de programación orientada a objetos. Como desarrollador de Visual Basic, puede crear auténticas
aplicaciones multiproceso. Otras características nuevas de lenguaje en Visual Basic 2005 incluyen el control estructurado de
excepciones, atributos personalizados y compatibilidad con la especificación de lenguajes comunes (CLS, Common Language
Specification).
Visual Basic 2005 ofrece numerosas características nuevas o mejoradas de lenguaje orientado a objetos como la herencia, la
sobrecarga, la palabra clave Overrides, interfaces, miembros compartidos y constructores.
Para obtener más información sobre lo que es nuevo en el lenguaje de Visual Basic, vea
Lo nuevo en el lenguaje Visual Basic para usuarios de Visual Basic 6.0.
Para obtener un análisis de características y funcionalidad que han cambiado de versiones anteriores, vea
Cambios en el lenguaje para usuarios de Visual Basic 6.0.
Desarrollo de Visual Basic con My
Visual Basic 2005 proporciona nuevas características para el desarrollo rápido de aplicaciones que tienen como objetivo
mejorar la productividad y facilidad de uso mientras son eficaces. Una de estas características, llamada My, da el acceso a la
funcionalidad normalmente utilizada proporcionada por .NET Framework, como también información e instancias de objeto de
valor predeterminado relacionadas con la aplicación y su entorno en tiempo de ejecución. Esta información se organiza en un
formato que se puede descubrir a través de IntelliSense y lógicamente se puede definir según el uso. Para obtener más
información, vea Desarrollo con la función My.
Lo nuevo en controles y formularios Windows Forms
Los formularios Windows Forms son el nuevo marco de trabajo orientado a objetos que implementa .NET Framework. Los
formularios Windows Forms, en combinación con los controles de formularios Windows Forms, proporcionan una
arquitectura sólida para el desarrollo de aplicaciones basadas en Windows en Visual Basic.
Para obtener más información sobre lo que es nuevo en formularios y controles, vea
Lo nuevo para usuarios de formularios Windows Forms para Visual Basic 6.0.
Si está familiarizado con formularios en Visual Basic 6.0, vea Tareas de formularios para usuarios de Visual Basic 6.0 para una
introducción a los nuevos conceptos.
Lo nuevo en el IDE de Visual Basic
A simple vista, el entorno de desarrollo integrado de Visual Basic 2005 puede resultar extraño, pero cuando empiece a
utilizarlo, verá que tiene muchas características nuevas que aumentarán su productividad.
Para obtener más información, vea Lo nuevo en el IDE de Visual Studio para usuarios de Visual Basic 6.0.
Lo nuevo en datos
Visual Basic 2005 incluye varias características nuevas para ayudar a desarrollar aplicaciones que tienen acceso a datos. Los
Asistente para la configuración de orígenes de datos se simplifican conectando su aplicación con los datos en las bases de
datos, servicios Web y los objetos creados por usuario. El nuevo Ventana Orígenes de datos proporciona una ubicación central
para ver los datos disponibles y asociados con su proyecto y reduce la complejidad de enlace de datos, permitiéndole arrastrar
elementos desde la ventana a los formularios para crear controles enlazados a datos. El relleno de conjuntos de datos y la
ejecución de consultas y procedimientos almacenados se consiguen ahora utilizando el nuevo objeto
Información general sobre TableAdapter generado por Visual Studio. La nueva característica de datos locales permite incluir
las bases de datos de Microsoft Access y las bases de datos de Microsoft SQL Server Express directamente en su aplicación.
Para obtener una lista completa de nuevas características, vea Lo nuevo en datos.
Lo nuevo en instalación e implementación
Implementar aplicaciones creadas en Visual Basic 2005 es más fácil y eficaz que antes gracias a las nuevas tecnologías, como la
implementación ClickOnce.
La implementación ClickOnce permite publicar aplicaciones de consola, basadas en Windows, de actualización automática, que
se instalan, actualizan y ejecutan tan fácilmente como las aplicaciones Web. Las nuevas fichas Seguridad, Firma y Publicar en
el Diseñador de proyectos le permiten personalizar su implementación ClickOnce. Utilice el nuevo comando Publicar en el
menú Generar (y menú contextual en Explorador de soluciones) para llegar al Asistente para publicación, una
herramienta que lo guía a través de la publicación de su aplicación. Para obtener más información, vea
Implementación ClickOnce.
Además, los proyectos de Instalación e implementación basados en el Instalador de Windows de Visual Basic 2005
reemplazan el asistente de instalación e implementación de Visual Basic 6.0 . Para obtener más información, vea
Instalación e implementación para usuarios de Visual Basic 6.0
Actualizar aplicaciones creadas en Visual Basic 6.0
Visual Studio 2005 ofrece la posibilidad de actualizar aplicaciones creadas con Visual Basic 6.0 para poder continuar su
desarrollo aprovechando las ventajas de .NET Framework. Cuando abra por primera vez un archivo de proyecto de Visual Basic
6.0 (.vbp), aparecerá el Asistente para actualización. También se proporciona una herramienta de línea de comandos para
actualizar proyectos fuera del entorno de desarrollo. Para obtener más información, vea
Actualizar aplicaciones creadas en versiones anteriores de Visual Basic.
Vea también
Conceptos
Lo nuevo en Visual Basic
Otros recursos
Paseo con guía por Visual Basic
Conceptos de Visual Basic

Lo nuevo en el lenguaje Visual Basic para usuarios de Visual


Basic 6.0
Visual Basic 2005 proporciona numerosas características nuevas y mejoradas, como herencia, interfaces y sobrecarga, que lo
convierten en un eficaz lenguaje de programación orientado a objetos. Esta página resalta algunos de los principales cambios y
proporciona vínculos para obtener una información detallada.
Nota
Si está familiarizado con Visual Basic 6.0, vea Cambios en el lenguaje para usuarios de Visual Basic 6.0 para obtener una intr
oducción a los nuevos conceptos.

Sugerencia
Para una introducción práctica a las nuevas características del lenguaje en Visual Basic 2005, vea
Paseo con guía por Visual Basic.

Lo nuevo
A continuación se muestran las nuevas características del lenguaje en Visual Basic 2005.
Herencia
Visual Basic 2005 admite el concepto de inheritance y le permite definir clases que sirven de base para las clases derivadas. Las
clases derivadas heredan, y pueden extender, las propiedades y los métodos de la clase base. También pueden reemplazar los
métodos heredados con nuevas implementaciones de la clase base. De manera predeterminada, se pueden heredar todas las
clases creadas con Visual Basic 2005. Como los formularios que se diseñan son realmente clases, puede utilizar la herencia
para definir nuevos formularios basados en los existentes. Para obtener información detallada, vea Herencia en Visual Basic.
Control de excepciones
Visual Basic 2005 permite el control estructurado de excepciones, utilizando una versión mejorada de la sintaxis
Try...Catch...Finally compatible con otros lenguajes como C++. El control estructurado de excepciones combina una
estructura de control moderna (similar a Select Case o While) con excepciones, bloques de código protegidos y filtros. El
control estructurado de excepciones facilita la creación y el mantenimiento de los programas con controladores de errores
robustos y completos. Para obtener información detallada, vea Introducción al control de excepciones.
Sobrecarga
La sobrecarga es la capacidad de definir propiedades, métodos, procedimientos u operadores que tienen el mismo nombre
pero utilizan diferentes tipos de datos. Puede utilizar los procedimientos sobrecargados para proporcionar tantas
implementaciones como sea necesario para controlar tipos diferentes de datos, mientras aparece como un procedimiento
único y versátil. Para obtener información detallada, vea Propiedades y métodos sobrecargados.
Reemplazar propiedades y métodos
La palabra clave Overrides permite que los objetos derivados reemplacen características heredadas de objetos primarios. Los
miembros reemplazados tienen los mismos argumentos que los miembros heredados de la clase base, pero tienen diferentes
implementaciones. La nueva implementación de un miembro puede llamar a la implementación original de la clase primaria
precediendo el nombre de miembro con MyBase. Para obtener información detallada, vea
Reemplazar propiedades y métodos.
Constructores y destructores
Los constructores son procedimientos que controlan la inicialización de instancias nuevas de una clase. Por otra parte, los
destructores son métodos que liberan recursos del sistema cuando una clase deja el ámbito o se establece en Nothing. Visual
Basic 2005 admite los constructores y destructores mediante los procedimientos Sub New Sub Finalize. Para obtener
información detallada, vea Duración de los objetos: cómo se crean y destruyen.
Tipos de datos
Visual Basic 2005 presenta tres nuevos tipos de datos. El tipo de datos Char es una cantidad de 16 bits sin signo utilizada para
almacenar caracteres Unicode. Es equivalente al tipo de datos .NET Framework System.Char. El tipo de datos Short, un entero
de 16 bits con signo, recibe el nombre de Integer en las versiones anteriores de Visual Basic. El tipo de datos Decimal es un
entero de 96 bits con signo ajustado por una potencia variable de 10. En versiones anteriores de Visual Basic, sólo estaba
disponible en una Variant. Además, Visual Basic admite ahora tipos de datos enteros sin signo (UShort, UInteger y ULong),
así como el tipo SByte con signo. Para obtener información detallada, vea Tipos de datos en Visual Basic.
Interfaces
Las interfaces describen las propiedades y los métodos de las clases, pero, a diferencia de éstas, no proporcionan
implementaciones. Utilice la instrucción Interface para declarar interfaces; use la instrucción Implements para escribir código
que ponga en práctica los elementos descritos en la interfaz. Para obtener información detallada, vea Interfaces en Visual Basic.
Delegados
Los delegados son objetos que pueden llamar a los métodos de los objetos y se describen a veces como punteros de funciones
orientados a objetos con seguridad de tipos. Puede utilizar delegados para permitir que los procedimientos especifiquen un
método de controlador de evento que se ejecute cuando tenga lugar un evento. También puede utilizar delegados con
aplicaciones multiproceso. Para obtener información detallada, vea Los delegados y el operador AddressOf.
Miembros compartidos
Los miembros compartidos son propiedades, procedimientos y campos que comparten todas las instancias de una clase. Los
miembros de datos compartidos son útiles cuando varios objetos necesitan utilizar información que es común a todos. Puede
utilizar los métodos de clase compartidos sin crear primero un objeto a partir de una clase. Para obtener información detallada,
vea Miembros compartidos en Visual Basic.
Referencias
Puede utilizar referencias para utilizar objetos definidos en otros ensamblados. En Visual Basic 2005 las referencias señalan a
los ensamblados en lugar de a las bibliotecas de tipos. Para obtener información detallada, vea
Referencias y la instrucción Imports.
Espacios de nombres
Los espacios de nombres evitan los conflictos de nomenclatura mediante la organización de clases, interfaces y métodos
dentro de unas jerarquías. Para obtener información detallada, vea Espacios de nombres en Visual Basic.
Ensamblados
Los ensamblados reemplazan y extienden la funcionalidad de las bibliotecas de tipos describiendo todos los archivos
necesarios para un componente o una aplicación en particular. El ensamblado puede contener uno o varios espacios de
nombres. Para obtener información detallada, vea Ensamblados.
Atributos
Puede utilizar atributos para proporcionar información adicional sobre elementos de programa. Por ejemplo, puede utilizar un
atributo para especificar qué métodos de una clase se deben exponer cuando la clase se utiliza como un servicio Web XML.
Para obtener información detallada, vea Atributos en Visual Basic.
Subprocesamiento múltiple
Puede utilizar Visual Basic 2005 para escribir aplicaciones que pueden realizar varias tareas de forma independiente. Una tarea
que pueda albergar otras tareas se puede ejecutar en un subproceso aparte, un proceso conocido como subprocesamiento
múltiple. Como las tareas complicadas se ejecutan en subprocesos separados de la interfaz de usuario, el subprocesamiento
múltiple consigue que las aplicaciones sean más sensibles a los datos proporcionados por el usuario. Para obtener información
detallada, vea Aplicaciones multiproceso.
Operadores de desplazamiento
Visual Basic 2005 ahora admite las operaciones de desplazamiento aritmético a la izquierda y a la derecha en los tipos de
datos enteros (Byte, Short, Integer y Long), así como en tipos sin signo (UShort, UInteger y ULong). Los desplazamientos
aritméticos no son circulares, lo que significa que los bits desplazados a un extremo del resultado no se vuelven a introducir en
el otro extremo. También se proporcionan los operadores de asignación correspondientes. Para obtener más información, vea
Operadores de desplazamiento y Operadores de asignación.
Declaración de variables de bucle
Puede utilizar Visual Basic 2005 para declarar una variable de bucle como parte de un bucle For o For Each. Es posible incluir
una cláusula As para la variable en la instrucción For o For Each, siempre que no se haya declarado ninguna variable con ese
nombre fuera del bucle. El ámbito de una variable de bucle declarada de esta manera es el propio bucle. Para obtener más
información, vea Instrucción For...Next (Visual Basic) y Instrucción For Each...Next (Visual Basic).
Lo nuevo en el lenguaje Visual Basic para Visual Basic 2005
En esta versión de Visual Studio, las nuevas características del lenguaje en Visual Basic 2005 incluyen la continuación del bucle,
disposición de recursos garantizada, propiedades de acceso mixto, tipos de datos sin signo, sobrecarga de operadores, tipos
genéricos, y mucho más. Para obtener más información, vea Lo nuevo en el lenguaje Visual Basic.
Vea también
Conceptos
Lo nuevo para usuarios de Visual Basic 6.0
Lo nuevo para usuarios de formularios Windows Forms para Visual Basic 6.0
Lo nuevo en el IDE de Visual Studio para usuarios de Visual Basic 6.0
Conceptos de Visual Basic

Lo nuevo para usuarios de formularios Windows Forms para


Visual Basic 6.0
Los formularios Windows Forms son el nuevo marco de trabajo orientado a objetos que implementa .NET Framework. Los
formularios Windows Forms y sus controles proporcionan una arquitectura sólida para el desarrollo de aplicaciones basadas
en Windows en Visual Basic.
Nota
Si está familiarizado con formularios en Visual Basic 6.0, vea Tareas de formularios para usuarios de Visual Basic 6.0 para un
a introducción a los nuevos conceptos.

Lo nuevo
Los siguientes conceptos forman parte del desarrollo de aplicaciones cliente con formularios Windows Forms.
Formularios Windows Forms
Los formularios Windows Forms son la nueva plataforma de desarrollo de aplicaciones para Microsoft Windows, basada en
.NET Framework. Puede utilizar este marco de trabajo para crear aplicaciones eficaces y completas basadas en Windows
mediante un conjunto de clases claro, orientado a objetos y extensible. Para obtener información detallada, vea
Información general sobre formularios Windows Forms.
Controles de formularios Windows Forms
Visual Basic 2005 incluye todos los controles que ya conoce con Visual Basic 6.0 y la mayoría de ellos están mejorados con las
nuevas propiedades, métodos y eventos que los hacen más eficaces. Además, existen varios controles y componentes nuevos
para crear su interfaz de usuario. Para obtener más información, vea Controles que se utilizan en formularios Windows Forms.
Los formularios Windows Forms como capa de presentación de una aplicación de tres niveles
Mediante llamadas HTTP a un servidor conectado a una base de datos, los formularios Windows Forms pueden actuar como
una interfaz de usuario, al combinar la interfaz de usuario de una aplicación cliente con el procesamiento avanzado de un
servidor de aplicaciones. Para obtener información detallada, vea Tutorial: Crear una aplicación distribuida.
Crear una aplicación cliente
Puede utilizar formularios Windows Forms para crear una aplicación completa del cliente mediante Visual Basic. Esta
aplicación puede obtener acceso a una amplia gama de orígenes de datos y proporcionar utilidades de visualización y edición
de datos utilizando los controles de los formularios Windows Forms. Para obtener información detallada, vea
Tutorial: Crear un formulario Windows Forms sencillo.
Modelo de seguridad en los formularios Windows Forms
La seguridad de los formularios Windows Forms se basa en las directivas de seguridad establecidas dentro de .NET
Framework. El espacio de nombres System.Security proporciona la estructura subyacente del sistema de seguridad de .NET
Framework, incluidas las clases base para los permisos. Para obtener información detallada, vea
Seguridad en los formularios Windows Forms.
Propiedades Tag y Name
Las propiedades Tag y Name ahora forman parte del Control. La propiedad Tag es un repositorio dentro de la memoria para
almacenar datos sobre el control. La propiedad Name contiene el nombre del control. La propiedad Name se puede utilizar en
tiempo de ejecución para evaluar el objeto por nombre en lugar de evaluarlo por tipo y nombre de programación. Para
obtener más información sobre la propiedad Tag, vea Control.Tag Property. Para obtener más información sobre la propiedad
Name, vea Control.Name Property.
Formularios Windows Forms no rectangulares
Es fácil personalizar la forma de los formularios Windows Forms. Para obtener formularios no rectangulares sólo necesita un
archivo de imagen y configurar la propiedad. Para obtener información detallada, vea
Cómo: Crear un formulario Windows Forms con forma.
Programación de dispositivos inteligentes
Puede utilizar ahora Visual Basic para desarrollar aplicaciones complejas para los dispositivos con limitaciones de recursos.
Puede utilizar las herramientas proporcionadas por Visual Studio 2005 y .NET Compact Framework, un subconjunto de .NET
Framework, con el fin de crear, generar y depurar aplicaciones que se ejecutan en dispositivos inteligentes.
Si bien casi todo el lenguaje Visual Basic es apto para el desarrollo de aplicaciones para dispositivos, algunas características de
Visual Basic 2005 se han cambiado o suprimido para adaptarlo a las diferencias inherentes de las aplicaciones para
dispositivos. Para obtener más información, vea Diferencias respecto al desarrollo para escritorio en .NET Compact Framework.
Lo Nuevo en formularios Windows Forms y controles para Visual Studio 2005
Además de las características enumeradas anteriormente, hay varias características y mejoras que son nuevas en Visual Basic
2005, entre las que se incluyen varios controles nuevos, compatibilidad para operaciones en segundo plano y dibujo
personalizado de varios controles. Para obtener más información, vea
Lo nuevo en formularios Windows Forms y controles de formularios Windows Forms.
Vea también
Conceptos
Lo nuevo para usuarios de Visual Basic 6.0
Lo nuevo en el lenguaje Visual Basic para usuarios de Visual Basic 6.0
Lo nuevo en el IDE de Visual Studio para usuarios de Visual Basic 6.0
Conceptos de Visual Basic

Lo nuevo en el IDE de Visual Studio para usuarios de Visual


Basic 6.0
A primera vista, el entorno de desarrollo integrado (IDE) de Visual Basic 2005 puede parecer extraño, pero cuando comience a
utilizarlo, comprobará que presenta muchas características nuevas que le harán más productivo. En esta página se resaltan
algunos de los principales cambios y se proporcionan vínculos para obtener una información detallada.
Nota
Si está familiarizado con Visual Basic 6.0, vea Entorno de desarrollo integrado para usuarios de Visual Basic 6.0.

Sugerencia
Para una introducción práctica a las nuevas características de Visual Basic 2005, vea Paseo con guía por Visual Basic.

Lo nuevo
A continuación, se enumeran algunas características nuevas del IDE de Visual Basic 2005.
IDE compartido
Todos los lenguajes .NET, Visual Basic, Visual C#, Visual C++ entre otros, se alojan en el IDE de Visual Studio. Compartir un
único IDE ofrece numerosas ventajas, que incluyen la consolidación de herramientas similares de distintos productos en un
conjunto de herramientas compartidas utilizadas en Visual Studio.
Administración de ventanas
Visual Studio facilita más que nunca la presentación de una mayor cantidad de código en pantalla al mismo tiempo.
Los documentos con fichas organizan las ventanas de documentos en fichas dentro del IDE automáticamente. Por ejemplo, si
edita varios documentos en un editor o diseñador, dichos documentos aparecen en el área de la interfaz de múltiples
documentos (MDI) en forma de fichas en la parte superior del área.
Ocultar automáticamente permite minimizar las ventanas de herramientas, como el Explorador de soluciones y el
Cuadro de herramientas, en los bordes del IDE, de forma que ocupen poco espacio. Después de minimizar las ventanas de
herramientas, el espacio visible del editor se incrementa.
Para obtener más información, vea Administración de ventanas.
Funciones de edición
Visual Studio dispone ahora de un Editor de código unificado para todos los lenguajes en el IDE, con características
especializadas para cada lenguaje. El Editor de código incluye diversas mejoras, como ajuste de línea, búsqueda incremental,
esquematización de código, contracción a definición, numeración de líneas, impresión en color y accesos directos. Se puede
tener acceso a dichas características desde el menú Edición o desde el menú contextual. Para obtener más información, vea
Lo nuevo en la edición de código.
Los miniprogramas de código son segmentos de código de ejemplo listos para insertarse en proyectos de Visual Basic. Para
mostrar una lista de miniprogramas de código disponibles, haga clic con el botón secundario del mouse en el documento
activo en el Editor de código y seleccione Insertar fragmento de código en el menú contextual. Haga clic en el nombre del
miniprograma (fragmento de código) que desee y el código se insertará en el editor, listo para que lo modifique según sea
necesario. Para obtener más información, vea Cómo: Administrar fragmentos de código.
Igual que las etiquetas inteligentes de Office, las etiquetas inteligentes de Visual Studio ponen a disposición tareas comunes
que se apliquen en el contexto de su trabajo. Por ejemplo, mediante las etiquetas inteligentes puede corregir errores comunes
en Visual Basic haciendo clic en un botón.
Implementación
La implementación ClickOnce permite implementar aplicaciones de actualización automática para Windows que pueden
instalarse y ejecutarse tan fácilmente como las aplicaciones Web. También pueden implementarse aplicaciones de línea de
comandos y cliente de Windows. Hay un nuevo comando Publicar proyecto en los menús Proyecto. Para obtener más
información, vea Implementación ClickOnce.
Ahora se pueden incluir componentes del sistema necesarios, tales como la versión en tiempo de ejecución de .NET
Framework, como parte de un proyecto de implementación o de la implementación ClickOnce. Para obtener más información,
vea Requisitos previos de implementación (Visual Studio).
Gracias a la Instalación e implementación de proyectos, es posible distribuir aplicaciones que utilizan la tecnología de
Microsoft Windows Installer, implementar aplicaciones en servidores de producción y de ensayo, implementar niveles de la
aplicación en diferentes equipos de prueba y distribuir aplicaciones Web ASP.NET en servidores Web. Para obtener más
información, vea Implementación de Windows Installer.
Microsoft Build Engine
Microsoft Build Engine (MSBuild) es la nueva plataforma de generación de Microsoft y Visual Studio. MSBuild presenta un
nuevo formato de archivo de proyecto basado en código XML que es sencillo de comprender, fácil de ampliar y totalmente
compatible con Microsoft. El formato de archivo de proyecto de MSBuild permite a los desarrolladores describir
completamente qué elementos se han de generar y cómo han de generarse con distintas plataformas y configuraciones.
Además, el formato de archivo de proyecto permite a los desarrolladores crear reglas reutilizables que se pueden factorizar en
archivos independientes para que las generaciones se ejecuten de igual forma en los distintos proyectos del producto. Para
obtener más información, vea MSBuild.
Lo nuevo en el IDE de Visual Studio para Visual Basic 2005
En esta versión de Visual Studio, las nuevas características del IDE de Visual Basic 2005 incluyen mejoras en las
configuraciones predefinidas, la lista de tareas y la lista de errores, comportamiento de acoplamiento mejorado, la ventana
Navegador del IDE, etcétera. Para obtener más información, vea Lo nuevo en el entorno de desarrollo.
Vea también
Conceptos
Lo nuevo para usuarios de Visual Basic 6.0
Lo nuevo en el lenguaje Visual Basic para usuarios de Visual Basic 6.0
Lo nuevo para usuarios de formularios Windows Forms para Visual Basic 6.0
Lo nuevo en Visual Basic
Conceptos de Visual Basic

Eventos y control de eventos para usuarios de Visual Basic 6.0


Si está familiarizado con los eventos y el control de eventos de Visual Basic 6.0, a primera vista, el modelo de eventos de Visual
Basic 2005 puede parecerle confuso, pero a la larga resulta mucho más sencillo y más eficaz.
Diferencias conceptuales
En Visual Basic 6.0, los eventos están ligados a objetos específicos y tienen su código de control de eventos. Por ejemplo, en un
formulario con un botón y un menú, cada uno tiene su evento Click; hay que escribir código para cada uno en el controlador
de eventos, aunque los dos realicen la misma función.

' Visual Basic 6.0


Private Sub HelpButton_Click()
HelpButton.Caption = "Help me!"
End Sub
Private Sub HelpMenu_Click()
HelpMenu.Caption = "Help me!"
End Sub

En Visual Basic 2005, los eventos están ligados a controladores de eventos mediante delegados, lo que permite crear un único
controlador de eventos para varios objetos.
VB
Private Sub HelpButton_Click(ByVal sender As Object, ByVal e As _
System.EventArgs) Handles HelpButton.Click, HelpMenu.Click
sender.Text = "Help me!"
End Sub

En el ejemplo anterior, observe que la declaración del evento tiene una cláusula Handles que define los eventos que se van a
controlar (en este caso, se trata de eventos Click en los dos objetos HelpButton y HelpMenu). Los objetos y eventos no
tienen que ser del mismo tipo; por ejemplo, puede tener un controlador de eventos simple que controle el evento Click de un
botón, el evento DoubleClick de un cuadro de texto y el evento Tick de un temporizador.
Observe también que la declaración del evento contiene dos parámetros: ByVal sender As Object y ByVal e As
System.EventArgs. El primer parámetro, sender, proporciona una referencia al objeto que desencadenó el evento. El segundo
parámetro, e, transfiere un objeto específico al evento que se está controlando. Al hacer referencia a las propiedades del objeto
(y, a veces, a sus métodos), puede obtener información tal como la posición del mouse para los eventos del mouse o los datos
que se están transfiriendo en los eventos de arrastrar y colocar.
En el ejemplo siguiente, el controlador de eventos MouseDown utiliza el parámetro sender para determinar el tipo de objeto
que generó el evento, y si el objeto es un a PictureBox, el parámetro e se utiliza para desplazar una etiqueta a la ubicación en
la que se produjo el clic. Para duplicar este ejemplo, agregue dos controles PictureBox y un control Label a un formulario.
VB
Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As _
System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown, _
PictureBox1.MouseDown, PictureBox2.MouseDown

If TypeOf sender Is PictureBox Then


Label1.Location = sender.Location + e.Location
Else
MsgBox("Please click a picture")
End If
End Sub

Habitualmente, cada evento produce un controlador de eventos con un tipo de objeto de evento diferente para el segundo
parámetro. Algunos controladores de eventos, como los de los eventos MouseDown y MouseUp, tienen el mismo tipo de
objeto, MouseEventArgs, para el segundo parámetro. Para estos tipos de eventos, se puede utilizar el mismo controlador de
eventos para controlar ambos eventos.
Para los eventos que transfieren tipos de objetos de eventos diferentes, deben crearse controladores de eventos
independientes. Por ejemplo, el evento TextChanged de un control TextBox transfiere el objeto de evento genérico
EventArgs, mientras que el evento MouseDown transfiere el objeto de evento MouseEventArgs, que es más especializado.
El objeto MouseEventArgs contiene propiedades que son específicas de los eventos del mouse, como Button, que determina
qué botón del mouse se ha presionado; estas propiedades no se aplican a un control TextBox y podría producirse un error si
se intenta establecer referencias a ellas.
Además de las diferencias conceptuales en el control de eventos, los nombres y el comportamiento de algunos eventos para
los distintos objetos son diferentes en Visual Basic 2005. Para obtener más información, vea
Controles de formularios Windows Forms para usuarios de Visual Basic 6.0.
Vea también
Conceptos
Información general sobre controladores de eventos (Formularios Windows Forms)
Otros recursos
Crear controladores de eventos en formularios Windows Forms
Conceptos de Visual Basic

Entorno de desarrollo integrado para usuarios de Visual Basic


6.0
Visual Basic 2005 está completamente integrado en el entorno de desarrollo integrado (IDE) de Microsoft Visual Studio 2005,
que difiere en varios aspectos del IDE de Visual Basic 6.0.
Cambios en las ventanas y en el diseño
En Visual Basic 2005, la disposición estándar de ventanas es distinta de la de Visual Basic 6.0. Si prefiere la disposición de
Visual Basic 6.0, puede establecerla organizando manualmente las ventanas (la próxima vez que abra el IDE, se conservará la
disposición).
En Visual Basic 6.0, el IDE se establece de manera predeterminada en el diseño de MDI (interfaz de múltiples documentos);
existía la opción de establecerlo en el diseño SDI (interfaz de único documento). En Visual Basic 2005, el diseño
predeterminado del IDE es la Organización por fichas; ya no se admite el diseño SDI. Para cambiar al diseño MDI, en el menú
Herramientas elija Opciones y en Entorno, ficha General, seleccione Múltiples documentos.
En Visual Basic 6.0, puede controlar el comportamiento del acoplamiento de algunas ventanas de herramientas eligiendo
Opciones en el menú Herramientas. En Visual Basic 2005, todas las ventanas son acoplables de forma predeterminada;
puede controlar su comportamiento con el comando Acoplable del menú Ventanas.
También existen algunas diferencias respecto a las ventanas disponibles entre Visual Basic 6.0 y Visual Basic 2005.
Nota
En Visual Basic 2005, algunas de las ventanas de depuración sólo están disponibles en modo de ejecución; cuando se cambia
a modo de diseño, las ventanas se ocultan.

En la siguiente tabla se muestran algunas ventanas de Visual Basic 6.0 y sus equivalentes de Visual Basic 2005.
Visual Basic 6.0 Visual Basic 2005
Paleta de colores Nueva implementación

Vista de datos Nueva implementación; se reemplaza por el Explorador de servidores

Posición del formulario Nueva implementación

Explorador de proyectos Explorador de soluciones

Inspecciones Inspección 1, Inspección 2, Inspección 3, Inspección 4

Cambios en los menús


Los comandos de menú en Microsoft Visual Studio 2005 están estandarizados para todos los lenguajes; en algunos casos, los
comandos de menú de Visual Basic 6.0 se reemplazan por comandos diferentes en Microsoft Visual Studio 2005.
En Visual Basic 6.0, todos los comandos de menú están visibles en todo momento, pero aparecen atenuados cuando están
fuera de contexto; en Visual Basic 2005, el conjunto de comandos disponible varía según el contexto.
En la siguiente tabla se muestran algunos comandos comunes de Visual Basic 6.0 y sus equivalentes de Visual Basic 2005.
Visual Basic 6.0 Visual Basic 2005
Complementos, Administrador de c Herramientas, Administrador de complementos
omplementos

Depurar, Agregar inspección Agregar inspección (sólo en el menú contextual)

Depurar, Modificar inspección Nueva implementación. Las inspecciones se editan en la ventana Inspección.
Depurar, Ejecutar hasta el cursor Ejecutar hasta el cursor (sólo en el menú contextual)

Depurar, Establecer instrucción sigui Establecer instrucción siguiente (sólo en el menú contextual)
ente

Depurar, Mostrar siguiente instrucci Mostrar la instrucción siguiente (sólo en el menú contextual)
ón

Editar, Palabra completa Editar, Intellisense, Palabra completa

Editar, Buscar Editar, Búsqueda rápida

Editar, Buscar siguiente Editar, Búsqueda rápida

Editar, Aplicar sangría Editar, Avanzadas, Aumentar sangría de línea

Editar, Insertar archivo Editar, Insertar archivo como texto

Editar, Lista de constantes Editar, Intellisense, Lista de miembros

Editar, Lista de propiedades y métod Editar, Intellisense, Lista de miembros


os

Editar, Anular sangría Editar, Avanzadas, Reducir sangría de línea

Editar, Información de parámetros Editar, Intellisense, Información de parámetros

Editar, Información rápida Editar, Intellisense, Información rápida

Editar, Reemplazar Editar, Reemplazo rápido

Archivo, Generar Nombre de proyec Generar, Generar Nombre de proyecto


to

Archivo, Generar grupo de proyecto Generar, Generar solución


s

Archivo, Configurar impresora Archivo, Configurar página

Archivo, Lista de archivos recientes Archivo, Proyectos recientes

Archivo, Quitar proyecto Editar, Quitar

Archivo, Guardar grupo de proyecto Archivo, Guardar Nombre de solución o Archivo, Guardar todo
s

Archivo, Guardar grupo de proyecto Archivo, Guardar nombre de solución como


s como

Archivo, Guardar selección Archivo, Guardar los elementos seleccionados

Formato, Ajustar tamaño a la cuadrí Nueva implementación. Controlado por la opción de entorno Ajustar a la cuadrícula.
cula
Ayuda, Microsoft en el Web Comunidad, Centro para desarrolladores

Proyecto, Agregar módulo de clase Proyecto, Agregar clase

Proyecto, Agregar entorno de datos Nueva implementación. El entorno de datos no está admitido.

Proyecto, Agregar informe de datos Nueva implementación. Los informes de datos no están admitidos.

Proyecto, Agregar página DHTML Nueva implementación. Las páginas DHTML no están admitidas.

Proyecto, Agregar archivo Proyecto, Agregar nuevo elemento o Proyecto, Agregar elemento existente
Nota En Visual Basic 6.0, el archivo mismo se agrega al proyecto; en Visual Basic 2005 s
e agrega una copia del archivo.

Proyecto, Agregar formulario Proyecto, Agregar proyecto o formulario Windows Forms, Agregar formulario heredado

Proyecto, Agregar formulario MDI Proyecto, Agregar proyecto o formulario Windows Forms, Agregar formulario heredado

Proyecto, Agregar página de propie Nueva implementación. Las páginas de propiedades no están admitidas.
dades

Proyecto, Agregar documento de us Nueva implementación. Los documentos ActiveX no están admitidos.
uario

Proyecto, Agregar clase Web Nueva implementación. Las clases Web no están admitidas.

Proyecto, Componentes Nueva implementación. Los componentes se administran en el Cuadro de herramientas.

Proyecto, Referencias Nueva implementación. Las referencias se administran en el Explorador de soluciones.

Proyecto, Quitar elemento Editar, Eliminar


Nota
"Quitar elemento" quitó el elemento del proyecto pero no del disco; "Eliminar" elimina
el elemento.

Ejecutar, Interrumpir Depurar, Interrumpir todos

Ejecutar, Terminar Depurar, Detener depuración

Ejecutar, Reiniciar Depurar, Reiniciar

Ejecutar, Iniciar Depurar, Iniciar depuración

Ejecutar, Iniciar con compilación co Nueva implementación. Todavía puede realizar la ejecución sin depurar presionando CTR
mpleta L+F5.

Herramientas, Agregar procedimient Nueva implementación. Los procedimientos se agregan en el Editor de código.
o

Herramientas, Editor de menús Nueva implementación. El Editor de menú se reemplaza por los componentes MainMenu
y ContextMenu.
Herramientas, Atributos del procedi Nueva implementación.
miento

Herramientas, SourceSafe Archivo, Control de código fuente

Ver, Pila de llamadas Depurar, Ventanas, Pila de llamadas

Ver, Paleta de colores Nueva implementación. No hay ninguna ventana Paleta de colores.

Ver, Ventana de la vista Datos Nueva implementación. No hay ninguna Ventana de la vista Datos.

Ver, Definición Ir a definición (sólo en el menú contextual)

Ver, Ventana Posición del formulario Nueva implementación. No hay ninguna ventana Posición del formulario.

Ver, Ventana Inmediato Depurar, Ventanas, Inmediato

Ver, Ultima posición Nueva implementación. Utilice marcadores.

Ver, Ventana Locales Depurar, Ventanas, Variables locales

Ver, Objeto Ver, Diseñador

Ver, Explorador de proyectos Ver, Explorador de soluciones

Ver, Ventana Inspección Depurar, Ventanas, Inspección

Ventana, Organizar iconos Nueva implementación.

Ventana, Cascada Disponible sólo en modo de diseño MDI.

Ventana, Mosaico horizontal Disponible sólo en modo de diseño MDI.

Ventana, Mosaico vertical Disponible sólo en modo de diseño MDI.

Ventana, Lista de ventanas Windows

Cambios en la asignación de teclado


Las asignaciones de teclado en Microsoft Visual Studio 2005 se basan en el perfil de configuración que se elige la primera vez
se carga el IDE. Si elige el perfil de Visual Basic, las asignaciones de teclado serán las mismas que en Visual Basic 6.0. Puede
cambiar las asignaciones de teclado o restaurarlas a su configuración original en el cuadro de diálogo Herramientas,
Opciones. Para obtener más información, vea Valores de configuración de Visual Studio.
Vea también
Otros recursos
Personalizar el entorno de desarrollo
Guía básica del depurador
Ayuda para usuarios de Visual Basic 6.0
Conceptos de Visual Basic

Administración de proyectos para usuarios de Visual Basic 6.0


Los proyectos en Visual Basic 2005 son similares a los proyectos en Visual Basic 6.0, sin embargo, existen algunas diferencias
que debe considerar.
En esta sección
Comportamiento de los proyectos para los usuarios de Visual Basic 6.0
Describe las diferencias generales del comportamiento de un proyecto entre Visual Basic 6.0 y Visual Basic 2005.
Propiedades de proyecto para usuarios de Visual Basic 6.0
Describe las diferencias en las propiedades de un proyecto entre Visual Basic 6.0 y Visual Basic 2005.
Referencias de proyecto para usuarios de Visual Basic 6.0
Describe las diferencias en el control de referencias entre Visual Basic 6.0 y Visual Basic 2005.
Tipos de proyectos para usuarios de Visual Basic 6.0
Describe las diferencias en el tipo de proyecto entre Visual Basic 6.0 y Visual Basic 2005.
Secciones relacionadas
Propiedades del proyecto (Visual Studio)
Describe el sistema de proyectos para la administración de aplicaciones a medida que se escriben.
Conceptos de Visual Basic

Comportamiento de los proyectos para los usuarios de Visual


Basic 6.0
Los proyectos en Visual Basic 2005 son similares a los proyectos en Visual Basic 6.0. Sin embargo, hay algunas diferencias de
comportamiento. En este tema se analizan esas diferencias.
Modelo de proyecto
En Visual Basic 6.0, los proyectos utilizan un modelo basado en referencias: el archivo del proyecto contiene referencias a los
elementos del proyecto, especificando su ruta de acceso. Por ejemplo, cuando se agrega un archivo de texto a un proyecto, el
archivo del proyecto señala a la ubicación del archivo. Cuando se genera el proyecto, el archivo de texto se carga desde esa
ubicación.
Visual Basic 2005 utiliza un modelo basado en carpetas: todos los elementos del proyecto se colocan en la jerarquía de
carpetas del proyecto. Cuando se agrega un archivo de texto, se coloca una copia del mismo en la carpeta del proyecto.
Cuando se genera el proyecto, el archivo de texto se carga desde esa copia del archivo.
Comando Quitar
En Visual Basic 6.0, el comando Quitar quita un elemento de un proyecto, pero el archivo permanece guardado en disco.
En Visual Basic 2005, el comando Quitar se reemplaza por el comando Eliminar, que quita y elimina el archivo. Para excluir
un archivo de un proyecto sin eliminarlo, se puede utilizar el comando Excluir del proyecto.
Grupos de proyectos
En Visual Basic 6.0, se pueden agregar varios proyectos al Explorador de proyectos; a estos proyectos se les denomina
grupos de proyectos.
En Visual Basic 2005, el Explorador de soluciones reemplaza al Explorador de proyectos y las soluciones reemplazan a los
grupos de proyectos. Los grupos de proyectos sólo pueden contener proyectos de Visual Basic, mientras que las soluciones
pueden contener proyectos creados en cualquier combinación de lenguajes de Visual Basic 2005.
Archivos de proyecto
En Visual Basic 6.0, los archivos de proyecto (.vbp) y los archivos de grupos de proyectos (.vbg) son archivos de texto que se
pueden editar directamente en un editor de texto.
En Visual Basic 2005, los archivos de proyectos y los archivos de soluciones están en formato XML y no se deben editar
directamente.
Vea también
Conceptos
Propiedades de proyecto para usuarios de Visual Basic 6.0
Tipos de proyectos para usuarios de Visual Basic 6.0
Otros recursos
Administración de proyectos para usuarios de Visual Basic 6.0
Conceptos de Visual Basic

Propiedades de proyecto para usuarios de Visual Basic 6.0


Las propiedades de proyecto en Visual Basic 6.0 y Visual Basic 2005 definen distintas configuraciones globales; muchas de las
propiedades de proyecto difieren entre Visual Basic 6.0 y Visual Basic 2005.
Diferencias conceptuales
En Visual Basic 6.0, las propiedades del proyecto se establecen en el cuadro de dialogo Propiedades del proyecto.
En Visual Basic 2005, las propiedades del proyecto se establecen en el Diseñador de proyectos. Para obtener más
información, vea Introducción al Diseñador de proyectos.
Propiedades del componente ActiveX
En Visual Basic 6.0, hay varias propiedades relacionadas con componentes ActiveX, incluidas: Ejecución desatendida,
Modelo de subprocesos, Solicitar clave de la licencia, Conservado en memoria, Modo de inicio, Servidor remoto y
Compatibilidad de versiones.
En Visual Basic 2005, el modelo para crear componentes es considerablemente diferente y no hay ningún equivalente directo
para estas propiedades de proyecto. Para obtener más información, vea
Creación de componentes para usuarios de Visual Basic 6.0.
Actualizar controles ActiveX (propiedad)
En Visual Basic 6.0, la propiedad de proyecto Actualizar controles ActiveX actualiza automáticamente los controles ActiveX si
instala una versión más reciente de ellos en el equipo desde la última vez que abrió el proyecto.
En Visual Basic 2005, aunque puede utilizar los controles ActiveX, no hay ningún equivalente para esta propiedad. El proyecto
utilizará la versión del control ActiveX al que hizo referencia cuando lo agregó al proyecto.
Quitar información de controles ActiveX no usados (propiedad)
En Visual Basic 6.0, la propiedad del proyecto Quitar información de controles ActiveX no usados quita las referencias a
los controles no utilizados antes de compilar.
En Visual Basic 2005, no hay equivalente; nunca se compilan los controles no utilizados.
Optimizaciones del compilador
Aunque Visual Basic 6.0 y Visual Basic 2005 admiten optimizaciones del compilador, los compiladores y, por consiguiente, las
optimizaciones disponibles, son distintos. Para obtener más información, vea Compilador de Visual Basic.
Las optimizaciones del compilador de Visual Basic 2005 se establecen en el cuadro de diálogo Configuración de compilador
avanzada, accesible desde la ficha Compilar del Diseñador de proyectos.
Equivalencias de propiedades de proyecto
La siguiente lista proporciona una comparación entre las propiedades de proyecto de Visual Basic 6.0 y Visual Basic 2005. La
información sobre dónde encontrar las propiedades de proyecto de Visual Basic 2005 se indenta bajo cada nombre de
propiedad. Observe que no todas las propiedades están disponibles para todos los tipos de proyecto.
Visual Basic 6.0 Visual Basic 2005
Incremento automático Incrementar revisión automáticamente con cada publicación
Ficha Publicar del Diseñador de proyectos.

Argumentos de la línea de coman Argumentos de la línea de comandos


dos
Ficha Depurar del Diseñador de proyectos.

Opciones de compilación Nueva implementación. Para obtener más información, vea Compilador de Visual Basic.

Argumentos de compilación con Constantes de compilación


dicional
Cuadro de diálogo Configuración de compilador avanzada, accesible desde la ficha
Compilar del Diseñador de proyectos.
Dirección base del archivo DLL Dirección base del archivo DLL
Cuadro de diálogo Configuración de compilador avanzada, accesible desde la ficha
Compilar del Diseñador de proyectos.
Nombre del archivo de Ayuda Nueva implementación. Para obtener más información, vea
Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

Icono Icono
Ficha Aplicación del Diseñador de proyectos.

Descripción del proyecto Cuadro de diálogo Descripción—Información de ensamblado, accesible desde la fich
a Aplicación del Diseñador de proyectos.

Id. de contexto de la Ayuda del pr Nueva implementación. Para obtener más información, vea
oyecto Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

Nombre de proyecto Nombre del ensamblado


Ficha Aplicación del Diseñador de proyectos.

Tipo de proyecto Tipo de aplicación


Ficha Aplicación del Diseñador de proyectos.

Servidor remoto No hay equivalente.

Quitar información de controles No hay equivalente.


ActiveX no usados

Solicitar clave de la licencia No hay equivalente.

Conservado en memoria No hay equivalente.

Modo de inicio (componentes) No hay equivalente.

Objeto inicial Formulario de inicio, Objeto inicial


Ficha Aplicación del Diseñador de proyectos.

Modelo de subprocesos No hay equivalente.

Title Title
Cuadro de diálogo Información de ensamblado, accesible desde la ficha Aplicación d
el Diseñador de proyectos.

Ejecución desatendida No hay equivalente.

Actualizar controles ActiveX No hay equivalente.

Compatibilidad de versiones No hay equivalente.

Información de versiones Compañía, producto, copyright, marca registrada


Cuadro de diálogo Información de ensamblado, accesible desde la ficha Aplicación d
el Diseñador de proyectos.
Número de versión Versión de ensamblado
Cuadro de diálogo Información de ensamblado, accesible desde la ficha Aplicación d
el Diseñador de proyectos.

Cuando se inicie este proyecto Acción de inicio


Ficha Depurar del Diseñador de proyectos.

Vea también
Conceptos
Creación de componentes para usuarios de Visual Basic 6.0
Otros recursos
Propiedades del proyecto (Visual Studio)
Administración de proyectos para usuarios de Visual Basic 6.0
Conceptos de Visual Basic

Referencias de proyecto para usuarios de Visual Basic 6.0


Los métodos para agregar referencias de proyecto difieren entre Visual Basic 2005 y Visual Basic 6.0.
Diferencias conceptuales
Agregar referencias
En Visual Basic 6.0, las referencias del proyecto a bibliotecas de tipos se administran en el cuadro de dialogo Referencias. Una
vez agregada una referencia, se puede obtener acceso al objeto mediante código.
En Visual Basic 2005, las referencias se hacen a los ensamblados y se agregan y quitan en el Diseñador de proyectos.
También se pueden hacer referencias a componentes COM. Las referencias entre proyectos y las referencias Web a servicios
Web de ASP.NET también son compatibles. Para obtener más información, vea Administrar referencias.
Agregar controles
En Visual Basic 6.0, los controles se agregan a un proyecto en el cuadro de dialogo Componentes. Una vez agregados, se ven
en el Cuadro de herramientas.
En Visual Basic 2005, los controles se agregan al Cuadro de herramientas del cuadro de diálogo Personalizar cuadro de
herramientas. Para obtener más información, vea Cómo: Agregar elementos al cuadro de herramientas.
Vea también
Otros recursos
Hacer referencia a espacios de nombres y componentes
Administración de proyectos para usuarios de Visual Basic 6.0
Conceptos de Visual Basic

Tipos de proyectos para usuarios de Visual Basic 6.0


Los tipos de proyectos que se pueden crear con Visual Basic 2005 difieren de Visual Basic 6.0. En algunos casos, los tipos de
proyecto son básicamente el mismo pero han cambiado los nombres. En otros casos, algunos tipos de proyectos de Visual
Basic 6.0 no tienen ningún equivalente directo.
La siguiente lista proporciona una comparación entre los tipos de proyecto de Visual Basic 6.0 y sus equivalentes en Visual
Basic 2005.
Visual Basic 6.0 Visual Basic 2005
EXE estándar Aplicación para Windows

DLL ActiveX Biblioteca de clases

EXE ActiveX Biblioteca de clases

Control ActiveX Biblioteca de controles de Windows


Nota
Los proyectos de la Biblioteca de controles de Windows crean controles de formularios Windows For
ms; ya no se admite la creación de controles ActiveX.

Documento Activ Ningún equivalente. Visual Basic 2005 puede interoperar con documentos ActiveX.
eX

Aplicación DHTM No hay equivalente. Use una aplicación de sitio Web de ASP.NET de Visual Web Developer.
L

Aplicación IIS (Cl No hay equivalente. Use una aplicación de sitio Web de ASP.NET de Visual Web Developer.
ase Web)

Vea también
Conceptos
Plantillas de proyectos predeterminadas en Visual Studio
Programación Web para usuarios de Visual Basic 6.0
Otros recursos
Administración de proyectos para usuarios de Visual Basic 6.0
Conceptos de Visual Basic

Cambios en el lenguaje para usuarios de Visual Basic 6.0


Mientras que las versiones anteriores de Visual Basic estaban destinadas a aplicaciones cliente de Microsoft Windows, las
versiones a partir de Visual Basic .NET 2002 se diseñaron para crear también aplicaciones de servicios Web XML. Por este
motivo, Visual Basic genera código administrado para Common Language Runtime. Esto supone cambios en el propio
lenguaje.
En Visual Basic, los cambios se han ideado para:
Simplificar el lenguaje y hacerlo más coherente.
Agregar nuevas características solicitadas por usuarios.
Hacer el código más sencillo de leer y mantener.
Ayudar a los programadores a evitar los errores de programación.
Crear aplicaciones más sólidas y más sencillas de depurar.
En los temas siguientes se describen los cambios de lenguaje desde las versiones anteriores de Visual Basic. Para obtener una
explicación de las características nuevas del lenguaje de Visual Basic, vea Lo nuevo en el lenguaje Visual Basic.
En esta sección
Resumen de cambios de los elementos de programación ofrecidos
Proporciona una lista ordenada alfabéticamente de elementos de programación que han cambiado o que ya no se admiten
en Visual Basic, e incluye los elementos por los que se han reemplazado.
Matrices para usuarios de Visual Basic 6.0
Proporciona vínculos a temas que describen los cambios de los límites de las matrices, las declaraciones de tamaño y la
instrucción Instrucción ReDim (Visual Basic).
Tipos de datos para usuarios de Visual Basic 6.0
Proporciona vínculos a temas que describen los cambios de declaración, uso y conversión de tipos de datos, así como de los
tipos Integer (Tipo de datos, Visual Basic) y los tipos de datos universales.
Cambios en las declaraciones para usuarios de Visual Basic 6.0
Proporciona vínculos a temas que describen los cambios de la sintaxis de declaración, la longitud de las cadenas, las
estructuras y el ámbito de las variables dentro de los bloques.
Cambios en las funciones para usuarios de Visual Basic 6.0
Proporciona vínculos a temas que describen los cambios de la función Format (Función), de funciones relacionadas con la
fecha y hora, y de funciones que incluyen el sufijo String (Tipo de datos, Visual Basic) ($).
Cambios diversos de lenguaje para usuarios de Visual Basic 6.0
Proporciona vínculos a temas que describen los cambios de los operadores y el control de archivos.
Cambios en los procedimientos para usuarios de Visual Basic 6.0
Proporciona vínculos a temas que describen los cambios del paso de parámetros, las secuencias de llamada a
procedimientos y las declaraciones de procedimientos.
Cambios en las propiedades para usuarios de Visual Basic 6.0
Proporciona vínculos a los temas que describen los cambios de las propiedades predeterminadas, los procedimientos de
propiedades y los argumentos de propiedades.
Controlar los cambios de flujo para usuarios de Visual Basic 6.0
Proporciona vínculos a temas que describen los cambios del flujo de ejecución y la nueva compatibilidad con el control
estructurado de excepciones.
Programación orientada a objetos para usuarios de Visual Basic 6.0
Proporciona vínculos a los temas que describen los cambios de la creación de objetos, la compatibilidad binaria y de las
interfaces y las clases.
Secciones relacionadas
Lo nuevo en el lenguaje Visual Basic
Incluye información sobre la continuación de bucles, la disposición de recursos garantizada, las propiedades de acceso mixto,
los tipos de datos sin signo, la sobrecarga de operadores, los tipos genéricos y la compatibilidad con
Common Language Specification (CLS).
Ayuda para usuarios de Visual Basic 6.0
Describe los cambios de Visual Basic que incluyen, entre otros, la funcionalidad Web, los proyectos, los formularios, las
constantes, los métodos Circle, Line y Pset y el entorno de desarrollo integrado (IDE).
Referencia de Visual Basic
Proporciona una referencia completa del lenguaje de Visual Basic y sus elementos en tiempo de ejecución.
Conceptos de Visual Basic

Resumen de cambios de los elementos de programación ofrecidos


Visual Basic 2005 cambia la forma de ofrecer varios elementos del lenguaje, principalmente para la interoperabilidad con Common Language
Runtime. Se cambia el nombre y la clasificación de muchos elementos de Visual Basic 6.0, y se combinan con otros elementos de programación
Visual Basic 2005. Ya no se admiten varios elementos, puesto que Common Language Runtime (CLR) incluye funcionalidades que los hace
innecesarios. Para obtener más información, vea Common Language Runtime.
Para obtener información adicional sobre cambios en Visual Basic, incluido el entorno de desarrollo integrado (IDE), funcionalidad en Web,
proyectos, formularios, constantes, y los métodos Circle, Line y Pset, vea Ayuda para usuarios de Visual Basic 6.0.
Elementos cambiados
En la tabla siguiente se muestran los elementos de programación que han cambiado y sus sustitutos.
El Equivalente en Visual Basic 2005 Ubicación del espacio de nombres, la clase o la biblioteca
e en tiempo de ejecución
m
e
nt
o
d
e
pr
o
gr
a
m
a
ci
ó
n
d
e
Vi
s
u
al
B
as
ic
6.
0
A Abs (Método) System (Espacio de nombres), Math (Clase)
b
s(
fu
nc

n)

A Asc (Función) Miembros de la biblioteca en tiempo de ejecución de Visual Basic


sc , Strings (módulo)
B
(f
u
nc

n)
A No se admite en Visual Basic 2005. Vea No procede
s Sintaxis de declaración para usuarios de Visual Basic 6.0.
A
n
y
(fr
as
e
d
el
a
p
al
a
br
a
cl
av
e)

A Atan (Método) System (Espacio de nombres), Math (Clase)


tn
(f
u
nc

n)

C CurrentCulture (Propiedad) System.Globalization (Espacio de nombres), CultureInfo (Clase)


al
e
n
d
ar
(p
ro
pi
e
d
a
d)

C ChDir (Función) Miembros de la biblioteca en tiempo de ejecución de Visual Basic


h , FileSystem (módulo)
D
ir
(I
ns
tr
uc
ci
ó
n)

C ChDrive (Función) Miembros de la biblioteca en tiempo de ejecución de Visual Basic


h , FileSystem (módulo)
D
ri
v
e
(I
ns
tr
uc
ci
ó
n)
C Chr (Función) Miembros de la biblioteca en tiempo de ejecución de Visual Basic
hr , Strings (módulo)
$,
C
hr
B
(f
u
nc
io
n
es
)

Cl FileClose (Función) Miembros de la biblioteca en tiempo de ejecución de Visual Basic


o , FileSystem (módulo)
se
(I
ns
tr
uc
ci
ó
n)

C Cos (Método) System (Espacio de nombres), Math (Clase)


o
s(
fu
nc

n)

C Decimal (Tipo de datos); vea Miembros de la biblioteca en tiempo de ejecución de Visual Basic
ur Cambios en los tipos de datos para usuarios de Visual Basic 6.0 , VariantType (Enumeración)
re
n
c
y
(T
ip
o
d
e
d
at
os
)

C DateValue (Función) Miembros de la biblioteca en tiempo de ejecución de Visual Basic


V , DateAndTime (módulo)
D
at
e
(f
u
nc

n)

F Error (Instrucción) No procede


u
nc

n
C
V
Er
r
D Now (Propiedad), Today (Propiedad) Miembros de la biblioteca en tiempo de ejecución de Visual Basic
at , DateAndTime (módulo)
e
(f
u
nc

n)
D
at
e
(i
ns
tr
uc
ci
ó
n)

D DateString (Propiedad) Miembros de la biblioteca en tiempo de ejecución de Visual Basic


at , DateAndTime (módulo)
e
$
(f
u
nc

n)

D Assert, Fail (Métodos) System.Diagnostics (Espacio de nombres), Debug (Clase)


e
b
u
g.
A
ss
er
t(
m
ét
o
d
o)

D Write, WriteIf, WriteLine y WriteLineIf (Métodos) System.Diagnostics (Espacio de nombres), Debug (Clase)
e
b
u
g.
Pr
in
t(
m
ét
o
d
o)
D No se admite en Visual Basic 2005. Vea No procede
ef Cambios en los tipos de datos para usuarios de Visual Basic 6.0.
ty
p
e
(i
ns
tr
uc
ci
o
n
es
)

D DeleteSetting (Función) Miembros de la biblioteca en tiempo de ejecución de Visual Basic


el , Interaction (módulo)
et
e
S
et
ti
n
g
(I
ns
tr
uc
ci
ó
n)

D DoEvents (Método) System.Windows.Forms (Espacio de nombres),


o Application (Clase)
E
v
e
nt
s(
fu
nc

n)

E Nothing No procede
m
pt
y
(p
al
a
br
a
cl
av
e)

E = (Operador); vea Operador booleano para usuarios de Visual Basic 6.0 No procede
q
v
(o
p
er
a
d
or
)
E Exp (Método) System (Espacio de nombres), Math (Clase)
x
p
(f
u
nc

n)

Fi FileCopy (Función) Miembros de la biblioteca en tiempo de ejecución de Visual Basic


le , FileSystem (módulo)
C
o
p
y
(I
ns
tr
uc
ci
ó
n)

G FileGet (Función) Miembros de la biblioteca en tiempo de ejecución de Visual Basic


et , FileSystem (módulo)
(I
ns
tr
uc
ci
ó
n)

G No se admite en Visual Basic 2005; utilice Return (instrucción). Vea No procede


o Instrucción de control para usuarios de Visual Basic 6.0.
S
u
b
(I
ns
tr
uc
ci
ó
n)

I No se admite en Visual Basic 2005. Vea operadores Not y Or y No procede


m Operador booleano para usuarios de Visual Basic 6.0.
p
(o
p
er
a
d
or
)

In No se admite en Visual Basic 2005; utilice Sub New. Vea No procede


iti Cambios de Class_Initialize para usuarios de Visual Basic 6.0 y
al Utilizar constructores y destructores
iz
e
(e
ve
nt
o)
In Input (Función) Miembros de la biblioteca en tiempo de ejecución de Visual Basic
p , FileSystem (módulo)
ut
#,
In
p
ut
$
(i
ns
tr
uc
ci
o
n
es
),
In
p
ut
$,
In
p
ut
B,
In
p
ut
B
$
(f
u
nc
io
n
es
)

In No se admite en Visual Basic 2005. Para declaraciones del nivel de clase, vea No procede
st Private (Visual Basic) y Public (Visual Basic). Para declaraciones del nivel de proce
a dimiento, vea Shared (Visual Basic).
n
ci
n
g
(p
ro
pi
e
d
a
d)

In InStr (Función) Miembros de la biblioteca en tiempo de ejecución de Visual Basic


St , Strings (módulo)
rB
(f
u
nc

n)
Is IsNothing (Función) Miembros de la biblioteca en tiempo de ejecución de Visual Basic
E , Information (módulo)
m
pt
y
(f
u
nc

n)

Is No se admite en Visual Basic 2005. Vea No procede


M Declaración de procedimiento para usuarios de Visual Basic 6.0.
is
si
n
g
(f
u
nc

n)

Is IsDbNull (Función) Miembros de la biblioteca en tiempo de ejecución de Visual Basic


N , Information (módulo)
ul
l(
fu
nc

n)

Is IsReference (Función) Miembros de la biblioteca en tiempo de ejecución de Visual Basic


O , Information (módulo)
bj
e
ct
(f
u
nc

n)

Ki Kill (Función) Miembros de la biblioteca en tiempo de ejecución de Visual Basic


ll , FileSystem (módulo)
(I
ns
tr
uc
ci
ó
n)

L LCase (Función) Miembros de la biblioteca en tiempo de ejecución de Visual Basic


C , Strings (módulo)
as
e
$
(f
u
nc

n)
L Left (Función) Miembros de la biblioteca en tiempo de ejecución de Visual Basic
ef , Strings (módulo)
t$
,L
ef
tB
,L
ef
tB
$
(f
u
nc
io
n
es
)

L Len (Función) Miembros de la biblioteca en tiempo de ejecución de Visual Basic


e , Strings (módulo)
n
B
(f
u
nc

n)

L No se admite en Visual Basic 2005; la nueva instrucción Set no está relacionada No procede
et con la anterior. Vea
, S Cambios en las propiedades predeterminadas para usuarios de Visual Basic 6.0.
et
(i
ns
tr
uc
ci
o
n
es
d
e
as
ig
n
ac

n)

Li LineInput (Función) Miembros de la biblioteca en tiempo de ejecución de Visual Basic


n , FileSystem (módulo)
e
In
p
ut
#
(I
ns
tr
uc
ci
ó
n)
L Palabra clave New (Visual Basic), método Show, evento Load Miembros de la biblioteca en tiempo de ejecución de Visual Basic
o , espacio de nombres System.Windows.Forms
a
d
(I
ns
tr
uc
ci
ó
n)

L Lock, Unlock (Funciones) Miembros de la biblioteca en tiempo de ejecución de Visual Basic


o , FileSystem (módulo)
c
k
(I
ns
tr
uc
ci
ó
n)

L Log (Método) System (Espacio de nombres), Math (Clase)


o
g
(f
u
nc

n)

L LSet (Función), PadRight, PadLeft; vea Miembros de la biblioteca en tiempo de ejecución de Visual Basic
S Cambios en los tipos de datos para usuarios de Visual Basic 6.0 , Strings (módulo) y System (Espacio de nombres), String (Clase)
et
,
R
S
et
(i
ns
tr
uc
ci
o
n
es
)

L LTrim (Función) Miembros de la biblioteca en tiempo de ejecución de Visual Basic


Tr , Strings (módulo)
i
m
$
(f
u
nc

n)

M Mid (Función) Miembros de la biblioteca en tiempo de ejecución de Visual Basic


id , Strings (módulo)
B
(f
u
nc

n)
M Mid (Instrucción) Miembros de la biblioteca en tiempo de ejecución de Visual Basic
id , Strings (módulo)
B
(I
ns
tr
uc
ci
ó
n)

M MkDir (Función) Miembros de la biblioteca en tiempo de ejecución de Visual Basic


k , FileSystem (módulo)
D
ir
(I
ns
tr
uc
ci
ó
n)

N Rename (Función) Miembros de la biblioteca en tiempo de ejecución de Visual Basic


a , FileSystem (módulo)
m
e
(I
ns
tr
uc
ci
ó
n)

N Now (Propiedad) Miembros de la biblioteca en tiempo de ejecución de Visual Basic


o , DateAndTime (módulo)
w
(f
u
nc

n)

N Nothing No procede
ul
l(
p
al
a
br
a
cl
av
e)

O Oct (Función) Miembros de la biblioteca en tiempo de ejecución de Visual Basic


ct , Conversion (módulo)
$
(f
u
nc

n)
O No se admite en Visual Basic 2005; utilice Select...Case (instrucción). Vea No procede
n Instrucción de control para usuarios de Visual Basic 6.0.
...
G
o
S
u
b
(c
o
ns
tr
uc
ci
ó
n)

O No se admite en Visual Basic 2005; utilice Select...Case (instrucción). Vea No procede


n Instrucción de control para usuarios de Visual Basic 6.0.
...
G
o
T
o
(c
o
ns
tr
uc
ci
ó
n)

O FileOpen (Función) Miembros de la biblioteca en tiempo de ejecución de Visual Basic


p , FileSystem (módulo)
e
n
(I
ns
tr
uc
ci
ó
n)

O No se admite en Visual Basic 2005. Vea No procede


pt Límites de matriz para usuarios de Visual Basic 6.0.
io
n
B
as
e
(I
ns
tr
uc
ci
ó
n)
O No se admite en Visual Basic 2005; utilice Module (instrucción). No procede
pt
io
n
Pr
iv
at
e
M
o
d
ul
e
(I
ns
tr
uc
ci
ó
n)

Pr Print, PrintLine (Funciones) Miembros de la biblioteca en tiempo de ejecución de Visual Basic


in , FileSystem (módulo)
t
#
(I
ns
tr
uc
ci
ó
n)

Pr No se admite en Visual Basic 2005. Vea No procede


o Cambios en los procedimientos de propiedades para usuarios de Visual Basic 6.0
p .
er
ty
G
et
,
Pr
o
p
er
ty
L
et
,
Pr
o
p
er
ty
S
et
(i
ns
tr
uc
ci
o
n
es
)
P FilePut (Función) Miembros de la biblioteca en tiempo de ejecución de Visual Basic
ut , FileSystem (módulo)
(I
ns
tr
uc
ci
ó
n)

R Reset (Función) Miembros de la biblioteca en tiempo de ejecución de Visual Basic


es , FileSystem (módulo)
et
(I
ns
tr
uc
ci
ó
n)

Ri Right (Función) Miembros de la biblioteca en tiempo de ejecución de Visual Basic


g , Strings (módulo)
ht
$,
Ri
g
ht
B
(f
u
nc
io
n
es
)

R RmDir (Función) Miembros de la biblioteca en tiempo de ejecución de Visual Basic


m , FileSystem (módulo)
D
ir
(I
ns
tr
uc
ci
ó
n)

R Round (Método) System (Espacio de nombres), Math (Clase)


o
u
n
d
(f
u
nc

n)
R RSet (Función); vea Miembros de la biblioteca en tiempo de ejecución de Visual Basic
S Cambios en los tipos de datos para usuarios de Visual Basic 6.0 , Strings (módulo)
et
,L
S
et
(i
ns
tr
uc
ci
o
n
es
)

R RTrim (Función) Miembros de la biblioteca en tiempo de ejecución de Visual Basic


Tr , Strings (módulo)
i
m
$
(f
u
nc

n)

S SaveSetting (Función) Miembros de la biblioteca en tiempo de ejecución de Visual Basic


a , Interaction (módulo)
v
e
S
et
ti
n
g
(I
ns
tr
uc
ci
ó
n)

S No se admite en Visual Basic 2005 No procede


c
al
e
(
m
ét
o
d
o)
S No se admite en Visual Basic 2005; la nueva instrucción Set no está relacionada No procede
et con la anterior. Vea
, L Cambios en las propiedades predeterminadas para usuarios de Visual Basic 6.0.
et
(i
ns
tr
uc
ci
o
n
es
d
e
as
ig
n
ac

n)

S SetAttr (Función) Miembros de la biblioteca en tiempo de ejecución de Visual Basic


et , FileSystem (módulo)
A
tt
r(
In
st
ru
cc

n)

S Sign (Función) System (Espacio de nombres), Math (Clase)


g
n
(f
u
nc

n)

Si Sin (Método) System (Espacio de nombres), Math (Clase)


n
(f
u
nc

n)

S Sqrt (Función) System (Espacio de nombres), Math (Clase)


qr
(f
u
nc

n)

St String (Constructor); vea Función String ($) para usuarios de Visual Basic 6.0 System (Espacio de nombres), String (Clase)
ri
n
g
(f
u
nc

n)
St No se admite en Visual Basic 2005. Vea No procede
ri Función String ($) para usuarios de Visual Basic 6.0.
n
g
($
)(
fu
nc
io
n
es
)

T No se admite en Visual Basic 2005; utilice Sub Dispose y Sub Finalize. Vea No procede
er Utilizar constructores y destructores.
m
in
at
e
(e
ve
nt
o)

Ti TimeOfDay (Propiedad); vea DateTime (Estructura), Date (Tipo de datos) Miembros de la biblioteca en tiempo de ejecución de Visual Basic
m , DateAndTime (módulo)
e
(f
u
nc

n)
Ti
m
e
(i
ns
tr
uc
ci
ó
n)

Ti TimeString (Propiedad) Miembros de la biblioteca en tiempo de ejecución de Visual Basic


m , DateAndTime (módulo)
e
$
(f
u
nc

n)

Ti Timer (Propiedad) Miembros de la biblioteca en tiempo de ejecución de Visual Basic


m , DateAndTime (módulo)
er
(f
u
nc

n)
Tr LTrim, RTrim, Trim (Funciones) Miembros de la biblioteca en tiempo de ejecución de Visual Basic
i , Strings (módulo)
m
$
(f
u
nc

n)

T No se admite en Visual Basic 2005; utilice Structure (instrucción). Vea No procede


y Declaración de estructura para usuarios de Visual Basic 6.0.
p
e
(I
ns
tr
uc
ci
ó
n)

U UCase (Función) Miembros de la biblioteca en tiempo de ejecución de Visual Basic


C , Strings (módulo)
as
e
$
(f
u
nc

n)

U Lock, Unlock (Funciones) Miembros de la biblioteca en tiempo de ejecución de Visual Basic


nl , FileSystem (módulo)
o
c
k
(I
ns
tr
uc
ci
ó
n)

V Object (Tipo de datos); vea No procede


ar Cambios en los tipos de datos universales para usuarios de Visual Basic 6.0
ia
nt
(T
ip
o
d
e
d
at
os
)
W While...End While (Instrucciones) y End (Instrucción); vea No procede
e Instrucción de control para usuarios de Visual Basic 6.0
n
d
(p
al
a
br
a
cl
av
e)

W FileWidth (Función) Miembros de la biblioteca en tiempo de ejecución de Visual Basic


id , FileSystem (módulo)
th
#
(I
ns
tr
uc
ci
ó
n)

W Write, WriteLine (Funciones) Miembros de la biblioteca en tiempo de ejecución de Visual Basic


ri , FileSystem (módulo)
te
#
(I
ns
tr
uc
ci
ó
n)

Vea también
Otros recursos
Cambios en el lenguaje para usuarios de Visual Basic 6.0
Ayuda para usuarios de Visual Basic 6.0
Common Language Runtime
Conceptos de Visual Basic

Matrices para usuarios de Visual Basic 6.0


Los temas siguientes describen los cambios en las matrices entre Visual Basic 6.0 y Visual Basic 2005.
En esta sección
Límites de matriz para usuarios de Visual Basic 6.0
Explica los cambios en los límites de matriz y los límites predeterminados.
Declaración de tamaño de matriz para usuarios de Visual Basic 6.0
Describe los cambios en la especificación de tamaños de matriz.
Instrucción ReDim para usuarios de Visual Basic 6.0
Explica los cambios en las declaraciones que incluyen la instrucción ReDim.
Secciones relacionadas
Resumen de cambios de los elementos de programación ofrecidos
Proporciona una lista ordenada alfabéticamente de elementos de programación que han cambiado o que ya no se admiten
en Visual Basic 2005, e incluye los elementos por los que se han reemplazado.
Cambios en el lenguaje para usuarios de Visual Basic 6.0
Proporciona información general sobre las funciones nuevas y modificadas de Visual Basic 2005.
Conceptos de Visual Basic

Límites de matriz para usuarios de Visual Basic 6.0


Visual Basic 2005 actualiza la declaración de límites de matriz para proporcionar interoperatividad con matrices en otros
lenguajes de programación.
Visual Basic 6.0
En Visual Basic 6.0, el límite inferior predeterminado de cada dimensión de una matriz es 0. Es posible cambiarlo a 1 con la
instrucción Option Base. También puede reemplazar el límite inferior predeterminado en declaraciones de matrices
individuales.
Si deja el valor predeterminado en 0, el número de elementos de la matriz es igual al límite superior más uno. La declaración
siguiente reserva 21 elementos para la matriz Weight:
VB
Dim Weight(20) As Single

Visual Basic 2005


En Visual Basic 2005, el límite inferior de cada dimensión de matriz es 0 y no se puede declarar de otra manera. La instrucción
Option Base no es compatible.
El número que especifique para cada dimensión en la declaración será el límite superior y el número inicial de elementos será
igual al límite superior más uno. La declaración del ejemplo anterior reserva 21 elementos para Weight, con índices de 0 a 20.
También puede especificar una matriz de longitud cero, que no contiene ningún elemento; para ello, declare uno de sus límites
superiores como –1.
Vea también
Referencia
Instrucción Dim (Visual Basic)
UBound (Función, Visual Basic)
Conceptos
Sintaxis de declaración para usuarios de Visual Basic 6.0
Declaración de tamaño de matriz para usuarios de Visual Basic 6.0
Resumen de cambios de los elementos de programación ofrecidos
Otros recursos
Matrices en Visual Basic
Conceptos de Visual Basic

Declaración de tamaño de matriz para usuarios de Visual Basic


6.0
Visual Basic 2005 actualiza la declaración de tamaño de matriz para interoperatividad con el Common Language Runtime.
Visual Basic 6.0
En Visual Basic 6.0, puede especificar el tamaño de la matriz en la declaración, como en el ejemplo siguiente:
Dim Month(0 To 11) As Integer

Esto hace que la matriz tenga un tamaño fijo, que no se puede cambiar con la instrucción ReDim.
Visual Basic 2005
En Visual Basic 2005, una matriz no tiene un tamaño permanente. El ejemplo anterior puede reescribirse como en las dos
declaraciones siguientes:
VB
Dim Month(11) As Integer ' Reserves 12 elements -- (0) through (11).

VB
Dim Month() As Integer = New Integer(11) {}

Estas declaraciones son equivalentes. Cada una especifica el tamaño inicial, que puede cambiar durante la ejecución con la
instrucción ReDim. Para inicializar los elementos, puede utilizar la sintaxis siguiente:
VB
Dim Month() As Integer = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}

Si especifica –1 para una de las dimensiones, la matriz no contendrá ningún elemento. Una instrucción ReDim puede alternar
una matriz entre vacía y no vacía.
Número de dimensiones
Aunque el tamaño de la matriz puede cambiar en Visual Basic 2005, el número de dimensiones debe ser fijo. A continuación se
muestra un ejemplo de declaración de matriz tridimensional:
VB
Dim Point(,,) As Double

La instrucción ReDim puede establecer o cambiar el tamaño de cada dimensión, pero la matriz siempre permanece
tridimensional.
Vea también
Referencia
Instrucción Dim (Visual Basic)
New (Visual Basic)
Instrucción ReDim (Visual Basic)
Conceptos
Resumen de cambios de los elementos de programación ofrecidos
Otros recursos
Matrices en Visual Basic
Conceptos de Visual Basic

Instrucción ReDim para usuarios de Visual Basic 6.0


Visual Basic 2005 actualiza la declaración con la instrucción ReDim para simplificar y mejorar la legibilidad.
Visual Basic 6.0
En Visual Basic 6.0, puede utilizar la instrucción ReDim para que actúe como la declaración inicial de una matriz dinámica. No
se tiene que declarar la matriz en ninguna parte más.
Visual Basic 6.0 también permite cambiar el rango de una matriz mediante ReDim, como en el siguiente ejemplo:

Dim X(10) As Single


ReDim X(10, 10)

Visual Basic 2005


En Visual Basic 2005, no puede utilizar ReDim como una declaración. Debe declarar una matriz como cualquier otra variable,
utilizando Dim o una instrucción equivalente, antes de que aparezca en una instrucción ReDim.
No puede cambiar el rango de una matriz en Visual Basic 2005. El código del ejemplo anterior provoca un error.
Vea también
Referencia
Instrucción ReDim (Visual Basic)
Instrucción Dim (Visual Basic)
Conceptos
Resumen de cambios de los elementos de programación ofrecidos
Conceptos de Visual Basic

Tipos de datos para usuarios de Visual Basic 6.0


Los temas siguientes describen los cambios en los tipos de datos entre Visual Basic 6.0 y Visual Basic 2005.
En esta sección
Cambios en los tipos de datos para usuarios de Visual Basic 6.0
Describe la declaración, el uso y la conversión de tipos de datos.
Tipo de datos Integer para usuarios de Visual Basic 6.0
Trata las actualizaciones de tipos de datos enteros.
Cambios en los tipos de datos universales para usuarios de Visual Basic 6.0
Describe las actualizaciones de tipos de datos universales.
Secciones relacionadas
Resumen de cambios de los elementos de programación ofrecidos
Proporciona una lista ordenada alfabéticamente de elementos de programación que han cambiado o que ya no se admiten
en Visual Basic 2005, e incluye los elementos por los que se han reemplazado.
Cambios en el lenguaje para usuarios de Visual Basic 6.0
Proporciona información general sobre las funciones nuevas y modificadas de Visual Basic 2005.
Conceptos de Visual Basic

Cambios en los tipos de datos para usuarios de Visual Basic 6.0


Visual Basic 2005 actualiza los tipos de datos para interoperatividad con otros lenguajes de programación y con Common
Language Runtime. Los cambios afectan a la declaración, el uso y la conversión de tipos de datos.
Visual Basic 6.0
En Visual Basic 6.0, utiliza instrucciones Deftype (DefBool, DefByte, DefCur, DefDate, DefDbl, DefDec, DefInt, DefLng,
DefObj, DefSng, DefStr y DefVar) para establecer un tipo predeterminado de variable.
Utilice el tipo de datos Currency para cálculos monetarios y cálculos de punto fijo.
Una variable de tipo Date se puede almacenar con formato Double en ocho bytes.
Si se multiplican dos variables Variant que contienen enteros, una condición de desbordamiento hace que el tipo de datos del
resultado cambie a Double.
Utilice las instrucciones LSet y RSet para copiar una variable de un tipo definido por el usuario a otra variable de un tipo
definido por el usuario diferente.
Visual Basic 2005
Las instrucciones Deftype no se admiten en Visual Basic 2005. Tampoco se admite el tipo de datos Currency. Utilice el nuevo
tipo de datos Decimal, que puede administrar más dígitos a ambos lados del separador decimal, para todas las variables
monetarias y los cálculos. Common Language Runtime admite también directamente Decimal.
En Visual Basic 2005, el tipo de datos Date utiliza el tipo de datos DateTime de Common Language Runtime, que es un valor
entero de ocho bytes. A causa de estas representaciones distintas, no hay una conversión implícita entre los tipos de datos
Date y Double. Para convertir entre Double y la representación de Visual Basic 6.0 de Date, utilice los métodos ToOADate y
FromOADate de la estructura DateTime en el espacio de nombres System.
Si la multiplicación de dos variables Object que contienen enteros produce un desbordamiento, el resultado cambia al tipo de
datos Long de 64 bits.
No puede utilizar LSet y RSet para asignar un tipo de datos a otro. Esto requiere una operación de tipos insegura,
especialmente con las estructuras, que podrían producir un código no comprobable.
Vea también
Referencia
Decimal (Tipo de datos, Visual Basic)
Date (Tipo de datos, Visual Basic)
Val (Función)
Funciones de conversión de tipos
Resumen de tipos de datos (Visual Basic)
Double (Tipo de datos, Visual Basic)
Long (Tipo de datos, Visual Basic)
DateTime
TimeSpan
Conceptos
Resumen de cambios de los elementos de programación ofrecidos
Conceptos de Visual Basic

Tipo de datos Integer para usuarios de Visual Basic 6.0


Visual Basic actualiza los tipos de datos enteros para la interoperatividad con otros lenguajes de programación y con Common
Language Runtime.
La tabla siguiente muestra las correspondencias entre tipos enteros en Visual Basic 6.0 y Visual Basic 2005.
Tamaño del Tipo y carácter de tipo de identifica Tipo y carácter de tipo de identificad Tipo de Common Languag
entero dor de Visual Basic 6.0 or de Visual Basic 2005 e Runtime (CLR)
8 bits, con si (ninguno) SByte (ninguno) System.SByte
gno

8 bits, sin sig Byte (ninguno) Byte (ninguno) System.Byte


no

16 bits, con s Integer (%) Short (ninguno) System.Int16


igno

16 bits, sin si (ninguno) UShort (ninguno) System.UInt16


gno

32 bits, con s Long (&) Integer (%) System.Int32


igno

32 bits, sin si (ninguno) UInteger (ninguno) System.UInt32


gno

64 bits, con s (ninguno) Long (&) System.Int64


igno

64 bits, sin si (ninguno) ULong (ninguno) System.UInt64


gno

En sistemas de 32 bits, las operaciones enteras de 32 bits son más rápidas que las enteras de 16 bits o de 64 bits. Esto significa
que en Visual Basic 2005, Integer y UInteger son los tipos numéricos más eficaces y fundamentales. Puede mejorar el
rendimiento de las aplicaciones cambiando las declaraciones Long a Integer cuando migre a Visual Basic 2005.
Nota
Al interoperar con componentes creados en plataformas distintas de Visual Basic 2005, debe asegurarse de que sus tipos de
datos se correspondan con los de los demás componentes. Por ejemplo, si utiliza una instrucción Declare para hacer referen
cia a un procedimiento externo creado en Visual Basic 6.0, y el procedimiento define un argumento de tipo Integer (dos byte
s en Visual Basic 6.0), deberá identificar el argumento como de tipo Short en la instrucción Declare, ya que éste es el tipo en
tero de dos bytes en Visual Basic 2005.

Vea también
Referencia
Resumen de tipos de datos (Visual Basic)
Declare (Instrucción)
Conceptos
Caracteres de tipo
Resumen de cambios de los elementos de programación ofrecidos
Conceptos de Visual Basic

Cambios en los tipos de datos universales para usuarios de


Visual Basic 6.0
Visual Basic 2005 actualiza el tipo de datos universales para interoperatividad con el Common Language Runtime.
Visual Basic 6.0
En Visual Basic 6.0, el tipo de datos Variant sirve como universal. Esto significa que puede almacenar datos de cualquier tipo
en una variable de tipo Variant.
Visual Basic 2005
En Visual Basic 2005, Object es el tipo de datos universal. Una variable de tipo Object puede contener datos de cualquier tipo.
No se admite el tipo Variant y Object aporta toda su funcionalidad.
Variant todavía es una palabra reservada en Visual Basic 2005, aunque no tiene ningún uso sintáctico. Esto ayuda a evitar la
confusión con sus significados anteriores.
La función VarType devuelve un miembro de la enumeración VariantType que proporciona la clasificación de tipo de datos
de una variable de objeto. También puede utilizar clases en el espacio de nombres System para obtener información del tipo
de datos numérico para una instancia de Object, como se muestra en el ejemplo de código siguiente:
VB
' Visual Basic 2005
Dim SomeObj As New Object
' ... ... ... ... SomeObj is assigned some value during processing.
' ... ... ... ... Now we want to find out the data type of SomeObj.
Dim Dtype As Integer ' To hold numeric data type result.
Dtype = Type.GetTypeCode(SomeObj.GetType())

Vea también
Referencia
Object (Tipo de datos)
VarType (Función, Visual Basic)
VariantType (Enumeración)
System
Object
Type
Conceptos
Tipos de datos en Visual Basic
Tipos de valores y tipos de referencia
Resumen de cambios de los elementos de programación ofrecidos
Conceptos de Visual Basic

Cambios en las declaraciones para usuarios de Visual Basic 6.0


Los temas siguientes describen los cambios en las declaraciones entre Visual Basic 6.0 y Visual Basic 2005.
En esta sección
Sintaxis de declaración para usuarios de Visual Basic 6.0
Describe la declaración de varias variables y del tipo de valor devuelto.
Declaración de longitud de cadena para usuarios de Visual Basic 6.0
Explica la especificación de longitud de cadena.
Declaración de estructura para usuarios de Visual Basic 6.0
Describe las estructuras, también conocidas como tipos definidos por el usuario (UDT).
Ámbito de variables para usuarios de Visual Basic 6.0
Explica el ámbito de las variables dentro de un bloque.
Secciones relacionadas
Resumen de cambios de los elementos de programación ofrecidos
Proporciona una lista ordenada alfabéticamente de elementos de programación que han cambiado o que ya no se admiten
en Visual Basic 2005, e incluye los elementos por los que se han reemplazado.
Cambios en el lenguaje para usuarios de Visual Basic 6.0
Proporciona información general sobre las funciones nuevas y modificadas de Visual Basic 2005.
Conceptos de Visual Basic

Sintaxis de declaración para usuarios de Visual Basic 6.0


Visual Basic 2005 introduce varios cambios relacionados con la declaración de elementos de programación.
Declaración de múltiples variables
Visual Basic 2005 revisa las declaraciones simultáneas de varias variables para su simplificación.
Visual Basic 6.0
En Visual Basic 6.0, puede declarar variables de tipos distintos en la misma instrucción, pero debe especificar el tipo de datos
de cada variable o tomarán de manera predeterminada el valor Variant. El ejemplo siguiente muestra declaraciones múltiples
y los tipos de datos resultantes:

Dim I, J As Integer ' I is Variant, J is Integer.


Dim L As Integer, M As Integer ' L is Integer, M is Integer.
Dim N As Integer, X As Double ' N is Integer, X is Double.

Visual Basic 2005


En Visual Basic 2005, puede declarar varias variables del mismo tipo de datos sin tener que repetir la palabra clave type. Las
declaraciones equivalentes a las del ejemplo anterior son como se detalla a continuación:
VB
Dim I ' I is Object.
Dim J As Integer ' J is Integer.

O
VB
Dim I As Object, J As Integer ' I is Object, J is Integer.
Dim L, M As Integer ' L is Integer, M is Integer.
Dim N As Integer, X As Double ' N is Integer, X is Double.

Declaración de procedimiento externo


Visual Basic 6.0
En Visual Basic 6.0, al declarar una referencia a un procedimiento externo con la instrucción Declare, puede especificar As Any
como tipo de datos de cualquiera de los argumentos y para el tipo de valor devuelto. La palabra clave As Any inhabilita la
comprobación de tipos y permite pasar o devolver datos de cualquier tipo.
Visual Basic 2005
Visual Basic 2005 no admite la palabra clave Any. En una instrucción Declare, si el valor de Option Strict es On, deberá
declarar específicamente el tipo de datos de todos los argumentos y de los valores devueltos. Esto mejora la seguridad de
tipos. Puede sobrecargar la declaración de procedimiento para alojar distintos tipos de datos de argumentos. No puede utilizar
la sobrecarga únicamente en los tipos devueltos, pero puede utilizar sobrecargas de tipo de argumento para variar el tipo de
valor devuelto, o puede activar Option Strict Off.
Declaración de etiqueta de línea
Visual Basic 6.0
En Visual Basic 6.0 un número de línea puede preceder directamente a una instrucción en la misma línea, sin ningún carácter
de separación.
Visual Basic 2005
Visual Basic 2005 requiere que cada etiqueta de línea vaya seguida de dos puntos (:). Opcionalmente, una instrucción puede
seguir a los dos puntos en la misma línea, o la etiqueta de línea y los dos puntos pueden quedar solos en la línea.
Vea también
Referencia
Declare (Instrucción)
Option Strict (Instrucción)
Conceptos
Cambios en los tipos de datos universales para usuarios de Visual Basic 6.0
Secuencia de llamada a procedimientos para usuarios de Visual Basic 6.0
Tipos de datos en Visual Basic
Resumen de cambios de los elementos de programación ofrecidos
Conceptos de Visual Basic

Declaración de longitud de cadena para usuarios de Visual


Basic 6.0
Visual Basic 2005 actualiza la declaración de longitud de cadena para interoperatividad con el Common Language Runtime.
Visual Basic 6.0
En Visual Basic 6.0, puede especificar la longitud de una cadena en su declaración. Esto hace que la cadena tenga una longitud
fija, como en el ejemplo siguiente:

Dim Name As String * 30

Visual Basic 2005


En Visual Basic 2005 no puede declarar una cadena con longitud fija a menos que utilice el atributo
VBFixedStringAttribute (Clase) en la declaración. El código del ejemplo anterior provoca un error.
Debe declarar la cadena sin longitud. Cuando el código asigna un valor a la cadena, la longitud del valor determina la longitud
de la cadena, como en el ejemplo siguiente:
VB
Dim Name As String
' ...
Name = "Name is now 30 characters long" ' Length can be changed later.

Vea también
Referencia
String (Tipo de datos, Visual Basic)
Instrucción Dim (Visual Basic)
Conceptos
Atributos utilizados en Visual Basic
Resumen de cambios de los elementos de programación ofrecidos
Conceptos de Visual Basic

Declaración de estructura para usuarios de Visual Basic 6.0


Visual Basic considera que las estructuras y los tipos definidos por el usuario (UDT) son el mismo tipo de elemento de
programación. Visual Basic 2005 actualiza la declaración de estructura para unificar y mejorar la legibilidad.
Visual Basic 6.0
En Visual Basic 6.0, las estructuras se declaran mediante la construcción Type ... End Type. La estructura y sus miembros
toman como valor predeterminado el acceso público. La declaración explícita de acceso es opcional. El siguiente ejemplo
muestra una declaración de estructura válida.
Type Employee
EmpNumber As Integer ' Defaults to Public access
EmpOfficePhone As String
EmpHomePhone As String ' Cannot be declared Private inside Type.
End Type

Visual Basic 2005


En Visual Basic 2005, no se admite la instrucción Type. Debe declarar las estructuras mediante la instrucción Structure como
parte de una construcción Structure ... End Structure. Todos los miembros de una estructura deben tener modificador de
acceso, que puede ser Public, Friend o Private. También puede utilizar la instrucción Dim, que toma como valor
predeterminado el acceso público. La estructura del ejemplo anterior puede declararse como sigue:
VB
Structure Employee
Public EmpNumber As Integer 'Must declare access, even if Public.
Dim EmpOfficePhone As String 'Still defaults to Public access.
Private EmpHomePhone As String 'Can be made Private inside Structure.
End Structure

Visual Basic 2005 unifica la sintaxis de estructuras y clases. Las estructuras admiten la mayoría de las características de clases,
incluidos los métodos.
Vea también
Referencia
Structure (Instrucción)
Instrucción Dim (Visual Basic)
Public (Visual Basic)
Private (Visual Basic)
Conceptos
Resumen de cambios de los elementos de programación ofrecidos
Conceptos de Visual Basic

Ámbito de variables para usuarios de Visual Basic 6.0


Visual Basic 2005 actualiza el ámbito de las variables locales para admitir el ámbito de bloque y mejorar la programación
estructurada.
Visual Basic 6.0
En Visual Basic 6.0, cualquier variable declarada dentro de un procedimiento posee un ámbito de procedimiento, de modo que
se puede obtener acceso a ella en cualquier otra parte más dentro del mismo procedimiento. Si la variable se declara dentro de
un bloque — es decir, un conjunto de instrucciones que terminan con la instrucción End, Loop o Next— todavía se puede
tener acceso a la variable fuera del bloque.
El ejemplo siguiente muestra el ámbito de procedimiento, donde el bloque es un bucle For:
For I = 1 To 10
Dim N As Long = 0
' N has procedure scope although it was declared within a block.
N = N + Incr(I)
Next I
W = Base ^ N
' N is still visible outside the block it is declared in.

Visual Basic 2005


En Visual Basic 2005, las variables declaradas dentro de un bloque poseen un ámbito de bloque y no son accesibles fuera del
bloque. El ejemplo anterior puede reescribirse como sigue:
VB
Dim N As Long = 0
' N is declared outside the block and has procedure scope.
For I As Integer = 1 To 10
' I is declared by the For statement and therefore within the block.
N = N + Incr(I)
Next I
w = Base ^ N
' N is visible outside the block but I is not.

Como la instrucción For declara I como parte del bloque For, el ámbito de I se reduce únicamente al bloque.
No obstante, la duración de la variable sigue siendo la del procedimiento completo. Esto es cierto tanto si la variable posee un
ámbito de bloque como de procedimiento. Si declara una variable dentro de un bloque e introduce ese bloque varias veces
durante la duración del procedimiento, deberá inicializar la variable para impedir que haya los valores no esperados.
Vea también
Conceptos
Resumen de cambios de los elementos de programación ofrecidos
Conceptos de Visual Basic

Cambios en las funciones para usuarios de Visual Basic 6.0


Los temas siguientes describen los cambios en las funciones entre Visual Basic 6.0 y Visual Basic 2005.
En esta sección
Función Format para usuarios de Visual Basic 6.0
Describe los cambios en los formatos de fecha y hora, numéricos y de cadena de la función Format.
Fecha y hora para usuarios de Visual Basic 6.0
Describe los cambios de las funciones Date, Date$, Time y Time$.
Función String ($) para usuarios de Visual Basic 6.0
Explica las funciones que incluyen el sufijo String ($).
Secciones relacionadas
Resumen de cambios de los elementos de programación ofrecidos
Proporciona una lista ordenada alfabéticamente de elementos de programación que han cambiado o que ya no se admiten
en Visual Basic 2005, e incluye los elementos por los que se han reemplazado.
Cambios en el lenguaje para usuarios de Visual Basic 6.0
Proporciona información general sobre las funciones nuevas y modificadas de Visual Basic 2005.
Conceptos de Visual Basic

Función Format para usuarios de Visual Basic 6.0


La función Format de Visual Basic 2005 se ajusta ahora a la especificación Common Language Runtime (CLR) para asignar
formato a los datos. Para obtener más información sobre el formato de datos en .NET Framework, vea Aplicar formato a tipos.
En las secciones siguientes se muestran los cambios que Visual Basic 2005 realiza en los formatos de fecha y hora, formatos
numéricos y formatos de cadena definidos por el usuario.
Formatos de fecha y hora definidos por el usuario
Visual Basic 6.0
En Visual Basic 6.0, para mostrar una fecha en formato corto o largo, utiliza el especificador de formato "ddddd" o "dddddd".
Los especificadores DayOfWeek ("w") y WeekOfYear ("ww") muestran el primer día de la semana y la primera semana del
año, respectivamente. El carácter en minúscula "m" muestra el mes con un número sin cero a la izquierda. El especificador
Quarter ("q") muestra el trimestre del año con un número del 1 al 4.
Para mostrar los minutos como un número con o sin ceros iniciales, utiliza el especificador de formato "Nn" o "N". Los
caracteres "Hh" muestran la hora como un número con ceros iniciales, y "ttttt" muestra la hora completa. Para mostrar las
letras "A" o "P" en mayúscula o minúscula con una hora anterior o posterior al mediodía, utiliza "AM/PM", "am/pm", "A/P",
"a/p" o "AMPM."
El especificador de fecha y hora abreviado ("c") muestra una fecha y hora en el formato "ddddd ttttt".
Visual Basic 2005
En Visual Basic 2005, "ddddd" y "dddddd" se comportan de la misma manera que "dddd", y muestran el nombre completo del
día. No muestran la fecha en formato corto ni en formato largo. No se admiten DayOfWeek ("w") ni WeekOfYear ("ww"). En
su lugar, puede utilizar la función DatePart, tal y como se muestra en el ejemplo siguiente.
VB
Format(DatePart(DateInterval.Weekday, Now))
... Format(DatePart(DateInterval.WeekOfYear, Now))

"M" y "m" tienen significados diferentes y, por tanto, distinguen entre mayúsculas y minúsculas. Utilice "M" para el mes de la
parte de la fecha del formato de fecha y hora, y "m" para los minutos de la parte de la hora.
No se admite el formato Quarter. En su lugar, puede utilizar la función DatePart, tal y como se muestra en el ejemplo
siguiente.
VB
Format(DatePart(DateInterval.Quarter, Now))

Para mostrar los minutos como un número con o sin ceros iniciales, utilice "mm" o "m", respectivamente. No se admite el
formato "ttttt". "H" y "h" tienen significados diferentes y, por tanto, distinguen entre mayúsculas y minúsculas. Utilice "H" para
mostrar un reloj de 24 horas y "h" para un reloj de 12 horas. Los formatos AM/PM se reemplazan por "t" y "tt".
El especificador "c" se utiliza para el formato de moneda. Para el formato de fecha y hora, utilice "g" como especificador de
fecha y hora en formato corto y "G" como especificador de fecha y hora general. "g" y "G" utilizan la configuración regional
actual para determinar los formatos de fecha y hora adecuados.
Formatos numéricos definidos por el usuario
Visual Basic 6.0
En Visual Basic 6.0, la función Format convierte las cadenas en números, si es necesario, antes de asignarles un formato.
Format muestra un separador decimal final si no hay parte fraccionaria.
Visual Basic 6.0 admite cuatro secciones en la cadena de formato. Estas secciones están separadas mediante puntos y coma (;)
y especifican el formato de los valores positivos, negativos, cero y nulos, respectivamente. Los números negativos con una
sección negativa vacía en la cadena de formato muestran una cadena vacía.
El formato de notación científica permite que se incluyan los marcadores de posición de dígitos "0" y "#" después del
exponente.
Visual Basic 2005
En Visual Basic 2005, la función Format no convierte las cadenas en números antes de darles formato. Debe transferir un
número en el primer argumento, y no una cadena. En el ejemplo siguiente, la primera línea de código no genera el resultado
esperado en Visual Basic 2005, mientras que la segunda sí lo hace.
VB
MsgBox(Format("1.234", "#.#")) ' Displays "#.#".
... MsgBox(Format(CSng("1.234"), "#.#")) ' Displays "1.2".

No se muestran separadores decimales finales, como en el ejemplo siguiente:


VB
MsgBox(Format(123, "###.")) ' Displays "123"
... MsgBox(Format(123, "###.#")) ' Displays "123"

Visual Basic 2005 admite tres secciones en la cadena de formato, para dar formato a valores positivos, negativos y cero. Si se
redondea a cero un valor distinto de cero de acuerdo con las secciones de formato primera o segunda, el formato se asigna en
función de la tercera sección. Los números negativos con una sección negativa vacía en la cadena de formato muestran un
signo menos, como en el ejemplo siguiente:
VB
MsgBox(Format(-1, ";")) ' Displays "-".

El formato de notación científica sólo es compatible con el marcador de posición de dígitos "0", pero no con "#". En el ejemplo
siguiente, la primera línea de código no genera el resultado esperado en Visual Basic 2005, mientras que la segunda sí lo hace.
VB
MsgBox(Format(123, "#e+#")) ' Displays "12e+3".
... MsgBox(Format(123, "#e+0")) ' Displays "1e+2".

Formato de cadena
Visual Basic 6.0
En Visual Basic 6.0, puede crear expresiones para las cadenas de formato definidas por el usuario con los especificadores @, &,
<, > y !.
Visual Basic 2005
Visual Basic 2005 no es compatible con las cadenas de formato definidas por el usuario, por lo que los especificadores de
formato @, &, <, > y ! no tienen significado alguno y no son compatibles.
Vea también
Referencia
Format (Función)
DatePart (Función, Visual Basic)
Conceptos
Fecha y hora para usuarios de Visual Basic 6.0
Resumen de cambios de los elementos de programación ofrecidos
Conceptos de Visual Basic

Fecha y hora para usuarios de Visual Basic 6.0


Visual Basic 2005 actualiza las funciones Date, Date$, Time y Time$, y reemplaza las funciones Now y Timer con
propiedades.
Visual Basic 6.0
En Visual Basic 6.0, las funciones Date y Time devuelven la fecha y hora del sistema en el formato Date de cuatro bytes. De
manera similar, las instrucciones Date y Time utilizan el formato de Visual Basic 6.0 para establecer la fecha y hora del
sistema.
Las funciones Date$ y Time$ devuelven la fecha y hora del sistema en formato String.
Las funciones Now y Timer especifican la fecha y hora actuales y el número de segundos transcurridos desde la medianoche.
Visual Basic 2005
Visual Basic 2005 reemplaza Date y Time con las propiedades Today y TimeOfDay, que utilizan la estructura DateTime de
ocho bytes de Common Language Runtime (CLR). Esto corresponde al tipo de datos Date en Visual Basic 2005. Puede utilizar
Today y TimeOfDay para configurar y obtener la fecha y hora del sistema.
Visual Basic 2005 reemplaza las funciones Date$ y Time$ con las propiedades DateString y TimeString. Puede utilizar
DateString y TimeString para configurar y obtener la fecha y hora del sistema.
Las funciones Now y Timer se reemplazan por las propiedades de sólo lectura del mismo nombre. Sus secuencias de llamada
no cambian.
Vea también
Referencia
Format (Función)
Today (Propiedad)
TimeOfDay (Propiedad)
Date (Tipo de datos, Visual Basic)
DateString (Propiedad)
TimeString (Propiedad)
Now (Propiedad)
Timer (Propiedad)
Conceptos
Función Format para usuarios de Visual Basic 6.0
Resumen de cambios de los elementos de programación ofrecidos
Conceptos de Visual Basic

Función String ($) para usuarios de Visual Basic 6.0


Visual Basic 2005 elimina la necesidad de algunas funciones de tener una versión String y una versión Variant.
Visual Basic 6.0
En Visual Basic 6.0 algunas funciones tienen dos versiones, una que devuelve un valor de tipo String y otra que devuelve un
valor de tipo Variant. Estos pares de funciones se diferencian por el sufijo de signo de dólar ($) en la versión de String, como
Chr y Chr$.
Visual Basic 2005
Visual Basic 2005 reemplaza cada par de función con una función única. Se retiran las versiones de tipo Variant y se puede
llamar a las versiones de tipo String con o sin el sufijo $.
Aunque sólo se define Trim, Visual Basic 2005 acepta Trim$, ya que $ funciona como un carácter de tipo de identificador para
el tipo de datos String.
Vea también
Referencia
Trim, LTrim y RTrim (Funciones)
Conceptos
Función Format para usuarios de Visual Basic 6.0
Fecha y hora para usuarios de Visual Basic 6.0
Resumen de cambios de los elementos de programación ofrecidos
Conceptos de Visual Basic

Cambios diversos de lenguaje para usuarios de Visual Basic 6.0


Los temas siguientes describen los cambios en operadores y en el control de archivos entre Visual Basic 6.0 y Visual Basic
2005.
En esta sección
Operador booleano para usuarios de Visual Basic 6.0
Describe los operadores de tipo Boolean y las expresiones lógicas.
Control de archivos para usuarios de Visual Basic 6.0
Explica la expansión de las capacidades de control de archivos y la compatibilidad con versiones anteriores de funciones de
E/S de Visual Basic.
Secciones relacionadas
Resumen de cambios de los elementos de programación ofrecidos
Proporciona una lista ordenada alfabéticamente de elementos de programación que han cambiado o que ya no se admiten
en Visual Basic 2005, e incluye los elementos por los que se han reemplazado.
Cambios en el lenguaje para usuarios de Visual Basic 6.0
Proporciona información general sobre las funciones nuevas y modificadas de Visual Basic 2005.
Conceptos de Visual Basic

Operador booleano para usuarios de Visual Basic 6.0


Visual Basic 2005 elimina dos operadores booleanos y agrega otros dos para mejorar el rendimiento.
Visual Basic 6.0
En Visual Basic 6.0, los operadores booleanos And, Or, Not y Xor evalúan siempre todas las expresiones de sus operandos.
Puede utilizar los operadores Eqv y Imp para realizar equivalencias e implicaciones lógicas en dos expresiones.
Visual Basic 2005
En Visual Basic 2005, los operadores And, Or, Not y Xor siguen evaluando todas las expresiones que contribuyen a sus
operandos. Visual Basic 2005 presenta igualmente dos nuevos operadores, AndAlso y OrElse, que pueden reducir el tiempo
de ejecución al cortocircuitar las evaluaciones lógicas. Si el primer operando de un operador AndAlso se evalúa como False, el
segundo operando no se evalúa. De forma similar, si el primer operando de un operador OrElse se evalúa como True, el
segundo operando no se evalúa.
Nota
Utilice con cautela los operadores de evaluación "cortocircuitada". Si el segundo operando contiene una llamada a procedimi
ento, no puede confiar en que se llame a ese procedimiento cada vez que se ejecuta el operador.

No se admiten los operadores Eqv y Imp. Utilice el operador de comparación igual (=) en el lugar de Eqv para las dos
evaluaciones, lógica y bit a bit. Puede reemplazar el operador lógico Imp con una expresión utilizando los operadores Not y
Or, como se muestra en el ejemplo siguiente:
VB
Result = (Not A) Or B 'Same as A Imp B
'(True unless A is True and B is False.)

Puede reemplazar un operador Imp bit a bit del mismo modo, utilizando Not y Or en operandos numéricos.
Vea también
Referencia
And (Operador, Visual Basic)
AndAlso (Operador)
Or (Operador, Visual Basic)
OrElse (Operador)
Not (Operador, Visual Basic)
Xor (Operador, Visual Basic)
TimeSpan
Conceptos
Resumen de cambios de los elementos de programación ofrecidos
Conceptos de Visual Basic

Control de archivos para usuarios de Visual Basic 6.0


Visual Basic 2005 expande las funciones de control de archivos a la vez que proporciona compatibilidad con versiones
anteriores de las funciones de E/S de archivo de Visual Basic.
Visual Basic 6.0
En Visual Basic 6.0, el control de archivos se logra utilizando distintas funciones de E/S de archivo como Open, Input, Output
y Append. El objeto FileSystemObject proporciona un método de trabajo con archivos orientado a objetos.
Visual Basic 2005
En Visual Basic 2005, el control de archivos se logra a través de My.Computer.FileSystem (Objeto). Además, la clase
System.IO.File incluye funciones que proporcionan compatibilidad con las anteriores funciones de E/S de archivo de Visual
Basic.
La clase FileStream proporciona acceso a archivos de entrada y salida estándar y a dispositivos de error estándar.
La tabla siguiente muestra los miembros del objeto My.Computer.FileSystem disponibles en Visual Basic 2005.
Miembro Descripción
CombinePath Devuelve una ruta de acceso combinada con formato correcto como un objeto String.

CopyDirectory Copia un directorio.

CopyFile Copia un archivo.

CurrentDirectory Obtiene o establece el directorio actual.

CreateDirectory Crea un directorio.

DeleteDirectory Elimina un directorio.

DeleteFile Elimina un archivo.

DirectoryExists Devuelve un valor de tipo Boolean que indica si un directorio existe.

Drives Devuelve una colección de sólo lectura de todos los nombres de unidad de disco disponibles.

FileExists Devuelve un valor de tipo Boolean que indica si un archivo existe.

FindInFiles Devuelve una colección de cadenas de sólo lectura que representa los nombres de los archivos que conti
enen el texto especificado.

GetDirectories Devuelve una colección de objetos String que representa los nombres de las rutas de acceso de los subd
irectorios de un directorio.

GetDirectoryInfo Devuelve un objeto DirectoryInfo correspondiente a la ruta de acceso especificada.

GetDriveInfo Devuelve un objeto DriveInfo correspondiente a la ruta de acceso especificada.

GetFileInfo Devuelve un objeto FileInfo correspondiente a la ruta de acceso especificada.

GetFiles Devuelve una colección de objetos String de sólo lectura que representa los nombres de los archivos de
un directorio.
GetParentPath Devuelve un objeto String que representa la ruta de acceso absoluta del elemento primario de la ruta de
acceso proporcionada.

GetTempFileName Crea un archivo temporal de cero bytes de nombre único en el disco y devuelve la ruta de acceso comple
ta de dicho archivo.

MoveDirectory Mueve un directorio a la ubicación especificada.

MoveFile Mueve un archivo a la ubicación especificada.

OpenTextFieldParser Abre TextFieldParser.

OpenTextFileReader Abre TextReader.

OpenTextFileWriter Abre TextWriter.

ReadAllBytes Lee de un archivo binario.

ReadAllText Lee de un archivo de texto.

RenameDirectory Cambia el nombre de un directorio.

RenameFile Cambia el nombre de un archivo.

SpecialDirectories Obtiene un objeto que proporciona las propiedades para tener acceso a los directorios a los que se hace
referencia de forma habitual.

WriteAllBytes Escribe en un archivo binario.

WriteAllText Escribe en un archivo de texto.

Vea también
Referencia
System.IO Namespace
My.Computer.FileSystem (Objeto)
My.Computer.FileSystem.SpecialDirectories (Objeto)
Conceptos
Analizar archivos de texto con el objeto TextFieldParser
Codificaciones de archivos
Resumen de cambios de los elementos de programación ofrecidos
Otros recursos
Leer archivos en Visual Basic
Escribir en archivos en Visual Basic
Crear, eliminar y mover archivos y directorios en Visual Basic
Propiedades de archivos, directorios y unidades en Visual Basic
Conceptos de Visual Basic

Cambios en los módulos para usuarios de Visual Basic 6.0


Un cambio en la sintaxis afecta a la declaración de módulos privados.
Option Private Module (Instrucción)
Visual Basic 6.0
En Visual Basic 6.0, la instrucción Option Private Module indica que todo el módulo es privado y no se puede tener acceso a
sus componentes fuera del proyecto.
Visual Basic 2005
Visual Basic 2005 no admite la instrucción Option Private Module. No puede declarar un módulo como privado. Puede, sin
embargo, declare cualquiera de sus miembros o todos ellos como privados.
A diferencia de los módulos, las clases pueden ser privadas. Si necesita que la funcionalidad del propio módulo sea privada,
declare una clase.
Vea también
Referencia
Module (Instrucción)
Instrucción Class (Visual Basic)
Private (Visual Basic)
Conceptos de Visual Basic

Cambios en los procedimientos para usuarios de Visual Basic


6.0
Los temas siguientes describen los cambios en los procedimientos entre Visual Basic 6.0 y Visual Basic 2005.
En esta sección
Mecanismo para pasar parámetros para usuarios de Visual Basic 6.0
Describe el paso de argumentos a procedimientos.
Secuencia de llamada a procedimientos para usuarios de Visual Basic 6.0
Explica las llamadas a procedimientos y los datos que éstos devuelven.
Declaración de procedimiento para usuarios de Visual Basic 6.0
Describe argumentos de procedimiento opcionales y variables locales estáticas.
Secciones relacionadas
Resumen de cambios de los elementos de programación ofrecidos
Proporciona una lista ordenada alfabéticamente de elementos de programación que han cambiado o que ya no se admiten
en Visual Basic 2005, e incluye los elementos por los que se han reemplazado.
Cambios en el lenguaje para usuarios de Visual Basic 6.0
Proporciona información general sobre las funciones nuevas y modificadas de Visual Basic 2005.
Conceptos de Visual Basic

Mecanismo para pasar parámetros para usuarios de Visual Basic


6.0
Visual Basic 2005 presenta varios cambios que afectan a la forma en que los argumentos se transfieren a los procedimientos.
Mecanismo predeterminado para pasar argumentos
Visual Basic 6.0
En Visual Basic 6.0, si no especifica ByVal o ByRef en un parámetro de procedimiento, toma de manera predeterminada
ByRef. Esto permite al procedimiento modificar la variable pasada en el programa de llamada.
Exponer una variable a modificación puede suponer un riesgo. En el ejemplo siguiente, el mecanismo para pasar argumentos
asigna ByRef de forma predeterminada, minutesPastHour modifica el valor de elapsedSeconds y MsgBox muestra de forma
incorrecta elapsedSeconds.

Function minutesPastHour(seconds As Integer) As Integer


Dim hours As Integer = seconds \ 3600
seconds = seconds Mod 3600
Return seconds \ 60
End Function
Sub showSecondsAndMinutes()
Dim elapsedSeconds, extraMinutes As Integer
elapsedSeconds = CInt(Timer()) ' Integer seconds since midnight.
extraMinutes = minutesPastHour(elapsedSeconds)
MsgBox "Total seconds: " & elapsedSeconds & _
"; minutes past hour: " & extraMinutes
End Sub

Si se pasa un argumento ByRef, se permite a los procedimientos cambiarlos en el programa de llamada, lo que puede llevar a
un comportamiento inesperado. Y si ese procedimiento llama a otro procedimiento y pasa el mismo argumento ByRef,
aumentan las ocasiones de modificación sin intención de la variable original.
Visual Basic 2005
Cuando declara un procedimiento en Visual Basic 2005, el mecanismo para pasar argumentos asigna ByVal como valor
predeterminado en cada parámetro. De este modo se protegen los argumentos frente a modificaciones. La declaración del
ejemplo anterior se puede volver a escribir de la siguiente forma.
VB
Function MinutesPastHour(ByVal Seconds As Integer) As Integer

Si se pasa seconds por valor, se impide que el procedimiento tenga acceso a la variable en el programa de llamada y sirve para
evitar los riesgos descritos.
Aunque ByVal es el mecanismo predeterminado, si lo especifica explícitamente para todos los parámetro, se elimina la
incertidumbre y el código se hace más legible.
Argumentos de la propiedad ByRef
Visual Basic 6.0
En Visual Basic 6.0, las propiedades pasadas a los procedimientos como argumentos ByRef se copian al procedimiento, pero
no desde el procedimiento. Esto significa que cualquier modificación a dicho argumento de propiedad no se reflejará en la
propiedad original del programa de llamada, aún cuando se pase ByRef.
Visual Basic 2005
En Visual Basic 2005, un argumento de propiedad que se pasa ByRef se copia dentro y fuera del procedimiento. El ejemplo
siguiente muestra cómo los procedimientos pueden cambiar las propiedades.
VB
Sub Reduce(ByRef Height As Single)
' ... ... ... ... ... ... ... ' Code to modify Height argument.
End Sub

VB
Dim Sq As Square = New Square ' Square has property Side of type Single.
Reduce(Sq.Side) ' Side is changed when Reduce returns.

Cuando un procedimiento modifica un argumento de propiedad, el valor de la propiedad original no cambia inmediatamente
en el programa de llamada. En su lugar, se copia externamente cuando lo devuelve el procedimiento.
Argumentos ParamArray
Visual Basic 6.0
En Visual Basic 6.0, un procedimiento puede especificar la palabra clave ParamArray en el último de sus argumentos para
aceptar una matriz de argumentos Variant. No puede declarar el mecanismo de paso de parámetros de estos argumentos.
Siempre se pasan ByRef.
Visual Basic 2005
En Visual Basic 2005, los argumentos ParamArray siempre se pasan ByVal. Todos los argumentos de la matriz deben ser del
tipo de datos del argumento ParamArray.
Vea también
Referencia
Instrucción Function (Visual Basic)
Instrucción Sub (Visual Basic)
ByVal
ByRef
ParamArray
Conceptos
Declaración de procedimiento para usuarios de Visual Basic 6.0
Secuencia de llamada a procedimientos para usuarios de Visual Basic 6.0
Matrices de parámetros
Resumen de cambios de los elementos de programación ofrecidos
Conceptos de Visual Basic

Secuencia de llamada a procedimientos para usuarios de Visual


Basic 6.0
Visual Basic 2005 presenta varios cambios que afectan a las secuencias de llamada de procedimientos. Estos cambios mejoran
la coherencia de la sintaxis.
Paréntesis en llamadas a procedimiento
Visual Basic 6.0
En Visual Basic 6.0, se necesita encerrar entre paréntesis la lista de argumentos de llamadas a Function. En llamadas Sub, se
necesitan si utiliza la instrucción Call y se omiten si no se utiliza. El siguiente ejemplo muestra instrucciones de llamada válidas.
y = Sqrt(x)
Call displayCell(2, 14, cellValue)
displayCell 2, 14, cellValue ' Variation on previous statement.
Visual Basic 2005
En Visual Basic 2005, siempre es necesario encerrar entre paréntesis la lista de argumentos no vacíos en llamadas a
procedimiento. En llamadas Sub, la instrucción Call es opcional. El ejemplo anterior puede reescribirse como sigue:
VB
Y = Math.Sqrt(X)
... DisplayCell(2, 14, Value)

Si llama a un procedimiento sin proporcionar ningún argumento, puede incluir paréntesis vacíos o dejarlos fuera todos juntos.
Return (Instrucción)
Visual Basic 6.0
En Visual Basic 6.0, la instrucción Return sólo se utiliza para devolver el flujo al código que sigue a una instrucción GoSub.
Deben incluirse las dos instrucciones en el mismo procedimiento.
Visual Basic 2005
En Visual Basic 2005, no se admite la instrucción GoSub y puede utilizar la instrucción Return para devolver el control al
programa de llamada desde un procedimiento Function o Sub.
Vea también
Referencia
Instrucción Return (Visual Basic)
Instrucción Call (Visual Basic)
Conceptos
Sintaxis de declaración para usuarios de Visual Basic 6.0
Declaración de procedimiento para usuarios de Visual Basic 6.0
Mecanismo para pasar parámetros para usuarios de Visual Basic 6.0
Instrucción de control para usuarios de Visual Basic 6.0
Resumen de cambios de los elementos de programación ofrecidos
Conceptos de Visual Basic

Declaración de procedimiento para usuarios de Visual Basic 6.0


Visual Basic 2005 presenta varios cambios relacionados con la declaración de procedimientos.
Argumentos opcionales
Visual Basic 6.0
En Visual Basic 6.0, puede declarar un parámetro de procedimiento como Optional sin especificar un valor predeterminado. Si
un parámetro opcional es del tipo Variant, el código del procedimiento puede utilizar la función IsMissing para determinar si
el código de llamada ha pasado un argumento ha dicho parámetro.
Visual Basic 2005
En Visual Basic 2005, todos los parámetros opcionales deben declarar valores predeterminados, que se pasan al procedimiento
si el programa de llamada no proporciona ese parámetro. No se necesita la función IsMissing para detectar un argumento
que falta y es incompatible. El siguiente ejemplo muestra una declaración de argumento opcional:
VB
Sub Calculate(Optional ByVal Switch As Boolean = False)

Variables locales estáticas


Visual Basic 6.0
En Visual Basic 6.0, puede declarar un procedimiento con el modificador Static. Esto produce que todas las variables locales
dentro del procedimiento sean estáticas y que retengan su valor entre llamadas.
Visual Basic 2005
En Visual Basic 2005, la palabra clave Static no se admite en una instrucción Function ni Sub. Debe declarar de forma
individual cada variable local que desea que sea Static.
Vea también
Referencia
Optional (Visual Basic)
Static (Visual Basic)
Conceptos
Secuencia de llamada a procedimientos para usuarios de Visual Basic 6.0
Mecanismo para pasar parámetros para usuarios de Visual Basic 6.0
Resumen de cambios de los elementos de programación ofrecidos
Conceptos de Visual Basic

Cambios en las propiedades para usuarios de Visual Basic 6.0


Los temas siguientes describen los cambios en las propiedades entre Visual Basic 6.0 y Visual Basic 2005.
En esta sección
Cambios en las propiedades predeterminadas para usuarios de Visual Basic 6.0
Trata los cambios en la compatibilidad de las propiedades predeterminadas.
Cambios en los procedimientos de propiedades para usuarios de Visual Basic 6.0
Describe los cambios en los procedimientos de propiedades y en los argumentos.
Secciones relacionadas
Resumen de cambios de los elementos de programación ofrecidos
Proporciona una lista ordenada alfabéticamente de elementos de programación que han cambiado o que ya no se admiten
en Visual Basic 2005, e incluye los elementos por los que se han reemplazado.
Cambios en el lenguaje para usuarios de Visual Basic 6.0
Proporciona información general sobre las funciones nuevas y modificadas de Visual Basic 2005.
Conceptos de Visual Basic

Cambios en las propiedades predeterminadas para usuarios de


Visual Basic 6.0
Visual Basic 2005 actualiza la compatibilidad de las propiedades predeterminadas para simplificar y mejorar la legibilidad.
Visual Basic 6.0
En Visual Basic 6.0, se admiten las propiedades predeterminadas en objetos. En controles Label, por ejemplo, Caption es la
propiedad predeterminada, y las dos asignaciones del ejemplo siguiente son equivalentes.

Dim lbl As Label


lbl = "Important"
lbl.Caption = "Important"

Aunque las propiedades predeterminadas permiten algunas abreviaciones al escribir código en Visual Basic, hay varios
inconvenientes:
Las abreviaciones pueden dificultar la lectura del código. En el ejemplo anterior, si no está familiarizado con el control
Label, no puede establecer a partir de la primera asignación si la cadena "Important" se va a almacenar directamente en
la variable lbl o en una propiedad predeterminada.
Dado un objeto que tiene planeado utilizar en el código, no siempre resulta sencillo descubrir si posee una propiedad
predeterminada y si es así, qué propiedad es.
Las propiedades predeterminadas hacen que la instrucción Set sea necesaria en el lenguaje de Visual Basic. En el ejemplo
siguiente se muestra cómo se necesita Set para indicar que se va a asignar una referencia de objeto en lugar de una
propiedad predeterminada:

Dim lbl1 As Label, lbl2 As Label


lbl1 = "Saving" ' Assign a value to lbl1's Caption property.
lbl2 = lbl1 ' Replace lbl2's Caption property with lbl1's.
Set lbl2 = lbl1 ' Replace lbl2 with an object reference to lbl1.

Visual Basic 2005


En Visual Basic 2005, no se admiten propiedades predeterminadas a menos que tomen argumentos. Debido a este cambio en
la sintaxis, no se necesitan las instrucciones Let y Set para especificar los elementos que se van a asignar y estas instrucciones
no se utilizan en instrucciones de asignación. La propiedad Text reemplaza a la propiedad Caption en el control Label, y el
ejemplo anterior se puede rescribir tal y como se muestra a continuación.
VB
Dim L1, L2 As New Label ' Both become type Label
' in the new version of Visual Basic.
L1.Text = "Saving" ' Assign Text property.
L2.Text = L1.Text ' Copy Text property.
L2 = L1 ' Copy object reference.

Let todavía es una palabra reservada en Visual Basic 2005, aunque no tiene ningún uso sintáctico. Esto ayuda a evitar la
confusión con sus significados anteriores. Visual Basic 2005 utiliza la instrucción Set para los procedimientos de propiedad
que establecen el valor de una propiedad.
Propiedades parametrizadas
Las propiedades predeterminadas que toman argumentos no son ambiguas y son compatibles con Visual Basic 2005. Las
propiedades predeterminadas aparecen más comúnmente en clases de colección. En el espacio de nombres
System.Windows.Forms, por ejemplo, la clase Form admite la jerarquía siguiente:
Objeto Form
Propiedad Controls (devuelve un objeto ControlCollection para este formulario)
Objeto ControlCollection (la propiedad predeterminada es Item)
Propiedad Item (devuelve un objeto Control para un elemento de la colección)
Objeto Control
La propiedad Controls devuelve un objeto ControlCollection y la propiedad Item devuelve un objeto Control. En el ejemplo
siguiente se muestran dos usos, uno válido y otro no válido, de las propiedades predeterminadas en Visual Basic 2005.
VB
Dim F As New Form ' Assume F has been created and initialized.

VB
F.Controls.Item(0).Text = "Stop" ' Valid -- no default properties used.
F.Controls(0).Text = "Stop" ' Valid -- Item is parameterized.

VB
'F(0).Text = "Stop" ' INVALID -- Form does not have a default property.
'F.Controls(0) = "Stop" ' INVALID -- No default property on Control.

Declaración de propiedades predeterminadas


En Visual Basic 2005, puede establecer una propiedad como predeterminada comenzando la declaración con la palabra clave
Default. Si sobrecarga el nombre de propiedad, debe especificar Default en cada declaración de sobrecarga. No puede
declarar una propiedad predeterminada como Shared o Private.
Vea también
Referencia
Instrucción Set (Visual Basic)
Default (Visual Basic)
Text
Label
System.Windows.Forms
Form
ControlCollection
Control
Conceptos
Cambios en los procedimientos de propiedades para usuarios de Visual Basic 6.0
Resumen de cambios de los elementos de programación ofrecidos
Conceptos de Visual Basic

Cambios en los procedimientos de propiedades para usuarios


de Visual Basic 6.0
Visual Basic 2005 actualiza la declaración de procedimientos y parámetros de propiedades para simplificar e interoperar con
otros lenguajes de programación.
Visual Basic 6.0
En Visual Basic 6.0, utiliza las instrucciones Property Get, Property Let y Property Set para obtener y establecer los valores
de las propiedades.
Puede declarar un parámetro de propiedad para que sea ByRef. Si se pasa una variable a este tipo de parámetro, se permite al
procedimiento cambiar esa variable en el código de llamada.
Visual Basic 2005
Visual Basic 2005 introduce una sintaxis de declaración de propiedad unificada que incluye los procedimientos para obtener y
establecer el valor de la propiedad. Esto garantiza la coherencia de atributos de propiedades como el nivel de acceso y la
sobrecarga. El siguiente ejemplo muestra la declaración de una propiedad que no acepta parámetros.
VB
Private monthNum As Integer = 1
Property month() As Integer
Get
Return monthNum
End Get
Set(ByVal Value As Integer)
If Value < 1 Or Value > 12 Then
' Error processing for invalid value.
Else
monthNum = Value
End If
End Set
End Property

Puede utilizar cualquier nombre que desee para el parámetro de Set. Si no proporciona un argumento, se genera Value
automáticamente.
Este cambio de sintaxis hace que las instrucciones Property Get y Property Set sean innecesarias, por lo que ya no están
admitidas. Como Visual Basic 2005 no permite tener propiedades predeterminadas sin parámetros, ya no se necesitan
Property Let ni Property Set para distinguir si se debe asignar una referencia de objeto o una propiedad predeterminada. Por
lo tanto, tampoco se admite la instrucción Property Let.
Visual Basic 2005 no admite parámetros de propiedad ByRef. Si un procedimiento de propiedad presenta un argumento
ByRef y cambia la variable subyacente al argumento correspondiente, la propiedad puede comportarse de un modo
inesperado. Por lo tanto, todas las declaraciones de las propiedades parametrizadas deben especificar ByVal para los
parámetros.
Vea también
Referencia
ByVal
Conceptos
Cambios en las propiedades predeterminadas para usuarios de Visual Basic 6.0
Resumen de cambios de los elementos de programación ofrecidos
Conceptos de Visual Basic

Controlar los cambios de flujo para usuarios de Visual Basic 6.0


Los temas siguientes describen los cambios en el flujo de control entre Visual Basic 6.0 y Visual Basic 2005.
En esta sección
Instrucción de control para usuarios de Visual Basic 6.0
Trata los cambios en instrucciones que controlan el flujo de ejecución.
Control de excepciones para usuarios de Visual Basic 6.0
Describe la nueva compatibilidad con el control de excepciones estructurado y la compatibilidad con el control de
excepciones no estructurado.
Secciones relacionadas
Resumen de cambios de los elementos de programación ofrecidos
Proporciona una lista ordenada alfabéticamente de elementos de programación que han cambiado o que ya no se admiten
en Visual Basic 2005, e incluye los elementos por los que se han reemplazado.
Cambios en el lenguaje para usuarios de Visual Basic 6.0
Proporciona información general sobre las funciones nuevas y modificadas de Visual Basic 2005.
Conceptos de Visual Basic

Instrucción de control para usuarios de Visual Basic 6.0


Visual Basic 2005 actualiza varias instrucciones que controlan el flujo de ejecución.
Visual Basic 6.0
En Visual Basic 6.0, la instrucción GoSub llama a un subprocedimiento de un procedimiento. Las construcciones On ... GoSub
y On ... GoTo, también conocidas como GoSub calculadas y GoTo calculadas, proporcionan compatibilidad con versiones
anteriores de BASIC.
La construcción While ... Wend repite las líneas de código entre estas palabras clave mientras se cumpla una condición
especificada.
Visual Basic 2005
En Visual Basic 2005, puede llamar a los procedimientos con la instrucción Call y no se admite la instrucción GoSub. Puede
realizar bifurcaciones con instrucciones Select...Case y no se admiten las construcciones On ... GoSub ni On ... GoTo. Sin
embargo, Visual Basic 2005 todavía admite la instrucción On Error.
Visual Basic 2005 conserva la construcción While ... Wend, pero reemplaza la palabra clave Wend con la instrucción End. No
se admite la palabra clave Wend.
Vea también
Referencia
Instrucción Call (Visual Basic)
Instrucción Function (Visual Basic)
Instrucción Sub (Visual Basic)
Instrucción Return (Visual Basic)
Instrucción Select...Case (Visual Basic)
Instrucción On Error (Visual Basic)
End (Instrucción)
Conceptos
Secuencia de llamada a procedimientos para usuarios de Visual Basic 6.0
Resumen de cambios de los elementos de programación ofrecidos
Conceptos de Visual Basic

Control de excepciones para usuarios de Visual Basic 6.0


Visual Basic 2005 agrega compatibilidad con el control de excepciones estructurado y sigue admitiendo el control de
excepciones no estructurado.
Visual Basic 6.0
En Visual Basic 6.0, se utiliza el control no estructurado de excepciones para descubrir errores en el código. Una instrucción On
Error al principio de un bloque de código controla cualquier error que se produzca dentro de ese bloque. El control no
estructurado de excepciones también utiliza las instrucciones Error y Resume.
Visual Basic 2005
En Visual Basic 2005, el código del control estructurado de excepciones detecta y responde a los errores durante la ejecución
mediante la combinación de una estructura de control con excepciones, es decir, bloques de código protegido y filtros. El
control de excepciones estructurado se hace a través de una instrucción Try, que se compone de tres tipos de bloques: Try,
Catch y Finally. Un bloque Try es un bloque de instrucciones que contiene la instrucción que se va a ejecutar. Un bloque
Catch es un bloque de instrucciones que controla una excepción. Un bloque Finally contiene instrucciones que se ejecutan al
salir de la instrucción Try, independientemente de si ocurre una excepción. La instrucción Throw, que se utiliza conjuntamente
con un bloque Catch, produce una excepción que está representada por una instancia de un tipo derivado de la clase
Exception.
Vea también
Referencia
Instrucción Throw (Visual Basic)
Instrucción On Error (Visual Basic)
Error (Instrucción)
Resume (Instrucción)
Exception
Conceptos
Información general sobre el control estructurado de excepciones de Visual Basic
Información general sobre el control no estructurado de excepciones
Resumen de cambios de los elementos de programación ofrecidos
Conceptos de Visual Basic

Programación orientada a objetos para usuarios de Visual Basic


6.0
Visual Basic 6.0 admite elementos del lenguaje orientado a objetos y objetos distribuidos en bibliotecas. Visual Basic 2005
amplía la compatibilidad con la programación orientada a objetos al admitir todas sus propiedades de lenguaje.
Diferencias conceptuales
En las secciones siguientes se muestran las características orientadas a objetos de Visual Basic 2005, comparándolas con la
implementación de Visual Basic 6.0 donde sean aplicables. Para cada característica, se proporcionan vínculos a páginas de
Ayuda detalladas que pueden ser de utilidad.
Niveles de acceso
En Visual Basic 6.0, para establecer los niveles de acceso de los elementos declarados se utilizan las palabras clave Private,
Friend, Public y Static.
En Visual Basic 2005, para establecer los niveles de acceso de los elementos declarados se utilizan las palabras clave Private,
Friend, Public y Static, más las nuevas palabras clave Protected y Protected Friend. El nivel de acceso de un elemento
declarado es la capacidad de acceso a él, es decir, qué código tiene permiso para leer o escribir en él.
Para obtener más información, vea Niveles de acceso en Visual Basic y Ámbito en Visual Basic.
Atributos
En Visual Basic 6.0, la compatibilidad limitada con atributos incrustados se proporciona a través de herramientas, como los
atributos de procedimiento del IDE de Visual Basic.
En Visual Basic 2005, un Attribute es una etiqueta descriptiva que se puede utilizar para agregar instrucciones de tipo y
miembro de tipo, así se modifica su significado o se personaliza su comportamiento. Por ejemplo, las instrucciones de clase e
instrucciones de método de clase se pueden anotar con atributos.
Su aplicación y otras aplicaciones, como el compilador de Visual Basic, pueden utilizar la reflexión para tener acceso a atributos
con el fin de determinar cómo se utilizan los tipos y los miembros de tipo.
Se pueden utilizar los atributos para realizar una programación orientada a aspectos (AOP) con Visual Basic. Un aspecto es una
parte de un programa que trasciende su lógica empresarial. En otras palabras, se necesita para finalizar el programa, pero no
es necesariamente específico del dominio para el que se escribe el programa. El aislamiento de tales aspectos como el registro
y la conservación de la lógica empresarial es el objetivo del paradigma de la programación orientada a aspectos.
Para obtener más información, vea Información general sobre los atributos de Visual Basic, Atributos utilizados en Visual Basic
y Usos comunes de los atributos.
Compatibilidad binaria
En Visual Basic 6.0, la opción Binary Compatibility permite conservar automáticamente identificadores de clase e interfaz de
una versión anterior de un componente al compilar una nueva versión.
En Visual Basic 2005, no se admite la opción Binary Compatibility; en su lugar, la compatibilidad binaria se lleva a cabo con
atributos. Esto ofrece control directo sobre la información insertada en el componente compilado, como los identificadores de
clase y de interfaz, los desplazamientos de tabla virtual y los atributos COM apropiados.
Para obtener más información, vea Cambios en la compatibilidad binaria para usuarios de Visual Basic 6.0.
Módulos de clase
En Visual Basic 6.0, una clase se define en un módulo de clase. Un módulo de clase único se almacena en un tipo especial de
archivo con extensión .cls.
En Visual Basic 2005, las clases se definen en la instrucción Class que especifica el nombre y los miembros de una clase. Las
instrucciones Class se almacenan en archivos de código fuente. El archivo de código fuente completo se puede visualizar como
texto sin formato.
Se pueden almacenar varias instrucciones Class, así como otros tipos de instrucciones en un solo archivo de código fuente.
Visual Basic no requiere que el nombre del archivo de código fuente corresponda a una Class o un tipo definido en el archivo
de código fuente.
Para obtener más información, vea Instrucción Class (Visual Basic).
Métodos del constructor de clases
En Visual Basic 6.0, para ejecutar el código que hay que ejecutar en el momento en que se crea un objeto, se utiliza el
controlador de eventos Initialize de clase llamado Class_Initialize.
En Visual Basic 2005, se agregan uno o más constructores a una clase para ejecutar el código e inicializar las variables. Los
constructores son los métodos de una clase que se denominan New. El método New se puede sobrecargar para proporcionar
el nombre New a varios constructores dentro de la misma instrucción de clase.
Para obtener más información, vea New (Visual Basic) o Utilizar constructores y destructores.
Métodos de destructor de clase
En Visual Basic 6.0, para desasociar una variable de objeto de un objeto real se utiliza la palabra clave Nothing. La instrucción
Set es equivalente a asignar Nothing a una variable de objeto.
En Visual Basic 2005, para la mayoría de los objetos creados por la aplicación, puede utilizar el recolector de elementos no
utilizados y realizar automáticamente las tareas de administración de memoria. Sin embargo, los recursos no administrados
requieren una limpieza explícita. El tipo más habitual de recurso no administrado es un objeto que contiene un recurso del
sistema operativo, como un identificador de archivo, identificador de ventana o conexión de red.
Cuando se crea un objeto que encapsula un recurso no administrado, es recomendable proporcionar el código necesario para
limpiar dicho recurso en un método público Dispose. Si se proporciona un método Dispose, se permite que los usuarios del
objeto liberen memoria de manera explícita cuando hayan terminado de usarlo.
Si se utiliza un objeto que encapsula un recurso no administrado, se debe conocer la existencia de Dispose y llamarlo cuando
sea necesario.
Para obtener más información, vea Limpiar recursos no administrados o Administración de memoria automática.
Class_Initialize
En Visual Basic 6.0, el método Class_Initialize puede controlar un evento Initialize para ejecutar el código que es necesario
ejecutar en el momento en que se crea un objeto. Por ejemplo, se pueden inicializar los valores de variables de datos de clase.
En Visual Basic 2005, no se admite el evento Initialize ni el controlador Class_Initialize. Para proporcionar la inicialización de
clase, agregue uno o varios métodos de constructor a las clases y estructuras que define.
Para obtener más información, vea Cambios de Class_Initialize para usuarios de Visual Basic 6.0.
Clases de datos
En Visual Basic 6.0, cuando se trabaja con datos externos, como bases de datos de Microsoft SQL Server, se utilizan las clases
data source y complex data consumer. Una clase data source proporciona datos de un origen externo. Una clase data
consumer se puede enlazar a un origen de datos externo como una clase Data Source
En Visual Basic 2005, para trabajar con datos externos e internos se utilizan las clases de origen de datos, consumidor de datos
simple, consumidor de datos complejo y enlace.
Para obtener más información, vea Enlace de datos y formularios Windows Forms.
Default (Propiedad)
En Visual Basic 6.0, cualquier propiedad de clase se puede definir como la propiedad predeterminada de la clase.
En Visual Basic 2005, el miembro predeterminado de una clase o estructura sólo puede ser una propiedad con uno o varios
argumentos. Para definir miembros de propiedad predeterminados hay que incluir la palabra clave Default en una instrucción
de declaración de propiedad de una clase o estructura.
Para obtener más información, vea Cambios en las propiedades predeterminadas para usuarios de Visual Basic 6.0.
Delegados
En Visual Basic 6.0, no se admiten los tipos de delegado.
En Visual Basic 2005, un tipo de delegado es una forma de puntero a método orientado a objetos que permite invocar
directamente a un método por medio de una referencia. Los delegados se pueden utilizar para enlazar controladores de
eventos y pasar un método de un método a otro.
Los delegados se pueden utilizar para implementar el modelo de diseño asincrónico. Por ejemplo, con un delegado
asincrónico, un programa puede llamar a un método, que enumera una gran lista, mientras el programa principal continúa en
ejecución. Cuando se completa la enumeración, se realiza una devolución de llamada y el programa la asigna.
Para obtener más información, vea Delegados de Visual Basic o
Cómo: Pasar procedimientos a otro procedimiento en Visual Basic.
Control de errores
En Visual Basic 6.0, se utiliza la instrucción On Error para el control no estructurado de excepciones.
En Visual Basic 2005, se admiten los dos tipos de control de excepciones, estructurado y no estructurado. El control
estructurado de excepciones es una estructura de control que contiene excepciones, bloques aislados de código y filtros para
crear un mecanismo de control de excepciones.
Para obtener más información, vea Control estructurado de excepciones en Visual Basic o
Elegir cuándo se debe utilizar el control estructurado de excepciones y cuándo el control no estructurado de excepciones.
Eventos
En Visual Basic 6.0, para declarar, iniciar y controlar eventos se utilizan las palabras clave Event, RaiseEvent y WithEvents.
En Visual Basic 2005, para declarar, iniciar y controlar eventos se utilizan las palabras clave Event, RaiseEvent y WithEvents,
más las nuevas palabras clave AddHandler, RemoveHandler y Handles.
Las palabras clave AddHandler y RemoveHandler permiten agregar, quitar y cambiar dinámicamente el controlador de
eventos asociado a un evento.
La palabra clave Handles permite definir una cláusula Handles en un método. Handles declara que un procedimiento
controla un evento especificado.
Los eventos de .NET Framework se basan en un modelo de delegado. El modelo de delegado se basa en el modelo de diseño
de observador orientado a objetos.
Para obtener más información, vea Cómo: Escribir controladores de eventos.
Genéricos
En Visual Basic 6.0, no se admiten los tipos genéricos.
En Visual Basic 2005, los tipos genéricos se utilizan para implementar el polimorfismo paramétrico en programas Visual Basic.
El código genérico se escribe sin mencionar ningún tipo específico y así se puede utilizar de forma transparente con cualquier
número de tipos nuevos.
Visual Basic 2005 admite parámetros de tipo en clases, estructuras, interfaces, procedimientos y delegados genéricos. Un
argumento de tipo correspondiente especifica en tiempo de compilación el tipo de datos de uno de los elementos del tipo
genérico.
Para obtener más información, vea Tipos genéricos en Visual Basic.
Clases globales
En Visual Basic 6.0, el valor de la propiedad Instancing de una clase determina si una clase es privada (es decir, se utiliza sólo
dentro de un componente) o está disponible para que otras aplicaciones la utilicen. También determina cómo otras
aplicaciones crean instancias de la clase y llaman a los miembros de clase.
En Visual Basic 2005, ya no se admite la propiedad Instancing.
Puede aplicar la palabra clave Public a instrucciones de clase en un ensamblado para exponer las clases de ese ensamblado a
otros ensamblados.
Puede hacer referencia a un ensamblado externo como una biblioteca de clases para permitir que en el código de la aplicación
se utilicen las clases Public de esa biblioteca de clases.
Puede utilizar la palabra clave Imports para importar nombres de espacio de nombres de proyectos y ensamblados a los que
se hace referencia. La palabra clave Imports también puede importar nombres de espacios de nombres definidos dentro del
mismo proyecto como el archivo en el que aparece la instrucción.
Puede aplicar la palabra clave Shared a los miembros: campo, propiedad y método de clases y estructuras para implementar
miembros compartidos. Los miembros compartidos son propiedades, procedimientos y campos que comparten todas las
instancias de una clase o estructura. Se puede tener acceso a los miembros compartidos de una clase sin crear instancias de la
clase.
Para obtener más información, vea Niveles de acceso en Visual Basic, Referencias y la instrucción Imports o
Miembros compartidos en Visual Basic.
Herencia de implementación
En Visual Basic 6.0, no se admite la herencia de implementación.
En Visual Basic 2005, puede implementar el polimorfismo ad hoc mediante la herencia de implementación. Esto permite
definir clases que se pueden utilizar de manera intercambiable por el código cliente durante la ejecución, pero con métodos o
propiedades (aun con nombres idénticos) funcionalmente distintos.
Puede definir clases base que actúen como base para clases derivadas. Las clases derivadas heredan, y pueden extender, las
propiedades, métodos y eventos de la clase base. Las clases derivadas también pueden reemplazar métodos heredados con
nuevas implementaciones.
Para obtener más información, vea Fundamentos de la herencia o Cuándo utilizar la herencia.
Herencia de interfaces
Visual Basic 6.0 proporciona el polimorfismo a través de varias interfaces de ActiveX. En el Modelo de objetos componentes
(COM) que forma la infraestructura de la especificación ActiveX, varias interfaces permiten que se desarrollen los sistemas de
componentes de software sin interrumpir el código existente.
En Visual Basic 2005, puede implementar el polimorfismo ad hoc con la palabra clave Interface de .NET Framework.
Varias clases pueden implementar la misma Interface y una sola clase puede implementar una o más interfaces. Las interfaces
son, básicamente, definiciones de cómo debe responder una clase. Una interfaz define los métodos, propiedades y eventos que
una clase necesita implementar, así como el tipo de parámetros que cada miembro necesita recibir y devolver, pero deja a la
clase la implementación específica de estos miembros.
Las interfaces múltiples tienen la ventaja de permitir la evolución de los sistemas de componentes de software sin interrumpir
el código existente.
Para obtener más información, vea Polimorfismo basado en la interfaz o Cómo: Crear e implementar interfaces.
Métodos: parámetros ByVal y ByRef
En Visual Basic 6.0, los argumentos se pasan por valor o por referencia a un método. A menos que la palabra clave ByVal o
ByRef especifique explícitamente los parámetros del método, los argumentos se pasan por referencia (ByRef) implícitamente.
En Visual Basic 2005, se pasan argumentos por valor o por referencia a un método. A menos que la palabra clave ByVal o
ByRef especifique explícitamente los parámetros del método, se pasan los argumentos por valor (ByVal) implícitamente.
Para obtener más información, vea Pasar argumentos por valor y por referencia.
Métodos: sobrecarga
En Visual Basic 6.0, no se admite la sobrecarga de métodos.
En Visual Basic 2005, para implementar el polimorfismo ad hoc en un programa Visual Basic se utiliza la sobrecarga Method.
Un método se sobrecarga cuando se definen varias versiones del método en una clase. Las versiones sobrecargadas difieren
en sus parámetros y tipos devueltos.
Para obtener más información, vea Propiedades y métodos sobrecargados y Cómo proporciona Visual Basic polimorfismo.
Métodos: reemplazar
En Visual Basic 6.0, no se pueden reemplazar métodos.
En Visual Basic 2005, puede utilizar la palabra clave Overrides para reemplazar un método en una clase derivada con el fin de
proporcionar una implementación distinta de un método de la clase base de la clase derivada.
Para obtener más información, vea Reemplazar propiedades y métodos.
Métodos: devolver resultados
En Visual Basic 6.0, se utiliza un nombre de método Function como el nombre de una variable para devolver el resultado del
método Function.
En Visual Basic 2005, puede utilizar la palabra clave Return para devolver un resultado del método Function.
Utilice Return para devolver el control al código que llamó a un método Sub, Function o Property.
Para obtener más información, vea Instrucción Return (Visual Basic).
My
En Visual Basic 2005, la nueva característica My permite la programación rápida orientada a objetos con Visual Basic
proporcionando puntos de entrada a clases y funciones de .NET Framework utilizadas con frecuencia. My proporciona nuevas
clases de .NET Framework de alto nivel que incorporan juntas funciones relacionadas en las API basadas en tareas.
Para obtener más información, vea Desarrollo con la función My.
Palabras clave MyBase, MyClass y Me
En Visual Basic 6.0, la palabra clave Me se comporta como una variable declarada implícitamente. Cuando una clase tiene más
de una instancia, Me proporciona un modo de hacer referencia a la instancia específica de la clase donde se ejecuta el código.
En Visual Basic 2005, la palabra clave MyBase proporciona una manera de hacer referencia a la clase base de la instancia de la
clase actual.
La palabra clave MyClass proporciona una manera de hacer referencia a la instancia de la clase actual sin reemplazos.
La palabra clave Me siempre hace referencia a la instancia específica de una clase o estructura donde se está ejecutando el
código.
Para obtener más información, vea Me, My, MyBase y MyClass en Visual Basic.
New (Palabra clave)
En Visual Basic 6.0, el uso no adecuado de la palabra clave New puede provocar algún comportamiento de reinicialización
inusual que podría producir errores y una utilización excesiva de memoria.
En Visual Basic 2005, la palabra clave New simplemente asigna espacio para el objeto; no produce ningún comportamiento de
reinicialización inusual.
Utilice una cláusula New en una instrucción de declaración o en una instrucción de asignación. Cuando se ejecuta la
instrucción, ésta llama al método constructor de la clase especificada y le pasa los argumentos que se le hayan proporcionado
en la cláusula New: Esto significa que puede forzar las restricciones de datos desde el momento en que se crea una instancia
del objeto.
Una clase tiene uno o más constructores. Los constructores son los métodos de un método denominado New. Para definir
varios constructores se sobrecarga el método New de la clase. Los métodos de constructor sobrecargados se describen como
constructores con parámetros.
Para obtener más información, vea New (Visual Basic).
Duración de objetos
En Visual Basic 6.0, el período de duración de un objeto es determinista; cada instancia de objeto mantiene un recuento de
referencias. Cuando se libera la última referencia de una instancia y el valor del recuento es cero, se destruye el objeto
inmediatamente.
En Visual Basic 2005, el período de duración del objeto no es determinista; no se llama necesariamente a los destructores en
cuanto se libera la última referencia. Esto es porque el Common Language Runtime mantiene un árbol de referencias en lugar
de recuentos de referencias particulares.
El recolector de elementos no utilizados rastrea continuamente el árbol de referencias en segundo plano. Si encuentra un
objeto o grupo de objetos que no tienen referencias de ningún código que se esté ejecutando, llama a los destructores de
todos esos objetos.
No se puede predecir el orden de esta destrucción ni el tiempo que llevará al recolector de elementos rastrear el árbol de
referencias.
Para obtener más información, vea Período de duración en Visual Basic o Duración de los objetos: cómo se crean y destruyen.
Sobrecarga de operadores
En Visual Basic 6.0, no se admite la sobrecarga de operadores.
En Visual Basic 2005, la sobrecarga de operadores permite que se defina el comportamiento de un operador estándar (como *,
<> o And) para una clase o estructura definida por el usuario.
Para obtener más información, vea Cómo: Definir un operador de conversión.
Option Strict
En Visual Basic 6.0, se utiliza la comprobación de tipo permisiva en tiempo de ejecución.
En Visual Basic 2005, puede utilizar la instrucción OPTION STRICT ON para habilitar la comprobación de tipos estricta en
tiempo de diseño en lugar de la comprobación de tipos permisiva en tiempo de ejecución. De manera predeterminada, se
utiliza OPTION STRICT OFF.
Cuando se realiza una conversión entre tipos de datos, el compilador de Visual Basic puede funcionar con una semántica de
tipos estricta o permisiva. Si está vigente la semántica de tipos estricta, (OPTION STRICT ON) sólo se permiten de forma
implícita las conversiones de ampliación y las conversiones de restricción deben ser explícitas. Con una semántica de tipos
permisiva (OPTION STRICT OFF), puede intentar todas las conversiones de ampliación y de restricción de forma implícita. La
semántica de tipos se aplica a conversiones entre tipos de datos, incluyendo los tipos de objeto.
Para obtener más información, vea Comprobar tipos en Visual Basic.
Sintaxis de la propiedad
En Visual Basic 6.0, se utilizan las instrucciones Property Get, Property Let y Property Set para obtener y establecer los
valores de las propiedades.
En Visual Basic 2005, se utiliza una sintaxis de declaración de propiedad unificada que incluye los procedimientos para obtener
y establecer el valor de la propiedad. Esto garantiza la coherencia de atributos de propiedades como el nivel de acceso y la
sobrecarga.
Para obtener más información, vea Cambios en las propiedades para usuarios de Visual Basic 6.0.
Interfaces públicas
En Visual Basic 6.0, la interfaz pública de una clase es el conjunto de sus miembros públicos.
En Visual Basic 2005, la interfaz pública de una clase es el conjunto de sus miembros públicos, pero puede utilizarse una clase
abstracta para implementar el polimorfismo de subtipos en programas de Visual Basic.
Una clase abstracta es similar a la Interface de .NET Framework. Una clase abstracta es aquélla que está diseñada sólo para
actuar como una clase base para las clases derivadas. Las clases abstractas se suelen utilizar para representar conceptos
abstractos o entidades.
Una clase abstracta no puede crear instancias de sí misma; se debe heredar. Algunos o todos los miembros de la clase pueden
estar sin implementar; proporcionar tal implementación depende de la clase heredada. Los miembros implementados se
pueden seguir reemplazando; la clase heredada puede continuar implementando interfaces adicionales u otras
funcionalidades.
Para obtener más información, vea MustInherit.
Propiedades de sólo lectura
En Visual Basic 6.0, excluir el método Set de un procedimiento Property crea una propiedad de sólo lectura.
En Visual Basic 2005, debe aplicar la palabra clave ReadOnly a una propiedad y excluir la cláusula Set de propiedad para que
sea de sólo lectura.
También puede aplicar la palabra clave ReadOnly a un campo para que sea de sólo lectura.
Para obtener más información, vea ReadOnly (Visual Basic).
Reflexión
En Visual Basic 6.0, no se admite la reflexión.
En Visual Basic 2005, se pueden utilizar las clases del espacio de nombres System.Reflection de la biblioteca de clases de .NET
Framework para obtener información sobre tipos como clases, interfaces y tipos de valores en tiempo de ejecución y para
crear instancias de tipos para invocarlos y tener acceso a ellos.
Para obtener más información, vea Espacios de nombres de reflexión en Visual Studio.
Miembros de clase y estructura compartidos
En Visual Basic 2005, se puede aplicar la nueva palabra clave Shared a las instrucciones Property, Sub, Dim, Function,
Operator y Event para compartirlas con otras instancias de una clase o estructura. Se puede tener acceso a los miembros
compartidos de una clase sin crear instancias de la clase.
Puede tener acceso a los miembros compartidos a través del nombre de clase en lugar de a través de una instancia de la clase.
Para obtener más información, vea Miembros compartidos en Visual Basic.
Archivos de código fuente
En Visual Basic 2005, los programas constan de uno o más archivos de código fuente. Los archivos de código fuente se
almacenan en un tipo especial de archivo con una extensión .vb. Las instrucciones de tipo para tipos como clases, estructuras,
interfaces, enumeraciones y delegados, así como las instrucciones para módulos estándar, se almacenan en archivos de código
fuente de programa. Visual Basic no limita un archivo de código fuente a definir sólo un tipo ni requiere que el nombre del
archivo de código fuente corresponda a un tipo definido en el archivo de código fuente.
Las instrucciones de tipo parcial permiten que se defina una clase o una estructura en varios archivos de código fuente.
Cuando se compila un programa con varios archivos de código fuente, se procesan juntos como si estuvieran concatenados en
un archivo antes de procesarse.
Para obtener más información, vea Estructura de un programa de Visual Basic o Partial (Visual Basic).
Tipos definidos por el usuario
En Visual Basic 6.0, para combinar variables de varios tipos diferentes en un tipo definido por el usuario o UDT se utiliza la
instrucción Type.
En Visual Basic 2005, para definir los tipos de valor definidos por el usuario se utilizan las instrucciones Structure y Enum.
Utilice las instrucciones Class, Interface y Delegate para definir los tipos por referencia definidos por el usuario.
Para obtener más información, vea Estructuras: tipos de datos propios.
Declaración de variables
En Visual Basic 6.0, puede declarar variables de distintos tipos en la misma instrucción. Si no especifica el tipo de datos de una
variable en la instrucción, se toma como valor predeterminado Variant.
En Visual Basic 2005, puede declarar varias variables del mismo tipo de datos sin tener que especificar el tipo de datos de cada
variable de la instrucción.
Para obtener más información, vea Declaración de variable en Visual Basic.
Notas de actualización
Cuando se actualiza una aplicación de Visual Basic 6.0 a Visual Basic 2005, las construcciones de código orientado a objetos se
convierten en sus equivalentes más próximos en Visual Basic 2005 de la manera más conveniente. El código producido no se
debe tomar como un ejemplo de cómo utilizar programación orientada a objetos en Visual Basic 2005.
Si tiene previsto ampliar una aplicación actualizada para utilizar construcciones orientadas a objetos de Visual Basic 2005,
quizá desee modificar primero el código actualizado. Las páginas siguientes le ayudarán a empezar.
Clases para usuarios de Visual Basic 6.0
Las clases son las unidades de creación de una aplicación orientada a objetos.
Cómo: Convertir una colección personalizada en una colección con tipo de Visual Basic
Visual Basic 2005 proporciona varias opciones para crear clases con tipo a partir de colecciones personalizadas de Visual
Basic 6.0.
Cómo: Convertir un tipo definido por el usuario en una estructura de Visual Basic
La instrucción Type de Visual Basic 6.0 se actualiza a la instrucción Structure de Visual Basic 2005.
Cómo: Convertir el código de Implements en una nueva forma de herencia
Las versiones más recientes de Visual Basic ofrecen dos tipos de herencia, utilizando la instrucción Implements y la
instrucción Inherits.
Vea también
Tareas
Ejemplo Object-Oriented Programming
Conceptos
Clases para usuarios de Visual Basic 6.0
Cambios orientados a objetos en los módulos de Visual Basic
Cambios en las interfaces para usuarios de Visual Basic 6.0
Herencia para usuarios de Visual Basic 6.0
Otros recursos
Cambios en el lenguaje para usuarios de Visual Basic 6.0
Ayuda para usuarios de Visual Basic 6.0
Conceptos de Visual Basic

Clases para usuarios de Visual Basic 6.0


Las clases son las unidades de creación de una aplicación orientada a objetos. Una clase es una construcción de programación
que representa un objeto en el sistema. Al diseñar una aplicación es necesario diseñar los objetos implicados, la información
que contienen los objetos y las operaciones que pueden llevar a cabo los objetos. Para obtener más información sobre las
clases y la programación orientada a objetos, vea Programación orientada a objetos en Visual Basic.
Módulos de clase
Visual Basic 6.0
Visual Basic 6.0 admite la definición de clases a través del módulo de clase. La definición de una clase se almacena en un tipo
de archivo especial, el archivo .cls. Se define una clase en cada módulo de clase. Algunas definiciones de clases se incluyen en
el archivo .cls y sólo se pueden editar a través del sistema de proyectos.
Visual Basic 2005
En Visual Basic 2005, una clase se define por Instrucción Class (Visual Basic), no por un nombre de archivo. Las clases en Visual
Basic 2005 están definidas en los archivos de código fuente, los archivos .vb. Se pueden definir varias clases en un solo archivo.
Toda la definición de clase se puede ver como texto sin formato en el código fuente.
Clases globales
Visual Basic 6.0
Cuando crea una nueva clase en Visual Basic 6.0, los valores permitidos de la propiedad Instancing incluyen
GlobalSingleUse y GlobalMultiUse. Éstos indican que otros componentes pueden llamar a las propiedades y los métodos
de la nueva clase como si fueran miembros compartidos. Se crea implícitamente una instancia de la clase la primera vez que se
llama a uno de estos miembros.
Visual Basic 2005
Visual Basic 2005 no admite la propiedad Instancing. Visual Basic 2005 proporciona la misma funcionalidad al permitir la
exposición de miembros de módulo estándar. Puede tener acceso a las propiedades y métodos compartidos mediante la
instrucción Imports. Puede conseguir el efecto de GlobalMultiUse con el acceso de clase Public y el acceso del constructor
apropiado.
Clases de datos
Visual Basic 6.0
Visual Basic 6.0 también admite las clases Data Source y Complex Data Consumer .
Visual Basic 2005
No hay ningún equivalente directo en Visual Basic 2005. Para obtener información sobre las clases que manipulan datos, vea
Cómo: Conectarse a los datos de un objeto.
Miembros predeterminados
Visual Basic 6.0
En Visual Basic 6.0, puede especificar que un método o un miembro de datos en particular sea el miembro predeterminado de
una clase.
Visual Basic 2005
En Visual Basic 2005, un miembro predeterminado de una clase o estructura sólo puede ser una propiedad con uno o varios
argumentos. Esto permite la interoperatividad con otros lenguajes de programación. Para obtener más información, vea
Cómo: Declarar y llamar a una propiedad predeterminada en Visual Basic.
Duración de objetos
Visual Basic 6.0
La duración de un objeto se determinada mediante la creación y destrucción de la instancia del objeto. El programa determina
el momento de creación del objeto que declara, pero destrucción implica un mecanismo más complejo.
En Visual Basic 6.0, cada instancia de objeto mantiene un recuento de referencia. Cuando se libera la última referencia a una
instancia y el valor del recuento es cero, se destruye el objeto inmediatamente.
Visual Basic 2005
En Visual Basic 2005, no se llama necesariamente a los destructores en cuanto se libera la última referencia. Esto es porque el
Common Language Runtime mantiene un árbol de referencias en lugar de recuentos de referencias particulares. El recolector
de elementos no utilizados rastrea continuamente el árbol de referencias en segundo plano. Si encuentra un objeto o grupo de
objetos que no tienen referencia de ningún código que se esté ejecutando actualmente, llama a los destructores de todos esos
objetos. No se puede predecir el orden de esta destrucción ni el tiempo que llevará al recolector de elementos rastrear el árbol
de referencias. Por lo tanto, la duración de un objeto es indeterminada. Para obtener más información, vea
Duración de los objetos: cómo se crean y destruyen y Recolección de elementos no utilizados.
Opciones de actualización
El Asistente para actualización crea una actualización sencilla de módulos de clase efectuando cambios mínimos en el código.
Además de los cambios mostrados anteriormente, los programadores de Visual Basic disponen de algunas estructuras nuevas
entre las que elegir que resultan especialmente relevantes para la programación orientada a objetos. A continuación se
enumeran algunas de ellas.
Constructores Los constructores sustituyen a Class_Initialize de Visual Basic 6.0. Para obtener más información, vea
Cambios de Class_Initialize para usuarios de Visual Basic 6.0.
Propiedades indizadas predeterminadas Las propiedades indizadas predeterminadas se utilizan a menudo a lo
largo de .NET Framework para obtener acceso a los miembros de las colecciones. Para obtener más información, vea
Cambios en las propiedades predeterminadas para usuarios de Visual Basic 6.0.
Sólo lectura En Visual Basic 6.0, una propiedad es de sólo lectura de forma implícita si no hay un procedimiento Get.
Visual Basic 2005 necesita la palabra clave ReadOnly para declarar explícitamente este comportamiento. Para obtener
más información, vea Property (Instrucción).
Enlaces en tiempo de ejecución Dado que Visual Basic 6.0 proporciona de manera predeterminada enlaces en
tiempo de ejecución, el modo más adecuado de actualizar el código sin errores es establecer Option Strict en Off. Al
cambiar Option Strict a On, se fuerza la seguridad de tipos en tiempo de compilación, y pueden exponerse errores
sutiles durante la compilación en lugar de en el tiempo de ejecución. Para obtener más información, vea
Option Strict (Instrucción).
Sobrecarga de métodos La sobrecarga de métodos reduce el número de miembros con nombres distintos de una
clase. De este modo, la clase resulta más legible y más fácil de programar. Para obtener más información, vea
Cambios en los procedimientos para usuarios de Visual Basic 6.0.
Nombre de archivo Visual Basic 6.0 requiere que el nombre de clase y el nombre de archivo coincidan. En Visual Basic
2005, el programador controla los dos y puede definir varias clases en un archivo de código fuente. El número de clases
incluidas en un archivo depende generalmente del estándar de codificación.
ByRef El valor predeterminado para los parámetros en Visual Basic 6.0 es ByRef, por lo que la actualización más segura
es ByRef. Para obtener más información, vea ByVal.
Palabra clave Return En Visual Basic 6.0, el nombre de la función se utiliza como variable al devolver el valor de la
función. Visual Basic 2005 proporciona la palabra clave explícita Return para devolver valores de funciones. Para obtener
más información, vea Instrucción Return (Visual Basic).
Sobrecarga de operadores Ahora puede definir el significado de la suma (+), resta (-) y otros operadores para las
clases que defina. Para obtener más información, vea Operator (Instrucción).
Nuevos operadores El operador += puede acortar y simplificar una línea de código. Para obtener más información,
vea Operadores aritméticos (Visual Basic).
Definición en línea de nuevos valores La sintaxis en Visual Basic 2005 permite declarar y establecer el valor de una
nueva variable en una sola línea de código. Esto significa que puede forzar las restricciones de datos desde el momento
en que se crea una instancia del objeto. Para obtener más información, vea Instrucción Dim (Visual Basic).
Rescribir el código conlleva riesgos. Siempre que se modifica el código, debe comprobarse de nuevo. Además, algunas
palabras clave en Visual Basic 2005 no actúan exactamente igual que en Visual Basic 6.0. Para obtener más información, vea
Actualizar aplicaciones creadas en versiones anteriores de Visual Basic.
Vea también
Referencia
Structure (Instrucción)
Property (Instrucción)
Option Strict (Instrucción)
Instrucción Return (Visual Basic)
'ByVal' y 'ByRef' no se pueden combinar
ByRef
Conceptos
Enlace en tiempo de compilación y en tiempo de ejecución
Cambios de Class_Initialize para usuarios de Visual Basic 6.0
Otros recursos
Crear y utilizar objetos
Descripción de las clases
Conceptos de Visual Basic

Cambios de Class_Initialize para usuarios de Visual Basic 6.0


Un constructor es un método que se ejecuta cuando se crea un objeto. Los constructores son una novedad de Visual Basic.
Combinan el comportamiento de la instrucción New y el método Class_Initialize de Visual Basic 6.0, a la vez que ofrecen
mayor flexibilidad y control cuando se crean instancias de una clase. Para obtener más información sobre la creación de
objetos, vea Crear y utilizar objetos.
Class_Initialize
Visual Basic 6.0
Visual Basic 6.0 proporciona compatibilidad para el concepto de constructor mediante el método Class_Initialize. Este método
es privado y no permite ningún parámetro. Se llama automáticamente a este método cuando se crea una nueva instancia de la
clase. Una llamada a la palabra clave New llama al método Class_Initialize, si existe.
Suponga que desea especificar el crecimiento anual de un árbol con un valor predeterminado de cinco años. El código de clase
será parecido al siguiente:

' Visual Basic 6.0


Private mvarYearlyGrowth As Integer

Public Property Get YearlyGrowth() As Integer


YearlyGrowth = mvarYearlyGrowth
End Property

Public Property Let YearlyGrowth(ByVal newValue As Integer)


mvarYearlyGrowth = newValue
End Property

Private Sub Class_Initialize()


mvarHeight = 5
End Sub

El código para crear un árbol y establecer la propiedad se parecería al siguiente:

Dim growingTree As New Tree


growingTree.YearlyGrowth = 10

Visual Basic 2005


Visual Basic 2005 admite constructores mediante la palabra clave New. En este caso, no se requiere código adicional para
establecer la propiedad YearlyGrowth. Una llamada a la palabra clave New llama a uno de los métodos New sobrecargados
de la clase. Si la clase no contiene ningún método New, el compilador crea a continuación uno sin parámetros.
VB
Option Strict On

VB
Public Class Tree
Private yearlyGrowthValue As Integer = 5

Public Property YearlyGrowth() As Integer


Get
Return yearlyGrowthValue
End Get
Set(ByVal Value As Integer)
yearlyGrowthValue = Value
End Set
End Property

Public Sub New(ByVal newYearlyGrowth As Integer)


Me.YearlyGrowth = newYearlyGrowth
End Sub
End Class

El código para crear un árbol y establecer la propiedad se parecería al siguiente:


VB
Dim growingTree As New Tree(10)

En este ejemplo, no es posible crear Tree sin especificar el crecimiento anual. Para permitir eso, podría agregar otro método
New a la clase que no tiene ningún parámetro. A esto se llama sobrecargar el constructor.

Palabra clave New


Visual Basic 6.0
En Visual Basic 6.0, no se recomienda en general utilizar esta línea de código:

Dim growingTree As New Tree

Esto es así porque siempre que tenga acceso a la variable growingTree, el compilador comprueba si el valor es Nothing. En
ese caso, se crea una nueva instancia y se asigna a growingTree. Esto no sólo es ineficaz, sino que provoca errores de
programación.
Visual Basic 2005
En Visual Basic 2005, no se comprueba la instancia y no se crea ninguna nueva instancia. La única manera de crear una nueva
instancia es ejecutar una línea de código con las palabras clave New o As New En efecto, la línea de código anterior es ahora
la manera recomendada de controlar la creación de una nueva instancia.
Sugerencias de actualización
El Asistente para actualización actualiza el método Class_Initialize a lo siguiente:
VB
'UPGRADE_NOTE: Class_Initialize was upgraded to Class_Initialize_Renamed. Click for more: m
s-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup1061"'

Private mvarHeight As Short


Private Sub Class_Initialize_Renamed()
mvarHeight = 0
End Sub

Public Sub New()


MyBase.New()
Class_Initialize_Renamed()
End Sub

Quizá puede eliminar la llamada a Class_Initialize_Renamed y pasar directamente el código al constructor. Esto facilitaría la
lectura de su código ya que elimina una llamada innecesaria a un procedimiento. Si a cada llamada a New le sigue
normalmente el establecimiento de un grupo determinado de propiedades, tenga en cuenta la adición de un constructor que
establezca esas propiedades. Este código podría reemplazar al código de Visual Basic 6.0 en Visual Basic 2005:
VB
Public Sub New(ByVal newYearlyGrowth As Integer)
Me.YearlyGrowth = newYearlyGrowth
End Sub

Vea también
Tareas
Cómo: Utilizar la nueva palabra clave
Otros recursos
Crear y utilizar objetos
Conceptos de Visual Basic

Cambios en las propiedades de Visual Basic


Los campos y las propiedades funcionan juntos para proporcionar acceso a los datos de una clase. Los campos son las
variables de una definición de clase y contienen los datos del objeto. Las propiedades proporcionan métodos Get y Set que
permiten el acceso a los datos de la instancia de clase. Para obtener más información, vea
Propiedades y procedimientos de propiedad.
Sintaxis de la propiedad
Visual Basic 6.0
La construcción Property es una combinación de un método Get y un método Set. En Visual Basic 6.0, estos dos métodos son
independientes:

' Visual Basic 6.0


Private mvarYearlyGrowth As Integer
Public Property Get YearlyGrowth() As Integer
YearlyGrowth = mvarYearlyGrowth
End Property

Public Property Let YearlyGrowth(ByVal newValue As Integer)


mvarYearlyGrowth = newValue
End Property

Visual Basic 2005


Los cambios de propiedad de Visual Basic 6.0 a Visual Basic 2005 son principalmente sintácticos. La sintaxis de Visual Basic
2005 mueve los métodos Get y Set a un único bloque de código para la propiedad, en lugar de a dos métodos independientes.
Visual Basic 2005 no hace diferencias entre propiedades que son tipos de referencia y las que son tipos de valor, por lo que
sólo hay un método Set y el método Let ya no existe. El campo y la propiedad para YearlyGrowth tendrían este aspecto en
Visual Basic 2005:
VB
Private yearlyGrowthValue As Integer = 5

Public Property YearlyGrowth() As Integer


Get
Return yearlyGrowthValue
End Get
Set(ByVal Value As Integer)
yearlyGrowthValue = Value
End Set
End Property

En Visual Basic 6.0 y Visual Basic 2005, la clase contiene un campo, mvarYearlyGrowth o yearlyGrowthValue, que contiene los
datos.
Sugerencias de actualización
El Asistente para actualización actualizará una propiedad a lo siguiente:
VB
Private mvarYearlyGrowth As Short
Public Property YearlyGrowth() As Short
Get
YearlyGrowth = mvarYearlyGrowth
End Get
Set(ByVal Value As Short)
mvarYearlyGrowth = Value
End Set
End Property
Integer de Visual Basic 6.0 se actualiza a Short en Visual Basic 2005. Esto podría producir algunos problemas de
incompatibilidad de tipos cuando otro código intenta asignar Integer en Visual Basic 2005 a la propiedad. Es posible que
necesite revisar los tipos convertidos para campos y propiedades a fin de evitar otros conflictos de seguridad de tipos.
Vea también
Referencia
Instrucción Dim (Visual Basic)
Property (Instrucción)
Otros recursos
Cambios en las propiedades para usuarios de Visual Basic 6.0
Conceptos de Visual Basic

Cambios en los métodos para usuarios de Visual Basic 6.0


Un método es una declaración del procedimiento Sub o Function. Los métodos hacen que una clase realice determinadas
operaciones. Junto con las propiedades, exponen el comportamiento y los datos de una clase.
Declaraciones de métodos
Visual Basic 6.0
En Visual Basic 6.0, las definiciones de clase pueden contener los métodos Sub y Function. Esos métodos pueden ser Public,
Private o Friend. A continuación se describen dos ejemplos de esto:

Public Sub Draw(theForm As Form)


' Add code here to draw a tree on the form.
End Sub

Public Function GrowOneYear() As Integer


mvarHeight = mvarHeight + 10
GrowOneYear = mvarHeight
End Function

Visual Basic 2005


Visual Basic 2005 también admite los métodos Sub y Function, que son Public, Private y Friend. En todos los parámetros es
necesario utilizar ByRef o ByVal. Si no se agrega explícitamente, el Editor de código agrega ByVal.
El código actualizado desde Visual Basic 6.0 se actualizará a ByRef, dado que éste era el valor predeterminado en Visual Basic
6.0:
VB
Public Sub Draw(ByRef theForm As System.Windows.Forms.Form)
' Add code here to draw a tree on the form.
End Sub

Sobrecarga de métodos
Visual Basic 6.0
En Visual Basic 6.0, una clase sólo puede contener un método con un nombre concreto.
Visual Basic 2005
En Visual Basic 2005, se pueden sobrecargar métodos. Un método se sobrecarga cuando se definen varias versiones del
método en la clase. Las versiones sobrecargadas difieren en sus parámetros y tipos devueltos. Esto puede simplificar la interfaz
de un objeto al reducir su tamaño. En el ejemplo siguiente se muestran dos sobrecargas del método Draw. Para obtener más
información, vea Propiedades y métodos sobrecargados.
VB
Public Sub Draw(ByRef theForm As System.Windows.Forms.Form)
' Add code here to draw a tree on the form.
End Sub

VB
Public Sub Draw(ByVal surface As System.Drawing.Graphics)
' Add code here to draw a tree on the graphics surface.
End Sub

Return (Palabra clave)


Visual Basic 6.0
En Visual Basic 6.0, el nombre de función se utiliza como una variable para devolver el valor de la función.

Public Function GrowOneYear() As Integer


heightValue = heightValue + 10
GrowOneYear = heightValue
End Function

Visual Basic 2005


Visual Basic 2005 incluye la instrucción Return explícita para devolver los valores de función. La función GrowOneYear en
Visual Basic 2005 tiene el aspecto siguiente:
VB
Public Function GrowOneYear() As Integer
heightValue += 10
Return heightValue
End Function

Para obtener más información, vea Instrucción Return (Visual Basic).


Sugerencias de actualización
El Asistente para actualización genera este código a partir del método Draw:
VB
Public Sub Draw(ByRef theForm As System.Windows.Forms.Form)
' Add code here to draw a tree on the form.
End Sub

Deben tenerse en cuanta algunas técnicas a la hora de actualizar métodos:


Considere la posibilidad de utilizar métodos sobrecargados en aquellos métodos que tienen nombres y
comportamientos similares, pero que se diferencian por sus parámetros y tipos de valor devuelto.
Compruebe la conversión del ámbito del método (Public, Private, Friend) y el tipo de valor devuelto (Short, Integer,
etc.).
Considere la posibilidad de utilizar la instrucción Return en lugar del nombre de función para devolver el valor de la
función.
Vea también
Referencia
Instrucción Sub (Visual Basic)
Instrucción Function (Visual Basic)
Instrucción Return (Visual Basic)
Conceptos de Visual Basic

Herencia para usuarios de Visual Basic 6.0


La herencia permite crear nuevas clases a partir de clases existentes. La herencia puede simplificar el diseño de la aplicación
proporcionando una estructura de relaciones entre las distintas clases. También admite la reutilización de código porque sólo
se debe codificar el comportamiento de clases nuevas o distintas.
Herencia de interfaces
Visual Basic 6.0
Visual Basic 6.0 admite la herencia de interfaces, que se describe con más detalles en
Cambios en las interfaces para usuarios de Visual Basic 6.0.
Visual Basic 2005
Visual Basic 2005 admite la herencia de interfaces con Instrucción Interface (Visual Basic) e Implements (Instrucción). Para
obtener más información sobre interfaces, vea Interfaces en Visual Basic.
Herencia de implementación
Cuando se crea una nueva clase mediante la herencia de implementación, la nueva clase obtiene automáticamente todos los
miembros y la implementación de la clase base. La clase existente se llama la "clase base". La nueva clase es la "clase derivada".
Se pueden agregar miembros adicionales a la clase. Se puede cambiar el comportamiento de la clase base escribiendo código
en la nueva clase. Esta técnica se denomina reemplazo.
Puede crear clases heredándolas de las clases que ha creado, desde clases de referencias que agrega al proyecto o desde
objetos de .NET Framework. Muchas clases de .NET Framework están relacionadas por herencia. Por ejemplo, la clase TextBox
se hereda de la clase System.Windows.Forms.TextBoxBase.
Visual Basic 6.0
Visual Basic 6.0 no admite la herencia de implementación.
Visual Basic 2005
La herencia se declara en Visual Basic 2005 mediante la instrucción Inherits. En este ejemplo, la clase derivada Oak se hereda
de una clase base Tree.
VB
Public Class Oak
Inherits Tree
' Add code here to extend or
' modify the behavior of the Tree class.
End Class

MustInherit y NotInheritable
Visual Basic 6.0
En la herencia de interfaces de Visual Basic 6.0, cualquier clase puede actuar como una clase base de interfaz. No hay ninguna
sintaxis para evitar que cualquier clase actúe como una clase base de interfaz. Igualmente, no hay ninguna sintaxis para exigir
que una clase actúe sólo como una clase base de interfaz.
Visual Basic 2005
Junto con la herencia de implementación, Visual Basic 2005 define dos modificadores de clase, MustInherit y NotInheritable.
Estos modificadores permite al programador controlar las relaciones de herencia en una aplicación.
El modificador MustInherit en una declaración de clase indica una clase de la que no se pueden crear instancias:
VB
Public MustInherit Class BaseClass
End Class

Esto significa que BaseClass no puede aparecer después de la palabra clave New. Sólo se pueden crear instancias de las clases
que se heredan de BaseClass y que tampoco tienen el modificador MustInherit. En la literatura orientada a objetos y en otros
lenguajes orientados a objetos, una clase MustInherit se denomina una clase abstracta. Una clase que no es una clase
MustInherit, es decir de la que se pueden crear instancias, se denomina una clase concreta.
Un concepto relacionado es clase sellada, una clase que no puede actuar como una clase base. La palabra clave
NotInheritable en una definición de clase indica este estado:
VB
Public NotInheritable Class DerivedClass
End Class

Una clase NotInheritable marca el límite de una jerarquía de herencia.


Para obtener más información, vea Herencia en Visual Basic.
Sugerencias de actualización
Las clases que actúan como interfaces en Visual Basic 6.0 se actualizan a interfaces en Visual Basic 2005. Tenga en cuenta este
ejemplo de una clase base y una clase derivada de Visual Basic 6.0:

' Contents of class BaseClass


Public Sub BaseMethod()
End Sub

' Contents of class DerivedClass


Implements BaseClass
Private Sub BaseClass_BaseMethod()
End Sub

El Asistente para actualización genera este código actualizado:


VB
Option Strict Off
Option Explicit On
Interface _BaseClass
Sub BaseMethod()
End Interface

Friend Class BaseClass


Implements _BaseClass
Public Sub BaseMethod() Implements _BaseClass.BaseMethod
End Sub
End Class
Friend Class DerivedClass
Implements _BaseClass
Private Sub BaseClass_BaseMethod() Implements _BaseClass.BaseMethod
End Sub
End Class

Utilizando la herencia en lugar de las interfaces, el código actualizado se puede modificar a:


VB
Friend Class BaseClass
Public Sub BaseMethod()
' Add code here to define BaseMethod.
End Sub
End Class

Friend Class DerivedClass


Inherits BaseClass
End Class
Esto elimina un nivel de direccionamiento indirecto, _BaseClass. También elimina una definición del método,
BaseClass_BaseMethod porque el método está heredado de la clase base y no necesita ser codificado de nuevo. Si el
programador desea un comportamiento diferente para la clase derivada, se puede reemplazar BaseMethod de la forma
siguiente:
VB
Friend Class BaseClass
Public Overridable Sub BaseMethod()
' Add code here to define BaseMethod.
End Sub
End Class
Friend Class DerivedClass
Inherits BaseClass
Public Overrides Sub BaseMethod()
' Add code here to define behavior for DerivedClass.
End Sub
End Class

Algunas técnicas que se deben tener en cuenta en las interfaces actualizadas incluyen:
Reemplazar instrucciones Interface por instrucciones Inherits.
Implementar la clase base como una interfaz, en lugar de como una clase que implementa una interfaz. Para obtener más
información, vea Cambios en las interfaces para usuarios de Visual Basic 6.0.
Implementar las clases base como clases MustInherit.
Implementar las clases derivadas como NotInheritable.

Vea también
Otros recursos
Herencia en Visual Basic
Interfaces en Visual Basic
Conceptos de Visual Basic

Cambios en eventos y excepciones para usuarios de Visual Basic


6.0
Los eventos y las excepciones son miembros de clase que se utilizan para señalar en el código de cliente los cambios que se
produce en la clase. Normalmente un evento señala un cambio esperado, y el código de cliente puede decidir si responde o no.
Las excepciones señalan un estado de error, y el código de cliente las omite bajo su propia responsabilidad. Para obtener más
información, vea Control estructurado de excepciones en Visual Basic.
Eventos
Visual Basic 6.0
La sintaxis para declarar un evento no ha cambiado desde Visual Basic 6.0:

Public Event StateChanged()

Visual Basic 2005


La biblioteca de clases de .NET Framework introduce una nueva convención de codificación para los eventos. Los eventos
normalmente tienen dos parámetros, un parámetro Object denominado sender y un parámetro EventArgs denominado e.
Cuando se produce el evento, el objeto que desencadena el evento se transfiere a sí mismo una referencia como parámetro
sender. El parámetro EventArgs puede ser un objeto EventArgs o una instancia de una clase derivada de EventArgs. La clase
derivada lleva información específica del evento que puede resultar útil para el código de cliente. A continuación se muestra un
ejemplo:
VB
Public Event StateChanged(ByVal sender As Object, ByVal e As EventArgs)

Excepciones
Visual Basic 6.0
En Visual Basic 6.0 no se admiten excepciones, pero sí se producen errores. Los errores se detectan utilizando las instrucciones
On Error GoTo junto con las instrucciones etiquetadas.
Visual Basic 2005
Visual Basic 2005 admite que se produzcan errores. Para obtener más información, vea
Información general sobre el control no estructurado de excepciones.
Las excepciones son nuevas en Visual Basic 2005. La clase Exception actúa como clase base para todas las excepciones. (Para
obtener más información, vea Clase Exception y propiedades). En lugar de crear números de error, como en Visual Basic 6.0, el
programador crea clases derivadas. De este modo, se simplifica la legibilidad del código. En lugar de instrucciones GoTo e
instrucciones con etiquetas, se utiliza la estructura de bloque Instrucción Try...Catch...Finally (Visual Basic) para responder a las
excepciones. A continuación se muestra un ejemplo.
VB
Dim big As Integer = Integer.MaxValue
Dim bigger As Integer = Integer.MaxValue
Try
Dim biggest As Integer = big + bigger
Catch ex As Exception
MsgBox("Addition did not succeed.")
End Try

Para obtener más información, vea Información general sobre el control estructurado de excepciones de Visual Basic.
Sugerencias de actualización
El código que produce errores en Visual Basic 6.0 se convierte en código que produce errores en Visual Basic 2005. A
continuación se incluye un ejemplo de un código convertido que produce un error:
VB
Private mvarAge As Short
Public Property Age() As Short
Get
Age = mvarAge
End Get
Set(ByVal Value As Short)
If Value >= 0 Then
mvarAge = Value
Else
Err.Raise(vbObjectError + 2, Me, _
"Age must be greater than or equal to zero.")
End If
End Set
End Property

Para utilizar en su lugar una excepción, sólo es necesario sustituir la llamada Err.Raise por Instrucción Throw (Visual Basic).
Otra ventaja es que se puede eliminar el número de error.
Al actualizar eventos y excepciones a Visual Basic 2005, tenga en cuenta lo siguiente:
Las instrucciones On Error GoTo se sustituyen por instrucciones Try.
Err.Raise se sustituye por Throw
Se utilizan convenciones de parámetro para los eventos (Public Event StateChanged(ByVal sender As Object, ByVal
e As EventArgs)).

Las excepciones personalizadas y las clases EventArgs se crean mediante herencia.

Vea también
Referencia
Instrucción Throw (Visual Basic)
EventArgs
Conceptos
Información general sobre el control estructurado de excepciones de Visual Basic
Otros recursos
Control de excepciones y errores en Visual Basic
Conceptos de Visual Basic

Cambios en las interfaces para usuarios de Visual Basic 6.0


Una interfaz, tal como se define en Visual Basic, es un tipo que define una lista de miembros públicos. No se pueden crear
instancias para un tipo Interface ni implementarlo.
Interfaz y clases
La interfaz de una clase es su lista de miembros públicos. La instrucción Interface, en Visual Basic 2005, permite declarar un
tipo que define una lista de miembros públicos. Cuando una clase incluye la instrucción Implements, agrega los miembros de
la interfaz implementando cada miembro de la interfaz. Esto difiere de la herencia de implementación mediante la palabra
clave Inherits. En la herencia de implementación, los miembros se heredan de la clase base y no tienen que ser
implementados en la clase derivada.
En .NET Framework, las clases utilizan a menudo interfaces para proporcionar compatibilidad a algún servicio de la aplicación.
Por ejemplo, .NET Framework prevé que si una clase implementa la interfaz System.IComparable, el tiempo de ejecución
clasificará las instancias de la clase si están contenidas en un objeto ArrayList.
Para obtener más información sobre el uso de interfaces en Visual Basic 2005, vea Interfaces en Visual Basic.
Visual Basic 6.0
En Visual Basic 6.0, cualquier clase puede actuar como una interfaz. Cualquier otra clase puede implementar la interfaz de otra
clase, mediante Implements (Instrucción), tal como se muestra abajo.

' Contents of class BaseClass


Public Sub BaseMethod()
End Sub

' Contents of class DerivedClass


Implements BaseClass
Private Sub BaseClass_BaseMethod()
End Sub

Aunque los miembros individuales de la clase no tienen por qué contener código, es posible que lo hagan.
Visual Basic 2005
Visual Basic 2005 marca una clara diferencia entre las clases y las interfaces. Una se declara en una instrucción Class; la otra se
declara en una instrucción Interface. Una clase no puede actuar como una interfaz. Para actuar como una interfaz, se debe
declarar el tipo utilizando Interface. No se implementan los miembros de una interfaz. De hecho, la sintaxis no permite líneas
de código como End Sub en una definición de interfaz. Los miembros de una interfaz se implementan en la clase que declara
una interfaz mediante la instrucción Implements:
VB
Interface Printable
Sub Print()
Property Mode() As Integer
End Interface
Public Class Tree
Implements Printable

Private modeValue As Integer


Public Property Mode() As Integer Implements Printable.Mode
Get
Return modeValue
End Get
Set(ByVal Value As Integer)
modeValue = Value
End Set
End Property
Public Sub Print() Implements Printable.Print
' Add code to print a tree.
End Sub
End Class

Sugerencias de actualización
La única opción para implementar la herencia en Visual Basic 6.0 es utilizar la instrucción Implements y una clase base. En
versiones más recientes de Visual Basic, hay dos tipos de herencia: la herencia de implementación y la herencia de interfaces. El
tipo que debe seleccionar depende de su aplicación. Entre las cuestiones que se deben tener en cuenta se incluyen:
La herencia de implementación, mediante Inherits (Instrucción), permite crear nuevas clases sin tener que escribir más
código. Sólo agrega código cuando desea modificar el comportamiento de la clase base. Con la herencia de interfaces,
tiene que agregar código para cada miembro de la clase base.
Se pueden utilizar interfaces para heredar de más de una clase. Visual Basic 2005 sólo admite la herencia de una clase
pero una clase puede implementar varias interfaces.
.NET Framework define varias interfaces que simplifican las tareas de programación habituales. Entre los ejemplos se
incluyen IComparable, ISerializable y IFormattable.
Para muchas interfaces de .NET Framework, .NET Framework también proporciona una clase que implementa la interfaz.
Un ejemplo lo constituye la clase Component que implementa la interfaz IComponent. Al heredar de Component
mediante Inherits (Instrucción), una clase logra todas las características de la interfaz IComponent sin tener que escribir
ningún código.
Vea también
Referencia
Instrucción Interface (Visual Basic)
Instrucción Class (Visual Basic)
Inherits (Instrucción)
Conceptos de Visual Basic

Cambios orientados a objetos en los módulos de Visual Basic


Los miembros compartidos son miembros de clase, como propiedades y procedimientos, que están disponibles en todas las
instancias de una clase, pero que no están asociados con ninguna instancia concreta. Para obtener más información sobre los
miembros compartidos, vea Miembros compartidos en Visual Basic.
Datos de instancia y datos compartidos
Los datos de instancia es un conjunto de datos que se crea cuando se ejecuta la palabra clave New. Por contraste, los datos
compartidos de una clase se crean independientemente de cualquier ejecución de la palabra clave New.
Visual Basic 6.0
Visual Basic 6.0 no admite datos compartidos en definiciones de clase. Para compartir datos entre las instancias de clase, se
utiliza una variable global en un módulo.
Visual Basic 2005
Los datos compartidos se declaran agregando el modificador Shared (Visual Basic) a la instrucción de declaración de la
variable, tal y como se muestra a continuación.
VB
Private Shared totalInstances As Integer

Métodos compartidos
Visual Basic 6.0
Visual Basic 6.0 no admite miembros de clase compartidos. Puede obtenerse una funcionalidad similar a partir de los módulos.
El tiempo de ejecución sólo crea una instancia de los datos en un módulo. Los datos y métodos de un módulo tienen un
ámbito que abarca todo el proyecto. A continuación se incluye un ejemplo de una biblioteca implementada en un módulo:

Public Sub GetTitle(wordXml As String)


' Add code here to find title in Xml string.
End Sub

Public Sub ReplaceTitle(wordXml As String, newTitle As String)


' Add code here to replace title.
End Sub

Visual Basic 2005


Para aplicar un enfoque más orientado a objetos en los módulos, pueden utilizarse miembros de clase compartidos si los
miembros están relacionados entre sí como una biblioteca o si los miembros están relacionados con una clase existente. El
diseño determinará si todos los miembros son compartidos o si una clase contiene tanto miembros de instancias como
miembros compartidos. Si la clase sólo tiene miembros compartidos, al agregar únicamente un constructor privado, se evitará
que el código de cliente cree instancias de la clase. En el ejemplo siguiente se muestra una clase de la que el código de cliente
no puede crear instancias y se muestra el código de cliente que llama a uno de los miembros.
VB
Public Class WordLibrary
Public Shared Sub GetTitle(ByVal wordXml As String)
' Add code here to find title in Xml string.
End Sub

Public Shared Sub ReplaceTitle(ByVal wordXml As String, _


ByVal newTitle As String)
' Add code here to replace title.
End Sub
Private Sub New()
' This prevents instantiation of the class in the client.
End Sub
End Class

VB
' Code that calls the library method.
Sub ChangeTheTitle()
WordLibrary.ReplaceTitle("Old Title", "New Title")
End Sub

Algunas ventajas de utilizar una clase frente un módulo en esta biblioteca son:
La biblioteca tiene un nombre, WordLibrary, que se declara explícitamente en el código.
Los métodos se agrupan en una clase, que indica la relación que les une.
Al utilizar un constructor privado, queda claro que esta clase proporciona un conjunto de métodos útiles.
El código de cliente utiliza el nombre de la biblioteca, lo que clarifica la organización del proyecto al lector.
En .NET Framework, los métodos compartidos se utilizan habitualmente para proporcionar funciones relacionadas con un
clase, pero no se requiere una instancia de la clase. Un ejemplo es el método Parse, que es compatible con muchos de los tipos
de datos de .NET Framework. Integer (Tipo de datos, Visual Basic) admite un método Parse que toma una cadena como
parámetro. El método Parse devuelve el entero representado por la cadena. No tiene sentido que el método Parse sea un
método miembro. No hay ningún valor entero que manipular, sólo una cadena.
Tener acceso a miembros compartidos
Visual Basic 6.0
Visual Basic 6.0 no admite miembros de clase compartidos.
Visual Basic 2005
Se puede obtener acceso a los miembros compartidos mediante el nombre de la clase o el nombre de la instancia, como se
muestra a continuación.
VB
WordLibrary.ReplaceTitle("Old Title", "New Title")

Los métodos compartidos no pueden tener acceso a ningún dato de la instancia a menos que se transfiera al método
compartido una referencia a una instancia de la clase.
Sugerencias de actualización
El módulo WordLibrary de Visual Basic 6.0 se actualiza al código siguiente:
VB
Module WordLibrary
Public Sub GetTitle(ByRef wordXml As String)
' Add code here to find title in Xml string.
End Sub

Public Sub ReplaceTitle(ByRef wordXml As String, _


ByRef newTitle As String)
' Add code here to replace title.
End Sub
End Module

Al actualizar el código del módulo de Visual Basic 6.0 a Visual Basic 2005, tenga en cuenta lo siguiente:
Los métodos y datos del módulo se organizan en clases como métodos y datos compartidos
Los métodos del módulo se introducen en las clases existentes como métodos compartidos, cuando el método está
relacionado con la clase.

Vea también
Conceptos
Miembros compartidos en Visual Basic
Conceptos de Visual Basic

Cambios en la compatibilidad binaria para usuarios de Visual


Basic 6.0
Visual Basic 2005 actualiza el mecanismo para preservar la compatibilidad con versiones anteriores de un componente.
Compatibilidad binaria
Visual Basic 6.0
En Visual Basic 6.0, la opción Compatibilidad binaria permite conservar automáticamente los identificadores de clase e
interfaz de una versión anterior de un componente al compilar una versión nueva. La nueva versión contendrá los nuevos
identificadores y los identificadores antiguos, y las aplicaciones cliente seguirán utilizando la interfaz antigua del componente
sin tener que actualizar.
Visual Basic 2005
En Visual Basic 2005, la compatibilidad binaria se consigue mediante atributos. Esto ofrece control directo sobre la información
insertada en el componente compilado, como los identificadores de clase y de interfaz, los desplazamientos de tabla virtual y
los atributos COM apropiados. Como se pueden seleccionar explícitamente atributos para conservarlos, no se admite la opción
Compatibilidad binaria de Visual Basic 6.0.
Vea también
Referencia
ComClassAttribute (Clase)
Conceptos
Información general sobre los atributos de Visual Basic
Atributos utilizados en Visual Basic
Atributos globales de Visual Basic
Resumen de cambios de los elementos de programación ofrecidos
Conceptos de Visual Basic

Cómo: Convertir una colección personalizada en una colección


con tipo de Visual Basic
Una colección personalizada de Visual Basic 6.0 limita el contenido de una colección a una clase determinada, lo que también
se conoce como colección con establecimiento de tipos. Visual Basic 2005 proporciona varias opciones para crear clases con
establecimiento de tipos a partir de colecciones personalizadas de Visual Basic 6.0. Este tema contiene tres procedimientos, y
cada uno de ellos muestra una opción diferente.
En este tema se presupone que la colección personalizada de Visual Basic 6.0 se ha creado utilizando la Utilidad Generador
de clases. Este tipo de colección tiene los miembros siguientes:
Add Agrega una nueva instancia de la clase personalizada a la colección.
Item Devuelve una instancia de la colección en función de un índice de la colección.
Count Devuelve el número de instancias de la colección.
Remove Elimina una instancia de la colección en función de un índice de la colección.
Enumeration Admite la enumeración si se utiliza la sintaxis For Each.

Para utilizar el Asistente para actualización con el fin de crear una colección
Abra el proyecto de Visual Basic 6.0 en Visual Basic 2005. A continuación se muestra el código actualizado para una clase
de la colección denominada Forest que contiene instancias de la clase Tree. La ventaja de este método es que no es
necesario efectuar cambios en el código.
VB
' For this example, the Tree class has no members.
Option Strict Off
Option Explicit On
Friend Class Tree
End Class

Friend Class Forest


Implements System.Collections.IEnumerable
'local variable to hold collection
Private mCol As Collection

Public Function Add(Optional ByRef sKey As String = "") As Tree


'create a new object
Dim objNewMember As Tree
objNewMember = New Tree
'set the properties passed into the method
If Len(sKey) = 0 Then
mCol.Add(objNewMember)
Else
mCol.Add(objNewMember, sKey)
End If
'return the object created
Add = objNewMember
'UPGRADE_NOTE: Object objNewMember may not be destroyed until it is garbage collec
ted. Click for more: 'ms-help://MS.MSDNQTR.80.en/commoner/redir/redirect.htm?keyword="
vbup1029"'

objNewMember = Nothing
End Function

Default Public ReadOnly Property Item(ByVal vntIndexKey _


As Object) As Tree
Get
'used when referencing an element in the collection
'vntIndexKey contains either the Index or Key to the collection,
'this is why it is declared as a Variant
'Syntax: Set foo = x.Item(xyz) or Set foo = x.Item(5)
Item = mCol.Item(vntIndexKey)
End Get
End Property

Public ReadOnly Property Count() As Integer


Get
'used when retrieving the number of elements in the
'collection. Syntax: Debug.Print x.Count
Count = mCol.Count()
End Get
End Property

'UPGRADE_NOTE: NewEnum property was commented out. Click for more: 'ms-help://MS.MSD
NQTR.80.en/commoner/redir/redirect.htm?keyword="vbup1054"'

'Public ReadOnly Property NewEnum() As stdole.IUnknown


'Get
'this property allows you to enumerate
'this collection with the For...Each syntax
'NewEnum = mCol._NewEnum
'End Get
'End Property

Public Function GetEnumerator() As System.Collections.IEnumerator _


Implements System.Collections.IEnumerable.GetEnumerator
'UPGRADE_TODO: Uncomment and change the following line to return the collection en
umerator. Click for more: 'ms-help://MS.MSDNQTR.80.en/commoner/redir/redirect.htm?keyw
ord="vbup1055"'

'GetEnumerator = mCol.GetEnumerator
End Function

Public Sub Remove(ByRef vntIndexKey As Object)


'used when removing an element from the collection
'vntIndexKey contains either the Index or Key, which is why
'it is declared as a Variant
'Syntax: x.Remove(xyz)
mCol.Remove(vntIndexKey)
End Sub

'UPGRADE_NOTE: Class_Initialize was upgraded to Class_Initialize_Renamed. Click for


more: 'ms-help://MS.MSDNQTR.80.en/commoner/redir/redirect.htm?keyword="vbup1061"'

Private Sub Class_Initialize_Renamed()


'creates the collection when this class is created
mCol = New Collection
End Sub
Public Sub New()
MyBase.New()
Class_Initialize_Renamed()
End Sub

'UPGRADE_NOTE: Class_Terminate was upgraded to Class_Terminate_Renamed. Click for mo


re: 'ms-help://MS.MSDNQTR.80.en/commoner/redir/redirect.htm?keyword="vbup1061"'

Private Sub Class_Terminate_Renamed()


'destroys collection when this class is terminated
'UPGRADE_NOTE: Object mCol may not be destroyed until it is garbage collected. Cli
ck for more: 'ms-help://MS.MSDNQTR.80.en/commoner/redir/redirect.htm?keyword="vbup1029
"'

mCol = Nothing
End Sub
Protected Overrides Sub Finalize()
Class_Terminate_Renamed()
MyBase.Finalize()
End Sub
End Class

.NET Framework y Visual Basic 2005 proporcionan varias colecciones genéricas. La ventaja a utilizar las clases genéricas es que
se necesita muy poco código para implementar la clase.
Para crear una colección mediante colecciones genéricas
1. Cree la definición de clase. A continuación se incluye un ejemplo de una clase Tree:
VB
Public Class Tree
Public Species As String
End Class

2. Cree una clase de lista genérica en .NET Framework. En esencia, esta declaración reemplaza toda la clase Forest en el
procedimiento anterior, que se ha titulado "Para utilizar el Asistente para actualización con el fin de crear una colección".
VB
Dim forest As New System.Collections.Generic.List(Of Tree)

3. Escriba código para tener acceso al objeto de lista. El código siguiente agrega cinco instancias de la clase Tree a la
colección y, a continuación, las imprime.
VB
For count As Integer = 1 To 5
Dim sapling As New Tree
sapling.Species = "oak"
Forest.Add(sapling)
Next

For Each sapling As Tree In Forest


MsgBox(sapling.Species)
Next

.NET Framework incluye la clase CollectionBase. Las colecciones con establecimiento de tipos se crean al derivarlas de
CollectionBase. Este método utiliza menos código que el método Asistente para actualización, pero más que la solución de
clases genéricas. También es más flexible que la solución de clases genéricas, dado que el programador puede agregar
miembros adicionales a la clase de la colección.
Para crear una colección a partir de la clase CollectionBase
1. Cree la definición de clase. A continuación se incluye un ejemplo de una clase Tree:
VB
Public Class Tree
Public Species As String
End Class

2. Cree una clase que se derive de la clase CollectionBase. Agregue como mínimo un método Add y una propiedad Item.
Éstos elementos hacen que la clase de la colección tenga establecimiento inflexible de tipos.
VB
Class TreeCollection
Inherits System.Collections.CollectionBase

Public Sub Add(ByVal value As Tree)


Me.List.Add(value)
End Sub

Default Public Property Item(ByVal index As Integer) As Tree


Get
Return CType(Me.List(index), Tree)
End Get
Set(ByVal value As Tree)
If index <= Me.Count - 1 Then
Me.List(index) = value
Else
Throw New IndexOutOfRangeException()
End If
End Set
End Property
End Class

3. Escriba código para tener acceso al objeto de lista. El código siguiente agrega cinco instancias de la clase Tree a la
colección y, a continuación, las imprime.
VB
Dim forest As New TreeCollection

VB
For count As Integer = 1 To 5
Dim sapling As New Tree
sapling.Species = "oak"
Forest.Add(sapling)
Next

For Each sapling As Tree In Forest


MsgBox(sapling.Species)
Next

Vea también
Referencia
List
CollectionBase
Ienumerable
Conceptos de Visual Basic

Cómo: Convertir un tipo definido por el usuario en una


estructura de Visual Basic
La instrucción Type de Visual Basic 6.0 se actualiza a la instrucción Structure de Visual Basic 2005. En este tema se explican
también otras dos opciones para actualizar tipos: la conversión a una clase y la conversión a una interfaz.
El tipo de Visual Basic 6.0 siguiente se explica en los procedimientos que se incluyen a continuación:

Type Customer
Dim FirstName As String
Dim LastName As String
Dim Id As Long
End Type

Private Function FormatFullName(aCustomer As Customer) As String


FormatFullName = aCustomer.FirstName & " " & aCustomer.LastName
End Function

El Asistente para actualización actualiza automáticamente un tipo de Visual Basic 6.0 a una estructura de Visual Basic 2005.
Structure es un tipo que admite miembros, como métodos y propiedades.
Para actualizar un tipo a una estructura
1. Ejecute el Asistente para actualización.
Nota
El Asistente para actualización es una herramienta utilizada para actualizar una aplicación de Visual Basic 6.0 a Visu
al Basic 2005. Se inicia automáticamente cuando se abre un proyecto de Visual Basic 6.0 en Visual Basic 2005. Para obt
ener más información, vea Cómo: Actualizar un proyecto con el Asistente para actualización de Visual Basic.

2. Si desea aprovechar otras características del tipo Structure, busque métodos que se adecúen mejor a la estructura. En
este ejemplo, el método FormatFullName podría convertirse en un método FormatFullName en la estructura:
VB
Structure Customer
Dim FirstName As String
Dim LastName As String
Dim Id As Integer

Public Function FormatFullName() As String


Return FirstName & " " & LastName
End Function
End Structure

El Asistente para actualización actualiza automáticamente un tipo de Visual Basic 6.0 a una estructura de Visual Basic 2005.
El tipo Class admite los mismos miembros que Structure, pero es un tipo de referencia. Una clase puede actuar como una
clase base, mientras que una estructura no puede.
Para actualizar a una clase
1. Ejecute el Asistente para actualización.
2. Reemplace Structure por Class.
3. Si desea aprovechar otras características del tipo Class, busque métodos que se adecúen mejor a la estructura. El código
siguiente muestra la incorporación de FormatFullName a la clase, y la propiedad Id .
VB
Class Customer
Dim FirstName As String
Dim LastName As String
Private idValue As Integer

Public Property Id() As Integer


Get
Return idValue
End Get
Set(ByVal Value As Integer)
idValue = Value
End Set
End Property

Public Function FormatFullName() As String


Return FirstName & " " & LastName
End Function
End Class

Una tercera opción es convertir la estructura en una interfaz.


Para actualizar a una interfaz
1. Ejecute el Asistente para actualización.
2. Reemplace Structure por Interface.
3. Reemplace las variables con declaraciones de propiedad. No incluya la implementación.
4. Agregue métodos, pero elimine la implementación.
5. El código podría tener el siguiente aspecto:
VB
Interface Customer
Property FirstName() As String
Property LastName() As String
Property Id() As String

Function FormatFullName() As String


End Interface

6. Otra clase puede implementar a continuación la interfaz. La definición se muestra a continuación.


VB
Class NewCustomer
Implements Customer

Public Property FirstName() As String Implements Customer.FirstName


Get
' Add code here.
End Get
Set(ByVal Value As String)
' Add code here.
End Set
End Property
Public Property Id() As String Implements Customer.Id
Get
' Add code here.
End Get
Set(ByVal Value As String)
' Add code here.
End Set
End Property

Public Property LastName() As String Implements Customer.LastName


Get
' Add code here.
End Get
Set(ByVal Value As String)
' Add code here.
End Set
End Property

Public Function FormatFullName() As String _


Implements Customer.FormatFullName
' Add code here.
End Function
End Class

Vea también
Tareas
Cómo: Actualizar un proyecto con el Asistente para actualización de Visual Basic
Referencia
Structure (Instrucción)
Instrucción Class (Visual Basic)
Instrucción Interface (Visual Basic)
Conceptos de Visual Basic

Cómo: Convertir el código de Implements en una nueva forma


de herencia
Visual Basic 6.0 utiliza la instrucción Implements en las operaciones de herencia de interfaces. Las últimas versiones de Visual
Basic ofrecen dos tipos de herencia: mediante Implements (Instrucción) y mediante Inherits (Instrucción). En este tema se
muestra cómo se convierte el código utilizando estas dos opciones.
En esta página, se tiene en cuenta el código de Visual Basic 6.0 que se incluye a continuación:

' Account class.


Private mvarBalance As Currency
Private mvarOwner As String

Public Property Let Owner(ByVal vData As String)


mvarOwner = vData
End Property

Public Property Get Owner() As String


Owner = mvarOwner
End Property

Public Function Deposit(ByVal amount As Currency) As Currency


End Function

' Savings class.


Private mvarBalance As Currency
Private mvarOwner As String 'local copy

Public Property Let Owner(ByVal vData As String)


mvarOwner = vData
End Property

Public Property Get Owner() As String


Owner = mvarOwner
End Property

Public Function Deposit(ByVal amount As Currency) As Currency


End Function

Para realizar la conversión mediante una interfaz común


1. Ejecute el Asistente para actualización.
Nota
El Asistente para actualización es una herramienta utilizada para actualizar una aplicación de Visual Basic 6.0 a Visu
al Basic 2005. Se inicia automáticamente cuando se abre un proyecto de Visual Basic 6.0 en Visual Basic 2005. Para obt
ener más información, vea Cómo: Actualizar un proyecto con el Asistente para actualización de Visual Basic.

El asistente convertirá la clase Account en una interfaz (_Account) y creará dos clases que implementan la interfaz
(Account y Savings.)
VB
Interface _Account
Property Owner() As String
Function Deposit(ByVal amount As Decimal) As Decimal
End Interface
Friend Class Account
Implements _Account
Private mvarBalance As Decimal
Private mvarOwner As String

Public Property Owner() As String Implements _Account.Owner


Get
Owner = mvarOwner
End Get
Set(ByVal Value As String)
mvarOwner = Value
End Set
End Property

Public Function Deposit(ByVal amount As Decimal) _


As Decimal Implements _Account.Deposit
End Function
End Class

Friend Class Savings


Implements _Account

Private Function Account_Deposit(ByVal amount As Decimal) _


As Decimal Implements _Account.Deposit
End Function

Private Property Account_Owner() As String _


Implements _Account.Owner
Get
End Get
Set(ByVal Value As String)
End Set
End Property

Public Function AddInterest() As Object


End Function
End Class

2. El código para crear y utilizar una instancia de la cuenta Savings podría tener el aspecto siguiente:
VB
Dim savings As _Account
savings = New Savings
savings.Owner = "Jeff Pike"

Si desea que Account sea la clase base, puede modificar el resultado del asistente.
Para realizar la conversión con Interface e Implements
1. Ejecute el Asistente para actualización.
2. Elimine la clase Account.
3. Cambie el nombre de la clase _Account a Account.
4. En la clase Savings, reemplace _Account por Account.
VB
Friend Class Savings
Implements Account
Private Function Account_Deposit(ByVal amount As Decimal) _
As Decimal Implements Account.Deposit
End Function

Private Property Account_Owner() As String Implements Account.Owner


Get
End Get
Set(ByVal Value As String)
End Set
End Property

Public Function AddInterest() As Object


End Function
End Class

5. El código para crear y utilizar una instancia de la cuenta Savings podría tener el aspecto siguiente:
VB
Dim savings As Account
savings = New Savings
savings.Owner = "Jeff Pike"

Si desea que la clase Account sea una clase base, puede modificar el resultado del asistente.
Para realizar la conversión con Class e Inherits
1. Ejecute el Asistente para actualización.
2. Elimine la interfaz _Account.
3. En la clase Account, quite las referencias a _Account en las instrucciones Implements.
VB
Friend Class Account
Private mvarBalance As Decimal
Private mvarOwner As String

Public Property Owner() As String


Get
Owner = mvarOwner
End Get
Set(ByVal Value As String)
mvarOwner = Value
End Set
End Property

Public Function Deposit(ByVal amount As Decimal) As Decimal


End Function
End Class

4. En la clase Savings, reemplace Implements _Account por Inherits Account.

5. En la clase Savings, quite los miembros Owner y Deposit.


VB
Friend Class Savings
Inherits Account

Public Function AddInterest() As Object


End Function
End Class

6. El código para crear y utilizar una instancia de la cuenta Savings podría tener el aspecto siguiente:
VB
Dim savings As Account
savings = New Savings
savings.Owner = "Jeff Pike"

Vea también
Tareas
Cómo: Actualizar un proyecto con el Asistente para actualización de Visual Basic
Referencia
Instrucción Class (Visual Basic)
Inherits (Instrucción)
Instrucción Interface (Visual Basic)
Implements (Instrucción)
Otros recursos
Herencia en Visual Basic
Interfaces en Visual Basic
Conceptos de Visual Basic

Programación Web para usuarios de Visual Basic 6.0


Visual Basic 6.0 admite la programación Web directamente; en Visual Basic 2005, la programación Web se realiza con Visual
Web Developer y el lenguaje Visual Basic.
Diferencias conceptuales
Visual Basic 6.0 incluye varias características que admiten la programación Web: aplicaciones IIS (Servicios de Internet
Information Server, clases Web), aplicaciones DHTML, documentos ActiveX y controles ActiveX que se pueden descargar en
páginas Web.
En Visual Basic 2005, ya no se admite la programación Web directamente. En su lugar, puede utilizar Visual Web Developer y
el lenguaje Visual Basic para crear sitios Web de ASP.NET, servicios Web de ASP.NET y mucho más. Puede crear controles Web
en Visual Basic 2005 que se pueden utilizar en Visual Web Developer, asimismo, puede utilizar servicios Web de ASP.NET
desde una aplicación o componente de Visual Basic 2005.
ASP y ASP.NET
En Visual Basic 6.0, las aplicaciones IIS (Servicios de Internet Information Server) utilizan el modelo de páginas Active Server
(ASP) para crear aplicaciones que se ejecutan en IIS. La tecnología ASP.NET permite crear sitios Web con páginas de
formularios Web Forms; las aplicaciones de sitio Web de ASP.NET también se alojan en IIS.
Aplicaciones DHTML
Las aplicaciones DHTML de Visual Basic 6.0 utilizan el modelo de objetos de HTML dinámico y el código de Visual Basic para
crear aplicaciones que pueden responder a las acciones realizadas por el usuario en un explorador. Los formularios Web
Forms de Visual Web Developer se expanden sobre el modelo DHTML, proporcionando capacidades de interfaz de usuario
dinámicas más eficaces y validación en el cliente.
Documentos y controles ActiveX
Los documentos ActiveX de Visual Basic 6.0 no se admiten en Visual Basic 2005. Aún se puede interoperar con documentos
ActiveX desde las aplicaciones de sitios Web de Visual Web Developer, pero el desarrollo se debe mantener en Visual Basic 6.0.
Visual Basic 2005 también permite crear controles ActiveX que se descargan en páginas Web o utilizar controles ActiveX
existentes en las aplicaciones de Visual Basic 2005.
Vea también
Conceptos
Trabajar con Visual Basic 6.0 y la versión actual de Visual Basic
Otros recursos
Visual Web Developer
Ayuda para usuarios de Visual Basic 6.0
Espacios de nombres para el Web en Visual Studio
Programar el Web con servicios Web XML
Conceptos de Visual Basic

Clases Web para usuarios de Visual Basic 6.0


En su mayor parte, los conceptos y técnicas para programar un sitio Web de ASP.NET en Visual Basic 2005 son muy distintos
de los que se utilizan para crear clases Web en Visual Basic 6.0.
Diferencias conceptuales
En Visual Basic 6.0, los proyectos WebClass (también conocidos como proyectos de aplicación IIS) se usan para crear
aplicaciones Web basadas en la tecnología de página ASP.
En Visual Basic 2005, los proyectos de sitio Web de ASP.NET se usan para crear aplicaciones Web basadas en la tecnología más
moderna de ASP.NET. Para obtener más información, vea
Visita guiada sobre la creación de sitios Web en Visual Web Developer.
Administración de estados
En Visual Basic 6.0, los proyectos WebClass tienen una propiedad StateManagement que se utiliza para mantener activa una
instancia de WebClass entre solicitudes. Esto se hace estableciendo la propiedad StateManagement en 2 o
wcRetainInstance en tiempo de diseño; hay también un método ReleaseInstance que puede usarse para terminar una
instancia.
En Visual Basic 2005, las aplicaciones Web de ASP.NET no tienen ninguna propiedad StateManagement. El modelo para
administrar el estado de la aplicación difiere considerablemente y es necesario reemplazar cualquier código relacionado con la
administración de estados. Para obtener más información, vea Administración de estados en ASP.NET.
Notas de actualización
Cuando un proyecto WebClass de Visual Basic 6.0 se actualiza a Visual Basic 2005, se convierte en un proyecto de sitio Web de
ASP.NET.
Se agregan declaraciones al proyecto: una para la clase Web y otra para cada uno de los elementos Web y plantillas del
proyecto WebClass. Asimismo, se agrega al proyecto un procedimiento de evento Page_Load, que crea primero un objeto
WebClass y, a continuación, objetos WebItem para cada uno de los elementos Web y plantillas asociados con el proyecto
WebClass de Visual Basic 6.0. Finalmente, en el procedimiento de evento Page_Load, verá una llamada al motor en tiempo de
ejecución de Compatibilidad de WebClass: WebClass.ProcessEvents. Esto permite al motor en tiempo de ejecución
representar el WebItem especificado en la dirección URL solicitada. Éste es el único código nuevo agregado al proyecto
actualizado, y sólo sirve para emular el comportamiento subyacente del motor de ejecución de WebClass de Visual Basic 6.0.
El ámbito de los procedimientos Function y Sub del código de Visual Basic 6.0 (por ejemplo, ProcessTags o Respond)
cambiará de Private a Public para permitir al motor en tiempo de ejecución de compatibilidad de WebClass ejecutarlos.
Algunos eventos WebClass de Visual Basic 6.0 no se admiten en ASP.NET (por ejemplo, Initialize, BeginRequest,
EndRequest y Terminate). Estos procedimientos de eventos se actualizarán, pero no serán invocados en tiempo de ejecución.
Después de actualizar, necesitará mover el código de estos eventos a eventos de ASP.NET equivalentes.
Nota
Existe una serie de diferencias en cuanto al comportamiento de propiedades, métodos y eventos entre los objetos ASP y ASP.
NET. Antes de actualizar un proyecto WebClass a ASP.NET, se deberían conocer estas diferencias para saber cómo modificar
el código. Para obtener más información, vea Visita guiada sobre la creación de sitios Web en Visual Web Developer.

Vea también
Referencia
El evento WebClass no se admite
Conceptos
Actualizar proyectos WebClass a Visual Basic 2005
Otros recursos
Introducción a páginas Web ASP.NET (Visual Studio)
Conceptos de Visual Basic

Acceso a datos para usuarios de Visual Basic 6.0


En Visual Basic 6.0, el acceso a los datos se realiza mediante objetos ADO (ActiveX Data Objects). En Visual Basic 2005, el
acceso a datos se realiza mediante ADO.NET, que forma parte de .NET Framework. Hay diferencias tanto conceptuales como de
tareas entre ambas tecnologías. Para obtener más información sobre diferencias conceptuales entre ADO y ADO.NET, vea
Comparación de ADO.NET con ADO.
Nota
Visual Basic 6.0 también proporcionaba compatibilidad con versiones anteriores para los objetos RDO (Remote Data Objects
) y los objetos DAO (Data Access Objects). Estas tecnologías se admiten en Visual Basic 2005 sólo como objetos COM; las apli
caciones que emplean enlaces de datos RDO o DAO no se pueden actualizar a Visual Basic 2005. Para obtener más informaci
ón, vea Actualizar aplicaciones creadas en versiones anteriores de Visual Basic.

En Visual Basic 6.0, hay dos métodos habituales para implementar el acceso a datos en una aplicación: en tiempo de diseño,
mediante el enlace a un control ADODC (control de datos ADO) utilizando un Entorno de datos; o en tiempo de ejecución,
creando e interactuando con objetos Recordset mediante programación.
En Visual Basic 2005, existen dos métodos similares para implementar el acceso a datos: en tiempo de diseño, mediante
adaptadores y conjuntos de datos; o en tiempo de ejecución, agregando códigos para crear adaptadores y conjuntos de datos
mediante programación. Para obtener más información, vea Crear adaptadores de datos.
En Visual Basic 6.0, el enlace a datos se lleva a cabo estableciendo las propiedades relacionadas con enlace de un control:
DataChanged, DataField, DataFormat, DataMember y DataSource. En la mayoría de los casos, la propiedad de
presentación de un control (por ejemplo, la propiedad Text de un control TextBox) se enlaza a un campo en un origen de
datos.
En Visual Basic 2005, el enlace de datos es un concepto mucho más amplio; se puede enlazar cualquier propiedad de un
control a cualquier estructura que contenga datos. En los formularios Windows Forms el enlace se realiza mediante la
propiedad DataBindings, que contiene una colección de objetos Binding para el control. Para obtener más información, vea
Enlace de datos y formularios Windows Forms.
Nota
El enlace de datos ADO se admite para mantener la compatibilidad con versiones anteriores mediante Compatibility Data Ru
ntime de Microsoft Visual Basic 2005.

En Visual Basic 6.0, los formularios enlazados a datos se crean automáticamente arrastrando elementos de base de datos de un
entorno de datos a un formulario.
Vea también
Otros recursos
Crear aplicaciones de datos cliente
Conectarse a datos con el Explorador de servidores/Explorador de bases de datos
Visual Database Tools
Ayuda para usuarios de Visual Basic 6.0
Espacios de nombres para datos en Visual Studio
Conceptos de Visual Basic

Creación de componentes para usuarios de Visual Basic 6.0


Aunque es posible crear componentes tanto en Visual Basic 6.0 como en Visual Basic 2005, hay algunas diferencias
significativas en la creación de componentes.
Diferencias conceptuales
En Visual Basic 6.0, la creación de componentes se reduce a la creación de componentes COM: los controles ActiveX, los DLL
ActiveX y los EXE ActiveX que se utilizan en aplicaciones COM.
En Visual Basic 2005, los componentes se basan en .NET Framework; se crean componentes que se pueden utilizar en
aplicaciones generadas mediante .NET Framework. Los componentes generados con Visual Basic 2005 se basan en la herencia,
cada componente deriva de la clase base Component o Control. Para obtener más información, vea Clases de componentes.
Componentes multiproceso
Visual Basic 6.0 proporciona dos modelos de subprocesamiento: los componentes pueden ser de un único subproceso o de
subproceso de tipo apartamento.
Visual Basic 2005 admite auténticos componentes multiproceso. Para obtener más información, vea
Subprocesamiento múltiple en componentes.
Crear instancias de componentes
En Visual Basic 6.0, la propiedad Instancing de una clase controla el nivel de acceso y la manera de crear componentes.
En Visual Basic 2005, la creación de instancias se controla estableciendo el modificador de acceso y el nivel de acceso en el
constructor de una clase de componentes. Para obtener más información, vea
Cambios en la creación de instancias de componentes en Visual Basic.
Compatibilidad binaria y control de versiones
La compatibilidad binaria de componentes es importante en Visual Basic 6.0 para evitar conflictos entre versiones; la
propiedad Version Compatibility controla la compatibilidad para el proyecto de componentes.
En Visual Basic 2005, la versión se genera en los ensamblados para componentes; no es preciso preocuparse de establecer la
compatibilidad binaria. Para obtener más información, vea Programar con componentes.
Controles ActiveX
En Visual Basic 6.0, puede crear controles ActiveX (también denominados controles de usuario) que se pueden utilizar en las
aplicaciones basadas en Windows.
En Visual Basic 2005, se pueden crear controles de usuario para formularios Windows Forms, o se puede heredar de los
controles existentes para agregar funcionalidad. Para obtener más información, vea
Desarrollar controles de formularios Windows Forms en tiempo de diseño.
Mensajería
En Visual Basic 6.0, se pueden crear componentes que utilizan Microsoft Message Queue (MSMQ) para pasar información
entre aplicaciones.
En Visual Basic 2005, la mensajería se genera en .NET Framework. Para obtener más información, vea
Utilizar componentes de mensajería.
Transacciones
En Visual Basic 6.0, puede crear componentes MTS que operan con Microsoft Transaction Server (MTS) para participar en
transacciones.
Con Visual Basic 2005, las transacciones se controlan mediante .NET Framework agregando un componente transaccional a un
proyecto o agregando un atributo Transaction a una clase existente.
Vea también
Conceptos
Controles de usuario para usuarios de Visual Basic 6.0
Herencia para usuarios de Visual Basic 6.0
Otros recursos
Creación de componentes
Ayuda para usuarios de Visual Basic 6.0
Espacios de nombres del modelo de componentes en Visual Studio
Conceptos de Visual Basic

Controles de usuario para usuarios de Visual Basic 6.0


Visual Basic 6.0 y Visual Basic 2005 permiten crear controles; sin embargo hay varias diferencias que se deben considerar.
Diferencias conceptuales
En Visual Basic 6.0, los proyectos UserControl (también conocidos como proyectos de controles ActiveX) se usan para crear
controles ActiveX. Después de compilarlos, los controles UserControls se pueden alojar en cualquier contenedor que sea
compatible con ActiveX, incluidos los formularios de Visual Basic 6.0 e Internet Explorer.
En Visual Basic 2005, se utilizan los proyectos de la Biblioteca de controles de Windows para crear controles que se puedan
alojar en aplicaciones de Windows Forms.
Comportamiento en tiempo de diseño
En Visual Basic 6.0, antes de agregar un control UserControl a un formulario en tiempo de diseño, es necesario cerrar el
Diseñador de controles de usuario, lo que compila (genera) automáticamente el control. Los cambios posteriores que se
realicen en el objeto UserControl , no se reflejarán en la instancia de UserControl en el formulario hasta que no se ejecute la
aplicación; si estuviera abierto el Diseñador de controles de usuario, se cerrará automáticamente.
En Visual Basic 2005, se pueden agregar los controles UserControl a un formulario sin cerrar el Diseñador de controles de
usuario; no obstante, el control deberá generarse antes de poder agregarlo al formulario. Con sólo cerrar el Diseñador de
controles de usuario no se genera automáticamente el control. Los cambios realizados posteriormente en el control de
usuario no se reflejarán en el diseñador de formularios hasta que no se vuelva a generar el objeto UserControl; los objetos
UserControl se regeneran automáticamente cada vez que se depura la aplicación de prueba.
Conservar los valores
En Visual Basic 6.0, los eventos ReadProperties y WriteProperties se usan para recuperar o guardar los valores de un objeto
UserControl en un objeto PropertyBag.
En Visual Basic 2005, el objeto PropertyBag ya no se admite, y los eventos ReadProperties y WriteProperties ya no existen.
En su lugar, se usa la serialización para guardar y recuperar propiedades en un formato binario o SOAP. Para obtener más
información, vea Tutorial: Guardar un objeto en Visual Basic
Notas de actualización
Cuando se actualiza un proyecto UserControl de Visual Basic 6.0 a Visual Basic 2005, se actualiza a una biblioteca de controles
de Windows y, por tanto, el control resultante no puede alojarse en Internet Explorer.
Vea también
Tareas
Tutorial: Guardar un objeto en Visual Basic
Conceptos
Equivalentes de PropertyBag para usuarios de Visual Basic 6.0
Otros recursos
Desarrollar controles de formularios Windows Forms en tiempo de diseño
Conceptos de Visual Basic

Equivalentes de PropertyBag para usuarios de Visual Basic 6.0


En Visual Basic 2005, el objeto My.Settings reemplaza el objeto PropertyBag de Visual Basic 6.0.
Diferencias conceptuales
En Visual Basic 6.0, el objeto PropertyBag se utiliza para guardar los datos de un objeto entre instancias, lo que permite
almacenar valores y recuperarlos la siguiente vez que se crea una instancia del objeto. Aunque en tiempo de diseño se pueden
establecer las propiedades de un objeto en un valor predeterminado, los valores introducidos durante la ejecución se perderán
cuando se destruya el objeto. El objeto PropertyBag de Visual Basic 6.0 permite guardar una copia del objeto en un formato
binario y recuperarla para su posterior utilización. Por ejemplo, una aplicación que se utilizaba para calcular créditos podía usar
un objeto PropertyBag para guardar un tipo de tasa de interés entre instancias, en lugar de tener que escribirlo cada vez que
se ejecuta la aplicación.
En Visual Basic 2005, ya no existe el objeto PropertyBag, pero todavía puede conservar los datos de un objeto mediante el
objeto My.Settings. El objeto My.Settings proporciona acceso a una configuración de componente o de aplicación, y permite
almacenar y recuperar dinámicamente valores de propiedad y otra información en tiempo de diseño y de ejecución. Para
obtener más información, vea Administrar la configuración de la aplicación.
Nota
El objeto My.Settings sólo se puede utilizar para conservar los datos en tipos definidos por .NET Framework. Para tipos de d
atos personalizados, puede utilizar la serialización para conservar los datos. Para obtener más información, vea
Tutorial: Guardar un objeto en Visual Basic.

Vea también
Conceptos
Controles de usuario para usuarios de Visual Basic 6.0
Conceptos de Visual Basic

Formularios Windows Forms para usuarios de Visual Basic 6.0


En Visual Basic 6.0 (y en todas las versiones anteriores de Visual Basic), las aplicaciones basadas en Windows se creaban
mediante formularios que formaban parte del motor en tiempo de ejecución de Visual Basic. En Visual Basic 2005, las
aplicaciones basadas en Windows se crean utilizando formularios Windows Forms proporcionados por .NET Framework.
Los formularios Windows Forms y sus controles proporcionan una arquitectura más extensible y compleja para el desarrollo
de aplicaciones basadas en Windows; sin embargo, hay algunas diferencias entre los formularios y los controles de Windows
Forms, y los formularios y controles de Visual Basic 6.0. Los temas siguientes se han concebido para ayudarle a comprender
las diferencias.
En esta sección
Tareas de formularios para usuarios de Visual Basic 6.0
Describe las diferencias en las tareas habituales de trabajo con formularios.
Controles de formularios Windows Forms para usuarios de Visual Basic 6.0
Proporciona vínculos a temas que describen las diferencias entre Visual Basic 6.0 y los controles y objetos de los formularios
Windows Forms.
Cambios en los eventos, métodos y propiedades de controles para usuarios de Visual Basic 6.0
Proporciona vínculos a temas que describen diferencias en las propiedades, métodos y eventos para formularios, controles y
otros objetos.
Matrices de controles para usuarios de Visual Basic 6.0
Describe las diferencias de las matrices de controles entre Visual Basic 6.0 y Visual Basic 2005.
Ubicación de formularios para usuarios de Visual Basic 6.0
Describe las diferencias al establecer la ubicación de la pantalla del formulario entre Visual Basic 6.0 y Visual Basic 2005.
Objeto Menu para usuarios de Visual Basic 6.0
Describe las diferencias en la creación de menús entre Visual Basic 6.0 y Visual Basic 2005.
MDI para usuarios de Visual Basic 6.0
Describe las diferencias de las aplicaciones de interfaz de múltiples documentos (MDI, multiple-document interface ) entre
Visual Basic 6.0 y Visual Basic 2005.
Cambios en los cuadros de diálogo para usuarios de Visual Basic 6.0
Describe las diferencias en la creación de cuadros de diálogo entre Visual Basic 6.0 y Visual Basic 2005.
Comportamiento del color para los usuarios de Visual Basic 6.0
Describe las diferencias en el control del color entre Visual Basic 6.0 y Visual Basic 2005.
Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0
Describe las diferencias en la implementación de la Ayuda entre Visual Basic 6.0 y Visual Basic 2005.
Imprimir cambios para usuarios de Visual Basic 6.0
Describe las diferencias en la compatibilidad de impresión para aplicaciones entre Visual Basic 6.0 y Visual Basic 2005.
Secciones relacionadas
Eventos y control de eventos para usuarios de Visual Basic 6.0
Describe las diferencias al escribir controladores de eventos entre Visual Basic 6.0 y Visual Basic 2005.
Arrastrar y colocar para usuarios de Visual Basic 6.0
Describe las diferencias en la implementación las operaciones de arrastrar y colocar entre Visual Basic 6.0 y Visual Basic
2005.
Gráficos para usuarios de Visual Basic 6.0
Describe las diferencias de los métodos gráficos entre Visual Basic 6.0 y Visual Basic 2005.
Información general sobre formularios Windows Forms
Introduce los conceptos básicos relativos a formularios.
Lo nuevo en formularios Windows Forms y controles de formularios Windows Forms
Describe funciones nuevas para los formularios Windows Forms.
Espacios de nombres de aplicaciones para Windows en Visual Studio
Examina los espacios de nombres relativos a los formularios Windows Forms.
Ayuda para usuarios de Visual Basic 6.0
Proporciona vínculos a temas adicionales que describen las diferencias entre Visual Basic 6.0 y Visual Basic 2005.
Conceptos de Visual Basic

Controles de formularios Windows Forms para usuarios de


Visual Basic 6.0
Los nuevos controles y objetos de Visual Basic 2005 reemplazan los controles, objetos y colecciones intrínsecos de Visual Basic
6.0. En algunos casos se han cambiado los nombres; en muchos, son distintos los eventos, los métodos y las propiedades.
En esta sección
Los temas siguientes presentan las correspondencias entre los controles y los objetos de Visual Basic 6.0 y sus equivalentes en
Visual Basic 2005.
Objeto App para usuarios de Visual Basic 6.0
Control CheckBox para usuarios de Visual Basic 6.0
Objeto Clipboard para usuarios de Visual Basic 6.0
Control ComboBox para usuarios de Visual Basic 6.0
Control CommandButton para usuarios de Visual Basic 6.0
Control CommonDialog para usuarios de Visual Basic 6.0
Colección Controls para usuarios de Visual Basic 6.0
Control de datos para usuarios de Visual Basic 6.0
Control DataGrid para usuarios de Visual Basic 6.0
Control DirListBox para usuarios de Visual Basic 6.0
Control DriveListBox para usuarios de Visual Basic 6.0
Control FileListBox para usuarios de Visual Basic 6.0
Objeto Font para usuarios de Visual Basic 6.0
Objeto Form para usuarios de Visual Basic 6.0
Colección Forms para usuarios de Visual Basic 6.0
Control Frame para usuarios de Visual Basic 6.0
Control HScrollBar para usuarios de Visual Basic 6.0
Control Image para usuarios de Visual Basic 6.0
Control Label para usuarios de Visual Basic 6.0
Control Line para usuarios de Visual Basic 6.0
Control ListBox para usuarios de Visual Basic 6.0
Control ListView para usuarios de Visual Basic 6.0
Control MaskEdBox para usuarios de Visual Basic 6.0
Objeto MDIForm para usuarios de Visual Basic 6.0
Objeto Menu para usuarios de Visual Basic 6.0
Control de contenedor OLE para usuarios de Visual Basic 6.0
Control OptionButton para usuarios de Visual Basic 6.0
Control PictureBox para usuarios de Visual Basic 6.0
Objeto Printer para usuarios de Visual Basic 6.0
Colección Printers para usuarios de Visual Basic 6.0
Control ProgressBar para usuarios de Visual Basic 6.0
Control RDO Data para usuarios de Visual Basic 6.0
Control RichTextBox para usuarios de Visual Basic 6.0
Objeto Screen para usuarios de Visual Basic 6.0
Control Shape para usuarios de Visual Basic 6.0
Control StatusBar para usuarios de Visual Basic 6.0
Control TextBox para usuarios de Visual Basic 6.0
Control ToolBar para usuarios de Visual Basic 6.0
Control Timer para usuarios de Visual Basic 6.0
Control TreeView para usuarios de Visual Basic 6.0
Controles de usuario para usuarios de Visual Basic 6.0
Objeto VBControlExtender para usuarios de Visual Basic 6.0
Control VScrollBar para usuarios de Visual Basic 6.0
Control WebBrowser para usuarios de Visual Basic 6.0
Secciones relacionadas
Controles de formularios Windows Forms
Proporciona vínculos a temas acerca de los controles diseñados específicamente para trabajar con formularios Windows
Forms.
Cambios en los eventos, métodos y propiedades de controles para usuarios de Visual Basic 6.0
Proporciona vínculos a temas que describen diferencias en las propiedades, métodos y eventos para formularios, controles y
otros objetos.
Comparación de los controles y objetos programables de distintos lenguajes y bibliotecas
Proporciona una comparación de diversos controles y objetos distintos.
Lo nuevo en formularios Windows Forms y controles de formularios Windows Forms
Describe funciones nuevas para los formularios Windows Forms.
Conceptos de Visual Basic

Objeto App para usuarios de Visual Basic 6.0


En este tema se compara el objeto App de Visual Basic 6.0 con su equivalente en Visual Basic 2005.
En Visual Basic 6.0 el objeto App es un objeto global que se utiliza para establecer o recuperar información sobre la aplicación.
No existe ningún equivalente directo del objeto App en Visual Basic 2005. Sin embargo, la mayor parte de las propiedades,
métodos y eventos se pueden asignar a miembros equivalentes en .NET Framework.
Diferencias conceptuales
Version Information (Propiedades)
Las propiedades Version Information del objeto App se reemplazan por atributos Assembly en Visual Basic 2005. Las
propiedades Version Information se definen en el cuadro de diálogo Propiedades del proyecto. Los atributos Assembly
se definen en el cuadro de diálogo Información de ensamblado, al que se puede obtener acceso haciendo clic en el botón
Información de la aplicación situado en la ficha Aplicación del Diseñador de proyectos.
Nota
Las propiedades Version Information se almacenan en el archivo Project (.vbp), que se puede editar mediante un editor de
texto, como el Bloc de notas. Los atributos Assembly se almacenan en el archivo AssemblyInfo.vb, que se puede editar en el
Editor de código.

File Description (Propiedad)


El objeto App de Visual Basic 6.0 tiene las propiedades FileDescription y Title; FileDescription determina el texto de la
descripción que aparece en el Explorador de Windows.
En Visual Basic 2005, no hay ningún atributo FileDescription. En su lugar, el atributo Title determina el texto descriptivo que
aparece en el Explorador de Windows.
HelpFile (Propiedad)
La propiedad HelpFile en Visual Basic 6.0 especifica un archivo de Ayuda en el nivel de la aplicación.
En Visual Basic 2005, los archivos de Ayuda se especifican en cada formulario utilizando un componente HelpProvider. Para
obtener más información, vea Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.
Version (Propiedades)
Las propiedades Major, Minor y Revision en Visual Basic 6.0 se utilizan para devolver el número de versión, formado por tres
partes, de una aplicación.
En Visual Basic 2005, la información de versión incluye también una propiedad Build, y el número de versión, que se compone
de cuatro partes, puede recuperarse utilizando una única propiedad Version. Para obtener más información, vea
Números de versión para usuarios de Visual Basic 6.0.
Title (Propiedad)
En Visual Basic 6.0, la propiedad Title del objeto App puede modificarse mediante programación; de este modo, se determina
el nombre que aparece en el Administrador de tareas de Windows.
En Visual Basic 2005, el atributo Title es de sólo lectura. La propiedad Text del formulario principal de la aplicación determina
el nombre que aparece en el Administrador de tareas. La propiedad Text puede definirse mediante programación, pero
también cambiará el texto de la barra de título del formulario.
TaskVisible (Propiedad)
En Visual Basic 6.0, la propiedad TaskVisible del objeto App determina si una aplicación aparece en la Lista de tareas de
Windows (Windows 9x) en la ficha Aplicaciones del Administrador de tareas (Windows 2000 o versiones posteriores). La
propiedad se utiliza normalmente para evitar que una aplicación se cierre y se ha diseñado para que se ejecute como una tarea
en segundo plano. En la mayoría de los casos, la propiedad TaskVisible se utiliza con aplicaciones que no muestran las
interfaces de usuario.
En Visual Basic 2005, no existe un equivalente de la propiedad TaskVisible; sin embargo, se puede crear un servicio de
Windows o una aplicación de consola que no aparezca en la lista de tareas.
PrevInstance (Propiedad)
La propiedad PrevInstance en Visual Basic 6.0 determina si una instancia de la aplicación ya se está ejecutando.
Normalmente, se llama a PrevInstance cuando se ejecuta la aplicación y se anula la aplicación si devuelve true.
No existe ningún equivalente directo de PrevInstance en Visual Basic 2005. Se puede controlar si se permiten varias
instancias de una aplicación mediante la propiedad Multiple Instance incluida en la ficha Aplicación del Diseñador de
proyectos. En tiempo de ejecución, se desencadena un evento NextInstanceStarted cuando un usuario intenta iniciar otra
instancia de la aplicación. Puede agregar código a este controlador de eventos para activar la primera instancia de la aplicación.
Diferencias adicionales
Existen algunas propiedades del objeto App en Visual Basic 6.0 que involucran a componentes ActiveX, a la automatización
OLE y a otras tecnologías que ahora están obsoletas y que no son compatibles con Visual Basic 2005. Éstas se incluyen en la
tabla Equivalencias de las propiedades del objeto App que se muestra más adelante en este tema.
Cambios de código para el objeto App
En los ejemplos de código siguientes se ilustran las diferencias que existen entre las técnicas de codificación de Visual Basic 6.0
y de Visual Basic 2005 en algunos usos comunes del objeto App.
El código se modifica para mostrar el número de versión de una aplicación
En el ejemplo siguiente se muestra cómo se recupera el número de versión de una aplicación y se incluye en una etiqueta.

' Visual Basic 6.0


Label1.Caption = "Version: " & App.Major & "." & App.Minor & "." _
& App.Revision

VB
' Visual Basic 2005
Label1.Text = My.Application.Info.Version.ToString()

El código se modifica para determinar la ruta de acceso de una aplicación


En el ejemplo siguiente se muestra cómo se presenta un archivo de imagen que está almacenado en la carpeta de la aplicación
recuperando la ruta de acceso para la aplicación en ejecución.

' Visual Basic 6.0


Picture1.Picture = LoadPicture(App.Path & "\Logo.jpg")

VB
' Visual Basic 2005
PictureBox1.Image = System.Drawing.Bitmap.FromFile( _
My.Application.Info.DirectoryPath & "\Logo.jpg")

El código se modifica para impedir que se ejecute una segunda instancia de una aplicación
En el ejemplo siguiente se muestra cómo se implementa una aplicación de una sola instancia.

' Visual Basic 6.0


Private Sub Form_Load()
If App.PrevInstance = True Then
MsgBox("The application is already running!")
End If
End Sub

VB
' Visual Basic 2005
' Assumes that the Make Single Instance Application checkbox in the
' Project Designer has been checked.

Private Sub MyApplication_StartupNextInstance(ByVal sender As Object, _


ByVal e As Microsoft.VisualBasic.ApplicationServices. _
StartupNextInstanceEventArgs) Handles Me.StartupNextInstance
MsgBox("The application is already running!")
End Sub

Equivalencias de las propiedades del objeto App


En la tabla siguiente se muestran todas las propiedades y métodos del objeto App de Visual Basic 6.0 y sus equivalentes en
Visual Basic 2005.
Visual Basic 6. Equivalente en Visual Basic 2005
0
Comments My.Application.Info.Description (Propiedad)

CompanyNam My.Application.Info.CompanyName (Propiedad)


e

EXEName My.Application.Info.AssemblyName (Propiedad)

FileDescriptio My.Application.Info.Title (Propiedad)


n

HelpFile Nueva implementación. Utilice un componente HelpProvider. Para obtener más información, vea
Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

HInstance GetHINSTANCE

LegalCopyrigh My.Application.Info.Copyright (Propiedad)


t

LegalTrademar My.Application.Info.Trademark (Propiedad)


ks

LogEvent met WriteEntry (Método, My.Application.Log y My.Log)


hod

LogMode Nueva implementación. Para obtener más información, vea Registrar información de la aplicación.
LogPath

Major My.Application.Info.Version (Propiedad)


Nota
El formato de los números de versión es diferente en Visual Basic 2005. Para obtener más información, vea
Números de versión para usuarios de Visual Basic 6.0.

Minor My.Application.Info.Version (Propiedad)


Nota
El formato de los números de versión es diferente en Visual Basic 2005. Para obtener más información, vea
Números de versión para usuarios de Visual Basic 6.0.

NonModalAllo Nueva implementación. Esta propiedad es una propiedad de sólo lectura relacionada con archivos .dll de Acti
wed veX. Common Language Runtime supervisa automáticamente este comportamiento.
OleRequestPe No hay equivalente. Estas propiedades están relacionadas con la automatización OLE, que no es compatible c
ndingMsgText on Visual Basic 2005.
OleRequestPe
ndingMsgTitle
OleRequestPe
ndingTimeout
OleServerBusy
MsgText
OleServerBusy
MsgTitle
OleServerBusy
RaiseError
OleServerBusy
Timeout
Path My.Application.Info.DirectoryPath (Propiedad)

PrevInstance IsSingleInstance
Nota
La propiedad IsSingleInstance es una propiedad Protected. Sólo se puede establecer en tiempo de diseñ
o en el Diseñador de proyectos al activar o desactivar la casilla de verificación Varias instancias.

ProductName My.Application.Info.ProductName (Propiedad)

RetainedProje Nueva implementación. Visual Basic 2005 no puede conservar ningún proyecto en memoria.
ct

Revision My.Application.Info.Version (Propiedad)


Nota
El formato de los números de versión es diferente en Visual Basic 2005. Para obtener más información, vea
Números de versión para usuarios de Visual Basic 6.0.

StartLogging Nueva implementación. Para obtener más información, vea Registrar información de la aplicación.
method

StartMode No hay equivalente. Esta propiedad implica la creación de componentes de ActiveX, que no son compatibles c
on Visual Basic 2005.

TaskVisible Nueva implementación. Para crear una aplicación que no aparezca en el Administrador de tareas, cree un S
ervicio de Windows o un proyecto Aplicación de consola.

ThreadID Nueva implementación. Esta propiedad devolvió el identificador del subproceso en ejecución; el modelo de s
ubprocesos es significativamente diferente en Visual Basic 2005.

Title My.Application.Info.Title (Propiedad)

UnattendedAp Nueva implementación. Para las aplicaciones desatendidas en Visual Basic 2005, cree un proyecto Aplicació
p n de consola.

Notas de actualización
Cuando una aplicación se actualiza desde Visual Basic 6.0, sólo se actualizan las propiedades Major y Minor; Visual Basic 2005
asigna nuevos valores a las propiedades Revision y Build.
Vea también
Referencia
My.Application (Objeto)
Conceptos
Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0
Números de versión para usuarios de Visual Basic 6.0
Conceptos de Visual Basic

Control CheckBox para usuarios de Visual Basic 6.0


En este tema se compara el control CheckBox de Visual Basic 6.0 con su equivalente en Visual Basic 2005.
El control CheckBox de Visual Basic 6.0 se ha reemplazado por el control CheckBox de formularios Windows Forms en Visual
Basic 2005. Los nombres de algunas propiedades, métodos, eventos y constantes son diferentes y, en algunos casos, existen
diferencias de comportamiento.
Diferencias conceptuales
Click (Evento)
En Visual Basic 6.0, el evento Click se desencadena cuanto el estado de CheckBox se modifica mediante programación. En
Visual Studio 2005, se utiliza el evento CheckStateChanged, no el evento Click.
Diferencias adicionales
Asimismo, hay numerosas diferencias conceptuales que se aplican a todos los controles, como diferencias en los enlaces de
datos, control de fuentes, arrastrar y colocar, compatibilidad con Ayuda, y otras. Para obtener más información, vea
Información general sobre formularios Windows Forms y
Lo nuevo en formularios Windows Forms y controles de formularios Windows Forms.
Cambios de código para el control CheckBox
En los ejemplos siguientes se muestran las diferencias que existen entre las técnicas de codificación de Visual Basic 6.0 y Visual
Basic 2005.
El código se modifica para responder a los clics de CheckBox
El código siguiente muestra cómo se modifica el texto de un control CheckBox cuando un usuario activa o desactiva el control.
La propiedad Value de Visual Basic 6.0 se ha sustituido por la propiedad Checked en Visual Basic 2005, y la propiedad
Caption se ha reemplazado por la propiedad Text. Observe que en el ejemplo de Visual Basic 2005 se utiliza el evento
CheckStateChanged para duplicar el comportamiento del evento Click de Visual Basic 6.0.

' Visual Basic 6.0


Private Sub Check1_Click()
If Check1.Value = 1 Then
Check1.Caption = "Checked"
Else
Check1.Caption = "Unchecked"
End If
End Sub

VB
' Visual Basic 2005
Private Sub CheckBox1_CheckStateChanged(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles CheckBox1.CheckStateChanged
If CheckBox1.Checked = True Then
CheckBox1.Text = "Checked"
Else
CheckBox1.Text = "Unchecked"
End If
End Sub

El código se modifica para determinar el estado de un control CheckBox


En el ejemplo siguiente se muestra cómo se comprueba el estado de un control CheckBox en tiempo de ejecución.

' Visual Basic 6.0


Select Case Check1.Value
Case vbUnchecked
Check1.Caption = "Unchecked"
Case vbChecked
Check1.Caption = "Checked"
Case vbGrayed
Check1.Caption = "Disabled"
End Select

VB
' Visual Basic 2005
Select Case CheckBox1.CheckState
Case CheckState.Unchecked
CheckBox1.Text = "Unchecked"
Case CheckState.Checked
CheckBox1.Text = "Checked"
Case CheckState.Indeterminate
CheckBox1.Text = "Disabled"
End Select

Equivalencias de propiedades, métodos y eventos del control CheckBox


En las siguientes tablas se enumeran propiedades, métodos y eventos de Visual Basic 6.0 con sus equivalentes en Visual Basic
2005. No se enumeran aquellas propiedades, métodos y eventos que tienen el mismo nombre y el mismo comportamiento.
Donde corresponde, las constantes aparecen con sangría debajo de la propiedad o método. Salvo que se indique lo contrario,
todas las enumeraciones de Visual Basic 2005 se asignan al espacio de nombres System.Windows.Forms.
Cuando es necesario, se proporcionan vínculos a temas que explican las diferencias de comportamiento. Cuando no existe un
equivalente directo en Visual Basic 2005, se proporcionan vínculos a temas en los que se incluyen alternativas.
Propiedades
Propiedad de Vi Equivalente en Visual Basic 2005
sual Basic 6.0
Alignment CheckAlign
0 (Alinear a la izq Valor de la enumeración MiddleLeft
uierda)
Valor de la enumeración MiddleRight
1 (Alinear a la der
echa)

Appearance Enumeración FlatStyle


0 (Sin formato) Valor de la enumeración Flat
1 (3D) Valor de la enumeración Standard

BackColor BackColor
Nota
Para obtener una lista de las constantes de color, vea Control del color para usuarios de Visual Basic 6.0.

Nota
Los colores se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Comportamiento del color para los usuarios de Visual Basic 6.0.

Caption Text

Container Parent
DataChanged Nueva implementación. Para obtener más información, vea Acceso a datos para usuarios de Visual Basic 6.0
.
DataField
DataFormat
DataMember
DataSource
DisabledPicture Nueva implementación. Para obtener más información, vea
Cómo: Emular un control Tri-state de Visual Basic 6.0 en una aplicación actualizada.
DownPicture

DragIcon Nueva implementación. Para obtener más información, vea


Arrastrar y colocar para usuarios de Visual Basic 6.0.
DragMode

Font Font
FontBold Nota
FontItalic Las fuentes se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
FontName Control de fuentes para usuarios de Visual Basic 6.0.
FontSize
FontStrikethrou
gh
FontUnderline

ForeColor ForeColor
Nota
Para obtener una lista de las constantes de color, vea Control del color para usuarios de Visual Basic 6.0.

Nota
Los colores se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Comportamiento del color para los usuarios de Visual Basic 6.0.

Height Height , Size


Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

HelpContextID Nueva implementación. Para obtener más información, vea


Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

HWnd Handle

Index Nueva implementación. Para obtener más información, vea


Matrices de controles para usuarios de Visual Basic 6.0.
Left Left
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

MaskColor Nueva implementación. Para obtener más información, vea MaskColor para usuarios de Visual Basic 6.0.

MouseIcon Nueva implementación. Para obtener más información, vea


No se puede personalizar la propiedad MousePointer.

MousePointer Cursor
Para obtener una lista de constantes, vea MousePointer para usuarios de Visual Basic 6.0.

OLEDropMode Nueva implementación. Para obtener más información, vea


Arrastrar y colocar para usuarios de Visual Basic 6.0.

Parent Método FindForm

Picture Image

RightToLeft RightToLeft
True Valor de la enumeración Yes
Valor de la enumeración No

Style Appearance
0 (Standard) Valor de la enumeración Normal
1 (Graphical) Valor de la enumeración Button
Nota
El estilo Graphical se controla de forma diferente en Visual Basic 2005. Para obtener más información, ve
a Cómo: Emular un control Tri-state de Visual Basic 6.0 en una aplicación actualizada.

Tag Tag

ToolTipText Componente ToolTip


Para obtener más información, vea
Compatibilidad de la información sobre herramientas para usuarios de Visual Basic 6.0.

Top Top
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

UseMaskColor Nueva implementación. Para obtener más información, vea MaskColor para usuarios de Visual Basic 6.0.
Value CheckState
0 (vbUnchecked Valor de la enumeración Unchecked
)
Valor de la enumeración Checked
1 (vbChecked)
Valor de la enumeración Indeterminate
2 (vbGrayed)

WhatsThisHelpI Nueva implementación. Para obtener más información, vea


D Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

Width Width , Size


Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

Métodos
Método de Visua Equivalente en Visual Basic 2005
l Basic 6.0
Drag Nueva implementación. Para obtener más información, vea
Arrastrar y colocar para usuarios de Visual Basic 6.0.

Move SetBounds
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, ve
a Sistema de coordenadas para usuarios de Visual Basic 6.0.

OLEDrag Nueva implementación. Para obtener más información, vea


Arrastrar y colocar para usuarios de Visual Basic 6.0.

SetFocus Focus

ShowWhatsThis Nueva implementación. Para obtener más información, vea


Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

ZOrder BringToFront, SendToBack


0 (vbBringToFro
nt)
1 (vbSendToBack
)
Eventos
Evento de Equivalente en Visual Basic 2005
Visual Basi
c 6.0
Click CheckStateChanged
Nota
En Visual Basic 6.0, el evento Click se desencadena cuanto el estado de CheckBox se modifica mediante progr
amación. En Visual Basic 2005, no se desencadena el evento Click; por consiguiente, deberá utilizar el evento C
heckStateChanged.

DragDrop Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.
DragOver

GotFocus Enter

LostFocus Leave

OLEComple Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.
teDrag
OLEDragDr
op
OLEDragOv
er
OLEGiveFee
dback
OLESetData
OLEStartDr
ag

Validate Validating

Notas de actualización
Cuando se actualiza una aplicación de Visual Basic 6.0 con el Asistente para aplicación, los controles CheckBox se actualizan a
los controles CheckBox de formularios Windows Forms, y el código se actualiza para que utilice las propiedades, los métodos
y los eventos equivalentes. Cuando no existen equivalentes o cuando es probable que existan diferencias en el
comportamiento, se incluyen comentarios en el código con un vínculo a un tema de Ayuda.
Vea también
Referencia
Información general sobre el control CheckBox (formularios Windows Forms)
Conceptos
Acceso a datos para usuarios de Visual Basic 6.0
Propiedad Style para usuarios de Visual Basic 6.0
Control de fuentes para usuarios de Visual Basic 6.0
Sistema de coordenadas para usuarios de Visual Basic 6.0
Matrices de controles para usuarios de Visual Basic 6.0
Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0
MousePointer para usuarios de Visual Basic 6.0
Compatibilidad de la información sobre herramientas para usuarios de Visual Basic 6.0
Otros recursos
Actualizar aplicaciones creadas en versiones anteriores de Visual Basic
Conceptos de Visual Basic

Objeto Clipboard para usuarios de Visual Basic 6.0


El objeto Clipboard de Visual Basic 6.0 se ha sustituido por un objeto Clipboard similar en Visual Basic 2005.
Diferencias conceptuales
En Visual Basic 6.0, el objeto Clipboard se utiliza para almacenar y recuperar texto, imágenes y datos del Portapapeles del
sistema.
Visual Basic 2005 tiene un objeto Clipboard en el espacio de nombres My.Computer con algunos métodos nuevos y algunos
métodos que son ligeramente diferentes.
Formatos de datos del Portapapeles
En Visual Basic 6.0, las constantes se proporcionan para definir el tipo de datos que se transfieren a Clipboard o que se
recuperan de éste.
Visual Basic 2005 utiliza un objeto DataFormats para definir el tipo de datos; se admiten algunos formatos de datos nuevos.
Más adelante en este tema se incluye una lista de las constantes de formato del Portapapeles de Visual Basic 6.0 y sus
equivalentes en Visual Basic 2005.
Cambios de código para el objeto Clipboard
En el ejemplo siguiente se muestra cómo se almacena y se recupera texto mediante Clipboard.

' Visual Basic 6.0


Clipboard.Clear
Clipboard.SetText "Hello", vbCFText
If Clipboard.GetFormat(vbCFText) Then
Text1.Text = Clipboard.GetText(vbCFText)
End If

VB
' Visual Basic 2005
My.Computer.Clipboard.Clear()
My.Computer.Clipboard.SetText("Hello")
If My.Computer.Clipboard.ContainsText Then
TextBox1.Text = My.Computer.Clipboard.GetText
End If

Equivalencias de las constantes de Clipboard


Visual Basic 6 Equivalente en Visual Basic 2005
.0
vbCFBitmap Bitmap

vbCFDIB Dib

vbCFEMetafil EnhancedMetafile
e

vbCFFiles FileDrop

vbCFLink No hay equivalente. Para obtener más información, vea


Intercambio dinámico de datos para usuarios de Visual Basic 6.0.

vbCFMetafile MetafilePict

vbCFPalette Palette
vbCFRTF Rtf

vbCFText Text
Nota
La clase DataFormats forma parte del espacio de nombres System.Windows.Forms. Además de los formatos mostrados ant
eriormente, DataFormats admite varios formatos del Portapapeles que no se admiten en Visual Basic 6.0.

Vea también
Tareas
Cómo: Vaciar el Portapapeles en Visual Basic
Cómo: Leer el Portapapeles en Visual Basic
Cómo: Determinar qué tipo de archivo se almacena en el Portapapeles en Visual Basic
Cómo: Guardar una secuencia de audio en el Portapapeles en Visual Basic
Cómo: Recuperar una imagen del Portapapeles en Visual Basic
Cómo: Escribir en el Portapapeles en Visual Basic
Referencia
My.Computer.Clipboard (Objeto)
My.Computer.Clipboard (Miembros del objeto)
Conceptos de Visual Basic

Control ComboBox para usuarios de Visual Basic 6.0


El control ComboBox de Visual Basic 6.0 se ha reemplazado por el control ComboBox de Windows Forms en Visual Basic
2005. Los nombres de algunas propiedades, métodos, eventos y constantes son diferentes y, en algunos casos, existen
diferencias de comportamiento.
Diferencias conceptuales
Change (Evento)
En Visual Basic 6.0, el evento Change del control ComboBox se desencadena cuando se modifica el texto del control. El
evento Change no se desencadena cuando se selecciona un elemento en la sección de la lista del control. Si se modifica el
texto de un elemento de la lista mediante programación, no se desencadena el evento Change.
En Visual Basic 2005, el evento Change ya no existe; el evento TextChanged se desencadena cada vez que el texto se modifica
por alguna razón; por ejemplo:
Cuando se modifica la sección de entrada de texto
Cuando se selecciona un elemento de la lista
Cuando se modifica un elemento de la lista mediante programación
Cuando se llama al método AddItem
ItemData (Propiedad)
En Visual Basic 6.0 la propiedad ItemData de un control ComboBox se puede establecer en tiempo de diseño en la ventana
Propiedades para asociar un valor Integer con un elemento ComboBox.
En Visual Basic 2005, la propiedad ItemData ya no existe. La biblioteca Microsoft.VisualBasic.Compatibility contiene una
función SetItemData que se puede utilizar para asociar un valor Integer con un elemento; la función GetItemData se puede
utilizar para recuperar el elemento.
Locked (Propiedad)
En Visual Basic 6.0, la propiedad Locked de un control ComboBox determina si se puede editar la sección del cuadro de texto
del control.
En Visual Basic 2005, la propiedad Locked impide que un control se mueva en tiempo de diseño. No existe un equivalente
directo para la propiedad Locked de Visual Basic 6.0; sin embargo, puede conseguir el mismo efecto si establece la propiedad
DropDownStyle del control ComboBox en DropDownList.
Nota En Visual Basic 6.0, si se establece la propiedad Locked en True, también se impedirá que se modifique la selección.
Para duplicar este comportamiento, puede cancelar la selección en el evento MouseDown.
NewIndex (Propiedad)
En Visual Basic 6.0, la propiedad NewIndex se usaba para recuperar el índice del último elemento agregado a un control
ComboBox.
En Visual Basic 2005, la propiedad NewIndex ya no existe. Puede utilizar el valor devuelto desde el método Item.Add para
recuperar el índice de un elemento cuando éste se agrega.
TopIndex (Propiedad)
En Visual Basic 6.0, la propiedad TopIndex se utilizaba para devolver o establecer un valor que especificara el elemento del
control ComboBox o ListBox que debía mostrarse en la posición superior. Esta propiedad solía utilizarse para desplazarse por
la lista sin seleccionar ningún elemento.
En Visual Basic 2005, la propiedad ComboBox ya no es compatible con la propiedad TopIndex. En la mayoría de los casos
esto no debería representar un problema, porque al definir la propiedad TopIndex, no se producirá ningún efecto visible a
menos que se hubiera establecido la propiedad Style en 1 - SimpleCombo. En este caso, puede emular su comportamiento
utilizando un control ListBox y un control TextBox; el control ListBox continúa admitiendo la propiedad TopIndex.
Scroll (Evento)
El evento Scroll de Visual Basic 6.se utiliza junto con la propiedad TopIndex para llevar a cabo acciones cuando se desplaza
por la lista. Visual Basic 2005 no admite el evento Scroll; sin embargo, en la mayoría de los casos, el evento
SelectedIndexChanged constituye un sustituto válido.
Otras diferencias
Existen numerosas diferencias conceptuales que se aplican a todos los controles, como diferencias en los enlaces de datos,
control de fuentes, operaciones de arrastrar y colocar, compatibilidad con Ayuda, y otras. Para obtener más información, vea
Conceptos de formularios Windows Forms para usuarios de Visual Basic 6.0.
Cambios de código para el control ComboBox
En los ejemplos siguientes se muestran las diferencias que existen entre las técnicas de codificación de Visual Basic 6.0 y Visual
Basic 2005.
El código se modifica para hacer que un control ComboBox sea de sólo lectura
El código siguiente muestra cómo impedir que un usuario agregue nuevos elementos a un control ComboBox.

' Visual Basic 6.0


Combo1.Locked = True

VB
' Visual Basic 2005
ComboBox1.DropDownStyle = ComboBoxStyle.DropDownList

El código se modifica para seleccionar el último elemento agregado en un control ComboBox


El código siguiente muestra cómo se establece la selección en un elemento que se ha agregado mediante programación a un
control ComboBox.

' Visual Basic 6.0


Combo1.AddItem "This is a new item"
Combo1.ListIndex = Combo1.NewIndex

VB
' Visual Basic 2005
Dim i As Integer
i = ComboBox1.Items.Add("This is a new item")
ComboBox1.SelectedIndex = i

El código de Private Sub se modifica para asociar datos de elementos


El código siguiente muestra cómo se asocia un número de empleado a cada empleado mostrado en un control ComboBox y
cómo se recupera después ese número en tiempo de ejecución.

' Visual Basic 6.0


Private Sub Form_Load
Combo1.AddItem "Nancy Davolio"
Combo1.ItemData(Combo1.NewIndex) = 12345
Combo1.AddItem "Judy Phelps"
Combo1.ItemData(Combo1.NewIndex) = 67890
End Sub
Private Sub Combo1_Click()
Label1.Caption = "Empoyee #" & _
CStr(Combo1.ItemData(Combo1.ListIndex))
End Sub

VB
' Visual Basic 2005
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles MyBase.Load

ComboBox1.Items.Add("Nancy Davolio")
Microsoft.VisualBasic.Compatibility.VB6. _
SetItemData(ComboBox1, ComboBox1.Items.Count() - 1, 12345)
ComboBox1.Items.Add("Judy Phelps")
Microsoft.VisualBasic.Compatibility.VB6. _
SetItemData(ComboBox1, ComboBox1.Items.Count() - 1, 67890)
End Sub

VB
' Visual Basic 2005
Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
Label1.Text = "Employee #" & CStr( _
Microsoft.VisualBasic.Compatibility.VB6. _
GetItemData(ComboBox1, ComboBox1.SelectedIndex))
End Sub

Equivalencias de propiedades, métodos y eventos del control ComboBox


En las siguientes tablas se enumeran propiedades, métodos y eventos de Visual Basic 6.0 con sus equivalentes en Visual Basic
2005. No se enumeran aquellas propiedades, métodos y eventos que tienen el mismo nombre y el mismo comportamiento.
Donde corresponde, las constantes aparecen con sangría debajo de la propiedad o método. Salvo que se indique lo contrario,
todas las enumeraciones de Visual Basic 2005 se asignan al espacio de nombres System.Windows.Forms.
Esta tabla proporciona vínculos a temas en los que se explican las diferencias de comportamiento. Cuando no existe un
equivalente directo en Visual Basic 2005, se proporcionan vínculos a temas en los que se incluyen alternativas.
Propiedades
Visual B Equivalente en Visual Basic 2005
asic 6.0
Appeara Nueva implementación. Para obtener más información, vea
nce Propiedades Appearance y BorderStyle para usuarios de Visual Basic 6.0.

BackCol BackColor
or
Nota
Los colores se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Comportamiento del color para los usuarios de Visual Basic 6.0.

Containe Parent
r

DataCha Nueva implementación. Para obtener más información, vea Control de datos para usuarios de Visual Basic 6.0.
nged
DataFiel
d
DataFor
mat
DataMe
mber
DataSou
rce
DragIco Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.
n
DragMo
de

Font Font
FontBold Nota
FontItali Las fuentes se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
c Control de fuentes para usuarios de Visual Basic 6.0.
FontNa
me
FontSize
FontStrik
ethroug
h
FontUnd
erline

ForeColo ForeColor
r
Nota
Los colores se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Comportamiento del color para los usuarios de Visual Basic 6.0.

Height Height, Size


Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

HelpCon Nueva implementación. Para obtener más información, vea


textID Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

HWnd Handle

Index Nueva implementación. Para obtener más información, vea Matrices de controles para usuarios de Visual Basic 6.0.

ItemDat Nueva implementación. Para obtener más información, vea No se puede actualizar la propiedad ItemData.
a

Left Left
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

List Items

ListCoun Count
t
ListIndex SelectedIndex

Locked DropDownStyle = DropDownList


Nota
En Visual Basic 6.0, si se establece la propiedad Locked en True, también se impedirá que se modifique la selecció
n. En Visual Basic 2005, para duplicar este comportamiento, puede cancelar la selección en el evento MouseDown.

MouseIc Nueva implementación. Para obtener más información, vea No se puede personalizar la propiedad MousePointer.
on

MouseP Cursor
ointer
Para obtener una lista de constantes, vea MousePointer para usuarios de Visual Basic 6.0.

NewInde Nueva implementación. Para obtener más información, vea No se puede actualizar la propiedad NewIndex.
x

OLEDrag Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.
Mode

OLEDrop Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.
Mode

Parent Método FindForm

RightToL RightToLeft
eft

SelLengt SelectionLength
h

SelStart SelectionStart

SelText SelectedText

Style DropDownStyle

ToolTipT Componente ToolTip


ext
Para obtener más información, vea
Compatibilidad de la información sobre herramientas para usuarios de Visual Basic 6.0.

Top Top
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

TopInde Nueva implementación. Para obtener más información, vea


x Propiedad TopIndex y evento Scroll para usuarios de Visual Basic 6.0.

WhatsTh Nueva implementación. Para obtener más información, vea


isHelpID Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.
Width Width, Size
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

Métodos
Visual Basi Equivalente en Visual Basic 2005
c 6.0
AddItem Add
AddRange
Insert

Clear Clear

Drag Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.

Move SetBounds
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

OLEDrag Arrastrar y colocar para usuarios de Visual Basic 6.0.

RemoveIte Items.Remove
m

SetFocus Focus

ShowWha Nueva implementación. Para obtener más información, vea


tsThis Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

ZOrder BringToFront Funciones SendToBack


Eventos
Visual Basi Equivalente en Visual Basic 2005
c 6.0
Change TextChanged
Nota
El comportamiento del evento TextChanged es ligeramente diferente. Para obtener más información, vea
Evento de cambio de control ComboBox para usuarios de Visual Basic 6.0.

Click SelectedIndexChanged

DblClick Nueva implementación. Utilice los eventos SelectedIndexChanged o TextChanged.


DragDrop Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.
DragOver

GotFocus Enter

LostFocus Leave

OLECompl Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.
eteDrag
OLEDragDr
op
OLEDragO
ver
OLEGiveFe
edback
OLESetDat
a
OLEStartDr
ag

Scroll Nueva implementación. Para obtener más información, vea


Propiedad TopIndex y evento Scroll para usuarios de Visual Basic 6.0.

Validate Validating

Notas de actualización
Cuando un proyecto de Visual Basic 6.0 se actualiza a Visual Basic 2005, el evento Change del control ComboBox se asigna al
evento TextChanged del control ComboBox de Visual Basic 2005. El comportamiento del evento TextChanged difiere del
comportamiento del evento Change; esta diferencia puede provocar resultados inesperados en el código.
No se actualizará ningún código que haga referencia a las propiedades ItemData, Locked, NewIndex o TopIndex ni ningún
código del procedimiento de eventos Scroll; se agregarán comentarios de advertencia al código y este código deberá
eliminarse o modificarse entes de compilar la aplicación.
Vea también
Referencia
Información general sobre el control ComboBox (formularios Windows Forms)
Conceptos
Comportamiento del color para los usuarios de Visual Basic 6.0
Objeto Font para usuarios de Visual Basic 6.0
MousePointer para usuarios de Visual Basic 6.0
Compatibilidad de la información sobre herramientas para usuarios de Visual Basic 6.0
Conceptos de Visual Basic

Control CommandButton para usuarios de Visual Basic 6.0


El control CommandButton de Visual Basic 6.0 se ha reemplazado por el control Button de formularios Windows Forms en
Visual Basic 2005. Los nombres de algunas propiedades, métodos, eventos y constantes son diferentes y, en algunos casos,
existen diferencias de comportamiento.
Diferencias conceptuales
Propiedades Default y Cancel
En Visual Basic 6.0, las propiedades booleanas Default y Cancel de un control CommandButton determina si el control
responde a las teclas ENTER o ESC, respectivamente.
En Visual Basic 2005, el control Button ya no admite las propiedades Default o Cancel. El objeto Form tiene propiedades
AcceptButton y CancelButton que proporcionan la misma funcionalidad; estas propiedades aceptan el nombre de un control
Button como argumento.
Value (Propiedad)
En Visual Basic 6.0, la propiedad booleana Value de un control CommandButton indica si se ha elegido el control; establecer
la propiedad en True invoca el evento Click del botón.
En Visual Basic 2005, el control Button ya no admite la propiedad Value. Puede utilizar el evento GotFocus para determinar si
se elige el control; el método PerformClick se puede utilizar para invocar el evento Click.
Propiedades Style, Picture, DownPicture y DisabledPicture
En Visual Basic 6.0 el establecimiento de la propiedad Style de un control CommandButton en 1 – Graphical cambia la
apariencia del control para presentar imágenes. Las propiedades Picture, DownPicture y DisabledPicture se utilizan para
asignar imágenes que se muestran en respuesta a cambios de estado. Por ejemplo, cuando se hace clic en un control
CommandButton, se muestra la imagen DownPicture; si el control está desactivado, se muestra la imagen
DisabledPicture.
Visual Basic 2005 ya no admite las propiedades Style, Picture, DownPicture ni DisabledPicture. La propiedad Style ya no
es necesaria; asignar una imagen a la propiedad Image tiene el mismo efecto que establecer la propiedad Style en Graphical.
La propiedad Image reemplaza a la propiedad Picture. Se puede emular la funcionalidad de las propiedades DownPicture y
DisabledPicture utilizando un control ImageList que contiene varias imágenes.
Propiedad MaskColor
En Visual Basic 6.0, la propiedad MaskColor de un control CommandButton se usa para definir un color que se convierte en
transparente, para que se pueda ver una imagen de fondo. Para utilizar esta propiedad, la propiedad Style debe establecerse
en Graphical, la propiedad UseMaskColor, en True y se debe asignar un mapa de bits a la propiedad Picture.
En Visual Basic 2005, no hay ningún equivalente directo para la propiedad MaskColor. Sin embargo, puede establecer la
transparencia en un control mediante el método MakeTransparent de un objeto Bitmap.
Otras diferencias
Asimismo, hay numerosas diferencias conceptuales que se aplican a todos los controles, incluidas las diferencias en los enlaces
de datos, control de fuentes, arrastrar y colocar, compatibilidad con Ayuda y otras. Para obtener más información, vea
Controles de formularios Windows Forms para usuarios de Visual Basic 6.0.
Cambios de código para el control CommandButton
En los ejemplos de código siguientes se ilustran las diferencias en las técnicas de codificación entre Visual Basic 6.0 y Visual
Basic 2005.
Cambios de código para establecer los botones Predeterminado y Cancelar
El ejemplo siguiente muestra cómo se establecen dos botones para que sean los botones Predeterminado y Cancelar.

' Visual Basic 6.0


' Set the first button to respond to the Enter key.
Command1.Default = True
' Set the second button to respond to the Esc key.
Command2.Cancel = True
VB
' Visual Basic 2005
' Set the first button to respond to the Enter key.
Me.AcceptButton = Button1
' Set the second button to respond to the Esc key.
Me.CancelButton = Button2

Cambios de código para agregar transparencia a un botón


El ejemplo siguiente muestra los métodos para definir un área transparente en un botón que contiene una imagen: cualquier
parte de la imagen que sea blanca pasará a ser transparente.

' Visual Basic 6.0


' Assumes a picture has been assigned to the Picture property
' and that the Style property has been set to Graphical.
Command1.UseMaskColor = True
Command1.MaskColor = vbWhite

VB
' Visual Basic 2005
' Assumes a picture has been assigned to the BackgroundImage property.
Dim ButtonBitmap As New System.Drawing.Bitmap(Button1.BackgroundImage)
ButtonBitmap.MakeTransparent(System.Drawing.Color.White)
Button1.BackgroundImage = ButtonBitmap

Equivalencias de propiedad, método y evento de control CommandButton


En las siguientes tablas se enumeran propiedades, métodos y eventos de Visual Basic 6.0 con sus equivalentes en Visual Basic
2005. No se enumeran aquellas propiedades, métodos y eventos que tienen el mismo nombre y el mismo comportamiento.
Donde corresponde, las constantes aparecen con sangría debajo de la propiedad o método. Salvo que se indique lo contrario,
todas las enumeraciones de Visual Basic 2005 se asignan al espacio de nombres System.Windows.Forms.
Estas tablas muestran vínculos a temas que explican las diferencias en el comportamiento. Cuando no hay equivalente directo
en Visual Basic 2005, se proporcionan vínculos a otras alternativas.
Propiedades
Visual Basic Equivalente de Visual Basic 2005
6.0
Appearance Nueva implementación. Para obtener más información, vea
Propiedades Appearance y BorderStyle para usuarios de Visual Basic 6.0.

BackColor BackColor
Nota
Los colores se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Control del color para usuarios de Visual Basic 6.0.

Cancel CancelButton (objeto Form)

Caption Text

Container Parent

Default AcceptButton (objeto Form)


DisabledPic Nueva implementación. Para obtener más información, vea Propiedad Style para usuarios de Visual Basic 6.0.
ture
DownPictur
e

DragIcon Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.
DragMode

Font Font
FontBold Nota
FontItalic
Las fuentes se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
FontName Objeto Font para usuarios de Visual Basic 6.0.
FontSize
FontStriketh
rough
FontUnderli
ne

Height Height, Size


Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

HelpContex Nueva implementación. Para obtener más información, vea


tID Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

HWnd Handle

Index Nueva implementación. Para obtener más información, vea


Matrices de controles para usuarios de Visual Basic 6.0.

Left Left
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

MaskColor Nueva implementación. Para obtener más información, vea MaskColor para usuarios de Visual Basic 6.0.

MouseIcon Nueva implementación. Para obtener más información, vea


No se puede personalizar la propiedad MousePointer.

MousePoint Cursor
er
Para obtener una lista de constantes, vea MousePointer para usuarios de Visual Basic 6.0.

OLEDropMo Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.
de

Parent Método FindForm


Picture Image

RightToLeft RightToLeft

Style Nueva implementación. Para obtener más información, vea Propiedad Style para usuarios de Visual Basic 6.0.
ToolTipText Componente ToolTip
Para obtener más información, vea
Compatibilidad de la información sobre herramientas para usuarios de Visual Basic 6.0.

Top Top
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

UseMaskCol Nueva implementación. Para obtener más información, vea MaskColor para usuarios de Visual Basic 6.0.
or

Value Nueva implementación. El método PerformClick equivale a establecer Value en True; para cualquier otro uso
de la propiedad Value no hay ningún equivalente.

WhatsThisH Nueva implementación. Para obtener más información, vea


elpID Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

Width Width, Size


Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

Métodos
Visual Basi Equivalente de Visual Basic 2005
c 6.0
Drag Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.

Move SetBounds
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

OLEDrag Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.

SetFocus Focus

ShowWha Nueva implementación. Para obtener más información, vea


tsThis Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

ZOrder Función de BringToFront o SendToBack


Eventos
Visual Basic 6.0 Equivalente de Visual Basic 2005
DragDrop Nueva implementación. Para obtener más información, vea
Arrastrar y colocar para usuarios de Visual Basic 6.0.
DragOver

GotFocus Enter

LostFocus Leave

OLECompleteDra Nueva implementación. Para obtener más información, vea


g Arrastrar y colocar para usuarios de Visual Basic 6.0.
OLEDragDrop
OLEDragOver
OLEGiveFeedbac
k
OLESetData
OLEStartDrag

Notas de actualización
Al actualizar a una aplicación de Visual Basic 6.0 mediante el Asistente para actualización, cualquier control CommandButton
se actualiza a los controles Button de formularios Windows Forms y el código se actualiza para utilizar las propiedades,
métodos y eventos equivalentes. Cuando no haya ningún equivalente o haya posibles diferencias en el comportamiento, se
insertan comentarios en el código con vínculos a temas de Ayuda.
Al actualizar una aplicación a Visual Basic 2005, si la propiedad Style está establecida en 1 – Graphical, la propiedad FlatStyle
del control actualizado se establece en Standard y cualquier imagen asignada a la propiedad Picture en tiempo de diseño se
asigna a la propiedad Image del control actualizado.
Si las propiedades DownPicture o DisabledPicture se establecieron en tiempo de diseño o de ejecución, debe modificar la
aplicación actualizada para que utilice un control ImageList. Para obtener más información, vea
Cómo: Emular un control Tri-state de Visual Basic 6.0 en una aplicación actualizada.
El Asistente para actualización no actualiza ningún código que utilice la propiedad MaskColor. En su código se insertarán
advertencias de actualización. Deberá modificar el código antes de ejecutar la aplicación.
Vea también
Conceptos
MaskColor para usuarios de Visual Basic 6.0
Conceptos de Visual Basic

Control CommonDialog para usuarios de Visual Basic 6.0


El control CommonDialog de Visual Basic 6.0 se ha sustituido por varios componentes especializados en Visual Basic 2005.
Diferencias conceptuales
En Visual Basic 6.0, el control ActiveX CommonDialog se utiliza para mostrar varios cuadros de diálogos comunes (Abrir,
Guardar, Color, Fuente, Imprimir y Ayuda) en la aplicación.
En Visual Basic 2005, el control CommonDialog se ha reemplazado por distintos componentes para mostrar cuadros de
diálogo: OpenFileDialog, SaveFileDialog, ColorDialog, FontDialog y PrintDialog.
Nota
No existe ningún equivalente directo en Visual Basic 2005 para mostrar un cuadro de diálogo Ayuda. El control CommonDi
alog sólo admitía la Ayuda de Windows; Visual Basic 2005 sólo admite la Ayuda HTML. Visual Basic 2005 utiliza el compone
nte HelpProvider para mostrar la Ayuda de la aplicación. Para obtener más información, vea
Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

Cambios de código para el control CommonDialog


En los ejemplos de código siguientes se ilustran las diferencias que existen entre las técnicas de codificación de Visual Basic 6.0
y de Visual Basic 2005 en algunos usos comunes del control CommonDialog.
El código se modifica para mostrar un cuadro de diálogo Abrir archivo
En el código siguiente se ilustra cómo se muestra un cuadro de diálogo Abrir archivo, que se inicializa en el directorio
Archivos de programa.

' Visual Basic 6.0


' Uses a CommonDialog control.
CommonDialog1.InitDir = "C:\Program Files"
CommonDialog1.ShowOpen

VB
' Visual Basic 2005
' Uses a OpenFileDialog component.
OpenFileDialog1.InitialDirectory = "C:\Program Files"
OpenFileDialog1.ShowDialog()

El código se modifica para mostrar un cuadro de diálogo Guardar archivo


En el código siguiente se ilustra cómo se muestra un cuadro de diálogo Guardar archivo, que guarda el archivo en la carpeta
de la aplicación.

' Visual Basic 6.0


' Uses a CommonDialog control.
CommonDialog1.InitDir = App.Path
CommonDialog1.ShowSave

VB
' Visual Basic 2005
' Uses a SaveFileDialog component.
SaveFileDialog1.InitialDirectory = My.Application.Info.DirectoryPath
SaveFileDialog1.ShowDialog()

El código se modifica para mostrar un cuadro de diálogo Imprimir


En el código siguiente se ilustra cómo se muestra un cuadro de diálogo Imprimir, que imprime un archivo ubicado en la
carpeta de la aplicación.

' Visual Basic 6.0


' Uses a CommonDialog control.
CommonDialog1.FileName = App.Path & "MyFile.txt"
CommonDialog1.ShowPrinter

VB
' Visual Basic 2005
' Uses PrintDocument and PrintDialog components.
PrintDocument1.DocumentName = My.Application.Info.DirectoryPath _
& "MyFile.txt"
PrintDialog1.Document = PrintDocument1
PrintDialog1.ShowDialog()

El código se modifica para mostrar Ayuda


En el código siguiente se ilustra cómo se muestra un archivo de Ayuda en su aplicación, que se abre en la tabla de contenido.

' Visual Basic 6.0


' Uses a CommonDialog control.
CommonDialog1.HelpFile = "C:\Windows\Help\calc.hlp"
CommonDialog1.HelpCommand = cdlHelpContents
CommonDialog1.ShowHelp

VB
' Visual Basic 2005
' Uses the Help.ShowHelp method.
Help.ShowHelp(Me, "file://C:\Windows\Help\calc.chm", _
HelpNavigator.TableOfContents)

Equivalencias de propiedades y métodos del control CommonDialog


En las siguientes tablas se enumeran propiedades y métodos de Visual Basic 6.0 junto con sus equivalentes en Visual Basic
2005. No se enumeran aquellas propiedades y métodos que tienen el mismo nombre y el mismo comportamiento. Donde
corresponde, las constantes aparecen con sangría debajo de la propiedad o método. Salvo que se indique lo contrario, todas
las enumeraciones de Visual Basic 2005 se asignan al espacio de nombres System.Windows.Forms.
Cuando es necesario, se proporcionan vínculos a temas que explican las diferencias de comportamiento. Cuando no existe un
equivalente directo en Visual Basic 2005, se proporcionan vínculos a temas en los que se incluyen alternativas.
Propiedades
Visual Equivalente en Visual Basic 2005
Basic 6.
0
Action Nueva implementación. La propiedad Action de Visual Basic 6.0 determina qué cuadro de diálogo se va a mostrar; Vi
sual Basic 2005 utiliza un componente independiente para cada cuadro de diálogo.

Cancel Cancel
Error

Copies Copies

Dialog Title (sólo los componentes OpenFileDialog y SaveFileDialog)


Title
Nueva implementación para el resto de los componentes. Se muestran títulos estándar de Windows (Color, Font y P
rint) y no se pueden reemplazar.
FileNa FileNames
me

FileTitl Nueva implementación. La propiedad FileTitle de Visual Basic 6.0 devuelve el valor FileName sin la ruta de acceso;
e puede analizar la propiedad FileNames para obtener el nombre sin la ruta de acceso.

Flags La propiedad Flags de Visual Basic 6.0 proporciona constantes para configurar varios atributos de diferentes cuadros
de diálogo comunes. En lugar de utilizar constantes, los componentes de cuadro de diálogo proporcionan las propied
ades para configurar los atributos.

Font Font
FontBol Nota
d
Las fuentes se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
FontItal Control de fuentes para usuarios de Visual Basic 6.0.
ic
FontNa
me
FontSiz
e
FontStr
ikethro
ugh
FontUn
derline

FromPa FromPage
ge

hDC Nueva implementación. Para obtener más información, vea Gráficos para usuarios de Visual Basic 6.0.

HelpCo HelpNavigator
mmand

HelpFil HelpNamespace
e

HelpKe El parámetro parameter del método ShowHelp.


y

Index Nueva implementación. Para obtener más información, vea Matrices de controles para usuarios de Visual Basic 6.0.

InitDir InitialDirectory

Left Left
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

Max MaxSize (componente FontDialog)


MaximumPage (componente PrintDialog)
Min MinSize (componente FontDialog)
MinimumPage (componente PrintDialog)

MaxFil Nueva implementación. Esta propiedad de Visual Basic 6.0 asigna memoria a nombres de archivo extremadamente la
eSize rgos; ya no es necesario hacerlo en el código administrado.

Orienta Landscape
tion

Parent Método FindForm

Printer Nueva implementación. Esta propiedad de Visual Basic 6.0 se utilizaba junto con la propiedad hDC para imprimir me
Default diante métodos de la interfaz de dispositivos gráficos; esta operación ya no se admite.

Top P:System.Windows.Forms.Control.Top
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

ToPage ToPage

Métodos
Visual Bas Equivalente en Visual Basic 2005
ic 6.0
AboutBox Nueva implementación. La propiedad AboutBox mostraba un cuadro Acerca de en el control CommonDialog
que otro fabricante había creado para Microsoft.

ShowColo ShowDialog (componente ColorDialog)


r

ShowFont ShowDialog (componente FontDialog)

ShowHelp ShowHelp

ShowOpe ShowDialog (componente OpenFileDialog)


n

ShowPrint ShowDialog (componente PrintDialog)


er

ShowSave ShowDialog (componente SaveFileDialog)

Notas de actualización
Cuando se actualiza una aplicación de Visual Basic 6.0 a Visual Basic 2005, todos los controles CommonDialog se actualizan a
su componente de cuadro de diálogo equivalente (OpenFileDialog, SaveFileDialog, ColorDialog, FontDialog o
PrintDialog).
No existe ningún equivalente directo en Visual Basic 2005 para mostrar un cuadro de diálogo Help. Si un control
CommonDialog se utiliza como un cuadro de diálogo Help, se emitirá una advertencia y no se actualizará. Para obtener más
información, vea Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.
Podía utilizarse un único control CommonDialog para mostrar diferentes tipos de cuadros de diálogo. En este caso, se
actualizará a un componente OpenFileDialog; se emitirá una advertencia, y deberá agregar los demás componentes de
diálogo manualmente.
Además, es posible que necesite cambiar el código que utilizaba un control CommonDialog como una variable para que haga
referencia a un componente de diálogo específico después de la actualización.
Vea también
Referencia
Información general sobre el componente FontDialog (formularios Windows Forms)
Información general sobre el componente HelpProvider (formularios Windows Forms)
Otros recursos
ColorDialog (Componente, formularios Windows Forms)
OpenFileDialog (Componente, formularios Windows Forms)
SaveFileDialog (Componente, formularios Windows Forms)
PrintDialog (Componente, formularios Windows Forms)
PrintDocument (Componente, formularios Windows Forms)
Conceptos de Visual Basic

Colección Controls para usuarios de Visual Basic 6.0


La colección Controls de Visual Basic 6.0 se ha reemplazado por la clase ControlCollection en Visual Basic 2005.
Diferencias conceptuales
En Visual Basic 6.0, la colección Controls es una colección cuyos elementos representan los controles de un formulario o de un
control contenedor.
En Visual Basic 2005, la clase ControlCollection reemplaza a la colección Controls. Los formularios tienen una clase
ControlCollection predeterminada, a la que se puede tener acceso por medio de la sintaxis Me.Controls.
Add (Método)
En Visual Basic 6.0, el método Add de la colección Controls se enlaza en tiempo de ejecución; en el método Add, los controles
se crean al especificar la clase Control como un argumento.
En Visual Basic 2005, el método Add de la clase ControlCollection requiere que los controles se creen utilizando la palabra
clave New antes de que se agreguen a la colección.
Remove (Método)
El método Remove de la colección Controls de Visual Basic 6.0 sólo se puede utilizar en los controles que se agreguen
mediante el método Add; la clase ControlCollection de Visual Basic 2005 no presenta esta restricción.
Timer and Menu (Controles)
En Visual Basic 6.0, los controles Timer y Menu son miembros de la colección Controls. En Visual Basic 2005, estos controles
se han reemplazado por los componentes Timer y MainMenu o ContextMenu; los componentes no son miembros de la clase
ControlCollection.
Controles contenedores
La colección Controls de Visual Basic 6.0 incluye controles que se derivan de un control contenedor (por ejemplo, los controles
situados en un control Frame); la clase ControlCollection de Visual Basic 2005 no los incluye. Para recorrer en iteración
todos los controles de un formulario, debe recorrer en iteración de forma recursiva la clase Controls de cada control
contenedor.
Cambios de código para la colección Controls
En los ejemplos siguientes se ilustran las diferencias que existen entre las técnicas de codificación de Visual Basic 6.0 y Visual
Basic 2005.
El código se modifica para agregar y eliminar controles
El código siguiente ilustra las diferencias que existen entre la colección Controls de Visual Basic 6.0 y la clase
ControlCollection de Visual Basic 2005.

' Visual Basic 6.0


Private Sub Command1_Click()
' Declare a new Control variable.
Dim c As Control
' Create and add the new control.
Set c = Controls.Add("VB.TextBox", "Text1")
' Make the new control visible.
c.Visible = True
' Set the initial text.
c.Text = "Hello"
' Retrieve the text from the new TextBox.
If Controls.Count > 1 Then
MsgBox (Controls("Text1").Text)
End If
' Remove the new control.
Controls.Remove (Text1)
' The following line causes a compilation error.
' You cannot remove controls added at design time.
Controls.Remove (Command1)
End Sub
VB
' Visual Basic 2005
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handl
es Button1.Click
' Create a new TextBox control.
Dim TextBox1 As New System.Windows.Forms.TextBox
TextBox1.Name = "TextBox1"
' Add the new control to the form's Controls collection.
Me.Controls.Add(TextBox1)
' No need to set Visible property.
' Set the initial text.
TextBox1.Text = "Hello"
' Retrieve the text from the new TextBox.
If Me.Controls.Count > 1 Then
MsgBox(Me.Controls("TextBox1").Text)
End If
' Remove the new control.
Me.Controls.Remove(TextBox1)
' Remove the control added at design time.
Me.Controls.Remove(Button1)
End Sub

El código se modifica para recorrer en iteración la colección de controles


El código siguiente ilustra una función diseñada para recorrer en iteración todos los controles de un formulario y para borrar, a
continuación, todos los controles CheckBox. Este ejemplo presupone que los controles CheckBox están situados en los
controles GroupBox o Panel en lugar de en el formulario. En el ejemplo de Visual Basic 2005, como la colección Controls del
formulario sólo incluye controles que están situados directamente en el formulario, la función se llama recursivamente a sí
misma para cualquier control que tiene controles secundarios.

' Visual Basic 6.0


Private Sub ClearChecks()
For Each Control in Me.Controls
If TypeOf Control Is CheckBox Then
Control.Value = vbUnchecked
End If
Next
End Sub

VB
' Visual Basic 2005
Private Sub ClearChecks(ByVal Container As Control)
Dim ctl As Control
Dim chk As CheckBox
For Each ctl In Container.Controls
If TypeOf ctl Is CheckBox Then
chk = ctl
chk.Checked = False
End If
' Recursively call this function for any container controls.
If ctl.HasChildren Then
ClearChecks(ctl)
End If
Next
End Sub

Notas de actualización
Debido a las diferencias que existen entre las colecciones Controls de Visual Basic 6.0 y Visual Basic 2005, no se actualizan las
llamadas al método Add. Debe agregar código para recrear el comportamiento de la aplicación mediante el nuevo método
Add.
Vea también
Referencia
Control.Controls Property
Form.ControlCollection Class
Conceptos de Visual Basic

Control de datos para usuarios de Visual Basic 6.0


El control Data de Visual Basic 6.0 se utiliza como mecanismo de enlace de controles a una base de datos mediante DAO.
Visual Basic 2005 no dispone de equivalente para el control Data; la arquitectura de enlace de datos ha cambiado y ya no se
admite DAO. Para obtener más información, vea Acceso a datos para usuarios de Visual Basic 6.0.
El control Data también proporciona una interfaz para desplazarse en los datos, con botones para avanzar y retroceder en las
filas de una tabla de base de datos. Visual Basic 2005 dispone de un control equivalente, el control BindingNavigator, que
también incluye botones para agregar y eliminar filas.
Vea también
Referencia
Información general sobre el control BindingNavigator (formularios Windows Forms)
Conceptos
Consideraciones previas a la actualización
Acceso a datos para usuarios de Visual Basic 6.0
Conceptos de Visual Basic

Control DataGrid para usuarios de Visual Basic 6.0


El control DataGrid de Visual Basic 6.0 se ha reemplazado por el control DataGridView de formularios Windows Forms en
Visual Basic 2005. Los nombres de algunas propiedades, métodos, eventos y constantes son diferentes y, en algunos casos,
existen diferencias de comportamiento.
Diferencias conceptuales
Enlace de datos
El control DataGridView de Visual Basic 2005 no requiere métodos ni eventos específicos de datos, ya que todas las acciones
se realizan a través del origen de datos. Debido a esta separación de la presentación y la funcionalidad de los datos, el origen
de datos se puede cambiar con o sin entrada de interfaz de usuario. Asimismo, múltiples controles enlazados al mismo origen
de datos siempre permanecerán sincronizados.
Desplazamiento
Ya no son necesarias las propiedades para visualizar y desplazarse en el control DataGrid (como TabAction, EnterAction,
AllowArrows, WrapCellPointer y Scrollable). Por ejemplo, la cuadrícula funciona como si la propiedad Scrollable se
estableciese en True: si existen más datos que mostrar, aparece automáticamente una barra de desplazamiento. De manera
predeterminada, los desplazamientos por la cuadrícula siguen el modelo de Excel, es decir, el usuario se puede desplazar hacia
delante con la tecla TAB y hacia atrás con la combinación de teclas MAYÚS+TAB. Para obtener más información, vea
Control predeterminado de teclado y mouse (ratón) en el control DataGridView de formularios Windows Forms.
Propiedad Caption
En Visual Basic 6.0 la propiedad Caption se utilizaba para mostrar una barra de título sobre la cuadrícula; si se dejaba vacía, no
se mostraba ninguna barra de título.
El control DataGridView de Visual Basic 2005 no admite barra de título. Sin embargo, puede lograr el mismo efecto mediante
un control Label.
Formato de datos
En Visual Basic 6.0, el formato de datos en el control DataGrid se controla utilizando la propiedad DataFormat y un objeto
StdDataFormat. El formato se aplica columna por columna.
En el control DataGridView de Visual Basic 2005, el formato se realiza mediante la propiedad Format de un objeto
DataGridViewCellStyle. El formato se puede aplicar a celdas, columnas o filas individuales. Para obtener más información, vea
Formato de datos en el control DataGridView de formularios Windows Forms.
Propiedad hWndEditor
En Visual Basic 6.0, para pasar el identificador de ventana asignado a una ventana de edición del control DataGrid a una
llamada a la API de Windows se utiliza la propiedad hWndEditor.
El control DataGridView de Visual Basic 2005 no tiene un identificador de la ventana independiente en modo de edición; en
su lugar, utilice la propiedad Handle del control DataGridView o cualquier control de edición incrustado.
Propiedad MarqueeStyle
En Visual Basic 6.0, la propiedad MarqueeStyle controla el aspecto de una celda o fila seleccionada cambiando el estilo de
borde, invirtiendo los colores de primer plano y de fondo o invocando una ventana de edición.
No existe ningún equivalente directo del control DataGridView en Visual Basic 2005. Sin embargo, puede lograr el mismo
efecto utilizando una combinación de propiedades SelectionMode, CellBorderStyle y Format. Para obtener más información,
vea Modos de selección en el control DataGridView de formularios Windows Forms.
Propiedades SelLength, SelStart, SelText
En el control DataGrid de Visual Basic 6.0, cuando una celda pasa al modo de edición se pueden utilizar las propiedades
SelLength, SelStart y SelText para establecer la posición inicial del símbolo de intercalación o para resaltar una parte del
texto en la celda.
En el control DataGridView de Visual Basic 2005 ya no existen estas propiedades. Las celdas del control DataGridView se
basan en el control TextBox; si agrega código al controlador de eventos EditingControlShowing, se puede tener acceso a las
propiedades SelectionLength, SelectionStart y SelectedText del control subyacente.
Dividir vistas
El control DataGrid de Visual Basic 6.0 admite la división de vistas, que permite al usuario mostrar los mismos datos uno al
lado de otro. El objeto Split y las propiedades Split, Splits y TabAcrossSplits controlan esta capacidad de mostrar una vista
dividida.
En el control DataGridView de Visual Basic 2005 ya no existen estas propiedades. Sin embargo, puede lograr el mismo efecto
mediante uno o más controles SplitContainer y varios controles DataGridView. Para duplicar la funcionalidad de la propiedad
TabAcrossSplits, puede utilizar la propiedad StandardTab del control DataGridView.
Cambios de código para el control DataGrid
En el código siguiente se muestran las diferencias entre Visual Basic 6.0 y Visual Basic 2005 respecto al modo de resaltar texto
de una celda cuando un usuario selecciona la celda en un control DataGridView.

' Visual Basic 6.0


Private Sub DataGrid1_Click()
DataGrid1.SelStart = 1
DataGrid1.SelLength = DataGrid1.Text
MsgBox("The selected text is " & DataGrid1.SelText)
End Sub

VB
' Visual Basic 2005
Private Sub DataGridView1_EditingControlShowing( _
ByVal sender As Object, ByVal e As System.Windows.Forms. _
DataGridViewEditingControlShowingEventArgs) _
Handles DataGridView1.EditingControlShowing
CType(e.Control, TextBox).SelectionStart = 0
CType(e.Control, TextBox).SelectionLength = Len(CType(e.Control, _
TextBox).Text)
MsgBox("The selected text is " & CType(e.Control, _
TextBox).SelectedText)
End Sub

Equivalencias de propiedades, métodos y eventos del control DataGrid


En las siguientes tablas se enumeran propiedades, métodos y eventos de Visual Basic 6.0 con sus equivalentes en Visual Basic
2005. No se enumeran aquellas propiedades, métodos y eventos que tienen el mismo nombre y el mismo comportamiento.
Salvo que se indique lo contrario, todas las enumeraciones Visual Basic 2005 se asignan al espacio de nombres
System.Windows.Forms.
Esta tabla proporciona vínculos a temas que explican las diferencias de comportamiento. Cuando no hay equivalente directo en
Visual Basic 2005, se proporcionan vínculos a temas que presentan alternativas.
Propiedades
Visual Ba Equivalente en Visual Basic 2005
sic 6.0
AddNew Nueva implementación. Las operaciones de datos se controlan en el origen de datos. Para obtener más información
Mode , vea Mostrar datos en el control DataGridView de formularios Windows Forms.

Align Dock y Anchor

AllowAd AllowNew (BindingSource)


dNew

AllowArr Ya no es una propiedad que se pueda ajustar; siempre se permite el desplazamiento mediante flechas. Para obtener
ows más información, vea
Control predeterminado de teclado y mouse (ratón) en el control DataGridView de formularios Windows Forms.

AllowDel AllowRemove (BindingSource)


ete
AllowRo AllowUserToResizeRows
wSizing

AllowUp AllowEdit (BindingSource)


date

Appeara Nueva implementación. Para obtener más información, vea


nce Propiedades Appearance y BorderStyle para usuarios de Visual Basic 6.0.

ApproxC Nueva implementación. Las operaciones de datos se controlan en el origen de datos. Para obtener más información
ount , vea Mostrar datos en el control DataGridView de formularios Windows Forms.

BackCol BackgroundColor
or
Nota
Los colores se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Comportamiento del color para los usuarios de Visual Basic 6.0.

Bookmar Nueva implementación. Ahora se puede obtener acceso directamente a cualquier elemento.
k

Caption Nueva implementación. Utilice un control Label para simular una barra de título.

Col SelectedColumns

Column ColumnHeadersVisible
Headers

Containe Parent; se hereda de Control.


r

CurrentC IsCurrentCellDirty, IsCurrentCellInEditMode


ellModifi
ed

CurrentC CurrentCell
ellVisibl
e Nota
Si la propiedad CurrentCell se establece en una celda que no es visible, la cuadrícula se desplazará para mostrarl
a (similar a establecer CurrentCellVisible en True).

DataCha IsCurrentCellDirty, IsCurrentRowDirty


nged

DataFor Objeto DataGridViewCellStyle.


mats
Nota
El formato se puede establecer para una celda, columna o fila individuales.

DefColW Width Objeto DataGridViewColumn.


idth
DragIcon Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.
DragMo
de

EditActiv IsCurrentCellInEditMode
e
FirstRow FirstDisplayedScrollingRowIndex

Font Font
FontBold Nota
FontItali Las fuentes se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
c Control de fuentes para usuarios de Visual Basic 6.0.
FontNa
me
FontSize
FontStrik
ethroug
h
FontUnd
erline

ForeColo ForeColor
r
Nota
Los colores se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Comportamiento del color para los usuarios de Visual Basic 6.0.

HeadFon Objeto DataGridViewCellStyle.


t
Nota
Las fuentes se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Objeto Font para usuarios de Visual Basic 6.0.

HeadLin No hay equivalente directo. Utilice la propiedad WrapMode del objeto DataGridViewCellStyle en combinación co
es n la propiedad ColumnHeadersHeight.

Height Height, heredada de la clase Control.


Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

HelpCon Nueva implementación. Para obtener más información, vea


textID Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

hWnd Handle

hWndEdi Nueva implementación. Utilice Handle.


tor
Index Nueva implementación. Para obtener más información, vea Matrices de controles para usuarios de Visual Basic 6.0.

Left Left, heredada de la clase Control.


Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

LeftCol FirstDisplayedScrollingColumnIndex

Marquee No hay equivalente directo. Utilice las propiedades SelectionMode, CellBorderStyle y Format.
Style

RecordS RowHeadersVisible
electors

Row SelectedRows

RowDivi Propiedades GridColor, CellBorderStyle, RowHeadersBorderStyle, ColumnHeadersBorderStyle.


derStyle

RowHeig Height
ht

SelBook Nueva implementación. Ahora se puede obtener acceso directamente a cualquier elemento.
marks

SelEndC SelectedCells, SelectedColumns


ol
SelStartC
ol

SelLengt No hay equivalente directo. Utilice la propiedad SelectionLength en el controlador de eventos EditingControlSh
h owing.

SelStart No hay equivalente directo. Utilice la propiedad SelectionStart en el controlador de eventos EditingControlShow
ing.

SelText No hay equivalente directo. Utilice la propiedad SelectedText en el controlador de eventos EditingControlShowi
ng.

Split Nueva implementación. No se admite la división de vistas directamente; utilice un control SplitContainer.
Splits
TabAcros
sSplits

TabActio StandardTab
n

Tag Nueva implementación.


Text CurrentCell.Value
Nota
La propiedad Value devuelve Object; utilice CStr o ToString para convertirlo en String.

ToolTipT Componente ToolTip


ext
Para obtener más información, vea
Compatibilidad de la información sobre herramientas para usuarios de Visual Basic 6.0.

Top Top
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

VisibleC Método DisplayedColumnCount.


ols
Nota
En Visual Basic 6.0, las columnas parcialmente visibles siempre se incluyen en el recuento; el método DisplayedC
olumnCount utiliza un parámetro booleano includePartialColumns para determinar si se incluyen las columna
s parcialmente visibles.

VisibleR Método DisplayedRowCount.


ows
Nota
En Visual Basic 6.0, las filas parcialmente visibles siempre se incluyen en el recuento; el método DisplayedRowC
ount utiliza un parámetro booleano includePartialRows para determinar si se incluyen las filas parcialmente vis
ibles.

WhatsTh Nueva implementación. Para obtener más información, vea


isHelpID Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

Width Width, heredada de la clase Control.


Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

WrapCell Ya no es una propiedad que se pueda ajustar; el comportamiento predeterminado es WrapCellPointer = True.
Pointer
Métodos
Visual Basi Equivalente en Visual Basic 2005
c 6.0
CaptureIm Nueva implementación. No se admite la captura del contenido de un control DataGridView a un control Picture
age Box.

ClearField Nueva implementación. Cuando se vuelve a enlazar, el formato de columna es automático.


s
ClearSelCo ClearSelection
ls

ColContai IndexOf (DataGridViewColumnCollection)


ning

Drag Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.

GetBookm Nueva implementación. Los marcadores ya no se admiten.


ark

HoldFields Nueva implementación. Se conserva el formato de la columna al enlazar.

Move SetBounds, heredada de la clase Control.


Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

Rebind ResetBindings, heredada de la clase Control.

RowBook Nueva implementación. Los marcadores ya no se admiten.


mark

RowConta IndexOf (DataGridViewColumnCollection)


ining

RowTop GetContentBounds (DataGridViewCell)

Scroll Nuevo método de implementación. Utilice la propiedad CurrentCell.

SetFocus Focus

ShowWha Nueva implementación. Para obtener más información, vea


tsThis Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

SplitConta Nueva implementación. No se admite la división de vistas directamente; utilice un control SplitContainer.
ining

ZOrder Funciones BringToFront() o SendToBack()


Eventos
Visual Bas Equivalente en Visual Basic 2005
ic 6.0
AfterColE CellEndEdit
dit

AfterColU Nueva implementación. Las operaciones de datos se controlan en el origen de datos. Para obtener más informació
pdate n, vea Mostrar datos en el control DataGridView de formularios Windows Forms.
AfterDelet
e

AfterUpda RowsAdded
te
BeforeCol CellBeginEdit
Edit

BeforeCol Nueva implementación. Las operaciones de datos se controlan en el origen de datos. Para obtener más informació
Update n, vea Mostrar datos en el control DataGridView de formularios Windows Forms.
BeforeDel
ete
BeforeIns
ert
BeforeUp
date

ButtonClic Click (control Button)


k

Change TextChanged
Nota
El comportamiento del evento TextChanged es ligeramente diferente. Para obtener más información, vea
Evento de cambio de control ComboBox para usuarios de Visual Basic 6.0.

Click SelectedIndexChanged

ColEdit CellBeginEdit

ColResize ColumnWidthChanged

DblClick CellMouseDoubleClick

DragDrop Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.
DragOver

Error DataError

HeadClick ColumnHeaderMouseClick

MouseDo CellMouseDown
wn

MouseMo CellMouseMove
ve

MouseUp CellMouseUp
OLECompl Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.
eteDrag
OLEDragD
rop
OLEDragO
ver
OLEGiveFe
edback
OLESetDat
a
OLEStartD
rag

OnAddNe RowsAdded
w

RowColCh CurrentCellChanged
ange

RowResiz RowHeightChanged
e

SelChang SelectionChanged
e

SplitChan Nueva implementación. No se admite la división de vistas directamente; utilice un control SplitContainer.
ge

Validate Validating

Notas de la actualización
Cuando un proyecto Visual Basic 6.0 se actualiza a Visual Basic 2005, el evento Change del control DataGrid se asigna al
evento TextChanged del control DataGridView de Visual Basic 2005. El comportamiento del evento TextChanged difiere
del comportamiento del evento Change; esta diferencia puede provocar resultados inesperados en el código.
No se actualiza ningún código relacionado con métodos o eventos específicos de datos. Se agregan comentarios de
advertencia al código y se debe quitar o modificar el código antes de compilar la aplicación.
Vea también
Referencia
Información general del control DataGridView (Formularios Windows Forms)
Comparación de los controles y objetos programables de distintos lenguajes y bibliotecas
Conceptos
Resumen de tecnologías para el control DataGridView (formularios Windows Forms)
Lo nuevo en formularios Windows Forms y controles de formularios Windows Forms
Otros recursos
DataGridView (Control, formularios Windows Forms)
Controles de formularios Windows Forms para usuarios de Visual Basic 6.0
Enlace de datos en formularios Windows Forms
Conceptos de Visual Basic

Control DirListBox para usuarios de Visual Basic 6.0


El control DirListBox de Visual Basic 6.0 se ha quedado obsoleto en los componentes OpenFileDialog y SaveFileDialog de
Visual Basic 2005.
Diferencias conceptuales
El control DirListBox de Visual Basic 6.0 solía utilizarse para mostrar directorios y rutas de acceso en un cuadro de diálogo
Abrir archivo o Guardar.
En Visual Basic 2005, los componentes OpenFileDialog y SaveFileDialog de formularios Windows Forms permiten crear
cuadros de diálogo estándar de Windows para trabajar con archivos, por lo que en la mayoría de los casos el control
DirListBox ya no resulta necesario.
Nota
Se recomienda utilizar los componentes OpenFileDialog y SaveFileDialog porque les resultan familiares al usuario y son c
oherentes con su modo de trabajo. Si necesita crear cuadros de diálogo de archivo propios, Visual Basic 2005 proporciona u
n control DirListBox que forma parte de la biblioteca Microsoft Visual Basic Compatibility Runtime. Para obtener más infor
mación, vea Cómo: Agregar controles de sistema de archivos de Visual Basic 6.0 a una aplicación.

Notas de actualización
Cuando una aplicación de Visual Basic 6.0 se actualiza a Visual Basic 2005, todos los controles DirListBox existentes se
actualizan al control VB6.DirListBox, que se suministra como parte de la biblioteca Microsoft.VisualBasic.Compatibility.
Vea también
Tareas
Cómo: Agregar controles de sistema de archivos de Visual Basic 6.0 a una aplicación
Referencia
Información general sobre el componente OpenFileDialog (formularios Windows Forms)
Información general sobre el componente SaveFileDialog (formularios Windows Forms)
Conceptos de Visual Basic

Control DriveListBox para usuarios de Visual Basic 6.0


El control DriveListBox de Visual Basic 6.0 se ha quedado obsoleto en los componentes OpenFileDialog y SaveFileDialog de
Visual Basic 2005.
Diferencias conceptuales
El control DriveListBox de Visual Basic 6.0 se utilizaba normalmente para mostrar una lista de unidades en un cuadro de
diálogo Abrir archivo o Guardar archivo.
En Visual Basic 2005, los componentes OpenFileDialog y SaveFileDialog de formularios Windows Forms permiten crear
cuadros de diálogo estándar de Windows para trabajar con archivos, por lo que en la mayoría de los casos el control
DriveListBox ya no resulta necesario.
Nota
Los componentes OpenFileDialog y SaveFileDialog le resultan familiares al usuario y son coherentes con su modo de tra
bajo. Si necesita crear cuadros de diálogo de archivo propios, Visual Basic 2005 proporciona un control DriveListBox que fo
rma parte de la biblioteca Microsoft Visual Basic Compatibility Runtime. Para obtener más información, vea
Cómo: Agregar controles de sistema de archivos de Visual Basic 6.0 a una aplicación.

Notas de actualización
Cuando una aplicación de Visual Basic 6.0 se actualiza a Visual Basic 2005, todos los controles DriveListBox existentes se
actualizan al control VB6.DriveListBox, que forma parte de la biblioteca Microsoft.VisualBasic.Compatibility.
Vea también
Tareas
Cómo: Agregar controles de sistema de archivos de Visual Basic 6.0 a una aplicación
Referencia
Información general sobre el componente OpenFileDialog (formularios Windows Forms)
Información general sobre el componente SaveFileDialog (formularios Windows Forms)
Conceptos de Visual Basic

Control FileListBox para usuarios de Visual Basic 6.0


El control de Visual Basic 6.0 FileListBox ha pasado a ser obsoleto debido a los componentes OpenFileDialog y SaveFileDialog
de Visual Basic 2005.
Diferencias conceptuales
El control FileListBox de Visual Basic 6.0 solía utilizarse para seleccionar archivos en un cuadro de diálogo Abrir archivo o
Guardar archivo.
En Visual Basic 2005, los componentes OpenFileDialog y SaveFileDialog de los formularios Windows Forms proporcionan
la posibilidad de crear cuadros de diálogo estándar de Windows para trabajar con archivos, eliminando en la mayoría de los
casos la necesidad de utilizar el control FileListBox.
Nota
Recomendamos utilizar los componentes OpenFileDialog y SaveFileDialog para proporcionar una experiencia del usuario
coherente y familiar. Si considera que debe crear sus propios cuadros de diálogo de archivo, Visual Basic 2005 no proporcio
na un control FileListBox como parte de la biblioteca de compatibilidad en tiempo de ejecución de Microsoft Visual Basic. Pa
ra obtener más información, vea Cómo: Agregar controles de sistema de archivos de Visual Basic 6.0 a una aplicación.

Notas de actualización
Cuando se actualiza una aplicación de Visual Basic 6.0 a Visual Basic 2005, los controles FileListBox existentes se actualizan al
control VB6.FileListBox, que se proporciona como parte de la biblioteca Microsoft.VisualBasic.Compatibility.
Vea también
Tareas
Cómo: Agregar controles de sistema de archivos de Visual Basic 6.0 a una aplicación
Referencia
Información general sobre el componente OpenFileDialog (formularios Windows Forms)
Información general sobre el componente SaveFileDialog (formularios Windows Forms)
Conceptos de Visual Basic

Objeto Font para usuarios de Visual Basic 6.0


Visual Basic 6.0 proporciona dos maneras de establecer las propiedades de Font; en Visual Basic 2005 existe una clase Font
única.
Diferencias conceptuales
En Visual Basic 6.0, las propiedades de Font se pueden establecer por medio de un objeto stdFont, en lugar de establecer
directamente las propiedades. El objeto stdFont de Visual Basic 6.0 se reemplaza en Visual Basic 2005 por la clase Font; no
hay asignación directa de las propiedades y métodos. Para obtener más información, vea
Control de fuentes para usuarios de Visual Basic 6.0.
Vea también
Conceptos
Control de fuentes para usuarios de Visual Basic 6.0
Conceptos de Visual Basic

Objeto Form para usuarios de Visual Basic 6.0


El objeto Form de Visual Basic 6.0 se ha sustituido por la clase Form en Visual Basic 2005. Los nombres de algunas
propiedades, métodos, eventos y constantes son diferentes y, en algunos casos, existen diferencias de comportamiento.
Diferencias conceptuales
Activate y Deactivate (Eventos)
En Visual Basic 6.0, sólo se desencadenan los eventos Activate y Deactivate al cambiar entre los formularios.
En Visual Basic 2005, también se desencadenan los eventos Activated y Deactivate al cambiar de una aplicación a otra.
QueryUnload (Evento)
En Visual Basic 6.0, el evento QueryUnload toma dos argumentos, Cancel y UnloadMode. Al consultar el argumento
UnloadMode, puede determinar por qué se está descargando el formulario y cancelar la operación si fuera necesario.
En Visual Basic 2005, el evento QueryUnload se ha sustituido por el evento FormClosing , y UnloadMode se ha reemplazado
por CloseReason.
Picture (Propiedad)
En Visual Basic 6.0, una imagen asignada a la propiedad Picture se muestra en la esquina superior izquierda del formulario si
el mapa de bits es más pequeño que el formulario.
En Visual Basic 2005, la propiedad Picture se ha sustituido por la propiedad BackgroundImage; si la imagen asignada a la
propiedad BackgroundImage es más pequeña que el formulario, aparecerá como un mosaico de manera predeterminada.
Moveable (Propiedad)
En Visual Basic 6.0, la propiedad Moveable de un formulario puede definirse como False para evitar que el usuario mueva el
formulario en tiempo de ejecución. Los formularios Windows Forms no tienen una propiedad equivalente en Visual Basic
2005.
Aunque generalmente se considera un diseño de interfaz de usuario desaconsejable, puede obtener un comportamiento
similar en Visual Basic 2005 estableciendo la propiedad FormBorderStyle en None y la propiedad ControlBox en False.
ValidateControls (Método)
En Visual Basic 6.0, el método ValidateControls se utiliza para forzar el evento Validate del control que tiene el foco cuando
se cierra un formulario; si el evento Validate no se desencadena con éxito, se produce un error.
En Visual Basic 2005, el método ValidateControls se ha sustituido por el método Validate, que devuelve True o False.
Eventos del mouse para formularios MDI
En Visual Basic 6.0 los formularios MDI admiten eventos del mouse (ratón). En Visual Basic 2005, los eventos Click,
MouseDown, MouseMove y MouseUp ya no se admiten en los formulario MDI, ya que estos formularios carecen de área de
cliente para recibir eventos del mouse.
Cambios de código para el objeto Form
En los ejemplos siguientes se ilustran las diferencias que existen entre las técnicas de codificación de Visual Basic 6.0 y Visual
Basic 2005.
El código de modifica para determinar por qué se cierra un formulario
El código siguiente puede ayudarle a determinar por qué se cierra un formulario y cómo debe actuarse en función de la causa
por la que se haya cerrado. En el ejemplo de Visual Basic 6.0, se utiliza el argumento UnloadMode del evento QueryUnload.
En el ejemplo de Visual Basic 2005, el argumento se ha reemplazado por el parámetro CloseReason en el controlador de
eventos FormClosing.

' Visual Basic 6.0


Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
If UnloadMode = vbFormControlMenu Then
Cancel = True
End If
End Sub
VB
' Visual Basic 2005
Private Sub Form1_FormClosing(ByVal sender As System.Object, _
ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles _
MyBase.FormClosing
If e.CloseReason.UserClosing Then
e.Cancel = True
End If
End Sub

El código se modifica para validar un control en un formulario cerrado


El código siguiente muestra cómo se fuerza la validación del control que tiene el foco cuando el formulario se cierra. Este
ejemplo presupone que la propiedad CausesValidation del control TextBox se establece en el valor predeterminado, True.

' Visual Basic 6.0


Private Sub Text1_Validate(Cancel As Boolean)
If Text1.Text = "" Then
MsgBox ("Please enter a name")
Cancel = True
End If

Private Sub Form_Unload(Cancel As Integer)


OnError GoTo ERR_HANDLER
Me.ValidateControls

ERR_HANDLER:
' If validation failed cancel the Unload event.
If Err.Number = 380 Then
Cancel = True
End If
End Sub

VB
' Visual Basic 2005
Private Sub TextBox1_Validating(ByVal sender As Object, ByVal e As _
System.ComponentModel.CancelEventArgs) Handles TextBox1.Validating
If TextBox1.Text = "" Then
MsgBox("Please enter a name")
e.Cancel = True
End If
End Sub

VB
Private Sub Form1_FormClosing(ByVal sender As System.Object, ByVal e _
As System.Windows.Forms.FormClosingEventArgs) Handles _
MyBase.FormClosing
' If validation failed cancel the Closing event.
If Me.Validate = False Then
e.Cancel = True
End If
End Sub

Equivalencias de propiedades, métodos y eventos del objeto Form


En las siguientes tablas se enumeran propiedades, métodos y eventos de Visual Basic 6.0 con sus equivalentes en Visual Basic
2005. No se enumeran aquellas propiedades, métodos y eventos que tienen el mismo nombre y el mismo comportamiento.
Donde corresponde, las constantes aparecen con sangría debajo de la propiedad o método. Salvo que se indique lo contrario,
todas las enumeraciones de Visual Basic 2005 se asignan al espacio de nombres System.Windows.Forms.
Cuando es necesario, se proporcionan vínculos a temas que explican las diferencias de comportamiento. Cuando no existe un
equivalente directo en Visual Basic 2005, se proporcionan vínculos a temas en los que se incluyen alternativas.
Propiedades de Form
Visual Basic Equivalente en Visual Basic 2005
6.0
Appearance Nueva implementación. Para obtener más información, vea
Propiedades Appearance y BorderStyle para usuarios de Visual Basic 6.0.

AutoRedraw Nueva implementación. Para obtener más información, vea Gráficos para usuarios de Visual Basic 6.0.

BackColor BackColor
Nota
Los colores se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Comportamiento del color para los usuarios de Visual Basic 6.0.

BorderStyle FormBorderStyle

Caption Text

ClipControls Nueva implementación. Para obtener más información, vea Gráficos para usuarios de Visual Basic 6.0.

Controls Controls
Nota
Existen diferencias en la colección Controls de Visual Basic 2005. Para obtener más información, vea
Colección Controls para usuarios de Visual Basic 6.0.

Count Count
Nota
Existen diferencias en la colección Controls de Visual Basic 2005. Para obtener más información, vea
Controles de formularios Windows Forms para usuarios de Visual Basic 6.0.

CurrentX Nueva implementación. Para obtener más información, vea Gráficos para usuarios de Visual Basic 6.0.
CurrentY

DrawMode Nueva implementación. Para obtener más información, vea Gráficos para usuarios de Visual Basic 6.0.
DrawStyle
DrawWidth

FillColor Nueva implementación. Para obtener más información, vea Gráficos para usuarios de Visual Basic 6.0.
FillStyle
Font Font
FontBold Nota
FontItalic Las fuentes se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
FontName Objeto Font para usuarios de Visual Basic 6.0.
FontSize
FontStriketh
rough
FontUnderli
ne

ForeColor ForeColor
Nota
Los colores se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Comportamiento del color para los usuarios de Visual Basic 6.0.

HasDC Nueva implementación. Para obtener más información, vea Gráficos para usuarios de Visual Basic 6.0.

HDC Nueva implementación. Para obtener más información, vea Gráficos para usuarios de Visual Basic 6.0.

Height Height, Size


Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

HelpContext Nueva implementación. Para obtener más información, vea


ID Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

HWnd Handle

Image Nueva implementación. La propiedad Image en Visual Basic 6.0 devolvía un controlador a un mapa de bits; las i
mágenes en Visual Basic 2005 no tienen controladores.

Left Left
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

LinkMode No hay equivalente. Para obtener más información, vea


Intercambio dinámico de datos para usuarios de Visual Basic 6.0.
LinkTopic

MaxButton MaximizeBox
MDIChild MdiParent
Nota
El comportamiento de MDI es diferente en Visual Basic 2005. Para obtener más información, vea
MDI para usuarios de Visual Basic 6.0.

MinButton MinimizeBox

MouseIcon Nueva implementación. Para obtener más información, vea


No se puede personalizar la propiedad MousePointer.

MousePoint Cursor
er
Para obtener una lista de constantes, vea MousePointer para usuarios de Visual Basic 6.0.

Moveable Nueva implementación. Para obtener más información, vea


Propiedad Moveable para usuarios de Visual Basic 6.0.

Name Name

NegotiateM Nueva implementación. Para obtener más información, vea Objeto Menu para usuarios de Visual Basic 6.0.
enus

OLEDropMo Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0
de .

Palette Nueva implementación. Para obtener más información, vea Paletas para usuarios de Visual Basic 6.0.
PaletteMod
e

Picture BackgroundImage
Nota
En Visual Basic 6.0, Picture aparecía en la esquina superior izquierda del formulario; en Visual Basic 2005, Ba
ckgroundImage es en mosaico.

RightToLeft: RightToLeft
True Valor de la enumeración Yes
False

ScaleHeight Nueva implementación. Para obtener más información, vea


Sistema de coordenadas para usuarios de Visual Basic 6.0.
ScaleLeft
ScaleMode
ScaleTop
ScaleWidth
StartUpPosit StartPosition
ion:
Valor de la enumeración Manual
0 – Manual
Valor de la enumeración CenterParent
1 – CenterO
wner Valor de la enumeración CenterScreen

2 – CenterSc Valor de la enumeración WindowsDefaultLocation


reen
3 – Windows
Default

Top Top
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

WhatsThisB HelpButton
utton
Nota
Existen diferencias en el comportamiento de la Ayuda en Visual Basic 2005. Para obtener más información, ve
a Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

WhatsThisH Nueva implementación. Para obtener más información, vea


elp Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

Width Width, Size


Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

Métodos de Form
Visual Basic Equivalente en Visual Basic 2005
6.0
Circle Nueva implementación. Para obtener más información, vea Gráficos para usuarios de Visual Basic 6.0.

Cls Nueva implementación. Para obtener más información, vea Gráficos para usuarios de Visual Basic 6.0.

Line Nueva implementación. Para obtener más información, vea Gráficos para usuarios de Visual Basic 6.0.

Move SetBounds
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

OLEDrag Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0
.

PaintPicture Nueva implementación. Para obtener más información, vea Gráficos para usuarios de Visual Basic 6.0.
Point Nueva implementación. Para obtener más información, vea Gráficos para usuarios de Visual Basic 6.0.

PopupMenu Nueva implementación. Para obtener más información, vea Objeto Menu para usuarios de Visual Basic 6.0.

PrintForm Nueva implementación. Para obtener más información, vea Imprimir cambios para usuarios de Visual Basic 6.0.

Pset Nueva implementación. Para obtener más información, vea Gráficos para usuarios de Visual Basic 6.0.

Scale Nueva implementación. Para obtener más información, vea


Sistema de coordenadas para usuarios de Visual Basic 6.0.
ScaleX
ScaleY

SetFocus Activate

Show Show o ShowDialog

TextHeight Nueva implementación. Para obtener más información, vea Gráficos para usuarios de Visual Basic 6.0.

TextWidth Nueva implementación. Para obtener más información, vea Gráficos para usuarios de Visual Basic 6.0.

ValidateCon Validate
trols
Nota
El método Validate devuelve True o False; ValidateControls produce un error si la validación no se realiza
con éxito.

WhatsThisM Nueva implementación. Para obtener más información, vea


ode Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

ZOrder: Función BringToFront o SendToBack


0 – vbBringT BringToFront
oFront
SendToBack
1 - vbSendT
oBack
Eventos de Form
Visual B Equivalente en Visual Basic 2005
asic 6.0
Activate Activated
Nota
En Visual Basic 6.0, el evento Activate sólo se desencadena cuando se cambia entre los formularios de la aplicaci
ón; en Visual Basic 2005, el evento Activated también se desencadena cuando se cambia de una aplicación a otra.

Click Click
Nota
El evento Click no es compatible con los formularios MDI.

DblClick DoubleClick
Deactiva Deactivate
te
Nota
En Visual Basic 6.0, el evento Deactivate sólo se desencadena cuando se cambiaba entre los formularios de la apl
icación; en Visual Basic 2005, también se desencadena cuando se cambia de una aplicación a otra.

DragDro Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.
p
DragOve
r

GotFocu Enter
s

Initialize Método New


Nota
El comportamiento del método New es diferente del comportamiento del evento Initialize. Para obtener más inf
ormación, vea Tareas de formularios para usuarios de Visual Basic 6.0.

LinkClos No hay equivalente. Para obtener más información, vea


e Intercambio dinámico de datos para usuarios de Visual Basic 6.0.
LinkError
LinkExec
ute
LinkOpe
n

MouseD MouseDown
own
Nota
El evento MouseDown no es compatible con los formularios MDI.

MouseM MouseMove
ove
Nota
El evento MouseMove no es compatible con los formularios MDI.

MouseU MouseUp
p
Nota
El evento MouseUp no es compatible con los formularios MDI.
OLECom Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.
pleteDra
g
OLEDrag
Drop
OLEDrag
Over
OLEGive
Feedbac
k
OLESetD
ata
OLEStart
Drag

QueryUn FormClosing
load
Nota
En Visual Basic 6.0, QueryUnload toma dos argumentos, Cancel y UnloadMode. En Visual Basic 2005, Cancel se
ha reemplazado por Cancel, y UnloadMode se ha sustituido por CloseReason.

Terminat Método Dispose


e
Nota
El comportamiento del método Dispose es diferente del comportamiento del evento Terminate. Para obtener m
ás información, vea Eventos de formularios para usuarios de Visual Basic 6.0.

Unload FormClosing
Nota
El comportamiento del evento FormClosing es diferente del comportamiento del evento Unload. Para obtener
más información, vea Eventos de formularios para usuarios de Visual Basic 6.0.

Vea también
Conceptos
Tareas de formularios para usuarios de Visual Basic 6.0
Otros recursos
Formularios Windows Forms
Conceptos de Visual Basic

Colección Forms para usuarios de Visual Basic 6.0


En Visual Basic 2005, la propiedad My.Application.OpenForms (Propiedad) reemplaza a la colección Forms de Visual Basic 6.0.
Diferencias conceptuales
Una colección de Visual Basic 6.0 Forms es una colección cuyos elementos representan cada formulario cargado en una
aplicación. La colección incluye el formulario MDI de la aplicación, formularios MDI secundarios y formularios que no son MDI.
La colección Forms tiene una propiedad única, Count, que especifica el número de elementos de la colección.
La propiedad OpenForms de Visual Basic 2005 devuelve un objeto FormCollection que contiene todos los formularios abiertos
de la aplicación. El comportamiento es igual que el de la colección Forms y se puede utilizar de la misma manera.
Cambios de código para la colección Forms
Los ejemplos siguientes muestran las diferencias de las técnicas de codificación entre Visual Basic 6.0 y Visual Basic 2005.
Cambios de código para obtener un recuento de formularios abiertos
El código siguiente muestra cómo devolver el número de formularios abiertos actualmente en una aplicación.

' Visual Basic 6.0


MsgBox Forms.Count

VB
' Visual Basic 2005
MsgBox(CStr(My.Application.OpenForms.Count))

Cambios de código para establecer propiedades para todos los formularios abiertos
El código siguiente muestra cómo cambiar el título de los formularios abiertos en una aplicación.

' Visual Basic 6.0


For Each Form in Forms
Forms(i).Caption = "Hello"
Next

VB
' Visual Basic 2005
For Each f As Form In My.Application.OpenForms
f.Text = "Hello"
Next

Vea también
Tareas
Cómo: Obtener acceso a todos los formularios abiertos de una aplicación
Referencia
My.Application.OpenForms (Propiedad)
Conceptos
Objeto Form para usuarios de Visual Basic 6.0
Conceptos de Visual Basic

Control Frame para usuarios de Visual Basic 6.0


El control Frame de Visual Basic 6.0 se ha reemplazado por dos controles en Visual Basic 2005: el control GroupBox y el
control Panel.
Diferencias conceptuales
En Visual Basic 6.0, el control Frame se utilizaba como contenedor para agrupar controles. En Visual Basic 2005, el control
Frame se ha reemplazado por el control GroupBox o el control Panel.
El control GroupBox es el equivalente de un control Frame con la propiedad BorderStyle establecida en 1 – Fixed Single.
Tiene un borde visible y, opcionalmente, un título.
El control Panel es el equivalente de un control Frame con la propiedad BorderStyle establecida en 0 – None. No tiene borde
ni título.
Asimismo, hay numerosas diferencias conceptuales que se aplican a todos los controles, como diferencias en los enlaces de
datos, control de fuentes, arrastrar y colocar, compatibilidad con Ayuda, y otras. Para obtener más información, vea
Controles de formularios Windows Forms para usuarios de Visual Basic 6.0.
Equivalencias de propiedades, métodos y eventos del control Frame
En las siguientes tablas se enumeran propiedades, métodos y eventos de Visual Basic 6.0 con sus equivalentes en Visual Basic
2005. No se enumeran aquellas propiedades, métodos y eventos que tienen el mismo nombre y el mismo comportamiento.
Donde corresponde, las constantes aparecen con sangría debajo de la propiedad o método. Salvo que se indique lo contrario,
todas las enumeraciones de Visual Basic 2005 se asignan al espacio de nombres System.Windows.Forms.
Cuando es necesario, se proporcionan vínculos a temas que explican las diferencias de comportamiento. Cuando no existe un
equivalente directo en Visual Basic 2005, se proporcionan vínculos a temas en los que se incluyen alternativas.
Propiedades de Frame
Visual Basic Equivalente en Visual Basic 2005
6.0
Appearance FlatStyle (sólo el control GroupBox)

BackColor BackColor
Nota
Los colores se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Comportamiento del color para los usuarios de Visual Basic 6.0.

BorderStyle BorderStyle (sólo el control GroupBox)

Caption Text (sólo el control GroupBox)


Nota
El control Panel no incluye una propiedad Text.

ClipControls Nueva implementación. Para obtener más información, vea Gráficos para usuarios de Visual Basic 6.0.

Container Parent

DragIcon Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.
DragMode
Font Font
FontBold Nota
FontItalic
Las fuentes se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
FontName Objeto Font para usuarios de Visual Basic 6.0.
FontSize
FontStriketh
rough
FontUnderli
ne

ForeColor ForeColor
Nota
Los colores se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Comportamiento del color para los usuarios de Visual Basic 6.0.

Height Height, Size


Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

HelpContex Nueva implementación. Para obtener más información, vea


tID Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

HWnd Handle

Index Nueva implementación. Para obtener más información, vea


Matrices de controles para usuarios de Visual Basic 6.0.

Left Left
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

MouseIcon Nueva implementación. Para obtener más información, vea


No se puede personalizar la propiedad MousePointer.

MousePoint Cursor
er
Para obtener una lista de constantes, vea MousePointer para usuarios de Visual Basic 6.0.

OLEDropMo Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.
de

Parent Método FindForm

RightToLeft RightToLeft
ToolTipText Componente ToolTip
Para obtener más información, vea
Compatibilidad de la información sobre herramientas para usuarios de Visual Basic 6.0.

Top Top
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

WhatsThisH Nueva implementación. Para obtener más información, vea


elpID Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

Width Width, Size


Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

Métodos de Frame
Visual Basi Equivalente en Visual Basic 2005
c 6.0
Drag Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.

Move SetBounds
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

OLEDrag Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.

ShowWha Nueva implementación. Para obtener más información, vea


tsThis Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

ZOrder Función BringToFront o SendToBack


Eventos de Frame
Visual Basic 6.0 Equivalente en Visual Basic 2005
Click Click (sólo Panel; GroupBox no tiene equivalente)

DblClick DoubleClick (sólo Panel; GroupBox no tiene equivalente)


DragDrop Nueva implementación. Para obtener más información, vea
Arrastrar y colocar para usuarios de Visual Basic 6.0.
DragOver
OLECompleteDra
g
OLEDragDrop
OLEDragOver
OLEGiveFeedbac
k
OLESetData
OLEStartDrag

Notas de actualización
Cuando una aplicación de Visual Basic 6.0 se actualiza a Visual Basic 2005, los controles Frame que tienen la propiedad
BorderStyle establecida en 0 - None se actualizan a los controles Panel; todos los controles Frame restantes se actualizan a
controles GroupBox.
Vea también
Referencia
Información general sobre el control GroupBox (formularios Windows Forms)
Conceptos
Introducción al control Panel
Conceptos de Visual Basic

Control HScrollBar para usuarios de Visual Basic 6.0


El control HScrollBar de Visual Basic 6.0 se ha reemplazado por el control HScrollBar de formularios Windows Forms en
Visual Basic 2005. Los nombres de algunas propiedades, métodos, eventos y constantes son diferentes y, en algunos casos,
existen diferencias de comportamiento.
Diferencias conceptuales
Evento Change
En Visual Basic 6.0, cuando se cambia la propiedad Value de un control HScrollBar, se produce el evento Change.
En Visual Basic 2005, no se produce el evento Change, si no el evento ValueChanged.
Value (Propiedad)
En Visual Basic 6.0, cuando se produce el evento Scroll o Change de un control HScrollBar, el valor de desplazamiento actual
se asigna a la propiedad Value.
Cuando se produce el evento Scroll o ValueChanged en Visual Basic 2005, no se ha actualizado todavía la propiedad Value
del control. Si necesita emular el comportamiento de Visual Basic 6.0, puede crear una función auxiliar para recuperar el valor.
Para obtener más información, vea El código ha cambiado de un evento a un procedimiento.
Propiedad LargeChange
En Visual Basic 6.0, la propiedad LargeChange determina la cantidad de cambio en el valor de la propiedad Value de un
control de barra de desplazamiento cuando el usuario hace clic en el área entre el cuadro y la flecha de desplazamiento.
En Visual Basic 2005, el valor predeterminado de la propiedad LargeChange es 10; en Visual Basic 6.0 es 1.
Propiedad Max
En Visual Basic 6.0, la propiedad Max determina el valor máximo de la propiedad Value en un control de barra de
desplazamiento.
En Visual Basic 2005, la propiedad Maximum reemplaza a la propiedad Max; el valor predeterminado es 100, en Visual Basic
6.0 e 32767.
Propiedad Min
En Visual Basic 6.0, la propiedad Min determina el valor mínimo de la propiedad Value en un control de barra de
desplazamiento. La propiedad Min se puede establecer en un valor superior al de la propiedad Max.
En Visual Basic 2005, la propiedad Minimum reemplaza a la propiedad Min, este valor debe ser siempre inferior al de la
propiedad Maximum.
Otras diferencias
Asimismo, hay numerosas diferencias conceptuales que se aplican a todos los controles, incluidas las diferencias en los enlaces
de datos, control de fuentes, funcionalidad de arrastrar y colocar, compatibilidad con Ayuda y otras.
Equivalencias de propiedad, método y evento del control HScrollBar
En las siguientes tablas se enumeran propiedades, métodos y eventos de Visual Basic 6.0 con sus equivalentes en Visual Basic
2005. No se enumeran aquellas propiedades, métodos y eventos que tienen el mismo nombre y el mismo comportamiento.
Donde corresponde, las constantes aparecen con sangría debajo de la propiedad o método. Salvo que se indique lo contrario,
todas las enumeraciones de Visual Basic 2005 se asignan al espacio de nombres System.Windows.Forms.
Se proporcionan los vínculos necesarios para explicar las diferencias de comportamiento. Cuando no hay equivalente directo
en Visual Basic 2005, se proporcionan vínculos a temas que presentan alternativas.
Propiedades de HScrollBar
Visual Bas Equivalente de Visual Basic 2005
ic 6.0
Container Parent
DragIcon Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.
DragMod
e

Height Height, Size


Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

HelpCont Nueva implementación. Para obtener más información, vea


extID Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

HWnd Handle

Index Nueva implementación. Para obtener más información, vea Matrices de controles para usuarios de Visual Basic 6.0
.

LargeCha LargeChange
nge
Nota
El valor predeterminado en Visual Basic 6.0 era 1; en Visual Basic 2005, es 10.

Left Left
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

Max Maximum
Nota
El valor predeterminado en Visual Basic 6.0 era 32767; en Visual Basic 2005, es 100.

Min Minimum
Nota
En Visual Basic 6.0, se puede establecer Min en un valor superior a Max; en Visual Basic 2005, la propiedad Min
imum no se puede establecer en un valor superior a la propiedad Maximum.

MouseIco Nueva implementación. Para obtener más información, vea No se puede personalizar la propiedad MousePointer.
n

MousePoi Cursor
nter
Para obtener una lista de constantes, vea MousePointer para usuarios de Visual Basic 6.0.

Parent Método FindForm


RightToLe RightToLeft
ft:
Valor de la enumeración Yes
True
Valor de la enumeración No
False

Top Top
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

Value Value
Nota
En Visual Basic 6.0, cuando se cambia Value, se produce el evento Change. En Visual Basic 2005, no se produce
el evento Change, utilice en su lugar el evento ValueChanged.

WhatsThi Nueva implementación. Para obtener más información, vea


sHelpID Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

Width Width, Size


Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

Métodos de HScrollBar
Visual Basic Equivalente de Visual Basic 2005
6.0
Drag Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0
.

Move SetBounds
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

SetFocus Focus

ShowWhatsT Nueva implementación. Para obtener más información, vea


his Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

ZOrder: Función de BringToFront o SendToBack


0 – vbBringT BringToFront
oFront
SendToBack
1 - vbSendT
oBack
Eventos de HScrollBar
Visual Ba Equivalente de Visual Basic 2005
sic 6.0
Change ValueChanged
Nota
El comportamiento de los eventos Change y Scroll ha cambiado en Visual Basic 2005. Para obtener más informa
ción, vea El código ha cambiado de un evento a un procedimiento.

DragDro Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.
p
DragOver

GotFocus Enter

LostFocu Leave
s

Scroll Scroll
Nota
El comportamiento de los eventos Change y Scroll ha cambiado en Visual Basic 2005. Para obtener más informa
ción, vea El código ha cambiado de un evento a un procedimiento.

Validate Validating

Notas de actualización
Cuando se actualiza una aplicación de Visual Basic 6.0 a Visual Basic 2005, cualquier código de los controladores de eventos
Change o Scroll para los controles HScrollBar o VScrollBar se cambia a un procedimiento debido a una diferencia en la
secuencia de eventos. Para obtener más información, vea El código ha cambiado de un evento a un procedimiento.
Vea también
Referencia
Introducción a los controles HScrollBar y VScrollBar (formularios Windows Forms)
Conceptos de Visual Basic

Control Image para usuarios de Visual Basic 6.0


El control Image de Visual Basic 6.0 no tiene ningún equivalente directo en Visual Basic 2005. El control Image es un control
ligero; Visual Basic 2005 no admite los controles ligeros.
Actualizar la propiedad Stretch
Las propiedades, métodos y eventos del control Image son un subconjunto de los del control PictureBox (con la excepción de
la propiedad Stretch). Para obtener más información, vea Control PictureBox para usuarios de Visual Basic 6.0.
La tabla siguiente muestra la asignación entre la propiedad Stretch y el equivalente para el control PictureBox de Visual Basic
2005.
Equivalentes de la propiedad Stretch
Visual Basic 6.0 Equivalente de Visual Basic 2005
Stretch False PictureBoxSizeMode Normal

Stretch True PictureBoxSizeMode StretchImage

Notas de actualización
Cuando se actualiza una aplicación de Visual Basic 6.0 a Visual Basic 2005, cualquier control Image se actualiza a un control
PictureBox.
Vea también
Referencia
Información general del control PictureBox (Formularios Windows Forms)
Conceptos
Control PictureBox para usuarios de Visual Basic 6.0
Conceptos de Visual Basic

Control ImageList para usuarios de Visual Basic 6.0


El control ImageList de Visual Basic 6.0 se ha reemplazado por el componente ImageList de formularios Windows Forms en
Visual Basic 2005. Los nombres de algunas propiedades, métodos, eventos y constantes son diferentes y, en algunos casos,
existen diferencias de comportamiento.
Diferencias conceptuales
BackColor
En Visual Basic 6.0, el control ImageList tiene una propiedad BackColor; no obstante, no tiene ningún efecto porque el control
no está visible durante la ejecución.
En Visual Basic 2005, el nuevo componente ImageList ya no admite la propiedad BackColor.
Propiedades Left y Top
En Visual Basic 6.0, el control ImageList tiene las propiedades Left y Top, que establecen la ubicación del control en un
formulario.
En Visual Basic 2005, el componente ImageList se ubica en la Bandeja de componentes, en lugar de hacerlo en el
formulario; como tal no son necesarias las propiedades Left o Top.
Propiedad UseMaskColor
En Visual Basic 6.0, la propiedad UseMaskColor determina si el color asignado en la propiedad MaskColor se utiliza de
máscara.
En Visual Basic 2005, el componente ImageList ya no tiene la propiedad UseMaskColor y la propiedad TransparentColor
reemplaza la propiedad MaskColor. Para impedir que se utilice de máscara el color definido en la propiedad
TransparentColor, establézcalo en Color.Transparent.
Método Overlay
En Visual Basic 6.0, el método Overlay de un control ImageList permite crear una tercera imagen compuesta de dos objetos
ListImage. Por ejemplo, podría definir una máscara para una imagen de forma que parte de la segunda imagen sea
transparente.
En Visual Basic 2005, el componente ImageList ya no es compatible con el método Overlay. Para lograr el mismo efecto
tendrá que crear la imagen compuesta mediante un programa de gráficos y después agregar esa imagen al objeto ImageList..
Cambios en el código del control ImageList
En los ejemplos siguientes se muestran las diferencias que existen entre las técnicas de codificación de Visual Basic 6.0 y Visual
Basic 2005.
Cambios en el código para establecer MaskColor
En el código siguiente se muestra cómo especificar el color que se va a utilizar de máscara, y cómo activarlo y desactivarlo.

' Visual Basic 6.0


' Specify the color to be used as a mask.
ImageList1.MaskColor = vbWhite
' Use the mask.
ImageList1.UseMaskColor = True
' Don't use the mask.
ImageList1.UseMaskColor = False

VB
' Visual Basic 2005
' Specify the color to be used as a mask and use the mask.
ImageList1.TransparentColor = Color.White
' Don't use the mask.
ImageList1.TransparentColor = Color.Transparent
Equivalencias de propiedades y métodos del control ImageList
En las siguientes tablas se enumeran propiedades y métodos de Visual Basic 6.0 junto con sus equivalentes en Visual Basic
2005. No se enumeran aquellas propiedades y métodos que tienen el mismo nombre y comportamiento. Salvo que se indique
lo contrario, todas las enumeraciones de Visual Basic 2005 se asignan al espacio de nombres System.Windows.Forms.
Esta tabla proporciona vínculos a temas en los que se explican las diferencias de comportamiento. Cuando no existe un
equivalente directo en Visual Basic 2005, se proporcionan vínculos a temas en los que se incluyen alternativas.
Propiedades
Visual Basic 6. Equivalente en Visual Basic 2005
0
BackColor Nueva implementación. ImageList es un componente.

hImageList Handle

ImageHeight ImageSize
ImageWidth

Index Nueva implementación. Para obtener más información, vea


Matrices de controles para usuarios de Visual Basic 6.0.

Left Nueva implementación. ImageList es un componente.

ListImage Image (clase ImageCollection)

ListImages ImageCollection

MaskColor TransparentColor

Parent Método FindForm

Top Nueva implementación. ImageList es un componente.

UseMaskColor Nueva implementación. Establezca TransparentColor en Transparent.


Métodos
Name Equivalente en Visual Basic 2005
Overlay Nueva implementación.

Notas de actualización
Cuando se actualiza un proyecto de Visual Basic 6.0 a Visual Basic 2005, se actualizan todos los controles ImageList a
componentes ImageList de formularios Windows Forms. Cuando las propiedades, métodos y eventos no tienen ningún
equivalente o tienen diferencias en comportamiento, se agregarán notas o advertencias de actualización al código.
Vea también
Referencia
Información general sobre el componente ImageList (formularios Windows Forms)
Otros recursos
ImageList (Componente, formularios Windows Forms)
Conceptos de Visual Basic

Control Label para usuarios de Visual Basic 6.0


En este tema se compara el control de Visual Basic 6.0 Label con su equivalente en Visual Basic 2005.
El control Label de Visual Basic 6.0 se ha reemplazado por el control Label de formularios Windows Forms en Visual Basic
2005. Los nombres de algunas propiedades, métodos, eventos y constantes son diferentes y, en algunos casos, existen
diferencias de comportamiento.
Diferencias conceptuales
Propiedad BackStyle
En Visual Basic 6.0 la propiedad BackStyle del control Label determina si la etiqueta tiene un fondo transparente. Si se
establece la propiedad BackStyle en 0 – Transparent, se permite que la imagen de fondo sea visible a través de la etiqueta. Si
la etiqueta se coloca sobre otros controles, los controles también se transparentan.
En Visual Basic 2005, la propiedad BackStyle ya no existe y el comportamiento de la transparencia es ligeramente diferente.
Para emular el comportamiento transparente en Visual Basic 2005, establezca la propiedad BackColor en Transparent. Esto
permitirá que se transparente a la imagen de fondo. Si la etiqueta se coloca sobre otros controles, los controles sólo se
transparentarán si son más altos en el orden z.
Nota
El método ZOrder ya no existe en Visual Basic 2005. En tiempo de diseño, puede utilizar el comando Traer al frente o Envia
r al fondo del menú Formato; en tiempo de ejecución, puede utilizar la función BringToFront o SendToBack.

Propiedad WordWrap
En Visual Basic 6.0, la propiedad WordWrap determina si el texto se ajusta en varias líneas cuando es demasiado largo para
ajustarse en una etiqueta.
En Visual Basic 2005, el texto de un control Label se ajusta automáticamente. La única manera de evitar el ajuste es hacer que
el alto del control Label sea equivalente a una única línea de texto.
Otras diferencias
Asimismo, hay numerosas diferencias conceptuales que se aplican a todos los controles, incluidas las diferencias en los enlaces
de datos, control de fuentes, funcionalidad de arrastrar y colocar, compatibilidad con Ayuda y otras. Para obtener más
información, vea Conceptos de formularios Windows Forms para usuarios de Visual Basic 6.0.
Cambios de código para el control Label
Los siguientes ejemplos de código ilustran las diferencias en las técnicas de codificación entre Visual Basic 6.0 y Visual Basic
2005.
Cambios de código para que se transparente una etiqueta
El ejemplo siguiente muestra cómo se puede hacer para que se transparente el fondo de un control de etiqueta. En Visual Basic
6.0, si hay otros controles detrás de Label, esos controles se transparentan. En el ejemplo de Visual Basic 2005, cualquier
control detrás de Label se puede hacer transparente opcionalmente mediante las funciones BringToFront y SendToBack.

' Visual Basic 6.0


Private Sub MakeTransparent()
Label1.BackStyle = vbTransparent
End Sub

VB
' Visual Basic 2005
Private Sub MakeTransparent()
Label1.BackColor = System.Drawing.Color.Transparent
' Let controls behind the label show through.
Label1.SendToBack()
' Make the portion of controls behind the label transparent
Label1.BringToFront()
End Sub
Equivalencias de propiedad, método y evento del control Label
En las siguientes tablas se enumeran propiedades, métodos y eventos de Visual Basic 6.0 con sus equivalentes en Visual Basic
2005. No se enumeran aquellas propiedades, métodos y eventos que tienen el mismo nombre y el mismo comportamiento.
Donde corresponde, las constantes aparecen con sangría debajo de la propiedad o método. Salvo que se indique lo contrario,
todas las enumeraciones de Visual Basic 2005 se asignan al espacio de nombres System.Windows.Forms.
Esta tabla proporciona vínculos necesarios a temas que explican las diferencias de comportamiento. Cuando no hay
equivalente directo en Visual Basic 2005, se proporcionan vínculos a otras alternativas.
Propiedades de Label
Visual Basic Equivalente de Visual Basic 2005
6.0
Alignment: TextAlign
0 - Left Justi Valor de la enumeración MiddleLeft
fy
Valor de la enumeración MiddleRight
1 - Right Jus
tify

Appearance Nueva implementación. Para obtener más información, vea


Propiedades Appearance y BorderStyle para usuarios de Visual Basic 6.0.

AutoSize AutoSize

BackColor BackColor
Note Para obtener una lista de constantes, vea Control del color para usuarios de Visual Basic 6.0.
Nota
Los colores se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Comportamiento del color para los usuarios de Visual Basic 6.0.

BackStyle Nueva implementación. Para obtener más información, vea Diferencias conceptuales anteriormente.

Caption Text

Container Parent

DataChange Nueva implementación. Para obtener más información, vea Acceso a datos para usuarios de Visual Basic 6.0.
d
DataField
DataFormat
DataMembe
r
DataSource

DragIcon Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.
DragMode
Font Font
FontBold Nota Las fuentes se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Control de fuentes para usuarios de Visual Basic 6.0.
FontItalic
FontName
FontSize
FontStriketh
rough
FontUnderli
ne

ForeColor ForeColor
Nota
Para obtener una lista de constantes, vea Control del color para usuarios de Visual Basic 6.0.

Nota
Los colores se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Comportamiento del color para los usuarios de Visual Basic 6.0.

Height Height, Size


Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

Index Nueva implementación. Para obtener más información, vea


Matrices de controles para usuarios de Visual Basic 6.0.

Left Left
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

LinkItem No hay equivalente. Para obtener más información, vea


Intercambio dinámico de datos para usuarios de Visual Basic 6.0.
LinkMode
LinkTimeOu
t
LinkTopic

MouseIcon Nueva implementación. Para obtener más información, vea


No se puede personalizar la propiedad MousePointer.

MousePoint Cursor
er
Para obtener una lista de constantes, vea MousePointer para usuarios de Visual Basic 6.0.
OLEDropMo Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.
de

Parent Método FindForm

RightToLeft: RightToLeft
True Valor de la enumeración Yes
False Valor de la enumeración No

ToolTipText Componente ToolTip


Para obtener más información, vea
Compatibilidad de la información sobre herramientas para usuarios de Visual Basic 6.0.

Top Top
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

WhatsThisH Nueva implementación. Para obtener más información, vea


elpID Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

Width Width, Size


Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

WordWrap Nueva implementación.


Nota
El texto del control Label en Visual Basic 2005 se ajusta de manera predeterminada y no se puede cambiar.

Métodos de Label
Visual Basic Equivalente de Visual Basic 2005
6.0
Drag Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0
.

LinkExecute No hay equivalente. Para obtener más información, vea


Intercambio dinámico de datos para usuarios de Visual Basic 6.0.
LinkPoke
LinkRequest
LinkSend

Move SetBounds
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.
OLEDrag Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0
.

ShowWhatsT Nueva implementación. Para obtener más información, vea


his Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

ZOrder: Método BringToFront o SendToBack


0 – vbBringT BringToFront
oFront
SendToBack
1 - vbSendT
oBack
Eventos de Label
Visual Basic 6.0 Equivalente de Visual Basic 2005
Change TextChanged

DblClick DoubleClick

DragDrop Nueva implementación. Para obtener más información, vea


Arrastrar y colocar para usuarios de Visual Basic 6.0.
DragOver

LinkClose No hay equivalente. Para obtener más información, vea


Intercambio dinámico de datos para usuarios de Visual Basic 6.0.
LinkError
LinkNotify
LinkOpen

OLECompleteDr Nueva implementación. Para obtener más información, vea


ag Arrastrar y colocar para usuarios de Visual Basic 6.0.
OLEDragDrop
OLEDragOver
OLEGiveFeedba
ck
OLESetData
OLEStartDrag

Notas de actualización
Cuando se actualiza una aplicación de Visual Basic 6.0 a Visual Basic 2005, los controles Label se actualizan a los controles
Label de formularios Windows Forms, y las propiedades, métodos y eventos se actualizan a sus equivalentes. Donde puede
haber diferencias en el comportamiento, se insertan comentarios de actualización en el código.
Vea también
Conceptos
Introducción al control Label
Conceptos de Visual Basic

Control Line para usuarios de Visual Basic 6.0


El control Line de Visual Basic 6.0 no tiene ningún equivalente en Visual Basic 2005. Sin embargo, puede utilizar métodos
gráficos para obtener los mismos resultados.
Diferencias conceptuales
En Visual Basic 6.0, el control Line proporciona una medio sencillo para dibujar líneas en un formulario en tiempo de diseño. El
control Line es un "control ligero", es decir, no tiene un identificador de Windows, lo que también se denomina HWnd.
En Visual Basic 2005, no existe ningún equivalente para el control Line y ya no se admiten controles ligeros. Sin embargo,
existen modos para dibujar líneas en un formulario tanto en tiempo de diseño como en tiempo de ejecución.
En tiempo de diseño, para dibujar una línea vertical u horizontal en un formulario, puede agregar un control Label y establecer
la propiedad Text en una cadena vacía, la propiedad BorderStyle en None y la propiedad Width o Height en 1.
En tiempo de ejecución, para dibujar líneas verticales, horizontales o diagonales en un controlador de eventos Paint de un
formulario, puede crear un nuevo objeto Graphics y llamar a sus métodos.
En Visual Basic 6.0, puede utilizar un control Line para dibujar una línea en la parte superior de un control contenedor, como
un control PictureBox o Frame y agregar un control Line al contenedor.
En Visual Basic 2005, puede conseguir el mismo efecto llamando al método DrawLine en el evento Paint del control
contenedor.
Cambios de código para el control Line
En los ejemplos siguientes se ilustran las diferencias que existen entre las técnicas de codificación de Visual Basic 6.0 y Visual
Basic 2005.
Dibujar líneas horizontales o verticales
El código siguiente muestra cómo se dibujan líneas horizontales y verticales en un formulario en tiempo de ejecución. En el
ejemplo de Visual Basic 6.0, se utiliza el control Line; se presupone que los dos controles Line se han agregado en tiempo de
diseño. El ejemplo de Visual Basic 2005 muestra dos métodos que utilizan un control Label y los métodos Graphics.
Nota
Mientras que en Visual Basic 6.0 la unidad de medida predeterminada eran los twips, en Visual Basic 2005 son los píxeles.

' Visual Basic 6.0


Private Sub Form_Load()
' Draw a horizontal line 200 twips from the top of the form.
Line1.X1 = 0
Line1.X2 = Me.Width
Line1.Y1 = 200
Line1.Y2 = 200
Line1.BorderColor = vbRed
Line1.BorderWidth = 1
' Draw a vertical line 200 twips from the left of the form.
Line1.Y1 = 0
Line1.Y2 = Me.Height
Line1.X1 = 200
Line1.X2 = 200
Line1.BorderColor = vbBlue
Line1.BorderWidth = 1

VB
' Visual Basic 2005
' Using Label controls.
Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
Dim Line1 As New System.Windows.Forms.Label
Dim Line2 As New System.Windows.Forms.Label
' Draw a horizontal line 14 pixels from the top of the form.
Line1.Location = New System.Drawing.Point(0, 14)
Line1.Size = New System.Drawing.Size(Me.Width, 1)
Line1.BorderStyle = BorderStyle.None
Line1.BackColor = System.Drawing.Color.Red
Line1.Text = ""
Controls.Add(Line1)
' Draw a vertical line 14 pixels from the left of the form.
Line2.Location = New System.Drawing.Point(14, 0)
Line2.Size = New System.Drawing.Size(1, Me.Height)
Line2.BorderStyle = BorderStyle.None
Line2.BackColor = System.Drawing.Color.Blue
Line2.Text = ""
Controls.Add(Line2)
End Sub

VB
' Visual Basic 2005
' Using Graphics methods
Private Sub Form1Paint(ByVal sender As Object, _
ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
' Draw a horizontal line 28 pixels from the top of the form.
e.Graphics.DrawLine(Pens.Red, 0, 28, Me.Width, 28)
' Draw a vertical line 28 pixels from the left of the form.
e.Graphics.DrawLine(Pens.Blue, 28, 0, 28, Me.Height)
End Sub

Dibujar una línea diagonal


El código siguiente muestra cómo se dibuja una línea diagonal en un formulario en tiempo de ejecución. En el ejemplo de
Visual Basic 6.0, se utiliza el control Line; se presupone se ha agregado un control Line en tiempo de diseño. El ejemplo de
Visual Basic 2005 utiliza métodos Graphics.
Nota
Mientras que en Visual Basic 6.0 la unidad de medida predeterminada eran los twips, en Visual Basic 2005 son los píxeles.

' Visual Basic 6.0


Private Sub Form_Load()
' Draw a diagonal line from the top left to the lower right.
Line1.X1 = 0
Line1.X2 = Me.ScaleWidth
Line1.Y1 = 0
Line1.Y2 = Me.ScaleHeight
Line1.BorderColor = vbBlack
Line1.BorderWidth = 1
End Sub

VB
' Visual Basic 2005
Private Sub FormPaint(ByVal sender As Object, _
ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
' Draw a diagonal line from the top left to the lower right.
e.Graphics.DrawLine(Pens.Black, 0, 0, Me.ClientSize.Width, _
Me.ClientSize.Height)
End Sub

Notas de actualización
Cuando una aplicación de Visual Basic 6.0 se actualiza a Visual Basic 2005, los controles Line horizontales y verticales se
reemplazan por el control Label de formularios Windows Forms, por la propiedad Text establecida en una cadena vacía, la
propiedad BorderStyle establecida en None y las propiedades BackColor, Width y Height establecidas para que coincidan
con el control original.
Los controles Line que no sean verticales u horizontales no se actualizan. Puede reemplazar el control Line mediante las
funciones Graphics integradas en .NET Framework.
Vea también
Conceptos
Gráficos para usuarios de Visual Basic 6.0
Conceptos de Visual Basic

Control ListBox para usuarios de Visual Basic 6.0


El control ListBox de Visual Basic 6.0 se ha reemplazado por el control ListBox o el control CheckedListBox en Visual Basic
2005. Los nombres de algunas propiedades, métodos, eventos y constantes son diferentes y, en algunos casos, existen
diferencias de comportamiento.
Diferencias conceptuales
ListBox activado
En Visual Basic 6.0, la propiedad Style de un control ListBox determina si aparece una casilla de verificación junto a cada
elemento de texto. Se pueden seleccionar varios elementos en ListBox aunque la propiedad MultiSelect esté establecida en
False; para ello, debe activarse la casilla de verificación situada junto a estos elementos. No existe modo alguno de determinar
mediante programación el estado de activación de un elemento; si necesita esta funcionalidad, deberá utilizar el control
ListView.
En Visual Basic 2005, el nuevo control CheckedListBox muestra las casillas de verificación al lado de cada elemento; las
casillas de verificación ya no pueden mostrarse en el control ListBox. El control CheckedListBox permite determinar
mediante programación el estado de activación de cada elemento a través de una colección CheckedItemCollection.
Columns (Propiedad)
En Visual Basic 6.0, la propiedad Columns tomaba un entero que especificaba el número de columnas que se iban a mostrar.
En Visual Basic 2005, la propiedad MultiColumn toma un valor booleano y la propiedad ColumnWidth toma un entero que
especifica el ancho en píxeles. Si el ancho del control ListBox cambia en tiempo de ejecución, es posible que tenga que
establecer la propiedad ColumnWidth en cada columna.
ItemCheck (Evento)
En el control ListBox de Visual Basic 6,0, cuando se producía un evento ItemCheck, ya se había cambiado el estado de
activación.
En el control CheckedListBox de Visual Basic 2005, cuando se desencadena el evento ItemCheck, el estado de activación aún
no ha cambiado. Puede obtener el valor pendiente del argumento ItemCheckEventArgs transferido al evento.
Cambios de código para el control ListBox
En los ejemplos siguientes se muestran las diferencias que existen entre las técnicas de codificación de Visual Basic 6.0 y Visual
Basic 2005.
El código se modifica para agregar y eliminar elementos en un control ListBox
El código siguiente muestra cómo se agregan y eliminan elementos de ListBox.

' Visual Basic 6.0


' Add an item at the end of the list.
List1.AddItem "Tokyo"
' Insert an item at the top of the list.
List1.AddItem "Copenhagen", 0
' Remove the first item.
List1.RemoveItem 0

VB
'Visual Basic 2005
' Add an item at the end of the list.
ListBox1.Items.Add("Tokyo")
' Insert an item at the top of the list.
ListBox1.Items.Insert(0, "Copenhagen")
' Remove the first item.
ListBox1.Items.RemoveAt(0)

El código se modifica para obtener acceso a elementos específicos de un control ListBox


El código siguiente muestra cómo se devuelve el valor de un elemento de ListBox.
' Visual Basic 6.0
Private Function GetItemText(i As Integer) As String
' Return the text of the item using the index:
GetItemText = ListBox1.List(1)
End Function

VB
' Visual Basic 2005
Private Function GetItemText(ByVal i As Integer) As String
' Return the text of the item using the index:
GetItemText = CStr(ListBox1.Items(i))
End Function

El código se modifica para determinar los elementos activados en un control CheckedListBox


El código siguiente muestra cómo se determina el estado de activación de elementos en un control CheckedListBox.

' Visual Basic 6.0


' The Visual Basic 6.0 ListBox control didn't support this scenario,
' a ListView control had to be used instead.
Dim s As String
Dim i As Integer
' Loop through all items
For i = 1 To ListView1.ListItems.Count
' If an item is checked, add it to the string
If ListView1.ListItems(i).Checked = True Then
s = s & "Checked Item" & CStr(i) & " = " & _
ListView1.ListItems(i) & vbCrLf
End If
Next
' Determine if any items are checked.
If s <> "" Then
MsgBox s
End If

VB
' Visual Basic 2005
' Determine if there are any items checked.
If CheckedListBox1.CheckedItems.Count <> 0 Then
' If so, loop through all checked items and print results.
Dim x As Integer
Dim s As String = ""
For x = 0 To CheckedListBox1.CheckedItems.Count - 1
s = s & "Checked Item " & CStr(x + 1) & " = " & _
CStr(CheckedListBox1.CheckedItems(x)) & ControlChars.CrLf
Next x
MessageBox.Show(s)
End If

Equivalencias de propiedades, métodos y eventos del control ListBox


En las siguientes tablas se enumeran propiedades, métodos y eventos de Visual Basic 6.0 con sus equivalentes en Visual Basic
2005. No se enumeran aquellas propiedades, métodos y eventos que tienen el mismo nombre y el mismo comportamiento.
Donde corresponde, las constantes aparecen con sangría debajo de la propiedad o método. Salvo que se indique lo contrario,
todas las enumeraciones de Visual Basic 2005 se asignan al espacio de nombres System.Windows.Forms.
Esta tabla proporciona vínculos a temas en los que se explican las diferencias de comportamiento. Cuando no existe un
equivalente directo en Visual Basic 2005, se proporcionan vínculos a temas en los que se incluyen alternativas.
Propiedades
Visual Basic Equivalente en Visual Basic 2005
6.0
Appearance Nueva implementación. Para obtener más información, vea
Propiedades Appearance y BorderStyle para usuarios de Visual Basic 6.0.

BackColor BackColor
Nota
Los colores se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Comportamiento del color para los usuarios de Visual Basic 6.0.

Columns MultiColumn y ColumnWidth

Container Parent

DataChange Nueva implementación. Para obtener más información, vea Acceso a datos para usuarios de Visual Basic 6.0.
d
DataField
DataFormat
DataMembe
r
DataSource

DragIcon Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.
DragMode

Font Font Font


FontBold Nota
FontItalic
Las fuentes se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
FontName Objeto Font para usuarios de Visual Basic 6.0.
FontSize
FontStriketh
rough
FontUnderli
ne

ForeColor ForeColor
Nota
Los colores se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Comportamiento del color para los usuarios de Visual Basic 6.0.

Height Height, Size


Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.
HelpContex Nueva implementación. Para obtener más información, vea
tID Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

HWnd Handle

Index Nueva implementación. Para obtener más información, vea


Matrices de controles para usuarios de Visual Basic 6.0.

IntegralHei IntegralHeight
ght

ItemData Nueva implementación. Para obtener más información, vea No se puede actualizar la propiedad ItemData.

Left Left
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

List Items

ListCount Count (List.Count)

ListIndex SelectedIndex

MouseIcon Nueva implementación. Para obtener más información, vea


No se puede personalizar la propiedad MousePointer.

MousePoint Cursor
er
Para obtener una lista de constantes, vea MousePointer para usuarios de Visual Basic 6.0.

MultiSelect SelectionMode

NewIndex Nueva implementación. Para obtener más información, vea No se puede actualizar la propiedad NewIndex.

OLEDragMo Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.
de
OLEDropMo
de

Parent Método FindForm

SelCount Count (SelectedItem.Count)

Selected GetSelected, SetSelected (control ListBox)


GetItemChecked, SetItemChecked (control CheckedListBox)

Style Nueva propiedad de implementación. 0 – Standard se asigna al control CheckedListBox; 1 – Checkbox se asi
gna al control CheckedListBox.
ToolTipText Componente ToolTip
Para obtener más información, vea
Compatibilidad de la información sobre herramientas para usuarios de Visual Basic 6.0.

Top Top
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

WhatsThisH Nueva implementación. Para obtener más información, vea


elpID Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

Width Width, Size


Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

Métodos
Nombre Equivalente en Visual Basic 2005
AddItem Add
AddRange
Insert

Clear Clear

Drag Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.

Move SetBounds
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

OLEDrag Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.

RemoveIte Remove
m

SetFocus Focus

ShowWha Nueva implementación. Para obtener más información, vea


tsThis Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

ZOrder Método BringToFront o SendToBack


Eventos
Visual Basic 6.0 Equivalente en Visual Basic 2005
DblClick DoubleClick
DragDrop Nueva implementación. Para obtener más información, vea
Arrastrar y colocar para usuarios de Visual Basic 6.0.
DragOver

GotFocus Enter

ItemCheck ItemCheck (sólo CheckedListBox)

LostFocus Leave

OLECompleteD Nueva implementación. Para obtener más información, vea


rag Arrastrar y colocar para usuarios de Visual Basic 6.0.
OLEDragDrop
OLEDragOver
OLEGiveFeedb
ack
OLESetData
OLEStartDrag

Scroll Nueva implementación. Para obtener más información, vea


Propiedad TopIndex y evento Scroll para usuarios de Visual Basic 6.0.

Validate Validating

Notas de actualización
Durante la actualización, si la propiedad Style de un control Listbox de Visual Basic 6.0 está establecida en 1 – Checkbox, se
actualiza al control CheckedListBox; en caso contrario, se actualiza al control ListBox.
Vea también
Referencia
Información general sobre ListBox (Control, formularios Windows Forms)
Información general sobre ListBox (Control, formularios Windows Forms)
Información general sobre el control CheckedListBox (formularios Windows Forms)
Conceptos de Visual Basic

Control ListView para usuarios de Visual Basic 6.0


En Visual Basic 2005, el control ListView reemplaza el control ListView de Visual Basic 6.0. Los nombres de algunas
propiedades, métodos, eventos y constantes son diferentes y, en algunos casos, existen diferencias de comportamiento.
Diferencias conceptuales
Propiedad DropHighlight
En Visual Basic 6.0, cuando se mueve el cursor sobre un objeto ListItem de un control ListView, se utiliza la propiedad
DropHighlight para resaltar el objeto ListItem con el color de resaltado del sistema. Esta propiedad se utiliza normalmente
en operaciones de arrastrar y colocar.
En Visual Basic 2005, ya no existe la propiedad DropHighlight; puede lograr el mismo efecto dibujando (dibujo propietario,
también conocido como dibujo personalizado) el resaltado de los eventos MouseEnter y MouseLeave. Para obtener más
información, vea Controles compatibles con dibujos propietarios integrados.
Propiedad FlatScrollBar
En Visual Basic 6.0, la propiedad FlatScrollBar determina si la barra de desplazamiento de un control ListView tiene una
apariencia plana (bidimensional).
En Visual Basic 2005, ya no existe la propiedad FlatScrollBar; las barras de desplazamiento del control ListView siempre
tienen un aspecto tridimensional.
Propiedad HideColumnHeaders
En Visual Basic 6.0, la propiedad HideColumnHeaders determina si los objetos ColumnHeader de un control ListView se
ocultan en la vista Report.
En Visual Basic 2005, ya no existe la propiedad HideColumnHeaders; puede controlar la visibilidad de los encabezados de
columna estableciendo la propiedad HeaderStyle.
Evento ItemClick
El control ListView de Visual Basic 6.0 tiene un evento Click y ItemClick. El evento ItemClick acepta objetos ListItem como
argumento.
En Visual Basic 2005, ya no hay eventos ItemClick. En su lugar puede utilizar el evento Click y el argumento
EventSender.FocusedItem para determinar en qué ListViewItem se ha hecho clic.
Ordenar
En Visual Basic 6.0, la ordenación de un control ListView se lleva a cabo utilizando una combinación de las propiedades
Sorted, SortKey y SortOrder. Sorted determina si se ha habilitado la ordenación, SortOrder determina si la ordenación es
ascendente o descendente y SortKey especifica un subelemento que se va a utilizar para ordenar en lugar del texto.
En Visual Basic 2005, la ordenación se lleva a cabo utilizando la propiedad Sorting, que habilita la ordenación y establece el
criterio de ordenación en un paso único. La propiedad ListViewItemSorter reemplaza a la propiedad SortKey.
Propiedad View
En Visual Basic 6.0, la propiedad View determina cómo se muestran los elementos de un control ListView, como iconos
grandes con texto (lvwIcon), como iconos pequeños con texto (lvwSmallIcon), como una lista (lvwList) o como una lista con
subelementos (lvwReport).
En Visual Basic 2005, todavía existe la propiedad View, pero las enumeraciones son distintas. Se sustituye lvwIcon por
LargeIcon, lvwSmallIcon por SmallIcon, lvwList por List y lvwReport por Details. Además, hay una vista nueva, Tile, donde
aparece cada elemento como un icono a tamaño completo con la etiqueta de elemento y la información de subelemento a la
derecha de éste.
Cambios de código para el control ListView
En los ejemplos siguientes se muestran las diferencias que existen entre las técnicas de codificación de Visual Basic 6.0 y Visual
Basic 2005.
Cambios de código para determinar el elemento seleccionado de un control ListView
El ejemplo de código siguiente asigna el elemento ListView seleccionado a una variable.
' Visual Basic 6.0
Dim theItem As ListItem
theItem = ListView1.SelectedItem

VB
' Visual Basic 2005
Dim theItem As ListViewItem
If ListView1.SelectedItems.Count > 0 Then
theItem = ListView1.SelectedItems(0)
Else
theItem = Nothing
End If

Codifique los cambios para determinar todos los elementos seleccionados de un control ListView
En el ejemplo de código siguiente se muestra un cuadro de mensaje con el texto de cada elemento seleccionado en el control
ListView.

' Visual Basic 6.0


For i = 1 To ListView1.ListItems.Count
If ListView1.ListItems(i).Selected = True Then
MsgBox(ListView1.SelectedItem
End If
Next i

VB
' Visual Basic 2005
For Each selectedItem As ListViewItem In ListView1.SelectedItems
MsgBox(selectedItem.Text)
Next

Equivalencias de propiedades, métodos y eventos del control ListView


En las siguientes tablas se enumeran propiedades, métodos y eventos de Visual Basic 6.0 con sus equivalentes en Visual Basic
2005. No se enumeran aquellas propiedades, métodos y eventos que tienen el mismo nombre y el mismo comportamiento.
Salvo que se indique lo contrario, todas las enumeraciones de Visual Basic 2005 se asignan al espacio de nombres
System.Windows.Forms.
Esta tabla proporciona vínculos a temas en los que se explican las diferencias de comportamiento. Cuando no existe un
equivalente directo en Visual Basic 2005, se proporcionan vínculos a temas en los que se incluyen alternativas.
Propiedades
Visual Basic 6 Equivalente en Visual Basic 2005
.0
Appearance Nueva implementación. Para obtener más información, vea
Propiedades Appearance y BorderStyle para usuarios de Visual Basic 6.0.

Arrange Alignment

BackColor BackColor
Nota
Los colores se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Comportamiento del color para los usuarios de Visual Basic 6.0.
ColumnHead ImageIndex, ImageKey
erIcons

ColumnsHea Columns
ders

Container Parent

DragIcon Nueva implementación. Para obtener más información, vea


Arrastrar y colocar para usuarios de Visual Basic 6.0.
DragMode

DropHighlig Nueva implementación.


ht

FlatScrollBar Nueva implementación.

Font Font Font


FontBold Nota
FontItalic Las fuentes se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
FontName Objeto Font para usuarios de Visual Basic 6.0.
FontSize
FontStrikethr
ough
FontUnderlin
e

Height Height, Size


Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

HelpContextI Nueva implementación. Para obtener más información, vea


D Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

HWnd Handle

Icons LargeImageList

Index Nueva implementación. Para obtener más información, vea


Matrices de controles para usuarios de Visual Basic 6.0.

Left Left
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

ListItems Items
MouseIcon Nueva implementación. Para obtener más información, vea
No se puede personalizar la propiedad MousePointer.

MousePointe Cursor
r
Para obtener una lista de constantes, vea MousePointer para usuarios de Visual Basic 6.0.

OLEDragMod Nueva implementación. Para obtener más información, vea


e Arrastrar y colocar para usuarios de Visual Basic 6.0.
OLEDropMod
e

Parent Método FindForm

Picture BackgroundImage

PictureAlign BackgroundImageTiled
ment

SelectedItem SelectedItems

SmallIcons SmallImageList

Sorted Sorting
SortOrder

SortKey ListViewItemSorter

TextBackgro BackColor
und

ToolTipText Componente ToolTip.


Para obtener más información, vea
Compatibilidad de la información sobre herramientas para usuarios de Visual Basic 6.0.

Top Top
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

WhatsThisHe Nueva implementación. Para obtener más información, vea


lpID Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

Width Width, Size


Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

Métodos
Name Equivalente en Visual Basic 2005
Drag Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.
FindItem FindItemWithText

GetFirstVis TopItem
ible

Move SetBounds
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

OLEDrag Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.

Refresh RedrawItems

SetFocus Focus

ShowWha Nueva implementación. Para obtener más información, vea


tsThis Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

StartLabel BeginEdit
Edit

ZOrder Método BringToFront o SendToBack


Eventos
Visual Basic 6.0 Equivalente en Visual Basic 2005
DblClick DoubleClick

DragDrop Nueva implementación. Para obtener más información, vea


Arrastrar y colocar para usuarios de Visual Basic 6.0.
DragOver

GotFocus Enter

ItemClick No hay equivalente directo

LostFocus Leave

OLECompleteDra Nueva implementación. Para obtener más información, vea


g Arrastrar y colocar para usuarios de Visual Basic 6.0.
OLEDragDrop
OLEDragOver
OLEGiveFeedbac
k
OLESetData
OLEStartDrag

Validate Validating

Notas de actualización
Cuando se actualiza un proyecto de Visual Basic 6.0 a Visual Basic 2005, se actualizan todos los controles ListView a controles
ListView de formularios Windows Forms. Cuando las propiedades, métodos y eventos no tienen ningún equivalente o
presentan diferente comportamiento, se agregan notas o advertencias de actualización al código.
Vea también
Otros recursos
ListView (Control, formularios Windows Forms)
Conceptos de Visual Basic

Control MaskEdBox para usuarios de Visual Basic 6.0


El control MaskEdBox de Visual Basic 6.0 se ha reemplazado por el control MaskedTextBox de Windows Forms en Visual
Basic 2005. Los nombres de algunas propiedades, métodos, eventos y constantes son diferentes y, en algunos casos, existen
diferencias de comportamiento.
Diferencias conceptuales
En Visual Basic 6.0, la propiedad AutoTab determina si el siguiente control del orden de tabulación recibe el foco en cuanto se
llena la propiedad Text de un control MaskEdBox con datos válidos.
En Visual Basic 2005, no hay ningún equivalente para la propiedad AutoTab. Puede lograr el mismo efecto supervisando y
validando la entrada, así como estableciendo el foco en el control siguiente.
En Visual Basic 6.0, la propiedad PasswordChar es de tipo String; en Visual Basic 2005 es de tipo Char.
Asimismo, hay numerosas diferencias conceptuales que se aplican a todos los controles, como diferencias en los enlaces de
datos, el control de fuentes, arrastrar y colocar, la compatibilidad con la Ayuda, etc. Para obtener más información, vea
Conceptos de formularios Windows Forms para usuarios de Visual Basic 6.0.
Equivalencias de propiedad, método y evento del control MaskedEdBox
En las siguientes tablas se enumeran propiedades, métodos y eventos de Visual Basic 6.0 con sus equivalentes en Visual Basic
2005. No se enumeran aquellas propiedades, métodos y eventos que tienen el mismo nombre y el mismo comportamiento.
Salvo que se indique lo contrario, todas las enumeraciones de Visual Basic 2005 se asignan al espacio de nombres
System.Windows.Forms.
Esta tabla proporciona vínculos a temas en los que se explican las diferencias de comportamiento. Cuando no existe un
equivalente directo en Visual Basic 2005, se proporcionan vínculos a temas en los que se incluyen alternativas.
Propiedades
Visual Basic Visual Basic 2005 Equivalente
6.0
AllowProm AllowPromptAsInput
pt

Appearance Nueva implementación. Para obtener más información, vea


Propiedades Appearance y BorderStyle para usuarios de Visual Basic 6.0.

AutoTab Nueva implementación.

BackColor BackColor
Nota
Los colores se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Control del color para usuarios de Visual Basic 6.0.

ClipMode SkipLiterals

ClipText Text
Nota
La propiedad ClipText de Visual Basic 6.0 excluye los literales; en Visual Basic 2005 se incluyen los literales a
menos que el valor de SkipLiterals se establezca en true.

Container Parent
DataBindin Nueva implementación. Para obtener más información, vea Acceso a datos para usuarios de Visual Basic 6.0.
g
DataChang
ed
DataField
DataFormat

DragIcon Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.
DragMode

Font Font
FontBold Nota
FontItalic
Las fuentes se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
FontName Objeto Font para usuarios de Visual Basic 6.0.
FontSize
FontStriket
hrough
FontUnderli
ne

ForeColor ForeColor
Nota
Los colores se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Control del color para usuarios de Visual Basic 6.0.

Format Nueva implementación. Use funciones de formato como FormatNumber (Función, Visual Basic) o
FormatDateTime (Función, Visual Basic).

FormattedT Text
ext
Nota
La propiedad ClipText de Visual Basic 6.0 excluye los literales; en Visual Basic 2005 se incluyen los literales a
menos que el valor de SkipLiterals se establezca en true.

Height Height, Size


Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

HelpContex Nueva implementación. Para obtener más información, vea


tID Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

HWnd Handle

Index Nueva implementación. Para obtener más información, vea


Matrices de controles para usuarios de Visual Basic 6.0.
Left Left
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

MouseIcon Nueva implementación. Para obtener más información, vea


No se puede personalizar la propiedad MousePointer.

MousePoint Cursor
er
Para obtener una lista de constantes, vea MousePointer para usuarios de Visual Basic 6.0.

OLEDragMo Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.
de
OLEDropMo
de

Parent Método FindForm

PromptIncl TextMaskFormat
ude

SelLength SelectionLength

SelStart SelectionStart

SelText SelectedText

ToolTipText Componente ToolTip.


Para obtener más información, vea
Compatibilidad de la información sobre herramientas para usuarios de Visual Basic 6.0.

Top Top
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

WhatsThisH Nueva implementación. Para obtener más información, vea


elpID Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

Width Width, Size


Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

Métodos
Visual Basi Visual Basic 2005 Equivalente
c 6.0
Drag Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.

Move SetBounds
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Control del color para usuarios de Visual Basic 6.0.

OLEDrag Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.

SetFocus Focus

ShowWhat Nueva implementación. Para obtener más información, vea


sThis Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

ZOrder Función BringToFront o SendToBack


Eventos
Visual Basic 6.0 Equivalente en Visual Basic 2005
Change TextChanged

DblClick DoubleClick

DragDrop Nueva implementación. Para obtener más información, vea


Arrastrar y colocar para usuarios de Visual Basic 6.0.
DragOver

GotFocus Enter

LostFocus Leave

OLECompleteDra Nueva implementación. Para obtener más información, vea


g Arrastrar y colocar para usuarios de Visual Basic 6.0.
OLEDragDrop
OLEDragOver
OLEGiveFeedbac
k
OLESetData
OLEStartDrag

Validate Validating

ValidationError MaskInputRejected

Notas de actualización
Cuando se actualiza una aplicación de Visual Basic 6.0 a Visual Basic 2005, los controles MaskEdBox se actualizan a los
controles MaskedTextBox de formularios Windows Forms y las propiedades, métodos y eventos se actualizan a sus
equivalentes. Donde puede haber diferencias en el comportamiento, se insertan comentarios de actualización en el código.
Vea también
Tareas
Tutorial: Trabajar con el control MaskedTextBox
Ejemplo MaskedTextBox Control
Cómo: Enlazar datos al control MaskedTextBox
Otros recursos
MaskedTextBox (Control, formularios Windows Forms)
Conceptos de Visual Basic

Objeto MDIForm para usuarios de Visual Basic 6.0


En Visual Basic 6.0 un objeto MDIForm era un tipo especial de formulario que actuaba como contenedor para una aplicación
MDI (Multiple Document Interface). En Visual Basic 2005, cualquier formulario con la propiedad IsMdiContainer establecida en
true puede actuar como contenedor MDI.
Diferencias conceptuales
Formularios secundarios y múltiples formularios MDI
En Visual Basic 6.0 el establecimiento de la propiedad MDIChild en un formulario secundario lo identifica como secundario
del formulario MDI; una aplicación MDI sólo puede tener un formulario MDI.
En Visual Basic 2005, la propiedad MDIChild reemplaza a la propiedad MdiParent e identifica el formulario MDI que
contendrá el formulario secundario; las aplicaciones MDI pueden tener varios contenedores MDI.
Propiedades BackColor y Picture
En Visual Basic 6.0, se puede cambiar el color de fondo de MDIForm estableciendo la propiedad BackColor y se puede
mostrar una imagen de fondo configurando la propiedad Picture.
En Visual Basic 2005, no es posible de cambiar el color de fondo ni mostrar una imagen en un formulario MDI. Aunque puede
establecer las propiedades BackColor y BackgroundImage en el formulario, al establecer la propiedad IsMdiContainer en
true, se invalida esta configuración.
Propiedad AutoShowChildren
En Visual Basic 6.0 se utiliza la propiedad AutoShowChildren de los formularios MDI para mostrar automáticamente los
formularios MDI secundarios en el momento de cargarlos. Los formularios estándar no presentan este comportamiento; la
llamada al método Load carga pero no muestra el formulario.
En Visual Basic 2005, debe llamar explícitamente al método Show para mostrar un formulario MDI secundario.
Controles y gráficos en formularios MDI
En Visual Basic 6.0, no es posible agregar la mayor parte de los controles a un MDIForm. Puede agregar sólo controles
acoplados como los controles Menu, StatusBar o ToolBar. Además, los métodos de gráficos como Circle o Line no se
pueden utilizar en MDIForm.
En Visual Basic 2005, puede agregar cualquier control a un formulario MDI; no obstante, es posible que no tenga el
comportamiento previsto. Cualquiera control de un formulario con la propiedad IsMdiContainer establecida en true "flotará"
encima de cualquier formulario MDI secundario. Aunque puede realizar llamadas a métodos de gráficos en el evento Paint, los
gráficos no aparecerán en tiempo de ejecución.
Cambios de código para formularios MDI
Los ejemplos siguientes muestran las diferencias de las técnicas de codificación entre Visual Basic 6.0 y Visual Basic 2005.
Cambios de código para mostrar formularios MDI secundarios
El código siguiente muestra cómo se muestran cinco instancias de un formulario MDI secundario.

' Visual Basic 6.0


Dim F(1 To 4) As New Form1
Private Sub MDIForm_Load()
Dim i As Integer
Load Form1
For i = 1 To 4
F(i).Caption = "Form" & i + 1
F(i).Show
Next I
End Sub

VB
' Visual Basic 2005
Private Sub MDIForm1_Load(ByVal sender As System.Object, ByVal e _
As System.EventArgs) Handles MyBase.Load
Dim i As Integer = 0
For i = 0 To 4
Dim F As New FormChild
F.Text = "Form " & CStr(i + 1)
F.Show()
Next
End Sub

Cambios de código para organizar las ventanas MDI secundarias


El código siguiente muestra cómo se escribe el código para cambiar la organización de ventanas en una aplicación MDI. Se
supone que ha creado los elementos de menú para cada opción.

' Visual Basic 6.0


Private Sub menuCascade_Click()
Me.Arrange vbCascade
End Sub
Private Sub menuTileHorizontally_Click()
Me.Arrange vbHorizontal
End Sub
Private Sub menuTileVertically_Click()
Me.Arrange vbVertical
End Sub

VB
' Visual Basic 2005
Private Sub CascadeToolStripMenuItem_Click(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles CascadeToolStripMenuItem.Click

Me.LayoutMdi(MdiLayout.Cascade)
End Sub

VB
' Visual Basic 2005
Private Sub TileVerticleToolStripMenuItem_Click(ByVal sender As Object, _
ByVal e As EventArgs) Handles TileVerticalToolStripMenuItem.Click

Me.LayoutMdi(MdiLayout.TileVertical)
End Sub

VB
' Visual Basic 2005
Private Sub TileHorizontalToolStripMenuItem_Click(ByVal sender As Object, _
ByVal e As EventArgs) Handles TileHorizontalToolStripMenuItem.Click
Me.LayoutMdi(MdiLayout.TileHorizontal)
End Sub

Equivalencias de propiedad y método de formulario MDI


En la siguiente tabla se muestran algunas propiedades y métodos de Visual Basic 6.0 y sus equivalentes de Visual Basic 2005.
Sólo se muestran propiedades y métodos que son únicos del objeto MDIForm; para otras propiedades, métodos y eventos,
vea Objeto Form para usuarios de Visual Basic 6.0.
Propiedades y métodos de MDIForm
Visual Basic 6.0 Equivalente de Visual Basic 2005
Propiedad ActiveForm ActiveMdiChild
Método Arrange LayoutMdi

Propiedad AutoShowChi Nueva implementación. Para obtener más información, vea


ldren El comportamiento de Show del formulario MDI ha cambiado.

Propiedad BackColor Nueva implementación. El fondo para un formulario MDI será siempre el predeterminado (Control)
.

Propiedad Picture Nueva implementación. Los formularios MDI de Visual Basic 2005 no pueden mostrar imágenes dir
ectamente.

Notas de actualización
Cuando se actualiza una aplicación MDI desde Visual Basic 6.0 a Visual Basic 2005, cualquier objeto MDIForm se actualiza en
formularios normales y la propiedad IsMdiContainer se establece en true.
En Visual Basic 2005, la propiedad AutoShowChildren ya no existe. Para emular el comportamiento de Visual Basic 6.0, se
agrega una línea de código durante la actualización para que se muestre cada formulario secundario si la propiedad
AutoShowChildren está establecida en true en la aplicación original.
Vea también
Conceptos
MDI para usuarios de Visual Basic 6.0
Objeto Form para usuarios de Visual Basic 6.0
Tareas de formularios para usuarios de Visual Basic 6.0
Otros recursos
Aplicaciones de interfaz de múltiples documentos (MDI)
Conceptos de Visual Basic

Objeto Menu para usuarios de Visual Basic 6.0


El objeto Menu de Visual Basic 6.0 se ha reemplazado por el control MenuStrip o el control ContextMenuStrip en Visual Basic
2005. Los nombres de algunas propiedades, métodos, eventos y constantes son diferentes y, en algunos casos, existen
diferencias de comportamiento.
Diferencias conceptuales
En Visual Basic 6.0, se crea un objeto Menu mediante el Editor de menús. Los objetos Menu están vinculados al formulario
para el que se han creado pero se pueden modificar en tiempo de ejecución o mostrar como menús contextuales. Los menús
creados con el objeto Menu no admiten de forma nativa sombreado, iconos o controles incrustados; sólo se pueden crear
menús de estilo "sencillo" de Windows 98.
En Visual Basic 2005, los componentes MenuStrip y ContextMenuStrip reemplazan al objeto Menu. Los menús se pueden
crear en tiempo de diseño utilizando la edición en contexto o se pueden crear en código. Los componentes MenuStrip y
ContextMenuStrip permiten crear modernos menús de estilo barra de herramientas de Office, con compatibilidad completa
para áreas sombreadas, iconos y controles incrustados como listas desplegables. Para obtener más información, vea
Información general sobre el control MenuStrip (formularios Windows Forms).
Mostrar menús contextuales
En Visual Basic 6.0, puede mostrar un menú contextual llamando al método PopupMenu y pasándole cualquier objeto Menu
de nivel superior. Por ejemplo, si tiene un menú Edición denominado mnuEdit con submenús Cortar, Copiar y Pegar, puede
mostrar un menú contextual con los comandos Cortar, Copiar y Pegar llamando a PopupMenu mnuEdit.
En Visual Basic 2005, los menús contextuales se muestran mediante un componente ContextMenuStrip independiente. No
hay equivalente para el método PopupMenu, no obstante, puede seguir compartiendo comandos entre MenuStrip y
ContextMenuStrip al crear ContextMenuStrip en tiempo de diseño y al compartir controladores de eventos.
Cambios de código para el objeto Menu
Los ejemplos siguientes muestran las diferencias de las técnicas de codificación entre Visual Basic 6.0 y Visual Basic 2005.
Cambios de código para mostrar menús contextuales
El código siguiente muestra cómo mostrar los comandos Cortar, Copiar y Pegar en un menú Edición existente en un menú
contextual.

' Visual Basic 6.0


Private Sub mnuCut_Click()
MsgBox "You selected Cut"
End Sub
Private Sub mnuCopy_Click()
MsgBox "You selected Copy"
End Sub

Private Sub mnuPaste_Click()


MsgBox "You selected Paste"
End Sub

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)


If Button = vbRightButton Then
PopupMenu mnuEdit
End If
End Sub

VB
' Visual Basic 2005
' You must first add a ContextMenuStrip component to the form at design
' time and add Cut, Copy, and Paste menu items named
' CutContextMenuItem, CopyContextMenuItem, and PasteContextMenuItem.
Private Sub CutToolStripMenuItem_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles CutToolStripMenuItem.Click
MsgBox("Cut")
End Sub
Private Sub CopyToolStripMenuItem_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles CopyToolStripMenuItem.Click
MsgBox("Copy")
End Sub

Private Sub PasteToolStripMenuItem_Click(ByVal sender As System.Object, _


ByVal e As System.EventArgs) Handles PasteToolStripMenuItem.Click
MsgBox("Paste")
End Sub

VB
Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As _
System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
If e.Button = Windows.Forms.MouseButtons.Right Then
Me.ContextMenuStrip = ContextMenuStrip1

AddHandler CutContextMenuItem.Click, _
AddressOf CutToolStripMenuItem_Click
AddHandler CopyContextMenuItem.Click, _
AddressOf CopyToolStripMenuItem_Click

AddHandler PasteContextMenuItem.Click, _
AddressOf PasteToolStripMenuItem_Click
End If
End Sub

Equivalencias de métodos y propiedades de menús


En las siguientes tablas se enumeran propiedades y métodos de Visual Basic 6.0 junto con sus equivalentes en Visual Basic
2005. No se enumeran aquellas propiedades y métodos que tienen el mismo nombre y comportamiento. Salvo que se indique
lo contrario, todas las enumeraciones de Visual Basic 2005 se asignan al espacio de nombres System.Windows.Forms.
Esta tabla proporciona vínculos a temas que explican las diferencias de comportamiento. Cuando no hay equivalente directo en
Visual Basic 2005, se proporcionan vínculos a temas que presentan alternativas.
Propiedades
Visual Basic 6.0 Equivalente de Visual Basic 2005
Caption Text (MenuStripItem)

HelpContextID Nueva implementación. Para obtener más información, vea


Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

Index Nueva implementación. Llame a la propiedad Index de la clase ToolStripItemCollection.

NegotiatePositi No hay equivalente. Esta propiedad sólo se utilizaba para la vinculación e incrustación de objetos OLE que y
on a no se admite.

Parent FindForm (método)

WindowList MdiWindowListItem
Métodos
Visual Basic 6.0 Equivalente de Visual Basic 2005
PopupMenu Nueva implementación. Utilice un componente ContextMenuStrip.
Notas de actualización
Cuando se actualiza una aplicación de Visual Basic 6.0 a Visual Basic 2005, no se actualiza ninguna llamada al método
PopupMenu; debe crear menús contextuales para reemplazarlos.
Vea también
Referencia
Información general sobre el control MenuStrip (formularios Windows Forms)
Conceptos
Control de menús para usuarios de Visual Basic 6.0
Otros recursos
Controles de formularios Windows Forms para usuarios de Visual Basic 6.0
Conceptos de Visual Basic

Control de contenedor OLE para usuarios de Visual Basic 6.0


En Visual Basic 6.0 el control OLE Container se utilizaba para agregar objetos OLE insertables a los formularios. No hay
ningún control OLE Container en Visual Basic 2005.
Diferencias conceptuales
Si necesita la funcionalidad del control OLE Container, en algunos casos puede sustituir el control WebBrowser de Visual
Basic 2005 y utilizarlo en lugar de OLE Container.
Uno de los principales usos del control OLE Container consistía en incrustar documentos de Word u hojas de cálculo de Excel
en un formulario. El control WebBrowser encapsula Internet Explorer, que tiene la capacidad de mostrar estos tipos de
documentos. Además, puede utilizar Visual Studio Tools para Office para interactuar directamente con aplicaciones de Office
desde Visual Basic 2005.
Vea también
Referencia
Información general sobre el control WebBrowser
Conceptos
Consideraciones previas a la actualización
Otros recursos
Visual Studio Tools para Office
Conceptos de Visual Basic

Control OptionButton para usuarios de Visual Basic 6.0


El control OptionButton de Visual Basic 6.0 se ha reemplazado por el control RadioButton de formularios Windows Forms en
Visual Basic 2005. Los nombres de algunas propiedades, métodos, eventos y constantes son diferentes y, en algunos casos,
existen diferencias de comportamiento.
Diferencias conceptuales
En Visual Basic 6.0, el evento Click del control OptionButton sólo se producía cuando su propiedad Value se cambiaba a
True.
En Visual Basic 2005, el evento CheckedChanged del control RadioButton se produce cada vez que el valor de la propiedad
Checked cambia a True o False.
Asimismo, hay numerosas diferencias conceptuales que se aplican a todos los controles, incluidas las diferencias en los enlaces
de datos, control de fuentes, funcionalidad de arrastrar y colocar, compatibilidad con Ayuda y otras. Para obtener más
información, vea Conceptos de formularios Windows Forms para usuarios de Visual Basic 6.0.
Cambios de código para el control OptionButton
Los ejemplos siguientes muestran las diferencias de las técnicas de codificación entre Visual Basic 6.0 y Visual Basic 2005.
Cambios de código para seleccionar un control OptionButton mediante programación
El código siguiente muestra cómo se selecciona un control OptionButton o RadioButton de un grupo de dos en tiempo de
ejecución.

' Visual Basic 6.0


If Option1.Value = True Then
Option2.Value = True
Else
Option1.Value = True
End If

VB
' Visual Basic 2005
If RadioButton1.Checked = True Then
RadioButton2.Checked = True
Else
RadioButton1.Checked = True
End If

Cambios de código para determinar cuándo se selecciona un control OptionButton


El código siguiente muestra cómo se controla el evento Click para el control OptionButton en comparación con el evento
CheckedChanged para el control RadioButton.

' Visual Basic 6.0


' The Click event is only fired when the Value is True
Private Sub Option1_Click()
MsgBox "Option1 was clicked"
End Sub

Private Sub Option2_Click()


MsgBox "Option2 was clicked"
End Sub

VB
' Visual Basic 2005
' The CheckChanged event fires each time the RadioButton's Checked
' value changes to either True or False.
Private Sub RadioButton1_CheckedChanged(ByVal sender As Object, ByVal _
e As System.EventArgs) Handles RadioButton1.CheckedChanged, _
RadioButton2.CheckedChanged
' Only execute if the Checked value is True.
If sender.Checked = True Then
MsgBox(sender.Name & " was clicked")
End If
End Sub

Equivalencias de propiedad, método y evento de control OptionButton


En las siguientes tablas se enumeran propiedades, métodos y eventos de Visual Basic 6.0 con sus equivalentes en Visual Basic
2005. No se enumeran aquellas propiedades, métodos y eventos que tienen el mismo nombre y el mismo comportamiento.
Donde corresponde, las constantes aparecen con sangría debajo de la propiedad o método. Salvo que se indique lo contrario,
todas las enumeraciones de Visual Basic 2005 se asignan al espacio de nombres System.Windows.Forms.
Esta tabla proporciona vínculos a temas que explican las diferencias de comportamiento. Cuando no hay equivalente directo en
Visual Basic 2005, se proporcionan vínculos a temas que presentan alternativas.
Propiedades
Visual Basic Equivalente de Visual Basic 2005
6.0
Alignment TextAlign

Appearance FlatStyle

BackColor BackColor
Nota
Para obtener una lista de constantes, vea Control del color para usuarios de Visual Basic 6.0.

Nota
Los colores se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Control del color para usuarios de Visual Basic 6.0.

Caption Text

Container Parent

DisabledPic Nueva implementación. Para obtener más información, vea Propiedad Style para usuarios de Visual Basic 6.0.
ture
DownPictur
e

DragIcon Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.
DragMode
Font Font
FontBold Nota
FontItalic
Las fuentes se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
FontName Objeto Font para usuarios de Visual Basic 6.0.
FontSize
FontStriketh
rough
FontUnderli
ne

ForeColor ForeColor
Nota
Para obtener una lista de constantes, vea Control del color para usuarios de Visual Basic 6.0.

Nota
Los colores se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Control del color para usuarios de Visual Basic 6.0.

Height Height, Size


Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

HelpContex Nueva implementación. Para obtener más información, vea


tID Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

HWnd Handle

Index Nueva implementación. Para obtener más información, vea


Matrices de controles para usuarios de Visual Basic 6.0.

Left Left
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

MaskColor Nueva implementación. Para obtener más información, vea MaskColor para usuarios de Visual Basic 6.0

MouseIcon Nueva implementación. Para obtener más información, vea


No se puede personalizar la propiedad MousePointer.

MousePoint Cursor
er
Para obtener una lista de constantes, vea MousePointer para usuarios de Visual Basic 6.0.

OLEDropMo Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.
de
Parent Método FindForm

Picture Image

RightToLeft: RightToLeft
True Valor de la enumeración Yes
False Valor de la enumeración No

Style Appearance
Nota
Existen diferencias en cómo se controla el estilo Graphical en Visual Basic 2005. Para obtener más información
, vea Propiedad Style para usuarios de Visual Basic 6.0.

ToolTipText Componente ToolTip


Para obtener más información, vea
Compatibilidad de la información sobre herramientas para usuarios de Visual Basic 6.0.

Top Top
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

UseMaskCol Nueva implementación. Para obtener más información, vea MaskColor para usuarios de Visual Basic 6.0.
or

Value Checked

WhatsThisH Nueva implementación. Para obtener más información, vea


elpID Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

Width Width, Size


Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

Métodos
Visual Basi Equivalente de Visual Basic 2005
c 6.0
Drag Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.

Move SetBounds
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

OLEDrag Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.
SetFocus Focus

ShowWha Nueva implementación. Para obtener más información, vea


tsThis Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

ZOrder Método BringToFront o SendToBack


Eventos
Visual Basic Equivalente de Visual Basic 2005
6.0
Click CheckedChanged
Nota
En Visual Basic 6.0, el evento Click se producía sólo cuando se cambiaba el estado a True; en Visual Basic 200
5, se produce tanto para True como para False.

DblClick DoubleClick

DragDrop Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0
.
DragOver

GotFocus Enter

LostFocus Leave

OLEComplet Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0
eDrag .
OLEDragDro
p
OLEDragOve
r
OLEGiveFee
dback
OLESetData
OLEStartDra
g

Validate Validating

Notas de actualización
Cuando se actualiza una aplicación de Visual Basic 6.0 a Visual Basic 2005, los controles OptionButton se actualizan a los
controles RadioButton de formularios Windows Forms, y las propiedades, métodos y eventos se actualizan a sus
equivalentes. Donde puede haber diferencias en el comportamiento, se insertan comentarios de actualización en el código.
Vea también
Referencia
Información general sobre el control RadioButton (formularios Windows Forms)
Conceptos de Visual Basic

Control PictureBox para usuarios de Visual Basic 6.0


El control PictureBox de Visual Basic 6.0 se ha reemplazado por el control PictureBox de formularios Windows Forms en
Visual Basic 2005. Los nombres de algunas propiedades, métodos, eventos y constantes son diferentes y, en algunos casos,
existen diferencias de comportamiento.
Diferencias conceptuales
PictureBox como contenedor
El control PictureBox de Visual Basic 6.0 es un control contenedor; además de utilizarse para mostrar imágenes, puede
utilizarse para agrupar y mostrar otros controles.
El control PictureBox de Visual Basic 2005 no es un control contenedor; sólo se utiliza para mostrar imágenes. Puede utilizar
el nuevo control Panel en lugar del control PictureBox cuando necesite un control contenedor.
AutoSize (Propiedad)
En Visual Basic 6.0, la propiedad AutoSize determina si un control PictureBox mantiene su tamaño en tiempo de diseño
(AutoSize = False) o si éste se modifica dinámicamente para ajustarse a las dimensiones de la imagen (AutoSize = True).
En Visual Basic 2005, la propiedad AutoSize se ha reemplazado por la propiedad SizeMode; además de los modos Normal y
AutoSize, hay opciones disponibles para centrar, expandir o acercar y alejar la imagen.
Propiedades y métodos de gráficos
En Visual Basic 6.0, se pueden utilizar diferentes propiedades y métodos de gráficos para dibujar líneas, formas y texto sobre
un control PictureBox.
En Visual Basic 2005, los controles ya no tienen propiedades ni métodos de gráficos, aunque todavía se puede dibujar sobre un
control PictureBox mediante un objeto T:System.Drawing.Graphics. Para obtener más información, vea
Gráficos para usuarios de Visual Basic 6.0.
Otras diferencias
Existen numerosas diferencias conceptuales que se aplican a todos los controles, como diferencias en los enlaces de datos,
control de fuentes, funcionalidad de arrastrar y colocar, compatibilidad con Ayuda, y otras. Para obtener más información, vea
Conceptos de formularios Windows Forms para usuarios de Visual Basic 6.0.
Cambios de código para el control PictureBox
En los ejemplos siguientes se muestran las diferencias que existen entre las técnicas de codificación de Visual Basic 6.0 y Visual
Basic 2005.
El código se modifica para mostrar una imagen
El código siguiente ilustra cómo se muestra una imagen en un control PictureBox en tiempo de ejecución.

' Visual Basic 6.0


Picture1.Picture = LoadPicture(App.Path & "\somepicture.jpg")

VB
' Visual Basic 2005
PictureBox1.Image = System.Drawing.Bitmap.FromFile( _
My.Application.Info.DirectoryPath & "\somepicture.jpg")

El código se modifica para borrar un control PictureBox


El código siguiente muestra cómo se borra un control PictureBox en tiempo de ejecución para que no aparezca ninguna
imagen.

' Visual Basic 6.0


Picture1.Picture = LoadPicture("")

VB
' Visual Basic 2005
If Not (PictureBox1.Image Is Nothing) Then
PictureBox1.Image.Dispose()
PictureBox1.Image = Nothing
End If

El código se modifica para dibujar en un control PictureBox


El código siguiente muestra cómo se dibuja un círculo rojo de 40 píxeles de diámetro en la parte central de un control
PictureBox en tiempo de ejecución.

' Visual Basic 6.0


Private Sub Picture1_Paint
Dim x As Integer
Dim y As Integer
Picture1.ScaleMode = vbPixels
x = Picture1.ScaleWidth / 2
y = Picture1.ScaleHeight / 2
Picture1.Circle (x, y), 20, vbRed
End Sub

VB
' Visual Basic 2005
Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e _
As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
Dim radius As Integer = 20
Dim diameter As Integer = radius * 2
Dim x As Integer = (PictureBox1.Width / 2) - radius
Dim y As Integer = (PictureBox1.Height / 2) - radius
e.Graphics.DrawEllipse(Pens.Red, x, y, diameter, diameter)
End Sub

Equivalencias de propiedades, métodos y eventos del control PictureBox


En las siguientes tablas se enumeran propiedades, métodos y eventos de Visual Basic 6.0 con sus equivalentes en Visual Basic
2005. No se enumeran aquellas propiedades, métodos y eventos que tienen el mismo nombre y el mismo comportamiento.
Donde corresponde, las constantes aparecen con sangría debajo de la propiedad o método. Salvo que se indique lo contrario,
todas las enumeraciones de Visual Basic 2005 se asignan al espacio de nombres System.Windows.Forms.
Esta tabla proporciona vínculos a temas en los que se explican las diferencias de comportamiento. Cuando no existe un
equivalente directo en Visual Basic 2005, se proporcionan vínculos a temas en los que se incluyen alternativas.
Propiedades
Visual Basic Equivalente en Visual Basic 2005
6.0
Align Dock

Appearance Nueva implementación. Para obtener más información, vea


Propiedades Appearance y BorderStyle para usuarios de Visual Basic 6.0.

AutoRedraw Nueva implementación. Para obtener más información, vea Gráficos para usuarios de Visual Basic 6.0.

AutoSize SizeMode
BackColor BackColor
Nota
Los colores se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Comportamiento del color para los usuarios de Visual Basic 6.0.

BorderStyle BorderStyle
Nota
En Visual Basic 6.0, el valor predeterminado es Fixed Single; en Visual Basic 2005, es None.

ClipControls Nueva implementación. Para obtener más información, vea Gráficos para usuarios de Visual Basic 6.0.

Container Parent

CurrentX Nueva implementación. Para obtener más información, vea Gráficos para usuarios de Visual Basic 6.0.
CurrentY

DataChange Nueva implementación. Para obtener más información, vea Acceso a datos para usuarios de Visual Basic 6.0.
d
DataField
DataFormat
DataMembe
r
DataSource

DragIcon Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.
DragMode

DrawMode Nueva implementación. Para obtener más información, vea Gráficos para usuarios de Visual Basic 6.0.
DrawStyle
DrawWidth
FillColor
FillStyle

Font Font
FontBold Nota
FontItalic
Las fuentes se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
FontName Objeto Font para usuarios de Visual Basic 6.0.
FontSize
FontStriketh
rough
FontUnderli
ne
ForeColor ForeColor
Nota
Los colores se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Comportamiento del color para los usuarios de Visual Basic 6.0.

HasDC Nueva implementación. Para obtener más información, vea Gráficos para usuarios de Visual Basic 6.0.
HDC

Height Height, Size


Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

HelpContex Nueva implementación. Para obtener más información, vea


tID Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

HWnd Handle

Image Nueva implementación. Para obtener más información, vea Gráficos para usuarios de Visual Basic 6.0.
Nota
En Visual Basic 2005, la propiedad Image no es una propiedad de gráficos. Es el equivalente de la propiedad P
icture de Visual Basic 6.0.

Index Nueva implementación. Para obtener más información, vea


Matrices de controles para usuarios de Visual Basic 6.0.

Left Left
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

LinkItem No hay equivalente. Para obtener más información, vea


Intercambio dinámico de datos para usuarios de Visual Basic 6.0.
LinkMode
LinkTimeOu
t
LinkTopic

MouseIcon Nueva implementación. Para obtener más información, vea


No se puede personalizar la propiedad MousePointer.

MousePoint Cursor
er
Para obtener una lista de constantes, vea MousePointer para usuarios de Visual Basic 6.0.
OLEDragMo Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.
de
OLEDropMo
de

Parent FindForm

Picture Image

ScaleHeight Nueva implementación. Para obtener más información, vea


Sistema de coordenadas para usuarios de Visual Basic 6.0.
ScaleLeft
ScaleMode
ScaleTop
ScaleWidth

ToolTipText Componente ToolTip


Para obtener más información, vea
Compatibilidad de la información sobre herramientas para usuarios de Visual Basic 6.0.

Top Top
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

WhatsThisH Nueva implementación. Para obtener más información, vea


elpID Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

Width Width, Size


Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

Métodos
Visual Basi Equivalente en Visual Basic 2005
c 6.0
Circle Nueva implementación. Para obtener más información, vea Gráficos para usuarios de Visual Basic 6.0.
Cls

Drag Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.

Line Nueva implementación. Para obtener más información, vea Gráficos para usuarios de Visual Basic 6.0.
LinkExecu No hay equivalente. Para obtener más información, vea
te Intercambio dinámico de datos para usuarios de Visual Basic 6.0.
LinkPoke
LinkReque
st
LinkSend

Move SetBounds
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

OLEDrag Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.

PaintPictu Nueva implementación. Para obtener más información, vea Gráficos para usuarios de Visual Basic 6.0.
re
Point
Print
PSet

Scale Nueva implementación. Para obtener más información, vea


Sistema de coordenadas para usuarios de Visual Basic 6.0.
ScaleX
ScaleY

SetFocus Focus

ShowWha Nueva implementación. Para obtener más información, vea


tsThis Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

TextHeigh Nueva implementación. Para obtener más información, vea Gráficos para usuarios de Visual Basic 6.0.
t
TextWidth

ZOrder Método BringToFront o SendToBack


Eventos
Visual Basic Equivalente en Visual Basic 2005
6.0
Change Nueva implementación. Hay eventos individuales (BackgroundImageChanged, SizeChanged, etc.) que se desenc
adenan cuando se modifican algunas propiedades.

DblClick DoubleClick

DragDrop Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.
DragOver

GotFocus Enter
KeyDown Nueva implementación. El control PictureBox de Visual Basic 2005 no es un control contenedor y no recibe pul
saciones de teclas.
KeyPress
KeyUp
LinkClose No hay equivalente. Para obtener más información, vea
Intercambio dinámico de datos para usuarios de Visual Basic 6.0.
LinkError
LinkNotify
LinkOpen

LostFocus Leave

OLEComplet Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.
eDrag
OLEDragDro
p
OLEDragOv
er
OLEGiveFee
dback
OLESetData
OLEStartDra
g

Validate Validating

Notas de actualización
Durante la actualización, los controles PictureBox que contienen otros controles se actualizan a controles Panel. En Visual
Basic 6.0, los controles PictureBox se actualizan a controles Panel, y las imágenes asignadas a la propiedad Picture se
asignan a la propiedad BackgroundPicture del control Panel.
Vea también
Referencia
Información general del control PictureBox (Formularios Windows Forms)
Conceptos de Visual Basic

Objeto Printer para usuarios de Visual Basic 6.0


En Visual Basic 2005, el componente PrintDocument reemplaza el objeto Printer de Visual Basic 6.0. El comportamiento de
ambos es considerablemente distinto, pero en la mayoría de los casos la funcionalidad se puede duplicar.
Diferencias conceptuales
En Visual Basic 6.0, la impresión se realiza creando un objeto Printer y utilizando los métodos gráficos de dibujo de texto y
gráficos en una página virtual. Las propiedades y los métodos se usan para definir los atributos de impresora como
DeviceName, PrintQuality o Copies; otras propiedades como Orientation y PaperSize definen atributos de la página. El
método EndDoc envía el resultado a la impresora predeterminada de la aplicación según se define en la colección Printers.
En Visual Basic 2005, el objeto Printer ya no existe. En su lugar se utiliza un componente PrintDocument para definir los
gráficos y texto, un objeto PrinterSettings para definir los atributos de la impresora y una clase PageSettings para definir los
atributos de la página.
Imprimir ya no se asocia a un dispositivo concreto y el concepto de una impresora predeterminada para una aplicación ya no
es válido. En su lugar, el método PrintPage del componente PrintDocument se puede utilizar para imprimir en cualquier
dispositivo y la impresora predeterminada es para todo el sistema. Los componentes PrintDialog, PrintPreviewDialog y
PageSetupDialog le permiten dejar que el usuario seleccione una impresora y las opciones de impresión en tiempo de
ejecución.
ColorMode (Propiedad)
En Visual Basic 6.0, la propiedad ColorMode controla si el resultado se imprime en una impresora en blanco y negro o en
color.
En Visual Basic 2005, ahora depende de la impresora exponer esto como una opción avanzada. La propiedad SupportsColor
de la clase PrinterSettings se puede usar para determinar las funciones de color de una impresora.
DriverName (Propiedad)
En Visual Basic 6.0, la propiedad DriverName del objeto Printer se utiliza para especificar un controlador de impresora. En
versiones anteriores de Windows y en MS-DOS, los controladores de impresora eran necesarios para traducir el resultado de
un modo que cada marca y modelo específicos de impresora lo pudieran comprender. Cuando apareció Visual Basic 6.0, esta
propiedad ya no era necesaria, pero se mantuvo por compatibilidad con versiones anteriores.
En Visual Basic 2005, la propiedad DriverName ya no existe; Windows administra los controladores de impresora y ya no es
posible especificar controladores distintos.
hDC (Propiedad)
En Visual Basic 6.0, la propiedad hDC del objeto Printer especifica un identificador para un contexto de dispositivo (un vínculo
entre una aplicación basada en Windows, un controlador de dispositivo y un dispositivo de salida como una impresora).
En Visual Basic 2005, la propiedad hDC ya no existe; una instancia de un componente PrintDocument es el equivalente de un
contexto de dispositivo.
Nota
Aunque los identificadores para los contextos de dispositivo ya no son necesarios, los objetos gráficos tienen métodos
GetHdc y ReleaseHdc que se pueden utilizar en escenarios avanzados.

Page (Propiedad)
En Visual Basic 6.0, la propiedad Page devuelve un recuento de páginas impresas desde que se inició la aplicación o desde la
última vez que la instrucción EndDoc se utilizó en el objeto Printer. Esta propiedad se utiliza a menudo para agregar un
número de página a cada página durante la impresión.
En Visual Basic 2005, no se hace un seguimiento de los números de página; sin embargo, puede mantener un recuento con
facilidad estableciendo una variable en el evento BeginPrint e incrementándolo en el evento PrintPage.
Port (Propiedad)
En Visual Basic 6.0, la propiedad Port devuelve el nombre del puerto a través del cual se envía un documento a una impresora.
En Visual Basic 2005, la propiedad Port ya no existe; los controles PrintDialog y PrintPreviewDialog administran
automáticamente la información del puerto.
RightToLeft (Propiedad)
En Visual Basic 6.0, la propiedad RightToLeft determina cómo el objeto Printer dará formato al resultado en una plataforma
bidireccional, como Windows 95 en árabe o hebreo.
En Visual Basic 2005, la propiedad RightToLeft ya no es necesaria; la configuración de la localización controla la dirección de
impresión en versiones posteriores de Windows.
TrackDefault (Propiedad)
En Visual Basic 6.0, la propiedad TrackDefault determina si el objeto Printer siempre señala a la misma impresora o si
cambia la impresora a la que señala si se modifica la configuración de impresora predeterminada en el Panel de control del
sistema operativo. Cambiar la configuración de la propiedad TrackDefault mientras un trabajo de impresión está en curso
hace que la impresión se detenga inmediatamente.
En Visual Basic 2005, la propiedad TrackDefault ya no existe; la propiedad IsDefaultPrinter de la clase PrinterSettings se
puede utilizar para determinar si una impresora es el valor predeterminado, pero ya no se detiene la impresión si cambia la
impresora predeterminada.
Zoom (Propiedad)
En Visual Basic 6.0, la propiedad Zoom determina el porcentaje por el cual se aumenta o disminuye la impresión. Por ejemplo,
tiene una página impresa tamaño carta, con el Zoom configurado en 50. Esta página contiene tantos datos como una página
de 42 por 55 cm, porque el texto y los gráficos impresos en la página tamaño carta se reducen a la mitad de su alto y ancho
originales.
En Visual Basic 2005, la propiedad Zoom ya no existe; si una impresora tiene las funciones de zoom, la configuración se
expone automáticamente en el cuadro de diálogo Imprimir. También puede utilizar los métodos gráficos para escalar el
resultado antes de asignarlo a un componente PrintDocument.
Propiedades y métodos de gráficos
En Visual Basic 6.0, las diversas propiedades y métodos de gráficos se pueden utilizar para dibujar líneas, formas y texto en un
objeto Printer.
En Visual Basic 2005, la mayoría de los objetos ya no tiene sus propias propiedades o métodos de gráficos; todavía puede
dibujar líneas, formas y texto creando y utilizando un objeto Graphics. Para obtener más información, vea
Gráficos para usuarios de Visual Basic 6.0.
Cambios de código para objeto Printer
Debido a las diferencias considerables en los modelos de impresión entre Visual Basic 6.0 y Visual Basic 2005, una
comparación de las técnicas de codificación tiene muy poco valor. Para obtener un ejemplo de impresión en Visual Basic 2005,
vea Ejemplo Printing.
Equivalencias de propiedades y métodos para objeto Printer
En las siguientes tablas se enumeran propiedades y métodos de Visual Basic 6.0 junto con sus equivalentes en Visual Basic
2005. No se enumeran aquellas propiedades y métodos que tienen el mismo nombre y comportamiento. Salvo que se indique
lo contrario, todas las enumeraciones Visual Basic 2005 se asignan al espacio de nombres System.Windows.Forms.
Esta tabla proporciona vínculos a temas que explican las diferencias de comportamiento. Cuando no hay equivalente directo en
Visual Basic 2005, se proporcionan vínculos a temas que presentan alternativas.
Propiedades
Visual B Equivalente en Visual Basic 2005
asic 6.0
ColorM Nueva implementación. La propiedad SupportsColor de la clase PrinterSettings se puede usar para determinar las fu
ode nciones de color de una impresora.

Copies La propiedad Copies de la clase PrinterSettings.

Current Nueva implementación. Para obtener más información, vea Gráficos para usuarios de Visual Basic 6.0.
X
Current
Y
Device La propiedad PrinterName de la clase PrinterSettings.
Name

DrawM Nueva implementación. Para obtener información detallada, vea Gráficos para usuarios de Visual Basic 6.0.
ode
DrawSty
le
DrawWi
dth

DriverN Nueva implementación. No es necesaria, Windows administra los controladores de impresora.


ame

Duplex La propiedad Duplex de la clase PrinterSettings.

FillColor Nueva implementación. Para obtener información detallada, vea Gráficos para usuarios de Visual Basic 6.0.
FillStyle

Font Nueva implementación. Para obtener información detallada, vea Control de fuentes para usuarios de Visual Basic 6.0
.
FontBol
d
FontCou
nt
FontItali
c
FontNa
me
Fonts
FontSiz
e
FontStri
keThru
FontTra
nsparen
t
FontUn
derline

ForeCol Nueva implementación. Para obtener información detallada, vea Control del color para usuarios de Visual Basic 6.0.
or

hDC Ya no es necesaria. Una instancia de un componente PrintDocument equivale a un contexto de dispositivo.

Height La propiedad PaperSize de la clase PageSettings.

Orientat La propiedad Landscape de la clase PageSettings.


ion

Page Nueva implementación. No se hace un seguimiento del número de la página actual; sin embargo, puede hacerlo mu
y fácilmente estableciendo una variable en el evento BeginPrint e incrementándola en el evento PrintPage.
PaperBi La propiedad PaperSources de la clase PrinterSettings.
n

PaperSi La propiedad PaperSize de la clase PageSettings.


ze

Port Ya no es necesaria. El control PrintPreviewDialog configura automáticamente la información de puerto.

PrintQu La propiedad PrinterResolutions de la clase PrinterSettings.


ality

RightTo Ya no es necesaria. La configuración de las versiones traducidas de Windows controla la dirección de impresión.
Left

ScaleHe Nueva implementación. Para obtener información detallada, vea


ight Sistema de coordenadas para usuarios de Visual Basic 6.0.
ScaleLef
t
ScaleM
ode
ScaleTo
p
ScaleWi
dth

TrackDe No hay equivalente directo La propiedad IsDefaultPrinter de la clase PrinterSettings se puede utilizar para determin
fault ar si una impresora es el valor predeterminado.

TwipsPe Ya no es necesaria. Las medidas en Visual Basic 2005 siempre están en píxeles.
rPixelX
TwipsPe
rPixelY

Width La propiedad PaperSize de la clase PageSettings.

Zoom Ya no es necesaria. Si la impresora tiene capacidades de zoom, la configuración se expone automáticamente en el cu


adro de diálogo Imprimir.
Métodos
Visual Basic 6 Equivalente en Visual Basic 2005
.0
Circle Nueva implementación. Para obtener más información, vea Gráficos para usuarios de Visual Basic 6.0.

EndDoc Print

KillDoc Cancel

Line Nueva implementación. Para obtener más información, vea Gráficos para usuarios de Visual Basic 6.0.

NewPage HasMorePages

PaintPicture Nueva implementación. Para obtener más información, vea Gráficos para usuarios de Visual Basic 6.0.
PSet
Scale Nueva implementación. Para obtener información detallada, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.
ScaleX
ScaleY
TextHeight Nueva implementación. Para obtener más información, vea Gráficos para usuarios de Visual Basic 6.0.
TextWidth

Notas de la actualización
Cuando se actualiza una aplicación de Visual Basic 6.0 a Visual Basic 2005, no se actualiza ninguna instancia del objeto Printer
y se produce un error de actualización. Necesitará eliminar el código del objeto Printer y volver a implementar la impresión
mediante un componente PrintDocument.
Vea también
Tareas
Ejemplo Printing
Referencia
PageSettings Class
PrinterSettings Class
Conceptos
Imprimir cambios para usuarios de Visual Basic 6.0
Gráficos para usuarios de Visual Basic 6.0
Otros recursos
Funcionalidad para imprimir en formularios Windows Forms
Conceptos de Visual Basic

Colección Printers para usuarios de Visual Basic 6.0


La colección Printers de Visual Basic 6.0 no tiene ningún equivalente directo en Visual Basic 2005.
Diferencias conceptuales
En Visual Basic 6.0, la colección Printers se usa para devolver información sobre las impresoras disponibles de un sistema.
Normalmente, recorre en iteración la colección Printers para buscar una impresora con determinados atributos y luego
establece esa impresora como predeterminada para la aplicación. Por ejemplo, podría elegir una impresora láser en lugar de
una impresora matricial de puntos.
En Visual Basic 2005, no hay ningún equivalente directo para la colección Printers y el modelo ha cambiado; en lugar de elegir
una impresora para la aplicación debe permitir que el usuario la elija.
Se puede utilizar un componente PrintDialog para presentar una lista de impresoras disponibles al usuario. Las propiedades de
la impresora seleccionada por el usuario se recuperan utilizando la clase PrinterSettings.
La colección Printers de Visual Basic 6.0 tiene dos propiedades: Item y Count. El componente PrintDialog no tiene
propiedades equivalentes. La clase PrinterSettings tiene una colección InstalledPrinters con Item y Count; no obstante, se
trata de una colección de tipo String y no se puede utilizar para consultar los atributos de una impresora.
Cambios de código para la colección Printers
Los siguientes ejemplos de código ilustran las diferencias en las técnicas de codificación entre Visual Basic 6.0 y Visual Basic
2005.
Cambios de código para devolver una lista de las impresoras disponibles
El ejemplo siguiente muestra cómo rellenar un control ListBox con una lista de las impresoras disponibles.

' Visual Basic 6.0


Dim X As Printer
For Each X In Printers
List1.AddItem X.DeviceName
Next

VB
' Visual Basic 2005
Dim i As Integer
Dim pkInstalledPrinters As String
For i = 0 To System.Drawing.Printing.PrinterSettings. _
InstalledPrinters.Count - 1

pkInstalledPrinters = System.Drawing.Printing.PrinterSettings. _
InstalledPrinters.Item(i)
ListBox1.Items.Add(pkInstalledPrinters)
Next

Notas de actualización
Cuando una aplicación de Visual Basic 6.0 se actualiza a Visual Basic 2005, las instancias de la colección Printers no se
actualizan y se envía un mensaje de error de actualización. Deberá quitar el código de la colección Printers y modificar su
código para que utilice un componente PrintDialog.
Vea también
Referencia
Información general sobre el componente PrintDialog (formularios Windows Forms)
PrinterSettings Class
Conceptos
Imprimir cambios para usuarios de Visual Basic 6.0
Otros recursos
Funcionalidad para imprimir en formularios Windows Forms
Conceptos de Visual Basic

Control ProgressBar para usuarios de Visual Basic 6.0


El control ProgressBar de Visual Basic 6.0 se ha reemplazado por el control ProgressBar de Windows Forms en Visual Basic
2005. Los nombres de algunas propiedades, métodos, eventos y constantes son diferentes y, en algunos casos, existen
diferencias de comportamiento.
Diferencias conceptuales
Propiedad Negotiate
En Visual Basic 6.0, la propiedad Negotiate de un control ProgressBar se puede utilizar para ocultar automáticamente el
control cuando se muestra una barra de herramientas.
El control ProgressBar de Visual Basic 2005 no tiene ninguna propiedad Negotiate; puede lograr el mismo efecto
estableciendo la propiedad Visible en false en tiempo de ejecución.
Propiedad Orientation
En Visual Basic 6.0, un control ProgressBar se puede mostrar horizontalmente o verticalmente estableciendo la propiedad
Orientation. El control ProgressBar de Visual Basic 2005 sólo se puede mostrar horizontalmente.
Equivalencias de propiedad, método y evento del control ProgressBar
En las siguientes tablas se enumeran propiedades, métodos y eventos de Visual Basic 6.0 con sus equivalentes en Visual Basic
2005. No se enumeran aquellas propiedades, métodos y eventos que tienen el mismo nombre y el mismo comportamiento.
Donde corresponde, las constantes aparecen con sangría debajo de la propiedad o método. Salvo que se indique lo contrario,
todas las enumeraciones de Visual Basic 2005 se asignan al espacio de nombres System.Windows.Forms.
Cuando es necesario, se proporcionan vínculos a temas que explican las diferencias de comportamiento. Cuando no existe un
equivalente directo en Visual Basic 2005, se proporcionan vínculos a temas en los que se incluyen alternativas.
Propiedades
Visual Basi Equivalente en Visual Basic 2005
c 6.0
Align Dock

Appearanc Nueva implementación. Para obtener más información, vea


e Propiedades Appearance y BorderStyle para usuarios de Visual Basic 6.0.
BorderStyl
e

Container Parent

DragIcon Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.
DragMode

Height Height
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

HWnd Handle

Index Nueva implementación. Para obtener más información, vea


Matrices de controles para usuarios de Visual Basic 6.0.
Left Left
Nota Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

Max Maximum

Min Minimum

MouseIcon Nueva implementación. Para obtener más información, vea No se puede personalizar la propiedad MousePointer.

MousePoi Cursor
nter
Para obtener una lista de constantes, vea MousePointer para usuarios de Visual Basic 6.0.

Negotiate Nueva implementación.

OLEDropM Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.
ode

Orientatio Nueva implementación.


n

Parent FindForm

Scrolling Style

ToolTipTe Componente ToolTip.


xt
Para obtener más información, vea
Compatibilidad de la información sobre herramientas para usuarios de Visual Basic 6.0.

Top Top
Nota Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

Value Value
Nota
En Visual Basic 6.0, cuando se cambia Value, se produce el evento Change. En Visual Basic 2005, no se produce
el evento Change, utilice en su lugar el evento ValueChanged.

WhatsThis Nueva implementación. Para obtener más información, vea


HelpID Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

Width Width, Size


Nota Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.
Métodos
Visual Basic Equivalente en Visual Basic 2005
6.0
Drag Nueva implementación. Para obtener más información, vea
Arrastrar y colocar para usuarios de Visual Basic 6.0.
Move SetBounds
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

OLEDrag Nueva implementación. Para obtener más información, vea


Arrastrar y colocar para usuarios de Visual Basic 6.0.

ShowWhatsT Nueva implementación. Para obtener más información, vea


his Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

ZOrder: Función BringToFront o SendToBack


0—vbBring BringToFront
ToFront
SendToBack
1—vbSendT
oBack
Eventos
Visual Basic 6.0 Equivalente en Visual Basic 2005
DragDrop Nueva implementación. Para obtener más información, vea
Arrastrar y colocar para usuarios de Visual Basic 6.0.
DragOver

OLECompleteDra Nueva implementación. Para obtener más información, vea


g Arrastrar y colocar para usuarios de Visual Basic 6.0.
OLEDragDrop
OLEDragOver
OLEGiveFeedbac
k
OLESetData
OLEStartDrag

Notas de actualización
Cuando se actualiza un proyecto de Visual Basic 6.0 en Visual Basic 2005, cualquier control ProgressBar se actualiza en los
controles ProgressBar de los formularios Windows Forms. Cuando las propiedades, métodos y eventos no tienen ningún
equivalente o presentan diferente comportamiento, se agregan notas o advertencias de actualización al código.
Vea también
Tareas
Cómo: Establecer el valor que muestra el control ProgressBar de formularios Windows Forms
Otros recursos
ProgressBar (Control de formularios Windows Forms)
Conceptos de Visual Basic

Control RDO Data para usuarios de Visual Basic 6.0


El control RDO Data de Visual Basic 6.0 no tiene ningún equivalente directo en Visual Basic 2005.
Diferencias conceptuales
El control RDO Data de Visual Basic 6.0 se utiliza como mecanismo para enlazar controles a una base de datos a través de RDO
(Remote Data Objects). En Visual Basic 2005, la arquitectura de enlace de datos ha cambiado y ya no se admiten objetos RDO.
Para obtener más información, vea Acceso a datos para usuarios de Visual Basic 6.0.
Notas de actualización
Cuando una aplicación de Visual Basic 6.0 se actualiza a Visual Basic 2005, las instancias del control RDO Data no se actualizan
y se envía un mensaje de error de actualización. Deberá modificar la aplicación de Visual Basic 6.0 para utilizar ADO (ActiveX
Data Objects) antes de actualizar o modificar cualquier código de enlace a datos en la aplicación actualizada para usar la nueva
arquitectura de datos.
Vea también
Conceptos
Consideraciones previas a la actualización
Acceso a datos para usuarios de Visual Basic 6.0
Conceptos de Visual Basic

Control RichTextBox para usuarios de Visual Basic 6.0


El control RichTextBox de Visual Basic 6.0 se ha reemplazado por el control RichTextBox de Windows Forms en Visual Basic
2005. Los nombres de algunas propiedades, métodos, eventos y constantes son diferentes y, en algunos casos, existen
diferencias de comportamiento.
Diferencias conceptuales
AutoVerbMenu (propiedad)
En Visual Basic 6.0, para mostrar un menú contextual con un conjunto de comandos estándar se utiliza la propiedad
AutoVerbMenu del control RichTextBox.
En Visual Basic 2005, la propiedad AutoVerbMenu ya no existe. Para proporcionar un menú contextual para un control
RichTextBox, utilice un componente ContextMenuStrip. Para obtener más información, vea
La propiedad AutoVerbMenu no se ha actualizado.
DisableNoScroll (propiedad)
En Visual Basic 6.0, la propiedad DisableNoScroll determina si las barras de desplazamiento aparecerán como no disponibles
cuando haya muy pocas líneas de texto para el desplazamiento vertical o muy pocos caracteres para el desplazamiento
horizontal en un control RichTextBox.
En Visual Basic 2005, la propiedad DisableNoScroll ya no existe. Puede utilizar la propiedad ScrollBars para forzar que
aparezcan las barras de desplazamiento, pero no puede hacer que aparezcan como no disponibles.
FileName (propiedad) y LoadFile (método)
En Visual Basic 6.0, se puede utilizar la propiedad FileName o el método LoadFile para cargar archivos .rtf o de texto en
controles RichTextBox.
En Visual Basic 2005, sólo está disponible el método LoadFile; no puede asignar un archivo en tiempo de diseño.
SelPrint (método)
En Visual Basic 6.0, se puede utilizar el método SelPrint de un control RichTextBox para imprimir el contenido del control.
Este método acepta un único argumento, hDC, que especifica el contexto del dispositivo.
En Visual Basic 2005, ya no existe el método SelPrint y los contextos de dispositivo no se utilizan para imprimir. El control
RichTextBox no proporciona un método para imprimir su contenido. Sin embargo, puede extender la clase RichTextBox
para que utilice el mensaje EM_FORMATRANGE. A continuación puede enviar el contenido de un RichTextBox a un
dispositivo de salida, como una impresora. Para obtener más información, vea La propiedad SelPrint no se ha actualizado.
SelTabCount (propiedad)
En Visual Basic 6.0, la propiedad SelTabCount determina el número de posiciones de tabulación del párrafo o párrafos
seleccionados, o de los párrafos que vienen a continuación del punto de inserción.
En Visual Basic 2005, ya no existe la propiedad SelTabCount, la reemplaza el parámetro Length de la propiedad
SelectionTabs (SelectionTabs.Length).
Span (método)
En Visual Basic 6.0, el método Span de un control RichTextBox se puede utilizar para seleccionar un fragmento de texto
basándose en un conjunto de caracteres especificado.
En Visual Basic 2005, el método Span ya no existe. Puede utilizar el método Find con el argumento characterSet() para
buscar un carácter especificado y luego utilizar la propiedad SelectedText para seleccionar el texto.
Upto (método)
En Visual Basic 6.0, el método Upto de un control RichTextBox se utiliza para mover el punto de inserción hasta el primer
carácter (sin incluirlo) que pertenece a un conjunto de caracteres especificado.
En Visual Basic 2005, el método Upto ya no existe. Puede utilizar el método Find con el argumento characterSet() para
buscar un carácter especificado y luego utilizar la propiedad SelectionStart para desplazar el punto de inserción.
Diferencias adicionales
Asimismo, hay numerosas diferencias conceptuales que se aplican a todos los controles, incluidas las diferencias en los enlaces
de datos, control de fuentes, funciones de arrastrar y colocar, compatibilidad con Ayuda y otras. Para obtener más información,
vea Conceptos de formularios Windows Forms para usuarios de Visual Basic 6.0.
Cambios de código para el control RichTextBox
En los ejemplos siguientes se muestran las diferencias que existen entre las técnicas de codificación de Visual Basic 6.0 y Visual
Basic 2005.
Cambios de código para buscar en un control RichTextBox
En el código siguiente se muestra cómo buscar desde el punto de inserción hasta el final de una frase en un control
RichTextBox y resaltarlo. El ejemplo requiere un control RichTextBox con una o más frases escritas en la propiedad Text y
requiere un control Button. Dado que se llama al código desde el evento Click del botón, debería establecerse la propiedad
HideSelection del control RichTextBox en False; de lo contrario, no estará visible el resaltado.

' Visual Basic 6.0


' Make sure that HideSelection is set to False.
Private Sub Command1_Click()
RichTextBox1.Span ".?!", True, True
End Sub

VB
' Visual Basic 2005
' Make sure that HideSelection is set to False.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles Button1.Click

Dim endChars() As Char = New Char() {".", "!", "?"}


Dim intEnd As Integer
intEnd = RichTextBox1.Find(endChars, RichTextBox1.SelectionStart)
RichTextBox1.SelectionLength = intEnd - RichTextBox1.SelectionStart
End Sub

Equivalencias de propiedades, métodos y eventos del control RichTextBox


En las siguientes tablas se enumeran propiedades, métodos y eventos de Visual Basic 6.0 con sus equivalentes en Visual Basic
2005. No se enumeran aquellas propiedades, métodos y eventos que tienen el mismo nombre y el mismo comportamiento.
Salvo que se indique lo contrario, todas las enumeraciones de Visual Basic 2005 se asignan al espacio de nombres
System.Windows.Forms.
Esta tabla proporciona vínculos a temas en los que se explican las diferencias de comportamiento. Cuando no existe un
equivalente directo en Visual Basic 2005, se proporcionan vínculos a temas en los que se incluyen alternativas.
Propiedades
Visual Basic Equivalente en Visual Basic 2005
6.0
Appearance Nueva implementación. Para obtener más información, vea
Propiedades Appearance y BorderStyle para usuarios de Visual Basic 6.0.

AutoVerbM Nueva implementación. Para obtener más información, vea La propiedad AutoVerbMenu no se ha actualizado.
enu

BackColor BackColor
Nota
Los colores se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Control del color para usuarios de Visual Basic 6.0.

Container Parent
DataBindin Nueva implementación. Para obtener más información, vea Acceso a datos para usuarios de Visual Basic 6.0.
gs
DataChange
d
DataField
DataFormat
DataMembe
r
DataSource

DisableNoS Nueva implementación.


croll

DragIcon Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.
DragMode

FileName Método LoadFile

Font Font
FontBold Nota
FontItalic
Las fuentes se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
FontName Objeto Font para usuarios de Visual Basic 6.0.
FontSize
FontStriketh
rough
FontUnderli
ne

ForeColor ForeColor
Nota
Los colores se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Control del color para usuarios de Visual Basic 6.0.

Height Height, Size


Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

HelpContex Nueva implementación. Para obtener más información, vea


tID Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

HWnd Handle

Index Nueva implementación. Para obtener más información, vea


Matrices de controles para usuarios de Visual Basic 6.0.
Left Left
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

MouseIcon Nueva implementación. Para obtener más información, vea


No se puede personalizar la propiedad MousePointer.

MousePoint Cursor
er
Para obtener una lista de constantes, vea MousePointer para usuarios de Visual Basic 6.0.

OLEDragMo Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.
de
OLEDropMo
de

Parent Método FindForm

SelAlignme SelectionAlignment
nt

SelBold SelectionFont

SelBullet SelectionBullet

SelCharOffs SelectionCharOffset
et

SelColor SelectionColor

SelFontNam SelectionFont
e

SelFontSize SelectionFont

SelHangingI SelectionHangingIndent
ndent

SelIndent SelectionIndent

SelItalic SelectionFont

SelLength SelectionLength

SelProtecte SelectionProtected
d

SelRightInd SelectionRightIndent
ent

SelRTF SelectedRtf
SelStart SelectionStart

SelStrikethr SelectionFont
u

SelTabCoun SelectionTabs.Length
t

SelTabs SelectionTabs

SelText SelectedText

SelUnderlin SelectionFont
e

TextRTF Rtf

ToolTipText Componente ToolTip


Para obtener más información, vea
Compatibilidad de la información sobre herramientas para usuarios de Visual Basic 6.0.

Top Top
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

WhatsThisH Nueva implementación. Para obtener más información, vea


elpID Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

Width Width, Size


Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

Métodos
Visual Basi Equivalente en Visual Basic 2005
c 6.0
Drag Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.

GetLineFro GetLineFromCharIndex
mChar

LinkExecut No hay equivalente. Para obtener más información, vea


e Intercambio dinámico de datos para usuarios de Visual Basic 6.0.
LinkPoke
LinkReques
t
LinkSend
Move SetBounds
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

OLEDrag Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.

SelPrint Nueva implementación. Para obtener más información, vea La propiedad SelPrint no se ha actualizado.

SetFocus Focus

ShowWhat Nueva implementación. Para obtener más información, vea


sThis Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

Span No hay equivalente directo Utilice el método Find con un argumento characterSet.

Upto No hay equivalente directo Utilice el método Find con un argumento characterSet.

ZOrder Función BringToFront o SendToBack


Eventos
Visual Basic 6.0 Equivalente en Visual Basic 2005
Change TextChanged

DblClick DoubleClick

DragDrop Nueva implementación. Para obtener más información, vea


Arrastrar y colocar para usuarios de Visual Basic 6.0.
DragOver

GotFocus Enter

LostFocus Leave

OLECompleteDra Nueva implementación. Para obtener más información, vea


g Arrastrar y colocar para usuarios de Visual Basic 6.0.
OLEDragDrop
OLEDragOver
OLEGiveFeedbac
k
OLESetData
OLEStartDrag

SelChange SelectionChanged

Validate Validating

Notas de actualización
Cuando se actualiza una aplicación de Visual Basic 6.0 a Visual Basic 2005, los controles RichTextBox se actualizan a los
controles RichTextBox de formularios Windows Forms y las propiedades, métodos y eventos se actualizan a sus equivalentes.
Donde puede haber diferencias en el comportamiento, se insertan comentarios de actualización en el código.
Vea también
Referencia
Información general sobre el control RichTextBox (formularios Windows Forms)
Otros recursos
RichTextBox (Control, formularios Windows Forms)
Conceptos de Visual Basic

Objeto Screen para usuarios de Visual Basic 6.0


El objeto Screen de Visual Basic 6.0 no tiene ningún equivalente directo en Visual Basic 2005, pero la mayor parte de su
funcionalidad se puede duplicar utilizando .NET Framework.
Diferencias conceptuales
En Visual Basic 6.0, el objeto Screen proporciona acceso al formulario y control activos en la aplicación, proporciona
información sobre la pantalla donde se muestra la aplicación y permite controlar la apariencia del cursor.
En Visual Basic 2005, no hay ningún equivalente directo para el objeto Screen, pero la mayor parte de su funcionalidad se
puede duplicar utilizando .NET Framework.
Nota
Visual Basic 2005 tiene una propiedad Screen- My.Computer.Screen. A diferencia del objeto Screen de Visual Basic 6.0, M
y.Computer.Screen sólo devuelve información de sólo lectura en la pantalla, como por ejemplo, el nombre del dispositivo,
área de trabajo y la profundidad de color. Para obtener más información, vea My.Computer.Screen (Propiedad)

ActiveControl (Propiedad)
En Visual Basic 6.0, la propiedad ActiveControl del objeto Screen se utiliza para determinar el control que tiene el foco. Se
puede utilizar la propiedad ActiveControl en una capacidad global, como en Screen.ActiveControl, donde se devuelve el
control activo en el formulario actualmente seleccionado. Si se hace referencia a un formulario concreto, es decir,
Form2.ActiveControl, ActiveControl especifica el control que tendrá el foco si el formulario mencionado esta activo.

En Visual Basic 2005, ya no hay una propiedad global ActiveControl; cada instancia de un formulario tiene su propia
propiedad ActiveControl. Al hacer referencia a un formulario concreto, esta propiedad funciona igual que en Visual Basic 6.0.
Para determinar el control activo en el formulario seleccionado, primero debe recorrer en iteración la colección OpenForms y
comprobar la propiedad ContainsFocus para determinar qué formulario está activo.
ActiveForm (Propiedad)
En Visual Basic 6.0, la propiedad ActiveForm del objeto Screen se utiliza para determinar qué formulario tiene actualmente el
foco. Si un formulario principal MDI tiene el foco, ActiveForm devuelve el último formulario MDI secundario que tenía el foco.
En Visual Basic 2005, ya no hay una propiedad global ActiveForm. Para determinar el formulario activo, debe recorrer la
colección OpenForms y buscar el formulario con la propiedad ContainsFocus establecida en True.
Los formularios principales MDI de Visual Basic 2005 (cualquier formulario con IsMDIContainer establecido en True) tienen
una propiedad ActiveMDIChild que se puede utilizar para devolver el formulario secundario activo sin utilizar la colección
OpenForms.
MousePointer (Propiedad)
En Visual Basic 6.0, la propiedad MousePointer del objeto Screen se utiliza para cambiar la apariencia del cursor; una vez
establecida se aplica a todos los formularios de la aplicación.
En Visual Basic 2005, ya no hay una propiedad global MousePointer; cada formulario tiene una propiedad Cursor que se
puede utilizar sólo para cambiar la apariencia del cursor para ese formulario.
TwipsPerPixel (Propiedades)
En Visual Basic 6.0, las propiedades TwipsPerPixelX y TwipsPerPixelY del objeto Screen se utilizan para convertir las
medidas de la pantalla de un twip lógico (la unidad de medida estándar en Visual Basic 6,0) en píxeles.
En Visual Basic 2005, los píxeles son la unidad de medida estándar; ya no hay necesidad de conversión.
Cambios de código para el objeto Screen
Los siguientes ejemplos ilustran las diferencias en las técnicas de codificación entre Visual Basic 6.0 y Visual Basic 2005.
Cambios de código para determinar el control activo
El siguiente código muestra la copia en el Portapapeles de texto procedente del control seleccionado en el formulario activo.

' Visual Basic 6.0


If TypeOf Screen.ActiveControl Is TextBox Then
Clipboard.SetText Screen.ActiveControl.Text
End If

VB
' Visual Basic 2005
Dim i As Integer
For i = 0 To My.Application.OpenForms.Count - 1
If My.Application.OpenForms.Item(i).ContainsFocus Then
If TypeOf (My.Application.OpenForms.Item(i).ActiveControl) _
Is TextBox Then
My.Computer.Clipboard.SetText(My.Application.OpenForms. _
Item(i).ActiveControl.Text)
End If
End If
Next

Cambios de código para determinar el formulario activo


El siguiente código muestra el cambio del título del formulario actualmente seleccionado.

' Visual Basic 6.0


Screen.ActiveForm.Caption = "This is the selected form"

VB
' Visual Basic 2005
Dim i As Integer
For i = 0 To My.Application.OpenForms.Count - 1
If My.Application.OpenForms.Item(i).ContainsFocus Then
My.Application.OpenForms.Item(i).Text = _
"This is the selected form"
End If
Next

Cambios de código para determinar el formulario activo en una aplicación MDI


El siguiente código muestra el cambio del título del formulario MDI secundario actualmente seleccionado.

' Visual Basic 6.0


Screen.ActiveForm.Caption = "This is the selected child form"

VB
' Visual Basic 2005
Me.ActiveMdiChild.Text = "This is the selected child form"

Equivalencias de la propiedad de objeto Screen


En la siguiente tabla se muestran algunas propiedades de Visual Basic 6.0 y sus equivalentes de Visual Basic 2005. Cuando es
necesario, se proporcionan vínculos a temas que explican las diferencias de comportamiento. Cuando no hay equivalente
directo en Visual Basic 2005, se proporcionan vínculos a temas que presentan alternativas.
Propiedades
Visual Ba Equivalente en Visual Basic 2005
sic 6.0
ActiveCo My.Application.OpenForms(0).ActiveControl
ntrol
ActiveFor My.Application.OpenForms(0).ContainsFocus o
m
ActiveMdiChild (aplicaciones MDI)

FontCoun Nueva implementación. El comportamiento de la enumeración de fuentes es diferente. Para obtener más informaci
t ón, vea Control de fuentes para usuarios de Visual Basic 6.0.
Fonts

Height My.Computer.Screen.Bounds.Height

MouseIco Nueva implementación. Para obtener más información, vea No se puede personalizar la propiedad MousePointer.
n

MousePoi System.Windows.Forms.Cursor
nter

TwipsPer Nueva implementación. En Visual Basic 2005, las coordenadas se expresan en píxeles; no se utilizan los twips como
PixelX unidades de medida.
TwipsPer
PixelY

Width My.Computer.Screen.Bounds.Width

Notas de la actualización
Cuando se actualiza una aplicación de Visual Basic 6.0 a Visual Basic 2005, las propiedades del objeto Screen se actualizan a
sus equivalentes en Visual Basic 2005. Donde puede haber diferencias en el comportamiento, se insertan comentarios de
actualización en el código.
Vea también
Referencia
My.Application.OpenForms (Propiedad)
My.Computer.Screen (Propiedad)
Conceptos
Objeto App para usuarios de Visual Basic 6.0
Control de fuentes para usuarios de Visual Basic 6.0
Conceptos de Visual Basic

Control Shape para usuarios de Visual Basic 6.0


El control Shape de Visual Basic 6.0 no tiene ningún equivalente en Visual Basic 2005. Sin embargo, puede utilizar los métodos
Graphics para lograr los mismos resultados.
Diferencias conceptuales
En Visual Basic 6.0, el control Shape proporciona una manera fácil de dibujar rectángulos, círculos y otras formas en un
formulario en tiempo de diseño. El control Shape es un control "ligero", lo que significa que no tiene un identificador de
Windows, también conocido como HWnd.
En Visual Basic 2005, no hay ningún equivalente para el control Shape y ya no se admiten controles ligeros. Existen, sin
embargo, maneras de dibujar formas en un formulario tanto en tiempo de diseño como en tiempo de ejecución.
En tiempo de diseño, puede dibujar una forma cuadrada o rectangular en un formulario agregando un control Label y
estableciendo la propiedad Text en una cadena vacía, la propiedad BorderStyle en FixedSingle, y BackColor, Width y Height en
el color y las dimensiones que desee.
En tiempo de ejecución, puede dibujar rectángulos, elipses y formas complejas en un controlador de eventos Paint de un
formulario creando un nuevo objeto a partir de la clase Graphics y llamando a sus métodos.
En Visual Basic 6.0, puede utilizar un control Shape para dibujar una forma encima de un control contenedor como un control
PictureBox o Frame agregando un control Shape al contenedor.
En Visual Basic 2005, puede lograr el mismo efecto llamando a los métodos Graphics en el evento Paint del control
contenedor.
Cambios de código para el control Shape
En los ejemplos de código siguientes se ilustran las diferencias en las técnicas de codificación entre Visual Basic 6.0 y Visual
Basic 2005.
Cambios de código para dibujar formas rectangulares
El código siguiente muestra el dibujo de un rectángulo relleno en un formulario en tiempo de ejecución. En el ejemplo de
Visual Basic 6.0, se utiliza el control Shape; se supone que se agregó un control Line en tiempo de diseño. El ejemplo de Visual
Basic 2005 muestra dos métodos diferentes que utilizan un control Label y que utilizan métodos Graphics.
Nota
Mientras que en Visual Basic 6.0 la unidad de medida predeterminada eran los twips, en Visual Basic 2005 son los píxeles.

' Visual Basic 6.0


Private Sub Form_Load()
' Show a solid red rectangle 200 twips from the top left.
Shape1.Top = 200
Shape1.Left = 200
Shape1.FillColor = vbRed
Shape1.FillColor= vbFSSolid
Shape1.BorderColor = vbRed
End Sub

VB
' Visual Basic 2005
' Using a Label control
Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles MyBase.Load
Dim Shape1 As New System.Windows.Forms.Label
' Show a solid red rectangle 14 pixels from the top left.
Shape1.Location = New System.Drawing.Point(14, 14)
Shape1.Size = New System.Drawing.Size(200, 100)
Shape1.BorderStyle = BorderStyle.None
Shape1.BackColor = System.Drawing.Color.Red
Shape1.Text = ""
Controls.Add(Shape1)
End Sub

VB
' Visual Basic 2005
' Using Graphics methods
Private Sub Form2_Paint(ByVal sender As Object, ByVal e As _
System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
' Draw a solid blue rectangle below the red rectangle.
e.Graphics.FillRectangle(Brushes.Blue, 14, 120, 200, 100)
End Sub

Cambios de código para dibujar círculos


El código siguiente muestra el dibujo de un círculo en un formulario en tiempo de ejecución. En el ejemplo de Visual Basic 6.0,
se utiliza el control Shape; se supone que se agregó un control Shape en tiempo de diseño. El ejemplo de Visual Basic 2005
utiliza los métodos Graphics.
Nota
Mientras que en Visual Basic 6.0 la unidad de medida predeterminada eran los twips, en Visual Basic 2005 son los píxeles.

' Visual Basic 6.0


Private Sub Form_Load()
Draw a 1000 twip diameter red circle
Shape1.Top = 0
Shape1.Left = 0
Shape1.Height = 1000
Shape1.Width = 1000
Shape1.Shape = vbShapeCircle
Shape1.BorderColor = vbRed
End Sub

VB
' Visual Basic 2005
Private Sub Form3_Paint(ByVal sender As Object, ByVal e As _
System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
' Draw a 70 pixel diameter red circle.
e.Graphics.DrawEllipse(Pens.Red, 0, 0, 70, 70)
End Sub

Notas de actualización
Cuando se actualiza una aplicación de Visual Basic 6.0 a Visual Basic 2005, se reemplaza cualquier control Shape por controles
Label de formularios Windows Forms, con la propiedad BorderStyle establecida en FixedSingle, y las propiedades
BackColor, Width y Height establecidas para que coincidan con el control original.
Nota
Los controles Label se pueden agregar al formulario en un orden diferente que los controles Shape originales. Para las form
as superpuestas, es posible que se deba llamar a la función BringToFront o SendToBack para lograr la misma presentación vi
sual.

Los controles Shape cuya propiedad Shape esté establecida en 2-Oval o 3-Circle no se pueden actualizar y se reemplazan
por un control Label como marcador de posición. Puede reemplazar el control Shape mediante las funciones de gráficos
integradas en .NET Framework. Para obtener más información, vea Gráficos para usuarios de Visual Basic 6.0.
Vea también
Conceptos
Gráficos para usuarios de Visual Basic 6.0
Conceptos de Visual Basic

Control StatusBar para usuarios de Visual Basic 6.0


El control StatusBar de Visual Basic 6.0 se ha reemplazado por el control StatusStrip de Windows Forms en Visual Basic 2005.
Los nombres de algunas propiedades, métodos, eventos y constantes son diferentes y, en algunos casos, existen diferencias de
comportamiento.
Diferencias conceptuales
El control StatusBar de Visual Basic 6.0 contiene una colección de objetos Panel, cada uno de los cuales puede mostrar texto e
imágenes.
El control StatusStrip de Visual Basic 2005 es más parecido al control ToolStrip. Además de los paneles (ahora conocidos
como controles ToolStripStatusLabel ) los controles StatusStrip contienen barras de progreso, menús desplegables y
botones de división. Hay también un control StatusBar de formularios Windows Forms, pero se recomienda que utilice en su
lugar StatusStrip.
SimpleText (propiedad)
En Visual Basic 6.0, la propiedad SimpleText de un control StatusBar define el texto que se muestra cuando la propiedad
Style se establece en sbrSimple.
El control StatusStrip de Visual Basic 2005 no admite un estilo simple y ya no hay ninguna propiedad SimpleText.
Style (propiedad)
En Visual Basic 6.0, la propiedad Style determina si un control StatusBar muestra varios paneles (sbrNormal) o sólo uno de
gran tamaño (sbrSimple). Cuando se establece en el estilo simple, el estilo bisel se genera sin bordes.
En Visual Basic 2005, ya no existe la propiedad Style; para emular el estilo simple puede agregar un solo objeto
ToolStripStatusLabel al control StatusStrip y establecer su propiedad BorderStyle.
Equivalencias de propiedades, métodos y eventos del control StatusBar
En las siguientes tablas se enumeran propiedades, métodos y eventos de Visual Basic 6.0 con sus equivalentes en Visual Basic
2005. No se enumeran aquellas propiedades, métodos y eventos que tienen el mismo nombre y el mismo comportamiento.
Salvo que se indique lo contrario, todas las enumeraciones de Visual Basic 2005 se asignan al espacio de nombres
System.Windows.Forms.
Cuando es necesario, se proporcionan vínculos a temas que explican las diferencias de comportamiento. Cuando no existe un
equivalente directo en Visual Basic 2005, se proporcionan vínculos a temas en los que se incluyen alternativas.
Propiedades
Visual Basi Equivalente en Visual Basic 2005
c 6.0
Align Dock

Container Parent

DragIcon Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.
DragMode
Font Font
FontBold Nota
FontItalic Las fuentes se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
FontName Objeto Font para usuarios de Visual Basic 6.0.
FontSize
FontStrike
through
FontUnder
line

Height Height
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

HWnd Handle

Index Nueva implementación. Para obtener más información, vea


Matrices de controles para usuarios de Visual Basic 6.0.

MouseIco Nueva implementación. Para obtener más información, vea No se puede personalizar la propiedad MousePointer.
n

MousePoi Cursor
nter
Para obtener una lista de constantes, vea MousePointer para usuarios de Visual Basic 6.0.

OLEDropM Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.
ode

Panels ToolStripItemCollection

Parent FindForm

ShowTips Componente ToolTip.


Para obtener más información, vea
Compatibilidad de la información sobre herramientas para usuarios de Visual Basic 6.0.

SimpleTex Nueva implementación.


t

Style Nueva implementación.

ToolTipTe Componente ToolTip.


xt
Para obtener más información, vea
Compatibilidad de la información sobre herramientas para usuarios de Visual Basic 6.0.
Value Value
Nota
En Visual Basic 6.0, cuando se cambia la propiedad Value , se produce el evento Change. En Visual Basic 2005,
no se produce el evento Change, utilice en su lugar el evento ValueChanged.

WhatsThis Nueva implementación. Para obtener más información, vea


HelpID Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.
Métodos
Visual Basic Equivalente en Visual Basic 2005
6.0
Drag Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.

Move SetBounds
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

OLEDrag Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.

ShowWhats Nueva implementación. Para obtener más información, vea


This Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

ZOrder: Función BringToFront o SendToBack


0 – vbBringT BringToFront
oFront
SendToBack
1 - vbSendT
oBack
Eventos
Visual Basic 6.0 Equivalente en Visual Basic 2005
DblClick DoubleClick

DragDrop Nueva implementación. Para obtener más información, vea


Arrastrar y colocar para usuarios de Visual Basic 6.0.
DragOver

OLECompleteDra Nueva implementación. Para obtener más información, vea


g Arrastrar y colocar para usuarios de Visual Basic 6.0.
OLEDragDrop
OLEDragOver
OLEGiveFeedbac
k
OLESetData
OLEStartDrag

PanelClick Click

PanelDblClick DoubleClick
Notas de actualización
Cuando se actualiza un proyecto de Visual Basic 6.0 a Visual Basic 2005, se actualizan todos los controles StatusBar a
controles StatusBar de formularios Windows Forms. Cuando las propiedades, métodos y eventos no tienen ningún
equivalente o tienen diferencias en comportamiento, se agregan al código notas o advertencias de actualización.
Vea también
Tareas
Ejemplo StatusStrip Control
Referencia
StatusStrip
Conceptos de Visual Basic

Control TextBox para usuarios de Visual Basic 6.0


El control TextBox en Visual Basic 6.0 se ha reemplazado por el control TextBox de formularios Windows Forms en Visual
Basic 2005. Los nombres de algunas propiedades, métodos, eventos y constantes son diferentes y, en algunos casos, existen
diferencias de comportamiento.
Diferencias conceptuales
En Visual Basic 6.0, la propiedad MaxLength determina el número de caracteres que se pueden escribir en un control
TextBox. Si intenta insertar el texto mediante programación, se truncará en la longitud especificada por la propiedad
MaxLength.
En Visual Basic 2005, el comportamiento de la propiedad MaxLength ya no se aplica al texto que se agrega mediante
programación. Para duplicar el comportamiento de Visual Basic 6.0, el propio usuario debe truncar la cadena.
En Visual Basic 6.0, la propiedad PasswordChar es de tipo String; en Visual Basic 2005 es de tipo Char.
Existen muchas diferencias conceptuales que se aplican a todos los controles, como diferencias en los enlaces de datos, control
de fuentes, operaciones de arrastrar y colocar, compatibilidad con la Ayuda, etc. Para obtener más información, vea
Conceptos de formularios Windows Forms para usuarios de Visual Basic 6.0.
Cambios de código para el control TextBox
Los siguientes ejemplos ilustran las diferencias para codificar las técnicas entre Visual Basic 6.0 y Visual Basic 2005.
Cambios de código para buscar en un control TextBox
El siguiente código muestra cómo buscar una cadena en un control TextBox y resaltarlo.

' Visual Basic 6.0


Private Sub Form_Load ()
Text1.Text = "Two of the peak human experiences"
Text1.Text = Text1.Text & " are good food and classical music."
End Sub
Private Sub Form_Click ()
Dim Search, Where
' Get search string from user.
Search = InputBox("Enter text to be found:")
' Find string in text.
Where = InStr(Text1.Text, Search)
If Where Then
Text1.SetFocus
Text1.SelStart = Where - 1
Text1.SelLength = Len(Search)
Else
MsgBox "String not found."
End If
End Sub

VB
' Visual Basic 2005
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles MyBase.Load
TextBox1.Text = "Two of the peak human experiences are "
TextBox1.Text = TextBox1.Text & "good food and classical music."
End Sub
Private Sub Form1_Click(ByVal sender As Object, ByVal e As _
System.EventArgs) Handles Me.Click
Dim Search As String
Dim Where As String
' Get search string from user.
Search = InputBox("Enter text to be found:")
' Find string in text.
Where = InStr(TextBox1.Text, Search)
If Where Then
TextBox1.Focus()
TextBox1.SelectionStart = Where - 1
TextBox1.SelectionLength = Len(Search)
Else
MsgBox("String not found.")
End If
End Sub

Cambios de código para limitar el número de caracteres en un control TextBox


El siguiente código muestra cómo utilizar la propiedad MaxLength para especificar un número máximo de caracteres.

' Visual Basic 6.0


Private Sub Form_Load()
Text1.MaxLength = 5
End Sub
Private Sub SetText()
' Only the first five characters will be displayed.
Text1.Text = "Hello World"
End Sub

VB
' Visual Basic 2005
Private Sub Form1_Load2(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles MyBase.Load
TextBox1.MaxLength = 5
End Sub
Private Sub SetText()
' Truncate the string to equal MaxLength.
TextBox1.Text = Strings.Left("Hello World", TextBox1.MaxLength)
End Sub

Equivalencias de propiedad, método y evento de control TextBox


En las siguientes tablas se enumeran propiedades, métodos y eventos de Visual Basic 6.0 con sus equivalentes en Visual Basic
2005. No se enumeran aquellas propiedades, métodos y eventos que tienen el mismo nombre y el mismo comportamiento.
Salvo que se indique lo contrario, todas las enumeraciones de Visual Basic 2005 se asignan al espacio de nombres
System.Windows.Forms.
Esta tabla proporciona vínculos a temas que explican las diferencias de comportamiento. Cuando no hay equivalente directo en
Visual Basic 2005, se proporcionan vínculos a temas que presentan alternativas.
Propiedades
Visual Basic Equivalente en Visual Basic 2005
6.0
Alignment TextAlign

Appearance Nueva implementación. Para obtener más información, vea


Propiedades Appearance y BorderStyle para usuarios de Visual Basic 6.0.

BackColor BackColor
Nota
Los colores se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Control del color para usuarios de Visual Basic 6.0.

Container Parent
DataChange Nueva implementación. Para obtener más información, vea Acceso a datos para usuarios de Visual Basic 6.0.
d
DataField
DataFormat
DataMembe
r
DataSource

DragIcon Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.
DragMode

Font Font
FontBold Nota
FontItalic
Las fuentes se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
FontName Objeto Font para usuarios de Visual Basic 6.0.
FontSize
FontStriketh
rough
FontUnderli
ne

ForeColor ForeColor
Nota
Los colores se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Control del color para usuarios de Visual Basic 6.0.

Height Height, Size


Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

HelpContex Nueva implementación. Para obtener más información, vea


tID Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

HWnd Handle

Index Nueva implementación. Para obtener más información, vea


Matrices de controles para usuarios de Visual Basic 6.0.

Left Left
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.
LinkItem Nueva implementación. Para obtener más información, vea
Intercambio dinámico de datos para usuarios de Visual Basic 6.0.
LinkMode
LinkTimeOu
t
LinkTopic

Locked ReadOnly

MouseIcon Nueva implementación. Para obtener más información, vea


No se puede personalizar la propiedad MousePointer.

MousePoint Cursor
er
Para obtener una lista de constantes, vea MousePointer para usuarios de Visual Basic 6.0.

OLEDragMo Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.
de
OLEDropMo
de

Parent Método FindForm.

SelLength SelectionLength

SelStart SelectionStart

SelText SelectedText

ToolTipText Componente ToolTip.


Para obtener más información, vea
Compatibilidad de la información sobre herramientas para usuarios de Visual Basic 6.0.

Top Top
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

WhatsThisH Nueva implementación. Para obtener más información, vea


elpID Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

Width Width, Size


Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

Métodos
Visual Basi Equivalente en Visual Basic 2005
c 6.0
Drag Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.
LinkExecu Nueva implementación. Para obtener más información, vea
te Intercambio dinámico de datos para usuarios de Visual Basic 6.0.
LinkPoke
LinkReque
st
LinkSend

Move SetBounds
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

OLEDrag Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.

SetFocus Focus

ShowWha Nueva implementación. Para obtener más información, vea


tsThis Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

ZOrder Función BringToFront o SendToBack


Eventos
Visual Basic 6.0 Equivalente en Visual Basic 2005
Change TextChanged

DblClick DoubleClick

DragDrop Nueva implementación. Para obtener más información, vea


Arrastrar y colocar para usuarios de Visual Basic 6.0.
DragOver

GotFocus Enter

LinkClose Nueva implementación. Para obtener más información, vea


Intercambio dinámico de datos para usuarios de Visual Basic 6.0.
LinkError
LinkNotify
LinkOpen

LostFocus Leave

OLECompleteDr Nueva implementación. Para obtener más información, vea


ag Arrastrar y colocar para usuarios de Visual Basic 6.0.
OLEDragDrop
OLEDragOver
OLEGiveFeedba
ck
OLESetData
OLEStartDrag
Validate Validating

Notas de la actualización
Cuando se actualiza una aplicación de Visual Basic 6.0 a Visual Basic 2005, los controles TextBox se actualizan a los controles
TextBox de formularios Windows Forms y las propiedades, métodos y eventos se actualizan a sus equivalentes. Donde
puedan haber diferencias en comportamiento, los comentarios de actualización se insertan en el código.
Vea también
Referencia
Información general sobre el control TextBox (formularios Windows Forms)
Conceptos de Visual Basic

Control Timer para usuarios de Visual Basic 6.0


En Visual Basic 2005, el componente Timer reemplaza al control Timer de Visual Basic 6.0. Los nombres de algunas
propiedades y eventos son diferentes y, en algunos casos, existen diferencias de comportamiento.
Diferencias conceptuales
El control Timer de Visual Basic 6.0 es un control real que se ubica en un formulario en tiempo de diseño; sin embargo, no se
ve en tiempo de ejecución.
El componente Timer de Visual Basic 2005 se agrega a la bandeja en tiempo de diseño; como componente no tiene ninguna
propiedad Parent.
Nota
Además del componente Timer, .NET Framework también tiene dos clases de temporizador: Timer y Timer.

Interval (Propiedad)
En Visual Basic 6.0, puede deshabilitar un control Timer estableciendo la propiedad Interval en 0.
En Visual Basic 2005, el intervalo más bajo para la propiedad Interval es 1. Si establece el intervalo en 0, producirá una
excepción en tiempo de ejecución. El componente Timer de Visual Basic 2005 utiliza la propiedad Enabled para permitirle
deshabilitarlo o habilitarlo.
Cambios de código para control Timer
Los siguientes ejemplos ilustran las diferencias para codificar las técnicas entre Visual Basic 6.0 y Visual Basic 2005.
Cambios de código para iniciar y detener un control Timer
El siguiente código muestra cómo habilitar y deshabilitar un control Timer en tiempo de ejecución.

' Visual Basic 6.0


Public Function TimerOn(Interval As Integer)
If Interval > 0 Then
' Start the timer.
Timer1.Interval = Interval
Else
' Stop the timer.
Timer1.Interval = 0
End If
End Function

VB
' Visual Basic 2005
Public Sub TimerOn(ByRef Interval As Short)
If Interval > 0 Then
' Start the timer.
Timer1.Enabled = True
Else
' Stop the timer
Timer1.Enabled = False
End If
End Sub

Equivalencias de propiedad y evento de control Timer


En las siguientes tablas se enumeran propiedades y eventos de Visual Basic 6.0 junto con sus equivalentes en Visual Basic
2005. No se enumeran aquellas propiedades y eventos que tienen el mismo nombre y comportamiento.
Esta tabla proporciona vínculos a temas que explican las diferencias de comportamiento. Cuando no hay equivalente directo en
Visual Basic 2005, se proporcionan vínculos a temas que presentan alternativas.
Propiedades y eventos
Visual Basic Equivalente en Visual Basic 2005
6.0
Propiedad In Nueva implementación. Para obtener más información, vea
dex Matrices de controles para usuarios de Visual Basic 6.0

Propiedad In Interval
terval
Nota
El comportamiento de la propiedad Interval ha cambiado. Para obtener más información, vea
El comportamiento de la propiedad Interval de Timer ha cambiado.

Propiedad P Nueva implementación. Timer es un componente y no puede tener un elemento primario.


arent

Timer (event Tick


o)

Notas de la actualización
Cuando se actualiza una aplicación de Visual Basic 6.0 en Visual Basic 2005, cualquier control Timer se actualiza en los
componentes Timer de formularios Windows Forms. Si se encuentra que el código establece la propiedad Interval en 0, una
advertencia de actualización se agrega al código.
Vea también
Referencia
Información general sobre el componente Timer (formularios Windows Forms)
Conceptos de Visual Basic

Control ToolBar para usuarios de Visual Basic 6.0


En Visual Basic 2005, el control ToolStrip reemplaza el control ToolBar de Visual Basic 6.0. Los nombres de algunas
propiedades, métodos, eventos y constantes son diferentes y, en algunos casos, existen diferencias de comportamiento.
Diferencias conceptuales
El Visual Basic 6.0 el control ToolBar es un control ActiveX que se utiliza para crear barras de herramientas sencillas con
botones y cuadros combinados.
Puede utilizar el control ToolStrip de Visual Basic 2005 para crear barras de herramientas personalizadas y elementos de
interfaz de usuario o para crear barras de herramientas y elementos de interfaz de usuario con el aspecto y el comportamiento
de Microsoft Windows XP, Microsoft Office o Microsoft Internet Explorer. Estos elementos de interfaz de usuario admiten el
desbordamiento y la reorganización de elementos en tiempo de ejecución. Los controles ToolStrip ofrecen una completa
experiencia en tiempo de diseño que incluye la edición y activación in situ, el diseño personalizado y de espacio compartido,
que es la posibilidad que ofrecen las barras de herramientas de compartir el espacio vertical y horizontal.
Nota
Visual Basic 2005 también dispone de un control ToolBar que proviene de versiones anteriores; no obstante, el control ToolS
trip es la opción recomendada por sus características avanzadas.

AllowCustomize (propiedad), Customize (método), Change (evento)


En Visual Basic 6.0, la propiedad AllowCustomize de un control ToolBar se utiliza para mostrar un cuadro de diálogo
Personalizar barra de herramientas estándar, que permite que el usuario oculte, muestre o reorganice los botones de la
barra de herramientas. El método Customize se utiliza para invocar mediante programación el cuadro de diálogo. Se provoca
el evento Change cuando el usuario cierra el cuadro de diálogo Personalizar cuadro de herramientas.
El control ToolStrip de Visual Basic 2005 no tiene ninguna propiedad ni método equivalente; debe crear un cuadro de diálogo
y mostrarlo utilizando el método ShowDialog. Para obtener más información, vea Ejemplo ToolStrip Customizing.
DisabledImageList, HotImageList, ImageList (propiedades)
En Visual Basic 6.0, las propiedades DisabledImageList, HotImageList y ImageList de un control ToolBar se utilizan para
asociar el control a controles ImageList. Se pueden asociar imágenes independientes a distintos estados: normal (ImageList),
deshabilitado (DisabledImageList) y seleccionado (HotImageList).
El control ToolStrip de Visual Basic 2005 no tiene ninguna propiedad equivalente. El objeto ToolStripButton tiene una
propiedad Image única; al establecer la propiedad Enabled de ToolStripButton en False, se representa automáticamente la
imagen deshabilitada. Para emular el comportamiento del estado "seleccionado" de Visual Basic 6.0, puede asignar una
imagen distinta o cambiar la propiedad BackColor de ToolStripButton en tiempo de ejecución.
Style (propiedad)
En Visual Basic 6.0, la propiedad Style de un control ToolBar determina dónde se muestran las imágenes en relación con el
texto; si se establece en tbrTransparent también se habilita el seguimiento activo.
El control ToolStrip de Visual Basic 2005 no tiene ninguna propiedad equivalente. La relación entre la imagen y el texto se
controla estableciendo la propiedad TextImageAlign de ToolStripItem; a diferencia de Visual Basic 6.0, cada elemento puede
tener una alineación distinta. No se admite el seguimiento activo directamente, pero puede emular el comportamiento
cambiando la propiedad Image de los eventos MouseEnter y MouseLeave.
Wrappable (propiedad)
En Visual Basic 6.0, la propiedad Wrappable de un control ToolBar determina si los botones de la barra de herramientas se
ajustarán automáticamente cuando se cambie el tamaño de la ventana.
El control ToolStrip de Visual Basic 2005 no tiene ningún equivalente directo; admite en su lugar el uso de un menú
desplegable de desbordamiento. Al agregar elementos ToolStripItem que requieren más espacio del asignado al ToolStrip,
dado el tamaño actual del formulario, aparece automáticamente un ToolStripOverflowButton en ToolStrip. Aparece el
ToolStripOverflowButton y los elementos con desbordamiento habilitado se pasan al menú de desbordamiento
desplegable. Este comportamiento se puede deshabilitar estableciendo la propiedad CanOverflow en False.
Además, puede especificar el comportamiento de desbordamiento para un elemento ToolStripItem individual estableciendo
su propiedad Overflow. Para obtener más información, vea
Cómo: Administrar el desbordamiento de ToolStrip en formularios Windows Forms.
RestoreToolBar, SaveToolBar (métodos)
En Visual Basic 6.0, los métodos RestoreToolBar y SaveToolBar se utilizan para administrar la configuración de ToolBar.
SaveToolBar guarda la configuración en un archivo de inicialización (.ini); RestoreToolBar lo devuelve a su estado original
después de que se haya personalizado.
El control ToolStrip de Visual Basic 2005 no tiene ningún método equivalente. Puede utilizar el Diseñador de configuración
para administrar las configuraciones del control ToolStrip. Para obtener más información, vea
Administrar la configuración de la aplicación.
Equivalencias de propiedades y métodos del control ToolBar
En las siguientes tablas se enumeran propiedades y métodos de Visual Basic 6.0 junto con sus equivalentes en Visual Basic
2005. No se enumeran aquellas propiedades y métodos que tienen el mismo nombre y comportamiento. Salvo que se indique
lo contrario, todas las enumeraciones de Visual Basic 2005 se asignan al espacio de nombres System.Windows.Forms.
Esta tabla proporciona vínculos a temas en los que se explican las diferencias de comportamiento. Cuando no existe un
equivalente directo en Visual Basic 2005, se proporcionan vínculos a temas en los que se incluyen alternativas.
Propiedades
Visual Basi Equivalente en Visual Basic 2005
c 6.0
Align Dock

AllowCusto Nueva implementación. Debe proporcionar un cuadro de diálogo.


mize

Appearanc Nueva implementación. Para obtener más información, vea


e Propiedades Appearance y BorderStyle para usuarios de Visual Basic 6.0.
BorderStyle

ButtonHeig Height, Size (ToolStripButton)


ht

Buttons ToolStripItemCollection

ButtonWidt Height, Size (ToolStripButton)


h

Container Parent

Controls ToolStripItemCollection

DataBindin Nueva implementación. Para obtener más información, vea Acceso a datos para usuarios de Visual Basic 6.0.
gs

DisabledIm Nueva implementación. Utilice la propiedad Image del objeto ToolStripButton.


ageList

DragIcon Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.
DragMode

Height Height
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.
HelpConte Nueva implementación. Para obtener más información, vea
xtID Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.
HelpFile

HotImageLi Nueva implementación. Utilice la propiedad Image del objeto ToolStripButton.


st

HWnd Handle

ImageList Nueva implementación. Utilice la propiedad Image del objeto ToolStripButton.

Index Nueva implementación. Para obtener más información, vea


Matrices de controles para usuarios de Visual Basic 6.0.

Left Left
Nota Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, ve
a Sistema de coordenadas para usuarios de Visual Basic 6.0

MouseIcon Nueva implementación. Para obtener más información, vea


No se puede personalizar la propiedad MousePointer.

MousePoin Cursor
ter
Para obtener una lista de constantes, vea MousePointer para usuarios de Visual Basic 6.0.

OLEDropM Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.
ode

Parent FindForm

ShowTips ShowItemToolTips

Style Nueva implementación. Utilice la propiedad TextImageAlign de ToolStripItem.

TextAlignm TextAlign (ToolStripItem)


ent

ToolTipTex Componente ToolTip


t
Para obtener más información, vea
Compatibilidad de la información sobre herramientas para usuarios de Visual Basic 6.0.

Value Value
Nota
En Visual Basic 6.0, cuando se cambia Value, se produce el evento Change. En Visual Basic 2005, no se produc
e el evento Change, utilice en su lugar el evento ValueChanged.

WhatsThis Nueva implementación. Para obtener más información, vea


HelpID Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.
Width Width, Size
Nota Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, ve
a Sistema de coordenadas para usuarios de Visual Basic 6.0.

Wrappable CanOverflow, Overflow


Métodos
Visual Basi Equivalente en Visual Basic 2005
c 6.0
Customize Nueva implementación. Debe proporcionar un cuadro de diálogo.

Drag Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.

Move SetBounds
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

OLEDrag Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.

RestoreTo Nueva implementación. Utilice la característica Configuración de la aplicación.


olbar
SaveToolb
ar

ShowWha Nueva implementación. Para obtener más información, vea


tsThis Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

ZOrder: Función BringToFront o SendToBack.


Eventos
Visual Basic 6.0 Equivalente en Visual Basic 2005
Change Nueva implementación. Ya no existe el cuadro de diálogo Personalizar cuadro de herramientas.

DblClick DoubleClick

DragDrop Nueva implementación. Para obtener más información, vea


Arrastrar y colocar para usuarios de Visual Basic 6.0.
DragOver

OLECompleteDra Nueva implementación. Para obtener más información, vea


g Arrastrar y colocar para usuarios de Visual Basic 6.0.
OLEDragDrop
OLEDragOver
OLEGiveFeedbac
k
OLESetData
OLEStartDrag

Notas de actualización
Cuando se actualiza un proyecto de Visual Basic 6.0 a Visual Basic 2005, se actualizan todos los controles ToolBar a controles
ToolStrip de formularios Windows Forms. Cuando las propiedades, métodos y eventos no tienen ningún equivalente o
presentan diferente comportamiento, se agregan notas o advertencias de actualización al código.
Vea también
Referencia
Información sobre el control ToolStrip (formularios Windows Forms)
Otros recursos
ToolStrip (Control de formularios Windows Forms)
Conceptos de Visual Basic

Control TreeView para usuarios de Visual Basic 6.0


En Visual Basic 2005, el control TreeView reemplaza el control TreeView de Visual Basic 6.0. Los nombres de algunas
propiedades, métodos, eventos y constantes son diferentes y, en algunos casos, existen diferencias de comportamiento.
Diferencias conceptuales
Propiedad SingleSel
En Visual Basic 6.0, la propiedad SingleSel de un control TreeView determina si se va a expandir un nodo cuando se
selecciona para mostrar sus nodos secundarios. Establecer esta propiedad en True hace que se expanda el nodo cuando se
selecciona y que el nodo anteriormente seleccionado se contraiga.
En Visual Basic 2005, la propiedad SingleSel ya no existe. De forma predeterminada, cuando se hace clic en un nodo no se
expande (el valor predeterminado es equivalente a establecer la propiedad SingleSel en False en Visual Basic 6.0). Puede
utilizar el evento AfterSelect para determinar cuándo se ha seleccionado un nodo y luego utilizar el método Expand o Collapse
para controlar el comportamiento de expansión.
Propiedades Image y SelectedImage
En Visual Basic 6.0, es posible asignar una propiedad SelectedImage a un nodo de control TreeView sin asignar una
propiedad Image.
En Visual Basic 2005, el objeto TreeNode de un control TreeView no puede tener una propiedad SelectedImage a menos
que también tenga una propiedad Image. Si necesita emular el comportamiento de Visual Basic 6.0, puede asignar una
imagen vacía a la propiedad Image.
Otras diferencias
Existen numerosas diferencias conceptuales que se aplican a todos los controles, como diferencias en los enlaces de datos,
control de fuentes, operaciones de arrastrar y colocar, compatibilidad con Ayuda, y otras. Para obtener más información, vea
Conceptos de formularios Windows Forms para usuarios de Visual Basic 6.0.
Cambios en el código del control TreeView
En los ejemplos siguientes se muestran las diferencias que existen entre las técnicas de codificación de Visual Basic 6.0 y Visual
Basic 2005.
Cambios en el código para expandir un nodo seleccionado en un control TreeView
El código siguiente muestra cómo expandir un nodo TreeView cuando un usuario lo selecciona.

' Visual Basic 6.0


TreeView1.SingleSel = True

VB
' Visual Basic 2005
Private Sub TreeView1_AfterSelect(ByVal sender As Object, ByVal e As _
System.Windows.Forms.TreeViewEventArgs) Handles TreeView1.AfterSelect
TreeView1.SelectedNode.Expand()
End Sub

Codifique los cambios para agregar nodos a un control TreeView


El código siguiente muestra cómo agregar un nuevo nodo como un elemento secundario al nodo que está seleccionado.

' Visual Basic 6.0


Dim nodX As Node
Set nodX = TreeView1.Nodes.Add(Node, tvwChild, , "New Node")

VB
' Visual Basic 2005
Dim nodX As TreeNode = New TreeNode("New Node")
TreeView1.SelectedNode.Nodes.Add(nodX)

Equivalencias de propiedades, métodos y eventos del control TreeView


En las siguientes tablas se enumeran propiedades, métodos y eventos de Visual Basic 6.0 con sus equivalentes en Visual Basic
2005. No se enumeran aquellas propiedades, métodos y eventos que tienen el mismo nombre y el mismo comportamiento.
Salvo que se indique lo contrario, todas las enumeraciones de Visual Basic 2005 se asignan al espacio de nombres
System.Windows.Forms.
Esta tabla proporciona vínculos a temas en los que se explican las diferencias de comportamiento. Cuando no existe un
equivalente directo en Visual Basic 2005, se proporcionan vínculos a temas en los que se incluyen alternativas.
Propiedades
Visual Basic Equivalente en Visual Basic 2005
6.0
Appearance Nueva implementación. Para obtener más información, vea
Propiedades Appearance y BorderStyle para usuarios de Visual Basic 6.0.

BackColor BackColor
Nota
Los colores se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Comportamiento del color para los usuarios de Visual Basic 6.0.

Container Parent

DragIcon Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.
DragMode

Font Font Font


FontBold Nota
FontItalic
Las fuentes se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
FontName Objeto Font para usuarios de Visual Basic 6.0.
FontSize
FontStriketh
rough
FontUnderli
ne

Height Height, Size


Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

HelpContex Nueva implementación. Para obtener más información, vea


tID Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

HWnd Handle

Indentation Indent
Index Nueva implementación. Para obtener más información, vea
Matrices de controles para usuarios de Visual Basic 6.0.

Left Left
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

LineStyle ShowRootLines

MouseIcon Nueva implementación. Para obtener más información, vea


No se puede personalizar la propiedad MousePointer.

MousePoint Cursor
er
Para obtener una lista de constantes, vea MousePointer para usuarios de Visual Basic 6.0.

OLEDragMo Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.
de
OLEDropMo
de

Parent Método FindForm

Scroll Scrollable

SingleSel Nueva implementación. Utilice el evento NodeMouseClick.

Style Nueva implementación de propiedad. Se asigna 0 o Standard al control CheckedListBox y 1 o Checkbox al con
trol CheckedListBox.

ToolTipText Componente ToolTip


Para obtener más información, vea
Compatibilidad de la información sobre herramientas para usuarios de Visual Basic 6.0.

Top Top
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

WhatsThisH Nueva implementación. Para obtener más información, vea


elpID Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

Width Width, Size


Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

Métodos
Name Equivalente en Visual Basic 2005
Drag Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.

GetVisible Propiedad VisibleCount.


Count

HitTest GetNodeAt, GetNodeAt

Move SetBounds
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

OLEDrag Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.

SetFocus Focus

ShowWhat Nueva implementación. Para obtener más información, vea


sThis Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

StartLabel BeginEdit
Edit

ZOrder Método BringToFront o SendToBack


Eventos
Visual Basic 6.0 Equivalente en Visual Basic 2005
Collapse BeforeCollapse

DblClick DoubleClick

DragDrop Nueva implementación. Para obtener más información, vea


Arrastrar y colocar para usuarios de Visual Basic 6.0.
DragOver

Expand AfterExpand

GotFocus Enter

LostFocus Leave

NodeCheck AfterCheck

NodeClick NodeMouseClick
OLECompleteDra Nueva implementación. Para obtener más información, vea
g Arrastrar y colocar para usuarios de Visual Basic 6.0.
OLEDragDrop
OLEDragOver
OLEGiveFeedbac
k
OLESetData
OLEStartDrag

Validate Validating

Notas de actualización
Cuando se actualiza un proyecto de Visual Basic 6.0 a Visual Basic 2005, se actualizan todos los controles TreeView a
controles TreeView de formularios Windows Forms. Cuando las propiedades, métodos y eventos no tienen ningún
equivalente o tienen diferencias en comportamiento, se agregan notas o advertencias de actualización al código.
Vea también
Tareas
Cómo: Agregar información personalizada a los controles TreeView o ListView (formularios Windows Forms)
Cómo: Recorrer en iteración todos los nodos del control TreeView de formularios Windows Forms
Otros recursos
TreeView (Control, formularios Windows Forms)
Referencia de Visual Basic

Objeto VBControlExtender para usuarios de Visual Basic 6.0


El objeto VBControlExtender de Visual Basic 6.0 no tiene ningún equivalente en Visual Basic 2005 y ya no es necesario
utilizar ningún extensor de control para alojar un control ActiveX.
Diferencias conceptuales
En Visual Basic 6.0, el objeto VBControlExtender se utiliza para proporcionar acceso a un control ActiveX a las propiedades
del formulario que lo contiene. El objeto VBControlExtender se utiliza principalmente cuando se agrega un control
dinámicamente a la colección Controls mediante el método Add. El objeto VBControlExtender es particularmente útil para
este propósito, porque proporciona un conjunto genérico de propiedades, eventos y métodos al desarrollador.
En Visual Basic 2005, los controles ActiveX se pueden alojar directamente en un formulario Windows Forms; ya no se requiere
un objeto extensor para tener acceso a las propiedades del formulario que lo contenía. Cuando un control ActiveX se agrega a
un proyecto, se crea un contenedor de interoperabilidad COM, permitiéndole utilizar el control ActiveX como lo haría con
cualquier otro control.
Notas de la actualización
Cuando se actualiza un proyecto de Visual Basic 6.0 a Visual Basic 2005, se omite cualquier instancia del objeto
VBControlExtender. Se crea un contenedor de interoperabilidad COM por cada control ActiveX; la propiedad, el método y los
eventos se asignan a sus equivalentes. Cuando no haya ningún equivalente, las advertencias de actualización se agregan al
código.
Vea también
Tareas
Cómo: Agregar controles ActiveX a formularios Windows Forms
Referencia
System.Windows.Forms Namespace
Conceptos
Consideraciones al alojar un control ActiveX en un formulario Windows Forms
Conceptos de Visual Basic

Control VScrollBar para usuarios de Visual Basic 6.0


El control VScrollBar de Visual Basic 6.0 se ha reemplazado por el control VScrollBar de formularios Windows Forms en Visual
Basic 2005. Los nombres de algunas propiedades, métodos, eventos y constantes son diferentes y, en algunos casos, existen
diferencias de comportamiento.
Diferencias conceptuales
Evento Change
En Visual Basic 6.0, cuando se cambia la propiedad Value de un control VScrollBar, se produce el evento Change.
En Visual Basic 2005, no se produce el evento Change, si no el evento ValueChanged.
Value (Propiedad)
En Visual Basic 6.0, cuando se produce el evento Scroll o Change de un control VScrollBar, el valor de desplazamiento actual
se asigna a la propiedad Value.
Cuando se produce el evento Scroll en Visual Basic 2005, no se ha actualizado todavía la propiedad Value del control. Si
necesita emular el comportamiento de Visual Basic 6.0, puede crear una función auxiliar para recuperar el valor. Para obtener
más información, vea El código ha cambiado de un evento a un procedimiento.
Propiedad LargeChange
En Visual Basic 6.0, la propiedad LargeChange determina la cantidad de cambio en la propiedad Value de un control de barra
de desplazamiento cuando el usuario hace clic en el área entre el cuadro y la flecha de desplazamiento.
En Visual Basic 2005, el valor predeterminado de la propiedad LargeChange es 10; en Visual Basic 6.0 es 1.
Propiedad Max
En Visual Basic 6.0, la propiedad Max determina el valor máximo de la propiedad Value en un control de barra de
desplazamiento.
En Visual Basic 2005, la propiedad Maximum reemplaza a la propiedad Max; el valor predeterminado es 100, en Visual Basic
6.0 era 32767.
Propiedad Min
En Visual Basic 6.0, la propiedad Min determina el valor mínimo de la propiedad Value en un control de barra de
desplazamiento. La propiedad Min se puede establecer en un valor superior al de la propiedad Max.
En Visual Basic 2005, la propiedad Minimum reemplaza a la propiedad Min, este valor debe ser siempre inferior al de la
propiedad Maximum.
Otras diferencias
Asimismo, hay numerosas diferencias conceptuales que se aplican a todos los controles, incluidas las diferencias en los enlaces
de datos, control de fuentes, arrastrar y colocar, compatibilidad con Ayuda y otras. Para obtener más información, vea
Conceptos de formularios Windows Forms para usuarios de Visual Basic 6.0.
Equivalencias de propiedad, método y evento del control VScrollBar
En las siguientes tablas se enumeran propiedades, métodos y eventos de Visual Basic 6.0 con sus equivalentes en Visual Basic
2005. No se enumeran aquellas propiedades, métodos y eventos que tienen el mismo nombre y el mismo comportamiento.
Donde corresponde, las constantes aparecen con sangría debajo de la propiedad o método. Salvo que se indique lo contrario,
todas las enumeraciones de Visual Basic 2005 se asignan al espacio de nombres System.Windows.Forms.
Cuando es necesario, se proporcionan vínculos a temas que explican las diferencias de comportamiento. Cuando no hay
equivalente directo en Visual Basic 2005, se proporcionan vínculos a temas que presentan alternativas.
Propiedades
Visual Basi Equivalente de Visual Basic 2005
c 6.0
Container Parent
DragIcon Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.
DragMode

Height Height
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

HelpConte Nueva implementación. Para obtener más información, vea


xtID Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

HWnd Handle

Index Nueva implementación. Para obtener más información, vea


Matrices de controles para usuarios de Visual Basic 6.0.

LargeChan LargeChange
ge
Nota
El valor predeterminado en Visual Basic 6.0 es 1; en Visual Basic 2005, es 10.

Left Left
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

Max Maximum
Nota
El valor predeterminado en Visual Basic 6.0 es 32767; en Visual Basic 2005, es 100.

Min Minimum
Nota
En Visual Basic 6.0, Min se puede establecer en un valor superior al de Max; en Visual Basic 2005, no está permi
tido.

MouseIco Nueva implementación. Para obtener más información, vea No se puede personalizar la propiedad MousePointer.
n

MousePoi Cursor
nter
Para obtener una lista de constantes, vea MousePointer para usuarios de Visual Basic 6.0.

Parent FindForm
RightToLef RightToLeft
t:
Valor de la enumeración Yes
True
Valor de la enumeración No
False

Top Top
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

Value Value
Nota
En Visual Basic 6.0, cuando se cambia Value, se produce el evento Change. En Visual Basic 2005, no se produce
el evento Change, utilice en su lugar el evento ValueChanged.

WhatsThis Nueva implementación. Para obtener más información, vea


HelpID Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

Width Width, Size


Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

Métodos
Visual Basic Equivalente de Visual Basic 2005
6.0
Drag Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0
.

Move SetBounds
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

SetFocus Focus

ShowWhatsT Nueva implementación. Para obtener más información, vea


his Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

ZOrder: Función de BringToFront o SendToBack


0 – vbBringT BringToFront
oFront
SendToBack
1 - vbSendT
oBack
Eventos
Visual Ba Equivalente de Visual Basic 2005
sic 6.0
Change ValueChanged
Nota
El comportamiento de los eventos Change y Scroll ha cambiado en Visual Basic 2005. Para obtener más informa
ción, vea El código ha cambiado de un evento a un procedimiento.

DragDro Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.
p
DragOver

GotFocus Enter

LostFocu Leave
s

Scroll Scroll
Nota
El comportamiento de los eventos Change y Scroll ha cambiado en Visual Basic 2005. Para obtener más informa
ción, vea El código ha cambiado de un evento a un procedimiento.

Validate Validating

Notas de actualización
Cuando se actualiza una aplicación de Visual Basic 6.0 a Visual Basic 2005, cualquier código del controlador de eventos Scroll
para el control HScrollBar o VScrollBar se cambia a un procedimiento debido a una diferencia en la secuencia de eventos. Para
obtener más información, vea El código ha cambiado de un evento a un procedimiento.
Vea también
Referencia
Introducción a los controles HScrollBar y VScrollBar (formularios Windows Forms)
Conceptos de Visual Basic

Control WebBrowser para usuarios de Visual Basic 6.0


El control WebBrowser de Visual Basic 6.0 se ha reemplazado por el control WebBrowser de Windows Forms en Visual Basic
2005. Los nombres de algunas propiedades, métodos, eventos y constantes son diferentes y, en algunos casos, existen
diferencias de comportamiento.
Diferencias conceptuales
El control WebBrowser de Visual Basic 6.0, también conocido como Controles Microsoft Internet o Shdocvw.dll, es un control
ActiveX que permite alojar Internet Explorer en la aplicación.
El control WebBrowser de Visual Basic 2005 proporciona un contenedor administrado para el control ActiveX WebBrowser.
Esto permite mostrar páginas Web en las aplicaciones cliente de Windows Forms. Se puede utilizar el control WebBrowser
para duplicar la funcionalidad de exploración de Internet Explorer en la aplicación o se puede deshabilitar la funcionalidad
predeterminada de Internet Explorer y utilizar el control como visor simple de documentos HTML. También se puede utilizar el
control para agregar elementos de la interfaz de usuario basados en DHTML al formulario y ocultar el hecho de que se alojan
en el control WebBrowser. Este enfoque permite combinar sin problemas controles Web con controles de Windows Forms en
una sola aplicación.
Objeto Internet Explorer
Los Controles Microsoft Internet de Visual Basic 6.0 constan de dos componentes: el control WebBrowser y el objeto Internet
Explorer que permite controlar instancias de Internet Explorer mediante automatización OLE.
No hay ningún equivalente para el objeto Internet Explorer en Visual Basic 2005 y sus propiedades, métodos y eventos
relacionados ya no existen. Ya no se admite la automatización OLE; puede controlar una instancia externa de Internet Explorer
utilizando un lenguaje de secuencias de comandos como VBScript.
Propiedad Document
En Visual Basic 6.0, la propiedad Document devuelve una cadena que contiene el nombre de un documento HTML; en Visual
Basic 2005, devuelve el propio documento HTML.
Métodos Refresh y Refresh2
El método Refresh2 de Visual Basic 6.0 acepta un parámetro que especifica el nivel de actualización; el método Refresh de
Visual Basic 2005 tiene un parámetro opcional que se puede utilizar para especificar el nivel de actualización.
Equivalencias de propiedades, métodos y eventos del control WebBrowser
En las siguientes tablas se enumeran propiedades, métodos y eventos de Visual Basic 6.0 con sus equivalentes en Visual Basic
2005. No se enumeran aquellas propiedades, métodos y eventos que tienen el mismo nombre y el mismo comportamiento.
Salvo que se indique lo contrario, todas las enumeraciones de Visual Basic 2005 se asignan al espacio de nombres
System.Windows.Forms.
Esta tabla proporciona vínculos a temas en los que se explican las diferencias de comportamiento. Cuando no existe un
equivalente directo en Visual Basic 2005, se proporcionan vínculos a temas en los que se incluyen alternativas.
Propiedades
Visual Basic 6 Equivalente en Visual Basic 2005
.0
AddressBar Nueva implementación. Ésta era una propiedad del objeto Internet Explorer.

Application Nueva implementación. Ésta era una propiedad del objeto Internet Explorer.

Busy IsBusy

Container Parent
Document Document
Nota
En Visual Basic 6.0, la propiedad Document devuelve una cadena que contiene el nombre de un documento
HTML; en Visual Basic 2005, devuelve el propio documento HTML.

DragIcon Nueva implementación. Para obtener más información, vea


Arrastrar y colocar para usuarios de Visual Basic 6.0.
DragMode

FullName Nueva implementación. Ésta era una propiedad del objeto Internet Explorer.

Height Height, Size


Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

HelpContextI Nueva implementación. Para obtener más información, vea


D Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

HWnd Handle

Index Nueva implementación. Para obtener más información, vea


Matrices de controles para usuarios de Visual Basic 6.0.

Left Left
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

LocationNam Nueva implementación. Ésta era una propiedad del objeto Internet Explorer.
e
LocationURL

MenuBar Nueva implementación. Ésta era una propiedad del objeto Internet Explorer.

Offline IsOffline

Parent Método FindForm

Path Nueva implementación. Ésta era una propiedad del objeto Internet Explorer.

RegisterAsBr Nueva implementación. Ésta era una propiedad del objeto Internet Explorer.
owser

RegisterAsDr AllowWebBrowserDrop
opTarget

Resizable Nueva implementación. Ésta era una propiedad del objeto Internet Explorer.

Silent ScriptErrorsSuppressed
StatusBar Nueva implementación. Ésta era una propiedad del objeto Internet Explorer.
StatusText

TheaterMode Nueva implementación. Ésta era una propiedad del objeto Internet Explorer.

ToolBar Nueva implementación. Ésta era una propiedad del objeto Internet Explorer.

ToolTipText Componente ToolTip.


Para obtener más información, vea
Compatibilidad de la información sobre herramientas para usuarios de Visual Basic 6.0.

Top Top
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

TopLevelCon Nueva implementación. Ésta era una propiedad del objeto Internet Explorer.
tainer

Type DocumentType

WhatsThisHe Nueva implementación. Para obtener más información, vea


lpID Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

Width Width, Size


Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.

Métodos
Visual B Equivalente en Visual Basic 2005
asic 6.0
ClientT PointToClient
oWindo
w

Drag Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.

ExecWB Nueva implementación. Éste era un método del objeto Internet Explorer.

GetProp Nueva implementación. Éste era un método del objeto Internet Explorer.
erty

Move SetBounds
Nota
Las coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea
Sistema de coordenadas para usuarios de Visual Basic 6.0.
Navigat Nueva implementación. Éste era un método del objeto Internet Explorer.
e2

OLEDra Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.
g

PutProp Nueva implementación. Éste era un método del objeto Internet Explorer.
erty

QuerySt Nueva implementación. Éste era un método del objeto Internet Explorer.
atusWB

Quit Nueva implementación. Éste era un método del objeto Internet Explorer.

Refresh Refresh
Refresh Nota
2
El método Refresh2 de Visual Basic 6.0 aceptaba un parámetro que especificaba el nivel de actualización; el métod
o Refresh de Visual Basic 2005 tiene un parámetro opcional que se puede utilizar para definir el nivel de actualizac
ión.

SetFocu Focus
s

ShowBr Nueva implementación. Éste era un método del objeto Internet Explorer.
owserB
ar

ShowW Nueva implementación. Para obtener más información, vea


hatsThi Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.
s

ZOrder Función BringToFront o SendToBack


Eventos
Visual Basic 6.0 Equivalente en Visual Basic 2005
BeforeNavigate Navigating
BeforeNavigate2

ClientToHostWindow Nueva implementación. Éste era un evento del objeto Internet Explorer.

CommandStateChanged CanGoBackChanged
CanGoForwardChanged

DblClick DoubleClick

DocumentComplete DocumentCompleted
DownloadBegin
DownloadComplete

DragDrop Nueva implementación. Para obtener más información, vea


Arrastrar y colocar para usuarios de Visual Basic 6.0.
DragOver
GotFocus Enter

LostFocus Leave

NavigateComplete Navigated
NavigateComplete2

NavigateError Nueva implementación. Éste era un evento del objeto Internet Explorer.

NewWindow NewWindow
NewWindow2
NewWindow3

OnFullScreen Nueva implementación. Éste era un evento del objeto Internet Explorer.
OnMenuBar
OnQuit
OnStatusBar
OnTheaterMode
OnToolBar
OnVisible

PrintTemplateInstantiati Nueva implementación. Éste era un evento del objeto Internet Explorer.
on
PrintTemplateTearDown
PrivacyImpactedStateCh
ange

ProgressChange ProgressChanged

PropertyChange Nueva implementación. Éste era un evento del objeto Internet Explorer.

SetSecureLockIcon EncryptionLevelChanged

StatusTextChange StatusTextChanged

TitleChange DocumentTitleChanged

UpdatePageStatus Nueva implementación. Éste era un evento del objeto Internet Explorer.

Validate Validating

WindowClosing Nueva implementación. Éste era un evento del objeto Internet Explorer.
WindowSetHeight
WindowSetLeft
WindowSetResizable
WindowSetTop
WindowSetWidth
Notas de actualización
Cuando se actualiza una aplicación de Visual Basic 6.0 a Visual Basic 2005, los controles WebBrowser se actualizan a los
controles WebBrowser de formularios Windows Forms y las propiedades, métodos y eventos se actualizan a sus equivalentes.
Donde puede haber diferencias en el comportamiento, se insertan comentarios de actualización en el código.
Vea también
Tareas
Cómo: Utilizar el control WebBrowser en .NET Compact Framework
Referencia
Información general sobre el control WebBrowser
Otros recursos
WebBrowser (Control, Windows Forms)
Conceptos de Visual Basic

Cambios en los eventos, métodos y propiedades de controles


para usuarios de Visual Basic 6.0
Muchas de las propiedades, métodos y eventos de los controles y objetos de Visual Basic 6.0 se reemplazan por propiedades,
métodos y eventos de Visual Basic 2005 con un comportamiento distinto.
En los temas siguientes se describen los cambios en los métodos, eventos y propiedades seleccionados.
En esta sección
Propiedades Appearance y BorderStyle para usuarios de Visual Basic 6.0
Describe los cambios en las propiedades Appearance y BorderStyle de diversos controles.
Evento de cambio de control ComboBox para usuarios de Visual Basic 6.0
Describe los cambios en el comportamiento del evento Change del control ComboBox.
Sistema de coordenadas para usuarios de Visual Basic 6.0
Describe los cambios en las propiedades Height y Width, en el método Move y en la configuración de ScaleMode.
Eventos de formularios para usuarios de Visual Basic 6.0
Describe cambios en diversos eventos en el nivel de formularios.
Propiedad MaxLength para usuarios de Visual Basic 6.0
Describe los cambios en la propiedad MaxLength del control TextBox.
MousePointer para usuarios de Visual Basic 6.0
Describe los cambios en la propiedad y las constantes de MousePointer.
Propiedad Moveable para usuarios de Visual Basic 6.0
Describe los cambios en la propiedad Moveable de un formulario.
Propiedad Style para usuarios de Visual Basic 6.0
Describe los cambios en las propiedades Style, Picture, Disabled Picture y DownPicture de diversos controles.
Propiedad TopIndex y evento Scroll para usuarios de Visual Basic 6.0
Describe los cambios en la propiedad TopIndex y en el evento Scroll de los controles ComboBox y ListBox.
Secciones relacionadas
Conceptos de formularios Windows Forms para usuarios de Visual Basic 6.0
Describe las diferencias conceptuales generales al trabajar con formularios y controles.
Controles de formularios Windows Forms para usuarios de Visual Basic 6.0
Compara todos los controles y objetos de Visual Basic 6.0 con sus equivalentes de los formularios Windows Forms.
Equivalentes de constante para usuarios de Visual Basic 6.0
Muestra todas las constantes de Visual Basic 6.0 y sus equivalentes en Visual Basic 2005.
Cambios en el lenguaje para usuarios de Visual Basic 6.0
Describe las diferencias del lenguaje Visual Basic entre Visual Basic 6.0 y Visual Basic 2005.
Ayuda para usuarios de Visual Basic 6.0
Portal para todos los temas que comparan Visual Basic 6.0 y Visual Basic 2005.
Conceptos de Visual Basic

Propiedades Appearance y BorderStyle para usuarios de Visual


Basic 6.0
Las propiedades Appearance y BorderStyle en Visual Basic 6.0 se utilizan para supervisar el aspecto de los controles.
Diferencias conceptuales
Los controles Frame, Image, Label, PictureBox y TextBox de Visual Basic 6.0 admiten las propiedades Appearance y
BorderStyle. Al combinar las dos propiedades, el control aparece sin borde, con un borde de una línea o con un borde
tridimensional.
En Visual Basic 2005, la propiedad Appearance ya no existe para estos controles. Su funcionalidad se ha combinado con la
propiedad BorderStyle para establecer el aspecto en un paso único.
Los controles CommandButton, ListBox y ComboBox de Visual Basic 6.0 admitían sólo la propiedad Appearance.
El control Button de Visual Basic 2005 tiene una propiedad FlatStyle que es equivalente a la propiedad Appearance. Para que
el control ListBox tenga una apariencia plana, establezca la propiedad BorderStyle en FixedSingle. El control ComboBox nunca
admitió realmente una apariencia plana en Visual Basic 6.0, así que no existe un equivalente.
Nota
Los formularios de Visual Basic 6.0 también tienen una propiedad BorderStyle que admite un conjunto de valores diferente
s. Esto se ha sustituido por la propiedad FormBorderStyle en Visual Basic 2005.

Cambios de código para las propiedades Appearance y BorderStyle


Los siguientes ejemplos de código ilustran las diferencias que existen entre las técnicas de codificación de Visual Basic 6.0 y
Visual Basic 2005.
El código se modifica para cambiar el aspecto de los controles
En el ejemplo siguiente se muestra cómo se configuran las propiedades para cambiar el aspecto de los controles en tiempo de
ejecución.

' Visual Basic 6.0


' Give a TextBox a flat look with no border.
Text1.Appearance = 0
Text1.BorderStyle = 0
' Give a TextBox a three-dimensional appearance.
Text1.Appearance = 1
Text1.BorderStyle = 1
' Give a CommandButton a flat look
Command1.Appearance = 0
' Give a ListBox a flat look
List1.Appearance = 0

VB
' Visual Basic 2005
' Give a TextBox a flat look with a single border.
TextBox1.BorderStyle = BorderStyle.None
' Give a TextBox a three-dimensional appearance.
TextBox2.BorderStyle = BorderStyle.Fixed3D
' Give a Button a flat look
Button1.FlatStyle = FlatStyle.Flat
' Give a ListBox a flat look
ListBox1.BorderStyle = BorderStyle.FixedSingle

Equivalencias de Appearance y BorderStyle


En la tabla siguiente se muestran las constantes Appearance y BorderStyle de Visual Basic 6.0 y sus equivalentes de
enumeración en Visual Basic 2005.
Visual Basic 6.0 Equivalente en Visual Basic 2005
BorderStyle = 0 – None None

Appearance = 0 – Flat FixedSingle


BorderStyle = 1 – Fixed Single

Appearance = 1 – 3D Fixed3D
BorderStyle = 1 – Fixed Single

Notas de actualización
Cuando se actualiza una aplicación de Visual Basic 6.0 mediante el Asistente para configuración, los controles Frame se
pueden actualizar a los controles GroupBox o Panel de Visual Basic 2005. Las correspondencias de Appearance y
BorderStyle se aplican únicamente en aquellos controles Frame que no se han actualizado a controles Panel; no existe
ninguna propiedad BorderStyle para los controles GroupBox. Para obtener más información, vea
Control Frame para usuarios de Visual Basic 6.0.
Al actualizar los controles ComboBox, CommandButton y ListBox, no se asigna la propiedad Appearance. Si la propiedad
Appearance se establece en el código, se agregará una advertencia de actualización.
Vea también
Conceptos
Control ComboBox para usuarios de Visual Basic 6.0
Control CommandButton para usuarios de Visual Basic 6.0
Control Frame para usuarios de Visual Basic 6.0
Control Label para usuarios de Visual Basic 6.0
Control PictureBox para usuarios de Visual Basic 6.0
Control TextBox para usuarios de Visual Basic 6.0
Controles de usuario para usuarios de Visual Basic 6.0
Conceptos de Visual Basic

Evento de cambio de control ComboBox para usuarios de


Visual Basic 6.0
En Visual Basic 6.0 el evento Change del control ComboBox se produce cuando se modifica el texto de la parte de entrada de
texto del control; no se produce cuando se selecciona un elemento en la parte de lista. La modificación mediante programación
del texto de un elemento de la lista no produce el evento Change.
Cuando un proyecto se migra a Visual Basic 2005, el evento Change del control ComboBox se asigna al evento TextChanged
del control ComboBox de Visual Basic 2005. El comportamiento del evento TextChanged difiere del comportamiento del
evento Change; esta diferencia puede provocar resultados inesperados en el código.
El evento TextChanged de Visual Basic 2005 se inicia cada vez que cambia el texto por cualquier razón, como:
Cuando se modifica la parte de entrada de texto.
Cuando se selecciona un elemento de la lista.
Cuando se modifica un elemento de lista mediante programación.
Cuando se llama al método Add.
El siguiente ejemplo muestra las diferencias de comportamiento.

' Visual Basic 6.0


Private Sub Form_Load()
' Does not raise the Change event.
Combo1.AddItem "A"
End Sub
Private Sub Form_Click()
' Does not raise the Change event.
Combo1.List(0) = "B"
End If

VB
' Visual Basic 2005
Private Sub Form1_Load()
' Raises the TextChanged event.
ComboBox1.Items.Add("A")
End Sub
Private Sub Form1_Click(ByVal sender As System.Object, ByVal _
e As System.EventArgs)
' Uses the SetItemString method from the VB6 compatibility library;
' there is no equivalent method in Visual Basic 2005.
' Raises the TextChanged event.
Microsoft.VisualBasic.Compatibility.VB6. _
SetItemString(ComboBox1, ComboBox1.Items.Count, "B")
End Sub

Qué se ha de hacer a continuación


Establezca un punto de interrupción en el procedimiento del evento TextChanged y ejecute el código para determinar
dónde se produce. Modifique el código según sea necesario.
Vea también
Conceptos
Control ComboBox para usuarios de Visual Basic 6.0
Conceptos de Visual Basic

Sistema de coordenadas para usuarios de Visual Basic 6.0


Las coordinadas de los formularios y controles se expresan de modo distinto en Visual Basic 2005 y en Visual Basic 6.0; los
métodos para cambiar el tamaño de un formulario y para desplazarlo también son diferentes.
Diferencias conceptuales
En Visual Basic 6.0, las coordenadas de los formularios y controles se expresan en twips. En Visual Basic 2005, las coordenadas
se expresan en píxeles.
Height y Width (Propiedades)
En Visual Basic 6.0, las propiedades Height y Width se utilizan para cambiar el tamaño de un formulario o control. Visual
Basic 2005 dispone de una propiedad Size que permite cambiar el alto y el ancho en un único paso.
Método Move
Visual Basic 6.0 utiliza el método Move para cambiar la ubicación de un formulario o un control en tiempo de ejecución. En
Visual Basic 2005, Move se he reemplazado por el método SetBounds, y las coordenadas se expresan en píxeles.
ScaleMode (Propiedad)
Visual Basic 6.0 dispone también de una propiedad ScaleMode que se puede utilizar para definir un sistema de coordenadas
diferente. Visual Basic 2005 sólo admite un único sistema de coordenadas, píxeles. ScaleMode y sus propiedades y métodos
relacionados (Scale, ScaleHeight, ScaleLeft, ScaleTop, ScaleWidth, ScaleX, ScaleY) no son compatibles con Visual Basic
2005. Para obtener más información, vea La propiedad ScaleMode no se admite.
Cambios de código para las coordenadas
Los siguientes ejemplos de código ilustran las diferencias que existen entre las técnicas de codificación de Visual Basic 6.0 y
Visual Basic 2005.
Cambiar el tamaño de un formulario
En el ejemplo siguiente se muestra cómo se cambia el tamaño de un formulario en tiempo de ejecución:

' Visual Basic 6.0


' Measurements are in twips.
Me.Width = 8000
Me.Height = 6000

VB
' Visual Basic 2005
' Measurements are in pixels.
Me.Size = New System.Drawing.Size(640, 480)

Desplazar un control
En el ejemplo siguiente se muestra cómo de desplaza un control en tiempo de ejecución.

' Visual Basic 6.0


' Move and retain original size.
CommandButton2.Move 2000, 1000
' Move and resize to 1200 by 800 twips.
CommandButton1.Move 0, 0, 1200, 800

VB
' Visual Basic 2005
' Move and retain original size.
Button2.SetBounds(20, 10, 0, 0, BoundsSpecified.X Or BoundsSpecified.Y)
' Move and resize to 120 by 80 pixels.
Button1.SetBounds(0, 0, 120, 80)
Notas de actualización
Cuando una aplicación de Visual Basic 6.0 se actualiza a Visual Basic 2005, las propiedades Height y Width de los formularios y
controles se convierten automáticamente en píxeles.
Si la aplicación original utilizaba la propiedad ScaleMode, la herramienta de actualización presupone que la configuración en
tiempo de diseño de la propiedad ScaleMode se expresaba twips; si no es así, la conversión no será correcta y deberá
corregirse. Para obtener más información, vea La propiedad ScaleMode no se admite.
Vea también
Conceptos
Objeto Form para usuarios de Visual Basic 6.0
Otros recursos
Controles de formularios Windows Forms para usuarios de Visual Basic 6.0
Cambios en los eventos, métodos y propiedades de controles para usuarios de Visual Basic 6.0
Conceptos de Visual Basic

Eventos de formularios para usuarios de Visual Basic 6.0


Existen algunas diferencias en el comportamiento de los eventos de formulario entre Visual Basic 6.0 y Visual Basic 2005.
Diferencias conceptuales
Initialize (Evento)
En Visual Basic 6.0 el evento Initialize se utiliza para ejecutar código antes de cargar un formulario.
En Visual Basic 2005, el código de inicialización se debe agregar al constructor del formulario (Sub New()) una vez que se ha
llamado a InitializeComponent(), como ocurre en el ejemplo siguiente:

' Visual Basic 6.0


Private Sub Form_Initialize()
MsgBox("The form is loading")
End Sub

VB
' Visual Basic .NET
Public Sub New()
' This call is required by the Windows Form Designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
MsgBox("The form is loading")
End Sub

Nota
Uno de lo usos habituales del evento Initialize es mostrar un formulario de inicio con información mientras se carga el form
ulario. Las aplicaciones de Visual Basic 2005 tienen una propiedad SplashScreen que se puede utilizar para mostrar automá
ticamente un formulario mientras se inicia una aplicación. Para obtener más información, vea
Cómo: Especificar una pantalla de bienvenida para una aplicación (Visual Basic).

Terminate (Evento)
En Visual Basic 6.0 el evento Terminate se utiliza para ejecutar código después de descargar un formulario.
En Visual Basic 2005, ya no se admite el evento Terminate. El código de finalización debe ejecutarse dentro del método
Dispose antes de que se produzca la llamada a MyBase.Dispose().
Nota
El método Dispose se invoca automáticamente para el formulario principal de una aplicación; para los demás formularios, d
eberá invocarlo explícitamente.

En el siguiente ejemplo se muestran las diferencias.

' Visual Basic 6.0


Private Sub Form_Terminate()
MsgBox "The form was terminated"
End Sub

VB
' Visual Basic .NET
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing AndAlso components IsNot Nothing Then
MsgBox("The form was terminated")
components.Dispose()
End If
MyBase.Dispose(disposing)
End Sub

Unload (Evento)
En Visual Basic 6.0, el evento Unload tiene un argumento Cancel; en Visual Basic 2005, se ha reemplazado por el evento
Closed, que no tiene ningún argumento Cancel. Si necesita cancelar una operación durante la descarga, utilice en su lugar el
evento Closing.
Eventos del mouse para formularios MDI
En Visual Basic 6.0 los formularios MDI admiten eventos del mouse (ratón). En Visual Basic 2005, puesto que un formulario
MDI no tiene área de cliente para recibir los eventos del mouse, ya no se admiten los eventos Click, MouseDown,
MouseMove ni MouseUp en los formularios MDI.
Vea también
Referencia
Form Constructor
Form.Closing Event
Conceptos
Objeto Form para usuarios de Visual Basic 6.0
Conceptos de Visual Basic

Propiedad MaxLength para usuarios de Visual Basic 6.0


En Visual Basic 6.0 la propiedad MaxLength de un control TextBox tiene un control absoluto sobre la longitud de la cadena
que se puede escribir o mostrar en el cuadro de texto. Aunque se puede escribir mediante programación una cadena más
larga, se trunca automáticamente en la longitud establecida en la propiedad MaxLength.
En Visual Basic 2005, la longitud de una cadena escrita mediante programación reemplaza al valor de la propiedad
MaxLength.
El código siguiente ilustra la diferencia de comportamiento.

' Visual Basic 6.0


Text1.MaxLength = 5
Text1.Text = "Longer than five"
MsgBox Text1.Text ' Displays "Longe".

VB
' Visual Basic 2005
Text1.MaxLength = 5
Text1.Text = "Longer than five"
MsgBox(Text1.Text) ' Displays "Longer than five".

Qué se ha de hacer a continuación


Revise el diseño de la aplicación para determinar si el comportamiento esperado consistía en limitar siempre el texto del
cuadro de texto a la longitud establecida en la propiedad MaxLength.
Si éste era el comportamiento esperado, busque cada aparición del código que establece la propiedad Text y
agregue código para truncar la cadena, de forma similar al ejemplo siguiente.
VB
' Old code
Text1.Text = SomeString

' Replacement code


If Len(SomeString) > Text1.MaxLength Then
SomeString = Microsoft.VisualBasic.Left(SomeString, Text1.MaxLength)
End If

Text1.Text = SomeString

Si no era éste el comportamiento esperado, no toque el código. El usuario continuará estando limitado por la
configuración de MaxLength, pero será posible asignar mediante programación cadenas mayores que la
configuración de MaxLength.
Vea también
Conceptos
Control TextBox para usuarios de Visual Basic 6.0
Conceptos de Visual Basic

MousePointer para usuarios de Visual Basic 6.0


En Visual Basic 2005, la propiedad MousePointer de Visual Basic 6.0 se ha reemplazado por la propiedad Cursor y los
nombres de las constantes MousePointer han cambiado.
Diferencias conceptuales
En Visual Basic 6.0, la propiedad MousePointer de un formulario o control se utiliza para cambiar el aspecto del cursor
cuando se desplaza sobre ese formulario o control.
En Visual Basic 2005, la propiedad Cursor proporciona la misma funcionalidad que MousePointer.
Punteros del mouse personalizados
En Visual Basic 6.0, puede utilizar cualquier icono (.ico) o archivo de cursor (.cur) como un MousePointer personalizado.
En Visual Basic 2005, sólo se admiten archivos de cursor; para establecer un cursor personalizado en tiempo de ejecución,
asigne un archivo de cursor a la propiedad Cursor.
vbIconPointer (Constante)
Visual Basic 6.0 incluye en MousePointer la constante vbIconPointer para cambiar el cursor a un símbolo del icono (un
cuadrado pequeño dentro de un cuadrado). Esta constante se proporciona únicamente por cuestiones de herencia; en los
sistemas operativos más nuevos no tiene ningún efecto y se muestra el cursor predeterminado. No hay ningún equivalente en
Visual Basic 2005.
Cambios de código para la propiedad MousePointer
En los ejemplos siguientes se ilustran las diferencias que existen entre las técnicas de codificación de Visual Basic 6.0 y Visual
Basic 2005.
Cambiar el aspecto del cursor
En el ejemplo siguiente se muestra cómo el cursor cambia su aspecto cuando se desplaza sobre un control de cuadro de texto
en tiempo de ejecución, y se sustituye la flecha predeterminada por un cursor con forma de reloj de arena. En el ejemplo de
Visual Basic 6.0 se define la propiedad MousePointer; en el ejemplo de Visual Basic 2005, la propiedad Cursor es el
equivalente de MousePointer. En el ejemplo de Visual Basic 2005 también se utiliza el nuevo evento MouseEnter.

' Visual Basic 6.0


Private Sub Text1_MouseMove(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
Text1.MousePointer = vbHourGlass
End Sub

VB
' Visual Basic 2005
Private Sub TextBox1_MouseEnter(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles TextBox1.MouseEnter
TextBox1.Cursor = System.Windows.Forms.Cursors.WaitCursor
End Sub

Mostrar un cursor personalizado


El código siguiente muestra un cursor en forma de mano cuando el cursor se desplaza sobre un control de cuadro de texto. En
el ejemplo de Visual Basic 6.0 se definen las propiedades MouseIcon y MousePointer; en el ejemplo de Visual Basic 2005 la
propiedad Cursor se establece en una nueva instancia de un objeto Cursor.

' Visual Basic 6.0


Private Sub Text1_MouseMove(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
Text1.MouseIcon = LoadPicture("C:\Windows\Cursors\hmove.cur")
Text1.MousePointer = vbHourGlass
End Sub
VB
' Visual Basic 2005
Private Sub TextBox2_MouseEnter(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles TextBox2.MouseEnter
TextBox2.Cursor = New System.Windows.Forms.Cursor _
("C:\mypath\mycursor.cur")
End Sub

Equivalencias de las constantes MousePointer


En la siguiente tabla se muestran algunas constantes de Visual Basic 6.0 y sus equivalentes en Visual Basic 2005.
Visual Basic 6.0 Equivalente en Visual Basic 2005
0 – vbDefault Default

1 – vbArrow Arrow

2 – vbCrossHair Cross

3 – vbIBeam IBeam

4 – vbIconPointer Obsoleto — se ha reemplazado por Default

5 – vbSizePointer SizeAll

6 – vbSizeNESW SizeNESW

7 – vbSizeNS SizeNS

8 – vbSizeNWSE SizeNWSE

9 – vbSizeWE SizeWE

10 – vbUpArrow UpArrow

11 – vbHourGlass WaitCursor

12 – vbNoDrop No

13 – vbArrowHourGl AppStarting
ass

14 – vbArrowQuestio Help
n

15 – vbSizeAll SizeAll

99 – vbCustom No hay equivalente — para obtener más información, vea


No se puede personalizar la propiedad MousePointer

Notas de actualización
Cuando una aplicación de Visual Basic 6.0 se actualiza a Visual Basic 2005, la propiedad MousePointer se sustituye por la
propiedad Cursor. El código que utiliza las constantes MousePointer se modifica para que utilice las enumeraciones Cursors
de Visual Basic 2005.
Si la aplicación de Visual Basic 6.0 utiliza un MousePointer personalizado, la configuración en tiempo de diseño o el código
personalizado de MousePointer no se actualizará, y se emitirá una advertencia.
Asimismo, si la aplicación de Visual Basic 6.0 establece el MousePointer en la constante vbIconPointer en tiempo de diseño
o en tiempo de ejecución, se sustituirá por el cursor predeterminado durante la actualización.
Vea también
Referencia
No se puede personalizar la propiedad MousePointer
Otros recursos
Controles de formularios Windows Forms para usuarios de Visual Basic 6.0
Cambios en los eventos, métodos y propiedades de controles para usuarios de Visual Basic 6.0
Conceptos de Visual Basic

Propiedad Moveable para usuarios de Visual Basic 6.0


La propiedad Moveable de un formulario de Visual Basic 6.0 no tiene ningún equivalente en Visual Basic 2005.
Diferencias conceptuales
En Visual Basic 6.0, la propiedad Moveable de un formulario puede definirse como False para evitar que el usuario mueva el
formulario en tiempo de ejecución. Los formularios Windows Forms de Visual Basic 2005 no tienen una propiedad
equivalente.
A pesar de que se suele considerar un diseño de interfaz de usuario incorrecto, puede conseguir un comportamiento similar en
Visual Basic 2005 si establece la propiedad FormBorderStyle en None y, a continuación, la propiedad ControlBox en False.
Notas de actualización
Cuando se actualiza una aplicación de Visual Basic 6.0 a Visual Basic 2005, no se actualizan las referencias a la propiedad
Moveable en tiempo de diseño o en tiempo de ejecución y se agrega un comentario de advertencia al código.
Vea también
Referencia
ControlBox
Conceptos
Objeto Form para usuarios de Visual Basic 6.0
Objeto MDIForm para usuarios de Visual Basic 6.0
Conceptos de Visual Basic

Propiedad Style para usuarios de Visual Basic 6.0


Los procedimientos para mostrar las imágenes para los controles CommandButton, CheckBox y OptionButton de Visual
Basic 6.0 difieren de aquéllos utilizados en Visual Basic 2005.
Diferencias conceptuales
En Visual Basic 6.0, establecer la propiedad Style de un control CommandButton, CheckBox o OptionButton en 1 –
Graphical habilita el control para mostrar imágenes. Las propiedades Picture, DownPicture y DisabledPicture asignan
imágenes que se muestran en respuesta a cambios de estado. Por ejemplo, cuando se activa un control CheckBox, se muestra
la imagen DownPicture; si el control CheckBox está desactivado, se muestra la imagen DisabledPicture.
Visual Basic 2005 ya no admite las propiedades Style, Picture, DownPicture ni DisabledPicture. La propiedad Style ya no
es necesaria: asignar una imagen a la propiedad Image tiene el mismo efecto que establecer la propiedad Style en Graphical.
La propiedad Image reemplaza a la propiedad Picture. Se puede emular la funcionalidad de las propiedades DownPicture y
DisabledPicture utilizando un control ImageList que contiene varias imágenes.
Notas de actualización
Al actualizar una aplicación que tiene la propiedad Style establecida en 1 – Graphical, la propiedad Appearance del control
actualizado se establece en Button y cualquier imagen asignada a la propiedad Picture en tiempo de diseño se asigna a la
propiedad Image del control actualizado.
Si las propiedades DownPicture o DisabledPicture se establecieron en tiempo de diseño o de ejecución, debe modificar la
aplicación actualizada para que utilice un control ImageList. Para obtener más información, vea
Cómo: Emular un control Tri-state de Visual Basic 6.0 en una aplicación actualizada.
Vea también
Tareas
Cómo: Emular un control Tri-state de Visual Basic 6.0 en una aplicación actualizada
Conceptos
Control CheckBox para usuarios de Visual Basic 6.0
Control CommandButton para usuarios de Visual Basic 6.0
Control OptionButton para usuarios de Visual Basic 6.0
Control OptionButton para usuarios de Visual Basic 6.0
Conceptos de Visual Basic

Propiedad TopIndex y evento Scroll para usuarios de Visual


Basic 6.0
Visual Basic 2005 ya no admite la propiedad TopIndex para un control ComboBox o el evento Scroll para los controles
ListBox o ComboBox.
Diferencias conceptuales
Propiedad TopIndex
En Visual Basic 6.0 la propiedad TopIndex se utiliza para devolver o establecer un valor que especifica el elemento del control
ComboBox o ListBox que se muestra en la posición superior. Esta propiedad se suele utilizar habitualmente para desplazarse
por la lista sin seleccionar un elemento.
En Visual Basic 2005, el control ComboBox ya no admite la propiedad TopIndex. En la mayoría de los casos esto no debería
representar un problema porque el establecimiento de la propiedad TopIndex no tendría ningún efecto visible a menos que
se hubiera establecido la propiedad Style en 1 - SimpleCombo. En este caso, puede emular el comportamiento de
SimpleCombo de ComboBox mediante un control ListBox y un control TextBox; el control ListBox continúa admitiendo la
propiedad TopIndex.
Evento Scroll
El evento Scroll de Visual Basic 6.0 se utiliza junto con la propiedad TopIndex para realizar acciones cuando se desplaza por la
lista. Visual Basic 2005 no admite el evento Scroll; no obstante, en la mayoría de los casos, el evento SelectedIndexChanged
debería ser un reemplazo adecuado.
Notas de actualización
Cuando se actualiza la aplicación Visual Basic 6.0 a Visual Basic 2005, no se actualiza ningún código que haga referencia a la
propiedad TopIndex para un control ComboBox o ningún código del procedimiento de eventos Scroll para un control
ComboBox o ListBox. El Asistente para actualización inserta un comentario de advertencia en el código; se debe eliminar el
código para que se pueda compilar la aplicación.
Vea también
Referencia
SelectedIndexChanged
SelectedIndexChanged
Conceptos
Control ComboBox para usuarios de Visual Basic 6.0
Control ListBox para usuarios de Visual Basic 6.0
Conceptos de Visual Basic

Conceptos de formularios Windows Forms para usuarios de


Visual Basic 6.0
Si está familiarizado con los formularios y los controles de Visual Basic 6.0, reconocerá muchas similitudes en los formularios
Windows Forms de Visual Basic 2005. Hay, sin embargo, unas pocas áreas que son conceptualmente diferentes. Mediante los
temas siguientes se familiarizará con dichas diferencias.
En esta sección
Los temas siguientes presentan las diferencias conceptuales entre trabajar con los formularios y controles de Visual Basic 6.0 y
Visual Basic 2005.
Control del color para usuarios de Visual Basic 6.0
Matrices de controles para usuarios de Visual Basic 6.0
Cambios en los cuadros de diálogo para usuarios de Visual Basic 6.0
Arrastrar y colocar para usuarios de Visual Basic 6.0
Intercambio dinámico de datos para usuarios de Visual Basic 6.0
Control de fuentes para usuarios de Visual Basic 6.0
Ubicación de formularios para usuarios de Visual Basic 6.0
Tareas de formularios para usuarios de Visual Basic 6.0
Gráficos para usuarios de Visual Basic 6.0
Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0
Cómo: Agregar controles de sistema de archivos de Visual Basic 6.0 a una aplicación
Control de menús para usuarios de Visual Basic 6.0
MDI para usuarios de Visual Basic 6.0
Imprimir cambios para usuarios de Visual Basic 6.0
Compatibilidad de la información sobre herramientas para usuarios de Visual Basic 6.0
Números de versión para usuarios de Visual Basic 6.0
Secciones relacionadas
Controles de formularios Windows Forms para usuarios de Visual Basic 6.0
Describe las diferencias entre los controles de Visual Basic 6.0 y los de los formularios Windows Forms.
Información general sobre formularios Windows Forms
Introduce los conceptos básicos relativos a formularios.
Lo nuevo para usuarios de formularios Windows Forms para Visual Basic 6.0
Describe funciones nuevas para los formularios Windows Forms.
Espacios de nombres de aplicaciones para Windows en Visual Studio
Examina los espacios de nombres relativos a los formularios Windows Forms.
Ayuda para usuarios de Visual Basic 6.0
Proporciona vínculos a temas adicionales que describen las diferencias entre Visual Basic 6.0 y Visual Basic 2005.
Referencia de Visual Basic

Control del color para usuarios de Visual Basic 6.0


En este tema se compara el control del color en Visual Basic 6.0 con equivalentes en Visual Basic 2005.
Trabajar con colores en Visual Basic 2005 es similar a trabajar con colores en Visual Basic 6.0; no obstante, hay algunas
diferencias conceptuales que necesita saber. Además, las nuevas enumeraciones de color en Visual Basic 2005 reemplazan a
las constantes que se utilizaban para especificar colores en Visual Basic 6.0.
Diferencias conceptuales
En Visual Basic 6.0, un valor de tipo Long representaba los colores; en Visual Basic 2005 los colores son de tipo Color. En
Visual Basic 6.0, las constantes se proporcionaban para ocho colores estándar; en Visual Basic 2005 hay más que 100 colores
mencionados.
Sugerencia
Para buscar un valor equivalente para un color de Visual Basic 6.0 que no sea un color estándar, puede utilizar la clase
ColorTranslator y pasarle el valor Long del color de Visual Basic 6.0.

Constantes de color
En Visual Basic 6.0, las constantes se proporcionaron para colores del sistema que se pueden utilizar para asignar un color a las
preferencias del sistema del usuario. En Visual Basic 2005, los colores del sistema son del tipo SystemColors.
Propiedades BackColor y ForeColor
En Visual Basic 6.0 las propiedades BackColor y ForeColor de un control debían establecerse explícitamente en tiempo de
diseño o en tiempo de ejecución; los colores no podían heredarse. En Visual Basic 2005, a menos que un color se defina
explícitamente en tiempo de diseño o en tiempo de ejecución, heredará el valor de su control primario. Para obtener más
información, vea Comportamiento del color para los usuarios de Visual Basic 6.0.
Propiedades Palette y PaletteMode
En Visual Basic 6.0, las propiedades Palette y PaletteMode de un formulario se utilizaban para controlar el juego de colores
que se iba a utilizar al mostrar imágenes en una pantalla de 256 colores. Visual Basic 2005 no admite las propiedades Palette
ni PaletteMode. Para obtener más información, vea Paletas para usuarios de Visual Basic 6.0.
Propiedad MaskColor
La propiedad de Visual Basic 6.0 MaskColor ya no existe para los controles CheckBox, Button y RadioButton. Puede emular la
propiedad MaskColor utilizando los métodos gráficos. Para obtener más información, vea
MaskColor para usuarios de Visual Basic 6.0.
Cambios de código para el control del color
En los ejemplos siguientes se ilustran las diferencias en las técnicas de codificación entre Visual Basic 6.0 y Visual Basic 2005.
Cambios de código para establecer un color en un color del sistema
El código siguiente establece la propiedad BackColor de un formulario para que coincida con el color seleccionado por el
usuario para la barra de título activa.
' Visual Basic 6.0
Me.BackColor = vbActiveTitleBar

VB
' Visual Basic 2005
Me.BackColor = System.Drawing.SystemColors.ActiveCaption

Cambios de código para establecer un color en un valor de Visual Basic 6.0


El ejemplo siguiente establece la propiedad BackColor de un control TextBox para que coincida con el verde más claro
(&H00C0FFC0) del selector de color de Visual Basic 6.0.
' Visual Basic 6.0
textBox1.Text = &H00C0FFC0
VB
' Visual Basic 2005
TextBox1.BackColor = System.Drawing.ColorTranslator.FromOle(&HC0FFC0)

Equivalencias de constantes
En las siguientes tablas se muestran algunas constantes de Visual Basic 6.0 y sus equivalentes de Visual Basic 2005.
Equivalentes de las constantes de color
Visual Basic 6.0 Equivalente en Visual Basic 2005
vbBlack Black

vbRed Red

vbGreen Lime

vbYellow Yellow

vbBlue Blue

vbMagenta Magenta

vbCyan Cyan

vbWhite White
Equivalentes de las constantes de color del sistema
Visual Basic 6.0 Equivalente en Visual Basic 2005
vb3DDKShadow ControlDarkDark

vb3DFace Control

vb3DHighlight ControlLightLight

vb3DLight ControlLight

vb3DShadow ControlDark

vbActiveBorder ActiveBorder

vbActiveTitleBar ActiveCaption

vbActiveTitleBarText ActiveCaptionText

vbApplicationWorkspace AppWorkspace

vbButtonFace Control

vbButtonShadow ControlDark

vbButtonText ControlText

vbDesktop Desktop
vbGrayText GrayText

vbHighlight Highlight

vbHighlightText HighlightText

vbInactiveBorder InactiveBorder

vbInactiveCaptionText InactiveCaptionText

vbInactiveTitleBar InactiveCaption

vbInactiveTitleBarText InactiveCaptionText

vbInfoBackground Info

vbInfoText InfoText

vbMenuBar Menu

vbMenuText MenuText

vbScrollBars ScrollBar

vbTitleBarText ActiveCaptionText

vbWindowBackground Window

vbWindowFrame WindowFrame

vbWindowText WindowText
Notas de actualización
Cuando una aplicación de Visual Basic 6.0 se actualiza a Visual Basic 2005 mediante el asistente para actualización, los colores
se convierten con el método FromOle.
Tras la actualización, debe buscar cualquier código que establezca explícitamente la propiedad BackColor o ForeColor en
tiempo de ejecución. Si se ha establecido para un elemento primario, establezca explícitamente los controles de color en
tiempo de diseño, si no estos controles heredarán los colores del elemento primario.
Cualquier código que haya utilizado las propiedades Palette, PaletteMode o MaskColor necesitará reescribirse en Visual
Basic 2005.
Vea también
Conceptos
Comportamiento del color para los usuarios de Visual Basic 6.0
Paletas para usuarios de Visual Basic 6.0
MaskColor para usuarios de Visual Basic 6.0
Otros recursos
Controles de formularios Windows Forms para usuarios de Visual Basic 6.0
Conceptos de Visual Basic

Comportamiento del color para los usuarios de Visual Basic 6.0


Las propiedades ForeColor y BackColor de los controles tienen un comportamiento distinto en Visual Basic 6.0 y en Visual
Basic 2005.
Diferencias conceptuales
En Visual Basic 6.0 las propiedades BackColor y ForeColor de un control debían establecerse explícitamente en tiempo de
diseño o en tiempo de ejecución, y los colores no podían heredarse. En Visual Basic 2005, a menos que un color se defina
explícitamente en tiempo de diseño o en tiempo de ejecución, heredará el valor de su control primario.
Cambios de código para el comportamiento de color
En el ejemplo siguiente en el que aparece un formulario con dos controles CommandButton, Command1 y Command2, se
muestran las diferencias de comportamiento:
' Visual Basic 6.0
' Command1's BackColor is left at its default (gray).
' Command2's BackColor is explicitly set.
Command2.BackColor = vbBlack
' Explicitly set the BackColor of the form.
Form1.BackColor = vbRed

Después de ejecutar el código anterior, el valor BackColor de Command1 sigue siendo el predeterminado (gris) y el valor
BackColor de Command2 es el negro.
En el siguiente ejemplo se muestra el comportamiento en Visual Basic 2005. En Visual Basic 2005, los controles
CommandButton se han sustituido por los controles Button.
VB
' Visual Basic 2005
' Command1's BackColor is left at its default (gray).
' Command2's BackColor is explicitly set.
Command2.BackColor = System.Drawing.Color.Black
' Explicitly set the BackColor of the form.
Me.BackColor = System.Drawing.Color.Red

Después de ejecutar el código anterior, el valor de BackColor Command1 es rojo y el valor BackColor de Command2 es negro.
Como la propiedad BackColor de Command1 no se definió explícitamente, se hereda el rojo del formulario.
Nota
Esto se aplica a cualquier elemento principal, no sólo a los formularios. Si el control Button estuviera incluido en un control
Panel dentro del formulario, al cambiar el color del panel o del formulario cambiaría el color de Button.

Notas de actualización
Cuando una aplicación de Visual Basic 6.0 se actualiza a Visual Basic 2005, el Asistente para actualización no tiene modo
alguno de determinar si se heredarán colores. Después de la actualización, busque código que establezca explícitamente la
propiedad BackColor o ForeColor en tiempo de ejecución. Si se ha establecido para un control primario, establezca
explícitamente el color de los controles secundarios en tiempo de diseño.
Vea también
Referencia
Control del color para usuarios de Visual Basic 6.0
Otros recursos
Controles de formularios Windows Forms para usuarios de Visual Basic 6.0
Conceptos de Visual Basic

MaskColor para usuarios de Visual Basic 6.0


La propiedad MaskColor en Visual Basic 6.0 no tiene ningún equivalente directo en Visual Basic 2005; sin embargo, puede
utilizar métodos gráficos para conseguir el mismo efecto.
Diferencias conceptuales
En Visual Basic 6.0, la propiedad MaskColor de un control CheckBox, CommandButton u OptionButton se usaba para
definir un color que se volvía transparente, de modo que podía verse una imagen de fondo. Para utilizar esta propiedad, la
propiedad Style debía establecerse en Graphical, la propiedad UseMaskColor debía establecerse en True y había que
asignar un mapa de bits a la propiedad Picture.
En Visual Basic 2005, no existe ningún equivalente directo para la propiedad MaskColor. Sin embargo, puede establecer la
transparencia de un control utilizando el método MakeTransparent de un objeto Bitmap.
Cambios de código para MaskColor
Los siguientes ejemplos de código ilustran las diferencias que existen entre las técnicas de codificación de Visual Basic 6.0 y
Visual Basic 2005.
' Visual Basic 6.0
' Assumes a picture has been assigned to the Picture property
' and that the Style property has been set to Graphical.
Command1.UseMaskColor = True
Command1.MaskColor = vbWhite

VB
' Visual Basic 2005
' Assumes a picture has been assigned to the BackgroundImage property.
Dim g As New System.Drawing.Bitmap(Button1.BackgroundImage)
g.MakeTransparent(System.Drawing.Color.White)
Button1.BackgroundImage = g

Notas de actualización
Al actualizar una aplicación de Visual Basic 6.0 a Visual Basic 2005, el Asistente para actualización no actualiza el código que
utiliza la propiedad MaskColor. Se insertarán advertencias de actualización en el código. Deberá modificar el código antes de
ejecutar la aplicación.
Vea también
Referencia
Control del color para usuarios de Visual Basic 6.0
MakeTransparent
Conceptos
Control CheckBox para usuarios de Visual Basic 6.0
Control CommandButton para usuarios de Visual Basic 6.0
Control OptionButton para usuarios de Visual Basic 6.0
Conceptos de Visual Basic

Paletas para usuarios de Visual Basic 6.0


Las propiedades Palette y PaletteMode en Visual Basic 6.0 no tienen ningún equivalente en Visual Basic 2005.
Diferencias conceptuales
En Visual Basic 6.0, las propiedades Palette y PaletteMode de un formulario controlan los colores que se utilizan al mostrar
imágenes en una pantalla de 256 colores. Estas propiedades no tienen ningún efecto en pantallas que admitan más de 256
colores.
Visual Basic 2005 no admite las propiedades Palette o PaletteMode. En la actualidad, los dispositivos de pantalla muestran
por lo general cientos o miles de colores y, por tanto, ya no es necesario especificar una paleta para una imagen.
Nota
El objeto Image en Visual Basic 2005 tiene una propiedad Palette para representar las imágenes; esta propiedad no es igual a
la propiedad Palette de Visual Basic 6.0.

Notas de actualización
Al actualizar una aplicación de Visual Basic 6.0 a Visual Basic 2005, no se actualizará ningún código que haga referencia a las
propiedades Palette o PaletteMode. El Asistente para actualización insertará una advertencia en el código, y deberá
eliminarse el código que haga referencia a estas propiedades.
Vea también
Referencia
Control del color para usuarios de Visual Basic 6.0
Conceptos
Objeto Form para usuarios de Visual Basic 6.0
Conceptos de Visual Basic

Matrices de controles para usuarios de Visual Basic 6.0


Aunque ya no se admiten matrices de control en Visual Basic 2005, mediante el modelo de evento puede duplicar y expandir
más allá de la funcionalidad de matrices de control.
Diferencias conceptuales
En Visual Basic 6.0, las matrices de controles se podían utilizar para administrar los controles de un formulario;
proporcionaban funciones para compartir controladores de eventos, recorrer en iteración grupos de controles y agregar
controles en tiempo de ejecución.
En Visual Basic 2005, ya no se admiten las matrices de control. Los cambios en el modelo de evento hacen que las matrices de
control sean innecesarias y .NET Framework proporciona las mismas funciones para trabajar con controles.
Compartir controladores de eventos
En Visual Basic 6.0, se podían usar matrices de controles para especificar un grupo de controles que compartían un conjunto
de eventos. Los controles debían ser del mismo tipo y tenían que tener el mismo nombre.
Visual Basic 2005 permite a cualquier controlador de eventos controlar los eventos de varios controles, incluso los controles
con nombres diferentes y de tipos distintos.
Por ejemplo, es posible que quiera agregar dos controles Button (Button1 y Button2) y un control CheckBox (CheckBox1) a un
formulario y, a continuación, crear un controlador de eventos a fin de controlar el evento Click para los tres controles.

Private Sub MixedControls.Click(ByVal sender As System.Object, ByVal e As System.EventArgs)


Handles Button1.Click, Button2.Click, CheckBox1.Click

Recorrer controles en iteración


Otra característica de matrices de controles de Visual Basic 6.0 era la capacidad de recorrer en iteración un grupo de controles
mediante la propiedad Index. Por ejemplo, para borrar el texto de todos los controles TextBox en una matriz de control, se
podía recorrer en iteración la matriz de control mediante la propiedad Index como una variable de bucle.
Los controles de Visual Basic 2005 no tienen una propiedad Index pero puede seguir recorriendo en iteración los controles de
un formulario o contenedor mediante ControlCollection de la clase Control.
En Visual Basic 6.0, los controles de una única matriz de control podían encontrarse en contenedores diferentes. Por ejemplo,
los controles TextBox contenidos en dos controles Frame diferentes podían formar parte de la misma matriz de control.
En Visual Basic 2005, la colección Controls sólo devuelve controles que se encuentran en un único contenedor. Debe recorrer
en iteración los controles de cada control de contenedor por separado; esto se puede hacer mediante una función recursiva.
Agregar controles en tiempo de ejecución
En Visual Basic 6.0, los controles se podía agregar a una matriz de control en tiempo de ejecución mediante la instrucción
Load. Los controles tenían que ser del mismo tipo que la matriz de control y ésta se debía crear en tiempo de diseño con al
menos un elemento. Después de agregar el control, la propiedad Visible debía establecerse en True.
En Visual Basic 2005, los controles se agregan en tiempo de ejecución mediante la palabra clave New de una instrucción Dim
y, a continuación, se utiliza el método Add para el contenedor al que desea agregar el control.
Agregar controladores de eventos en tiempo de ejecución
En Visual Basic 6.0, cuando se agregaba un control a una matriz de control en tiempo de ejecución, los eventos de la matriz de
control controlaban automáticamente los nuevos eventos de controles.
En Visual Basic 2005, debe definir los controladores de eventos para los controles que se agregan en tiempo de ejecución. Esto
se realiza mediante la instrucción AddHandler.
Cambios de código para matrices de control
El siguiente código ilustra las diferencias en las técnicas de codificación entre Visual Basic 6.0 y Visual Basic 2005.
Compartir controladores de eventos
El ejemplo siguiente muestra cómo se comparte el controlador de eventos Change (TextChanged en Visual Basic 2005) en un
grupo de tres controles TextBox. En Visual Basic 2005, la cláusula Handles del controlador de eventos especifica qué control
controlará el evento. El controlador de eventos devuelve un Object genérico, por lo que se debe convertir en el tipo de objeto
específico (en este caso, TextBox) que desea controlar mediante el método DirectCast.
' Visual Basic 6.0
Private Sub Text1_Change(Index As Integer)
Select Case Index
Case 0
MsgBox("The text in the first TextBox has changed")
Case 1
MsgBox("The text in the second TextBox has changed")
Case 2
MsgBox("The text in the third TextBox has changed")
End Select
End Sub

VB
' Visual Basic 2005
Private Sub TextBoxes_TextChanged(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles TextBox1.TextChanged, _
TextBox2.TextChanged, TextBox3.TextChanged
Select Case DirectCast(sender, TextBox).Name
Case TextBox1.Name
MsgBox("The text in the first TextBox has changed")
Case TextBox2.Name
MsgBox("The text in the second TextBox has changed")
Case TextBox3.Name
MsgBox("The text in the third TextBox has changed")
End Select
End Sub

Nota
El comportamiento de eventos es ligeramente diferente en Visual Basic 2005. El evento TextChanged se produce cuando se
inicializa un control (por ejemplo, en el evento Form_Load) así como cuando se cambia texto en tiempo de ejecución. En Visua
l Basic 6.0, el evento Change sólo se producía cuando se cambiaba texto.

Recorrer controles en iteración


El ejemplo siguiente muestra una función para recorrer en iteración un grupo de controles de cuadro de texto y borrar su texto.
En el ejemplo de Visual Basic 6.0, la propiedad Index de una matriz de control se utiliza como una variable de bucle.
En Visual Basic 2005, un objeto Control se pasa como un argumento; tiene una colección ControlCollection que incluye
todos los controles que se encuentran en ese control. El operador Typeof se utiliza para determinar si cada control es de tipo
TextBox.
Nota
Un objeto Form es de tipo Control; también puede pasar un objeto Form como un argumento.

Como no se incluyen controles anidados en la colección ControlCollection, el método HasChildren se utiliza para determinar
si un control contiene otros controles, en ese caso, se llama a la función ClearText de forma recursiva.
' Visual Basic 6.0
Private Sub ClearText()
For i = 0 To Text1().UBound
Text1(i).Text = ""
Next
End Sub
VB
' Visual Basic 2005
Private Sub ClearText(ByVal container As Control)
Dim ctrl As Control
For Each ctrl In container.Controls
If TypeOf (ctrl) Is TextBox Then
ctrl.Text = ""
End If
If ctrl.HasChildren Then
ClearText(ctrl)
End If
Next
End Sub

Agregar controles en tiempo de ejecución


El ejemplo siguiente muestra cómo se agrega un control de cuadro de texto a un formulario en tiempo de ejecución. En Visual
Basic 6.0, el control se agrega a una matriz de control. En Visual Basic 2005, el control se agrega a la colección
ControlCollection. En Visual Basic 6.0, los eventos para el nuevo TextBox se controlaban automáticamente mediante la
matriz de control. En Visual Basic 2005, debe enlazar el control de eventos mediante la instrucción AddHandler.
En los dos ejemplos se supone que se agrega un control de cuadro de texto a un formulario en tiempo de ejecución y en el
ejemplo de Visual Basic 6.0, que se ha creado una matriz de control con un único elemento. En el ejemplo de Visual Basic 2005
también se supone que existe un controlador de eventos denominado TextChangedHandler para el primer control TextBox.
' Visual Basic 6.0
Private Sub AddControl()
' Add a TextBox as the second element of a control array.
Load Text1(1)
' Set the location below the first TextBox.
Text1(1).Move Text1(0).Left, Text1(0).Top + 500
' Make the new TextBox visible
Text1(1).Visible = True

VB
' Visual Basic 2005
' Declare a new TextBox.
Dim TextBox2 As New TextBox
' Set the location below the first TextBox
TextBox2.Left = TextBox1.Left
TextBox2.Top = TextBox1.Top + 30
' Add the TextBox to the form's Controls collection.
Me.Controls.Add(TextBox2)
AddHandler TextBox2.TextChanged, AddressOf TextChangedHandler

Notas de actualización
Cuando una aplicación creada con Visual Basic 6.0 se actualiza a Visual Basic 2005, cualquier matriz de control se actualiza a
las clases de matrices de controles específicas del control especial. Estas clases están contenidas en el espacio de nombres
Microsoft.VisualBasic.Compatibility.VB6 y las utilizan las herramientas de actualización para emular el comportamiento de
las matrices de controles de Visual Basic 6.0.
Aunque es posible utilizar estas clases de matrices de controles en el nuevo desarrollo de Visual Basic 2005, se recomienda
utilizar el modelo de evento y las funciones de .NET Framework en su lugar.
Vea también
Conceptos
Eventos y control de eventos para usuarios de Visual Basic 6.0
Otros recursos
Controles de formularios Windows Forms para usuarios de Visual Basic 6.0
Conceptos de Visual Basic

Cambios en los cuadros de diálogo para usuarios de Visual


Basic 6.0
Los métodos para mostrar cuadros de diálogo en Visual Basic 2005 difieren de los métodos de Visual Basic 6.0.
Diferencias conceptuales
En Visual Basic 6.0, se puede mostrar un formulario como cuadro de diálogo modal llamando al método Show con un
parámetro de vbModal.
En Visual Basic 2005, el método ShowDialog se utiliza para mostrar un formulario de forma modal; el método Show se utiliza
para mostrar un formulario de forma no modal.
Además, el control CommonDialog de Visual Basic 6.0 proporciona varios cuadros de diálogo predefinidos. En Visual Basic
2005, este control se reemplaza con los controles ColorDialog, FontDialog, OpenFileDialog, PageSetupDialog, PrintDialog,
PrintPreviewDialog y SaveFileDialog.
Vea también
Conceptos
Control CommonDialog para usuarios de Visual Basic 6.0
Otros recursos
Cuadros de diálogo en formularios Windows Forms
Controles y componentes de cuadros de diálogo (formularios Windows Forms)
Conceptos de Visual Basic

Arrastrar y colocar para usuarios de Visual Basic 6.0


El modelo para implementar arrastrar y colocar en Visual Basic 2005 difiere considerablemente del modelo de Visual Basic 6.0.
Diferencias conceptuales
En Visual Basic 6.0, la edición mediante arrastrar y colocar se puede llevar a cabo con dos métodos diferentes: el estándar de
arrastrar y colocar para arrastrar entre los controles de un formulario, y el de arrastrar de OLE para arrastrar entre formularios
y aplicaciones.
En Visual Basic 2005, se utiliza un único modelo de edición para arrastrar y colocar. Es similar al de arrastrar de OLE, pero los
nombres y los parámetros de los métodos y los eventos de arrastrar y colocar son diferentes, y el modelo de eventos también
es distinto.
Cambios de código para arrastrar y colocar
Cambios de código para arrastrar y colocar texto
El ejemplo siguiente muestra las diferencias en código para arrastrar texto de un control TextBox a otro.

' Visual Basic 6.0


Private Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Text1.Text = "Hello World"
' Begin dragging by calling the OLEDrag method.
Text1.OLEDrag
End Sub

Private Sub Text1_OLEStartDrag(Data As DataObject, AllowedEffects As Long)


' Only allow copying.
AllowedEffects = vbDropEffectCopy
Data.Clear
' Populate the Data object with the text to copy and the format.
Data.SetData Text1.Text, vbCFText
End Sub

Private Sub Text2_OLEDragOver(Data As DataObject, Effect As Long, Button As Integer, Shift


As Integer, X As Single, Y As Single, State As Integer)
' Make sure that the format is text.
If Data.GetFormat(vbCFText) Then
' If it is text, enable dropping for the second TextBox.
Text2.OLEDropMode = vbOLEDropManual
End If
End Sub
Private Sub Text2_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift
As Integer, X As Single, Y As Single)
' Copy the text from the Data object to the second TextBox.
Text2.Text = Data.GetData(vbCFText)
End Sub

VB
' Visual Basic 2005
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e _
As System.EventArgs) Handles MyBase.Load
' Dropping must be enabled before the dragging occurs.
TextBox2.AllowDrop = True
End Sub
Private Sub TextBox1_MouseDown(ByVal sender As Object, ByVal e _
As System.Windows.Forms.MouseEventArgs) Handles TextBox1.MouseDown

TextBox1.Text = "Hello World"


' Begin dragging by calling the DoDragDrop method.
' OLEStartDrag is replaced by arguments on the method.
TextBox1.DoDragDrop(TextBox1.Text, DragDropEffects.Copy)
End Sub

Private Sub TextBox2_DragEnter(ByVal sender As Object, ByVal e _


As System.Windows.Forms.DragEventArgs) Handles TextBox2.DragEnter
' Make sure that the format is text.
If (e.Data.GetDataPresent(DataFormats.Text)) Then
' Allow drop.
e.Effect = DragDropEffects.Copy
Else
' Do not allow drop.
e.Effect = DragDropEffects.None
End If
End Sub

Private Sub TextBox2_DragDrop(ByVal sender As Object, ByVal e _


As System.Windows.Forms.DragEventArgs) Handles TextBox2.DragDrop
' Copy the text to the second TextBox.
TextBox2.Text = e.Data.GetData(DataFormats.Text).ToString
End Sub

Notas de actualización
El código de arrastrar y colocar no se puede actualizar automáticamente a Visual Basic 2005; hay que escribirlo de nuevo
empleando el nuevo modelo. Cualquier código de arrastrar y colocar se marca con advertencias de actualización durante el
proceso de actualización.
Vea también
Otros recursos
Compatibilidad con las operaciones de arrastrar y colocar y con el Portapapeles
Conceptos de Visual Basic

Intercambio dinámico de datos para usuarios de Visual Basic


6.0
El Intercambio dinámico de datos (DDE) ya no se admite en Visual Basic 2005.
Diferencias conceptuales
El Intercambio dinámico de datos (DDE) era una antigua tecnología que permitía el intercambio de información entre
aplicaciones en Visual Basic 3.0. DDE fue reemplazado por la Automatización OLE en versiones posteriores de Visual Basic; sin
embargo, hasta Visual Basic 6.0 se admitía DDE por razones de compatibilidad con versiones anteriores.
Con la presentación de Visual Basic .NET 2002, DDE ya no se admite. Las aplicaciones de Visual Basic que deban intercambiar
información con aplicaciones anteriores que sólo admiten DDE deben mantenerse en Visual Basic 6.0.
Las siguientes propiedades, métodos y eventos de DDE ya no están disponibles:
Categoría Nombre
Propiedades LinkItem
LinkMode
LinkTimeOut
LinkTopic

Métodos LinkExecute
LinkPoke
LinkRequest
LinkSend

Eventos LinkClose
LinkError
LinkExecute
LinkNotify
LinkOpen

Además, la constante vbCFLink del objeto Clipboard ya no es válida.


Notas de actualización
Cuando se actualiza una aplicación de Visual Basic 6.0 a Visual Basic 2005, el código que hace referencia a propiedades o
métodos DDE y cualquier código en procedimientos de evento DDE no se actualizan y se agrega una advertencia.
Vea también
Conceptos
Objeto Form para usuarios de Visual Basic 6.0
Control Label para usuarios de Visual Basic 6.0
Control PictureBox para usuarios de Visual Basic 6.0
Control TextBox para usuarios de Visual Basic 6.0
Objeto Clipboard para usuarios de Visual Basic 6.0
Conceptos de Visual Basic

Control de fuentes para usuarios de Visual Basic 6.0


En este tema se comparan las técnicas de control de fuentes en Visual Basic 6.0 con sus equivalentes en Visual Basic 2005.
Diferencias conceptuales
Las fuentes se controlan en Visual Basic 6.0 de dos formas diferentes: como propiedades de fuentes de formularios y controles,
o como objetos stdFont.
En Visual Basic 2005, hay un único objeto Font: System.Drawing.Font. La propiedad Font de un formulario o control acepta
un objeto Font como argumento.
Establecer propiedades de fuente
En Visual Basic 6.0, las propiedades de fuente se pueden establecer en tiempo de ejecución asignando un objeto stdFont o
estableciendo las propiedades directamente en el control; ambos métodos se pueden intercambiar.
En Visual Basic 2005, la propiedad Font de un control es de sólo lectura en tiempo de ejecución, no puede establecer
directamente las propiedades. Debe crear una instancia de un nuevo objeto Font por cada propiedad que desee establecer.
Herencia de fuentes
En Visual Basic 6.0, las propiedades de fuente se tienen que establecer de forma individual para cada control o formulario; el
uso de un objeto stdFont simplifica el proceso pero sigue necesitando un código.
En Visual Basic 2005, las propiedades de fuentes se heredan automáticamente de sus objetos primarios a menos que se
definan explícitamente para el objeto secundario. Por ejemplo, si tiene dos controles de etiqueta en un formulario y cambia la
propiedad de fuente del formulario a Arial, las fuentes del control de etiqueta cambiarán también a Arial. Si, a continuación,
cambia la fuente de una etiqueta a Times Roman, los cambios posteriores en la fuente del formulario no reemplazarán la
fuente de la etiqueta.
Compatibilidad de fuentes
Visual Basic 6.0 admite fuentes de trama por razones de compatibilidad con versiones anteriores; Visual Basic 2005 sólo
admite fuentes TrueType y OpenType.
Enumerar fuentes
En Visual Basic 6.0 puede utilizar la colección Screen.Fonts junto con la propiedad Screen.FontCount para enumerar las
fuentes de pantalla disponibles.
En Visual Basic 2005, el objeto Screen ya no existe; para enumerar las fuentes disponibles en el sistema debe utilizar el espacio
de nombres System.Drawing.FontFamily.
Nota
Visual Basic 6.0 enumera todos los tipos de fuentes. Visual Basic 2005 sólo admite fuentes TrueType y OpenType; no se enu
meran otros tipos de fuentes. Además, Visual Basic 6.0 enumera cada versión de juego de caracteres de una familia de fuente
s (por ejemplo, Arial, Arial Baltic, Arial Greek); Visual Basic 2005 sólo enumera las familias de fuentes.

Cambios de código para fuentes


En los ejemplos de código siguientes se ilustran las diferencias en las técnicas de codificación entre Visual Basic 6.0 y Visual
Basic 2005.
Cambios de código para establecer propiedades de fuentes
El ejemplo siguiente muestra cómo establecer propiedades de fuentes en tiempo de ejecución. En Visual Basic 6.0 puede
establecer propiedades directamente en un control; en Visual Basic 2005 debe crear un nuevo objeto Font y asignarlo al
control cada vez que necesite establecer una propiedad.

' Visual Basic 6.0


' Set font properties directly on the control.
Label1.FontBold = True
' Create a stdFont object.
Dim f As New stdFont
' Set the stdFont object to the Arial font.
f.Name = "Arial"
' Assign the stdFont to the control's font property.
Set Label1.Font = f
' You can still change properties at run time.
Label1.FontBold = True
Label1.FontItalic = True

VB
' Visual Basic 2005
' Create a new Font object Name and Size are required.
Dim f As New System.Drawing.Font("Arial", 10)
' Assign the font to the control
Label1.Font = f
' To set additional properties, you must create a new Font object.
Label1.Font = New System.Drawing.Font(Label1.Font, FontStyle.Bold Or FontStyle.Italic)

Cambios de código para enumerar fuentes


El ejemplo siguiente muestra cómo completar un control ListBox con una lista de las fuentes instaladas en un equipo.
Nota
Visual Basic 6.0 enumera todos los tipos de fuentes. Visual Basic 2005 sólo admite fuentes TrueType y OpenType; no se enu
meran otros tipos de fuentes. Además, Visual Basic 6.0 enumera cada versión de juego de caracteres de una familia de fuente
s (por ejemplo, Arial, Arial Baltic, Arial Greek); Visual Basic 2005 sólo enumera las familias de fuentes.

' Visual Basic 6.0


Dim i As Integer
For i = 0 To Screen.FontCount – 1
List1.AddItem Screen.Fonts(i)
Next i

VB
' Visual Basic 2005
Dim ff As FontFamily
For Each ff In System.Drawing.FontFamily.Families
listBox1.Items.Add(ff.Name)
Next

Notas de actualización
Cuando una aplicación de Visual Basic 6.0 se actualiza a Visual Basic 2005, se modificarán los fragmentos de código que
controlen fuentes para utilizar el nuevo objeto Font.
La herencia de fuentes en Visual Basic 2005 puede producir cambios imprevistos en el aspecto de la aplicación. Debe
comprobar en la aplicación convertida el código que establezca explícitamente una fuente en el formulario o nivel de
contenedor y, si es necesario, cambie la fuente de los controles secundarios que no deban heredar esta fuente.
Durante la actualización, las fuentes de trama se convierten en la fuente OpenType predeterminada, Microsoft Sans Serif. Los
formatos tales como negrita o cursiva no se conservan. Para obtener más información, vea
Sólo se admiten las fuentes OpenType y TrueType.
Si la aplicación contiene código que enumere fuentes, no se enumerarán fuentes de trama en la aplicación actualizada y se
enumerarán familias de fuentes en lugar de versiones de juegos de caracteres individuales.
Vea también
Referencia
Font Class
FontFamily.Families Property
Otros recursos
Controles de formularios Windows Forms para usuarios de Visual Basic 6.0
Conceptos de Visual Basic

Ubicación de formularios para usuarios de Visual Basic 6.0


La posición de un formulario en la pantalla es distinta en Visual Basic 6.0 y en Visual Basic 2005.
Diferencias conceptuales
Left y Top (Propiedades)
En Visual Basic 6.0, la ubicación inicial de un formulario en la pantalla se puede establecer en tiempo de diseño con la ventana
Diseño de formulario o estableciendo las propiedades Left y Top de la ventana Propiedades. Las propiedades Left y Top
también se pueden establecer mediante programación.
En Visual Basic 2005, la ubicación de pantalla inicial se establece en tiempo de diseño mediante la propiedad Location, o
mediante programación estableciendo la propiedad Location en un objeto Point.
StartUpPosition (Propiedad)
Además, Visual Basic 6.0 admite una propiedad StartUpPosition que se puede utilizar para permitir que Windows establezca
una ubicación automáticamente; por ejemplo, en el centro de la pantalla. La configuración predeterminada es Manual, es
decir, las propiedades Left y Top tienen prioridad.
En Visual Basic 2005, la propiedad StartPosition realiza la misma función. El valor predeterminado es ahora
WindowsDefaultLocation, lo que indica que se omite la propiedad Location.
Vea también
Tareas
Cómo: Establecer la ubicación en pantalla de formularios Windows Forms
Conceptos de Visual Basic

Tareas de formularios para usuarios de Visual Basic 6.0


Existen numerosas diferencias entre los formularios Windows Forms y los formularios de Visual Basic 6.0. En la tabla siguiente
se proporciona una lista de tareas que se pueden ejecutar con formulario, junto con sus metodologías. Puede utilizar esta lista
en la transición de los proyectos de formularios de Visual Basic 6.0 existentes al nuevo modelo de .NET Framework para
formularios Windows Forms.
Tarea Formularios de Visual Basic 6. Formularios Windows Forms
0
Establecer el índice Seleccione cada control del form En el menú Ver, elija Orden de tabulación. El formulario muestra junto
de tabulación para t ulario y establezca su propiedad a cada control un número que representa la configuración de la propied
odos los controles TabIndex en el siguiente númer ad TabIndex del control. Haga clic en cada control siguiendo el orden de
de un formulario. o del orden de tabulación del for tabulación que desee. Para obtener más información, vea
mulario. Cómo: Establecer el orden de tabulación en formularios Windows Forms
.

Determinar la tecla Utilice los parámetros que propo Compare el método ModifierKeys de la clase del formulario con el valor
modificadora (ALT, rciona el controlador de eventos de la tecla modificadora, que se encuentra en la enumeración Keys. Para
MAYÚS, CTRL) que del mouse. obtener más información, vea
se presionó durante Cómo: Determinar qué tecla modificadora se presionó
los eventos de tecla
do y mouse (ratón).

Alinear o cambiar el Haga clic en cada control que va Haga clic en cada control que vaya a alinear o cuyo tamaño vaya a camb
tamaño de controle ya a alinear o cuyo tamaño vaya iar. El primer control seleccionado se utiliza para determinar la ubicación
s basándose en la u a cambiar. El último control selec y el tamaño de todos los controles seleccionados. Para obtener más info
bicación y el tamañ cionado se utiliza para determin rmación, vea
o de un solo control ar la ubicación y el tamaño de to Cómo: Alinear varios controles en formularios Windows Forms.
. dos los controles seleccionados.

Cambiar el nombre Cambie el nombre especificado Haga clic en el archivo de clase de un formulario en el Explorador de s
de un formulario. en la propiedad Name del form oluciones y, a continuación, cambie la propiedad Filename de la venta
ulario en la ventana Propiedade na Propiedades.
s.

Cambiar la posición Utilice la ventana Diseño de for Con el formulario seleccionado en el Diseñador de Windows Forms, d
en tiempo de ejecuc mulario para ubicar el formulari efina la propiedad StartPosition en la ventana Propiedades.
ión de un formulari o o defina su propiedad Startup
o. en la ventana Propiedades.

Mostrar un formula En el código, utilice el método S En el código, utilice el método ShowDialog del formulario. Para obtener
rio como un cuadro how y especifique que el formul más información, vea
de diálogo. ario se mostrará de forma modal Cómo: Mostrar cuadros de diálogo de formularios Windows Forms.
mediante el valor vbModal.

Agrupar o disponer Disponga los controles dentro d Sitúe los controles dentro de un control GroupBox. Al mover el grupo se
en capas los control el control Frame. Para mover los moverán también los controles.
es en un formulario controles como un grupo, selecci
. ónelos todos.

Recorrer en iteració Utilice una matriz de controles. Utilice Controls Collection. Para obtener más información, vea
n los controles de u Colecciones en Visual Basic.
n formulario.

Vea también
Referencia
Información general sobre formularios Windows Forms
Conceptos
Objeto Form para usuarios de Visual Basic 6.0
Matrices de controles para usuarios de Visual Basic 6.0
Otros recursos
Conceptos de formularios Windows Forms para usuarios de Visual Basic 6.0
Conceptos de Visual Basic

Gráficos para usuarios de Visual Basic 6.0


En Visual Basic 6.0, se usaban diversos métodos y propiedades de gráficos para dibujar en un control Form o PictureBox. En
Visual Basic 6.0 los gráficos se basan en las API de la interfaz de dispositivo gráfico (GDI) de Windows.
En Visual Basic 2005, el espacio de nombres System.Drawing, que encapsula GDI+ API, proporciona los gráficos. GDI+ expande
las funciones gráficas de Visual Basic 6.0 pero los métodos no son compatibles.
Diferencias conceptuales
En Visual Basic 6.0, los métodos de gráficos sólo se aplican al objeto Form y al control PictureBox.
En Visual Basic 2005, los métodos de gráficos se aplican a los formularios, además de a cualquier control que admita el evento
Paint, incluidos los controles PictureBox, Panel y GroupBox. Además, los métodos de gráficos se aplican a cualquier control que
admita la propiedad OwnerDraw, incluidos los controles ListView, TreeView y Button.
Propiedad AutoRedraw
En Visual Basic 6.0, se puede llamar a los métodos de gráficos desde cualquier procedimiento de evento; la propiedad
AutoRedraw se utiliza para conservar los gráficos cuando se llama a los métodos de gráficos desde un evento que no sea el
evento Paint.
En Visual Basic 2005, sólo se debe llamar a los métodos de gráficos desde el procedimiento de evento Paint o, en el caso de
algunos controles dibujados por el propietario, desde varios procedimientos de eventos Draw (DrawItem, DrawSubItem, etc.).
Ya no se admite la propiedad AutoRedraw y no es necesaria porque los eventos Paint y Draw conservan automáticamente
los gráficos.
Propiedad ClipControls
En Visual Basic 6.0, la propiedad ClipControls se utiliza para controlar el dibujo de un formulario o control. Cuando se
establece en True, se vuelven a dibujar sólo las áreas recientemente expuestas, en teoría, con lo que mejora su rendimiento.
No hay ningún equivalente para la propiedad ClipControls en Visual Basic 2005; las mejoras de rendimiento en GDI+ y los
adaptadores de vídeo actualizados lo hacen innecesario.
Propiedad DrawMode
En Visual Basic 6.0, la propiedad DrawMode controla el color de un objeto gráfico al dibujar un modelo encima de otro. Esta
propiedad sólo afecta a las pantallas monocromas o de baja resolución (256 colores o menos).
No hay ningún equivalente para la propiedad DrawMode en Visual Basic 2005, ya que no es necesaria en las presentaciones
actuales.
Propiedad DrawStyle
En Visual Basic 6.0, la propiedad DrawStyle controla el aspecto de una línea dibujada con el método Line. Si la propiedad
DrawWidth está establecida en un valor superior a 1, la propiedad DrawStyle no tiene efecto y la línea será siempre una línea
continua.
En Visual Basic 2005, el aspecto de una línea se controla estableciendo la propiedad DashStyle de una clase
System.Drawing.Pen utilizada por uno de los métodos DrawLine; el ancho de línea no tiene relación con esta propiedad.
Propiedad DrawWidth
En Visual Basic 6.0, la propiedad DrawWidth determina el grosor de una línea de píxeles; la propiedad DrawWidth se
establece normalmente antes de ejecutar el método de gráfico.
En Visual Basic 2005, la propiedad Pen.Width de un control System.Drawing.Pen determina el grosor de la línea; puede
establecer la propiedad Width como un parámetro cuando crea Pen o establecer Pen.Width después de crear Pen. Si no se
especifica ninguna propiedad Pen.Width, 1 píxel es el valor predeterminado.
Propiedad Image
En Visual Basic 6.0 la propiedad Image de un formulario o un control PictureBox devuelve un identificador de un mapa de
bits; se puede asignar el identificador a la propiedad Picture o utilizarlo como valor para pasarlo a las llamadas de API de
Windows.
En Visual Basic 2005, los mapas de bits ya no tienen identificadores; se pasa se pasa el propio mapa de bits real como objeto
de tipo Bitmap. Se puede asignar un control Bitmap a la propiedad Image de un control PictureBox pero no es posible
pasarlo a las llamadas de API de Windows.
Método Line
En Visual Basic 6.0, el método Line se utiliza para dibujar un rectángulo especificando las coordenadas superior izquierda e
inferior, junto con un argumento B opcional. La propiedad FillColor se utiliza para llenar un rectángulo de un color uniforme y
la propiedad FillStyle llena el rectángulo de un modelo de sombreado.
En Visual Basic 2005, el método DrawRectangles se utiliza para dibujar el borde de un rectángulo y el método FillRectangle se
usa para rellenarlo. FillRectangle acepta un objeto Brush como parámetro. SolidBrush reemplaza a la propiedad FillColor y
los miembros de la clase HatchBrush reemplazan a la propiedad FillStyle.
Método Point
En Visual Basic 6.0, el método Point de un formulario o de un control PictureBox se utiliza para devolver un valor de color
para el píxel en un punto especificado. Aunque el método Point se puede utilizar para formularios o controles que no
contengan imágenes, se suele utilizar sobre todo para recuperar un color de un mapa de bits asignado a la propiedad Picture.
En Visual Basic 2005, el método Point ya no existe. Puede utilizar el método
M:System.Drawing.Bitmap.GetPixel(System.Int32,System.Int32) para recuperar un valor de color de un mapa de bits.
Para formularios o controles que no contienen imágenes, puede consultar la propiedad BackColor.
Método Print
En Visual Basic 6.0, el método Print se utiliza para mostrar texto de un formulario o en un control PictureBox. La fuente
utilizada para mostrar el texto se determina mediante las propiedades Font del formulario o control, y el color, mediante la
propiedad ForeColor. El método Print no proporciona ningún control para la ubicación del texto y sólo se puede mostrar texto
horizontalmente.
En Visual Basic 2005, el método DrawString se utiliza para mostrar texto. La fuente se determina mediante un objeto Font y el
color, mediante un objeto Brush; ambos se pasan como parámetros al método DrawString. El método DrawString también
tiene parámetros X e Y que determinan la ubicación de inicio del texto. Existe también un parámetro Format opcional que
acepta un objeto StringFormat, lo que permite mostrar el texto verticalmente.
Método PSet
En Visual Basic 6.0, el método PSet se utiliza para cambiar el color de un píxel en un formulario o en un control PictureBox. Si
la propiedad DrawWidth se establece en un valor superior a 1, el método PSet dibuja un círculo relleno. Se utiliza un
parámetro opcional para especificar el color; si se omite, se utiliza ForeColor .
En Visual Basic 2005, no hay ningún equivalente para el método PSet. Para cambiar el color de un único píxel en un formulario
o en el control PictureBox, utilice el método DrawEllipse para dibujar un círculo con un alto y un ancho de 1 píxel. Para
duplicar la funcionalidad de PSet cuando DrawWidth es superior a 1, utilice el método FillEllipse.
Cambios de código para gráficos
En los ejemplos de código siguientes se ilustran las diferencias en las técnicas de codificación entre Visual Basic 6.0 y Visual
Basic 2005.
Dibujar una línea simple
El código siguiente muestra el dibujo de una línea en un formulario en tiempo de ejecución. En el ejemplo de Visual Basic 6.0,
se utiliza el método Line; acepta las coordenadas X e Y de los puntos de inicio y de fin, y, opcionalmente, un color como
argumentos. El ejemplo de Visual Basic 2005 utiliza el método DrawLine que acepta un objeto Pens y las coordenadas X e Y
de los puntos de inicio y de fin como argumentos.
Nota
Mientras que en Visual Basic 6.0 la unidad de medida predeterminada son los twips, en Visual Basic 2005 son los píxeles.

' Visual Basic 6.0


Private Sub Form_Paint()
' Draw a solid black line 200 twips from the top of the form.
Line (0, 200) - (ScaleWidth, 200), vbBlack
End Sub

VB
' Visual Basic 2005
Private Sub Form1_Paint(ByVal sender As Object, ByVal e _
As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint

' Draw a solid black line 25 pixels from the top of the form.
e.Graphics.DrawLine(Pens.Black, 0, 25, Me.Width, 25)
End Sub

Dibujar una línea de puntos


El código siguiente muestra el dibujo de una línea de puntos en un formulario en tiempo de ejecución. En el ejemplo de Visual
Basic 6.0, la propiedad DrawStyle determina el aspecto de la línea. El ejemplo de Visual Basic 2005 utiliza un objeto Pen y
establece la propiedad DashStyle para determinar el aspecto.
Nota
Mientras que en Visual Basic 6.0 la unidad de medida predeterminada son los twips, en Visual Basic 2005 son los píxeles.

' Visual Basic 6.0


Private Sub Form_Paint()
' Draw a dotted line 200 twips from the top of the form.
Me.DrawStyle = vbDot
Line (0, 200) - (ScaleWidth, 200), vbBlack
End Sub

VB
' Visual Basic 2005
Private Sub Form1_Paint1(ByVal sender As Object, ByVal e As _
System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint

' Draw a dotted black line 25 pixels from the top of the form.
Dim LPen As New System.Drawing.Pen(System.Drawing.Color.Black)
LPen.DashStyle = Drawing2D.DashStyle.Dot
e.Graphics.DrawLine(LPen, 0, 25, Me.Width, 25)
End Sub

Controlar el grosor de la línea


El código siguiente muestra el dibujo de líneas de distintos grosores en un formulario en tiempo de ejecución. En el ejemplo de
Visual Basic 6.0, se utiliza la propiedad DrawWidth. El ejemplo de Visual Basic 2005 utiliza la propiedad Width del objeto
Pens.

' Visual Basic 6.0


Private Sub Form_Paint()
' Draw a line with a thickness of 1 pixel.
DrawWidth = 1
Line (0, 200)-(ScaleWidth, 200), vbBlack
' Draw a line with a thickness of 5 pixels.
DrawWidth = 5
Line (0, 400)-(ScaleWidth, 400), vbBlack
' Draw a line with a thickness of 10 pixels.
DrawWidth = 10
Line (0, 600)-(ScaleWidth, 600), vbBlack
End Sub

VB
' Visual Basic 2005
Private Sub Form1_Paint2(ByVal sender As Object, ByVal e As _
System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint

' Draw a line with a thickness of 1 pixel.


Dim TPen As New System.Drawing.Pen(System.Drawing.Color.Black, 1)
e.Graphics.DrawLine(TPen, 0, 25, Me.Width, 25)
' Draw a line with a thickness of 5 pixels.
TPen.Width = 5
e.Graphics.DrawLine(TPen, 0, 50, Me.Width, 50)
' Draw a line with a thickness of 10 pixels.
TPen.Width = 10
e.Graphics.DrawLine(TPen, 0, 75, Me.Width, 75)
End Sub

Dibujar un círculo
El código siguiente muestra el dibujo de un círculo en un formulario en tiempo de ejecución. En el ejemplo de Visual Basic 6.0,
se utiliza el método Circle; acepta las coordenadas X e Y del punto central, el radio y, opcionalmente, un color como
argumentos. El ejemplo de Visual Basic 2005 utiliza el método DrawEllipse que acepta un objeto Pen, las coordenadas X e Y
del ángulo superior izquierdo del rectángulo delimitador, y el ancho y el alto como argumentos.
Nota
Mientras que en Visual Basic 6.0 la unidad de medida predeterminada son los twips, en Visual Basic 2005 son los píxeles.

' Visual Basic 6.0


Private Sub Form_Paint()
' Draw a 1000 twip diameter red circle
Circle (500, 500), 500, vbRed
End Sub

VB
' Visual Basic 2005
Private Sub Form1_Paint3(ByVal sender As Object, ByVal e As _
System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint

' Draw a 70 pixel diameter red circle.


e.Graphics.DrawEllipse(Pens.Red, 0, 0, 70, 70)
End Sub

Dibujar un rectángulo relleno.


El código siguiente muestra el dibujo de dos rectángulos en un formulario en tiempo de ejecución, uno con un relleno sólido y
el otro con un modelo sombreado. En el ejemplo de Visual Basic 6.0, se utilizan las propiedades FillColor y FillStyle junto con
el método Line. Al llamar al método Line con el parámetro B, se dibuja un rectángulo.
El ejemplo de Visual Basic 2005 utiliza el método Graphics.Rectangle para dibujar el contorno y el método
Graphics.FillRectangle que acepta un objeto Brush como argumento. En este ejemplo, se utilizan los controles SolidBrush y
HatchBrush.
Nota
Mientras que en Visual Basic 6.0 la unidad de medida predeterminada son los twips, en Visual Basic 2005 son los píxeles.

' Visual Basic 6.0


Private Sub Form_Paint()
' Draw a solid red rectangle.
FillColor = vbRed
FillStyle = vbSolid
Line (10, 10)- (1000, 500), vbRed, B
' Draw a rectangle filled with a crosshatch pattern.
FillColor = vbBlack
FillStyle = vbCross
Line (10, 500)- (1000, 1000), vbBlack, B
End Sub
VB
' Visual Basic 2005
Private Sub Form1_Paint4(ByVal sender As Object, ByVal e As _
System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint

' Draw a solid red rectangle.


Dim SBrush As New System.Drawing.SolidBrush _
(System.Drawing.Color.Red)
e.Graphics.DrawRectangle(Pens.Red, 2, 2, 70, 40)
e.Graphics.FillRectangle(SBrush, 2, 2, 70, 40)

' Draw a rectangle filled with a crosshatch pattern.


Dim HBrush As New System.Drawing.Drawing2D.HatchBrush( _
System.Drawing.Drawing2D.HatchStyle.Cross, _
System.Drawing.Color.Black, System.Drawing.Color.Transparent)
e.Graphics.DrawRectangle(Pens.Black, 2, 40, 70, 40)
e.Graphics.FillRectangle(HBrush, 2, 40, 70, 40)
End Sub

Mostrar una imagen en un formulario


El código siguiente muestra los métodos de gráficos para mostrar una imagen en un formulario en tiempo de ejecución. El
ejemplo de Visual Basic 6.0 utiliza el método PaintPicture. El ejemplo de Visual Basic 2005 utiliza el método DrawImage.

' Visual Basic 6.0


Private Sub Form_Paint()
' Create a stdPicture object.
Dim Pict1 As New stdPicture
Pict1 = LoadPicture("C:\Windows\Greenstone.bmp")
PaintPicture Pict1, 0, 0
End Sub

VB
' Visual Basic 2005
Private Sub Form1_Paint5(ByVal sender As Object, ByVal e As _
System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint

' Create a Bitmap object.


Dim Pict1 As New Bitmap("C:\Windows\Greenstone.bmp")
e.Graphics.DrawImage(Pict1, 0, 0)
End Sub

Mostrar texto en un formulario


El código siguiente indica los métodos de gráficos para mostrar una cadena de texto en un formulario en tiempo de ejecución.
El ejemplo de Visual Basic 6.0 utiliza el método Print. El ejemplo de Visual Basic 2005 utiliza el método DrawString.

' Visual Basic 6.0


Private Sub Form_Paint()
Me.Font.Size = 24
Me.Font.Bold = True
Me.ForeColor = vbRed
Print "Hello World!"
End Sub

VB
' Visual Basic 2005
Private Sub Form1_Paint6(ByVal sender As Object, ByVal e As _
System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint

Dim TextFont As New System.Drawing.Font("Arial", 24, FontStyle.Bold)


Dim TextBrush As New System.Drawing.SolidBrush(System.Drawing.Color.Red)
e.Graphics.DrawString("Hello World!", TextFont, TextBrush, 10, 10)
TextFont.Dispose()
TextBrush.Dispose()
End Sub

Determinar el alto y ancho de una cadena


El código siguiente muestra los métodos de gráficos para determinar el tamaño de una cadena en un formulario en tiempo de
ejecución y dibujar luego un rectángulo alrededor de ella. El ejemplo de Visual Basic 6.0 utiliza los métodos TextHeight y
TextWidth. El ejemplo de Visual Basic 2005 utiliza el método MeasureString que devuelve una estructura SizeF.

' Visual Basic 6.0


Private Sub Form_Paint()
Me.Font.Size = 24
Me.Font.Bold = True
Me.ForeColor = vbRed
Print "Hello World!"
Line (0, 0)-(TextWidth("Hello World!"), _
TextHeight("Hello World!")), vbBlack, B
End Sub

VB
' Visual Basic 2005
Private Sub Form1_Paint7(ByVal sender As Object, ByVal e As _
System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint

Dim TextFont As New System.Drawing.Font("Arial", 24, FontStyle.Bold)


Dim TextBrush As New System.Drawing.SolidBrush(System.Drawing.Color.Red)
e.Graphics.DrawString("Hello World!", TextFont, TextBrush, 10, 10)
Dim TextSize As New System.Drawing.SizeF
TextSize = e.Graphics.MeasureString("Hello World!", TextFont)
e.Graphics.DrawRectangle(Pens.Black, 10, 10, TextSize.Width, TextSize.Height)
TextFont.Dispose()
TextBrush.Dispose()
End Sub

Dibujar un único píxel


El ejemplo siguiente muestra los métodos de gráficos para cambiar el color de un único píxel en un formulario en tiempo de
ejecución. El ejemplo de Visual Basic 6.0 utiliza el método PSet. El ejemplo de Visual Basic 2005 utiliza el método DrawEllipse
con los parámetros Height y Width establecidos en 1.
Nota Mientras que en Visual Basic 6.0 la unidad de medida predeterminada son los twips, en Visual Basic 2005 son los
píxeles.

' Visual Basic 6.0


Private Sub Form_Paint()
Me.DrawWidth = 1
PSet (1000, 1000), vbRed
End Sub

VB
' Visual Basic 2005
Private Sub Form1_Paint8(ByVal sender As Object, ByVal e As _
System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint

e.Graphics.DrawEllipse(Pens.Red, 70, 70, 1, 1)


End Sub
Determinar el color de un único píxel
El código siguiente muestra los métodos de gráficos para determinar el color de un píxel en una ubicación especificada en una
imagen de un formulario en tiempo de ejecución y pintar luego un rectángulo relleno de dicho color. El ejemplo de Visual Basic
6.0 utiliza el método Point para recuperar el valor de color. El ejemplo de Visual Basic 2005 utiliza el método GetPixel.
Nota
Mientras que en Visual Basic 6.0 la unidad de medida predeterminada son los twips, en Visual Basic 2005 son los píxeles.

' Visual Basic 6.0


Private Sub Form_Paint()
Dim PixelColor As Long
Picture1.Picture = LoadPicture("C:\Windows\Greenstone.bmp")
PixelColor = Picture1.Point(10, 10)
FillColor = PixelColor
Line (0, 0)-(100, 500), PixelColor, B
End Sub

VB
' Visual Basic 2005
Private Sub Form1_Paint9(ByVal sender As Object, ByVal e As _
System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint

Dim Pict1 As New Bitmap("C:\Windows\Greenstone.bmp")


Picture1.Image = Pict1
Dim PixelColor As Color = Pict1.GetPixel(4, 4)
Dim PixelBrush As New SolidBrush(PixelColor)
e.Graphics.FillRectangle(PixelBrush, 0, 0, 100, 100)
End Sub

Equivalencias de métodos y propiedades de gráficos


En la siguiente tabla se enumeran propiedades y métodos de gráficos de Visual Basic 6.0 junto con sus equivalentes en Visual
Basic 2005.
Visual Basic 6.0 Equivalente en Visual Basic 2005
AutoRedraw (propiedad) Nueva implementación. Para que los gráficos permanezcan, ponga métodos de gráficos en el eve
nto Paint.

Circle (método) DrawEllipse (método)

ClipControls (propiedad) Nueva implementación. La propiedad ClipControls ya no es necesaria.

Cls (método) Clear (método)

CurrentX (propiedad) El parámetro x de diversos métodos de gráficos. Por ejemplo, DrawRectangle(pen, x, y, width, hei
ght)

CurrentY (propiedad) El parámetro y de diversos métodos de gráficos. Por ejemplo, DrawRectangle (pen, x, y, width, h
eight)

DrawMode (propiedad) Nueva implementación. La propiedad DrawMode ya no es necesaria.

DrawStyle (propiedad) DashStyle (propiedad)

DrawWidth (propiedad) Width (propiedad)


FillColor (propiedad) Objeto SolidBrush

FillStyle (propiedad) Objeto HatchBrush

HasDC (propiedad) Nueva implementación. Los contextos de dispositivo no son necesarios con GDI+.

HDC (propiedad) Nueva implementación. Los contextos de dispositivo no son necesarios con GDI+.

Image (propiedad) Nueva implementación.

Line (método) DrawLine (método)

PaintPicture (método) DrawImage (método)

Point (método) No hay equivalente directo Para los mapas de bits, utilice Bitmap.GetPixel. En formularios o con
troles, utilice la propiedad BackColor.

Print (método) DrawString (método)

Pset (método) DrawEllipse, FillEllipse (métodos)

TextHeight, TextWidth (pr MeasureString (método)


opiedades)

Notas de actualización
Cuando una aplicación se actualiza de Visual Basic 6.0 a Visual Basic 2005, no se actualizan los métodos de gráficos y se
insertan advertencias en el código. Debido a las diferencias considerables entre GDI y GDI+, se deberá reescribir cualquier
código de gráfico existente.
Vea también
Tareas
Ejemplo Custom Drawing User Control
Otros recursos
Información general de gráficos (Formularios Windows Forms)
Introducción a la programación de gráficos
Código administrado de GDI+
Utilizar clases gráficas administradas
Conceptos de Visual Basic

Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0


En este tema se compara la compatibilidad de implementación de la ayuda en Visual Basic 6.0 con su equivalente en Visual
Basic 2005.
La mayoría de las aplicaciones proporcionan ayuda a los usuarios en el formulario de un archivo de Ayuda, Ayuda emergente
y/o información sobre herramientas. Aunque Visual Basic 6.0 y Visual Basic 2005 admiten los tres mecanismos de ayuda, los
métodos de implementación difieren considerablemente.
Diferencias conceptuales
En Visual Basic 6.0, la ayuda se proporcionaba mediante la Ayuda HTML o los formatos antiguos de Ayuda de Windows. En
Visual Basic 2005, sólo es compatible la Ayuda HTML.
En Visual Basic 6.0, la compatibilidad de la ayuda se implementaba objeto a objeto especificando un nombre de archivo de
Ayuda en el cuadro de dialogo Propiedades del proyecto. Los formularios y los controles tenían una propiedad
HelpContextID que se podía utilizar para establecer un vínculo a un tema especifico del archivo de Ayuda.
La compatibilidad con la ayuda en Visual Basic 2005 se implementa en cada formulario agregando uno o varios componentes
HelpProvider a un formulario. Los formularios y los controles tienen las propiedades HelpKeyword y HelpNavigator, que se
utilizaban para establecer vínculos a temas específicos. Para obtener más información, vea
Cómo: Proporcionar ayuda en una aplicación para Windows.
Ayuda emergente
En Visual Basic 6.0, la Ayuda emergente se implementaba mediante las propiedades de formulario WhatsThisButton y
WhatsThisHelp. El botón Qué es esto aparecía si el valor de WhatsThisButton era True y si el valor de las propiedades
MaxButton y MinButton era False. Cuando se establecía en el código la propiedad WhatsThisMode se habilitaba el botón.
La Ayuda emergente en Visual Basic 2005 se implementa utilizando la propiedad HelpButton de un formulario. El botón
Ayuda sólo aparece si la propiedad HelpButton se establece en True y si las propiedades MaximizeBox y MinimizeBox se
establecen en False; el botón se habilita automáticamente. Para obtener más información, vea
Cómo: Mostrar ayuda emergente.
Información sobre herramientas
En Visual Basic 6,0, la información sobre herramientas se implementaba mediante la propiedad ToolTipText de un control.
La información sobre herramientas en Visual Basic 2005 se implementa agregando un componente ToolTip a un formulario.
Para obtener más información, vea Compatibilidad de la información sobre herramientas para usuarios de Visual Basic 6.0.
ShowHelp (Método)
En Visual Basic 6.0, la Ayuda también podía mostrarse utilizando un método ShowHelp de un control CommonDialog para
abrir la Ayuda de Windows. La Ayuda de Windows ya no se admite en Visual Basic 2005 y no hay ningún control equivalente
para mostrar la ayuda.
Cambios de código para la compatibilidad con la Ayuda
El código siguiente ilustra las diferencias que existen entre las técnicas de codificación de Visual Basic 6.0 y de Visual Basic
2005 en algunos usos comunes de las propiedades de Ayuda.
Especificar un archivo de Ayuda
En el ejemplo siguiente se muestra cómo se especifica un archivo de Ayuda en la aplicación; en el ejemplo se presupone que el
formulario tiene dos controles OptionButton que permiten que el usuario elija entre los archivos de Ayuda para inglés o
francés.
' Visual Basic 6.0
If Option1(0).Value = True Then
App.HelpFile = App.Path & "\EnglishHelp.chm"
Else
App.HelpFile = App.Path & "\FrenchHelp.chm"
End If

VB
' Visual Basic 2005
' Assumes a HelpProvider component has been added to the form.
If RadioButton1.Checked = True Then
HelpProvider1.HelpNamespace = My.Application.Info.DirectoryPath & _
"\EnglishHelp.chm"
Else
HelpProvider1.HelpNamespace = My.Application.Info.DirectoryPath & _
"\FrenchHelp.chm"
End If

Mostrar una información sobre herramientas


A continuación se incluye el código necesario para mostrar una información sobre herramientas.
' Visual Basic 6.0
Private Sub Text1_Change()
Text1.ToolTipText = "The text has changed"
End Sub

VB
' Visual Basic 2005
' Assumes a ToolTip component has been added to the form.
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles TextBox1.TextChanged
ToolTip1.SetToolTip(TextBox1, "The text has changed")
End Sub

Equivalencias de la compatibilidad de la Ayuda


Visual Basic 6.0 Visual Basic 2005
Propiedad App.Help Componente HelpProvider
File

Propiedad HelpCont Método SetHelpKeyword. Para obtener más información, vea


extID Cómo: Proporcionar ayuda en una aplicación para Windows.

Propiedad ToolTipT Método SetToolTip. Para obtener más información, vea


ext Compatibilidad de la información sobre herramientas para usuarios de Visual Basic 6.0.

Propiedad WhatsThi Propiedad HelpButton


sButton

Propiedad WhatsThi Propiedad HelpButton


sHelp

Propiedad WhatsThi Propiedad HelpString


sHelpID

Propiedad WhatsThi No hay equivalente. Se habilita de manera predeterminada.


sMode

Notas de actualización
Cuando un proyecto de Visual Basic 6.0 se actualiza utilizando el Asistente para actualización en Visual Basic 2005, no se
actualizará ningún código ni ninguna propiedad relacionada con la Ayuda. Deberá implementar de nuevo la compatibilidad
con la Ayuda en la aplicación después de la actualización. Si el archivo de Ayuda se ha escrito utilizando la Ayuda HTML, puede
reutilizar este archivo; si se ha escrito utilizando la Ayuda de Windows, deberá escribirlo de nuevo.
Vea también
Tareas
Cómo: Proporcionar ayuda en una aplicación para Windows
Cómo: Mostrar ayuda emergente
Conceptos
Compatibilidad de la información sobre herramientas para usuarios de Visual Basic 6.0
Otros recursos
Integrar la Ayuda de usuario en formularios Windows Forms
Conceptos de Visual Basic

Control de menús para usuarios de Visual Basic 6.0


Las técnicas para crear y trabajar con menús en Visual Basic 2005 difieren considerablemente de Visual Basic 6.0
Diferencias conceptuales
En Visual Basic 6.0, los menús se creaban con el Editor de menús. Los menús no se podían crear, pero sí se podían cambiar o
agregar mediante programación.
En Visual Basic 2005, los menús se crean utilizando un control MenuStrip que proporciona un diseñador de menús gráficos.
Los menús también se pueden crear mediante programación.
Menús contextuales
En Visual Basic 6.0, los menús contextuales se creaban mediante el método PopupMenu de un formulario o de un control. Los
menús no se podían crear mediante programación; el método PopupMenu requería que ya existiera un menú.
En Visual Basic 2005, los menús contextuales se crean mediante controles ContextMenuStrip que proporcionan un diseñador
de menús gráficos; también es posible crearlos mediante programación creando una nueva instancia de la clase
ContextMenuStrip. Para obtener más información, vea Información general sobre el control ContextMenuStrip.
Combinar menús
En Visual Basic 6.0, la propiedad NegotiateMenus de un formulario determinaba si un menú de un objeto del formulario se
combinaba con el menú del formulario. Sólo se podía establecer esta propiedad en tiempo de diseño.
En Visual Basic 2005, los menús se pueden combinar utilizando la propiedad AllowMerge de un control MenuStrip o
ContextMenuStrip.
Notas de actualización
Cuando se actualiza una aplicación de Visual Basic 6.0 en Visual Basic 2005, cualquier menú existente se actualiza en los
componentes MainMenu. Los menús que se utilizaban como menús contextuales se deben cambiar manualmente para utilizar
los controles ContextMenuStrip.
Vea también
Conceptos
Objeto Menu para usuarios de Visual Basic 6.0
Formularios Windows Forms para usuarios de Visual Basic 6.0
Otros recursos
MenuStrip (Control de formularios Windows Forms)
Conceptos de Visual Basic

MDI para usuarios de Visual Basic 6.0


Puede utilizar Visual Basic 6.0 y Visual Basic 2005 para crear aplicaciones de interfaz de múltiples documentos (MDI); sin
embargo, las técnicas para crear estas aplicaciones y algunos comportamientos difieren.
Diferencias conceptuales
En Visual Basic 6.0, las aplicaciones de interfaz de múltiples documentos (MDI) se creaban agregando un formulario MDI a un
proyecto y definiendo la propiedad MDIChild de cualquier formulario secundario.
Visual Basic 2005 no tiene formularios MDI; se puede convertir cualquier formulario en un formulario MDI primario
estableciendo la propiedad IsMdiContainer en True.
Muchas de las propiedades y métodos que se aplicaban a los formularios MDI de Visual Basic 6.0 han cambiado en Visual
Basic 2005. Para obtener más información, vea Objeto MDIForm para usuarios de Visual Basic 6.0.
El comportamiento de las aplicaciones MDI también ha cambiado. En Visual Basic 6.0, una aplicación MDI que contenga un
formulario que no sea un formulario MDI secundario no finaliza hasta que ese formulario se cierra, aunque el formulario MDI
primario esté cerrado. En Visual Basic 2005, la aplicación finaliza cuando el formulario de inicio se cierra, sin tener en cuenta
los formularios de la aplicación que no sean MDI.
Vea también
Conceptos
Objeto MDIForm para usuarios de Visual Basic 6.0
Formularios Windows Forms para usuarios de Visual Basic 6.0
Otros recursos
Aplicaciones de interfaz de múltiples documentos (MDI)
Ayuda para usuarios de Visual Basic 6.0
Conceptos de Visual Basic

Imprimir cambios para usuarios de Visual Basic 6.0


Visual Basic 2005 proporciona una compatibilidad muy mejorada con la impresión mediante clases que controlan la impresión
de documentos y permiten que los usuarios modifiquen la configuración de impresión y seleccionen impresoras, además
permite la vista preliminar.
Diferencias conceptuales
Objeto Printer
En Visual Basic 6.0, el objeto Printer se utiliza para imprimir; admite varios métodos gráficos como Print, Line y PaintPicture
para controlar lo que se imprime.
En Visual Basic 2005, el componente PrintDocument reemplaza al objeto Printer. Los métodos gráficos equivalentes incluyen
los métodos DrawString, DrawLine y DrawImage de la clase Graphics.
Para obtener más información, vea Objeto Printer para usuarios de Visual Basic 6.0.
Colección Printers
En Visual Basic 6.0, la colección Printers se utilizaba para dirigir la salida de un objeto Printer a otra impresora. La colección
Printers contenía una lista de impresoras disponibles que coincidía con la que se mostraba en el cuadro de diálogo Imprimir
de Windows.
En Visual Basic 2005, la colección Printers se ha reemplazado por el control PrintDialog, que proporciona un cuadro de
diálogo Imprimir estándar de Windows.
Para obtener más información, vea Colección Printers para usuarios de Visual Basic 6.0.
Método PrintForm
En Visual Basic 6.0, el método PrintForm de un formulario se podía usar para enviar una imagen del formulario a una
impresora. El método PrintForm ya no existe en Visual Basic 2005.
El resultado del método PrintForm variaba mucho en función de la resolución de la pantalla y de la impresora, por lo que no
era el método de impresión recomendado. Si es necesario duplicar la funcionalidad del método PrintForm, se pueden
automatizar las funciones de captura de pantalla de una herramienta de gráficos de terceros para capturar e imprimir la
imagen de un formulario.
Vista preliminar
En Visual Basic 6.0, sólo se podía implementar la vista preliminar mediante controles de terceros. En Visual Basic 2005, el
control PrintPreviewDialog se puede utilizar para proporcionar un cuadro de diálogo Vista preliminar estándar de Windows.
Para obtener más información, vea Información general sobre el control PrintPreviewDialog (formularios Windows Forms).
Configurar página
En Visual Basic 6.0 no se proporcionaba una interfaz de usuario para la configuración de página. En Visual Basic 2005, el
control PageSetupDialog se puede utilizar para proporcionar un cuadro de diálogo Configurar página estándar de Windows.
Para obtener más información, vea Información general sobre el componente PageSetupDialog (formularios Windows Forms).
Imprimir desde un archivo
En Visual Basic 6.0, la impresión de texto de un archivo requería una cantidad de código considerable. En Visual Basic 2005, la
clase StreamReader se puede utilizar para pasar directamente el contenido de un archivo de texto a un componente
PrintDocument. Para obtener más información, vea el método Print de la clase PrintDocument.
Vea también
Conceptos
Objeto Printer para usuarios de Visual Basic 6.0
Colección Printers para usuarios de Visual Basic 6.0
Otros recursos
Funcionalidad para imprimir en formularios Windows Forms
Conceptos de Visual Basic

Compatibilidad de la información sobre herramientas para


usuarios de Visual Basic 6.0
Los métodos para mostrar información sobre herramientas difieren considerablemente entre Visual Basic 6.0 y Visual Basic
2005.
Diferencias conceptuales
En Visual Basic 6.0, la propiedad ToolTipText de un control se usa para mostrar información sobre herramientas en tiempo de
ejecución.
En Visual Basic 2005, se puede utilizar un único componente ToolTip para controlar la información sobre herramientas de
todos los controles de un formulario; el componente ToolTip se puede agregar al formulario desde el Cuadro de
herramientas. El método SetToolTip se utiliza para establecer el texto de cada información sobre herramientas en función
del nombre del control.
Ocultar la información sobre herramientas
En Visual Basic 6.0, si la propiedad ToolTipText contiene texto, se muestra la información sobre herramientas; si está vacía, no
se muestra. Para borrar el texto de varios objetos de información sobre herramientas, debe recorrer la colección Controls y
establecer la propiedad ToolTipText en una cadena vacía.
En Visual Basic 2005, puede impedir que aparezca la información sobre herramientas transfiriendo una cadena vacía al
método SetToolTip; puede borrar el texto de todos los objetos de información sobre herramientas asociados a un
componente ToolTip; para ello, basta con establecer la propiedad Active en false.
Personalizar la información sobre herramientas
En Visual Basic 6.0, no se puede personalizar una información sobre herramientas sin recurrir a llamadas a la API de Windows.
En Visual Basic 2005, se han incluido una serie de propiedades nuevas que permiten personalizar el aspecto o el
comportamiento de una información sobre herramientas, para, por ejemplo, cambiar los colores, definir un tiempo de espera
antes de mostrar una información sobre herramientas o crear informaciones sobre herramientas de varias líneas.
Cambios de código para la información sobre herramientas
En el ejemplo de código siguiente se ilustran las diferencias que existen entre las técnicas de codificación de Visual Basic 6.0 y
Visual Basic 2005.
El código se modifica para mostrar una información sobre herramientas
En el ejemplo siguiente se muestra cómo se configura una información sobre herramientas de un control Button en Visual
Basic 6.0 y en Visual Basic 2005. En el ejemplo de Visual Basic 2005 se presupone que se ha agregado un componente ToolTip
al formulario en tiempo de diseño.

' Visual Basic 6.0


Button1.ToolTipText = "Save changes"

VB
' Visual Basic 2005
ToolTip1.SetToolTip(Button1, "Save changes")

El código se modifica para ocultar una información sobre herramientas


En el ejemplo siguiente se muestra cómo se oculta la información sobre herramientas de un control Button en Visual Basic 6.0
y en Visual Basic 2005. En el ejemplo de Visual Basic 2005 se presupone que se ha agregado un componente ToolTip al
formulario en tiempo de diseño.
Nota
El componente ToolTip de Visual Basic 2005 tiene también una propiedad Active; si esta propiedad se establece en false, se
oculta la información sobre herramientas de todos los controles asociados a dicho componente ToolTip.
' Visual Basic 6.0
' Hide a single ToolTip.
Button1.ToolTipText = ""
' Hide all ToolTips.
For Each Control in Me.Controls
Control.ToolTipText = ""
Next

VB
' Visual Basic 2005
' Hide a single ToolTip.
ToolTip1.SetToolTip(Button1, "")
' Hide all ToolTips.
ToolTip1.Active = False

Notas de actualización
Cuando una aplicación de Visual Basic 6.0 se actualiza a Visual Basic 2005, no se actualiza ninguna referencia a la propiedad
ToolTipText en tiempo de diseño ni en tiempo de ejecución y se insertan comentarios en el código. Se agrega un componente
ToolTip denominado ToolTip1 al formulario, y deberá enlazar las informaciones sobre herramientas definiendo la propiedad
ToolTip on ToolTip1 en tiempo de diseño o llamando al método SetToolTip en tiempo de ejecución.
Si la aplicación de Visual Basic 6.0 utiliza llamadas a la API de Windows para personalizar las informaciones sobre
herramientas, deberá modificar el código para aprovechar las características de personalización del componente ToolTip.
Vea también
Referencia
Información general sobre el componente ToolTip (formularios Windows Forms)
Otros recursos
Controles de formularios Windows Forms para usuarios de Visual Basic 6.0
Conceptos de Visual Basic

Números de versión para usuarios de Visual Basic 6.0


El esquema de números de versión para Visual Basic 2005 es distinto del que se utilizaba en Visual Basic 6.0, y los métodos
para establecer y recuperar los números de versión también son diferentes.
Diferencias conceptuales
En Visual Basic 6.0, al establecer las propiedades Major, Minor y Revision del objeto App, se controla el número de versión
de una aplicación. Por ejemplo, al establecer Major en 1, Minor en 2 y Revision en 3, se obtiene el número de versión 1.2.0.3.
Esta tercera parte del número de versión (0) no se puede ver en Visual Basic; no obstante, es visible al observar las propiedades
de un archivo compilado por Visual Basic 6.0.
En Visual Basic 2005, un atributo AssemblyVersion, que tiene cuatro partes, reemplaza a las propiedades de número de
versión: Major, Minor, Build y Revision. En el ejemplo anterior, el número de versión resultante sería 1.2.x.4, donde x es el
número de versión de compilación. Observe que el valor Revision constituye ahora la parte cuarta del número de versión.
Establecer propiedades de versión
En Visual Basic 6.0 las propiedades del número de versión se establecen en el cuadro de diálogo Propiedades del proyecto;
en Visual Basic 2005 se establecen en el cuadro de diálogo Información de ensamblado, que aparece al hacer clic en el
botón Información de ensamblado en la ficha Aplicación del Diseñador de proyectos.
Nota
Las propiedades del número de versión de Visual Basic 6.0 se almacenan en el archivo Project (.vbp) y se pueden editar direc
tamente en un editor de texto como el Bloc de notas. Los atributos de ensamblado se almacenan en el archivo AssemblyInfo.
vb y también se pueden editar directamente en el Editor de código.

Cambios de código para los números de versión


Los siguientes ejemplos de código ilustran las diferencias en las técnicas de codificación entre Visual Basic 6.0 y Visual Basic
2005.
Cambios de código para mostrar el número de versión de una aplicación
El ejemplo siguiente muestra cómo se recupera el número de versión de una aplicación y se muestra en una etiqueta.
' Visual Basic 6.0
Label1.Caption = "Version: " & App.Major & "." & App.Minor & "." _
& App.Revision

VB
'Visual Basic 2005
Label1.Text = My.Application.Info.Version.ToString()

Equivalencias de la propiedad Version Number


En la siguiente tabla se muestran las propiedades de número de versión de Visual Basic 6.0 y sus equivalentes de Visual Basic
2005.
Visual Basic 6.0 Visual Basic 2005
Ningún equivalen My.Application.AppInfo.Version.Build
te

Major My.Application.AppInfo.Version.Major

Minor My.Application.AppInfo.Version.Minor
Revision My.Application.AppInfo.Version.Revision
Nota
En Visual Basic 6.0 Revision corresponde a la cuarta parte del número de versión; en Visual Basic 2005 es
la tercera.

Notas de actualización
Cuando se actualiza una aplicación desde Visual Basic 6.0, sólo se actualizan las propiedades Major y Minor; Visual Basic 2005
asigna nuevos valores para las propiedades Revision y Build.
Vea también
Conceptos
Objeto App para usuarios de Visual Basic 6.0
Conceptos de Visual Basic

Cómo: Agregar controles de sistema de archivos de Visual Basic


6.0 a una aplicación
Se recomienda utilizar los componentes OpenFileDialog y SaveFileDialog para obtener acceso al sistema de archivos; sin
embargo, si considera necesario crear cuadros de diálogo de archivo propios, Visual Basic 2005 proporciona los controles
DirListBox, DriveListBox y FileListBox, que forman parte de la biblioteca Microsoft Visual Basic Compatibility Runtime.
Puede agregar DirListBox, DriveListBoxo FileListBox a un proyecto de una aplicación para Windows utilizando los
procedimientos siguientes.
Nota
Los cuadros de diálogo y los comandos de menú que se ven pueden diferir de los descritos en la Ayuda, dependiendo de los
valores de configuración o de edición activos. Para cambiar la configuración, seleccione Importar y exportar configuracio
nes en el menú Herramientas. Para obtener más información, vea Valores de configuración de Visual Studio.

Agregar controles al proyecto


Para agregar una referencia a la biblioteca de compatibilidad
1. En el menú Proyecto, elija Agregar referencia.
2. En el cuadro de diálogo Agregar referencia, haga clic en la ficha .NET. En la lista Nombre de componente, elija
Microsoft.VisualBasic.Compatibility y, a continuación, haga clic en Aceptar.
La plantilla se agregará al proyecto.
Para agregar los controles al Cuadro de herramientas
1. En el menú Ver, seleccione Cuadro de herramientas.
2. Expanda la sección Todos los formularios Windows Forms. Haga clic con el botón secundario del mouse (ratón) en la
barra de título y, a continuación, haga clic en Elegir elementos.
3. En el cuadro de diálogo Elegir elementos del cuadro de herramientas, compruebe los componentes DirListBox,
DriveListBox y FileListBox y, a continuación, haga clic en Aceptar.
Los controles se agregarán al Cuadro de herramientas; se pueden utilizar como cualquier otro control de formularios
Windows Forms.
Nota
Una vez agregados, los controles permanecerán en el Cuadro de herramientas hasta que se eliminen de forma explíc
ita.

Vea también
Referencia
Información general sobre el componente OpenFileDialog (formularios Windows Forms)
Información general sobre el componente SaveFileDialog (formularios Windows Forms)
Conceptos
Control DirListBox para usuarios de Visual Basic 6.0
Control DriveListBox para usuarios de Visual Basic 6.0
Control FileListBox para usuarios de Visual Basic 6.0
Conceptos de Visual Basic

Depuración para usuarios de Visual Basic 6.0


Aunque el proceso de depurar una aplicación en Visual Basic 2005 es esencialmente igual que en Visual Basic 6.0, hay algunas
diferencias menores. Además, existen nuevas características relacionadas con la depuración en Visual Basic 2005. Para obtener
más información, vea Depurar la aplicación de Visual Basic.
Diferencias conceptuales
Establecer inspecciones
En Visual Basic 6.0, se pueden establecer inspecciones en tiempo de diseño o en tiempo de ejecución si se está en modo de
interrupción. En Visual Basic 2005, sólo se pueden establecer inspecciones en el modo de interrupción.
Errores de compilación
En Visual Basic 6.0, los errores de compilación provocan que se muestre un cuadro de dialogo con un mensaje de error
durante la depuración.
En Visual Basic 2005, los errores de compilación se resaltan en la ventana del Editor de código con un subrayado azul. Si
intenta depurar la aplicación antes de corregir un error, se muestra una advertencia de error de generación y el error aparece
en la ventana Lista de tareas.
Excepciones en tiempo de ejecución
En Visual Basic 6.0, cuando se produce una excepción durante la depuración, se muestra un cuadro de diálogo modal con un
número de error. Al cerrar el cuadro de diálogo, el programa le llevará a la línea de código incorrecta en el Editor de código.
En Visual Basic 2005, las excepciones hacen que el Ayudante de excepciones no modal se muestre en el Editor de código.
El Ayudante de excepciones muestra el tipo de excepción y proporciona sugerencias de solución de problemas y acciones
correctoras. Para obtener más información, vea Ayudante de excepciones.
Métodos abreviados de teclado para la depuración
En Visual Studio, algunos métodos abreviados de teclado para depuración son distintos según los lenguajes; puede
personalizar la configuración y ajustarla a sus preferencias.
Cuando ejecuta por primera vez Visual Basic 2005, se le solicita que seleccione la configuración de desarrollo. Si elige la
configuración de Visual Basic, los métodos abreviados de teclado coincidirán con los utilizados en Visual Basic 6.0.
Nota
Si los métodos abreviados de teclado no corresponden con la configuración de Visual Basic 6.0, puede aplicar la configuraci
ón de Visual Basic del asistente para importar y exportar configuraciones, disponible en el menú Herramientas. Para
obtener más información, vea Cómo: Cambiar configuraciones seleccionadas.

Vea también
Conceptos
Depurar la aplicación de Visual Basic
Entorno de desarrollo integrado para usuarios de Visual Basic 6.0
Otros recursos
Ayuda para usuarios de Visual Basic 6.0
Conceptos de Visual Basic

Instalación e implementación para usuarios de Visual Basic 6.0


Los métodos para implementar aplicaciones y componentes en Visual Basic 2005 no se parecen a los de Visual Basic 6.0.
Diferencias conceptuales
En Visual Basic 6.0, el Asistente para implementación y empaquetado se utiliza para crear programas de instalación
(archivos .exe) con los que distribuir e instalar la aplicación.
Nota
Las versiones más recientes de Visual Studio 6.0 también incluyen el complemento Visual Studio Installer, que se puede utiliz
ar para crear archivos de Windows Installer (archivos .msi). Los proyectos creados con Visual Studio Installer no son compati
bles con Visual Basic 2005.

Visual Basic 2005 proporciona dos estrategias diferentes para implementar las aplicaciones basadas en Windows: publicar una
aplicación mediante las tecnologías de ClickOnce o implementarla mediante una instalación tradicional utilizando las
tecnologías de Windows Installer.
Con la implementación ClickOnce, publica la aplicación en una ubicación centralizada (normalmente un servidor Web o un
recurso compartido de archivos) y el usuario instala o ejecuta la aplicación desde esa ubicación. Las aplicaciones ClickOnce se
pueden actualizar automáticamente (cuando publica una actualización de la aplicación, los usuarios finales la descargan
automáticamente), lo que asegura que todos utilizan la misma versión. Para obtener más información, vea
Implementación ClickOnce.
La implementación de Windows Installer permite utilizar un proyecto de instalación e implementación para empaquetar la
aplicación en un archivo setup.exe y distribuirlo entre los usuarios, que lo ejecutan para instalar la aplicación. Para obtener más
información, vea Implementación de Windows Installer.
Nota
Visual Basic Express sólo admite la implementación ClickOnce.

Requisitos previos y dependencias


En Visual Basic 6.0, la información relativa a dependencias de archivo de una aplicación se almacena en archivos de
dependencia (.dep); todas las aplicaciones requieren el archivo del motor en tiempo de ejecución de Visual Basic como
requisito previo y muchas requieren otros requisitos previos, por ejemplo, bibliotecas de datos. Determinar la lista completa de
dependencias y requisitos previos requiere a menudo modificar manualmente el archivo Vb6dep.ini.
En Visual Basic 2005, las implementaciones ClickOnce y Windows Installer pueden determinar y empaquetar automáticamente
todas las dependencias de una aplicación. Requisitos previos como la biblioteca en tiempo de ejecución de .NET Framework
también se pueden instalar automáticamente con cualquier tipo de implementación y puede instalar junto con la aplicación
cualquier otro requisito previo. Para obtener más información, vea Requisitos previos de implementación (Visual Studio).
Notas de actualización
Cuando actualiza una aplicación de Visual Basic 6.0 a Visual Basic 2005, se pierde toda información de implementación.
Necesitará realizar una nueva implementación mediante ClickOnce o Windows Installer.
Vea también
Conceptos
Elegir una estrategia de implementación
Otros recursos
Implementar aplicaciones y componentes
Conceptos de Visual Basic

Globalización y localización para usuarios de Visual Basic 6.0


Visual Basic 6.0 y Visual Basic 2005 proporcionan compatibilidad con aplicaciones internacionales. Sin embargo, los conceptos
y técnicas para adaptar e internacionalizar una aplicación son diferentes.
Diferencias conceptuales
Adaptar Recursos
En Visual Basic 6.0, las versiones internacionales de una aplicación se crean colocando toda la información adaptable, como
cadenas, en un archivo de recursos independiente (.res) para cada idioma. En tiempo de ejecución, los recursos de
configuración regional específica se cargan desde el archivo de recursos llamando a las funciones LoadResString,
LoadResPicture y LoadResData.
En Visual Basic 2005, las versiones internacionales de una aplicación se crean modificando la propiedad Language de un
formulario en tiempo de diseño. Se crea automáticamente un archivo de recursos independiente (.resx) para cada
configuración regional seleccionada. No es preciso cargar explícitamente recursos desde el código; los recursos se cargan
automáticamente según la configuración regional del usuario. Para obtener más información, vea
Globalizar formularios Windows Forms.
Editar recursos
En Visual Basic 6.0, los archivos de recursos se pueden modificar mediante el complemento del Editor de recursos o los
editores de recursos de Visual C++.
En Visual Basic 2005, el Editor de recursos se integra en el IDE como una parte del Diseñador de proyectos. Para obtener
más información, vea Administrar los recursos de la aplicación.
Unicode
En Visual Basic 6.0, las cadenas se representan internamente como caracteres Unicode pero se muestran con páginas de
código de Windows. La función StrConv junto con las versiones binaria y Unicode de las funciones de manipulación de
cadenas (por ejemplo, ChrB y ChrW) son necesarias para realizar la conversión entre páginas de código ANSI y DBCS.
En Visual Basic 2005, los formularios están completamente habilitados para Unicode y ya no es necesaria la conversión entre
las páginas de código. Para obtener más información, vea Codificación y globalización de formularios Windows Forms.
Formato de fecha y moneda
En Visual Basic 6.0, el formato de fecha y moneda en el código requiere una consideración especial; los valores proporcionados
como texto se pueden interpretar incorrectamente cuando se convierten en fechas o moneda en aplicaciones adaptadas.
En Visual Basic 2005, se da formato a la fecha y la moneda de forma automática según la referencia cultural del usuario. Se
pueden reemplazar las configuraciones si es necesario mediante funciones en el espacio de nombres System.Globalization.
Para obtener más información, vea
Clases específicas de las referencias culturales para los formularios Windows Forms y Web Forms globales.
Vea también
Tareas
Cómo: Recuperar recursos localizados en Visual Basic
Conceptos
Introducción a aplicaciones internacionales basadas en .NET Framework
Implementación y localización
Otros recursos
Globalizar y localizar aplicaciones
Espacios de nombres de globalización y localización en Visual Studio
Conceptos de Visual Basic

Programación de la API de Windows para usuarios de Visual


Basic 6.0
No suele ser necesario el uso de las API de Windows en Visual Basic 2005 y las técnicas para llamarlas difieren ligeramente de
las utilizadas en Visual Basic 6.0.
Diferencias conceptuales
En Visual Basic 6.0, era necesario llamar a las API de Windows para proporcionar una funcionalidad avanzada que no se
proporcionaba.
Visual Basic 2005 incorpora .NET Framework; en la mayoría de los casos, ya no son necesarias las llamadas a la API de
Windows porque muchas de sus funciones se han incluido en .NET Framework.
Declarar las API de Windows
En Visual Basic 6.0, se utiliza la instrucción Declare para llamar a la API de Windows con el fin de obtener acceso a
funcionalidad que Visual Basic no proporciona.
En Visual Basic 2005, todavía puede utilizar la instrucción Declare para llamar a una API, pero hay diferencias que se deben
tener en cuenta. Por ejemplo, algunos tipos de datos de Visual Basic 2005 no tienen equivalente directo; es preciso calcular sus
referencias para pasarlos en una llamada a la API. Para obtener más información, vea Tutorial: Llamar a las API de Windows.
Notas de actualización
Cuando se actualiza una aplicación de Visual Basic 6.0 a Visual Basic 2005, se actualizan las API de Windows, no se reemplazan
por sus equivalentes de .NET Framework. Si se encuentran problemas con tipos de datos, se agregan advertencias de
actualización al código y al informe de actualización. En la mayoría de los casos, tendrá que reemplazar estas llamadas a la API
con sus equivalentes en .NET Framework.
Vea también
Referencia
Declare (Instrucción)
Conceptos
Cambios en los tipos de datos para usuarios de Visual Basic 6.0
Otros recursos
Ayuda para usuarios de Visual Basic 6.0
Conceptos de Visual Basic

Acceso al Registro para usuarios de Visual Basic 6.0


Las técnicas para tener acceso al Registro en Visual Basic 2005 difieren de las utilizadas en Visual Basic 6.0.
Diferencias conceptuales
En Visual Basic 6.0, se puede tener acceso al Registro mediante las funciones GetSetting o SaveSetting, que proporcionan
acceso a un número limitado de claves del Registro. Para tener acceso a otras claves del Registro, es preciso realizar llamadas a
la API de Windows.
Visual Basic 2005 proporciona el objeto My.Computer.Registry, que da acceso a las claves del Registro. Para obtener más
información, vea Leer y escribir en el Registro con Mi.
Además, se proporciona acceso completo al Registro mediante la clase Registry de .NET Framework.
Nota
En Visual Basic 2005, las funciones GetSetting y SaveSetting aún se admiten para el acceso limitado al Registro. Para obte
ner más información, vea Resumen del Registro.

Acceso e implementación del Registro


En Visual Basic 6.0, los archivos se pueden marcar para su registro durante la instalación mediante la edición manual del
archivo Setup.lst.
En Visual Basic 2005, los proyectos de instalación e implementación proporcionan total compatibilidad para trabajar con el
Registro durante la instalación. Para obtener más información, vea Implementación y el Registro.
Vea también
Tareas
Tutorial: Crear una clave del Registro y cambiar sus valores
Solución de problemas: Manipulación del Registro
Referencia
Registry Class
My.Computer.Registry (Objeto)
Conceptos
Tareas habituales del Registro
Leer y escribir en el Registro con Mi
Leer y escribir en el Registro mediante Microsoft.Win32 Namespace
Seguridad y Registro
Conceptos de Visual Basic

Equivalentes de constante para usuarios de Visual Basic 6.0


En Visual Basic 6.0 muchas constantes se definían en lenguaje Visual Basic. En Visual Basic 2005, la mayoría de las constantes
se reemplazan por enumeraciones de .NET Framework; en muchos casos, puede que también se utilicen las constantes de
Visual Basic 6.0.
Los vínculos siguientes llevan a temas que muestran las correspondencias entre las constantes de Visual Basic 6.0 y sus
equivalentes en Visual Basic 2005.
Nota
Si no aparece alguna constante, no existe equivalente. Por ejemplo, no se muestran las constantes DDE (Intercambio dinámic
o de datos) porque DDE no se admite en Visual Basic 2005.

En esta sección
Constantes de Align para usuarios de Visual Basic 6.0
Muestra constantes Align de Visual Basic 6.0 y sus equivalentes en Visual Basic 2005.
Constantes de alineación para usuarios de Visual Basic 6.0
Muestra constantes Alignment de Visual Basic 6.0 y sus equivalentes en Visual Basic 2005.
Constantes de organización para usuarios de Visual Basic 6.0
Muestra constantes Arrange de Visual Basic 6.0 y sus equivalentes en Visual Basic 2005.
Constantes de BorderStyle para usuarios de Visual Basic 6.0
Muestra constantes BorderStyle de Visual Basic 6.0 y sus equivalentes en Visual Basic 2005.
Constantes de CallType para usuarios de Visual Basic 6.0
Muestra constantes CallType de Visual Basic 6.0 y sus equivalentes en Visual Basic 2005.
Constantes de CheckBox para usuarios de Visual Basic 6.0
Muestra constantes CheckBox de Visual Basic 6.0 y sus equivalentes en Visual Basic 2005.
Constantes de color para usuarios de Visual Basic 6.0
Muestra constantes Color de Visual Basic 6.0 y sus equivalentes en Visual Basic 2005.
Constantes de CompareMethod para usuarios de Visual Basic 6.0
Muestra constantes CompareMethod de Visual Basic 6.0 y sus equivalentes en Visual Basic 2005.
Constantes de formato de fecha para usuarios de Visual Basic 6.0
Muestra constantes DateFormat de Visual Basic 6.0 y sus equivalentes en Visual Basic 2005.
Constantes de DayOfWeek para usuarios de Visual Basic 6.0
Muestra constantes DayOfWeek de Visual Basic 6.0 y sus equivalentes en Visual Basic 2005.
Constantes de atributo de archivo para usuarios de Visual Basic 6.0
Muestra constantes FileAttribute de Visual Basic 6.0 y sus equivalentes en Visual Basic 2005.
Constantes de IMEMode para usuarios de Visual Basic 6.0
Muestra constantes IMEMode de Visual Basic 6.0 y sus equivalentes en Visual Basic 2005.
Constantes de código de clave para usuarios de Visual Basic 6.0
Muestra constantes Key Code de Visual Basic 6.0 y sus equivalentes en Visual Basic 2005.
Constantes de puntero de mouse (ratón) para usuarios de Visual Basic 6.0
Muestra constantes Mouse Pointer de Visual Basic 6.0 y sus equivalentes en Visual Basic 2005.
Constantes de resultado de MsgBox para usuarios de Visual Basic 6.0
Muestra constantes MsgBox Result de Visual Basic 6.0 y sus equivalentes en Visual Basic 2005.
Constantes de estilo de MsgBox para usuarios de Visual Basic 6.0
Muestra constantes MsgBox Style de Visual Basic 6.0 y sus equivalentes en Visual Basic 2005.
Constantes de MultiSelect para usuarios de Visual Basic 6.0
Muestra constantes MultiSelect de Visual Basic 6.0 y sus equivalentes en Visual Basic 2005.
Constantes de OLEDropEffect para usuarios de Visual Basic 6.0
Muestra constantes OLEDropEffect de Visual Basic 6.0 y sus equivalentes en Visual Basic 2005.
Constantes de ScrollBar para usuarios de Visual Basic 6.0
Muestra constantes ScrollBar de Visual Basic 6.0 y sus equivalentes en Visual Basic 2005.
Constantes de StartUpPosition para usuarios de Visual Basic 6.0
Muestra constantes StartUpPosition de Visual Basic 6.0 y sus equivalentes en Visual Basic 2005.
Constantes de StrConv para usuarios de Visual Basic 6.0
Muestra constantes StrConv de Visual Basic 6.0 y sus equivalentes en Visual Basic 2005.
Constantes de estilo para usuarios de Visual Basic 6.0
Muestra constantes Style de Visual Basic 6.0 y sus equivalentes en Visual Basic 2005.
Constantes de color de sistema para usuarios de Visual Basic 6.0
Muestra constantes System Color de Visual Basic 6.0 y sus equivalentes en Visual Basic 2005.
Constantes de TriState para usuarios de Visual Basic 6.0
Muestra constantes TriState de Visual Basic 6.0 y sus equivalentes en Visual Basic 2005.
Constantes de tipo Variant para usuarios de Visual Basic 6.0
Muestra constantes Variant Type de Visual Basic 6.0 y sus equivalentes en Visual Basic 2005.
Constantes de VarType para usuarios de Visual Basic 6.0
Muestra constantes VarType de Visual Basic 6.0 y sus equivalentes en Visual Basic 2005.
Constantes de VBA para usuarios de Visual Basic 6.0
Muestra constantes de Visual Basic para aplicaciones de Visual Basic 6.0 y sus equivalentes en Visual Basic 2005.
Constantes de WeekOfYear para usuarios de Visual Basic 6.0
Muestra constantes WeekOfYear de Visual Basic 6.0 y sus equivalentes en Visual Basic 2005.
Constantes de WindowState para usuarios de Visual Basic 6.0
Muestra constantes WindowState de Visual Basic 6.0 y sus equivalentes en Visual Basic 2005.
Constantes de WindowStyle para usuarios de Visual Basic 6.0
Muestra constantes Window Style de Visual Basic 6.0 y sus equivalentes en Visual Basic 2005.
Secciones relacionadas
Constantes y enumeraciones en Visual Basic
Presenta las enumeraciones de Visual Basic 2005.
Controles de formularios Windows Forms para usuarios de Visual Basic 6.0
Proporciona vínculos a temas que describen las diferencias entre Visual Basic 6.0 y los controles y objetos de los formularios
Windows Forms.
Cambios en el lenguaje para usuarios de Visual Basic 6.0
Describe los cambios en el lenguaje Visual Basic.
Referencia de Visual Basic

Constantes de Align para usuarios de Visual Basic 6.0


En la tabla siguiente se muestran los valores y las constantes de Align de Visual Basic 6.0 y sus equivalentes de Visual Basic
2005.
Visual Basic 6.0 Equivalente de Visual Basic 2005
VbAlignNone (0) None

VbAlignTop (1) Top

VbAlignBottom (2) Bottom

VbAlignLeft (3) Left

VbAlignRight (4) Right


Vea también
Conceptos
Control PictureBox para usuarios de Visual Basic 6.0
Otros recursos
Equivalentes de constante para usuarios de Visual Basic 6.0
Constantes y enumeraciones en Visual Basic
Referencia de Visual Basic

Constantes de alineación para usuarios de Visual Basic 6.0


En las tablas siguientes se muestran los valores y las constantes de Alignment de Visual Basic 6.0 y sus equivalentes de Visual
Basic 2005.
Constantes de alineación CheckBox y OptionButton
Visual Basic 6.0 Visual Basic 2005
VbLeftJustify (0) MiddleLeft

VbRightJustify (1) MiddleRight


Constantes de alineación TextBox
Visual Basic 6.0 Visual Basic 2005
VbLeftJustify (0) Left

VbRightJustify (1) Right

VbCenter (2) Center


Constantes de alineación Label
Visual Basic 6.0 Visual Basic 2005
VbLeftJustify (0) TopLeft

VbRightJustify (1) TopRight

VbCenter (2) TopCenter


Vea también
Conceptos
Control CheckBox para usuarios de Visual Basic 6.0
Control OptionButton para usuarios de Visual Basic 6.0
Control TextBox para usuarios de Visual Basic 6.0
Control Label para usuarios de Visual Basic 6.0
Otros recursos
Equivalentes de constante para usuarios de Visual Basic 6.0
Constantes y enumeraciones en Visual Basic
Referencia de Visual Basic

Constantes de organización para usuarios de Visual Basic 6.0


En la tabla siguiente se muestran los valores y las constantes de Arrange de Visual Basic 6.0 y sus equivalentes de Visual Basic
2005.
Visual Basic 6.0 Equivalente de Visual Basic 2005
VbCascade (0) Cascade

VbTileHorizontal (1) TileHorizontal

VbTileVertical (2) TileVertical

VbArrangeIcons (3) ArrangeIcons


Vea también
Conceptos
Objeto MDIForm para usuarios de Visual Basic 6.0
Otros recursos
Equivalentes de constante para usuarios de Visual Basic 6.0
Constantes y enumeraciones en Visual Basic
Referencia de Visual Basic

Constantes de BorderStyle para usuarios de Visual Basic 6.0


En la tabla siguiente se muestran los valores y las constantes de BorderStyle de Visual Basic 6.0 y sus equivalentes de Visual
Basic 2005.
Visual Basic 6.0 Equivalente de Visual Basic 2005
VbBSNone (0) None

VbFixedSingle (1) FixedSingle

VbSizable (2) Sizable

VbFixedDialog (3) FixedDialog

VbFixedToolWindow (4) FixedToolWindow

VbSizableToolWindow (5) SizableToolWindow


Vea también
Conceptos
Objeto Form para usuarios de Visual Basic 6.0
Otros recursos
Equivalentes de constante para usuarios de Visual Basic 6.0
Constantes y enumeraciones en Visual Basic
Referencia de Visual Basic

Constantes de CallType para usuarios de Visual Basic 6.0


En la tabla siguiente se muestran las constantes de CallType de Visual Basic 6.0 y sus equivalentes de Visual Basic 2005.
Nota
Por razones de compatibilidad con versiones anteriores, las constantes CallType de Visual Basic 6.0 se pueden seguir usand
o en el código de Visual Basic 2005. Para obtener más información, vea CallType (Enumeración).

Visual Basic 6.0 Equivalente de Visual Basic 2005


vbMethod CallType.Method

vbGet CallType.Get

vbSet CallType.Set

vbLet CallType.Let
Vea también
Referencia
CallByName (Función)
Otros recursos
Equivalentes de constante para usuarios de Visual Basic 6.0
Constantes y enumeraciones en Visual Basic
Referencia de Visual Basic

Constantes de CheckBox para usuarios de Visual Basic 6.0


En la tabla siguiente se muestran los valores y las constantes de CheckBox de Visual Basic 6.0 y sus equivalentes de Visual
Basic 2005.
Visual Basic 6.0 Equivalente de Visual Basic 2005
vbUnchecked (0) Unchecked

vbChecked (1) Checked

vbGrayed (2) Indeterminate


Vea también
Conceptos
Control CheckBox para usuarios de Visual Basic 6.0
Otros recursos
Equivalentes de constante para usuarios de Visual Basic 6.0
Constantes y enumeraciones en Visual Basic
Referencia de Visual Basic

Constantes de color para usuarios de Visual Basic 6.0


En la tabla siguiente se muestran las constantes de Color de Visual Basic 6.0 y sus equivalentes de Visual Basic 2005.
Visual Basic 6.0 Equivalente de Visual Basic 2005
vbBlack Black

vbRed Red

vbGreen Lime

vbYellow Yellow

vbBlue Blue

vbMagenta Magenta

vbCyan Cyan

vbWhite White
Vea también
Referencia
Control del color para usuarios de Visual Basic 6.0
Constantes de color de sistema para usuarios de Visual Basic 6.0
Conceptos
Comportamiento del color para los usuarios de Visual Basic 6.0
Otros recursos
Equivalentes de constante para usuarios de Visual Basic 6.0
Constantes y enumeraciones (Visual Basic)
Referencia de Visual Basic

Constantes de CompareMethod para usuarios de Visual Basic


6.0
En la tabla siguiente se muestran las constantes de Compare de Visual Basic 6.0 y sus equivalentes de Visual Basic 2005.
Nota
Para la compatibilidad con versiones anteriores, las constantes de Visual Basic 6.0 Compare también se pueden utilizar en Vi
sual Basic 2005. Para obtener más información, vea CompareMethod (Enumeración).

Visual Basic 6.0 Equivalente de Visual Basic 2005


vbBinaryCompare CompareMethod.Binary

vbTextCompare CompareMethod.Text

vbDatabaseCompare Ningún equivalente


Vea también
Referencia
CompareMethod (Enumeración)
Otros recursos
Equivalentes de constante para usuarios de Visual Basic 6.0
Constantes y enumeraciones en Visual Basic
Referencia de Visual Basic

Constantes de formato de fecha para usuarios de Visual Basic


6.0
En la tabla siguiente se muestran las constantes de Date Format de Visual Basic 6.0 y sus equivalentes de Visual Basic 2005.
Nota
Por razones de compatibilidad con versiones anteriores, las constantes Date Format de Visual Basic 6.0 se pueden seguir us
ando en el código de Visual Basic 2005. Para obtener más información, vea DateFormat (Enumeración).

Visual Basic 6.0 Equivalente de Visual Basic 2005


vbGeneralDate DateFormat.GeneralDate

vbLongDate DateFormat.LongDate

vbShortDate DateFormat.ShortDate

vbLongTime DateFormat.LongTime

vbShortTime DateFormat.ShortTime
Vea también
Referencia
DateFormat (Enumeración)
Otros recursos
Equivalentes de constante para usuarios de Visual Basic 6.0
Constantes y enumeraciones en Visual Basic
Referencia de Visual Basic

Constantes de DayOfWeek para usuarios de Visual Basic 6.0


En la tabla siguiente se muestran las constantes de DayOfWeek de Visual Basic 6.0 y sus equivalentes de Visual Basic 2005.
Nota
Para la compatibilidad con versiones anteriores, las constantes de Visual Basic 6.0 DayOfWeek se pueden utilizar en código
de Visual Basic 2005. Para obtener más información, vea FirstDayOfWeek Enumeration.

Visual Basic 6.0 Equivalente de Visual Basic 2005


VbUseSystemDayOfWeek FirstDayOfWeek.System

vbSunday FirstDayOfWeek.Sunday

vbMonday FirstDayOfWeek.Monday

vbTuesday FirstDayOfWeek.Tuesday

vbWednesday FirstDayOfWeek.Wednesday

vbThursday FirstDayOfWeek.Thursday

vbFriday FirstDayOfWeek.Friday

vbSaturday FirstDayOfWeek.Saturday
Vea también
Referencia
FirstDayOfWeek Enumeration
Otros recursos
Equivalentes de constante para usuarios de Visual Basic 6.0
Constantes y enumeraciones en Visual Basic
Referencia de Visual Basic

Constantes de atributo de archivo para usuarios de Visual Basic


6.0
En la tabla siguiente se muestran las constantes de File Attribute de Visual Basic 6.0 y sus equivalentes de Visual Basic 2005.
Nota
Por razones de compatibilidad con versiones anteriores, las constantes File Attribute de Visual Basic 6.0 se pueden seguir u
sando en el código de Visual Basic 2005. Para obtener más información, vea FileAttribute (Enumeración).

Visual Basic 6.0 Equivalente de Visual Basic 2005


vbNormal FileAttribute.Normal

vbReadOnly FileAttribute.ReadOnly

vbHidden FileAttribute.Hidden

vbSystem FileAttribute.System

vbVolume FileAttribute.Volume

vbDirectory FileAttribute.Directory

vbArchive FileAttribute.Archive

vbAlias Ningún equivalente


Vea también
Referencia
FileAttribute (Enumeración)
Otros recursos
Equivalentes de constante para usuarios de Visual Basic 6.0
Constantes y enumeraciones en Visual Basic
Referencia de Visual Basic

Constantes de IMEMode para usuarios de Visual Basic 6.0


En la tabla siguiente se muestran los valores y las constantes de IMEMode de Visual Basic 6.0 y sus equivalentes de Visual
Basic 2005.
Visual Basic 6.0 Equivalente de Visual Basic 2005
vbIMEAlphaDbl (7) AlphaFull

vbIMEAlphaSng (8) Alpha

vbIMEDisable (3) Disable

vbIMEHiragana (4) Hiragana

vbIMEKatakanaDbl (5) Katakana

vbIMEKatakanaSng (6) KatakanaHalf

vbIMEModeAlpha (8) Alpha

vbIMEModeAlphaFull (7) AlphaFull

vbIMEModeDisable (3) Disable

vbIMEModeHangul (10) Hangul

vbIMEModeHangulFull (9) HangulFull

vbIMEModeHiragana (4) Hiragana

vbIMEModeKatakana (5) Katakana

vbIMEModeKatakanaHalf (6) KatakanaHalf

vbIMEModeNoControl (0) NoControl

vbIMEModeOff (2) Off

vbIMEModeOn (1) On

vbIMENoOp (0) NoControl

vbIMEOff (2) Off

vbIMEOn (1) On
Vea también
Conceptos
Objeto Form para usuarios de Visual Basic 6.0
Otros recursos
Equivalentes de constante para usuarios de Visual Basic 6.0
Constantes y enumeraciones en Visual Basic
Referencia de Visual Basic

Constantes de código de clave para usuarios de Visual Basic 6.0


En las tablas siguientes se muestran los valores y las constantes de Key Code de Visual Basic 6.0 y sus equivalentes de Visual
Basic 2005.
Constantes de código de clave
Visual Basic 6.0 Equivalente de Visual Basic 2005
vbKeyLButton (1) LButton

vbKeyRButton (2) RButton

vbKeyCancel (3) Cancel

vbKeyMButton (4) MButton

vbKeyBack (8) Back

vbKeyTab (9) Tab

vbKeyClear (12) Clear

vbKeyReturn (13) Return

vbKeyShift (16) ShiftKey

vbKeyControl (17) ControlKey

vbKeyMenu (18) Menu

vbKeyPause (19) Pause

vbKeyCapital (20) Capital

vbKeyEscape (27) Escape

vbKeySpace (32) Space

vbKeyPageUp (33) PageUp

vbKeyPageDown (34) PageDown

vbKeyEnd (35) End

vbKeyHome (36) Home

vbKeyLeft (37) Left

vbKeyUp (38) Up

vbKeyRight (39) Right

vbKeyDown (40) Down


vbKeySelect (41) Select

vbKeyPrint (42) Print

vbKeyExecute (43) Execute

vbKeySnapshot (44) Snapshot

vbKeyInsert (45) Insert

vbKeyDelete (46) Delete

vbKeyHelp (47) Help

vbKeyNumlock (144) Numlock

vbKeyScrollLock (145) Scroll


Constantes de código de teclas alfabéticas
Visual Basic 6.0 Equivalente de Visual Basic 2005
VbKeyA (65) A

VbKeyB (66) B

VbKeyC (67) C

VbKeyD (68) D

VbKeyE (69) E

VbKeyF (70) F

VbKeyG (71) G

VbKeyH (72) H

VbKeyI (73) I

VbKeyJ (74) J

VbKeyK (75) K

VbKeyL( 76) L

vbKeyM (77) M

VbKeyN (78) N

VbKeyO (79) O

VbKeyP( 80) P
VbKeyQ (81) Q

VbKeyR (82) R

VbKeyS (83) S

VbKeyT (84) T

VbKeyU (85) U

VbKeyV (86) V

VbKeyW (87) W

VbKeyX (88) X

VbKeyY (89) Y

VbKeyZ (90) Z
Constantes de teclas numéricas
Visual Basic 6.0 Equivalente de Visual Basic 2005
vbKey0 (48) D0

vbKey1 (49) D1

vbKey2 (50) D2

vbKey3 (51) D3

vbKey4 (52) D4

vbKey5 (53) D5

vbKey6 (54) D6

vbKey7 (55) D7

vbKey8 (56) D8

vbKey9 (57) D9
Constantes de teclas del teclado numérico
Visual Basic 6.0 Equivalente de Visual Basic 2005
vbKeyNumpad0 (96) NumPad0

vbKeyNumpad1 (97) NumPad1

vbKeyNumpad2 (98) NumPad2

vbKeyNumpad3 (99) NumPad3

vbKeyNumpad4 (100) NumPad4


vbKeyNumpad5 (101) NumPad5

vbKeyNumpad6 (102) NumPad6

vbKeyNumpad7 (103) NumPad7

vbKeyNumpad8 (104) NumPad8

vbKeyNumpad9 (105) NumPad9

VbKeyMultiply (106) Multiply

VbKeyAdd (107) Add

VbKeySeparator (108) Separator

VbKeySubtract (109) Subtract

VbKeyDecimal (110) Decimal

VbKeyDivide (111) Divide


Constantes de teclas de función
Visual Basic 6.0 Equivalente de Visual Basic 2005
vbKeyF1 (112) F1

vbKeyF2 (113) F2

vbKeyF3 (114) F3

vbKeyF4 (115) F4

vbKeyF5 (116) F5

vbKeyF6 (117) F6

vbKeyF7 (118) F7

vbKeyF8 (119) F8

vbKeyF9 (120) F9

vbKeyF10 (121) F10

vbKeyF11 (122) F11

vbKeyF12 (123) F12

vbKeyF13 (124) F13

vbKeyF14 (125) F14

vbKeyF15 (126) F15


vbKeyF16 (127) F16
Vea también
Referencia
Keys Enumeration
Otros recursos
Equivalentes de constante para usuarios de Visual Basic 6.0
Constantes y enumeraciones en Visual Basic
Referencia de Visual Basic

Constantes de puntero de mouse (ratón) para usuarios de


Visual Basic 6.0
En la tabla siguiente se muestran los valores y las constantes de Mouse Pointer de Visual Basic 6.0 y sus equivalentes de
Visual Basic 2005.
Visual Basic 6.0 Equivalente de Visual Basic 2005
VbDefault (0) Default

VbArrow (1) Arrow

VbCrosshair (2) Cross

VbIbeam (3) IBeam

VbIconPointer (4) Obsoleta. Se reemplaza por Default

VbSizePointer (5) SizeAll

VbSizeNESW (6) SizeNESW

VbSizeNS (7) SizeNS

VbSizeNWSE (8) SizeNWSE

VbSizeWE (9) SizeWE

VbUpArrow (10) UpArrow

VbHourglass (11) WaitCursor

VbNoDrop (12) No

VbArrowHourglass (13) AppStarting

VbArrowQuestion (14) Help

VbSizeAll (15) SizeAll

VbCustom (99) No hay equivalente. Para obtener detalles, vea


No se puede personalizar la propiedad MousePointer No se puede personalizar la propiedad MousePointer.
Vea también
Conceptos
MousePointer para usuarios de Visual Basic 6.0
Otros recursos
Equivalentes de constante para usuarios de Visual Basic 6.0
Constantes y enumeraciones en Visual Basic
Referencia de Visual Basic

Constantes de resultado de MsgBox para usuarios de Visual


Basic 6.0
En la tabla siguiente se muestran las constantes de MsgBox Result de Visual Basic 6.0 y sus equivalentes de Visual Basic 2005.
Nota
Por razones de compatibilidad con versiones anteriores, las constantes MsgBox Result de Visual Basic 6.0 se pueden seguir
usando en el código de Visual Basic 2005. Para obtener más información, vea MsgBoxResult (Enumeración).

Visual Basic 6.0 Equivalente de Visual Basic 2005


vbOK MsgBoxResult.OK

vbCancel MsgBoxResult.Cancel

vbAbort MsgBoxResult.Abort

vbRetry MsgBoxResult.Retry

vbIgnore MsgBoxResult.Ignore

vbYes MsgBoxResult.Yes

vbNo MsgBoxResult.No
Vea también
Referencia
MsgBoxResult (Enumeración)
Otros recursos
Equivalentes de constante para usuarios de Visual Basic 6.0
Constantes y enumeraciones en Visual Basic
Referencia de Visual Basic

Constantes de estilo de MsgBox para usuarios de Visual Basic


6.0
En la tabla siguiente se muestran las constantes de MsgBox Style de Visual Basic 6.0 y sus equivalentes de Visual Basic 2005.
Nota
Por razones de compatibilidad con versiones anteriores, las constantes MsgBox Style de Visual Basic 6.0 se pueden seguir u
sando en el código de Visual Basic 2005. Para obtener más información, vea MsgBoxStyle (Enumeración).

Visual Basic 6.0 Equivalente de Visual Basic 2005


vbOKOnly MsgBoxStyle.OKOnly

vbOKCancel MsgBoxStyle.OKCancel

vbAbortRetryIgnore MsgBoxStyle.AbortRetryIgnore

vbYesNoCancel MsgBoxStyle.YesNoCancel

vbYesNo MsgBoxStyle.YesNo

vbRetryCancel MsgBoxStyle.RetryCancel

vbCritical MsgBoxStyle.Critical

vbQuestion MsgBoxStyle.Question

vbExclamation MsgBoxStyle.Exclamation

vbInformation MsgBoxStyle.Information

vbDefaultButton1 MsgBoxStyle.DefaultButton1

vbDefaultButton2 MsgBoxStyle.DefaultButton2

vbDefaultButton3 MsgBoxStyle.DefaultButton3

vbDefaultButton4 Ningún equivalente

vbApplicationModal MsgBoxStyle.ApplicationModal

vbSystemModal MsgBoxStyle.SystemModal

vbMsgBoxHelpButton MsgBoxStyle.MsgBoxHelp

vbMsgBoxRight MsgBoxStyle.MsgBoxRight

vbMsgBoxRtlReading MsgBoxStyle.MsgBoxRtlReading

vbMsgBoxSetForeground MsgBoxStyle.MsgBoxSetForeground
Vea también
Referencia
MsgBoxStyle (Enumeración)
Otros recursos
Equivalentes de constante para usuarios de Visual Basic 6.0
Constantes y enumeraciones en Visual Basic
Referencia de Visual Basic

Constantes de MultiSelect para usuarios de Visual Basic 6.0


En la tabla siguiente se muestran los valores y las constantes de MultiSelect de Visual Basic 6.0 y sus equivalentes de Visual
Basic 2005.
Visual Basic 6.0 Equivalente de Visual Basic 2005
vbMultiSelectNone (0) One

vbMultiSelectSimple (1) MultiSimple

vbvbMultiSelectExtended (2) MultiExtended


Vea también
Conceptos
Control ListBox para usuarios de Visual Basic 6.0
Otros recursos
Equivalentes de constante para usuarios de Visual Basic 6.0
Constantes y enumeraciones en Visual Basic
Referencia de Visual Basic

Constantes de OLEDropEffect para usuarios de Visual Basic 6.0


En la tabla siguiente se muestran los valores y las constantes de OLEDropEffect de Visual Basic 6.0 y sus equivalentes de
Visual Basic 2005.
Visual Basic 6.0 Equivalente de Visual Basic 2005
VbDropEffectNone (0) None

VbDropEffectCopy (1) Copy

VbDropEffectMove (2) Move

VbDropEffectScroll (&H80000000) Scroll


Vea también
Conceptos
Arrastrar y colocar para usuarios de Visual Basic 6.0
Otros recursos
Equivalentes de constante para usuarios de Visual Basic 6.0
Constantes y enumeraciones en Visual Basic
Referencia de Visual Basic

Constantes de ScrollBar para usuarios de Visual Basic 6.0


En la tabla siguiente se muestran los valores y las constantes de ScrollBar de Visual Basic 6.0 y sus equivalentes de Visual
Basic 2005.
Visual Basic 6.0 Equivalente de Visual Basic 2005
vbSBNone (0) None

vbHorizontal (1) Horizontal

vbVertical (2) Vertical

vbBoth (3) Both


Vea también
Conceptos
Objeto Form para usuarios de Visual Basic 6.0
Control PictureBox para usuarios de Visual Basic 6.0
Otros recursos
Equivalentes de constante para usuarios de Visual Basic 6.0
Constantes y enumeraciones en Visual Basic
Referencia de Visual Basic

Constantes de StartUpPosition para usuarios de Visual Basic 6.0


En la tabla siguiente se muestran los valores y las constantes de StartUpPosition de Visual Basic 6.0 y sus equivalentes de
Visual Basic 2005.
Visual Basic 6.0 Equivalente de Visual Basic 2005
vbStartUpManual (0) Manual

vbStartUpOwner (1) CenterParent

vbStartUpScreen (2) CenterScreen

vbStartUpWindowsDefault (3) WindowsDefaultLocation


Vea también
Conceptos
Objeto Form para usuarios de Visual Basic 6.0
Otros recursos
Equivalentes de constante para usuarios de Visual Basic 6.0
Constantes y enumeraciones en Visual Basic
Referencia de Visual Basic

Constantes de StrConv para usuarios de Visual Basic 6.0


En la tabla siguiente se muestran las constantes de StrConv de Visual Basic 6.0 y sus equivalentes de Visual Basic 2005.
Nota
Por razones de compatibilidad con versiones anteriores, las constantes StrConv de Visual Basic 6.0 se pueden seguir usando
en el código de Visual Basic 2005. Para obtener más información, vea VbStrConv (Enumeración).

Visual Basic 6.0 Equivalente de Visual Basic 2005


vbUpperCase VbStrConv.UpperCase

vbLowerCase VbStrConv.LowerCase

vbProperCase VbStrConv.ProperCase

vbWide VbStrConv.Wide

vbNarrow VbStrConv.Narrow

vbKatakana VbStrConv.Katakana

vbHiragana VbStrConv.Hiragana

vbUnicode No hay equivalente. Se puede conseguir la misma funcionalidad utilizando el método Convert.

vbFromUnicode Ningún equivalente


Vea también
Referencia
VbStrConv (Enumeración)
Otros recursos
Equivalentes de constante para usuarios de Visual Basic 6.0
Constantes y enumeraciones en Visual Basic
Referencia de Visual Basic

Constantes de estilo para usuarios de Visual Basic 6.0


En las tablas siguientes se muestran los valores y las constantes de Style de Visual Basic 6.0 y sus equivalentes de Visual Basic
2005.
Constantes de estilo de ComboBox
Visual Basic 6.0 Equivalente de Visual Basic 2005
vbComboDropdown (0) DropDown

vbComboSimple (1) Simple

vbComboDropdownList (2) DropDownList


Constantes de estilo de CheckBox y OptionButton
Visual Basic 6.0 Equivalente de Visual Basic 2005
VbButtonStandard (0) Normal

VbButtonGraphical (1) Button


Nota
En Visual Basic 6.0, las constantes Style también se definen para los controles CommandButton y ListBox. No hay ningún
equivalente en Visual Basic 2005. Para obtener más información, consulte
Cómo: Emular un control Tri-state de Visual Basic 6.0 en una aplicación actualizada o
Control ListBox para usuarios de Visual Basic 6.0.

Vea también
Conceptos
Control ComboBox para usuarios de Visual Basic 6.0
Otros recursos
Equivalentes de constante para usuarios de Visual Basic 6.0
Constantes y enumeraciones en Visual Basic
Referencia de Visual Basic

Constantes de color de sistema para usuarios de Visual Basic 6.0


En la tabla siguiente se muestran las constantes de System Color de Visual Basic 6.0 y sus equivalentes de Visual Basic 2005.
Visual Basic 6.0 Equivalente de Visual Basic 2005
vb3DDKShadow ControlDarkDark

vb3DFace Control

vb3DHighlight ControlLightLight

vb3DLight ControlLight

vb3DShadow ControlDark

vbActiveBorder ActiveBorder

vbActiveTitleBar ActiveCaption

vbActiveTitleBarText ActiveCaptionText

vbApplicationWorkspace AppWorkspace

vbButtonFace Control

vbButtonShadow ControlDark

vbButtonText ControlText

vbDesktop Desktop

vbGrayText GrayText

vbHighlight Highlight

vbHighlightText HighlightText

vbInactiveBorder InactiveBorder

vbInactiveCaptionText InactiveCaptionText

vbInactiveTitleBar InactiveCaption

vbInactiveTitleBarText InactiveCaptionText

vbInfoBackground Info

vbInfoText InfoText

vbMenuBar Menu

vbMenuText MenuText
vbScrollBars Scrollbar

vbTitleBarText ActiveCaptionText

vbWindowBackground Window

vbWindowFrame WindowFrame

vbWindowText WindowText
Vea también
Referencia
Control del color para usuarios de Visual Basic 6.0
Constantes de color para usuarios de Visual Basic 6.0
Conceptos
Comportamiento del color para los usuarios de Visual Basic 6.0
Otros recursos
Equivalentes de constante para usuarios de Visual Basic 6.0
Constantes y enumeraciones en Visual Basic
Referencia de Visual Basic

Constantes de TriState para usuarios de Visual Basic 6.0


En la tabla siguiente se muestran las constantes de TriState de Visual Basic 6.0 y sus equivalentes de Visual Basic 2005.
Nota
Para la compatibilidad con versiones anteriores, las constantes de Visual Basic 6.0 TriState todavía se pueden utilizar en Visu
al Basic 2005. Para obtener más información, vea TriState (Enumeración).

Visual Basic 6.0 Equivalente de Visual Basic 2005


vbTrue TriState.True

vbFalse TriState.False

vbUseDefault TriState.UseDefault
Vea también
Referencia
TriState (Enumeración)
Otros recursos
Equivalentes de constante para usuarios de Visual Basic 6.0
Constantes y enumeraciones en Visual Basic
Referencia de Visual Basic

Constantes de tipo Variant para usuarios de Visual Basic 6.0


En la tabla siguiente se muestran las constantes de VarType de Visual Basic 6.0 y sus equivalentes de Visual Basic 2005.
Visual Basic 6.0 Equivalente de Visual Basic 2005
vbVEmpty VariantType.Empty

vbVNull VariantType.Null

vbVInteger VariantType.Short

vbVLong VariantType.Integer

vbVSingle VariantType.Single

vbVDouble VariantType.Double

vbVCurrency VariantType.Decimal

vbVDate VariantType.Date

vbVString VariantType.String
Vea también
Referencia
VariantType (Enumeración)
Otros recursos
Equivalentes de constante para usuarios de Visual Basic 6.0
Constantes y enumeraciones (Visual Basic)
Referencia de Visual Basic

Constantes de VarType para usuarios de Visual Basic 6.0


En la tabla siguiente se muestran las constantes de VarType de Visual Basic 6.0 y sus equivalentes de Visual Basic 2005 en
VariantType (Enumeración).
Nota
Para la compatibilidad con versiones anteriores, las constantes de Visual Basic 6.0 VarType todavía se pueden utilizar en Vis
ual Basic 2005. Para obtener más información, vea VariantType (Enumeración).

Visual Basic 6.0 Equivalente de Visual Basic 2005


vbEmpty VariantType.Empty

vbNull VariantType.Null

vbInteger VariantType.Short

vbLong VariantType.Integer

vbSingle VariantType.Single

vbDouble VariantType.Double

vbCurrency VariantType.Decimal

vbDate VariantType.Date

vbString VariantType.String

vbObject VariantType.Object

vbError VariantType.Error

vbBoolean VariantType.Boolean

vbVariant VariantType.Variant

vbDataObject VariantType.DataObject

vbDecimal VariantType.Decimal

vbByte VariantType.Byte

vbUserDefinedType VariantType.UserDefinedType

vbArray VariantType.Array
Vea también
Referencia
VariantType (Enumeración)
Otros recursos
Equivalentes de constante para usuarios de Visual Basic 6.0
Constantes y enumeraciones en Visual Basic
Referencia de Visual Basic

Constantes de VBA para usuarios de Visual Basic 6.0


La tabla siguiente muestra las constantes de Microsoft Visual Basic para Aplicaciones (VBA) para Visual Basic 6.0 y sus
equivalentes en Visual Basic 2005.
Nota
Para la compatibilidad con versiones anteriores, las constantes de Visual Basic 6.0 VBA también se pueden utilizar en Visual B
asic 2005.

Visual Basic 6.0 Equivalente de Visual Basic 2005


vbBack ControlChars.Back

vbCr ControlChars.Cr

vbCrLf ControlChars.CrLf

vbFormFeed ControlChars.FormFeed

vbLf ControlChars.Lf

vbNewLine ControlChars.NewLine

vbNullChar ControlChars.NullChar

vbNullString Palabra clave Nothing

vbObjectError vbObjectError

vbTab ControlChars.Tab
Vea también
Otros recursos
Equivalentes de constante para usuarios de Visual Basic 6.0
Constantes y enumeraciones en Visual Basic
Referencia de Visual Basic

Constantes de WeekOfYear para usuarios de Visual Basic 6.0


En la tabla siguiente se muestran las constantes de WeekOfYear de Visual Basic 6.0 y sus equivalentes de Visual Basic 2005.
Nota
Por razones de compatibilidad con versiones anteriores, las constantes WeekOfYear de Visual Basic 6.0 se pueden seguir us
ando en Visual Basic 2005. Para obtener más información, vea FirstWeekOfYear (Enumeración).

Visual Basic 6.0 Equivalente de Visual Basic 2005


vbUseSystem FirstWeekOfYear.System

VbFirstJan1 FirstWeekOfYear.Jan1

vbFirstFourDays FirstWeekOfYear.FirstFourDays

vbFirstFullWeek FirstWeekOfYear.FirstFullWeek
Vea también
Referencia
FirstWeekOfYear (Enumeración)
Otros recursos
Equivalentes de constante para usuarios de Visual Basic 6.0
Constantes y enumeraciones en Visual Basic
Referencia de Visual Basic

Constantes de WindowState para usuarios de Visual Basic 6.0


En la tabla siguiente se muestran los valores y las constantes de WindowState de Visual Basic 6.0 y sus equivalentes de Visual
Basic 2005.
Visual Basic 6.0 Equivalente de Visual Basic 2005
vbNormal (0) Normal

vbMinimized (1) Minimized

vbMaximized (2) Maximized


Vea también
Conceptos
Objeto Form para usuarios de Visual Basic 6.0
Otros recursos
Equivalentes de constante para usuarios de Visual Basic 6.0
Constantes y enumeraciones en Visual Basic
Referencia de Visual Basic

Constantes de WindowStyle para usuarios de Visual Basic 6.0


En la tabla siguiente se muestran las constantes de WindowStyle de Visual Basic 6.0 y sus equivalentes de Visual Basic 2005.
Nota
Por razones de compatibilidad con versiones anteriores, las constantes WindowStyle de Visual Basic 6.0 se pueden seguir u
sando en Visual Basic 2005. Para obtener más información, vea AppWinStyle (Enumeración).

Visual Basic 6.0 Equivalente de Visual Basic 2005


vbHide AppWinStyle.Hide

vbNormalFocus AppWinStyle.NormalFocus

vbMinimizedFocus AppWinStyle.MinimizedFocus

vbMaximizedFocus AppWinStyle.MaximizedFocus

vbNormalNoFocus AppWinStyle.NormalNoFocus

vbMinimizedNoFocus AppWinStyle.MinimizedNoFocus
Vea también
Referencia
AppWinStyle (Enumeración)
Otros recursos
Equivalentes de constante para usuarios de Visual Basic 6.0
Constantes y enumeraciones en Visual Basic
Conceptos de Visual Basic

Bibliotecas de objetos y espacios de nombres para usuarios de


Visual Basic 6.0
Los espacios de nombres parecen un nuevo concepto de Visual Basic 2005. Sin embargo, son conceptualmente similares a las
bibliotecas de objetos de Visual Basic 6.0.
En Visual Basic 6.0 hay diversas bibliotecas que contienen objetos utilizados para generar una aplicación. Por ejemplo, la
biblioteca de Visual Basic contiene objetos formulario y objetos de control intrínsecos que son la base de una aplicación para
Windows. Los objetos de una biblioteca concreta se podían ver en el Examinador de objetos.
En Visual Basic 2005, los objetos están contenidos en ensamblados que forman parte de la biblioteca de clases de .NET
Framework. Cada ensamblado representa un espacio de nombres. Por ejemplo, los objetos formulario y control se encuentran
en el espacio de nombres System.Windows.Forms. Al igual que en Visual Basic 6.0, los espacios de nombres se pueden
inspeccionar en el Examinador de objetos.
Sugerencia
De especial interés para los usuarios de Visual Basic 6.0 es el espacio de nombres Microsoft.VisualBasic, que contiene muc
hos objetos y constantes que permiten seguir utilizando la sintaxis de Visual Basic 6.0 en Visual Basic 2005.

Vea también
Conceptos
Introducción a la biblioteca de clases de .NET Framework en Visual Studio
Conceptos de Visual Basic

Bibliotecas en tiempo de ejecución para usuarios de Visual


Basic 6.0
Las aplicaciones creadas con Visual Basic 6.0 o con Visual Basic 2005 requieren que una biblioteca en tiempo de ejecución se
instale en el equipo de usuario.
Diferencias conceptuales
En las aplicaciones creadas con Visual Basic 6.0, el archivo en tiempo de ejecución de Visual Basic (Msvbvm60.dll) se debe
instalar en un equipo cliente para que la aplicación se pueda ejecutar. Normalmente, este archivo se incluía en los paquetes de
instalación para que se pudiera instalar junto con la aplicación si era necesario.
En Visual Basic 2005, las aplicaciones requieren Common Language Runtime de .NET Framework, un entorno en tiempo de
ejecución que administra la ejecución de código en un equipo cliente. Los archivos de Common Language Runtime se pueden
pre-instalar en un equipo de destino mediante ClickOnce o la implementación de Windows Installer. Para obtener más
información, vea Requisitos previos de implementación (Visual Studio).
Vea también
Conceptos
Instalación e implementación para usuarios de Visual Basic 6.0
Otros recursos
Implementar aplicaciones y componentes
Redistribuir.NET Framework
Conceptos de Visual Basic

Actualizar aplicaciones en Visual Basic


En las secciones siguientes, puede obtener información sobre cómo actualizar programas creados con Visual Basic 6.0 a Visual
Basic 2005.
En esta sección
Lo nuevo en actualización
Nuevas características relacionadas con la actualización de los proyectos de Visual Basic 6.0.
Actualizar desde Visual Basic 6.0
Convertir aplicaciones a la nueva versión de Visual Basic.
Referencia de actualización de Visual Basic 6.0
Mensajes de diagnóstico para la herramienta que actualiza los proyectos a Visual Basic 2005.
Secciones relacionadas
Ayuda para usuarios de Visual Basic 6.0
Una serie de temas que comparan objetos, conceptos y técnicas de Visual Basic 6.0 con sus equivalentes en Visual Basic
2005.
Introducción a soluciones, proyectos y elementos
Describe conceptos centrales subyacentes al desarrollo de aplicaciones en el entorno de desarrollo integrado (IDE). Este tema
proporciona información general sobre la forma de administrar proyectos actualizados y realizar tareas relacionadas con
proyectos.
Compatibilidad de productos y accesibilidad
Proporciona información sobre la instalación, ediciones, compatibilidad del producto y personalización del entorno de
desarrollo integrado (IDE).
Conceptos de Visual Basic

Lo nuevo en actualización
Visual Basic 2005 incluye algunas características nuevas para la actualización del código y las aplicaciones de Visual Basic 6.0 a
Visual Basic 2005.
Novedades de Visual Basic 2005
Característica Descripción
Compatibilidad con la Ahora puede actualizar los proyectos de Visual Basic 6.0 que utilizaban componentes de Microsoft Tran
s actualizaciones de M saction Server (MTS) o COM+.
TS y COM+

Compatibilidad con la Ahora puede actualizar numerosos controles ActiveX de Visual Basic 6.0 a sus equivalentes en Visual Ba
s actualizaciones de co sic 2005. Los controles compatibles son: WebBrowser, ToolBar, ImageList, TreeView, ListView,
ntroles ActiveX RichTextBox, ProgressBar, StatusBar, CommonDialog y MaskedTextBox.

Mejoras para las actua Encontrará varias mejoras para las actualizaciones de código en Visual Basic 2005, entre las que se incl
lizaciones de código uyen:
Actualización del código que utiliza claves basadas en cadenas en las colecciones de controles de
formularios.
Actualización del código que cambia el valor clave en el evento KeyPress.
Otras mejoras le permiten:
Actualizar el objeto App de Visual Basic 6.0 al nuevo objeto My.Application.
Actualizar el parámetro UnloadMode del evento QueryUnload al argumento ClosingReason del
evento FormClosing.
Actualizar formularios para utilizar el nuevo formato de tipo parcial.
Actualizar instancias predeterminadas de Visual Basic 6.0 para que sean compatibles con las insta
ncias predeterminadas proporcionadas en Visual Basic 2005.
Actualizar la colección Forms a la colección System.Windows.Forms de Visual Basic 2005.
Actualizar el objeto Clipboard de Visual Basic 6.0 al nuevo objeto My.Computer.Clipboard.
Actualizar los métodos LoadResString, LoadResData y LoadResPicture al nuevo objeto My.Re
sources.

Vea también
Conceptos
Lo nuevo en el lenguaje Visual Basic
Conceptos de Visual Basic

Actualizar desde Visual Basic 6.0


Visual Basic 2005 presenta mejoras con respecto a las versiones anteriores de Visual Basic, con un nuevo entorno de
desarrollo, un lenguaje de programación actualizado y un nuevo paquete de formularios que facilita más que nunca el
desarrollo. Moverse de Visual Basic 6.0 a Visual Basic 2005 requiere menos esfuerzo de lo que pueda creer, las mejoras en el
entorno de desarrollo integrado y el sistema de Ayuda facilitan la tarea de actualizar satisfactoriamente el código ya que sus
conocimientos de Visual Basic 6.0 le sirven para sus equivalentes en Visual Basic 2005.
Al ir adquiriendo conocimientos sobre Visual Basic 2005, probablemente deseará actualizar algunos de sus proyectos de Visual
Basic 6.0. Aunque hay diferencias entre las dos versiones, las herramientas proporcionadas pueden ayudarle a actualizar sus
proyectos satisfactoriamente.
La documentación siguiente le ayudará a actualizar sus aplicaciones y obtendrá rápidamente información sobre los cambios en
Visual Basic 2005.
En esta sección
Actualizar aplicaciones creadas en versiones anteriores de Visual Basic
Describe cómo actualizar sus aplicaciones a Visual Basic 2005.
Trabajar con Visual Basic 6.0 y la versión actual de Visual Basic
Describe la compatibilidad entre las dos versiones de Visual Basic.
Tutorial: actualización de una aplicación de Visual Basic 6.0 con la versión actual de Visual Basic
Compara una aplicación de ejemplo de Visual Basic 6.0 con un equivalente de Visual Basic 2005.
Secciones relacionadas
Lo nuevo para usuarios de Visual Basic 6.0
Describe las nuevas características de Visual Basic 2005.
Ayuda para usuarios de Visual Basic 6.0
Una serie de temas que comparan objetos, conceptos y técnicas de Visual Basic 6.0 con sus equivalentes de Visual Basic
2005.
Cambios en el lenguaje para usuarios de Visual Basic 6.0
Describe los cambios en Visual Basic.
Conceptos de Visual Basic

Actualizar aplicaciones creadas en versiones anteriores de


Visual Basic
Con Visual Basic 2005, se pueden actualizar aplicaciones creadas con Visual Basic 6.0 para poder continuar su desarrollo
aprovechando las ventajas de .NET Framework. Cuando abra por primera vez un archivo de proyecto de Visual Basic 6.0 (.vbp),
aparecerá el Asistente para actualización. También puede actualizar proyectos fuera del entorno de desarrollo con la
herramienta de la línea de comandos suministrada.
Las herramientas de actualización modifican el código dentro del proyecto para ajustarlo a la sintaxis de Visual Basic 2005 y
reemplazan los formularios y los controles con sus equivalentes en Visual Basic 2005. Debido a las diferencias que existen
entre Visual Basic 6.0 y Visual Basic 2005, algunas partes del proyecto no se pueden corresponder directamente; en estos
casos, recibirá un informe de actualización que le guiará a través del proceso de modificación de la aplicación.
Es posible que algunas aplicaciones de Visual Basic 6.0 no puedan beneficiarse de su actualización a Visual Basic 2005. Puede
preparar estas aplicaciones para que la actualización se produzca sin problemas.
Los temas siguientes le ayudarán a comprender mejor el proceso de actualización.
En esta sección
Por qué es necesaria la actualización
Describe las diferencias que existen entre Visual Basic 6.0 y Visual Basic 2005.
Consideraciones previas a la actualización
Analiza las limitaciones que presenta la actualización y realiza consideraciones para efectuarla.
Preparar una aplicación de Visual Basic 6.0 para la actualización
Explica cómo asegurarse de que la aplicación está preparada para su actualización.
Recomendaciones del lenguaje para la actualización
Se ofrecen algunas recomendaciones que puede seguir al preparar una aplicación de Visual Basic 6.0 para su actualización, o
al programar aplicaciones en Visual Basic 6.0 que puedan actualizarse más tarde.
Biblioteca de compatibilidad de Visual Basic 6.0
Describe el mecanismo que se proporciona para la compatibilidad con versiones anteriores.
Asistente para actualización de Visual Basic
Proporciona información general sobre cómo se actualiza un proyecto de Visual Basic 6.0 a Visual Basic 2005 con el
Asistente para actualización.
Cómo: Actualizar un proyecto con el Asistente para actualización de Visual Basic
Describe cómo utilizar el Asistente para actualización.
Cómo: Actualizar código de Visual Basic 6.0 con el cuadro de diálogo Actualizar código de Visual Basic 6
Explica cómo se actualiza el código de Visual Basic 6.0 al código de Visual Basic 2005.
Actualizar código de Visual Basic 6 (Cuadro de diálogo)
Describe la interfaz de usuario para actualizar el código de Visual Basic 6.0 al código de Visual Basic 2005.
Actualizar proyectos WebClass a Visual Basic 2005
Explica cómo actualizar proyectos WebClass (también conocidos como aplicaciones IIS) a proyectos de aplicaciones Web
ASP.NET.
Completar el proceso de actualización
Describe qué hacer una vez que el Asistente para actualización ha finalizado su ejecución.
Informe de actualización de Visual Basic
Describe el formato y el propósito del informe de actualización.
Cómo: Ver el informe de actualización
Explica cómo abrir el informe de actualización.
Cómo: Actualizar un proyecto desde la línea de comandos
Describe cómo utilizar la herramienta de actualización de línea de comandos.
Solucionar problemas de aplicaciones actualizadas de Visual Basic 6.0
Enumera algunos aspectos conocidos que no se detectan mediante las herramientas de actualización y explica cómo
tratarlos.
Secciones relacionadas
Lo nuevo en Visual Basic
Describe las características nuevas de Visual Basic 2005.
Ayuda para usuarios de Visual Basic 6.0
Muestra las diferencias que existen entre Visual Basic 6.0 y Visual Basic 2005.
Trabajar con Visual Basic 6.0 y la versión actual de Visual Basic
Describe la compatibilidad entre las dos versiones de Visual Basic.
Conceptos de Visual Basic

Por qué es necesaria la actualización


Los diseñadores de Visual Basic 2005 contaban con dos opciones: recuperar la base del código existente para que se ejecutara
sobre .NET Framework o crear desde cero sacando el máximo partido de .NET Framework. La decisión correcta era crear desde
cero. El resultado es un producto que:
Proporciona las características más solicitadas por los clientes (por ejemplo, herencia y subprocesamiento).
Proporciona un acceso completo y sin restricciones a .NET Framework.
Se asegura de que Visual Basic avance hacia la siguiente generación de aplicaciones Web.
Por ejemplo, muchas de las nuevas características que se encuentran en formularios Windows Forms (el nuevo paquete de
formularios) podrían haberse agregado a la base del código existente en forma de nuevos controles o más propiedades. No
obstante, aunque se haya hecho esto, los desarrolladores no sacarán partido de las demás características importantes
inherentes de los formularios Windows Forms, como herencia de seguridad y visual.
Uno de los principales objetivos de Visual Basic 2005 era asegurarse de que el código de Visual Basic pudiera interoperar
completamente con código escrito en otros lenguajes, como C# o C++. Otro objetivo era permitir a los desarrolladores de
Visual Basic sacar partido de .NET Framework de una manera sencilla, sin tener que recurrir a las soluciones de programación
que se requerían tradicionalmente para que funcionaran las API de Windows. Visual Basic tiene ahora los mismos tipos de
variables, matrices, tipos definidos por el usuario, clases e interfaces que Visual C++ y cualquier otro lenguaje orientado a
Common Language Runtime; sin embargo, fue necesario eliminar del lenguaje algunas características, tales como las cadenas
de longitud fija.
Visual Basic es ahora un auténtico lenguaje orientado a objetos; algunas funciones poco intuitivas e incoherentes, tales como
GoSub/Return y DefInt, se eliminaron del lenguaje.
El resultado es un Visual Basic revitalizado, que continuará siendo la herramienta más productiva para crear aplicaciones
basadas en Windows y que se encuentra ahora en posición de ser la mejor herramienta para crear sitios Web de última
generación. En contrapartida, se debe actualizar las aplicaciones de Visual Basic 6.0 para que se adapten a las nuevas
características del lenguaje y los formularios, lo que rompe la compatibilidad con versiones anteriores.
Vea también
Conceptos
Preparar una aplicación de Visual Basic 6.0 para la actualización
Consideraciones previas a la actualización
Otros recursos
Actualizar aplicaciones creadas en versiones anteriores de Visual Basic
Conceptos de Visual Basic

Consideraciones previas a la actualización


Visual Basic 2005 constituye un cambio importante respecto a las versiones anteriores de Visual Basic. Dado que se diseñó
desde el principio para aprovechar las ventajas de .NET Framework, existen numerosas áreas en las que se ha interrumpido la
compatibilidad con versiones anteriores.
Nota
Visual Basic 2005 y Visual Basic 6.0 se pueden instalar en el mismo equipo y ejecutarse a la vez. Las aplicaciones escritas en
Visual Basic 2005 y Visual Basic 6.0 se pueden instalar y ejecutar en el mismo equipo. Los componentes escritos en Visual Ba
sic 2005 pueden interoperar con componentes COM escritos en versiones anteriores de Visual Basic y otros lenguajes.

En la mayor parte de los casos, deseará actualizar las aplicaciones de Visual Basic 6.0 a Visual Basic 2005 para poder
aprovechar las ventajas de .NET Framework mientras continúa su desarrollo. No obstante, hay situaciones en las que
quizá desee continuar la programación en Visual Basic 6.0, en lugar de actualizar la aplicación. Entre los factores que
influyen en la decisión de actualizar una aplicación se encuentran las funciones incompatibles con Visual Basic 2005 y la
cantidad de modificaciones necesarias a causa de la incompatibilidad y de consideraciones relacionadas con la
arquitectura.
Funciones no admitidas
Las siguientes funciones de Visual Basic 6.0 ya no se admiten en Visual Basic 2005. Para obtener más información, vea
Preparar una aplicación de Visual Basic 6.0 para la actualización.
Control contenedor OLE No existe ningún equivalente en Visual Basic 2005. Las aplicaciones que dependen de este
control deben dejarse en Visual Basic 6.0.
Intercambio dinámico de datos (DDE) Los métodos DDE ya no se admiten. Las aplicaciones que dependan de DDE
deberán revisarse para que utilicen otro método de comunicación entre aplicaciones o bien dejarse en Visual Basic 6.0.
Enlace de datos DAO o RDO El enlace de datos a un origen de datos DAO o RDO no se admite en Visual Basic 2005; el
control Data y el control RemoteData no tienen equivalentes. Sólo se puede tener acceso a DAO y RDO a través del
código. Las aplicaciones basadas en el enlace de datos DAO o RDO deben actualizarse para que utilicen ADO o bien
dejarse en Visual Basic 6.0.
Controles de Visual Basic 5.0 Visual Basic 6.0 incluía las versiones de Visual Basic 5.0 de los controles comunes de
Windows y del control de Cuadrícula enlazada a datos. Estos controles son incompatibles con Visual Basic 2005. Las
aplicaciones basadas en estos controles deben actualizarse para que utilicen las versiones 6.0 o bien dejarse en Visual
Basic 6.0.
Aplicaciones DHTML No existe equivalente en Visual Basic 2005. Sin embargo, las aplicaciones DHTML pueden
interoperar con tecnologías de Visual Basic 2005.
Documentos ActiveX No existe equivalente en Visual Basic 2005. Sin embargo, las aplicaciones DHTML pueden
interoperar con tecnologías de Visual Basic 2005. Los documentos ActiveX deben reescribirse como controles de usuario
o dejarse en Visual Basic 6.0.
Páginas de propiedades No existe equivalente en Visual Basic 2005. Si la aplicación depende en gran medida de páginas
de propiedades, debe dejarse en Visual Basic 6.0.
Determinar la cantidad de modificaciones necesarias
Debido a las múltiples diferencias entre Visual Basic 6.0 y Visual Basic 2005, la mayor parte de las aplicaciones requerirán
algunas modificaciones en aquellos elementos que no se puedan convertir directamente o que resulten incompatibles. La
cantidad de modificaciones necesarias depende de varios factores, entre ellos, el tipo de aplicación, sus características y el
lenguaje utilizado.
La forma más sencilla de determinar la cantidad de modificaciones necesarias consiste en ejecutar el Asistente para
actualización y ver la lista de problemas del Informe de actualización. Cuando se actualiza una aplicación se crea una nueva
copia; la aplicación original se deja intacta. Si, después de ver el informe, decide no actualizar, puede eliminar simplemente el
nuevo proyecto y continuar programando en Visual Basic 6.0.
A continuación, se exponen algunas consideraciones adicionales que pueden influir en la decisión de actualizar.
Aplicaciones de base de datos de un solo nivel Dado que no se admite el enlace de datos a DAO, las aplicaciones
sencillas que utilicen controles enlazados directamente a una base de datos (por ejemplo, a una creada con Microsoft
Access) pueden necesitar una cantidad significativa de modificaciones.
Complementos de Visual Basic Puesto que Visual Basic 2005 utiliza el entorno de desarrollo integrado de Visual Studio,
el modelo de objetos de extensibilidad es significativamente diferente al de Visual Basic 6.0. Los complementos
necesitarán una cantidad de modificaciones considerable.
Juegos Las aplicaciones basadas en características de rendimiento específicas de Visual Basic 6.0 como, por ejemplo, los
juegos de acción, necesitarán ciertas modificaciones debido a las diferentes características de rendimiento de Visual Basic
2005.
Gráficos No hay compatibilidad con los métodos gráficos de formularios ni con los controles de forma y línea. Las
aplicaciones que utilicen mucho estas funciones para dibujar en formularios requerirán muchas modificaciones.
Funcionalidad de arrastrar y colocar Los modelos para la funcionalidad de arrastrar y colocar son significativamente
diferentes; deberá rescribir todo el código que ejecute acciones de arrastrar y colocar.
Valores Variant Cuando se actualice una aplicación, el tipo de datos Variant se convertirá al tipo de datos Object. Si
una aplicación depende en gran medida de datos de tipo Variant, es posible que esta conversión introduzca algunas
diferencias sutiles en el comportamiento de la aplicación. Por ejemplo, en Visual Basic 6.0, la expresión
IsObject(Variant) se evalúa como false; en Visual Basic 2005 se cambia a IsObject(Object), que se evalúa como true.

API de Windows Debido a los cambios en el lenguaje, muchas llamadas a las API de Windows deberán revisarse o
reemplazarse con funciones de .NET Framework.
Vea también
Conceptos
Preparar una aplicación de Visual Basic 6.0 para la actualización
Por qué es necesaria la actualización
Otros recursos
Actualizar aplicaciones creadas en versiones anteriores de Visual Basic
Conceptos de Visual Basic

Preparar una aplicación de Visual Basic 6.0 para la actualización


Aunque el proceso de actualizar una aplicación de Visual Basic 6.0 a Visual Basic 2005 es en su mayor parte automático, hay
varias medidas que se pueden tomar para optimizar la actualización con un poco de preparación.
Si sigue las recomendaciones de este tema, podrá minimizar y, en algunos casos, eliminar los cambios necesarios tras la
actualización del proyecto a Visual Basic 2005. En la mayor parte de los casos, las recomendaciones representan simplemente
buenas costumbres de programación; no obstante, también identifican cuáles son los objetos y métodos que no tienen
equivalentes y que deben utilizarse lo menos posible si se piensa actualizar el proyecto a Visual Basic 2005.
Recomendaciones generales
Puede parecer obvio, pero, si el proyecto no se compila ni se ejecuta en Visual Basic 6.0, no se actualizará correctamente. Es
recomendable instalar Visual Basic 6.0 en el equipo que se utilizará para la actualización. Además de permitirle probar la
aplicación, garantizará que todos los controles, componentes y bibliotecas de tipos necesarios se encuentren disponibles
durante la actualización.
Visual Basic 2005 permite actualizar proyectos de Visual Basic 6.0; si tiene un proyecto escrito en Visual Basic versión 1 a 5, es
recomendable cargarlo primero en Visual Basic 6.0 (con la opción de actualización de controles Microsoft ActiveX), compilarlo
y guardarlo antes de actualizarlo a Visual Basic 2005.
Consideraciones sobre formularios y controles
Visual Basic 2005 tiene un nuevo paquete: formularios Windows Forms. Los formularios Windows Forms son ampliamente
compatibles con el paquete de formularios de Visual Basic 6.0; no obstante, existen algunas diferencias importantes, que se
indican a continuación:
Visual Basic 2005 no admite el control contenedor OLE; es recomendable evitar el uso de este control en las aplicaciones
de Visual Basic 6.0.
No hay ningún control de forma en Visual Basic 2005. Las formas cuadradas y rectangulares se actualizan a etiquetas; los
óvalos y círculos no se pueden actualizar. Es recomendable evitar utilizarlos en las aplicaciones.
No hay ningún control de línea en Visual Basic 2005. Las líneas horizontales y verticales se actualizan a etiquetas. Las
líneas diagonales no se actualizan; por tanto, es recomendable evitar utilizarlas.
Visual Basic 2005 tiene un nuevo conjunto de comandos de gráficos que reemplazan a los métodos Form, Circle, CLS,
PSet, Line y Point. Dado que el nuevo modelo de objetos es muy diferente del de Visual Basic 6.0, estos métodos no se
pueden actualizar.
En el caso del control Timer, al establecer la propiedad Interval en 0 no se deshabilita el temporizador (timer); en su
lugar, se restablece el intervalo a 1. En los proyectos de Visual Basic 6.0, debe definir Enabled como False en lugar de
establecer Interval en 0.
Visual Basic 2005 tiene dos controles de menú, MenuStrip y ContextMenuStrip, mientras que Visual Basic 6.0 tiene un
control de menú que se puede abrir como un control MainMenu o ContextMenu. Todos los controles de menú se
actualizan a un solo componente MenuStrip que contiene objetos MenuItem para cada control del menú; tendrá que
volver a crear los menús contextuales y eliminar los controles MenuStrip adicionales.
Visual Basic 2005 no admite el intercambio dinámico de datos (DDE).
Visual Basic 2005 no admite el método Form.PrintForm.
Aunque Visual Basic 2005 admite la funcionalidad de arrastrar y colocar, el modelo de objetos es diferente del que se
utilizaba en Visual Basic 6.0. En consecuencia, no es posible actualizar las propiedades y métodos de arrastrar y colocar
de Visual Basic 6.0.
Visual Basic 2005 tiene un objeto Clipboard mejorado (My.Computer.Clipboard) que proporciona más funcionalidad
y admite más formatos del Portapapeles que el objeto Clipboard de Visual Basic 6.0. Sin embargo, debido a las
diferencias entre los modelos de objetos, las instrucciones de Portapapeles no se pueden actualizar automáticamente.
Visual Basic 2005 no admite la propiedad Name de formularios y controles en tiempo de ejecución; en consecuencia, no
debe escribir código que recorra la colección Controls en busca de un control con un nombre determinado. (Esta
funcionalidad ahora está disponible mediante las clases System.Reflection de .NET Framework.)
Recomendaciones sobre datos
Visual Basic 2005 presenta una versión mejorada de ADO, denominada ADO.NET, que se ha optimizado para trabajar con
datos de aplicaciones distribuidas y proporciona mejoras de rendimiento sobre ADO cuando se utiliza en aplicaciones
distribuidas.
RDO y ADO todavía se pueden utilizar en código de Visual Basic 2005, con unas pequeñas modificaciones. Sin embargo, Visual
Basic 2005 no admite el enlace de datos DAO y RDO a controles, controles de datos ni conexión de usuarios RDO. Si sus
aplicaciones contienen enlaces de datos DAO o RDO, es recomendable que las deje en Visual Basic 6.0 o que actualice los
enlaces de datos DAO o RDO a ADO antes de actualizar el proyecto a Visual Basic 2005, ya que el enlace de datos ADO es
compatible con formularios Windows Forms. En la Ayuda de Visual Basic 6.0 encontrará información sobre cómo actualizar
DAO o RDO a ADO en Visual Basic 6.0.
Recomendaciones sobre la arquitectura Web
Visual Basic 2005 presenta ASP.NET, una versión mejorada de ASP, y completa la arquitectura con formularios Web Forms,
una tecnología para crear páginas Web con un modelo de eventos similar al de Visual Basic. Se trata de una arquitectura
basada en servidor.
Las aplicaciones basadas en Web que cumplan los criterios siguientes serán las más fáciles de actualizar:
Siga las directrices de Microsoft sobre arquitectura de varios niveles.
Utilice páginas Active Server.
Utilice objetos COM de Visual Basic 6.0 o Visual C++ 6.0 para la lógica empresarial.
ASP es completamente compatible con Visual Basic 2005 y permite continuar extendiendo la aplicación por medio de ASP,
ASP.NET y formularios Web Forms. Los objetos comerciales de Visual Basic 6.0 y Visual C++ 6.0 pueden utilizarse sin
modificaciones o actualizarse a Visual Basic 2005.
En Visual Basic 2005 ya no existen las clases Web. Las aplicaciones de clases Web existentes pueden interactuar con
formularios Web Forms y aplicaciones ASP de Visual Basic 2005; o bien, se pueden actualizar a aplicaciones de formularios
Web Forms.
Vea también
Conceptos
Consideraciones previas a la actualización
Por qué es necesaria la actualización
Otros recursos
Actualizar aplicaciones creadas en versiones anteriores de Visual Basic
Recomendaciones del lenguaje para la actualización
Conceptos de Visual Basic

Recomendaciones del lenguaje para la actualización


Como hay diferencias del lenguaje entre Visual Basic 6.0 y Visual Basic 2005, puede necesitar cambiar algún código al
actualizar una aplicación.
Siga estas recomendaciones al preparar una aplicación de Visual Basic 6.0 para su actualización o al programar aplicaciones en
Visual Basic 6.0 que puedan actualizarse más tarde.
En esta sección
Recomendación de actualización: utilizar enlace en tiempo de compilación y conversiones explícitas
Proporciona recomendaciones para la declaración de variable y la conversión de tipos de datos en aplicaciones de Visual
Basic 6.0.
Recomendación de actualización: utilizar el tipo de datos Date para almacenar fechas
Proporciona recomendaciones para el control de la fecha en aplicaciones de Visual Basic 6.0.
Recomendación de actualización: resolver las propiedades predeterminadas sin parámetros
Proporciona recomendaciones para hacer referencia a las propiedades predeterminadas de aplicaciones de Visual Basic 6.0.
Recomendación de actualización: evitar la propagación de valores Null
Proporciona recomendaciones para el control de valores nulos en aplicaciones de Visual Basic 6.0.
Recomendación de actualización: utilizar matrices de límite cero
Proporciona recomendaciones para la creación de matrices en aplicaciones de Visual Basic 6.0.
Recomendación de actualización: utilizar constantes en lugar de valores subyacentes
Proporciona recomendaciones para hacer referencia a constantes en aplicaciones de Visual Basic 6.0.
Recomendación de actualización: evitar matrices y cadenas de longitud fija en tipos definidos por el usuario
Proporciona recomendaciones para los tipos definidos por el usuario en aplicaciones de Visual Basic 6.0.
Recomendación de actualización: evitar palabras clave heredadas
Proporciona recomendaciones para el uso de palabras clave obsoletas en aplicaciones de Visual Basic 6.0.
Recomendación de actualización: ajustar los tipos de datos para las API Win32
Proporciona recomendaciones para llamar a las API de Windows en aplicaciones de Visual Basic 6.0.
Secciones relacionadas
Preparar una aplicación de Visual Basic 6.0 para la actualización
Explica cómo asegurarse de que la aplicación está preparada para su actualización.
Consideraciones previas a la actualización
Analiza las limitaciones que presenta la actualización y realiza consideraciones para efectuarla.
Actualizar aplicaciones creadas en versiones anteriores de Visual Basic
Analiza la actualización de las aplicaciones de Visual Basic 6.0.
Conceptos de Visual Basic

Recomendación de actualización: utilizar enlace en tiempo de


compilación y conversiones explícitas
Tanto Visual Basic 6.0 como Visual Basic 2005 admiten objetos enlazados en tiempo de ejecución, que es la práctica de
declarar una variable como el tipo de datos Object y asignarla a una instancia de una clase en tiempo de ejecución. Sin
embargo, durante el proceso de actualización, los objetos enlazados en tiempo de ejecución pueden provocar problemas al
resolver propiedades predeterminadas o en aquellos casos en que el modelo de objetos subyacente haya cambiado y sea
necesario convertir propiedades, métodos y eventos. Por ejemplo, suponga que tiene un formulario denominado Form1 con
una etiqueta denominada Label1; el siguiente código de Visual Basic 6.0 establecería el título de la etiqueta en "SomeText":

Dim o As Object
Set o = Me.Label1
o.Caption = "SomeText"

En Visual Basic 2005, la propiedad Caption del control de etiqueta se ha reemplazado por la propiedad Text. Al actualizar el
código, todas las instancias de la propiedad Caption se cambian a Text, pero como hay un objeto de enlace en tiempo de
ejecución sin tipo, Visual Basic no puede detectar de qué tipo de objeto se trata ni si hay que traducir alguna propiedad. En
estos casos, tendrá que cambiar el código manualmente después de la actualización.
Si rescribe el código con objetos de enlace en tiempo de compilación, se actualizará automáticamente:

Dim o As Label
Set o = Me.Label1
o.Text = "SomeText"

Siempre que sea posible, es recomendable declarar las variables del tipo de objeto correspondiente en lugar de declararlas
simplemente como el tipo de datos Object.
En los casos en que se utilicen variables Object y Variant en el código de Visual Basic 6.0, es recomendable utilizar
conversiones explícitas al asignar las variables, ejecutar operaciones sobre ellas o transferirlas a una función. Por ejemplo, la
intención de la operación "+" en el código siguiente no está clara:

Dim Var1 As Variant


Dim Var2 As Variant
Dim Var3 As Variant
Var1 = "3"
Var2 = 4
'BAD: Should Var1 and Var2 be added as strings or integers?
Var3 = Var1 + Var2

El ejemplo anterior puede producir un error en tiempo de ejecución en Visual Basic 2005. Si rescribe la línea final para que
utilice conversiones explícitas, se asegurará de que el código funcione:

'GOOD: explicit conversion


Var3 = CInt(Var1) + CInt(Var2)

Visual Basic 2005 admite funciones de sobrecarga en función del tipo de parámetro. Por ejemplo, la función Environ tiene
ahora dos formas:

Environ( Expression As Integer) As String


Environ( Expression As String ) As String

Visual Basic 2005 determina qué función debe llamarse en función del tipo de parámetro. Si se transfiere un entero a
Environ(), se llamará a la versión de enteros; si se pasa una cadena, se llamará a la versión de cadenas. El código que
transfiere un tipo de datos Variant u Object a una función sobrecargada puede generar errores de compilación o en tiempo
de ejecución. Si se utiliza una conversión explícita, como en el ejemplo siguiente, el código funcionará como se espera una vez
que se actualice a Visual Basic 2005:
Dim a As String
Dim v As Variant
v = "Path"
'GOOD: explicit conversion
a = Environ(CStr(v))

El uso de conversiones explícitas de objetos de enlace en tiempo de ejecución es una buena costumbre al escribir código. De
este modo, resulta más fácil determinar el propósito del código y actualizar el proyecto a Visual Basic 2005.
Vea también
Otros recursos
Recomendaciones del lenguaje para la actualización
Conceptos de Visual Basic

Recomendación de actualización: utilizar el tipo de datos Date


para almacenar fechas
Las versiones anteriores de Visual Basic admitían el uso del tipo de datos Double para almacenar y manipular fechas. No es
recomendable hacer esto en Visual Basic 2005, ya que las fechas no se almacenan de forma interna como datos de tipo
Double. El ejemplo siguiente sería válido en Visual Basic 6.0, pero podría provocar un error de compilación en Visual Basic
2005:

Dim dbl As Double


Dim dat As Date
dat = Now
'BAD: Date can't be assigned to a double
dbl = dat
'BAD: Double can't be used in date functions
dbl = DateAdd("d", 1, dbl)
'BAD: CDate can't convert a double to a date
dat = CDate(dbl)

.NET Framework proporciona las funciones ToOADate y FromOADate para convertir entre valores de tipo Double y fechas. Sin
embargo, cuando actualice el proyecto a Visual Basic 2005, será difícil determinar cuál es la intención del código que utiliza el
tipo Double para almacenar fechas. Para evitar modificaciones innecesarias del código en Visual Basic 2005, utilice siempre el
tipo de datos Date para almacenar fechas.
Vea también
Otros recursos
Recomendaciones del lenguaje para la actualización
Conceptos de Visual Basic

Recomendación de actualización: resolver las propiedades


predeterminadas sin parámetros
En Visual Basic 6.0, muchos objetos exponen propiedades predeterminadas, que pueden omitirse como método abreviado de
programación. Por ejemplo, TextBox tiene como propiedad predeterminada Text, así que, en lugar de escribir:

MsgBox Form1.Text1.Text

puede utilizar la forma abreviada:

MsgBox Form1.Text1

La propiedad predeterminada se resuelve en el momento de compilar el código. También es posible, además, utilizar
propiedades predeterminadas con objetos de enlace en tiempo de ejecución, como en el ejemplo siguiente:

Dim obj As Object


Set obj = Form1.Text1
MsgBox obj

En el ejemplo de enlace en tiempo de ejecución, la propiedad predeterminada se resuelve en tiempo de ejecución; el cuadro de
mensaje MsgBox muestra el valor de la propiedad predeterminada de TextBox como Text1.
Visual Basic 2005 no admite propiedades predeterminadas sin parámetros y, en consecuencia, no permite este método
abreviado de programación. Cuando se actualiza el proyecto, Visual Basic 2005 resuelve las propiedades predeterminadas sin
parámetros, pero no puede resolver automáticamente el uso de enlaces que se resuelven en tiempo de ejecución. En estos
casos, tendrá que cambiar el código manualmente. Una complicación adicional es que muchas bibliotecas implementan
propiedades predeterminadas mediante una propiedad denominada _Default. _Default actúa como un proxy al transferir
llamadas a la propiedad predeterminada real. Por lo tanto, al actualizar el proyecto, algunas de las propiedades
predeterminadas se resolverán en _Default. El código continuará funcionando normalmente, pero será menos comprensible
que el código escrito de forma explícita que utilice la propiedad real. Por estas razones, es recomendable evitar el uso de
propiedades predeterminadas sin parámetros en el código de Visual Basic 6.0. En lugar de escribir:

Dim obj As Object


Set obj = Me.Text1
'BAD: Relying on default property
MsgBox obj
'BAD: Relying on default property
MsgBox Me.Text1

utilice:

Dim obj As TextBox


Set obj = Me.Text1
'GOOD: Default property is resolved
MsgBox obj.Text
'GOOD: Default property is resolved
MsgBox Me.Text1.Text

Aunque las propiedades predeterminadas sin parámetros no se admiten en Visual Basic 2005, sí se admiten las propiedades
predeterminadas con parámetros. Para comprender la diferencia entre los dos tipos, tenga en cuenta que las propiedades
predeterminadas con parámetros tienen siempre un índice. Un ejemplo es la propiedad predeterminada de recordset de ADO:
la colección Fields. El código:

Dim rs As ADODB.Recordset
rs("CompanyName") = "SomeCompany"
rs!CompanyName = "SomeCompany"
en realidad, es el método abreviado de:

Dim rs As ADODB.Recordset
rs.Fields("CompanyName").Value = "SomeCompany"
rs.Fields!CompanyName.Value = "SomeCompany"

En este caso, la propiedad Fields está parametrizada y, por tanto, se puede utilizar en Visual Basic 2005; sin embargo, la
propiedad predeterminada de la propiedad Fields, Value, no tiene parámetros, de modo que su uso correcto en Visual Basic
2005 es:

Dim rs As ADODB.Recordset
rs("CompanyName").Value = "SomeCompany"
rs!CompanyName.Value = "SomeCompany"

Este ejemplo y la mayor parte de otras propiedades predeterminadas se resuelven automáticamente al actualizar el proyecto,
así que su resolución en Visual Basic 6.0 es simplemente un buen hábito de programación. No obstante, es recomendable
evitar el uso de propiedades predeterminadas con los tipos de datos Object y Variant, puesto que no se pueden resolver y
tendrá que corregir manualmente el código del proyecto actualizado.
Vea también
Otros recursos
Recomendaciones del lenguaje para la actualización
Conceptos de Visual Basic

Recomendación de actualización: evitar la propagación de


valores Null
Las versiones anteriores de Visual Basic admiten la propagación de valores Null. La propagación de valores Null admite como
premisa que, cuando se utilice Null en una expresión, el resultado de la propia expresión será Null. En cada uno de los casos
del ejemplo siguiente, el resultado de V es siempre Null.

Dim V
V = 1 + Null
V = Null + Right$("SomeText", 1)
V = Right("SomeText", 0)

La propagación de valores Null no se admite en Visual Basic 2005. La instrucción 1+Null generará un error de coincidencia de
tipos en Visual Basic 2005. Además, mientras Visual Basic 6.0 tenía dos versiones de la función Left, Left$ que devuelve una
cadena y Left que devuelve un valor Variant que puede ser Null, Visual Basic 2005 sólo tiene una versión, Left, que siempre
devuelve una cadena.
Para conservar la compatibilidad tanto con Visual Basic 6.0 como con Visual Basic 2005, es recomendable escribir siempre
código que compruebe la existencia de valores Null, en lugar de confiar en la propagación de valores Null. Además, en Visual
Basic 2005, las funciones siguientes ya no devuelven valores Null:
Chr Command CurDir Date Environ Error Hex LCase LTrim Oct Right RTrim Space Str Time Trim UCase
La propagación de valores Null suele utilizarse en aplicaciones de base de datos, donde es necesario comprobar si un campo
de la base de datos contiene un valor Null. En estos casos, es recomendable comprobar los resultados por medio de la función
IsNull() y ejecutar la acción correspondiente.
Vea también
Otros recursos
Recomendaciones del lenguaje para la actualización
Conceptos de Visual Basic

Recomendación de actualización: utilizar matrices de límite


cero
Visual Basic 6.0 permite definir matrices en las que los limites superior e inferior pueden ser cualquier número entero.
También es posible utilizar la instrucción ReDim para reasignar un valor Variant como matriz. Para habilitar la
interoperabilidad con otros lenguajes, las matrices de Visual Basic 2005 deben tener cero como límite inferior y no es posible
utilizar ReDim a menos que se declare previamente la variable de matriz con la palabra clave Dim. Aunque esto restringe la
forma de definir las matrices, permite pasar matrices entre Visual Basic 2005 y cualquier otro lenguaje .NET Framework. El
ejemplo siguiente muestra esta restricción:

'BAD: LBound must be 0


Dim a(1 To 10) As Integer
'BAD: Can't use ReDim without Dim
ReDim v(10)
'OK: Creates an array of 11 integers
Dim b(10) As Integer
'OK: Can ReDim previously Dimed variable
ReDim b(5) As Integer

Un efecto secundario es que se eliminó la instrucción Option Base del lenguaje.


Cuando se actualiza un proyecto a Visual Basic 2005, las instrucciones Option Base se quitan del código. Si la matriz es de
límite cero, permanece sin cambios. Sin embargo, si una matriz no es de límite cero, el límite inferior se eliminará y se insertará
una advertencia en el código, como en el ejemplo siguiente:

Dim a(1 To 10) As Integer

cambia a:

' UPGRADE_WARNING: Lower bound of an array was changed from 1 to 0.


Dim a(10) As Integer

En muchos casos, el código actualizado funcionará como lo hacía anteriormente. Sin embargo, si la lógica de la aplicación se
basa en que el límite inferior es 1, deberá realizar algunas modificaciones. Las instrucciones Dim, ReDim y LBound se marcan
con advertencias para ayudar a revisar los cambios.
Por esta razón, es recomendable utilizar matrices de límite cero en el código de Visual Basic 6.0, evitar el uso de la instrucción
ReDim como declaración de matriz y evitar utilizar Option Base 1.
Vea también
Otros recursos
Recomendaciones del lenguaje para la actualización
Conceptos de Visual Basic

Recomendación de actualización: utilizar constantes en lugar


de valores subyacentes
Cuando escriba código, intente utilizar constantes en lugar de confiar en sus valores subyacentes. Por ejemplo, si va a
maximizar un formulario en tiempo de ejecución, utilice:

' GOOD: Constant name


Me.WindowState = vbMaximized

en lugar de:

'BAD: Underlying value


Me.WindowStyle = 2
'BAD: Variable
Me.WindowStyle = X

Del mismo modo, utilice True y False en lugar de -1 y 0.


En Visual Basic 2005, los valores y, en algunos casos, los nombres de algunas propiedades y constantes han cambiado. Cuando
el proyecto se actualiza a Visual Basic 2005, la mayoría de las constantes cambian automáticamente; sin embargo, si utiliza
variables o valores subyacentes en lugar de nombres de constante, puede que algunos casos no se actualicen de forma
automática. El uso de nombres de constante minimiza el número de modificaciones que se debe hacer.
Vea también
Otros recursos
Recomendaciones del lenguaje para la actualización
Conceptos de Visual Basic

Recomendación de actualización: evitar matrices y cadenas de


longitud fija en tipos definidos por el usuario
Debido a los cambios realizados, que permiten que las matrices y estructuras (antes conocidas como tipos definidos por el
usuario) de Visual Basic 2005 sean completamente compatibles con otros lenguajes de Visual Studio, las cadenas de longitud
fija ya no se admiten en el lenguaje. En la mayoría de los casos esto no representa ningún problema, porque existe una clase
de compatibilidad que proporciona un comportamiento de cadena de longitud fija, de modo que el código:

Dim FixedLengthString As String * 100

se actualiza a lo siguiente:

Dim FixedLengthString As New VB6.FixedLengthString(100)

Sin embargo, las cadenas de longitud fija provocan un problema cuando se utilizan en estructuras. El problema se produce
porque la clase de la cadena de longitud fija no se crea automáticamente cuando se crea la estructura. Del mismo modo, las
matrices de tamaño fijo tampoco se crean cuando se crea la estructura.
Al actualizar el código, los tipos definidos por el usuario con cadenas o matrices de longitud fija se convierten en estructuras y
se marcan con un comentario que indica que es necesario inicializar la cadena o matriz de longitud fija antes de hacer
referencia a la estructura en el código. Sin embargo, es posible protegerse de esta modificación cambiando los tipos definidos
por el usuario de Visual Basic 6.0 de modo que utilicen cadenas en lugar de cadenas de longitud fija y matrices no inicializadas
en lugar de matrices de tamaño fijo. Por ejemplo:

Private Type uType


anArray(5) As Integer
aFixedString As String * 100
End Type
Sub SomeFunction()
Dim aVariable As uType
End Sub

puede cambiarse a:

Private Type uType


anArray() As Integer
aFixedString As String
End Type
Sub SomeFunction()
Dim aVariable As uType
ReDim aVariable.anArray(5) As Integer
aVariable.aFixedString = String$(100, " ")
End Sub

Vea también
Otros recursos
Recomendaciones del lenguaje para la actualización
Conceptos de Visual Basic

Recomendación de actualización: evitar palabras clave


heredadas
En vista de que se han eliminado del lenguaje, debe evitar utilizar las palabras claves siguientes en proyectos de Visual Basic
6.0 que puedan actualizarse a Visual Basic 2005.
Pala Explicación
bra c
lave
Def< En las versiones anteriores de Visual Basic, DefBool, DefByte, DefInt, DefLng, DefCur, DefSng, DefDbl, DefDec, Def
type Date, DefStr, DefObj y DefVar se utilizaban en la sección de declaraciones de un módulo para definir un intervalo de v
> ariables como un determinado tipo. Por ejemplo, DefInt A-C define todas las variables que comienzan con la letra A, B
o C como un entero. En lugar de utilizar instrucciones Def<type> , conviene declarar explícitamente las variables.

GoT Las instrucciones GoTo/GoSub calculadas adoptan esta forma:


o/Go
Sub On x GoTo 100, 200, 300
calcul
ada
Estas instrucciones no se admiten en Visual Basic 2005. En su lugar, debe utilizar instrucciones If o construcciones Selec
t Case.

GoS Las instrucciones GoSub y Return no se admiten en Visual Basic 2005. En la mayoría de los casos, es posible reemplaza
ub/R rlas por funciones y procedimientos.
etur
n

Opti La instrucción Option Base se utilizaba para especificar el límite inferior predeterminado de una matriz en 0 o 1. Esta in
on B strucción se ha quitado del lenguaje porque Visual Basic 2005 admite únicamente matrices con un límite inferior de cer
ase 0 o. Las matrices de límite distinto de cero se admiten por medio de la biblioteca de compatibilidad.
|1

VarP VarPtr, VarPtrArray, VarPtrStringArray, ObjPtr y StrPtr son funciones no documentadas que se utilizan para obtener
tr, O la dirección de memoria subyacente de las variables. Estas instrucciones no se admiten en Visual Basic 2005.
bjPtr
, StrP
tr

LSet En Visual Basic 6.0, la instrucción LSet puede utilizarse para asignar una variable de un tipo definido por el usuario a otr
a variable de un tipo definido por un usuario diferente. Esta funcionalidad no se admite en Visual Basic 2005.

Vea también
Otros recursos
Recomendaciones del lenguaje para la actualización
Conceptos de Visual Basic

Recomendación de actualización: ajustar los tipos de datos para


las API Win32
Muchas API pueden utilizarse exactamente del mismo modo que en Visual Basic 6.0, con la precaución de hacer los ajustes
necesarios en los tipos de datos. El tipo de datos Long de Visual Basic 6.0 es ahora el tipo de datos Integer de Visual Basic
2005 y el tipo de datos Integer de Visual Basic 6.0 es ahora el tipo de datos Short de Visual Basic 2005. Estos cambios se
realizan automáticamente durante la actualización; las API sencillas funcionan exactamente igual que lo hacían en Visual Basic
6.0. Por ejemplo:

Private Declare Function GetVersion Lib "kernel32" () As Long


Function GetVer()
Dim Ver As Long
Ver = GetVersion()
MsgBox ("System Version is " & Ver)
End Function

cambia a:

Private Declare Function GetVersion Lib "kernel32" () As Integer


Function GetVer()
Dim Ver As Integer
Ver = GetVersion()
MsgBox("System Version is " & Ver)
End Function

Aparte de las actualizaciones de tipos de datos numéricos, Visual Basic 6.0 tiene un tipo de datos de cadena de longitud fija que
no se admite en Visual Basic 2005 y que se actualiza a una clase contenedora de cadena de longitud fija. En muchos casos, en
Visual Basic 6.0 se puede ejecutar la misma acción utilizando una cadena normal. Por ejemplo:

Private Declare Function GetUserName Lib "advapi32.dll" Alias _


"GetUserNameA" (ByVal lpBuffer As String, ByRef nSize As Long) As Long
Function GetUser()
Dim Ret As Long
Dim UserName As String
Dim Buffer As String * 25
Ret = GetUserName(Buffer, 25)
UserName = Left$(Buffer, InStr(Buffer, Chr(0)) - 1)
MsgBox (UserName)
End Function

puede escribirse mejor con una cadena normal, establecida explícitamente con una longitud 25, en lugar de con una cadena de
longitud fija:

Dim Buffer As String


Buffer = String$(25, " ")

Esto se actualiza a Visual Basic 2005 del modo siguiente:

Declare Function GetUserName Lib "advapi32.dll" Alias _


"GetUserNameA" (ByVal lpBuffer As String, ByRef nSize As Integer) As Integer
Function GetUser()
Dim Ret As Integer
Dim UserName As String
Dim Buffer As String
Buffer = New String(CChar(" "), 25)
Ret = GetUserName(Buffer, 25)
UserName = Left(Buffer, InStr(Buffer, Chr(0)) - 1)
MsgBox(UserName)
End Function
En algunos casos, Visual Basic 2005 controla mejor la transferencia de cadenas a las API, ya que existe la opción de declarar
cómo se realiza ese paso mediante las palabras clave ANSI y UNICODE.
Hay tres casos en los que puede ser necesario hacer algún cambio. El primero es cuando se pasan a API tipos definidos por el
usuario que contienen cadenas de longitud fija o matrices de bytes. En Visual Basic 2005, es posible que necesite modificar el
código y agregar el atributo MarshallAs (del espacio de nombres System.Runtime.InteropServices) a cada cadena de longitud
fija o matriz de bytes del tipo definido por el usuario. El segundo caso es el uso del tipo variable As Any en una instrucción
Declare. No está admitido en Visual Basic 2005. Las variables de tipo As Any solían utilizarse para pasar una variable que
fuera una cadena o un valor Null. Para reemplazar este uso de Visual Basic 6.0, declare dos formas de la API: una con valores
de tipo Long y otra con cadenas. Por ejemplo, la API GetPrivateProfileString tiene un parámetro lpKeyName de tipo As Any:

Private Declare Function GetPrivateProfileString Lib "kernel32" Alias _


"GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal _
lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString _
As String, ByVal nSize As Long, ByVal lpFileName As String) As Long

Para quitar "As Any", puede reemplazar Declare por dos versiones, una que acepte un valor de tipo Long y otra que acepte
una cadena:

Private Declare Function GetPrivateProfileStringKey Lib "kernel32" Alias _


"GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal _
lpKeyName As String, ByVal lpDefault As String, ByVal lpReturnedString _
As String, ByVal nSize As Integer, ByVal lpFileName As String) As Integer

Private Declare Function GetPrivateProfileStringNullKey Lib "kernel32" _


Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, _
ByVal lpKeyName As Integer, ByVal lpDefault As String, ByVal _
lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName _
As String) As Integer

Cuando desee pasar el valor Null a la API, utilice la versión GetPrivateProfileStringNullKey. Al hacerlo, la función se
actualizará a Visual Basic 2005.
El área final en la que quizá tenga que hacer alguna modificación se presenta si se utilizan API que creen subprocesos, se
derivan de clases de Windows, se ejecutan enlaces de colas de mensajes, etc. Algunas de estas funciones producirán un error
en tiempo de ejecución en Visual Basic 2005. Muchas de estas API tienen equivalentes en Visual Basic 2005 o .NET Framework.
Deberá corregirlas caso por caso.
Vea también
Otros recursos
Recomendaciones del lenguaje para la actualización
Conceptos de Visual Basic

Biblioteca de compatibilidad de Visual Basic 6.0


Si ya utilizó versiones anteriores de Visual Basic, descubrirá que Visual Basic 2005 presenta muchos cambios en el lenguaje
Visual Basic y que algunas funciones antiguas aparentemente ya no existen. Estos cambios eran necesarios para hacer que
Visual Basic se ajustara a .NET Framework y a Common Language Specification (CLS).
Cuando una aplicación escrita en Visual Basic 6.0 se actualiza a Visual Basic 2005, algunas partes del código no se pueden
convertir debido a diferencias sintácticas o de arquitectura. Por ello, se utilizan funciones de la biblioteca de compatibilidad de
Visual Basic 6.0 (Microsoft.VisualBasic.Compatibility) para permitir que el código funcione en Visual Basic 2005 sin
necesidad de realizar grandes modificaciones. Estas funciones imitan el comportamiento de Visual Basic 6.0, a la vez que
cumplen con la especificación Common Language Specification. Siempre que sea posible, la herramienta de actualización
intentará convertir el código directamente a las funciones de los espacios de nombres Microsoft.VisualBasic o System.
Aunque las funciones y los objetos del espacio de nombres Compatibility se han diseñado para ayudar a la herramienta de
configuración, nada le impide utilizarlos para crear una nueva aplicación en Visual Basic 2005. En la mayoría de los casos, sin
embargo, .NET Framework proporciona una funcionalidad más avanzada.
Vea también
Tareas
Cómo: Agregar controles de sistema de archivos de Visual Basic 6.0 a una aplicación
Referencia
Referencia al espacio de nombres VisualBasic.Compatibility
Conceptos
Trabajar con Visual Basic 6.0 y la versión actual de Visual Basic
Otros recursos
Cambios en el lenguaje para usuarios de Visual Basic 6.0
Actualizar desde Visual Basic 6.0
Conceptos de Visual Basic

Asistente para actualización de Visual Basic


Visual Basic 2005 representa un cambio fundamental desde el desarrollo tradicional en Windows hasta la creación de sitios
Web de última generación y aplicaciones con n niveles. Por este motivo, para aprovechar las ventajas de Visual Basic 2005, es
necesario actualizar el código.
Proceso de actualización
El proceso de actualización se lleva a cabo automáticamente al abrir un proyecto de Visual Basic 6.0 en Visual Basic 2005: el
Asistente para actualización le guía paso a paso a lo largo del proceso de actualización y crea un nuevo proyecto de Visual
Basic 2005 (el proyecto existente no se modifica). Éste es un proceso unidireccional; el nuevo proyecto proyecto de Visual Basic
2005 no se puede abrir en Visual Basic 6.0.
Cuando se actualiza el proyecto, se modifica el lenguaje para que incluya los cambios de sintaxis y sus formularios de Visual
Basic 6.0 se convierten en formularios Windows Forms. En la mayoría de los casos, después de la actualización, tendrá que
realizar modificaciones en el código. Esto se debe a que ciertos objetos y características del lenguaje no tienen equivalente en
Visual Basic 2005, o bien tienen un equivalente demasiado diferente para actualizarse automáticamente. Después de la
actualización, puede que desee modificar la aplicación para aprovechar algunas de las nuevas funciones de Visual Basic 2005.
Para ayudarle a realizar los cambios, una vez actualizado su proyecto, Visual Basic 2005 agrega un informe de actualización a
su proyecto en el que se detalla cualquier problema. También inserta comentarios en su código actualizado para avisarle de las
instrucciones que será necesario cambiar. Estos comentarios se muestran como tareas pendientes (TO DO) en la nueva
ventana de Lista de tareas, lo que permite ver fácilmente los cambios necesarios y desplazarse a la instrucción del código
correspondiente con sólo hacer doble clic en la tarea. Cada tarea y cada elemento del informe de actualización está asociado a
un tema de la Ayuda para ofrecer más información acerca de por qué es necesario cambiar el código y qué debe hacerse.
Vea también
Conceptos
Completar el proceso de actualización
Por qué es necesaria la actualización
Preparar una aplicación de Visual Basic 6.0 para la actualización
Otros recursos
Actualizar aplicaciones creadas en versiones anteriores de Visual Basic
Conceptos de Visual Basic

Cómo: Actualizar un proyecto con el Asistente para


actualización de Visual Basic
El Asistente para actualización de Visual Basic se puede utilizar para actualizar proyectos de Visual Basic 6.0 y continuar su
desarrollo en Visual Basic 2005. El Asistente para actualización no modifica el proyecto original de Visual Basic 6.0, sino que
crea un nuevo proyecto de Visual Basic 2005 basado en el proyecto original.
Nota
Aunque el asistente facilita el proceso de actualización, es posible que deba modificar parte del código de la aplicación actuali
zada. Debería dedicar cierto tiempo a familiarizarse con Visual Basic 2005 antes de intentar este proceso.

Nota
Los cuadros de diálogo y comandos de menú que se ven pueden diferir de los descritos en la Ayuda, dependiendo de los val
ores de configuración o de edición activos. Para cambiar la configuración, elija la opción Importar y exportar configuracio
nes en el menú Herramientas. Para obtener más información, vea Valores de configuración de Visual Studio.

Para actualizar un proyecto de Visual Basic 6.0 a Visual Basic 2005


1. Abra el proyecto en Visual Basic 6.0. En el menú Archivo, seleccione Crear <nombre de proyecto>. Ejecute la
aplicación y asegúrese de que no haya errores.
2. Inicie Visual Studio 2005. En el menú Archivo, elija Abrir y, a continuación, haga clic en Proyecto o solución.
3. En el cuadro de diálogo Abrir proyecto, vaya a la ubicación del proyecto Visual Basic 6.0 y seleccione el archivo de
proyecto (.vbp).
Esto abrirá el Asistente para actualización de Visual Basic.
4. En la segunda página del asistente, elija las opciones de actualización disponibles. Las opciones pueden variar según el
tipo de proyecto que se esté actualizando.
Sugerencia
Para ver una explicación de las opciones disponibles, presione F1 mientras está en el asistente.

5. En la tercera página del asistente, escriba la ubicación donde se creará el nuevo proyecto.
Nota
Cada proyecto de Visual Basic 2005 debe estar en su propia carpeta. Si especifica una carpeta que contiene archivos, se
le pedirá que elija otra carpeta.

6. En la cuarta página del asistente, haga clic en Siguiente para iniciar el proceso de actualización. Cuando se complete el
proceso, el nuevo proyecto aparecerá en el Explorador de soluciones.
7. En el Explorador de soluciones, haga doble clic en el nodo _UpgradeReport.htm para abrir el informe de
actualización.
8. Revise el informe de actualización. Antes de ejecutar la aplicación debe corregir todos los errores. Debe examinar las
advertencias para asegurarse de que no afectan al comportamiento de la aplicación.
Sugerencia
Para ver una explicación de los errores o advertencias, haga clic en la descripción para mostrar un tema de Ayuda.

9. En el menú Depurar, haga clic en Iniciar. Ejecute la aplicación y asegúrese de que no hay errores y de que el
comportamiento es idéntico al de Visual Basic 6.0.
Nota
El Asistente para actualización no puede capturar todas las posibles incompatibilidades; es posible que al ejecutar la apl
icación se encuentre con más errores. Para obtener una lista de problemas conocidos, vea
Solucionar problemas de aplicaciones actualizadas de Visual Basic 6.0.

Vea también
Tareas
Cómo: Ver el informe de actualización
Conceptos
Preparar una aplicación de Visual Basic 6.0 para la actualización
Clases Web para usuarios de Visual Basic 6.0
Otros recursos
Actualizar aplicaciones creadas en versiones anteriores de Visual Basic
Referencia de Visual Basic

Actualizar código de Visual Basic 6 (Cuadro de diálogo)


Utilice el cuadro de diálogo Actualizar código de Visual Basic 6 para actualizar el código de Visual Basic 6.0 a Visual Basic
2005 escribiendo código en la ventana Código o pegando código desde el Editor de código de Visual Basic 6.0. Al hacer clic en
el botón Actualizar, el código actualizado se inserta en el Editor de código de Visual Basic 2005 en la posición del cursor.
Además, las referencias COM requeridas por el código de Visual Basic 6.0 se pueden agregar en la ficha Referencias; de este
modo, se agregarán a las del proyecto de Visual Basic 2005.
Para tener acceso al cuadro de diálogo Actualizar código de Visual Basic 6, elija Actualizar código de Visual Basic 6 en el
menú Herramientas.
Nota
El comando Actualizar código de Visual Basic 6 sólo está disponible cuando se trabaja con el Editor de código.

Lista de elementos de la interfaz de usuario


Código
El código de Visual Basic 6.0 se puede escribir o pegar en la ventana de código desde el Editor de código. El código se
conserva entre cada uso para que pueda modificarlo posteriormente.
Referencias
Muestra referencias COM requeridas por su código de Visual Basic 6.0.
Nombre de la referencia
Muestra el nombre descriptivo del componente COM. Sólo las referencias marcadas se agregarán al proyecto de Visual Basic
2005.
Versión
Muestra el número de versión (mayor y menor) del componente COM.
Ruta de acceso
Muestra la ruta de acceso y el nombre de archivo del componente COM.
Agregar referencia
Muestra el cuadro de diálogo Agregar referencia, que contiene una lista de los componentes COM disponibles.
Actualizar
Actualiza cualquier código escrito en la ventana de código y lo inserta en el Editor de código de Visual Basic 2005; además,
agrega las referencias marcadas en la lista Referencias al proyecto Visual Basic 2005.
Sugerencias para usar el cuadro de diálogo Actualizar código de Visual Basic 6
El cuadro de diálogo Actualizar código de Visual Basic 6 no puede convertir correctamente todo el código. Para sacar el
máximo partido de esta herramienta:
Vea Consideraciones previas a la actualización.
Facilite la actualización de su código siguiendo las recomendaciones expuestas en
Recomendaciones del lenguaje para la actualización. El modo en que esté escrito el código de Visual Basic 6.0 puede
afectar a cómo se actualizará.
Pruebe el código en Visual Basic 6.0 antes de intentar la actualización. Si el código no se ejecuta en Visual Basic 6.0, no se
ejecutará en Visual Basic 2005.
Las firmas de eventos de Visual Basic 2005 son diferentes a las de sus homólogas de Visual Basic 6.0. Al escribir código
para los procedimientos de formularios o eventos de control, agregue primero la declaración del procedimiento en
Visual Basic 2005 y, a continuación, actualice sólo el cuerpo del procedimiento.
El cuadro de diálogo Actualizar código de Visual Basic 6 está diseñado para actualizar pequeñas secciones de código.
El código escrito en el cuadro de diálogo determina el contexto para la actualización.
Por ejemplo, no se traduciría la instrucción L.Caption = "MyCaption" porque la herramienta no puede determinar el
tipo de "L" para resolver la propiedad Caption. Insertar una declaración para L (como por ejemplo Dim L As Label) antes
de la instrucción produce una actualización correcta.
Compruebe que la sintaxis es correcta para su código de Visual Basic 6.0, ya que una sintaxis incorrecta puede producir
un error Untranslated statement in WrapperSub.
Para obtener un mejor rendimiento, actualice el código en módulos en lugar de en módulos de formularios. Si tiene que
actualizar un formulario, use el Asistente para la actualización.
Si pega un código que contiene caracteres Unicode, aparecerá un cuadro de diálogo que le preguntará si desea quitarlos.
Si elige Aceptar, se analizará el código y se eliminarán todos los caracteres Unicode.
Vea también
Tareas
Cómo: Actualizar código de Visual Basic 6.0 con el cuadro de diálogo Actualizar código de Visual Basic 6
Otros recursos
Actualizar aplicaciones creadas en versiones anteriores de Visual Basic
Conceptos de Visual Basic

Cómo: Actualizar código de Visual Basic 6.0 con el cuadro de


diálogo Actualizar código de Visual Basic 6
El cuadro de diálogo Actualizar código de Visual Basic 6 es una herramienta que convierte el código de Visual Basic 6.0 en
código de Visual Basic 2005 equivalente. A diferencia del Asistente para actualización de Visual Basic, que actualiza una
aplicación completa, el cuadro de diálogo Actualizar código de Visual Basic 6 está disponible en tiempo de diseño para
convertir pequeñas cantidades de código mientras se desarrolla la aplicación de Visual Basic 2005.
El cuadro de diálogo Actualizar código de Visual Basic 6 resulta útil por dos motivos:
Se puede hacer uso de código de Visual Basic 6.0 pegándolo en la herramienta.
Se puede escribir código utilizando la sintaxis de Visual Basic 6.0 para conocer su equivalente en Visual Basic 2005.
Al ejecutar la herramienta, el código de Visual Basic 2005 se inserta en el Editor de código en la posición actual del cursor. Si se
produce cualquier problema durante la conversión, se insertan comentarios con vínculos que permiten el acceso a los temas
de Ayuda que explican el problema y las posibles soluciones.
Nota
Los cuadros de diálogo y los comandos de menú que se ven pueden diferir de los descritos en la Ayuda, dependiendo de los
valores de configuración o de edición activos. Para cambiar la configuración, seleccione Importar y exportar configuracio
nes en el menú Herramientas. Para obtener más información, vea Valores de configuración de Visual Studio.

Para actualizar código de Visual Basic 6.0


1. En el Editor de código, desplace el puntero del mouse (ratón) al lugar en el que desea insertar el código.
2. En el menú Herramientas, seleccione Actualizar código de Visual Basic 6.
Se abre el cuadro de diálogo Actualización de código de Visual Basic 6.0.
3. En el cuadro de diálogo Actualización de código de Visual Basic 6.0, pegue el código de Visual Basic 6.0 o escríbalo
utilizando la sintaxis de Visual Basic 6.0.
Nota
Si pega un código que contiene caracteres Unicode, aparecerá un cuadro de diálogo que le preguntará si desea quitarlo
s. Si elige Aceptar, se analizará el código y se eliminarán todos los caracteres Unicode.

4. Si el código hace referencia a un componente COM, seleccione la ficha Referencias y haga clic en Agregar referencia y,
a continuación, en el cuadro de diálogo Agregar referencia, seleccione la referencia deseada.
5. Haga clic en Actualizar para convertir el código e insertarlo en el Editor de código.
Todas las referencias COM se agregarán en el nodo Referencias del proyecto del Explorador de soluciones, y se
agregará una instrucción Imports de nivel de proyecto del espacio de nombres Microsoft.VisualBasic.Compatibility.
Vea también
Referencia
Actualizar código de Visual Basic 6 (Cuadro de diálogo)
Otros recursos
Actualizar aplicaciones creadas en versiones anteriores de Visual Basic
Conceptos de Visual Basic

Cómo: Emular un control Tri-state de Visual Basic 6.0 en una


aplicación actualizada
En Visual Basic 6.0, las propiedades Picture, DownPicture y DisabledPicture se utilizan para mostrar imágenes diferentes en
función del estado de un control CheckBox, CommandButton u OptionButton. Por ejemplo, cuando se activa un control
CheckBox, se muestra la imagen DownPicture; si el control está desactivado, se muestra la imagen DisabledPicture.
En Visual Basic 2005, puede conseguir el mismo efecto mediante un control ImageList, tal y como se ilustra en el siguiente
ejemplo.
Nota
En primer lugar, compruebe la aplicación de Visual Basic 6.0. Si las propiedades DownPicture y DisabledPicture no se esta
blecen en tiempo de diseño ni en tiempo de ejecución, el comportamiento debería ser el mismo que en Visual Basic 2005.

Nota
Los cuadros de diálogo y los comandos de menú que se ven pueden diferir de los descritos en la Ayuda, dependiendo de los
valores de configuración o de edición activos. Para cambiar la configuración, seleccione Importar y exportar configuracio
nes en el menú Herramientas. Para obtener más información, vea Valores de configuración de Visual Studio.

Agregar un control ImageList


Siga los pasos siguientes para modificar la aplicación actualizada si se definen las propiedades DownPicture o
DisabledPicture.
Para emular un control de tres estados
1. Determine los nombres de archivo y las ubicaciones de las imágenes que se asignaron a las propiedades Picture,
DownPicture y DisabledPicture, y, si es necesario, cópielas en el equipo de desarrollo.
2. En el Cuadro de herramientas, agregue un control ImageList al formulario.
3. En la ventana Propiedades, seleccione la propiedad Images.
4. En el Editor de la colección de imágenes, agregue tres imágenes para utilizarlas en Picture, en DownPicture y en
DisabledPicture.
5. Si se establecían propiedades en tiempo de ejecución, quite el código. Si las propiedades se establecían en tiempo de
diseño, agregue el código siguiente al evento Load del formulario:
VB
' Assign the first image (Picture) to the Image property.
CheckBox1.Image = ImageList1.Images(0)

6. Para mostrar la imagen DownPicture en tiempo de ejecución, agregue el código siguiente al evento CheckedChanged
del control CheckBox.
VB
If CheckBox1.Checked = True Then
' Assign the second image (DownPicture) to the Image property.
CheckBox1.Image = ImageList1.Images(1)
Else
' Assign the first image (Picture) to the Image property.
CheckBox1.Image = ImageList1.Images(0)
End If
7. Para mostrar la imagen DisabledPicture en tiempo de ejecución, agregue el código siguiente al evento
EnabledChanged del control CheckBox.
VB
If CheckBox1.Enabled = False Then
' Assign the third image (DisabledPicture) to the Image property.
CheckBox1.Image = ImageList1.Images(2)
ElseIf CheckBox1.Checked = True Then
' Assign the second image (DownPicture) to the Image property
CheckBox1.Image = ImageList1.Images(1)
Else
' Assign the first image (Picture)to the Image property
CheckBox1.Image = ImageList1.Images(0)
End If

La aplicación deberá tener ahora el mismo comportamiento que el que tenía en Visual Basic 6.0.

Vea también
Conceptos
Propiedad Style para usuarios de Visual Basic 6.0
Control CheckBox para usuarios de Visual Basic 6.0
Control CommandButton para usuarios de Visual Basic 6.0
Control OptionButton para usuarios de Visual Basic 6.0
Control OptionButton para usuarios de Visual Basic 6.0
Controles de usuario para usuarios de Visual Basic 6.0
Conceptos de Visual Basic

Actualizar proyectos WebClass a Visual Basic 2005


Los proyectos WebClass de Visual Basic 6.0 (también conocidos como proyectos de aplicación IIS) se pueden actualizar a
proyectos de sitios Web de ASP.NET mediante el Asistente para actualización. El proceso de actualización de proyectos
WebClass es básicamente el mismo que para cualquier otro tipo de proyecto, sin embargo, existen ciertas cuestiones a tener
en cuenta.
Actualizar WebClasses
Cuando se actualiza un proyecto WebClass, de forma predeterminada el nuevo proyecto se creará con el nombre
projectname.NET (donde projectname es el nombre del proyecto de Visual Basic 6.0).
Cuando un proyecto WebClass de Visual Basic 6.0 se actualiza a ASP.NET, el archivo .asp del proyecto se actualiza a un archivo
.aspx. Sin embargo, las referencias al archivo .asp que existan en un archivo de plantillas HTML no se cambiarán
automáticamente por referencias a un archivo .aspx. Éstas no se actualizan porque el archivo de plantillas puede contener
referencias a otros archivos .asp que no formaban parte del proyecto WebClass.
Además, cuando se copian los archivos en el nuevo directorio durante la actualización, sólo se copian los archivos de plantillas
HTML. El resto de los archivos .html o archivos de imágenes no se copiarán al nuevo directorio.
Cuando agrega archivos HTML a un proyecto de sitio Web de ASP.NET, se agregan de manera predeterminada como archivos
de contenido. Cuando se actualiza un proyecto WebClass, los archivos HTML se agregan como recursos incrustados. Si se
agregan archivos HTML al proyecto después de la actualización, se deberá establecer su propiedad Acción de generación en
Recurso incrustado para hacerlos visibles a la aplicación.
Sugerencia
Todavía puede hacer referencia a un archivo HTML que no está incrustado proporcionando una ruta de acceso completa al ar
chivo.

Si nunca ha creado una Aplicación de sitio Web de ASP.NET antes de actualizar su primer proyecto WebClass de Visual Basic
6.0, será necesario establecer el objeto StartUp del proyecto. Esto se hace haciendo clic con el botón secundario del mouse en
el archivo .aspx y seleccionando Establecer como página de inicio en el menú contextual antes de ejecutar el proyecto
actualizado.
Vea también
Conceptos
Clases Web para usuarios de Visual Basic 6.0
Otros recursos
Actualizar aplicaciones creadas en versiones anteriores de Visual Basic
Conceptos de Visual Basic

Completar el proceso de actualización


Después de ejecutar el Asistente para actualización, el proyecto actualizado se abre en Visual Basic 2005. El proyecto aparecerá
en el Explorador de soluciones e incluirá copias actualizadas de todos los archivos del proyecto y un informe de
actualización.
En la mayoría de los casos, deberán efectuarse nuevas modificaciones para garantizar que el proyecto se ejecuta
correctamente en Visual Basic 2005. Se deben completar tres categorías de elementos de trabajo:
Los errores UPGRADE_ISSUE son elementos que impiden la compilación de la aplicación. Antes de ejecutar el proyecto,
deberá corregir estos errores. Aparecen en el informe de actualización y también como elementos de la Lista de tareas.
Los errores UPGRADE_TODO son elementos que no impiden la compilación del proyecto, pero que provocan errores en
tiempo de ejecución. Antes de ejecutar el proyecto, deberá corregir estos errores. Aparecen en el informe de
actualización, como elementos de la Lista de tareas y como comentarios en el código actualizado.
Los errores UPGRADE_WARNING son elementos que no impiden la compilación del proyecto, pero que pueden provocar
errores en tiempo de ejecución. Deberá examinarlos y corregirlos en caso necesario. Aparecen en el informe de
actualización, como elementos de la Lista de tareas y como comentarios en el código actualizado.
Los elementos UPGRADE_NOTE son elementos que representan cambios importantes en el código o diferencias de
comportamiento, y que podrían tener efectos secundarios. Es recomendable leer estas notas y decidir si es necesario
hacer cambios. Se informa de estos cambios por medio de comentarios en el código.
Para completar el proceso de actualización, deberá buscar en la Lista de tareas los errores o advertencias y buscar en el
código todos los comentarios que empiecen por "UPGRADE_NOTE".
Sugerencia
Todas las líneas de comentarios que se insertan en el código durante la actualización contienen un hipervínculo. Al hacer clic
en el vínculo (CTRL+clic), se desplazará a una página de ayuda en la que se explica el problema y qué debe hacerse para solu
cionarlo. El vínculo aparece al final de la línea de comentario; es posible que necesite desplazarse para verlo.

Vea también
Conceptos
Asistente para actualización de Visual Basic
Otros recursos
Actualizar aplicaciones creadas en versiones anteriores de Visual Basic
Conceptos de Visual Basic

Informe de actualización de Visual Basic


Cuando se actualiza un proyecto de Visual Basic 6.0 a Visual Basic 2005, se agrega un informe de actualización al proyecto en
el Explorador de soluciones. El informe de actualización contiene información relativa al proceso de actualización, así como
una lista de los problemas descubiertos durante la actualización y que deben solucionarse antes de ejecutar el proyecto.
Detalles del informe
El informe de actualización tiene formato HTML; para verlo dentro del entorno de desarrollo de Visual Basic 2005, haga doble
clic en el archivo _UpgradeReport.htm en el Explorador de soluciones, o bien, puede verlo en un explorador externo
eligiendo el comando Ver en el explorador del menú contextual.
La primera parte del informe contiene información general acerca de la actualización, incluida la configuración utilizada
durante la actualización y la ubicación de los nuevos archivos de proyecto.
El resto del informe contiene un listado de problemas globales y un listado de cada archivo actualizado. Si expande la sección
correspondiente a cada archivo, podrá ver una lista detallada de los problemas que se deben solucionar. Cada problema
incluye información sobre su gravedad, la ubicación del código que debe corregirse y una descripción.
Vea también
Conceptos
Completar el proceso de actualización
Asistente para actualización de Visual Basic
Otros recursos
Actualizar aplicaciones creadas en versiones anteriores de Visual Basic
Conceptos de Visual Basic

Cómo: Ver el informe de actualización


Cuando se actualiza un proyecto de Visual Basic 6.0 a Visual Basic 2005, se crea un informe de actualización que se coloca en la
carpeta del nuevo proyecto. El informe de actualización contiene información de resumen relativa al proceso de actualización,
además de información acerca de los errores o problemas encontrados durante el proceso.
Nota
El informe de actualización sólo se genera para los proyectos actualizados mediante el Asistente para actualización; para los
proyectos actualizados desde la línea de comandos no se genera ningún informe.

El informe de actualización se puede ver en el entorno de programación integrado (IDE) de Visual Basic 2005 o en cualquier
explorador Web.
Nota
Los cuadros de diálogo y comandos de menú que se ven pueden diferir de los descritos en la Ayuda, dependiendo de los val
ores de configuración o de edición activos. Para cambiar la configuración, elija la opción Importar y exportar configuracio
nes en el menú Herramientas. Para obtener más información, vea Valores de configuración de Visual Studio.

Para ver el informe de actualización en Visual Studio 2005


En el Explorador de soluciones, haga doble clic en el nodo _UpgradeReport.htm para abrir el informe de
actualización.
Para ver el informe de actualización en un explorador Web
1. En el Explorador de soluciones, seleccione el nodo _UpgradeReport.htm.
2. En el menú Archivo, elija Explorar con.
3. En el cuadro de diálogo Explorar con, seleccione el explorador Web.

Vea también
Conceptos
Preparar una aplicación de Visual Basic 6.0 para la actualización
Otros recursos
Actualizar aplicaciones creadas en versiones anteriores de Visual Basic
Conceptos de Visual Basic

Cómo: Actualizar un proyecto desde la línea de comandos


Además del Asistente para actualización de Visual Basic, los proyectos de Visual Basic 6.0 pueden actualizarse a Visual Basic
2005 mediante una herramienta de línea de comandos, Vbupgrade.exe.
Nota
Vbupgrade.exe no se encuentra de forma predeterminada en la ruta de acceso. Deberá agregarla a la ruta de acceso o cambi
ar al directorio donde se encuentra instalada antes de ejecutarla desde la línea de comandos. La ubicación de instalación pre
determinada es C:\Archivos de programa\Microsoft Visual Studio 8\Vb\VBUpgrade.

Nota
Los cuadros de diálogo y comandos de menú que se ven pueden diferir de los descritos en la Ayuda, dependiendo de los val
ores de configuración o de edición activos. Para cambiar la configuración, elija la opción Importar y exportar configuracio
nes en el menú Herramientas. Para obtener más información, vea Valores de configuración de Visual Studio.

Para actualizar un proyecto desde la línea de comandos


1. Abra el proyecto en Visual Basic 6.0. En el menú Archivo, seleccione Generar <NombreDeProyecto>. Ejecute la
aplicación y asegúrese de que no haya errores.
2. En el símbolo del sistema, escriba Vbupgrade <NombreDeProyecto> (donde <projectname> es la ruta de acceso
completa a la aplicación de Visual Basic 6.0) y los argumentos adicionales de línea de comandos.
Nota
Para obtener información sobre la sintaxis y las opciones de línea de comandos de Vbupgrade, vea
Sintaxis de la línea de comandos de Vbupgrade.

3. Abra el proyecto resultante en Visual Basic 2005. Revise el código; durante la actualización, en el código se insertan notas
para alertar de los posibles problemas. Antes de ejecutar la aplicación debe corregir todos los errores. Debe examinar las
advertencias para asegurarse de que no afectan al comportamiento de la aplicación.
Sugerencia
Para ver una explicación de los errores o advertencias, haga clic en la descripción para mostrar la Ayuda.

4. En el menú Depurar, haga clic en Iniciar. Ejecute la aplicación y asegúrese de que no hay errores y de que el
comportamiento es idéntico al de Visual Basic 6.0.
Nota
La herramienta Vbupgrade no puede capturar todas las posibles incompatibilidades; es posible que al ejecutar la aplica
ción se encuentre con más errores. Para obtener una lista de los problemas conocidos, vea
Solucionar problemas de aplicaciones actualizadas de Visual Basic 6.0.

Vea también
Tareas
Cómo: Ver el informe de actualización
Referencia
Sintaxis de la línea de comandos de Vbupgrade
Conceptos
Preparar una aplicación de Visual Basic 6.0 para la actualización
Otros recursos
Actualizar aplicaciones creadas en versiones anteriores de Visual Basic
Referencia de Visual Basic

Sintaxis de la línea de comandos de Vbupgrade


La herramienta de línea de comandos Vbupgrade.exe actualiza una aplicación de Visual Basic 6.0 a Visual Basic 2005.

vbupgrade[.exe] inputname [/out outputname] [/verbose [/nolog [/logfile logfilename]]]


vbupgrade[.exe] /?

Argumentos
inputname
Requerido.
Especifica la ruta de acceso y el nombre de archivo del proyecto de Visual Basic 6.0 que se va a actualizar.
/out outputname
Especifica la ruta de acceso a la carpeta donde se creará el proyecto de Visual Basic 2005. La ruta de acceso predeterminada
es \OutDir.
/verbose
Muestra todos los resultados en la ventana del símbolo del sistema durante la actualización.
/nolog
No crea un archivo de registro durante la actualización.
/logfile logfilename
Especifica la ruta de acceso y el nombre del archivo de registro creado durante la actualización. Si no se especifica la ruta de
acceso y el nombre de archivo, el archivo de registro se crea en la misma carpeta que el proyecto de Visual Basic 2005. El
nombre de archivo predeterminado es ProjectFileName.log, donde ProjectFileName es el nombre del archivo de proyecto.
/?
Muestra una lista de opciones de línea de comandos.
Comentarios
Las rutas de acceso o nombres de archivo que contengan espacios deben estar entre comillas.
Vea también
Tareas
Cómo: Actualizar un proyecto desde la línea de comandos
Referencia
Asistente para actualizar
Conceptos de Visual Basic

Solucionar problemas de aplicaciones actualizadas de Visual


Basic 6.0
Aunque las herramientas de actualización de Visual Basic 2005 se han diseñado cuidadosamente para que detecten e informen
de cualquier problema con las aplicaciones actualizadas, existen algunos casos que no se pueden detectar. Esta página
enumera algunos problemas conocidos que las herramientas de actualización no detectan y explica cómo solucionarlos.
No se puede tener acceso a vínculos de ayuda después de actualizar Visual Studio
Cuando se trabaja con una aplicación actualizada con una versión anterior de Visual Studio, los vínculos de ayuda insertados
por la herramienta de actualización puede dar el error "No se ha encontrado la página". Esto sucede debido a que los vínculos
hacen referencia a la colección de ayuda de la versión anterior y el formato de los vínculos de ayuda ha cambiado.
Para corregir este problema, puede copiar la cadena del error y utilizar la función de búsqueda de la ayuda para localizar el
tema. Tenga en cuenta que algunas cadenas de error incluyen variables, por lo que es posible que deba buscar una cadena
parcial.
Diferencias de comportamiento para cadenas de longitud fija en tipos definidos por el usuario
En Visual Basic 6.0, las cadenas asignadas a una cadena de longitud fija en un tipo definido por el usuario se trunca
automáticamente si superan la longitud fija. Después de actualizar a Visual Basic 2005, las cadenas ya no se truncan, por lo que
puede que generen resultados incorrectos.
Nota
Durante la actualización, se agrega el atributo VBFixedString a las cadenas de longitud fija en los tipos definidos por el usua
rio. Este atributo permite que las funciones de archivos de la biblioteca de compatibilidad de Visual Basic las traten como cad
enas de longitud fija.

Para solucionar este problema, busque el código que asigna una cadena a la cadena de longitud fija y agregue código que
compruebe la longitud de la cadena y la trunque, si es necesario:
VB
' Before
MyString = "1234567"
MyStruct.FixedString5 = MyString

' After
MyString = "1234567"
If Len(MyString) > 5 Then
MyString = Microsoft.VisualBasic.Left(MyString, 5)
End If
MyStruct.FixedString5 = MyString

El cierre de un formulario llama a Dispose


En Visual Basic 6.0, es posible descargar un formulario y cargarlo de nuevo más tarde mediante una llamada al método Show.
En Visual Basic 2005, el método Close de un formulario llama al método Dispose, por lo que se recolecta automáticamente
como elemento no utilizado. Esto puede provocar sutiles diferencias de comportamiento que pueden resultar difíciles de
detectar.
En Visual Basic 2005, si llama al método Show para un formulario descargado, obtendrá una nueva instancia del
formulario; las modificaciones de las configuraciones de las propiedades de la clase base se perderán.
En el caso de los formularios que se muestran modalmente, no se llama automáticamente a Dispose. En algunos casos,
es posible que desee llamar a Dispose para hacer limpieza en los recursos.
Las llamadas de enlace en tiempo de ejecución a objetos COM pueden provocar errores de falta de coincidencia de tipos
En Visual Basic 6.0, cuando se pasa un objeto COM de enlace en tiempo de ejecución como parámetro para una llamada de
enlace en tiempo de ejecución, el objeto se convierte en Variant de tipo Nothing. Cuando se actualizan a Visual Basic 2005,
los objetos COM declarados de tipo Object se tratan igual que Variants (que siempre se convierten al tipo Object durante la
actualización); las referencias de estos objetos se calculan para el tipo variant Empty. Esto produce un error de coincidencia de
tipos en Visual Basic 2005.
Para solucionar este problema, asegúrese de que todos los objetos se enlazan en tiempo de compilación.
Los valores devueltos por Err.Number pueden ser diferentes
En algunos casos, los errores que devuelve Visual Basic 2005 pueden ser diferentes de los que devuelve Visual Basic 6.0. En el
caso del código de control de errores basado en los valores devueltos por Err.Number, esto podría causar un comportamiento
diferente en la aplicación.
El código siguiente muestra un ejemplo:

' Visual Basic 6.0


On Local Error GoTo Result
Dim x() As Boolean
Dim y As Variant

y = x(10)
Result:
If Err.Number = 9 Then
' Do something.
Else
' Do something else.
End If

Antes de la actualización, Err.Number siempre devolverá 9 (El subíndice está fuera del intervalo) y ejecutará la primera parte
de la instrucción If. Después de la actualización, devolverá 91 (Variable de objeto o de bloque With no establecida) y ejecutará
la cláusula Else. Esto se debe a que, en Visual Basic 2005, una matriz debe inicializarse para que se pueda hacer referencia a
ella; en Visual Basic 6.0, las matrices se inicializan al declararse.
Si depende de los valores devueltos desde Err.Number en el código, es recomendable que compruebe cuidadosamente los
resultados y modifique el código según sea necesario.
Vea también
Conceptos
Trabajar con Visual Basic 6.0 y la versión actual de Visual Basic
Otros recursos
Actualizar aplicaciones creadas en versiones anteriores de Visual Basic
Conceptos de Visual Basic

Trabajar con Visual Basic 6.0 y la versión actual de Visual Basic


Ambos Visual Basic 2005 y Visual Basic 6.0, así como las aplicaciones creadas en cualquier lenguaje, se pueden instalar y
ejecutar al mismo tiempo en el mismo equipo.
Los componentes escritos en Visual Basic 2005 pueden interoperar con componentes COM escritos en versiones anteriores de
Visual Basic y otros lenguajes. Por ejemplo, puede arrastrar un control ActiveX escrito en Visual Basic 6.0 a un formulario
Windows Forms de Visual Basic 2005, utilizar un objeto COM de Visual Basic 6.0 desde una biblioteca de clases de Visual Basic
2005 o agregar una referencia de una biblioteca de Visual Basic 2005 a una aplicación ejecutable de Visual Basic 6.0.
Los componentes compilados con Visual Basic 2005 tienen diferencias sutiles en tiempo de ejecución en comparación con
componentes compilados con Visual Basic 6.0. Puesto que los objetos de Visual Basic 2005 se liberan por medio del recolector
de elementos no utilizados, puede haber un retraso entre el momento en que se destruyen explícitamente y el momento en
que se quitan de la memoria. Existen diferencias adicionales, como el tipo de datos y otros cambios del lenguaje. El resultado
combinado de estas diferencias es que las aplicaciones de Visual Basic 2005 tendrán un comportamiento similar en tiempo de
ejecución, pero no idéntico, a las aplicaciones de Visual Basic 6.0.
Además, Visual Basic 2005 hace que la compatibilidad binaria entre los componentes de Visual Basic 2005 y los de Visual Basic
6.0 sea innecesaria. Los componentes disfrutan ahora de un sistema de versiones e implementación más robusto: para
implementar los archivos, basta copiarlos a un directorio y la actualización de un componente a una nueva versión es tan
sencilla como reemplazar el archivo antiguo con uno nuevo. Todo lo que debe hacer es asegurarse de que las clases y los
métodos sean compatibles con las versiones anteriores.
Vea también
Conceptos
Por qué es necesaria la actualización
Preparar una aplicación de Visual Basic 6.0 para la actualización
Otros recursos
Actualizar aplicaciones creadas en versiones anteriores de Visual Basic
Conceptos de Visual Basic

Tutorial: actualización de una aplicación de Visual Basic 6.0 con


la versión actual de Visual Basic
En este tutorial, actualizará una aplicación de ejemplo gráfica de Visual Basic a Visual Basic 2005. Además de ilustrar el proceso
de actualización, resalta las diferencias en las arquitecturas gráficas entre Visual Basic 6.0 y Visual Basic 2005. Debe servir
también como introducción a los temas de arquitectura de las aplicaciones.
La aplicación de ejemplo, en este caso, es un simple formulario que contiene dos botones, un cuadro de imagen, un
temporizador y un control de imagen oculto. Aunque no es lo habitual en la mayoría de las aplicaciones que deseará actualizar,
presenta ciertos aspectos complejos con los que se encontrará cuando actualice sus aplicaciones.
Nota
Este tutorial requiere tener instalado Visual Basic 6.0 en el equipo de desarrollo.

Para crear la aplicación de Visual Basic 6.0


1. Abra Visual Basic 6.0. En el menú Archivo, seleccione Nuevo proyecto.
2. En el cuadro de diálogo Nuevo proyecto, elija EXE estándar y haga clic en Aceptar.
3. Agregue un control PictureBox al formulario y dimensiónelo para rellenar la mayor parte del formulario, dejando
espacio al final.
4. Establezca la propiedad AutoRedraw en True, la propiedad DrawStyle en 0-Solid y la propiedad FillStyle en 0-Solid.
5. Agregue dos controles CommandButton bajo el control PictureBox.
6. Seleccione el primer CommandButton y establezca la propiedad Name en ClearPictureBox y la propiedad Caption en
Clear.

7. Seleccione el segundo CommandButton y establezca la propiedad Name en ShowImage y la propiedad Caption en


Show Image.

8. Agregue un control Image al formulario y establezca la propiedad Name en sourceImage y la propiedad Visible en
False.
9. Establezca la propiedad Picture del control Image en una imagen de mapa de bits. Puede utilizar una de las imágenes
de la carpeta Mis imágenes.
10. Agregue un control Timer al formulario. Establezca la propiedad Enabled en False y la propiedad Interval en 25.
11. Haga doble clic en el formulario para abrir el Editor de código y escriba el código siguiente.

Option Explicit
Private LeftPos As Double

Private Sub ClearPictureBox_Click()


Picture1.Cls
End Sub

Private Sub ShowImage_Click()


LeftPos = 1
Me.Timer1.Enabled = True
End Sub

Private Sub Timer1_Timer()

If LeftPos <= 0 Then


Me.Timer1.Enabled = False
Picture1.Print "Visual Basic ROCKS!"
Else
LeftPos = LeftPos - 0.01
Picture1.Cls
Picture1.PaintPicture sourceImage, LeftPos * _
Picture1.Width, 0
End If
End Sub

12. Presione F5 para ejecutar la aplicación. Haga clic en los botones para observar el comportamiento y recorra el código
para ver cómo funciona.
13. En el menú Archivo, seleccione Guardar archivo como.
14. En el cuadro de diálogo Guardar archivo como, guarde el formulario como PicForm.frm y el proyecto como
Drawing.vbp.

Para ejecutar el Asistente para actualización


1. Abra Visual Basic 2005. En el menú Archivo, seleccione Abrir proyecto.
2. En el cuadro de diálogo Abrir proyecto, busque el archivo Drawing.vbp y ábralo.
Se iniciará el Asistente para actualización de Visual Basic. La primera página del asistente contiene una explicación de lo
que hará el asistente.
3. Haga clic en Next para ir a la segunda página del asistente. Esta página presenta opciones para la actualización; en este
caso, no está disponible ninguna opción.
4. Haga clic en Next para ir a la tercera página del asistente. Haga clic en Next para aceptar la ubicación predeterminada
para el nuevo proyecto o escriba una ubicación diferente. La ubicación predeterminada es una nueva carpeta
inmediatamente debajo de la carpeta del proyecto de Visual Basic 6.0.
Si se le pide que cree una nueva carpeta, elija Sí.
5. En la cuarta página del Asistente, haga clic en Next para iniciar la actualización.
Cuando termine la actualización, se cerrará el asistente y aparecerá el nuevo proyecto en el Explorador de soluciones.

Para ver los resultados de la actualización


1. En el Explorador de soluciones, seleccione _UpgradeReport.htm y haga doble clic en él para abrir el informe de
actualización.
Observe que el informe no muestra ninguna cuestión global que requiera atención; para PicForm.vb muestra seis errores
y ninguna advertencia.
Nota
Si hubiera advertencias, aparecerían también en la ventana Lista de tareas como elementos UPGRADE_WARNING. Las
advertencias corresponden a código que puede causar sutiles diferencias en el comportamiento de la aplicación en tie
mpo de ejecución. Si hace doble clic en UPGRADE_WARNING en la ventana Lista de tareas, irá directamente al código
que debe modificarse.

2. Haga clic en el signo más de la columna New Filename para expandir la columna PicForm.vb. Mostrará así una lista
detallada de los problemas de actualización del formulario.
Observe que los problemas se encuentran en tres ubicaciones diferentes: el procedimiento ClearPictureBox_Click, el
procedimiento Timer1_Timer y el diseño de formulario. Puede hacer clic en el vínculo Descripción para mostrar un
tema de Ayuda que explique cada problema. Los problemas de diseño, en este caso, no requieren atención; al consultar la
Ayuda comprobará que corresponden a dos propiedades del control PictureBox de Visual Basic 6.0 que no se pueden
asignar a propiedades equivalentes de Visual Basic 2005.
Para solucionar el error ClearPictureBox_Click
1. En el Explorador de soluciones, seleccione PicForm.vb. En el menú Ver, elija Código.
2. En el Editor de código, seleccione el procedimiento ClearPictureBox_Click.
Sugerencia
Al procedimiento se agrega un comentario UPGRADE_ISSUE. Si se desplaza al final del comentario, puede hacer clic en
el vínculo que muestra el tema de Ayuda asociado. Todas las cuestiones (excepto las de diseño) se agregan como come
ntarios de código durante la actualización, incluidos los comentarios UPGRADE_NOTE que explican lo que ocurrió dura
nte la actualización; éstos no aparecen en el informe de actualización.

3. Agregue el código siguiente al procedimiento ClearPictureBox_Click:


VB
Dim g As Graphics = Picture1.CreateGraphics()
g.Clear(Picture1.BackColor)
g.Dispose()

El único error del procedimiento original es la llamada al método Picture1.Cls(). En Visual Basic 2005, los controles
intrínsecos no proporcionan acceso directo a las superficies de diseño mediante métodos (como en Visual Basic 6.0).
Todas las operaciones gráficas se controlan con un objeto especial de tipo Graphics. Para tener acceso a la superficie de
diseño de un control, llame al método CreateGraphics() para obtener una instancia de un objeto Graphics.
4. Elimine o convierta en comentario la línea original, Picture1.Cls().

Para solucionar los errores Timer1_Timer


1. En el Editor de código, seleccione el procedimiento Timer1_Tick.
Nota
El evento Timer del control Timer de Visual Basic 6.0 se actualiza al evento Tick del componente Timer de Visual Basi
c 2005. El Informe de actualización muestra el nombre del evento antiguo; el Editor de código utiliza el nombre del eve
nto nuevo.

2. Al principio de la función, agregue el código siguiente:


VB
Dim g As Graphics = Picture1.CreateGraphics()

Como en el procedimiento anterior, los errores que aparecen aquí empiezan con la falta de un objeto Graphics.
3. Busque la primera UPGRADE_ISSUE, el método Picture1.Print. Agregue el código siguiente:
VB
g.DrawString("VB .NET ROCKS!", Me.Font, New SolidBrush( _
Color.Yellow), 0, 0)

El método DrawString del objeto Graphics reemplaza el método Print de Visual Basic 6.0. Donde el método Print
aceptaba un solo argumento Text, DrawString también acepta argumentos que especifican el objeto Font, un objeto
Brush que especifica un objeto Color y las coordenadas de inicio para dibujar el texto.
4. Elimine o convierta en comentario la línea original, Picture1.Print("Visual Basic ROCKS!").

5. Busque la siguiente UPGRADE_ISSUE, Picture1.Cls(). Reemplace el código por el siguiente:


VB
g.Clear(Picture1.BackColor)
6. Busque la última UPGRADE_ISSUE, Picture1.PaintPicture. Agregue el código siguiente:
VB
g.DrawImage(sourceImage.Image, CSng(LeftPos * Picture1.Size.Width), _
0)

En este caso, el método DrawImage de la clase Graphics reemplaza el método PaintPicture.


7. Elimine o convierta en comentario la línea original, Picture1.PaintPicture(sourceImage, LeftPos *
VB6.PixelsToTwipsX(Picture1.Width), 0).

8. Al final del procedimiento, agregue el código siguiente:


VB
g.Dispose()

El método Dispose es necesario para liberar los recursos de memoria asociados al objeto Graphics.
Para probar la aplicación
1. En el menú Depurar, haga clic en Iniciar.
Nota
si se le pide que guarde el archivo de la solución, haga clic en Guardar para guardar el archivo y ejecutar la aplicación.

2. Haga clic en el botón ShowImage.


Observará que la imagen parpadea al dibujarse. Esto se debe a que se borra toda el área antes de dibujar cada imagen
actualizada en la pantalla.
Modificar la aplicación
Aquí, la solución consiste en dibujar sólo las partes necesarias de la pantalla, en lugar del área completa representada por el
objeto Graphics. Deseará asegurarse de que cuando se dibuje la imagen en la pantalla, los píxeles de la pantalla que queden
de la última llamada a DrawImage() estén oscurecidos por el color del fondo. Dado que la imagen se mueve de izquierda a
derecha, sólo tendrá que oscurecer los píxeles adicionales a la derecha de la imagen.
Para solucionar el problema de parpadeo de la pantalla
1. En el procedimiento Timer1_Tick, reemplace el método g.Clear(Picture1.BackColor) por el código siguiente:
VB
Dim imageWidth As Integer = sourceImage.Image.Width
Dim imageHeight As Integer = sourceImage.Image.Height
Dim left As Double = imageWidth + (Picture1.Size.Width * LeftPos)

g.FillRectangle(New SolidBrush(Me.BackColor), _
New Rectangle(left, 0, 6, imageHeight))

En lugar del método Clear, utilice el método FillRectangle, utilizando el color del fondo para oscurecer los píxeles
restantes a la derecha de la imagen actual que se está dibujando. Para hacer esto, deberá calcular primero la coordenada
del extremo izquierdo del rectángulo, de lo que se ocupan las tres primeras líneas de código.
2. En el menú Depurar, haga clic en Iniciar.
3. Haga clic en el botón ShowImage.
Observará que la imagen ya no parpadea al moverse.
Aún queda un problema adicional que debe resolverse. Quizá haya notado que el mensaje mostrado en el control PictureBox
tiene un tamaño de fuente más pequeño que el original. Esto se debe a que la propiedad Font del control PictureBox de la
aplicación de Visual Basic 6.0 estaba definida como Arial Negrita 16 en tiempo de diseño. No hay ninguna propiedad Font
para el control PictureBox de Visual Basic 2005; en su lugar, se utiliza la fuente predeterminada (Me.Font) del formulario.
Puede remediar esto declarando un objeto Font nuevo.
Para corregir la fuente
1. En el procedimiento Timer1_Tick, agregue la siguiente declaración:
VB
Dim f As System.Drawing.Font = New System.Drawing.Font("Arial", _
16, FontStyle.Bold)

2. En la llamada a g.DrawString, cambie el parámetro de fuente de Me.Font a f.


3. En el menú Depurar, haga clic en Iniciar.
4. Haga clic en el botón ShowImage.
El texto aparece ahora con la fuente correcta.
Ahora que la aplicación está en las mismas condiciones que la aplicación original para Visual Basic 6.0, agregará algo de
código para mejorarla. Después de todo, no hay que actualizar la aplicación si no desea sacar partido de Visual Basic 2005.
En el paso siguiente, agregará funcionalidad para hacer que el formulario se desvanezca lentamente al cerrarse.
Nota
El efecto de desvanecimiento no resulta visible en pantallas de 256 colores; deberá establecer la profundidad de color en Col
or de alta densidad o Color verdadero para ver los resultados. La propiedad Opacity funciona únicamente en Windows XP.

Para mejorar la aplicación


1. En el Editor de código, seleccione la lista desplegable Nombre de clase y elija (Eventos de Form1).
2. En el cuadro de lista desplegable Nombre de método, seleccione el evento FormClosing.
3. En el procedimiento Form1_FormClosing, agregue el código siguiente:
VB
Dim i As Single
For i = 1 To 0 Step -0.1
Me.Opacity = i
Application.DoEvents()
System.Threading.Thread.Sleep(100)
Next

4. En el menú Depurar, haga clic en Iniciar.


5. Cierre el formulario y observe cómo desaparece gradualmente.
Para controlar la velocidad a la que desaparece, puede aumentar el tamaño del paso (o reducir el retardo Sleep).
Vea también
Referencia
Información general sobre formularios Windows Forms
Conceptos
Gráficos para usuarios de Visual Basic 6.0
Otros recursos
Actualizar desde Visual Basic 6.0
Referencia de Visual Basic

Referencia de actualización de Visual Basic 6.0


Los temas de la siguiente sección de la Tabla de contenido son temas de referencia relacionados con el Asistente para
actualización y el espacio de nombres VisualBasic.Compatibility.
Vea también
Otros recursos
Actualizar aplicaciones creadas en versiones anteriores de Visual Basic
Referencia de Visual Basic

Asistente para actualizar


Utilice el Asistente para actualización para actualizar los proyectos Visual Basic 6.0 a Visual Basic 2005. crea un proyecto nuevo,
copia todos los archivos del proyecto original al nuevo y los modifica si es necesario. A continuación, genera un informe en el
que se detallan las operaciones realizadas y los pasos que deberán adoptarse para finalizar la actualización.
Para activar el Asistente para actualizar, basta con abrir cualquier archivo de proyecto de Visual Basic 6.0 (.vbp) en Visual Basic
2005.
Lista de elementos de la interfaz de usuario
El Asistente para actualizar cuenta con las siguientes opciones.
¿A qué tipo de proyecto desea que se actualice éste?
Si el proyecto de Visual Basic 6.0 es un archivo EXE de ActiveX o un documento EXE de ActiveX, puede actualizarlo a un
archivo .exe o .dll. Para los proyectos de otro tipo, la opción correcta aparecerá ya seleccionada y no podrá cambiarse.
¿Dónde desea crear el nuevo proyecto?
Especifica la ubicación del nuevo proyecto, que de forma predeterminada se coloca en un directorio situado directamente
debajo del proyecto de Visual Basic 6.0 El nuevo proyecto se denomina ProjectName.NET, donde ProjectName es el nombre
del proyecto que se actualiza.
Vea también
Conceptos
Asistente para actualización de Visual Basic
Otros recursos
Actualizar aplicaciones creadas en versiones anteriores de Visual Basic
Referencia de Visual Basic

Referencia al espacio de nombres VisualBasic.Compatibility


Las funciones y los objetos del espacio de nombres VisualBasic.Compatibility se proporcionan para su uso con las
herramientas de actualización de Visual Basic 6.0 a Visual Basic 2005. En la mayoría de los casos, duplican la funcionalidad que
se obtiene con otras partes de .NET Framework; únicamente son necesarios cuando el modelo de código de Visual Basic 6.0 es
significativamente distinto de la implementación en .NET.
Funciones y objetos en el espacio de nombres
Las tablas siguientes muestran funciones y objetos del espacio de nombres VisualBasic.Compatibility. No se incluyen otras
funciones y objetos relacionados con el espacio de nombres Microsoft.Compatibility.Data, ya que son equivalentes al
enlace de datos ADO de Visual Basic 6.0.
Funciones de VisualBasic.Compatibility
Función Descripción
CopyArray Duplica la funcionalidad de Visual Basic 6.0 de asignar una matriz a una variante.

CursorToIPicture Se utiliza en la conversión de formatos.

Eqv Duplica el operador Eqv (equivalencia) de Visual Basic 6.0.

FontChangeBold Se utiliza para convertir las fuentes de Visual Basic 6.0 en objetos Font de Visual Basic 2005.

FontChangeGdiCha Se utiliza para convertir las fuentes de Visual Basic 6.0 en objetos Font de Visual Basic 2005.
rSet

FontChangeItalic Se utiliza para convertir las fuentes de Visual Basic 6.0 en objetos Font de Visual Basic 2005.

FontChangeName Se utiliza para convertir las fuentes de Visual Basic 6.0 en objetos Font de Visual Basic 2005.

FontChangeSize Se utiliza para convertir las fuentes de Visual Basic 6.0 en objetos Font de Visual Basic 2005.

FontChangeStrikeo Se utiliza para convertir las fuentes de Visual Basic 6.0 en objetos Font de Visual Basic 2005.
ut

FontChangeUnderli Se utiliza para convertir las fuentes de Visual Basic 6.0 en objetos Font de Visual Basic 2005.
ne

FontToIFont Se utiliza en la conversión de formatos.

Format Duplica la función Format de Visual Basic 6.0.

FromPixelsX Se utiliza en la conversión de coordenadas.

FromPixelsY Se utiliza en la conversión de coordenadas.

FromPixelsUserHei Se utiliza en la conversión de coordenadas.


ght

FromPixelsUserWid Se utiliza en la conversión de coordenadas.


th

FromPixelsUserX Se utiliza en la conversión de coordenadas.

FromPixelsUserY Se utiliza en la conversión de coordenadas.


GetActiveControl Duplica la propiedad Screen.ActiveControl de Visual Basic 6.0.

GetCancel Duplica la funcionalidad de la propiedad Cancel de CommandButton de Visual Basic 6.0.

GetDefault Duplica la funcionalidad de la propiedad Default de CommandButton de Visual Basic 6.0.

GetEXEName Duplica la propiedad App.EXEName de Visual Basic 6.0.

GetHInstance Duplica la propiedad App.HInstance de Visual Basic 6.0.

GetItemData Duplica la funcionalidad de la propiedad ItemData de un ListBox o ComboBox de Visual Basic 6.0.

GetItemString Duplica la funcionalidad de recuperar un valor de una lista en un ListBox o ComboBox de Visual Basic
6.0.

GetPath Duplica la propiedad App.Path de Visual Basic 6.0.

IconToIpicture Se utiliza en la conversión de formatos.

IFontToFont Se utiliza en la conversión de formatos.

ImageToIPicture Se utiliza en la conversión de formatos.

ImageToIPictureDis Se utiliza en la conversión de formatos.


p

Imp Duplica el operador Imp (implicación) de Visual Basic 6.0.

IPictureDispToImag Se utiliza en la conversión de formatos.


e

IPictureToImage Se utiliza en la conversión de formatos.

LoadResData Duplica la función LoadResData de Visual Basic 6.0.

LoadResPicture Duplica la función LoadResPicture de Visual Basic 6.0.

LoadResString Duplica la función LoadResString de Visual Basic 6.0.

PixelsToTwipsX Se utiliza en la conversión de coordenadas.

PixelsToTwipsY Se utiliza en la conversión de coordenadas.

SendKeys Duplica la función SendKeys de Visual Basic 6.0.

SetCancel Duplica la funcionalidad de la propiedad Cancel de CommandButton de Visual Basic 6.0.

SetDefault Duplica la funcionalidad de la propiedad Default de CommandButton de Visual Basic 6.0.

SetItemData Duplica la funcionalidad de la propiedad ItemData de un ListBox o ComboBox de Visual Basic 6.0.

SetItemString Duplica la funcionalidad de establecer un valor en una lista en un ListBox o ComboBox de Visual Basic
6.0.
SetResourceBaseNa Se utiliza con las funciones LoadRes cuando un archivo de recursos utiliza una convención de nomencl
me atura no estándar.

ShowForm Duplica la funcionalidad del método Show de un formulario de Visual Basic 6.0.

TabLayout Se utiliza al convertir instrucciones Debug.Print que contienen las palabras clave Tab o Spc.

ToPixelsX Se utiliza en la conversión de coordenadas.

ToPixelsY Se utiliza en la conversión de coordenadas.

ToPixelsUserHeight Se utiliza en la conversión de coordenadas.

ToPixelsUserWidth Se utiliza en la conversión de coordenadas.

ToPixelsUserX Se utiliza en la conversión de coordenadas.

ToPixelsUserY Se utiliza en la conversión de coordenadas.

TwipsPerPixelX Duplica la propiedad Screen.TwipsPerPixelX de Visual Basic.

TwipsPerPixelY Duplica la propiedad Screen.TwipsPerPixelY de Visual Basic.

TwipsToPixelsX Se utiliza en la conversión de coordenadas.

TwipsToPixelsY Se utiliza en la conversión de coordenadas.

ValidateControls Duplica la funcionalidad del método ValidateControls de un formulario de Visual Basic 6.0.

WhatsThisMode Duplica la funcionalidad del método WhatsThisMode de un formulario de Visual Basic 6.0.

Zorder Se utiliza para convertir el orden z de los controles.


Objetos de VisualBasic.Compatibility
Objeto Descripción
BaseControlArray Clase primaria para la emulación de las matrices de controles de Visual Basic 6.0.

BaseOcxArray Clase primaria para las matrices emuladas de controles ActiveX.

ButtonArray Emula una matriz de control de controles CommandButton de Visual Basic 6.0.

CheckBoxArray Emula una matriz de control de controles CheckBox de Visual Basic 6.0.

CheckedListBoxArr Emula una matriz de control de controles ListBox de Visual Basic 6.0 con la propiedad Style establecida
ay en Checked.

ComboBoxArray Emula una matriz de control de controles ComboBox de Visual Basic 6.0.

DirListBox Emula un control DirListBox de Visual Basic 6.0.

DirListBoxArray Emula una matriz de control de controles DirListBox de Visual Basic 6.0.

DriveListBox Emula un control DriveListBox de Visual Basic 6.0.


DriveListBoxArray Emula una matriz de control de controles DriveListBox de Visual Basic 6.0.

FileListBox Emula un control FileListBox de Visual Basic 6.0.

FileListBoxArray Emula una matriz de control de controles FileListBox de Visual Basic 6.0.

FixedLengthString Emula las cadenas de longitud fija de Visual Basic 6.0.

GroupBoxArray Emula una matriz de control de controles Frame de Visual Basic 6.0.

HScrollBarArray Emula una matriz de control de controles HScrollBar de Visual Basic 6.0.

LabelArray Emula una matriz de control de controles Label de Visual Basic 6.0.

ListBoxArray Emula una matriz de control de controles ListBox de Visual Basic 6.0.

ListBoxItem Emula la propiedad ItemData de un control ListBox.

MenuItemArray Emula una matriz de control de controles Menu de Visual Basic 6.0.

PanelArray Emula una matriz de control de controles PictureBox de Visual Basic 6.0 que contiene controles secunda
rios.

PictureBoxArray Emula una matriz de control de controles PictureBox de Visual Basic 6.0.

RadioButtonArray Emula una matriz de control de controles OptionButton de Visual Basic 6.0.

TabControlArray Emula una matriz de control de controles TabStrip de Visual Basic 6.0.

TextBoxArray Emula una matriz de control de controles TextBox de Visual Basic 6.0.

TimerArray Emula una matriz de control de controles Timer de Visual Basic 6.0.

VscrollBarArray Emula una matriz de control de controles VScrollBar de Visual Basic 6.0.
Vea también
Conceptos
Biblioteca de compatibilidad de Visual Basic 6.0
Otros recursos
Ayuda para usuarios de Visual Basic 6.0
Conceptos del lenguaje Visual Basic

Desarrollo de aplicaciones con Visual Basic


Esta sección trata sobre documentación conceptual para el lenguaje Visual Basic.
En esta sección
Utilizar el Editor de Visual Basic
Contiene ayuda sobre las características del editor de Visual Basic, como Fragmentos de código de IntelliSense,
Propiedades del proyecto y sobre la creación de documentación XML para Visual Basic.
Seguridad y desarrollo en Visual Basic
Describe las tres áreas habituales en las que debe consultar los problemas de seguridad.
Programar en Visual Basic
Abarca varios temas de programación.
Desarrollo con la función My
Describe una nueva característica denominada My, que proporciona acceso a la información y a las instancias de objeto
predeterminadas relacionadas con una aplicación y su entorno en tiempo de ejecución.
Obtener acceso a datos en aplicaciones de Visual Basic
Contiene ayuda sobre cómo tener acceso a datos en Visual Basic.
Depurar la aplicación de Visual Basic
Proporciona los punteros a la documentación para las características de depuración integradas en Visual Studio.
Control de excepciones y errores en Visual Basic
Contiene ayuda sobre el control estructurado y no estructurado de excepciones, así como sobre la configuración de
advertencias, la Corrección automática de compilación inteligente y los tipos de errores.
Implementar la aplicación
Proporciona información general sobre las características de implementación en .NET Framework y Visual Studio.
Crear y utilizar componentes en Visual Basic
Define el término componente y describe cómo y cuándo crear componentes.
Continuar con Visual Basic
Proporciona información general sobre diversas áreas de temas, como formularios, operaciones de red y servicios Web.
Personalizar proyectos y ampliar My con Visual Basic
Describe cómo se pueden personalizar las plantillas del proyecto para que proporcionen objetos My adicionales.
Secciones relacionadas
Guía de programación en Visual Basic
Recorre los elementos esenciales de programación con Visual Basic.
Referencia de Visual Basic
Contiene documentación de referencia para el lenguaje Visual Basic.
Conceptos del lenguaje Visual Basic

Utilizar el Editor de Visual Basic


Además de las características de interfaz de usuario principal que proporciona Visual Studio, Visual Basic agrega algunas más
para ayudar con la productividad y facilidad de uso.
En esta sección
Valores de configuración de Visual Basic
Describe cómo optimizar su experiencia de trabajo en el entorno de desarrollo.
Fragmentos de código de IntelliSense de Visual Basic
Presenta una biblioteca de código a la que puede tener acceso desde dentro del entorno de desarrollo.
Cómo: Editar atributos de código
Explica cómo utilizar la ventana Propiedades para aplicar y editar los atributos de sus tipos y miembros.
Cambiar nombre (Cuadro de diálogo) (Visual Basic)
Describe el mecanismo usado para cambiar el nombre de los identificadores usados en su código.
Teclas de método abreviado predeterminadas de Visual Basic 6.0
Incluye vínculos a distintas páginas que presentan listas de las teclas de método abreviado.
Ayuda para controladores de eventos en código de Visual Basic
Muestra cómo consultar la Ayuda de un controlador de eventos.
Cómo: Compilar y ejecutar un proyecto en Visual Basic
Describe las opciones de compilación y ejecución que están a su disposición en el entorno de desarrollo.
Referencia
Editar y continuar (Visual Basic)
Explica la característica de depuración que le permite realizar los cambios en su código mientras se está ejecutando en modo
de interrupción.
Corrección automática de la compilación inteligente
Describe cómo sugiere esta característica correcciones cuando se producen errores, permitiéndole elegir una solución que
aplicar al código.
Configurar advertencias en Visual Basic
Describe cómo puede desactivar las advertencias o hacer que se traten como mensajes de error.
Conceptos del lenguaje Visual Basic

Valores de configuración de Visual Basic


La configuración de Visual Basic está diseñada para optimizar la experiencia del usuario y maximizar la productividad de los
desarrolladores de Visual Basic. Forma parte de la característica Valores de configuración de Visual Studio, la cual permite
personalizar y guardar la configuración del entorno integrado de desarrollo (IDE) de Visual Studio.
También se puede trasladar o volver a cargar su configuración de IDE en otros equipos. Para obtener más información, vea
Cómo: Compartir configuraciones entre equipos.
Windows y vistas
Característica ¿Mostrado de manera predete Notas
rminada?
Vista de clases No Oculta los Tipos y miembros ocult
os

Ventana de comandos No

Ventana Ayuda dinámica No No aparece cuando se presiona F1.

Inmediato (Ventana) Sí, al iniciar la depuración.

Examinador de objetos No Muestra, de manera predeterminada


:
Espacios de nombres
Miembros públicos
Miembros heredados

Resultados (Ventana) Sí, al iniciar la generación.

Propiedades (Ventana) Sí

Explorador de soluciones Sí

Explorador de servidores/Explorador de bases de datos No Muestra conexiones de datos y los s


ervicios del sistema disponibles.

Página de inicio Sí Aparece la primera vez que se inicia


el IDE. Se puede personalizar.

Lista de tareas (Visual Studio) Sí, cuando se producen errores d


e compilación o advertencias.

Cuadro de herramientas Sí Muestra los controles y componente


s en orden alfabético.

Además, los elementos siguientes tienen ciertos comportamientos habilitados cuando se selecciona Configuración de
desarrollo de Visual Basic.
Cuadros de diálogo
Característica Comportamiento
Nuevo proyecto (Cuadro de diálogo) Cuando se instalan otras plataformas en el equipo, el IDE habilita el cuadro combi
nado que permite especificar la plataforma de destino.
Opciones (Cuadro de diálogo): Visual Studio Visual Basic habilita páginas Opciones simplificadas. Haga clic en la casilla de ver
ificación Mostrar todas las configuraciones para ver la lista completa de opcio
nes.

Teclado
Característica Comportamiento
Teclas de método abreviado predeterminadas de Visual Basic 6.0 Admite la asignación de teclado típica de Visual Basic 6.
Elementos IDE misceláneos
Característica Comportamiento
Información sobre herramientas Aparece para todos los elementos de menú y botones de barras de
herramientas cuando se sitúa el puntero del mouse sobre ellos.

Fragmentos de código de IntelliSense de Visual Basic Incluye una biblioteca de fragmentos de código que están listos para ser
insertados en su aplicación.

Opciones de IntelliSense específicas de Visual Basic Proporciona todas las características de IntelliSense con algunas m
ejoras de productividad para los desarrolladores de Visual Basic.
Vea también
Tareas
Cómo: Personalizar la Ayuda dinámica
Cómo: Cambiar configuraciones seleccionadas
Cómo: Especificar las opciones de configuración para un equipo
Referencia
Importar y exportar configuraciones, Entorno, Opciones (Cuadro de diálogo)
Otros recursos
Asistente para importar y exportar configuraciones
Ejemplos de Visual Basic

Fragmentos de código de IntelliSense de Visual Basic


Visual Basic incluye una biblioteca formada por varios cientos de elementos de código que se denominan fragmentos de
código de IntelliSense y que están listos para insertarse en la aplicación. Cada miniprograma realiza una tarea de
programación completa, como crear una excepción personalizada, enviar un mensaje de correo electrónico o dibujar un
círculo. Puede insertar un miniprograma en el código fuente con unos pocos clics del mouse (ratón). Para obtener más
información, vea Cómo: Insertar fragmentos de código en el código (Visual Basic). También puede crear miniprogramas
propios que satisfagan sus necesidades comerciales, agregarlos a la biblioteca y utilizarlos más adelante cuando los necesite.
Para obtener más información, vea Crear y utilizar fragmentos de código de IntelliSense.
Una herramienta de productividad para los usuarios de Visual Basic
Estos miniprogramas aumentan su productividad al reducir el volumen de tiempo que se invierte en buscar ejemplos de
código y en aprender a utilizar características desconocidas, y al permitir que el código se reutilice.
La biblioteca de códigos admite las funciones siguientes:
Insertar uno de los fragmentos de código en el Editor de código.
Crear nuevas tareas que podrá reutilizar en sus proyectos.
Crear nuevas tareas para compartirlas con su grupo de trabajo y sus compañeros.
Editar las tareas.
Descargar más tareas procedentes de otros fabricantes.
Estos bloques de código están disponibles a lo largo de Visual Studio:
Puede agregarlos a través del menú contextual del Editor de código.
Puede arrastrar los archivos de código XML del Explorador de Windows a su archivo de código fuente.

Vea también
Tareas
Cómo: Modificar fragmentos de código existentes
Cómo: Compartir fragmentos de código con otros desarrolladores
Cómo: Eliminar un fragmento de código agregado anteriormente
Cómo: Asignar un nombre de acceso directo en un fragmento de código
Solucionar problemas con fragmentos de código
Cómo: Administrar fragmentos de código
Cómo: Buscar fragmentos de código en línea
Conceptos
Procedimientos recomendados para utilizar fragmentos de código de IntelliSense
Consideraciones sobre seguridad en la utilización de fragmentos de código
Ejemplos de Visual Basic

Cómo: Insertar fragmentos de código en el código (Visual


Basic)
Puede insertar fragmentos de código de IntelliSense utilizando las herramientas de exploración del Editor de código o
arrastrando archivos desde el Explorador de Windows. Si conoce el nombre del fragmento de código que desea insertar,
puede hacerlo escribiendo su acceso directo seguido de la tecla TAB. Si necesita buscar un fragmento de código adecuado,
puede utilizar el selector de fragmentos de código que proporciona listas clasificadas por categorías de fragmentos de código
en las que elegir.
Después de insertar el fragmento de código, modifíquelo para que funcione en la aplicación. Por ejemplo, es posible que un
fragmento de código determinado inserte un nuevo método en la aplicación. Si insertara este nuevo método dentro de un
método existente, debería eliminar algunas líneas de código adicionales para resolver los errores del compilador. También es
posible que desee cambiar algunos mensajes al usuario o nombres de archivo encontrados en el fragmento de código. Para
obtener más información, vea Cómo: Personalizar fragmentos de código ya insertados en su código.
Para insertar un fragmento de código mediante exploración en el Editor de código
1. Haga clic con el botón secundario en el Editor de código en el que desea insertar el código.
2. Haga clic en Insertar fragmento de código en el menú contextual. Aparece el selector de fragmentos de código de
IntelliSense.
Como alternativa a los pasos 1 y 2, escriba un signo de interrogación seguido de la tecla TAB en el Editor de código
para abrir el selector de fragmentos de código.
3. Desplácese a la tarea elegida y haga clic en ella. El fragmento de código se inserta en el código.
Una vez agregado el fragmento al código, es posible que haya secciones que requieran personalización, como la
sustitución de nombres de variables por otros nombres más adecuados. El editor le ayuda en este proceso. Para obtener
más información, vea Cómo: Personalizar fragmentos de código ya insertados en su código.
Los fragmentos de código que aparecen en el selector se almacenan como archivos en subcarpetas de ubicaciones de
archivos concretas. Se pueden examinar las ubicaciones de archivos y cambiarlas mediante
Administrador de fragmentos de código. Hay un archivo para cada fragmento de código y la extensión de nombre de
archivo para los archivos es .snippet. Los fragmentos de código creados o adquiridos de otras fuentes se pueden
almacenar en cualquier parte del sistema de archivos, aunque no aparecen en el menú contextual a menos que residan
en una de las carpetas especificadas. Para obtener más información, vea el administrador de fragmentos de código.

Para insertar un fragmento de código si conoce su acceso directo


Escriba el acceso directo del fragmento de código en el Editor de código seguido de la tecla TAB. Se insertará el
fragmento de código.
O bien
Escriba los primeros caracteres del nombre de acceso directo del fragmento de código en el Editor de código, seguido
de un signo de interrogación y TAB. Aparecerá un selector con la lista de los fragmentos de código cuyos accesos
directos comienzan por los caracteres que ha escrito. Cuando se desplace por la lista, el título del acceso directo
seleccionado aparecerá en forma de información sobre herramientas.
Hay dos maneras de buscar el nombre de acceso directo para un fragmento de código:
Utilice Administrador de fragmentos de código para ver los accesos directos de todos los fragmentos de código.
El acceso directo se muestra como parte de la información sobre herramientas de descripción en el selector de
fragmentos de código.
Para insertar un fragmento en el código mediante el Explorador de Windows
1. Abra el Explorador de Windows.
2. Desplácese en el Explorador de Windows a la carpeta que contiene el archivo que desea insertar. Si elige la ubicación
predeterminada para la instalación de Visual Studio 2005, los fragmentos de código se almacenan en C:\Archivos de
programa\Microsoft Visual Studio 8\Vb. Si elige la ubicación predeterminada para la instalación de Visual Basic 2005
Express, los fragmentos de código se almacenan en C:\Archivos de programa\Microsoft Visual Studio
8\Common7\IDE\VBExpress\Snippets\1033.
3. Arrastre el archivo del Explorador de Windows al lugar del código en el que desea insertarlo.
Vea también
Tareas
Cómo: Buscar fragmentos de código en línea
Referencia
Crear y utilizar fragmentos de código de IntelliSense
Conceptos
Fragmentos de código de IntelliSense de Visual Basic
Consideraciones sobre seguridad en la utilización de fragmentos de código
Procedimientos recomendados para utilizar fragmentos de código de IntelliSense
Ejemplos de Visual Basic

Cómo: Personalizar fragmentos de código ya insertados en su


código
Cuando agrega un miniprograma al código, el fragmento de código insertado contiene uno o varios puntos de reemplazo
resaltados en el código. Puede decidir si desea cambiar o no cada punto de reemplazo. Si sitúa el puntero del mouse (ratón)
sobre el punto de reemplazo, aparece una información sobre herramientas en la que se explica cómo debe cambiar el código.
El Editor de código reconoce un miniprograma como una unidad independiente del resto del código hasta que se cierra el
archivo de código fuente. Por tanto, los puntos de reemplazo permanecen resaltados hasta que se cierra el archivo de código
fuente.
Para personalizar el código insertado en la aplicación
1. Utilice la tecla TAB para desplazarse de un punto de reemplazo al siguiente. Utilice MAYÚS+TAB para desplazarse a un
punto de reemplazo anterior.
2. Haga clic en CTRL+BARRA ESPACIADORA para llamar a IntelliSense.
3. Seleccione un elemento en la lista o escriba la opción que desee.
4. Si aún hay errores de compilación en el código, deberá efectuar otros cambios en el código fuente. Por ejemplo, si la
tarea está buscando un nodo en un control TreeView denominado TreeView1, deberá agregar un control TreeView
denominado TreeView1 al formulario.

Vea también
Tareas
Cómo: Insertar fragmentos de código en el código (Visual Basic)
Referencia
Crear y utilizar fragmentos de código de IntelliSense
Conceptos
Fragmentos de código de IntelliSense de Visual Basic
Consideraciones sobre seguridad en la utilización de fragmentos de código
Procedimientos recomendados para utilizar fragmentos de código de IntelliSense
Ejemplos de Visual Basic

Consideraciones sobre seguridad en la utilización de


fragmentos de código
Los fragmentos de código de IntelliSense instalados por Visual Studio no constituyen por sí mismos un peligro para la
seguridad. Dependiendo de dónde se utilicen y cómo se modifiquen, pueden generar riesgos para la seguridad en su
aplicación. Los fragmentos de código descargados de Internet se deben tratar como cualquier otro contenido descargado.
Fragmentos de código de Internet
Al descargar archivos de fragmentos de código de Internet, tenga en cuenta lo siguiente:
Una extensión de archivo de .snippet no garantiza que el archivo contenga XML de texto sin formato. Para mayor
seguridad, descargue de sitios de confianza y utilice software antivirus actualizado.
La dirección URL de la Ayuda que forma parte del archivo de fragmentos de código puede ejecutar potencialmente un
archivo de secuencias de comandos malintencionadas o mostrar un sitio Web ofensivo. La dirección URL de la Ayuda no
aparece en el Editor de código al insertar el fragmento de código, pero es visible si edita el archivo de fragmentos de
código en el Editor XML u otro editor como Bloc de notas.
El propio código podría contener código que puede dañar su sistema si lo ejecuta. Lea cuidadosamente el origen antes
de ejecutarlo. Parte del código puede estar en secciones #Region (Directiva) contraídas. Expanda estas secciones para leer
el código.
El fragmento de código puede contener referencias. Estas referencias se agregan automáticamente al proyecto y se
pueden cargar desde cualquier parte de su sistema. Estas referencias se pueden haber descargado en su equipo desde el
sitio del que descargó el fragmento de código. El fragmento de código puede realizar a continuación una llamada a un
método de la referencia que ejecuta el código malintencionado. Para protegerse contra este tipo de ataques, lea
cuidadosamente el archivo de fragmentos de código antes de insertar los fragmentos y descargue desde sitios de
confianza.
Seguridad para todos los fragmentos de código
La seguridad de un fragmento de código depende de dónde se utilice en el código fuente y cómo se modifique una vez que
esté en el código. La lista siguiente contiene algunas áreas que se deben tener en cuenta:
Acceso a archivos y bases de datos
Seguridad de acceso a código
Protección de recursos (como registros de eventos, Registro)
Almacenamiento de secretos
Comprobación de entradas
Transmisión de datos a las tecnologías de secuencias de comandos
Para obtener más información, vea Proteger aplicaciones.
Vea también
Tareas
Cómo: Buscar fragmentos de código en línea
Referencia
Crear y utilizar fragmentos de código de IntelliSense
Conceptos
Proteger aplicaciones
Ejemplos de Visual Basic

Procedimientos recomendados para utilizar fragmentos de


código de IntelliSense
El código de cada fragmento de código de IntelliSense muestra sólo una forma básica de lograr una tarea. En la mayoría de las
aplicaciones, el código tendrá que modificarse para ajustarse a la aplicación. En este tema se describen algunas modificaciones
comunes que deberían realizarse en el código.
Controlar las excepciones
Normalmente, si el código contiene un bloque Try…Catch, el código detectará y producirá de nuevo todas las excepciones. Es
posible que ésta no sea la elección más adecuada para su proyecto. Existen varias formas de responder a cada excepción.
Algunas acciones posibles son:
Agregar código a cada bloque Catch para la acción seleccionada.
No hacer nada y eliminar el código que aparece en el bloque Catch. Esto hace que la aplicación omita el error. Es
improbable que la aplicación se recupere airosamente si utiliza este planteamiento.
Recibir más datos del usuario para intentar corregir la condición.
Durante la ejecución del bloque Try, deshacer cualquier cambio realizado en los datos de la aplicación antes de que se
produjera la excepción.
Volver a producir la excepción en el código de llamada.
Producir una excepción definida para esta aplicación.
Eliminar la instrucción Catch de esa excepción y permitir que el método de llamada la controle. Esto resulta
especialmente conveniente si la excepción no es relevante para la tarea.
Agregar bloques Catch adicionales al código para detectar tipos específicos de excepciones que se desea controlar.
Agregar un bloque Finally para aplicar el código que se desea ejecutar después de los bloques Try y Catch.
Reemplazar cadenas
Si el código contiene un valor de cadena, normalmente se trata de una cadena concreta, como "c:\filename.txt." Esta cadena
incluida en el código resulta útil a efectos de la demostración, pero es probable que no sea una cadena correcta para la
aplicación. Entre los orígenes posibles de cadenas en la aplicación se incluyen:
Una variable de cadena.
Un método o propiedad que devuelve una cadena, como la función InputBox.
Una cadena de un control de formularios Windows Forms, como TextBox o ComboBox.
Ubicaciones de archivos
La mayoría de los nombres de archivo que aparecen en el código se muestran como si estuvieran en Mis documentos o en
C:\. Al reemplazar las ubicaciones de los archivos, deben tenerse en cuenta algunas consideraciones:
Encontrar una ubicación accesible. Los usuarios no pueden obtener acceso a la carpeta \Archivos de programa del
equipo, de modo que es posible que el programa no funcione si almacena los archivos con los archivos de la aplicación.
Encontrar una ubicación segura. Los archivos almacenados en la carpeta raíz (C: \) no están seguros. Para los datos de la
aplicación, recomendamos la carpeta \Datos de programa. Para los datos de cada usuario, la aplicación puede crear un
archivo en la carpeta \Mis documentos.
Utilizar un nombre de archivo válido. Puede utilizar OpenFileDialog (Componente, formularios Windows Forms) y
SaveFileDialog (Componente, formularios Windows Forms) para reducir la probabilidad de crear nombres de archivo no
válidos. Tenga en cuenta que en el período comprendido entre el momento en que el usuario selecciona el archivo y el
momento en que el código manipula el archivo, este archivo puede eliminarse. Además, es posible que el usuario no
tenga los permisos para escribir en el archivo.
Controles y componentes
Los nombres de los controles y componentes a los que se hace referencia en el código normalmente tienen un nombre de
diseñador predeterminado , como Button1 o TreeView1. Esto pone de relieve el tipo de control que se muestra, pero no puede
ser un nombre utilizado en la aplicación.
Ausencia de código
Algunos miniprogramas sólo muestran una estructura de lenguaje vacía, como un bloque Try…Catch. Otro caso común es
una variable de validación, como IsValid, que de manera predeterminada se establece en True. El código proporcionado se
compilará y ejecutará, pero no tendrá ninguna funcionalidad. En estos ejemplos, necesitará agregar el código de la tarea.
Seguridad
Lo seguro que sea un miniprograma depende de en qué parte del código fuente se utilice y de cómo se modifique una vez que
está en el código. La lista siguiente contiene algunas de las áreas que deben tenerse en cuenta.
Acceso a archivos y bases de datos
Seguridad de acceso a código
Protección de recursos (como registros de eventos, Registro)
Almacenamiento de secretos
Comprobación de entradas
Transferencia de datos a tecnologías de secuencias de comandos
Para obtener más información, vea Consideraciones sobre seguridad en la utilización de fragmentos de código y
Proteger aplicaciones.
Vea también
Tareas
Cómo: Insertar fragmentos de código en el código (Visual Basic)
Referencia
Crear y utilizar fragmentos de código de IntelliSense
Conceptos
Fragmentos de código de IntelliSense de Visual Basic
Consideraciones sobre seguridad en la utilización de fragmentos de código
Proteger aplicaciones
Ejemplos de Visual Basic

Solucionar problemas con fragmentos de código


Hay dos problemas que se producen habitualmente con los fragmentos de código de IntelliSense: un archivo del
miniprograma está dañado o el contenido del archivo del miniprograma no es válido.
Problemas comunes
El miniprograma no se puede arrastrar desde el Explorador de Windows hasta un archivo de código fuente de Visual Studio
El código XML del archivo del miniprograma puede estar dañado. El Editor XML de Visual Studio puede buscar los
problemas en la estructura XML.
El archivo del miniprograma no puede ajustarse al esquema del miniprograma. El Editor XML de Visual Studio puede
buscar los problemas en la estructura XML.
El código tiene errores de compilación que no aparecen resaltados
Quizás falte una referencia de proyecto. Examine la documentación sobre el miniprograma. Si la referencia no se
encuentra en el equipo, deberá instalarla. Al insertar un miniprograma, debe agregar al proyecto todas las referencias
necesarias. Si el miniprograma no contiene la información de referencia, se puede notificar al creador del miniprograma
como un error.
Es posible que una variable no esté definida. Las variables indefinidas de un miniprograma deberían aparecer resaltadas.
Si esto no ocurre, se le puede notificar al creador del miniprograma como un error.
Vea también
Referencia
Crear y utilizar fragmentos de código de IntelliSense
Conceptos del lenguaje Visual Basic

Cómo: Editar atributos de código


Cuando esté en el Editor de código de Visual Basic, puede utilizar la ventana Propiedades para aplicar y editar atributos para
tipos y miembros. Los atributos se enumeran en la ventana Propiedades se pueden aplicar estableciendo el atributo en True
o la propiedad Apply del atributo en True. Después de aplicar los atributos, puede modificarlos editando las propiedades
mostradas en la ventana Propiedades. Para obtener más información, vea Atributos en Visual Basic.
Para aplicar un nuevo atributo
1. Busque el atributo deseado en la ventana Propiedades.
2. Si no aparece el atributo que desea, debe aplicar el atributo manualmente en el código. Para obtener más información,
vea Aplicación de los atributos.
3. Siga uno de los procedimientos siguientes:
Si el atributo tiene propiedades, establezca la propiedad Apply en True.
O bien,
Si el atributo no tiene propiedades, establezca el atributo en True.
Vea también
Referencia
Propiedades (Ventana)
Conceptos
Información general sobre los atributos de Visual Basic
Usos comunes de los atributos
Atributos utilizados en Visual Basic
Aplicación de los atributos
Conceptos del lenguaje Visual Basic

Cambiar nombre (Cuadro de diálogo) (Visual Basic)


Utilice el cuadro de diálogo integrado Cambiar nombre de Visual Basic para cambiar el nombre de los identificadores usados
en el código para símbolos como campos, variables locales, métodos, espacios de nombres, propiedades y tipos. Para abrir el
cuadro de diálogo Cambiar nombre, haga clic con el botón secundario del mouse (ratón) en la declaración del elemento.
Nuevo nombre
Especifica el nuevo nombre para el elemento de código.
Ubicación
Identifica el espacio de nombres en el que buscar al realizar la operación de cambio de nombre.
Operaciones de cambio de nombre
El cuadro de diálogo Cambiar nombre realiza operaciones de cambio de nombre ligeramente distintas, dependiendo del tipo
del elemento cuyo nombre se va a cambiar.
Tipo de el Operación de cambio de nombre
emento
Clase Cambia todas las declaraciones y todos los usos de la clase por el nuevo nombre. Para las clases parciales, la oper
ación de cambio de nombre se propaga a todas las partes donde aparece.

Campo Cambia la declaración y los usos del campo al nuevo nombre.

Variable loc Cambia la declaración y los usos de la variable al nuevo nombre.


al

Método Cambia el nombre del método y todas las referencias a ese método al nuevo nombre.

Espacio de Cambia el nombre del espacio de nombres al nuevo nombre en la declaración, en todas las instrucciones Imports
nombres y en todos los nombres completos.

Propiedad Cambia la declaración y los usos de la propiedad al nuevo nombre.

Refactorización
Para proporcionar una experiencia de refactorización más completa, Visual Basic se ha asociado con Developer Express Inc.
para obtener la compatibilidad con la refactorización para el desarrollador. Vea Refactor!
(http://msdn.microsoft.com/vbasic/downloads/2005/tools/refactor/) en el Centro de desarrollo de Visual Basic en MSDN para
obtener más información e instrucciones sobre cómo descargar esta herramienta. Refactor! admite más de 15 características
de refactorización individuales, incluidas operaciones como Reordenar parámetros, Extraer método, Encapsular campo y Crear
sobrecarga.
Vea también
Tareas
Cómo: Cambiar el nombre de un identificador
Otros recursos
Utilizar el Editor de Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Cambiar el nombre de un identificador


El entorno de desarrollo integrado (IDE) de Visual Studio puede analizar el código y utilizar información de ámbito para ayudar
a cambiar el nombre de los identificadores. Esto proporciona una experiencia de cambio de nombres más controlada que si se
utiliza buscar y reemplazar.
Por ejemplo, considere una clase que define dos subrutinas denominadas Test1 y Test2, cada una de las cuales define una
variable denominada Value. Si se cambia el nombre de la variable Value en Test1 a Counter, todo el código de Test1 que haga
referencia a Value se actualizará a la referencia Counter. Sin embargo, el código de Test2 no se cambiará.
Para cambiar el nombre de cualquier instancia del identificador
1. Haga clic con el botón secundario del mouse (ratón) en el identificador.
2. Elija Cambiar nombre en el menú contextual para abrir el cuadro de diálogo Cambiar nombre.
3. En el cuadro Nuevo nombre cambie el nombre al nuevo nombre del identificador.
4. Haga clic en Aceptar para cambiar el nombre de todas las referencias al identificador.
Para cambiar el nombre de la declaración del identificador
1. Seleccione el nombre del identificador donde lo declaró.
2. Cambie el nombre del identificador.
Cuando cambia el nombre, aparece un símbolo bajo el lado derecho del nombre.
3. Coloque el puntero del mouse sobre el símbolo para activar la etiqueta inteligente.
4. Haga clic en el glifo de la etiqueta inteligente para abrir el panel.
5. Elija el elemento del panel Cambiar nombre para cambiar el nombre de las otras referencias al identificador.
Vea también
Referencia
Cambiar nombre (Cuadro de diálogo) (Visual Basic)
Otros recursos
Utilizar el Editor de Visual Basic
Conceptos del lenguaje Visual Basic

Teclas de método abreviado predeterminadas de Visual Basic


6.0
Las siguientes páginas de Ayuda muestran las combinaciones de teclas predeterminadas disponibles para el esquema de
teclado de Visual Basic 6.0. Para obtener información sobre cómo cambiar las combinaciones predeterminadas, vea
Cómo: Trabajar con combinaciones de teclas de método abreviado.
En esta sección
Teclas de método abreviado globales, opción de método abreviado predeterminada de Visual Basic 6.0
Muestra las combinaciones de teclas de método abreviado comunes y las combinaciones de teclas que se pueden utilizar en
varios lugares del IDE.
Teclas de método abreviado para la ayuda integrada, opción de método abreviado predeterminada de Visual Basic 6.0
Muestra las combinaciones de teclas de método abreviado disponibles cuando se muestran y se examinan los temas de
Ayuda.
Teclas de método abreviado de proyecto, opción de método abreviado predeterminada de Visual Basic 6.0
Muestra las combinaciones de teclas de método abreviado siguientes que se pueden utilizar para agregar nuevos elementos
a un proyecto, generar un proyecto o abrir archivos o proyectos.
Teclas de método abreviado para el diseñador HTML, opción de método abreviado predeterminada de Visual Basic 6.0
Muestra las combinaciones de teclas de método abreviado disponibles cuando se trabaja en la vista Diseño y vista HTML
del diseñador de HTML.
Teclas de método abreviado para el editor de imágenes, opción de método abreviado predeterminada de Visual Basic 6.0
Muestra las combinaciones de teclas de método abreviado disponibles cuando se trabaja en el Editor de imágenes.
Teclas de método abreviado para la depuración, opción de método abreviado predeterminada de Visual Basic 6.0
Muestra las combinaciones de teclas de método abreviado disponibles cuando se utiliza el depurador.
Teclas de método abreviado para buscar y reemplazar, opción de método abreviado predeterminada de Visual Basic 6.0
Muestra las combinaciones de teclas de método abreviado disponibles cuando se utilizan los cuadros de diálogo Buscar,
Reemplazar, Buscar en archivos y Reemplazar en archivos.
Teclas de método abreviado de Visual Database Tools, opción de método abreviado predeterminada de Visual Basic 6.0
Muestra las combinaciones de teclas de método abreviado disponibles cuando se utiliza el Diseñador de consultas o
Diseñador de bases de datos.
Teclas de método abreviado del Examinador de objetos, opción de método abreviado predeterminada de Visual Basic 6.0
Muestra las combinaciones de teclas de método abreviado disponibles cuando se trabaja en el Examinador de objetos.
Teclas de método abreviado para la manipulación de controles, opción de método abreviado predeterminada de Visual Basic 6.0
Muestra las combinaciones de teclas de método abreviado disponibles para desplazarse y cambiar el tamaño de los
controles en una superficie de diseño.
Teclas de método abreviado para desplazarse por texto, opción de método abreviado predeterminada de Visual Basic 6.0
Muestra las combinaciones de teclas de método abreviado disponibles al desplazarse por el código en un documento
abierto.
Teclas de método abreviado para la selección de texto, opción de método abreviado predeterminada de Visual Basic 6.0
Muestra las combinaciones de teclas de método abreviado disponibles cuando se selecciona texto en un documento abierto.
Teclas de método abreviado para la manipulación de texto, opción de método abreviado predeterminada de Visual Basic 6.0
Muestra las combinaciones de teclas de método abreviado disponibles al desplazarse, eliminar o dar formato al texto en un
documento abierto.
Teclas de método abreviado de administración de ventanas, opción de método abreviado predeterminada en Visual Basic 6.0
Muestra las combinaciones de teclas de método abreviado disponibles para moverse, cerrar o desplazarse por las ventanas
de herramientas y documentos.
Teclas de método abreviado para macros, opción de método abreviado predeterminada de Visual Basic 6.0
Muestra las combinaciones de teclas de método abreviado que pueden utilizarse al trabajar con macros.
Teclas de método abreviado para ventanas de herramientas, opción de método abreviado predeterminada de Visual Basic 6.0
Muestra las combinaciones de teclas de método abreviado que muestran las distintas ventanas de herramientas.
Secciones relacionadas
Cómo: Trabajar con combinaciones de teclas de método abreviado
Describe cómo determinar el esquema de asignación de teclado actual, cómo determinar la combinación de teclas de
método abreviado para un comando concreto, cómo crear el esquema de asignación personalizado y cómo crear la nueva
combinación de teclas de método abreviado.
Teclas de método abreviado
Muestra los esquemas de enlace de teclado predefinidos disponibles en el entorno de desarrollo Visual Studio.
Conceptos del lenguaje Visual Basic

Teclas de método abreviado globales, opción de método


abreviado predeterminada de Visual Basic 6.0
Las siguientes teclas de método abreviado pueden utilizarse en varios lugares del entorno de desarrollo integrado (IDE).
Comand Teclas de Descripción
o método a
breviado
Edit.Copy CTRL + C Coloca un duplicado del elemento seleccionado actualmente en el Portapapeles del sistema.
CTRL + IN
SERT

Edit.Cut CTRL + X Quita el elemento seleccionado actualmente y lo copia en el Portapapeles del sistema.
MAYÚS +
SUPR

Edit.Cycle CTRL + M Pega un elemento de la ficha Anillo del Portapapeles del Cuadro de herramientas en el punto de ins
Clipboar AYÚS + V erción del archivo y selecciona automáticamente el elemento pegado. Se puede revisar cada elemento d
dRing el Portapapeles presionando repetidamente las teclas de método abreviado.
CTRL + M
AYÚS + IN
SERT

Edit.Delet DELETE Elimina un carácter a la derecha.


e

Edit.Delet RETROCES Elimina un carácter a la izquierda.


eBackwar O
ds
MAYÚS +
RETROCES
O

Edit.GoTo F12 Mueve el cursor al siguiente elemento, como una tarea de la ventana Lista de tareas o una coincidencia
NextLoca encontrada en la ventana Resultados de la búsqueda. Cada vez que se presiona F12, se desplaza el cur
tion sor al siguiente elemento de la lista.

Edit.GoTo MAYÚS + Mueve el cursor al elemento anterior en la ventana Lista de tareas o en la ventana Resultados de la b
Previous F12 úsqueda.
Location

Edit.ListM CTRL + J Muestra los miembros de la clase actual para la finalización de instrucciones al editar código.
embers

Edit.Para CTRL + M Muestra Información sobre herramientas acerca del parámetro actual, basada en el lenguaje actual.
meterInf AYÚS + I
o

Edit.Paste CTRL + V Inserta el contenido del Portapapeles en el punto de inserción.


MAYÚS + I
NSERT

Edit.Quic CTRL + I Muestra la declaración completa del identificador más cercano al punto de inserción en una Información
kInfo sobre herramientas.
Edit.Redo CTRL + M Restaura la acción deshecha anteriormente.
AYÚS + Z
MAYÚS +
ALT + RET
ROCESO

Edit.Selec ESC Cierra un menú o cuadro de diálogo, cancela una operación en progreso o coloca el foco en la ventana d
tionCanc e documento actual.
el

Edit.Undo ALT + RET Deshace la última acción de edición.


ROCESO
CTRL + Z

File.AddE CTRL + D Muestra el cuadro de diálogo Agregar elemento existente, que permite agregar un archivo existente a
xistingIte l proyecto actual.
m

File.AddN CTRL + M Muestra el cuadro de diálogo Agregar nuevo elemento, que permite agregar un archivo nuevo al proy
ewItem AYÚS + A ecto actual.

File.Exit ALT + Q Sale del entorno de desarrollo integrado.

File.Print CTRL + P Muestra el cuadro de diálogo Imprimir, donde se puede elegir la configuración de impresora.

File.Save CTRL + M Guarda todos los documentos de la solución actual y los archivos del proyecto de archivos externos.
All AYÚS + S

File.Save CTRL + S Guarda los elementos seleccionados en el proyecto actual.


SelectedIt
ems

Tools.Go CTRL + / Coloca el símbolo de intercalación en el cuadro Buscar y comando de la barra de herramientas Estánda
ToComm r.
andLine

View.Nav CTRL + M Vuelve al documento o ventana anterior en el historial de exploración.


igateBack AYÚS + F2
ward

View.Nav CTRL + M Se desplaza al documento o ventana siguiente en el historial de exploración.


igateFor AYÚS + -
ward

View.We ALT + FLE Muestra la página anterior en el historial de exploración. Sólo disponible en el explorador Web integrado
bNavigat CHA IZQUI .
eBack ERDA

View.We ALT + FLE Muestra la siguiente página en el historial de exploración. Sólo disponible en el explorador Web integrad
bNavigat CHA DERE o.
eForward CHA
Vea también
Tareas
Cómo: Trabajar con combinaciones de teclas de método abreviado
Referencia
Teclas de método abreviado de proyecto, opción de método abreviado predeterminada de Visual Basic 6.0
Teclas de método abreviado para la ayuda integrada, opción de método abreviado predeterminada de Visual Basic 6.0
Otros recursos
Teclas de método abreviado predeterminadas de Visual Basic 6.0
Conceptos del lenguaje Visual Basic

Teclas de método abreviado para la ayuda integrada, opción de


método abreviado predeterminada de Visual Basic 6.0
Las combinaciones de teclas de método abreviado siguientes pueden utilizarse para ver y desplazarse entre los temas de la
ayuda.
Nombre de c Teclas de método Descripción
omando abreviado
Help.Contents CTRL + ALT + F1 Muestra la ventana Contenido de la documentación de MSDN.

Help.Dynamic CTRL + F1 Muestra la ventana Ayuda dinámica, que presenta temas diferentes según los elementos
Help que tengan actualmente el foco en el producto.

Help.F1Help F1 Muestra un tema de la ayuda que corresponde a la interfaz de usuario seleccionada.

Help.Index CTRL + ALT + F2 Muestra la ventana Índice de la documentación de MSDN.

Help.Nexttopic ALT + FLECHA ABAJ Muestra el siguiente tema de la tabla de contenido. Sólo disponible en la ventana de la Ay
O uda del explorador (Web).

Help.Previoust ALT + FLECHA ARRI Muestra el tema anterior de la tabla de contenido. Sólo disponible en la ventana de la Ayu
opic BA da del explorador (Web).

Help.Search CTRL + ALT + F3 Muestra la ventana Buscar, que permite buscar palabras o frases en la documentación de
MSDN.

Help.WindowH MAYÚS + F1 Muestra un tema de la ayuda que corresponde a la interfaz de usuario seleccionada.
elp
Vea también
Tareas
Cómo: Trabajar con combinaciones de teclas de método abreviado
Referencia
Teclas de método abreviado de administración de ventanas, opción de método abreviado predeterminada en Visual Basic 6.0
Otros recursos
Teclas de método abreviado predeterminadas de Visual Basic 6.0
Conceptos del lenguaje Visual Basic

Teclas de método abreviado de proyecto, opción de método


abreviado predeterminada de Visual Basic 6.0
Las combinaciones de teclas de método abreviado siguientes se pueden utilizar para agregar nuevos elementos a un proyecto,
generar un proyecto o abrir archivos o proyectos.
Nombre de Teclas de méto Descripción
comando do abreviado
Build.BuildS CTRL + MAYÚS Genera todos los proyectos de la solución utilizando la configuración de la solución actual.
olution +B

Build.Compil CTRL + F7 Crea un archivo objeto que contiene código máquina, directivas del vinculador, secciones, refer
e encias externas y nombres de datos y funciones para el archivo seleccionado.

File.NewFile CTRL + MAYÚS Muestra el cuadro de diálogo Nuevo archivo, donde puede seleccionar un nuevo archivo para
+N agregarlo al proyecto actual.

File.NewProj CTRL + N Muestra el cuadro de diálogo Nuevo proyecto, donde puede crear proyectos y agregarlos a la
ect solución actual.

File.OpenFil CTRL + MAYÚS Muestra el cuadro de diálogo Abrir archivo, donde se puede seleccionar un archivo existente p
e +O ara abrirlo.

File.OpenPr CTRL + O Muestra el cuadro de diálogo Abrir proyecto, donde puede agregar proyectos existentes a la s
oject olución.

File.AddExist CTRL + D Muestra el cuadro de diálogo Agregar elemento existente, que permite agregar un archivo e
ingItem xistente al proyecto actual.

File.AddNew CTRL + MAYÚS Muestra el cuadro de diálogo Agregar nuevo elemento, que permite agregar un archivo nuev
Item +A o al proyecto actual.

Project.RunS CTRL + Q Ejecuta la selección actual.


election
Vea también
Tareas
Cómo: Trabajar con combinaciones de teclas de método abreviado
Referencia
Teclas de método abreviado globales, opción de método abreviado predeterminada de Visual Basic 6.0
Teclas de método abreviado para la ayuda integrada, opción de método abreviado predeterminada de Visual Basic 6.0
Teclas de método abreviado de administración de ventanas, opción de método abreviado predeterminada en Visual Basic 6.0
Conceptos
Introducción a soluciones, proyectos y elementos
Otros recursos
Teclas de método abreviado predeterminadas de Visual Basic 6.0
Conceptos del lenguaje Visual Basic

Teclas de método abreviado para el diseñador HTML, opción de


método abreviado predeterminada de Visual Basic 6.0
Las combinaciones de teclas de método abreviado siguientes sólo se pueden utilizar al editar en el Diseñador HTML.
Determinadas combinaciones de teclas sólo están disponibles en una vista específica del diseñador.
Coman Teclas de Descripción
do método
abreviad
o
Edit.Char CTRL + T Intercambia los caracteres de ambos lados del punto de inserción. Por ejemplo, AC|BD se vuelve AB|CD. S
Transpos ólo disponible en la vista HTML del Diseñador HTML.
e

Edit.Clea CTRL + K, Quita todos los marcadores sin nombre del documento actual. Sólo disponible en la vista HTML del Dise
rAllBook CTRL + L ñador HTML.
marks

Edit.Com CTRL + B Muestra la finalización de palabras basada en el lenguaje actual. Sólo disponible en la vista HTML del Dis
pleteWo ARRA ESP eñador HTML.
rd ACIADOR
A

Edit.Mak CTRL + U Cambia el texto seleccionado a caracteres en minúscula. Sólo disponible en la vista HTML del Diseñador
eLowerc HTML.
ase

Edit.Mak CTRL + M Cambia el texto seleccionado a caracteres en mayúscula. Sólo disponible en la vista HTML del Diseñador
eUpperc AYÚS + U HTML.
ase

Edit.Next CTRL + K, Se desplaza al siguiente marcador del documento. Sólo disponible en la vista HTML del Diseñador HTML
Bookmar CTRL + N .
k

Edit.Wor CTRL + S Elimina la palabra situada a la derecha del punto de inserción. Sólo disponible en la vista HTML del Diseñ
dDeleteT UPRIMIR ador HTML.
oEnd
CTRL + M
AYÚS + R
ETROCES
O

Edit.Wor CTRL + R Elimina la palabra situada a la izquierda del punto de inserción. Sólo disponible en la vista HTML del Dise
dDeleteT ETROCES ñador HTML.
oStart O

Format.B CTRL + B Alterna el texto seleccionado entre negrita y normal. Sólo disponible en la vista Diseño del Diseñador HT
old ML.

Format. CTRL + M Reduce un nivel de sangría el párrafo seleccionado. Sólo disponible en la vista Diseño del Diseñador HT
Decrease AYÚS + T ML.
Indent
Format.I CTRL + T Aumenta un nivel de sangría el párrafo seleccionado. Sólo disponible en la vista Diseño del Diseñador H
ncreaseI TML.
ndent

Format.It CTRL + I Alterna el texto seleccionado entre cursiva y normal. Sólo disponible en la vista Diseño del Diseñador HT
alic ML.

Format.L CTRL + M Impide que se desplace inadvertidamente un elemento con posición absoluta. Sólo disponible en la vista
ockElem AYÚS + K Diseño del Diseñador HTML.
ent

Format.S CTRL + G Alterna la opción de ajustar a la cuadrícula. Sólo disponible en la vista Diseño del Diseñador HTML.
howGrid

Format.S CTRL + M Especifica que los elementos se van a alinear mediante una cuadrícula invisible. Se puede establecer el esp
napToGr AYÚS + G aciado de cuadrícula en el panel Pantalla de las opciones del Diseñador HTML, en el cuadro de diálogo O
id pciones, y la cuadrícula se cambiará la próxima vez que se abra un documento. Sólo disponible en la vista
Diseño del Diseñador HTML.

Format. CTRL + U Alterna el texto seleccionado entre subrayado y normal. Sólo disponible en la vista Diseño del Diseñador
Underlin HTML.
e

Format.I CTRL + M Muestra el cuadro de diálogo Marcador, que permite crear un destino para los saltos del documento actua
nsertBoo AYÚS + L l. Disponible en la vista Diseño y en la vista HTML del Diseñador HTML.
kmark

Format.C CTRL + L Cuando hay texto seleccionado, muestra el cuadro de diálogo Hipervínculo. Disponible en la vista Diseño
onvertto y en la vista HTML del Diseñador HTML.
Hyperlin
k

Table.Ins CTRL + A Agrega una fila encima de la fila actual en la tabla. Sólo disponible en la vista Diseño del Diseñador HTM
ertRowA LT + FLEC L.
bove HA ARRIB
A

Table.Ins CTRL + A Agrega una fila debajo de la fila actual en la tabla. Sólo disponible en la vista Diseño del Diseñador HTM
ertRowB LT + FLEC L.
elow HA ABAJ
O

Table.Ins CTRL + A Agrega una columna a la izquierda de la columna actual en la tabla. Sólo disponible en la vista Diseño del
ertColu LT + FLEC Diseñador HTML.
mnstoth HA IZQUI
eLeft ERDA

Table.Ins CTRL + A Agrega una columna a la derecha de la columna actual en la tabla. Sólo disponible en la vista Diseño del
ertColu LT + FLEC Diseñador HTML.
mnstoth HA DERE
eRight CHA

View.Det CTRL + M Muestra iconos de señal para los elementos HTML que no tienen representación visual, como comentarios
ails AYÚS + Q , secuencias de comandos y delimitadores para elementos en posición absoluta. Sólo disponible en la vista
Diseño del Diseñador HTML.
View.Ne CTRL + A Cambia de la vista Diseño a la vista HTML y viceversa. Sólo disponible en la vista Diseño del Diseñador
xtView V PÁG HTML.

View.Visi CTRL + Q Muestra un borde de un píxel en torno a elementos HTML que admiten un atributo BORDER, como tablas,
bleBorde celdas de tabla y divisiones, y lo tiene establecido en cero. Sólo disponible en la vista Diseño del Diseñad
rs or HTML.
Vea también
Tareas
Cómo: Trabajar con combinaciones de teclas de método abreviado
Referencia
Diseñador HTML
Otros recursos
Teclas de método abreviado predeterminadas de Visual Basic 6.0
Conceptos del lenguaje Visual Basic

Teclas de método abreviado para el editor de imágenes, opción


de método abreviado predeterminada de Visual Basic 6.0
Las combinaciones de teclas de método abreviado siguientes pueden utilizarse en el Editor de imágenes.
Comando Teclas de méto Descripción
do abreviado
Image.Draw CTRL + J Convierte la selección actual en opaca o transparente. Sólo disponible en el Editor de imágene
Opaque s.

Image.FlipH CTRL + H Voltea la imagen de derecha a izquierda en el eje horizontal. Sólo disponible en el Editor de im
orizontal ágenes.

Image.FlipVe MAYÚS + ALT + Voltea la imagen de arriba hacia abajo en el eje vertical. Sólo disponible en el Editor de imáge
rtical H nes.

Image.NewI INSERT Muestra el cuadro de diálogo Nuevo tipo de imagen de icono, que permite seleccionar el nu
mageType evo tipo de imagen que se va a crear. Sólo disponible en el Editor de imágenes.

Image.Rotat CTRL + MAYÚS Rota la imagen 90 grados en el sentido de las agujas del reloj. Sólo disponible en el Editor de i
e90Degrees + H mágenes.
Vea también
Tareas
Cómo: Trabajar con combinaciones de teclas de método abreviado
Referencia
Editor de imágenes
Otros recursos
Teclas de método abreviado predeterminadas de Visual Basic 6.0
Conceptos del lenguaje Visual Basic

Teclas de método abreviado para la depuración, opción de


método abreviado predeterminada de Visual Basic 6.0
Las combinaciones de teclas de método abreviado siguientes se pueden utilizar al depurador código.
Comand Teclas de Descripción
o método
abreviad
o
Debug.Ap ALT + F10 Aplica los cambios realizados en el código sin detener el depurador.
plyCodeC
hanges

Debug.Au CTRL + A Muestra la ventana Automático para ver los valores de las variables que se hallan en ese momento den
tos LT + V, A tro del ámbito de la línea de ejecución actual, en el procedimiento actual.

Debug.Bre CTRL + IN Detiene temporalmente la ejecución de todos los procesos en una sesión de depuración. Disponible sólo
akAll TERRUMP en modo de ejecución.
IR

Debug.Bre CTRL + A Muestra el cuadro de diálogo Puntos de interrupción, donde puede agregar y modificar los puntos de
akpoints LT + B interrupción.

Debug.Cal CTRL + L Muestra la ventana Pila de llamadas para mostrar una lista de todos los procedimientos o marcos de p
lStack ila activos correspondientes al subproceso de ejecución actual. Disponible sólo en modo de ejecución.

Debug.Cle CTRL + M Borra todos los puntos de interrupción del proyecto.


arAllBreak AYÚS + F
points 9

Debug.Dis CTRL + A Muestra el cuadro de diálogo Desensamblador.


assembly LT + D

Debug.Exc CTRL + A Muestra el cuadro de diálogo Excepciones.


eptions LT + E

Debug.Im CTRL + G Muestra la ventana Inmediato, donde es posible evaluar expresiones y ejecutar comandos individuales.
mediate

Debug.Lo CTRL + A Muestra la ventana Variables locales para ver las variables y los valores que contienen para cada uno d
cals LT + V, L e los procedimientos del marco de pila actual.

Debug.Me CTRL + A Muestra la ventana Memoria 1 que permite ver búferes, cadenas y otros datos de gran tamaño que no s
mory1 LT + M, 1 e ven bien en la ventana Inspección o Variables.

Debug.Me CTRL + A Muestra la ventana Memoria 2 que permite ver búferes, cadenas y otros datos de gran tamaño que no s
mory2 LT + M, 2 e ven bien en la ventana Inspección o Variables.

Debug.Me CTRL + A Muestra la ventana Memoria 3 que permite ver búferes, cadenas y otros datos de gran tamaño que no s
mory3 LT + M, 3 e ven bien en la ventana Inspección o Variables.

Debug.Me CTRL + A Muestra la ventana Memoria 4 que permite ver búferes, cadenas y otros datos de gran tamaño que no s
mory4 LT + M, 4 e ven bien en la ventana Inspección o Variables.
Debug.Mo CTRL + A Muestra la ventana Módulos, que permite ver los archivos .dll o .exe utilizados por el programa.
dules LT + U

Debug.Ne CTRL + B Inserta o borra el punto de interrupción de la línea de código actual.


wBreakpo
int

Debug.Qu MAYÚS + Muestra el cuadro de diálogo Inspección rápida con el valor actual de la expresión seleccionada. Dispo
ickWatch F9 nible sólo en modo de interrupción. Utilice este comando para comprobar el valor actual de una variable
, propiedad u otra expresión para la que no haya definido una expresión de inspección.

Debug.Re CTRL + A Muestra la ventana Registros, que presenta el contenido para depurar aplicaciones de código nativo.
gisters LT + G

Debug.Re MAYÚS + Termina una sesión de depuración, vuelve a generar y, a continuación, comienza a ejecutar la aplicación
start F5 desde el principio. Disponible en modos de interrupción y ejecución.

Debug.Ru CTRL + A Muestra la ventana Documentos en ejecución, que contiene los documentos correspondientes al proc
nningDoc LT + N eso de depuración. Disponible en modo de ejecución.
uments

Debug.Ru CTRL + F8 En modo de interrupción, reanuda la ejecución del código desde la instrucción actual hasta la instrucción
nToCurso seleccionada. El indicador de margen de la línea de ejecución actual aparece en la barra indicadora de m
r argen. En modo de diseño, inicia el depurador y ejecuta el código hasta la ubicación del cursor.

Debug.Set CTRL + F9 Establece el punto de ejecución en la línea de código que se elija.


NextState
ment

Debug.Sh ALT + NÚ Resalta la siguiente instrucción que se va a ejecutar.


owNextSt M *
atement

Debug.Sta F5 Asocia automáticamente el depurador y ejecuta la aplicación desde el formulario de inicio especificado e
rt n el cuadro de diálogo Propiedades de <Proyecto>. Cambia a Continuar si se encuentra en modo de
interrupción.

Debug.Sta CTRL + F5 Ejecuta el código sin llamar al depurador.


rtWithout
Debuggin
g

Debug.Ste F8 Ejecuta el código una instrucción cada vez, siguiendo la ejecución hasta las llamadas a funciones.
pInto

Debug.Ste CTRL + M Ejecuta las líneas restantes de una función en la cual se encuentra el punto de ejecución actual.
pOut AYÚS + F
8

Debug.Ste MAYÚS + Ejecuta la línea siguiente de código, pero no sigue la ejecución a través de ninguna llamada a una funció
pOver F8 n.

Debug.Thi CTRL + A Muestra la ventana This, que permite ver los miembros de datos del objeto asociado con el método actu
s LT + V, T al.
Debug.Thr CTRL + A Muestra la ventana Subprocesos para ver todos los subprocesos del proceso actual e información sobr
eads LT + H e ellos.

Debug.To F9 Establece o quita un punto de interrupción en la línea actual.


ggleBreak
point

Debug.To CTRL + F1 Muestra la información de desensamblaje del archivo de código fuente actual. Disponible sólo en modo
ggleDisas 1 de interrupción.
sembly

Tools.Deb CTRL + A Muestra el cuadro de diálogo Procesos, que permite depurar varios programas a la vez en una única sol
ugProcess LT + P ución.
es
Vea también
Tareas
Cómo: Trabajar con combinaciones de teclas de método abreviado
Referencia
Teclas de método abreviado para ventanas de herramientas, opción de método abreviado predeterminada de Visual Basic 6.0
Otros recursos
Teclas de método abreviado predeterminadas de Visual Basic 6.0
Conceptos del lenguaje Visual Basic

Teclas de método abreviado para buscar y reemplazar, opción


de método abreviado predeterminada de Visual Basic 6.0
Las siguientes combinaciones de teclas de método abreviado se pueden utilizan con los cuadros de diálogo Buscar,
Reemplazar, Buscar en archivos y Reemplazar en archivos.
Comando Teclas de mé Descripción
todo abrevia
do
Edit.Find CTRL + F Muestra el cuadro de diálogo Buscar.

Edit.FindNext F3 Encuentra la siguiente aparición del texto de búsqueda anterior.

Edit.FindNextS CTRL + F3 Encuentra la siguiente aparición del texto seleccionado actualmente en el documento.
elected

Edit.FindPrevi MAYÚS + F3 Encuentra la aparición anterior del texto de búsqueda.


ous

Edit.FindPrevi CTRL + MAYÚ Encuentra la aparición anterior del texto seleccionado actualmente o la palabra donde se encue
ousSelected S + F3 ntra el símbolo de intercalación.

Edit.GoToFind CTRL + MAYÚ Coloca el símbolo de intercalación en la línea Buscar y comando de la barra de herramientas E
Combo S+F stándar.

Edit.HiddenTex ALT + F3, H Activa o desactiva la opción Buscar en texto oculto del cuadro de diálogo Buscar.
t

Edit.Increment CTRL + ALT + Inicia la búsqueda incremental. Si se inicia la búsqueda incremental, pero no se escribe ningún c
alSearch I arácter, recupera el modelo de búsqueda anterior. Si se encuentra texto, busca la siguiente apari
ción.

Edit.MatchCas ALT + F3 + C Activa o desactiva la opción Coincidir mayúsculas y minúsculas para operaciones de búsque
e da y reemplazo.

Edit.RegularEx ALT + F3 + R Activa o desactiva la opción Expresión regular para poder usar caracteres especiales en opera
pression ciones de búsqueda y reemplazo.

Edit.Replace CTRL + H Muestra el cuadro de diálogo Reemplazar.

Edit.Replacein CTRL + MAYÚ Muestra el cuadro de diálogo Reemplazar en archivos.


Files S+H

Edit.ReverseIn CTRL + MAYÚ Cambia la dirección de la búsqueda incremental para comenzar al final del archivo y avanzar ha
crementalSear S + ALT + I cia el principio.
ch

Edit.StopSearc ALT + F3, S Detiene la operación actual de Buscar en archivos.


h

Edit.Up ALT + F3, B Activa o desactiva la opción Buscar hacia atrás para operaciones de búsqueda y reemplazo.
Edit.WholeWo ALT + F3, W Activa o desactiva la opción Sólo palabras completas para operaciones de búsqueda y reempl
rd azo.

Edit.Wildcard ALT + F3, P Activa o desactiva la opción Carácter comodín para operaciones de búsqueda y reemplazo.
Vea también
Tareas
Cómo: Trabajar con combinaciones de teclas de método abreviado
Referencia
Teclas de método abreviado para desplazarse por texto, opción de método abreviado predeterminada de Visual Basic 6.0
Teclas de método abreviado para la selección de texto, opción de método abreviado predeterminada de Visual Basic 6.0
Teclas de método abreviado para la manipulación de texto, opción de método abreviado predeterminada de Visual Basic 6.0
Otros recursos
Teclas de método abreviado predeterminadas de Visual Basic 6.0
Conceptos del lenguaje Visual Basic

Teclas de método abreviado de Visual Database Tools, opción


de método abreviado predeterminada de Visual Basic 6.0
Las combinaciones de teclas de método abreviado siguientes pueden utilizarse en el Diseñador de bases de datos o el
Diseñador de consultas.
Comando Teclas de método abr Descripción
eviado
Database.Run CTRL + R Ejecuta el objeto de base de datos seleccionado actualmente.

Database.Ste CTRL + E Modo de depuración de Ir a instrucciones en el objeto de base de datos activo actualme
pInto nte.

Query.Run CTRL + R Ejecuta la consulta. Sólo disponible en Visual Database Tools.

View.Diagra CTRL +1 Muestra el panel Diagrama del Diseñador de consultas. Sólo disponible en los diseñad
m ores de consultas y vistas.

View.Grid CTRL +2 Muestra el panel Cuadrícula del Diseñador de consultas. Sólo disponible en los diseña
dores de consultas y vistas.

View.Results CTRL +4 Muestra el panel Resultados del Diseñador de consultas. Sólo disponible en los diseña
dores de consultas y vistas.

View.SQL CTRL + 3 Muestra el panel SQL del Diseñador de consultas. Sólo disponible en los diseñadores de
consultas y vistas.
Vea también
Tareas
Cómo: Trabajar con combinaciones de teclas de método abreviado
Referencia
Teclas de método abreviado globales, opción de método abreviado predeterminada de Visual Basic 6.0
Otros recursos
Teclas de método abreviado predeterminadas de Visual Basic 6.0
Conceptos del lenguaje Visual Basic

Teclas de método abreviado del Examinador de objetos, opción


de método abreviado predeterminada de Visual Basic 6.0
Las combinaciones de teclas de método abreviado siguientes pueden utilizarse en la ventana del Examinador de objetos.
Comando Teclas de método ab Descripción
reviado
Edit.FindSymbol CTRL + MAYÚS + Y Muestra el cuadro de diálogo Buscar símbolo.
CTRL + MAYÚS + ALT
+ F12

View.FindSymbolRes CTRL + ALT + Y Muestra la ventana Resultados de la búsqueda de símbolos.


ults

View.ObjectBrowserB ALT + - Se desplaza al objeto seleccionado anteriormente en el historial de selección del


ack Examinador de objetos.

View.ObjectBrowserF MAYÚS + ALT + - Se desplaza al siguiente objeto en el historial de selección del Examinador de o
orward bjetos.
Vea también
Tareas
Cómo: Trabajar con combinaciones de teclas de método abreviado
Referencia
Teclas de método abreviado para ventanas de herramientas, opción de método abreviado predeterminada de Visual Basic 6.0
Teclas de método abreviado de administración de ventanas, opción de método abreviado predeterminada en Visual Basic 6.0
Otros recursos
Teclas de método abreviado predeterminadas de Visual Basic 6.0
Conceptos del lenguaje Visual Basic

Teclas de método abreviado para la manipulación de controles,


opción de método abreviado predeterminada de Visual Basic
6.0
Las combinaciones de teclas de método abreviado siguientes se pueden utilizar para desplazar, seleccionar y cambiar el
tamaño de los controles en las superficies de diseño.
Comando Teclas de método abreviad Descripción
o
Edit.MoveControlDo CTRL + FLECHA ABAJO Desplaza el control seleccionado hacia abajo en incrementos de 1 en la s
wn uperficie de diseño.

Edit.MoveControlDo FLECHA ABAJO Desplaza el control seleccionado hacia abajo en incrementos de 8 en la s


wnGrid uperficie de diseño.

Edit.MoveControlLeft CTRL + FLECHA IZQUIERDA Desplaza el control hacia la izquierda en incrementos de 1 en la superfici
e de diseño.

Edit.MoveControlLeft FLECHA IZQUIERDA Desplaza el control hacia la izquierda en incrementos de 8 en la superfici


Grid e de diseño.

Edit.MoveControlRig CTRL + FLECHA DERECHA Desplaza el control a la derecha en incrementos de 1 en la superficie de d


ht iseño.

Edit.MoveControlRig FLECHA DERECHA Desplaza el control hacia la derecha en incrementos de 8 en la superficie


htGrid de diseño.

Edit.MoveControlUp CTRL + FLECHA ARRIBA Desplaza el control hacia arriba en incrementos de 1 en la superficie de d
iseño.

Edit.MoveControlUpG FLECHA ARRIBA Desplaza el control hacia arriba en incrementos de 8 en la superficie de d


rid iseño.

Edit.SelectNextContro TAB Selecciona el siguiente control en la superficie de diseño.


l

Edit.SelectPreviousCo MAYÚS + TAB Selecciona el control anterior en la superficie de diseño.


ntrol

Edit.SizeControlDown CTRL + MAYÚS + FLECHA AB Aumenta el alto del control en incrementos de 1 en la superficie de diseñ
AJO o.

Edit.SizeControlDown MAYÚS + FLECHA ABAJO Aumenta el alto del control en incrementos de 8 en la superficie de diseñ
Grid o.

Edit.SizeControlLeft CTRL + MAYÚS + FLECHA IZ Reduce el ancho del control en incrementos de 1 en la superficie de dise
QUIERDA ño.

Edit.SizeControlLeftG MAYÚS + FLECHA IZQUIERDA Reduce el ancho del control en incrementos de 8 en la superficie de dise
rid ño.

Edit.SizeControlRight CTRL + MAYÚS + FLECHA DE Aumenta el ancho del control en incrementos de 1 en la superficie de dis
RECHA eño.
Edit.SizeControlRight MAYÚS + FLECHA DERECHA Aumenta el ancho del control en incrementos de 8 en la superficie de dis
Grid eño.

Edit.SizeControlUp CTRL + MAYÚS + FLECHA AR Reduce el alto del control en incrementos de 1 en la superficie de diseño.
RIBA

Edit.SizeControlUpGri MAYÚS + FLECHA ARRIBA Reduce el alto del control en incrementos de 8 en la superficie de diseño.
d

Format.BringToFront CTRL + J Mueve el control seleccionado a la parte superior del orden Z.


Vea también
Tareas
Cómo: Trabajar con combinaciones de teclas de método abreviado
Referencia
Teclas de método abreviado globales, opción de método abreviado predeterminada de Visual Basic 6.0
Otros recursos
Teclas de método abreviado predeterminadas de Visual Basic 6.0
Conceptos del lenguaje Visual Basic

Teclas de método abreviado para desplazarse por texto, opción


de método abreviado predeterminada de Visual Basic 6.0
Las combinaciones de teclas de método abreviado siguientes pueden utilizarse en los editores de texto para desplazarse en un
documento abierto.
Comando Teclas de método abreviado Descripción
Edit.CharLeft FLECHA IZQUIERDA Mueve el cursor un carácter a la izquierda.

Edit.CharRight FLECHA DERECHA Desplaza el cursor un carácter hacia la derecha.

Edit.DocumentEnd CTRL + FIN Desplaza el punto de inserción a la última línea del documento.

Edit.DocumentStart CTRL + INICIO Desplaza el punto de inserción a la primera línea del documento.

Edit.GoToBrace CTRL + ] Desplaza el punto de inserción a la siguiente llave del documento.

Edit.GoToDeclaration CTRL + ALT + F12 Muestra la definición del símbolo seleccionado en el código.

Edit.GoToDefinition MAYÚS + F2 Muestra la declaración del símbolo seleccionado en el código.

Edit.LineDown FLECHA ABAJO Desplaza el punto de inserción una línea hacia abajo.

Edit.LineEnd FIN Desplaza el punto de inserción al final de la línea.

Edit.LineStart INICIO Desplaza el punto de inserción al principio de la línea.

Edit.LineUp FLECHA ARRIBA Desplaza el punto de inserción una línea hacia arriba.

Edit.PageDown AV PÁG Desplaza el documento una página hacia abajo.

Edit.PageUp RE PÁG Desplaza el documento una página hacia arriba.

Edit.PreviousBookmark CTRL + K, CTRL + P Se desplaza al marcador anterior.

Edit.ScrollLineDown CTRL + FLECHA ABAJO Desplaza el texto una línea hacia abajo.

Edit.ScrollLineUp CTRL + FLECHA ARRIBA Desplaza el texto una línea hacia arriba.

Edit.ToggleWordWrap CTRL +R, CTRL + R Habilita o deshabilita el ajuste de línea en un editor.

Edit.ViewBottom CTRL + AV PÁG Se desplaza al final del documento actual.

Edit.ViewTop CTRL + RE PÁG Se desplaza al comienzo de la ventana o el documento actual.

Edit.WordNext CTRL + FLECHA DERECHA Desplaza el punto de inserción una palabra a la derecha.

Edit.WordPrevious CTRL + FLECHA IZQUIERDA Mueve el punto de inserción una palabra a la izquierda.

View.ViewCode F7 Muestra el elemento seleccionado en la vista Código del editor.


View.ViewDesigner MAYÚS + F7 Muestra el elemento seleccionado en la vista Diseño del editor.
Vea también
Tareas
Cómo: Trabajar con combinaciones de teclas de método abreviado
Referencia
Teclas de método abreviado para la selección de texto, opción de método abreviado predeterminada de Visual Basic 6.0
Teclas de método abreviado para la manipulación de texto, opción de método abreviado predeterminada de Visual Basic 6.0
Otros recursos
Teclas de método abreviado predeterminadas de Visual Basic 6.0
Conceptos del lenguaje Visual Basic

Teclas de método abreviado para la selección de texto, opción


de método abreviado predeterminada de Visual Basic 6.0
Las combinaciones de teclas de método abreviado siguientes pueden utilizarse en los editores de texto para seleccionar texto
en un documento abierto.
Comando Teclas de método abreviado Descripción
Edit.CharLeftExtend MAYÚS + FLECHA IZQUIERDA Mueve el cursor un carácter a la izquierda y extiende la selección.

Edit.CharLeftExtendCol MAYÚS + ALT + FLECHA IZQUI Mueve el cursor un carácter a la izquierda y extiende la selección de la
umn ERDA columna.

Edit.CharRightExtend MAYÚS + FLECHA DERECHA Mueve el cursor un carácter a la derecha y extiende la selección.

Edit.CharRightExtendC MAYÚS + ALT + FLECHA DERE Mueve el cursor un carácter a la derecha y extiende la selección de la c
olumn CHA olumna.

Edit.DocumentEndExte CTRL + MAYÚS + FIN Selecciona texto desde el punto de inserción hasta la última línea del
nd documento.

Edit.DocumentStartExte CTRL + MAYÚS + INICIO Selecciona texto desde el punto de inserción hasta la primera línea del
nd documento.

Edit.GotoBraceExtend CTRL + MAYÚS + ] Desplaza el punto de inserción a la siguiente llave y extiende la selecci
ón.

Edit.LineDownExtend MAYÚS + FLECHA ABAJO Extiende la selección del texto una línea hacia abajo, a partir de la ubic
ación del punto de inserción.

Edit.LineDownExtendC MAYÚS + ALT + FLECHA ABAJ Mueve el cursor una línea hacia abajo y extiende la selección de colu
olumn O mna.

Edit.LineEndExtend MAYÚS + FIN Selecciona texto desde el punto de inserción hasta el final de la línea a
ctual.

Edit.LineEndExtendColu MAYÚS + ALT + FIN Desplaza el punto de inserción al final de la línea y extiende la selecció
mn n de columna.

Edit.LineStartExtend MAYÚS + INICIO Selecciona texto desde el punto de inserción hasta el inicio de la línea.

Edit.LineUpExtend MAYÚS + FLECHA ARRIBA Selecciona texto hacia arriba línea a línea, a partir de la ubicación del p
unto de inserción.

Edit.LineUpExtendColu MAYÚS + ALT + FLECHA ARRIB Mueve el cursor hacia arriba una línea y extiende la selección de colu
mn A mna.

Edit.PageDownExtend MAYÚS + AV PÁG Extiende la selección una página hacia abajo.

Edit.PageUpExtend MAYÚS + RE PÁG Extiende la selección una página hacia arriba.

Edit.SelectAll CTRL + A Selecciona todo el contenido del documento actual.


Edit.SelectCurrentWord CTRL + W Selecciona la palabra que contiene el punto de inserción o la palabra s
ituada a la derecha de éste.

Edit.SelectToLastGoBac CTRL + = Selecciona desde la ubicación actual del Editor de regreso a la ubicaci
k ón anterior en éste.

Edit.ViewBottomExtend CTRL + MAYÚS + AV PÁG Desplaza el cursor a la última línea del documento y extiende la selecc
ión.

Edit.ViewTopExtend CTRL + MAYÚS + RE PÁG Extiende la selección al comienzo de la ventana o el documento actual.

Edit.WordNextExtend CTRL + MAYÚS + FLECHA DER Extiende la selección una palabra hacia la derecha.
ECHA

Edit.WordNextExtendC CTRL + MAYÚS + ALT + FLECH Mueve el cursor a la derecha una palabra y extiende la selección de co
olumn A DERECHA lumna.

Edit.WordPreviousExte CTRL + MAYÚS + FLECHA IZQ Extiende la selección una palabra hacia la izquierda.
nd UIERDA

Edit.WordPreviousExte CTRL + MAYÚS + ALT + FLECH Mueve el cursor a la izquierda una palabra y extiende la selección de c
ndColumn A IZQUIERDA olumna.
Vea también
Tareas
Cómo: Trabajar con combinaciones de teclas de método abreviado
Referencia
Teclas de método abreviado para desplazarse por texto, opción de método abreviado predeterminada de Visual Basic 6.0
Teclas de método abreviado para la manipulación de texto, opción de método abreviado predeterminada de Visual Basic 6.0
Otros recursos
Teclas de método abreviado predeterminadas de Visual Basic 6.0
Conceptos del lenguaje Visual Basic

Teclas de método abreviado para la manipulación de texto,


opción de método abreviado predeterminada de Visual Basic
6.0
Las combinaciones de teclas de método abreviado siguientes pueden utilizarse en los editores de texto para eliminar, desplazar
o dar formato a texto en un documento abierto.
Comando Teclas de mét Descripción
odo abreviado
Edit.BreakLine ENTER SHIFT + Inserta una nueva línea.
ENTER

Edit.CollapsetoD CTRL + M, CTR Determina automáticamente los límites lógicos para crear regiones en el código como proce
efinitions L+O dimientos y, a continuación, los oculta.

Edit.CommentSe CTRL + K, CTRL Marca la línea de código actual como comentario, utilizando la sintaxis de comentario correc
lection +C ta para el lenguaje de programación.

Edit.DeleteHoriz CTRL + K, CTRL Contrae el espacio en blanco de la selección o elimina el espacio en blanco adyacente hasta
ontalWhiteSpace + \ el cursor si no hay una selección.

Edit.FormatDocu CTRL + K, CTRL Aplica el formato de sangría y espaciado del lenguaje como se ha especificado en el panel F
ment +D ormato del lenguaje en la sección Editor de texto del cuadro de diálogo Opciones.

Edit.FormatSelec CTRL + K, CTRL Aplica sangría correctamente a las líneas seleccionadas de código basándose en las líneas ci
tion +F rcundantes de código.

Edit.HideSelectio CTRL + M, CTR Oculta el texto seleccionado. Un icono de señal marca la ubicación del texto oculto en el arch
n L+H ivo.

Edit.InsertTab TAB Aplica sangría a la línea de texto un número especificado de veces, como cinco. Sólo disponi
ble en el Diseñador de .NET Framework.

Edit.LineCut CTRL + Y Corta todas las líneas seleccionadas o la línea actual si no hay selección, para copiar en el Po
rtapapeles.

Edit.LineDelete CTRL + SHIFT + Elimina todas las líneas seleccionadas, o la línea actual si no se ha seleccionado nada.
Y

Edit.LineOpenAb CTRL + ENTER Inserta una línea en blanco sobre el punto de inserción.
ove

Edit.LineOpenBel CTRL + SHIFT + Inserta una línea en blanco bajo el punto de inserción.
ow ENTER

Edit.LineTranspo SHIFT + ALT + Desplaza la línea que contiene el punto de inserción debajo de la línea siguiente.
se T

Edit.OvertypeMo INSERT Escribe sobre los caracteres que ya están en el documento en vez de insertar nuevos caracte
de res. Disponible sólo en los editores de texto.

Edit.StopHidingC CTRL + M, CTR Quita la información de esquematización para la región seleccionada actualmente.
urrent L+U
Edit.StopOutlinin CTRL + M, CTR Quita toda la información de esquematización del documento completo.
g L+P

Edit.SwapAnchor CTRL + R, CTRL Intercambia los puntos delimitador y final de la selección actual.
+P

Edit.TabLeft SHIFT + TAB Desplaza las líneas seleccionadas a la izquierda una posición de tabulación. Sólo disponible
en el Diseñador de .NET Framework.

Edit.ToggleAllOu CTRL + M, CTR Alterna todas las secciones anteriormente marcadas como texto oculto entre los estados ocu
tlining L+L lto y visible.

Edit.ToggleBook CTRL + K, CTRL Establece o quita un marcador en la línea actual.


mark +K

Edit.ToggleOutli CTRL + M, CTR Alterna la sección de texto oculto seleccionada actualmente entre los estados oculto y visible
ningExpansion L + M .

Edit.ToggleTaskL CTRL + K, CTRL Establece o quita un acceso directo en la línea actual.


istShortcut +H

Edit.Uncomment CTRL + K, CTRL Quita la sintaxis de comentario de la línea de código actual.


Selection +U

Edit.ViewWhiteS CTRL + R, CTRL Muestra u oculta espacios y tabulaciones.


pace +W

Edit.WordTransp CTRL + SHIFT + Transpone los caracteres de ambos lados del punto de inserción.
ose T

View.ShowRefer ALT + F12 Ejecuta una búsqueda de símbolo de palabra completa con distinción de mayúsculas y minú
ences sculas y muestra el resultado en la ventana Resultados de la búsqueda de símbolos.
Vea también
Tareas
Cómo: Trabajar con combinaciones de teclas de método abreviado
Referencia
Teclas de método abreviado para desplazarse por texto, opción de método abreviado predeterminada de Visual Basic 6.0
Teclas de método abreviado para la selección de texto, opción de método abreviado predeterminada de Visual Basic 6.0
Otros recursos
Teclas de método abreviado predeterminadas de Visual Basic 6.0
Conceptos del lenguaje Visual Basic

Teclas de método abreviado de administración de ventanas,


opción de método abreviado predeterminada en Visual Basic
6.0
Las combinaciones de teclas de método abreviado siguientes pueden utilizarse para desplazar, cerrar o explorar ventanas de
documentos o herramientas.
Comando Teclas de método Descripción
abreviado
View.FullScreen MAYÚS + ALT + EN Activa y desactiva el modo de Pantalla completa.
TRAR

Window.ActivateDocu ESC Cierra un menú o cuadro de diálogo, cancela una operación en progreso o coloca
mentWindow el foco en la ventana de documento actual.

Window.CloseDocume CTRL + F4 Cierra la ventana secundaria MDI actual.


ntWindow

Window.CloseToolWin MAYÚS + ESC Cierra la ventana de herramienta actual.


dow

Window.MoveToDropD CTRL + F2 Mueve el cursor a la barra desplegable cuando el Editor se encuentra en la vista C
ownBar ódigo.

Window.NextDocumen CTRL + F6 Recorre en ciclo las ventanas secundarias MDI una a la vez.
tWindow
CTRL + TAB

Window.NextPane CTRL + F12 Se desplaza a la ventana de herramienta siguiente.

Window.NextSplitPane F6 Se desplaza al siguiente panel de una vista de panel de división en un único docu
mento.

Window.NextTab CTRL + AV PÁG Se desplaza a la siguiente ficha del documento o ventana.

Window.PreviousDocu CTRL + MAYÚS + F Se desplaza al documento anterior en el Editor o Diseñador.


mentWindow 6
CTRL + MAYÚS + T
AB

Window.PreviousPane CTRL + MAYÚS + F Se desplaza a la ventana seleccionada anteriormente.


12

Window.PreviousSplitP MAYÚS + F6 Se desplaza al panel anterior de un documento en una vista de paneles de divisió
ane n.

Window.PreviousTab CTRL + RE PÁG Se desplaza a la ficha anterior del documento o ventana.


Vea también
Tareas
Cómo: Trabajar con combinaciones de teclas de método abreviado
Referencia
Teclas de método abreviado para ventanas de herramientas, opción de método abreviado predeterminada de Visual Basic 6.0
Teclas de método abreviado globales, opción de método abreviado predeterminada de Visual Basic 6.0
Otros recursos
Teclas de método abreviado predeterminadas de Visual Basic 6.0
Conceptos del lenguaje Visual Basic

Teclas de método abreviado para macros, opción de método


abreviado predeterminada de Visual Basic 6.0
Las combinaciones de teclas de método abreviado siguientes pueden utilizarse al trabajar con macros.
Comando Teclas de método abreviado Descripción
Tools.MacrosIDE ALT + F11 Inicia el IDE de macros, Macros de Microsoft Visual Studio.

Tools.RecordTemporaryMacro CTRL + MAYÚS + R Coloca el entorno en modo de grabación de macros.

Tools.RunTemporaryMacro CTRL + MAYÚS + P Reproduce una macros grabada.


Vea también
Tareas
Cómo: Trabajar con combinaciones de teclas de método abreviado
Referencia
Teclas de método abreviado para la manipulación de texto, opción de método abreviado predeterminada de Visual Basic 6.0
Teclas de método abreviado de administración de ventanas, opción de método abreviado predeterminada en Visual Basic 6.0
Teclas de método abreviado para ventanas de herramientas, opción de método abreviado predeterminada de Visual Basic 6.0
Teclas de método abreviado de proyecto, opción de método abreviado predeterminada de Visual Basic 6.0
Otros recursos
Macros de Visual Studio
Teclas de método abreviado predeterminadas de Visual Basic 6.0
Conceptos del lenguaje Visual Basic

Teclas de método abreviado para ventanas de herramientas,


opción de método abreviado predeterminada de Visual Basic
6.0
Las combinaciones de teclas de método abreviado siguientes permiten mostrar ventanas de herramientas específicas.
Comando Teclas de m Descripción
étodo abrev
iado
Tools.Comman CTRL + SHIFT Coloca la ventana Comando en un modo que permite la selección de texto en la ventana.
dWindowMark + M
Mode

Tools.AddRemo CTRL + T Muestra el cuadro de diálogo Personalizar cuadro de herramientas, que permite agregar y q
veToolboxItems uitar elementos del Cuadro de herramientas.

View.MacroExpl ALT + F8 Muestra la ventana Explorador de macros, que muestra una lista de todas las macros disponi
orer bles en la solución actual.

View.ClassView CTRL + SHIFT Muestra la ventana Vista de clases.


+C

View.Comman CTRL + ALT Muestra la ventana Comandos, que permite escribir comandos que manipulan el IDE.
dWindow +A

View.Document CTRL + ALT Muestra la ventana Esquema del documento para ver el esquema plano o jerárquico del docu
Outline +T mento actual.

View.Favorites CTRL + ALT Muestra la ventana Favoritos, que contiene accesos directos a páginas Web.
+F

View.ObjectBro F2 Muestra el Examinador de objetos para ver las clases, las propiedades, los métodos, los event
wser os y las constantes disponibles en los paquetes y bibliotecas de objetos, así como en los procedi
mientos del proyecto.

View.Output CTRL + ALT Muestra la ventana Resultados para ver los mensajes de estado en tiempo de ejecución.
+O

View.Properties F4 Muestra la ventana Propiedades, que enumera las propiedades y eventos en tiempo de diseño
Window del elemento seleccionado actualmente.

View.PropertyP SHIFT + F4 Muestra las páginas de propiedades del elemento seleccionado.


ages

View.Resource CTRL + SHIFT Muestra la ventana Vista de recursos.


View +E

View.ServerExp CTRL + ALT Muestra el Explorador de servidores, que permite ver y manipular servidores de bases de dat
lorer +S os, registros de eventos, colas de mensajes, servicios Web y muchos otros servicios del sistema
operativo.

View.SolutionE CTRL + R Muestra el Explorador de soluciones, que enumera los proyectos y archivos de la solución act
xplorer ual.
View.TaskList CTRL + ALT Muestra la ventana Lista de tareas, donde se pueden personalizar, clasificar por categorías y ad
+K ministrar tareas, comentarios, accesos directos, advertencias y mensajes de error.

View.Toolbox CTRL + ALT Muestra el Cuadro de herramientas, que contiene controles y otros elementos que pueden inc
+X luirse o utilizarse en el código.
Vea también
Tareas
Cómo: Trabajar con combinaciones de teclas de método abreviado
Otros recursos
Teclas de método abreviado predeterminadas de Visual Basic 6.0
Referencia del lenguaje Visual Basic

Ayuda para controladores de eventos en código de Visual Basic


Para obtener Ayuda sobre un controlador de eventos determinado mientras se está en el editor de código, coloque el cursor
sobre la cláusula Handles en el servidor del procedimiento de evento, y a continuación presione F1. Por ejemplo, en la
instrucción Form1_Load siguiente, el lugar correcto para colocar el cursor está en el término en negrita después de Handles:

Private Sub Form1_Load(ByVal sender As System.Object, _


ByVal e As System.EventArgs) _
Handles MyBase.Load

End Sub

Vea también
Conceptos
Información general sobre controladores de eventos (Formularios Windows Forms)
Otros recursos
Controlar y provocar eventos
Conceptos del lenguaje Visual Basic

Cómo: Compilar y ejecutar un proyecto en Visual Basic


El entorno de desarrollo integrado (IDE) de Visual Studio facilita la compilación de un proyecto y la ejecución de la aplicación
resultante.
Puede utilizar el depurador integrado en el IDE para depurar su proyecto mientras lo ejecuta. Para obtener más información
sobre la depuración, vea Depurar la aplicación de Visual Basic y Editar y continuar (Visual Basic).
Nota
Los cuadros de diálogo y los comandos de menú que se ven pueden diferir de los descritos en la Ayuda, dependiendo de los
valores de configuración o de edición activos. Para cambiar la configuración, elija la opción Importar y exportar configura
ciones en el menú Herramientas. Para obtener más información, vea Valores de configuración de Visual Studio.

Para compilar y ejecutar el proyecto actual


Presione F5 mientras está en el entorno de desarrollo integrado (IDE) de Visual Studio.
El IDE compila el proyecto y ejecuta la aplicación dentro del depurador de Visual Studio.
Para compilar y ejecutar el proyecto actual desde el menú
En el menú Depurar del IDE de Visual Studio, elija Iniciar depuración.
El IDE compila el proyecto y ejecuta la aplicación dentro del depurador de Visual Studio.
Para compilar y ejecutar el proyecto actual sin depurar
Presione CTRL+F5 en el IDE de Visual Studio.
El IDE compila el proyecto y ejecuta la aplicación.
Para obtener información sobre la compilación y ejecución de código de Visual Basic con el compilador de línea de comandos,
vea Generar desde la línea de comandos (Visual Basic).
Vea también
Tareas
Cómo: Iniciar una ejecución
Conceptos
Depurar la aplicación de Visual Basic
Otros recursos
Generar desde la línea de comandos (Visual Basic)
Editar y continuar (Visual Basic)
Conceptos del lenguaje Visual Basic

Seguridad y desarrollo en Visual Basic


Los desarrolladores de Visual Basic deben resolver problemas de seguridad claves cuando empiezan a trabajar con .NET
Framework. Esta información general trata de aplicaciones tanto de Windows como Web, y de las fases de implementación y
depuración de desarrollo.
Información general
Visual Studio proporciona control sobre la seguridad de las aplicaciones en ejecución. Mientras conserva el control con .NET
Framework, este control le obliga a pensar en la programación a la vez que en la seguridad. Existen problemas de seguridad
que se deben resolver para crear aplicaciones útiles y fáciles de usar para los usuarios.
Hay tres situaciones frecuentes en las que se debe dar respuesta a cuestiones de seguridad:
Permisos: el usuario que ejecuta su aplicación puede denegarle privilegios. Una situación así se puede producir porque la
aplicación se ejecuta desde una ubicación en la que el usuario ha especificado que no se les permita el acceso a algunos
recursos del sistema. Por ejemplo, el usuario puede configurar Common Language Runtime para denegar privilegios de
archivo a cualquier aplicación almacenada en una unidad de red. Debe ser consciente de esto al trabajar y escribir código
que pueda responder a las denegaciones. Para obtener más información, vea Directiva de seguridad.
Aplicaciones Web: los usuarios que tienen acceso a aplicaciones Web desde servidores Web deben protegerse contra la
ejecución de código malintencionado o datos dañinos en los servidores. Para obtener más información, vea
Procedimientos de seguridad básicos para aplicaciones Web (Visual Studio).
Configuración de Visual Studio: el modo de configurar Visual Studio puede poner el servidor en peligro, en mayor o
menor medida, frente a ataques de código malintencionado. Para obtener más información, vea
Permisos de usuario y Visual Studio.
Proteger los recursos es un proceso que abarca varias tecnologías y todo el ciclo de desarrollo. Mediante un diseño,
implementación, pruebas e instalación cuidadosos de las aplicaciones, puede crear aplicaciones muy seguras. Existen
tecnologías de seguridad, proporcionadas por ASP.NET, el sistema operativo y exploradores Web, para proteger las
aplicaciones.
Para obtener más información, vea Seguridad en Visual Studio.
Vea también
Otros recursos
Instrucciones de codificación segura
Seguridad en los formularios Windows Forms
Seguridad de sitios Web ASP.NET (Visual Studio)
Seguridad en los proyectos de dispositivos
Ejemplos de seguridad en Visual Basic
Conceptos del lenguaje Visual Basic

Fundamentos de seguridad de .NET Framework


La seguridad de acceso a código es la parte de .NET Framework que controla el acceso a los recursos controlando la ejecución
de código. Esta característica de seguridad es independiente de la seguridad proporcionada por el sistema operativo y se
agrega a ella.
Funcionamiento
Cuando un usuario ejecuta su aplicación, es asignado a una zona por Common Language Runtime de .NET Framework. Las
cinco zonas son:
Zona Descripción
Mi PC El código de aplicación reside en el equipo del usuario.

Local Intranet El código de aplicación se ejecuta desde un recurso compartido de archivos en la intranet del usuario.

Internet El código de aplicación se ejecuta desde Internet.

Sitios de confianza Éstas son aplicaciones de sitios definidos como "De confianza" a través de Internet Explorer.

Sitios no seguros Éstas son aplicaciones de sitios definidos como "Restringidos" a través de Internet Explorer.

La asignación de las tres primeras zonas, Mi PC, Intranet local e Internet, se basa en la ubicación del código. Puede
reemplazar la asignación mediante la indicación de sitios concretos en los grupos Sitios de confianza o Sitios restringidos en
Internet Explorer.
Cada una de estas zonas tiene permisos de acceso concretos establecidos por un administrador del sistema. El nivel de
seguridad para una zona se puede establecer en plena confianza, nivel de confianza medio, confianza baja o ninguna confianza.
Los niveles de confianza definen los recursos a los que puede tener acceso la aplicación. La zona, junto con otros elementos de
seguridad como el editor, el nombre seguro, el sitio Web y la dirección URL del código, determina los permisos concedidos al
código en tiempo de ejecución. (Para obtener más información sobre la evidencia de seguridad, vea Prueba.) No dispone de
control sobre la configuración de seguridad en el equipo del usuario y su aplicación debe trabajar con la configuración que
encuentra cuando se ejecuta. Esto puede significar que se denegará a su aplicación el acceso a recursos determinados. Por
ejemplo, es posible que la aplicación deba escribir datos en un archivo pero que el sistema del usuario impida el acceso de
escritura en tiempo de ejecución iniciando una excepción.
Su trabajo consiste en desarrollar su aplicación para controlar esta situación. Esto no significa necesariamente que buscará
otro método para que su aplicación pueda escribir los datos. Significa que la aplicación debe anticipar que es posible que no
pueda escribir los datos y por tanto, debe responder a esta posibilidad. Puede utilizar más control de excepciones
(Cómo: Comprobar código con un bloque Try...Catch en Visual Basic) o algunos de los objetos del espacio de nombres
System.Security.Permissions para conseguir que su código sea más robusto. Un breve descripción de estos métodos se incluye
en una sección posterior de este artículo, "Desarrollar para entornos de confianza parcial".
Los niveles de seguridad para las zonas se establecen utilizando las herramientas de administración cuando se instala .NET
Framework. Para obtener más información sobre el establecimiento de niveles de seguridad en las zonas de un equipo, vea
Herramientas de administración.
Full Trust
Los desarrolladores trabajan a menudo en un entorno de plena confianza. Mantienen su código fuente en sus discos duros y
prueban sus aplicaciones en sus equipos de desarrollo. En este entorno de plena confianza, cualquier código que el
desarrollador compila se puede ejecutar en el equipo local. No se producen excepciones de seguridad, porque el equipo local
se define como un entorno de plena confianza de forma predeterminada.
Confianza parcial
La confianza parcial describe cualquier zona que no es una zona de plena confianza. Cuando se implementa una aplicación, se
puede mover a una nueva zona, quizás una que no concede plena confianza a la aplicación. Los dos escenarios más comunes
que ejecutan código en confianza parcial son:
Ejecutar código que se descarga de Internet.
Ejecutar código que reside en un recurso compartido de red (intranet).
Algunos ejemplos de recursos que se podrían denegar en una zona de confianza parcial son:
Operaciones de E/S de archivos, incluida la lectura, escritura, creación, eliminación o impresión de archivos.
Componentes del sistema, como valores del Registro y variables de entorno.
Componentes del servidor, incluidos servicios de directorio, Registro, registros de eventos, contadores de rendimiento y
colas de mensajes.
¿Qué es lo que no se permite en la confianza parcial? Eso no es fácil de determinar. Cada clase y cada método de cada clase en
.NET Framework dispone de un atributo de seguridad que define el nivel de confianza necesario para ejecutar el método; este
atributo puede resultar no accesible en tiempo de ejecución debido a estas características de seguridad. El nivel de zona no es
una simple asignación de nivel de confianza a los atributos, sino una colección de permisos concretos asignados a clases y
métodos determinados. Su aplicación no podrá simplemente consultar el nivel de confianza y a continuación, predecir qué
recursos no están disponibles. Puede determinar si su aplicación se ejecuta con plena confianza. Un método para ello se
describe en la sección siguiente, "Desarrollar para entornos de confianza parcial".
Desarrollar para entornos de confianza parcial
En esta sección se presenta una introducción muy breve a cómo los aspectos de seguridad pueden afectar al código que
escribe. No hay ninguna solución única para el desarrollo en un entorno de confianza parcial. Su solución dependerá de la
aplicación que escribe. Además, dado que el nivel de confianza puede cambiar durante la ejecución de la aplicación, no puede
simplemente comprobar el nivel de confianza existente y continuar.
Código de excepción de seguridad
El primer paso para desarrollar en zonas de confianza parcial consiste en escribir código que reconozca que aparecerán
excepciones de seguridad. Observe el código siguiente:

Public Sub MakeABitmap()


Dim b As Bitmap = New Bitmap(100, 100)
' Some code here to draw a nice picture in the bitmap
b.Save("c:\PrettyPicture.bmp")
End Sub

Este método se ejecuta sin iniciar una excepción si el proyecto y el ensamblado del proyecto están almacenados en el disco
duro de su equipo y si es miembro del grupo Administradores de su equipo. Si implementa esta aplicación en su intranet, se
puede iniciar SecurityException cuando la aplicación intenta guardar el objeto de mapa de bits. Si no tiene un bloque
Instrucción Try...Catch...Finally (Visual Basic) delimitando este código, su aplicación finaliza con la excepción. Ésta
probablemente no es una experiencia satisfactoria del usuario. Si agrega el código de control de excepciones, su aplicación
puede:
Advertir al usuario que la aplicación no puede finalizar todas las tareas que necesita.
Limpiar cualquier objeto existente, para que el código que se ejecuta después del bloque catch no genere un error.
Podría modificar el código de almacenamiento del mapa de bits como se muestra a continuación. El código agregado advierte
al usuario de que el archivo no se ha guardado debido a una denegación de seguridad y separa los errores de seguridad de
otros errores de E/S de archivo, como nombres de archivo incorrectos. Este método no crea ningún problema de seguridad. El
usuario modificará la seguridad para confiar en su aplicación o la aplicación no se ejecutará.

Public Sub MakeABitmap()


Dim b As Bitmap = Nothing
Try
b = New Bitmap(100, 100)
b.Save("c:\PrettyPicture.bmp")
Catch ex As System.Security.SecurityException
' Let the user know the save won't work.
MessageBox.Show("Permission to save the file was denied, " & _
"and the bitmap was not saved.")
Catch ex As System.Exception
' React to other exceptions here.
MessageBox.Show("Unable to create and save the bitmap.")
End Try
End Sub

Las clases, atributos y enumeraciones de la compatibilidad del espacio de nombres System.Security.Permissions controlan
más aún las tareas de seguridad en la aplicación. Si escribe bibliotecas que pueden llamar otras aplicaciones, deseará que la
biblioteca compruebe los permisos del código que realiza la llamada. Por ejemplo, podría simplemente agregar el siguiente
atributo del nivel de ensamblado en la parte superior de su archivo de código o en los archivos AssemblyInfo.vb o
AssemblyInfo.cs. Para obtener más información, vea Configurar atributos de ensamblados.

<Assembly: System.Security.Permissions.FileIOPermissionAttribute( _
System.Security.Permissions.SecurityAction.RequestMinimum, _
Write:="c:\PrettyPicture.bmp")>

El tiempo de ejecución comprueba el permiso cuando se carga el ensamblado. Si el tiempo de ejecución deniega el permiso
solicitado, el ensamblado no se carga y se inicia una excepción de seguridad. Si agrega este atributo a una aplicación
independiente, la aplicación podría no ejecutarse. Si este atributo aparece en una biblioteca de clases, la biblioteca puede no
cargarse en tiempo de ejecución. Necesitaría agregar un bloque try/catch al código que llama a la biblioteca de clases.
También puede pedir específicamente los permisos en tiempo de ejecución; esto se muestra a continuación con el método
Demand. El tiempo de ejecución puede conceder o denegar la demanda. La demanda se deniega produciendo una excepción de
seguridad. Podría reescribir el código de esta forma para exigir explícitamente el permiso para escribir el archivo de mapa de
bits:

Public Sub MakeABitmap()


Dim b As Bitmap = Nothing
Dim filename As String = "c:\PrettyPicture.bmp"
Dim permission As New System.Security.Permissions.FileIOPermission( _
System.Security.Permissions.FileIOPermissionAccess.Write, _
filename)

Try
permission.Demand()
Catch ex As System.Security.SecurityException
' Let the user know the save won't work.
MessageBox.Show("Permission to save the file was denied, " & _
"and the bitmap was not saved.")
Catch ex As System.Exception
' React to other exceptions here.
MessageBox.Show("Other error.")
End Try

Try
b = New Bitmap(100, 100)
b.Save(filename)
Catch ex As System.Exception
MessageBox.Show("Unable to create and save the bitmap.")
End Try
End Sub

Pruebas
El segundo paso para desarrollar en zonas de confianza parcial consiste en probar en varios entornos, sobre todo de su
intranet e Internet. Esto obligará a iniciar las excepciones de seguridad. Una prueba importante consiste en crear una cuenta de
usuario en el equipo local que no disponga de derechos de Administrador e intentar ejecutar la aplicación con dicha cuenta.
Vea también
Conceptos
Introducción a la seguridad de acceso a código
Otros recursos
Seguridad de acceso a código
Espacios de nombres de seguridad en Visual Studio
Instrucciones de codificación segura
Conceptos del lenguaje Visual Basic

Ayudas de codificación para crear aplicaciones seguras


A la hora de considerar la seguridad, debe proteger los equipos de desarrollo de ataques de código malicioso y del daño a los
datos, así como los servidores. En el entorno de desarrollo existen varios mecanismos que puede aprovechar para ayudar a
proteger sus servidores de desarrollo:
Visual Studio Tools
Cuando instala Visual Studio se agregan grupos de cuenta Usuarios. El grupo Usuarios tiene los permisos de archivo, recurso
compartido y de IIS (Servicios de Internet Information Server) necesarios para crear y desarrollar aplicaciones Web en un
servidor. El grupo Usuarios también tiene la capacidad de depurar procesos en un equipo determinado, local o remotamente.
Como miembro del grupo Usuarios, tiene acceso a la mayoría de los recursos. Para obtener más información, vea
Permisos de usuario y Visual Studio.
Depuración
Se recomienda que depure en un equipo de pruebas, en lugar de hacerlo en el equipo de implementación. Si debe depurar en
un servidor de implementación, instale sólo el componente de depuración remota y desinstálelo cuando finalice la depuración.
Deje el servidor sin conexión cuando esté depurando. Para obtener más información, vea
Cómo: Configurar la depuración remota. Para obtener información general sobre la depuración, vea Seguridad del depurador.
Implementación
En la mayoría de las aplicaciones, es suficiente si se instala únicamente .NET Framework en el servidor. Si se instalan los
componentes de servidor de Visual Studio o de Visual Studio en el equipo de implementación, el grupo Usuarios está en el
equipo de implementación. Además, también puede desear deshabilitar el descubrimiento dinámico.
Nota
Se recomienda encarecidamente no instalar Visual Studio 2005 en su servidor de implementación. La instalación de Visual St
udio agrega archivos y usuarios a su sistema que pueden resultar vulnerables. Puede proteger un sistema que tiene Visual St
udio 2005 instalado, pero si no necesita Visual Studio 2005 en el servidor de implementación, se recomienda no instalarlo e
n él.

La característica Copiar proyecto de Visual Studio incluye la opción de implementar una aplicación con un archivo de
configuración (Web.config) diferente del archivo de configuración utilizado en desarrollo. Es probable que el archivo de
desarrollo tenga la depuración habilitada; si se implementa, permite a los usuarios examinar la pila de llamadas cuando se
inicia una excepción. Se recomienda implementar con un archivo de configuración independiente que no permita la
depuración.
Para obtener más información, vea Implementación y seguridad con ClickOnce y
Cómo: Depurar una aplicación de confianza parcial.
Vea también
Referencia
La configuración del proxy de este equipo no es la correcta para el descubrimiento Web.
Conceptos
Seguridad y desarrollo en Visual Basic
Procedimientos de seguridad básicos para aplicaciones Web (Visual Studio)
Información general sobre la seguridad en formularios Windows Forms
Conceptos del lenguaje Visual Basic

Programar en Visual Basic


Esta sección trata tareas de programación sobre las que puede desear más información a medida que crea su aplicación de
Visual Basic.
En esta sección
Acceso a una aplicación en ejecución en Visual Basic
Contiene documentación sobre la forma de controlar el comportamiento en tiempo de ejecución de la aplicación y de
obtener información sobre la aplicación en tiempo de ejecución.
Acceso a los formularios de la aplicación
Contiene documentación sobre la forma de tener acceso a los formularios de una aplicación con los objetos My.Forms y
My.Application.
Acceso a los recursos de la aplicación
Contiene documentación sobre la forma de tener acceso a los recursos de una aplicación con el objeto My.Resources.
Acceso a la configuración de la aplicación.
Contiene documentación sobre la forma de tener acceso a la configuración de una aplicación con el objeto My.Settings.
Acceso a los servicios Web de la aplicación
Contiene documentación sobre la forma de tener acceso con el objeto My.WebServices a los servicios Web a los que hace
referencia la aplicación.
Acceso a los recursos del equipo
Contiene documentación sobre la forma de utilizar el objeto My.Computer para tener acceso a información sobre el equipo
donde se ejecuta una aplicación y sobre cómo controlar el equipo.
Acceso a los datos del usuario
Contiene documentación sobre las tareas que puede realizar con el objeto My.User.
Registrar información de la aplicación
Contiene documentación sobre la forma de registrar información de la aplicación con los objetos My.Application.Log y
My.Log y de ampliar las capacidades de registro de la aplicación.
Procesar unidades, directorios y archivos
Contiene documentación sobre la forma de tener acceso al sistema de archivos con el objeto My.Computer.FileSystem.
Actualizar una aplicación
Contiene documentación sobre la forma de actualizar aplicaciones ClickOnce mediante la propiedad
My.Application.Deployment.
Vea también
Otros recursos
Desarrollo de aplicaciones con Visual Basic
Conceptos del lenguaje Visual Basic

Acceso a los recursos del equipo


El objeto My.Computer es uno de los tres objetos centrales de My, que proporciona acceso a la información y las funciones
habituales. My.Computer proporciona métodos, propiedades y eventos para obtener acceso al equipo en el que se está
ejecutando la aplicación. Entre sus objetos se incluyen:
My.Computer.Audio (Objeto)
My.Computer.Clipboard (Objeto)
My.Computer.Clock (Objeto)
My.Computer.FileSystem (Objeto)
My.Computer.Info (Objeto)
My.Computer.Keyboard (Objeto)
My.Computer.Mouse (Objeto)
My.Computer.Network (Objeto)
My.Computer.Ports (Objeto)
My.Computer.Registry (Objeto)
En esta sección
Reproducir sonidos
Muestra las tareas asociadas a My.Computer.Audio, como reproducir un sonido en segundo plano.
Almacenar y leer datos en el Portapapeles
Muestra las tareas asociadas a My.Computer.Clipboard, como leer datos del Portapapeles o escribir datos en él.
Acceso al reloj del equipo
Muestra las tareas asociadas a My.Computer.Clock, como determinar la hora del sistema local.
Obtener información acerca del equipo
Muestra las tareas asociadas a My.Computer.Info, como determinar el nombre completo o las direcciones IP de un equipo.
Acceso al teclado
Muestra las tareas asociadas a My.Computer.Keyboard, como determinar si BLOQ MAYÚS está activado.
Acceso al mouse (ratón)
Muestra las tareas asociadas a My.Computer.Mouse, como determinar si un mouse (ratón) está presente.
Realizar operaciones de red
Muestra las tareas asociadas a My.Computer.Network, como cargar o descargar archivos.
Acceso a los puertos del equipo
Muestra las tareas asociadas a My.Computer.Ports, como mostrar los puertos serie disponibles o enviar cadenas a los
puertos serie.
Leer y escribir en el Registro
Muestra las tareas asociadas a My.Computer.Registry, como leer datos de las claves del Registro o escribir datos en las
claves del Registro.
Conceptos del lenguaje Visual Basic

Reproducir sonidos
El objeto My.Computer.Audio proporciona métodos para reproducir sonidos.
En esta sección
Cómo: Reproducir sonidos y esperar a que finalicen en Visual Basic
Muestra cómo reproducir sonidos de un archivo de sonido o un recurso de aplicación y cómo esperar su finalización.
Cómo: Reproducir sonidos en Visual Basic
Muestra cómo reproducir un sonido de un archivo de sonido o un recurso de aplicación en segundo plano.
Cómo: Reproducir sonidos en bucle en Visual Basic
Muestra cómo reproducir un sonido de un archivo de sonido o un recurso de aplicación como un bucle continuo.
Cómo: Detener la reproducción de sonidos en segundo plano en Visual Basic
Muestra cómo detener un sonido que se reproduce en segundo plano.
Cómo: Reproducir sonidos del sistema en Visual Basic
Muestra cómo reproducir un sonido de sistema.
Referencia
My.Computer.Audio (Objeto)
Describe el objeto My.Computer.Audio.
My.Computer.Audio.Play (Método)
Describe el método Play.
My.Computer.Audio.PlaySystemSound (Método)
Describe el método PlaySystemSound.
My.Computer.Audio.Stop (Método)
Describe el método Stop, utilizado para detener un sonido que se está reproduciendo.
Conceptos del lenguaje Visual Basic

Cómo: Reproducir sonidos y esperar a que finalicen en Visual


Basic
Este ejemplo reproduce sonidos de un archivo de sonido y un recurso de aplicación utilizando el método
My.Computer.Audio.Play y espera a que terminen.
La reproducción en segundo plano permite que la aplicación ejecute otro código mientras se reproduce el sonido. El método
My.Computer.Audio.Play permite que la aplicación reproduzca un único sonido en segundo plano cada vez; cuando la
aplicación reproduce un nuevo sonido en segundo plano, se detiene la reproducción del sonido anterior.
La clase My.Computer.Audio proporciona los métodos y propiedades que se pueden utilizar para reproducir archivos de
sonido.
Ejemplo
El método My.Computer.Audio.Play reproduce el sonido especificado y espera a que finalice.
Compruebe que el nombre de archivo hace referencia a un archivo de sonido .wav almacenado en su sistema.
VB
Sub PlaySoundFile()
My.Computer.Audio.Play("C:\Waterfall.wav", _
AudioPlayMode.WaitToComplete)
End Sub

Este ejemplo de código también está disponible como fragmento de código de IntelliSense. En el selector de fragmentos de
código, se encuentra en Aplicaciones de Windows Forms > Sonido. Para obtener más información, vea
Cómo: Insertar fragmentos de código en el código (Visual Basic).
El método My.Computer.Audio.Play reproduce el sonido especificado y espera a que finalice.
Compruebe que los recursos de la aplicación incluyen un archivo de sonido .wav denominado Waterfall.
VB
Sub PlaySoundResource()
My.Computer.Audio.Play(My.Resources.Waterfall, _
AudioPlayMode.WaitToComplete)
End Sub

Compilar el código
Estos ejemplos de código sólo se pueden ejecutar en una aplicación de Windows Forms o una aplicación de consola. Para
obtener más información, vea My.Computer.Audio.Play (Método).
Programación eficaz
El nombre de archivo debe hacer referencia a un archivo de sonido .wav almacenado en el sistema.
Para simplificar la administración de sus archivos de sonido, considere almacenar los archivos como recursos de aplicación. Así
se puede tener acceso a ellos a través de My.Resources (Objeto).
Vea también
Tareas
Cómo: Reproducir sonidos del sistema en Visual Basic
Cómo: Reproducir sonidos en Visual Basic
Referencia
My.Computer.Audio.Play (Método)
AudioPlayMode (Enumeración)
My.Computer.Audio (Objeto)
Conceptos del lenguaje Visual Basic

Cómo: Reproducir sonidos en Visual Basic


En este ejemplo se reproduce un sonido en segundo plano.
La reproducción en segundo plano permite que la aplicación ejecute otro código mientras se reproduce el sonido. El método
My.Computer.Audio.Play permite que la aplicación reproduzca sólo un sonido en segundo plano a la vez; cuando la
aplicación reproduce un nuevo sonido en segundo plano, deja de reproducir el sonido anterior. Si desea reproducir un sonido
y esperar a que termine, vea Cómo: Reproducir sonidos y esperar a que finalicen en Visual Basic.
En general, cuando una aplicación reproduce un sonido en bucle, debería detener el sonido en algún momento. Para obtener
más información, vea Cómo: Detener la reproducción de sonidos en segundo plano en Visual Basic.
Ejemplo
El método My.Computer.Audio.Play reproduce un sonido en segundo plano cuando se especifica PlayMode.Background.
Comprueba que el nombre de archivo hace referencia a un archivo de sonido .wav del sistema.
VB
Sub PlayBackgroundSoundFile()
My.Computer.Audio.Play("C:\Waterfall.wav", _
AudioPlayMode.Background)
End Sub

El método My.Computer.Audio.Play reproduce el sonido especificado en segundo plano cuando se especifica


PlayMode.Background.
Comprueba que los recursos de la aplicación incluyen un archivo de sonido .wav denominado Waterfall.
VB
Sub PlayBackgroundSoundResource()
My.Computer.Audio.Play(My.Resources.Waterfall, _
AudioPlayMode.Background)
End Sub

Compilar el código
Estos ejemplos de código sólo se pueden ejecutar en un formulario Windows Forms o en una aplicación de consola. Para
obtener más información, vea My.Computer.Audio.Play (Método).
Programación eficaz
El nombre de archivo debe hacer referencia un archivo de sonido .wav del sistema.
Para simplificar la administración de sus archivos de sonido, considere almacenar los archivos como recursos de aplicación. Se
puede obtener acceso a ellos a través del objeto My.Resources (Objeto).
Vea también
Tareas
Cómo: Reproducir sonidos del sistema en Visual Basic
Cómo: Detener la reproducción de sonidos en segundo plano en Visual Basic
Cómo: Reproducir sonidos en bucle en Visual Basic
Referencia
My.Computer.Audio.Play (Método)
AudioPlayMode (Enumeración)
Conceptos del lenguaje Visual Basic

Cómo: Reproducir sonidos en bucle en Visual Basic


Este ejemplo reproduce un sonido en segundo plano en bucle de repetición.
La reproducción en segundo plano permite que la aplicación ejecute otro código mientras se reproduce el sonido. Esto es
particularmente útil cuando el sonido que se está reproduciendo no debe bloquear la ejecución de la aplicación. El método
My.Computer.Audio.Play permite que la aplicación reproduzca un único sonido en segundo plano cada vez; cuando la
aplicación reproduce un nuevo sonido en segundo plano, se detiene la reproducción del sonido anterior.
En general, cuando una aplicación reproduce un sonido en bucle de repetición, en algún momento debería detener el sonido.
Para obtener más información, vea Cómo: Detener la reproducción de sonidos en segundo plano en Visual Basic.
Ejemplo
El método My.Computer.Audio.Play reproduce el sonido especificado en segundo plano cuando se especifica
PlayMode.BackgroundLoop.
Compruebe que el nombre de archivo hace referencia a un archivo de sonido .wav almacenado en su sistema.
VB
Sub PlayLoopingBackgroundSoundFile()
My.Computer.Audio.Play("C:\Waterfall.wav", _
AudioPlayMode.BackgroundLoop)
End Sub

Este ejemplo de código también está disponible como fragmento de código de IntelliSense. En el selector de fragmentos de
código, se encuentra en Aplicaciones de Windows Forms > Sonido. Para obtener más información, vea
Cómo: Insertar fragmentos de código en el código (Visual Basic).
El método My.Computer.Audio.Play reproduce el sonido especificado en segundo plano cuando se especifica
PlayMode.BackgroundLoop.
Compruebe que los recursos de la aplicación incluyen un archivo de sonido .wav denominado Waterfall.
VB
Sub PlayLoopingBackgroundSoundResource()
My.Computer.Audio.Play(My.Resources.Waterfall, _
AudioPlayMode.BackgroundLoop)
End Sub

Compilar el código
Estos ejemplos de código sólo se pueden ejecutar en una aplicación de Windows Forms o una aplicación de consola. Para
obtener más información, vea My.Computer.Audio.Play (Método).
Programación eficaz
El nombre de archivo debe hacer referencia a un archivo de sonido .wav almacenado en el sistema.
Para simplificar la administración de sus archivos de sonido, considere almacenar los archivos como recursos de aplicación. Así
se puede tener acceso a ellos a través de My.Resources (Objeto).
Vea también
Tareas
Cómo: Reproducir sonidos del sistema en Visual Basic
Cómo: Detener la reproducción de sonidos en segundo plano en Visual Basic
Cómo: Reproducir sonidos en Visual Basic
Referencia
My.Computer.Audio.Play (Método)
AudioPlayMode (Enumeración)
Conceptos del lenguaje Visual Basic

Cómo: Detener la reproducción de sonidos en segundo plano


en Visual Basic
Este ejemplo detiene la reproducción de un sonido en segundo plano.
La reproducción en segundo plano permite que la aplicación ejecute otro código mientras se reproduce el sonido. Para obtener
más información, vea Cómo: Reproducir sonidos en bucle en Visual Basic y Cómo: Reproducir sonidos en Visual Basic.
En general, cuando una aplicación reproduce un sonido en bucle de repetición, debería detener el sonido en algún momento
dado.
Ejemplo
Utilice el método My.Computer.Audio.Stop para detener la reproducción del sonido en segundo plano o en bucle de
repetición que está reproduciendo actualmente la aplicación.
VB
Sub StopBackgroundSound()
My.Computer.Audio.Stop()
End Sub

Este ejemplo de código también está disponible como fragmento de código de IntelliSense. En el selector de fragmentos de
código, se encuentra en Aplicaciones de Windows Forms > Sonido. Para obtener más información, vea
Cómo: Insertar fragmentos de código en el código (Visual Basic).
Compilar el código
Este ejemplo de código sólo se puede ejecutar en una aplicación de Windows Forms o una aplicación de consola. Para obtener
más información, vea My.Computer.Audio.Stop (Método).
Vea también
Tareas
Cómo: Reproducir sonidos en Visual Basic
Cómo: Determinar si existe un archivo en Visual Basic
Referencia
My.Computer.Audio.Stop (Método)
Otros recursos
Reproducir sonidos
Conceptos del lenguaje Visual Basic

Cómo: Reproducir sonidos del sistema en Visual Basic


En este ejemplo se utiliza el método My.Computer.Audio.PlaySystemSound para reproducir un sonido del sistema.
El método My.Computer.Audio.PlaySystemSound toma como parámetro uno de los miembros compartidos de la clase
SystemSound.
Ejemplo
Utilice el método My.Computer.Audio.PlaySystemSound para reproducir el sonido del sistema especificado.
El sonido del sistema Asterisk generalmente denota errores. Para obtener más información, vea SystemSound.
VB
Sub PlaySystemSound()
My.Computer.Audio.PlaySystemSound( _
System.Media.SystemSounds.Asterisk)
End Sub

Compilar el código
Este ejemplo de código sólo se puede ejecutar en un formulario Windows Forms o en una aplicación de consola. Para obtener
más información, vea My.Computer.Audio.PlaySystemSound (Método).
Vea también
Tareas
Cómo: Reproducir sonidos en Visual Basic
Cómo: Reproducir sonidos en bucle en Visual Basic
Cómo: Determinar si existe un archivo en Visual Basic
Referencia
My.Computer.Audio.Stop (Método)
System.Media.SystemSound
Conceptos del lenguaje Visual Basic

Almacenar y leer datos en el Portapapeles


El objeto My.Computer.Clipboard proporciona métodos y propiedades que se pueden utilizar para interactuar con el
Portapapeles, lo que permite al usuario escribir datos en el Portapapeles u obtener datos de éste, así como comprobar si
existen datos en el Portapapeles en un formato determinado. El Portapapeles es un conjunto de funciones y mensajes que
permiten a las aplicaciones transferir datos. Dado que todas las aplicaciones tienen acceso al Portapapeles, los datos se pueden
transferir con facilidad entre ellas.
En esta sección
Cómo: Vaciar el Portapapeles en Visual Basic
Muestra cómo borrar el Portapapeles.
Cómo: Leer el Portapapeles en Visual Basic
Muestra cómo leer datos del Portapapeles.
Cómo: Determinar qué tipo de archivo se almacena en el Portapapeles en Visual Basic
Muestra cómo determinar qué tipo de datos se almacena en el Portapapeles.
Cómo: Escribir en el Portapapeles en Visual Basic
Muestra cómo escribir datos en el Portapapeles.
Cómo: Recuperar una imagen del Portapapeles en Visual Basic
Muestra cómo recuperar una imagen del Portapapeles.
Cómo: Guardar una secuencia de audio en el Portapapeles en Visual Basic
Muestra cómo guardar datos de sonido en el Portapapeles.
Referencia
My.Computer.Clipboard (Objeto)
Describe el objeto My.Computer.Clipboard y sus métodos y propiedades.
Secciones relacionadas
Serialización
Describe la serialización. Una clase debe ser serializable para que pueda situarse en el Portapapeles.
Referencia del lenguaje Visual Basic

Cómo: Vaciar el Portapapeles en Visual Basic


My.Computer.Clipboard.Clear (Método) borra el Portapapeles. Otros procesos comparten el Portapapeles, por lo que borrarlo
puede tener un impacto en ellos.
Para borrar el Portapapeles
Utilice el método Clear, como sigue.
VB
My.Computer.Clipboard.Clear()

Vea también
Tareas
Cómo: Leer el Portapapeles en Visual Basic
Cómo: Determinar qué tipo de archivo se almacena en el Portapapeles en Visual Basic
Cómo: Guardar una secuencia de audio en el Portapapeles en Visual Basic
Cómo: Escribir en el Portapapeles en Visual Basic
Referencia
My.Computer.Clipboard.Clear (Método)
Conceptos del lenguaje Visual Basic

Cómo: Leer el Portapapeles en Visual Basic


El Portapapeles se puede utilizar para almacenar datos, como texto e imágenes. Dado que todos los procesos activos
comparten el Portapapeles, se puede utilizar para transferir datos entre ellos. El objeto My.Computer.Clipboard permite
obtener acceso al Portapapeles y leer y escribir en él con facilidad. Los métodos GetText, GetImage, GetData,
GetAudioStream y GetFileDropDownList permiten especificar el tipo de datos que le gustaría leer desde el Portapapeles.
Si los datos no se pueden recuperar del Portapapeles, se produce una excepción ExternalException.
Para leer texto del Portapapeles y mostrarlo
Utilice el método My.Computer.Clipboard.GetText para leer el texto. El siguiente código lee el texto y lo muestra en un
cuadro de mensaje. Debe haber texto almacenado en el Portapapeles para que el ejemplo se ejecute correctamente.
VB
MsgBox(My.Computer.Clipboard.GetText())

Este ejemplo de código también está disponible como fragmento de código de IntelliSense. En el selector de fragmentos
de código, se encuentra en Aplicaciones de Windows Forms> Portapapeles. Para obtener más información, vea
Cómo: Insertar fragmentos de código en el código (Visual Basic).

Para leer una imagen del Portapapeles


Utilice el método My.Computer.Clipboard.GetImage para leer una imagen del Portapapeles. El código siguiente lee
una imagen del Portapapeles y la asigna a la propiedad Image de Button1. Debe haber una imagen almacenada en el
Portapapeles y un botón denominado Button1 para que el ejemplo se ejecute correctamente.
VB
Button1.Image = My.Computer.Clipboard.GetImage()

Este ejemplo de código también está disponible como fragmento de código de IntelliSense. En el selector de fragmentos
de código, se encuentra en Aplicaciones de Windows Forms> Portapapeles. Para obtener más información, vea
Cómo: Insertar fragmentos de código en el código (Visual Basic).
Vea también
Tareas
Cómo: Escribir en el Portapapeles en Visual Basic
Cómo: Determinar qué tipo de archivo se almacena en el Portapapeles en Visual Basic
Referencia
My.Computer.Clipboard (Miembros del objeto)
My.Computer.Clipboard (Objeto)
Conceptos del lenguaje Visual Basic

Cómo: Determinar qué tipo de archivo se almacena en el


Portapapeles en Visual Basic
El Portapapeles se puede utilizar para almacenar datos, como texto e imágenes. Dado que el Portapapeles está disponible entre
los procesos, se puede utilizar para transferir los datos entre ellos. El objeto My.Computer.Clipboard permite obtener acceso
al Portapapeles y leer y escribir en él con facilidad.
Los datos del Portapapeles pueden tener formas diferentes, puede tratarse, por ejemplo, de un texto, un archivo de sonido o
una imagen. Para determinar qué tipo de archivo se encuentra en el Portapapeles, puede utilizar distintos métodos, como
ContainsAudio, ContainsFileDropList, ContainsImage y ContainsText. Puede utilizar el método ContainsData si tiene un
formato personalizado que desea comprobar.
Para determinar si el Portapapeles contiene una imagen
Utilice la función ContainsImage para determinar si los datos contenidos en el Portapapeles son una imagen. El código
siguiente comprueba si los datos son una imagen y crea un informe en consecuencia.
VB
If My.Computer.Clipboard.ContainsImage() = True Then
MsgBox("Clipboard contains an image.")
Else
MsgBox("Clipboard does not contain an image.")
End If

Vea también
Tareas
Cómo: Leer el Portapapeles en Visual Basic
Cómo: Escribir en el Portapapeles en Visual Basic
Referencia
My.Computer.Clipboard (Objeto)
My.Computer.Clipboard.ContainsAudio (Método)
My.Computer.Clipboard.ContainsFileDropList (Método)
My.Computer.Clipboard.ContainsImage (Método)
My.Computer.Clipboard.ContainsText (Método)
My.Computer.Clipboard.ContainsData (Método)
Conceptos del lenguaje Visual Basic

Cómo: Escribir en el Portapapeles en Visual Basic


El Portapapeles se puede utilizar para almacenar datos, como texto e imágenes. Como todos los procesos comparten el
Portapapeles, éste se puede utilizar para transferir datos entre ellos. El objeto My.Computer.Clipboard permite tener acceso
fácilmente al Portapapeles, y leer y escribir en él. Los métodos SetAudio, SetData, SetFileDropDownList, SetImage y
SetText permiten colocar datos en el Portapapeles.
Nota de seguridad
Como otros usuarios pueden tener acceso al Portapapeles, no se debe utilizar para almacenar información confidencial, com
o contraseñas o datos reservados.

Para escribir texto en el Portapapeles


Utilice el método My.Computer.Clipboard.SetText para escribir texto en el Portapapeles. El código siguiente escribe la
cadena "This is a test string" en el Portapapeles.
VB
My.Computer.Clipboard.SetText("This is a test string.")

Para escribir texto en el Portapapeles con un formato concreto


Utilice el método My.Computer.Clipboard.SetText para escribir texto en el Portapapeles, incluido el tipo de
TextDataFormat. El código siguiente escribe la cadena "This is a test string" en el Portapapeles como texto RTF.
VB
My.Computer.Clipboard.SetText("This is a test string.", _
System.Windows.Forms.TextDataFormat.Rtf)

Para escribir datos en el Portapapeles


Utilice el método My.Computer.Clipboard.SetData para escribir datos en el Portapapeles. En este ejemplo se escribe
DataObject dataChunk en el Portapapeles en el formato specialFormat personalizado.
VB
My.Computer.Clipboard.SetData("specialFormat", dataChunk)

Vea también
Tareas
Cómo: Leer el Portapapeles en Visual Basic
Cómo: Determinar qué tipo de archivo se almacena en el Portapapeles en Visual Basic
Referencia
My.Computer.Clipboard (Objeto)
My.Computer.Clipboard.SetText (Método)
My.Computer.Clipboard.SetData (Método)
My.Computer.Clipboard.SetDataObject (Método)
TextDataFormat
Conceptos del lenguaje Visual Basic

Cómo: Recuperar una imagen del Portapapeles en Visual Basic


El método My.Computer.Clipboard.GetImage permite recuperar una imagen del Portapapeles.
Los elementos incluidos en el Portapapeles se conservarán incluso después de salir de la aplicación.
Para recuperar una imagen del Portapapeles
Utilice el método My.Computer.Clipboard.GetImage para recuperar una imagen del Portapapeles. Este ejemplo
comprueba si existe una imagen en el Portapapeles antes de recuperarla y asignarla a PictureBox1.
VB
If My.Computer.Clipboard.ContainsImage() Then
Dim grabpicture As System.Drawing.Image
grabpicture = My.Computer.Clipboard.GetImage()
picturebox1.Image = grabpicture
End If

Vea también
Tareas
Cómo: Determinar qué tipo de archivo se almacena en el Portapapeles en Visual Basic
Referencia
My.Computer.Clipboard (Objeto)
My.Computer.Clipboard (Miembros del objeto)
My.Computer.Clipboard.ContainsImage (Método)
My.Computer.Clipboard.GetImage (Método)
Conceptos del lenguaje Visual Basic

Cómo: Guardar una secuencia de audio en el Portapapeles en


Visual Basic
El método My.Computer.Clipboard.SetAudio se puede utilizar para guardar datos de sonido en el Portapapeles.
Para guardar datos de sonido en el Portapapeles
Utilice el método My.Computer.Clipboard.SetAudio para escribir datos de sonido en el Portapapeles. En este ejemplo
se crea la matriz de bytes musicReader, se lee en ella el archivo cool.wav y, a continuación, se escribe en el Portapapeles.
VB
Dim musicReader As Byte()
musicReader = My.Computer.FileSystem.ReadAllBytes("cool.wav")
My.Computer.Clipboard.SetAudio(musicReader)

Vea también
Referencia
My.Computer.Clipboard (Objeto)
My.Computer.Clipboard.SetAudio (Método)
My.Computer.Clipboard.GetAudioStream (Método)
My.Computer.Clipboard.ContainsAudio (Método)
Otros recursos
Almacenar y leer datos en el Portapapeles
Conceptos del lenguaje Visual Basic

Acceso al reloj del equipo


El objeto My.Computer.Clock proporciona propiedades para tener acceso a la hora local actual y hora universal coordinada
(UTC) (equivalente a la hora del meridiano de Greenwich) del reloj del sistema.
Comentarios
Esta tabla muestra tareas asociadas con el objeto My.Computer.Clock e indica temas que las explican.
Para Vea
Determinar la zona horaria GMT My.Computer.Clock.GmtTime (Propiedad)

Determinar la hora del sistema local My.Computer.Clock.LocalTime (Propiedad)

Determinar el número de pasos que se han producido desde que se inició el equip My.Computer.Clock.TickCount (Propiedad)
o

Vea también
Referencia
My.Computer.Clock (Objeto)
My.Computer.Clock (Miembros del objeto)
System.DateTime
Conceptos
Aplicar formato de fecha y hora para una referencia cultural específica
Conceptos del lenguaje Visual Basic

Obtener información acerca del equipo


El objeto My.Computer.Info proporciona propiedades para obtener información sobre la memoria, los ensamblados
cargados, el nombre y el sistema operativo del equipo.
Comentarios
Esta tabla enumera las tareas que se realizan normalmente mediante el objeto My.Computer.Info y señala a temas que
muestran cómo llevar a cabo cada una de ellas.
Para Vea
Determinar cuánto espacio de la dirección virtual está disponible para el e My.Computer.Info.TotalVirtualMemory (Propiedad)
quipo en el que se instala la aplicación

Determinar el tipo de plataforma del equipo en el que se está ejecutando l My.Computer.Info.OSPlatform (Propiedad)
a aplicación

Determinar el sistema operativo del equipo en el que se está ejecutando la My.Computer.Info.OSFullName (Propiedad)
aplicación

Determinar qué Service Pack se ha instalado en el equipo en el que se está My.Computer.Info.OSVersion (Propiedad)
ejecutando la aplicación

Determinar la UICulture instalada en el equipo en el que se está ejecutand My.Computer.Info.InstalledUICulture (Propiedad)


o la aplicación

Vea también
Referencia
My.Computer.Info (Objeto)
My.Computer.Info (Miembros del objeto)
Conceptos del lenguaje Visual Basic

Acceso al teclado
El objeto My.Computer.Keyboard proporciona propiedades para tener acceso al estado actual del teclado, como las teclas
que se han presionado, y proporciona un método para enviar pulsaciones de teclas a la ventana activa.
Tareas
Esta tabla muestra tareas asociadas con el objeto My.Computer.Keyboard e indica temas que muestran cómo realizar cada
tarea.
Para Vea
Determinar si BLOQ MAYÚS está activado Cómo: Determinar si CapsLock está activado en Visual Basic

Determinar si la tecla MAYÚS está presionada My.Computer.Keyboard.ShiftKeyDown (Propiedad)

Determinar si la tecla ALT está presionada My.Computer.Keyboard.AltKeyDown (Propiedad)

Determinar si la tecla CTRL está presionada My.Computer.Keyboard.CtrlKeyDown (Propiedad)

Determine si BLOQ NUM está activado My.Computer.Keyboard.NumLock (Propiedad)

Determinar si BLOQ DESPL está activado My.Computer.Keyboard.ScrollLock (Propiedad)

Iniciar una aplicación y enviarle pulsaciones de tecla Cómo: Iniciar una aplicación y enviarle pulsaciones de teclas (Visual Basic)

Vea también
Referencia
My.Computer.Keyboard (Objeto)
System.Windows.Forms.Keys
Conceptos del lenguaje Visual Basic

Cómo: Determinar si CapsLock está activado en Visual Basic


Se puede utilizar el objeto My.Computer.Keyboard para determinar el estado actual del teclado, incluida información como
si BLOQ NUM o BLOQ MAYÚS están activados.
Para determinar si BLOQ MAYÚS está activado
Para determinar si BLOQ MAYÚS está activado o no, utilice la propiedad My.Computer.Keyboard.CapsLock. El código
siguiente muestra un mensaje sobre el estado de BLOQ MAYÚS.
VB
If My.Computer.Keyboard.CapsLock Then
MsgBox("CAPS LOCK is on")
Else
MsgBox("CAPS LOCK is off")
End If

Vea también
Referencia
My.Computer.Keyboard (Objeto)
Conceptos
Acceso al teclado
Conceptos del lenguaje Visual Basic

Cómo: Iniciar una aplicación y enviarle pulsaciones de teclas


(Visual Basic)
En este ejemplo se utiliza la función Shell para iniciar la aplicación de la calculadora y, a continuación, se multiplican dos
números enviando pulsaciones de tecla mediante el método My.Computer.Keyboard.SendKeys.
Ejemplo
VB
Dim ProcID As Integer
' Start the Calculator application, and store the process id.
ProcID = Shell("CALC.EXE", AppWinStyle.NormalFocus)
' Activate the Calculator application.
AppActivate(ProcID)
' Send the keystrokes to the Calculator application.
My.Computer.Keyboard.SendKeys("22", True)
My.Computer.Keyboard.SendKeys("*", True)
My.Computer.Keyboard.SendKeys("44", True)
My.Computer.Keyboard.SendKeys("=", True)
' The result is 22 * 44 = 968.

Este ejemplo de código también está disponible como fragmento de código de IntelliSense. En el selector de fragmentos de
código, se encuentra en Aplicaciones de Windows Forms> Formularios. Para obtener más información, vea
Cómo: Insertar fragmentos de código en el código (Visual Basic).
Programación eficaz
Se produce una excepción ArgumentException si no se puede encontrar una aplicación con el identificador de proceso
solicitado.
Seguridad
La llamada a la función Shell requiere plena confianza (clase SecurityException).
Vea también
Referencia
My.Computer.Keyboard.SendKeys (Método)
Shell (Función)
AppActivate (Función)
Conceptos del lenguaje Visual Basic

Acceso al mouse (ratón)


El objeto My.Computer.Mouse proporciona un método para localizar información sobre el mouse (ratón) del equipo, como si
existe, el número de botones y detalles sobre su rueda.
Comentarios
Esta tabla muestra tareas asociadas con el objeto My.Computer.Mouse e indica temas que muestran cómo realizar cada
tarea.
Para Vea
Determinar si el mouse tiene una rueda de desplazamiento My.Computer.Mouse.WheelExists (Propiedad)

Determinar si se han intercambiado los botones primario y secundario del My.Computer.Mouse.ButtonsSwapped (Propiedad)
mouse

Establecer la magnitud del desplazamiento cuando se gira un punto la rue My.Computer.Mouse.WheelScrollLines (Propiedad)
da del mouse

Vea también
Referencia
My.Computer.Mouse (Objeto)
My.Computer.Mouse (Miembros del objeto)
Conceptos del lenguaje Visual Basic

Realizar operaciones de red


Las tablas siguientes muestran tareas asociadas al objeto My.Computer.Network.
En esta sección
Cómo: Cargar un archivo en Visual Basic
Muestra cómo cargar un archivo y almacenarlo en una ubicación remota utilizando My.Computer.Network.
Cómo: Descargar un archivo en Visual Basic
Muestra cómo descargar un archivo desde una ubicación remota utilizando My.Computer.Network.
Cómo: Comprobar el estado de conexión en Visual Basic
Muestra cómo determinar si el equipo tiene una conexión de red activa.
Cómo: Determinar si un equipo remoto está disponible en Visual Basic
Explica cómo utilizar el método Ping para determinar si un equipo remoto o el host está disponible.
Referencia
My.Computer.Network (Objeto)
Contiene una lista de los métodos, propiedades y eventos para trabajar con la red.
My.Computer.Network.DownloadFile (Método)
Explica el método DownloadFile.
My.Computer.Network.Ping (Método)
Explica el método Ping.
My.Computer.Network.UploadFile (Método)
Explica el método UploadFile.
My.Computer.Network.IsAvailable (Propiedad)
Describe la propiedad IsAvailable.
Custom
Describe el evento NetworkAvailable.
Conceptos del lenguaje Visual Basic

Cómo: Cargar un archivo en Visual Basic


My.Computer.Network.UploadFile (Método) se puede utilizar para cargar un archivo y almacenarlo en una ubicación remota. Si
el parámetro ShowUI se establece en True, aparece un cuadro de diálogo que muestra el progreso de la descarga y permite a
los usuarios cancelar la operación.
Para cargar un archivo
Utilice el método UploadFile para cargar un archivo; especifique la ubicación del archivo de código fuente y la ubicación
del directorio de destino como una cadena o un identificador uniforme de recursos (URI). Este ejemplo carga el archivo
Order.txt en http://www.cohowinery.com/uploads.aspx.

VB
My.Computer.Network.UploadFile( _
"C:\My Documents\Order.txt", _
"http://www.cohowinery.com/upload.aspx")

Para cargar un archivo y mostrar el progreso de la operación


Utilice el método UploadFile para cargar un archivo; especifique la ubicación del archivo de código fuente y la ubicación
del directorio de destino como una cadena o un identificador uniforme de recursos (URI). Este ejemplo carga el archivo
Order.txt en http://www.cohowinery.com/uploads.aspx sin indicar un nombre de usuario ni contraseña, muestra el
progreso de la carga y cuenta con un intervalo de tiempo de espera de 500 milisegundos.
VB
My.Computer.Network.UploadFile( _
"C:\My Documents\Order.txt", _
"http://www.cohowinery.com/upload.aspx", "", "", True, 500)

Para cargar un archivo, proporcionando un nombre de usuario y contraseña


Utilice el método UploadFile para cargar un archivo; especifique la ubicación del archivo de código fuente y la ubicación
del directorio de destino como una cadena o un identificador uniforme de recursos (URI) e indique el nombre de usuario
y la contraseña. Este ejemplo carga el archivo Order.txt en http://www.cohowinery.com/uploads.aspx, proporcionando
el nombre de usuario anonymous y una contraseña en blanco.
VB
My.Computer.Network.UploadFile( _
"C:\My Documents\Order.txt", _
"http://www.cohowinery.com/upload.aspx", "anonymous", "")

Programación eficaz
Las siguientes condiciones pueden provocar una excepción:
La ruta de acceso al archivo local no es válida (ArgumentException).
Se produjo un error en la autenticación (SecurityException).
Se agotó el tiempo de espera de la conexión (TimeoutException).

Vea también
Tareas
Cómo: Descargar un archivo en Visual Basic
Cómo: Determinar si un equipo remoto está disponible en Visual Basic
Cómo: Analizar rutas de acceso a archivos en Visual Basic
Referencia
My.Computer.Network (Objeto)
My.Computer.Network (Miembros del objeto)
My.Computer.Network.UploadFile (Método)
Conceptos del lenguaje Visual Basic

Cómo: Descargar un archivo en Visual Basic


My.Computer.Network.DownloadFile (Método) se puede utilizar para descargar un archivo remoto y almacenarlo en una
ubicación concreta. Si el parámetro ShowUI se establece en True, aparece un cuadro de diálogo que muestra el progreso de la
descarga y permite a los usuarios cancelar la operación. De manera predeterminada, no se sobrescriben los archivos existentes
que tienen el mismo nombre; si desea sobrescribir los archivos existentes, establezca el parámetro overwrite en True.
Las condiciones siguientes pueden producir una excepción:
El nombre de la unidad no es válido (ArgumentException).
No se ha proporcionado la autenticación necesaria (UnauthorizedAccessException o SecurityException).
El servidor no responde dentro del valor de connectionTimeout especificado (TimeoutException).
El sitio Web deniega la solicitud (WebException).
Nota
Las opciones disponibles en los cuadros de diálogo, y los nombres y las ubicaciones de los comandos de menú que se ven p
odrían diferir de lo que se describe en la Ayuda, en función de los valores de configuración o de edición activos. Esta página
de Ayuda se ha redactado teniendo en cuenta la Configuración general de desarrollo. Para cambiar la configuración, elija
la opción Importar y exportar configuraciones en el menú Herramientas. Para obtener más información, vea
Valores de configuración de Visual Studio.

Nota de seguridad
No tome ninguna decisión sobre el contenido del archivo basándose en su nombre. Por ejemplo, es posible que el archivo Fo
rm1.vb no sea un archivo de código fuente de Visual Basic. Compruebe todas las entradas antes de utilizar los datos en la apl
icación. Puede que el contenido del archivo no sea el esperado y que los métodos que leen el archivo produzcan un error.

Para descargar un archivo


Utilice el método DownloadFile para descargar el archivo; especifique la ubicación del archivo de destino como una
cadena o un identificador uniforme de recursos (URI) y la ubicación donde se va a almacenar el archivo. En este ejemplo
se descarga el archivo WineList.txt desde http://www.cohowinery.com/downloads y se guarda en C:\Documents and
Settings\All Users\Documents:

VB
My.Computer.Network.DownloadFile _
("http://www.cohowinery.com/downloads/WineList.txt", _
"C:\Documents and Settings\All Users\Documents\WineList.txt")

Para descargar un archivo, especificando un intervalo de tiempo de espera


Utilice el método DownloadFile para descargar el archivo; especifique la ubicación del archivo de destino como una
cadena o un identificador uniforme de recursos (URI), la ubicación donde se va a almacenar el archivo y el intervalo de
tiempo de espera en milisegundos (el valor predeterminado es 1000). Este ejemplo descarga el archivo WineList.txt de
http://www.cohowinery.com/downloads y lo guarda en C:\Documents and Settings\All Users\Documents,
especificando un intervalo de tiempo de espera de 500 milisegundos:
VB
My.Computer.Network.DownloadFile _
("http://www.cohowinery.com/downloads/WineList.txt", _
"C:\Documents and Settings\All Users\Documents\WineList.txt", False, 500)
Para descargar un archivo, proporcionando un nombre de usuario y contraseña
Utilice el método DownLoadFile para descargar el archivo; especifique la ubicación del archivo de destino como una
cadena o un identificador uniforme de recursos (URI), la ubicación donde se va a almacenar el archivo, el nombre de
usuario y la contraseña. Este ejemplo descarga el archivo WineList.txt de http://www.cohowinery.com/downloads y lo
guarda en C:\Documents and Settings\All Users\Documents, con el nombre de usuario anonymous y una contraseña
en blanco.
VB
My.Computer.Network.DownloadFile _
("http://www.cohowinery.com/downloads/WineList.txt", _
"C:\Documents and Settings\All Users\Documents\WineList.txt", "anonymous", "")

Nota de seguridad
El método DownLoadFile utiliza el protocolo FTP para enviar información, incluidas las contraseñas, en texto sin form
ato y no se debe utilizar para transmitir información confidencial.

Vea también
Tareas
Cómo: Cargar un archivo en Visual Basic
Cómo: Analizar rutas de acceso a archivos en Visual Basic
Referencia
My.Computer.Network (Objeto)
My.Computer.Network (Miembros del objeto)
My.Computer.Network.DownloadFile (Método)
Conceptos del lenguaje Visual Basic

Cómo: Comprobar el estado de conexión en Visual Basic


La My.Computer.Network.IsAvailable (Propiedad) se puede utilizar para determinar si el equipo tiene una red activa o conexión
a Internet.
Nota
Las opciones disponibles en los cuadros de diálogo, y los nombres y las ubicaciones de los comandos de menú que se ven
podrían diferir de lo que se describe en la Ayuda, en función de los valores de configuración o de edición activos. Esta página
de Ayuda se ha redactado teniendo en cuenta la Configuración general de desarrollo. Para cambiar la configuración, elija
la opción Importar y exportar configuraciones en el menú Herramientas. Para obtener más información, vea
Valores de configuración de Visual Studio.

Para comprobar si un equipo tiene una conexión de red activa


Determine si la propiedad IsAvailable es True o False. El código siguiente comprueba el estado de la propiedad e
informa de él:
VB
If My.Computer.Network.IsAvailable = True Then
MsgBox("Computer is connected.")
Else
MsgBox("Computer is not connected.")
End If

Este ejemplo de código también está disponible como fragmento de código de IntelliSense. En el selector de fragmentos
de código, se encuentra en Conectividad y redes. Para obtener más información, vea
Cómo: Insertar fragmentos de código en el código (Visual Basic).
Vea también
Tareas
Cómo: Determinar si un equipo remoto está disponible en Visual Basic
Referencia
My.Computer.Network (Objeto)
My.Computer.Network.IsAvailable (Propiedad)
Conceptos del lenguaje Visual Basic

Cómo: Determinar si un equipo remoto está disponible en


Visual Basic
Puede utilizar el método My.Computer.Network.Ping (Método) para determinar si un equipo remoto o el host está disponible.
El servidor se puede especificar por dirección URL, nombre de equipo o dirección IP. No incluya http:// al especificar una
dirección URL.
El método Ping no es un método con seguridad para determinar la disponibilidad de un equipo remoto: el puerto ping del
equipo de destino puede estar desactivado, o la solicitud de ping puede resultar bloqueada por un firewall o un enrutador.
Nota
Las opciones disponibles en los cuadros de diálogo, y los nombres y las ubicaciones de los comandos de menú que se ven
podrían diferir de lo que se describe en la Ayuda, en función de los valores de configuración o de edición activos. Esta página
de Ayuda se ha redactado teniendo en cuenta la Configuración general de desarrollo. Para cambiar la configuración, elija
la opción Importar y exportar configuraciones en el menú Herramientas. Para obtener más información, vea
Valores de configuración de Visual Studio.

Para hacer ping a un servidor


Determine si el método Ping devuelve True. Este ejemplo informa de si se puede hacer ping en el servidor averiguando
si el método Ping devolvió True. Reemplace 198.01.01.01 con la dirección IP, la dirección URL o el nombre de equipo
del servidor en el que hacer ping.
VB
If My.Computer.Network.Ping("198.01.01.01") Then
MsgBox("Server pinged successfully.")
Else
MsgBox("Ping request timed out.")
End If

Para hacer ping a un servidor y especificar un tiempo de espera


Determine si el método Ping devuelve True, especificando el intervalo de tiempo de espera en milisegundos. Si no se
especifica ningún tiempo de espera, se utiliza 500 como valor predeterminado. Este ejemplo informa de si se puede hacer
ping en el servidor determinando si el método Ping devolvió True y especifica un tiempo de espera de 1000
milisegundos. Reemplace www.cohowinery.com con la dirección IP, la dirección URL o el nombre de equipo del servidor
en el que hacer ping.
VB
If My.Computer.Network.Ping("www.cohowinery.com", 1000) Then
MsgBox("Server pinged successfully.")
Else
MsgBox("Ping request timed out.")
End If

Vea también
Tareas
Cómo: Comprobar el estado de conexión en Visual Basic
Referencia
My.Computer.Network (Objeto)
My.Computer.Network (Miembros del objeto)
My.Computer.Network.Ping (Método)
Conceptos del lenguaje Visual Basic

Acceso a los puertos del equipo


El objeto My.Computer.Ports proporciona una propiedad y un método para tener acceso a los puertos serie del equipo.
En esta sección
Cómo: Mostrar los puertos serie disponibles en Visual Basic
Indica cómo mostrar los puertos serie disponibles.
Cómo: Marcar a través de módems conectados a puertos serie en Visual Basic
Muestra cómo marcar un módem conectado al puerto serie de un equipo.
Cómo: Enviar cadenas a puertos serie en Visual Basic
Muestra cómo enviar una cadena al puerto serie de un equipo.
Cómo: Recibir cadenas de puertos serie en Visual Basic
Muestra cómo recibir una cadena desde el puerto serie de un equipo.
Referencia
My.Computer.Ports (Objeto)
Describe el objeto My.Computer.Ports y sus miembros.
My.Computer.Ports.SerialPortNames (Propiedad)
Describe la propiedad SerialPortNames, que obtiene una colección de los nombres de los puertos serie del equipo.
My.Computer.Ports.OpenSerialPort (Método)
Describe el método OpenSerialPort, que crea y abre un objeto System.IO.Ports.SerialPort.
Secciones relacionadas
SerialPort
Describe la clase de .NET Framework SerialPort.
Conceptos del lenguaje Visual Basic

Cómo: Mostrar los puertos serie disponibles en Visual Basic


En este tema se describe cómo utilizar My.Computer.Ports para mostrar los puertos serie disponibles del equipo en Visual
Basic.
Para permitir que un usuario seleccione el puerto que desea utilizar, los nombres de los puertos serie se colocan en un control
ListBox.
Ejemplo
Este ejemplo recorre todas las cadenas que devuelve la propiedad My.Computer.Ports.SerialPortNames. Estas cadenas son
los nombres de los puertos serie disponibles en el equipo.
Normalmente, un usuario selecciona el puerto serie que la aplicación debe utilizar en la lista de puertos disponibles. En este
ejemplo, los nombres de puertos serie se almacenan en un control ListBox. Para obtener más información, vea
ListBox (Control, formularios Windows Forms).
VB
Sub GetSerialPortNames()
' Show all available COM ports.
For Each sp As String In My.Computer.Ports.SerialPortNames
ListBox1.Items.Add(sp)
Next
End Sub

Este ejemplo de código también está disponible como fragmento de código de IntelliSense. En el selector de fragmentos de
código, se encuentra en Conectividad y redes. Para obtener más información, vea
Cómo: Insertar fragmentos de código en el código (Visual Basic).
Compilar el código
Para este ejemplo se necesita:
Una referencia de proyecto a System.Windows.Forms.dll.
Acceso a los miembros del espacio de nombres System.Windows.Forms. Agregue una instrucción Imports si no incluye
nombres de miembro completos en el código. Para obtener más información, vea Imports (Instrucción).
Que el formulario tenga un control ListBox denominado ListBox1.

Programación eficaz
No tiene que utilizar el control ListBox para mostrar los nombres de los puertos serie disponibles. En su lugar, puede utilizar
un control ComboBox u otro control. Si la aplicación no necesita una respuesta del usuario, puede utilizar un control TextBox
para mostrar la información.
Nota
Los nombres de puerto que devuelve My.Computer.Ports.SerialPortNames pueden ser incorrectos cuando se utiliza Wind
ows 98. Para evitar errores de la aplicación, utilice el control de excepciones, por ejemplo las instrucciones Try...Catch...Final
ly o Using, cuando utilice nombres de puertos para abrirlos.

Vea también
Tareas
Cómo: Marcar a través de módems conectados a puertos serie en Visual Basic
Cómo: Enviar cadenas a puertos serie en Visual Basic
Cómo: Recibir cadenas de puertos serie en Visual Basic
Referencia
My.Computer.Ports (Objeto)
Conceptos del lenguaje Visual Basic

Cómo: Marcar a través de módems conectados a puertos serie


en Visual Basic
En este tema se describe cómo utilizar My.Computer.Ports para marcar en un módem en Visual Basic.
Normalmente, el módem se conecta a uno de los puertos serie del equipo. Para que su aplicación se comunique con el
módem, debe enviar los comandos al puerto serie adecuado.
Para marcar en un módem
1. Determine a qué puerto serie está conectado el módem. En este ejemplo se presupone que el módem está en COM1.
2. Utilice el método My.Computer.Ports.OpenSerialPort para obtener una referencia al puerto. Para obtener más
información, vea My.Computer.Ports.OpenSerialPort (Método).
El bloque Using permite a la aplicación cerrar el puerto serie aun cuando se genere una excepción. Todo el código que
manipula el puerto serie debe aparecer dentro de este bloque o dentro de un bloque Try...Catch...Finally.
VB
Using com1 As IO.Ports.SerialPort = _
My.Computer.Ports.OpenSerialPort("COM1", 9600)
End Using

3. Establezca la propiedad DtrEnable para indicar que el equipo está listo para aceptar una transmisión de entrada
procedente del módem.
VB
com1.DtrEnable = True

4. Envíe el comando de marcar y el número de teléfono al módem a través del puerto serie por medio del método Write.
VB
com1.Write("ATDT 555-0100" & vbCrLf)

Ejemplo
VB
Sub DialModem()
' Dial a number via an attached modem on COM1.
Using com1 As IO.Ports.SerialPort = _
My.Computer.Ports.OpenSerialPort("COM1", 9600)
com1.DtrEnable = True
com1.Write("ATDT 555-0100" & vbCrLf)
' Insert code to transfer data to and from the modem.
End Using
End Sub

Este ejemplo de código también está disponible como fragmento de código de IntelliSense. En el selector de fragmentos de
código, se encuentra en Conectividad y redes. Para obtener más información, vea
Cómo: Insertar fragmentos de código en el código (Visual Basic).
Compilar el código
Este ejemplo requiere una referencia al espacio de nombres System.
Programación eficaz
Este ejemplo supone que el módem está conectado a COM1. Es recomendable que el código permita al usuario seleccionar el
puerto serie deseado en una lista de puertos disponibles. Para obtener más información, vea
Cómo: Mostrar los puertos serie disponibles en Visual Basic.
Este ejemplo utiliza un bloque Using para asegurarse de que la aplicación cierra el puerto aun cuando produzca una
excepción. Para obtener más información, vea Instrucción Using (Visual Basic).
En este ejemplo, la aplicación desconecta el puerto serie después de marcar en el módem. En realidad, deseará transferir datos
al módem y desde él. Para obtener más información, vea Cómo: Recibir cadenas de puertos serie en Visual Basic.
Vea también
Tareas
Cómo: Enviar cadenas a puertos serie en Visual Basic
Cómo: Recibir cadenas de puertos serie en Visual Basic
Cómo: Mostrar los puertos serie disponibles en Visual Basic
Referencia
My.Computer.Ports (Objeto)
System.IO.Ports.SerialPort
Conceptos del lenguaje Visual Basic

Cómo: Enviar cadenas a puertos serie en Visual Basic


En este tema se explica cómo utilizar My.Computer.Ports para enviar cadenas a los puertos serie del equipo en Visual Basic.
Ejemplo
Este ejemplo envía una cadena al puerto serie COM1. Puede que necesite utilizar un puerto serie diferente de su equipo.
Utilice el método My.Computer.Ports.OpenSerialPort para obtener una referencia al puerto. Para obtener más información,
vea My.Computer.Ports.OpenSerialPort (Método).
El bloque Using permite a la aplicación cerrar el puerto serie aun cuando se genere una excepción. Todo el código que
manipula el puerto serie debe aparecer dentro de este bloque o dentro de un bloque Try...Catch...Finally.
El método WriteLine envía los datos al puerto serie.
VB
Sub SendSerialData(ByVal data As String)
' Send strings to a serial port.
Using com1 As IO.Ports.SerialPort = _
My.Computer.Ports.OpenSerialPort("COM1")
com1.WriteLine(data)
End Using
End Sub

Compilar el código
Este ejemplo supone que el equipo está utilizando el puerto COM1.

Programación eficaz
Este ejemplo supone que el equipo está utilizando el puerto COM1; para una mayor flexibilidad, el código debería permitir al
usuario seleccionar el puerto serie deseado en una lista de puertos disponibles. Para obtener más información, vea
Cómo: Mostrar los puertos serie disponibles en Visual Basic.
Este ejemplo utiliza un bloque Using para asegurarse de que la aplicación cierra el puerto aun cuando produzca una
excepción. Para obtener más información, vea Instrucción Using (Visual Basic).
Vea también
Tareas
Cómo: Marcar a través de módems conectados a puertos serie en Visual Basic
Cómo: Mostrar los puertos serie disponibles en Visual Basic
Referencia
My.Computer.Ports (Objeto)
System.IO.Ports.SerialPort
Conceptos del lenguaje Visual Basic

Cómo: Recibir cadenas de puertos serie en Visual Basic


En este tema se explica cómo utilizar My.Computer.Ports para recibir cadenas de los puertos serie del equipo en Visual Basic.
Para recibir cadenas del puerto serie
1. Inicialice la cadena de devolución.
VB
Dim returnStr As String = ""

2. Determine qué puerto serie debe proporcionar las cadenas. Este ejemplo supone que es COM1.
3. Utilice el método My.Computer.Ports.OpenSerialPort para obtener una referencia al puerto. Para obtener más
información, vea My.Computer.Ports.OpenSerialPort (Método).
El bloque Using permite a la aplicación cerrar el puerto serie aun cuando se genere una excepción. Todo el código que
manipula el puerto serie debe aparecer dentro de este bloque o dentro de un bloque Try...Catch...Finally.
VB
Using com1 As IO.Ports.SerialPort = _
My.Computer.Ports.OpenSerialPort("COM1")
End Using

4. Cree un bucle Do para leer las líneas de texto hasta que no queden líneas disponibles.
VB
Do
Loop

5. Utilice el método ReadLine para leer en el puerto serie la siguiente línea de texto disponible.
VB
Dim Incoming As String = com1.ReadLine()

6. Utilice una instrucción If para determinar si el método ReadLine devuelve Nothing (lo que significa que no hay más
texto disponible). Si devuelve Nothing, salga del bucle Do.
VB
If Incoming Is Nothing Then
Exit Do
End If

7. Agregue un bloque Else a la instrucción If para controlar el caso de que realmente se lea la cadena. El bloque anexa la
cadena del puerto serie a la cadena de devolución.
VB
Else
returnStr &= Incoming & vbCrLf
8. Devuelva la cadena.
VB
Return returnStr

Ejemplo
VB
Function ReceiveSerialData() As String
' Receive strings from a serial port.
Dim returnStr As String = ""
Using com1 As IO.Ports.SerialPort = _
My.Computer.Ports.OpenSerialPort("COM1")
Do
Dim Incoming As String = com1.ReadLine()
If Incoming Is Nothing Then
Exit Do
Else
returnStr &= Incoming & vbCrLf
End If
Loop
End Using

Return returnStr
End Function

Este ejemplo de código también está disponible como fragmento de código de IntelliSense. En el selector de fragmentos de
código, se encuentra en Conectividad y redes. Para obtener más información, vea
Cómo: Insertar fragmentos de código en el código (Visual Basic).
Compilar el código
Este ejemplo supone que el equipo está utilizando el puerto COM1.
Programación eficaz
Este ejemplo supone que el equipo está utilizando el puerto COM1. Para mayor flexibilidad, el código debería permitir al usuario
seleccionar el puerto serie deseado en una lista de puertos disponibles. Para obtener más información, vea
Cómo: Mostrar los puertos serie disponibles en Visual Basic.
Este ejemplo utiliza un bloque Using para asegurarse de que la aplicación cierra el puerto aun cuando produzca una
excepción. Para obtener más información, vea Instrucción Using (Visual Basic).
Vea también
Tareas
Cómo: Marcar a través de módems conectados a puertos serie en Visual Basic
Cómo: Enviar cadenas a puertos serie en Visual Basic
Cómo: Mostrar los puertos serie disponibles en Visual Basic
Referencia
My.Computer.Ports (Objeto)
System.IO.Ports.SerialPort
Conceptos del lenguaje Visual Basic

Leer y escribir en el Registro


Muestra temas conceptuales y procedimentales asociados con el Registro.
Al programar en Visual Basic 2005, puede optar por obtener acceso al Registro a través de las funciones proporcionadas por
Visual Basic 2005 o a través de las clases de Registro de .NET Framework. El Registro aloja información del sistema operativo,
así como de las aplicaciones que se encuentran en el equipo. Al trabajar con el Registro se puede comprometer la seguridad, al
permitir accesos inadecuados a recursos del sistema o a información reservada.
En esta sección
Tareas habituales del Registro
Muestra tareas asociadas al Registro, como determinar o establecer el valor de una clave del Registro.
Leer y escribir en el Registro con Mi
Explica cómo utilizar el objeto My.Computer.Registry para tener acceso al Registro.
Leer y escribir en el Registro mediante Microsoft.Win32 Namespace
Explica cómo utilizar las funciones de Visual Basic 2005, DeleteSetting, GetSetting, GetAllSettingsy SaveSetting, para
obtener acceso al Registro.
Tutorial: Crear una clave del Registro y cambiar sus valores
Muestra cómo crear una clave del Registro y sus subclaves, cambiar su configuración y eliminar claves.
Seguridad y Registro
Aborda problemas de seguridad que implican al Registro.
Solución de problemas: Manipulación del Registro
Muestra los problemas comunes que se producen cuando se tiene acceso al Registro y cómo tratarlos.
Secciones relacionadas
My.Computer.Registry (Objeto)
Muestra y explica los miembros del objeto My.Computer.Registry.
Registry (Clase)
Presenta información general sobre la clase Registry junto con vínculos a claves y miembros individuales.
Conceptos del lenguaje Visual Basic

Tareas habituales del Registro


El objeto My.Computer.Registry proporciona propiedades y métodos para tener acceso al Registro.
Tareas
La tabla siguiente lista ejemplos que afectan al Registro.
Para Vea
Crear una clave del Registro y establecer sus val Cómo: Crear una clave del Registro y establecer sus valores en Visual Basic
ores

Determinar si un valor existe en una clave especí Cómo: Determinar si existe un valor en una clave del Registro en Visual Basic
fica del Registro

Leer un valor de una clave del Registro Cómo: Leer un valor a partir de una clave del Registro en Visual Basic

Establecer un valor en una clave del Registro Cómo: Establecer los valores de las claves del Registro en Visual Basic

Eliminar una clave del Registro Cómo: Eliminar una clave del Registro de Visual Basic

Vea también
Tareas
Tutorial: Crear una clave del Registro y cambiar sus valores
Solución de problemas: Manipulación del Registro
Referencia
My.Computer.Registry (Objeto)
Conceptos
Leer y escribir en el Registro con Mi
Seguridad y Registro
Conceptos del lenguaje Visual Basic

Cómo: Crear una clave del Registro y establecer sus valores en


Visual Basic
El método CreateSubKey del objeto My.Computer.Registry se puede utilizar para crear una clave del Registro.
Procedimiento
Para crear una clave del Registro
Utilice el método CreateSubKey, especificando en qué sección se va a colocar la clave, así como el nombre de la clave. El
parámetro Subkey no distingue entre mayúsculas y minúsculas. Este ejemplo crea la clave del Registro MyTestKey en
HKEY_CURRENT_USER.
VB
My.Computer.Registry.CurrentUser.CreateSubKey("MyTestKey")

Crear una clave del Registro y establecer un valor en él


1. Utilice el método CreateSubkey, especificando en qué sección se va a colocar la clave, así como el nombre de la clave.
Este ejemplo crea la clave del Registro MyTestKey en HKEY_CURRENT_USER.
VB
My.Computer.Registry.CurrentUser.CreateSubKey("MyTestKey")

2. Establezca el valor con el método SetValue. Este ejemplo establece el valor de la cadena. "MyTestKeyValue" en "This is a
test value".
VB
My.Computer.Registry.SetValue("HKEY_CURRENT_USER\MyTestKey", _
"MyTestKeyValue", "This is a test value.")

Ejemplo
Este ejemplo crea la clave del Registro MyTestKey en HKEY_CURRENT_USER y, a continuación, establece el valor de la cadena
MyTestKeyValue en This is a test value.

VB
My.Computer.Registry.CurrentUser.CreateSubKey("MyTestKey")
' Change MyTestKeyValue to This is a test value.
My.Computer.Registry.SetValue("HKEY_CURRENT_USER\MyTestKey", _
"MyTestKeyValue", "This is a test value.")

Programación eficaz
Examine la estructura del Registro para buscar la ubicación adecuada para la clave. Por ejemplo, puede que desee abrir la clave
HKEY_CURRENT_USER\Software del usuario actual y crear una clave con el nombre de su empresa. A continuación, agregue
los valores del Registro a la clave de su empresa.
Cuando se esté leyendo el Registro desde una aplicación Web, el usuario actual dependerá de la autenticación y suplantación
implementadas en la aplicación Web.
Resulta más seguro escribir datos en la carpeta de usuario (CurrentUser) que en el equipo local (LocalMachine).
A la hora de crear valores de Registro, deberá decidir qué hacer si coinciden con otros ya existentes. Es posible que otro
proceso, probablemente malintencionado, haya creado el valor y tenga acceso a él. Cuando ponga datos en el valor del
Registro, los datos estarán disponibles para el otro proceso. Para evitar esto, utilice el método GetValue. Devuelve Nothing si
la clave no existe ya.
Aunque el Registro esté protegido por listas de control de acceso (ACL), no es seguro almacenar en él datos secretos (por
ejemplo, contraseñas) en forma de texto sencillo.
Las condiciones siguientes pueden provocar una excepción:
El nombre de la clave es Nothing (ArgumentNullException).
El usuario no tiene permiso para crear claves de Registro (SecurityException).
El nombre de la clave supera el límite de 255 caracteres (ArgumentException).
La clave está cerrada (IOException).
La clave del Registro es de sólo lectura (UnauthorizedAccessException).
Seguridad
Para ejecutar este proceso, el ensamblado requiere un nivel de privilegios concedido por la clase RegistryPermission. Si ejecuta
el proceso en un contexto de confianza parcial, podría desencadenarse una excepción por falta de privilegios. De igual manera,
el usuario debe tener las ACL correctas para crear o escribir en la configuración. Por ejemplo, una aplicación local que tenga
permiso de seguridad de acceso a código puede no tener permiso para el sistema operativo. Para obtener más información,
consulte Conceptos básicos sobre la seguridad de acceso a código.
Vea también
Tareas
Solución de problemas: Manipulación del Registro
Tutorial: Crear una clave del Registro y cambiar sus valores
Referencia
My.Computer.Registry (Objeto)
My.Computer.Registry.CurrentUser (Propiedad)
CreateSubKey
Conceptos
Tareas habituales del Registro
Conceptos básicos sobre la seguridad de acceso a código
Conceptos del lenguaje Visual Basic

Cómo: Determinar si existe un valor en una clave del Registro


en Visual Basic
Se puede utilizar el método GetValue del objeto My.Computer.Registry para determinar si existe un valor determinado en
una clave del Registro concreta.
Cuando se esté leyendo el Registro desde una aplicación Web, el usuario actual dependerá de la autenticación y suplantación
implementadas en la aplicación Web.
Para determinar si un valor existe en una clave del Registro
Utilice el método GetValue para recuperar el valor. El código siguiente comprueba el valor y devuelve un mensaje si no
existe.
VB
If My.Computer.Registry.GetValue("HKEY_LOCAL_MACHINE\TestApp", _
"TestValue", Nothing) Is Nothing Then
MsgBox("Value does not exist.")
End If

Programación eficaz
Las condiciones siguientes pueden provocar una excepción:
El nombre de la clave es Nothing (ArgumentNullException).
El usuario no tiene permiso para crear claves de Registro (SecurityException).
El nombre de la clave supera el límite de 255 caracteres (ArgumentException).
La clave está cerrada (IOException).
La clave del Registro es de sólo lectura (UnauthorizedAccessException).
Seguridad
Para ejecutar este proceso, el ensamblado requiere un nivel de privilegios concedido por la clase RegistryPermission. Si ejecuta
el proceso en un contexto de confianza parcial, podría desencadenarse una excepción por falta de privilegios. De forma similar,
el usuario debe tener las listas de control de acceso correctas para crear o escribir en la configuración. Por ejemplo, una
aplicación local que tenga permiso de seguridad de acceso a código puede no tener permiso para el sistema operativo. Para
obtener más información, consulte Conceptos básicos sobre la seguridad de acceso a código.
Vea también
Tareas
Solución de problemas: Manipulación del Registro
Tutorial: Crear una clave del Registro y cambiar sus valores
Referencia
My.Computer.Registry (Objeto)
My.Computer.Registry.CurrentUser (Propiedad)
Conceptos
Conceptos básicos sobre la seguridad de acceso a código
Tareas habituales del Registro
Conceptos del lenguaje Visual Basic

Cómo: Leer un valor a partir de una clave del Registro en Visual


Basic
El método GetValue del objeto My.Computer.Registry se puede utilizar para leer valores en el Registro de Windows. Si la
clave, en este caso "Software\MyApp", no existe, se produce una excepción. Si ValueName, en este caso "Nombre", no existe, se
devuelve Nothing.
Para leer un valor en una clave del Registro
Utilice el método GetValue (especificando la ruta de acceso y el nombre) para leer un valor de la clave del Registro. El
ejemplo siguiente lee el valor Name de HKEY_CURRENT_USER\Software\MyApp y lo muestra en un cuadro de mensaje.
VB
Dim readValue As String
readValue = My.Computer.Registry.GetValue _
("HKEY_CURRENT_USER\Software\MyApp", "Name", Nothing)
MsgBox("The value is " & readValue)

Este ejemplo de código también está disponible en el fragmento de código de IntelliSense. En el selector de fragmentos de
código, se encuentra en Sistema operativo Windows > Registro. Para obtener más información, vea
Cómo: Insertar fragmentos de código en el código (Visual Basic).
Programación eficaz
El Registro contiene claves de nivel superior o raíz que se utilizan para almacenar datos. Por ejemplo, la tecla principal de
HKEY_LOCAL_MACHINE se utiliza para almacenar una configuración de nivel del equipo que utilizan todos los usuarios,
mientras que HKEY_CURRENT_USER se utiliza para almacenar datos específicos de un usuario individual.
Las condiciones siguientes pueden producir una excepción:
El nombre de la clave es Nothing (ArgumentNullException).
El usuario no tiene permiso para leer claves de Registro (SecurityException).
El nombre de la clave supera el límite de 255 caracteres (ArgumentException).
Seguridad
Para ejecutar este proceso, el ensamblado requiere un nivel de privilegios concedido por la clase RegistryPermission. Si ejecuta
el proceso en un contexto de confianza parcial, podría desencadenarse una excepción por falta de privilegios. De igual manera,
el usuario debe tener las ACL correctas para crear o escribir en la configuración. Por ejemplo, una aplicación local que tenga
permiso de seguridad de acceso a código puede no tener permiso para el sistema operativo. Para obtener más información,
consulte Conceptos básicos sobre la seguridad de acceso a código.
Vea también
Tareas
Tutorial: Crear una clave del Registro y cambiar sus valores
Solución de problemas: Manipulación del Registro
Referencia
My.Computer.Registry (Objeto)
RegistryHive
Conceptos
Tareas habituales del Registro
Conceptos del lenguaje Visual Basic

Cómo: Establecer los valores de las claves del Registro en Visual


Basic
El método SetValue del objeto My.Computer.Registry se puede utilizar para escribir valores en el Registro de Windows. El
Registro contiene claves de nivel superior o raíz que se utilizan para almacenar datos. Por ejemplo, la tecla principal de
HKEY_LOCAL_MACHINE se utiliza para almacenar una configuración de nivel del equipo que utilizan todos los usuarios,
mientras que HKEY_CURRENT_USER se utiliza para almacenar datos específicos de un usuario individual.
Se crea el valor, incluso la ruta de clave completa, si no existe.
Procedimiento
Para escribir un valor en una clave del Registro
Utilice el método SetValue que especifica la clave y el valor. Este ejemplo establece el valor Name en "Nombre de Autor"
en la clave HKEY_CURRENT_USER\Software\TestApp.
VB
My.Computer.Registry.SetValue _
("HKEY_CURRENT_USER\Software\TestApp", "Name", "Author's Name")

Este ejemplo de código también está disponible en el fragmento de código de IntelliSense. En el selector de fragmentos de
código, se encuentra en Sistema operativo Windows > Registro. Para obtener más información, vea
Cómo: Insertar fragmentos de código en el código (Visual Basic).
Programación eficaz
Los datos de las preferencias de usuario se deben escribir en la sección Microsoft.Win32.Registry.CurrentUser.
Aunque el Registro esté protegido por listas de control de acceso (ACL), no es seguro almacenar en él datos secretos (por
ejemplo, contraseñas) en forma de texto sencillo.
Las condiciones siguientes pueden provocar una excepción:
El nombre de la clave es Nothing (ArgumentNullException).
El nombre de la clave supera el límite de 255 caracteres (ArgumentException).
La opción especificada no es válida (ArgumentException).
La clave está cerrada (IOException).
La ruta de acceso no es válida (IOException).
La clave del Registro es de sólo lectura (UnauthorizedAccessException).
Seguridad
Para ejecutar este proceso, el ensamblado requiere un nivel de privilegios concedido por la clase RegistryPermission. Si ejecuta
el proceso en un contexto de confianza parcial, podría desencadenarse una excepción por falta de privilegios. De igual manera,
el usuario debe tener las ACL correctas para crear o escribir en la configuración. Por ejemplo, una aplicación local que tenga
permiso de seguridad de acceso a código puede no tener permiso para el sistema operativo. Para obtener más información,
consulte Conceptos básicos sobre la seguridad de acceso a código.
Vea también
Tareas
Cómo: Leer un valor a partir de una clave del Registro en Visual Basic
Tutorial: Crear una clave del Registro y cambiar sus valores
Solución de problemas: Manipulación del Registro
Referencia
My.Computer.Registry (Miembros del objeto)
My.Computer.Registry.SetValue (Método)
Conceptos
Tareas habituales del Registro
Conceptos del lenguaje Visual Basic

Cómo: Eliminar una clave del Registro de Visual Basic


Los métodos DeleteSubKey y DeleteSubKey se pueden utilizar para eliminar las claves del Registro.
Procedimiento
Para suprimir una clave del Registro
Utilice el método DeleteSubKey para eliminar una clave del Registro. Este ejemplo elimina la clave Software/TestApp en
la sección CurrentUser. Puede cambiar esto en el código para la cadena adecuada o confiar en la información
proporcionada por el usuario.
VB
My.Computer.Registry.CurrentUser.DeleteSubKey(text)

Este ejemplo de código también está disponible en el fragmento de código de IntelliSense. En el selector de fragmentos de
código, se encuentra en Sistema operativo Windows > Registro. Para obtener más información, vea
Cómo: Insertar fragmentos de código en el código (Visual Basic).
Programación eficaz
El método DeleteSubKey devuelve una cadena vacía si el par clave/valor no existe.
Las condiciones siguientes pueden producir una excepción:
El nombre de la clave es Nothing (ArgumentNullException).
El usuario no tiene permiso para eliminar claves de Registro (SecurityException).
El nombre de la clave supera el límite de 255 caracteres (ArgumentException).
La clave del Registro es de sólo lectura (UnauthorizedAccessException).
Seguridad
Las llamadas del Registro producen errores si no se conceden permisos suficientes en tiempo de ejecución
(RegistryPermission) o si el usuario no tiene el acceso correcto (como se determina en las ACL) para crear o escribir en la
configuración. Por ejemplo, una aplicación local que tenga permiso de seguridad de acceso a código puede no tener permiso
para el sistema operativo.
Vea también
Tareas
Solución de problemas: Manipulación del Registro
Tutorial: Crear una clave del Registro y cambiar sus valores
Referencia
DeleteSubKey
DeleteSubKey
RegistryKey
Conceptos
Seguridad y Registro
Tareas habituales del Registro
Conceptos del lenguaje Visual Basic

Leer y escribir en el Registro con Mi


El objeto My.Computer.Registry proporciona métodos y propiedades por trabajar con las claves del Registro.
El Registro de Windows aloja información del sistema operativo, así como de las aplicaciones que se encuentran en el equipo.
Aunque se recomienda My.Settings para almacenar esta información, las aplicaciones heredadas pueden utilizar el Registro.
Para una lista completa de los miembros de My.Computer.Registry, consulte My.Computer.Registry (Miembros del objeto).
Tareas
La tabla siguiente muestra ejemplos de tareas para claves del Registro que implican al objeto My.Computer.Registry.
Para Vea
Crear una clave del Registro Cómo: Crear una clave del Registro y establecer sus valores en Visual Basic

Eliminar una clave del Registro Cómo: Eliminar una clave del Registro de Visual Basic

Determinar si existe un valor Cómo: Determinar si existe un valor en una clave del Registro en Visual Basic

Leer un valor Cómo: Leer un valor a partir de una clave del Registro en Visual Basic

Seguridad y Registro
Al trabajar con el Registro se puede comprometer la seguridad, al permitir accesos inadecuados a recursos del sistema o a
información reservada. Para utilizar estas propiedades, debe tener permisos de lectura y escritura de la enumeración
RegistryPermissionAccess que controla el acceso a las variables de Registro. Cualquier código que se ejecute con confianza
plena (bajo la directiva de seguridad predeterminada, cualquier código instalado en el disco duro local del usuario) tiene los
permisos necesarios para tener acceso al Registro. Para obtener más información, consulte
T:System.Security.Permissions.RegistryPermission.
No deben almacenarse variables de Registro en ubicaciones de memoria donde pueda obtener acceso el código sin
RegistryPermission. Igualmente, al conceder permisos, conceda también los privilegios mínimos necesarios para realizar el
trabajo.
Vea también
Tareas
Solución de problemas: Manipulación del Registro
Tutorial: Crear una clave del Registro y cambiar sus valores
Referencia
My.Settings (Objeto)
Conceptos
Seguridad y Registro
Conceptos del lenguaje Visual Basic

Leer y escribir en el Registro mediante Microsoft.Win32


Namespace
Aunque My.Computer.Registry debe cubrir sus necesidades básicas al programar con el Registro, también puede utilizar las
clases Registry y RegistryKey en el espacio de nombres Microsoft.Win32 de .NET Framework.
Claves en la clase de Registro
La clase Registry proporciona las claves de Registro básicas que se pueden utilizar para el acceso a las subclaves y a sus
valores. Las propias claves básicas son de sólo lectura. La tabla siguiente enumera y describe las siete claves expuestas por la
clase Registry.
Clave Descripción
ClassesRoot Define los tipos de documentos y las propiedades asociadas con esos tipos.

CurrentConfig Contiene información de configuración de hardware que no es específica del usuario.

CurrentUser Contiene información sobre las preferencias del usuario actual, tal como variables de entorno.

DynData Contiene datos del Registro dinámicos, como los usados por los controladores de dispositivo virtual.

LocalMachine Contiene cinco subclaves (Hardware, SAM, Security, Software y System) que contienen los datos de configur
ación del equipo local.

PerformanceData Contiene información de rendimiento para los componentes de software.

Users Contiene información sobre las preferencias del usuario predeterminado.


Nota de seguridad
Resulta más seguro escribir datos en el usuario actual (CurrentUser) que en el equipo local (LocalMachine). Cuando la clave
que se va a crear ha sido creada previamente por otro proceso, posiblemente malintencionado, se produce una condición qu
e suele conocerse como "squatting" ("ocupación"). Para evitar que aparezca, utilice un método, como GetValue que devuelve
Nothing si la clave ya no existe.

Leer un valor del Registro


El código siguiente muestra cómo se lee una cadena de HKEY_CURRENT_USER.
VB
Dim regVersion As Microsoft.Win32.RegistryKey
Dim keyValue As String
keyValue = "Software\\Microsoft\\TestApp\\1.0"
regVersion = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(keyValue, False)
Dim intVersion As Integer = 0
If (Not regVersion Is Nothing) Then
intVersion = regVersion.GetValue("Version", 0)
regVersion.Close()
End If

El código siguiente lee, se incrementa y escribe una cadena en HKEY_CURRENT_USER-


VB
Dim regVersion As Microsoft.Win32.RegistryKey
regVersion = Microsoft.Win32.Registry.CurrentUser.OpenSubKey( _
"SOFTWARE\\Microsoft\\TestApp\\1.0", True)
If regVersion Is Nothing Then
' Key doesn't exist; create it.
regVersion = Microsoft.Win32.Registry.CurrentUser.CreateSubKey( _
"SOFTWARE\\Microsoft\\TestApp\\1.0")
End If
Dim intVersion As Integer = 0
If (Not regVersion Is Nothing) Then
intVersion = regVersion.GetValue("Version", 0)
intVersion = intVersion + 1
regVersion.SetValue("Version", intVersion)
regVersion.Close()
End If

Vea también
Tareas
Solución de problemas: Manipulación del Registro
Referencia
SystemException Class
ApplicationException Class
My.Computer.Registry (Objeto)
Conceptos
Información general sobre el control estructurado de excepciones de Visual Basic
Tareas habituales del Registro
Seguridad y Registro
Leer y escribir en el Registro con Mi
Conceptos del lenguaje Visual Basic

Tutorial: Crear una clave del Registro y cambiar sus valores


Este tutorial muestra cómo crear una aplicación que irá a las claves del Registro en el equipo para que los usuarios pueden
crear y suprimir claves, así como leer, obtener, establecer y eliminar valores.
Para crear el formulario principal
1. Seleccione Nuevo proyecto en el menú Archivo y haga clic en Aplicación para Windows.
2. Agregue un clase TextBox denominada Value al formulario. En la esquina inferior derecha de la ventana Propiedades ,
en el campo (Nombre), escriba Valor.
3. Agregue un clase ListBox denominada History al formulario. En la esquina inferior derecha de la ventana Propiedades ,
en el campo (Nombre), escriba Historial.
4. Cree la variable adicional y agréguela inmediatamente después de la declaración de clase.
VB
Dim tempKey As Microsoft.Win32.RegistryKey

Para explorar las claves del Registro en un ComboBox


1. Agregue al formulario una clase ComboBox denominada selectHive que mostrará las secciones del Registro y le
permitirá seleccionar una. Rellénelo agregando el código siguiente al evento de carga del formulario.
VB
selectHive.Items.Add("ClassesRoot")
selectHive.Items.Add("CurentConfig")
selectHive.Items.Add("CurrentUser")
selectHive.Items.Add("DynData")
selectHive.Items.Add("LocalMachine")
selectHive.Items.Add("PerformanceData")
selectHive.Items.Add("Users")

2. Adjunte el código siguiente después de su declaración de clase.


VB
Dim registryObject As Microsoft.Win32.RegistryKey = Nothing

3. Agregue el código siguiente al evento selectHive SelectedIndexChanged.


VB
Select Case selectHive.Text
Case "ClassesRoot"
registryObject = My.Computer.Registry.ClassesRoot
Case "CurrentConfig"
registryObject = My.Computer.Registry.CurrentConfig
Case "CurrentUser"
registryObject = My.Computer.Registry.CurrentUser
Case "DynData"
registryObject = My.Computer.Registry.DynData
Case "LocalMachine"
registryObject = My.Computer.Registry.LocalMachine
Case "PerformanceData"
registryObject = My.Computer.Registry.PerformanceData
Case "Users"
registryObject = My.Computer.Registry.Users
End Select

Para leer un valor en una clave del Registro


1. Agregue al formulario una clase Button denominada ReadValueButton con el texto "Leer valor".
2. Agregue al formulario una clase TextBox denominada showSubKey con el texto "Escribir subclave".
3. Agregue el código siguiente al evento ReadValueButton Click.
VB
tempKey = registryObject
If tempKey Is Nothing Then
MsgBox("Please select a registry hive.")
Return
End If
Value.Text = CStr(tempKey.GetValue(ShowSubKey.Text))
History.Items.Add("Read Value " & selectHive.Text & _
"\" & ShowSubKey.Text)

4. Pruebe su aplicación escribiendo el nombre de una subclave existente en el cuadro de texto showSubKey. Cuando se hace
clic en ReadValueButton, el cuadro de texto Value muestra el valor.

Para establecer un valor en una clave del Registro


1. Agregue al formulario un botón denominado SetValueButton con el texto "Establecer valor".
2. Agregue el código siguiente al evento Click.
VB
tempKey = registryObject
If tempKey Is Nothing Then
MsgBox("Please select a registry hive.")
Return
End If
If Value.Text Is Nothing Then
MsgBox("Please enter a value.")
Return
End If
tempKey.SetValue(showSubKey.Text, Value.Text)
tempKey.Close()
History.Items.Add("Set Value " & selectHive.Text & _
"\" & showSubKey.Text)

3. Pruebe su aplicación especificando un nuevo valor para una subclave en el cuadro de texto Valor y confirmando a
continuación que el valor se ha cambiado con el botón denominado ReadValueButton.

Para crear una clave del Registro


1. Agregue al formulario un botón denominado CreateButton con el texto "Crear clave".
2. Agregue el código siguiente al evento Click.
VB
registryObject.CreateSubKey(showSubKey.Text)
History.Items.Add("Create Key " & selectHive.Text & _
"\" & showSubKey.Text)

3. Pruebe su aplicación escribiendo un nuevo nombre de clave en el cuadro de texto showSubKey y utilizando el Editor
del Registro para confirmar que se ha creado su clave.

Para suprimir una clave del Registro


1. Agregue al formulario un botón denominado DeleteButton con el texto "Eliminar clave".
2. Agregue el código siguiente al evento Click.
VB
tempKey = registryObject
If tempKey Is Nothing Then
MsgBox("Please select a registry hive.")
Return
End If
If showSubKey.Text Is Nothing Then
MsgBox("Please enter a subkey.")
Return
End If
registryObject.DeleteSubKey(showSubKey.Text)
History.Items.Add("Delete Key " & selectHive.Text & _
"\" & showSubKey.Text)

3. Pruebe su código eliminando una subclave y utilizando el Editor del Registro para confirmar que la clave fue eliminada.
Vea también
Tareas
Solución de problemas: Manipulación del Registro
Conceptos
Tareas habituales del Registro
Seguridad y Registro
Leer y escribir en el Registro con Mi
Leer y escribir en el Registro mediante Microsoft.Win32 Namespace
Conceptos del lenguaje Visual Basic

Seguridad y Registro
Esta página describe las implicaciones de seguridad relativas al almacenamiento de datos en el Registro.
Permisos
Aunque el Registro esté protegido por listas de control de acceso (ACL), no es seguro almacenar en él datos secretos (por
ejemplo, contraseñas) en forma de texto sencillo.
Al trabajar con el Registro se puede comprometer la seguridad, al permitir accesos inadecuados a recursos del sistema o a
información reservada. Para utilizar estas propiedades, debe tener permisos de lectura y escritura de la enumeración
RegistryPermissionAccess que controla el acceso a las variables de Registro. Cualquier código que se ejecute con confianza
plena (bajo la directiva de seguridad predeterminada, cualquier código instalado en el disco duro local del usuario) tiene los
permisos necesarios para tener acceso al Registro. Para obtener más información, consulte
T:System.Security.Permissions.RegistryPermission.
No deben almacenarse variables de Registro en ubicaciones de memoria donde pueda obtener acceso el código sin
RegistryPermission. Igualmente, al conceder permisos, conceda también los privilegios mínimos necesarios para realizar el
trabajo.
La enumeración RegistryPermissionAccess define los valores de acceso de permiso del Registro. La siguiente tabla
proporciona detalles de sus miembros.
Valor Obtener acceso a las variables de Registro
AllAccess Crear, leer y escribir

Create Crear

NoAccess Sin acceso

Read Lectura

Write Escribir

Comprobar valores en las claves del Registro


A la hora de crear valores de Registro, deberá decidir qué hacer si coinciden con otros ya existentes. Es posible que otro
proceso, probablemente malicioso, haya creado el valor y tenga acceso a él. Cuando ponga datos en el valor del Registro, los
datos estarán disponibles para el otro proceso. Para evitar esto, utilice el método GetValue. Devuelve Nothing si la clave no
existe ya.
Nota de seguridad
Cuando se esté leyendo el Registro desde una aplicación Web, la identidad del usuario actual dependerá de la autenticación
y suplantación implementadas en la aplicación Web.

Vea también
Tareas
Tutorial: Crear una clave del Registro y cambiar sus valores
Solución de problemas: Manipulación del Registro
Referencia
My.Computer.Registry (Objeto)
My.Computer.Registry (Miembros del objeto)
Conceptos
Tareas habituales del Registro
Leer y escribir en el Registro con Mi
Conceptos del lenguaje Visual Basic

Solución de problemas: Manipulación del Registro


Cuando trabaja con el Registro, puede encontrar excepciones concretas. Este tema muestra las excepciones más comunes y
proporciona sugerencias sobre la forma de tratar cada una de ellas.
Excepciones
La tabla siguiente muestra excepciones que pueden aparecer cuando se trabaja con el Registro y proporciona sugerencias
sobre la forma de tratarlas.
Excepción Sugerencia
ArgumentException Asegúrese de que existe la clave donde realiza una operación y que la ruta de acceso indicada es
correcta y no supera los 255 caracteres.

SecurityException Asegúrese de que dispone de permisos de lectura y escritura en RegistryPermissionAccess.

UnauthorizedAccessException Asegúrese de que la clave se abrió para escribir si intenta escribir en ella.
Vea también
Tareas
Tutorial: Crear una clave del Registro y cambiar sus valores
Referencia
My.Computer.Registry (Objeto)
Conceptos
Tareas habituales del Registro
Leer y escribir en el Registro con Mi
Leer y escribir en el Registro mediante Microsoft.Win32 Namespace
Seguridad y Registro
Conceptos del lenguaje Visual Basic

Acceso a otros procesos


Esta página muestra temas que explican cómo tener acceso a otros procesos utilizando la clase Process.
En esta sección
Cómo: Detener una aplicación (Visual Basic)
Cómo detener una aplicación en ejecución.
Cómo: Enumerar procesos (Visual Basic)
Cómo obtener una lista de procesos de aplicación en ejecución.
Secciones relacionadas
Cómo: Iniciar una aplicación y enviarle pulsaciones de teclas (Visual Basic)
Cómo iniciar una aplicación.
Shell (Función)
Ejecuta un programa ejecutable y devuelve un entero que contiene el identificador de proceso del programa si éste aún está
funcionando.
Conceptos del lenguaje Visual Basic

Cómo: Detener una aplicación (Visual Basic)


En el siguiente ejemplo se detiene una aplicación que se esté ejecutando.
Ejemplo
VB
Dim pList() As System.Diagnostics.Process = _
System.Diagnostics.Process.GetProcessesByName("notepad")
For Each proc As System.Diagnostics.Process In pList
Dim resp As MsgBoxResult
resp = MsgBox("Terminate " & proc.ProcessName & "?", _
MsgBoxStyle.YesNo, "Terminate?")
If resp = MsgBoxResult.Yes Then
proc.Kill()
End If
Next

Este ejemplo de código también está disponible como fragmento de código de IntelliSense. En el selector de fragmentos de
código, se encuentra en Sistema operativo Windows > Procesos. Para obtener más información, vea
Cómo: Insertar fragmentos de código en el código (Visual Basic).
Compilar el código
Para este ejemplo se necesita:
Una instrucción Imports que especifica el espacio de nombres System.Diagnostics. Para obtener más información, vea
Imports (Instrucción).
Una instancia en funcionamiento de la aplicación Bloc de notas (Notepad.exe).

Seguridad
Dado que este ejemplo termina procesos repentinamente, en algunas aplicaciones podría dar lugar a pérdidas de datos.
El método Kill requiere plena confianza (clase SecurityException).
Vea también
Referencia
Process
Otros recursos
Acceso a otros procesos
Conceptos del lenguaje Visual Basic

Cómo: Enumerar procesos (Visual Basic)


El siguiente ejemplo genera una lista con los procesos de aplicación que se estén ejecutando. Esta información se puede utilizar
al llamar a la función AppActivate.
Ejemplo
VB
Dim pList() As System.Diagnostics.Process = _
System.Diagnostics.Process.GetProcesses
For Each proc As System.Diagnostics.Process In pList
MsgBox(proc.ProcessName)
Next

Compilar el código
Para este ejemplo se necesita:
Una instrucción Imports que especifica el espacio de nombres System.Diagnostics. Para obtener más información, vea
Imports (Instrucción).
Vea también
Referencia
AppActivate (Función)
Process
Otros recursos
Ejemplos de formularios Windows Forms de Visual Basic
Conceptos del lenguaje Visual Basic

Actualizar una aplicación


La propiedad My.Application.Deployment se puede utilizar para comprobar las actualizaciones disponibles de la aplicación.
Si la aplicación se ha implementado como una aplicación ClickOnce, el ejemplo muestra el texto de la interfaz de usuario
adecuado.
En esta sección
Esta tabla muestra tareas asociadas con la propiedad My.Application.Deployment e indica temas que muestran cómo
realizar cada tarea.
Para Vea
Buscar actualizaciones de la aplicación Cómo: Buscar actualizaciones de la aplicación ClickOnce

Descargar actualizaciones de la aplicación Cómo: Descargar actualizaciones de la aplicación ClickOnce

Vea también
Referencia
My.Application.Deployment (Propiedad)
My.Application (Objeto)
Conceptos del lenguaje Visual Basic

Cómo: Buscar actualizaciones de la aplicación ClickOnce


Este ejemplo utiliza el objeto My.Application.Deployment para comprobar si hay actualizaciones disponibles para la
aplicación. Si la aplicación se ha implementado como una aplicación ClickOnce, el ejemplo muestra el texto de la interfaz de
usuario adecuado.
Para obtener más información sobre aplicaciones ClickOnce y cómo implementarlas, vea Implementación ClickOnce y
Publicar aplicaciones ClickOnce.
Ejemplo
Este ejemplo utiliza la My.Application.IsNetworkDeployed (Propiedad) para asegurarse de que la aplicación se implementa en
una red utilizando ClickOnce. A continuación, utiliza el método CheckForUpdate del objeto My.Application.Deployment
para comprobar si hay disponible alguna actualización ClickOnce para la aplicación.
VB
Sub CheckUpdateAvailability()
If My.Application.IsNetworkDeployed() Then
If My.Application.Deployment.CheckForUpdate() Then
MsgBox("Update is available for download")
Else
MsgBox("No updates are available for download")
End If
Else
MsgBox("Application is not ClickOnce deployed")
End If
End Sub

Sólo aplicaciones que se implementan utilizando ClickOnce se pueden actualizar utilizando el objeto
My.Application.Deployment. Para obtener más información sobre cómo implementar una aplicación ClickOnce, vea
Cómo: Publicar aplicaciones ClickOnce.
Vea también
Tareas
Cómo: Descargar actualizaciones de la aplicación ClickOnce
Referencia
My.Application.Deployment (Propiedad)
Conceptos del lenguaje Visual Basic

Cómo: Descargar actualizaciones de la aplicación ClickOnce


Este ejemplo utiliza el objeto My.Application.Deployment para descargar e instalar la versión más reciente de una
aplicación. El ejemplo no actualiza la aplicación a menos que esté anticuado y se hubiera implementado como una aplicación
ClickOnce.
Para obtener más información sobre las aplicaciones ClickOnce y cómo implementarlas, vea Implementación ClickOnce y
Publicar aplicaciones ClickOnce.
Ejemplo
Este ejemplo descarga e instala la actualización después de utilizar la My.Application.IsNetworkDeployed (Propiedad) para
asegurarse de que la aplicación se ha implementado utilizando ClickOnce. El método Update no actualiza la aplicación a menos
que esté anticuada. La aplicación debe reiniciarse para utilizar la actualización.
VB
Sub UpdateApplication()
If My.Application.IsNetworkDeployed Then
My.Application.Deployment.Update()
End If
End Sub

Este ejemplo de código también está disponible como fragmento de código de IntelliSense. En el selector de fragmentos de
código, se encuentra en Aplicación — Compilación, recursos y configuración. Para obtener más información, vea
Cómo: Insertar fragmentos de código en el código (Visual Basic).
Sólo aplicaciones que se implementan utilizando ClickOnce se pueden actualizar utilizando el objeto
My.Application.Deployment. Para obtener más información sobre cómo implementar una aplicación ClickOnce, vea
Cómo: Publicar aplicaciones ClickOnce.
Vea también
Tareas
Cómo: Buscar actualizaciones de la aplicación ClickOnce
Referencia
My.Application.Deployment (Propiedad)
Conceptos del lenguaje Visual Basic

Registrar información de la aplicación


Esta sección contiene temas que explican cómo registrar información sobre su aplicación utilizando el objeto
My.Application.Log o My.Log y cómo ampliar las capacidades de registro de la aplicación.
El objeto Log proporciona métodos para escribir información en los agentes de escucha de registro de la aplicación y la
propiedad avanzada TraceSource del objeto Log proporciona información de configuración detallada. El archivo de
configuración de la aplicación configura el objeto Log.
El objeto My.Log sólo está disponible para las aplicaciones ASP.NET. Para las aplicaciones cliente, utilice My.Application.Log.
Para obtener más información, vea My.Application.Log (Objeto) y My.Log (Objeto).
Tareas
Para Vea
Escribir información de eventos en los registr Cómo: Escribir mensajes de registro
os de la aplicación.

Escribir información de excepciones en los re Cómo: Registrar excepciones en Visual Basic


gistros de la aplicación.

Escribir información de seguimiento en los re Cómo: Registrar mensajes cuando se inicia o se cierra la aplicación
gistros de la aplicación cuando se inicia y se c
ierra la aplicación.

Configurar My.Application.Log para que es Cómo: Escribir información de eventos en un archivo de texto
criba información en un archivo de texto.

Configurar My.Application.Log para escribi Cómo: Escribir el registro de eventos de una aplicación
r información en un registro de eventos.

Cambiar la ubicación donde My.Application Tutorial: Cambiar el lugar donde My.Application.Log escribe información
.Log escribe información.

Determinar dónde escribe la información My Tutorial: Determinar el lugar en el que My.Application.Log escribe la información
.Application.Log.

Crear un agente de escucha de registro perso Tutorial: Crear agentes de escucha de registro personalizados
nalizado para My.Application.Log.

Filtrar el resultado de los registros My.Appli Tutorial: Filtrar el resultado de My.Application.Log


cation.Log.

Vea también
Tareas
Solución de problemas: Agentes de escucha de registro
Referencia
My.Application.Log (Objeto)
My.Log (Objeto)
Conceptos
Trabajar con registros de aplicación en Visual Basic
Registrar y realizar seguimiento en .NET Framework con Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Escribir mensajes de registro


Puede utilizar los objetos My.Application.Log y My.Log para registrar información sobre la aplicación. Este ejemplo muestra
cómo utilizar el método My.Application.Log.WriteEntry para registrar información de traza.
Para registrar información de excepciones, utilice el método My.Application.Log.WriteException; vea
Cómo: Registrar excepciones en Visual Basic.
Ejemplo
Este ejemplo utiliza el método My.Application.Log.WriteEntry para escribir la información de traza.
VB
Public Sub TracingTest(ByVal fileName As String)
My.Application.Log.WriteEntry( _
"Entering TracingTest with argument " & _
fileName & ".")
' Code to trace goes here.
My.Application.Log.WriteEntry( _
"Exiting TracingTest with argument " & _
fileName & ".")
End Sub

Seguridad
Asegúrese de que los datos que escribe en el registro no incluyen información confidencial como contraseñas del usuario. Para
obtener más información, vea Trabajar con registros de aplicación en Visual Basic.
Vea también
Tareas
Cómo: Registrar excepciones en Visual Basic
Tutorial: Determinar el lugar en el que My.Application.Log escribe la información
Tutorial: Cambiar el lugar donde My.Application.Log escribe información
Tutorial: Filtrar el resultado de My.Application.Log
Referencia
My.Application.Log (Objeto)
My.Log (Objeto)
WriteEntry (Método, My.Application.Log y My.Log)
WriteException (Método, My.Application.Log y My.Log)
Conceptos
Trabajar con registros de aplicación en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Registrar excepciones en Visual Basic


Puede utilizar los objetos My.Application.Log y My.Log para registrar información sobre excepciones que se producen en la
aplicación. Estos ejemplos muestran cómo utilizar el método My.Application.Log.WriteException para registrar
excepciones que detecta explícitamente y excepciones que no se controlan.
Para registrar información de traza, utilice el método My.Application.Log.WriteEntry. Para obtener más información, vea
WriteEntry (Método, My.Application.Log y My.Log).
Para registrar una excepción controlada
1. Cree el método que generará la información de excepción.
VB
Public Sub ExceptionLogTest(ByVal fileName As String)
End Sub

2. Utilice un bloque Try...Catch para detectar la excepción.


VB
Try
Catch ex As Exception
End Try

3. Coloque el código que podría generar una excepción en el bloque Try.


Quite los comentarios de las líneas Dim y MsgBox para provocar una excepción NullReferenceException.
VB
' Code that might generate an exception goes here.
' For example:
' Dim x As Object
' MsgBox(x.ToString)

4. En el bloque Catch, utilice el método My.Application.Log.WriteException para escribir la información de excepción.


VB
My.Application.Log.WriteException(ex, _
TraceEventType.Error, _
"Exception in ExceptionLogTest " & _
"with argument " & fileName & ".")

Para registrar una excepción no controlada


1. Tenga seleccionado un proyecto en el Explorador de soluciones. En el menú Proyecto, elija Propiedades.
2. Haga clic en la ficha Aplicación.
3. Haga clic en el botón Ver eventos de aplicaciones para abrir el Editor de código.
Así abre el archivo ApplicationEvents.vb.
4. Tenga abierto el archivo ApplicationEvents.vb en el Editor de código. En el menú General, elija Eventos de
MyApplication.
5. En el menú Declaraciones, elija UnhandledException.
La aplicación provoca el evento UnhandledException antes de que se ejecute la aplicación principal.
6. Agregue el método My.Application.Log.WriteException al controlador de eventos UnhandledException.
VB
My.Application.Log.WriteException(e.Exception, _
TraceEventType.Critical, _
"Application shut down at " & _
My.Computer.Clock.GmtTime.ToString)

Ejemplo
Este ejemplo muestra el código completo para registrar una excepción controlada.
VB
Public Sub ExceptionLogTest(ByVal fileName As String)
Try
' Code that might generate an exception goes here.
' For example:
' Dim x As Object
' MsgBox(x.ToString)
Catch ex As Exception
My.Application.Log.WriteException(ex, _
TraceEventType.Error, _
"Exception in ExceptionLogTest " & _
"with argument " & fileName & ".")
End Try
End Sub

El siguiente ejemplo muestra el código completo para registrar una excepción no controlada. Puede utilizar el Diseñador de
proyectos para tener acceso a los eventos de aplicación en el Editor de código. Para obtener más información, vea
Cómo: Controlar eventos de aplicaciones (Visual Basic).
VB
Private Sub MyApplication_UnhandledException( _
ByVal sender As Object, _
ByVal e As ApplicationServices.UnhandledExceptionEventArgs _
) Handles Me.UnhandledException
My.Application.Log.WriteException(e.Exception, _
TraceEventType.Critical, _
"Application shut down at " & _
My.Computer.Clock.GmtTime.ToString)
End Sub

Vea también
Tareas
Cómo: Escribir mensajes de registro
Tutorial: Determinar el lugar en el que My.Application.Log escribe la información
Tutorial: Cambiar el lugar donde My.Application.Log escribe información
Referencia
My.Application.Log (Objeto)
My.Log (Objeto)
WriteEntry (Método, My.Application.Log y My.Log)
WriteException (Método, My.Application.Log y My.Log)
Conceptos
Trabajar con registros de aplicación en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Registrar mensajes cuando se inicia o se cierra la


aplicación
Puede utilizar los objetos My.Application.Log y My.Log pare registrar información sobre eventos que se producen en su
aplicación. Este ejemplo muestra cómo utilizar el método My.Application.Log.WriteEntry con los eventos Startup y
Shutdown para escribir información de seguimiento.
Para tener acceso al código del controlador de eventos de la aplicación
1. Tenga seleccionado un proyecto en el Explorador de soluciones. En el menú Proyecto, elija Propiedades.
2. Haga clic en la ficha Aplicación.
3. Haga clic en el botón Ver eventos de aplicaciones para abrir el Editor de código.
Esto abre el archivo ApplicationEvents.vb.
Para registrar los mensajes cuando se inicia la aplicación
1. Tenga abierto el archivo ApplicationEvents.vb en el Editor de código. En el menú General, elija Eventos de
MyApplication.
2. En el menú Declaraciones, elija Inicio.
La aplicación provoca el evento Startup antes de que se ejecute la aplicación principal.
3. Agregue el método My.Application.Log.WriteEntry al controlador de eventos Startup.
VB
My.Application.Log.WriteEntry("Application started at " & _
My.Computer.Clock.GmtTime.ToString)

Para registrar los mensajes cuando se cierra la aplicación


1. Tenga abierto el archivo ApplicationEvents.vb en el Editor de código. En el menú General, elija Eventos de
MyApplication.
2. En el menú Declaraciones, elija Shutdown.
La aplicación provoca el evento Shutdown después de que se ejecute la aplicación principal, pero antes de que se cierre.
3. Agregue el método My.Application.Log.WriteEntry al controlador de eventos Shutdown.
VB
My.Application.Log.WriteEntry("Application shut down at " & _
My.Computer.Clock.GmtTime.ToString)

Ejemplo
Puede utilizar el Diseñador de proyectos para tener acceso a los eventos de aplicación en el Editor de código. Para obtener
más información, vea Cómo: Controlar eventos de aplicaciones (Visual Basic).
VB
Private Sub MyApplication_Startup( _
ByVal sender As Object, _
ByVal e As ApplicationServices.StartupEventArgs _
) Handles Me.Startup
My.Application.Log.WriteEntry("Application started at " & _
My.Computer.Clock.GmtTime.ToString)
End Sub
Private Sub MyApplication_Shutdown( _
ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles Me.Shutdown
My.Application.Log.WriteEntry("Application shut down at " & _
My.Computer.Clock.GmtTime.ToString)
End Sub

Vea también
Tareas
Cómo: Controlar eventos de aplicaciones (Visual Basic)
Referencia
My.Log (Objeto)
My.Application.Log (Objeto)
WriteEntry (Método, My.Application.Log y My.Log)
WriteException (Método, My.Application.Log y My.Log)
Conceptos
Trabajar con registros de aplicación en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Escribir el registro de eventos de una aplicación


Puede utilizar los objetos My.Application.Log y My.Log para escribir información sobre eventos que se producen en la
aplicación. En este ejemplo se muestra cómo configurar un agente de escucha del registro de eventos por lo que
My.Application.Log escribe información de seguimiento en el registro de eventos de la aplicación.
No se puede escribir en el registro de seguridad. Para escribir en el registro de sistema, debe ser un miembro de la cuenta
LocalSystem o Administrador.
Para ver un registro de eventos, puede utilizar el Explorador de servidores o el Visor de eventos de Windows. Para
obtener más información, vea Cómo: Trabajar con registros de eventos en el Explorador de servidores o
Cómo: Iniciar el Visor de eventos.
Nota
Windows 95, Windows 98 o Windows Millennium Edition no admiten los registros de eventos.

Para agregar y configurar el agente de escucha del registro de eventos


1. Haga clic con el botón secundario del mouse (ratón) en app.config en el Explorador de soluciones y elija Abrir.
O bien,
Si no hay un archivo app.config,
a. En el menú Proyecto, elija Agregar nuevo elemento.
b. En el cuadro de diálogo Agregar nuevo elemento, seleccione Archivo de configuración de aplicaciones.
c. Haga clic en Agregar.
2. Busque la sección <listeners> en el archivo de configuración de la aplicación.
Encontrará la sección <listeners> en la sección <source> con el atributo de nombre "DefaultSource", que está anidada
en la sección <system.diagnostics> que, a su vez, está anidada en la sección <configuration> de nivel superior.
3. Agregue este elemento a esa sección <listeners>:

<add name="EventLog"/>

4. Busque la sección <sharedListeners>, en la sección <system.diagnostics>, de la sección <configuration> de nivel


superior.
5. Agregue este elemento a esa sección <sharedListeners>:

<add name="EventLog"
type="System.Diagnostics.EventLogTraceListener, System, Version=2.0.0.0, Culture=n
eutral, PublicKeyToken=b77a5c561934e089"
initializeData="APPLICATION_NAME"/>

Reemplace APPLICATION_NAME por el nombre de su aplicación.


Nota
Normalmente, una aplicación escribe sólo errores en el registro de eventos. Para obtener información sobre el filtrado
de los resultados del registro, vea Tutorial: Filtrar el resultado de My.Application.Log.

Para escribir información de eventos en el registro de eventos


Utilice el método My.Application.Log.WriteEntry o My.Application.Log.WriteException para escribir información
en el registro de eventos. Para obtener más información, vea Cómo: Escribir mensajes de registro y
Cómo: Registrar excepciones en Visual Basic.
Una vez configurado el agente de escucha del registro de eventos para un ensamblado, recibe todos los mensajes que
My.Applcation.Log escribe de ese ensamblado.
Vea también
Tareas
Cómo: Registrar excepciones en Visual Basic
Tutorial: Determinar el lugar en el que My.Application.Log escribe la información
Referencia
My.Application.Log (Objeto)
My.Log (Objeto)
WriteEntry (Método, My.Application.Log y My.Log)
WriteException (Método, My.Application.Log y My.Log)
Conceptos
Trabajar con registros de aplicación en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Escribir información de eventos en un archivo de texto


Puede utilizar los objetos My.Application.Log y My.Log para registrar información sobre eventos que aparecen en su
aplicación. Este ejemplo muestra cómo utilizar el método My.Application.Log.WriteEntry para registrar información de
traza en un archivo de registro.
Para agregar y configurar el agente de escucha del registro de archivos
1. Haga clic con el botón secundario del mouse en el Explorador de soluciones y elija Abrir.
O bien
Si no hay un archivo app.config:
a. En el menú Proyecto, elija Agregar nuevo elemento.
b. En el cuadro de diálogo Agregar nuevo elemento, seleccione Archivo de configuración de aplicaciones.
c. Haga clic en Agregar.
2. Busque la sección <listeners> en el archivo de configuración de la aplicación.
Encontrará la sección <listeners> en la sección <source> con el atributo de nombre "DefaultSource", anidada en la
sección <system.diagnostics>, anidada a su vez en la sección de nivel superior <configuration>.
3. Agregue este elemento a esa sección <listeners>:

<add name="FileLogListener" />

4. Busque la sección <sharedListeners> en la sección <system.diagnostics>, anidada bajo la sección de nivel superior
<configuration>.

5. Agregue este elemento a esa sección <sharedListeners>:

<add name="FileLogListener"
type="Microsoft.VisualBasic.Logging.FileLogTraceListener,
Microsoft.VisualBasic, Version=8.0.0.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a"
initializeData="FileLogListenerWriter"
location="Custom"
customlocation="c:\temp\" />

Cambie el valor del atributo customlocation al directorio de registro.


Nota
Para establecer el valor de una propiedad de agente de escucha, utilice un atributo con el mismo nombre que la propie
dad, con todas las letras del nombre en minúscula. Por ejemplo, los atributos location y customlocation establecen lo
s valores de las propiedades Location y CustomLocation.

Para escribir información de evento en el registro de archivos


Utilice el método My.Application.Log.WriteEntry o My.Application.Log.WriteException para escribir información
en el registro de archivos. Para obtener más información, vea Cómo: Escribir mensajes de registro y
Cómo: Registrar excepciones en Visual Basic.
Después de configurar el agente de escucha del registro de archivos para un ensamblado, el agente recibe todos los
mensajes que My.Application.Log escribe desde dicho ensamblado.

Vea también
Tareas
Cómo: Registrar excepciones en Visual Basic
Referencia
My.Application.Log (Objeto)
My.Log (Objeto)
WriteEntry (Método, My.Application.Log y My.Log)
WriteException (Método, My.Application.Log y My.Log)
Conceptos
Trabajar con registros de aplicación en Visual Basic
Conceptos del lenguaje Visual Basic

Trabajar con registros de aplicación en Visual Basic


Los objetos My.Applicaton.Log y My.Log facilitan la escritura de información de registro y seguimiento en archivos de
registro.
Cómo se registran los mensajes
Primero, se comprueba la gravedad del mensaje con la propiedad Switch de la propiedad TraceSource del registro. De manera
predeterminada, sólo los mensajes de gravedad "Información" y superior se pasan a los agentes de escucha de seguimiento,
especificados en la colección TraceListener del registro. A continuación, cada agente de escucha compara la gravedad del
mensaje con la propiedad Switch del agente de escucha. Si la gravedad del mensaje es bastante alta, el agente de escucha
escribe el mensaje.
El diagrama siguiente muestra cómo un mensaje escrito en el método WriteEntry se pasa a los métodos WriteLine de los
agentes de escucha de seguimiento del registro:

Puede cambiar el comportamiento de los agentes de escucha de registro y de seguimiento cambiando el archivo de
configuración de la aplicación. El diagrama siguiente muestra la correspondencia entre las partes del registro y el archivo de
configuración.

Dónde se registran los mensajes


Si el ensamblado no tiene un archivo de configuración, los objetos My.Application.Log y My.Log escriben en los resultados
de depuración de la aplicación (a través de la clase DefaultTraceListener). Además, el objeto My.Application.Log escribe en el
archivo de registro del ensamblado (a través de la clase FileLogTraceListener), mientras que el objeto My.Log escribe en el
resultado de la página Web ASP.NET (a través de la clase WebPageTraceListener).
El resultado de depuración se puede ver en la ventana Resultados de Visual Studio cuando se ejecuta la aplicación en modo
de depuración. Para abrir la ventana Resultados, haga clic en el elemento de menú Depurar, elija Windows y, a continuación,
haga clic en Resultados. En la ventana Resultados, seleccione Depurar en el cuadro Mostrar resultados desde.
De manera predeterminada, My.Application.Log escribe el archivo de registro en la ruta de acceso a los datos de la
aplicación del usuario. La ruta de acceso puede obtenerse de la propiedad FullLogFileName de
DefaultFileLogWriter (Propiedad, My.Application.Log y My.Log). El formato de esa ruta de acceso es como sigue:
BasePath\CompanyName\ProductName\ProductVersion
Un valor típico para BasePath puede ser el siguiente.
C:\Documents and Settings\username\Datos de programa.
Los valores de CompanyName, ProductName y ProductVersion proceden de la información de ensamblado de la aplicación. El
formato del nombre del archivo de registro es AssemblyName.log, donde AssemblyName es el nombre de archivo del
ensamblado sin la extensión. Si se necesita más de un archivo de registro, como cuando el registro original no está disponible
mientras la aplicación intenta escribir en él, el formato del nombre del archivo de registro es AssemblyName-iteration.log,
donde iteration es un valor Integer positivo.
Puede reemplazar el comportamiento predeterminado agregando o cambiando los archivos de configuración del equipo y de
la aplicación. Para obtener más información, vea Tutorial: Cambiar el lugar donde My.Application.Log escribe información.
Configurar la configuración del registro
El objeto Log tiene una implementación predeterminada que funciona sin archivo de configuración de aplicación, app.config.
Para cambiar los valores predeterminados, debe agregar un archivo de configuración con los nuevos valores. Para obtener
más información, vea Tutorial: Filtrar el resultado de My.Application.Log.
Las secciones de configuración de registro se encuentran en el nodo <system.diagnostics> del nodo <configuration>
principal del archivo app.config. La información del registro se define en varios nodos:
Los agentes de escucha para el objeto Log se definen en el nodo de <sources> denominado DefaultSource.
El filtro de gravedad para el objeto Log se define en el nodo de <switches> denominado DefaultSwitch.
Los agentes de escucha de registro se definen en el nodo <sharedListeners>.
En el código siguiente se muestran ejemplos de nodos <sources>, <switches> y <sharedListeners>:

<configuration>
<system.diagnostics>
<sources>
<source name="DefaultSource" switchName="DefaultSwitch">
<listeners>
<add name="FileLog"/>
</listeners>
</source>
</sources>
<switches>
<add name="DefaultSwitch" value="Information" />
</switches>
<sharedListeners>
<add name="FileLog"
type="Microsoft.VisualBasic.Logging.FileLogTraceListener,
Microsoft.VisualBasic, Version=8.0.0.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
initializeData="FileLogWriter"
/>
</sharedListeners>
</system.diagnostics>
</configuration>

Cambiar la configuración del registro después de la implementación


Al desarrollar una aplicación, sus opciones de configuración se almacenan en el archivo app.config, como se muestra en los
ejemplos anteriores. Después de implementar su aplicación, todavía puede configurar el registro editando el archivo de
configuración. En una aplicación basada en Windows, el nombre de este archivo es applicationName.exe.config y debe
encontrarse en la misma carpeta que el archivo ejecutable. Para una aplicación Web, se trata del archivo Web.config asociado
al proyecto.
Cuando la aplicación ejecuta el código que crea una instancia de una clase por primera vez, comprueba el archivo de
configuración para obtener información sobre el objeto. Para el objeto Log, esto ocurre la primera vez que se tiene acceso al
objeto Log. El sistema sólo examina el archivo de configuración una vez para cualquier objeto específico: la primera vez que la
aplicación crea el objeto. Por consiguiente, puede ser necesario reiniciar la aplicación para que los cambios surtan efecto.
En una aplicación implementada, el código de seguimiento se habilita volviendo a configurar los objetos modificadores antes
de que se inicie la aplicación. Normalmente, esto implica activar y desactivar los modificadores cambiando los niveles de
seguimiento y, a continuación, volver a iniciar la aplicación.
Consideraciones de seguridad
Tenga en cuenta lo siguiente al escribir los datos en el registro:
Evite incluir información sobre el usuario. Asegúrese de que su aplicación sólo escribe en el registro información
autorizada. Por ejemplo, puede ser aceptable que el registro de aplicación contenga los nombres de usuario, pero no las
contraseñas.
Haga que las ubicaciones del registro seguras Cualquier registro que contenga información potencialmente
confidencial se debería almacenar en una ubicación segura.
Evite incluir información que podría conducir a error. En general, su aplicación debería validar todos los datos
escritos por un usuario antes de utilizar esos datos. Esto incluye la escritura de datos en el registro de aplicación.
Evite las denegaciones de servicio. Si su aplicación escribe demasiada información en el registro, podría llenar el
registro o dificultar la búsqueda de información importante.
Vea también
Referencia
My.Application.Log (Objeto)
My.Log (Objeto)
Conceptos
Registrar información de la aplicación
Conceptos del lenguaje Visual Basic

Tutorial: Determinar el lugar en el que My.Application.Log


escribe la información
El objeto My.Application.Log puede escribir información en varios agentes de escucha de registro. El archivo de
configuración del equipo configura los agentes de escucha de registro y pueden ser reemplazados por el archivo de
configuración de una aplicación. En este tema se describe la configuración predeterminada y cómo determinar la configuración
para su aplicación.
Para obtener más información sobre las ubicaciones predeterminadas de los resultados, vea
Trabajar con registros de aplicación en Visual Basic.
Para determinar los agentes de escucha para My.Application.Log
1. Busque el archivo de configuración del ensamblado. Si está desarrollando el ensamblado, puede tener acceso a
app.config en Visual Studio desde el Explorador de soluciones. De lo contrario, el nombre del archivo de configuración
es el nombre del ensamblado seguido de ".config" y se encuentra en el mismo directorio que el ensamblado.
Nota
No todos los ensamblados tienen un archivo de configuración.

El archivo de configuración es un archivo XML.


2. Busque la sección <listeners>, dentro de la sección <source> que tiene el atributo name "DefaultSource", situado en la
sección <sources>. La sección <sources> se encuentra dentro de la sección <system.diagnostics>, en la sección de nivel
superior <configuration>.
Si estas secciones no existen, el archivo de configuración del equipo puede configurar los agentes de escucha de registro
My.Application.Log. Los pasos siguientes describen cómo determinar lo que define el archivo de configuración del
equipo:
a. Busque el archivo machine.config del equipo. Normalmente, se encuentra en el directorio
SystemRoot\Microsoft.NET\Framework\frameworkVersion\CONFIG, donde SystemRoot es el directorio del sistema
operativo y frameworkVersion es la versión de .NET Framework.
El archivo de configuración de una aplicación puede reemplazar la configuración de machine.config.
Si no existen los elementos opcionales enumerados más abajo, puede crearlos.
b. Localice la sección <listeners>, en la sección <source> con el atributo name establecido en "DefaultSource", en la
sección <sources> situada en la sección <system.diagnostics>, en la sección <configuration> de nivel superior.
Si estas secciones no existen, My.Application.Log tiene sólo los agentes de escucha de registro predeterminados.
3. Busque los elementos <add> en la sección <listeners>.
Estos elementos agregan los agentes de escucha de registro con nombre al origen My.Application.Log.
4. Busque los elementos <add> con los nombres de los agentes de escucha de registro en la sección <sharedListeners>,
dentro de la sección <system.diagnostics>, en la sección <configuration> de nivel superior.
5. Para muchos tipos de agentes de escucha compartidos, los datos de la inicialización del agente de escucha incluyen una
descripción de dónde dirige los datos el agente de escucha:
Un agente de escucha Microsoft.VisualBasic.Logging.FileLogTraceListener escribe en un registro de archivos, como
se explica en la introducción.
Un agente de escucha System.Diagnostics.EventLogTraceListener escribe información en el registro de eventos del
equipo especificado por el parámetro initializeData. Para ver un registro de eventos, puede utilizar el
Explorador de servidores o el Visor de eventos de Windows. Para obtener más información, vea
Cómo: Trabajar con registros de eventos en el Explorador de servidores o Cómo: Iniciar el Visor de eventos.
Los agentes de escucha System.Diagnostics.DelimitedListTraceListener y
System.Diagnostics.XmlWriterTraceListener escriben en el archivo especificado en el parámetro initializeData.
Un agente de escucha System.Diagnostics.ConsoleTraceListener escribe en la consola de la línea de comandos.
Para obtener información sobre dónde escriben información otros tipos de agentes de escucha de registro,
consulte la documentación de esos tipos.
Vea también
Tareas
Cómo: Registrar excepciones en Visual Basic
Cómo: Escribir mensajes de registro
Tutorial: Cambiar el lugar donde My.Application.Log escribe información
Cómo: Trabajar con registros de eventos en el Explorador de servidores
Cómo: Iniciar el Visor de eventos
Solución de problemas: Agentes de escucha de registro
Referencia
My.Application.Log (Objeto)
My.Log (Objeto)
DefaultTraceListener
EventLogTraceListener
DelimitedListTraceListener
XmlWriterTraceListener
ConsoleTraceListener
System.Diagnostics
Conceptos
Trabajar con registros de aplicación en Visual Basic
Conceptos del lenguaje Visual Basic

Tutorial: Cambiar el lugar donde My.Application.Log escribe


información
Puede utilizar los objetos My.Application.Log y My.Log para registrar información sobre eventos que se producen en la
aplicación. Este tutorial muestra cómo reemplazar la configuración predeterminada y hacer que el objeto Log escriba en los
otros agentes de escucha de registro.
Requisitos previos
El objeto Log puede escribir información en varios agentes de escucha del registro. Necesita determinar la configuración
actual de los agentes de escucha de registro antes de cambiar las configuraciones. Para obtener más información, vea
Tutorial: Determinar el lugar en el que My.Application.Log escribe la información.
Quizás desee revisar Cómo: Escribir información de eventos en un archivo de texto o
Cómo: Escribir el registro de eventos de una aplicación.
Para agregar agentes de escucha
1. Haga clic con el botón secundario del mouse (ratón) en app.config en el Explorador de soluciones y elija Abrir.
O bien,
Si no hay un archivo app.config:
a. En el menú Proyecto, elija Agregar nuevo elemento.
b. En el cuadro de diálogo Agregar nuevo elemento, seleccione Archivo de configuración de aplicaciones.
c. Haga clic en Agregar.
2. Busque la sección <listeners>, bajo la sección <source> con el atributo de name "DefaultSource", en la sección
<sources>. La sección <sources> está en la sección <system.diagnostics>, de la sección <configuration> de nivel
superior.
3. Agregue estos elementos a esa sección <listeners>.

<!-- Uncomment to connect the application file log. -->


<!-- <add name="FileLog" /> -->
<!-- Uncomment to connect the event log. -->
<!-- <add name="EventLog" /> -->
<!-- Uncomment to connect the event log. -->
<!-- <add name="Delimited" /> -->
<!-- Uncomment to connect the XML log. -->
<!-- <add name="XmlWriter" /> -->
<!-- Uncomment to connect the console log. -->
<!-- <add name="Console" /> -->

4. Quite los comentarios de los agentes de escucha de registro que desea que reciban los mensajes de Log.
5. Busque la sección <sharedListeners>, en la sección <system.diagnostics>, de la sección <configuration> de nivel
superior.
6. Agregue estos elementos a esa sección <sharedListeners>.

<add name="FileLog"
type="Microsoft.VisualBasic.Logging.FileLogTraceListener,
Microsoft.VisualBasic, Version=8.0.0.0,
Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
initializeData="FileLogWriter" />
<add name="EventLog"
type="System.Diagnostics.EventLogTraceListener,
System, Version=2.0.0.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089"
initializeData="sample application"/>
<add name="Delimited"
type="System.Diagnostics.DelimitedListTraceListener,
System, Version=2.0.0.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089"
initializeData="c:\temp\sampleDelimitedFile.txt"
delimiter=";;;"
traceOutputOptions="DateTime" />
<add name="XmlWriter"
type="System.Diagnostics.XmlWriterTraceListener,
System, Version=2.0.0.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089"
initializeData="c:\temp\sampleLogFile.xml" />
<add name="Console"
type="System.Diagnostics.ConsoleTraceListener,
System, Version=2.0.0.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089"
initializeData="true" />

7. El contenido del archivo app.config debería ser similar al código XML siguiente:

<?xml version="1.0" encoding="utf-8" ?>


<configuration>
<system.diagnostics>
<sources>
<!-- This section configures My.Application.Log -->
<source name="DefaultSource" switchName="DefaultSwitch">
<listeners>
<add name="FileLog"/>
<!-- Uncomment to connect the application file log. -->
<!-- <add name="FileLog" /> -->
<!-- Uncomment to connect the event log. -->
<!-- <add name="EventLog" /> -->
<!-- Uncomment to connect the event log. -->
<!-- <add name="Delimited" /> -->
<!-- Uncomment to connect the XML log. -->
<!-- <add name="XmlWriter" /> -->
<!-- Uncomment to connect the console log. -->
<!-- <add name="Console" /> -->
</listeners>
</source>
</sources>
<switches>
<add name="DefaultSwitch" value="Information" />
</switches>
<sharedListeners>
<add name="FileLog"
type="Microsoft.VisualBasic.Logging.FileLogTraceListener,
Microsoft.VisualBasic, Version=8.0.0.0,
Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
initializeData="FileLogWriter" />
<add name="EventLog"
type="System.Diagnostics.EventLogTraceListener,
System, Version=2.0.0.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089"
initializeData="sample application"/>
<add name="Delimited"
type="System.Diagnostics.DelimitedListTraceListener,
System, Version=2.0.0.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089"
initializeData="c:\temp\sampleDelimitedFile.txt"
delimiter=";;;"
traceOutputOptions="DateTime" />
<add name="XmlWriter"
type="System.Diagnostics.XmlWriterTraceListener,
System, Version=2.0.0.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089"
initializeData="c:\temp\sampleLogFile.xml" />
<add name="Console"
type="System.Diagnostics.ConsoleTraceListener,
System, Version=2.0.0.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089"
initializeData="true" />
</sharedListeners>
</system.diagnostics>
</configuration>

Para reconfigurar un agente de escucha


1. Busque el elemento <add> del agente de escucha de la sección <sharedListeners>.
2. El atributo type proporciona el nombre del tipo de agente de escucha. Este tipo debe heredar de la clase TraceListener.
Utilice un nombre de tipo seguro para garantizar que se utiliza el tipo correcto. Para obtener más información, vea la
sección "Para hacer referencia a un tipo con nombre seguro" a continuación.
Algunos tipos que puede utilizar son:
Un agente de escucha Microsoft.VisualBasic.Logging.FileLogTraceListener que escribe en un registro de archivos.
Un agente de escucha System.Diagnostics.EventLogTraceListener que escribe información en el registro de eventos
del equipo especificado por el parámetro initializeData.
Los agentes de escucha System.Diagnostics.DelimitedListTraceListener y
System.Diagnostics.XmlWriterTraceListener que escriben en el archivo especificado en el parámetro
initializeData.

Un agente de escucha System.Diagnostics.ConsoleTraceListener que escribe en la consola de la línea de comandos.


Para obtener información sobre dónde escriben información otros tipos de agentes de escucha de registro, consulte la
documentación del tipo.
3. Cuando la aplicación crea el objeto de agente de escucha del registro, pasa el atributo initializeData como parámetro
de constructor. El significado del atributo initializeData depende del agente de escucha de seguimiento.
4. Después de crear el agente de escucha de registro, la aplicación establece las propiedades del agente de escucha. Los
otros atributos definen estas propiedades en el elemento <add>. Para obtener más información sobre las propiedades de
un agente de escucha determinado, consulte la documentación del tipo de ese agente de escucha.

Para hacer referencia a un tipo con nombre seguro


1. Para asegurarse de que se utiliza el tipo correcto de agente de escucha de registro, asegúrese de que utiliza el nombre de
tipo completo y el nombre de ensamblado seguro. La sintaxis de un tipo con nombre seguro es la siguiente:
<type name>, <assembly name>, <version number>, <culture>, <strong name>
2. En este ejemplo de código se muestra cómo determinar un nombre de tipo seguro para un tipo con nombre completo
("System.Diagnostics.FileLogTraceListener" en este caso).
VB
Public Sub DisplayStrongName()
Dim t As Type = GetType(Logging.FileLogTraceListener)
MsgBox(t.FullName & ", " & t.Assembly.FullName)
End Sub

Éste es el resultado y se puede utilizar para hacer referencia únicamente a un tipo con nombre seguro, como en el
procedimiento anterior "Para agregar agentes de escucha".
Microsoft.VisualBasic.Logging.FileLogTraceListener, Microsoft.VisualBasic, Version=8.0.0.0,
Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a

Vea también
Tareas
Cómo: Escribir información de eventos en un archivo de texto
Cómo: Escribir el registro de eventos de una aplicación
Referencia
My.Application.Log (Objeto)
My.Log (Objeto)
TraceListener
Microsoft.VisualBasic.Logging.FileLogTraceListener
System.Diagnostics.EventLogTraceListener
Conceptos del lenguaje Visual Basic

Tutorial: Filtrar el resultado de My.Application.Log


Este tutorial explica cómo cambiar el filtrado del registro predeterminado para el objeto My.Application.Log, controlar qué
información se pasa desde el objeto Log a los agentes de escucha y qué información escriben los agentes de escucha. Incluso
puede cambiar el comportamiento de registro después de generar la aplicación, porque la información de configuración se
almacena en el archivo de configuración de la aplicación.
Introducción
Cada mensaje que escribe My.Application.Log tiene un nivel de gravedad asociado, que utilizan los mecanismos de filtrado
para controlar el resultado del registro. Esta aplicación de ejemplo utiliza los métodos My.Application.Log para escribir
algunos mensajes de registro con niveles de gravedad diferentes.
Para generar la aplicación de ejemplo
1. Abra un nuevo proyecto Aplicación para Windows de Visual Basic.
2. Agregue un botón denominado Button1 a Form1.
3. En el controlador de eventos Click para Button1, agregue el siguiente código:
VB
' Activity tracing information
My.Application.Log.WriteEntry("Entering Button1_Click", TraceEventType.Start)

' Tracing information


My.Application.Log.WriteEntry("In Button1_Click", TraceEventType.Information)

' Create an exception to log.


Dim ex As New ApplicationException
' Exception information
My.Application.Log.WriteException(ex)

' Activity tracing information


My.Application.Log.WriteEntry("Leaving Button1_Click", TraceEventType.Stop)

4. Ejecute la aplicación en el depurador.


5. Presione Button1.
La aplicación escribe la información siguiente en el resultado de depuración y archivo de registro de la aplicación.
DefaultSource Information: 0 : In Button1_Click

DefaultSource Error: 2 : Error in the application.

6. Cierre la aplicación.
Para obtener información sobre cómo ver la ventana de resultados de depuración de la aplicación, vea Resultados (Ventana).
Para obtener información sobre la ubicación del archivo de registro de la aplicación, vea
Tutorial: Determinar el lugar en el que My.Application.Log escribe la información.
Nota
De manera predeterminada, la aplicación vacía el archivo de registro generado cuando se cierra la aplicación.

En el ejemplo anterior, la segunda llamada al WriteEntry (Método, My.Application.Log y My.Log) y la llamada al método
WriteException (Método, My.Application.Log y My.Log) producen resultados en el registro, mientras que la primera y última
llamadas al método WriteEntry no lo hacen. Esto es así porque los niveles de seguridad de WriteEntry y WriteException
son "Información" y "Error", ambos de los cuales son permitidos por el filtrado de registro predeterminado del objeto
My.Application.Log. Sin embargo, se impide que los eventos con niveles de gravedad "Iniciar" y "Detener" produzcan
resultados en el registro.
Filtrar todos los agentes de escucha de My.Application.Log
El objeto My.Application.Log utiliza un modificador SourceSwitch denominado DefaultSwitch para controlar qué mensajes
pasa de los métodos WriteEntry y WriteException a los agentes de escucha de registro. Puede configurar DefaultSwitch en
el archivo de configuración de la aplicación estableciendo su valor en uno de los valores de enumeración SourceLevels. De
manera predeterminada, su valor es "Información".
Esta tabla muestra el nivel de gravedad requerido para que Registro escriba un mensaje en los agentes de escucha, dado un
valor de DefaultSwitch determinada.
Valor de DefaultSwitch Gravedad del mensaje requerida para el resultado
Critical Critical

Error Critical O bien, Error

Warning Critical, Error o Warning

Information Critical, Error, Warning o Information

Verbose Critical, Error, Warning, Information o Verbose

ActivityTracing Start, Stop, Suspend, Resume o Transfer

All Se permiten todos los mensajes.

Off Se bloquean todos los mensajes.


Nota
Los métodos WriteEntry y WriteException tienen una sobrecarga que no especifica un nivel de gravedad. El nivel de grave
dad implícito para la sobrecarga WriteEntry es "Información" y el nivel de gravedad implícito para la sobrecarga WriteExce
ption es "Error".

Esta tabla explica el resultado de registro del ejemplo anterior: con el valor predeterminado "Información" de DefaultSwitch,
sólo la segunda llamada al método WriteEntry y la llamada al método WriteException producen resultados en el registro.
Para registrar sólo eventos de seguimiento de actividad
1. Haga clic con el botón secundario del mouse en app.config en el Explorador de soluciones y seleccione Abrir.
O bien,
Si no hay ningún archivo app.config:
a. En el menú Proyecto, elija Agregar nuevo elemento.
b. En el cuadro de diálogo Agregar nuevo elemento, elija Archivo de configuración de aplicaciones.
c. Haga clic en Agregar.
2. Busque la sección <switches>, que está en la sección <system.diagnostics>, que está en la sección <configuration> de
nivel superior.
3. Busque el elemento que agrega DefaultSwitch a la colección de modificadores. Debería tener un aspecto parecido a este
elemento:
<add name="DefaultSwitch" value="Information" />

4. Cambie el valor del atributo value a "ActivityTracing".


5. El contenido del archivo app.config debería ser similar al código XML siguiente:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.diagnostics>
<sources>
<!-- This section configures My.Application.Log -->
<source name="DefaultSource" switchName="DefaultSwitch">
<listeners>
<add name="FileLog"/>
</listeners>
</source>
</sources>
<switches>
<add name="DefaultSwitch" value="ActivityTracing" />
</switches>
<sharedListeners>
<add name="FileLog"
type="Microsoft.VisualBasic.Logging.FileLogTraceListener,
Microsoft.VisualBasic, Version=8.0.0.0,
Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a,
processorArchitecture=MSIL"
initializeData="FileLogWriter"/>
</sharedListeners>
</system.diagnostics>
</configuration>

6. Ejecutar la aplicación en el depurador.


7. Presione Button1.
La aplicación escribe la información siguiente en el resultado de depuración y archivo de registro de la aplicación:
DefaultSource Start: 4 : Entering Button1_Click

DefaultSource Stop: 5 : Leaving Button1_Click

8. Cierre la aplicación.
9. Vuelva a establecer el valor del atributo value en "Información".
Nota
El valor del modificador DefaultSwitch sólo controla My.Application.Log. No cambia el comportamiento de las clases
System.Diagnostics.Trace y System.Diagnostics.Debug de .NET Framework.

Filtrado individual para los agentes de escucha de My.Application.Log


El ejemplo anterior muestra cómo cambiar el filtrado para todo el resultado de My.Application.Log. Este ejemplo explica
cómo filtrar un agente de escucha de registro concreto. De manera predeterminada, una aplicación tiene dos agentes de
escucha que escriben en el resultado de depuración de la aplicación y en el archivo de registro.
El archivo de configuración controla el comportamiento de los agentes de escucha de registro permitiendo que cada uno tenga
un filtro, que es parecido a un modificador para My.Application.Log. Un agente de escucha de registro sólo generará un
mensaje si lo permiten el modificador DefaultSwitch del registro y por el filtro del agente de escucha de registro en función
de la gravedad del mensaje.
Este ejemplo muestra cómo configurar el filtrado para un nuevo agente de escucha de depuración y agregarlo al objeto Log. El
agente de escucha de depuración predeterminado debe quitarse del objeto Log, por lo que es evidente que los mensajes de
depuración proceden del nuevo agente de escucha de depuración.
Para registrar sólo eventos de seguimiento de actividad
1. Haga clic con el botón secundario del mouse en app.config en el Explorador de soluciones y elija Abrir.
O bien,
Si no hay ningún archivo app.config:
a. En el menú Proyecto, elija Agregar nuevo elemento.
b. En el cuadro de diálogo Agregar nuevo elemento, elija Archivo de configuración de aplicaciones.
c. Haga clic en Agregar.
2. Haga clic con el botón secundario del mouse en app.config en el Explorador de soluciones. Elija Abrir.
3. Busque la sección <listeners>, dentro de la sección <source> que tiene el atributo name "DefaultSource", que está en la
sección <sources>. La sección <sources> se encuentra bajo la sección <system.diagnostics>, en la sección de nivel
superior <configuration>.
4. Agregue este elemento a la sección <listeners>:

<!-- Remove the default debug listener. -->


<remove name="Default"/>
<!-- Add a filterable debug listener. -->
<add name="NewDefault"/>

5. Busque la sección <sharedListeners> dentro de la sección <system.diagnostics>, situada en la sección


<configuration> de nivel superior.

6. Agregue este elemento a esa sección <sharedListeners>:

<add name="NewDefault"
type="System.Diagnostics.DefaultTraceListener,
System, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089,
processorArchitecture=MSIL">
<filter type="System.Diagnostics.EventTypeFilter"
initializeData="Error" />
</add>

El filtro EventTypeFilter toma uno de los valores de enumeración SourceLevels como su atributo initializeData.
7. El contenido del archivo app.config debería ser similar al código XML siguiente:

<?xml version="1.0" encoding="utf-8" ?>


<configuration>
<system.diagnostics>
<sources>
<!-- This section configures My.Application.Log -->
<source name="DefaultSource" switchName="DefaultSwitch">
<listeners>
<add name="FileLog"/>
<!-- Remove the default debug listener. -->
<remove name="Default"/>
<!-- Add a filterable debug listener. -->
<add name="NewDefault"/>
</listeners>
</source>
</sources>
<switches>
<add name="DefaultSwitch" value="Information" />
</switches>
<sharedListeners>
<add name="FileLog"
type="Microsoft.VisualBasic.Logging.FileLogTraceListener,
Microsoft.VisualBasic, Version=8.0.0.0,
Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a,
processorArchitecture=MSIL"
initializeData="FileLogWriter"/>
<add name="NewDefault"
type="System.Diagnostics.DefaultTraceListener,
System, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089,
processorArchitecture=MSIL">
<filter type="System.Diagnostics.EventTypeFilter"
initializeData="Error" />
</add>
</sharedListeners>
</system.diagnostics>
</configuration>

8. Ejecutar la aplicación en el depurador.


9. Presione Button1.
La aplicación escribe la información siguiente en el archivo de registro de la aplicación:
Default Information: 0 : In Button1_Click

Default Error: 2 : Error in the application.

La aplicación escribe menos información en el resultado de depuración de la aplicación porque su filtrado es más
restrictivo.
Default Error 2 Error

10. Cierre la aplicación.


Para obtener más información sobre cómo cambiar la configuración del registro después de la implementación, vea
Trabajar con registros de aplicación en Visual Basic.
Vea también
Tareas
Tutorial: Determinar el lugar en el que My.Application.Log escribe la información
Tutorial: Cambiar el lugar donde My.Application.Log escribe información
Tutorial: Crear agentes de escucha de registro personalizados
Cómo: Escribir mensajes de registro
Conceptos
Modificadores de seguimiento
Registrar información de la aplicación
Conceptos del lenguaje Visual Basic

Tutorial: Desactivar el resultado de My.Application.Log


Este tutorial muestra cómo desactivar el filtrado del registro predeterminado para el objeto My.Application.Log. Puede
cambiar el comportamiento del registro después de generar la aplicación, ya que la información de configuración se almacena
en el archivo de configuración de la aplicación.
Introducción
El objeto My.Application.Log pasa cada mensaje que obtiene a sus agentes de escucha de registro. Esta aplicación de
ejemplo utiliza los métodos My.Application.Log.WriteEntry para escribir un mensaje en los agentes de escucha.
Para generar la aplicación de ejemplo
1. Abra un nuevo proyecto Aplicación para Windows de Visual Basic.
2. Agregue un botón denominado Button1 a Form1.
3. En el controlador de eventos Click de Button1, agregue el siguiente código:
VB
My.Application.Log.WriteEntry("Log entry")

4. Ejecute la aplicación en el depurador.


5. Presione Button1.
La aplicación escribe la información siguiente en el resultado de depuración de la aplicación y en el archivo de registro.
DefaultSource Information: 0 : Log entry

6. Cierre la aplicación.
Para obtener información sobre cómo ver la ventana de resultados de depuración de la aplicación, vea Resultados (Ventana).
Para obtener información sobre la ubicación del archivo de registro de la aplicación, vea
Tutorial: Determinar el lugar en el que My.Application.Log escribe la información.
Quitar los agentes de escucha de My.Application.Log
De manera predeterminada, una aplicación tiene dos agentes de escucha que escriben en el resultado de depuración de la
aplicación y en el archivo de registro. Este ejemplo muestra cómo quitar estos agentes de escucha.
Para quitar los agentes de escucha de registro del objeto Log
1. Haga clic con el botón secundario del mouse en el Explorador de soluciones y elija Abrir.
O bien
Si no hay un archivo app.config:
a. En el menú Proyecto, haga clic en Agregar nuevo elemento.
b. En el cuadro Agregar nuevo elemento, seleccione Archivo de configuración de aplicaciones.
c. Haga clic en Agregar.
2. Busque la sección <listeners> en la sección <source> con el atributo name "DefaultSource".
Estas secciones de configuración del registro se encuentran en el nodo <system.diagnostics> del nodo principal
<configuration> del archivo de configuración. El XML de DefaultSource se encuentra en el nodo <sources>.

3. Quite el elemento <add> con el atributo name "FileLog". Debe ser similar a este elemento:
<add name="FileLog"/>

4. Agregue este elemento a la sección <listeners>.


<!-- Remove the default debug listener. -->
<remove name="Default"/>

5. El contenido del archivo app.config debe ser similar al XML siguiente:

<?xml version="1.0" encoding="utf-8" ?>


<configuration>
<system.diagnostics>
<sources>
<!-- This section configures My.Application.Log -->
<source name="DefaultSource" switchName="DefaultSwitch">
<listeners>
<!-- Remove the default debug listener. -->
<remove name="Default"/>
</listeners>
</source>
</sources>
<switches>
<add name="DefaultSwitch" value="Information" />
</switches>
</system.diagnostics>
</configuration>

6. Ejecute la aplicación en el depurador.


7. Presione Button1.
La aplicación no escribe información en el archivo de registro de la aplicación ni en el resultado de depuración.
Para obtener más información sobre cómo cambiar la configuración del registro después de la implementación, vea
Trabajar con registros de aplicación en Visual Basic.
Vea también
Tareas
Tutorial: Determinar el lugar en el que My.Application.Log escribe la información
Tutorial: Cambiar el lugar donde My.Application.Log escribe información
Tutorial: Filtrar el resultado de My.Application.Log
Tutorial: Crear agentes de escucha de registro personalizados
Cómo: Escribir mensajes de registro
Conceptos
Registrar información de la aplicación
Conceptos del lenguaje Visual Basic

Tutorial: Crear agentes de escucha de registro personalizados


Este tutorial muestra cómo crear un agente de escucha de registro personalizado y configurarlo para esperar el resultado del
objeto My.Application.Log.
Introducción
Los agentes de escucha de registro deben heredar de la clase TraceListener.
Para crear el agente de escucha
En su aplicación, cree una clase denominada SimpleListener que herede de TraceListener.
VB
Public Class SimpleListener
Inherits System.Diagnostics.TraceListener

<Security.Permissions.HostProtection(Synchronization:=True)> _
Public Overloads Overrides Sub Write(ByVal message As String)
MsgBox("Write: " & message)
End Sub

<Security.Permissions.HostProtection(Synchronization:=True)> _
Public Overloads Overrides Sub WriteLine(ByVal message As String)
MsgBox("WriteLine: " & message)
End Sub
End Class

Los métodos Write y WriteLine, requeridos por la clase base, llaman a MsgBox para mostrar su entrada.
El atributo HostProtectionAttribute se aplica a los métodos Write y WriteLine para que sus atributos coincidan con los
métodos de la clase base. El atributo HostProtectionAttribute permite al host que ejecuta el código determinar que el
código expone sincronización de protección del host.
Nota
El atributo HostProtectionAttribute sólo es eficaz en aplicaciones no administradas que alojan Common Language R
untime e implementan esa protección de host, como SQL Server.

Para garantizar que My.Application.Log utiliza su agente de escucha de registro, debería utilizar un nombre seguro para el
ensamblado que contiene su agente de escucha de registro.
El procedimiento siguiente proporciona algunos pasos simples para crear un ensamblado de agente de escucha de registro
con nombre seguro. Para obtener más información, vea Crear y utilizar ensamblados con nombre seguro.
Para asignar un nombre seguro al ensamblado de agente de escucha de registro
1. Tenga seleccionado un proyecto en el Explorador de soluciones. En el menú Proyecto, elija Propiedades. Para
obtener más información, vea Introducción al Diseñador de proyectos.
2. Haga clic en la ficha Firma.
3. Active la casilla de verificación Firmar el ensamblado.
4. Seleccione <Nuevo> en la lista desplegable Seleccione un archivo de clave de nombre seguro.
Aparecerá el cuadro de diálogo Crear clave de nombre seguro.
5. Proporcione un nombre para el archivo de clave en el cuadro Nombre del archivo de clave.
6. Escriba una contraseña en los cuadros Escribir contraseña y Confirmar contraseña.
7. Haga clic en Aceptar.
8. Vuelva a generar la aplicación.
Agregar el agente de escucha
Ahora que el ensamblado tiene un nombre seguro, es necesario determinar el nombre seguro del agente de escucha para que
My.Application.Log utilice su agente de escucha de registro.
El formato de un tipo con nombre seguro es como sigue.
<nombre de tipo>, <nombre de ensamblado>, <número de versión>, <referencia cultural>, <nombre seguro>
Para determinar el nombre seguro del agente de escucha
El código siguiente muestra cómo determinar el nombre seguro del tipo de SimpleListener.
VB
Public Sub DisplaySimpleListenerStrongName()
Dim t As Type = GetType(SimpleListener)
MsgBox(t.FullName & ", " & t.Assembly.FullName)
End Sub

El nombre seguro del tipo depende de su proyecto.


Con el nombre seguro, puede agregar el agente de escucha a la colección del agente de escucha de registro de
My.Application.Log.
Para agregar el agente de escucha a My.Application.Log
1. Haga clic con el botón secundario del mouse en app.config en el Explorador de soluciones y elija Abrir.
O bien,
Si hay un archivo app.config:
a. En el menú Proyecto, elija Agregar nuevo elemento.
b. En el cuadro de diálogo Agregar nuevo elemento, elija Archivo de configuración de aplicaciones.
c. Haga clic en Agregar.
2. Busque la sección <listeners>, dentro de la sección <source> que tiene el atributo name "DefaultSource", situado en la
sección <sources>. La sección <sources> se encuentra en la sección <system.diagnostics>, en la sección de nivel
superior <configuration>.
3. Agregue este elemento a la sección <listeners>:

<add name="SimpleLog" />

4. Busque la sección <sharedListeners> dentro de la sección <system.diagnostics>, situada en la sección


<configuration> de nivel superior.

5. Agregue este elemento a esa sección <sharedListeners>:

<add name="SimpleLog" type="SimpleLogStrongName" />

Cambie el valor de SimpleLogStrongName para que sea el nombre seguro del agente de escucha.
Vea también
Tareas
Cómo: Registrar excepciones en Visual Basic
Cómo: Escribir mensajes de registro
Tutorial: Cambiar el lugar donde My.Application.Log escribe información
Referencia
My.Application.Log (Objeto)
My.Log (Objeto)
Conceptos
Trabajar con registros de aplicación en Visual Basic
Referencia del lenguaje Visual Basic

Solución de problemas: Agentes de escucha de registro


Puede utilizar los objetos My.Application.Log y My.Log para registrar información sobre eventos que aparecen en su
aplicación.
Para determinar qué agentes de escucha de registro reciben esos mensajes, vea
Tutorial: Determinar el lugar en el que My.Application.Log escribe la información.
El objeto Log puede utilizar el filtrado del registro para limitar la cantidad de información que registra. Si los filtros se
configuran de forma incorrecta, los registros pueden contener información equivocada. Para obtener más información sobre
los filtros, vea Tutorial: Filtrar el resultado de My.Application.Log.
Sin embargo, si un registro se configura incorrectamente, puede necesitar más información sobre su configuración actual.
Puede obtener esta información mediante la propiedad TraceSource avanzada del registro.
Para determinar los agentes de escucha de registro del objeto Log con código
1. Importe el espacio de nombres System.Diagnostics al principio del archivo de código. Para obtener más información, vea
Imports (Instrucción).
VB
Imports System.Diagnostics

2. Cree una función que devuelva una cadena compuesta por información de cada uno de los agentes de escucha del
registro.
VB
Function GetListeners(ByVal listeners As TraceListenerCollection) As String
Dim ret As String = ""
For Each listener As TraceListener In listeners
ret &= listener.Name
Dim listenerType As Type = listener.GetType
If listenerType Is GetType(DefaultTraceListener) Then
Dim tmp As DefaultTraceListener = _
DirectCast(listener, DefaultTraceListener)
ret &= ": Writes to the debug output."
ElseIf listenerType Is GetType(Logging.FileLogTraceListener) Then
Dim tmp As Logging.FileLogTraceListener = _
DirectCast(listener, Logging.FileLogTraceListener)
ret &= ": Log filename: " & tmp.FullLogFileName
ElseIf listenerType Is GetType(EventLogTraceListener) Then
Dim tmp As EventLogTraceListener = _
DirectCast(listener, EventLogTraceListener)
ret &= ": Event log name: " & tmp.EventLog.Log
ElseIf listenerType Is GetType(XmlWriterTraceListener) Then
Dim tmp As Diagnostics.XmlWriterTraceListener = _
DirectCast(listener, XmlWriterTraceListener)
ret &= ": XML log"
ElseIf listenerType Is GetType(ConsoleTraceListener) Then
Dim tmp As ConsoleTraceListener = _
DirectCast(listener, ConsoleTraceListener)
ret &= ": Console log"
ElseIf listenerType Is GetType(DelimitedListTraceListener) Then
Dim tmp As DelimitedListTraceListener = _
DirectCast(listener, DelimitedListTraceListener)
ret &= ": Delimited log"
Else
ret &= ": Unhandeled log type: " & _
listenerType.ToString
End If
ret &= vbCrLf
Next

Return ret
End Function

3. Pase la colección de los agentes de escucha de traza del registro a la función GetListeners y muestre el valor devuelto.
VB
Dim ListenerCollection As TraceListenerCollection
ListenerCollection = My.Application.Log.TraceSource.Listeners
Dim ListenersText As String = GetListeners(ListenerCollection)
MsgBox(ListenersText)

Para obtener más información, vea TraceSource (Propiedad, My.Application.Log y My.Log).


Vea también
Tareas
Tutorial: Determinar el lugar en el que My.Application.Log escribe la información
Referencia
My.Application.Log (Objeto)
My.Log (Objeto)
Conceptos
Trabajar con registros de aplicación en Visual Basic
Conceptos del lenguaje Visual Basic

Acceso a una aplicación en ejecución en Visual Basic


Esta sección contiene temas dedicados a cómo utilizar el modelo de aplicaciones de Visual Basic para controlar el
comportamiento de la aplicación en tiempo de ejecución, y temas que explican cómo obtener información en tiempo de
ejecución sobre la aplicación.
El objeto My.Application proporciona propiedades, métodos y eventos relacionados con la aplicación actual. Le permite
obtener información sobre la aplicación, como la referencia cultural actual, cómo se implementó la aplicación, y las variables
de entorno. El modelo de aplicaciones de Visual Basic expuesto por el objeto My.Application permite que una aplicación
ejecute código cuando se inicia y se cierra la aplicación. De manera similar, la propiedad My.Application.Deployment
proporciona el objeto de implementación ClickOnce de la aplicación actual.
Tareas
Para Vea
Permitir que su aplicaci My.Application.DoEvents (Método)
ón controle otros event
os que se podrían prod
ucir mientras se ejecut
a su código

Determinar los argume Cómo: Obtener acceso a argumentos de línea de comandos en Visual Basic
ntos de la línea de com
andos de la aplicación

Comprobar si la aplicac Cómo: Habilitar un modo de procesamiento por lotes para aplicaciones de formularios Window Forms
ión se inició con la cad
ena "/batch" como arg
umento

Controlar cualquier exc My.Application.UnhandledException (Evento)


epción no detectada en
su aplicación

Utilizar los eventos pro Cómo: Ejecutar código cuando se inicia o se cierra la aplicación
porcionados por el mo
delo de aplicaciones de
Visual Basic para ejecut
ar código cuando se ini
cia o finaliza la aplicaci
ón

Comprobar los argume My.Application.StartupNextInstance (Evento)


ntos de la línea de com
andos de los subsiguie
ntes intentos de iniciar
una aplicación de insta
ncia única

Descargar e instalar la Cómo: Descargar actualizaciones de la aplicación ClickOnce


versión más reciente d
e una aplicación ClickO
nce

Vea también
Tareas
Cómo: Especificar información de ensamblado
Referencia
My.Application (Objeto)
My.Application.Log (Objeto)
My.Application.Info (Objeto)
Conceptos
Información general sobre el modelo de aplicaciones de Visual Basic
Registrar información de la aplicación
Conceptos del lenguaje Visual Basic

Cómo: Ejecutar código cuando se inicia o se cierra la aplicación


Los eventos proporcionados por el modelo de aplicaciones de Visual Basic se utilizan para ejecutar código cuando se inicia o
finaliza la aplicación. El Diseñador de proyectos proporciona acceso al código de controlador de eventos de la aplicación.
Nota
El modelo de aplicaciones de Visual Basic sólo está disponible para las aplicaciones de Windows Forms. Para obtener más inf
ormación, vea Información general sobre el modelo de aplicaciones de Visual Basic.

Nota
Las opciones disponibles en los cuadros de diálogo, y los nombres y las ubicaciones de los comandos de menú que se ven p
odrían diferir de lo que se describe en la Ayuda, en función de los valores de configuración o de edición activos. Esta página
de Ayuda se ha redactado teniendo en cuenta la Configuración general de desarrollo. Para cambiar la configuración, elija
la opción Importar y exportar configuraciones en el menú Herramientas. Para obtener más información, vea
Valores de configuración de Visual Studio.

Para tener acceso al código del controlador de eventos de la aplicación


1. Tenga seleccionado un proyecto en el Explorador de soluciones. En el menú Proyecto, haga clic en Propiedades.
2. Haga clic en la ficha Aplicación.
3. Haga clic en el botón Ver eventos de aplicaciones para abrir el Editor de código.
Esto abre el archivo ApplicationEvents.vb.
Para ejecutar código cuando se inicia la aplicación
1. Tenga abierto el archivo ApplicationEvents.vb en el Editor de código. En el menú General, elija Eventos de
MyApplication.
2. En el menú Declaraciones, elija Inicio.
La aplicación provoca el evento Startup antes de que se ejecute la aplicación principal.
3. Si su aplicación es de instancia única, puede que desear controlar los inicios de la aplicación subsiguientes. Para ello, en
el menú General, elija Eventos de MyApplication.
4. En el menú Declaraciones, elija StartupNextInstance.
Una aplicación de instancia única provoca el evento StartupNextInstance en la primera instancia de la aplicación cuando
se inicia una instancia subsiguiente de la aplicación. La instancia subsiguiente se cierra entonces sin provocar ninguno de
sus propios eventos.
Para ejecutar código cuando se cierra la aplicación
1. Tenga abierto el archivo ApplicationEvents.vb en el Editor de código. En el menú General, elija Eventos de
MyApplication.
2. En el menú Declaraciones, elija Shutdown.
La aplicación provoca el evento Shutdown después de que se ejecute la aplicación principal, pero antes de que se cierre.
3. En el menú General, elija Eventos de MyApplication.
4. En el menú Declaraciones, elija UnhandledException.
La aplicación provoca el evento UnhandledException si encuentra una excepción no controlada. Puesto que la aplicación
no provoca el evento Shutdown después del evento UnhandledException, puede que desee que el controlador
UnhandledException llame al mismo código de cierre que el que llama el controlador Shutdown.
Vea también
Tareas
Cómo: Controlar eventos de aplicaciones (Visual Basic)
Conceptos
Información general sobre el modelo de aplicaciones de Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Habilitar un modo de procesamiento por lotes para


aplicaciones de formularios Window Forms
Este ejemplo utiliza el evento My.Application.Startup para comprobar si la aplicación se ha iniciado con la cadena /batch
como un argumento.
Para habilitar un modo de proceso por lotes en una aplicación de formularios Window Forms
1. Tenga seleccionado un proyecto en el Explorador de soluciones. En el menú Proyecto, haga clic en Propiedades.
2. En la ficha Aplicación, haga clic en Ver eventos de aplicaciones para abrir el Editor de código.
3. Cree el método que controla My.Application.Startup (Evento). Para obtener más información, vea
Cómo: Controlar eventos de aplicaciones (Visual Basic).
VB
Private Sub MyApplication_Startup( _
ByVal sender As Object, _
ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupEventArgs _
) Handles Me.Startup

VB
End Sub

4. Recorra en iteración los argumentos de la línea de comandos de la aplicación y establezca la propiedad Cancel del
objeto e en True si uno de los argumentos es /batch.
Cuando la propiedad Cancel se establece en True, el formulario de inicio no se inicia.
VB
For Each s As String In My.Application.CommandLineArgs
If s.ToLower = "/batch" Then
' Stop the start form from loading.
e.Cancel = True
End If
Next

5. Si la propiedad Cancel del objeto e se establece en True, llame a la rutina principal para una operación sin ventanas.
VB
If e.Cancel Then
' Call the main routine for windowless operation.
Dim c As New BatchApplication
c.Main()
End If

Ejemplo
VB
Private Sub MyApplication_Startup( _
ByVal sender As Object, _
ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupEventArgs _
) Handles Me.Startup
For Each s As String In My.Application.CommandLineArgs
If s.ToLower = "/batch" Then
' Stop the start form from loading.
e.Cancel = True
End If
Next
If e.Cancel Then
' Call the main routine for windowless operation.
Dim c As New BatchApplication
c.Main()
End If
End Sub
Class BatchApplication
Sub Main()
' Insert code to run without a graphical user interface.
End Sub
End Class

Vea también
Tareas
Cómo: Obtener acceso a argumentos de línea de comandos en Visual Basic
Referencia
My.Application (Objeto)
My.Application.CommandLineArgs (Propiedad)
Conceptos
Información general sobre el modelo de aplicaciones de Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Obtener acceso a argumentos de línea de comandos en


Visual Basic
El ejemplo de código siguiente recorre en un bucle los argumentos de línea de comandos de la aplicación.
Ejemplo
VB
For Each argument As String In My.Application.CommandLineArgs
' Add code here to use the argument.
Next

Vea también
Tareas
Cómo: Habilitar un modo de procesamiento por lotes para aplicaciones de formularios Window Forms
Referencia
My.Application.CommandLineArgs (Propiedad)
Estructura de un programa de Visual Basic
Conceptos del lenguaje Visual Basic

Acceso a los datos del usuario


Esta sección contiene temas que tratan del objeto My.User y las tareas que se pueden realizar con él.
El objeto My.User proporciona acceso a información sobre el usuario que ha iniciado la sesión devolviendo un objeto que
implementa la interfaz IPrincipal.
Tareas
Para Vea
Obtener el nombre de inicio de sesión del usuario Cómo: Determinar el nombre de inicio de sesión de un usuario

Obtener el nombre de dominio del usuario, si la aplicación u Cómo: Determinar el dominio del usuario
tiliza la autenticación de Windows

Determinar la función del usuario Cómo: Determinar si un usuario está en un grupo

Implementar la autenticación personalizada Tutorial: Implementar autenticación y autorización personalizadas

Vea también
Referencia
My.User (Objeto)
Otros recursos
Autenticación y autorización en .NET Framework con Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Determinar el nombre de inicio de sesión de un usuario


Puede utilizar el objeto My.User para obtener información sobre el usuario actual. En este ejemplo se muestra cómo utilizar la
propiedad My.User.Name para obtener el nombre de inicio de sesión del usuario.
Una aplicación utiliza la autenticación de Windows de manera predeterminada, por lo que My.User devuelve la información de
Windows sobre el usuario que inició la aplicación.
Ejemplo
En este ejemplo se comprueba si la aplicación utiliza autenticación de Windows o personalizada, y después, se utiliza esa
información para analizar la propiedad My.User.Name.
VB
Function GetUserName() As String
If TypeOf My.User.CurrentPrincipal Is _
Security.Principal.WindowsPrincipal Then
' The application is using Windows authentication.
' The name format is DOMAIN\USERNAME.
Dim parts() As String = Split(My.User.Name, "\")
Dim username As String = parts(1)
Return username
Else
' The application is using custom authentication.
Return My.User.Name
End If
End Function

Vea también
Tareas
Cómo: Determinar el dominio del usuario
Tutorial: Implementar autenticación y autorización personalizadas
Referencia
My.User.Name (Propiedad)
Conceptos
Acceso a los datos del usuario
Conceptos del lenguaje Visual Basic

Cómo: Determinar si un usuario está en un grupo


Puede utilizar el objeto My.User para obtener información sobre el usuario actual. Este ejemplo muestra cómo utilizar el
método My.User.IsInRole para determinar si el usuario es un miembro de un grupo determinado.
Ejemplo
Este ejemplo utiliza el método My.User.IsInRole para determinar si el usuario es un administrador antes de tener acceso a un
recurso.
VB
If My.User.IsInRole( _
ApplicationServices.BuiltInRole.Administrator) Then
' Insert code to access a resource here.
End If

Vea también
Tareas
Cómo: Determinar el dominio del usuario
Tutorial: Implementar autenticación y autorización personalizadas
Referencia
My.User.IsInRole (Método)
Conceptos
Acceso a los datos del usuario
Conceptos del lenguaje Visual Basic

Cómo: Determinar el dominio del usuario


Puede utilizar el objeto My.User para obtener información sobre el usuario actual. En este ejemplo se muestra cómo utilizar la
propiedad My.User.Name para obtener el nombre de dominio del usuario si la aplicación utiliza la autenticación de Windows.
Como la aplicación utiliza la autenticación de Windows de manera predeterminada, My.User devuelve la información de
Windows sobre el usuario que inició la aplicación.
Ejemplo
En este ejemplo se comprueba si la aplicación utiliza la autenticación de Windows antes de analizar la propiedad
My.User.Name para determinar el nombre de dominio.
En este ejemplo se devuelve una cadena vacía si la aplicación utiliza la autenticación personalizada, porque una
implementación de autenticación personalizada no proporciona necesariamente información del dominio.
VB
Function GetUserDomain() As String
If TypeOf My.User.CurrentPrincipal Is _
Security.Principal.WindowsPrincipal Then
' My.User is using Windows authentication.
' The name format is DOMAIN\USERNAME.
Dim parts() As String = Split(My.User.Name, "\")
Dim domain As String = parts(0)
Return domain
Else
' My.User is using custom authentication.
Return ""
End If
End Function

Vea también
Tareas
Cómo: Determinar el nombre de inicio de sesión de un usuario
Tutorial: Implementar autenticación y autorización personalizadas
Referencia
My.User.Name (Propiedad)
Conceptos
Acceso a los datos del usuario
Conceptos del lenguaje Visual Basic

Acceso a los formularios de la aplicación


El objeto My.Forms proporciona una manera fácil de tener acceso a una instancia de cada formulario Windows Forms
declarado en el proyecto de la aplicación. También puede utilizar propiedades del objeto My.Application para tener acceso a
la pantalla de bienvenido y el formulario principal de la aplicación y para obtener una lista de los formularios abiertos de la
aplicación.
Tareas
La tabla siguiente muestra ejemplos que indican cómo tener acceso a los formularios de una aplicación.
Para Vea
Tener acceso a un formulario desde otro formulario Cómo: Establecer comunicación entre formularios en una aplicación
de una aplicación.

Mostrar los títulos de todos los formularios abiertos Cómo: Obtener acceso a todos los formularios abiertos de una aplicación
de la aplicación.

Actualizar la pantalla de bienvenida con información My.Application.SplashScreen (Propiedad)


de estado como los inicios de la aplicación.

Vea también
Referencia
My.Forms (Objeto)
My.Application.OpenForms (Propiedad)
My.Application.SplashScreen (Propiedad)
Conceptos del lenguaje Visual Basic

Cómo: Establecer comunicación entre formularios en una


aplicación
Este ejemplo muestra cómo utilizar el objeto My.Forms para obtener acceso a un formulario desde otro formulario.
El objeto My.Forms proporciona el acceso a una instancia de cada formulario de Windows declarada en el proyecto de la
aplicación. Esto permite al código de un formulario comunicar con otro formulario.
Para crear código en un formulario que se pueda comunicar con otro formulario
1. Crear una nueva aplicación para Windows.
El nombre predeterminado del formulario principal es Form1.
Para obtener más información, vea Cómo: Crear un proyecto de aplicación para Windows.
2. Agregue otro formulario denominado Form2.
Para obtener más información, vea Cómo: Agregar formularios Windows Forms a un proyecto.
3. Agregue un botón denominado Button1 a Form1 en el Diseñador de aplicaciones.
4. Haga doble clic en Button1.
5. En el controlador del evento Click de Button1, agregue el siguiente código:
VB
My.Forms.Form2.Text = Now.ToString
My.Forms.Form2.Show()

6. Ejecute la aplicación.
7. Haga clic en Button1.
Se abre Form2 y su título muestra la hora actual.
8. Espere unos segundos y haga clic de nuevo en Button1.
Form2 permanece abierto y su título se actualiza para mostrar la hora actual.
Vea también
Tareas
Cómo: Obtener acceso a todos los formularios abiertos de una aplicación
Referencia
My.Forms (Objeto)
Conceptos
Acceso a los formularios de la aplicación
Conceptos del lenguaje Visual Basic

Cómo: Obtener acceso a todos los formularios abiertos de una


aplicación
En este ejemplo se utiliza la propiedad My.Application.OpenForms para mostrar los títulos de todos los formularios abiertos
de la aplicación.
La propiedad My.Application.OpenForms devuelve todos los formularios abiertos actualmente, sin tener en cuenta qué
subproceso los abrió. Esto significa que debería comprobar la propiedad InvokeRequired de cada formulario antes de tener
acceso a él; de lo contrario, se podría producir una excepción InvalidOperationException.
En este ejemplo se declara una función que obtiene el título de cada formulario de una manera segura para subprocesos.
Primero, comprueba la propiedad InvokeRequired del formulario y, si necesario, utiliza el método BeginInvoke para ejecutar
la función en el subproceso del formulario. A continuación, la función devuelve el título del formulario.
Ejemplo
Este ejemplo recorre los formularios abiertos de la aplicación y muestra sus títulos en un control ListBox. Para obtener código
más fácil que muestra sólo los formularios directamente accesibles desde el subproceso actual, vea
My.Application.OpenForms (Propiedad).
VB
Private Sub GetOpenFormTitles()
Dim formTitles As New Collection

Try
For Each f As Form In My.Application.OpenForms
' Use a thread-safe method to get all form titles.
formTitles.Add(GetFormTitle(f))
Next
Catch ex As Exception
formTitles.Add("Error: " & ex.Message)
End Try

Form1.ListBox1.DataSource = formTitles
End Sub

Private Delegate Function GetFormTitleDelegate(ByVal f As Form) As String


Private Function GetFormTitle(ByVal f As Form) As String
' Check if the form can be accessed from the current thread.
If Not f.InvokeRequired Then
' Access the form directly.
Return f.Text
Else
' Marshal to the thread that owns the form.
Dim del As GetFormTitleDelegate = AddressOf GetFormTitle
Dim param As Object() = {f}
Dim result As System.IAsyncResult = f.BeginInvoke(del, param)
' Give the form's thread a chance process function.
System.Threading.Thread.Sleep(10)
' Check the result.
If result.IsCompleted Then
' Get the function's return value.
Return "Different thread: " & f.EndInvoke(result).ToString
Else
Return "Unresponsive thread"
End If
End If
End Function

Vea también
Tareas
Cómo: Realizar llamadas seguras para subprocesos en controles de formularios Windows Forms
Referencia
My.Application.OpenForms (Propiedad)
Conceptos del lenguaje Visual Basic

Acceso a los servicios Web de la aplicación


El objeto My.WebServices proporciona una instancia de cada servicio Web al que hace referencia el proyecto actual. Cada una
de las instancias se crea a petición. Puede tener acceso a estos servicios Web a través de las propiedades del objeto
My.WebServices. El nombre de la propiedad es igual que el nombre del servicio Web al que tiene acceso la propiedad.
Cualquier clase que herede de SoapHttpClientProtocol es un servicio Web. Para obtener información sobre cómo agregar
servicios Web a un proyecto, vea Cómo: Obtener acceso a un servicio Web XML en código administrado.
Tareas
La tabla siguiente muestra las posibles maneras de tener acceso a los servicios Web a los que hace referencia una aplicación.
Para Vea
Llamar a un servicio Web My.WebServices (Objeto)

Llamar de manera asincrónica a un servicio Web y controlar un evento Cómo: Llamar a un servicio Web de forma asincrónica
cuando finaliza

Vea también
Referencia
My.WebServices (Objeto)
Conceptos del lenguaje Visual Basic

Cómo: Llamar a un servicio Web de forma asincrónica


En este ejemplo se adjunta un controlador a un evento de controlador asincrónico de un servicio Web XML de manera que
pueda recuperar el resultado de una llamada a método asincrónica. En este ejemplo se utiliza el servicio Web
DemoTemperatureService de http://www.xmethods.net.
Cuando se hace referencia a un servicio Web en un proyecto en el entorno de desarrollo integrado (IDE) de Visual Studio, se
agrega al objeto My.WebServices y el IDE genera una clase de proxy cliente para tener acceso a un servicio Web especificado.
La clase de proxy permite llamar sincrónicamente a los métodos del servicio Web, dónde la aplicación espera a que finalice la
función. Además, el servidor proxy crea miembros adicionales como ayuda para llamar al método de forma asincrónica. Para
cada función de servicio Web, NameOfWebServiceFunction, el servidor proxy crea una subrutina
NameOfWebServiceFunctionAsync, un evento NameOfWebServiceFunctionCompleted y una clase
NameOfWebServiceFunctionCompletedEventArgs. En este ejemplo se muestra cómo utilizar los miembros asincrónicos para
tener acceso a la función getTemp del servicio Web DemoTemperatureService.
Nota
Este código no funciona en aplicaciones Web, porque ASP.NET no admite el objeto My.WebServices.

Para llamar asincrónicamente a un servicio Web


1. Haga referencia al servicio Web DemoTemperatureService de http://www.xmethods.net. La dirección es

http://www.xmethods.net/sd/2001/DemoTemperatureService.wsdl

Para obtener más información, vea Cómo: Obtener acceso a un servicio Web XML en código administrado.
2. Agregue un controlador de eventos para el evento getTempCompleted:

Private Sub getTempCompletedHandler(ByVal sender As Object, _


ByVal e As net.xmethods.www.getTempCompletedEventArgs)

MsgBox("Temperature: " & e.Result)


End Sub

Nota
No puede utilizar la instrucción Handles para asociar un controlador de eventos a los eventos del objeto My.WebServ
ices.

3. Agregue un campo para efectuar el seguimiento si el controlador de eventos se ha agregado al evento


getTempCompleted:

Private handlerAttached As Boolean = False

4. Agregue un método para agregar el controlador de eventos al evento getTempCompleted, si es necesario, y para llamar al
método getTempAsynch:

Sub CallGetTempAsync(ByVal zipCode As Integer)


If Not handlerAttached Then
AddHandler _
My.WebServices.TemperatureService.getTempCompleted, _
AddressOf Me.TS_getTempCompleted
handlerAttached = True
End If
My.WebServices.TemperatureService.getTempAsync(zipCode)
End Sub

Para llamar al método Web getTemp de forma asincrónica, llame al método CallGetTempAsync. Cuando el método Web
finaliza, el valor devuelto se pasa al controlador de eventos getTempCompletedHandler.

Vea también
Tareas
Cómo: Obtener acceso a un servicio Web XML en código administrado
Referencia
My.WebServices (Objeto)
Conceptos
Acceso a los servicios Web de la aplicación
Conceptos del lenguaje Visual Basic

Acceso a los recursos de la aplicación


Esta sección contiene páginas de Ayuda dedicadas al objeto My.Resources y las tareas que se pueden realizar utilizando el
objeto My.Resources.
Las propiedades del objeto My.Resources proporcionan acceso de sólo lectura a los recursos de su aplicación.
Tareas
La tabla siguiente incluye ejemplos que muestran cómo tener acceso a los recursos de una aplicación.
Para Vea
Recuperar un recurso de sonido Cómo: Recuperar recursos de sonido en Visual Basic

Recuperar un recurso de icono Cómo: Recuperar recursos de icono en Visual Basic

Recuperar un recurso de imagen Cómo: Recuperar recursos de imagen en Visual Basic

Recuperar un recurso de cadena Cómo: Recuperar recursos de cadena en Visual Basic

Recuperar un recurso adaptado a otro idioma Cómo: Recuperar recursos localizados en Visual Basic

Vea también
Referencia
My.Resources (Objeto)
Otros recursos
Administrar los recursos de la aplicación
Conceptos del lenguaje Visual Basic

Cómo: Recuperar recursos de sonido en Visual Basic


Puede recuperar los recursos de sonido de una aplicación obteniendo acceso a la propiedad del recurso en el objeto
My.Resources.
El objeto My.Resources expone cada recurso como una propiedad de sólo lectura. El nombre de propiedad es igual que el
nombre del recurso y el tipo de propiedad viene determinado por la clasificación del recurso. Para obtener más información,
vea My.Resources (Objeto).
Ejemplo
Este ejemplo utiliza el método My.Computer.Audio.Play para reproducir el sonido almacenado como un recurso de sonido
denominado Form1Greeting en el archivo de recursos de la aplicación.
VB
Sub PlayFormGreeting()
My.Computer.Audio.Play(My.Resources.Form1Greeting, _
AudioPlayMode.Background)
End Sub

Para que funcione este ejemplo, su aplicación debe tener un recurso de sonido denominado Form1Greeting en el archivo de
recursos de la aplicación. Para obtener más información, vea Cómo: Agregar o quitar recursos.
El método My.Computer.Audio.Play está disponible sólo para las aplicaciones de Windows Forms. Para obtener más
información, vea My.Computer.Audio.Play (Método).
Vea también
Tareas
Cómo: Recuperar recursos de cadena en Visual Basic
Cómo: Recuperar recursos de imagen en Visual Basic
Cómo: Recuperar recursos de icono en Visual Basic
Cómo: Recuperar recursos localizados en Visual Basic
Referencia
My.Resources (Objeto)
My.Computer.Audio.Play (Método)
Otros recursos
Administrar los recursos de la aplicación
Conceptos del lenguaje Visual Basic

Cómo: Recuperar recursos de icono en Visual Basic


Puede recuperar los recursos de iconos de una aplicación obteniendo acceso a la propiedad del recurso en el objeto
My.Resources.
El objeto My.Resources expone cada recurso como una propiedad de sólo lectura. El nombre de propiedad es igual que el
nombre del recurso y el tipo de propiedad viene determinado por la clasificación del recurso. Para obtener más información,
vea My.Resources (Objeto).
Ejemplo
Este ejemplo establece el icono del formulario en el icono denominado Form1Icon en el archivo de recursos de la aplicación
almacenada.
VB
Sub SetFormIcon()
Me.Icon = My.Resources.Form1Icon
End Sub

Para que funcione este ejemplo, su aplicación debe tener un icono denominado Form1Icon en el archivo de recursos de la
aplicación. Para obtener más información, vea Cómo: Agregar o quitar recursos.
Vea también
Tareas
Cómo: Recuperar recursos de cadena en Visual Basic
Cómo: Recuperar recursos de imagen en Visual Basic
Cómo: Recuperar recursos de sonido en Visual Basic
Cómo: Recuperar recursos localizados en Visual Basic
Referencia
My.Resources (Objeto)
Otros recursos
Administrar los recursos de la aplicación
Conceptos del lenguaje Visual Basic

Cómo: Recuperar recursos de imagen en Visual Basic


Puede recuperar los recursos de imagen de una aplicación obteniendo acceso a la propiedad del recurso en el objeto
My.Resources.
El objeto My.Resources expone cada recurso como una propiedad de sólo lectura. El nombre de propiedad es igual que el
nombre del recurso y el tipo de propiedad viene determinado por la clasificación del recurso. Para obtener más información,
vea My.Resources (Objeto).
Ejemplo
Este ejemplo establece la imagen de fondo del formulario en el recurso de imagen denominado Form1Background, que está
incluido en el archivo de recursos de la aplicación.
VB
Sub SetFormBackgroundImage()
Me.BackgroundImage = My.Resources.Form1Background
End Sub

Para que funcione este ejemplo, su aplicación debe tener un recurso de imagen denominado Form1Background en el archivo de
recursos de la aplicación. Para obtener más información, vea Cómo: Agregar o quitar recursos.
Vea también
Tareas
Cómo: Recuperar recursos de cadena en Visual Basic
Cómo: Recuperar recursos de icono en Visual Basic
Cómo: Recuperar recursos de sonido en Visual Basic
Cómo: Recuperar recursos localizados en Visual Basic
Referencia
My.Resources (Objeto)
Otros recursos
Administrar los recursos de la aplicación
Conceptos del lenguaje Visual Basic

Cómo: Recuperar recursos de cadena en Visual Basic


Puede recuperar los recursos de cadena de una aplicación teniendo acceso a la propiedad del recurso en el objeto
My.Resources.
El objeto My.Resources expone cada recurso como una propiedad de sólo lectura. El nombre de propiedad es igual al nombre
del recurso y el tipo de propiedad viene determinado por la clasificación del recurso. Para obtener más información, vea
My.Resources (Objeto).
Ejemplo
En este ejemplo se establece el título del formulario en el recurso de cadena denominado Form1Title del archivo de recursos
de la aplicación.
VB
Sub SetFormTitle()
Me.Text = My.Resources.Form1Title
End Sub

Para que este ejemplo funcione, la aplicación debe tener una cadena denominada Form1Title en el archivo de recursos de la
aplicación. Para obtener más información, vea Cómo: Agregar o quitar recursos.
Vea también
Tareas
Cómo: Recuperar recursos de imagen en Visual Basic
Cómo: Recuperar recursos de icono en Visual Basic
Cómo: Recuperar recursos de sonido en Visual Basic
Cómo: Recuperar recursos localizados en Visual Basic
Referencia
My.Resources (Objeto)
Otros recursos
Administrar los recursos de la aplicación
Conceptos del lenguaje Visual Basic

Cómo: Recuperar recursos localizados en Visual Basic


El objeto My.Resources proporciona los recursos localizados de la aplicación (si están disponibles) basándose en la
configuración de la referencia cultural del equipo donde se ejecuta la aplicación. Puede reemplazar la configuración de
referencia cultural del equipo si establece My.Application.UICulture (Propiedad).
El motor en tiempo de ejecución identifica un recurso localizado por su firma de referencia cultural o por su nombre. El archivo
de recursos predeterminado del proyecto, Resources.resx, determina las propiedades que muestra el objeto My.Resources.
Para proporcionar recursos localizados, debe:
Copiar y cambiar el nombre del archivo de recursos a Resources.CultureSignature.resx
Adaptar las cadenas y cualquier archivo a los que haga referencia el archivo de recursos
Agregar el archivo de recursos localizado al proyecto
El objeto My.Resources expone cada recurso como una propiedad de sólo lectura. El nombre de propiedad es igual al nombre
del recurso y el tipo de propiedad viene determinado por la clasificación del recurso. Para obtener más información, vea
My.Resources (Objeto) y Recursos en aplicaciones.
Cada referencia cultural dispone de un nombre único, que es una combinación de un nombre de referencia cultural de dos
letras en minúscula asociado con un idioma y, si es preciso, un nombre de subreferencia cultural de dos letras en mayúscula
asociado con un país o una región. El nombre de la subreferencia cultural va precedido del nombre de la referencia cultural,
separados ambos nombres por un guión (-). Los ejemplos incluyen ja-JP para el japonés de Japón, en-US para el inglés de
EE.UU. y de-DE para el alemán de Alemania (a diferencia de de-AT para el alemán de Austria). Para obtener más información
acerca de los nombres de referencias culturales, vea CultureInfo.
Ejemplo
Este ejemplo recupera la versión de referencia cultural francesa del recurso de cadenas de la aplicación denominado Message.
Para cambiar la referencia cultural que utiliza el objeto My.Resources, este ejemplo utiliza
My.Application.ChangeUICulture (Método).
VB
Sub ShowLocalizedMessage()
Dim culture As String = My.Application.UICulture.Name
My.Application.ChangeUICulture("fr-FR")
MsgBox(My.Resources.Message)
My.Application.ChangeUICulture(culture)
End Sub

Para que este ejemplo funcione, la aplicación debe incluir una cadena de nombre Message en el archivo de recursos de la
aplicación y ésta debe disponer de la versión de referencia cultural francesa de dicho archivos de recursos, Resources.fr-
FR.resx. Para obtener más información, vea Cómo: Agregar o quitar recursos.
Si la aplicación no dispone de la versión de referencia cultural francesa versión del archivo de recursos, el objeto My.Resource
recupera el recurso del archivo de recursos de referencia cultural predeterminado.
Vea también
Tareas
Cómo: Recuperar recursos de cadena en Visual Basic
Referencia
My.Resources (Objeto)
Otros recursos
Administrar los recursos de la aplicación
Conceptos del lenguaje Visual Basic

Acceso a la configuración de la aplicación.


Esta sección contiene temas que describen el objeto My.Settings y las tareas que permite realizar.
My.Settings
Las propiedades del objeto My.Settings proporcionan acceso a la configuración de la aplicación. Para agregar o quitar valores
de configuración, utilice el Diseñador de proyectos. Para obtener más información, vea
Cómo: Agregar o quitar valores de configuración de la aplicación.
Los métodos del objeto My.Settings permiten guardar la configuración del usuario actual o revertir la configuración del
usuario a los últimos valores guardados.
Tareas
En la tabla siguiente se enumeran ejemplos que muestran cómo tener acceso a los formularios de una aplicación.
Para Vea
Actualizar el valor de una configurac Cómo: Cambiar la configuración del usuario en Visual Basic
ión del usuario

Mostrar la configuración de la aplica Cómo: Crear cuadrículas de propiedades para la configuración del usuario en Visual Basic
ción y del usuario en una cuadrícula
de propiedad

Guardar valores de configuración de Cómo: Conservar la configuración del usuario en Visual Basic
usuario actualizados

Determinar los valores de configura Cómo: Leer la configuración de la aplicación en Visual Basic
ción del usuario

Vea también
Referencia
My.Settings (Objeto)
Otros recursos
Administrar la configuración de la aplicación
Conceptos del lenguaje Visual Basic

Cómo: Crear cuadrículas de propiedades para la configuración


del usuario en Visual Basic
Puede crear una cuadrícula de propiedades para la configuración del usuario rellenando un control PropertyGrid con las
propiedades de configuración de usuario del objeto My.Settings.
Nota
Para que este ejemplo funcione, su aplicación debe tener definida la configuración del usuario. Para obtener información sob
re cómo agregar configuraciones de usuario, vea Cómo: Agregar o quitar valores de configuración de la aplicación.

El objeto My.Settings expone cada configuración como una propiedad. El nombre de propiedad es igual que el nombre de la
configuración y el tipo de propiedad es igual que el tipo de configuración. El Ámbito de la configuración determina si la
propiedad es de sólo lectura; la propiedad de una configuración de ámbito Aplicación es de sólo lectura, en tanto que la
propiedad de una configuración de ámbito Usuario es de lectura y escritura. Para obtener más información, vea
My.Settings (Objeto).
Nota
No puede cambiar ni guardar en tiempo de ejecución los valores de configuración de ámbito de aplicación. La configuración
de ámbito de aplicación sólo se puede cambiar al crear la aplicación (mediante el Diseñador de proyectos) o editando el ar
chivo de configuración de la aplicación. Para obtener más información, vea Administrar la configuración de la aplicación.

Este ejemplo utiliza un control PropertyGrid para tener acceso a las propiedades de configuración del usuario del objeto
My.Settings. De manera predeterminada, PropertyGrid muestra todas las propiedades del objeto My.Settings. Sin embargo,
las propiedades de configuración del usuario tienen el atributo UserScopedSettingAttribute. Este ejemplo establece la
propiedad BrowsableAttributes de PropertyGrid en UserScopedSettingAttribute para mostrar sólo las propiedades de
configuración del usuario.
Para agregar una cuadrícula de propiedades de configuración de usuario
1. Agregue el control PropertyGrid del Cuadro de herramientas a la superficie de diseño de la aplicación, que aquí será
Form1.

El nombre predeterminado del control de cuadrícula de propiedades es PropertyGrid1.


2. Haga doble clic en la superficie de diseño de Form1 para abrir el código del controlador de eventos de carga del
formulario.
3. Establezca el objeto My.Settings como el objeto seleccionado para la cuadrícula de propiedades.
VB
PropertyGrid1.SelectedObject = My.Settings

4. Configure la cuadrícula de propiedades para mostrar sólo la configuración del usuario.


VB
' Attribute for the user-scope settings.
Dim userAttr As New System.Configuration.UserScopedSettingAttribute
Dim attrs As New System.ComponentModel.AttributeCollection(userAttr)
PropertyGrid1.BrowsableAttributes = attrs

Nota
Para mostrar sólo la configuración de ámbito de aplicación, utilice el atributo ApplicationScopedSettingAttribute en lug
ar de UserScopedSettingAttribute.

Programación eficaz
La aplicación guarda la configuración del usuario cuando se cierra. Para guardar inmediatamente la configuración, llame al
método My.Settings.Save. Para obtener más información, vea Cómo: Conservar la configuración del usuario en Visual Basic.
Vea también
Tareas
Cómo: Leer la configuración de la aplicación en Visual Basic
Cómo: Cambiar la configuración del usuario en Visual Basic
Cómo: Conservar la configuración del usuario en Visual Basic
Cómo: Agregar o quitar valores de configuración de la aplicación
Referencia
My.Settings (Objeto)
Otros recursos
Administrar la configuración de la aplicación
Conceptos del lenguaje Visual Basic

Cómo: Conservar la configuración del usuario en Visual Basic


Puede utilizar el método My.Settings.Save para conservar los cambios efectuados en la configuración del usuario.
Normalmente, las aplicaciones se diseñan para que conserven los cambios realizados en la configuración del usuario cuando
se cierra la aplicación. Esto es así porque, dependiendo de varios factores, se puede tardar varios segundos en guardar la
configuración.
Para obtener más información, vea My.Settings (Objeto).
Nota
Aunque puede cambiar y guardar los valores de la configuración de ámbito de usuario en tiempo de ejecución, esta configur
ación es de sólo lectura y no se puede cambiar mediante programación. Puede cambiar la configuración de ámbito de la apli
cación al crearla, mediante el Diseñador de proyectos, o editando el archivo de configuración de la aplicación. Para obtener
más información, vea Administrar la configuración de la aplicación.

Ejemplo
Este ejemplo cambia el valor de configuración de usuario LastChanged y guarda ese cambio llamando al método
My.Settings.Save.
VB
Sub ChangeAndPersistSettings()
My.Settings.LastChanged = Today
My.Settings.Save()
End Sub

Para que funcione este ejemplo, su aplicación debe tener un ajuste de usuario LastChanged, de tipo Date. Para obtener más
información, vea Cómo: Agregar o quitar valores de configuración de la aplicación.
Vea también
Tareas
Cómo: Leer la configuración de la aplicación en Visual Basic
Cómo: Cambiar la configuración del usuario en Visual Basic
Cómo: Crear cuadrículas de propiedades para la configuración del usuario en Visual Basic
Cómo: Agregar o quitar valores de configuración de la aplicación
Referencia
My.Settings (Objeto)
Otros recursos
Administrar la configuración de la aplicación
Conceptos del lenguaje Visual Basic

Cómo: Cambiar la configuración del usuario en Visual Basic


Puede cambiar una configuración de usuario asignando un nuevo valor a la propiedad de configuración en el objeto
My.Settings.
El objeto My.Settings expone cada uno de los valores de configuración como una propiedad. El nombre de propiedad es igual
que el nombre del valor de configuración y el tipo de la propiedad es igual que el tipo del valor. El Ámbito del valor determina
si la propiedad es de sólo lectura: la propiedad de un ajuste de ámbito de Aplicación es de sólo lectura, mientras que la
propiedad de un ajuste de ámbito de Usuario es de lectura-escritura. Para obtener más información, vea My.Settings (Objeto).
Nota
Aunque puede cambiar y guardar los valores de la configuración de ámbito de usuario en tiempo de ejecución, esta configur
ación es de sólo lectura y no se puede cambiar mediante programación. Puede cambiar la configuración de ámbito de la apli
cación al crearla, mediante el Diseñador de proyectos, o editando el archivo de configuración de la aplicación. Para obtener
más información, vea Administrar la configuración de la aplicación.

Ejemplo
Este ejemplo cambia el valor de usuario Nickname.
VB
Sub ChangeNickname(ByVal newNickname As String)
My.Settings.Nickname = newNickname
End Sub

Para que funcione este ejemplo, su aplicación debe tener un ajuste de usuario Nickname, de tipo String. Para obtener más
información, vea Cómo: Agregar o quitar valores de configuración de la aplicación.
La aplicación guarda la configuración del usuario cuando se cierra la aplicación. Para guardar inmediatamente la configuración,
llame al método My.Settings.Save. Para obtener más información, vea
Cómo: Conservar la configuración del usuario en Visual Basic.
Vea también
Tareas
Cómo: Leer la configuración de la aplicación en Visual Basic
Cómo: Conservar la configuración del usuario en Visual Basic
Cómo: Crear cuadrículas de propiedades para la configuración del usuario en Visual Basic
Cómo: Agregar o quitar valores de configuración de la aplicación
Referencia
My.Settings (Objeto)
Otros recursos
Administrar la configuración de la aplicación
Conceptos del lenguaje Visual Basic

Cómo: Leer la configuración de la aplicación en Visual Basic


Puede leer una configuración del usuario teniendo acceso a la propiedad de la configuración en el objeto My.Settings.
El objeto My.Settings expone cada configuración como una propiedad. El nombre de propiedad es igual que el nombre de la
configuración y el tipo de propiedad es igual que el tipo de configuración. El Ámbito de configuración indica si la propiedad es
de sólo lectura; la propiedad de una configuración de ámbito Aplicación es de sólo lectura, mientras que la propiedad de una
configuración de ámbito Usuario es de lectura y escritura. Para obtener más información, vea My.Settings (Objeto).
Ejemplo
En este ejemplo se muestra el valor de la configuración Nickname.
VB
Sub ShowNickname()
MsgBox("Nickname is " & My.Settings.Nickname)
End Sub

Para que este ejemplo funcione, la aplicación debe tener una configuración Nickname de tipo String. Para obtener más
información, vea Cómo: Agregar o quitar valores de configuración de la aplicación.
Vea también
Tareas
Cómo: Cambiar la configuración del usuario en Visual Basic
Cómo: Conservar la configuración del usuario en Visual Basic
Cómo: Crear cuadrículas de propiedades para la configuración del usuario en Visual Basic
Cómo: Agregar o quitar valores de configuración de la aplicación
Referencia
My.Settings (Objeto)
Otros recursos
Administrar la configuración de la aplicación
Conceptos del lenguaje Visual Basic

Procesar unidades, directorios y archivos


Puede utilizar Visual Basic para procesar unidades, carpetas y archivos con el objeto My.Computer.FileSystem, que
proporciona mejor rendimiento y es más sencillo de utilizar que métodos tradicionales como las funciones FileOpen y Write
(que siguen estando disponibles). Las siguientes secciones describen los métodos con detalle.
En esta sección
Acceso a archivos con Visual Basic
Explica cómo utilizar el objeto My.Computer.FileSystem para trabajar con archivos, unidades y carpetas.
Tutorial: Manipular archivos con métodos de .NET Framework
Muestra cómo utilizar .NET Framework para manipular archivos y carpetas.
Tutorial: Manipular archivos y directorios en Visual Basic
Muestra cómo utilizar el objeto My.Computer.FileSystem para manipular archivos y carpetas.
Secciones relacionadas
Convenciones de código y estructura de programas
Proporciona instrucciones para la estructura física y la apariencia de programas.
My.Computer.FileSystem (Objeto)
Hace referencia a la documentación del objeto My.Computer.FileSystem y sus miembros.
E/S de archivos en .NET Framework con Visual Basic
Proporciona información general de la E/S de archivos con .NET Framework.
Conceptos del lenguaje Visual Basic

Acceso a archivos con Visual Basic


El objeto My.Computer.FileSystem proporciona herramientas para trabajar con archivos y carpetas. Sus propiedades,
métodos y eventos permiten crear, copiar, mover, investigar y eliminar archivos y carpetas. My.Computer.FileSystem ofrece
un mayor rendimiento que las funciones heredadas (FileOpen, FileClose, Input, InputString, LineInput, etc.)
proporcionadas por Visual Basic para ofrecer compatibilidad con versiones anteriores.
En esta sección
Leer archivos en Visual Basic
Muestra temas que tratan sobre el uso del objeto My.Computer.FileSystem para leer archivos
Escribir en archivos en Visual Basic
Muestra temas que tratan sobre el uso del objeto My.Computer.FileSystem para escribir en archivos
Crear, eliminar y mover archivos y directorios en Visual Basic
Muestra temas que tratan sobre el uso del objeto My.Computer.FileSystem para crear, copiar, eliminar, y mover archivos y
carpetas.
Propiedades de archivos, directorios y unidades en Visual Basic
Muestra temas que tratan sobre el uso del objeto My.Computer.FileSystem para determinar propiedades de archivos,
carpetas y unidades de red.
Analizar archivos de texto con el objeto TextFieldParser
Trata sobre el uso de TextFieldReader para analizar archivos de texto como los registros.
Codificaciones de archivos
Describe codificaciones de archivos y su uso.
Tutorial: Manipular archivos y directorios en Visual Basic
Muestra cómo crear una utilidad que crea informes sobre archivos y carpetas.
Solución de problemas: Leer y escribir en archivos de texto
Muestra problemas frecuentes que se encuentran al leer y escribir en archivos de texto, y sugiere soluciones para cada uno
de ellos.
Conceptos del lenguaje Visual Basic

Leer archivos en Visual Basic


En esta sección se muestran tareas asociadas con la lectura en archivos.
En esta sección
Cómo: Leer archivos de texto en Visual Basic
Explica cómo leer de un archivo de texto.
Cómo: Leer archivos de texto delimitado por comas en Visual Basic
Explica cómo leer de un archivo de texto delimitado.
Cómo: Leer archivos de texto de ancho fijo en Visual Basic
Explica cómo leer de un archivo de texto de ancho fijo.
Cómo: Leer archivos de texto con varios formatos en Visual Basic
Explica cómo leer de un archivo de texto con varios formatos.
Cómo: Leer archivos binarios en Visual Basic
Explica cómo leer de un archivo binario.
Cómo: Leer archivos de texto existentes en Mis documentos (Visual Basic)
Explica cómo leer de un archivo de texto del directorio Mis documentos.
Cómo: Leer texto de archivos con Streamreader (Visual Basic)
Explica cómo utilizar StreamReader para leer en un archivo.
Referencia
My.Computer.FileSystem (Objeto)
Describe el objeto My.Computer.FileSystem y sus miembros.
My.Computer.FileSystem.ReadAllText (Método)
Describe el método ReadAllText.
My.Computer.FileSystem.ReadAllBytes (Método)
Describe el método ReadAllBytes.
My.Computer.FileSystem.OpenTextFieldParser (Método)
Describe el método OpenTextFieldParser.
My.Computer.FileSystem.OpenTextFileReader (Método)
Describe el método OpenTextFileReader.
Secciones relacionadas
Cómo: Leer el Portapapeles en Visual Basic
Muestra cómo leer datos del Portapapeles.
Analizar archivos de texto con el objeto TextFieldParser
Proporciona información general sobre la lectura de archivos de texto con el objeto TextFieldParser.
Tutorial: Manipular archivos y directorios en Visual Basic
Explica cómo utilizar la característica My con archivos y directorios.
Tutorial: Manipular archivos con métodos de .NET Framework
Explica cómo utilizar métodos de .NET Framework con archivos y directorios.
Conceptos del lenguaje Visual Basic

Cómo: Leer archivos de texto en Visual Basic


El método ReadAllText del objeto My.Computer.FileSystem permite leer de un archivo de texto. Se puede especificar la
codificación del archivo si el contenido del mismo utiliza una codificación como ASCII o UTF-8.
Si está leyendo de un archivo que incluye caracteres extendidos, deberá especificar la codificación del archivo.
Para leer de un archivo de texto
Utilice el método ReadAllText del objeto My.Computer.FileSystem para leer el contenido de un archivo de texto en
una cadena, proporcionando la ruta de acceso. El ejemplo siguiente lee el contenido del archivo test.txt, lo coloca en una
cadena y, a continuación, lo muestra en un cuadro de mensaje.
VB
Dim fileReader As String
fileReader = My.Computer.FileSystem.ReadAllText("C:\test.txt")
MsgBox(fileReader)

Para leer de un archivo de texto que está codificado


Utilice el método ReadAllText del objeto My.Computer.FileSytem para leer el contenido de un archivo de texto en una
cadena, proporcionando la ruta de acceso y el tipo de codificación del archivo. El ejemplo siguiente lee el contenido del
archivo UTF32 test.txt, lo coloca en una cadena y, a continuación, lo muestra en un cuadro de mensaje.
VB
Dim fileReader As String
fileReader = My.Computer.FileSystem.ReadAllText("C:\test.txt", _
System.Text.Encoding.UTF32)
MsgBox(fileReader)

Programación eficaz
Las condiciones siguientes pueden producir una excepción:
La ruta de acceso no es válida por una de las razones siguientes: es una cadena de longitud cero, sólo contiene un
espacio en blanco, contiene caracteres no válidos o es una ruta de acceso de dispositivo (ArgumentException).
La ruta de acceso no es válida porque es Nothing (ArgumentNullException).
El archivo no existe (FileNotFoundException).
El archivo está en uso por otro proceso o hay un error de E/S (IOException).
La ruta supera la longitud máxima definida por el sistema (PathTooLongException).
Un nombre de archivo o de directorio de la ruta de acceso contiene un signo de dos puntos (:) o tiene un formato no
válido (NotSupportedException).
No hay suficiente memoria para escribir la cadena en el búfer (OutOfMemoryException).
El usuario no tiene los permisos necesarios para ver la ruta de acceso (SecurityException).
No tome ninguna decisión sobre el contenido del archivo basándose en su nombre. Por ejemplo, es posible que el archivo
Form1.vb no sea un archivo de código fuente Visual Basic.
Compruebe todas las entradas antes de utilizar los datos en la aplicación. Puede que el contenido del archivo no sea el
esperado y que los métodos que leen el archivo produzcan un error.
Vea también
Tareas
Cómo: Leer archivos de texto delimitado por comas en Visual Basic
Cómo: Leer archivos de texto de ancho fijo en Visual Basic
Cómo: Leer archivos de texto con varios formatos en Visual Basic
Solución de problemas: Leer y escribir en archivos de texto
Tutorial: Manipular archivos y directorios en Visual Basic
Referencia
My.Computer.FileSystem (Objeto)
My.Computer.FileSystem.ReadAllText (Método)
Conceptos
Codificaciones de archivos
Otros recursos
Leer archivos en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Leer archivos de texto delimitado por comas en Visual


Basic
El objeto TextFieldParser proporciona un método para analizar de forma sencilla y eficaz archivos de texto estructurados,
como registros. La propiedad TextFieldType define si se trata de un archivo delimitado o uno con campos de ancho fijo de
texto.
Para analizar un archivo de texto delimitado por comas
1. Cree un nuevo objeto TextFieldParser. El código siguiente crea el objeto TextFieldParser denominado MyReader y abre
el archivo test.txt.
VB
Using MyReader As New _
Microsoft.VisualBasic.FileIO.TextFieldParser _
("C:\TestFolder\test.txt")

2. Defina el tipo de TextField y el delimitador. El código siguiente define la propiedad TextFieldType como Delimited y el
delimitador como ",".
VB
MyReader.TextFieldType = FileIO.FieldType.Delimited
MyReader.SetDelimiters(",")

3. Recorra los campos del archivo. Si alguna línea está dañada, cree un informe de error y continúe el análisis. El código
siguiente recorre el archivo para mostrar cada campo a la vez e indica los campos con formato incorrecto.
VB

Dim currentRow As String()


While Not MyReader.EndOfData
Try
currentRow = MyReader.ReadFields()
Dim currentField As String
For Each currentField In currentRow
MsgBox(currentField)
Next
Catch ex As _
Microsoft.VisualBasic.FileIO.MalformedLineException
MsgBox("Line " & ex.Message & _
"is not valid and will be skipped.")
End Try

4. Cierre los bloques While y Using con End While y End Using.
VB
End While
End Using

Ejemplo
En este ejemplo se lee el archivo test.txt.
VB
Using MyReader As New _
Microsoft.VisualBasic.FileIO.TextFieldParser("C:\testfile.txt")
MyReader.TextFieldType = FileIO.FieldType.Delimited
MyReader.SetDelimiters(",")
Dim currentRow As String()
While Not MyReader.EndOfData
Try
currentRow = MyReader.ReadFields()
Dim currentField As String
For Each currentField In currentRow
MsgBox(currentField)
Next
Catch ex As Microsoft.VisualBasic.FileIO.MalformedLineException
MsgBox("Line " & ex.Message & _
"is not valid and will be skipped.")
End Try
End While
End Using

Programación eficaz
Las condiciones siguientes pueden producir una excepción:
No se puede analizar una fila con el formato especificado (MalformedLineException). El mensaje de excepción especifica
la línea que produce la excepción y se asigna TextFieldParser.ErrorLine (Propiedad) al texto contenido en la línea.
El archivo especificado no existe (FileNotFoundException).
Una situación de confianza parcial en la que el usuario no tiene los permisos necesarios para tener acceso al archivo.
(SecurityException).
La ruta de acceso es demasiado larga (PathTooLongException).
El usuario no tiene permisos suficientes para el acceso al archivo (UnauthorizedAccessException).

Vea también
Tareas
Cómo: Leer archivos de texto de ancho fijo en Visual Basic
Cómo: Leer archivos de texto con varios formatos en Visual Basic
Tutorial: Manipular archivos y directorios en Visual Basic
Solución de problemas: Leer y escribir en archivos de texto
Solución de problemas de excepciones: Microsoft.VisualBasic.FileIO.TextFieldParser.MalformedLineException
Referencia
TextFieldParser (Objeto)
Conceptos
Analizar archivos de texto con el objeto TextFieldParser
Conceptos del lenguaje Visual Basic

Cómo: Leer archivos de texto de ancho fijo en Visual Basic


El objeto TextFieldParser proporciona un método para analizar de forma sencilla y eficaz archivos de texto estructurados,
como registros.
La propiedad TextFieldType define si se trata de un archivo delimitado o uno con campos de ancho fijo de texto. Para
especificar un campo de ancho variable en un archivo de ancho fijo, defina el ancho de campo como -1.
Para analizar un archivo de texto de ancho fijo
1. Cree un nuevo objeto TextFieldParser. El código siguiente crea el objeto TextFieldParser denominado Reader y abre el
archivo test.log.
VB
Using Reader As New _
Microsoft.VisualBasic.FileIO.TextFieldParser _
("C:\TestFolder\test.log")

2. Defina la propiedad TextFieldType como FixedWidth, definiendo el ancho y el formato. El código siguiente define las
columnas de texto; la primera tiene un ancho de 5 caracteres, la segunda de 10, la tercera de 11 y la cuarta es de ancho
variable.
VB
Reader.TextFieldType = _
Microsoft.VisualBasic.FileIO.FieldType.FixedWidth
Reader.SetFieldWidths(5, 10, 11, -1)

3. Recorra los campos del archivo. Si alguna línea está dañada, cree un informe de error y continúe el análisis.
VB
Dim currentRow As String()
While Not Reader.EndOfData
Try
currentRow = Reader.ReadFields()
Dim currentField As String
For Each currentField In currentRow
MsgBox(currentField)
Next
Catch ex As _
Microsoft.VisualBasic.FileIO.MalformedLineException
MsgBox("Line " & ex.Message & _
"is not valid and will be skipped.")
End Try

4. Cierre los bloques While y Using con End While y End Using.
VB
End While
End Using

Ejemplo
En este ejemplo se lee el archivo test.log.
VB
Using Reader As New _
Microsoft.VisualBasic.FileIO.TextFieldParser("C:\TestFolder\test.log")
Reader.TextFieldType = _
Microsoft.VisualBasic.FileIO.FieldType.FixedWidth
Reader.SetFieldWidths(5, 10, 11, -1)
Dim currentRow As String()
While Not Reader.EndOfData
Try
currentRow = Reader.ReadFields()
Dim currentField As String
For Each currentField In currentRow
MsgBox(currentField)
Next
Catch ex As Microsoft.VisualBasic.FileIO.MalformedLineException
MsgBox("Line " & ex.Message & _
"is not valid and will be skipped.")
End Try
End While
End Using

Programación eficaz
Las condiciones siguientes pueden producir una excepción:
No se puede analizar una fila con el formato especificado (MalformedLineException). El mensaje de excepción especifica
la línea que produce la excepción y se asigna TextFieldParser.ErrorLine (Propiedad) al texto contenido en la línea.
El archivo especificado no existe (FileNotFoundException).
Una situación de confianza parcial en la que el usuario no tiene los permisos necesarios para tener acceso al archivo.
(SecurityException).
La ruta de acceso es demasiado larga (PathTooLongException).
El usuario no tiene permisos suficientes para el acceso al archivo (UnauthorizedAccessException).

Vea también
Tareas
Cómo: Leer archivos de texto delimitado por comas en Visual Basic
Cómo: Leer archivos de texto con varios formatos en Visual Basic
Tutorial: Manipular archivos y directorios en Visual Basic
Solución de problemas: Leer y escribir en archivos de texto
Solución de problemas de excepciones: Microsoft.VisualBasic.FileIO.TextFieldParser.MalformedLineException
Referencia
TextFieldParser (Objeto)
Conceptos
Analizar archivos de texto con el objeto TextFieldParser
Conceptos del lenguaje Visual Basic

Cómo: Leer archivos de texto con varios formatos en Visual


Basic
El objeto TextFieldParser proporciona una manera de analizar con facilidad y eficiencia archivos de texto estructurados, como
por ejemplo los registros. Puede procesar un archivo con varios formatos utilizando el método PeekChars para determinar el
formato de cada línea a medida que se va analizando el archivo.
Para analizar un archivo de texto con varios formatos
1. Defina el formato esperado y el formato utilizado cuando se cree un informe un error.
VB
Dim StdFormat As Integer()= {5,10,11,-1}
Dim ErrorFormat As Integer() = {5,5,-1}

2. Cree un nuevo objeto TextFieldParser, definiendo su ancho y su formato.


VB
Using MyReader As New _
Microsoft.VisualBasic.FileIO.TextFieldParser("C:\testfile.txt")
MyReader.TextFieldType = FileIO.FieldType.FixedWidth

3. Recorra en iteración las filas, probando el formato antes de leerlas.


VB
Dim CurrentRow As String()
While Not MyReader.EndOfData
Try
Dim RowType As String = MyReader.PeekChars(3)
If String.Compare(RowType, "Err") = 0 Then
' If this line describes an error, the format of
' the row will be different.
MyReader.SetFieldWidths(ErrorFormat)
CurrentRow = MyReader.ReadFields
MyReader.SetFieldWidths(StdFormat)
Else
'Otherwise parse the fields normally
CurrentRow = MyReader.ReadFields
For Each newString As String In CurrentRow
My.Computer.FileSystem.WriteAllText _
("newFile.txt", newString, True)
Next
End If

4. Escriba los errores en la consola.


VB
Catch ex As _
Microsoft.VisualBasic.FileIO.MalformedLineException
MsgBox("Line " & ex.Message & " is invalid.")
End Try
End While
End Using

Ejemplo
Este ejemplo lee del archivo testfile.txt.
VB
Dim StdFormat As Integer() = {5, 10, 11, -1}
Dim ErrorFormat As Integer() = {5, 5, -1}
Using MyReader As New _
Microsoft.VisualBasic.FileIO.TextFieldParser("C:\testfile.txt")
MyReader.TextFieldType = FileIO.FieldType.FixedWidth
MyReader.FieldWidths = StdFormat
Dim CurrentRow As String()
While Not MyReader.EndOfData
Try
Dim RowType As String = MyReader.PeekChars(3)
If String.Compare(RowType, "Err") = 0 Then
' If this line describes an error, the format of the row will be different.
MyReader.SetFieldWidths(ErrorFormat)
CurrentRow = MyReader.ReadFields
MyReader.SetFieldWidths(StdFormat)
Else
' Otherwise parse the fields normally
CurrentRow = MyReader.ReadFields
For Each newString As String In CurrentRow
My.Computer.FileSystem.WriteAllText("newFile.txt", newString, True)
Next
End If
Catch ex As Microsoft.VisualBasic.FileIO.MalformedLineException
MsgBox("Line " & ex.Message & " is invalid. Skipping")
End Try
End While
End Using

Programación eficaz
Las condiciones siguientes pueden producir una excepción:
No se puede analizar una fila utilizando el formato especificado (MalformedLineException). El mensaje de excepción
especifica la línea que produce la excepción, mientras que a la TextFieldParser.ErrorLine (Propiedad) se le asigna el texto
contenido en la línea.
El archivo especificado no existe (FileNotFoundException).
Una situación de confianza parcial en la que el usuario no tiene los permisos necesarios para tener acceso al archivo.
(SecurityException).
La ruta de acceso es demasiado larga (PathTooLongException).
El usuario no tiene permisos suficientes para tener acceso al archivo (UnauthorizedAccessException).
Vea también
Tareas
Cómo: Leer archivos de texto delimitado por comas en Visual Basic
Cómo: Leer archivos de texto de ancho fijo en Visual Basic
Referencia
TextFieldParser (Objeto)
TextFieldParser.PeekChars (Método)
My.Computer.FileSystem.WriteAllText (Método)
TextFieldParser.EndOfData (Propiedad)
TextFieldParser.TextFieldType (Propiedad)
MalformedLineException
Conceptos
Analizar archivos de texto con el objeto TextFieldParser
Conceptos del lenguaje Visual Basic

Cómo: Leer archivos binarios en Visual Basic


El objeto My.Computer.FileSystem proporciona el método ReadAllBytes para leer archivos binarios.
Para leer un archivo binario
Utilice el método ReadAllBytes, que devuelve el contenido de un archivo como una matriz de bytes. En este ejemplo se
lee el archivo C:/Documents and Settings/selfportrait.jpg
VB
My.Computer.FileSystem.ReadAllBytes _
("C:/Documents and Settings/selfportrait.jpg")

Programación eficaz
Las condiciones siguientes pueden hacer que se produzca una excepción:
La ruta de acceso no es válida por una de las razones siguientes: es una cadena de longitud cero, sólo contiene un
espacio en blanco, contiene caracteres no válidos o es una ruta de acceso de dispositivo (ArgumentException).
La ruta de acceso no es válida porque es Nothing (ArgumentNullException).
El archivo no existe (FileNotFoundException).
El archivo está en uso por otro proceso o hay un error de E/S (IOException).
La ruta de acceso supera la longitud máxima definida por el sistema (PathTooLongException).
Un nombre de archivo o de directorio de la ruta de acceso contiene un signo de dos puntos (:) o tiene un formato no
válido (NotSupportedException).
No hay suficiente memoria para escribir la cadena en el búfer (OutOfMemoryException).
El usuario no tiene los permisos necesarios para ver la ruta de acceso (SecurityException).
No tome ninguna decisión sobre el contenido del archivo basándose en su nombre. Por ejemplo, es posible que el archivo
Form1.vb no sea un archivo de código fuente de Visual Basic.
Compruebe todas las entradas antes de utilizar los datos en la aplicación. Puede que el contenido del archivo no sea el
esperado y que los métodos que leen el archivo produzcan un error.
Vea también
Tareas
Cómo: Leer archivos de texto con varios formatos en Visual Basic
Referencia
My.Computer.FileSystem.ReadAllBytes (Método)
My.Computer.FileSystem.WriteAllBytes (Método)
Otros recursos
Leer archivos en Visual Basic
Almacenar y leer datos en el Portapapeles
Conceptos del lenguaje Visual Basic

Cómo: Leer archivos de texto existentes en Mis documentos


(Visual Basic)
El ejemplo de código siguiente lee el contenido de los archivos de texto de la carpeta Mis documentos y lo escribe en un
único archivo.
Ejemplo
VB
Dim filePaths As System.Collections.ObjectModel.ReadOnlyCollection(Of String)
Dim allText As String
Try
filePaths = My.Computer.FileSystem.GetFiles _
(My.Computer.FileSystem.SpecialDirectories.MyDocuments)
For Each file As String In filePaths
allText = My.Computer.FileSystem.ReadAllText(file)
My.Computer.FileSystem.WriteAllText("bigfile.txt", allText, True)
Next
Catch fileException As Exception
Throw fileException
End Try

Compilar el código
Reemplace "bigfile.txt" con el nombre del archivo en el que desea escribir.
Programación eficaz
Los archivos que se leen deben ser archivos de texto.
Puede utilizar OpenFileDialog (Componente, formularios Windows Forms) y
SaveFileDialog (Componente, formularios Windows Forms) para reducir la probabilidad de errores en tiempo de ejecución
relacionados con los permisos.
No tome ninguna decisión sobre el contenido del archivo basándose en su nombre. Por ejemplo, es posible que el archivo
Form1.vb no sea un archivo de código fuente Visual Basic.
Compruebe todas las entradas antes de utilizar los datos en la aplicación. Puede que el contenido del archivo no sea el
esperado y que los métodos que leen el archivo produzcan un error.
Seguridad
Para leer un archivo, el ensamblado requiere un nivel de privilegios concedido por la clase FileIOPermission. Si realiza una
ejecución en un contexto de confianza parcial, el código podría desencadenar una excepción por falta de privilegios. Para
obtener más información, vea Conceptos básicos sobre la seguridad de acceso a código. El usuario también necesita acceso al
archivo. Para obtener más información, vea Listas de control de acceso (ACL).
Vea también
Referencia
My.Computer.FileSystem.SpecialDirectories (Objeto)
My.Computer.FileSystem.ReadAllText (Método)
My.Computer.FileSystem.WriteAllText (Método)
OpenFileDialog
SaveFileDialog
Conceptos del lenguaje Visual Basic

Cómo: Leer texto de archivos con Streamreader (Visual Basic)


El objeto My.Computer.FileSystem proporciona métodos para abrir un TextReader y un TextWriter. Estos métodos,
OpenTextFileWriter y OpenTextFileReader, son métodos avanzados que no aparecen en IntelliSense a menos que
seleccione la ficha Todas.
Para leer una línea de un archivo con un lector de texto
Utilice el método OpenTextFileReader para abrir el TextReader, especificando el archivo. Este ejemplo abre el archivo
denominado testfile.txt, lee una línea del mismo y la muestra en un cuadro de mensajes.
VB
Dim fileReader As System.IO.StreamReader
fileReader = _
My.Computer.FileSystem.OpenTextFileReader("C:\\testfile.txt")
Dim stringReader As String
stringReader = fileReader.ReadLine()
MsgBox("The first line of the file is " & stringReader)

Programación eficaz
El archivo que se lee debe ser un archivo de texto.
No tome ninguna decisión sobre el contenido del archivo basándose en su nombre. Por ejemplo, es posible que el archivo
Form1.vb no sea un archivo de código fuente de Visual Basic.
Compruebe todas las entradas antes de utilizar los datos en la aplicación. Puede que el contenido del archivo no sea el
esperado y que los métodos que leen el archivo produzcan un error.
Seguridad
Para leer de un archivo, el ensamblado requiere un nivel de privilegios concedido por la clase FileIOPermission. Si realiza una
ejecución en un contexto de confianza parcial, el código podría desencadenar una excepción por falta de privilegios. Para
obtener más información, vea Conceptos básicos sobre la seguridad de acceso a código. El usuario también necesita acceso al
archivo. Para obtener más información, consulte Listas de control de acceso (ACL).
Vea también
Referencia
My.Computer.FileSystem (Objeto)
My.Computer.FileSystem.OpenTextFileWriter (Método)
My.Computer.FileSystem.OpenTextFileReader (Método)
OpenFileDialog
Otros recursos
SaveFileDialog (Componente, formularios Windows Forms)
Leer archivos en Visual Basic
Conceptos del lenguaje Visual Basic

Escribir en archivos en Visual Basic


En esta sección se muestran tareas que implican escribir en archivos.
En esta sección
Cómo: Escribir texto en archivos en Visual Basic
Explica cómo se puede escribir en archivos de texto.
Cómo: Anexar a archivos de texto en Visual Basic
Explica cómo se puede anexar texto a un archivo de texto.
Cómo: Escribir en archivos binarios en Visual Basic
Explica cómo se puede escribir en un archivo binario.
Cómo: Escribir texto en archivos del directorio Mis documentos en Visual Basic
Explica cómo se puede crear un nuevo archivo de texto en el directorio Mis documentos y cómo se puede escribir en él.
Cómo: Escribir texto en archivos con un objeto StreamWriter en Visual Basic
Explica cómo se puede escribir en un archivo con un objeto System.IO.StreamWriter.
Referencia
My.Computer.FileSystem (Objeto)
Describe el objeto My.Computer.FileSystem y sus métodos y propiedades.
My.Computer.FileSystem.OpenTextFileWriter (Método)
Describe el método OpenTextFileWriter.
My.Computer.FileSystem.WriteAllBytes (Método)
Describe el método WriteAllBytes.
My.Computer.FileSystem.WriteAllText (Método)
Describe el método WriteAllText.
Secciones relacionadas
Leer archivos en Visual Basic
Enumera las tareas que implican la lectura de archivos.
Crear, eliminar y mover archivos y directorios en Visual Basic
Enumera tareas que implican la creación, eliminación, desplazamiento y cambio de nombre de archivos y directorios.
Propiedades de archivos, directorios y unidades en Visual Basic
Enumera tareas que implican la determinación de propiedades de archivo, directorio y unidad.
Cómo: Escribir en el Portapapeles en Visual Basic
Muestra cómo escribir datos en el Portapapeles.
Codificaciones de archivos
Proporciona información general sobre las codificaciones de archivo.
Conceptos del lenguaje Visual Basic

Cómo: Escribir texto en archivos en Visual Basic


El My.Computer.FileSystem.WriteAllText (Método) se puede utilizar para escribir el texto en archivos. Si el archivo especificado
no existe, se crea.
Procedimiento
Para escribir texto en un archivo.
Utilice el método WriteAllText para escribir el texto en un archivo, especificando el archivo y el texto que se va a escribir.
Este ejemplo escribe la línea "This is new text." en el archivo llamado test.txt, anexando el texto al texto existente
en el archivo.
VB
My.Computer.FileSystem.WriteAllText("C:\TestFolder1\test.txt", _
"This is new text to be added.",True)

Para escribir una serie de cadenas en un archivo


Recorra en iteración la colección de cadenas. Utilice el método WriteAllText para escribir el texto en un archivo,
especificando el archivo de destino, la cadena que se debe agregar y estableciendo append en True.
Este ejemplo escribe los nombres de los archivos contenidos en el directorio Documents and Settings en el archivo
FileList.txt, insertando un retorno de carro entre cada uno de ellos para una mejor legibilidad.

VB
For Each foundFile As String In _
My.Computer.FileSystem.GetFiles("C:\Documents and Settings")
foundFile = foundFile & vbCrLf
My.Computer.FileSystem.WriteAllText _
("C:\Documents and Settings\FileList.txt", foundFile, True)
Next

Programación eficaz
Las condiciones siguientes pueden producir una excepción:
La ruta de acceso no es válida por una de las razones siguientes: es una cadena de longitud cero, sólo contiene un
espacio en blanco, contiene caracteres no válidos o es una ruta de acceso de dispositivo (empieza por \\.\)
(ArgumentException).
La ruta de acceso no es válida porque es Nothing (ArgumentNullException).
File señala a una ruta de acceso que no existe (FileNotFoundException o DirectoryNotFoundException).
El archivo está en uso por otro proceso o hay un error de E/S (IOException).
La ruta supera la longitud máxima definida por el sistema (PathTooLongException).
Un nombre de archivo o de directorio de la ruta de acceso contiene un signo de dos puntos (:) o tiene un formato no
válido (NotSupportedException).
El usuario no tiene los permisos necesarios para ver la ruta de acceso (SecurityException).
El disco está lleno y se produce un error en la llamada a WriteAllText (IOException).
Si realiza una ejecución en un contexto de confianza parcial, el código podría desencadenar una excepción por falta de
privilegios. Para obtener más información, vea Conceptos básicos sobre la seguridad de acceso a código.
Vea también
Tareas
Cómo: Leer archivos de texto en Visual Basic
Referencia
My.Computer.FileSystem (Objeto)
My.Computer.FileSystem.WriteAllText (Método)
Conceptos del lenguaje Visual Basic

Cómo: Anexar a archivos de texto en Visual Basic


My.Computer.FileSystem.WriteAllText (Método) se puede utilizar para anexar a un archivo de texto especificando que el
parámetro append se establece en True.
Para anexar a un archivo de texto
Utilice el método WriteAllText, especificando el archivo de destino y la cadena que se va a anexar y estableciendo el
parámetro append en True.
Este ejemplo escribe la cadena "This is a test string." en el archivo Testfile.txt.

VB
Dim inputString As String = "This is a test string."
My.Computer.FileSystem.WriteAllText _
("C://testfile.txt", inputString, True)

Programación eficaz
Las condiciones siguientes pueden producir una excepción:
La ruta de acceso no es válida por una de las razones siguientes: es una cadena de longitud cero, sólo contiene un
espacio en blanco, contiene caracteres no válidos o es una ruta de acceso de dispositivo (empieza por \\.\)
(ArgumentException).
La ruta de acceso no es válida porque es Nothing (ArgumentNullException).
File señala a una ruta de acceso que no existe (FileNotFoundException o DirectoryNotFoundException).
El archivo está en uso por otro proceso o hay un error de E/S (IOException).
La ruta supera la longitud máxima definida por el sistema (PathTooLongException).
Un nombre de archivo o de directorio de la ruta de acceso contiene un signo de dos puntos (:) o tiene un formato no
válido (NotSupportedException).
El usuario no tiene los permisos necesarios para ver la ruta de acceso (SecurityException).
Vea también
Referencia
My.Computer.FileSystem.WriteAllText (Método)
My.Computer.FileSystem (Objeto)
Otros recursos
Escribir en archivos en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Escribir en archivos binarios en Visual Basic


El My.Computer.FileSystem.WriteAllBytes (Método) escribe datos en un archivo binario. Si el parámetro append es True,
anexará los datos al archivo; de lo contrario se sobrescriben los datos existentes en el archivo.
Si la ruta de acceso especificada excepto el nombre de archivo no es válida, se producirá una excepción
DirectoryNotFoundException. Si la ruta de acceso es válida pero el archivo no existe, se creará el archivo.
Para escribir en un archivo binario
Utilice el método WriteAllBytes, proporcionando la ruta de acceso del archivo, su nombre y los bytes que se deben
escribir. Este ejemplo anexa la matriz de datos CustomerData al archivo denominado CollectedData.dat.
VB
My.Computer.FileSystem.WriteAllBytes _
("C:\MyDocuments\CustomerData", CustomerData, True)

Programación eficaz
Las condiciones siguientes pueden crear una excepción:
La ruta de acceso no es válida por uno de los siguientes motivos: es una cadena de longitud cero, contiene sólo espacios
en blanco, o contiene caracteres no válidos. (ArgumentException).
La ruta de acceso no es válida porque es Nothing (ArgumentNullException).
File señala a una ruta de acceso que no existe (FileNotFoundException o DirectoryNotFoundException).
El archivo está en uso por otro proceso o hay un error de E/S (IOException).
La ruta supera la longitud máxima definida por el sistema (PathTooLongException).
Un nombre de archivo o de directorio de la ruta de acceso contiene un signo de dos puntos (:) o tiene un formato no
válido (NotSupportedException).
El usuario no tiene los permisos necesarios para ver la ruta de acceso (SecurityException).
Vea también
Tareas
Cómo: Escribir texto en archivos en Visual Basic
Referencia
My.Computer.FileSystem.WriteAllBytes (Método)
Conceptos del lenguaje Visual Basic

Cómo: Escribir texto en archivos del directorio Mis documentos


en Visual Basic
El objeto My.Computer.FileSystem.SpecialDirectories permite tener acceso a los directorios especiales, como el directorio
MyDocuments.
Procedimiento
Para escribir nuevos archivos de texto en el directorio Mis documentos
1. Utilice la propiedad My.Computer.FileSystem.SpecialDirectories.MyDocuments para proporcionar la ruta de
acceso.
VB
Dim filePath As String
filePath = System.IO.Path.Combine( _
My.Computer.FileSystem.SpecialDirectories.MyDocuments, "test.txt")

2. Utilice el método WriteAllText para escribir texto en el archivo especificado.


VB
My.Computer.FileSystem.WriteAllText(filePath, "some text", True)

Ejemplo
VB
Try
Dim filePath As String
filePath = System.IO.Path.Combine( _
My.Computer.FileSystem.SpecialDirectories.MyDocuments, "test.txt")
My.Computer.FileSystem.WriteAllText(filePath, "some text", False)
Catch fileException As Exception
Throw fileException
End Try

Compilar el código
Reemplace test.txt con el nombre del archivo en el que desea escribir.
Programación eficaz
Este código vuelve a producir todas las excepciones que pueden ocurrir al escribir texto en el archivo. Puede reducir la
probabilidad de que se produzcan excepciones utilizando los controles de formularios Windows Forms como los componentes
OpenFileDialog y SaveFileDialog, que limitan las opciones del usuario a los nombres de archivo válidos. No obstante, el uso de
estos controles no es infalible. El sistema de archivos puede cambiar entre el momento en el que el usuario selecciona un
archivo y el momento en el que se ejecuta el código. Por ello, cuando se trabaja con archivos casi siempre es prácticamente
obligatorio realizar un control de excepciones.
Seguridad
Si realiza una ejecución en un contexto de confianza parcial, el código podría desencadenar una excepción por falta de
privilegios. Para obtener más información, vea Conceptos básicos sobre la seguridad de acceso a código.
Este ejemplo crea un nuevo archivo. Si una aplicación necesita crear un archivo, precisará permisos de creación para la carpeta
correspondiente. Los permisos se establecen usando listas de control de acceso. Sin embargo, si el archivo ya existe, la
aplicación sólo precisará permiso de escritura, un privilegio menor. Por tanto, siempre que sea posible, resulta más seguro
crear el archivo durante la implementación y conceder sólo privilegios de lectura en un solo archivo, en lugar de privilegios de
creación para una carpeta. También es más seguro escribir datos en carpetas de usuario en lugar de en la carpeta raíz o en la
carpeta Archivos de programa. Para obtener más información, consulte Listas de control de acceso (ACL).
Vea también
Referencia
My.Computer (Objeto)
My.Computer.FileSystem (Objeto)
My.Computer.FileSystem.WriteAllText (Método)
My.Computer.FileSystem.SpecialDirectories (Objeto)
System.IO.Path.Combine(System.String,System.String)
Conceptos del lenguaje Visual Basic

Cómo: Escribir texto en archivos con un objeto StreamWriter en


Visual Basic
Este ejemplo abre un objeto StreamWriter con el método My.Computer.FileSystem.OpenTextFileWriter y lo utiliza para
escribir una cadena en un archivo de texto con el método WriteLine de la clase StreamWriter.
Ejemplo
VB
Dim file As System.IO.StreamWriter
file = My.Computer.FileSystem.OpenTextFileWriter("c:\test.txt", True)
file.WriteLine("Here is the first string.")
file.Close()

Programación eficaz
Las condiciones siguientes pueden producir una excepción:
El archivo ya existe y es de sólo lectura (IOException).
El disco está lleno (IOException).
El nombre de la ruta de acceso es demasiado largo (PathTooLongException).
Seguridad
En este ejemplo se crea un nuevo archivo, si es que aún no existe. Si una aplicación necesita crear un archivo, precisará acceso
Create para la carpeta correspondiente. Sin embargo, si el archivo ya existe, la aplicación sólo precisará acceso Write, un
privilegio menor. Por tanto, siempre que sea posible, resulta más seguro crear el archivo durante la implementación y
conceder sólo acceso Read para un único archivo, en lugar de acceso Create para una carpeta.
Vea también
Tareas
Cómo: Leer archivos de texto en Visual Basic
Referencia
My.Computer.FileSystem.OpenTextFileWriter (Método)
StreamWriter
Otros recursos
Escribir en archivos en Visual Basic
Conceptos del lenguaje Visual Basic

Crear, eliminar y mover archivos y directorios en Visual Basic


En esta sección se muestran tareas asociadas con crear, eliminar, mover y cambiar el nombre de archivos y directorios en
Visual Basic.
En esta sección
Cómo: Copiar archivos con un modelo específico en un directorio en Visual Basic
Muestra cómo copiar los archivos que tienen un modelo de nombre de archivo concreto, como sólo los archivos .txt, en un
directorio.
Cómo: Crear una copia de un archivo en el mismo directorio en Visual Basic
Muestra cómo crear una copia de un archivo en el mismo directorio.
Cómo: Crear una copia de un archivo en un directorio diferente en Visual Basic
Explica cómo copiar un archivo en otro directorio.
Cómo: Crear un archivo en Visual Basic
Indica cómo crear un archivo.
Cómo: Eliminar un archivo en Visual Basic
Explica cómo eliminar un archivo.
Cómo: Eliminar todos los archivos de un directorio en Visual Basic
Muestra cómo eliminar todos los archivos contenidos en un directorio concreto.
Cómo: Buscar archivos con un modelo específico en Visual Basic
Explica cómo mostrar sólo los archivos de un directorio que tienen un modelo concreto de nombre de archivo.
Cómo: Mover un archivo en Visual Basic
Muestra cómo mover un archivo a un directorio diferente.
Cómo: Mover una colección de archivos en Visual Basic
Explica cómo mover varios archivos a un directorio diferente.
Cómo: Cambiar el nombre de un archivo en Visual Basic
Muestra cómo cambiar el nombre de un archivo.
Cómo: Cambiar el nombre de un directorio en Visual Basic
Explica cómo cambiar el nombre de un directorio.
Cómo: Copiar un directorio en otro directorio en Visual Basic
Indica cómo copiar un directorio en otra ubicación.
Cómo: Crear un directorio en Visual Basic
Muestra cómo crear un directorio.
Cómo: Eliminar un directorio en Visual Basic
Explica cómo eliminar un directorio.
Cómo: Buscar subdirectorios con un modelo específico en Visual Basic
Explica cómo mostrar los directorios cuyo nombre sigue un modelo concreto.
Cómo: Obtener la colección de archivos de un directorio en Visual Basic
Muestra cómo enumerar los archivos existentes en un directorio.
Cómo: Determinar el número de archivos de un directorio en Visual Basic
Indica cómo determinar cuántos archivos hay en un directorio.
Cómo: Mover un directorio en Visual Basic
Explica cómo mover un directorio.
Cómo: Mover el contenido de un directorio en Visual Basic
Muestra cómo mover el contenido de un directorio.
Cómo: Recuperar el contenido del directorio Mis documentos en Visual Basic
Explica cómo leer de los directorios especiales.
Cómo: Analizar rutas de acceso a archivos en Visual Basic
Muestra cómo utilizar métodos My para combinar rutas de acceso a archivos.
Referencia
My.Computer.FileSystem (Objeto)
Describe el objeto My.Computer.FileSystem y sus miembros.
My.Computer.FileSystem.CombinePath (Método)
Describe el método CombinePath.
My.Computer.FileSystem.CopyDirectory (Método)
Describe el método CopyDirectory.
My.Computer.FileSystem.CopyFile (Método)
Describe el método CopyFile.
My.Computer.FileSystem.CreateDirectory (Método)
Describe el método CreateDirectory.
My.Computer.FileSystem.DeleteDirectory (Método)
Describe el método DeleteDirectory.
My.Computer.FileSystem.DeleteFile (Método)
Describe el método DeleteFile.
My.Computer.FileSystem.GetParentPath (Método)
Describe el método GetParentPath.
My.Computer.FileSystem.MoveDirectory (Método)
Describe el método MoveDirectory.
My.Computer.FileSystem.MoveFile (Método)
Describe el método MoveFile.
My.Computer.FileSystem.RenameDirectory (Método)
Describe el método RenameDirectory.
My.Computer.FileSystem.RenameFile (Método)
Describe el método RenameFile.
My.Computer.FileSystem.SpecialDirectories (Objeto)
Describe el objeto SpecialDirectories.
Secciones relacionadas
Leer archivos en Visual Basic
Enumera las tareas asociadas con la lectura de archivos.
Escribir en archivos en Visual Basic
Enumera las tareas relacionadas con la escritura en archivos.
Propiedades de archivos, directorios y unidades en Visual Basic
Muestra tareas asociadas a obtener y establecer propiedades de archivo, directorio y unidad.
Conceptos del lenguaje Visual Basic

Cómo: Copiar archivos con un modelo específico en un


directorio en Visual Basic
El método My.Computer.FileSystem.GetFiles (Método) devuelve una colección de sólo lectura de cadenas que representan los
nombres de ruta de acceso a los archivos. Puede utilizar el parámetro wildCards para especificar un modelo concreto.
Se devuelve una colección vacía si no se encuentra ningún archivo que coincida.
Puede utilizar el método My.Computer.FileSystem.CopyFile (Método) para copiar los archivos en un directorio.
Para copiar archivos con un modelo concreto en un directorio
1. Utilice el método GetFiles para devolver la lista de archivos. Este ejemplo devuelve todos los archivos .rtf que se
encuentran en el directorio especificado.
VB
For Each foundFile As String In My.Computer.FileSystem.GetFiles( _
My.Computer.FileSystem.SpecialDirectories.MyDocuments, _
FileIO.SearchOption.SearchTopLevelOnly, "*.rtf")

2. Utilice el método CopyFile para copiar los archivos. Este ejemplo copia los archivos en el directorio denominado
testdirectory.

VB
My.Computer.FileSystem.CopyFile(foundFile, "C:\testdirectory\" & foundFile)

3. Cierre la instrucción For con una instrucción Next.


VB
Next

Ejemplo
En el ejemplo siguiente, que presenta los fragmentos de código anteriores de forma completa, se copian todos los archivos .rtf
del directorio especificado en el directorio denominado testdirectory.
VB
For Each foundFile As String In My.Computer.FileSystem.GetFiles( _
My.Computer.FileSystem.SpecialDirectories.MyDocuments, _
FileIO.SearchOption.SearchTopLevelOnly, "*.rtf")

My.Computer.FileSystem.CopyFile(foundFile, "C:\testdirectory\" & foundFile)


Next

Seguridad
Las condiciones siguientes pueden producir una excepción:
La ruta de acceso no es válida por una de las razones siguientes: es una cadena de longitud cero, sólo contiene un
espacio en blanco, contiene caracteres no válidos o es una ruta de acceso de dispositivo (empieza por \\.\)
(ArgumentException).
La ruta de acceso no es válida porque es Nothing (ArgumentNullException).
El directorio no existe (DirectoryNotFoundException).
El directorio señala a un archivo existente (IOException).
La ruta de acceso supera la longitud máxima definida por el sistema (PathTooLongException).
Un nombre de archivo o de directorio de la ruta de acceso contiene un signo de dos puntos (:) o tiene un formato no
válido (NotSupportedException).
El usuario no tiene los permisos necesarios para ver la ruta de acceso (SecurityException). El usuario no tiene los
permisos necesarios (UnauthorizedAccessException).
Vea también
Tareas
Cómo: Buscar subdirectorios con un modelo específico en Visual Basic
Solución de problemas: Leer y escribir en archivos de texto
Cómo: Obtener la colección de archivos de un directorio en Visual Basic
Referencia
My.Computer.FileSystem.CopyFile (Método)
My.Computer.FileSystem.GetFiles (Método)
Conceptos del lenguaje Visual Basic

Cómo: Crear una copia de un archivo en el mismo directorio en


Visual Basic
Utilice el método My.Computer.FileSystem.CopyFile para copiar archivos. Con los parámetros puede sobrescribir archivos
existentes, cambiar el nombre del archivo, mostrar el progreso de la operación y permitir al usuario cancelar la operación.
Para crear una copia de un archivo en la misma carpeta
Utilice el método CopyFile, proporcionando el archivo de destino y la ubicación. El ejemplo siguiente crea una copia de
test.txt llamada test2.txt.

VB
My.Computer.FileSystem.CopyFile("C:\TestFolder\test.txt", _
"C:\TestFolder\test2.txt", Microsoft.VisualBasic.FileIO.UIOption.OnlyErrorDialogs, Fil
eIO.UICancelOption.DoNothing)

Para crear una copia de un archivo en la misma carpeta, sobrescribiendo archivos existentes
Utilice el método CopyFile; indique el archivo de destino y la ubicación y establezca overwrite en True. El ejemplo
siguiente crea una copia de test.txt llamada test2.txt y sobrescribe cualquier archivo existente con dicho nombre.
VB
My.Computer.FileSystem.CopyFile("C:\TestFolder\test.txt", _
"C:\TestFolder\test2.txt", True)

Programación eficaz
Las condiciones siguientes pueden provocar que se produzca una excepción:
La ruta de acceso no es válida por una de las razones siguientes: es una cadena de longitud cero, sólo contiene un
espacio en blanco, contiene caracteres no válidos o es una ruta de acceso de dispositivo (empieza por \\.\)
(ArgumentException).
El sistema no pudo recuperar la ruta de acceso absoluta (ArgumentException).
La ruta de acceso no es válida porque es Nothing (ArgumentNullException).
El archivo de código fuente no es válido o no existe (FileNotFoundException).
La ruta de acceso combinada apunta a un directorio existente (IOException).
El archivo de destino existe y overwrite está establecido en False (IOException).
El usuario no tiene permisos suficientes para el acceso al archivo (IOException).
Hay un archivo en uso con el mismo nombre en la carpeta de destino (IOException).
Un nombre de archivo o de carpeta en la ruta de acceso contiene dos puntos (:) o está en un formato no válido
(NotSupportedException).
ShowUI está establecido en True, onUserCancel está establecido en ThrowException y el usuario ha cancelado la
operación (OperationCanceledException).
ShowUI está establecido en True, onUserCancel está establecido en ThrowException y se produce un error de E/S no
especificado (OperationCanceledException).
La ruta supera la longitud máxima definida por el sistema (PathTooLongException).
El usuario no tiene los permisos requeridos (UnauthorizedAccessException).
El usuario no tiene los permisos necesarios para ver la ruta de acceso (SecurityException).
Vea también
Tareas
Cómo: Copiar archivos con un modelo específico en un directorio en Visual Basic
Cómo: Crear una copia de un archivo en un directorio diferente en Visual Basic
Cómo: Copiar un directorio en otro directorio en Visual Basic
Cómo: Cambiar el nombre de un archivo en Visual Basic
Referencia
My.Computer.FileSystem (Objeto)
My.Computer.FileSystem.CopyFile (Método)
UICancelOption (Enumeración)
Conceptos del lenguaje Visual Basic

Cómo: Crear una copia de un archivo en un directorio diferente


en Visual Basic
El método My.Computer.FileSystem.CopyFile le permite copiar archivos. Sus parámetros proporcionan la capacidad de
sobrescribir archivos existentes, cambiar el nombre al archivo, mostrar el progreso de la operación y permitir al usuario
cancelar la operación.
Para copiar un archivo de texto en otra carpeta
Utilice el método CopyFile para copiar un archivo, especificando un archivo de código fuente y el directorio de destino.
El parámetro overwrite le permite especificar si se deben sobrescribir los archivos existentes. Los ejemplos de código
siguientes muestran cómo utilizar CopyFile.
VB
' Copy the file to a new location without overwriting existing file.
My.Computer.FileSystem.CopyFile( _
"C:\UserFiles\TestFiles\testFile.txt", _
"C:\UserFiles\TestFiles2\testFile.txt")

' Copy the file to a new folder, overwriting existing file.


My.Computer.FileSystem.CopyFile( _
"C:\UserFiles\TestFiles\testFile.txt", _
"C:\UserFiles\TestFiles2\testFile.txt", _
FileIO.UIOption.AllDialogs, _
FileIO.UICancelOption.DoNothing)

' Copy the file to a new folder and rename it.


My.Computer.FileSystem.CopyFile( _
"C:\UserFiles\TestFiles\testFile.txt", _
"C:\UserFiles\TestFiles2\NewFile.txt", _
FileIO.UIOption.AllDialogs, _
FileIO.UICancelOption.DoNothing)

Programación eficaz
Las condiciones siguientes pueden hacer que se produzca una excepción:
La ruta de acceso no es válida por una de las razones siguientes: es una cadena de longitud cero, sólo contiene un
espacio en blanco, contiene caracteres no válidos o es una ruta de acceso de dispositivo (empieza por \\.\)
(ArgumentException).
El sistema no pudo recuperar la ruta de acceso absoluta (ArgumentException).
La ruta de acceso no es válida porque es Nothing (ArgumentNullException).
El archivo de código fuente no es válido o no existe (FileNotFoundException).
La ruta de acceso combinada apunta a un directorio existente (IOException).
El archivo de destino existe y overwrite está establecido en False (IOException).
El usuario no tiene permisos suficientes para tener acceso al archivo (IOException).
Hay un archivo en uso con el mismo nombre en la carpeta de destino (IOException).
Un nombre de archivo o de carpeta en la ruta de acceso contiene dos puntos (:) o está en un formato no válido
(NotSupportedException).
ShowUI está establecido en True, onUserCancel está establecido en ThrowException y el usuario ha cancelado la
operación (OperationCanceledException).
ShowUI está establecido en True, onUserCancel está establecido en ThrowException y se produce un error de E/S no
especificado (OperationCanceledException).
La ruta supera la longitud máxima definida por el sistema (PathTooLongException).
El usuario no tiene los permisos requeridos (UnauthorizedAccessException).
El usuario no tiene los permisos necesarios para ver la ruta de acceso (SecurityException).
Vea también
Tareas
Cómo: Copiar archivos con un modelo específico en un directorio en Visual Basic
Cómo: Crear una copia de un archivo en el mismo directorio en Visual Basic
Cómo: Copiar un directorio en otro directorio en Visual Basic
Cómo: Cambiar el nombre de un archivo en Visual Basic
Referencia
My.Computer.FileSystem (Objeto)
My.Computer.FileSystem.CopyFile (Método)
UICancelOption (Enumeración)
Conceptos del lenguaje Visual Basic

Cómo: Crear un archivo en Visual Basic


Este ejemplo crea un archivo de texto vacío en la ruta de acceso especificada utilizando el método Create de la clase File.
Ejemplo
VB
Dim file As System.IO.FileStream
file = System.IO.File.Create("c:\test.txt")

Compilar el código
Utilice la variable file para escribir en el archivo.
Programación eficaz
Si el archivo ya existe, es reemplazado.
Las condiciones siguientes pueden producir una excepción:
El nombre de la ruta de acceso está mal formado. Por ejemplo, contiene caracteres no válidos o está compuesto sólo por
espacios en blanco (ArgumentException).
La ruta de acceso es de sólo lectura (IOException).
El nombre de la ruta de acceso es Nothing (ArgumentNullException).
El nombre de la ruta de acceso es demasiado largo (PathTooLongException).
La ruta de acceso no es válida (DirectoryNotFoundException).
La ruta de acceso contiene sólo un signo de dos puntos ":" (NotSupportedException).
Seguridad
En entornos de confianza parcial, podría producirse una excepción SecurityException.
La llamada al método Create requiere permisos FileIOPermission.
Si el usuario no tiene permisos para crear el archivo, se produce una excepción UnauthorizedAccessException.
Vea también
Referencia
System.IO
Create
Conceptos
Utilizar bibliotecas de código que no es de plena confianza
Conceptos básicos sobre la seguridad de acceso a código
Conceptos del lenguaje Visual Basic

Cómo: Eliminar un archivo en Visual Basic


El método DeleteFile del objeto My.Computer.FileSystem permite eliminar archivos. Entre las opciones que ofrece se
encuentran: si desea enviar el archivo eliminado a la Papelera de reciclaje, si se debe pedir al usuario que confirme la
eliminación y qué hacer si el usuario cancela la operación.
Para eliminar un archivo de texto
Utilice el método DeleteFile para eliminar el archivo. El código siguiente muestra cómo eliminar el archivo denominado
test.txt.

VB
My.Computer.FileSystem.DeleteFile("C:\test.txt")

Para eliminar un archivo de texto y pedirle al usuario que confirme que se debe eliminar el archivo
Utilice el método DeleteFile para eliminar el archivo, estableciendo showUI en AllDialogs. El código siguiente muestra
cómo eliminar el archivo denominado test.txt y permite al usuario confirmar la eliminación del archivo.
VB
My.Computer.FileSystem.DeleteFile("C:\test.txt", _
FileIO.UIOption.AllDialogs, FileIO.RecycleOption.DeletePermanently, FileIO.UIC
ancelOption.DoNothing)

Para eliminar un archivo de texto y enviarlo a la Papelera de Reciclaje


Utilice el método DeleteFile para eliminar el archivo, especificando SendToRecycleBin para el parámetro recycle. El
código siguiente muestra cómo eliminar el archivo denominado test.txt y enviarlo a la Papelera de Reciclaje.
VB
My.Computer.FileSystem.DeleteFile("C:\test.txt", _
FileIO.UIOption.AllDialogs, FileIO.RecycleOption.SendToRecycleBin)

Programación eficaz
Las condiciones siguientes pueden producir una excepción:
La ruta de acceso no es válida por una de las razones siguientes: es una cadena de longitud cero, sólo contiene un
espacio en blanco, contiene caracteres no válidos o es una ruta de acceso de dispositivo (empieza por \\.\)
(ArgumentException).
La ruta de acceso no es válida porque es Nothing (ArgumentNullException).
La ruta supera la longitud máxima definida por el sistema (PathTooLongException).
Un nombre de archivo o de carpeta en la ruta de acceso contiene dos puntos (:) o está en un formato no válido
(NotSupportedException).
El archivo está en uso (IOException).
El usuario no tiene los permisos necesarios para ver la ruta de acceso (SecurityException).
El archivo no existe (FileNotFoundException).
El usuario no tiene el permiso para eliminar el archivo o el archivo es de sólo lectura (UnauthorizedAccessException).
Existe una situación de confianza parcial en la que el usuario no tiene los permisos necesarios (SecurityException).
El usuario canceló la operación y el parámetro onUserCancel está establecido en
Microsoft.VisualBasic.FileIO.UICancelOption.ThrowException (OperationCanceledException).
Vea también
Tareas
Cómo: Obtener la colección de archivos de un directorio en Visual Basic
Cómo: Eliminar un directorio en Visual Basic
Referencia
UICancelOption (Enumeración)
My.Computer.FileSystem (Objeto)
UIOption (Enumeración)
RecycleOption (Enumeración)
Conceptos del lenguaje Visual Basic

Cómo: Eliminar todos los archivos de un directorio en Visual


Basic
El método DeleteFile del objeto My.Computer.FileSystem permite eliminar un archivo. Entre las opciones que ofrece se
encuentran: si se va a enviar el archivo eliminado a la Papelera de reciclaje, si se va a pedir al usuario que confirme la
eliminación o qué se debe hacer cuando el usuario cancela la operación.
Para eliminar todos los archivos de una carpeta
1. Utilice el método My.Computer.FileSystem.GetFiles para devolver la colección de cadenas que representan los
archivos en el directorio.
2. Utilice un bucle For…Each con el método DeleteFile para eliminar los archivos de uno en uno.
En el ejemplo siguiente se eliminan todos los archivos de la carpeta Mis documentos.
VB
For Each foundFile As String In My.Computer.FileSystem.GetFiles( _
My.Computer.FileSystem.SpecialDirectories.MyDocuments, _
FileIO.SearchOption.SearchAllSubDirectories, "*.*")

My.Computer.FileSystem.DeleteFile(foundFile, _
FileIO.UIOption.AllDialogs, _
FileIO.RecycleOption.DeletePermanently)
Next

Programación eficaz
Las condiciones siguientes pueden producir una excepción:
La ruta de acceso no es válida por una de las razones siguientes: es una cadena de longitud cero, sólo contiene un
espacio en blanco, contiene caracteres no válidos o es una ruta de acceso de dispositivo (empieza por \\.\)
(ArgumentException).
La ruta de acceso no es válida porque es Nothing (ArgumentNullException).
La ruta de acceso supera la longitud máxima definida por el sistema (PathTooLongException).
Un nombre de archivo o de carpeta en la ruta de acceso contiene dos puntos (:) o está en un formato no válido
(NotSupportedException).
El archivo está en uso (IOException).
El usuario no tiene los permisos necesarios para ver la ruta de acceso (SecurityException).
El archivo no existe (FileNotFoundException).
El usuario no tiene permiso para eliminar el archivo o el archivo es de sólo lectura (UnauthorizedAccessException).
Existe una situación de confianza parcial en la cual el usuario no tiene los permisos necesarios (SecurityException).
El usuario ha cancelado la operación y el parámetro onUserCancel está establecido en
Microsoft.VisualBasic.FileIO.UICancelOption.ThrowException (OperationCanceledException).
Vea también
Tareas
Cómo: Eliminar un archivo en Visual Basic
Cómo: Eliminar un directorio en Visual Basic
Cómo: Cambiar el nombre de un archivo en Visual Basic
Cómo: Determinar la ruta de acceso absoluta de un archivo en Visual Basic
Referencia
My.Computer.FileSystem (Objeto)
My.Computer.FileSystem.DeleteFile (Método)
RecycleOption (Enumeración)
UICancelOption (Enumeración)
Conceptos del lenguaje Visual Basic

Cómo: Buscar archivos con un modelo específico en Visual Basic


El My.Computer.FileSystem.GetFiles (Método) devuelve una colección de sólo lectura de cadenas que representan los nombres
de ruta de acceso de los archivos. Puede utilizar el parámetro wildCards para especificar un modelo concreto. Si desea incluir
los subdirectorios en la búsqueda, establezca el parámetro searchType en SearchOption.SearchAllSubDirectories.
Se devuelve una colección vacía si no se encuentra ningún archivo que coincida con el modelo especificado.
Para buscar archivos con un modelo especificado
Utilice el método GetFiles, proporcionando el nombre y la ruta de acceso del directorio en el que desea buscar y
especificando el modelo. El ejemplo siguiente devuelve todos los archivos situados en el directorio que tienen la
extensión .dll y los agrega a ListBox1.
VB
For Each foundFile As String In My.Computer.FileSystem.GetFiles( _
My.Computer.FileSystem.SpecialDirectories.MyDocuments, _
FileIO.SearchOption.SearchAllSubDirectories, "*.dll")

Listbox1.Items.Add(foundFile)
Next

Seguridad
Las condiciones siguientes pueden producir una excepción:
La ruta de acceso no es válida por una de las razones siguientes: es una cadena de longitud cero, sólo contiene un
espacio en blanco, contiene caracteres no válidos o es una ruta de acceso de dispositivo (empieza por \\.\)
(ArgumentException).
La ruta de acceso no es válida porque es Nothing (ArgumentNullException).
directory no existe (DirectoryNotFoundException).
directory señala a un archivo existente (IOException).
La ruta supera la longitud máxima definida por el sistema (PathTooLongException).
Un nombre de archivo o de carpeta en la ruta de acceso contiene dos puntos (:) o está en un formato no válido
(NotSupportedException).
El usuario no tiene los permisos necesarios para ver la ruta de acceso (SecurityException).
El usuario no tiene los permisos necesarios (UnauthorizedAccessException).
Vea también
Tareas
Cómo: Buscar subdirectorios con un modelo específico en Visual Basic
Solución de problemas: Leer y escribir en archivos de texto
Cómo: Obtener la colección de archivos de un directorio en Visual Basic
Referencia
My.Computer.FileSystem.GetFiles (Método)
Conceptos del lenguaje Visual Basic

Cómo: Mover un archivo en Visual Basic


El método My.Computer.FileSystem.MoveFile se puede utilizar para mover un archivo a otra carpeta. Si la estructura de
destino no existe, se creará.
Para mover un archivo
Utilice el método MoveFile para mover el archivo, especificando el nombre de archivo y la ubicación tanto del archivo
de código fuente como del archivo de destino. En este ejemplo se mueve el archivo test.txt desde TestDir1 a TestDir2.
Observe que se especifica el nombre del archivo de destino aunque sea igual que el nombre del archivo de código
fuente.
VB
My.Computer.FileSystem.MoveFile("C:\TestDir1\test.txt", _
"C:\TestDir2\test.txt")

Para mover un archivo y cambiarle el nombre


Utilice el método MoveFile para mover el archivo, especificando el nombre y la ubicación del archivo de código fuente,
la ubicación de destino y el nuevo nombre en la ubicación de destino. Este ejemplo mueve el archivo llamado a test.txt
desde TestDir1 a TestDir2 y le cambia el nombre por el de nexttest.txt.
VB
My.Computer.FileSystem.MoveFile("C:\TestDir1\test.txt", _
"C:\TestDir2\nexttest.txt", _
FileIO.UIOption.AllDialogs, _
FileIO.UICancelOption.ThrowException)

Programación eficaz
Las condiciones siguientes pueden producir una excepción:
La ruta de acceso no es válida por una de las razones siguientes: es una cadena de longitud cero, sólo contiene un
espacio en blanco, contiene caracteres no válidos o es una ruta de acceso de dispositivo (empieza por \\.\)
(ArgumentException).
La ruta de acceso no es válida porque es Nothing (ArgumentNullException).
destinationFileName es Nothing o una cadena vacía (ArgumentNullException).
El archivo de código fuente no es válido o no existe (FileNotFoundException).
La ruta de acceso combinada apunta a un directorio existente, el archivo de destino existe y overwrite está establecido en
False, está en uso un archivo del directorio que tiene el mismo nombre o el usuario no tiene permisos suficientes para
tener acceso al archivo (IOException).
Un nombre de archivo o de directorio de la ruta de acceso contiene un signo de dos puntos (:) o tiene un formato no
válido (NotSupportedException).
showUI está establecido en True, onUserCancel está establecido en ThrowException y el usuario ha cancelado la
operación o se ha producido un error de E/S no especificado (OperationCanceledException).
La ruta supera la longitud máxima definida por el sistema (PathTooLongException).
El usuario no tiene los permisos necesarios para ver la ruta de acceso (SecurityException).
El usuario no tiene los permisos requeridos (UnauthorizedAccessException).
Vea también
Tareas
Cómo: Cambiar el nombre de un archivo en Visual Basic
Cómo: Mover una colección de archivos en Visual Basic
Cómo: Crear una copia de un archivo en un directorio diferente en Visual Basic
Cómo: Analizar rutas de acceso a archivos en Visual Basic
Cómo: Mover un directorio en Visual Basic
Referencia
My.Computer.FileSystem.MoveFile (Método)
Conceptos del lenguaje Visual Basic

Cómo: Mover una colección de archivos en Visual Basic


El método My.Computer.FileSystem.MoveFile le permite mover archivos entre los directorios.
Si la estructura de destino no existe, se creará.
Para mover una colección de archivos de un directorio a otro
Defina la colección de archivos y llame al método MoveFile. Este ejemplo mueve todos los archivos situados en el
directorio MyDocuments a la carpeta StorageDir.
VB
For Each foundFile As String In My.Computer.FileSystem.GetFiles( _
My.Computer.FileSystem.SpecialDirectories.MyDocuments, _
FileIO.SearchOption.SearchAllSubDirectories, "*.*")

Dim foundFileInfo As New System.IO.FileInfo(foundFile)


My.Computer.FileSystem.MoveFile(foundFile, "C:\StorageDir\" & foundFileInfo.Name)
Next

Programación eficaz
Las condiciones siguientes pueden producir una excepción:
La ruta de acceso no es válida por una de las razones siguientes: es una cadena de longitud cero, sólo contiene un
espacio en blanco, contiene caracteres no válidos o es una ruta de acceso de dispositivo (empieza por \\.\)
(ArgumentException).
La ruta de acceso no es válida porque es Nothing (ArgumentNullException).
El archivo de código de origen no es válido o no existe (FileNotFoundException).
La ruta de acceso combinada apunta a un directorio existente, el archivo de destino existe y overwrite está establecido en
False, está en uso un archivo del directorio que tiene el mismo nombre o el usuario no tiene permisos suficientes para
tener acceso al archivo (IOException).
Un nombre de archivo o de directorio de la ruta de acceso contiene un signo de dos puntos (:) o tiene un formato no
válido (NotSupportedException).
showUI está establecido en True, onUserCancelOption está establecido en ThrowException y el usuario ha cancelado la
operación o se ha producido un error de E/S no especificado (OperationCanceledException).
La ruta supera la longitud máxima definida por el sistema (PathTooLongException).
El usuario no tiene los permisos necesarios para ver la ruta de acceso (SecurityException).
El usuario no tiene los permisos requeridos (UnauthorizedAccessException).
Vea también
Tareas
Cómo: Cambiar el nombre de un archivo en Visual Basic
Cómo: Mover un archivo en Visual Basic
Cómo: Crear una copia de un archivo en un directorio diferente en Visual Basic
Cómo: Analizar rutas de acceso a archivos en Visual Basic
Cómo: Mover un directorio en Visual Basic
Cómo: Mover el contenido de un directorio en Visual Basic
Referencia
My.Computer.FileSystem.MoveFile (Método)
My.Computer.FileSystem.GetFiles (Método)
Otros recursos
Crear, eliminar y mover archivos y directorios en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Cambiar el nombre de un archivo en Visual Basic


Utilice el método RenameFile del objeto My.Computer.FileSystem para cambiar el nombre de un archivo proporcionando
la ubicación actual, el nombre de archivo y el nuevo nombre de archivo. Este método no se puede utilizar para mover archivos;
utilice MoveFile para mover un archivo y cambiarle el nombre.
Para cambiar el nombre de un archivo
Utilice el método My.Computer.FileSystem.RenameFile para cambiar el nombre de un archivo. En este ejemplo se
cambia el nombre del archivo Test.txt por SecondTest.txt.
VB
' Change "c:\test.txt" to the path and filename for the file that
' you want to rename.
My.Computer.FileSystem.RenameFile("C:\Test.txt", "SecondTest.txt")

Este ejemplo de código también está disponible como fragmento de código de IntelliSense. En el selector de fragmentos de
código, el fragmento de código se encuentra en Sistema de archivos - Procesando unidades, carpetas y archivos. Para
obtener más información, vea Cómo: Insertar fragmentos de código en el código (Visual Basic).
Programación eficaz
Las condiciones siguientes pueden producir una excepción:
La ruta de acceso no es válida por una de las razones siguientes: es una cadena de longitud cero, sólo contiene un
espacio en blanco, contiene caracteres no válidos o es una ruta de acceso de dispositivo (empieza por \\.\)
(ArgumentException).
newName contiene información de la ruta de acceso (ArgumentException).
La ruta de acceso no es válida porque es Nothing (ArgumentNullException).
newName es Nothing o una cadena vacía (ArgumentNullException).
El archivo de código fuente no es válido o no existe (FileNotFoundException).
Ya hay un archivo o directorio con el nombre especificado en newName (IOException).
La ruta supera la longitud máxima definida por el sistema (PathTooLongException).
Un nombre de archivo o de directorio de la ruta de acceso contiene un signo de dos puntos (:) o tiene un formato no
válido (NotSupportedException).
El usuario no tiene los permisos necesarios para ver la ruta de acceso (SecurityException).
El usuario no tiene los permisos requeridos (UnauthorizedAccessException).
Vea también
Tareas
Cómo: Mover un archivo en Visual Basic
Cómo: Mover una colección de archivos en Visual Basic
Cómo: Crear una copia de un archivo en el mismo directorio en Visual Basic
Cómo: Crear una copia de un archivo en un directorio diferente en Visual Basic
Referencia
My.Computer.FileSystem.RenameFile (Método)
Otros recursos
Crear, eliminar y mover archivos y directorios en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Cambiar el nombre de un directorio en Visual Basic


El método RenameDirectory del objeto My.Computer.FileSystem se puede utilizar para cambiar el nombre de un directorio
proporcionando la ubicación y el nombre actuales del directorio junto con el nuevo nombre el mismo. Este método no se
puede utilizar para mover un directorio; utilice el método MoveDirectory para mover el directorio y cambiarle el nombre.
Para cambiar el nombre de un directorio
Utilice el método My.Computer.FileSystem.RenameDirectory para cambiar el nombre de un directorio. El código
siguiente cambia el nombre del directorio Test a SecondTest.
VB
My.Computer.FileSystem.RenameDirectory("C:MyDocuments\Test", _
"SecondTest")

Este ejemplo de código también está disponible como fragmento de código de IntelliSense. En el selector de fragmentos de
código, el ejemplo se encuentra en Sistema de archivos - Procesando unidades, carpetas y archivos. Para obtener más
información, vea Cómo: Insertar fragmentos de código en el código (Visual Basic).
Programación eficaz
Las circunstancias siguientes pueden provocar una excepción:
La ruta de acceso no es válida por una de las razones siguientes: es una cadena de longitud cero, sólo contiene un
espacio en blanco, contiene caracteres no válidos o es una ruta de acceso de dispositivo (empieza por \\.\)
(ArgumentException).
newName contiene información de la ruta de acceso (ArgumentException).
La ruta de acceso no es válida porque es Nothing (ArgumentNullException).
newName es Nothing o una cadena vacía (ArgumentNullException).
El directorio de origen no es válido o no existe (DirectoryNotFoundException).
Ya hay un archivo o carpeta con el nombre especificado en newName (IOException).
La carpeta es una carpeta raíz (IOException).
La ruta supera la longitud máxima definida por el sistema (PathTooLongException).
Un nombre de archivo o de carpeta en la ruta de acceso contiene dos puntos (:) o está en un formato no válido
(NotSupportedException).
El usuario no tiene los permisos necesarios para ver la ruta de acceso (SecurityException).
El usuario no tiene los permisos requeridos (UnauthorizedAccessException).
Vea también
Tareas
Cómo: Copiar un directorio en otro directorio en Visual Basic
Cómo: Analizar rutas de acceso a archivos en Visual Basic
Cómo: Mover un directorio en Visual Basic
Cómo: Mover el contenido de un directorio en Visual Basic
Referencia
My.Computer.FileSystem.RenameDirectory (Método)
Conceptos del lenguaje Visual Basic

Cómo: Copiar un directorio en otro directorio en Visual Basic


Utilice el método My.Computer.FileSystem.CopyDirectory (Método) para copiar un directorio en otro directorio. Este método
copia el contenido del directorio así como el propio directorio. Si el directorio de destino no existe, se creará. Si existe un
directorio con el mismo nombre en la ubicación de destino y overwrite está establecido en False, se combinará el contenido de
los dos directorios. Puede especificar un nuevo nombre para el directorio durante la operación.
Cuando se copian archivos dentro de un directorio, se pueden producir excepciones producidas por un archivo concreto, como
que un archivo existe durante una combinación mientras overwrite está establecido en False. Cuando se producen dichas
excepciones, se consolidan en una excepción única, cuya propiedad Data contiene entradas en las que la ruta de acceso del
archivo o del directorio es la clave y el mensaje de excepción concreto está contenido en el valor correspondiente.
Para copiar un directorio en otro directorio
Utilice el método CopyDirectory, especificando los nombres de directorio de origen y de destino. En el siguiente
ejemplo se copia el directorio denominado TestDirectory1 en TestDirectory2, sobrescribiendo los archivos existentes.
VB
My.Computer.FileSystem.CopyDirectory("C:\TestDirectory1", "C:\TestDirectory2", True)

Este ejemplo de código también está disponible como fragmento de código de IntelliSense. En el selector de fragmentos
de código, se encuentra en Sistema de archivos - Procesando unidades, carpetas y archivos. Para obtener más
información, vea Cómo: Insertar fragmentos de código en el código (Visual Basic).
Programación eficaz
Las condiciones siguientes pueden producir una excepción:
El nuevo nombre especificado para el directorio contiene un signo de dos puntos (:) o una barra diagonal (\ o /)
(ArgumentException).
La ruta de acceso no es válida por una de las razones siguientes: es una cadena de longitud cero, sólo contiene un
espacio en blanco, contiene caracteres no válidos o es una ruta de acceso de dispositivo (empieza por \\.\)
(ArgumentException).
La ruta de acceso no es válida porque es Nothing (ArgumentNullException).
destinationDirectoryName es Nothing o una cadena vacía (ArgumentNullException).
El directorio de origen no existe (DirectoryNotFoundException).
El directorio de origen es un directorio raíz (IOException).
La ruta de acceso combinada apunta a un archivo existente (IOException).
La ruta de acceso de origen y la ruta de acceso de destino son iguales (IOException).
ShowUI está establecido en UIOption.AllDialogs y el usuario cancela la operación o no se puede copiar uno o más
archivos del directorio (OperationCanceledException).
La operación es cíclica (InvalidOperationException).
La ruta de acceso contiene un signo de dos puntos (:) (NotSupportedException).
La ruta supera la longitud máxima definida por el sistema (PathTooLongException).
Un nombre de archivo o de carpeta en la ruta de acceso contiene dos puntos (:) o está en un formato no válido
(NotSupportedException).
El usuario no tiene los permisos necesarios para ver la ruta de acceso (SecurityException).
Existe un archivo de destino pero no se puede obtener acceso a él (UnauthorizedAccessException).
Vea también
Tareas
Cómo: Buscar subdirectorios con un modelo específico en Visual Basic
Cómo: Obtener la colección de archivos de un directorio en Visual Basic
Cómo: Mover un directorio en Visual Basic
Cómo: Mover el contenido de un directorio en Visual Basic
Referencia
My.Computer.FileSystem.CopyDirectory (Método)
Conceptos del lenguaje Visual Basic

Cómo: Crear un directorio en Visual Basic


Utilice el método CreateDirectory del objeto My.Computer.FileSystem para crear directorios.
Si el directorio ya existe, no se produce ninguna excepción.
Para crear un directorio
Utilice el método CreateDirectory especificando la ruta de acceso completa de la ubicación donde se debe crear el
directorio. Este ejemplo crea el directorio NewDirectory en C:\Documents and Settings\All Users\Documents.
VB
My.Computer.FileSystem.CreateDirectory _
("C:\Documents and Settings\All Users\Documents\NewDirectory")

Programación eficaz
Las condiciones siguientes pueden producir una excepción:
El nombre de directorio es incorrecto. Por ejemplo, contiene caracteres no válidos o está compuesto sólo por espacios en
blanco (ArgumentException).
El directorio principal del directorio que se va a crear es de sólo lectura (excepción IOException).
El nombre del directorio es Nothing (ArgumentNullException).
El nombre del directorio es demasiado largo (excepción PathTooLongException).
El nombre del directorio es sólo un signo de dos puntos ":" (excepción NotSupportedException).
El usuario no tiene permiso para crear el directorio (UnauthorizedAccessException).
El usuario no tiene permisos suficientes en una situación de confianza parcial (SecurityException).
Vea también
Tareas
Cómo: Determinar si existe un directorio en Visual Basic
Referencia
My.Computer.FileSystem.CreateDirectory (Método)
Otros recursos
Crear, eliminar y mover archivos y directorios en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Eliminar un directorio en Visual Basic


Utilice el método DeleteDirectory del objeto My.Computer.FileSystem para eliminar un directorio. Algunas de las opciones
son: si se va a borrar o no el contenido del directorio, si el directorio eliminado se va a enviar o no a la Papelera de reciclaje y
si se va a mostrar o no el progreso de la eliminación.
Para eliminar un directorio sólo si está vacío
Utilice el método DeleteDirectory para eliminar el directorio, especificando False para onDirectoryNotEmpty. En el
ejemplo sólo se elimina el directorio OldDirectory si está vacío.
VB
My.Computer.FileSystem.DeleteDirectory("C:\OldDirectory", _
FileIO.DeleteDirectoryOption.ThrowIfDirectoryNonEmpty)

Para eliminar un directorio y enviarlo a la Papelera de reciclaje


Utilice el método DeleteDirectory para eliminar el directorio, especificando RecycleOption.SendToRecycleBin para
recycle. En este ejemplo se elimina el directorio denominado OldDirectory y todo su contenido, se envía a la Papelera
de reciclaje y se muestra el progreso de la operación.
VB
My.Computer.FileSystem.DeleteDirectory("C:\OldDirectory", FileIO.UIOption.AllDialogs,
FileIO.RecycleOption.SendToRecycleBin)

Programación eficaz
Las condiciones siguientes pueden producir una excepción:
La ruta de acceso es una cadena de longitud cero, es incorrecta, contiene sólo espacios en blanco o contiene caracteres
no válidos (incluidos los caracteres comodín) (ArgumentException).
La ruta de acceso es una ruta de acceso de dispositivo (comienza con \\. \) (ArgumentException).
La ruta de acceso es Nothing (ArgumentNullException).
El directorio no existe o es un archivo (DirectoryNotFoundException).
El usuario no tiene permiso para eliminar el directorio o subdirectorio (IOException).
Un archivo del directorio o subdirectorio está en uso (IOException).
Un nombre de archivo o directorio contiene dos puntos (:) (NotSupportedException).
El parámetro OnUserCancel está establecido en ThrowException y el usuario cancela la operación
(OperationCanceledException).
El parámetro OnUserCancel está establecido en ThrowException y el directorio no se puede eliminar
(OperationCanceledException).
La ruta de acceso supera la longitud máxima definida por el sistema (PathTooLongException).
El parámetro showUI está establecido en AllDialogs y el usuario no tiene los permisos necesarios
(UnauthorizedAccessException).
Vea también
Tareas
Cómo: Eliminar un archivo en Visual Basic
Referencia
UICancelOption (Enumeración)
My.Computer.FileSystem.DeleteDirectory (Método)
RecycleOption (Enumeración)
UIOption (Enumeración)
DeleteDirectoryOption (Enumeración)
Conceptos del lenguaje Visual Basic

Cómo: Buscar subdirectorios con un modelo específico en


Visual Basic
El método My.Computer.FileSystem.GetDirectories (Método) devuelve una colección de sólo lectura de cadenas que
representan los nombres de ruta de acceso a los subdirectorios en un directorio. Puede utilizar el parámetro wildCards para
especificar un modelo concreto. Si desea incluir el contenido de subdirectorios en la búsqueda, establezca el parámetro
searchType en SearchOption.SearchAllSubDirectories.
Se devuelve una colección vacía si no se encuentra ningún directorio que coincida con el modelo especificado.
Para buscar subdirectorios con un modelo concreto
Utilice el método GetDirectories y proporcione el nombre y ruta de acceso del directorio que desee buscar. En el
ejemplo siguiente se devuelven todos los directorios de la estructura de directorios que contienen la palabra "Logs" en su
nombre y se agregan a ListBox1.
VB
For Each foundDirectory As String In _
My.Computer.FileSystem.GetDirectories( _
My.Computer.FileSystem.SpecialDirectories.MyDocuments, True, _
"*Logs*")

ListBox1.Items.Add(foundDirectory)
Next

Programación eficaz
Las condiciones siguientes pueden producir una excepción:
La ruta de acceso no es válida por una de las razones siguientes: es una cadena de longitud cero, sólo contiene un
espacio en blanco, contiene caracteres no válidos o es una ruta de acceso de dispositivo (empieza por \\.\)
(ArgumentException).
La ruta de acceso no es válida porque es Nothing (ArgumentNullException).
Uno o más de los caracteres comodín especificados es Nothing, una cadena vacía o contiene sólo espacios
(ArgumentNullException).
directory no existe (DirectoryNotFoundException).
directory señala a un archivo existente (IOException).
La ruta de acceso supera la longitud máxima definida por el sistema (PathTooLongException).
Un nombre de archivo o de carpeta en la ruta de acceso contiene dos puntos (:) o está en un formato no válido
(NotSupportedException).
El usuario no tiene los permisos necesarios para ver la ruta de acceso (SecurityException).
El usuario no tiene los permisos necesarios (UnauthorizedAccessException).
Vea también
Tareas
Cómo: Buscar archivos con un modelo específico en Visual Basic
Referencia
My.Computer.FileSystem.GetDirectories (Método)
Conceptos del lenguaje Visual Basic

Cómo: Obtener la colección de archivos de un directorio en


Visual Basic
El My.Computer.FileSystem.GetFiles (Método) devuelve una colección de cadenas de sólo lectura que representa los nombres
de los archivos contenidos en un directorio. Puede utilizar el parámetro wildCards para especificar un modelo concreto. Para
incluir los subdirectorios en la búsqueda, establezca el parámetro searchType en SearchOption.SearchAllSubDirectories.
Se devuelve una colección vacía si no se encuentra ningún archivo que coincida con el modelo especificado.
Para mostrar una lista de los archivos existentes en un directorio
Utilice el método GetFiles, proporcionando el nombre y ruta de acceso del directorio en el que buscar. El ejemplo
siguiente devuelve todos los archivos contenidos en el directorio y los agrega a ListBox1.
VB
For Each foundFile As String In My.Computer.FileSystem.GetFiles _
(My.Computer.FileSystem.SpecialDirectories.MyDocuments)
listBox1.Items.Add(foundFile)
Next

Este ejemplo de código también está disponible como fragmento de código de IntelliSense. En el selector de fragmentos
de código, se encuentra en Sistema de archivos - Procesando unidades, carpetas y archivos. Para obtener más
información, vea Cómo: Insertar fragmentos de código en el código (Visual Basic).
Programación eficaz
Las condiciones siguientes pueden producir una excepción:
La ruta de acceso no es válida por una de las razones siguientes: es una cadena de longitud cero, sólo contiene un
espacio en blanco, contiene caracteres no válidos o es una ruta de acceso de dispositivo (empieza por \\.\)
(ArgumentException).
La ruta de acceso no es válida porque es Nothing (ArgumentNullException).
directory no existe (DirectoryNotFoundException).
directory señala a un archivo existente (IOException).
La ruta supera la longitud máxima definida por el sistema (PathTooLongException).
Un nombre de archivo o de directorio de la ruta de acceso contiene un signo de dos puntos (:) o tiene un formato no
válido (NotSupportedException).
El usuario no tiene los permisos necesarios para ver la ruta de acceso (SecurityException).
El usuario no tiene los permisos necesarios (UnauthorizedAccessException).
Vea también
Tareas
Cómo: Buscar archivos con un modelo específico en Visual Basic
Cómo: Buscar subdirectorios con un modelo específico en Visual Basic
Referencia
My.Computer.FileSystem.GetFiles (Método)
Conceptos del lenguaje Visual Basic

Cómo: Determinar el número de archivos de un directorio en


Visual Basic
Puede utilizar el My.Computer.FileSystem.GetFiles (Método) para devolver una colección de sólo lectura de cadenas que
representan los nombres de los archivos situados en el directorio especificado. A continuación, puede utilizar la propiedad
Count para determinar el número de archivos que hay.
Para determinar el número de archivos contenidos en un directorio
1. Utilice el método GetFiles para devolver la colección de archivos incluidos en el directorio especificado. Este ejemplo
devuelve los archivos situados en el directorio denominado TestDir.
VB
Dim counter As _
System.Collections.ObjectModel.ReadOnlyCollection(Of String)
counter = My.Computer.FileSystem.GetFiles("C:\TestDir")

2. Utilice la propiedad Count para determinar el número de elementos que contiene la colección. Este ejemplo muestra el
resultado en un cuadro de mensaje.
VB
MsgBox("number of files is " & CStr(counter.Count))

Ejemplo
Este ejemplo, que presenta el miniprograma anterior en formulario completo, cuenta el número de archivos existentes en
TestDir y lo presenta en un cuadro de mensaje.

VB
Dim counter As _
System.Collections.ObjectModel.ReadOnlyCollection(Of String)
counter = My.Computer.FileSystem.GetFiles("C:\TestDir")
MsgBox("number of files is " & CStr(counter.Count))

Compilar el código
Para este ejemplo se necesita:
Acceso a los miembros del espacio de nombres System.Collections. Agregue una instrucción Imports si no incluye
nombres de miembro completos en el código. Para obtener más información, vea Imports (Instrucción).
Un directorio denominado TestDir en la ubicación especificada. Reemplace la ruta de acceso con la ruta de acceso del
directorio que desea examinar.

Programación eficaz
Las condiciones siguientes pueden producir una excepción:
La ruta de acceso no es válida por una de las razones siguientes: es una cadena de longitud cero, sólo contiene un
espacio en blanco, contiene caracteres no válidos o es una ruta de acceso de dispositivo (empieza por \\.\)
(ArgumentException).
La ruta de acceso no es válida porque es Nothing (ArgumentNullException).
El directorio no existe o es un archivo (DirectoryNotFoundException).
directory señala a un archivo existente (IOException).
La ruta supera la longitud máxima definida por el sistema (PathTooLongException).
Un nombre de archivo o de carpeta en la ruta de acceso contiene dos puntos (:) o está en un formato no válido
(NotSupportedException).
El usuario no tiene los permisos necesarios para ver la ruta de acceso (SecurityException).
El usuario no tiene los permisos necesarios (UnauthorizedAccessException).
Vea también
Tareas
Cómo: Obtener la colección de archivos de un directorio en Visual Basic
Cómo: Buscar archivos con un modelo específico en Visual Basic
Referencia
My.Computer.FileSystem.GetFiles (Método)
Otros recursos
Propiedades de archivos, directorios y unidades en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Mover un directorio en Visual Basic


El My.Computer.FileSystem.MoveDirectory (Método) se puede utilizar para mover directorios.
Si se intenta mover un directorio dentro de otro directorio que no existe, se creará el directorio de destino.
Si overwrite es True y el directorio de destino ya existe, los nuevos archivos se agregarán a los archivos existentes en el
directorio. Los archivos existentes en el directorio de destino se sobrescribirán si el directorio de origen contiene archivos con
el mismo nombre.
Para mover un directorio
Utilice el método MoveDirectory para mover un directorio, especificando los directorios de origen y destino. En este
ejemplo se mueve Dir1 hasta dentro de Dir2.
VB
My.Computer.FileSystem.MoveDirectory("C:\Dir1", "C:\Dir2")

Para mover un directorio y sobrescribir los directorios existentes


Utilice el método MoveDirectory para mover un directorio, especificando los directorios de origen y destino. El ejemplo
siguiente mueve Dir1 hasta dentro de Dir2, agregando sus archivos a los archivos existentes si el directorio de destino
ya existe.
VB
My.Computer.FileSystem.MoveDirectory("C:\Dir1", "C:\Dir2", True)

Programación eficaz
Las condiciones siguientes pueden producir una excepción:
La ruta de acceso no es válida por una de las razones siguientes: es una cadena de longitud cero, sólo contiene un
espacio en blanco, contiene caracteres no válidos o es una ruta de acceso de dispositivo (empieza por \\.\)
(ArgumentException).
La ruta de acceso es Nothing (ArgumentNullException).
El directorio de origen no es válido (DirectoryNotFoundException).
El directorio de origen es un directorio raíz (IOException).
La ruta de acceso combinada apunta a un archivo existente (IOException).
La ruta de acceso de origen y la ruta de acceso de destino son iguales (IOException).
El archivo de destino existe y overwrite está establecido en False (IOException).
No se puede copiar un subdirectorio de archivos (IOException).
La operación es cíclica (InvalidOperationException).
Un nombre de archivo o de directorio incluido en la ruta de acceso contiene un signo de dos puntos (:)
(NotSupportedException).
onUserCancel está establecido en UICancelOption.ThrowException y el usuario cancela la operación
(OperationCanceledException).
onUserCancel está establecido en UICancelOption.ThrowException y no se puede finalizar la operación
(OperationCanceledException).
La ruta supera la longitud máxima definida por el sistema (PathTooLongException).
onUserCancel está establecido en UICancelOption.ThrowException y el usuario no tiene los permisos necesarios
(SecurityException).
El usuario no tiene permiso para modificar el archivo (UnauthorizedAccessException).
Vea también
Tareas
Cómo: Mover el contenido de un directorio en Visual Basic
Cómo: Copiar un directorio en otro directorio en Visual Basic
Cómo: Cambiar el nombre de un directorio en Visual Basic
Cómo: Analizar rutas de acceso a archivos en Visual Basic
Otros recursos
Crear, eliminar y mover archivos y directorios en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Mover el contenido de un directorio en Visual Basic


Utilice el My.Computer.FileSystem.GetFiles (Método) para obtener la lista de archivos contenidos en una carpeta y use el
My.Computer.FileSystem.MoveFile (Método) para mover archivos de unos directorios a otros.
Si la estructura de destino no existe cuando se llame a MoveFile, se creará.
Para mover el contenido de un directorio
Utilice el método GetFiles para obtener la lista de archivos del directorio, seguido del método MoveFile,
proporcionando el archivo de código fuente y el directorio al que desea moverlo. Este ejemplo mueve todos los archivos
situados en el directorio Mis documentos al directorio denominado StorageDir.
VB
For Each foundFile As String In My.Computer.FileSystem.GetFiles( _
My.Computer.FileSystem.SpecialDirectories.MyDocuments, _
FileIO.SearchOption.SearchAllSubDirectories, "*.*")

My.Computer.FileSystem.MoveFile(foundFile, "C:\StorageDir")
Next

Programación eficaz
Las condiciones siguientes pueden producir una excepción:
La ruta de acceso no es válida por una de las razones siguientes: es una cadena de longitud cero, sólo contiene un
espacio en blanco, contiene caracteres no válidos o es una ruta de acceso de dispositivo (empieza por \\.\)
(ArgumentException).
La ruta de acceso no es válida porque es Nothing (ArgumentNullException).
directory no existe (DirectoryNotFoundException).
directory señala a un archivo existente (IOException).
La ruta supera la longitud máxima definida por el sistema (PathTooLongException).
Un nombre de archivo o de directorio de la ruta de acceso contiene un signo de dos puntos (:) o tiene un formato no
válido (NotSupportedException).
El usuario no tiene los permisos necesarios para ver la ruta de acceso (SecurityException).
El usuario no tiene los permisos necesarios (UnauthorizedAccessException).
Vea también
Tareas
Cómo: Cambiar el nombre de un archivo en Visual Basic
Cómo: Mover un archivo en Visual Basic
Cómo: Crear una copia de un archivo en un directorio diferente en Visual Basic
Cómo: Analizar rutas de acceso a archivos en Visual Basic
Cómo: Mover un directorio en Visual Basic
Solución de problemas: Leer y escribir en archivos de texto
Cómo: Mover una colección de archivos en Visual Basic
Referencia
My.Computer.FileSystem.MoveFile (Método)
My.Computer.FileSystem.GetFiles (Método)
Conceptos del lenguaje Visual Basic

Cómo: Recuperar el contenido del directorio Mis documentos


en Visual Basic
El My.Computer.FileSystem.SpecialDirectories (Objeto) se puede utilizar para leer de muchos de los directorios Todos los
usuarios, como Mis documentos o Escritorio.
Para leer de la carpeta Mis documentos
Utilice el método ReadAllText para leer el texto de cada archivo situado en un directorio concreto. El código siguiente
especifica un directorio y un archivo y, a continuación, utiliza ReadAllText para leerlos y colocarlos en la cadena
denominada patients.
VB
Dim path As String
Dim patients As String
path = My.Computer.FileSystem.SpecialDirectories.MyDocuments & "\" & "Patients.txt"
patients = My.Computer.FileSystem.ReadAllText(path)

Vea también
Referencia
My.Computer.FileSystem.SpecialDirectories (Objeto)
My.Computer.FileSystem.SpecialDirectories (Miembros del objeto)
My.Computer.FileSystem.ReadAllText (Método)
Conceptos del lenguaje Visual Basic

Cómo: Analizar rutas de acceso a archivos en Visual Basic


My.Computer.FileSystem (Objeto) proporciona varios métodos útiles en el análisis de rutas de acceso a archivos.
My.Computer.FileSystem.CombinePath (Método) toma dos rutas de acceso y devuelve una ruta de acceso combinada
con formato correcto.
My.Computer.FileSystem.GetParentPath (Método) devuelve la ruta de acceso absoluta del elemento principal de la ruta
de acceso proporcionada.
My.Computer.FileSystem.GetFileInfo (Método) devuelve un objeto FileInfo que se puede consultar para determinar las
propiedades del archivo, como su nombre y ruta de acceso.
No debe deducir nada sobre el contenido del archivo a partir de la extensión del nombre del archivo. Por ejemplo, es posible
que el archivo Form1.vb no sea un archivo de código fuente de Visual Basic.
Para determinar el nombre y la ruta de acceso de un archivo
Utilice las propiedades DirectoryName y Name del objeto FileInfo para determinar el nombre y la ruta de acceso de un
archivo. Este ejemplo determina el nombre y la ruta de acceso y los muestra.
VB
Dim testFile As System.IO.FileInfo
testFile = My.Computer.FileSystem.GetFileInfo("C:\TestFolder1\test1.txt")
Dim folderPath As String = testFile.DirectoryName
MsgBox(folderPath)
Dim fileName As String = testFile.Name
MsgBox(fileName)

Para combinar el nombre y el directorio de un archivo y crear la ruta de acceso completa


Utilice el método CombinePath, proporcionando el directorio y nombre. Este ejemplo toma las cadenas folderPath y
fileName creadas en el ejemplo anterior, las combina y muestra el resultado.

VB
Dim fullPath As String
fullPath = My.Computer.FileSystem.CombinePath(folderPath, fileName)
MsgBox(fullPath)

Vea también
Tareas
Cómo: Obtener la colección de archivos de un directorio en Visual Basic
Cómo: Determinar la ruta de acceso absoluta de un archivo en Visual Basic
Cómo: Obtener información acerca de un archivo en Visual Basic
Referencia
My.Computer.FileSystem (Objeto)
My.Computer.FileSystem.CombinePath (Método)
My.Computer.FileSystem.GetFileInfo (Método)
FileInfo
Conceptos del lenguaje Visual Basic

Propiedades de archivos, directorios y unidades en Visual Basic


Esta sección contiene temas sobre cómo obtener y establecer propiedades de archivos, directorios y unidades.
En esta sección
Cómo: Obtener información acerca de un archivo en Visual Basic
Muestra cómo obtener información sobre un archivo, como la fecha y hora de último acceso.
Cómo: Determinar la ruta de acceso absoluta de un archivo en Visual Basic
Muestra cómo determinar la ruta de acceso absoluta de un archivo.
Cómo: Determinar la extensión de un archivo en Visual Basic
Explica cómo determinar la extensión de un archivo.
Cómo: Determinar cuándo se tuvo acceso por última vez a un archivo en Visual Basic
Muestra cómo determinar la última vez que se tuvo acceso a un archivo.
Cómo: Determinar cuándo se modificó por última vez a un archivo en Visual Basic
Explica cómo determinar la última vez que se modificó un archivo.
Cómo: Determinar el tamaño de un archivo en Visual Basic
Muestra cómo determinar el tamaño en bytes de un archivo.
Cómo: Determinar cuándo se creó un archivo en Visual Basic
Explica cómo determinar cuándo se creó un archivo.
Cómo: Determinar si un archivo está oculto en Visual Basic
Muestra cómo determinar si un archivo está oculto.
Cómo: Determinar si un archivo es de sólo lectura en Visual Basic
Explica cómo determinar si un archivo es de sólo lectura.
Cómo: Determinar los atributos de un archivo en Visual Basic
Muestra cómo determinar los atributos de un archivo.
Cómo: Determinar cuándo se creó un directorio en Visual Basic
Explica cómo determinar cuándo se creó un directorio.
Cómo: Determinar si un directorio es de sólo lectura en Visual Basic
Muestra cómo determinar si un directorio es de sólo lectura.
Cómo: Determinar los atributos de un directorio en Visual Basic
Explica cómo determinar los atributos de un directorio.
Cómo: Determinar si existe un archivo en Visual Basic
Muestra cómo determinar si un archivo existe.
Cómo: Determinar si existe un directorio en Visual Basic
Explica cómo determinar si existe un archivo.
Cómo: Determinar la etiqueta de volumen de una unidad en Visual Basic
Muestra cómo determinar la etiqueta del volumen de una unidad.
Cómo: Determinar el formato de una unidad en Visual Basic
Explica cómo determinar el tipo de sistema de archivos de una unidad.
Cómo: Determinar el tipo de una unidad en Visual Basic
Muestra cómo determinar el tipo de una unidad.
Muestra cómo determinar el tipo de una unidad.
Cómo: Determinar el espacio total de una unidad en Visual Basic
Explica cómo determinar el espacio total de una unidad.
Cómo: Determinar el espacio físico libre de una unidad en Visual Basic
Explica cómo determinar el espacio libre físico de una unidad.
Cómo: Determinar el directorio raíz de una unidad en Visual Basic
Muestra cómo determinar el directorio raíz de una unidad.
Cómo: Determinar el directorio System de Windows en Visual Basic
Explica cómo averiguar la ubicación del directorio System de Windows.
Referencia
My.Computer.FileSystem (Objeto)
Describe el objeto My.Computer.FileSystem y sus métodos y propiedades.
My.Computer.FileSystem.DirectoryExists (Método)
Describe el método DirectoryExists.
My.Computer.FileSystem.FileExists (Método)
Explica el método FileExists.
My.Computer.FileSystem.GetDirectoryInfo (Método)
Describe el método GetDirectoryInfo.
My.Computer.FileSystem.GetFileInfo (Método)
Describe el método GetFileInfo.
My.Computer.FileSystem.GetParentPath (Método)
Explica el método GetParentPath.
Secciones relacionadas
FileInfo
Describe el objeto FileInfo.
DirectoryInfo
Describe el objeto DirectoryInfo.
FileAttributes
Explica la enumeración FileAttributes.
Escribir en archivos en Visual Basic
Enumera las tareas relacionadas con la escritura en archivos.
Leer archivos en Visual Basic
Enumera las tareas que implican la lectura de archivos.
Crear, eliminar y mover archivos y directorios en Visual Basic
Muestra las tareas relacionadas con la creación, la eliminación y el desplazamiento de directorios y archivos.
Conceptos del lenguaje Visual Basic

Cómo: Obtener información acerca de un archivo en Visual


Basic
El método My.Computer.FileSystem.GetFileInfo (Método) se puede utilizar para determinar fácilmente información sobre las
propiedades de un archivo. Las propiedades del objeto FileInfo incluyen atributos, hora de creación, directorio, nombre de
directorio, si existe, extensión, nombre completo, hora del último acceso, hora de la última escritura, longitud y nombre.
No se produce una excepción si el archivo no existe; por el contrario, se produce la primera vez que se tiene acceso a las
propiedades del objeto.
Nota
Las opciones disponibles en los cuadros de diálogo y los nombres y ubicaciones de los comandos de menú que se ven podr
ían diferir de lo que se describe en la Ayuda, según los valores de configuración o de edición activos. Esta página de Ayuda se
ha redactado teniendo en cuenta la Configuración general de desarrollo. Para cambiar la configuración, elija la opción Im
portar y exportar configuraciones en el menú Herramientas. Para obtener más información, vea
Valores de configuración de Visual Studio.

Procedimiento
Obtener información sobre un archivo
1. Utilice el método GetFileInfo para recuperar un objeto FileInfo que se puede examinar para determinar sus
propiedades. En el ejemplo siguiente se recupera un objeto FileInfo a partir del archivo MyLogFile.log.
VB
Dim information As System.IO.FileInfo
information = My.Computer.FileSystem.GetFileInfo("C:\MyLogFile.log")

2. Examine el objeto FileInfo para extraer la información necesaria. Las líneas siguientes de código indican el nombre
completo del archivo, hora del último acceso y longitud.
VB
MsgBox("The file's full name is " & information.FullName & ".")
MsgBox("Last access time is " & information.LastAccessTime & ".")
MsgBox("The length is " & information.Length & ".")

Programación eficaz
Las condiciones siguientes pueden producir una excepción:
El nombre de la ruta de acceso está mal formado. Por ejemplo, contiene caracteres no válidos o está compuesto sólo por
espacios en blanco (ArgumentException).
El archivo no existe o es Nothing (ArgumentNullException).
La ruta de acceso contiene un signo de dos puntos en el medio de la cadena (NotSupportedException).
La ruta de acceso es demasiado larga (PathTooLongException).
El usuario no tiene los permisos necesarios (SecurityException).
El usuario no tiene acceso de ACL (lista de control de acceso) al archivo (UnauthorizedAccessException).
Vea también
Tareas
Tutorial: Manipular archivos y directorios en Visual Basic
Referencia
FileInfo
Otros recursos
Acceso a archivos con Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Determinar la ruta de acceso absoluta de un archivo en


Visual Basic
El My.Computer.FileSystem.GetFileInfo (Método) devuelve un objeto FileInfo que se puede utilizar para averiguar información
sobre un archivo, incluida su ubicación, que se encuentra en la propiedad FullName.
Si no existe un archivo, GetFileInfo no produce ninguna excepción, pero sí se produce una la primera vez que se tiene acceso
a una propiedad del objeto System.IO.FileInfo.
Procedimiento
Para determinar la ruta de acceso absoluta de un archivo
Utilice el método GetFileInfo para devolver un objeto FileInfo para el archivo que desea examinar. La propiedad
FullName contiene la ruta de acceso absoluta. El ejemplo siguiente determina la ruta de acceso absoluta de Test.txt y
la muestra en un cuadro de mensaje.
VB
Dim getInfo As System.IO.FileInfo
getInfo = My.Computer.FileSystem.GetFileInfo("C:\TestFolder1\test.txt")
MsgBox(getInfo.FullName)

Programación eficaz
Las condiciones siguientes pueden producir una excepción:
El nombre de la ruta de acceso está mal formado. Por ejemplo, contiene caracteres no válidos o está compuesto sólo por
espacios en blanco (ArgumentException).
El archivo no existe o es Nothing (ArgumentNullException).
La ruta de acceso contiene un dos puntos en medio de la cadena (NotSupportedException).
La ruta de acceso es demasiado larga (PathTooLongException).
El usuario no tiene los permisos necesarios (SecurityException).
El usuario no tiene acceso ACL (lista de control de acceso) al archivo (UnauthorizedAccessException).
Vea también
Tareas
Cómo: Analizar rutas de acceso a archivos en Visual Basic
Referencia
My.Computer.FileSystem.GetFileInfo (Método)
FileInfo
Conceptos del lenguaje Visual Basic

Cómo: Determinar la extensión de un archivo en Visual Basic


El My.Computer.FileSystem.GetFiles (Método) devuelve los nombres de archivos como una colección de cadenas de sólo
lectura, que se pueden analizar con la Split (Función, Visual Basic).
Para determinar la extensión de un archivo
Recupere la ruta de acceso o el nombre del archivo y la función Split para determinar la extensión proporcionando el
delimitador. Este ejemplo utiliza el método GetFiles para devolver la colección de los nombres de los archivos existentes
en el directorio testDirectory e informa de la extensión de cada archivo.
VB
For Each foundFile As String In _
My.Computer.FileSystem.GetFiles("C:\TestDir")
Dim check As String = _
System.IO.Path.GetExtension(foundFile)
MsgBox("The file extension is " & check)
Next

Vea también
Tareas
Cómo: Buscar una cadena en una matriz de cadenas (Visual Basic)
Cómo: Analizar rutas de acceso a archivos en Visual Basic
Referencia
My.Computer.FileSystem.GetFiles (Método)
Path
Conceptos del lenguaje Visual Basic

Cómo: Determinar cuándo se tuvo acceso por última vez a un


archivo en Visual Basic
El método My.Computer.FileSystem.GetFileInfo (Método) se puede utilizar para obtener un objeto FileInfo, que contiene
información sobre el archivo especificado.
Puede utilizar las propiedades LastAccessTime o LastAccessTimeUtc para obtener o establecer la fecha y hora de último
acceso al archivo. LastAccessTimeUtc muestra la hora en el formato de hora universal coordinada (UTC). Para obtener más
información, vea Cadenas de formato de fecha y hora.
Nota
Las opciones disponibles en los cuadros de diálogo, y los nombres y las ubicaciones de los comandos de menú que se ven p
odrían diferir de lo que se describe en la Ayuda, en función de los valores de configuración o de edición activos. Esta página
de Ayuda se ha redactado teniendo en cuenta la Configuración general de desarrollo. Para cambiar la configuración, elija
la opción Importar y exportar configuraciones en el menú Herramientas. Para obtener más información, vea
Valores de configuración de Visual Studio.

Para determinar la hora del último acceso a un archivo


Utilice el método GetFileInfo para devolver un objeto FileInfo para el archivo, que puede consultarse para obtener
información. Este ejemplo obtiene un objeto FileInfo para Testfile.txt y utiliza la propiedad LastAccessTime para
mostrar la hora del último acceso al mismo.
VB
Dim infoReader As System.IO.FileInfo
infoReader = My.Computer.FileSystem.GetFileInfo("C:\testfile.txt")
MsgBox("File was last accessed on " & infoReader.LastAccessTime)

Vea también
Tareas
Cómo: Determinar los atributos de un archivo en Visual Basic
Cómo: Determinar cuándo se creó un archivo en Visual Basic
Referencia
My.Computer.FileSystem (Objeto)
My.Computer.FileSystem.GetFileInfo (Método)
Otros recursos
Crear, eliminar y mover archivos y directorios en Visual Basic
Propiedades de archivos, directorios y unidades en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Determinar cuándo se modificó por última vez a un


archivo en Visual Basic
El método My.Computer.FileSystem.GetFileInfo (Método) puede utilizarse para obtener un objeto FileInfo que contiene
información sobre el archivo especificado.
Puede utilizar la propiedad LastWriteTime o LastWriteTimeUtc para obtener o establecer la hora de la última modificación
del archivo. LastWriteTimeUtc muestra la hora con el formato de hora universal coordinada (UTC). Para obtener más
información, vea Cadenas de formato de fecha y hora.
Nota
Las opciones disponibles en los cuadros de diálogo y los nombres y ubicaciones de los comandos de menú que se ven podr
ían diferir de lo que se describe en la Ayuda, según los valores de configuración o de edición activos. Esta página de Ayuda se
ha redactado teniendo en cuenta la Configuración general de desarrollo. Para cambiar la configuración, elija la opción Im
portar y exportar configuraciones en el menú Herramientas. Para obtener más información, vea
Valores de configuración de Visual Studio.

Para determinar la hora de la última modificación de un archivo


Utilice el método GetFileInfo para devolver un objeto FileInfo para el archivo, que puede consultarse para obtener
información. En este ejemplo se obtiene un objeto FileInfo para Testfile.txt y se utiliza la propiedad LastWriteTime
para mostrar la hora del último acceso.
VB
Dim infoReader As System.IO.FileInfo
infoReader = My.Computer.FileSystem.GetFileInfo("C:\testfile.txt")
MsgBox("File was last modified on " & infoReader.LastWriteTime)

Vea también
Tareas
Cómo: Determinar los atributos de un archivo en Visual Basic
Cómo: Determinar cuándo se creó un archivo en Visual Basic
Referencia
My.Computer.FileSystem (Objeto)
My.Computer.FileSystem.GetFileInfo (Método)
Otros recursos
Propiedades de archivos, directorios y unidades en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Determinar el tamaño de un archivo en Visual Basic


El método My.Computer.FileSystem.GetFileInfo (Método) puede utilizarse para obtener un objeto FileInfo que contiene
información sobre el archivo especificado.
Puede utilizar la propiedad Length para determinar el tamaño del archivo en bytes.
Nota
Las opciones disponibles en los cuadros de diálogo y los nombres y ubicaciones de los comandos de menú que se ven podrí
an diferir de lo que se describe en la Ayuda, según los valores de configuración o de edición activos. Esta página de Ayuda se
ha redactado teniendo en cuenta la Configuración general de desarrollo. Para cambiar la configuración, elija la opción Im
portar y exportar configuraciones en el menú Herramientas. Para obtener más información, vea
Valores de configuración de Visual Studio.

Para determinar el tamaño de un archivo


Utilice el método GetFileInfo a fin de devolver un objeto FileInfo para el archivo, que puede consultarse para obtener
información. En este ejemplo se obtiene un objeto FileInfo para Testfile.txt y se utiliza la propiedad Length para
mostrar el tamaño del archivo en bytes.
VB
Dim infoReader As System.IO.FileInfo
infoReader = My.Computer.FileSystem.GetFileInfo("C:\testfile.txt")
MsgBox("File is " & infoReader.Length & " bytes.")

Vea también
Tareas
Cómo: Determinar los atributos de un archivo en Visual Basic
Referencia
My.Computer.FileSystem (Objeto)
My.Computer.FileSystem.GetFileInfo (Método)
Otros recursos
Propiedades de archivos, directorios y unidades en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Determinar cuándo se creó un archivo en Visual Basic


El método My.Computer.FileSystem.GetFileInfo (Método) puede utilizarse para obtener un objeto FileInfo que contiene
información sobre el archivo especificado.
Puede utilizar la propiedad CreationTime o CreationTimeUtc para obtener o establecer la hora del último acceso al archivo.
CreationTimeUtc muestra la hora con el formato de hora universal coordinada (UTC). Para obtener más información, vea
Cadenas de formato de fecha y hora.
Nota
Las opciones disponibles en los cuadros de diálogo y los nombres y ubicaciones de los comandos de menú que se ven podrí
an diferir de lo que se describe en la Ayuda, según los valores de configuración o de edición activos. Esta página de Ayuda se
ha redactado teniendo en cuenta la Configuración general de desarrollo. Para cambiar la configuración, elija la opción Im
portar y exportar configuraciones en el menú Herramientas. Para obtener más información, vea
Valores de configuración de Visual Studio.

Para determinar la hora de creación de un archivo


Utilice el método GetFileInfo a fin de devolver un objeto FileInfo para el archivo, que puede consultarse para obtener
información. En este ejemplo se obtiene un objeto FileInfo para Testfile.txt y se utiliza la propiedad CreationTime
para mostrar la hora de creación.
VB
Dim infoReader As System.IO.FileInfo
infoReader = My.Computer.FileSystem.GetFileInfo("C:\testfile.txt")
MsgBox("File was created on " & infoReader.CreationTime)

Vea también
Tareas
Cómo: Determinar los atributos de un archivo en Visual Basic
Cómo: Determinar cuándo se tuvo acceso por última vez a un archivo en Visual Basic
Referencia
My.Computer.FileSystem (Objeto)
My.Computer.FileSystem.GetFileInfo (Método)
Otros recursos
Propiedades de archivos, directorios y unidades en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Determinar si un archivo está oculto en Visual Basic


El método My.Computer.FileSystem.GetFileInfo (Método) se puede utilizar para obtener un objeto FileInfo, que contiene
información sobre el archivo específico, incluida una enumeración FileAttributes.
Para determinar si un archivo está oculto
1. Obtenga un objeto FileInfo para el archivo que desea para examinar. Este ejemplo obtiene un objeto FileInfo para el
archivo Testfile.txt.
VB
Dim infoReader As System.IO.FileInfo
infoReader = My.Computer.FileSystem.GetFileInfo("C:\testfile.txt")

2. Obtenga un objeto FileAttributes desde el objeto FileInfo. Este ejemplo recibe FileAttributes del objeto FileInfo.
VB
Dim attributeReader As System.IO.FileAttributes
attributeReader = infoReader.Attributes

3. Consulte FileAttributes para determinar si el archivo está oculto. Este ejemplo determina si el archivo está oculto y
muestra el resultado correspondiente.
VB
If (attributeReader And System.IO.FileAttributes.Hidden) > 0 Then
MsgBox("File is hidden!")
Else
MsgBox("File is not hidden!")
End If

Vea también
Tareas
Cómo: Determinar los atributos de un archivo en Visual Basic
Referencia
My.Computer.FileSystem (Objeto)
My.Computer.FileSystem (Miembros del objeto)
My.Computer.FileSystem.GetFileInfo (Método)
Otros recursos
Propiedades de archivos, directorios y unidades en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Determinar si un archivo es de sólo lectura en Visual


Basic
El método My.Computer.FileSystem.GetFileInfo (Método) puede utilizarse para obtener un objeto FileInfo que contiene
información sobre el archivo especificado.
Nota
Las opciones disponibles en los cuadros de diálogo y los nombres y ubicaciones de los comandos de menú que se ven podr
ían diferir de lo que se describe en la Ayuda, según los valores de configuración o de edición activos. Esta página de Ayuda se
ha redactado teniendo en cuenta la Configuración general de desarrollo. Para cambiar la configuración, elija la opción Im
portar y exportar configuraciones en el menú Herramientas. Para obtener más información, vea
Valores de configuración de Visual Studio.

Para determinar si un archivo es de sólo lectura


Utilice el método GetFileInfo a fin de devolver un objeto FileInfo para el archivo, que puede consultarse para obtener
información. En este ejemplo se obtiene un objeto FileInfo para Testfile.txt y se muestra el mensaje adecuado si la
propiedad IsReadOnly se establece en True.
VB
Dim infoReader As System.IO.FileInfo
infoReader = My.Computer.FileSystem.GetFileInfo("C:\testfile.txt")
If infoReader.IsReadOnly = True Then
MsgBox("File is readonly!")
End If

Vea también
Tareas
Cómo: Determinar si un directorio es de sólo lectura en Visual Basic
Referencia
My.Computer.FileSystem (Objeto)
My.Computer.FileSystem.GetFileInfo (Método)
Otros recursos
Propiedades de archivos, directorios y unidades en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Determinar los atributos de un archivo en Visual Basic


El método My.Computer.FileSystem.GetFileInfo (Método) se puede utilizar para obtener un objeto FileInfo, que contiene
información sobre el archivo específico, incluida una enumeración FileAttributes.
Esta tabla muestra los miembros de FileAttributes.
Miembro Descripción
Archive El estado de almacenamiento del archivo. Las aplicaciones utilizan este atributo para marcar los archivos p
ara incluirlos en copias de seguridad o eliminación.

Compressed El archivo está comprimido.

Device Este miembro no se utiliza por el momento.

Directory El archivo es un directorio.

Encrypted Todos los datos del archivo están cifrados.

Hidden El archivo está oculto y no se mostrará en una lista normal de directorio.

Normal El archivo no establecido ningún otro atributo.

NotContentIndexed El servicio de Index Server de contenido del sistema operativo no indizará el archivo.

Offline El archivo no tiene conexión. Los datos del archivo no están inmediatamente disponibles.

ReadOnly El archivo es de sólo lectura.

ReparsePoint El archivo contiene un punto de nuevo análisis, que es un bloque de datos definidos por el usuario.

SparseFile El archivo es un archivo disperso. Los archivos dispersos suelen ser archivos grandes que contienen datos
que son ceros en su mayoría.

System El archivo es un archivo de sistema. El archivo forma parte del sistema operativo o lo utiliza exclusivament
e el sistema operativo.

Temporary El archivo es temporal. Los sistemas de archivos intentan conservar en memoria todos los datos para que
el acceso sea más rápido, en lugar de vaciando los datos para devolverlos al almacenamiento masivo. La a
plicación debería eliminar los archivos temporales tan pronto dejan de ser necesarios.

Para determinar si un archivo está cifrado


1. Obtenga un objeto FileInfo para el archivo que desea para examinar. Este ejemplo obtiene un objeto FileInfo para el
archivo Testfile.txt.
VB
Dim infoReader As System.IO.FileInfo
infoReader = My.Computer.FileSystem.GetFileInfo("C:\testfile.txt")

2. Obtenga un objeto FileAttributes desde el objeto FileInfo. Este ejemplo recibe FileAttributes del objeto FileInfo.
VB
Dim attributeReader As System.IO.FileAttributes
attributeReader = infoReader.Attributes

3. Consulte FileAttributes. Este ejemplo determina si el archivo está cifrado y muestra el resultado correspondiente.
VB
If (attributeReader And System.IO.FileAttributes.Encrypted) > 0 Then
MsgBox("File is encrypted!")
Else
MsgBox("File is not encrypted!")
End If

Vea también
Tareas
Cómo: Determinar si un archivo está oculto en Visual Basic
Referencia
My.Computer.FileSystem (Objeto)
My.Computer.FileSystem.GetFileInfo (Método)
FileAttributes
FileInfo
Otros recursos
Propiedades de archivos, directorios y unidades en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Determinar cuándo se creó un directorio en Visual Basic


El My.Computer.FileSystem.GetDirectoryInfo (Método) devuelve un objeto DirectoryInfo que se puede consultar para obtener
información sobre el directorio.
Si el directorio no existe, no se produce ninguna excepción hasta la primera vez que se tiene acceso a una propiedad del objeto
DirectoryInfo.
Nota
Las opciones disponibles en los cuadros de diálogo, y los nombres y las ubicaciones de los comandos de menú que se ven
podrían diferir de lo que se describe en la Ayuda, en función de los valores de configuración o de edición activos. Esta página
de Ayuda se ha redactado teniendo en cuenta la Configuración general de desarrollo. Para cambiar la configuración, elija
la opción Importar y exportar configuraciones en el menú Herramientas. Para obtener más información, vea
Valores de configuración de Visual Studio.

Para determinar la hora de creación de un directorio


Utilice el método GetDirectoryInfo para recuperar un objeto DirectoryInfo para el directorio y consulte la propiedad
CreationTime. Este ejemplo muestra el objeto CreationTime para el directorio C:\Documents and Settings.
VB
Dim getInfo As System.IO.DirectoryInfo
getInfo = My.Computer.FileSystem.GetDirectoryInfo _
("C:\Documents and Settings")
MsgBox("The directory was created at " & getInfo.CreationTime)

Programación eficaz
Las condiciones siguientes pueden producir una excepción:
La ruta de acceso no es válida por una de las razones siguientes: es una cadena de longitud cero; sólo contiene un
espacio en blanco; contiene caracteres no válidos; o es una ruta de acceso de dispositivo (empieza por \\.\)
(ArgumentException).
La ruta de acceso no es válida porque es Nothing (ArgumentNullException).
La ruta supera la longitud máxima definida por el sistema (PathTooLongException).
Un nombre de archivo o de directorio de la ruta de acceso contiene un signo de dos puntos (:) o tiene un formato no
válido (NotSupportedException).
El usuario no tiene los permisos necesarios para ver la ruta de acceso (SecurityException).
Vea también
Tareas
Cómo: Determinar si existe un directorio en Visual Basic
Solución de problemas: Leer y escribir en archivos de texto
Referencia
My.Computer.FileSystem.GetDirectoryInfo (Método)
DirectoryInfo
CreationTime
Conceptos del lenguaje Visual Basic

Cómo: Determinar si un directorio es de sólo lectura en Visual


Basic
El método My.Computer.FileSystem.GetDirectoryInfo (Método) devuelve un objeto DirectoryInfo con una propiedad Attributes
que se puede consultar para determinar información sobre el directorio, incluso si es de sólo lectura.
Nota
Las opciones disponibles en los cuadros de diálogo, y los nombres y las ubicaciones de los comandos de menú que se ven
podrían diferir de lo que se describe en la Ayuda, en función de los valores de configuración o de edición activos. Esta página
de Ayuda se ha redactado teniendo en cuenta la Configuración general de desarrollo. Para cambiar la configuración, elija
la opción Importar y exportar configuraciones en el menú Herramientas. Para obtener más información, vea
Valores de configuración de Visual Studio.

Para determinar si un directorio es de sólo lectura


1. Utilice el método GetDirectoryInfo para devolver un objeto DirectoryInfo para el directorio especificado. Este ejemplo
devuelve un objeto DirectoryInfo para el directorio TestDirectory.
VB
Dim reader As System.IO.DirectoryInfo
reader = My.Computer.FileSystem.GetDirectoryInfo("C:\testDirectory")

2. Consulte la propiedad Attributes del objeto para determinar si es de sólo lectura.


VB
If (reader.Attributes And System.IO.FileAttributes.ReadOnly) > 0 Then
MsgBox("Directory is readonly!")
End If

Ejemplo
El ejemplo siguiente, que presenta el fragmento de código anterior en su forma completa, determina si el directorio
testDirectory es de sólo lectura y presenta el resultado en un cuadro de mensaje.

VB
Dim reader As System.IO.DirectoryInfo
reader = My.Computer.FileSystem.GetDirectoryInfo("C:\testDirectory")
If (reader.Attributes And System.IO.FileAttributes.ReadOnly) > 0 Then
MsgBox("File is readonly!")
End If

Compilar el código
Si el directorio no existe, no se produce ninguna excepción hasta la primera vez que se tiene acceso a una propiedad del objeto
DirectoryInfo.
Programación eficaz
Las condiciones siguientes pueden producir una excepción:
La ruta de acceso no es válida por una de las razones siguientes: es una cadena de longitud cero; sólo contiene un
espacio en blanco; contiene caracteres no válidos; o es una ruta de acceso de dispositivo (empieza por \\.\)
(ArgumentException).
La ruta de acceso no es válida porque es Nothing (ArgumentNullException).
La ruta supera la longitud máxima definida por el sistema (PathTooLongException).
Un nombre de archivo o de directorio de la ruta de acceso contiene un signo de dos puntos (:) o tiene un formato no
válido (NotSupportedException).
El usuario no tiene los permisos necesarios para ver la ruta de acceso (SecurityException).
Vea también
Tareas
Cómo: Determinar los atributos de un directorio en Visual Basic
Referencia
My.Computer.FileSystem.GetDirectoryInfo (Método)
Conceptos del lenguaje Visual Basic

Cómo: Determinar los atributos de un directorio en Visual Basic


El método My.Computer.FileSystem.GetDirectoryInfo (Método) devuelve un objeto DirectoryInfo cuya propiedad Attributes se
puede consultar para conocer información sobre el directorio.
La tabla siguiente muestra los miembros de la enumeración FileAttributes utilizados por la propiedad Attributes.
Miembro Valor Descripción
numé
rico
ReadOnly 1 El archivo es de sólo lectura.

Hidden 2 El archivo está oculto y, por consiguiente, no está incluida en una lista de directorios normal.

System 4 El archivo es un archivo de sistema. El archivo forma parte del sistema operativo o lo utiliza exclusi
vamente el sistema operativo.

Directory 16 El archivo es un directorio.

Archive 32 El estado de almacenamiento del archivo. Las aplicaciones utilizan este atributo para marcar los arc
hivos para incluirlos en copias de seguridad o eliminación.

Device 64 No se utiliza.

Normal 128 El archivo es normal y tiene establecido ningún otro atributo. Este atributo sólo es válido si se utiliz
a por sí solo.

Temporary 256 El archivo es temporal. Los sistemas de archivos intentan conservar en memoria todos los datos pa
ra que el acceso sea más rápido. Los archivos temporales deberían eliminarse cuando ya no son ne
cesarios.

SparseFile 512 El archivo es un archivo disperso. Los archivos dispersos suelen ser archivos grandes que contiene
n datos que son ceros en su mayoría.

ReparsePoint 1024 El archivo contiene un punto de nuevo análisis, que es un bloque de datos definidos por el usuario
asociados a un archivo o directorio.

Compressed 2048 El archivo está comprimido.

Offline 4096 El archivo no tiene conexión y los datos no están inmediatamente disponibles.

NotContentIndexed 8192 El servicio de Index Server de contenido del sistema operativo no indizará el archivo.

Encrypted 16384 El archivo o directorio está cifrado. Para los archivos, esto significa que todos los datos del archivo
están cifrados. Para los directorios, esto implica que el cifrado es el valor predeterminado para los
archivos y directorios que se creen nuevos.

Para determinar si un directorio está oculto


Utilice el método GetDirectoryInfo para devolver un objeto DirectoryInfo. Este ejemplo devuelve DirectoryInfo para
el directorio TestDir, obtiene un objeto FileAttributes del objeto DirectoryInfo y lo comprueba para determinar si está
oculto o no. Puede comprobar otros atributos de manera parecida.
VB
Dim checkFile As System.IO.DirectoryInfo
checkFile = My.Computer.FileSystem.GetDirectoryInfo("C:\TestDir")
Dim attributeReader As System.IO.FileAttributes
attributeReader = checkFile.Attributes

If (attributeReader And System.IO.FileAttributes.Hidden) > 0 Then


MsgBox("Directory is hidden")
End If

Vea también
Tareas
Cómo: Determinar los atributos de un archivo en Visual Basic
Referencia
My.Computer.FileSystem.GetDirectoryInfo (Método)
DirectoryInfo
FileAttributes
Otros recursos
Propiedades de archivos, directorios y unidades en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Determinar si existe un archivo en Visual Basic


Puede utilizar My.Computer.FileSystem.FileExists (Método) para determinar si un archivo especificado existe o no.
Si la aplicación no tiene permisos suficientes para leer el archivo especificado, el método FileExists devuelve False exista o no
una ruta de acceso, pero no producirá una excepción.
Nota
Las opciones disponibles en los cuadros de diálogo, y los nombres y las ubicaciones de los comandos de menú que se ven p
odrían diferir de lo que se describe en la Ayuda, en función de los valores de configuración o de edición activos. Esta página
de Ayuda se ha redactado teniendo en cuenta la Configuración general de desarrollo. Para cambiar la configuración, elija
la opción Importar y exportar configuraciones en el menú Herramientas. Para obtener más información, vea
Valores de configuración de Visual Studio.

Procedimiento
Para determinar si existe un archivo
Utilice el método My.Computer.FileSystem.FileExists, proporcionando la ruta de acceso, determinar si el archivo
especificado existe o no. El ejemplo siguiente comprueba si el archivo Check.txt existe o no y proporciona la
información en un cuadro de mensaje.
VB
If My.Computer.FileSystem.FileExists("c://Check.txt") Then
MsgBox("File found.")
Else
MsgBox("File not found.")
End If

Vea también
Tareas
Cómo: Determinar si existe un directorio en Visual Basic
Solución de problemas: Leer y escribir en archivos de texto
Tutorial: Manipular archivos y directorios en Visual Basic
Referencia
My.Computer.FileSystem.FileExists (Método)
Otros recursos
Crear, eliminar y mover archivos y directorios en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Determinar si existe un directorio en Visual Basic


Puede utilizar el My.Computer.FileSystem.DirectoryExists (Método) para determinar si existe o no un directorio especificado.
La llamada a DirectoryExists requiere FileIOPermission.
Este método no produce excepciones.
Nota
Las opciones disponibles en los cuadros de diálogo, y los nombres y las ubicaciones de los comandos de menú que se ven
podrían diferir de lo que se describe en la Ayuda, en función de los valores de configuración o de edición activos. Esta página
de Ayuda se ha redactado teniendo en cuenta la Configuración general de desarrollo. Para cambiar la configuración, elija
la opción Importar y exportar configuraciones en el menú Herramientas. Para obtener más información, vea
Valores de configuración de Visual Studio.

Procedimiento
Para determinar si existe un directorio
Utilice el método My.Computer.FileSystem.DirectoryExists, proporcionando la ruta de acceso, para determinar si
existe el directorio especificado. El ejemplo siguiente realiza una comprobación para averiguar si existe el directorio
C:\backup\logs y revisa sus propiedades.

VB
Dim logDirectoryProperties As System.IO.DirectoryInfo
If My.Computer.FileSystem.DirectoryExists("C:\backup\logs") Then
logDirectoryProperties = My.Computer.FileSystem.GetDirectoryInfo("C:\backup\logs")
End If

Vea también
Tareas
Cómo: Determinar si existe un archivo en Visual Basic
Solución de problemas: Leer y escribir en archivos de texto
Tutorial: Manipular archivos y directorios en Visual Basic
Referencia
My.Computer.FileSystem.DirectoryExists (Método)
Otros recursos
Crear, eliminar y mover archivos y directorios en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Determinar la etiqueta de volumen de una unidad en


Visual Basic
El My.Computer.FileSystem.GetDriveInfo (Método) proporciona un objeto DriveInfo que puede consultarse para obtener
información sobre una unidad de un equipo. Puede utilizar la propiedad VolumeLabel para averiguar la etiqueta de la unidad.
Al intentar obtener acceso a la propiedad sin el permiso suficiente, se produce una excepción SecurityException.
Nota
Las opciones disponibles en los cuadros de diálogo, y los nombres y las ubicaciones de los comandos de menú que se ven
podrían diferir de lo que se describe en la Ayuda, en función de los valores de configuración o de edición activos. Esta página
de Ayuda se ha redactado teniendo en cuenta la Configuración general de desarrollo. Para cambiar la configuración, elija
la opción Importar y exportar configuraciones en el menú Herramientas. Para obtener más información, vea
Valores de configuración de Visual Studio.

Para determinar la etiqueta de volumen de una unidad


Utilice la propiedad VolumeLabel para determinar la etiqueta de la unidad, como se explica en el código siguiente.
VB
Dim cdrive As System.IO.DriveInfo
cdrive = My.Computer.FileSystem.GetDriveInfo("C:\")
MsgBox(cdrive.VolumeLabel)

Vea también
Tareas
Cómo: Determinar el espacio total de una unidad en Visual Basic
Cómo: Determinar el formato de una unidad en Visual Basic
Cómo: Determinar el tipo de una unidad en Visual Basic
Referencia
My.Computer.FileSystem.GetDriveInfo (Método)
Conceptos del lenguaje Visual Basic

Cómo: Determinar el formato de una unidad en Visual Basic


El My.Computer.FileSystem.GetDriveInfo (Método) proporciona un objeto DriveInfo que puede consultarse para obtener
información sobre una unidad de un equipo. Puede utilizar la propiedad DriveFormat para averiguar el formato de la unidad.
Al intentar obtener acceso a la propiedad sin el permiso suficiente, se produce una excepción SecurityException.
Nota
Las opciones disponibles en los cuadros de diálogo, y los nombres y las ubicaciones de los comandos de menú que se ven
podrían diferir de lo que se describe en la Ayuda, en función de los valores de configuración o de edición activos. Esta página
de Ayuda se ha redactado teniendo en cuenta la Configuración general de desarrollo. Para cambiar la configuración, elija
la opción Importar y exportar configuraciones en el menú Herramientas. Para obtener más información, vea
Valores de configuración de Visual Studio.

Para determinar el formato de una unidad


Utilice la propiedad DriveFormat para determinar el formato de la unidad, como se explica en el código siguiente.
VB
Dim cdrive As System.IO.DriveInfo
cdrive = My.Computer.FileSystem.GetDriveInfo("C:\")
MsgBox(cdrive.DriveFormat)

Vea también
Tareas
Cómo: Determinar el espacio total de una unidad en Visual Basic
Cómo: Determinar la etiqueta de volumen de una unidad en Visual Basic
Cómo: Determinar el tipo de una unidad en Visual Basic
Referencia
My.Computer.FileSystem.GetDriveInfo (Método)
Conceptos del lenguaje Visual Basic

Cómo: Determinar el tipo de una unidad en Visual Basic


El My.Computer.FileSystem.GetDriveInfo (Método) proporciona un objeto DriveInfo que puede consultarse para obtener
información sobre una unidad de un equipo. Puede utilizar la propiedad DriveType para averiguar el tipo de la unidad. Al
intentar obtener acceso a la propiedad sin el permiso suficiente, se produce una excepción SecurityException.
En la siguiente tabla se muestran los miembros de la enumeración DriveType.
Miembro Val Descripción
or
Unknow 0 No se puede determinar el tipo de la unidad.
n

CDRom 1 La unidad es de CD-ROM. No se realiza ninguna distinción entre las unidades de CD-ROM de sólo lectura y de
lectura y escritura.

DVDRom 2 La unidad es de DVD-ROM.

Fixed 3 La unidad tiene medios fijos (no es extraíble). Este valor incluye todos los discos duros, incluso los discos duro
s que son extraíbles.

RamDisk 4 La unidad es un bloque de memoria de acceso aleatorio (RAM) del equipo local que se comporta como una u
nidad de disco.

Remote 5 Unidades de red. Esta categoría incluye unidades compartidas en cualquier lugar en una red.

Removab 6 La unidad tiene medios extraíbles. Esta categoría incluye todas las unidades de disquete.
le

Para determinar el tipo de una unidad


Utilice la propiedad DriveType para determinar el tipo de la unidad, como se explica en el código siguiente.
VB
Dim cdrive As System.IO.DriveInfo
cdrive = My.Computer.FileSystem.GetDriveInfo("C:\")
MsgBox(cdrive.DriveType.ToString)

Vea también
Tareas
Cómo: Determinar el espacio total de una unidad en Visual Basic
Cómo: Determinar la etiqueta de volumen de una unidad en Visual Basic
Referencia
My.Computer.FileSystem.GetDriveInfo (Método)
DriveInfo
Conceptos del lenguaje Visual Basic

Cómo: Determinar el espacio total de una unidad en Visual


Basic
El método My.Computer.FileSystem.GetDriveInfo (Método) proporciona un objeto DriveInfo que puede consultarse para
obtener información sobre una unidad del equipo. Puede utilizar la propiedad TotalSize para determinar la cantidad de
espacio de una unidad. Al intentar obtener acceso a la propiedad sin el permiso suficiente, se producirá una excepción
SecurityException.
Nota
Las opciones disponibles en los cuadros de diálogo y los nombres y ubicaciones de los comandos de menú que se ven podr
ían diferir de lo que se describe en la Ayuda, según los valores de configuración o de edición activos. Esta página de Ayuda se
ha redactado teniendo en cuenta la Configuración general de desarrollo. Para cambiar la configuración, elija la opción Im
portar y exportar configuraciones en el menú Herramientas. Para obtener más información, vea
Valores de configuración de Visual Studio.

Para determinar la cantidad total de espacio en disco en una unidad


Utilice la propiedad TotalSize para determinar la cantidad de espacio total en la unidad, tal como se muestra en el
código siguiente:
VB
Dim cdrive As System.IO.DriveInfo
cdrive = My.Computer.FileSystem.GetDriveInfo("C:\")
MsgBox(cdrive.TotalSize)

Vea también
Tareas
Cómo: Determinar el espacio físico libre de una unidad en Visual Basic
Cómo: Determinar la etiqueta de volumen de una unidad en Visual Basic
Cómo: Determinar el tipo de una unidad en Visual Basic
Referencia
My.Computer.FileSystem.GetDriveInfo (Método)
DriveInfo
Conceptos del lenguaje Visual Basic

Cómo: Determinar el espacio físico libre de una unidad en


Visual Basic
El My.Computer.FileSystem.GetDriveInfo (Método) proporciona un objeto DriveInfo que puede consultarse para obtener
información sobre una unidad de un equipo. Puede utilizar la propiedad TotalFreeSpace para averiguar la cantidad de
espacio disponible en una unidad. Al intentar obtener acceso a la propiedad sin el permiso suficiente, se produce una
excepción SecurityException.
Nota
Las opciones disponibles en los cuadros de diálogo, y los nombres y las ubicaciones de los comandos de menú que se ven
podrían diferir de lo que se describe en la Ayuda, en función de los valores de configuración o de edición activos. Esta página
de Ayuda se ha redactado teniendo en cuenta la Configuración general de desarrollo. Para cambiar la configuración, elija
la opción Importar y exportar configuraciones en el menú Herramientas. Para obtener más información, vea
Valores de configuración de Visual Studio.

Para determinar la cantidad de espacio disponible en una unidad


Utilice la propiedad TotalFreeSpace para determinar la cantidad de espacio disponible, como se muestra en el código
siguiente:
VB
Dim cdrive As System.IO.DriveInfo
cdrive = My.Computer.FileSystem.GetDriveInfo("C:\")
MsgBox("Total free space: " & CStr(cdrive.TotalFreeSpace))

Este ejemplo de código también está disponible como fragmento de código de IntelliSense. En el selector de fragmentos
de código, se encuentra en Sistema de archivos - Procesando unidades, carpetas y archivos. Para obtener más
información, vea Cómo: Insertar fragmentos de código en el código (Visual Basic).
Vea también
Tareas
Cómo: Determinar el espacio total de una unidad en Visual Basic
Cómo: Determinar el formato de una unidad en Visual Basic
Cómo: Determinar el tipo de una unidad en Visual Basic
Referencia
My.Computer.FileSystem.GetDriveInfo (Método)
DriveInfo
Conceptos del lenguaje Visual Basic

Cómo: Determinar el directorio raíz de una unidad en Visual


Basic
El método My.Computer.FileSystem.GetDriveInfo (Método) proporciona un objeto DriveInfo que puede consultarse para
obtener información sobre una unidad del equipo. Puede utilizar la propiedad RootDirectory para determinar el directorio
raíz. Al intentar obtener acceso a la propiedad sin el permiso suficiente, se produce una excepción SecurityException.
Nota
Las opciones disponibles en los cuadros de diálogo, y los nombres y las ubicaciones de los comandos de menú que se ven p
odrían diferir de lo que se describe en la Ayuda, en función de los valores de configuración o de edición activos. Esta página
de Ayuda se ha redactado teniendo en cuenta la Configuración general de desarrollo. Para cambiar la configuración, elija
la opción Importar y exportar configuraciones en el menú Herramientas. Para obtener más información, vea
Valores de configuración de Visual Studio.

Para determinar el directorio raíz de una unidad


Utilice la propiedad RootDirectory para determinar el directorio raíz, como se muestra en el código siguiente.
VB
Dim cdrive As System.IO.DriveInfo
cdrive = My.Computer.FileSystem.GetDriveInfo("C:\")
MsgBox(cdrive.RootDirectory)

Vea también
Tareas
Cómo: Determinar el espacio total de una unidad en Visual Basic
Cómo: Determinar el tipo de una unidad en Visual Basic
Referencia
My.Computer.FileSystem.GetDriveInfo (Método)
DriveInfo
Conceptos del lenguaje Visual Basic

Cómo: Determinar el directorio System de Windows en Visual


Basic
En este ejemplo se establece una cadena que contiene la ruta de acceso del directorio System de Windows.
Nota
Las opciones disponibles en los cuadros de diálogo, y los nombres y las ubicaciones de los comandos de menú que se ven
podrían diferir de lo que se describe en la Ayuda, en función de los valores de configuración o de edición activos. Esta página
de Ayuda se ha redactado teniendo en cuenta la Configuración general de desarrollo. Para cambiar la configuración, elija
la opción Importar y exportar configuraciones en el menú Herramientas. Para obtener más información, vea
Valores de configuración de Visual Studio.

Ejemplo
VB
Dim systemDirectory As String
systemDirectory = System.Environment.SystemDirectory

Este ejemplo de código también está disponible como fragmento de código de IntelliSense. En el selector de fragmentos de
código, se encuentra en Sistema operativo Windows > Información del sistema. Para obtener más información, vea
Cómo: Insertar fragmentos de código en el código (Visual Basic).
Compilar el código
La propiedad devuelve un valor como por ejemplo "c:\WINNT\System32".
Seguridad
Para este código es necesaria la clase FileIOPermission.
Vea también
Tareas
Cómo: Determinar los atributos de un directorio en Visual Basic
Referencia
Environment.GetFolderPath Method
Otros recursos
Propiedades de archivos, directorios y unidades en Visual Basic
Conceptos del lenguaje Visual Basic

Analizar archivos de texto con el objeto TextFieldParser


El objeto TextFieldParser permite analizar y procesar archivos muy grandes estructurados como columnas de texto de ancho
delimitado, como archivos de registro o información de base de datos heredada. Analizar un archivo de texto con
TextFieldParser es similar a recorrer en iteración un archivo de texto, mientras que el método de análisis para extraer
archivos de texto es similar a los métodos de manipulación de cadenas que se utilizan para convertir cadenas delimitadas en
símbolos.
Analizar diferentes tipos de archivos de texto
Los archivos de texto pueden tener campos de varios anchos, delimitados por un carácter como una coma o un espacio de
tabulación. Defina la propiedad TextFieldType y el delimitador, como en el ejemplo siguiente, que utiliza el método
SetDelimiters para definir un archivo de texto delimitado por tabulaciones:
VB
testReader.SetDelimiters(vbTab)

Otros archivos de texto pueden tener anchos de campo fijos. En tal caso, es necesario definir TextFieldType como
FixedWidth y definir los anchos de cada campo, como en el ejemplo siguiente. En este ejemplo se utiliza el método
SetFieldWidths, para definir las columnas de texto: la primera columna tiene 5 caracteres de ancho, la segunda tiene 10, la
tercera 11 y la cuarta es de ancho variable.
VB
testReader.SetFieldWidths(5, 10, 11, -1)

Cuando se define el formato, se puede recorrer el archivo utilizando el método ReadFields para procesar cada línea.
Si un campo no coincide con el formato especificado, se produce una excepción MalformedLineException. Cuando se produce
este tipo de excepciones, las propiedades ErrorLine y ErrorLineNumber contienen el texto que produce la excepción y el
número de línea de ese texto.
Analizar archivos con varios formatos
El método PeekChars del objeto TextFieldParser se puede utilizar para comprobar cada archivo antes de leerlo, lo que
permite definir varios formatos para los campos y actuar en consecuencia. Para obtener más información, vea
Cómo: Leer archivos de texto con varios formatos en Visual Basic.
Vea también
Tareas
Solución de problemas de excepciones: Microsoft.VisualBasic.FileIO.TextFieldParser.MalformedLineException
Referencia
My.Computer.FileSystem.OpenTextFieldParser (Método)
TextFieldParser (Objeto)
TextFieldParser.PeekChars (Método)
TextFieldParser.ReadFields (Método)
TextFieldParser.CommentTokens (Propiedad)
TextFieldParser.Delimiters (Propiedad)
TextFieldParser.ErrorLine (Propiedad)
TextFieldParser.ErrorLineNumber (Propiedad)
TextFieldParser.FieldWidths (Propiedad)
TextFieldParser.HasFieldsEnclosedInQuotes (Propiedad)
TextFieldParser.LineNumber (Propiedad)
TextFieldParser.TextFieldType (Propiedad)
TextFieldParser.TrimWhiteSpace (Propiedad)
TextFieldParser.SetDelimiters (Método)
TextFieldParser.SetFieldWidths (Método)
Conceptos del lenguaje Visual Basic

Codificaciones de archivos
Las codificaciones de archivos, también conocidas como codificaciones de caracteres, especifican cómo representar los
caracteres cuando se procesa texto. Una codificación puede ser preferible sobre otra por lo que se refiere a los caracteres del
lenguaje que puede o no controlar, aunque normalmente se prefiere Unicode.
Cuando se leen o escriben archivos, la correspondencia incorrecta de las codificaciones de archivo puede producir excepciones
o resultados incorrectos.
Tipos de codificaciones
Unicode es la codificación preferida al trabajar con archivos. Unicode es un estándar mundial de codificación de caracteres que
utiliza valores de código de 16 bits para representar todos los caracteres que se utilizan en la informática moderna, e incluye
símbolos técnicos y caracteres especiales que se utilizan en publicaciones.
Los estándares de codificación de caracteres anteriores constaban de conjuntos de caracteres tradicionales, como el conjunto
de caracteres ANSI de Windows que utiliza valores de código de 8 bits, o combinaciones de valores de 8 bits, para representar
los caracteres que se utilizan en un idioma o región geográfica específicos.
Clase Encoding
La clase Encoding representa una codificación de caracteres. En esta tabla se muestra el tipo de codificaciones disponibles y se
describe cada uno.
Nombre Descripción
ASCIIEncoding Representa una codificación de caracteres ASCII de caracteres Unicode.

UnicodeEncoding Representa una codificación UTF-16 de caracteres Unicode.

UTF32Encoding Representa una codificación UTF-32 de caracteres Unicode.

UTF7Encoding Representa una codificación UTF-7 de caracteres Unicode.

UTF8Encoding Representa una codificación UTF-8 de caracteres Unicode.

Vea también
Otros recursos
Leer archivos en Visual Basic
Escribir en archivos en Visual Basic
Conceptos del lenguaje Visual Basic

Solución de problemas: Leer y escribir en archivos de texto


Este tema trata problemas comunes encontrados al trabajar con archivos de texto y sugiere un enfoque para ellos.
Problemas comunes
Los problemas más comunes que se producen al trabajar con archivos de texto incluyen excepciones de seguridad,
codificaciones de archivo o rutas de acceso no válidas.
Excepciones de seguridad
Si se produce un error de seguridad, se produce SecurityException. A menudo es resultado de la falta de los permisos
necesarios del usuario; esto se puede solucionar agregando permisos o trabajando con archivos en almacenamiento aislado.
Para obtener más información, vea Solución de problemas de excepciones: System.Security.SecurityException y
Almacenamiento aislado.
Codificaciones de archivos
Las codificaciones de archivos, también conocidas como codificaciones de caracteres, especifican cómo se representan los
caracteres cuando se procesa texto. Los caracteres inesperados en un archivo de texto pueden ser el resultado de una
codificación incorrecta. En la mayoría de los archivos, es preferible una codificación en lugar de otra en términos de los
caracteres de lenguaje que pueden controlar; generalmente, Unicode es la opción más adecuada. Para obtener más
información, vea Codificaciones de archivos y Encoding.
Rutas de acceso incorrectas
Al analizar rutas de acceso de los archivo, en particular las rutas de acceso relativas, es fácil proporcionar datos equivocados.
Se pueden corregir muchos problemas asegurándose de que se proporciona la ruta de acceso correcta. Para obtener más
información, vea Cómo: Analizar rutas de acceso a archivos en Visual Basic.
Vea también
Referencia
My.Computer.FileSystem (Objeto)
Conceptos
Analizar archivos de texto con el objeto TextFieldParser
Otros recursos
Leer archivos en Visual Basic
Escribir en archivos en Visual Basic
Conceptos del lenguaje Visual Basic

Tutorial: Manipular archivos con métodos de .NET Framework


Este tutorial muestra cómo abrir y leer un archivo utilizando la clase StreamReader, comprobar si se está teniendo acceso a un
archivo, buscar una cadena dentro de un archivo leído con una instancia de la clase StreamReader y escribir en un archivo
utilizando la clase StreamWriter.
Nota
Las opciones disponibles en los cuadros de diálogo, y los nombres y las ubicaciones de los comandos de menú que se ven
podrían diferir de lo que se describe en la Ayuda, en función de los valores de configuración o de edición activos. Esta página
de Ayuda se ha redactado teniendo en cuenta la Configuración general de desarrollo. Para cambiar la configuración, elija
la opción Importar y exportar configuraciones en el menú Herramientas. Para obtener más información, vea
Valores de configuración de Visual Studio.

Crear la aplicación
Inicie Visual Studio y comience el proyecto creando un formulario que el usuario pueda utilizar para escribir en el archivo
designado.
Para crear el proyecto
1. En el menú Archivo, seleccione Nuevo proyecto.
2. En el panel Nuevo proyecto, haga clic en Aplicación para Windows.
3. En el cuadro Nombre, escriba MyDiary y haga clic en Aceptar.
Visual Studio agrega el proyecto al Explorador de soluciones y se abre el Diseñador de Windows Forms.
4. Agregue los controles de la siguiente tabla al formulario y establezca los correspondientes valores para sus propiedades.
Objeto Propiedades Valor
Button Name Submit
Text Submit Entry

Button Name Clear


Text Clear Entry

TextBox Name Entry


Text Please enter something.
Multiline False

Escribir en el archivo
Para agregar la capacidad de escribir en un archivo a través de la aplicación, utilice la clase StreamWriter. StreamWriter está
diseñado para producir los caracteres de resultado en una codificación particular, mientras que la clase Stream está diseñada
para la entrada y salida de bytes. Utilice StreamWriter para escribir líneas de información en un archivo de texto estándar.
Para obtener más información sobre la clase StreamWriter, vea StreamWriter (Clase).
Para agregar la funcionalidad de escritura
1. En el menú Ver, elija Código para abrir el Editor de código.
2. Dado que la aplicación hace referencia al espacio de nombres System.IO, agregue las siguientes instrucciones al principio
del código, antes de la declaración de código del formulario, que empieza por Public Class Form1.
VB
Imports System
Imports System.IO
Antes de escribir en el archivo, deberá crear una instancia de una clase StreamWriter.
3. En el menú Ver, elija Diseñador para volver al Diseñador de Windows Forms. Haga doble clic en el botón Submit para
crear un controlador de eventos Click para el botón y, a continuación, agréguele el código siguiente:
VB
Dim fw As StreamWriter

Nota
El Entorno de desarrollo integrado (IDE) de Visual Studio volverá al Editor de código y colocará el punto de inserción dentro
del controlador de eventos donde debe agregar el código.

1. Para escribir en el archivo, utilice el método Write de la clase StreamWriter. Agregue el código siguiente directamente
después de Dim fw As StreamWriter: No debe preocuparse por que se produzca una excepción si el archivo no existe,
porque se creará si no existe ya.
VB
Dim ReadString As String
Try
'Pass the file path and name to the StreamWriter constructor.
'Indicate that Append is True, so file will not be overwritten.
fw = New StreamWriter("C:\MyDiary.txt", True)
ReadString = Entry.Text
fw.WriteLine(ReadString)
Finally
'Close the file.
fw.Close()
End Try

2. Asegúrese de que el usuario no pueda enviar una entrada en blanco agregando el código siguiente inmediatamente
después de Dim ReadString As String.
VB
If (Entry.Text = "" Or Entry.Text = "Please enter something.") Then
Entry.Text = "Please enter something."
Return
End If

3. Dado que se trata de un diario, el usuario deseará asignar una fecha a cada entrada. Inserte el código siguiente después
de fw = New StreamWriter("C:\MyDiary.txt", True) para establecer la variable Today en la fecha actual.
VB
Dim Today As DateTime
Today = Now
fw.Write(CStr(Today))
fw.Write(ControlChars.CrLf)

4. Por último, anexe código para borrar el cuadro de texto TextBox. Agregue el código siguiente al evento Click del botón
Clear.
VB
Entry.Text = ""

Agregar características de presentación al diario


En esta sección, debe agregar una característica que muestra la última entrada del TextBox DisplayEntry. También puede
agregar un cuadro combinado ComboBox que muestra varias entradas y desde el que un usuario puede seleccionar una
entrada que mostrar en el TextBox DisplayEntry. Una instancia de la clase StreamReader lee de MyDiary.txt. Al igual que la
clase StreamWriter, StreamReader está pensado para su uso con archivos de texto.
Para esta sección del tutorial, agregue los controles de la siguiente tabla al formulario y establezca los correspondientes
valores para sus propiedades.
Control Propiedades Valores
TextBox Name DisplayEntry
Visible False
Size 120,60
Multiline True

Button Name Display


Text Display

Button Name GetEntries


Text Obtener entradas

ComboBox Name PickEntries


Text Select an Entry
Enabled False

Para rellenar el cuadro combinado


1. El ComboBox PickEntries se utiliza para mostrar las fechas en las que el usuario envía cada entrada, de modo que el
usuario pueda seleccionar la entrada correspondiente a una fecha específica. Cree un controlador de eventos Click para
el botón GetEntries y agréguele el código siguiente.
VB
Dim fr As StreamReader
Dim FileString As String
FileString = ""
Try
fr = New System.IO.StreamReader("C:\MyDiary.txt")
PickEntries.Items.Clear()
PickEntries.Enabled = True
Do
FileString = fr.ReadLine
If IsDate(FileString) Then
PickEntries.Items.Add(FileString)
End If
Loop Until (FileString Is Nothing)
Finally
If fr IsNot Nothing Then
fr.Close()
End If
End Try
PickEntries.Enabled = True

2. Para probar el código, presione F5 para compilar la aplicación y haga clic en Obtener entradas. Haga clic en la flecha
desplegable del ComboBox para mostrar las fechas de entrada.
Para elegir y mostrar entradas individuales
1. Cree un controlador de eventos Click para el botón Display y agréguele el código siguiente.
VB
Dim fr As StreamReader
Dim ReadString As String
'Make sure ReadString begins empty.
ReadString = ""
Dim FileString As String
fr = New StreamReader("C:\MyDiary.txt")
'If no entry has been selected, show the whole file.
If PickEntries.Enabled = False Or PickEntries.SelectedText Is Nothing Then
Do
'Read a line from the file into FileString.
FileString = fr.ReadLine
'add it to ReadString
ReadString = ReadString & ControlChars.CrLf & FileString
Loop Until (FileString = Nothing)
Else
'An entry has been selected, find the line that matches.
Do

FileString = fr.ReadLine
Loop Until FileString = CStr(PickEntries.SelectedItem)
FileString = CStr(PickEntries.SelectedItem) & ControlChars.CrLf
ReadString = FileString & fr.ReadLine

'Read from the file until EOF or another Date is found.


Do Until ((fr.Peek < 0) Or (IsDate(fr.ReadLine)))
ReadString = ReadString & fr.ReadLine
Loop
End If
fr.Close()
DisplayEntry.Visible = True
DisplayEntry.Text = ReadString

2. Para probar el código, presione F5 para compilar la aplicación y envíe una entrada. Haga clic en Obtener entradas,
seleccione una entrada en el ComboBox y haga clic en Display. El contenido de la entrada seleccionada aparecerá en el
TextBox DisplayEntry.
Permitir a los usuarios a eliminar o modificar entradas
Finalmente, puede incluir funcionalidad adicional para permitir que los usuarios eliminen o modifiquen una entrada utilizando
los botones DeleteEntry y EditEntry. Ambos botones permanecen deshabilitados a menos que se esté mostrando una
entrada.
Agregue los controles de la siguiente tabla al formulario y establezca los correspondientes valores para sus propiedades.
Control Propiedades Valores
Button Name DeleteEntry
Text Eliminar entrada
Enabled False

Button Name EditEntry


Text Editar entrada
Enabled False

Button Name SubmitEdit


Text Enviar edición
Enabled False

Para habilitar la eliminación y modificación de entradas


1. Agregue el código siguiente al evento Click del botón Display, a continuación de DisplayEntry.Text = ReadString.

VB
DeleteEntry.enabled = True

2. Cree un controlador de eventos Click para el botón DeleteEntry y agréguele el código siguiente.
VB
Dim fr As StreamReader
Dim ReadString As String
Dim WriteString As String
Dim ConfirmDelete As MsgBoxResult
fr = New StreamReader("C:\MyDiary.txt")
ReadString = fr.ReadLine
' Read through the textfile
Do Until (fr.Peek < 0)
ReadString = ReadString & vbCrLf & fr.ReadLine
Loop
WriteString = Replace(ReadString, DisplayEntry.Text, "")
fr.Close()
' Check to make sure the user wishes to delete the entry
ConfirmDelete = MsgBox("Do you really wish to delete this entry?", _
MsgBoxStyle.OKCancel)
If ConfirmDelete = MsgBoxResult.OK Then
File.Delete("C:\MyDiary.txt")
Dim fw As StreamWriter = File.CreateText("C:\MyDiary.txt")
fw.WriteLine(WriteString)
fw.Close()
' Reset controls on the form
DisplayEntry.Text = ""
PickEntries.Text = ""
PickEntries.Items.Clear()
PickEntries.Enabled = False
DeleteEntry.Enabled = False
End If

3. Cuando un usuario muestra una entrada, se habilita el botón EditEntry. Agregue el código siguiente al controlador de
eventos Click del botón Display, a continuación de DisplayEntry.Text = ReadString.

VB
EditEntry.Enabled = True

4. Cree un controlador de eventos Click para el botón EditEntry y agréguele el código siguiente.
VB
Entry.Text = DisplayEntry.Text
SubmitEdit.Enabled = True

5. Cree un controlador de eventos Click para el botón SubmitEdit y agréguele el código siguiente.
VB
Dim fr As StreamReader
Dim ReadString As String
Dim WriteString As String
If Entry.Text = "" Then
MsgBox("Use Delete to Delete an Entry")
Return
End If
fr = New StreamReader("C:\MyDiary.txt")
ReadString = fr.ReadLine
Do Until (fr.Peek < 0)
ReadString = ReadString & vbCrLf & fr.ReadLine
Loop
WriteString = Replace(ReadString, DisplayEntry.Text, Entry.Text)
fr.Close()
File.Delete("C:\MyDiary.txt")
Dim fw As StreamWriter = File.CreateText("C:\MyDiary.txt")
fw.WriteLine(WriteString)
fw.Close()
DisplayEntry.Text = Entry.Text
Entry.Text = ""
EditEntry.Enabled = False
SubmitEdit.Enabled = False

Para probar el código, presione F5 para compilar la aplicación. Haga clic en Obtener entradas, seleccione una entrada y, a
continuación, haga clic en Display. La entrada aparece en el TextBox DisplayEntry. Haga clic en Editar entrada. La entrada
aparece en el TextBox Entry. Edite la entrada del TextBox Entry y haga clic en Enviar edición. Abra el archivo MyDiary.txt
para confirmar la corrección. Seleccione una entrada y haga clic en Eliminar entrada. Cuando el MessageBox solicite
confirmación, haga clic en Aceptar. Cierre la aplicación y abra MyDiary.txt para confirmar la eliminación.
Vea también
Referencia
StreamReader Class
StreamWriter Class
Otros recursos
Tutoriales del lenguaje Visual Basic
Conceptos del lenguaje Visual Basic

Tutorial: Manipular archivos y directorios en Visual Basic


Este tutorial ofrece una introducción a los fundamentos de la E/S de archivos en Microsoft Visual Basic 2005. Para ilustrar las
características, crea una pequeña aplicación, denominada FileExplorer, que examina archivos de texto en un directorio y
proporciona información tal como los atributos, hora del último acceso y los primeros 80 caracteres del archivo. También
incluye una opción que escribe la información en un archivo de registro.
Nota
Las opciones disponibles en los cuadros de diálogo, y los nombres y ubicaciones de los comandos de menú que se ven pod
rían diferir de lo que se describe en la Ayuda, según los valores de configuración o de edición activos. Esta página de Ayuda s
e ha redactado teniendo en cuenta la Configuración general de desarrollo. Para cambiar la configuración, elija la opción I
mportar y exportar configuraciones en el menú Herramientas. Para obtener más información, vea
Valores de configuración de Visual Studio.

Crear la aplicación
Para iniciar el proyecto, cree un formulario en el que los usuarios puedan seleccionar un directorio, un archivo del directorio y,
a continuación, la información sobre el archivo que desean recuperar.
Para crear el proyecto
1. En el menú Archivo, haga clic en Nuevo proyecto.
Aparecerá el cuadro de diálogo Nuevo proyecto.
2. En el panel Tipos de proyecto, haga clic en Proyectos de Visual Basic y, a continuación, elija Aplicación para
Windows en el panel Plantillas.
3. En el cuadro Nombre, escriba FileExplorer como nombre del proyecto.
Visual Studio agregará el proyecto al Explorador de soluciones y se abrirá el Diseñador de Windows Forms.
4. Agregue los controles de la siguiente tabla al formulario y establezca los correspondientes valores para sus propiedades.
Objeto Propiedades Valor
TextBox Name txtDirectory
Text Directorio

Button Name btnSubmit


Text Enviar

Button Name btnExamine


Text Examinar

ComboBox Name lstFilePick


Text Seleccione un archivo

CheckBox Name chkFileLength


Text Longitud del archivo
Checked True

CheckBox Name chkLastAccess


Text Hora del último acceso
Checked True
CheckBox Name chkSave
Text Guardar resultados
Checked False

Mostrar el directorio actual


La aplicación FileExplorer necesita un punto de inicio. En consecuencia, el control txtDirectory TextBox utiliza la función
My.Computer.FileSystem.CurrentDirectory para devolver y mostrar una cadena que representa la ruta de acceso actual.
Para devolver el directorio actual
1. Haga doble clic en el formulario para crear un controlador de eventos para Form1_Load.
Se abrirá el Editor de código.
2. Agregue el código siguiente para que el control txtDirectory TextBox muestre la ubicación actual.
VB
txtDirectory.Text = My.Computer.FileSystem.CurrentDirectory

3. Ejecute el programa para comprobar que se devuelve la ruta de acceso correcta.


El control txtDirectory TextBox muestra el directorio actual.
Cambiar directorios
Dado que es posible que un usuario desee seleccionar archivos de un directorio diferente, la aplicación utiliza la misma
propiedad para cambiar de directorio. Para cambiar a un directorio diferente, el usuario escribe una nueva ruta de acceso en el
control txtDirectory TextBox.
Para cambiar de directorio
1. Haga doble clic en el control del formulario para crear un controlador de eventos clic para btnSubmit.
Se abrirá el Editor de código.
2. Agregue el código siguiente al controlador de eventos clic.
VB
Dim NewPath As String
' NewPath holds the path the user has entered.
NewPath = txtDirectory.Text
' Change the location to NewPath.
My.Computer.FileSystem.CurrentDirectory = NewPath

Comprobar si se escribió una ruta de acceso válida


Utilice una instrucción Try...Catch para detectar excepciones que surgen de escribir una ruta de acceso en blanco o no válida.
Para garantizar rutas de acceso válidas
1. En el evento btnSubmit_Click, después de la línea de código Dim NewPath As String, agregue Dim ErrorMessage As
String en una nueva línea.

2. Antes de la línea de código My.Computer.FileSystem.CurrentDirectory = NewPath, agregue una instrucción Try en su


propia línea, como se indica a continuación. Si presiona la tecla de retorno, el Editor de código insertará automáticamente
las instrucciones Catch ex As Exception y End Try. Quítelas, agregará las suyas propias en el paso siguiente.
VB
Try

3. Después de la línea de código My.Computer.FileSystem.CurrentDirectory = NewPath, agregue lo siguiente:

VB
' This checks to make sure the path is not blank.
Catch ex As Exception When NewPath = ""
ErrorMessage = "You must enter a path."
' This catches errors caused by a path that is not valid.
Catch
ErrorMessage = "You must enter a valid path. If trying " & _
"to access a different drive, remember to include the drive " & _
"letter."
Finally
' Display the error message only if one exists.
If ErrorMessage <> Nothing Then
MsgBox(ErrorMessage)
End If
End Try

Mostrar el contenido del directorio en un control ComboBox


Para permitir que la aplicación muestre el contenido del directorio actual, puede utilizar el método
My.Computer.FileSystem.GetFiles, que devuelve una colección de cadenas que representan los nombres de los archivos en
el directorio. Puede utilizar comodines con GetFiles para seleccionar sólo archivos de un modelo determinado. En este
ejemplo, sólo se devuelven los archivos que tienen la extensión .txt.
Para mostrar el contenido del directorio
1. Al principio del evento btnSubmit_Click, inserte lo siguiente.
Dim fileList As System.Collections.ObjectModel.ReadOnlyCollection(Of String).

2. Después de que la línea End Try, inserte lo siguiente.

VB
fileList = My.Computer.FileSystem.GetFiles( _
My.Computer.FileSystem.CurrentDirectory, _
FileIO.SearchOption.SearchTopLevelOnly, "*.txt")
For Each foundFile As String In fileList
lstFilePick.Items.Add(foundFile)
Next

La información recopilada aparece en el control lstFilePick ComboBox, en el que podrá seleccionar un archivo
específico para examinarlo.
Para probar la aplicación, ejecútela primero en un directorio que no contenga archivos .txt y, a continuación, en uno que
contenga más de un archivo .txt. En el primer caso, la aplicación muestra el mensaje de error correspondiente. En el segundo, la
aplicación crea, en el control ComboBox, una lista de todos los archivos .txt del directorio especificado en el control
txtDirectory TextBox.

Permitir que el usuario seleccione un archivo para examinarlo


Aunque el control lstFilePick ComboBox muestra todos los archivos de un directorio, es probable que el usuario desee
seleccionar y examinar un archivo específico.
Para habilitar la selección de un archivo concreto
Cree un controlador de evento clic para btnExamine_Click y agregue el código siguiente para confirmar la selección de
un archivo.
VB
Dim thisFile As System.IO.FileInfo
thisFile = My.Computer.FileSystem.GetFileInfo(CStr(lstFilePick.SelectedItem))

Permitir que el usuario determine la información que desea recopilar


Una vez que se muestran los archivos en el control lstFilePick ComboBox, el código adicional permite que el usuario
especifique la información de la que se informa. Por ejemplo, es posible que un usuario sólo desee saber la fecha en la que se
tuvo acceso al archivo por última vez. Es posible que otro usuario desee conocer también el tamaño de un archivo. Los
usuarios pueden activar o desactivar las casillas de verificación (chkLastAccess, chkFileLength) para personalizar los
resultados.
Para mostrar información específica
1. Declare estas variables al principio del evento btnExamine_Click después de (lstFilePick.SelectedItem):
VB
Dim stringlength As String
stringLength = "The file's length, in bytes, is: "
Dim stringLastAccess As String
stringLastAccess = "The file was last accessed on: "
Dim LastAccess As Date
Dim Length As Long
Dim FirstLine As String = ""
Dim FinalString As String = ""
Dim NewName As String
NewName = CType(lstFilePick.SelectedItem, String)

If NewName = Nothing Then


MsgBox("You must select a file to examine.")
Exit Sub
End If

El método My.Computer.FileSystem.GetFileInfo devuelve un objeto FileInfo que se puede consultar para obtener
información sobre un archivo.
2. Agregue el código siguiente al final del evento btnExamine_Click.
VB
' Check last access time.
If chkLastAccess.Checked = True Then
LastAccess = thisFile.LastAccessTime
End If

La propiedad LastAccessTime determina la hora del último acceso al archivo. El valor Date devuelto indica la fecha y la hora en
que se creó un archivo o en que fue modificado por última vez.
1. Agregue el código siguiente al final del evento btnExamine_Click.
VB
' Check Length.
If chkFileLength.Checked = True Then
Length = thisFile.Length
End If

La propiedad Length, que determina la longitud del archivo, devuelve un valor de tipo Long que especifica la longitud del
archivo en bytes.
Mostrar los resultados
Para completar la funcionalidad de la aplicación, un MsgBox informa de la información recopilada.
Para mostrar los resultados
1. Al final de la instrucción If que determina si se ha activado o no el control chkLastAccess CheckBox, agregue lo
siguiente antes de la instrucción End If final.
VB
' Add to the messagebox.
FinalString = FinalString & stringLastAccess & LastAccess & "." _
& vbCrLf

2. Al final de la instrucción If que determina si se ha activado o no el control chkFileLength CheckBox, agregue lo


siguiente antes de la instrucción End If final.
VB
' Add to the messagebox.
FinalString = FinalString & stringlength & CStr(Length) & "." _
& vbCrLf

3. Al final de la instrucción If que determina si se ha activado o no el control chkFirstLine CheckBox, agregue lo


siguiente antes de la instrucción End If final.
VB
' Add to the messagebox.
FinalString &= FirstLine & vbCrLf

Guardar los resultados


Es posible que el usuario desee guardar los resultados de examinar un archivo. En consecuencia, debe agregar código que
compruebe si existe un archivo de registro, cree uno si es necesario y, a continuación, escriba los resultados en el archivo de
registro.
Para crear un archivo de registro:
Agregue lo siguiente al final del evento btnExamine_Click.
VB
' Check to see if results should be saved.
If chkSave.Checked = True And FinalString <> "" Then
My.Computer.FileSystem.WriteAllText("log.txt", FinalString, True)
End If

Para probar la aplicación


1. En el directorio de su elección, cree un archivo de texto denominado test.txt con la primera línea siguiente:
"Ésta es la primera línea del primer archivo. La aplicación FileExplorer sólo examina archivos de texto."
2. En el mismo directorio, cree un segundo archivo de texto denominado test2.txt con la primera línea siguiente:
"Ésta es la primera línea del segundo archivo. La aplicación FileExplorer sólo examina archivos de texto."
3. Inicie la aplicación.
4. Escriba una ruta de acceso no válida y haga clic en Enviar.
Aparecerá el siguiente mensaje: "You must enter a valid path. If trying to access a different drive, remember to include
the drive letter."
5. Escriba la ruta de acceso al directorio que almacena test.txt y haga clic en Enviar.
El control lstFilePick ComboBox mostrará los archivos de texto.
6. Seleccione test.txt en el control lstFilePick ComboBox. Asegúrese de que están activadas todas las casillas de
verificación y, a continuación, haga clic en Examinar.
El formulario de resultados incluye la fecha del último acceso y la longitud.
7. Seleccione test2.txt en el control lstFilePickComboBox, desactive todas las casillas de verificación y, a continuación,
haga clic en Examinar.
Aparecerá el siguiente mensaje de error : "No file attribute checkboxes selected."
8. Seleccione Hora del último acceso y Guardar resultados, y haga clic en Examinar.
El formulario de resultados muestra sólo la hora del último acceso.
9. Cierre FileExplorer.
Dado que activó la opción Guardar resultados, FileExplorer generó un archivo de registro denominado log.txt en el
mismo directorio que los archivos de texto.

Para comprobar el registro


En el directorio actual, abra log.txt y confirme que FileExplorer registró la información correcta.
Vea también
Referencia
My.Computer.FileSystem.CurrentDirectory (Propiedad)
My.Computer.FileSystem.GetFileInfo (Método)
Conceptos del lenguaje Visual Basic

Desarrollo con la función My


Visual Basic proporciona funciones nuevas para el desarrollo rápido de aplicaciones que mejoran la productividad y facilidad
de uso a la vez que aumentan la funcionalidad. Una de estas funciones, denominada My, proporciona acceso a la información
y a las instancias de objeto predeterminadas relacionadas con la aplicación y su entorno en tiempo de ejecución. Esta
información se organiza en un formato compatible con IntelliSense y se dispone lógicamente en función del uso.
Los miembros de nivel superior de My se exponen como objetos. Cada objeto se comporta de forma similar a un espacio de
nombres o una clase con miembros Shared y expone un conjunto de miembros relacionados.
En esta tabla se muestran los objetos My de nivel superior y su relación entre sí.

En esta sección
Realizar tareas con My.Application, My.Computer y My.User
Describe los tres objetos My centrales, My.Application, My.Computer y My.User, que proporcionan acceso a la
información y la funcionalidad.
Instancias de objeto predeterminadas proporcionadas por My.Forms y My.WebServices
Describe los objetos My.Forms y My.WebServices, que proporcionan acceso a formularios, orígenes de datos y servicios
Web XML utilizados por la aplicación.
Desarrollo rápido de aplicaciones con My.Resources y My.Settings
Describe los objetos My.Resources y My.Settings, que proporcionan acceso a los recursos y configuración de una
aplicación.
Información general sobre el modelo de aplicaciones de Visual Basic
Describe el modelo de inicio y cierre de aplicaciones de Visual Basic.
Cómo My depende del tipo de proyecto
Proporciona información detallada sobre las funciones My que están disponibles en tipos de proyecto diferentes.
Vea también
Referencia
My.Application (Objeto)
My.Computer (Objeto)
My.User (Objeto)
My.Forms (Objeto)
My.WebServices (Objeto)
Conceptos
Cómo My depende del tipo de proyecto
Conceptos del lenguaje Visual Basic

Realizar tareas con My.Application, My.Computer y My.User


Los tres objetos My centrales que proporcionan acceso a información y funcionalidad de uso frecuente son
My.Application (Objeto), My.Computer (Objeto) y My.User (Objeto). Puede utilizar estos objetos para tener acceso a
información relacionada con la aplicación actual, con el equipo donde está instalada la aplicación o con el usuario actual de la
aplicación, respectivamente.
My.Application, My.Computer y My.User
Los ejemplos siguientes muestran cómo se puede recuperar información utilizando My.
VB
' Displays a message box that shows the full command line for the
' application.
Dim args As String = ""
For Each arg As String In My.Application.CommandLineArgs
args &= arg & " "
Next
MsgBox(args)

VB
' Gets a list of subfolders in a folder
My.Computer.FileSystem.GetDirectories _
(My.Computer.FileSystem.SpecialDirectories.MyDocuments, True, "*Logs*")

Además de recuperar información, los miembros expuestos a través de estos tres objetos también permiten ejecutar métodos
relacionados con ese objeto. Por ejemplo, puede tener acceso a una variedad de métodos para manipular archivos o actualizar
el Registro a través de My.Computer.
La E/S de archivos resulta mucho más sencilla y rápida con My, que incluye una variedad de métodos y propiedades para
manipular archivos, directorios y unidades. TextFieldParser (Objeto) permite leer en archivos estructurados grandes con
campos delimitados o de ancho fijo. En este ejemplo se abre TextFieldParser reader, que se utiliza para leer
C:\TestFolder1\test1.txt.

VB
Dim reader As Microsoft.VisualBasic.FileIO.TextFieldParser
reader = My.Computer.FileSystem.OpenTextFieldParser _
("C:\TestFolder1\test1.txt")
reader.TextFieldType = Microsoft.VisualBasic.FileIO.FieldType.Delimited
reader.Delimiters = New String() {","}
Dim currentRow As String()
While Not reader.EndOfData
Try
currentRow = reader.ReadFields()
Dim currentField As String
For Each currentField In currentRow
MsgBox(currentField)
Next
Catch ex As Microsoft.VisualBasic.FileIO.MalformedLineException
MsgBox("Line " & ex.Message & _
"is not valid and will be skipped.")
End Try
End While

My.Application permite cambiar la referencia cultural de la aplicación. El ejemplo siguiente muestra cómo se puede llamar a
este método.
VB
' Changes the current culture for the application to Jamaican English.
My.Application.ChangeCulture("en-JM")

Vea también
Referencia
My.Application (Objeto)
My.Computer (Objeto)
My.User (Objeto)
Conceptos
Cómo My depende del tipo de proyecto
Conceptos del lenguaje Visual Basic

Instancias de objeto predeterminadas proporcionadas por


My.Forms y My.WebServices
Los objetos My.Forms y My.WebServices proporcionan acceso a formularios, orígenes de datos y servicios Web XML utilizados
por la aplicación. Para ello, proporcionan colecciones de instancias predeterminadas de cada uno de estos objetos.
Instancias predeterminadas
Una instancia predeterminada es una instancia de la clase proporcionada por el tiempo de ejecución que no necesita
declararse ni crearse como instancia con las instrucciones Dim y New. En el ejemplo siguiente se muestra cómo se ha podido
declarar y crear la instancia de una clase llamada Form Form1, y cómo ahora puede obtener una instancia predeterminada de
esta clase Form mediante My.Forms.
VB
' The old method of declaration and instantiation
Dim myForm As New Form1
myForm.show()

VB
' With My.Forms, you can directly call methods on the default
' instance()
My.Forms.Form1.Show()

El objeto My.Forms devuelve una colección de instancias predeterminadas para cada clase Form que existe en su proyecto. De
igual forma, My.WebServices proporciona una instancia predeterminada de la clase de proxy para cada servicio Web al que
ha creado una referencia en su aplicación.
Vea también
Referencia
My.Forms (Objeto)
My.WebServices (Objeto)
Conceptos
Cómo My depende del tipo de proyecto
Conceptos del lenguaje Visual Basic

Desarrollo rápido de aplicaciones con My.Resources y


My.Settings
El objeto My.Resources proporciona acceso a los recursos de la aplicación y permite recuperar dinámicamente los recursos de
su aplicación.
Recuperar recursos
Diferentes recursos como archivos de sonido, iconos, imágenes y cadenas se pueden recuperar a través del objeto
My.Resources. Por ejemplo, puede tener acceso a los archivos de recursos específicos de la referencia cultural de la aplicación.
El siguiente ejemplo establece el icono del formulario en el icono denominado Form1Icon almacenado en el archivo de
recursos de la aplicación.
VB
Sub SetFormIcon()
Me.Icon = My.Resources.Form1Icon
End Sub

El objeto My.Resources expone sólo recursos globales. No proporciona acceso a archivos de recursos asociados a
formularios. Debe tener acceso a los recursos de formulario de los formularios. Para obtener más información, vea
Tutorial: Adaptar formularios Windows Forms.
De la misma forma, el objeto My.Settings proporciona acceso a la configuración de la aplicación y permite almacenar y
recuperar de forma dinámica valores de propiedades y otra información relativa a la aplicación. Para obtener más información,
vea My.Resources (Objeto) y My.Settings (Objeto).
Vea también
Referencia
My.Resources (Objeto)
My.Settings (Objeto)
Conceptos
Acceso a los recursos de la aplicación
Acceso a la configuración de la aplicación.
Conceptos del lenguaje Visual Basic

Información 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 aplicación y su cierre, así
como eventos para detectar las excepciones no controladas. También 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 métodos reemplazables.
Usos del modelo de aplicaciones
Una aplicación típica necesita realizar tareas cuando se inicia y se cierra. Por ejemplo, cuando se inicia, la aplicación puede
mostrar una pantalla de inicio, realizar conexiones a bases de datos, cargar un estado guardado, etc. Cuando la aplicación se
cierra, puede cerrar las conexiones a bases de datos, guardar el estado actual, etc. Además, la aplicación puede ejecutar el
código específico cuando se cierra inesperadamente, como por ejemplo durante una excepción no controlada.
El modelo de aplicaciones de Visual Basic facilita la creación de aplicaciones de instancia única. Una aplicación de instancia
única se diferencia de una aplicación normal en que sólo se puede ejecutar una instancia de la aplicación en un momento
dado. Al intentar iniciar otra instancia de una aplicación de instancia única se notifica a la instancia original (por medio del
evento StartupNextInstance) que se ha intentado iniciar otra instancia de la aplicación. La notificación incluye los
argumentos de la línea de comandos de la instancia subsiguiente. Entonces se cierra la instancia subsiguiente de la aplicación
antes de que se pueda producir ninguna inicialización.
Se inicia una aplicación de instancia única y comprueba si es la primera instancia o una posterior de la aplicación:
Si es la primera instancia, se inicia como de costumbre.
Cada intento posterior de iniciar la aplicación, mientras está en ejecución la primera instancia, produce un
comportamiento muy diferente. El intento subsiguiente notifica a la primera instancia los argumentos de la línea de
comandos y, a continuación, la cierra inmediatamente. La primera instancia controla el evento StartupNextInstance
para determinar cuáles eran los argumentos de línea de comandos de la instancia subsiguiente y continúa ejecutándose.
Este diagrama muestra cómo se señala una instancia subsiguiente a la primera instancia.

Controlando el evento StartupNextInstance puede controlar el comportamiento de su aplicación de instancia única. Por
ejemplo, Microsoft Outlook se ejecuta normalmente como una aplicación de instancia única; cuando Outlook está en ejecución
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 aplicación se encuentran los eventos siguientes:
Inicio de la aplicación. La aplicación provoca el evento Startup cuando se inicia. Controlando este evento, puede
agregar código que inicialice la aplicación antes de que se cargue el formulario principal. El evento Startup también sirve
para cancelar la ejecución de la aplicación durante la fase del proceso de inicio, si así lo desea.
Puede configurar la aplicación para mostrar una pantalla de inicio mientras se ejecuta el código de inicio de la aplicación.
De manera predeterminada, el modelo de aplicaciones suprime la pantalla de inicio cuando se utilizan los argumentos de
línea de comandos /nosplash o -nosplash.
Aplicaciones de instancia única. El evento StartupNextInstance se produce cuando se inicia una instancia posterior de
una aplicación de instancia única. El evento pasa los argumentos de la línea de comandos de la instancia subsiguiente.
Excepciones no controladas. Si la aplicación encuentra una excepción no controlada, provoca el evento
UnhandledException. Su controlador para ese evento puede examinar la excepción y determinar si se debe continuar la
ejecución.
El evento UnhandledException no se provoca en determinadas circunstancias. Para obtener más información, vea
My.Application.UnhandledException (Evento).
Cambios en la conectividad de red. Si cambia la disponibilidad de red del equipo, la aplicación provoca el evento
NetworkAvailabilityChanged.
El evento NetworkAvailabilityChanged no se provoca en determinadas circunstancias. Para obtener más información,
vea My.Application.NetworkAvailabilityChanged (Evento).
Cierre de la aplicación. La aplicación proporciona el evento Shutdown para indicar cuándo está a punto de cerrarse. En
ese controlador de eventos, puede asegurarse de que se llevan a cabo las operaciones que debe realizar su aplicación
(cerrar y guardar, por ejemplo). Puede configurar su aplicación para que se cierre cuando se cierra el formulario
principal, o que sólo 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 aplicación para que utilice un objeto de inicio distinto, o para que inicie el código de la
aplicación con un procedimiento Sub Main personalizado, puede que sea necesario que ese objeto o clase proporcione una
implementación de la base WindowsFormsApplicationBase para utilizar el modelo de aplicaciones. Para obtener información
sobre cómo cambiar el objeto de inicio, vea Cómo: Cambiar el objeto inicial de una aplicación.
Vea también
Referencia
My.Application (Objeto)
My.Application.Startup (Evento)
My.Application.StartupNextInstance (Evento)
My.Application.UnhandledException (Evento)
My.Application.Shutdown (Evento)
My.Application.NetworkAvailabilityChanged (Evento)
WindowsFormsApplicationBase
Conceptos
Ampliar el modelo de la aplicación de Visual Basic
Conceptos del lenguaje Visual Basic

Cómo My depende del tipo de proyecto


My sólo expone los objetos que requiere un tipo de proyecto determinado. Por ejemplo, el objeto My.Forms está disponible
en una aplicación de Windows Forms pero no en una aplicación de consola. En este tema se describe qué objetos My están
disponibles en diferentes tipos de proyecto.
My en aplicaciones para Windows y sitios Web
My sólo expone objetos útiles en el tipo de proyecto actual; suprime los objetos que no son aplicables. Por ejemplo, la imagen
siguiente muestra el modelo de objetos My en un proyecto de formularios Windows Forms.

En un proyecto de sitio Web, My expone los objetos que son relevantes para un desarrollador Web (como los objetos
My.Request y My.Response) y suprime los objetos que no lo son (como el objeto My.Forms). La imagen siguiente muestra
el modelo de objetos My en un proyecto de sitio Web:

Detalles del proyecto


La tabla siguiente muestra los objetos My habilitados de forma predeterminada para ocho tipos de proyecto: aplicación para
Windows, biblioteca de clases, aplicación de consola, biblioteca de controles de Windows, biblioteca de controles Web, servicio
de Windows, vacío y sitio Web.
Existen tres versiones del objeto My.Application, dos versiones del objeto My.Computer y dos versiones del objeto
My.User; en las notas al pie incluidas después de la tabla se incluyen detalles sobre estas versiones.
Objeto M Aplicación par Biblioteca Aplicación d Biblioteca de control Biblioteca de co Servicio de Va Sitio
y a Windows de clases e consola es de Windows ntroles Web Windows cío Web
My.Appli Sí 1 Sí 2 Sí 3 Sí 2 No Sí 3 No No
cation

My.Comp Sí 4 Sí 4 Sí 4 Sí 4 Sí 5 Sí 4 No Sí 5
uter

My.Forms Sí No No Sí No No No No

My.Log No No No No No No No Sí

My.Requ No No No No No No No Sí
est

My.Resou Sí Sí Sí Sí Sí Sí No No
rces

My.Respo No No No No No No No Sí
nse

My.Settin Sí Sí Sí Sí Sí Sí No No
gs

My.User Sí 6 Sí 6 Sí 6 Sí 6 Sí 7 Sí 6 No Sí 7

My.WebS Sí Sí Sí Sí Sí Sí No No
ervices

1 Versión para formularios Windows Forms de My.Application. Deriva de la versión de consola (vea la nota 3); agrega
compatibilidad para interactuar con las ventanas de la aplicación y proporciona el modelo de aplicación de Visual Basic.
2 Versión para bibliotecas de My.Application. Proporciona la funcionalidad básica que necesita una aplicación: proporciona
miembros para escribir en el registro de la aplicación y para tener acceso a información de la aplicación.
3 Versión para consola de My.Application. Deriva de la versión para bibliotecas (vea la nota 2) y agrega miembros
adicionales para tener acceso a los argumentos de línea de comandos de la aplicación y a información de la implementación
ClickOnce.
4 Versión para Windows de My.Computer. Deriva de la versión para servidor (vea la nota 5) y proporciona acceso u objetos
útiles en un equipo cliente, como el teclado, la pantalla y el mouse (ratón).
5 Versión para servidor de My.Computer. Proporciona información básica sobre el equipo, como el nombre, el acceso al reloj,
etc.
6 Versión para Windows de My.User. Este objeto se asocia con la identidad actual del subproceso.

7 Versión para Web de My.User. Este objeto se asocia con la identidad de usuario de la solicitud HTTP actual de la aplicación.

Vea también
Referencia
/define (Visual Basic)
My.Application (Objeto)
My.Computer (Objeto)
My.Forms (Objeto)
My.Log (Objeto)
My.Request (Objeto)
My.Response (Objeto)
My.User (Objeto)
My.WebServices (Objeto)
Conceptos
Personalizar los objetos que están disponibles en My
Información general sobre la compilación condicional
Conceptos del lenguaje Visual Basic

Obtener acceso a datos en aplicaciones de Visual Basic


Visual Basic incluye varias nuevas características para ayudar en el desarrollo de las aplicaciones que tienen acceso a los datos.
Los formularios enlazados a datos para aplicaciones para Windows se crean arrastrando elementos desde
Ventana Orígenes de datos hasta el formulario. Se puede enlazar controles a datos arrastrando elementos desde la Ventana
de orígenes de datos a los controles existentes.
Secciones relacionadas
Crear aplicaciones de datos cliente
Proporciona vínculos a páginas que tratan sobre la incorporación de funcionalidad de acceso a datos a sus aplicaciones.
Tutoriales sobre datos
Proporciona vínculos a páginas sobre escenarios concretos relacionados con el acceso a datos.
Introducción a Data Access
Proporciona vínculos a páginas que describen la creación de aplicaciones que funcionan con datos utilizando Visual Studio.
Crear aplicaciones de datos con Visual Studio
Trata los conceptos fundamentales que debe entender sobre el trabajo con datos en Visual Studio.
Conectarse a datos en Visual Studio
Proporciona vínculos a páginas sobre la conexión de la aplicación a datos con herramientas en tiempo de diseño y objetos
Connection de ADO.NET, utilizando Visual Studio.
Preparar la aplicación para recibir datos
Proporciona vínculos a páginas que explican qué son los conjuntos de datos, cómo se crean conjuntos de datos nuevos, y
cómo se crean y editan los objetos individuales de que constan.
Buscar datos en la aplicación
Proporciona vínculos a páginas que describen cómo cargar datos en los conjuntos de datos y cómo ejecutar instrucciones
SQL y procedimientos almacenados.
Mostrar datos en formularios en aplicaciones para Windows
Proporciona vínculos a páginas que explican cómo se muestran datos en formularios Windows Forms mediante controles
enlazados a datos.
Modificar datos en la aplicación
Proporciona vínculos a páginas que describen cómo manipular los datos en las tablas de datos de un conjunto de datos.
Validar datos
Proporciona vínculos a páginas que describen cómo agregar validación a un conjunto de datos durante los cambios de
columnas y filas.
Guardar datos
Proporciona vínculos a páginas que explican cómo enviar datos actualizados de una aplicación a la base de datos.
Lo nuevo en datos
Proporciona información y vínculos a las nuevas características de datos para las aplicaciones de nivel de datos y cliente.
Lo nuevo en Visual Basic
Explica las nuevas características de Visual Basic.
Novedades en ADO.NET
Presenta características que son nuevas en ADO.NET.
Lo nuevo en Visual Database Tools
Describe las funciones nuevas y mejoradas de Visual Database Tools.
Lo nuevo en el acceso a datos de ASP.NET
Describe las nuevas características para tener acceso a datos en aplicaciones ASP.NET.
ADO.NET
Describe las clases ADO.NET que exponen servicios de acceso a datos al programador de .NET Framework.
Acceso a datos en ASP.NET (Visual Studio)
Proporciona vínculos con información acerca de cómo trabajar con datos en páginas Web ASP.NET.
Datos en proyectos de dispositivos administrados
Describe cómo administrar datos para los dispositivos de Visual Studio.
Datos en las soluciones de Office
Contiene vínculos a páginas que explican el funcionamiento de los datos en las soluciones de Office, incluida información
sobre programación orientada a esquemas, almacenamiento de datos en memoria caché y acceso a datos en el servidor.
Conceptos del lenguaje Visual Basic

Depurar la aplicación de Visual Basic


Esta página proporciona punteros a la documentación sobre las características de depuración integradas en Visual Studio.
Puede utilizar la más importante de estas características, el depurador, para observar el comportamiento en tiempo de
ejecución del programa y determinar la ubicación de errores semánticos.
Con el depurador puede examinar el contenido de las variables del programa sin insertar llamadas adicionales a funciones que
lo muestren. De la misma forma, puede insertar un punto de interrupción en el código para detener la ejecución en el punto
deseado.
Controlar la ejecución
La tabla siguiente muestra las tareas de depuración que implican control de la ejecución y señala las páginas de Ayuda
asociadas.
Para Vea
Interrumpir la ejecución. Cómo: Interrumpir la ejecución

Iniciar la ejecución. Cómo: Iniciar una ejecución

Depurar en tiempo de diseño. Tutorial: Depurar en tiempo de diseño

Iniciar el depurador. Cómo: Iniciar el depurador automáticamente

Ir únicamente al código que ha escrito y pasar por alto otro código, como las ll Cómo: Avanzar en Sólo mi código
amadas de sistema.

Ir al código. Cómo: Avanzar en el código

Detener la depuración. Cómo: Detener una depuración o una ejecución

Habilitar la depuración Just-In-Time, que inicia el depurador de Visual Studio c Depuración Just-In-Time
uando un programa que se ejecuta fuera de Visual Studio se encuentra con un
error grave.

Controlar las excepciones


La tabla siguiente muestra las tareas de depuración que implican control de excepciones y señala las páginas de Ayuda
asociadas.
Para Vea
Interrumpir en excepciones no controladas. Cómo: Interrumpir en las excepciones no controladas por el usuario

Interrumpir cuando se produce una excepción. Cómo: Interrumpir cuando se produce una excepción

Interrumpir en excepciones de primera oportu Cómo: Interrumpir cuando se produce una excepción
nidad.

Utilizar el ayudante de excepciones. Cómo: Corregir errores en tiempo de ejecución con el Ayudante de excepciones

Agregar una nueva excepción. Cómo: Agregar nuevas excepciones

Continuar la ejecución después de que se ha p Continuar la ejecución después de una excepción


roducido una excepción.
Editar y continuar
La tabla siguiente muestra las tareas de depuración que implican Editar y continuar y señala las páginas de Ayuda asociadas.
Para Vea
Activar y desactivar Editar y continuar. Cómo: Habilitar y deshabilitar Editar y continuar

Impedir que Editar y continuar aplique cambio Cómo: Detener cambios en el código
s de código.

Aplicar ediciones en modo de interrupción. Cómo: Aplicar tareas de edición en modo de interrupción con Editar y continuar

Examinar datos de depuración


La tabla siguiente muestra las tareas de depuración que implican la consulta de datos de depuración y señala las páginas de
Ayuda asociadas.
Para Vea
Utilizar la ventana Registros para ver el contenido de los Cómo: Utilizar la ventana Registros
registros.

Utilizar la ventana Pila de llamadas para ver llamadas a Cómo: Utilizar la ventana Pila de llamadas
funciones o procedimientos que están actualmente en la
pila.

Utilizar la ventana Desensamblador para ver el código e Cómo: Utilizar la ventana Desensamblador
nsamblador correspondiente a las instrucciones creadas
por el compilador.

Utilizar la ventana Módulos para mostrar y describir los Cómo: Utilizar la ventana Módulos
módulos que utiliza el programa.

Utilizar la ventana Explorador de secuencias de coma Cómo: Utilizar la ventana del Explorador de secuencias de comandos
ndos para mostrar archivos de secuencias de comandos
cargados actualmente en el programa.

Utilizar la ventana Procesos para mostrar todos los proc Cómo: Utilizar la ventana Procesos
esos asociados a Visual Studio o iniciados desde este pro
grama.

Utilizar la ventana Subprocesos para examinar y control Cómo: Utilizar la ventana Subprocesos
ar los subprocesos del programa.

Establecer puntos de interrupción


La tabla siguiente muestra las tareas de depuración que implican puntos de interrupción y señala las páginas de Ayuda
asociadas.
Para Vea
Establecer un punto de interrupción. Cómo: Establecer un punto de interrupción simple

Eliminar un punto de interrupción. Cómo: Eliminar un punto de interrupción

Habilitar o deshabilitar un punto de interrupción. Cómo: Habilitar o deshabilitar un punto de interrupción

Cambiar la ubicación de un punto de interrupción. Cómo: Editar una ubicación de punto de interrupción
Utilizar un filtro para limitar el comportamiento de un punto de int Cómo: Especificar un filtro de punto de interrupción
errupción a equipos, procesos y subprocesos especificados.

Controlar de forma condicional si se ejecuta o no un punto de inter Cómo: Especificar la condición de un punto de interrupción
rupción.
Utilizar la ventana Puntos de interrupción para realizar tareas rel Cómo: Utilizar la ventana de puntos de interrupción
acionadas con los puntos de interrupción.

Vea también
Tareas
Tutorial: Depurar un formulario Windows Forms
Cómo: Aplicar tareas de edición en modo de interrupción con Editar y continuar
Conceptos
Depurar SQL
Control de ejecución
Otros recursos
Depurar código administrado
Depuración de código nativo
Depurar aplicaciones Web
Depuración: referencia de la interfaz de usuario
Preparación y configuración de la depuración
Guía básica del depurador
Preparación de la depuración: tipos de proyectos de C#, J# y Visual Basic
Conceptos del lenguaje Visual Basic

Control de excepciones y errores en Visual Basic


Visual Basic admite el control estructurado de excepciones (errores), que permite al programa detectar y recuperarse
posiblemente de los errores durante la ejecución. Visual Basic utiliza una versión mejorada de la sintaxis Try...Catch...Finally
que ya está admitida por otros lenguajes como C++. El control estructurado de excepciones combina una estructura de control
moderna (similar a Select Case o While) con excepciones, bloques de código protegidos y filtros.
El control estructurado de excepciones, que es el método recomendado de control de errores en Visual Basic, facilita la tarea de
crear y mantener programas mediante controladores de errores consistentes y exhaustivos. El método de control de
excepciones no estructurado por medio de On Error puede degradar el rendimiento de la aplicación y puede dificultar la
depuración y el mantenimiento del código.
En esta sección
Introducción al control de excepciones
Resume la manera de controlar las excepciones en los programas.
Elegir cuándo se debe utilizar el control estructurado de excepciones y cuándo el control no estructurado de excepciones
Describe ambos tipos de control de excepciones y sugiere cuándo son más adecuados.
Tipos de errores
Proporciona información general sobre los errores de sintaxis, los errores en tiempo de ejecución y los errores lógicos.
Corrección automática de la compilación inteligente
Describe la característica Corrección automática de compilación inteligente y cómo utilizarla.
Cómo: Corregir los errores del compilador con la función de corrección automática
Muestra cómo se corrigen los errores del compilador en el Editor de código mediante la característica Corrección
automática de compilación inteligente.
Configurar advertencias en Visual Basic
Detalla cómo se activan y desactivan las advertencias del compilador en Visual Basic.
Información general sobre el control estructurado de excepciones de Visual Basic
Describe y muestra el control estructurado de excepciones en Visual Basic.
Información general sobre el control no estructurado de excepciones
Describe y muestra el control no estructurado de excepciones en Visual Basic.
Secciones relacionadas
Cambios en el lenguaje para usuarios de Visual Basic 6.0
Resume los cambios de elementos del lenguaje en Visual Basic.
Guía básica del depurador
Explica los fundamentos del uso del depurador de Visual Studio. Entre los temas, se incluyen: principios básicos de
depuración, control de la ejecución, asociación del depurador al programa en ejecución, depuración Just-In-Time, iniciación
del depurador automáticamente, volcados, puntos de interrupción, inspección del programa, control de excepciones, Editar y
continuar, y utilizar expresiones en el depurador.
Depuración Just-In-Time
Describe la depuración just-in-time, una característica que inicia automáticamente el depurador de Visual Studio cuando un
programa que se ejecuta fuera de Visual Studio se encuentra con un error grave.
Depurar código administrado
Explica problemas y técnicas de depuración comunes para las aplicaciones administradas.
Ayudante de excepciones
Describe la característica Ayudante de excepciones que facilita la solución de problemas de errores en tiempo de
ejecución.
Editar y continuar
Describe Editar y continuar, una característica que ahorra tiempo y permite realizar cambios en el código fuente mientras
el programa está en modo de interrupción.
Depurar COM y ActiveX
Proporciona sugerencias para la depuración de aplicaciones COM y controles ActiveX.
Conceptos del lenguaje Visual Basic

Introducción al control de excepciones


Visual Basic admite el control (de errores) de excepciones tanto estructurado como no estructurado. La introducción de
códigos de control de excepciones en la aplicación permite controlar la mayoría de los errores con los que pueden encontrarse
los usuarios y permite que la aplicación siga ejecutándose. Puede utilizar control de errores estructurado y no estructurado
para prever los posibles errores, y evitar así que interfieran con la aplicación.
Reflexione sobre el uso de métodos de control de excepciones que utilicen operadores que puedan generar una excepción o
que llamen o tengan acceso a otros procedimientos que puedan generar una excepción.
Si se produce una excepción en un método que no esté preparado para controlarla, la excepción se propagará de vuelta al
método de llamada o al método anterior. Si el método anterior tampoco tiene controlador de excepciones, la excepción se
propagará de vuelta al llamador del método, y así sucesivamente. La búsqueda de un controlador continuará hasta la pila de
llamadas, que es la serie de procedimientos a los que se llama dentro de la aplicación. Si ésta tampoco encuentra un
controlador para la excepción, se mostrará un mensaje de error y la aplicación finalizará.
Nota
Un método puede contener un método de control de excepciones estructurado o uno no estructurado, pero no ambos.

Control estructurado de excepciones


En el control estructurado de excepciones, los bloques de código se encapsulan y cada uno de ellos tiene uno o varios
controladores asociados. Cada controlador especifica una forma de condición de filtro para el tipo de excepción que controla.
Cuando el código de un bloque protegido genera una excepción, se busca por orden en el conjunto de controladores
correspondientes y se ejecuta el primero que contenga una condición de filtro coincidente. Un método puede tener varios
bloques de control estructurado de excepciones y dichos bloques pueden además estar anidados.
La instrucción Try...Catch...Finally se utiliza específicamente para el control estructurado de excepciones. Para obtener más
información, consulte Información general sobre el control estructurado de excepciones de Visual Basic.
Control no estructurado de excepciones
La instrucción On Error se utiliza específicamente para el control no estructurado de excepciones. En este tipo de control, On
Error se coloca al principio de un bloque de código, y, entonces, tiene "ámbito" sobre el bloque; controla cualquier error que se
produzca dentro del bloque. Si el programa encuentra otra instrucción On Error, ésta pasa a ser válida e invalida a la primera.
Para obtener más información, consulte Información general sobre el control no estructurado de excepciones.
Vea también
Tareas
Solucionar problemas de control de excepciones
Tutorial: Control estructurado de excepciones
Referencia
Instrucción On Error (Visual Basic)
Conceptos
Tipos de errores
Información general sobre el control estructurado de excepciones de Visual Basic
Información general sobre el control no estructurado de excepciones
Otros recursos
Tareas para el control de excepciones
Conceptos del lenguaje Visual Basic

Elegir cuándo se debe utilizar el control estructurado de


excepciones y cuándo el control no estructurado de
excepciones
El control estructurado de excepciones es simplemente eso: utilizar una estructura de control que contiene excepciones,
bloques aislados de código y filtros para crear un mecanismo de control de excepciones. Esto permite al código diferenciar
entre diversos tipos de errores y reaccionar de acuerdo con las circunstancias. En el control estructurado de excepciones, una
instrucción On Error al principio del código controla todas las excepciones.
Comentarios
El control estructurado de excepciones es significativamente más versátil, robusto y flexible que el no estructurado. Si es
posible, utilice el control estructurado de excepciones. No obstante, quizá desee usar el control no estructurado de excepciones
bajo las siguientes circunstancias:
Cuando se actualiza una aplicación escrita en una versión anterior de Visual Basic.
Cuando se desarrolla una versión preliminar o de borrador de una aplicación y no importa si el programa no se cierra
correctamente.
Cuando se sabe de antemano, exactamente, qué provocará la excepción.
Hay una fecha límite, necesita trabajar con rapidez y prefiere sacrificar la flexibilidad a la velocidad.
Cuando el código es trivial o tan corto que sólo es necesario probar la bifurcación del código que genera la excepción.
Cuando es necesario utilizar la instrucción Resume Next, que no se admite en el control estructurado de excepciones.
No es posible combinar el control estructurado de excepciones y el no estructurado en la misma función. Si utiliza una
instrucción On Error, no puede utilizar una instrucción Try...Catch en la misma función.
Independientemente de lo que elija para controlar las excepciones del código, deberá retroceder un paso y examinar qué
suposiciones hace el código. Por ejemplo, cuando la aplicación pide al usuario que escriba un número de teléfono, están
presentes las siguientes suposiciones:
El usuario escribirá un número en lugar de caracteres.
El número tendrá algo de formato.
El usuario no escribirá ninguna cadena de tipo null.
El usuario tiene un número de teléfono único.
La entrada del usuario puede infringir cualquiera o todas estas suposiciones. Un código robusto requiere un control de
excepciones adecuado, que permita que la aplicación se recupere correctamente de la infracción.
A menos que pueda garantizar que un método nunca producirá una excepción, bajo ninguna circunstancia, incluya un control
de excepciones que ofrezca información. El control de excepciones debe ser comprensible. Además de afirmar que algo fue
mal, los mensajes resultantes del control de excepciones deben indicar porqué y dónde fue mal. Un mensaje poco informativo,
del tipo de "Ocurrió un error", sólo sirve para frustrar al usuario.
Vea también
Tareas
Solucionar problemas de control de excepciones
Conceptos
Tipos de errores
Información general sobre el control estructurado de excepciones de Visual Basic
Información general sobre el control no estructurado de excepciones
Conceptos del lenguaje Visual Basic

Tipos de errores
En Visual Basic, los errores (también denominados excepciones) se dividen en tres categorías: errores de sintaxis, errores en
tiempo de ejecución y errores lógicos.
Errores sintácticos
Los errores de sintaxis son aquéllos que aparecen mientras escribe el código. Visual Basic comprueba su código cuando lo
escribe en la ventana del Editor de código y le avisa si comete algún error, como escribir mal una palabra o utilizar un
elemento del lenguaje incorrectamente. Los errores sintácticos son los errores más frecuentes. Se pueden corregir fácilmente
en el entorno de codificación en cuanto se producen.
Nota
La instrucción Option Explicit es una medida para evitar los errores de sintaxis. Le obliga a declarar, por anticipado, todas la
s variables que se vayan a utilizar en la aplicación. De este modo, cuando se utilicen las variables en el código, cualquier error
tipográfico que se produzca se capturará de forma inmediata, y podrá corregirse.

Errores en tiempo de ejecución


Los errores en tiempo de ejecución son aquellos que aparecen solamente después de la compilación y la ejecución del código.
Pueden darse errores de este tipo, por ejemplo, en fragmentos de código aparentemente correctos, por no presentar errores
sintácticos, pero que no se ejecutan correctamente. Por ejemplo, podría escribir correctamente una línea de código que abre un
archivo. Pero, si el archivo está dañado, la aplicación no podrá ejecutar la función Open y se detendrá su ejecución. La mayoría
de los errores de este tipo pueden corregirse modificando el código que presenta errores, para después compilarlo y volver a
ejecutarlo.
Errores lógicos
Los errores lógicos son aquellos que aparecen cuando la aplicación está en funcionamiento. Son a menudo resultados no
deseados o inesperados en respuesta a acciones del usuario. Por ejemplo, una clave mal escrita u otra influencia externa podría
hacer que la aplicación dejase de funcionar aún siendo correctos los parámetros, o que simplemente no funcionase. Por lo
general, los errores lógicos son los más difíciles de corregir, puesto que no siempre está claro dónde se originan.
Vea también
Conceptos
Introducción al control de excepciones
Información general sobre el control estructurado de excepciones de Visual Basic
Información general sobre el control no estructurado de excepciones
Otros recursos
Tareas para el control de excepciones
Guía básica del depurador
Conceptos del lenguaje Visual Basic

Corrección automática de la compilación inteligente


La característica Corrección automática de compilación inteligente sugiere correcciones cuando se producen los errores,
permitiéndole elegir una solución que se va a aplicar al código.
Cuando se produce un error, si hay un símbolo debajo del lado derecho del subrayado ondulado, al colocar el mouse sobre la
línea ondulada o al hacer doble clic en el mensaje de error en la lista de tareas, el símbolo se convierte en un panel de etiquetas
inteligentes. Al hacer clic o colocar el puntero del mouse sobre el panel de etiquetas inteligentes, se abre la ventana auxiliar
Opciones de corrección de errores, que muestra una descripción del error junto con un conjunto de sugerencias para
corregirlo. Cuando sea necesario, la ventana auxiliar le permite obtener una vista previa de la corrección en una ventana
independiente.
Puede deshacer los cambios una vez aplicados con una operación Deshacer (CTRL+Z).
Para desechar la ventana auxiliar Corrección automática de compilación inteligente, haga clic en cualquier otra parte del
editor.
Esta tabla muestra y explica los elementos mostrados en la ventana Corrección automática de compilación inteligente:
Elemento Descripción
Mensaje de error Muestra el mensaje asociado al error.

Corrección sugerida Muestra posibles maneras de corregir el error. Haga clic en uno para que se aplique a su código.

Vista previa Muestra una vista previa del código corregido. En situaciones donde la corrección no afecta al código,
no se muestra una vista previa.

Expandir todas las vistas Al activar esta casilla de verificación, se expandirán todas las vistas previas.
previas

Vea también
Tareas
Cómo: Corregir los errores del compilador con la función de corrección automática
Conceptos
Tipos de errores
Configurar advertencias en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Corregir los errores del compilador con la función de


corrección automática
La característica Corrección automática de compilación inteligente sugiere correcciones cuando se producen errores y permite
elegir una solución para aplicar al código.
Para corregir un error con Corrección automática de compilación inteligente
1. Cuando se produce un error que se puede corregir con Corrección automática de compilación inteligente, se muestra un
glifo bajo el lado derecho de la línea ondulada. Al detener el puntero del mouse sobre esta línea, el símbolo se convierte
en un panel de etiquetas inteligentes.
2. Haga clic o detenga el puntero del mouse sobre el panel de etiquetas inteligentes. Aparece la ventana de aplicación
auxiliar Opciones de corrección de errores, que muestra una descripción del error y un conjunto de sugerencias para
solucionarlo. Haga clic en la corrección que desea aplicar.
3. Puede deshacer cambios que se han aplicado con una operación Deshacer (CTRL+Z). Para cerrar la ventana de
aplicación auxiliar Opciones de corrección de errores, haga clic en otra parte del editor.
Vea también
Tareas
Cómo: Obtener información sobre los errores del compilador en Visual Basic
Referencia
Corrección automática de la compilación inteligente
Conceptos del lenguaje Visual Basic

Configurar advertencias en Visual Basic


El compilador de Visual Basic incluye un conjunto de advertencias sobre código que puede producir errores en tiempo de
ejecución. Puede utilizar esta información para escribir código más limpio, rápido y mejor con menos errores. Por ejemplo, el
compilador muestra una advertencia cuando el usuario intenta invocar un miembro de una variable de objeto sin asignar,
volver de una función sin establecer el valor devuelto o ejecutar un bloque Try con errores en la lógica para detectar
excepciones.
En ocasiones, el compilador proporciona lógica adicional en nombre del usuario para que éste pueda centrarse en la tarea
actual en lugar de dedicarse a anticipar posibles errores. En versiones anteriores de Visual Basic, se utilizaba Option Strict
para limitar la lógica adicional que proporciona el compilador de Visual Basic. La configuración de las advertencias permite
limitar esta lógica de una manera más específica, en el nivel de las advertencias individuales.
Puede personalizar su proyecto y desactivar algunas advertencias que no afectan a su aplicación o convertir otras advertencias
en errores. Esta página explica cómo activar y desactivar las advertencias individuales.
Activar y desactivar advertencias
Existen cuatro formas diferentes de configurar advertencias: puede configurarlas con el Diseñador de proyectos o puede
utilizar las opciones de compilador /warnaserror y /nowarn.
La ficha Compilar de la página Diseñador de proyectos permite activar y desactivar las advertencias. Active la casilla de
verificación Deshabilitar todas las advertencias para deshabilitar todas las advertencias; active Considerar todas las
advertencias como errores para tratar todas las advertencias como errores. Algunas advertencias individuales se pueden
alternar como errores o advertencias en la tabla mostrada.
Cuando Option Strict se establece como Off, las advertencias relacionadas con Option Strict no se pueden tratar como
independientes entre sí. Cuando Option Strict se establece como On, las advertencias asociadas se tratan como errores,
independientemente de su estado. Si Option Strict se establece como Custom mediante la especificación de
/optionstrict:custom en el compilador de la línea de comandos, las advertencias de Option Strict se pueden activar y
desactivar de manera independiente.
También se puede utilizar la opción de la línea de comandos /warnaserror del compilador para especificar si las advertencias
se tratan como errores. Puede agregar una lista delimitada por comas a esta opción para especificar qué advertencias se deben
tratar como errores o advertencias, utilizando + o -. En la tabla siguiente se especifican las opciones posibles.
Opción de la línea de c Especifica
omandos
/warnaserror+ Tratar todas las advertencias como errores.

/warnsaserror- No tratar las advertencias como errores. Éste es el valor predeterminado.

/warnaserror+:<warning Tratar advertencias concretas como errores, indicadas por su número de identificador de error en u
list > na lista delimitada por comas.

/warnaserror-:<warning No tratar advertencias concretas como errores, indicadas por su número de identificador de error e
list>
n una lista delimitada por comas.

/nowarn No indicar advertencias.

/nowarn:<warning list> No indicar advertencias concretas, indicadas por su número de identificador de error en una lista d
elimitada por comas.

La lista de advertencias contiene el número de identificador de error de las advertencias que deben tratarse como errores, que
se puede utilizar en las opciones de la línea de comandos para activar o desactivar advertencias concretas. Si la lista de
advertencias contiene un número no válido, se muestra un error.
Ejemplos
Esta tabla de ejemplos de argumentos de la línea de comandos describe qué hace cada argumento.
Argumento Descripción
vbc /warnaserror Especifica que todas las advertencias se deben tratar como errores.

vbc /warnaserror:42024 Especifica que la advertencia 42024 se debe tratar como un error.

vbc /warnaserror:42024,42025 Especifica que las advertencias 42024 y 42025 se deben tratar como errores.

vbc /nowarn Especifica que no se deben indicar advertencias.

vbc /nowarn:42024 Especifica que no se debe indicar la advertencia 42024.

vbc /nowarn:42024,42025 Especifica que no se deben indicar las advertencias 42024 y 42025.

Tipos de advertencias
A continuación se muestra una lista de advertencias que podría tratar como errores.
Advertencia de conversión implícita
Se genera para las instancias de conversión implícita. No incluyen las conversiones implícitas de un tipo numérico intrínseco a
una cadena cuando se utiliza el operador &. Deshabilitado de forma predeterminada para nuevos proyectos.
ID: 42016
Advertencia de invocación de métodos enlazados en tiempo de ejecución y de resolución de sobrecarga
Se genera para las instancias de enlace en tiempo de ejecución. Deshabilitado de forma predeterminada para nuevos
proyectos.
ID: 42017
Advertencia de operandos de tipo Object
Se genera cuando se producen operandos de tipo Object que crearían un error con Option Strict On. Habilitado de forma
predeterminada para nuevos proyectos.
ID: 42018 y 42019
Advertencia de declaraciones que requieren la cláusula 'As'
Se genera cuando una declaración de variable, función o propiedad a la que le falta una cláusula As habría creado un error con
Option Strict On. Se supone que las variables que no tienen un tipo asignado son del tipo Object. Habilitado de forma
predeterminada para nuevos proyectos.
ID: 42020 (declaración de variable), 42021 (declaración de función) y 42022 (declaración de propiedad).
Advertencia de posible excepción de referencia NULL
Se genera cuando se utiliza una variable antes de ser asignada a un valor. Habilitado de forma predeterminada para nuevos
proyectos.
ID: 42104, 42030
Advertencia de variable local no usada
Se genera cuando se declara una variable local pero no se hace referencia a ella. Habilitado de forma predeterminada.
ID: 42024
Advertencia de acceso a miembro Shared mediante una variable de instancia
Se genera cuando el acceso a un miembro Shared desde una instancia puede tener efectos secundarios o cuando el acceso a
un miembro Shared desde una vista de instancia no constituye la parte derecha de una expresión o se pasa como un
parámetro. Habilitado de forma predeterminada para nuevos proyectos.
ID: 42025
Advertencia de acceso recursivo a un operador o una propiedad
Se genera cuando el cuerpo de una rutina utiliza el mismo operador o propiedad donde se ha definido. Habilitado de forma
predeterminada para nuevos proyectos.
ID: 42004 (operador), 42026 (propiedad)
Advertencia de función u operador sin valor devuelto
Se genera cuando la función o el operador no tiene un valor devuelto especificado. Incluye la omisión de Set en la variable
local implícita con el mismo nombre que la función. Habilitado de forma predeterminada para nuevos proyectos.
ID: 42105 (función), 42016 (operador)
Advertencia de modificador Overloads utilizado en un módulo
Se genera cuando se utiliza Overloads en un objeto Module. Habilitado de forma predeterminada para nuevos proyectos.
ID: 42028
Advertencia de bloques Catch duplicados o superpuestos
Se genera cuando no se alcanza un bloque Catch debido a su relación con otros bloques Catch definidos. Habilitado de forma
predeterminada para nuevos proyectos.
ID: 42029, 42031
Vea también
Tareas
Cómo: Habilitar o deshabilitar las advertencias del compilador
Referencia
Ayudante de excepciones (Cuadro de diálogo)
/nowarn
/warnaserror (Visual Basic)
Compiler Warnings That Are Off by Default
Conceptos
Tipos de errores
Otros recursos
Tareas para el control de excepciones
Conceptos del lenguaje Visual Basic

Control estructurado de excepciones en Visual Basic


El control estructurado de excepciones es una estructura de control que contiene excepciones, bloques aislados de código y
filtros para crear un mecanismo de control de excepciones. Con el control estructurado de excepciones, el código puede
diferenciar entre los distintos tipos de errores y reaccionar según corresponda.
En esta sección
Tareas para el control de excepciones
Muestra las tareas de control de excepciones comunes, como por ejemplo cómo detectar una excepción y cómo filtrar las
excepciones en un bloque Catch.
Información general sobre el control estructurado de excepciones de Visual Basic
Proporciona información general sobre las ventajas y estructuras del control estructurado de excepciones.
Clase de excepción de Visual Basic
Describe la clase Exception.
Tutorial: Control estructurado de excepciones
Proporciona un tutorial para crear una aplicación simple e insertar el código de control de excepciones.
Solucionar problemas de control de excepciones
Muestra los errores que se producen normalmente al utilizar el control estructurado de excepciones y describe cómo
corregirlos.
Referencia
Instrucción Throw (Visual Basic)
Describe la instrucción Throw y muestra cómo utilizarla para producir una excepción.
Instrucción Try...Catch...Finally (Visual Basic)
Describe las instrucciones Try…Catch…Finally y muestra cómo utilizarlas para probar los bloques de código.
Secciones relacionadas
Elegir cuándo se debe utilizar el control estructurado de excepciones y cuándo el control no estructurado de excepciones
Describe las ventajas del control de excepciones estructurado y no estructurado.
Información general sobre el control no estructurado de excepciones
Describe el control no estructurado de excepciones y muestra cómo utilizarlo.
Conceptos del lenguaje Visual Basic

Tareas para el control de excepciones


Visual Basic admite el control (de errores) de excepciones tanto estructurado como no estructurado. Al colocar código concreto
del control de excepciones en la aplicación, podrá controlar la mayoría de los errores con los que se pueden encontrar los
usuarios. Utilice el control de excepciones estructurado y no estructurado para evitar que haya errores que interfieran con la
aplicación.
En esta sección
Cómo: Detectar una excepción en Visual Basic
Muestra cómo se utiliza un bloque Try…Catch para detectar una excepción.
Cómo: Producir una excepción en Visual Basic
Muestra cómo se utiliza la instrucción Throw para producir una excepción.
Cómo: Implementar bloques Try...Catch de E/S en Visual Basic
Muestra cómo se utiliza un bloque Try…Catch para comprobar una operación de entrada o salida.
Cómo: Comprobar código con un bloque Try...Catch en Visual Basic
Muestra cómo se utiliza un bloque Try…Catch para comprobar una sección de código.
Cómo: Liberar recursos con un bloque Try...Finally en Visual Basic
Muestra cómo se utiliza un bloque Try…Catch…Finally para limpiar los recursos utilizados por el código.
Cómo: Filtrar errores en un bloque Catch de Visual Basic
Muestra cómo se filtran tipos de errores específicos dentro de un bloque Try…Catch.
Cómo: Mostrar un mensaje de excepción en Visual Basic
Muestra cómo se recupera la cadena asociada a un mensaje de error.
Cómo: Crear nuevas clases de excepciones en Visual Basic
Muestra cómo se crea una nueva clase de excepción.
Cómo: Comprobar la excepción interna de una excepción
Muestra cómo se determina la excepción original mediante el examen de la propiedad de una excepción InnerException.
Referencia
Instrucción Throw (Visual Basic)
Describe la instrucción Throw y cómo se utiliza.
Instrucción Try...Catch...Finally (Visual Basic)
Describe las instrucciones Try, Catch y Finally, y cómo se utilizan.
Conceptos del lenguaje Visual Basic

Cómo: Detectar una excepción en Visual Basic


Este ejemplo muestra cómo se utiliza un bloque Try y Catch para detectar excepciones.
Ejemplo
Este ejemplo muestra cómo se utiliza un bloque Try…Catch para detectar una excepción OverflowException.
Este ejemplo de código también está disponible en el fragmento de código de IntelliSense. En el selector de fragmentos de
código, se encuentra en Lenguaje Visual Basic. Para obtener más información, consulte
Cómo: Insertar fragmentos de código en el código (Visual Basic).
VB
Dim Top As Double = 5
Dim Bottom As Double = 0
Dim Result As Integer
Try
Result = CType(Top / Bottom, Integer)
Catch Exc As System.OverflowException
MsgBox("Attempt to divide by zero resulted in overflow")
End Try

Este ejemplo necesita:


Una referencia al espacio de nombres System.
El ejemplo de código siguiente implementa un bloque Try...Catch que controla Exception, IOException y todas las excepciones
que se derivan de IOException.
VB
Try
' Add code for your I/O task here.
Catch dirNotFound As System.IO.DirectoryNotFoundException
Throw dirNotFound
Catch fileNotFound As System.IO.FileNotFoundException
Throw fileNotFound
Catch pathTooLong As System.IO.PathTooLongException
Throw pathTooLong
Catch ioEx As System.IO.IOException
Throw ioEx
Catch security As System.Security.SecurityException
Throw security
Catch ex As Exception
Throw ex
Finally
' Dispose of any resources you used or opened in the Try block.
End Try

Agregue el código que desee ejecutar al bloque Try.


Programación eficaz
Utilice este bloque de código como punto inicial para ajustar una operación de datos en una instrucción Try...Catch. Este
bloque Try...Catch está diseñado para detectar y volver a producir todas las excepciones. Es posible que no sea la elección más
adecuada para su proyecto. Para una ver descripción sobre opciones de control de excepciones, consulte
Procedimientos recomendados para utilizar fragmentos de código de IntelliSense.
Puede reducir la probabilidad de excepciones utilizando los controles de formularios Windows Forms como el componente
OpenFileDialog (Componente, formularios Windows Forms) y los controles de componente
SaveFileDialog (Componente, formularios Windows Forms) que limitan las elecciones del usuario a los nombres de archivo
válidos. La propiedad FileInfo.Exists puede comprobar si existe un archivo antes de intentar abrirlo. No obstante, el uso de
estos controles y clases no es infalible. El sistema de archivos puede cambiar entre el momento en el que el usuario selecciona
un archivo y el momento en el que se ejecuta el código. Por ello, cuando se trabaja con archivos es prácticamente obligatorio
realizar un control de excepciones.
Seguridad
Para muchas tareas de archivos, el ensamblado requiere un nivel de privilegios concedido por la clase FileIOPermission. Si
realiza una ejecución en un contexto de confianza parcial, el código podría desencadenar una excepción por falta de privilegios.
Para obtener más información, consulte Conceptos básicos sobre la seguridad de acceso a código. El usuario también necesita
tener acceso al archivo, si existe. Para obtener más información, consulte Listas de control de acceso (ACL).
No debe deducir nada sobre el contenido del archivo a partir de la extensión del nombre del archivo. Por ejemplo, es posible
que el archivo Form1.vb no sea un archivo de código fuente Visual Basic.
Vea también
Tareas
Cómo: Producir una excepción en Visual Basic
Cómo: Comprobar código con un bloque Try...Catch en Visual Basic
Cómo: Liberar recursos con un bloque Try...Finally en Visual Basic
Cómo: Filtrar errores en un bloque Catch de Visual Basic
Cómo: Comprobar la excepción interna de una excepción
Solucionar problemas de control de excepciones
Conceptos
Elegir cuándo se debe utilizar el control estructurado de excepciones y cuándo el control no estructurado de excepciones
Conceptos del lenguaje Visual Basic

Cómo: Producir una excepción en Visual Basic


En este ejemplo se produce una excepción ApplicationException.
Ejemplo
VB
Throw New ApplicationException
' Code to react to possible causes of the exception.

Este ejemplo de código también está disponible en el fragmento de código de IntelliSense. En el selector de fragmentos de
código, se encuentra en Lenguaje Visual Basic. Para obtener más información, vea
Cómo: Insertar fragmentos de código en el código (Visual Basic).
Compilar el código
Para este ejemplo se necesitan:
Una referencia al espacio de nombres System.
Programación eficaz
Las excepciones no controladas pueden provocar que se detenga la ejecución de la aplicación. Utilice los bloques Try…Catch
para anticiparse y controlar las posibles excepciones.
Vea también
Tareas
Cómo: Detectar una excepción en Visual Basic
Cómo: Comprobar código con un bloque Try...Catch en Visual Basic
Cómo: Liberar recursos con un bloque Try...Finally en Visual Basic
Cómo: Filtrar errores en un bloque Catch de Visual Basic
Cómo: Comprobar la excepción interna de una excepción
Solucionar problemas de control de excepciones
Referencia
Exception Class
Instrucción Throw (Visual Basic)
Conceptos
Elegir cuándo se debe utilizar el control estructurado de excepciones y cuándo el control no estructurado de excepciones
Conceptos del lenguaje Visual Basic

Cómo: Implementar bloques Try...Catch de E/S en Visual Basic


El ejemplo de código siguiente implementa un bloque Try...Catch que controla Exception, IOException y todas las excepciones
que se derivan de IOException.
Ejemplo
Este ejemplo va de lo más concreto a lo menos concreto; las excepciones se prueban de una en una.
Este ejemplo de código también está disponible en el fragmento de código de IntelliSense. En el selector de fragmentos de
código, se encuentra en Sistema de archivos - Procesando unidades, carpetas y archivos. Para obtener más información,
vea Cómo: Insertar fragmentos de código en el código (Visual Basic).
VB
Try
' Add code for your I/O task here.
Catch dirNotFound As System.IO.DirectoryNotFoundException
' Code to handle DirectoryNotFoundException.
Catch fileNotFound As System.IO.FileNotFoundException
' Code to handle FileNotFoundException.
Catch pathTooLong As System.IO.PathTooLongException
' Code to handle PathTooLongException.
Catch ioEx As System.IO.IOException
' Code to handle IOException.
Catch security As System.Security.SecurityException
' Code to handle SecurityException.
Catch ex As Exception
' Rethrow exception if anything else has occurred.
Throw ex
Finally
' Dispose of any resources you used or opened in the Try block.
End Try

Compilar el código
Agregue el código que desee ejecutar al bloque Try.
Programación eficaz
Utilice este bloque de código como punto inicial para ajustar una operación de datos en una instrucción Try...Catch. Este
bloque Try...Catch está diseñado para detectar y volver a producir todas las excepciones. Es posible que no sea la elección más
adecuada para su proyecto. Para una ver descripción sobre opciones de control de excepciones, consulte
Procedimientos recomendados para utilizar fragmentos de código de IntelliSense.
Puede reducir la probabilidad de excepciones utilizando los controles de formularios Windows Forms como el componente
OpenFileDialog (Componente, formularios Windows Forms) y los controles de componente
SaveFileDialog (Componente, formularios Windows Forms) que limitan las elecciones del usuario a los nombres de archivo
válidos. La propiedad FileInfo.Exists puede comprobar si existe un archivo antes de intentar abrirlo. No obstante, el uso de
estos controles y clases no es infalible. El sistema de archivos puede cambiar entre el momento en el que el usuario selecciona
un archivo y el momento en el que se ejecuta el código. Por ello, cuando se trabaja con archivos es prácticamente obligatorio
realizar un control de excepciones.
Seguridad
Para muchas tareas de archivos, el ensamblado requiere un nivel de privilegios concedido por la clase FileIOPermission. Si
realiza una ejecución en un contexto de confianza parcial, el código podría desencadenar una excepción por falta de privilegios.
Para obtener más información, consulte Conceptos básicos sobre la seguridad de acceso a código. El usuario también necesita
tener acceso al archivo, si existe. Para obtener más información, consulte Listas de control de acceso (ACL).
No debe deducir nada sobre el contenido del archivo a partir de la extensión del nombre del archivo. Por ejemplo, es posible
que el archivo Form1.vb no sea un archivo de código fuente Visual Basic.
Vea también
Tareas
Cómo: Filtrar errores en un bloque Catch de Visual Basic
Cómo: Comprobar la excepción interna de una excepción
Referencia
Instrucción Try...Catch...Finally (Visual Basic)
Conceptos
Procedimientos recomendados para utilizar fragmentos de código de IntelliSense
Información general sobre el control estructurado de excepciones de Visual Basic
Elegir cuándo se debe utilizar el control estructurado de excepciones y cuándo el control no estructurado de excepciones
Otros recursos
Tareas para el control de excepciones
Conceptos del lenguaje Visual Basic

Cómo: Comprobar código con un bloque Try...Catch en Visual


Basic
Una instrucción Catch se puede utilizar dentro de un bloque Try para detectar y responder a una excepción específica o a
varias excepciones. Si aparece una excepción durante la ejecución de un código de la sección Try, el compilador de Visual Basic
examina cada instrucción Catch dentro del bloque hasta que encuentra una cuya condición coincide con la excepción. De no
encontrarse, se produciría un error.
Para detectar una excepción específica
1. Utilice un bloque Try para probar el bloque de código, incluyéndolo en Try y End Try, como en el ejemplo siguiente que
copia el archivo MyLog en el mismo directorio y le cambia el nombre BackupLog.
VB
Try
My.Computer.FileSystem.CopyFile("MyLog", "BackupLog")
Catch ex As System.IO.IOException
MsgBox("An error occurred")
End Try

2. Dentro del bloque Try, proporcione instrucciones Catch que señalen a los tipos específicos de errores, desde el más
específico al menos específico. Aquí, la instrucción Catch detecta cualquier excepción IOException antes de buscar las
excepciones generales.
VB
Catch ex As System.IO.FileNotFoundException
MsgBox("No such file in this directory.")
Catch ex As System.Exception
MsgBox("An unspecified error occurred.")

Vea también
Tareas
Cómo: Liberar recursos con un bloque Try...Finally en Visual Basic
Cómo: Filtrar errores en un bloque Catch de Visual Basic
Cómo: Comprobar la excepción interna de una excepción
Solucionar problemas de control de excepciones
Referencia
Instrucción Try...Catch...Finally (Visual Basic)
Conceptos
Elegir cuándo se debe utilizar el control estructurado de excepciones y cuándo el control no estructurado de excepciones
Otros recursos
Tareas para el control de excepciones
Conceptos del lenguaje Visual Basic

Cómo: Liberar recursos con un bloque Try...Finally en Visual


Basic
Una instrucción Finally se puede utilizar dentro de un bloque Try para garantizar que los recursos asignados estén limpios. El
código en un bloque Finally se ejecuta después del código del control de excepciones, pero antes de que el control vuelva al
procedimiento de llamada. El código de un bloque Finally se ejecuta incluso si el código produce una excepción e incluso si
agrega una instrucción explícita Exit Function (o Exit Sub) dentro de un bloque Catch.
Si no necesita detectar excepciones específicas, la instrucción Using se comporta como un bloque Try…Finally y garantiza la
disposición de los recursos, independientemente de cómo salga del bloque. Esto es verdad incluso en el caso de una excepción
no controlada. Para obtener más información, consulte Instrucción Using (Visual Basic).
Para limpiar los recursos con una instrucción Finally
Coloque el código que le gustaría ejecutar sin tener en cuenta las excepciones dentro del bloque Finally. El código
siguiente crea StreamReader y lo utiliza para leer un archivo.
VB
Dim reader As New System.IO.StreamReader("C:\testfile")
Try
reader.ReadToEnd()
Catch ex As System.IO.IOException
MsgBox("Could not read file")
Finally
'This command is executed whether or not the file can be read
reader.Close()
End Try

Vea también
Tareas
Cómo: Comprobar código con un bloque Try...Catch en Visual Basic
Cómo: Comprobar la excepción interna de una excepción
Cómo: Deshacerse de un recurso del sistema
Referencia
Instrucción Using (Visual Basic)
Conceptos
Control de excepciones para usuarios de Visual Basic 6.0
Otros recursos
Tareas para el control de excepciones
Conceptos del lenguaje Visual Basic

Cómo: Filtrar errores en un bloque Catch de Visual Basic


Las instrucciones Catch proporcionan más de una opción para filtrar errores. Un método de filtrado es hacerlo mediante tipos
de excepción. En casos como éste, es importante ir del tipo de excepción más específico al más general, ya que las
instrucciones Catch se ejecutan en orden.
También se puede utilizar una cláusula When para filtrar en una expresión condicional, como un número de error concreto.
Puede combinar igualmente ambos planteamientos.
Nota
Las opciones disponibles en los cuadros de diálogo, y los nombres y ubicaciones de los comandos de menú que se ven podrí
an diferir de lo que se describe en la Ayuda, en función de los valores de configuración o de edición activos. Esta página de A
yuda se ha redactado teniendo en cuenta la Configuración general de desarrollo. Para cambiar la configuración, elija Imp
ortar y exportar configuraciones en el menú Herramientas. Para obtener más información, consulte
Valores de configuración de Visual Studio.

Para filtrar en tipos de excepción


Inserte una instrucción Catch para cada tipo de excepción que desea comprobar, del más específico al más general.
VB
Try
Throw New Exception
Catch ex As System.IO.IOException
' Code reacting to IOException
Catch ex As System.NullReferenceException
' Code reacting to NullReferenceException
Catch ex As Exception
' Code reacting to any exception
End Try

Para filtrar en una expresión condicional


Utilice una instrucción Catch When para filtrar en una expresión condicional. Si la expresión condicional se evalúa como
True, se ejecutará el código que sigue al bloque Catch.
VB
Try
' Code goes here.
' Check for type mismatch error.
Catch ex As Exception When Err.Number = 5
' Code reacting to exception.
End Try

Vea también
Tareas
Cómo: Comprobar la excepción interna de una excepción
Solucionar problemas de control de excepciones
Referencia
Instrucción Try...Catch...Finally (Visual Basic)
Conceptos
Control de excepciones para usuarios de Visual Basic 6.0
Elegir cuándo se debe utilizar el control estructurado de excepciones y cuándo el control no estructurado de excepciones
Otros recursos
Tareas para el control de excepciones
Conceptos del lenguaje Visual Basic

Cómo: Mostrar un mensaje de excepción en Visual Basic


El objeto de excepción incluye varias propiedades que ayudan a identificar la ubicación del código, el tipo, la dirección URL de
Helpfile y la razón de la excepción. Una de éstas, la propiedad Message, describe la excepción actual.
Para mostrar la cadena asociada a una excepción
Utilice la propiedad Message para mostrar información acerca de la excepción actual. Este ejemplo detecta una
excepción de tipo WebException y muestra el mensaje asociado.
VB
Try
Throw New System.Net.WebException
Catch ex As System.Net.WebException
MsgBox("An exception occurred:" & vbCrLf & ex.Message)
End Try

Vea también
Tareas
Cómo: Detectar una excepción en Visual Basic
Cómo: Producir una excepción en Visual Basic
Cómo: Comprobar código con un bloque Try...Catch en Visual Basic
Cómo: Comprobar la excepción interna de una excepción
Solucionar problemas de control de excepciones
Referencia
Instrucción Try...Catch...Finally (Visual Basic)
Otros recursos
Control estructurado de excepciones en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Crear nuevas clases de excepciones en Visual Basic


Puede crear clases de excepción propias de la aplicación heredándolas de la clase Exception. Siga lis procedimientos de
codificación correctos terminando el nombre de clase de su excepción con la palabra Exception, como OutOfMoneyException o
TooMuchRainException.

El ejemplo de código siguiente proporciona una implementación básica de una clase de excepción.
Ejemplo
Este ejemplo de código también está disponible en el fragmento de código de IntelliSense. En el selector de fragmentos de
código, se encuentra en Lenguaje Visual Basic. Para obtener más información, vea
Cómo: Insertar fragmentos de código en el código (Visual Basic).
VB
Public Class YourProblemException
Inherits Exception

Public Sub New()


' Add other code for custom properties here.
End Sub

Public Sub New(ByVal message As String)


MyBase.New(message)
' Add other code for custom properties here.
End Sub

Public Sub New(ByVal message As String, ByVal inner As Exception)


MyBase.New(message, inner)
' Add other code for custom properties here.
End Sub

Public Sub New( _


ByVal info As System.Runtime.Serialization.SerializationInfo, _
ByVal context As System.Runtime.Serialization.StreamingContext)
MyBase.New(info, context)
' Insert code here for custom properties here.
End Sub
End Class

Compilar el código
Reemplace YourProblemException por el nombre de la clase de excepción que desea crear. Normalmente, el nombre de
la clase de excepción termina con "Excepción". Agregue propiedades que transmitan información adicional sobre el error
que ha aparecido.
Seguridad
No divulgue información sobre la aplicación o sus datos cuando controla una excepción. Esta información se puede utilizar
para atacar su aplicación.
Vea también
Tareas
Solucionar problemas de control de excepciones
Referencia
ApplicationException Class
Conceptos
Información general sobre el control estructurado de excepciones de Visual Basic
Control de excepciones para usuarios de Visual Basic 6.0
Otros recursos
Tareas para el control de excepciones
Conceptos del lenguaje Visual Basic

Cómo: Comprobar la excepción interna de una excepción


En los casos en los que una excepción se produce como un resultado directo de una excepción anterior, la propiedad
InnerException describe el error original. Esta información puede permitirle controlar el error de un modo más eficaz. Si no hay
ningún error original, el valor de InnerException será una referencia nula o Nothing en Visual Basic. Esta propiedad es de
sólo lectura.
Nota
Las opciones disponibles en los cuadros de diálogo, y los nombres y ubicaciones de los comandos de menú que se ven podrí
an diferir de lo que se describe en la Ayuda, en función de los valores de configuración o de edición activos. Esta página de A
yuda se ha redactado teniendo en cuenta la Configuración general de desarrollo. Para cambiar la configuración, elija Imp
ortar y exportar configuraciones en el menú Herramientas. Para obtener más información, consulte
Valores de configuración de Visual Studio.

Para comprobar una propiedad InnerException


Compruebe la propiedad InnerException de la excepción para determinar la causa del error original.
VB
Try
My.Computer.FileSystem.CopyFile("file1", "file2")
Catch ex As System.IO.IOException
MsgBox(ex.InnerException)
End Try

Vea también
Tareas
Cómo: Mostrar un mensaje de excepción en Visual Basic
Solucionar problemas de control de excepciones
Referencia
InnerException
Otros recursos
Tareas para el control de excepciones
Conceptos del lenguaje Visual Basic

Información general sobre el control estructurado de


excepciones de Visual Basic
Visual Basic admite el control estructurado de excepciones, que puede utilizar para crear y mantener programas mediante
controladores de errores consistentes y exhaustivos. El control estructurado de excepciones es un código diseñado para
detectar y dar respuesta a los errores que se producen durante la ejecución, mediante la combinación de una estructura de
control (similar a Select Case o While) con excepciones, bloques de código protegidos y filtros.
Con la instrucción Try...Catch...Finally, puede proteger bloques de código que tienen posibilidades de producir errores. Los
controladores de excepciones pueden anidarse, y las variables que se declaren en cada bloque tendrán un ámbito local.
Instrucción Try...Catch...Finally
El código siguiente muestra la estructura de la instrucción Try...Catch...Finally.

Try
' Starts a structured exception handler.
' Place executable statements that may generate
' an exception in this block.
Catch [optional filters]
' This code runs if the statements listed in
' the Try block fail and the filter on the Catch statement is true.
[Additional Catch blocks]
Finally
' This code always runs immediately before
' the Try statement exits.
End Try
' Ends a structured exception handler.

El bloque Try de un controlador de excepciones Try...Catch...Finally contiene la sección de código que se va a controlar para
las excepciones. Si aparece un error durante la ejecución de esta sección, Visual Basic examina cada instrucción Catch dentro
de Try...Catch...Finally hasta que encuentre una con una condición que coincida con el error. Si la encuentra, el control se
transferirá a la primera línea de código del bloque Catch. Si no se encuentra una instrucción Catch coincidente, la búsqueda
continuará en las instrucciones Catch del bloque Try...Catch...Finally exterior que contiene el bloque en el que ocurrió la
excepción. Este proceso se prolongará a lo largo de toda la pila hasta que se encuentre un bloque Catch coincidente en el
procedimiento actual. De no encontrarse, se produciría un error.
El código de la sección Finally siempre se ejecuta en último lugar, inmediatamente antes de que el bloque de control de
errores pierda su ámbito, con independencia de que se ejecute el código de los bloques Catch. Sitúe el código de limpieza (el
código que cierra los archivos y libera los objetos, por ejemplo) en la sección Finally. Si no necesita detectar las excepciones,
pero debe limpiar los recursos, considere el uso de la instrucción Using en lugar de una sección Finally. Para obtener más
información, consulte Instrucción Using (Visual Basic).
Filtrar errores en el bloque Catch
Los bloques Catch ofrecen tres opciones para filtrar errores específicos. En una de ellas, los errores se filtran basándose en la
clase de la excepción (en este caso ClassLoadException), como se muestra en el siguiente código.

Try
' "Try" block.
Catch e as ClassLoadException
' "Catch" block.
Finally
' "Finally" block.
End Try

Si se produce un error ClassLoadException, se ejecuta el código del bloque Catch especificado.


En la segunda opción para filtrar errores, la sección Catch puede filtrar cualquier expresión condicional. Un uso común de este
tipo de filtro Catch consiste en comprobar números de error específicos, como se muestra en el código siguiente.
Try
' "Try" block.
Catch When ErrNum = 5 'Type mismatch.
' "Catch" block.
Finally
' "Finally" block.
End Try

Cuando Visual Basic encuentra el controlador de errores coincidente, ejecuta el código de este controlador y pasa el control al
bloque Finally.
Nota
Al buscar un bloque Catch que controle una excepción, se evalúa el controlador de cada bloque hasta encontrar uno que coi
ncida. Puesto que estos controladores pueden ser llamadas a funciones, es posible que se produzcan efectos secundarios no
esperados; por ejemplo, una llamada de este tipo puede cambiar una variable pública y provocar que ésta se utilice en el códi
go de un bloque Catch distinto que termina controlando la excepción.

La tercera alternativa consiste en combinar las dos primeras opciones y utilizar ambas para el control de excepciones. Las
instrucciones Catch deben ir de lo más específico a lo menos específico. Un bloque Catch por sí mismo detectará todas las
excepciones derivadas de Exceptiony, por consiguiente, siempre debe ser el último bloque antes de Finally.
Bifurcación fuera de bloques Try…Catch
Es posible bifurcar a partir de un bloque Catch de nuevo en la instrucción Try inicial o la instrucción End Try, pero no es
posible bifurcar en un bloque Try…Catch de inclusión. Esto se muestra aquí:

Ejemplo de controlador estructurado de excepciones


En el siguiente ejemplo se muestra otro controlador de errores sencillo basado en la instrucción Try...Catch...Finally.

Function GetStringsFromFile(ByVal FileName As String) As Collection


Dim Strings As New Collection
Dim Stream As System.IO.StreamReader = System.IO.File.OpenText(FileName) 'Open the file.

Try
While True
' Loop terminates with an EndOfStreamException
' error when end of stream is reached.
Strings.Add(Stream.ReadLine())
End While
Catch eos As System.IO.EndOfStreamException
' No action is necessary; end of stream has been reached.
Catch IOExcep As System.IO.IOException
' Some kind of error occurred. Report error and clear collection.
MsgBox(IOExcep.Message)
Strings = Nothing
Finally
Stream.Close()
' Close the file.
End Try
Return Strings
End Function

El bloque Finally siempre se ejecuta, con independencia de cualquier otra acción que tenga lugar en los bloques Catch
anteriores. No puede utilizar Resume o Resume Next en el control estructurado de excepciones.
Nota
En el ejemplo anterior, cualquier excepción distinta de la clase IOException o la clase EndOfStreamException se propaga de
nuevo al llamador no controlado.

Vea también
Tareas
Solucionar problemas de control de excepciones
Referencia
Instrucción Try...Catch...Finally (Visual Basic)
Conceptos
Introducción al control de excepciones
Tipos de errores
Información general sobre el control no estructurado de excepciones
Otros recursos
Tareas para el control de excepciones
Conceptos del lenguaje Visual Basic

Clase de excepción de Visual Basic


Para facilitar el uso del control estructurado de excepciones, Visual Basic ofrece la posibilidad de separar el código estándar del
código de control de excepciones. El código de control de excepciones obtiene acceso a una instancia de la clase Exception, que
permite recuperar información de cualquier excepción que se detecte.
Comentarios
Cada vez que se produce una excepción, se establece el objeto Err global y se crea una nueva instancia de la clase Exception.
Las propiedades de la clase Exception ayudan a identificar la ubicación en el código, el tipo y la causa de las excepciones. Por
ejemplo, la propiedad StackTrace muestra una lista de los métodos que fueron invocados antes de que se produjese la
excepción, lo que ayuda a detectar el lugar del código en el que ocurrió el error. La propiedad Message devuelve un mensaje
de texto que describe el error; puede modificar este mensaje para que sea más fácil de entender. Si no proporciona una cadena
de texto del mensaje de error, se utiliza el valor predeterminado. HelpLink obtiene o establece un vínculo en un archivo de
ayuda asociado. Source obtiene o establece una cadena que contiene el nombre del objeto que produce el error o el nombre
del ensamblado donde se originó la excepción.
Nota
Procure no escribir código para comprobar mensajes de error específicos, ya que los mensajes pueden cambiar entre las dist
intas versiones de la clase que los generó en un principio. En vez de esto, pruebe el tipo de excepción o utilice el número de e
xcepción del objeto Err global.

Clase de excepción de propiedades


La tabla siguiente muestra y describe propiedades de la clase Exception.
Propiedad Descripción
HelpLink Obtiene o establece un vínculo en el archivo de ayuda asociado a esta excepción.

HResult Obtiene o establece HRESULT, un valor numérico codificado asignado a una excepción específica.

InnerException Obtiene la instancia Exception que produjo la excepción actual.

Message Obtiene un mensaje que describe la excepción actual.

Source Obtiene o establece el nombre de la aplicación u objeto que produjo el error.

StackTrace Obtiene una representación de la cadena de los marcos en la pila de llamadas en el momento en el que se prod
ujo la excepción actual.

TargetSite Obtiene el método que produjo la excepción actual.

Vea también
Tareas
Solucionar problemas de control de excepciones
Conceptos
Introducción al control de excepciones
Tipos de errores
Información general sobre el control estructurado de excepciones de Visual Basic
Información general sobre el control no estructurado de excepciones
Otros recursos
Tareas para el control de excepciones
Conceptos del lenguaje Visual Basic

Tutorial: Control estructurado de excepciones


Mientras todavía puede emplear la instrucción On Error para controlar las excepciones en su código a fin de proporcionar
control no estructurado de excepciones, Visual Basic 2005 admite también control de excepciones estructurado que puede
utilizar para crear y mantener los programas con control de errores completo. En el control estructurado de excepciones, los
bloques de código prueban circunstancias específicas y reaccionan en consecuencia.
En este tutorial se muestra cómo puede agregar control estructurado de excepciones a un programa. De forma más específica,
muestra cómo utilizar la instrucción Try...Catch...Finally para controlar las excepciones y cómo realizar un filtrado de errores
dentro de los bloques Catch.
Nota
No debe combinar el control de excepciones estructurado con el no estructurado dentro de un mismo procedimiento.

Nota
Los cuadros de diálogo y comandos de menú que verá en Visual Studio pueden variar con respecto a los descritos en la Ayu
da en función de su edición o configuración activa. Para cambiar la configuración, elija Importar y exportar configuracion
es en el menú Herramientas. Para obtener más información, consulte Valores de configuración de Visual Studio.

Crear la aplicación
La siguiente aplicación es un formulario de pedidos de clientes de una compañía que vende ositos de peluche. La interfaz de
usuario consta de los controles siguientes:
Un TextBox para el nombre del cliente.
Dos controles ComboBox para seleccionar el color y tamaño del osito.
Un Button Pedido.
Tres etiquetas que transmiten la finalidad de cada control al usuario.
Cuando el usuario escribe la información necesaria y hace clic en el botón Pedido, la aplicación muestra un resumen del
pedido.
Para crear la aplicación
1. En el menú Archivo, seleccione Nuevo proyecto. Aparecerá el cuadro de diálogo Nuevo proyecto.
2. En la ventana Tipos de proyecto, seleccione Visual Basic y Windows si aún no están seleccionados, seleccione
Aplicación para Windows en la ventana Plantillas.
3. En la ventana Propiedades en Nombre, escriba TeddyBearProject y haga clic en Aceptar. El proyecto se agregará al
Explorador de soluciones y se abrirá el Diseñador de Windows Forms.
4. Agregue los controles al formulario y establezca sus propiedades tal como se especifica.
Control Propiedades Valores de la propiedad
Label Name customerLabel
Text Formulario de pedido de ositos

TextBox Name customerName


Text Nombre del cliente

Label Name bearColorLabel


Text Colores disponibles
ComboBox Name bearColor
Items Negro, marrón, con manchas
Text Color del osito
Label Name bearSizeLabel
Text Tamaños disponibles

ComboBox Name bearSize


Items Pequeño, normal, grande
Text Tamaño

Button Name order


Text Pedido

Agregar funcionalidad
Ahora que ha agregado al conjunto los controles y sus propiedades, debe colocar código detrás de ellos para que funcionen. El
código siguiente controla el evento Click para el botón Pedido y muestra un mensaje al cliente.
Para agregar funcionalidad al formulario y a sus controles
Agregue el código siguiente al evento Click del botón Pedido.
VB
Dim bearOrder As String
bearOrder = _
String.Format("You have ordered a {0} {1} bear.", _
bearSize.SelectedItem, bearColor.SelectedItem)
MsgBox(bearOrder)

Ahora la aplicación está lista para agregarle el código de control estructurado de excepciones.
Agregar un bloque Try...Catch
Para garantizar que el cliente especifica un color de osito, agregue una instrucción Try...Catch. Recuerde lo siguiente:
Una cláusula Catch sin identificador captura todas las excepciones.
Una cláusula Catch con una cláusula When sólo detecta las excepciones cuando la expresión se evalúa como True; el
tipo de expresión debe ser implícitamente convertible a Boolean.

Para agregar un bloque Try...Catch sencillo


Agregue el código siguiente al evento Click del botón Pedido después de la sección que prueba los valores de tamaño y
color, es decir, después de String.Format ("You have ordered a {0} {1} bear.", BearSize.SelectedItem,
BearColor.SelectedItem). Este código produce una excepción si encuentra un valor de color no válido. Para agregar las
instrucciones Try, tenga en cuenta que el editor proporciona automáticamente End Try al final de la instrucción.
VB
Try
If ((bearColor.SelectedIndex < 0) Or _
(bearColor.SelectedIndex > 2)) Then
Throw New System.Exception()
End If
' The Catch statement handles errors caused by a lack of bear color.
Catch ex As Exception When bearColor.SelectedIndex < 0
bearOrder = String.Format("You must select a bear color!")
Finally
Beep() ' Beep at the end.
End Try

Para agregar una cláusula Catch adicional


1. Agregue un nuevo elemento, "Violeta", al control ComboBox bearColor.
2. Agregue el código siguiente después de la línea de código bearOrder = String.Format("You must select a bear
color!"):

VB
Catch ex As Exception When bearColor.SelectedIndex = 3
bearOrder = String.Format("There are no bears of that color.")

Puede agregar tantas cláusulas Catch como sean necesarias al código.


Pruebas
Ahora puede probar la aplicación para asegurarse de que funciona correctamente.
Para generar y ejecutar la aplicación
1. En el menú Generar, seleccione Generar TeddyBearProject.
2. Presione F5 para ejecutar la aplicación. Aparecerá el formulario principal.

Para probar la aplicación


1. Escriba un nombre en el cuadro de texto Nombre del cliente y, a continuación, seleccione un tamaño y color para el
osito en los cuadros combinados Colores disponibles y Tamaños disponibles.
2. Haga clic en el botón Pedido. Si ha seleccionado Negro, Marrón o Con manchas como color en el paso anterior,
aparecerá un mensaje especificando el tamaño y color del osito solicitado.
Si no ha especificado un color, aparecerá un mensaje en el que se le pedirá que lo haga.
3. Haga clic en Aceptar para cancelar el mensaje.
4. En el cuadro de texto Colores disponibles, seleccione Violeta y, a continuación, haga clic en el botón Pedido.
Aparecerá un mensaje que le indicará que no hay ositos disponibles en ese color.
Vea también
Referencia
Instrucción On Error (Visual Basic)
Instrucción Try...Catch...Finally (Visual Basic)
Instrucción Throw (Visual Basic)
Conceptos
Información general sobre el control estructurado de excepciones de Visual Basic
Otros recursos
Tareas para el control de excepciones
Conceptos del lenguaje Visual Basic

Solucionar problemas de control de excepciones


Este tema describe problemas que aparecen normalmente al trabajar con excepciones y cómo tratarlas.
Visual Basic admite el control estructurado de excepciones, que puede utilizar para crear y mantener programas mediante
controladores de errores consistentes y exhaustivos. El control estructurado de excepciones es un código diseñado para
detectar y dar respuesta a los errores que se producen durante la ejecución, mediante la combinación de una estructura de
control (similar a Select Case o While) con excepciones, bloques de código protegidos y filtros.
Excepciones internas
En los casos en los que una excepción se produce como un resultado directo de una excepción anterior, la propiedad
InnerException describe el error original. Esta información le ayuda a controlar el error de un modo más eficaz. Si no hay
ningún error original, el valor de InnerException será una referencia nula o Nothing en Visual Basic. Esta propiedad es de
sólo lectura. Para obtener más información, vea Cómo: Comprobar la excepción interna de una excepción.
Instrucciones Try…Catch
Su código puede no detectar correctamente las excepciones si ordena los bloques Catch incorrectamente. Las instrucciones
Catch deben ir de lo más específico a lo menos específico. Un bloque Catch por sí mismo detectará todas las excepciones
derivadas de Exception y, por consiguiente, siempre debe ser el último bloque antes de Finally.
Vea también
Tareas
Tutorial: Control estructurado de excepciones
Conceptos
Elegir cuándo se debe utilizar el control estructurado de excepciones y cuándo el control no estructurado de excepciones
Otros recursos
Tareas para el control de excepciones
Conceptos del lenguaje Visual Basic

Control no estructurado de excepciones en Visual Basic


Los temas en esta sección tratan el control no estructurado de excepciones, el objeto Err y la recuperación de información de
los errores.
En esta sección
Información general sobre el control no estructurado de excepciones
Trata el control no estructurado de excepciones y cómo utilizar el objeto Err.
Objeto Err en el control no estructurado de excepciones
Describe el objeto Err y sus propiedades.
Cómo: Recuperar información de un objeto de error
Muestra cómo obtener información desde las propiedades de un objeto Err.
Errores interceptables en Visual Basic
Muestra los errores controlables.
Referencia
Err (Objeto, Visual Basic)
Describe el objeto Err y sus miembros.
Description (Propiedad, objeto Err)
Describe la propiedad Description del objeto Err y la forma de utilizarla.
HelpContext (Propiedad, objeto Err)
Describe la propiedad HelpContext del objeto Err y la forma de utilizarla.
HelpFile (Propiedad, objeto Err)
Describe la propiedad Helpfile del objeto Err y la forma de utilizarla.
LastDllError (Propiedad, objeto Err)
Describe la propiedad LastDLLError del objeto Err y la forma de utilizarla.
Number (Propiedad, objeto Err)
Describe la propiedad Number del objeto Err y la forma de utilizarla.
Source (Propiedad, objeto Err)
Describe la propiedad Source del objeto Err y la forma de utilizarla.
Instrucción On Error (Visual Basic)
Describe la instrucción On Error y la forma de utilizarla.
Resume (Instrucción)
Describe la instrucción Resume y la forma de utilizarla.
Instrucción Exit (Visual Basic)
Describe la instrucción Exit y la forma de utilizarla.
Secciones relacionadas
Elegir cuándo se debe utilizar el control estructurado de excepciones y cuándo el control no estructurado de excepciones
Describe las ventajas y desventajas del control estructurado y no estructurado de excepciones.
Tipos de errores
Muestra los tipos de errores que se encuentran en el código.
Conceptos del lenguaje Visual Basic

Información general sobre el control no estructurado de


excepciones
En el caso del control no estructurado de excepciones, se coloca una instrucción On Error al principio de un bloque de código,
que controla todos los errores que se producen dentro del bloque. Cuando se genera una excepción en un procedimiento
después de que se haya ejecutado la instrucción On Error, el programa salta al argumento line especificado en la instrucción
On Error. El argumento line, que es cualquier etiqueta de línea o número de línea, indica la ubicación del controlador de
excepción
A veces se efectúa una llamada desde el procedimiento original hasta otro procedimiento, y se produce una excepción en el
procedimiento al que se llama. En estos casos, si el procedimiento al que se llama no controla la excepción, ésta se propaga de
vuelta al procedimiento que realiza la llamada y la ejecución salta al argumento line.
Nota
El método de control de errores no estructurado mediante On Error puede degradar el rendimiento de la aplicación, y dificul
tar la depuración y el mantenimiento del código. Se recomienda utilizar el método de control de errores estructurado. Para o
btener más información, consulte Información general sobre el control estructurado de excepciones de Visual Basic.

On Error GoTo Line


La instrucción On Error GoTo Line supone que el control de errores se inicia en la línea especificada en el argumento line
necesario. Si se produce un error en tiempo de ejecución, el control se transfiere a la etiqueta o al número de línea especificado
en el argumento, con lo que se activa el controlador de errores. La línea especificada debe estar en el mismo procedimiento
que la instrucción On Error GoTo Line; de lo contrario, Visual Basic genera un error del compilador. En el siguiente ejemplo se
muestra el uso de un controlador de errores con una etiqueta de línea:

Sub TestSub
On Error GoTo ErrorHandler
' Code that may or may not contain errors.
Exit Sub

ErrorHandler:
' Code that handles errors.
Resume
End Sub

El ejemplo contiene un controlador de errores denominado ErrorHandler. Si el código de la subrutina TestSub genera un
error, Visual Basic ejecuta de forma inmediata el código que sigue a la etiqueta ErrorHandler. Al final del bloque de control de
errores, la instrucción Resume transfiere el control de nuevo a la línea de código en la que se produjo el error por primera vez.
Después continúa la ejecución del resto de la subrutina como si no se hubiese producido ningún error.
Nota
Debe colocar una instrucción Exit Sub inmediatamente antes de bloque de control de errores. De lo contrario, Visual Basic ej
ecutará el código de control de errores cuando llegue al final de la subrutina, lo que puede provocar resultados inesperados
o no deseados.

On Error Resume Next


La instrucción On Error Resume Next especifica que, en caso de que se produzca un error en tiempo de ejecución, el control
pase a la instrucción inmediatamente siguiente a aquélla en que se haya producido el error. En ese momento, continúa la
ejecución. On Error Resume Next permite colocar las rutinas de control de errores en los lugares donde se prevea que
pueden producirse, en lugar de transferir el control a otro punto del procedimiento.
Nota
Si el procedimiento llama a otro procedimiento, la instrucción On Error Resume Next se vuelve inactiva durante la ejecució
n del procedimiento llamado. Por lo tanto, debe colocar una instrucción On Error Resume Next en cada procedimiento al q
ue se llame que la necesite. Esto es necesario porque el comportamiento de Resume Next sólo se aplica al procedimiento q
ue contiene la instrucción On Error Resume Next. Si se produce un error no controlado en un procedimiento al que se ha ll
amado, la excepción se propaga de vuelta al procedimiento que realizó la llamada, y la ejecución se reanuda en la instrucción
siguiente a la del procedimiento de llamada. Es estos casos, no se controla el error.

Resume también puede utilizarse de forma independiente, fuera de la instrucción On Error. Si se utiliza Resume de esta
forma, Visual Basic devuelve el control a la instrucción que provocó el error. Resume suele utilizarse después de que un
controlador de errores corrija el error.
Visual Basic dispone también de la instrucción Resume Next que dirige el control a la línea inmediatamente posterior a la
línea de código que provocó el error. Debería utilizar Resume Next en aquellos casos en los que un error no detenga la
ejecución de la aplicación. También debería utilizarla si un error dado no cambia el resultado esperado de la subrutina.
Otra variación en la instrucción Resume es Resume Line que es similar a On Error GoTo Line. Resume Line pasa el control
a una línea que especifica en el argumento line. Resume Line sólo puede utilizarse dentro de un controlador de errores.
Nota
Al depurar el código, debe deshabilitar la instrucción On Error Resume Next.

On Error GoTo 0
La instrucción On Error GoTo 0 deshabilita cualquier controlador de errores en el procedimiento actual. Si no incluye una
instrucción On Error GoTo 0, el controlador de errores se deshabilita igualmente cuando finaliza el procedimiento que
contiene el controlador de excepciones.
Nota
La instrucción On Error GoTo 0 no está designada para especificar la línea 0 en el inicio del código de control de errores, incl
uso aunque el procedimiento contenga una línea número 0.

On Error GoTo -1
La instrucción On Error GoTo -1 deshabilita cualquier controlador de excepciones en el procedimiento actual. Si no incluye
una instrucción On Error GoTo -1, la excepción se deshabilita automáticamente cuando finaliza el procedimiento.
Nota
La instrucción On Error GoTo -1 no está designada para especificar la línea -1 en el inicio del código de control de errores, in
cluso aunque el procedimiento contenga una línea número -1.

Ejemplo de control no estructurado de excepciones


En el código que se muestra a continuación, el controlador de excepciones se denomina DivideByZero y controla un error
específico, el de intentar dividir un número por cero. Si se produce un error distinto, Visual Basic genera un error en tiempo de
ejecución y detiene la aplicación.

Sub ErrorTest ()
' Declare variables.
Dim x As Integer, y As Integer, z As Integer
' The exception handler is named "DivideByZero".
On Error GoTo DivideByZero
' The main part of the code, which might cause an error.
x = 2
y = 0
z = x \ y

' This line disables the exception handler.


On Error GoTo 0
Console.WriteLine(x & "/" & y & " = " & z)
' Exit the subroutine before the error-handling code.
' Failure to do so can create unexpected results.
Exit Sub

' This is the exception handler, which deals with the error.
DivideByZero:
' Include a friendly message to let the user know what is happening.
Console.WriteLine("You have attempted to divide by zero!")

' Provide a solution to the error.


y = 2

' The Resume statement returns to the point at which


' the error first occurred, so the application
' can continue to run.
Resume

End Sub

Vea también
Tareas
Cómo: Recuperar información de un objeto de error
Referencia
End (Instrucción)
Err (Objeto, Visual Basic)
Instrucción Exit (Visual Basic)
Instrucción On Error (Visual Basic)
Resume (Instrucción)
Conceptos
Objeto Err en el control no estructurado de excepciones
Introducción al control de excepciones
Tipos de errores
Elegir cuándo se debe utilizar el control estructurado de excepciones y cuándo el control no estructurado de excepciones
Conceptos del lenguaje Visual Basic

Objeto Err en el control no estructurado de excepciones


Para poder escribir el código de control de errores, es necesario saber el tipo de error que se ha producido. En el control no
estructurado de excepciones, lo puede averiguar utilizando Err (Objeto, Visual Basic).
Este objeto Err contiene propiedades cuyos valores vienen determinados por el error que acaba de producirse. La propiedad
Number contiene la causa del error y la propiedad Description contiene un mensaje de texto que describe el error en detalle.
Helpfile y HelpContext le permiten mostrar un archivo de ayuda relacionado cuando un usuario presiona el botón de Ayuda
o la tecla F1. LastDLLError muestra el último archivo DLL llamado y si la llamada tuvo éxito o no. Source especifica una
expresión de cadena que representa el objeto o aplicación que generó el error.
El controlador de errores debe comprobar o guardar los valores de propiedades relevantes antes de que se produzca otro
error. El código controla los errores de uno en uno, por lo que deberá solucionar el actual antes de pasar al siguiente.
Nota
El objeto Err sólo se puede utilizar con excepciones detectadas con la instrucción On Error GoTo

Errores específicos de una aplicación


Además de controlar los errores generados por Visual Basic, también sería conveniente que controlase los errores específicos
de su aplicación.
Si crea un objeto que tiene acceso a otros objetos, debe escribir el código de forma que se ocupe de cualquier error no
controlado que dichos objetos devuelvan. Si es preciso, asigne los códigos de error de Err.Number a uno de los errores
específicos de su propia aplicación y, a continuación, devuélvalo al procedimiento que realizó la llamada al objeto.
Vea también
Referencia
Instrucción On Error (Visual Basic)
Description (Propiedad, objeto Err)
Number (Propiedad, objeto Err)
HelpFile (Propiedad, objeto Err)
HelpContext (Propiedad, objeto Err)
LastDllError (Propiedad, objeto Err)
Source (Propiedad, objeto Err)
Conceptos
Introducción al control de excepciones
Tipos de errores
Información general sobre el control estructurado de excepciones de Visual Basic
Información general sobre el control no estructurado de excepciones
Conceptos del lenguaje Visual Basic

Cómo: Recuperar información de un objeto de error


Cuando se produce un error en tiempo de ejecución, las propiedades del objeto Err se llenan con información que identifica el
error de forma única y la información que se puede utilizar para tratar el error.
Las propiedades del objeto Err se restablecen con valores cero o con cadenas de longitud cero ("") después de una instrucción
On Error Resume Next y después de una instrucción Exit Sub o Exit Function situada dentro de una rutina de control de
errores. El método Clear se puede utilizar para restablecer Err explícitamente.
Nota
Las opciones disponibles en los cuadros de diálogo, y los nombres y ubicaciones de los comandos de menú que se ven podrí
an diferir de lo que se describe en la Ayuda, en función de los valores de configuración o de edición activos. Esta página de A
yuda se ha redactado teniendo en cuenta la Configuración general de desarrollo. Para cambiar la configuración, elija Imp
ortar y exportar configuraciones en el menú Herramientas. Para obtener más información, consulte
Valores de configuración de Visual Studio.

Para recuperar información de un objeto de error


1. Puede filtrar errores específicos. Este ejemplo comprueba si el error es un error de FileNotFound y reacciona si lo es.
VB
If Err.Number = 53 Then
MsgBox("File Not Found")
End If

2. También puede examinar propiedades específicas del objeto de error, como Description, Erl, HelpContext, Helpfile,
LastDLLError, Numbery Source. Este ejemplo muestra la descripción en un cuadro de mensaje.
VB
MsgBox(Err.Description)

Vea también
Referencia
Err (Objeto, Visual Basic)
Err (Miembros del objeto)
Description (Propiedad, objeto Err)
Erl (Propiedad, objeto Err)
HelpContext (Propiedad, objeto Err)
HelpFile (Propiedad, objeto Err)
LastDllError (Propiedad, objeto Err)
Number (Propiedad, objeto Err)
Source (Propiedad, objeto Err)
Conceptos
Elegir cuándo se debe utilizar el control estructurado de excepciones y cuándo el control no estructurado de excepciones
Conceptos del lenguaje Visual Basic

Implementar la aplicación
.NET Framework proporciona varias características básicas que facilitan la implementación de una variedad de aplicaciones,
incluida la implementación de tipo ClickOnce.
Características de implementación de .NET Framework
Las siguientes características básicas de .NET Framework ayudan a facilitar la implementación:
Aplicaciones carentes de impacto
Uso compartido de código controlado
Control de versiones simultáneas
Actualizaciones inmediatas
Código de confianza parcial
Para obtener más información, vea Características de implementación de .NET Framework.
Fundamentos de la implementación
La implementación es el proceso mediante el cual se distribuye una aplicación o componente finalizado para su instalación en
otros equipos. En Visual Studio, la implementación se puede llevar a cabo basándose en la tecnología de Microsoft Windows
Installer o en la tecnología ClickOnce. Para obtener más información, vea Elegir una estrategia de implementación.
Una aplicación se puede empaquetar como un solo ensamblado, como una colección de ensamblados, como archivos
contenedores (CAB), como un paquete de Microsoft Windows Installer 2.0 o como un paquete de instalación en otro formato.
Para obtener más información, vea Escenarios de implementación de aplicaciones de .NET Framework.
Un ensamblado es una colección de tipos y recursos creados para funcionar en conjunto y formar una unidad lógica de
funcionalidad. Los ensamblados constituyen la unidad fundamental de implementación, control de versiones, reutilización,
definición de ámbitos de activación y permisos de seguridad, y proporcionan a Common Language Runtime (CLR) con la
información que necesita para estar al tanto de las implementaciones de tipos.
Esta tabla muestra las tareas de implementación comunes.
Para Vea
Crear un ensamblado Crear ensamblados

Firmar un ensamblado con un nombre seguro Cómo: Firmar un ensamblado con un nombre seguro

Firmar un ensamblado, pero retardar la asignación de u Cómo: Retrasar la firma de un ensamblado (Visual Studio)
na clave privada hasta más adelante

Crear un par de clave pública/privada para utilizarlo par Cómo: Crear un par de claves privada y pública
a crear un nombre seguro

Ver información de enlace en el archivo de registro Visor de registro de enlaces de ensamblados (Fuslogvw.exe)

Implementar un control de formularios Windows Forms Cómo: Desarrollar un control de formularios Windows Forms sencillo

Implementar una aplicación para obtener acceso COM Implementar una aplicación para obtener acceso a COM

Implementar un servicio Web XML Implementar servicios Web XML

Implementar una aplicación de .NET Framework Implementar aplicaciones de .NET Framework


Control de versiones
El control de versiones, que registra la versión específica de un ensamblado y las versiones de ensamblados dependientes de
un manifiesto de ensamblado, sólo se lleva a cabo en los ensamblados que tienen nombres seguros. Los ensamblados con
nombres seguros tienen identificadores que están formados por la identidad del ensamblado más una clave pública y una
firma digital.
De forma predeterminada, CLR intenta localizar y enlazar con la versión exacta del ensamblado con el que se generó la
aplicación, aunque este comportamiento se puede reemplazar con los ajustes del archivo de configuración.
Para obtener más información, vea Ensamblados en Common Language Runtime, Versiones de los ensamblados y
Ensamblados con nombre seguro.
Implementación ClickOnce
La implementación ClickOnce permite publicar aplicaciones para Windows en un servidor Web o en recurso compartido de
archivos de red con el fin de simplificar la instalación. Cuando desee publicar su aplicación para Windows en un servidor de
red, Visual Studio genera automáticamente los archivos de manifiesto XML necesarios para ClickOnce y publica la aplicación
en el servidor especificado.
Las aplicaciones ClickOnce son independientes y se instalan usuario por usuario, lo que significa que no se requieren derechos
administrativos. Las aplicaciones implementadas utilizando la tecnología de ClickOnce se ejecutan con un conjunto limitado de
permisos basados en una zona de seguridad. Para obtener más información, vea Implementación y seguridad con ClickOnce.
Las aplicaciones ClickOnce pueden ser actualizarse automáticamente; puede controlar cuándo y cómo se implementan las
actualizaciones.
Esta tabla muestra tareas asociadas a la implementación con ClickOnce.
Para Vea
Elegir qué estrategia de implementa Elegir una estrategia de implementación de ClickOnce
ción de ClickOnce (instalar desde el
Web o desde un recurso compartid
o de red, instalar desde CD, o iniciar
desde el Web o un recurso comparti
do de red) se utilizará para su aplica
ción

Elegir qué estrategia de actualizació Elegir una estrategia de actualización de ClickOnce


n de ClickOnce utilizar con su aplica
ción

Implementar una aplicación de tipo Cómo: Publicar aplicaciones ClickOnce


ClickOnce

Elegir si utilizar un directorio de dat Obtener acceso local o remoto a los datos en aplicaciones ClickOnce
os de ClickOnce, almacenamiento ai
slado u otros archivos locales al leer
y escribir datos

Descubrir qué requisitos previos se Requisitos previos de implementación (Visual Studio)


deben cumplir antes de implementa
r correctamente una aplicación

Especificar una ubicación alternativa Cómo: Especificar una ubicación alternativa para las actualizaciones de la implementación
para las actualizaciones de impleme
ntación

Elevar el nivel de permiso de una ap Información general sobre la implementación de aplicaciones de confianza
licación ClickOnce en un equipo clie
nte

Las dificultades para implementar aplicaciones con ClickOnce pueden estar provocadas por problemas de compresión HTTP,
problemas en el análisis de manifiestos, problemas de configuración del servidor y problemas de control de versiones. Para
obtener más información, vea Solucionar problemas de implementación ClickOnce.
Implementación de Windows Installer
La tecnología de Microsoft Windows Installer crea instaladores que proporcionan un control total sobre el proceso de
instalación.
Esta tabla muestra tareas asociadas a la implementación de Windows Installer.
Para Vea
Distribuir archivos o aplica Implementación a través de medios distribuibles
ciones en CD-ROM u otros
medios

Crear un nuevo proyecto d Cómo: Crear o agregar un proyecto de instalación


e instalación o agregar un
proyecto de implementaci
ón existente a una solució
n

Crear un nuevo archivo .ca Cómo: Crear o agregar un proyecto CAB


b para la descarga desde e
l Web o agregar uno existe
nte a una solución

Crear un módulo de combi Cómo: Agregar módulos de combinación a un proyecto de implementación


nación para un component
e

Implementar una aplicació Tutorial: Implementar una aplicación basada en Windows


n basada en Windows en o
tro equipo

Implementar un sitio Web Implementar sitios Web ASP.NET (Visual Studio)


en un servidor Web

Crear una acción personali Tutorial: Crear una acción personalizada


zada para enviar a los usu
arios a un sitio Web una v
ez finalizada la instalación

Pasar los datos a una prop Tutorial: Utilizar una acción personalizada para mostrar un mensaje durante la instalación
iedad dinámica durante la
instalación utilizando una
acción personalizada

Utilizar una acción person Tutorial: Utilizar una acción personalizada para precompilar un ensamblado durante la instalación
alizada para precompilar u
n ensamblado durante la i
nstalación

Utilizar una acción person Tutorial: Utilizar una acción personalizada para crear una base de datos en la instalación
alizada para crear una bas
e de datos durante la instal
ación

Crear una aplicación Web Tutorial: Redirigir una aplicación para que apunte a un servicio Web XML diferente en la instalación
que se puede redirigir par
a que apunte a un servicio
Web XML diferente
Implementar archivos y ap Implementación de un proyecto de programa de instalación Web
licaciones a un servidor W
eb

Vea también
Conceptos
Alternativas de implementación
Otros recursos
Tutoriales de implementación de Windows Installer
Conceptos del lenguaje Visual Basic

Crear y utilizar componentes en Visual Basic


Un componente es una clase que implementa la interfaz System.ComponentModel.IComponent o se deriva directa o
indirectamente de una clase que implementa IComponent. Un componente .NET Framework es un objeto que es reutilizable,
puede interactuar con otros objetos y proporciona control sobre recursos externos y compatibilidad en tiempo de diseño.
Una característica importante de los componentes es que se pueden diseñar, lo que significa que una clase que es un
componente se puede utilizar en el entorno de desarrollo integrado (IDE) de Visual Studio. Un componente se puede agregar
al cuadro de herramientas, se puede arrastrar y colocar en un formulario y manipularse en una superficie de diseño. Observe
que .NET Framework incorpora compatibilidad base en tiempo de diseño con los componentes; un desarrollador de
componentes no tiene que realizar ningún trabajo adicional para aprovechar la funcionalidad base en tiempo de diseño.
Un control es similar a un componente, ya que ambos se pueden diseñar. Sin embargo, un control proporciona una interfaz de
usuario, mientras que un componente no. Un control debe derivarse de una de las clases de control base: Control o Control.
Cuándo crear un componente
Si la clase se va a utilizar en una superficie de diseño (como los formularios Windows Forms o el Diseñador de Web Forms)
pero no tiene una interfaz de usuario, debe ser un componente e implementar la interfaz IComponent o derivarse de una
clase que implemente directa o indirectamente la interfaz IComponent.
Las clases Component y MarshalByValueComponent son implementaciones base de la interfaz IComponent. La diferencia
principal entre estas clases es que la clase Component se calcula por referencia, mientras que IComponent se calcula por
valor. La siguiente lista incluye exhaustivas instrucciones para los implementadores.
Si su componente tiene que calcularse por referencia, derívelo de Component.
Si su componente tiene que calcularse por valor, derívelo de MarshalByValueComponent.
Si su componente no se puede derivar de una de las implementaciones base debido a la herencia única, implemente la
interfaz IComponent.
Para obtener más información sobre la compatibilidad en tiempo de diseño, vea
Atributos en tiempo de diseño para componentes y Ampliar compatibilidad en tiempo de diseño.
Clases de componentes
El espacio de nombres System.ComponentModel proporciona clases que se utilizan para implementar el comportamiento de
componentes y controles en tiempo de diseño y en tiempo de ejecución. Este espacio de nombres incluye las clases e
interfaces necesarias para implementar atributos, convertidores de tipos, enlaces a orígenes de datos y componentes de
licencia.
Las clases de componente básicas son:
Component. Implementación base para la interfaz IComponent. Esta clase habilita el uso compartido de objetos entre
las aplicaciones.
MarshalByValueComponent. Implementación base para la interfaz IComponent.
Container. Implementación base para la interfaz IContainer. Esta clase encapsula cero o más componentes.
Algunas de las clases que se utilizan para otorgar licencias de componentes son:
License. Clase base abstracta para todas las licencias. Una licencia se concede a una instancia concreta de un
componente.
LicenseManager. Suministra propiedades y métodos para agregar una licencia a un componente y administrar una clase
LicenseProvider.
LicenseProvider. Clase base abstracta para implementar un proveedor de licencias.
LicenseProviderAttribute. Especifica la clase LicenseProvider que se va a utilizar con una clase.
Clases normalmente utilizadas para describir y conservar componentes.
TypeDescriptor. Proporciona información sobre las características de un componente, como sus atributos, propiedades y
eventos.
EventDescriptor. Proporciona información sobre un evento.
PropertyDescriptor. Proporciona información sobre una propiedad.
Secciones relacionadas
Clase frente a componente y frente a control
Define componente y control y describe las diferencias entre ellos y las clases.
Creación de componentes
Guía de orientación para comenzar a utilizar componentes.
Tutoriales sobre la creación de componentes
Vínculos a temas que proporcionan instrucciones paso a paso para la programación de componentes.
Clases de componentes
Describe qué convierte una clase en un componente, formas de exponer la funcionalidad de los componentes, cómo
controlar el acceso a los componentes y cómo controlar el modo en que se crean instancias de componentes.
Solución de problemas relacionados con la creación de controles y componentes
Explica cómo resolver problemas comunes.
Vea también
Tareas
Cómo: Obtener acceso a las funciones en tiempo de diseño de formularios Windows Forms
Cómo: Extender la apariencia y el comportamiento de los controles en modo de diseño
Cómo: Llevar a cabo una inicialización personalizada de controles en modo de diseño
Conceptos del lenguaje Visual Basic

Continuar con Visual Basic


Aunque la característica My ofrece una amplia variedad de funcionalidades, puede que desee ir más allá de My y examinar lo
que .NET Framework puede dar. Estas páginas proporcionan información general y punteros a la documentación pertinente
para las áreas de .NET Framework, incluidos formularios, operaciones de la red y servicios Web.
En esta sección
Autenticación y autorización en .NET Framework con Visual Basic
Describe cómo utilizar .NET Framework para la autenticación y autorización de usuarios.
Permisos de acceso a código y seguridad en .NET Framework con Visual Basic
Describe cómo funcionan los permisos y la seguridad de acceso a código en .NET Framework.
Colecciones en .NET Framework con Visual Basic
Explica las clases especializadas para el almacenamiento y la recuperación de datos proporcionados por .NET Framework.
E/S de archivos en .NET Framework con Visual Basic
Describe cómo utilizar .NET Framework para las operaciones de E/S de archivos.
Gráficos en .NET Framework con Visual Basic
Explica cómo utilizar .NET Framework al trabajar con gráficos.
Registrar y realizar seguimiento en .NET Framework con Visual Basic
Describe cómo utilizar .NET Framework al crear y manipular registros o seguimientos.
Personalizar proyectos y ampliar My con Visual Basic
Describe cómo especificar sus propias extensiones al modelo de aplicaciones y personalizar las plantillas de proyecto para
proporcionar objetos My adicionales.
Operaciones de red en .NET Framework con Visual Basic
Describe cómo utilizar .NET Framework al realizar las operaciones a través de la red.
Operaciones de puertos en .NET Framework con Visual Basic
Describe cómo utilizar .NET Framework para realizar operaciones con los puertos.
Serialización en .NET Framework con Visual Basic
Explica cómo utilizar .NET Framework para la serialización.
Desarrollar en Smart Devices con Visual Basic
Proporciona información general sobre los conceptos básicos de programación para los dispositivos inteligentes.
Subprocesamiento múltiple avanzado con Visual Basic
Proporciona información general sobre el modelo de subprocesos.
Conceptos de las aplicaciones de Windows Forms en Visual Basic
Proporciona información general sobre las aplicaciones para Windows.
Agregar informes imprimibles a las aplicaciones de Visual Studio
Aborda las opciones disponibles para escribir informes.
Conceptos del lenguaje Visual Basic

Autenticación y autorización en .NET Framework con Visual


Basic
.NET Framework proporciona un marco de trabajo extensible para autorizar y autenticar a los usuarios. Los temas de esta
sección proporcionan información general sobre estos conceptos y muestran las clases utilizadas normalmente.
En esta sección
Fundamentos de las operaciones de usuarios de .NET Framework
Explica cómo trabajar con autorización de la aplicación en .NET Framework y cómo utilizar la seguridad basada en funciones.
Tutorial: Implementar autenticación y autorización personalizadas
Muestra cómo implementar autenticación y autorización personalizadas, y cómo reemplazar la identidad predeterminada del
subproceso de la aplicación.
Clases utilizadas en operaciones de usuario de .NET Framework
Muestra las clases utilizadas en .NET Framework que sirven de base para el sistema de autenticación del usuario.
Vea también
Referencia
My.User (Objeto)
System.Security.Principal
Conceptos
Acceso a los datos del usuario
Otros recursos
Continuar con Visual Basic
Conceptos del lenguaje Visual Basic

Fundamentos de las operaciones de usuarios de .NET


Framework
.NET Framework proporciona una implementación de seguridad basada en funciones en el espacio de nombres
System.Security.Principal, que puede utilizar para autorizar y autenticar a los usuarios en su aplicación. Este tema trata de
cómo trabajar con autorización de la aplicación en .NET Framework y crear los objetos IIdentity y IPrincipal para representar a
los usuarios.
Una IIdentity encapsula un usuario autenticado. IPrincipal es una combinación de la identidad del usuario y cualquier
función que tenga asignada. Puede utilizar la identidad predefinida y las clases principales del espacio de nombres
System.Security.Principal, o bien agregar autenticación personalizada creando clases que implementen las interfaces.
Para utilizar estas interfaces, debe utilizar los nombres completos de interfaz o importar los espacios de nombres adecuados
incluyendo las instrucciones Imports al principio del archivo de código fuente afectado. Para obtener más información, vea
Imports (Instrucción).
Seguridad basada en funciones en las aplicaciones de .NET Framework
Cada subproceso de aplicación puede tener un objeto principal asociado (accesible mediante la propiedad CurrentPrincipal)
que representa el contexto de seguridad del usuario en cuyo nombre se está ejecutando el código. Un objeto principal
encapsula el objeto de contexto (o identidad) de seguridad de un usuario. Utilizar dos objetos permite una separación de la
autenticación (en el objeto de identidad) y la autorización (en el principal).
Un objeto de identidad debe implementar la interfaz IIdentity. Un objeto de identidad representa a un usuario determinado y
expone las propiedades siguientes como requeridas por la interfaz IIdentity: Name, IsAuthenticated y AuthenticationType. Los
objetos de identidad tienen normalmente miembros privados adicionales que realizan la autenticación de usuarios.
Un objeto principal debe implementar la interfaz IPrincipal. Un objeto principal encapsula el contexto de seguridad del
usuario exponiendo los miembros siguientes como lo requiere la interfaz IPrincipal: el método IsInRole, que realiza la
autorización, y la propiedad Identity, que proporciona el acceso al objeto de identidad del usuario.
Trabajar con identidades
.NET Framework proporciona cuatro clases que implementan la interfaz IIdentity:
WindowsIdentity
GenericIdentity
PassportIdentity
FormsIdentity
Cada clase le permite trabajar con diferentes tipos de identidades del usuario. Para tener acceso al objeto WindowsIdentity
actual para una aplicación que utiliza la autenticación de Windows, utilice el método estático GetCurrent de la clase
WindowsIdentity. También puede establecer el principal del subproceso actual llamando al
My.User.InitializeWithWindowsUser (Método).
También puede crear las clases de identidad personalizadas implementando la interfaz IIdentity en su propia clase
personalizada. Para obtener más información acerca de cómo crear identidades personalizadas, vea
Tutorial: Implementar autenticación y autorización personalizadas.
Trabajar con principales
.NET Framework proporciona la interfaz IPrincipal para vincular funciones e identidades de usuario. Si su aplicación realiza la
autorización, debería utilizar un objeto que implemente IPrincipal. Por ejemplo, las clases WindowsIdentity y
GenericIdentity proporcionan implementaciones integradas de IPrincipal. Como alternativa, puede crear sus propias clases
personalizadas de principal basadas en IPrincipal.
Puede vincular el subproceso actual a un objeto IPrincipal asignando el objeto a la propiedad CurrentPrincipal del
subproceso o a la My.User.CurrentPrincipal (Propiedad). A continuación puede realizar una comprobación de la autorización
probando si el usuario es un miembro de una función determinada. Esto se hace utilizando el método IsInRole del principal.
Las aplicaciones ASP.NET controlan los objetos IPrincipal de manera diferente a como lo hacen otras aplicaciones de .NET
Framework. ASP.NET crea el aspecto de una sesión sobre el protocolo HTTP sin estado. Como parte de esta sesión, el objeto
IPrincipal que representa al usuario está disponible en la propiedad User del objeto HttpContext para todo el código que
ejecute la solicitud del usuario. Common Language Runtime actualiza automáticamente CurrentPrincipal con el valor User
después del evento OnAuthenticate del archivo Global.asax. Las aplicaciones ASP.NET utilizan a menudo la propiedad User
para realizar las comprobaciones de autorización.
Nota
Cambiar manualmente User actualiza automáticamente la propiedad CurrentPrincipal para todos los subprocesos que se e
jecutan dentro del mismo contexto HTTP. Sin embargo, cambiar CurrentPrincipal no afecta a la propiedad User. Afecta sólo
al subproceso elegido para el resto de la solicitud.

En aplicaciones ASP.NET, My.User.CurrentPrincipal (Propiedad) actualiza la propiedad User.


Para obtener más información sobre cómo crear sus propios tipos IPrincipal, vea
Tutorial: Implementar autenticación y autorización personalizadas.
Conceder permisos para trabajar con los objetos IIdentity e IPrincipal
Se debe tener cautela al conceder los permisos para trabajar con objetos IIdentity, porque estos objetos hacen que esté
disponible la información confidencial relacionada con el usuario. Debería proteger el objeto IPrincipal actual de la aplicación
contra los cambios porque la función de autorización de la aplicación está basada en su principal actual.
.NET Framework proporciona esta protección requiriendo que estas operaciones tengan el permiso de seguridad de acceso a
código. Conceda el permiso System.Security.Permissions.SecurityPermissionAttribute.ControlPrincipal a las aplicaciones que
necesitan manipular estos objetos utilizando Herramienta de la directiva de seguridad de acceso a código (Caspol.exe).
De manera predeterminada, todas las aplicaciones instaladas localmente tienen este permiso porque se ejecutan bajo el
conjunto de permisos de plena confianza (FullTrust).
Para ejecutar los métodos siguientes se requiere el permiso ControlPrincipal:
System.AppDomain.SetPrincipalPolicy(System.Security.Principal.PrincipalPolicy)
System.Security.Principal.WindowsIdentity.GetCurrent
System.Security.Principal.WindowsIdentity.Impersonate
System.Threading.Thread.CurrentPrincipal

Vea también
Tareas
Tutorial: Implementar autenticación y autorización personalizadas
Referencia
My.User (Objeto)
Otros recursos
Autenticación y autorización en .NET Framework con Visual Basic
Conceptos del lenguaje Visual Basic

Tutorial: Implementar autenticación y autorización


personalizadas
Este tutorial muestra cómo implementar la autenticación y la autorización personalizadas con clases que derivan de IIdentity y
IPrincipal. En este tutorial también se muestra cómo reemplazar la identidad predeterminada del subproceso de la aplicación,
la identidad de Windows, mediante el establecimiento de My.User.CurrentPrincipal en una instancia de la clase que deriva
de IPrincipal. La nueva información de usuario está disponible de forma inmediata mediante el objeto My.User, que devuelve
información sobre la identidad del usuario actual del subproceso.
Las aplicaciones empresariales suelen proporcionar acceso a datos o recursos basándose en credenciales proporcionadas por
el usuario. Normalmente, dichas aplicaciones comprueban la función de un usuario y proporcionan acceso a recursos
basándose en dicha función. Common Language Runtime proporciona compatibilidad para la autorización basada en
funciones tomando como base una cuenta de Windows o una identidad personalizada. Para obtener más información, vea
Seguridad basada en funciones.
Introducción
En primer lugar, prepare un proyecto con un formulario principal y un formulario de inicio de sesión y configúrelo para utilizar
la autenticación personalizada.
Para crear la aplicación de ejemplo
1. Cree un nuevo proyecto Aplicación para Windows de Visual Basic. Para obtener más información, vea
Cómo: Crear un proyecto de aplicación para Windows.
El nombre predeterminado del formulario principal es Form1.
2. En el menú Proyecto, haga clic en Agregar nuevo elemento.
3. Seleccione la plantilla Formulario de inicio de sesión y haga clic en Agregar.
El nombre predeterminado del formulario de inicio de sesión es LoginForm1.
4. En el menú Proyecto, haga clic en Agregar nuevo elemento.
5. Seleccione la plantilla Clase, cambie el nombre a SampleIIdentityy, a continuación, haga clic en Agregar.
6. En el menú Proyecto, haga clic en Agregar nuevo elemento.
7. Seleccione la plantilla Clase, cambie el nombre a SampleIPrincipaly, a continuación, haga clic en Agregar.
8. En el menú Proyecto, haga clic en Propiedades de <NombreAplicación>.
9. En el Diseñador de proyectos, haga clic en la ficha Aplicación.
10. Cambie el Modo de autenticación desplegable a Definido para la aplicación.
Para configurar el formulario principal
1. Cambie a Form1 en el Diseñador de formularios.
2. Agregue un Botón a Form1 desde el Cuadro de herramientas.
El nombre predeterminado del botón es Button1.
3. Cambie el texto del botón a Authenticate.
4. En el Cuadro de herramientas, agregue una Etiqueta a Form1.
El nombre predeterminado de la etiqueta es Label1.
5. Cambie el texto de la etiqueta a una cadena vacía.
6. En el Cuadro de herramientas, agregue una Etiqueta a Form1.
El nombre predeterminado de la etiqueta es Label2.
7. Cambie el texto de la etiqueta a una cadena vacía.
8. Haga doble clic en Button1 para crear el controlador de eventos para el evento Click y, a continuación, abra el Editor de
código.
9. Agregue el código siguiente al método Button1_Click.
VB
My.Forms.LoginForm1.ShowDialog()
' Check if the user was authenticated.
If My.User.IsAuthenticated Then
Me.Label1.Text = "Authenticated " & My.User.Name
Else
Me.Label1.Text = "User not authenticated"
End If

If My.User.IsInRole(ApplicationServices.BuiltInRole.Administrator) Then
Me.Label2.Text = "User is an Administrator"
Else
Me.Label2.Text = "User is not an Administrator"
End If

Puede ejecutar la aplicación, pero dado que no existe código de autenticación, no autenticará a ningún usuario. En la sección
siguiente se explica cómo agregar código de autenticación.
Crear una identidad
.NET Framework utiliza las interfaces IIdentity y IPrincipal como base para la autenticación y la autorización. Su aplicación
puede utilizar la autenticación de usuario personalizada mediante la implementación de estas interfaces, como muestran estos
procedimientos.
Para crear una clase que implementa IIdentity
1. Seleccione el archivo SampleIIdentity.vb en el Explorador de soluciones.
Esta clase encapsula la identidad de un usuario.
2. En la línea que sigue a Public Class SampleIIdentity, agregue el código siguiente para heredar de IIdentity.

VB
Implements System.Security.Principal.IIdentity

Después de agregar este código y presionar ENTRAR, el Editor de código crea propiedades de código auxiliar que debe
implementar.
3. Agregue campos privados para almacenar el nombre de usuario y un valor que indica si se autentica el usuario.
VB
Private nameValue As String
Private authenticatedValue As Boolean
Private roleValue As ApplicationServices.BuiltInRole

4. Escriba el código siguiente en la propiedad AuthenticationType.


La propiedad AuthenticationType debe devolver una cadena que indique el mecanismo de autenticación actual.
Este ejemplo utiliza la autenticación especificada explícitamente, por lo que la cadena es "Custom Authentication". Si los
datos de autenticación de usuario se han almacenado en una base de datos de SQL Server, el valor podría ser
"SqlDatabase".
VB
Return "Custom Authentication"

5. Escriba el código siguiente en la propiedad IsAuthenticated.


VB
Return authenticatedValue

La propiedad IsAuthenticated debe devolver un valor que indique si se ha autenticado el usuario.


6. La propiedad Name debe devolver el nombre del usuario asociado con esta identidad.
Escriba el código siguiente en la propiedad Name.
VB
Return nameValue

7. Cree una propiedad que devuelva la función del usuario.


VB
Public ReadOnly Property Role() As ApplicationServices.BuiltInRole
Get
Return roleValue
End Get
End Property

8. Cree un método Sub New que inicialice la clase mediante la autenticación del usuario y el establecimiento del nombre y
la función del usuario, basándose en un nombre y una contraseña.
Este método llama a un método denominado IsValidNameAndPassword para determinar si es válida una combinación de
nombre de usuario y contraseña.
VB
Public Sub New(ByVal name As String, ByVal password As String)
' The name is not case sensitive, but the password is.
If IsValidNameAndPassword(name, password) Then
nameValue = name
authenticatedValue = True
roleValue = ApplicationServices.BuiltInRole.Administrator
Else
nameValue = ""
authenticatedValue = False
roleValue = ApplicationServices.BuiltInRole.Guest
End If
End Sub

9. Cree un método denominado IsValidNameAndPassword que determine si es válida una combinación de nombre de
usuario y contraseña.
Nota de seguridad
El algoritmo de autenticación debe tratar las contraseñas de forma segura. Por ejemplo, la contraseña no se debe alma
cenar en un campo de clase.

No debe almacenar las contraseñas de usuario en el sistema, ya que si se filtra esta información no contará con una
aplicación segura. Podría almacenar el código hash de la contraseña de cada usuario. (Una función hash cifra los datos de
forma que la entrada no se puede deducir a partir de la salida.) No se puede determinar una contraseña directamente a
partir de su código hash.
Sin embargo, un usuario malintencionado podría dedicar tiempo a generar un diccionario de los códigos hash de todas
las contraseñas posibles y, a continuación, consultar la contraseña de un código hash determinado. Para protegerse
contra este tipo de ataque, debería agregar un valor salt a la contraseña antes de aplicarle un algoritmo hash para
generar así un código hash con valor salt. Los valores salt son datos adicionales únicos a cada contraseña, que impiden
calcular con antelación un diccionario de códigos hash.
Para proteger las contraseñas de los usuarios malintencionados, sólo debe almacenar valores hash y salt de las
contraseñas, preferiblemente en un equipo seguro. Es muy difícil que un usuario malintencionado pueda recuperar una
contraseña a partir de un código hash con valor salt. Este ejemplo utiliza los métodos GetHashedPassword y GetSalt para
cargar la contraseña con código hash y salt de un usuario.
VB
Private Function IsValidNameAndPassword( _
ByVal username As String, _
ByVal password As String) _
As Boolean

' Look up the stored hashed password and salt for the username.
Dim storedHashedPW As String = GetHashedPassword(username)
Dim salt As String = GetSalt(username)

'Create the salted hash.


Dim rawSalted As String = salt & Trim(password)
Dim saltedPwBytes() As Byte = _
System.Text.Encoding.Unicode.GetBytes(rawSalted)
Dim sha1 As New _
System.Security.Cryptography.SHA1CryptoServiceProvider
Dim hashedPwBytes() As Byte = sha1.ComputeHash(saltedPwBytes)
Dim hashedPw As String = Convert.ToBase64String(hashedPwBytes)

' Compare the hashed password with the stored password.


Return hashedPw = storedHashedPW
End Function

10. Cree funciones denominadas GetHashedPassword y GetSalt que devuelvan la contraseña con código hash y salt del
usuario especificado.
Nota de seguridad
Debe evitar codificar las contraseñas con código hash y salt en las aplicaciones cliente por las dos razones. En primer lu
gar, los usuarios malintencionados pueden tener acceso a ellos y encontrar una colisión hash. En segundo lugar, no pu
ede cambiar ni revocar la contraseña de un usuario. La aplicación debe obtener la contraseña con código hash y salt de
un usuario determinado a partir de un origen seguro que mantiene un administrador.

Por razones de simplicidad, en este ejemplo se ha especificado una contraseña con código hash y salt; sin embargo, en
código de producción debe utilizar un enfoque más seguro. Por ejemplo, podría almacenar la información sobre el
usuario en una base de datos de SQL Server y tener acceso a ella con procedimientos almacenados. Para obtener más
información, vea Cómo: Conectarse a los datos de una base de datos.
Nota
La contraseña que corresponde a esta contraseña con código hash especificada se indica en la sección "Probar la aplica
ción".

VB
Private Function GetHashedPassword(ByVal username As String) As String
' Code that gets the user's hashed password goes here.
' This example uses a hard-coded hashed passcode.
' In general, the hashed passcode should be stored
' outside of the application.
If Trim(username).ToLower = "testuser" Then
Return "ZFFzgfsGjgtmExzWBRmZI5S4w6o="
Else
Return ""
End If
End Function

Private Function GetSalt(ByVal username As String) As String


' Code that gets the user's salt goes here.
' This example uses a hard-coded salt.
' In general, the salt should be stored
' outside of the application.
If Trim(username).ToLower = "testuser" Then
Return "Should be a different random value for each user"
Else
Return ""
End If
End Function

Ahora, el archivo SampleIIdentity.vb debe contener el código siguiente:


VB
Public Class SampleIIdentity
Implements System.Security.Principal.IIdentity

Private nameValue As String


Private authenticatedValue As Boolean
Private roleValue As ApplicationServices.BuiltInRole

Public ReadOnly Property AuthenticationType() As String Implements System.Security.Prin


cipal.IIdentity.AuthenticationType
Get
Return "Custom Authentication"
End Get
End Property

Public ReadOnly Property IsAuthenticated() As Boolean Implements System.Security.Princi


pal.IIdentity.IsAuthenticated
Get
Return authenticatedValue
End Get
End Property

Public ReadOnly Property Name() As String Implements System.Security.Principal.IIdentit


y.Name
Get
Return nameValue
End Get
End Property
Public ReadOnly Property Role() As ApplicationServices.BuiltInRole
Get
Return roleValue
End Get
End Property
Public Sub New(ByVal name As String, ByVal password As String)
' The name is not case sensitive, but the password is.
If IsValidNameAndPassword(name, password) Then
nameValue = name
authenticatedValue = True
roleValue = ApplicationServices.BuiltInRole.Administrator
Else
nameValue = ""
authenticatedValue = False
roleValue = ApplicationServices.BuiltInRole.Guest
End If
End Sub

Private Function IsValidNameAndPassword( _


ByVal username As String, _
ByVal password As String) _
As Boolean

' Look up the stored hashed password and salt for the username.
Dim storedHashedPW As String = GetHashedPassword(username)
Dim salt As String = GetSalt(username)

'Create the salted hash.


Dim rawSalted As String = salt & Trim(password)
Dim saltedPwBytes() As Byte = _
System.Text.Encoding.Unicode.GetBytes(rawSalted)
Dim sha1 As New _
System.Security.Cryptography.SHA1CryptoServiceProvider
Dim hashedPwBytes() As Byte = sha1.ComputeHash(saltedPwBytes)
Dim hashedPw As String = Convert.ToBase64String(hashedPwBytes)

' Compare the hashed password with the stored password.


Return hashedPw = storedHashedPW
End Function

Private Function GetHashedPassword(ByVal username As String) As String


' Code that gets the user's hashed password goes here.
' This example uses a hard-coded hashed passcode.
' In general, the hashed passcode should be stored
' outside of the application.
If Trim(username).ToLower = "testuser" Then
Return "ZFFzgfsGjgtmExzWBRmZI5S4w6o="
Else
Return ""
End If
End Function

Private Function GetSalt(ByVal username As String) As String


' Code that gets the user's salt goes here.
' This example uses a hard-coded salt.
' In general, the salt should be stored
' outside of the application.
If Trim(username).ToLower = "testuser" Then
Return "Should be a different random value for each user"
Else
Return ""
End If
End Function

End Class
Crear una entidad principal
A continuación, debe implementar una clase que derive de IPrincipal y especificar que devuelva instancias de la clase
SampleIIdentity.

Para crear una clase que implementa IPrincipal


1. Seleccione el archivo SampleIPrincipal.vb en el Explorador de soluciones.
Esta clase encapsula la identidad de un usuario. Puede utilizar el objeto My.User para asociar esta entidad principal con
el subproceso actual y tener acceso a la identidad del usuario.
2. En la línea que sigue a Public Class SampleIPrincipal, agregue el código siguiente para heredar de IPrincipal.

VB
Implements System.Security.Principal.IPrincipal

Después de agregar este código y presionar ENTRAR, el Editor de código crea una propiedad y un método de código
auxiliar que debe implementar.
3. Agregue un campo privado para almacenar la identidad asociada con esta entidad principal.
VB
Private identityValue As SampleIIdentity

4. Escriba el código siguiente en la propiedad Identity.


VB
Return identityValue

La propiedad Identity debe devolver la identidad de usuario de la entidad principal actual.


5. Escriba el código siguiente en el método IsInRole.
El método IsInRole determina si la entidad principal actual pertenece a la función especificada.
VB
Return role = identityValue.Role.ToString

6. Cree un método Sub New que inicialice la clase con una nueva instancia de SampleIIdentity dado un nombre de
usuario y contraseña.
VB
Public Sub New(ByVal name As String, ByVal password As String)
identityValue = New SampleIIdentity(name, password)
End Sub

Este código establece la identidad de usuario de la clase SampleIPrincipal.


Ahora, el archivo SampleIPrincipal.vb debe contener el código siguiente:
VB
Public Class SampleIPrincipal
Implements System.Security.Principal.IPrincipal
Private identityValue As SampleIIdentity

Public ReadOnly Property Identity() As System.Security.Principal.IIdentity Implements S


ystem.Security.Principal.IPrincipal.Identity
Get
Return identityValue
End Get
End Property

Public Function IsInRole(ByVal role As String) As Boolean Implements System.Security.Pr


incipal.IPrincipal.IsInRole
Return role = identityValue.Role.ToString
End Function

Public Sub New(ByVal name As String, ByVal password As String)


identityValue = New SampleIIdentity(name, password)
End Sub

End Class

Conectar el formulario de inicio de sesión


La aplicación puede utilizar el formulario de inicio de sesión para recopilar un nombre de usuario y contraseña. Puede utilizar
esta información para inicializar una instancia de la clase SampleIPrincipal y utilizar el objeto My.User para establecer la
identidad del subproceso actual en dicha instancia.
Para configurar el formulario de inicio de sesión
1. Seleccione LoginForm1 en el diseñador.
2. Haga doble clic en el botón Aceptar para abrir el Editor de código en el evento Click.
3. Reemplace el código del método OK_Click por el siguiente código.
VB
Dim samplePrincipal As New SampleIPrincipal( _
Me.UsernameTextBox.Text, Me.PasswordTextBox.Text)
Me.PasswordTextBox.Text = ""
If (Not samplePrincipal.Identity.IsAuthenticated) Then
' The user is still not validated.
MsgBox("The username and password pair is incorrect")
Else
' Update the current principal.
My.User.CurrentPrincipal = samplePrincipal
Me.Close()
End If

Probar la aplicación
Ahora que la aplicación tiene el código de autenticación, puede ejecutarla e intentar autenticar un usuario.
Para probar la aplicación
1. Inicie la aplicación.
2. Haga clic en Autenticar.
Aparece el formulario de inicio de sesión.
3. Escriba TestUser en el cuadro Nombre de usuario y BadPassword en el cuadro Password; a continuación, haga clic en
Aceptar.
Aparece un cuadro de mensaje que indica que la combinación de nombre de usuario y contraseña no es correcta.
4. Haga clic en Aceptar para descartar el cuadro de mensaje.
5. Haga clic en Cancelar para cancelar el formulario de inicio de sesión.
Las etiquetas del formulario principal indican Usuario no autenticado y El usuario no es administrador.
6. Haga clic en Autenticar.
Aparece el formulario de inicio de sesión.
7. Escriba TestUser en el cuadro User name y Password en el cuadro Password; a continuación, haga clic en Aceptar.
Asegúrese de que la contraseña se escribe con las mayúsculas correctas.
Las etiquetas del formulario principal indican TestUser autenticado y El usuario es administrator.

Vea también
Tareas
Cómo: Conectarse a los datos de una base de datos
Referencia
My.User (Objeto)
IIdentity
IPrincipal
Conceptos
Acceso a los datos del usuario
Otros recursos
Autenticación y autorización en .NET Framework con Visual Basic
Autenticación y autorización en .NET Framework con Visual Basic
Conceptos del lenguaje Visual Basic

Clases utilizadas en operaciones de usuario de .NET Framework


Las interfaces IIdentity e IPrincipal forman la base del del sistema de autenticación de usuarios de .NET Framework. Puede
utilizar las implementaciones de estas interfaces que .NET Framework proporciona o implementar estas clases por sí mismo.
Clases base utilizadas para las operaciones de usuario
La mayoría de las clases que admiten operaciones del usuario se encuentran en el espacio de nombres
System.Security.Principal. Para obtener una lista más completa, consulte la documentación de .NET Framework.
Las clases siguientes implementan la interfaz IIdentity, que define la funcionalidad básica de un objeto de identidad.
Clase Descripción
GenericIdentity Representa un usuario genérico.

WindowsIdentity Representa un usuario de Windows.

IdentityReference Representa una identidad y es la clase base para las clases NTAccount y SecurityIdentifier.

NTAccount Representa un usuario o cuenta de grupo.

SecurityIdentifi Representa un identificador de seguridad (SID) y proporciona cálculo de referencias y operaciones de comp
er aración de SID.

Las clases siguientes implementan la interfaz IPrincipal, que define la funcionalidad básica de un objeto principal.
Clase Descripción
GenericPrincipal Representa un principal genérico.

WindowsPrincipal Permite que el código compruebe la pertenencia a grupos de Windows de un usuario de Windows.

En esta tabla se muestran las enumeraciones más importantes utilizadas para las operaciones de usuario de .NET Framework.
Enumeración Descripción
PrincipalPolicy Especifica cómo se deben crear los objetos principal y de identidad para un dominio de aplicación.

WellKnownSidType Define un conjunto de identificadores de seguridad (SID) comúnmente utilizados.

WindowsAccountType Especifica el tipo de cuenta de Windows utilizado.

WindowsBuiltInRole Especifica funciones comunes que se van a utilizar con IsInRole.

Vea también
Tareas
Tutorial: Implementar autenticación y autorización personalizadas
Referencia
My.User (Objeto)
Otros recursos
Autenticación y autorización en .NET Framework con Visual Basic
Conceptos del lenguaje Visual Basic

Permisos de acceso a código y seguridad en .NET Framework


con Visual Basic
En .NET Framework, la seguridad de acceso a código limita el acceso que el código tiene a los recursos y las operaciones
protegidas. Cada aplicación que tenga como destino Common Language Runtime debe interactuar con el sistema de
seguridad del motor en tiempo de ejecución. Cuando se ejecuta una aplicación, el motor en tiempo de ejecución la evalúa
automáticamente y le concede un conjunto de permisos. En función de los permisos que reciba la aplicación, se ejecuta
correctamente o genera una excepción de seguridad.
La configuración de seguridad local de un equipo concreto controla en última instancia los permisos que recibe el código.
Dado que esta configuración puede variar de un equipo a otro, nunca se podrá saber con certeza si el código va a recibir los
permisos suficientes para ejecutarse. Para obtener más información, vea
Conceptos básicos sobre la seguridad de acceso a código.
Permisos de acceso a código
Los objetos de permiso de acceso a código se utilizan para proteger los recursos y las operaciones del uso por parte de
usuarios no autorizados. Constituyen una parte fundamental del mecanismo de Common Language Runtime para exigir
restricciones de seguridad en el código administrado.
Los permisos de acceso a código permiten a un usuario tener acceso a un recurso protegido, como un archivo, o realizar una
acción protegida, como tener acceso a código administrado. Todos los permisos de acceso a código se pueden solicitar
mediante código; la concesión de los permisos se determina en tiempo de ejecución. Cada permiso de acceso a código deriva
de la clase CodeAccessPermission y por consiguiente los permisos tienen métodos comunes: Assert, Demand, Deny,
PermitOnly, IsSubSetOf, Intersect y Union.
Permisos proporcionados por .NET Framework
Esta tabla muestra los permisos de acceso a código que proporciona .NET Framework.
Clase de permiso Permite
AspNetHostingPermission Obtener acceso a recursos de entornos alojados en ASP.NET.

DirectoryServicesPermission Obtener acceso a las clases System.DirectoryServices.

DnsPermission Obtener acceso a los servidores DNS (Sistema de nombres de dominio) en una red.

EnvironmentPermission Leer o escribir en variables de entorno.

EventLogPermission Leer o escribir en servicios de registro de eventos.

FileDialogPermission Leer o escribir en archivos por medio de un cuadro de diálogo Abrir.

FileIOPermission Leer o escribir en archivos o directorios.

IsolatedStorageFilePermission Leer o escribir en archivos o directorios en almacenamiento aislado.

MessageQueuePermission Obtener acceso a las colas de mensajes a través de las interfaces Message Queuing (también
conocidas como MSMQ) administradas.

OdbcPermission Obtener acceso a los orígenes de datos ODBC (Conectividad abierta de bases de datos).

OleDbPermission Obtener acceso a bases de datos mediante OLE DB.

OraclePermission Obtener acceso a las bases de datos Oracle.

PerformanceCounterPermission Obtener acceso a contadores de rendimiento.


PrintingPermission Obtener acceso a impresoras.

ReflectionPermission Determinar información sobre un tipo en tiempo de ejecución.

RegistryPermission Leer, escribir, crear o eliminar claves y valores del Registro.

SecurityPermission Ejecutar, confirmar permisos, llamar en código no administrado, omitir la comprobación y otr
os derechos relacionados con la seguridad.

ServiceControllerPermission Obtener acceso a servicios en ejecución o detenidos.

SocketPermission Realizar o aceptar conexiones en una dirección de transporte.

SqlClientPermission Obtener acceso a bases de datos de SQL.

UIPermission Obtener acceso a la funcionalidad de interfaz de usuario.

WebPermission Realizar o aceptar conexiones en una dirección Web.


Crear permisos propios
.NET Framework proporciona un conjunto de clases de permiso de acceso a código diseñado para ayudar a proteger un
conjunto específico de recursos y operaciones, que se centra en los recursos expuestos por .NET Framework. En la mayoría de
los entornos, los permisos de acceso a código integrados son adecuados. No obstante, en algunas situaciones, puede ser útil
definir una clase de permiso de acceso a código propia. Para obtener más información, vea
Crear permisos de acceso a código propios.
Permisos de identidad
Los permisos de identidad representan características que identifican un ensamblado. Common Language Runtime concede
permisos de identidad a un ensamblado cuando se carga, en función de la información que obtiene acerca del mismo. Para
obtener más información, vea Permisos de identidad.
Permisos basados en función
Las aplicaciones empresariales suelen proporcionar acceso a datos o recursos basándose en credenciales proporcionadas por
el usuario. Normalmente, dichas aplicaciones comprueban la función de un usuario y proporcionan acceso a recursos
basándose en dicha función. Common Language Runtime proporciona compatibilidad para la autorización basada en
funciones tomando como base una cuenta de Windows o una identidad personalizada. Para obtener más información, vea
Seguridad basada en funciones.
Tareas de seguridad
La tabla siguiente muestra tareas asociadas con permisos y seguridad.
Para Vea
Solicitar permiso para tener acceso a Cómo: Solicitar permiso para obtener acceso a código no administrado
código no administrado

Solicitar los permisos opcionales Cómo: Solicitar permisos opcionales mediante el indicador RequestOptional

Solicitar permiso para un conjunto d Cómo: Solicitar permiso para un conjunto de permisos con nombre
e permisos con nombre

Solicitar permisos codificados en XM Solicitar permisos codificados en XML


L

Rechazar permisos Cómo: Rechazar permisos mediante el indicador RequestRefuse


Realizar una comprobación imperati Cómo: Realizar comprobaciones de seguridad imperativas
va de seguridad

Realizar una comprobación de segur Realizar comprobaciones de seguridad declarativa


idad declarativa

Reemplazar una comprobación de s Reemplazar comprobaciones de seguridad


eguridad

Compartir una biblioteca con código Compartir una biblioteca con código que no es de plena confianza
que no es de plena confianza

Imponer la plena confianza en los tip Solicitar tipos de plena confianza en un ensamblado AllowPartiallyTrustedCallersAttribute
os de un ensamblado
AllowPartiallyTrustedCallersAttribute

Crear objetos WindowsIdentity y Cómo: Crear un objeto WindowsPrincipal


WindowsPrincipal

Crear objetos GenericPrincipal y Cómo: Crear objetos GenericPrincipal y GenericIdentity


GenericIdentity

Modelo de directiva de seguridad de .NET Framework


Cinco elementos constituyen el modelo de directiva de seguridad de .NET Framework. Son los siguientes:
Niveles de la directiva de seguridad: empresa, equipo, usuario y dominio de aplicación.
Grupos de códigos, que existen como una jerarquía dentro de los niveles de directiva de empresa, equipo y usuario.
Conjuntos de permisos con nombre asociados a cada grupo de código.
Prueba que proporciona información sobre la identidad del código.
Hosts de dominio de aplicación que proporcionan pruebas sobre el código a Common Language Runtime.
Niveles de la directiva de seguridad
.NET Framework proporciona cuatro niveles de directiva de seguridad para calcular la concesión de permisos a un ensamblado
o dominio de aplicación. Cada nivel contiene su propia jerarquía de grupos de código y conjuntos de permiso. El tiempo de
ejecución calcula el conjunto de permisos concedidos como la suma de permisos permitidos por todos los niveles que
participan en una directiva
Los niveles son los siguientes:
Directiva de empresa. Se aplica a todo el código administrado de la empresa, donde se distribuye un archivo de
configuración de empresa.
Directiva de equipo. Se aplica a todo el código administrado del equipo.
Directiva de usuario. Se aplica al código de todos los procesos asociados al usuario actual del sistema operativo cuando
se inicie Common Language Runtime.
Directiva de dominio de aplicación. Se aplica al código administrado del dominio de aplicación del host.
Para obtener más información, vea Niveles de la directiva de seguridad.
Grupos de código
Un grupo de código es una agrupación lógica de código que tiene una condición concreta para la pertenencia. Todo código
que cumpla la condición de pertenencia se incluye en el grupo. Los grupos de código tienen conjuntos de permisos asociados
que se evalúan durante la concesión de la directiva. Para obtener más información, vea Grupos de código.
Conjuntos de permisos con nombre
Un conjunto de permisos con nombre es un conjunto de permisos que los administradores pueden asociar a un grupo de
código. Un conjunto de permisos con nombre está formado al menos por un permiso, así como por un nombre y una
descripción para el conjunto de permisos. Con un conjunto de permisos específico se pueden asociar varios grupos de código.
Esta tabla muestra los conjuntos de permisos con nombre proporcionados por Common Language Runtime.
Nombre Descripción
Nothing Sin permisos (no se puede ejecutar código).

Execution Permiso para ejecutarse, pero no para utilizar recursos protegidos.

Internet Conjunto de permisos de directiva predeterminado, adecuado para contenido de origen desconocido.

Local Intranet Conjunto de permisos de directiva predeterminado establecido en una empresa.

Everything Todos los permisos estándar (integrados) excepto el permiso de omitir la comprobación.

FullTrust Acceso completo a todos los recursos.

Para obtener más información, vea Conjuntos de permisos con nombre.


Evidencia
Evidencia es la información que Common Language Runtime utiliza para tomar decisiones basándose en la directiva de
seguridad. La evidencia indica al tiempo de ejecución que el código tiene una característica determinada y puede incluir
directorio de aplicaciones, editor, sitio y dirección URL. Para obtener más información, vea Prueba.
Hosts de dominio de aplicación
Cada aplicación .NET Framework se ejecuta en un dominio de aplicación bajo el control de un host que crea el dominio de
aplicación y carga los ensamblados en él. Los dominios de aplicación pueden incluir:
Hosts del explorador. Ejecutan código en el contexto de un sitio Web.
Hosts de diseño personalizado. Crean dominios y cargan ensamblados en los dominios, incluidos ensamblados
dinámicos.
Hosts de servidor. Ejecutan código que controla las solicitudes enviadas a un servidor.
Host de Shell. Inician aplicaciones (archivos .exe) desde el shell.
En esta tabla se muestran tareas asociadas con los dominios de aplicación:
Para Vea
Crear un dominio de aplicación Cómo: Crear un dominio de aplicación

Establecer una directiva de seguridad de dominio de aplicac Establecer directivas de seguridad para dominios de aplicación
ión

Configurar un dominio de aplicación Cómo: Configurar un dominio de aplicación

Llamar a funciones en un dominio de aplicación concreto Calling Functions in a Specific Application Domain

Recuperar información de instalación de un dominio de apl Recuperar información de instalación de un dominio de aplicación
icación

Descargar un dominio de aplicación. Cómo: Descargar un dominio de aplicación

Para obtener más información, vea AppDomain, Hosts de dominio de aplicación y Programar con dominios de aplicación.
Vea también
Tareas
Solución de problemas de excepciones de seguridad de acceso a código
Conceptos
Aislamiento por usuario, dominio y ensamblado
Otros recursos
Configurar directivas de seguridad mediante la herramienta Configuración de .NET Framework (Mscorcfg.msc)
Configurar directivas de seguridad mediante la herramienta Directiva de seguridad de acceso a código (Caspol.exe)
Conceptos del lenguaje Visual Basic

Colecciones en .NET Framework con Visual Basic


.NET Framework ofrece clases especializadas para almacenamiento y recuperación de datos. Estas clases proporcionan
compatibilidad con pilas, colas, listas y tablas hash. La mayoría de las clases de colección implementan las mismas interfaces. Si
es necesario, puede crear sus propias clases de colección implementando estas interfaces.
Debe determinar qué tipo de colección es el más adecuado para sus necesidades.
Diferencias entre las clases de colección de Visual Basic y .NET Framework
Las clases de colección de .NET Framework se definen en los espacios de nombres System.Collections,
System.Collections.Generic, System.Collections.Specialized y System.Collections.ObjectModel. Las diferencias principales entre
las clases de colección de Visual Basic y .NET Framework son las siguientes:
Índice base. Las colecciones de .NET Framework son de base cero, mientras que las de Visual Basic son de base uno.
Esto significa que los elementos de una colección de Visual Basic tienen valores de índice que van de 1 al valor de la
propiedad Count (Propiedad, objeto Collection), mientras que los elementos de una colección de .NET Framework tienen
valores de índice que van de 0 al valor de la propiedad Count de la colección menos uno.
Tipo de elemento. Una colección de Visual Basic admite elementos de tipo Object. Estas colecciones no tienen
seguridad de tipos, es decir, se puede agregar un elemento de cualquier tipo de datos. Esto normalmente reduce el
rendimiento porque los elementos del tipo de datos Object se deben convertir en su verdadero tipo.
Algunas colecciones de .NET Framework también tienen elementos de tipo Object, pero muchas otras tienen
establecimiento inflexible de tipos, lo que significa que admiten elementos de un tipo específico y, por tanto, tienen
seguridad de tipos y normalmente producen un rendimiento óptimo.
Elementos con clave. Una colección de Visual Basic permite especificar una clave cuando se agrega un elemento. La
clave es un valor de cadena único que se puede utilizar después para tener acceso a ese elemento concreto. Las
colecciones de .NET Framework varían con respecto a las claves. Algunas admiten claves y otras no.
Clases System.Collections
Las clases del espacio de nombres System.Collections no almacenan los elementos como objetos de un tipo específico, sino
como objetos de tipo Object.
En la tabla siguiente se muestran algunas de las clases que se utilizan comúnmente:
Clase Descripción
ArrayList Implementa la interfaz IList utilizando una matriz cuyo tamaño aumenta dinámicamente cuando es necesario.

BitArray Administra una matriz compacta de valores de bit, que se representan como valores Boolean, donde True indica q
ue el bit está activado (1) y False indica que el bit está desactivado (0).

Hashtable Representa una colección de pares de clave y valor que se organizan por código hash de la clave.

Queue Representa una colección de objetos primero en entrar, primero en salir (FIFO).

Stack Representa una colección simple no genérica de objetos último en entrar, primero en salir (LIFO).

Clases System.Collections.Generic y System.Collections.ObjectModel


Los espacios de nombres System.Collections.Generic y System.Collections.ObjectModel proporcionan tipos genéricos
que permiten crear colecciones con establecimiento inflexible de tipos y especificar el tipo de datos de los elementos cuando se
crean.
En la tabla siguiente se muestran algunas de las clases que se utilizan comúnmente:
Clase Descripción
Collection Proporciona la clase base para una colección genérica.
Dictionary Representa una colección de pares de clave y valor que se organizan por claves.

KeyedCollection Proporciona la clase base abstracta para una colección cuyas claves están incrustadas dentro de los valore
s.

LinkedList Representa una lista doblemente vinculada.

LinkedListNode Representa un nodo en una clase LinkedList. Esta clase no puede heredarse.

List Implementa la interfaz IList utilizando una matriz cuyo tamaño aumenta dinámicamente cuando es necesa
rio.

Queue Representa una colección de objetos primero en entrar, primero en salir (FIFO).

SortedDictionary Representa una colección de pares de clave y valor que se ordenan por claves.

SortedList Representa una colección de pares de clave y valor que se ordenan por claves según la implementación d
e la interfaz IComparer asociada.

Stack Representa una colección último en entrar, primero en salir (LIFO) de tamaño variable con instancias del
mismo tipo arbitrario.

ReadOnlyCollection Proporciona la clase base para una colección genérica de sólo lectura.

Clases System.Collections.Specialized
El espacio de nombres System.Collections.Specialized proporciona clases de colección especializadas y con establecimiento
inflexible de tipos, como colecciones de sólo cadena y diccionarios híbridos y de lista vinculada.
En la tabla siguiente se muestran algunas de las clases que se utilizan comúnmente:
Clase Descripción
CollectionsUtil Crea colecciones que omiten el uso de mayúsculas y minúsculas en cadenas.

HybridDictionary Implementa la interfaz IDictionary utilizando ListDictionary mientras la colección es pequeña; a con
tinuación, cambia a Hashtable cuando la colección aumenta.

ListDictionary Implementa la interfaz IDictionary utilizando una lista vinculada única. Se recomienda para las col
ecciones que normalmente contienen 10 elementos o menos.

NameObjectCollectionBase Proporciona la clase base abstracta para una colección de claves de cadena y valores de objeto aso
ciados a los que se puede tener acceso con la clave o con el índice.

NameValueCollection Representa una colección de claves de cadena y valores de cadena asociados a los que se puede te
ner acceso con la clave o con el índice.

OrderedDictionary Representa una colección de pares de clave y valor que se ordenan por claves o por índices.

StringCollection Representa una colección de cadenas.

StringDictionary Implementa una tabla hash con la clave y el valor con establecimiento inflexible de tipos de forma
que sean cadenas en lugar de objetos.

Vea también
Referencia
Collection (Objeto, Visual Basic)
Conceptos
Colecciones en Visual Basic
Otros recursos
Continuar con Visual Basic
Conceptos del lenguaje Visual Basic

E/S de archivos en .NET Framework con Visual Basic


Al realizar operaciones complejas de E/S con archivos, como un almacenamiento aislado, puede ser necesario que los usuarios
de Visual Basic investiguen .NET Framework y las clases que ofrece. Esta sección proporciona información general sobre los
conceptos de E/S de archivos y FileSystem en .NET Framework y una lista de clases utilizadas normalmente.
En esta sección
Fundamentos del sistema de archivos y la E/S de archivos en .NET Framework
Proporciona información general sobre los conceptos de E/S de archivos en .NET Framework, incluidas las secuencias, el
almacenamiento aislado, eventos de archivo, atributos de archivo y acceso a archivos.
Clases utilizadas en el sistema de archivos y la E/S de archivos en .NET Framework
Enumera las clases utilizadas en las operaciones de E/S de archivos de .NET Framework y FileSystem, incluidas las clases
básicas de E/S de archivos, clases que crean secuencias y clases que crean escritores y lectores de secuencias.
Vea también
Tareas
Cómo: Leer texto de archivos con Streamreader (Visual Basic)
Cómo: Escribir texto en archivos con un objeto StreamWriter en Visual Basic
Cómo: Leer archivos de texto en Visual Basic
Referencia
System.IO Namespace
Conceptos del lenguaje Visual Basic

Fundamentos del sistema de archivos y la E/S de archivos en


.NET Framework
El espacio de nombres System.IO contiene las clases File y Directory, que proporcionan la funcionalidad de .NET Framework
para manipular archivos y directorios. Dado que los métodos de estos objetos son miembros estáticos o compartidos, podrá
utilizarlos directamente sin crear primero una instancia de la clase. Asociadas a estas clases están las clases FileInfo y
DirectoryInfo, que les resultarán familiares a los usuarios de la característica My. Para utilizar estas clases, debe utilizar sus
nombres completos o importar los espacios de nombres adecuados incluyendo las instrucciones Imports al principio del
código fuente afectado. Para obtener más información, vea Imports (Instrucción).
Definición de una secuencia
.NET Framework utiliza secuencias para admitir la lectura de archivos y la escritura en ellos. Puede considerar una secuencia
como un conjunto unidimensional de datos contiguos, que tiene un principio y un final, y en el que el cursor indica la posición
actual dentro de la secuencia.

Operaciones con secuencias


Los datos contenidos en la secuencia pueden proceder de la memoria, de un archivo o de un socket de TCP/IP. A las secuencias
se les pueden aplicar operaciones fundamentales:
Lectura. Puede leer de una secuencia, transfiriendo datos desde la secuencia hasta una estructura de datos, como una
cadena o una matriz de bytes.
Escritura. Puede escribir en una secuencia, transfiriendo datos desde un origen de datos hasta la secuencia.
Búsqueda. Puede consultar y modificar su posición en la secuencia.
Para obtener más información, vea Crear secuencias.
Tipos de secuencias
En .NET Framework, una secuencia se representa mediante la clase Stream, que constituye la clase abstracta para todas las
demás secuencias. No se puede crear directamente una instancia de la clase Stream, pero debe utilizar una de las clases que
implementa.
Hay muchos tipos de secuencias, pero a efectos de trabajo con la entrada-salida (E/S) de archivos, los tipos más importantes
son la clase FileStream, que proporciona una manera de leer archivos y escribir en ellos, y la clase IsolatedStorageFileStream,
que ofrece una forma de crear archivos y directorios en almacenamiento aislado. Otras secuencias que se pueden utilizar al
trabajar con la E/S de archivos son:
BufferedStream
CryptoStream
MemoryStream
NetworkStream.
La tabla siguiente muestra tareas realizadas normalmente con las secuencias:
Para Vea
Leer y escribir en un archivo de datos Cómo: Leer y escribir en un archivo de datos recién creado

Leer de un archivo XML Tareas comunes de XmlReader

Crear un escritor de secuencias para escribir texto en un archivo Crear un sistema de escritura

Leer de un archivo de texto Cómo: Leer texto de un archivo

Escribir texto en un archivo Cómo: Escribir texto en un archivo

Leer caracteres de una cadena Cómo: Leer caracteres de una cadena

Escribir caracteres en una cadena Cómo: Escribir caracteres en una cadena

Cifrar los datos Cifrar datos

Descifrar los datos Descifrar datos

Almacenar accesos y atributos


Puede controlar cómo se crean, abren y comparten los archivos con las enumeracionesFileAccess, FileMode y FileShare, que
contienen los identificadores usados por los constructores de la clase FileStream. Por ejemplo, al abrir o crear una nueva
secuencia FileStream, la enumeración FileMode permite especificar si el archivo está abierto para anexarle datos, si se debe
crear un nuevo archivo cuando no existe el archivo especificado, si se debe sobrescribir el archivo, etc.
La enumeración FileAttributes habilita la recopilación de información específica de los archivos. La enumeración
FileAttributes devuelve los atributos almacenados del archivo, como por ejemplo si se trata de un archivo de
almacenamiento, comprimido, cifrado, oculto, de sólo lectura, de un directorio, de sistema o de un archivo temporal.
La tabla siguiente muestra tareas que implican acceso a archivos y atributos de archivo:
Para Vea
Abrir un archivo de registro y anexarle texto Cómo: Abrir y anexar a un archivo de registro

Determinar los atributos de un archivo FileAttributes

Permisos sobre archivos


El control del acceso a los archivos y directorios se puede llevar a cabo con la clase FileIOPermission. Esto puede ser
especialmente importante para los desarrolladores que trabajen con formularios Web Forms, que se ejecutan de forma
predeterminada dentro del contexto de un usuario local especial denominado ASPNET, que se crea como parte de las
instalaciones de ASP.NET y .NET Framework. Cuando una aplicación de este tipo solicita acceso a un recurso, la cuenta de
usuario ASPNET dispone de permisos limitados, que pueden impedir que el usuario realice acciones como escribir en un
archivo desde una aplicación Web. Para obtener más información, vea Permisos de seguridad, Solicitar permisos y la
clase FileIOPermission.
La tabla siguiente muestra tareas en las que toman parte los permisos de archivo.
Para Vea
Solicitar los permisos mínimos Cómo: Solicitar permiso para obtener acceso a código no administrado

Solicitar los permisos opcionales Cómo: Solicitar permisos opcionales mediante el indicador RequestOptional

Rechazar permisos Cómo: Rechazar permisos mediante el indicador RequestRefuse

Solicitar los permisos integrados Cómo: Solicitar permiso para un conjunto de permisos con nombre
Solicitar permisos codificados en XML Solicitar permisos codificados en XML

Almacenamiento aislado de archivos


El almacenamiento aislado es un intento de resolver los problemas creados al trabajar con archivos en los que el usuario o el
código pueden no tener los permisos necesarios. El almacenamiento aislado asigna a cada usuario un compartimiento de
datos, que puede contener uno o más almacenes. Los almacenes se pueden aislar entre sí clasificándolos por usuario y por
ensamblado. Sólo el usuario y ensamblado que crearon un almacén tienen el acceso a él. Un almacén actúa como un sistema
de archivos virtual completo: dentro de un almacén se pueden crear y manipular directorios y archivos.
La tabla siguiente muestra tareas normalmente asociadas al almacenamiento aislado de archivos.
Para Vea
Crear un almacén aislado Cómo: Obtener almacenes para el almacenamiento aislado

Enumerar los almacenes aislados Cómo: Enumerar almacenes para el almacenamiento aislado

Eliminar un almacén aislado Cómo: Eliminar almacenes en el almacenamiento aislado

Crear un archivo o directorio en almacenamiento Cómo: Crear archivos y directorios en el almacenamiento aislado
aislado

Buscar un archivo en un almacenamiento aislado Cómo: Buscar archivos y directorios existentes en el almacenamiento aislado

Leer o escribir en un archivo de un almacenamie Cómo: Leer y escribir en archivos del almacenamiento aislado
nto aislado

Eliminar un archivo o directorio de un almacena Cómo: Eliminar archivos y directorios en el almacenamiento aislado
miento aislado

Eventos de archivos
El componente FileSystemWatcher permite inspeccionar los cambios realizados en los archivos y directorios de su sistema o
en cualquier equipo al que tenga acceso a través de la red. Por ejemplo, si se modifica un archivo, puede que desee enviarle
una advertencia a un usuario indicándole que se han producido cambios. Cuando se producen cambios, se provocan uno o
más eventos, se almacenan en un búfer y se entregan al componente FileSystemWatcher para que los procese. Para obtener
más información, vea Reaccionar a eventos del sistema de archivos.
Para Vea
Crear un controlador para los eventos del sistema de arch Cómo: Crear controladores para los eventos del sistema de archivos
ivos

Configurar una instancia de componente FileSystemWat Cómo: Configurar instancias de componentes FileSystemWatcher
cher

Vea también
Conceptos
Crear secuencias
E/S de archivos básica
E/S de archivos asincrónica
Clases utilizadas en el sistema de archivos y la E/S de archivos en .NET Framework
Otros recursos
Almacenamiento aislado
Conceptos del lenguaje Visual Basic

Clases utilizadas en el sistema de archivos y la E/S de archivos


en .NET Framework
Las tablas siguientes incluyen las clases usadas más comúnmente para las operaciones de E/S de archivos en .NET Framework,
clasificadas en clases de E/S de archivos, clases usadas para crear secuencias y clases utilizadas para leer y escribir en
secuencias.
Para entrar en la documentación de .NET Framework 2.0 y consultar una lista más completa, vea
Información general de la biblioteca de clases de .NET Framework.
Clases básicas de E/S para archivos, unidades y directorios
La tabla siguiente muestra y describe las clases principales utilizadas para las operaciones de E/S de archivos.
Clase Descripción
System.IO.Directory Proporciona métodos estáticos para crear, mover y enumerar archivos en direct
orios y subdirectorios.

System.IO.DirectoryInfo Proporciona métodos de instancia para crear, mover y enumerar archivos en dir
ectorios y subdirectorios.

System.IO.DriveInfo Proporciona métodos de instancia para crear, mover y enumerar entre unidade
s.

System.IO.File Proporciona métodos estáticos para crear, copiar, eliminar, mover y abrir archiv
os, y ayuda en la creación de una secuencia FileStream.

System.IO.FileAccess Define constantes de acceso de lectura, de escritura y de lectura/escritura para u


n archivo.

System.IO.FileAttributes Proporciona atributos para archivos y directorios, como Archive, Hidden y


ReadOnly.

System.IO.FileInfo Proporciona métodos estáticos para crear, copiar, eliminar, mover y abrir archiv
os, y ayuda en la creación de una secuencia FileStream.

System.IO.FileMode Controla cómo se abre un archivo. Este parámetro se especifica en muchos de l


os constructores para FileStream e IsolatedStorageFileStream, y para los mé
todos Open de File y FileInfo.

System.IO.FileShare Define las constantes para controlar el tipo de acceso que pueden tener otras se
cuencias de archivo al mismo archivo.

System.IO.Path Proporciona métodos y propiedades para procesar cadenas de directorio.

System.Security.Permissions.FileIOPermission Controla el acceso a archivos y carpetas definiendo los permisos Read, Write,
Append y PathDiscovery.

Clases utilizadas para crear secuencias


La tabla siguiente muestra y describe las clases principales utilizadas para crear secuencias.
Clase Descripción
System.IO.BufferedStream Agrega una capa de almacenamiento en búfer para las operaciones de lectura y e
scritura en otra secuencia.
System.IO.FileStream Permite el acceso aleatorio a los archivos a través de su método Seek. De manera
predeterminada, FileStream abre archivos sincrónicamente pero también admit
e las operaciones asincrónicas.

System.IO.MemoryStream Crea una secuencia cuyo almacén de respaldo es la memoria, en lugar de un arch
ivo.

System.Net.Sockets.NetworkStream Proporciona la secuencia de datos subyacente para el acceso a través de la red.

System.Security.Cryptography.CryptoStream Define una secuencia que vincula las secuencias de datos a las transformaciones
criptográficas.

Clases usadas para leer y escribir en secuencias


La tabla siguiente muestra las clases concretas utilizadas para leer y escribir en los archivos con secuencias.
Clase Descripción
System.IO.BinaryReader Lee cadenas codificadas y los tipos de datos primitivos de una secuencia FileStream.

System.IO.BinaryWriter Escribe cadenas codificadas y los tipos de datos primitivos en una secuencia FileStream.

System.IO.StreamReader Lee caracteres de una secuencia FileStream, usando CurrentEncoding para convertir caracteres al fo
rmato de bytes y desde dicho formato. StreamReader tiene un constructor que intenta confirmar la
codificación CurrentEncoding correcta para una secuencia dada, según la existencia de un preámbu
lo específico de CurrentEncoding, como una marca de orden de bytes.

System.IO.StreamWriter Escribe caracteres en una secuencia FileStream, utilizando Encoding para convertir los caracteres a b
ytes.

System.IO.StringReader Lee caracteres de una cadena String. El resultado puede ser una secuencia en cualquier codificación
o una cadena String.

System.IO.StringWriter Escribe caracteres en una cadena String. El resultado puede ser una secuencia en cualquier codificaci
ón o una cadena String.

Vea también
Conceptos
Crear secuencias
E/S de archivos básica
E/S de archivos asincrónica
Fundamentos del sistema de archivos y la E/S de archivos en .NET Framework
Otros recursos
Almacenamiento aislado
Conceptos del lenguaje Visual Basic

Gráficos en .NET Framework con Visual Basic


.NET Framework proporciona la interfaz de programación de aplicaciones (API) de GDI+ para manipular gráficos. GDI+ es una
implementación avanzada de Graphics Device Interface de Windows (GDI). Con GDI+, puede crear gráficos, dibujar texto y
manipular imágenes gráficas como objetos.
GDI+ está diseñada para ofrecer rendimiento a la vez que facilidad de uso. La interfaz GDI+ se puede utilizar para representar
imágenes gráficas en formularios Windows Forms y en controles. A pesar de que no es posible usar la interfaz GDI+
directamente en los formularios Web Forms, se pueden mostrar imágenes gráficas mediante el control Image de servidor
Web.
Introducción a GDI+
Cuando cree un control de formularios Windows Forms, puede utilizar GDI+ para obtener acceso a su imagen y actualizarla.
También puede utilizar GDI+ para crear sus propias imágenes, independientemente de la interfaz de usuario de su aplicación.
Para utilizar una imagen en .NET Framework, debe utilizar el objeto Graphics asociado a la imagen.
En algunos casos, puede obtener directamente el objeto Graphics de la imagen. Por ejemplo, cuando esté creando un control
de formularios Windows Forms control, puede reemplazar el método OnPaint para tener acceso al objeto Graphics de la
imagen del control.
En otros casos, como cuando esté creando su propia imagen, también necesitará crear un objeto gráfico. El método
FromImage compartido toma una imagen y devuelve un objeto Graphics asociado a esa imagen.
La clase Graphics incluye muchos métodos de dibujo y manipulación de imágenes. A continuación se enumeran algunos de
los métodos usados más frecuentemente:
Métodos para dibujar líneas: DrawArc, DrawBezier, DrawEllipse, DrawImage, DrawLine, DrawPolygon, DrawRectangle y
DrawString.
Métodos para rellenar formas: FillClosedCurve, FillEllipse, FillPath, FillPolygon y FillRectangle.
Método para borrar la superficie de dibujo: Clear.
Método para crear un nuevo objeto Graphics a partir de una imagen: FromImage.
Algunos de los métodos enumerados antes toman como argumentos estructuras o clases definidas en el espacio de nombres
System.Drawing. La tabla siguiente muestra algunas de las clases y estructuras de GDI+ más utilizadas.
Clase/Estructura Descripción
System.Drawing.Bitmap Encapsula un mapa de bits de GDI+, que se compone de los datos de píxeles de una imagen grá
fica y sus atributos. Un Bitmap es un objeto usado para trabajar con imágenes definidas por da
tos de píxeles.

System.Drawing.Brushes Define los pinceles para todos los colores estándar.

System.Drawing.Color Representa un color en formato ARGB.

System.Drawing.Font Define un formato concreto para el texto, incluidos su tipo de letra, tamaño y atributos de estilo.

System.Drawing.Pen Define un objeto utilizado para dibujar líneas rectas y curvas.

System.Drawing.Pens Define las plumas para todos los colores estándar.

System.Drawing.Point Representa un par ordenado de coordenadas enteras x e y que define un punto en un plano bidi
mensional.

System.Drawing.Rectangle Almacena un conjunto de cuatro enteros que representan la ubicación y el tamaño de un rectán
gulo. Para utilizar funciones de región más avanzadas, utilice un objeto Region.
System.Drawing.SolidBrush Define un pincel de un solo color. Los pinceles se utilizan para rellenar las formas de los gráfico
s, como rectángulos, elipses, sectores, polígonos y trayectorias.

System.Drawing.TextureBrush Cada propiedad de la clase TextureBrush es un objeto Brush que utiliza una imagen para rellen
ar el interior de una forma.

Administración de recursos
Muchas de las clases de dibujo implementan IDisposable porque encapsulan recursos del sistema no administrados. Si crea
una nueva instancia de una de estas clases, debe llamar al método Dispose de la clase cuando haya terminado de trabajar con
el objeto.
También tiene la alternativa de crear el objeto con la instrucción Using, que llama implícitamente al método Dispose del
objeto. Para obtener más información, vea Duración de los objetos: cómo se crean y destruyen y
Instrucción Using (Visual Basic).
Secciones relacionadas
Gráficos para usuarios de Visual Basic 6.0
Describe los cambios realizados en el modelo de representación de gráficos en Visual Basic 2005.
Gráficos y dibujos en formularios Windows Forms
Guía básica para el uso de gráficos en aplicaciones de Windows Forms.
Información general de gráficos (Formularios Windows Forms)
Proporciona una introducción a las clases administradas relacionadas con gráficos.
Código administrado de GDI+
Proporciona información relativa a las clases administradas de GDI+.
Utilizar clases gráficas administradas
Muestra cómo realizar una variedad de tareas utilizando las clases administradas de GDI+.
Dibujo y representación personalizados de controles
Detalla cómo proporcionar código para dibujar controles.
Información general sobre Image (Control de servidor Web)
Describe el control que se puede utilizar para mostrar imágenes en páginas de formularios Web Forms y para administrar
dichas imágenes mediante código.
Editor de imágenes
Incluye vínculos con temas sobre la utilización del editor de imágenes para crear archivos de imagen destinados a su uso por
la aplicación.
Vea también
Referencia
Instrucción Using (Visual Basic)
System.Drawing
Conceptos
Duración de los objetos: cómo se crean y destruyen
Conceptos del lenguaje Visual Basic

Registrar y realizar seguimiento en .NET Framework con Visual


Basic
Los objetos My.Application.Log y My.Log se crean a partir de las clases de registro de .NET Framework. Cuando hay que
personalizar objetos Log, ya sea agregando nuevos agentes de escucha o filtrando el resultado del registro, se utiliza .NET
Framework. En esta sección se ofrece información general sobre conceptos de seguimiento y depuración en .NET Framework y
una lista de clases comúnmente utilizadas.
En esta sección
Fundamentos de los registros de .NET Framework
Proporciona información general sobre los conceptos de registro, seguimiento e instrumentación en .NET Framework.
Clases utilizadas en el registro de .NET Framework
Muestra las clases que se utilizan en el registro, seguimiento e instrumentación en .NET Framework.
Vea también
Referencia
My.Application.Log (Objeto)
My.Log (Objeto)
System.Diagnostics
Conceptos
Registrar información de la aplicación
Otros recursos
Seguimiento e instrumentación de aplicaciones
Conceptos del lenguaje Visual Basic

Fundamentos de los registros de .NET Framework


Existen muchas maneras de registrar información de aplicaciones de Visual Basic, aparte de los objetos My.Application.Log y
My.Log de Visual Basic; también hay diversas clases de .NET Framework disponibles. Al registrar información, puede
supervisar y medir el rendimiento de la aplicación y diagnosticar los errores.
Seguimiento, depuración e instrumentación
En la documentación de .NET Framework se utilizan varios términos diferentes relacionados con el registro: seguimiento,
depuración e instrumentación.
El seguimiento constituye un método para supervisar la ejecución de una aplicación en funcionamiento. Normalmente se
implementa utilizando la clase Trace. Puede agregar instrucciones de seguimiento a una aplicación durante su desarrollo,
y puede utilizar esa instrumentación tanto en el momento del desarrollo como después de haber implantado la
aplicación.
La depuración es similar al seguimiento, pero suele ser más detallada y se desactiva en las versiones de lanzamiento.
Normalmente se implementa utilizando la clase Trace.
Instrumentación hace referencia a agregar a una aplicación el código que supervisa o mide el nivel de rendimiento de un
producto. Registro, seguimiento y depuración son formas de instrumentación. Para instrumentar una aplicación, se
colocan instrucciones de seguimiento en ubicaciones estratégicas del código. Esto es especialmente útil para las
aplicaciones distribuidas.
Con las instrucciones de seguimiento se puede instrumentar una aplicación para mostrar información no sólo cuando se
producen errores, también para supervisar el rendimiento de la aplicación.
Las clases Trace y Debug, al igual que los objetos Log de Visual Basic, pueden registrar información sobre errores y ejecución
de la aplicación en registros de eventos, archivos de texto o en otros dispositivos para su posterior análisis. Además, tienen
métodos que permiten un control más preciso sobre el resultado. Para obtener más clases de seguimiento, vea
Clases utilizadas en el registro de .NET Framework.
Fundamentos del registro y seguimiento
Una vez instrumentada una aplicación, se puede:
Realizar el seguimiento del código. Consiste en la capacidad de recibir mensajes informativos sobre la ejecución de
una aplicación en tiempo de ejecución. Para obtener más información, vea
Introducción a la instrumentación y el seguimiento.
Recibir el resultado de la depuración. Consiste en detectar y resolver errores de programación en una aplicación
durante su desarrollo. Para obtener más información, vea Depurar en Visual Studio.
Tener acceso a contadores de rendimiento. Consiste en realizar el seguimiento del rendimiento de la aplicación. Para
obtener más información, vea Introducción a la supervisión de umbrales de rendimiento.
Escribir en los registros de eventos. Consiste en realizar el seguimiento de los eventos principales en la ejecución de la
aplicación. Para obtener más información, vea Registrar eventos de aplicación, de servidor o de seguridad.
Las clases Trace y Debug proporcionan los medios necesarios para supervisar y examinar el rendimiento de una aplicación
durante su desarrollo o después de la implantación. Por ejemplo, se puede utilizar la clase Trace para realizar un seguimiento
de determinados tipos de acciones en una aplicación implantada a medida que se producen (por ejemplo, la creación de
nuevas conexiones de base de datos) y, de ese modo, supervisar la eficiencia de la aplicación.
Vea también
Referencia
System.Diagnostics
Conceptos
Registrar y realizar seguimiento en .NET Framework con Visual Basic
Introducción a la instrumentación y el seguimiento
Clases utilizadas en el registro de .NET Framework
Otros recursos
Seguimiento e instrumentación de aplicaciones
Conceptos del lenguaje Visual Basic

Clases utilizadas en el registro de .NET Framework


Este tema contiene tablas que muestran las clases normalmente utilizadas para el registro y el seguimiento de .NET
Framework. Las tablas se dividen en clases de generación de registros, clases de agentes de escucha de registros y clases de
filtrado de registros. Para entrar en la documentación de .NET Framework 2.0 y consultar una lista más completa, vea
Información general de la biblioteca de clases de .NET Framework.
Clases básicas para la generación de registros
La tabla siguiente muestra y describe las clases principales utilizadas para generar el registro.
Clase Descripción
Debug Proporciona un conjunto de métodos y propiedades que ayudan a depurar su código. Esta clase no puede hereda
rse.

Trace Proporciona un conjunto de métodos y propiedades que ayudan a realizar un seguimiento del código. Esta clase
no puede heredarse.

TraceSource Proporciona un conjunto de métodos y propiedades que ayudan a realizar un seguimiento del código.

Clases de agente de escucha de registro


La tabla siguiente enumera y describe las principales clases de agente de escucha de registro.
Clase Descripción
TraceListener Proporciona la clase base abstracta para los agentes de escucha que supervisan el resultado del seg
uimiento y la depuración.

ConsoleTraceListener Dirige el resultado del seguimiento o la depuración a la salida estándar o a la secuencia de error est
ándar.

DefaultTraceListener Proporciona los métodos de generación predeterminados y el comportamiento para realizar el seg
uimiento.

DelimitedListTraceListener Dirige la generación del seguimiento o la salida a un TextWriter, como StreamWriter o a un Stream,
como FileStream.

EventLogTraceListener Proporciona un agente de escucha simple que dirige el resultado del seguimiento o la depuración a
EventLog.

FileLogTraceListener Proporciona un agente de escucha simple que dirige el resultado del registro a un archivo.

TextWriterTraceListener Dirige el resultado del trazado o la depuración a un TextWriter o a un Stream, como Out o FileStr
eam.

XmlWriterTraceListener Dirige el resultado del trazado o la depuración a un TextWriter o a un Stream, como FileStream.

Clases de filtrado del registro y modificadores


La tabla siguiente muestra y describe las principales clases de filtrado del registro y uso de modificadores.
Clase Descripción
Switch Proporciona una clase base abstracta para crear nuevos modificadores de depuración y seguimiento.
BooleanSwitch Proporciona un modificador activado/desactivado simple que controla la generación de depuración y seguimi
ento.

SourceSwitch Proporciona un modificador multinivel para controlar la generación de seguimiento y depuración sin recompil
ar su código.

TraceSwitch Proporciona un modificador multinivel para controlar la generación de seguimiento y depuración sin recompil
ar su código.

EventTypeFilter Proporciona un modificador basado en el nivel de gravedad que controla el resultado del trazado.

SourceFilter Especifica si un agente de escucha debería realizar el seguimiento de un mensaje basándose en el origen de u
n seguimiento.

TraceFilter Define un método para las implementaciones de filtros de seguimiento.

Vea también
Referencia
System.Diagnostics
Conceptos
Registrar y realizar seguimiento en .NET Framework con Visual Basic
Fundamentos de los registros de .NET Framework
Otros recursos
Seguimiento e instrumentación de aplicaciones
Conceptos del lenguaje Visual Basic

Operaciones de red en .NET Framework con Visual Basic


Al realizar operaciones de red complejas, los usuarios de Visual Basic pueden necesitar investigar .NET Framework y las clases
que proporciona. En esta sección se ofrece información general sobre conceptos de red en .NET Framework y una lista de
clases comúnmente utilizadas.
En esta sección
Fundamentos de las operaciones de red de .NET Framework
Proporciona información general sobre conceptos de red en .NET Framework, que incluyen las clases WebRequest y
WebResponse, seguridad y seguimiento de la red.
Clases utilizadas en operaciones de red de .NET Framework
Muestra las clases utilizadas en operaciones de red de .NET Framework.
Referencia
WebRequest
Realiza una solicitud a un identificador uniforme de recursos (URI).
WebResponse
Proporciona una respuesta de un identificador URI.
WebClient
Proporciona métodos comunes para enviar y recibir datos de un recurso identificado por un identificador URI.
Conceptos del lenguaje Visual Basic

Fundamentos de las operaciones de red de .NET Framework


Microsoft .NET Framework realiza una implementación por capas, extensible y administrada de servicios de Internet que se
pueden integrar rápida y fácilmente en las aplicaciones. Para utilizar estas clases, se deben escribir los nombres completos o
importar los espacios de nombres apropiados incluyendo una o más instrucciones Imports al principio del código
correspondiente. Para obtener más información, vea Imports (Instrucción).
Tener acceso a recursos de Internet
Se requieren tres partes de información para tener acceso a los recursos de Internet a través de un modelo de solicitud y
respuesta. Las proporcionan clases de .NET Framework concretas:
La clase Uri contiene el identificador uniforme de recursos (URI) de un recurso de Internet, que consta, al menos, de tres
partes (a veces, cuatro): identificador de esquema, que identifica el protocolo de comunicaciones; identificador de
servidor; identificador de ruta de acceso; y una cadena de consulta opcional.
La clase WebRequest contiene una solicitud para el recurso.
La clase WebResponse proporciona un contenedor para la respuesta entrante.
Cargar y descargar datos
En las aplicaciones que necesitan realizar solicitudes simples de recursos de Internet, la clase WebClient proporciona métodos
para cargar o descargar datos. Dado que WebClient confía en la clase WebRequest para proporcionar acceso a los recursos
de Internet, puede utilizar cualquier protocolo conectable registrado.
El espacio de nombres System.Net.Sockets proporciona las clases TcpClient, TcpListener y UdpClient para las aplicaciones que
no utilizan el modelo de solicitud y respuesta, o las que tienen que escuchar en la red. Estas clases controlan los detalles del
establecimiento de las conexiones mediante diferentes protocolos de transporte, y exponen la conexión de red a la aplicación
como una secuencia.
Para obtener más información, vea Solicitar datos.
En la tabla siguiente se muestran tareas comunes en las que interviene la solicitud de datos de un recurso de Internet.
Para Vea
Crear una solicitud de Internet Crear solicitudes de Internet

Enviar datos a la red Utilizar secuencias en la red

Realizar solicitudes asincrónicas para un recurso de Internet Realizar solicitudes asincrónicas

Tener acceso a propiedades específicas de HTTP HTTP

Asociar una solicitud concreta a un grupo de conexiones Agrupación de conexiones

Configurar una instancia de servidor proxy Acceso a Internet a través de un proxy

Realizar solicitudes asincrónicas para un recurso de Internet Realizar solicitudes asincrónicas

Solicitar datos mediante TCP Utilizar servicios TCP

Solicitar datos mediante UDP Utilizar servicios UDP

Protocolos conectables
Las clases WebRequest y WebResponse abstractas proporcionan las clases base para los protocolos conectables. Si una
aplicación deriva de WebRequest y WebResponse clases específicas para protocolos, puede solicitar datos de un recurso de
Internet y leer la respuesta sin necesidad de especificar el protocolo que se está utilizando.
Para obtener más información, vea Programar protocolos conectables.
En la tabla siguiente se muestran tareas comunes en las que intervienen los protocolos conectables.
Para Vea
Derivar de WebRequest Derivar de WebRequest

Derivar de WebResponse Derivar de WebResponse

Tener acceso a propiedades e Cómo convertir una clase WebRequest para tener acceso a propiedades específicas de protocolo
specíficas del protocolo

Seguimiento de la red
El seguimiento de la red proporciona acceso a información sobre cómo invocar métodos y sobre el tráfico de red generado por
una aplicación administrada. Esta característica es útil para depurar las aplicaciones en desarrollo y analizar las aplicaciones
implementadas. El resultado proporcionado por el seguimiento de la red se puede personalizar para admitir diferentes
escenarios de uso en tiempo de desarrollo y en un entorno de producción.
Para obtener más información, vea Seguimiento de la red.
En la tabla siguiente se muestran tareas comunes en las que interviene el seguimiento de la red.
Para Vea
Habilitar el seguimiento de la red Habilitar el seguimiento de la red

Leer la información de seguimiento Interpretar el seguimiento de la red

Configurar el seguimiento de la red Cómo configurar el seguimiento de la red

Administración de la memoria caché


Una caché proporciona almacenamiento temporal de recursos que han sido solicitados por una aplicación. Si una aplicación
solicita el mismo recurso más de una vez, el recurso se puede devolver desde la caché, lo que evita la sobrecarga de solicitarlo
otra vez del servidor.
Una directiva de caché define reglas que se utilizan para determinar si una solicitud se puede satisfacer utilizando una copia
del recurso solicitado almacenada en caché.
Para obtener más información, vea Administración de memoria caché para aplicaciones de red.
En la tabla siguiente se muestran tareas comunes en las que interviene la administración de la memoria caché.
Para Vea
Establecer una directiva de caché Cómo establecer una directiva de caché basada en la ubicación para una aplicación
basada en la ubicación

Establecer una directiva de caché Cómo establecer la directiva de caché predeterminada basada en la hora para una aplicación
basada en la hora predeterminad
a

Personalizar una directiva de cac Cómo personalizar una directiva de caché basada en la hora
hé basada en la hora

Establecer una directiva de caché Cómo establecer una directiva de caché para una solicitud
para una solicitud

Seguridad
Las clases de System.Net proporcionan un entorno seguro para las aplicaciones de Internet al proporcionar compatibilidad
integrada con mecanismos de autenticación de Internet que se utilizan comúnmente y permisos de acceso a código de .NET
Framework.
Para obtener más información, vea Procedimientos recomendados para clases System.Net.
En la tabla siguiente se muestran tareas comunes en las que interviene la seguridad.
Para Vea
Utilizar conexiones Secure Sockets Layer (SSL) a un servidor HTTP Utilizar Capa de sockets seguros

Utilizar métodos de autenticación de HTTP para establecer una conexi Autenticación en Internet
ón autenticada a un servidor HTTP

Establecer seguridad de acceso a código para aplicaciones que utilizan Permisos de Web y socket
conexiones a Internet

Utilizar autenticación básica e implícita Autenticación básica e implícita

Utilizar autenticación NTML y Kerberos Autenticación NTLM y Kerberos

Utilizar System.Net para proteger Servicios Web XML Proteger servicios Web XML creados mediante ASP.NET

Vea también
Referencia
System.Net
System.Net.Sockets
Conceptos
Procedimientos recomendados para clases System.Net
Configurar aplicaciones de Internet
Otros recursos
Programación para redes
Espacios de nombres para la red en Visual Studio
Conceptos del lenguaje Visual Basic

Clases utilizadas en operaciones de red de .NET Framework


System.Net, System.Net.Sockets y Uri proporcionan una implementación por capas, extensible y administrada de servicios de
Internet que se pueden integrar rápida y fácilmente en sus aplicaciones.
Clases básicas utilizadas en operaciones de red
Esta tabla muestra las clases más importantes utilizadas para las operaciones de red de .NET Framework. Para una lista más
completa, consulte la documentación de .NET Framework.
Clase Descripción
System.Net Proporciona una interfaz de programación sencilla para muchos de los protocolos que se utiliz
an en las redes.

System.Net.Authorization Contiene un mensaje de autenticación para un servidor de Internet.

Cookie Proporciona un conjunto de métodos y propiedades utilizados para administrar cookies.

WebClient Proporciona los métodos comunes para enviar y recibir datos de un recurso identificado por u
n identificador uniforme de recursos (URI).

WebRequest Realiza una solicitud a un URI.

WebResponse Proporciona una respuesta de un URI.

System.Net.Sockets Proporciona una implementación administrada de la interfaz de Windows Sockets (Winsock) p


ara programadores que tienen que controlar rigurosamente el acceso a la red.

System.Net.Sockets.TcpClient Proporciona conexiones cliente para servicios de red TCP.

System.Net.Sockets.TcpListener Realiza escuchas para conexiones de clientes de red TCP.

System.Net.Sockets.UdpClient Proporciona servicios de red de Protocolo de datagramas de usuarios (UDP).

System.Uri Proporciona una representación de objeto de un identificador uniforme de recursos (URI).

UriBuilder Proporciona un constructor personalizado y modificadores para identificadores uniforme de r


ecursos (URI).

Vea también
Conceptos
Fundamentos de las operaciones de red de .NET Framework
Conceptos del lenguaje Visual Basic

Operaciones de puertos en .NET Framework con Visual Basic


Puede tener acceso a los puertos serie de su equipo a través de las clases de .NET Framework contenidas en el espacio de
nombres System.IO.Ports. La clase más importante, SerialPort, proporciona un marco de trabajo para E/S sincrónica y
orientada a eventos, acceso a estados de punto de conexión e interrupción, y acceso a propiedades del controlador serie. Se
puede ajustar en un objeto Stream, accesible a través de la propiedad BaseStream. Ajustar SerialPort en un objeto Stream
permite que las clases que utilizan secuencias tengan acceso al puerto serie. El espacio de nombres incluye enumeraciones que
simplifican el control de los puertos serie.
La manera más simple de crear un objeto SerialPort es a través del método My.Computer.Ports.OpenSerialPort.
Nota
No puede utilizar las clases .NET Framework para tener acceso directamente a otros tipos de puertos, como puertos paralelo
s, puertos USB, etc. Para tener acceso a la red de su equipo, vea Clases utilizadas en operaciones de red de .NET Framework.

Enumeraciones
Esta tabla muestra y describe las enumeraciones principales utilizadas para tener acceso a un puerto serie:
Enumeración Descripción
Handshake Especifica el protocolo de control utilizado para establecer una comunicación del puerto serie para un objeto
SerialPort.

Parity Especifica el bit de paridad para un objeto SerialPort.

SerialData Especifica el tipo de carácter que se recibió en el puerto serie del objeto SerialPort.

SerialError Especifica errores que aparecen en el objeto SerialPort

SerialPinChange Especifica el tipo de cambio que apareció en el objeto SerialPort.

StopBits Especifica el número de bits de parada utilizado en el objeto SerialPort.

Tareas
Esta tabla muestra y describe las tareas principales utilizadas para tener acceso a un puerto serie:
Para Vea
Mostrar los puertos serie disponibles Cómo: Mostrar los puertos serie disponibles en Visual Basic

Marcar en un módem conectado al puerto serie Cómo: Marcar a través de módems conectados a puertos serie en Visual Basic
de un equipo

Enviar una cadena al puerto serie de un equipo Cómo: Enviar cadenas a puertos serie en Visual Basic

Recibir una cadena del puerto serie de un equip Cómo: Recibir cadenas de puertos serie en Visual Basic
o

Vea también
Referencia
My.Computer.Ports (Objeto)
Otros recursos
Acceso a los puertos del equipo
Continuar con Visual Basic
Conceptos del lenguaje Visual Basic

Serialización en .NET Framework con Visual Basic


La serialización es el proceso de convertir un objeto en una secuencia de bytes para conservarlo en memoria, una base de
datos o un archivo. Puede guardar y volver a crear este tipo de objetos mediante la funcionalidad que proporciona .NET
Framework.
En esta sección
Fundamentos de la serialización de .NET Framework
Proporciona información general de serialización con las clases de .NET Framework.
Clases utilizadas en la serialización de .NET Framework
Muestra clases de .NET Framework utilizadas en la serialización.
Secciones relacionadas
Ejemplos de serialización XML
Muestra la serialización XML de distintos objetos, como un conjunto de datos.
Conceptos del lenguaje Visual Basic

Fundamentos de la serialización de .NET Framework


La serialización es el proceso de convertir un objeto en una secuencia de bytes para conservarlo en memoria, una base de
datos o un archivo. Su propósito principal es guardar el estado de un objeto para poder crearlo de nuevo cuando se necesita. El
proceso inverso se denomina deserialización.
Cómo funciona la serialización
Este ejemplo muestra el proceso total de serialización.

El objeto se serializa en una secuencia que, además de los datos, contiene información sobre el tipo de objeto, como la versión,
referencia cultural y nombre de ensamblado. Esa secuencia se puede almacenar en una base de datos, un archivo o en
memoria.
Usos de la serialización
La serialización permite al desarrollador guardar el estado de un objeto y volver a crearlo cuando es necesario, y proporcionar
almacenamiento de objetos e intercambio de datos. A través de la serialización, un desarrollador puede realizar acciones como
enviar un objeto a una aplicación remota por medio de un servicio Web, pasar un objeto de un dominio a otro, pasar un objeto
a través de un firewall como una cadena XML o mantener la seguridad o información específica del usuario entre aplicaciones.
Crear un objeto serializable
Para serializar un objeto, se necesita que el objeto esté serializado, una secuencia que contenga el objeto serializado y un
objeto Formatter. La enumeración System.Runtime.Serialization contiene las clases necesarias para serializar y deserializar
objetos.
Aplique el atributo SerializableAttribute a un tipo para indicar que se pueden serializar las instancias de ese tipo. Se produce
una excepción SerializationException si se intenta serializar pero el tipo no tiene el atributo SerializableAttribute.
Si no desea que un campo de su clase se pueda serializar, aplique el atributo NonSerializedAttribute. Si un campo de un tipo
serializable contiene un puntero, controlador u otra estructura de datos específica de un entorno determinado, y el significado
del campo no se puede reconstruir en un entorno diferente, es conveniente que no sea serializable.
Si una clase serializada contiene referencias a objetos de otras clases marcadas con el atributo SerializableAttribute, esos
objetos también se serializarán.
Serialización binaria y XML
Se puede utilizar serialización binaria o XML. En la serialización binaria, se serializan todos los miembros, incluso aquellos que
son de sólo lectura, y se mejora el rendimiento. La serialización XML proporciona código más legible, así como mayor
flexibilidad para compartir objetos y utilizarlos para fines de interoperabilidad.
Serialización binaria
La serialización binaria utiliza la codificación binaria a fin de generar una serialización compacta para usos como
almacenamiento o secuencias de red basadas en sockets. No es conveniente pasar los datos a través de un firewall, pero
proporciona mejor rendimiento al almacenarlos.
Serialización XML
La serialización XML serializa las propiedades y campos públicos de un objeto o los parámetros y valores devueltos de los
métodos en una secuencia XML que se ajusta a un documento específico del lenguaje de definición de esquemas XML (XSD).
La serialización XML produce clases con establecimiento inflexible de tipos cuyas propiedades y campos se convierten a XML.
La enumeración System.Xml.Serialization contiene las clases necesarias para serializar y deserializar XML.
Se pueden aplicar atributos a clases y miembros de clase para controlar la manera en que XmlSerializer serializa o deserializa
una instancia de la clase. Para obtener más información, vea Controlar la serialización XML mediante atributos y
Atributos que controlan la serialización XML.
En esta tabla se muestran tareas asociadas a la serialización XML:
Para Vea
Serializar un o Cómo serializar un objeto
bjeto

Deserializar un Cómo deserializar un objeto


objeto

Generar clases Cómo utilizar la herramienta Definición de esquemas XML para generar clases y documentos de esquema XML
y documentaci
ón del esquem
a XML

Calificar el ele Cómo completar los nombres de elementos y atributos XML


mento XML y l
os nombres de
l atributo XML

Especificar un Cómo especificar el nombre de un elemento alternativo para una secuencia XML
nombre de ele
mento alternat
ivo para una s
ecuencia XML

Controlar la se Cómo controlar la serialización de las clases derivadas


rialización de c
lases derivada
s
Serialización SOAP
La serialización XML también se puede usar para serializar objetos en secuencias XML que se ajustan a la especificación SOAP.
SOAP es un protocolo basado en XML, diseñado específicamente para transportar llamadas a procedimiento utilizando XML. Al
igual que la serialización XML normal, estos atributos también pueden utilizarse para controlar los mensajes SOAP de estilo
literal que genera un servicio Web XML. Para obtener más información, vea Serialización XML con servicios Web XML y
Atributos que controlan la serialización SOAP codificada.
En esta tabla se muestran tareas asociadas a la serialización XML con codificación SOAP:
Para Vea
Serializar un objeto como secuencia XML con codificaci Cómo serializar un objeto como secuencia XML con codificación SOAP
ón SOAP

Reemplazar la serialización XML con codificación SOAP Cómo reemplazar la serialización XML con codificación SOAP

Serialización básica y personalizada


La serialización se puede realizar de dos maneras: básica y personalizada. La serialización básica utiliza .NET Framework para
serializar automáticamente el objeto.
Serialización básica
El único requisito de la serialización básica es que se haya aplicado el atributo SerializableAttribute al objeto.
NonSerializedAttribute se puede utilizar para evitar que se serialicen campos concretos.
Cuando se utiliza la serialización básica, la versión de objetos puede crear problemas, en cuyo caso la serialización
personalizada puede ser preferible. La serialización básica es la manera más fácil de realizar la serialización, pero no
proporciona mucho control sobre el proceso.
Serialización personalizada
En serialización personalizada, se puede especificar exactamente qué objetos se serializarán y cómo se hará. La clase se debe
marcar con el atributo SerializableAttribute y se debe implementar la interfaz ISerializable.
Si desea deserializar el objeto también de una manera personalizada, debe utilizar un constructor personalizado.
Serialización de diseñador
La serialización de diseñador es una forma especial de serialización en la que interviene el tipo de persistencia de objeto
normalmente asociado a las herramientas de desarrollo. La serialización de diseñador es el proceso de convertir un gráfico de
objetos en un archivo de código fuente que se puede utilizar después para recuperar el gráfico de objetos. Un archivo de
código fuente puede contener código, formato o, incluso, información de la tabla SQL. Para obtener más información, vea
Información general sobre serialización de diseñadores.
Vea también
Tareas
Cómo fragmentar datos serializados
Conceptos
Ejemplos de serialización XML
Clases utilizadas en la serialización de .NET Framework
Conceptos del lenguaje Visual Basic

Clases utilizadas en la serialización de .NET Framework


En este tema se muestran las clases normalmente utilizadas para la serialización de .NET Framework. Para entrar en la
documentación de .NET Framework 2.0 y consultar una lista más completa, vea System.Runtime.Serialization.
Clases básicas para la serialización
Esta tabla enumera y describe las clases principales y espacios de nombres utilizados para la serialización:
Clase o espacio de nombres Descripción
System.Runtime.Serialization Contiene las clases necesarias para serializar y deserializar los objetos.

System.Xml.Serialization Contiene las clases necesarias para serializar y deserializar código XML.

SerializableAttribute Se debe aplicar a un objeto para que pueda ser serializable.

NonSerializedAttribute Se puede utilizar para impedir que se serialicen determinados campos de un objeto.

Vea también
Conceptos
Fundamentos de la serialización de .NET Framework
Conceptos del lenguaje Visual Basic

Desarrollar en Smart Devices con Visual Basic


Visual Studio 2005 admite Visual Basic para el desarrollo de aplicaciones de dispositivos inteligentes. Proporciona las
herramientas y estructura necesarios para desarrollar aplicaciones de Pocket PC, Smartphone y otras plataformas basadas en
Windows CE.
Desarrollar para dispositivos
En general, se pueden desarrollar dos tipos de aplicaciones para dispositivos:
Aplicaciones Web móviles que se ejecutan en un servidor Web y se representan en formatos diferentes en una gama de
dispositivos móviles equipados con un explorador. Para obtener más información, vea
Crear páginas Web de ASP.NET Mobile.
Aplicaciones basadas en Windows CE mejoradas para el cliente que se ejecutan en el propio dispositivo. Este enfoque
generalmente es lo que queremos decir con el término "aplicación de Smart Devices".
Al desarrollar aplicaciones de para dispositivos inteligentes se puede utilizar el mismo entorno de Visual Studio que se
emplea para desarrollar aplicaciones de escritorio, pero hay algunas diferencias que se ponen de manifiesto en los
dispositivos de destino. Entre estas diferencias se incluyen:
Herramientas adicionales para conectar con un dispositivo remoto y depurar el código.
Aparte de seleccionar un tipo de proyecto y una plantilla cuando se crea un proyecto, debe seleccionarse un dispositivo
en el que se ejecutará y depurará la aplicación. El dispositivo puede ser un dispositivo físico conectado al equipo de
desarrollo, un dispositivo conectado en red o un emulador de dispositivos que se ejecute en el equipo de desarrollo.
El uso de las clases y sus miembros es diferente al desarrollar para dispositivos. Para determinar si una clase y sus
miembros están o no disponibles, consulte la documentación o utilice IntelliSense o el Examinador de objetos de Visual
Studio mientras el proyecto esté activo. Para obtener más información, vea .NET Compact Framework.
Crear una aplicación de dispositivo
Un cuadro de diálogo Nuevo proyecto mejorado de Visual Studio 2005 reemplaza al Asistente para aplicaciones de Smart
Device de Visual Studio .NET 2003. En Visual Studio 2005, las decisiones relativas a los tipos de proyectos y plantillas se toman
en el cuadro de diálogo Nuevo proyecto. Para obtener más información, vea
Cómo: Crear aplicaciones para dispositivos utilizando Visual C# o Visual Basic.
Para obtener una lista de tareas en las que intervienen dispositivos inteligentes, vea
Aplicaciones para Smart Device (Cómo se procede en Visual Basic).
Datos y dispositivos
.NET Compact Framework proporciona una implementación enriquecida de ADO.NET para dispositivos que acepta las clases
DataSet y Dataview. Esta compatibilidad incluye las clases DataRelation y Constraint, y otras clases que definen y manipulan el
objeto DataSet. .NET Compact Framework también incluye el proveedor de datos de SQL Server .NET. Para obtener más
información, vea Acceso a datos y compatibilidad con XML y SQL Server Compact Edition con .NET Compact Framework.
Conexión de red
.NET Compact Framework proporciona la API de conexión en red de nivel de socket y abstracciones de alto nivel, como
peticiones y respuestas HTTP, DNS y Web. Se ofrece conectividad por medio de los transportes IrDA (Infrared Data Association)
y TCP/IP mediante la API de sockets. Para obtener más información, vea Funciones de red y conectividad.
Desarrollar para Pocket PC
En esta tabla se muestran tareas específicas para Pocket PC.
Para Vea
Utilizar un control DocumentList para controlar las tareas de administrac Cómo: Utilizar un control DocumentList
ión de archivos en la aplicación

Utilizar elementos de formulario en la aplicación Estilo de formulario Pocket PC


Activar aplicaciones desde un botón de hardware físico con un compone Cómo: Utilizar el componente HardwareButton
nte HardwareButton en la aplicación

Utilizar un componente InputPanel en la aplicación Cómo: Utilizar el componente InputPanel

Seleccionar los métodos de entrada de Pocket PC para los datos proporc Cómo: Establecer los modos de entrada de Pocket PC
ionados por el usuario en la aplicación

Enviar una notificación y responder a ella en la aplicación Cómo: Enviar una notificación

Detectar las teclas de desplazamiento Cómo: Detectar las teclas de desplazamiento

Desarrollar para Smartphone


.NET Compact Framework se puede instalar en Windows Mobile 2003 Smartphones y versiones posteriores.
En esta tabla se muestran tareas específicas para el desarrollo de Smartphone.
Para Vea
Establecer métodos de entrada de Smartphone en la aplicación Cómo: Establecer los modos de entrada de Smartphone

Reemplazar la tecla Atrás Cómo: Reemplazar la tecla Atrás de Smartphone

Utilizar menús de Smartphone Cómo: Utilizar los menús de Smartphone

Vea también
Conceptos
Temas Cómo... de .NET Compact Framework
Otros recursos
Desarrollo de Pocket PC y .NET Compact Framework
Desarrollo de Smartphone y .NET Compact Framework
Desarrollo de Windows CE
Información del producto .NET Compact Framework
Conceptos del lenguaje Visual Basic

Subprocesamiento múltiple avanzado con Visual Basic


Las aplicaciones multiproceso pueden ejecutar simultáneamente varias tareas diferentes. Los temas en esta sección describen
cómo administrar estas tareas se puedan utilizar a la vez de forma sencilla y sin conflictos.
En esta sección
Sincronización de subprocesos
Se describe la forma de sincronizar aplicaciones multiproceso.
Agrupación de subprocesos
Describe cómo se pueden agregar tareas a una cola y luego iniciarlas al crear nuevos subprocesos.
Temporizadores de subprocesos
Describe cómo ejecutar procedimientos en subprocesos separados, en intervalos fijos.
Técnicas de sincronización avanzadas
Describe cómo las aplicaciones multiproceso pueden utilizar controladores de espera y objetos de supervisión para
sincronizar múltiples subprocesos.
Secciones relacionadas
Subprocesamiento múltiple en Visual Basic
Introducción a la utilización de subprocesamiento múltiple en aplicaciones de Visual Basic.
Subprocesamiento múltiple en componentes
Proporciona vínculos a temas que describen la forma de utilizar subprocesamiento múltiple en la programación de
componentes.
Tutorial: Crear un componente sencillo con múltiples procesos en Visual Basic
Muestra la forma de crear componentes multiproceso.
System.Threading
Proporciona clases e interfaces de .NET Framework que habilitan la programación multiproceso.
Conceptos del lenguaje Visual Basic

Temporizadores de subprocesos
La clase System.Threading.Timer es útil para ejecutar periódicamente una tarea en un subproceso separado. Por ejemplo,
podría utilizar un temporizador de subproceso para comprobar el estado y la integridad de una base de datos o para hacer
copias de seguridad de archivos importantes.
Ejemplo de temporizador de subprocesos
El ejemplo siguiente inicia una tarea cada dos segundos y utiliza un indicador para iniciar el método Dispose, que detiene el
temporizador. Este ejemplo envía el estado a la ventana de resultados, que puede hacerse visible presionando CTRL+ALT+O
antes de probar el código.
VB
Class StateObjClass
' Used to hold parameters for calls to TimerTask
Public SomeValue As Integer
Public TimerReference As System.Threading.Timer
Public TimerCanceled As Boolean
End Class

Sub RunTimer()
Dim StateObj As New StateObjClass
StateObj.TimerCanceled = False
StateObj.SomeValue = 1
Dim TimerDelegate As New Threading.TimerCallback(AddressOf TimerTask)
' Create a timer that calls a procedure every 2 seconds.
' Note: There is no Start method; the timer starts running as soon as
' the instance is created.
Dim TimerItem As New System.Threading.Timer(TimerDelegate, StateObj, _
2000, 2000)
StateObj.TimerReference = TimerItem ' Save a reference for Dispose.

While StateObj.SomeValue < 10 ' Run for ten loops.


System.Threading.Thread.Sleep(1000) ' Wait one second.
End While

StateObj.TimerCanceled = True ' Request Dispose of the timer object.


End Sub

Sub TimerTask(ByVal StateObj As Object)


Dim State As StateObjClass = CType(StateObj, StateObjClass)
' Use the interlocked class to increment the counter variable.
System.Threading.Interlocked.Increment(State.SomeValue)
System.Diagnostics.Debug.WriteLine("Launched new thread " & Now)
If State.TimerCanceled Then ' Dispose Requested.
State.TimerReference.Dispose()
System.Diagnostics.Debug.WriteLine("Done " & Now)
End If
End Sub

Los temporizadores de subprocesos resultan especialmente útiles cuando el objeto System.Windows.Forms.Timer no se


encentra disponible; esto ocurre, por ejemplo, cuando se desarrollan aplicaciones de consola.
Vea también
Referencia
SyncLock (Instrucción)
System.Threading
Conceptos
Subprocesamiento múltiple avanzado con Visual Basic
Aplicaciones multiproceso
Conceptos del lenguaje Visual Basic

Agrupación de subprocesos
La agrupación de subprocesos es una forma de multiproceso en la que las tareas se agregan a una cola y se inician
automáticamente al crear los subprocesos. Con la agrupación de subprocesos, se llama al método
System.Threading.ThreadPool.QueueUserWorkItem(System.Threading.WaitCallback) con un delegado para el procedimiento
que se desea ejecutar y entonces Visual Basic crea el subproceso y ejecuta el procedimiento.
Ejemplo de agrupación de subprocesos
El ejemplo siguiente muestra cómo utilizar la agrupación de subprocesos para iniciar varias tareas.
VB
Sub DoWork()
' Queue a task
System.Threading.ThreadPool.QueueUserWorkItem( _
New System.Threading.WaitCallback(AddressOf SomeLongTask))
' Queue another task
System.Threading.ThreadPool.QueueUserWorkItem( _
New System.Threading.WaitCallback(AddressOf AnotherLongTask))
End Sub
Sub SomeLongTask(ByVal state As Object)
' Insert code to perform a long task.
End Sub
Sub AnotherLongTask(ByVal state As Object)
' Insert code to perform another long task.
End Sub

La agrupación de subprocesos es útil cuando se desean iniciar muchas tareas diferentes sin establecer individualmente las
propiedades de cada subproceso. Cada tarea se inicia con un tamaño de pila y una prioridad predeterminadas. De forma
predeterminada, es posible ejecutar como máximo 25 subprocesos de agrupación por procesador del sistema. Es posible
poner en cola subprocesos adicionales por encima del límite, pero no se iniciarán hasta que terminen otros subprocesos.
Una ventaja de la agrupación de subprocesos es que es posible pasar argumentos en un objeto de estado al procedimiento de
tarea. Si el procedimiento al que se está llamando requiere más de un argumento, es posible convertir una estructura o una
instancia de una clase en un tipo de datos Object.
Parámetros de agrupación de subprocesos y valores devueltos
Devolver valores desde un subproceso de agrupación de subprocesos no es sencillo. El modo estándar de devolver valores
desde una llamada de función no está permitido, ya que los procedimientos Sub son los únicos que se pueden poner en la cola
de una agrupación de subprocesos. Una manera de poder proporcionar parámetros y devolver valores consiste en
empaquetar los parámetros, valores devueltos y métodos en una clase contenedora, como se explica en
Parámetros y valores devueltos para procedimientos multiproceso.
Una forma más sencilla de proporcionar parámetros y valores devueltos es utilizar la variable opcional de objeto de estado
ByVal del método QueueUserWorkItem. Si utiliza esta variable para pasar una referencia a una instancia de una clase, los
miembros de la instancia podrán ser modificados por el subproceso de la agrupación de subprocesos, y utilizados como
valores devueltos.
Al principio puede no ser obvio que es posible modificar un objeto al que hace referencia una variable que se pasa por valor.
Esto se puede hacer porque sólo se pasa por valor la referencia de objeto. Cuando se hace algún cambio en los miembros del
objeto al que se refiere la referencia de objeto, los cambios se aplican a la instancia real de la clase.
Las estructuras no se pueden utilizar para devolver valores dentro de objetos de estado. Dado que las estructuras son tipos de
valor, los cambios que realiza el proceso asincrónico no modifican los miembros de la estructura original. Utilice estructuras
para proporcionar parámetros cuando no se necesiten valores devueltos.
Vea también
Referencia
SyncLock (Instrucción)
QueueUserWorkItem
System.Threading
Conceptos
Subprocesamiento múltiple avanzado con Visual Basic
Aplicaciones multiproceso
Sincronización de subprocesos
Subprocesamiento múltiple con formularios y controles
Conceptos del lenguaje Visual Basic

Sincronización de subprocesos
Cuando se crea una aplicación multiproceso, se deben sincronizar los subprocesos individuales con otras partes del programa.
La sincronización ofrece un compromiso entre la naturaleza desestructurada de la programación multiproceso y el orden
estructurado del procesamiento sincrónico.
Las técnicas de sincronización se utilizan:
Para controlar explícitamente el orden en que se ejecuta el código, siempre que sea necesario ejecutar tareas en una
secuencia específica
O bien
Para evitar los problemas que pueden producirse cuando dos subprocesos comparten los mismos recursos al mismo
tiempo.
Por ejemplo, puede utilizar la sincronización para hacer que un procedimiento de presentación espere hasta que se complete
un procedimiento de recuperación de datos que se está ejecutando en otro subproceso.
Técnicas de sincronización
Hay dos enfoques para la sincronización, el sondeo y el uso de objetos de sincronización. Vea
Técnicas de sincronización avanzadas para obtener más información sobre los objetos de sincronización.
Sondeo
El sondeo comprueba repetidamente el estado de una llamada asincrónica desde el interior de un bucle. El sondeo es el modo
menos eficiente para administrar subprocesos, porque desperdicia recursos al comprobar repetidamente el estado de las
diversas propiedades del subproceso.
Por ejemplo, es posible utilizar la propiedad IsAlive durante el sondeo para ver si se ha salido de un subproceso. Utilice esta
propiedad con cuidado, porque un subproceso activo puede no estar necesariamente en ejecución.
Se puede utilizar la propiedad ThreadState del subproceso para obtener información más detallada sobre su estado. Ya que los
subprocesos pueden estar en más de un estado en un momento determinado, el valor almacenado en ThreadState puede ser
una combinación de los valores de la enumeración System.Threading.ThreadState. En consecuencia, es recomendable
comprobar minuciosamente todos los estados relevantes del subproceso al utilizar el sondeo. Por ejemplo, si el estado de un
subproceso indica un valor distinto de Running, es posible que haya terminado. Por otra parte, puede estar suspendido o
inactivo.
Esperar la finalización de un subproceso
El método System.Threading.Thread.Join es útil para determinar si un subproceso ha finalizado antes de iniciarse otra tarea. El
método Join espera durante un tiempo determinado a que finalice un subproceso. Si el subproceso finaliza antes del tiempo
de espera, Join devuelve True; de lo contrario devuelve False.
Como puede imaginar, el sondeo sacrifica muchas de las ventajas del multiproceso en favor de un mayor control sobre el
orden en que se ejecutan los subprocesos. Debido a su ineficacia, el sondeo no suele ser recomendable. Un enfoque más eficaz
utilizaría el método Join para controlar los subprocesos. Join determina que un procedimiento que realiza una llamada espere
hasta que finalice un subproceso o hasta que finalice el tiempo de espera de la llamada, si se especifica un tiempo de espera. El
nombre "join" (unir) se basa en la idea de que la creación de un nuevo subproceso es una bifurcación en la ruta de ejecución.
Join se utiliza para combinar de nuevo rutas de ejecución separadas en un solo subproceso.
Figura 1 Subprocesos
Un punto debe quedar claro: Join es una llamada sincrónica o de bloqueo. Cuando se llama a Join o a un método de espera
de un controlador de espera, el procedimiento de llamada se detiene y espera a que el subproceso indique su finalización.
VB
Sub JoinThreads()
Dim Thread1 As New System.Threading.Thread(AddressOf SomeTask)
Thread1.Start()
Thread1.Join() ' Wait for the thread to finish.
MsgBox("Thread is done")
End Sub
Sub SomeTask()
' Insert code to perform a task here.
End Sub

Estos sencillos métodos de control de subprocesos, que resultan útiles al administrar un número pequeño de subprocesos, son
difíciles de utilizar con proyectos grandes. En Técnicas de sincronización avanzadas se tratan algunas técnicas que pueden
utilizarse para sincronizar subprocesos.
Vea también
Conceptos
Subprocesamiento múltiple avanzado con Visual Basic
Parámetros y valores devueltos para procedimientos multiproceso
Otros recursos
Subprocesamiento múltiple en Visual Basic
Conceptos del lenguaje Visual Basic

Técnicas de sincronización avanzadas


Las aplicaciones multiproceso suelen utilizar controladores de espera y objetos de supervisión para sincronizar múltiples
subprocesos. Estas secciones explican cómo utilizar las siguientes clases de .NET Framework al sincronizar subprocesos:
AutoResetEvent, Interlocked, ManualResetEvent, Monitor, Mutex, ReaderWriterLock, Timer, WaitHandle.
Controladores de espera
Los controladores de espera son objetos que indican el estado de un subproceso a otro subproceso. Los subprocesos pueden
utilizar controladores de espera para notificar a otros subprocesos que necesitan acceso exclusivo a un recurso. Entonces, otros
subprocesos deben esperar para utilizar este recurso, hasta que el controlador deje de estar en uso. Los controladores de
espera tienen dos estados, señalizado y no señalizado. Un controlador de espera que no es propiedad de ningún subproceso
está en el estado señalizado. Un controlador de espera que es propiedad de un subproceso está en el estado no señalizado.
Para solicitar la propiedad de un controlador de espera, los subprocesos llaman a uno de los métodos de espera: WaitOne,
WaitAny o WaitAll. Los métodos de espera son llamadas de bloqueo similares al método Join de un subproceso individual:
Si ningún otro subproceso es propietario del controlador de espera, la llamada devuelve inmediatamente True, el estado
del controlador de espera cambia a no señalizado y el subproceso propietario del controlador de espera continúa
ejecutándose.
Si un subproceso llama a uno de los métodos de espera de un controlador de espera, pero el controlador de espera es
propiedad de otro subproceso, el subproceso que hace la llamada espere durante un tiempo específico (si se especificó
un tiempo de espera) o espere indefinidamente (si no se especificó ningún tiempo de espera) hasta que el otro
subproceso libere el controlador de espera. Si se especificó un tiempo de espera y el controlador de espera se libera
antes de que transcurra ese tiempo, la llamada devuelve True. En caso contrario, la llamada de espera devuelve False y el
subproceso que hace la llamada continúa ejecutándose.
Los subprocesos propietarios de un controlador de espera llaman al método Set cuando terminan o cuando ya no necesitan el
controlador de espera. Otros subprocesos pueden restablecer el estado de un controlador de espera al estado no señalizado
llamando al método Reset o llamado a WaitOne, WaitAny o WaitAll, y esperando con éxito a que un subproceso llame a Set.
El sistema restablece automáticamente los controladores AutoResetEvent al estado no señalizado una vez liberado un
subproceso de espera. Si no hay subprocesos en espera, el objeto del evento sigue teniendo el estado señalizado.
Hay tres tipos de controladores de espera usados frecuentemente en Visual Basic: los objetos de exclusión mutua (mutex),
ManualResetEvent y AutoResetEvent. Los dos últimos suelen conocerse como eventos de sincronización.
Objetos de exclusión mutua (Mutex)
Los objetos de exclusión mutua son objetos de sincronización que sólo pueden ser propiedad de un único subproceso a la vez.
El nombre "mutex" proviene del hecho de que la propiedad de estos objetos es mutuamente exclusiva. Los subprocesos
solicitan la propiedad del objeto mutex cuando necesitan acceso a un recurso. Dado que sólo un subproceso puede poseer un
objeto mutex en cualquier momento dado, los demás subprocesos deben esperar a poseer un objeto mutex antes de utilizar el
recurso.
El método WaitOne hace que un subproceso que realiza una llamada espere la propiedad de un objeto mutex. Si un
subproceso termina normalmente mientras es propietario de un objeto mutex, el estado del objeto mutex se establece en
señalizado, y la propiedad pasa al siguiente subproceso en espera.
Eventos de sincronización
Los eventos de sincronización se utilizan para notificar a otros subprocesos que ha ocurrido algo o que un recurso está
disponible. A pesar de que el término incluya la palabra "evento", los eventos de sincronización son diferentes de otros eventos
de Visual Basic: realmente esperan los controladores. Al igual que otros controladores de espera, los eventos de sincronización
tienen dos estados, señalizado y no señalizado.
Los subprocesos que llaman a uno de los métodos de espera de un evento de sincronización deben esperar hasta que otro
subproceso señalice el evento mediante una llamada al método Set. Hay dos clases de eventos de sincronización:
ManualResetEvent y AutoResetEvent.
Los subprocesos establecen el estado de las instancias de ManualResetEvent en señalizado mediante el método Set. Los
subprocesos establecen el estado de las instancias ManualResetEvent en no señalizado mediante el método Reset o el
control vuelve a una llamada de espera WaitOne.
También es posible establecer en señalizado el estado de las instancias de la clase AutoResetEvent mediante Set, pero
vuelven automáticamente al estado no señalizado tan pronto como un subproceso en espera recibe la notificación de que el
evento ha pasado a estar señalizado.
Objetos de supervisión y SyncLock
Los objetos de supervisión se utilizan para garantizar que un bloque de código funciona sin verse interrumpido por el código
que se ejecuta en otros subprocesos. En otras palabras, el código de otros subprocesos no puede ejecutarse hasta que ha
terminado el código del bloque de código sincronizado.
Suponga, por ejemplo, que tiene un programa que lee datos de forma repetida y asincrónica y muestra los resultados. Con los
sistemas operativos que utilizan la multitarea preferente, un subproceso en ejecución puede verse interrumpido por el sistema
operativo para dar más tiempo a que se ejecute otro subproceso. Sin sincronización, es posible obtener una vista parcialmente
actualizada de los datos si el objeto que representa los datos es modificado por otro subproceso mientras se muestran los
datos. Los objetos de supervisión garantizan que una sección del código se ejecutará sin interrupción. Visual Basic proporciona
las instrucciones SyncLock y End SyncLock para simplificar el acceso a los objetos de supervisión. Visual C# utiliza la palabra
clave Lock de la misma manera.
Nota
El acceso a un objeto está bloqueado únicamente si el código que está obteniendo acceso a él está contenido en un bloque S
yncLock en la misma instancia de objeto.

Para obtener información acerca de la instrucción SyncLock, vea SyncLock (Instrucción).


Clase Interlocked
Puede utilizar los métodos de la clase Interlocked para evitar problemas que pueden producirse cuando varios subprocesos
intentan actualizar o comparar simultáneamente el mismo valor. Los métodos de esta clase permiten incrementar, reducir,
intercambiar y comparar valores, de forma segura, desde cualquier subproceso El ejemplo siguiente muestra cómo utilizar el
método Increment para incrementar una variable compartida por procedimientos que se ejecutan en subprocesos
independientes.
VB
Sub ThreadA(ByRef IntA As Integer)
System.Threading.Interlocked.Increment(IntA)
End Sub
Sub ThreadB(ByRef IntA As Integer)
System.Threading.Interlocked.Increment(IntA)
End Sub

Bloqueos ReaderWriterLock
En algunos casos, quizá desee bloquear un recurso sólo mientras se están escribiendo los datos y permitir que múltiples
clientes puedan leer datos simultáneamente cuando no se estén actualizando los datos. La clase ReaderWriterLock fuerza el
acceso exclusivo a un recurso mientras hay un subproceso modificando el recurso, pero permite el acceso no exclusivo al leer
el recurso. Los bloqueos de ReaderWriter son una alternativa útil a los bloqueos exclusivos que hacen esperar a otros
subprocesos, incluso cuando esos subprocesos no necesitan actualizar datos.
Interbloqueos
La sincronización de subprocesos resulta de un valor incalculable en aplicaciones multiproceso, pero siempre existe el peligro
de crear un deadlock, en el que varios subprocesos están esperando unos a otros y la aplicación se bloquea. Un interbloqueo
es una situación análoga a otra en la que hay automóviles parados en un cruce con cuatro señales de stop y cada uno de los
conductores está esperando a que los otros se pongan en marcha. Evitar los interbloqueos es importante; la clave está en una
cuidadosa planificación. A menudo es posible prevenir situaciones de interbloqueo mediante la creación de diagramas de las
aplicaciones multiproceso, antes de empezar a escribir código.
Vea también
Referencia
SyncLock (Instrucción)
System.Threading
Conceptos
Subprocesamiento múltiple avanzado con Visual Basic
Sincronización de subprocesos
Estados de subprocesos
Aplicaciones multiproceso
Otros recursos
Subprocesamiento múltiple en componentes
Conceptos del lenguaje Visual Basic

Conceptos de las aplicaciones de Windows Forms en Visual


Basic
Las aplicaciones de Windows Forms son aplicaciones cliente que se ejecutan en el equipo del usuario, muestran información,
solicitan entrada de los usuarios y se comunican con equipos remotos en una red. Si desarrolla aplicaciones mayores, puede
que deba investigar .NET Framework y las clases que proporciona. En esta sección se proporciona información general sobre
las clases de .NET Framework y conceptos relacionados con las aplicaciones de Windows Forms.
En esta sección
Fundamentos de las aplicaciones de Windows Forms
Proporciona información general sobre la creación de aplicaciones de Windows Forms mediante clases de .NET Framework.
Clases utilizadas en los formularios de .NET Framework
Muestra las clases de .NET Framework utilizadas en aplicaciones de Windows Forms.
Secciones relacionadas
Información general de aplicaciones basadas en Windows
Trata los detalles de la creación de aplicaciones de Windows Forms con Visual Studio 2005.
Información general sobre formularios Windows Forms
Trata las ventajas de las aplicaciones cliente inteligentes y las características principales de la programación de formularios
Windows Forms.
Vea también
Referencia
Información general sobre formularios Windows Forms
Conceptos
Información general sobre el modelo de aplicaciones de Visual Basic
Otros recursos
Continuar con Visual Basic
Conceptos del lenguaje Visual Basic

Fundamentos de las aplicaciones de Windows Forms


Una parte importante de Visual Basic es la capacidad de crear aplicaciones de Windows Forms que se ejecutan localmente en
los equipos de los usuarios. Visual Studio 2005 se puede utilizar para crear la aplicación y la interfaz de usuario utilizando
formularios Windows Forms. Una aplicación de Windows Forms se genera a partir de las clases del espacio de nombres
System.Windows.Forms.
Diseñar aplicaciones de Windows Forms
Puede crear aplicaciones de Windows Forms y aplicaciones de servicio de Windows mediante Visual Studio. Para obtener más
información, vea los temas siguientes:
Introducción a los formularios Windows Forms. Proporciona información sobre cómo crear y programar formularios
Windows Forms.
Temas "Cómo..." y de tutoriales de formularios Windows Forms. Incluye temas que temas que explican el desarrollo paso
a paso de aplicaciones Windows comunes y basadas en formularios Windows Forms.
Controles de formularios Windows Forms. Colección de temas que detallan el uso de controles de formularios Windows
Forms.
Aplicaciones de servicios de Windows. Muestra temas que explican cómo crear servicios de Windows.
Generar interfaces de usuario interactivas con formato enriquecido
Los formularios Windows Forms son el componente cliente inteligente de .NET Framework, un conjunto de bibliotecas
administradas que habilitan las tareas comunes de aplicación, como la lectura y la escritura en el sistema de archivos.
Utilizando un entorno de desarrollo como Visual Studio, puede crear aplicaciones de Windows Forms que muestran
información, solicitan a los usuarios la entrada de datos y se comunican con equipos remotos a través de una red.
En formularios Windows Forms, un formulario es una superficie visual en la que se muestra información al usuario.
Normalmente las aplicaciones de Windows Forms se generan colocando controles en los formularios y programando
respuestas a las acciones del usuario, como clics del mouse o presiones de teclas. Un control es un elemento discreto de la
interfaz de usuario que muestra datos o acepta la entrada de datos.
Eventos
Cuando un usuario hace algo en su formulario o en alguno de sus controles, se genera un evento. Su aplicación reacciona a
estos eventos utilizando el código y procesa los eventos cuando aparecen. Para obtener más información, vea
Crear controladores de eventos en formularios Windows Forms.
Controles
Los formularios Windows Forms contienen diversos controles que puede colocar en los formularios: controles que muestran
cuadros de texto, botones, cuadros desplegables, botones de opción e incluso páginas Web. Para obtener una lista de todos los
controles que se pueden usar en los formularios, vea Controles que se utilizan en formularios Windows Forms. Si un control
existente no satisface sus necesidades, los formularios Windows Forms también admiten la creación de sus propios controles
personalizados mediante la clase UserControl.
Los formularios Windows Forms tienen controles enriquecidos de interfaz de usuario que emulan las características de
aplicaciones de tecnología avanzada como Microsoft Office. Mediante los controles ToolStrip y MenuStrip se pueden crear
barras de herramientas y menús que contienen texto e imágenes, muestran submenús y comprenden otros controles como
cuadros de texto y cuadros combinados.
Con el diseñador de formularios de Visual Studio de tipo arrastrar y colocar, puede crear fácilmente aplicaciones de Windows
Forms: sólo ha de seleccionar los controles con el cursor y colocarlos en el lugar deseado del formulario. El diseñador
proporciona herramientas como líneas de cuadrícula y "líneas de ajuste" para minimizar la molestia de alinear los controles. Y,
aunque utilice Visual Studio o compile desde la línea de comandos, puede utilizar los controles FlowLayoutPanel,
TableLayoutPanel y SplitContainer para crear diseños de formulario avanzados con el mínimo de tiempo y de esfuerzo.
Elementos personalizados de interfaz de usuario
Por último, si debe crear sus propios elementos personalizados de interfaz de usuario, el espacio de nombres System.Drawing
contiene todas las clases necesarias para representar líneas, círculos y otras formas directamente en un formulario.
Para obtener información paso a paso sobre el uso de estas características, vea los siguientes temas de Ayuda.
Para Vea
Crear Tutorial: Crear un formulario Windows Forms sencillo
una n
ueva
aplica
ción
de Wi
ndow
s For
ms c
on Vi
sual
Studi
o

Utiliz Cómo: Agregar controles a formularios Windows Forms


ar co
ntrol
es en
form
ulario
s

Contr Cómo: Crear controladores de eventos con el diseñador


olar e
vento
s de
un fo
rmul
ario y
sus c
ontro
les

Utiliz Cómo: Crear un control ToolStrip básico de formularios Windows Forms con elementos estándar mediante el Diseñador
ar el
contr
ol To
olStr
ip

Crear Introducción a la programación de gráficos


gráfic
os co
n Sys
tem.
Draw
ing

Crear Cómo: Heredar de una clase UserControl


contr
oles
perso
naliza
dos

Mostrar y manipular datos


Muchas aplicaciones deben mostrar los datos de una base de datos, archivo XML, servicio Web XML u otro origen de datos.
Los formularios Windows Forms proporcionan un control flexible denominado DataGridView para representar esos datos
tabulados en un formato tradicional de filas y columnas, de manera que cada fragmento de datos ocupe su propia celda.
Utilizando DataGridView, puede personalizar el aspecto de celdas concretas, bloquear filas y columnas arbitrarias en el lugar
que ocupan y mostrar controles complejos dentro de las celdas, entre otras características.
Conectar a orígenes de datos a través una red resulta sencillo con los clientes inteligentes de formularios Windows Forms. El
componente BindingSource, una novedad de los formularios Windows Forms en Visual Studio 2005 y .NET Framework 2.0,
representa una conexión a un origen de datos y expone métodos para enlazar datos a controles, desplazarse al registro
siguiente y al anterior, modificar registros y guardar los cambios en el origen de datos inicial. El control BindingNavigator
proporciona una interfaz simple sobre el componente BindingSource para que los usuarios puedan desplazarse entre los
registros.
Controles enlazados a datos
Puede crear controles enlazados a datos con facilidad utilizando la ventana Orígenes de datos, que muestra orígenes de datos
como bases de datos, servicios Web y objetos de su proyecto. Puede crear controles enlazados a datos arrastrando elementos
desde esta ventana hasta los formularios de su proyecto. También puede enlazar a datos los controles existentes arrastrando
los objetos desde la ventana Orígenes de datos hasta los controles existentes.
Configuración
Otro tipo de enlace a datos que puede administrar en formularios Windows Forms es la configuración. La mayoría de
aplicaciones de cliente inteligente deben conservar cierta información sobre su estado de ejecución, como el último tamaño
conocido de los formularios, y retener información sobre las preferencias de los usuarios, como las ubicaciones
predeterminadas para los archivos guardados. Las característica de configuración de la aplicación da respuesta a estas
necesidades proporcionando una manera fácil de almacenar ambos tipos de configuración en el equipo cliente. Una vez
definida utilizando Visual Studio o un editor de código, esta configuración se conserva con formato XML y se vuelve a leer para
colocarla automáticamente en la memoria en tiempo de ejecución.
Para obtener información paso a paso sobre el uso de estas características, vea los siguientes temas de Ayuda.
Para Vea
Utilizar el compone Cómo: Enlazar controles de Windows Forms con el componente BindingSource mediante el Diseñador
nte BindingSourc
e

Trabajar con oríge Cómo: Ordenar y filtrar datos ADO.NET con el componente BindingSource de formularios Windows Forms
nes de datos ADO.
NET

Utilizar la ventana Tutorial: Mostrar datos en un formulario en una aplicación para Windows
Orígenes de datos

Utilizar la configur Cómo: Crear una configuración de aplicación mediante el diseñador


ación de la aplicaci
ón

Implementar aplicaciones en los equipos cliente


Una vez escrita su aplicación, debe enviarla a sus usuarios para que puedan instalarla y ejecutarla en sus equipos clientes.
Mediante la tecnología ClickOnce puede implementar sus aplicaciones desde dentro de Visual Studio con sólo unos cuantos
clics y proporcionar a sus usuarios una dirección URL que apunta a su aplicación en el Web. ClickOnce administra todos los
elementos y dependencias de su aplicación y se asegura de que la aplicación esté correctamente instalada en el equipo cliente.
Las aplicaciones de ClickOnce se pueden configurar que se ejecuten sólo cuando el usuario tenga conexión a la red, o para que
se ejecuten mientras se trabaja con conexión o sin ella. Cuando especifique que una aplicación debe admitir el funcionamiento
sin conexión, ClickOnce agrega un vínculo a su aplicación en el menú Inicio del usuario, de manera que el usuario pueda
abrirla sin utilizar la dirección URL.
Cuando actualice su aplicación, publicará un nuevo manifiesto de implementación y una nueva copia de su aplicación en su
servidor Web. ClickOnce detectará que hay una actualización disponible y actualizará la instalación del usuario; no es necesario
realizar programación personalizada para actualizar los ensamblados antiguos.
Para obtener una introducción completa a ClickOnce, vea Información general sobre la implementación de ClickOnce. Para
obtener información paso a paso sobre el uso de estas características, vea los siguientes temas de Ayuda:
Para Vea
Implementar una aplicación con ClickOnce Cómo: Publicar aplicaciones ClickOnce
Tutorial: Implementar manualmente una aplicación ClickOnce

Actualizar una implementación de ClickOnce Cómo: Administrar actualizaciones de aplicaciones ClickOnce

Buscar actualizaciones de la aplicación Cómo: Buscar actualizaciones de la aplicación ClickOnce

Administrar la seguridad con ClickOnce Cómo: Habilitar la configuración de seguridad para aplicaciones ClickOnce

Otros controles y características


Los formularios Windows Forms tienen muchas otras características que hacen que las tareas frecuentes de implementación
sean rápidas y fáciles, como la posibilidad de crear cuadros de diálogo, imprimir, agregarles Ayuda y documentación, y adaptar
y traducir su aplicación a varios idiomas. Además, los formularios Windows Forms confían en el robusto sistema de seguridad
de .NET Framework, permitiéndole publicar aplicaciones más seguras para sus clientes.
Para obtener información paso a paso sobre el uso de estas características, vea los siguientes temas de Ayuda:
Para Vea
Imprimir el contenido de un formulario Cómo: Imprimir gráficos en formularios Windows Forms
Cómo: Imprimir un archivo de texto de varias páginas en formularios Windows Forms

Globalizar una aplicación de Windows F Tutorial: Adaptar formularios Windows Forms


orms

Obtener más información sobre la segu Información general sobre la seguridad en formularios Windows Forms
ridad de los formularios Windows Form
s

Vea también
Referencia
Información general sobre formularios Windows Forms
My.Forms (Objeto)
My.Application (Objeto)
Conceptos
Información general de aplicaciones basadas en Windows
Clases utilizadas en los formularios de .NET Framework
Conceptos del lenguaje Visual Basic

Clases utilizadas en los formularios de .NET Framework


Las tablas siguientes enumeran las clases más frecuentemente usadas para las aplicaciones de Windows Forms de .NET
Framework, clasificadas en clases base, clases de control, clases de componentes y clases de cuadros de diálogo.
Para escribir la documentación de .NET Framework y consultar una lista más completa, vea el espacio de nombres
System.Windows.Forms.
Las clases base
La tabla siguiente muestra y describe las principales clases de formularios Windows Forms que contiene el espacio de
nombres System.Windows.Forms.
Clase Descripción
Control Define la clase base para los controles, que son los componentes que tienen una representación visual. Proporcio
na la funcionalidad básica para todos los controles que se muestran en un Form.

Form Representa una ventana normal, ventana no modal, cuadro de diálogo, cliente de la Interfaz de múltiples docume
ntos (MDI) o ventana primaria de MDI. Los formularios constituyen una interfaz de usuario de la aplicación.

UserControl Proporciona un control vacío que se puede utilizar para crear otros controles o crear un control personalizado co
mpuesto de otros controles.

Clases de control
La tabla siguiente enumera y describe un muestreo de las clases de control del espacio de nombres System.Windows.Forms.
Puede utilizar estos controles para crear las interfaces de usuario con formato enriquecido.
Clase Descripción
TextBox Control de entrada de datos Representa un control de cuadro de texto de Windows.

ComboBox Control de entrada de datos. Representa un control de cuadro combinado de Windows.

Label Control de presentación de datos. Representa una etiqueta estándar de Windows.

ListView Control de presentación de datos. Representa un control de vista de lista de Windows, que muestra una colecció
n de elementos que se pueden mostrar utilizando una de cuatro vistas diferentes.

Button Control de botón de comando. Representa un control de botón de Windows.

ToolStrip Control de botón de comando. Proporciona un contenedor para los objetos de barras de herramientas de Windo
ws.

PropertyGrid Control de diseñador. Proporciona una interfaz de usuario para examinar las propiedades de un objeto.

Clases de componentes
Además de los controles, el espacio de nombres System.Windows.Forms proporciona otras clases que no se derivan de la
clase Control pero ofrecen características visuales a las aplicaciones basadas en Windows. La tabla siguiente muestra algunas
de las clases de componente disponibles.
Clase Descripción
ToolTip Componente de presentación de datos. Representa una pequeña ventana emergente rectangular qu
e muestra una breve descripción de para qué sirve un control cuando el usuario coloca el puntero s
obre el control.
ErrorProvider Componente de presentación de datos. Proporciona una interfaz de usuario para indicar que un con
trol de un formulario tiene un error asociado al mismo.

ToolStripDropDownMenu Componente de menú. Proporciona funcionalidad básica para el control ContextMenuStrip.

ContextMenuStrip Componente de menú. Representa un menú contextual.

Help Componente de Ayuda. Encapsula el motor de HTML Help 1.0.

HelpProvider Componente de Ayuda. Proporciona Ayuda emergente o en pantalla relativa a los controles.

Clases de cuadro de diálogo


Windows proporciona una serie de cuadros de diálogo frecuentes que puede utilizar para dotar a su aplicación de una interfaz
de usuario coherente al realizar tareas como abrir y guardar archivos, manipular la fuente o el color del texto, o imprimir. La
tabla siguiente muestra algunas de las clases normalmente utilizadas para leer de archivos con secuencias y escribir en ellos.
Clase Descripción
OpenFileDialog Proporciona la funcionalidad necesaria para mostrar un cuadro de diálogo que permite al usuario desplazars
e hasta un archivo e introducir el nombre de un archivo para abrirlo o guardarlo.

SaveFileDialog Proporciona la funcionalidad necesaria para mostrar un cuadro de diálogo que permite al usuario desplazars
e hasta un archivo e introducir el nombre de un archivo para abrirlo o guardarlo.

FontDialog Muestra un cuadro de diálogo para cambiar elementos con la fuente utilizada por su aplicación

PageSetupDialog Muestra un cuadro de diálogo que permite al usuario controlar aspectos de la impresión de documentos.

PrintDialog Muestra un cuadro de diálogo que permite al usuario controlar aspectos de la impresión de documentos.

MessageBox Muestra un cuadro de mensaje que puede mostrar y recuperar datos del usuario.

Vea también
Referencia
Información general sobre formularios Windows Forms
System.Windows.Forms
System.Drawing.Printing
Conceptos
Conceptos de las aplicaciones de Windows Forms en Visual Basic
Fundamentos de las aplicaciones de Windows Forms
Información general de aplicaciones basadas en Windows
Conceptos del lenguaje Visual Basic

Agregar informes imprimibles a las aplicaciones de Visual


Studio
Visual Studio admite varias soluciones de creación de informes para ayudar al usuario a agregar informes de datos
enriquecidos a las aplicaciones de Visual Basic. Se pueden crear y agregar informes mediante los controles ReportViewer,
Crystal Reports o SQL Server Reporting Services.
Nota
SQL Server Reporting Services forma parte de SQL Server 2005 y no de Visual Studio 2005. La plataforma Reporting Service
s no está instalada en el sistema, a menos que tenga instalado SQL Server 2005.

En esta página se describen los controles ReportViewer y Reporting Services. Para obtener más información sobre Crystal
Reports, vea Información general sobre Crystal Reports.
Información general sobre la tecnología de elaboración de informes de Microsoft en las
aplicaciones de Visual Basic
Elija uno de los enfoques siguientes para utilizar una tecnología de elaboración de informes de Microsoft en su aplicación:
Agregar una o varias instancias de un control ReportViewer a una aplicación de Visual Basic para Windows.
Integrar SQL Server Reporting Services manualmente mediante llamadas al servicio Web del servidor de informes.
Usar el control ReportViewer y Microsoft SQL Server 2005 Reporting Services conjuntamente, utilizando el control como
un visor de informes y un servidor de informes como procesador de informes. (Observe que debe usar Reporting
Services de SQL Server 2005 si desea utilizar un servidor de informes y el control ReportViewer conjuntamente).

Utilizar los controles ReportViewer


La manera más fácil de incrustar la funcionalidad de elaboración de informes en una aplicación de Visual Basic para Windows
es agregar el control ReportViewer a un formulario en la aplicación. El control agrega las funciones de procesamiento de
informes directamente a la aplicación y proporciona un diseñador de informes integrado de modo que se pueden generar
informes con los datos de cualquier objeto de datos de ADO.NET. Una API completa proporciona acceso mediante
programación al control y a los informes de modo que se puede configurar la funcionalidad en tiempo de ejecución.
ReportViewer proporciona funcionalidad integrada de procesamiento y visualización de informes en un solo control de datos
de distribución gratuita. Elija los controles ReportViewer si requiere la siguiente funcionalidad:
Procesamiento de informes en la aplicación cliente. Un informe procesado aparece en un área de visualización
proporcionada por el control.
Enlace de datos a tablas de datos de ADO.NET. Se pueden crear informes que utilicen instancias de DataTable
proporcionadas al control. También se pueden enlazar datos directamente a los objetos comerciales.
Controles redistribuibles que se pueden incluir en la aplicación.
Funcionalidad en tiempo de ejecución como la exploración de páginas, impresión, búsquedas y formatos de exportación.
Una barra de herramientas ReportViewer permite llevar a cabo estas operaciones.
Para utilizar el control ReportViewer, puede arrastrarlo desde la sección Datos del Cuadro de herramientas de Visual Studio
hasta un formulario en la aplicación de Visual Basic para Windows. Para obtener más información sobre ReportViewer, vea
ReportViewer Controls (Visual Studio) y Samples and Walkthroughs.
Crear informes en Visual Studio para controles ReportViewer
Para crear un informe que se ejecute en ReportViewer, agregue una plantilla Informe al proyecto. Visual Studio crea un
archivo de definición de informe de cliente (.rdlc), agrega el archivo al proyecto y abre un diseñador de informes integrado en
el área de trabajo de Visual Studio.
El Diseñador de informes de Visual Studio se integra con la ventana Orígenes de datos. Cuando se arrastra un campo desde
la ventana Orígenes de datos al informe, el Diseñador de informes copia metadatos sobre el origen de datos en el archivo de
definición del informe. El control ReportViewer utiliza estos metadatos para generar automáticamente el código de enlace de
datos.
El Diseñador de informes de Visual Studio no incluye la funcionalidad de vista previa de los informes. Para ofrecer una vista
previa del informe, ejecute la aplicación y genere una vista previa del informe incrustado en ella.
Para agregar la funcionalidad básica de elaboración de informes a la aplicación
1. Arrastre un control ReportViewer desde la ficha Datos del Cuadro de herramientas hasta el formulario.
2. En el menú Proyecto, elija Agregar nuevo elemento. En el cuadro de diálogo Agregar nuevo elemento, seleccione el
icono Informe y, a continuación, haga clic en Agregar.
El Diseñador de informes se abre en el entorno de desarrollo y se agrega un archivo de informe (.rdlc) al proyecto.
3. Arrastre los elementos de informe desde el Cuadro de herramientas hasta el diseño de informe y organícelos según su
criterio.
4. Arrastre los campos desde la ventana Orígenes de datos hasta los elementos de informe en el diseño de informe.
Siguientes pasos para trabajar con ReportViewer y el Diseñador de informes
Para Vea
Agregar y configurar un control ReportViewer Adding and Configuring the ReportViewer Controls

Crear y obtener una vista previa de un informe local Creating Client Report Definition (.rdlc) Files

Agregar orígenes de datos para los informes de ReportViewer Creating Data Sources for a ReportViewer Report

Definir el diseño de un informe Defining a Report Layout

Utilizar las expresiones de Visual Basic en informes de ReportViewer Using Expressions in a ReportViewer Report

Colocar código personalizado en un informe Adding Custom Code to a ReportViewer Report

Distribuir informes y controles ReportViewer como parte de la aplicación Deploying Reports and ReportViewer Controls

Imprimir un informe Printing Reports from ReportViewer

Si desea obtener más instrucciones paso a paso sobre cómo crear informes y configurar controles para varios escenarios, vea
Samples and Walkthroughs.
Utilizar Reporting Services en las aplicaciones de Visual Basic
Reporting Services es una tecnología de elaboración de informes basada en servidor que viene incluida con SQL Server.
Reporting Services incluye características adicionales que no ofrecen los controles ReportViewer. Elija Reporting Services si
requiere alguna de las características siguientes:
Implementación de ampliación en horizontal y procesamiento de informes en el servidor que mejoran el rendimiento de
los informes complejos o de ejecución prolongada y de una actividad de elaboración de informes de gran volumen.
Procesamiento de informes y datos integrados, con compatibilidad para controles de informe personalizados y formatos
enriquecidos para la representación de los resultados.
Procesamiento programado de los informes, de modo que se puede especificar exactamente cuándo se ejecutan los
informes.
Distribución de informes basada en suscriptores a través del correo electrónico o a ubicaciones de recursos compartidos
de archivos.
Creación de informes ad hoc para que los usuarios empresariales puedan crear informes de acuerdo con sus
necesidades.
Suscripciones controladas por datos que dirigen los resultados de informes personalizados a una lista dinámica de
destinatarios.
Extensiones personalizadas para el procesamiento de datos, la entrega de informes, la autenticación personalizada y la
representación de informes.
El servidor de informes se implementa como un servicio Web. El código de la aplicación debe incluir llamadas al servicio Web
para obtener acceso a los informes y otros metadatos. El servicio Web proporciona total acceso mediante programación a una
instancia del servidor de informes.
Dado que Reporting Services es una tecnología de elaboración de informes basada en Web, el visor predeterminado muestra
los informes en formato HTML. Si no desea utilizar HTML como formato de presentación predeterminado, deberá escribir un
visor personalizado para la aplicación.
Para obtener más información sobre Reporting Services, vea SQL Server Reporting Services en Libros en pantalla de SQL
Server 2005 y Tutoriales de Reporting Services.
Crear informes en Visual Studio para Reporting Services
Para crear informes que se van a ejecutar en un servidor de informes, se crean archivos de definición de informe (.rdl) en
Visual Studio a través de Business Intelligence Development Studio, incluido con SQL Server 2005.
Nota
Debe tener instalado SQL Server 2005 para poder utilizar SQL Server Reporting Services y Business Intelligence Developme
nt Studio.

Business Intelligence Development Studio agrega plantillas de proyecto específicas para los componentes de SQL Server. Para
crear informes, puede elegir entre las plantillas Proyecto de servidor de informes o Asistente para proyectos de servidor
de informes. Puede especificar conexiones a orígenes de datos y consultas en varios tipos de orígenes de datos, incluidos SQL
Server, Oracle, Analysis Services, XML y SQL Server Integration Services. Las fichas Datos, Diseño y Vista previa permiten
definir los datos, crear un diseño de informe y obtener la vista previa del informe en el mismo área de trabajo.
Las definiciones de informe creadas para el control o el servidor de informes pueden volver a utilizarse en ambas tecnologías.
Para obtener más información, vea Converting RDL and RDLC Files.
Para crear un informe que se ejecute en un servidor de informes
1. En el menú Archivo, elija Nuevo.
Aparece el cuadro de diálogo Nuevo proyecto.
2. En el panel Tipos de proyecto, haga clic en Proyectos de Business Intelligence.
3. En el panel Plantillas, seleccione Proyecto de servidor de informes o Asistente para proyectos de servidor de
informes.

Utilizar los controles ReportViewer y SQL Server Reporting Services conjuntamente


Los controles ReportViewer y SQL Server 2005 Reporting Services pueden utilizarse conjuntamente en la misma aplicación.
El control ReportViewer proporciona un visor que se utiliza para mostrar los informes en la aplicación.
Reporting Services proporciona los informes y realiza todo el procesamiento en un servidor remoto.
El control ReportViewer puede configurarse de modo que se muestren los informes almacenados y procesados en un servidor
de informes remoto de Reporting Services. Este tipo de configuración se denomina modo de procesamiento remoto. En este
modo, el control solicita un informe que está almacenado en un servidor de informes remoto. El servidor de informes procesa
los informes, procesa los datos y representa los informes. Se devuelve un informe terminado y representado al control y se
muestra dicho informe en el área de visualización.
Los informes que se ejecutan en un servidor de informes admiten otros formatos de exportación, tienen otra implementación
de la parametrización de los informes, utilizan los tipos de orígenes de datos que el servidor de informes admite y su acceso se
realiza a través del modelo de autorización basado en funciones en el servidor de informes.
Para utilizar el modo de procesamiento remoto, especifique la dirección URL y la ruta de acceso a un informe del servidor
cuando configure el control ReportViewer. Para obtener más información sobre la configuración de los controles y cuál es la
relación entre los informes de servidor y los informes de cliente, vea Configuring ReportViewer for Remote Processing.
Vea también
Referencia
Microsoft.Reporting.WebForms
Microsoft.Reporting.WinForms
Otros recursos
ReportViewer Web Server and Windows Forms Controls
Creating Client Report Definition (.rdlc) Files
Introducing Reporting Services Programming
Información general sobre la creación, administración y entrega de informes
Trabajar con datos en un diseño de informe
Trabajar con datos en Reporting Services
Conceptos del lenguaje Visual Basic

Personalizar proyectos y ampliar My con Visual Basic


Las plantillas de proyecto se pueden personalizar para que proporcionen objetos My adicionales. Así facilita la búsqueda y uso
de sus objetos por parte de otros desarrolladores.
Normalmente, estos tipos de personalizaciones son idóneos para los complementos.
En esta sección
Ampliar el modelo de la aplicación de Visual Basic
Describe cómo especificar sus propias extensiones al modelo de la aplicación reemplazando miembros de la clase
WindowsFormsApplicationBase.
Personalizar los objetos que están disponibles en My
Describe cómo controlar qué objetos My están habilitados estableciendo la constante de compilación condicional _MYTYPE
de su proyecto.
Secciones relacionadas
Desarrollo con la función My
Describe qué objetos My están disponibles de manera predeterminada en distintos tipos de proyecto.
Información general sobre el modelo de aplicaciones de Visual Basic
Explica el modelo de Visual Basic para controlar el comportamiento de aplicaciones de Windows Forms.
Cómo My depende del tipo de proyecto
Describe qué objetos My están disponibles de manera predeterminada en distintos tipos de proyecto.
Información general sobre la compilación condicional
Explica cómo utiliza el compilador la compilación condicional para seleccionar secciones concretas del código que se va a
compilar y, a la vez, excluir otras.
My.Application (Objeto)
Describe el objeto My que proporciona propiedades, métodos y eventos relacionados con la aplicación actual.
Vea también
Otros recursos
Continuar con Visual Basic
Conceptos del lenguaje Visual Basic

Ampliar el modelo de la aplicación de Visual Basic


Puede agregar funcionalidad al modelo de la aplicación reemplazando los miembros Overridable de la clase
WindowsFormsApplicationBase. Esta técnica le permite personalizar el comportamiento del modelo de la aplicación y agregar
llamadas a sus propios métodos mientras se inicia y se cierra la aplicación.
Información general visual del modelo de la aplicación
Esta sección presenta visualmente la secuencia de llamadas a funciones en el Modelo de aplicaciones de Visual Basic. La
sección siguiente describe en detalle el propósito de cada función.
El gráfico siguiente muestra la secuencia de llamadas al modelo de aplicaciones en una aplicación normal de formularios
Windows Forms de Visual Basic. La secuencia se inicia cuando el procedimiento Sub Main llama al método Run.

El Modelo de aplicaciones de Visual Basic también proporciona los eventos StartupNextInstance y UnhandledException. Los
gráficos siguientes muestran el mecanismo para provocar estos eventos.

Reemplazar los métodos base


El método My.Application.Run (Método) define el orden en que se ejecutan los métodos de la Application. De manera
predeterminada, el procedimiento Sub Main de una aplicación de Windows Forms llama al método Run.
Si la aplicación es normal (una aplicación con varias instancias) o es la primera instancia de una aplicación de instancia única, el
método Run ejecuta los métodos Overridable en el orden siguiente:
1. OnInitialize. De forma predeterminada, este método establece los estilos visuales y de presentación de texto, y el
principal actual del subproceso principal de la aplicación (si ésta utiliza autenticación de Windows), y llama a
ShowSplashScreen si no se utilizan los modificadores /nosplash o -nosplash como argumento de la línea de
comandos.
La secuencia de inicio de la aplicación se cancela si esta función devuelve False. Esto puede ser útil si hay circunstancias
en las que la aplicación no se debe ejecutar.
El método OnInitialize llama a los métodos siguientes:
a. ShowSplashScreen. Determina si la aplicación tiene una pantalla de inicio definida y, en tal caso, muestra la pantalla
de inicio en un subproceso independiente.
El método ShowSplashScreen contiene el código que muestra la pantalla de inicio para, al menos, el número de
milisegundos especificado por la propiedad MinimumSplashScreenDisplayTime. Para utilizar esta funcionalidad,
hay que agregar la pantalla de inicio a la aplicación mediante el Diseñador de proyectos (que establece la
propiedad My.Application.MinimumSplashScreenDisplayTime en dos segundos) o establecer la propiedad
My.Application.MinimumSplashScreenDisplayTime en un método que reemplace al método OnInitialize u
OnCreateSplashScreen. Para obtener más información, vea
My.Application.MinimumSplashScreenDisplayTime (Propiedad).
b. OnCreateSplashScreen. Permite a un diseñador emitir código que inicializa la pantalla de inicio.
De manera predeterminada, este método no hace nada. Si selecciona una pantalla de inicio para la aplicación en el
Diseñador de proyectos de Visual Basic, el diseñador reemplaza el método OnCreateSplashScreen por un
método que establece la propiedad SplashScreen en una nueva instancia del formulario de la pantalla de inicio.
2. OnStartup. Proporciona un punto de extensibilidad para provocar el evento Startup. La secuencia de inicio de la
aplicación se detiene si esta función devuelve False.
De manera predeterminada, este método provoca el evento Startup. Si el controlador de eventos establece la propiedad
Cancel del argumento de evento en True, el método devuelve False para cancelar el inicio de la aplicación.
3. OnRun. Proporciona el punto inicial en el que la aplicación principal está lista para iniciar la ejecución, una vez realizada
la inicialización.
De forma predeterminada, antes de entrar en el bucle del mensaje de formularios Windows Forms, este método llama a
los métodos OnCreateMainForm (para crear el formulario principal de la aplicación) y HideSplashScreen (para cerrar
la pantalla de inicio):
a. OnCreateMainForm. Proporciona a un diseñador una manera de emitir código que inicializa el formulario principal.
De forma predeterminada, este método no hace nada. Sin embargo, cuando se selecciona una pantalla de inicio
para la aplicación en el Diseñador de proyectos de Visual Basic, el diseñador reemplaza el método
OnCreateMainForm por un método que establece la propiedad MainForm en una nueva instancia del formulario
principal.
b. HideSplashScreen. Si la aplicación tiene una pantalla de inicio definida y está abierta, este método cierra la pantalla
de inicio.
De manera predeterminada, este método cierra la pantalla de inicio.
4. OnStartupNextInstance. Proporciona una manera de personalizar el comportamiento de una aplicación de instancia
única cuando se inicia otra instancia de la aplicación.
De manera predeterminada, este método provoca el evento StartupNextInstance.
5. OnShutdown. Proporciona un punto de extensibilidad para provocar el evento Shutdown. Este método no se ejecuta si
se produce una excepción no controlada en la aplicación principal.
De manera predeterminada, este método provoca el evento Shutdown.
6. OnUnhandledException. Se ejecuta si se produce una excepción no controlada en cualquiera de los métodos enumerados
anteriormente.
De manera predeterminada, este método provoca el evento UnhandledException si no hay un depurador conectado y la
aplicación está controlando el evento UnhandledException.
Si la aplicación es de instancia única y ya está en ejecución, la siguiente instancia de la aplicación llama al método
OnStartupNextInstance en la instancia original de la aplicación y, después, finaliza.
El constructor WindowsFormsApplicationBase llama a la propiedad UseCompatibleTextRendering para determinar qué
motor de representación de texto se debe utilizar para los formularios de la aplicación. De forma predeterminada, la propiedad
UseCompatibleTextRendering devuelve False, indicando que se utilice motor de representación de texto GDI, que es el
valor predeterminado en Visual Basic 2005. Puede reemplazar la propiedad UseCompatibleTextRendering para que
devuelva True, lo que indica que se debe usar el motor de representación de texto GDI+, que es la configuración
predeterminada en Visual Basic .NET 2002 y Visual Basic .NET 2003.
Configurar la aplicación
Como una parte del modelo de aplicación de Visual Basic, la clase WindowsFormsApplicationBase suministra propiedades
protegidas que configuran la aplicación. Estas propiedades se deben establecer en el constructor de la clase que las
implementa.
En un proyecto predeterminado de formularios Windows Forms, el Diseñador de proyectos crea el código para establecer
las propiedades con la configuración del diseñador. Las propiedades sólo se utilizan cuando la aplicación está iniciándose;
establecerlas después de que se inicia la aplicación no tiene ningún efecto.
Propiedad Determina Establecer con el Diseñador de proyectos
IsSingleInstance Si la aplicación se ejecuta co Cómo: Especificar el comportamiento de las instancias para una aplicación
mo una instancia única o un
a aplicación de varias instan
cias.

EnableVisualStyles Si la aplicación utilizará los e Cómo: Habilitar estilos visuales


stilos visuales de XP.

SaveMySettingsOnExit Si la aplicación guarda auto Active la casilla de verificación Guardar My.Settings al cerrar en el panel
máticamente los cambios en Aplicación del Diseñador de proyectos.
la configuración del usuario
de la aplicación cuando final
iza.

ShutdownStyle Lo que hace que la aplicació Cómo: Especificar el comportamiento del cierre para una aplicación
n finalice, por ejemplo cuan
do se cierra el formulario pri
ncipal o cuando se cierran to
dos los formularios.

Vea también
Referencia
My.Application (Objeto)
My.Application.Startup (Evento)
My.Application.StartupNextInstance (Evento)
My.Application.UnhandledException (Evento)
My.Application.Shutdown (Evento)
My.Application.NetworkAvailabilityChanged (Evento)
WindowsFormsApplicationBase
Conceptos
Información general sobre el modelo de aplicaciones de Visual Basic
Conceptos del lenguaje Visual Basic

Personalizar los objetos que están disponibles en My


Este tema describe cómo se puede controlar qué objetos My están habilitados estableciendo la constante de compilación
condicional _MYTYPE de su proyecto. El Entorno de desarrollo integrado (IDE) de Visual Studio mantiene la constante de
compilación condicional _MYTYPE para un proyecto en sincronización con el tipo del proyecto.
Valores predefinidos de _MYTYPE
Debe utilizar la opción /define del compilador para establecer la constante de compilación condicional _MYTYPE. Al
especificar su propio valor para la constante _MYTYPE, debe incluir el valor de cadena en secuencias de barra diagonal
inversa/comillas (\"). Por ejemplo, podría utilizar:

/define:_MYTYPE=\"WindowsForms\"

Esta tabla muestra en qué está establecida la constante de compilación condicional _MYTYPE para varios tipos de proyecto.
Tipo de proyecto Valor de _MYTYPE
Biblioteca de clases "Windows"

Aplicación de consola "Console"

Web "Web"

Biblioteca de controles Web "WebControl"

Aplicación para Windows "WindowsForms"

Aplicación para Windows, al iniciarse con un procedimiento Sub Main personalizado "WindowsFormsWithCustomSubMain"

Biblioteca de controles de Windows "Windows"

Servicio de Windows "Console"

Vacío "Empty"
Nota
Todas las comparaciones de cadenas de compilación condicional distinguen entre mayúsculas y minúsculas, sin tener en cue
nta en qué está establecida la instrucción Option Compare.

Constantes dependientes de compilación de _MY


La constante de compilación condicional _MYTYPE, a su vez, controla los valores de varias otras constantes de compilación
_MY:
_MYTYPE _MYAPPLICATIONTY _MYCOMPUTERTY _MYFORM _MYUSERTYP _MYWEBSERVIC
PE PE S E ES
"Console" "Console" "Windows" No definid "Windows" TRUE
o

"Custom" No definido No definido No definid No definido No definido


o

"Empty" No definido No definido No definid No definido No definido


o
"Web" No definido "Web" FALSE "Web" FALSE

"WebControl" No definido "Web" FALSE "Web" TRUE

"Windows" o "" "Windows" "Windows" No definid "Windows" TRUE


o

"WindowsForms" "WindowsForms" "Windows" TRUE "Windows" TRUE

"WindowsFormsWithCustomSubM "Console" "Windows" TRUE "Windows" TRUE


ain"

De manera predeterminada, las constantes de compilación condicional indefinidas se resuelven como FALSE. Puede especificar
los valores para las constantes indefinidas al compilar su proyecto para que reemplacen el comportamiento predeterminado.
Nota
Cuando _MYTYPE está establecida en "Custom", el proyecto contiene el espacio de nombres My, pero no contiene ningún o
bjeto. Sin embargo, estableciendo _MYTYPE en "Empty" se evita que el compilador agregue el espacio de nombres My y sus
objetos.

Esta tabla describe los efectos de los valores predefinidos de las constantes de compilación _MY.
Constante Significado
_MYAPPLIC Habilita My.Application, si la constante es "Console", Windows" o "WindowsForms":
ATIONTYPE
La versión de "Console" deriva de ConsoleApplicationBase y tiene menos miembros que la versión de "Wi
ndows".
La versión de "Windows" deriva de ApplicationBase y tiene menos miembros que la versión de "Windows
Forms".
La versión de "WindowsForms" de My.Application deriva de WindowsFormsApplicationBase. Si la const
ante TARGET está definida para que sea "winexe", la clase incluye un método Sub Main.

_MYCOMPU Habilita My.Computer si la constante es "Web" o "Windows":


TERTYPE
La versión de "Web" deriva de ServerComputer y tiene menos miembros que la versión de "Windows".
La versión de "Windows" de My.Computer deriva de Computer.

_MYFORMS Habilita My.Forms si la constante es TRUE.

_MYUSERTY Habilita My.User si la constante es "Web" o "Windows":


PE
La versión de "Web" de My.User se asocia a la identidad del usuario de la solicitud HTTP actual.
La versión de "Windows" de My.User se asocia al principal actual del subproceso.

_MYWEBSER Habilita My.WebServices si la constante es TRUE.


VICES

_MYTYPE Habilita My.Log, My.Request y My.Response, si la constante es "Web".

Vea también
Referencia
/define (Visual Basic)
My.Application (Objeto)
My.Computer (Objeto)
My.Forms (Objeto)
My.Log (Objeto)
My.Request (Objeto)
My.Response (Objeto)
My.User (Objeto)
My.WebServices (Objeto)
Conceptos
Cómo My depende del tipo de proyecto
Información general sobre la compilación condicional
Conceptos del lenguaje Visual Basic

Guía de programación en Visual Basic


Al igual que con cualquier lenguaje de programación moderno, Visual Basic admite un gran número de constructores comunes
de programación y elementos de lenguaje. Esta guía trata todos los elementos básicos de la programación con Visual Basic.
En esta sección
Convenciones de código y estructura de programas
Contiene documentación sobre la estructura básica y las convenciones de código de Visual Basic, como las convenciones de
nomenclatura, los comentarios del código y las limitaciones de Visual Basic.
Características del lenguaje Visual Basic
Presenta y explica los componentes básicos de Visual Basic.
Programación orientada a objetos en Visual Basic
Abarca la programación orientada a objetos, incluidos las clases e interfaces, la creación de objetos, los eventos y delegados,
la herencia y los grupos de objetos.
Interoperabilidad COM
Explica los problemas de interoperabilidad asociados a la creación y uso de los objetos del Modelo de objetos componentes
(COM) con Visual Basic.
Subprocesamiento múltiple en Visual Basic
Muestra cómo escribir código que lleve a cabo varias tareas simultáneamente, para mejorar el rendimiento y la capacidad de
respuesta de las aplicaciones.
Secciones relacionadas
Referencia de Visual Basic
Proporciona información de referencia sobre los distintos aspectos de la programación de Visual Basic.
Compilador de Visual Basic
Proporciona información sobre el uso del compilador de la línea de comandos de Visual Basic, las opciones del compilador y
la herramienta de actualización de palabras clave.
Conceptos del lenguaje Visual Basic

Convenciones de código y estructura de programas


En esta sección se introduce la estructura de programas de Visual Basic típica, se proporciona un programa de Visual Basic
sencillo ("Hello, World") y se describen las convenciones de código de Visual Basic. Las convenciones de código son
sugerencias que no se centran en la lógica de un programa, sino en la apariencia y la estructura física. Si se cumplen, se facilita
la lectura, la comprensión y el mantenimiento del código. Las convenciones de código pueden incluir, entre otras cosas:
Formatos estandarizados para etiquetar y comentar código.
Instrucciones para agregar espacios, dar formato y aplicar sangría al código.
Convenciones de nomenclatura para objetos, variables y procedimientos.
Los temas siguientes presentan un conjunto de directrices de programación para los programas de Visual Basic, junto con
ejemplos de uso correcto.
En esta sección
Estructura de un programa de Visual Basic
Proporciona información general sobre los elementos que forman un programa de Visual Basic.
Versión de Visual Basic del programa Hola a todos
Recrea paso a paso el clásico programa "Hello World·", que se ha vuelto a hacer con Visual Basic.
Procedimiento Main en Visual Basic
Describe el procedimiento que sirve como punto inicial y control general de la aplicación.
Convenciones de nomenclatura de Visual Basic
Proporciona instrucciones generales acerca de la nomenclatura de procedimientos, constantes, variables, argumentos y
objetos.
Convenciones de código de Visual Basic
Revisa las directrices utilizadas para desarrollar los ejemplos de esta documentación.
Compilación condicional (Visual Basic)
Proporciona vínculos a temas sobre la compilación selectiva de bloques concretos de código a la vez que se indica al
compilador que pase por alto otros.
Cómo: Interrumpir y combinar instrucciones en código
Muestra cómo dividir instrucciones largas en diversas líneas y cómo combinar instrucciones cortas en una sola línea.
Cómo: Aplicar etiquetas a las instrucciones
Muestra cómo marcar una línea de código a fin de identificarla para su utilización en instrucciones del tipo On Error Goto.
Caracteres especiales en código
Explica cómo y dónde utilizar caracteres no numéricos y no alfabéticos.
Comentarios en código
Explica cómo agregar comentarios descriptivos al código.
Limitaciones de Visual Basic
Explica la eliminación de limitaciones de código conocidas en Visual Basic.
Secciones relacionadas
Convenciones tipográficas y de código
Proporciona convenciones de codificación estándar para Visual Basic.
Modificar texto, código y marcado
Proporciona información general sobre el Editor de código de Visual Studio.
Conceptos del lenguaje Visual Basic

Estructura de un programa de Visual Basic


Un programa de Visual Basic se crean a partir de unidades de creación estándar. Una solución consta de uno o varios
proyectos. Un proyecto a su vez puede contener uno o más ensamblados. Cada ensamblado se compila a partir de uno o
varios archivos de código fuente. El archivo de código fuente proporciona la definición e implementación de clases,
estructuras, módulos e interfaces, que en última instancia contienen todo el código.
Elementos de programación en el nivel de archivo
Al iniciar un proyecto o archivo y abrir el editor de código, verá que ya hay código en el lugar que le corresponde y en el orden
correcto. Cualquier código que escriba debe seguir la siguiente secuencia:
1. Instrucciones Option
2. Instrucciones Imports
3. Instrucciones Namespace y elementos del nivel de espacio de nombres
Si escribe instrucciones en un orden distinto, pueden producirse errores de compilación.
Un programa también puede contener instrucciones de compilación condicional. Pueden incluirse en el archivo de código
fuente entre las instrucciones de la secuencia anterior.
Instrucciones Option
Las instrucciones Option establecen reglas de base para el código subsiguiente, y de esta forma ayudan a prevenir errores de
sintaxis y de lógica. Instrucción Option Explicit (Visual Basic) garantiza que se declaran todas las variables y que se escriben
correctamente, lo que reduce el tiempo de depuración. La instrucción Option Strict (Instrucción) ayuda a reducir errores de
lógica y pérdidas de datos que puedan producirse al trabajar entre variables de diferentes tipos de datos.
Option Compare (Instrucción) especifica la manera en que se comparan las cadenas entre sí, según sus valores Binary o Text.
Instrucciones Imports
Puede incluir Imports (Instrucción) para importar nombres definidos fuera del proyecto. Las instrucciones Imports permiten
que el código haga referencia a clases y otros tipos definidos en el espacio de nombres importado sin tener que calificarlos.
Puede utilizar tantas instrucciones Imports como sea necesario. Para obtener más información, vea
Referencias y la instrucción Imports.
Instrucciones Namespace
Los espacios de nombres ayudan a organizar y clasificar los elementos de programación para facilitar la agrupación y el
acceso. Utiliza Namespace (Instrucción) para clasificar las instrucciones siguientes dentro de un espacio de nombres
determinado. Para obtener más información, vea Espacios de nombres en Visual Basic.
Instrucciones de compilación condicional
Las instrucciones de compilación condicional pueden aparecer prácticamente en cualquier parte del archivo de código fuente.
Determinan que partes del código se incluyan o excluyan en tiempo de compilación en función de ciertas condiciones. También
puede utilizarlas para depurar la aplicación, ya que el código condicional se ejecuta únicamente en modo de depuración. Para
obtener más información, vea Información general sobre la compilación condicional.
Elementos de programación en el nivel de espacio de nombres
Las clases, estructuras y módulos contienen todo el código del archivo de código fuente. Son elementos del nivel de espacio de
nombres, que pueden aparecer dentro de un espacio de nombres o en el nivel del archivo de código fuente. Contienen las
declaraciones de todos los demás elementos de programación. Las interfaces, que definen firmas de elemento pero no
proporcionan ninguna implementación, también aparecen en el nivel de módulo. Para obtener más información sobre los
elementos del nivel de módulo, vea los siguientes temas:
Instrucción Class (Visual Basic)
Structure (Instrucción)
Module (Instrucción)
Instrucción Interface (Visual Basic)
Los elementos de datos en el nivel de espacio de nombres son las enumeraciones y los delegados.
Elementos de programación en el nivel de módulo
Los procedimientos, operadores, propiedades y eventos son los únicos elementos de programación que pueden contener
código ejecutable (instrucciones que realizan acciones en tiempo de ejecución). Son elementos del nivel de módulo del
programa. Para obtener más información sobre los elementos del nivel de procedimiento, vea los siguientes temas:
Instrucción Function (Visual Basic)
Instrucción Sub (Visual Basic)
Declare (Instrucción)
Operator (Instrucción)
Property (Instrucción)
Event (Instrucción)
Los elementos de datos en el nivel de módulo son las variables, las constantes, las enumeraciones y los delegados.
Elementos de programación en el nivel de procedimiento
La mayoría del contenido de los elementos del nivel de procedimiento son instrucciones ejecutables, que constituyen el código
en tiempo de ejecución del programa. Todo el código ejecutable debe estar incluido en algún procedimiento (Function, Sub,
Operator, Get, Set, AddHandler, RemoveHandler, RaiseEvent). Para obtener más información, vea
Instrucciones ejecutables.
Los elementos de datos en el nivel de procedimiento se limitan a las constantes y las variables locales.
Procedimiento Main
El procedimiento Main es el primer código que se ejecuta cuando se carga la aplicación. Main actúa como punto de inicio y
control global de la aplicación. Hay cuatro variedades de Main:
Sub Main()

Sub Main(ByVal cmdArgs() As String)

Function Main() As Integer

Function Main(ByVal cmdArgs() As String) As Integer

La variedad más común de este procedimiento es Sub Main(). Para obtener más información, vea
Procedimiento Main en Visual Basic.
Vea también
Conceptos
Versión de Visual Basic del programa Hola a todos
Procedimiento Main en Visual Basic
Convenciones de nomenclatura de Visual Basic
Limitaciones de Visual Basic
Conceptos del lenguaje Visual Basic

Versión de Visual Basic del programa Hola a todos


El siguiente programa de consola es la versión de Visual Basic del tradicional programa "Hola a todos", que muestra en
pantalla la cadena "Hola a todos".
VB
' A "Hello, World!" program in Visual Basic.
Module Hello
Sub Main()
MsgBox("Hello, World!") ' Display message on computer screen.
End Sub
End Module

A continuación se indican algunos puntos importantes de este programa:


Comentarios
El procedimiento Main
Entrada y salida
Compilación y ejecución
Comentarios
La primera línea del ejemplo contiene un comentario:
VB
' A "Hello, World!" program in Visual Basic.

La comilla sencilla (') indica que el resto de la línea es un comentario y el compilador lo pasará por alto. Es posible tanto hacer
un comentario en toda una línea como anexar un comentario al final de otra instrucción, como se muestra a continuación:
VB
MsgBox("Hello, World!") ' Display message on computer screen.

Procedimiento Main
Todas las aplicaciones de Visual Basic deben contener un procedimiento denominado Main. Este procedimiento sirve como
punto de partida y control general de la aplicación. Se llama cuando se carga el módulo.
Hay cuatro variedades de Main:
Sub Main()

Sub Main(ByVal cmdArgs() As String)

Function Main() As Integer

Function Main(ByVal cmdArgs() As String) As Integer

La variedad más común de este procedimiento es Sub Main(). A menos que vaya a crear una aplicación de Windows Forms,
debe escribir el procedimiento Main para las aplicaciones que se ejecutan por sí solas. Para obtener más información, vea
Procedimiento Main en Visual Basic.
Entrada y salida
Este ejemplo utiliza la biblioteca estándar en tiempo de ejecución de Visual Basic, a la que se puede obtener acceso a través del
espacio de nombres de Microsoft.VisualBasic. Si compila el programa en el entorno de desarrollo integrado (IDE), puede
utilizar todos los procedimientos y las propiedades de Microsoft.VisualBasic sin importarlo. Si compila desde la línea de
comandos, debe utilizar Imports (Instrucción) en el código fuente o la opción de línea de comandos /imports (Visual Basic) del
compilador para que los miembros de Microsoft.VisualBasic estén disponibles en el programa.
El procedimiento Main llama a MsgBox (Función, Visual Basic) para mostrar un cuadro de mensaje que contiene la cadena
"Hola a todos":
VB
MsgBox("Hello, World!") ' Display message on computer screen.

Compilación y ejecución
El programa "Hola a todos!" se puede compilar en el entorno de desarrollo integrado (IDE) de Visual Studio o bien mediante la
línea de comandos.
Para compilar y ejecutar el programa desde la línea de comandos
1. Cree el archivo de código fuente con un editor de texto y guárdelo con un nombre de archivo como Hello.vb.
2. Para invocar el compilador, ejecute el comando siguiente:
vbc Hello.vb

Si el archivo de código fuente no incluye una instrucción Imports para el espacio de nombres Microsoft.VisualBasic,
puede incluir la opción de línea de comandos /imports del compilador en el comando vbc:
vbc Hello.vb /imports:Microsoft.VisualBasic

3. Si el programa no contiene errores de compilación, el compilador crea un archivo Hello.exe.


4. Para ejecutar el programa, escriba el comando siguiente:
Hello

Puede incluir opcionalmente la opción del compilador de línea de comandos /main en el comando vbc, para especificar el
espacio de nombres y el módulo que proporcionan Main.
Para compilar y ejecutar el programa en el entorno IDE
1. Cree un proyecto de aplicación de consola de Visual Basic.
2. Copie el código en el proyecto.
3. En el menú Generar, seleccione el comando Generar correspondiente o presione F5 para generar y ejecutar (que
corresponde a Iniciar en el menú Depurar).
Para obtener más información sobre el compilador de Visual Basic y sus opciones, vea
Generar desde la línea de comandos (Visual Basic).
Vea también
Referencia
Estructura de un programa de Visual Basic
Imports (Instrucción)
/imports (Visual Basic)
MsgBox (Función, Visual Basic)
/main
Microsoft.VisualBasic
Conceptos
Procedimiento Main en Visual Basic
Otros recursos
Generar desde la línea de comandos (Visual Basic)
Conceptos del lenguaje Visual Basic

Procedimiento Main en Visual Basic


Todas las aplicaciones de Visual Basic deben contener un procedimiento denominado Main. Este procedimiento sirve como
punto de partida y control general de la aplicación. .NET Framework llama al procedimiento Main cuando ha cargado la
aplicación y está listo para pasarle el control. A menos que vaya a crear una aplicación de Windows Forms, debe escribir el
procedimiento Main para las aplicaciones que se ejecutan por sí solas.
Main contiene el código que se ejecuta primero. En Main, se puede especificar qué formulario se cargará primero al iniciar el
programa, se puede saber si se está ejecutando una copia de la aplicación en el sistema, establecer un conjunto de variables
para la aplicación o abrir una base de datos que la aplicación requiera.
Requisitos para el procedimiento Main
Un archivo que se ejecuta por sí solo (normalmente con la extensión .exe) debe contener un procedimiento Main. Una
biblioteca (por ejemplo con la extensión .dll) no se ejecuta por sí sola y no requiere un procedimiento Main. Los requisitos para
los diferentes tipos de proyectos que se pueden crear son los siguientes:
Aplicaciones de consola que se ejecutan por sí solas; se debe proporcionar al menos un procedimiento Main. .
Aplicaciones de formularios Windows Forms que se ejecutan por sí solas. Sin embargo, el compilador de Visual Basic
genera automáticamente un procedimiento Main en este tipo de aplicación y no es necesario escribir uno.
Las bibliotecas de clases no requieren un procedimiento Main. Entre ellas se incluyen las bibliotecas de controles de
Windows y las bibliotecas de controles Web. Las aplicaciones Web se implementan como bibliotecas de clases.
Declarar el procedimiento Main
Hay cuatro formas de declarar el procedimiento Main. Puede tomar o no argumentos y puede devolver o no un valor.
Nota
Si se declara Main en una clase, hay que utilizar la palabra clave Shared. En un módulo, Main no necesita ser Shared.

La manera más simple es declarar un procedimiento Sub que no toma los argumentos ni devuelve un valor.

Module mainModule
Sub Main()
MsgBox("The Main procedure is starting the application.")
' Insert call to appropriate starting place in your code.
MsgBox("The application is terminating.")
End Sub
End Module

Main también puede devolver un valor Integer, que el sistema operativo utiliza como código de salida del programa.
Otros programas pueden comprobar este código examinando el valor de ERRORLEVEL de Windows. Para devolver un
código de salida, se debe declarar Main como un procedimiento Function, no como un procedimiento Sub.

Module mainModule
Function Main() As Integer
MsgBox("The Main procedure is starting the application.")
Dim returnValue As Integer = 0
' Insert call to appropriate starting place in your code.
' On return, assign appropriate value to returnValue.
' 0 usually means successful completion.
MsgBox("The application is terminating with error level " _
& CStr(returnValue) & ".")
Return returnValue
End Function
End Module
Main también puede tomar como argumento una matriz de tipo String. Cada cadena de la matriz contiene uno de los
argumentos de línea de comandos que se utiliza para invocar el programa. Puede tomar acciones distintas en función de
sus valores.

Module mainModule
Function Main(ByVal cmdArgs() As String) As Integer
MsgBox("The Main procedure is starting the application.")
Dim returnValue As Integer = 0
' See if there are any arguments.
If cmdArgs.Length > 0 Then
For argNum As Integer = 0 To UBound(cmdArgs, 1)
' Insert code to examine cmdArgs(argNum) and take
' appropriate action based on its value.
Next argNum
End If
' Insert call to appropriate starting place in your code.
' On return, assign appropriate value to returnValue.
' 0 usually means successful completion.
MsgBox("The application is terminating with error level " _
& CStr(returnValue) & ".")
Return returnValue
End Function
End Module

Se puede declarar Main para examinar los argumentos de línea de comandos pero no devolver un código de salida, de la
manera siguiente.

Module mainModule
Sub Main(ByVal cmdArgs() As String)
MsgBox("The Main procedure is starting the application.")
Dim returnValue As Integer = 0
' See if there are any arguments.
If cmdArgs.Length > 0 Then
For argNum As Integer = 0 To UBound(cmdArgs, 1)
' Insert code to examine cmdArgs(argNum) and take
' appropriate action based on its value.
Next argNum
End If
' Insert call to appropriate starting place in your code.
MsgBox("The application is terminating."
End Sub
End Module

Vea también
Referencia
Estructura de un programa de Visual Basic
/main
Shared (Visual Basic)
MsgBox (Función, Visual Basic)
Instrucción Sub (Visual Basic)
Instrucción Function (Visual Basic)
Integer (Tipo de datos, Visual Basic)
String (Tipo de datos, Visual Basic)
UBound (Función, Visual Basic)
Length
Conceptos
Versión de Visual Basic del programa Hola a todos
Conceptos del lenguaje Visual Basic

Convenciones de nomenclatura de Visual Basic


Al dar nombre a un elemento de una aplicación de Visual Basic, el primer carácter del nombre debe ser un carácter alfabético o
un guión de subrayado. Tenga en cuenta, sin embargo, que los nombres que empiezan con un guión de subrayado no
cumplen las normas de Common Language Specification (CLS).
A la nomenclatura se aplican las siguientes sugerencias.
Empiece cada palabra independiente de un nombre con una letra mayúscula, como en FindLastRecord y RedrawMyForm.
Empiece los nombres de método y de función con un verbo, como en InitNameArray o CloseDialog.
Empiece los nombres de clase, estructura, módulo y propiedad con un nombre, como en EmployeeName o CarAccessory.
Empiece los nombres de interfaz con el prefijo "I", seguido de un nombre o una frase nominal, como IComponent, o con
un adjetivo que describa el comportamiento de la interfaz, como IPersistable. No utilice el subrayado, y utilice lo
menos posible las abreviaturas, ya que pueden causar confusiones.
Empiece los nombres de controlador de eventos con un nombre que describa el tipo de evento seguido por el sufijo
"EventHandler", como en "MouseEventHandler".
En nombres de clases de argumento de evento, incluya el sufijo "EventArgs".
Si un evento tiene un concepto de “antes” o “después”, utilice un prefijo en tiempo presente o pasado, como en
"ControlAdd" o "ControlAdded".
Para términos largos o utilizados con frecuencia, utilice abreviaturas para mantener las longitudes de los nombres dentro
un límite razonable, por ejemplo, "HTML" en lugar de "Lenguaje de marcado de hipertexto". En general, los nombres de
variable con más de 32 caracteres son difíciles de leer en una pantalla configurada para una resolución baja. Además,
asegúrese de que sus abreviaturas sean coherentes a lo largo de toda la aplicación. Si utiliza indistinta y aleatoriamente
"HTML" y "Lenguaje de marcado de hipertexto" en un mismo proyecto, puede provocar confusión.
Evite utilizar nombres que en un entorno interno sean iguales que otros nombres de un entorno externo. Se producirán
errores si se obtiene acceso a la variable equivocada. Si se produce un conflicto entre una variable y la palabra clave del
mismo nombre, debe identificar la palabra clave poniéndole delante la biblioteca de tipos adecuada. Por ejemplo, si tiene
una variable denominada Date, sólo puede utilizar la función intrínseca Date llamando a System.DateTime.Date.

Vea también
Conceptos
Palabras clave como nombres de elementos en código
Me, My, MyBase y MyClass en Visual Basic
Nombres de elementos declarados
Otros recursos
Convenciones de código y estructura de programas
Referencia de Visual Basic
Conceptos del lenguaje Visual Basic

Palabras clave como nombres de elementos en código


Cualquier elemento de programación (como una variable, una clase o un miembro) puede tener el mismo nombre que una
palabra clave restringida. Por ejemplo, puede crear una variable denominada Loop. Sin embargo, para hacer referencia a su
versión de la misma (que tiene el mismo nombre que la palabra clave restringida Loop), debe calificarla precediéndola de su
espacio de nombres completo o debe encerrarla entre corchetes ([ ]), como muestra el ejemplo siguiente.
VB
' The following statement precedes Loop with a full qualification string.
sampleForm.Loop.Visible = True
' The following statement encloses Loop in square brackets.
[Loop].Visible = True

Si no hace ninguna de ellas, Visual Basic de por supuesto el uso de la palabra clave Loop intrínseca y produce un error, como
en el ejemplo siguiente:
' The following statement causes a compiler error.
Loop.Visible = True

Puede utilizar corchetes al hacer referencia a formularios y controles, al declarar una variable o al definir un procedimiento con
el mismo nombre que una palabra clave restringida. Puede resultar sencillo olvidarse de calificar los nombres o de ponerlos
entre corchetes, y con ello provocar errores en el código y dificultar su lectura. Por este motivo, es recomendable que no utilice
palabras clave restringidas como nombres de elementos de programa. Sin embargo, si una futura versión de Visual Basic
define una nueva palabra clave que entra en conflicto con un nombre de formulario o de control existente, puede utilizar esta
técnica en el momento de actualizar el código para trabajar con la versión nueva.
Nota
El programa también puede incluir nombres de elementos proporcionados por otros ensamblados a los que se haya hecho r
eferencia. Si estos nombres están en conflicto con palabras clave restringidas, colocarlos entre corchetes hace que Visual Basi
c los interprete como elementos definidos por el programador.

Vea también
Conceptos
Convenciones de nomenclatura de Visual Basic
Otros recursos
Convenciones de código y estructura de programas
Palabras clave (Visual Basic)
Conceptos del lenguaje Visual Basic

Me, My, MyBase y MyClass en Visual Basic


La aparente similitud entre Me, My, MyBase y MyClass en Visual Basic puede confundirle la primera vez que se encuentre
con estos conceptos. En esta página se describe cada una de estas entidades para distinguir entre ellas.
Me
La palabra clave Me proporciona una manera de hacer referencia a una instancia específica de una clase o estructura en la que
se está ejecutando el código actualmente. Me se comporta como una variable de objeto o de estructura que hace referencia a
la instancia actual. El uso de la palabra clave Me es especialmente útil para transferir información acerca de la instancia de una
clase o estructura que se está ejecutando actualmente a un procedimiento de otro módulo, estructura o clase.
My
La función My proporciona acceso fácil e intuitivo a varias clases de .NET Framework, lo que permite que el usuario de Visual
Basic interactúe con el equipo, aplicación, configuración, recursos, etc.
MyBase
La palabra clave MyBase se comporta como una variable de objeto que hace referencia a la clase base de la instancia actual de
una clase. MyBase se utiliza comúnmente para tener acceso a miembros de la clase base que se han reemplazado o
sombreado en una clase derivada. MyBase.New se utiliza para llamar explícitamente a un constructor de la clase base desde
un constructor de la clase derivada.
MyClass
La palabra clave MyClass se comporta como una variable de objeto que hace referencia a la instancia actual de una clase tal
como se implementó originalmente. MyClass es similar a Me, pero todas las llamadas a métodos se tratan como si el método
fuera NotOverridable.
Vea también
Referencia
MyBase
MyClass
Me
Conceptos
Desarrollo con la función My
Fundamentos de la herencia
Ejemplos de Visual Basic

Convenciones de código de Visual Basic


Microsoft utiliza estas directrices para desarrollar ejemplos y documentación. La especificación del lenguaje de Visual Basic no
define una codificación estándar.
Las convenciones de codificación dan un aspecto coherente al código, de modo que los lectores pueden centrar su
atención en el contenido y no en el diseño.
Las convenciones permiten que los lectores comprendan el código con más rapidez porque les permite hacer
suposiciones basadas en su experiencia anterior.
Las convenciones facilitan la copia, la modificación y el mantenimiento del código.
Las convenciones muestran los "procedimientos recomendados" de Visual Basic.
Explicación
Convenciones de nomenclatura
Las directrices de nomenclatura se tratan en Instrucciones de diseño para desarrollar bibliotecas de clases.
No tiene que cambiar el nombre de los objetos que se hayan creado con las herramientas de diseño de Visual Studio
para que se ajusten a estas directrices.
Utilice las calificaciones de espacios de nombres en lugar de agregar instrucciones Imports. Si un espacio de nombres se
importa de manera predeterminada en un proyecto, no tiene que utilizar nombres completos en el código porque se
ejecutará sin calificar cuando se copie y se pegue. Al dividir líneas largas de código para facilitar la lectura del código, los
nombres completos pueden cortarse después del "." Por ejemplo:

Dim collection As System.Diagnostics. _


InstanceDataCollectionCollection

No utilice "Mi" o "mi" como parte de un nombre de variable. Esto crea confusión con los objetos My.
Convenciones de diseño
Un diseño apropiado utiliza formatos para hacer hincapié en la estructura del código y facilitar su lectura.
Utilice la característica de lista descriptiva para dar formato al código con la configuración predeterminada (sangría
automática, sangrías de 4 caracteres, guardar tabuladores como espacios). Para obtener más información, vea
Opciones específicas de VB, Basic, Editor de texto, Opciones (Cuadro de diálogo).
Utilice sólo una instrucción por línea. No utilice ":".
Utilice sólo una declaración por línea.
Aplique una sangría de una posición de tabulación a las líneas de continuación.
Agregue al menos una línea en blanco entre el método y las definiciones de propiedad.
Convenciones de los comentarios
No utilice comentarios al final de una línea de código. Sitúe los comentarios en una línea independiente.
Comience el texto del comentario con una letra mayúscula.
Finalice el comentario con un punto.
Inserte un espacio entre el delimitador de comentario (') y el texto del comentario.

' Here is a comment.

No cree bloques de asteriscos con formato alrededor de los comentarios.


Estructura del programa
Al utilizar el método Main, utilice la construcción predeterminada para las nuevas aplicaciones de consola y utilice My
para los argumentos de la línea de comandos.

Sub Main()
For Each argument As String In My.Application.CommandLineArgs
' Add code here to use the string variable.
Next
End Sub

Convenciones de lenguaje
String (Tipo de datos)
Utilice & para concatenar cadenas:

MsgBox("hello" & vbCrLf & "goodbye")

Para anexar cadenas en bucles, utilice el objeto StringBuilder:

Dim longString As New System.Text.StringBuilder


For count As Integer = 1 To 1000
longString.Append(count)
Next

Tipo de datos sin signo


Utilice Integer en lugar de tipos sin signo a menos que la memoria sea insuficiente.
Matrices
Utilice la sintaxis abreviada al inicializar las matrices en la línea de declaración:

Dim letters() As String = {"a", "b", "c"}

en lugar de:

Dim letters() As String = New String() {"a", "b", "c"}

Sitúe el designador de la matriz en la variable, no en el tipo:

Dim letters() As String = {"a", "b", "c"}

en lugar de:

Dim letters As String() = {"a", "b", "c"}

Utilice la sintaxis {} al declarar e inicializar matrices de tipos de datos básicos:

Dim letters() As String = {"a", "b", "c"}

en lugar de:

Dim letters(2) As String


letters(0) = "a"
letters(1) = "b"
letters(2) = "c"
Utilice la palabra clave With
Cuando se enfrente con una serie de llamadas a un objeto, considere la posibilidad de utilizar la palabra clave With.
Declare las variables de bucle en la instrucción For o For Each
Ejemplo:

For count As Integer = 0 To 2


MsgBox(names(count))
Next

Ejemplo:

For Each name As String In names


MsgBox(name)
Next

Utilice Try...Catch
Utilice siempre Try...Catch con un objeto que implemente un método Dispose.
No utilice On Error Goto.
Utilice la instrucción Using
Si está utilizando una instrucción Try...Catch y el único código en el bloque Finally es una llamada a Dispose, utilice Using en
su lugar.
IsNot (Palabra clave)
Utilice preferentemente la palabra clave IsNot a Not ... Is Nothing.
Instancias de formularios predeterminadas
Utilice Form1.ShowDialog en lugar de My.Forms.Form1.ShowDialog.
New (Palabra clave)
Utilice la creación de instancias abreviadas:

Dim employees As New Collection()

en lugar de:

Dim employees As Collection = New Collection()

Utilice el constructor sin parámetros y, a continuación, establezca las propiedades mediante With:

Dim orderLog As New EventLog()


With orderLog
.Log = "Application"
.Source = "Application Name"
.MachineName = "Machine Name"
End With

Control de eventos
Utilice Handles en lugar de AddHandler.

Private Sub MenuItem1_Click(ByVal sender As System.Object, _


ByVal e As System.EventArgs) Handles MenuItem1.Click
Utilice AddressOf y no cree instancias explícitas del delegado:

Dim closeItem As New MenuItem("Close", AddressOf MenuItem1_Click)


Me.MainMenu1.MenuItems.Add(closeItem)

Cuando defina un evento, utilice la sintaxis corta y permita que el compilador defina el delegado:

Public Event WhatHappened(ByVal source As Object, _


ByVal e As WhatHappenedEventArgs)

Utilizar miembros compartidos


Llame a los miembros Shared utilizando el nombre de clase, y no una variable de instancia.
MsgBox (Función)
Utilice MsgBox en lugar de MessageBox.Show o Console.WriteLine.
Utilice el espacio de nombres My
Utilice las características My en preferencia a la biblioteca de clases de .NET Framework o a la biblioteca en tiempo de
ejecución de Visual Basic.
Utilice los miembros de la biblioteca en tiempo de ejecución de Visual Basic
Utilice la biblioteca en tiempo de ejecución de Visual Basic en preferencia a la biblioteca de clases de .NET Framework.
Directrices para los ejemplos
General
Siga las directrices de diseño incluidas en Instrucciones de diseño para desarrolladores de bibliotecas de clases
(http://msdn.microsoft.com/library/default.asp?url=/library/en-
us/cpgenref/html/cpconnetframeworkdesignguidelines.asp).
Especifique el indicador y el título de las llamadas a MsgBox.
Utilice los archivos de recursos cuando sea apropiado.
Utilice Option Strict On en cada archivo o como una configuración del proyecto.
Realice la compilación con todas las advertencias activadas.
Defina sólo una Class, Structure o Interface en un archivo.
Utilice la codificación predeterminada para guardar los archivos.
Localización
Utilice la propiedad AutoSize donde sea posible.
No oculte ni superponga los controles.
No alinee los controles para crear una instrucción.
No genere cadenas extrayendo caracteres de otra cadena.
Utilice gráficos neutros respecto a la referencia cultural.
Utilice sólo las fuentes Tahoma o MS Sans Serif.
Accesibilidad
Utilice colores en la ficha Sistema del cuadro de diálogo de selección de color.
Utilice aceleradores en todos los menús, etiquetas, botones, etc.
Establezca las propiedades de control tal y como se describen en la tabla siguiente.
Propiedad Valor
AccessibleDescription Descripción del control.

AccessibleName Nombre del control.


AccessibleRole Utilice el valor predeterminado o vuelva a definir esta propiedad si un control tiene otra función.

TabIndex Utilice un orden lógico.

Text Todos los controles seleccionables deberían tener una tecla de acceso del teclado (método abreviado).

Font size Utilice el valor predeterminado o establezca la fuente en 10 puntos o más

Forecolor Valor predeterminado

Backcolor Valor predeterminado

BackgroundImage Valor predeterminado


Seguridad
Siga las directrices incluidas en Instrucciones de codificación segura.
Vea también
Otros recursos
Instrucciones de diseño para desarrollar bibliotecas de clases
Instrucciones de codificación segura
Conceptos del lenguaje Visual Basic

Compilación condicional (Visual Basic)


En la compilación condicional, se compilan de forma selectiva bloques determinados del código de un programa mientras que
otros se omiten.
En esta sección
Información general sobre la compilación condicional
Explica para qué se utiliza la compilación condicional y trata las directivas #Const e #If...Then...#Else.
Cómo: Declarar constantes de compilación condicional
Muestra cómo se declaran constantes de compilación condicional en el cuadro de diálogo Páginas de propiedades, en la
línea de comandos o en el código.
Cómo: Contraer y ocultar secciones de código
Explica cómo se puede especificar un bloque de código que desee contraer o expandir mediante la característica de
esquematización de Visual Studio.
Secciones relacionadas
Convenciones de código y estructura de programas
Ofrece sugerencias para facilitar la lectura y el mantenimiento del código.
Compilar en lenguaje intermedio de Microsoft (MSIL)
Explica cómo convierte el compilador el código fuente en el lenguaje intermedio de Microsoft (MSIL).
Compilar MSIL a código nativo
Proporciona información general sobre el compilador JIT (Just-In-Time) de .NET Framework que convierte MSIL en código
nativo (específico de la CPU).
Conceptos del lenguaje Visual Basic

Información general sobre la compilación condicional


Use la compilación condicional para seleccionar secciones concretas del código que desee compilar y, a la vez, excluir otras. Por
ejemplo, podría interesarle escribir instrucciones de depuración que comparen la velocidad de varios enfoques de la misma
tarea de programación o quizá desee adaptar una aplicación en varios idiomas. Las instrucciones de compilación condicional
se han concebido para su ejecución en tiempo de compilación, no durante la ejecución.
Una constante de compilación condicional se declara mediante la directiva #Const y los bloques de código que se compilarán
de forma condicional se denotan con la directiva #If...Then...#Else. Por ejemplo, para crear versiones en francés y alemán de la
misma aplicación a partir del mismo código fuente, incruste segmentos de código específicos de la plataforma
correspondiente en instrucciones #If...Then, por medio de las constantes predefinidas FrenchVersion y GermanVersion. En el
ejemplo siguiente se explica cómo hacerlo:
VB
#If FrenchVersion Then
' <code specific to the French language version>.
#ElseIf GermanVersion Then
' <code specific to the German language version>.
#Else
' <code specific to other versions>.
#End If

Si define el valor de la constante FrenchVersion como True en tiempo de compilación, se compila el código condicional de la
versión en francés. Si define el valor de la constante GermanVersion como True, el compilador usa la versión en alemán. Si
ninguna de las dos está establecida en True, se ejecuta el código del último bloque Else.
Nota
Autocompletar no funcionará al editar código y utiliza directivas de compilación condicional si el código no forma parte de la
bifurcación actual.

Vea también
Tareas
Cómo: Declarar constantes de compilación condicional
Cómo: Contraer y ocultar secciones de código
Referencia
#Const (Directiva)
#If...Then...#Else (Directivas)
Otros recursos
Generar desde la línea de comandos (Visual Basic)
Conceptos del lenguaje Visual Basic

Cómo: Declarar constantes de compilación condicional


Existen tres métodos para definir las constantes de compilación condicional:
En el Diseñador de proyectos
En la línea de comandos, cuando se utiliza el compilador de la línea de comandos.
En el código.
Las constantes de compilación condicional tienen un ámbito especial y no está permitido el acceso a ellas desde el código
estándar. El ámbito de una constante de compilación condicional depende de cómo se ha definido. En la tabla siguiente se
muestra una lista del ámbito de las constantes declaradas siguiendo los tres métodos antes mencionados.
Método de definición de la constante Ámbito de la constante
Diseñador de proyectos Público para todos los archivos del proyecto

Línea de comandos Público para todos los archivos que se pasen al compilador de la línea de comandos

Instrucción #Const en el código Privado para el archivo en que se declara

Para establecer las constantes en el Diseñador de proyectos


Antes de crear el archivo ejecutable, defina las constantes en el Diseñador de proyectos siguiendo el procedimiento
descrito en Cómo: Modificar las propiedades y los valores de configuración del proyecto.
Para definir constantes en la línea de comandos
Use el modificador /d para especificar constantes de compilación condicional, como en el ejemplo siguiente:

vbc MyProj.vb /d:conFrenchVersion=–1:conANSI=0

No se requiere un espacio entre el modificador /d y la primera constante. Para obtener más información, vea
/define (Visual Basic).
Las declaraciones de la línea de comandos reemplazan las especificadas en el Diseñador de proyectos, pero no las
borran. Los argumentos definidos en el Diseñador de proyectos permanecen activos durante las compilaciones
subsiguientes.
A la hora de escribir constantes en el propio código no existen reglas estrictas en cuanto a su ubicación, puesto que su
ámbito es el módulo completo en el que se declaran.
Para definir constantes en el código
Sitúe las constantes en el bloque de declaración del módulo en el que se utilicen. De esta forma se facilitan la
organización del código y su lectura.
Vea también
Tareas
Cómo: Contraer y ocultar secciones de código
Referencia
Constantes de compilación condicional
/define (Visual Basic)
#If...Then...#Else (Directivas)
#Const (Directiva)
Conceptos
Información general sobre la compilación condicional
Otros recursos
Generar desde la línea de comandos (Visual Basic)
Conceptos del lenguaje Visual Basic

Cómo: Contraer y ocultar secciones de código


La directiva #Region permite contraer y ocultar secciones de código en archivos de Visual Basic. La directiva #Region permite
especificar un bloque de código que se puede expandir o contraer al utilizar el editor de código de Visual Studio. La capacidad
para ocultar código de forma selectiva facilita la administración del código y su lectura. Para obtener más información, vea
Cómo: Esquematizar y ocultar el código.
Las directivas #Region admiten la semántica de bloque de código como #If...#End If. Es decir, no pueden empezar en un
bloque y terminar en otro; su principio y su fin deben estar en el mismo bloque. No se admiten directivas #Region dentro de
las funciones.
Para contraer y esconder secciones de código
Sitúe la sección de código entre las instrucciones #Region y #End Region, como en el siguiente ejemplo:
VB
#Region "This is the code to be collapsed"
Private components As System.ComponentModel.Container
Dim WithEvents Form1 As System.Windows.Forms.Form

Private Sub InitializeComponent()


components = New System.ComponentModel.Container
Me.Text = "Form1"
End Sub
#End Region

El bloque #Region puede utilizarse varias veces en un archivo de código; de esta forma, los usuarios pueden definir sus
propios bloques de procedimientos y clases que, a su vez, pueden contraerse. Los bloques #Region también pueden
anidarse dentro de otros bloques #Region.
Nota
Al ocultar el código no evita que éste se compile, y no afecta a las instrucciones #If...#End If.

Vea también
Tareas
Cómo: Declarar constantes de compilación condicional
Cómo: Esquematizar y ocultar el código
Referencia
#Region (Directiva)
#If...Then...#Else (Directivas)
Conceptos
Información general sobre la compilación condicional
Conceptos del lenguaje Visual Basic

Cómo: Interrumpir y combinar instrucciones en código


Cuando crea el código, a veces debe crear instrucciones largas que requieren un desplazamiento horizontal en el Editor de
código. Aunque esto no afecta a la forma en que se ejecuta el código, dificulta la lectura del código tal y como aparece en la
pantalla. En estos casos, debe considerar la posibilidad de segmentar la única instrucción larga en varias líneas.
En otras ocasiones, quizás desee consolidar las instrucciones en una sola línea; por ejemplo, si tiene diversas instrucciones
cortas y desea ahorrar espacio. Esta característica puede ser también útil al organizar variables o comandos dentro de un
módulo.
Para segmentar una sola instrucción en varias líneas
Utilice el carácter de continuación de línea, que es un subrayado (_), en el punto en el que desea que la línea se
interrumpa. El subrayado debe ir inmediatamente precedido de un espacio e inmediatamente seguido de un terminador
de línea (retorno de carro).
En el ejemplo siguiente, la instrucción se segmenta en cuatro líneas con caracteres de continuación de línea al final de
todas las líneas excepto la última.
VB
cmd.CommandText = _
"SELECT * FROM Titles JOIN Publishers " _
& "ON Publishers.PubId = Titles.PubID " _
& "WHERE Publishers.State = 'CA'"

La utilización de esta secuencia facilita la lectura del código, tanto en pantalla como al imprimirlo.
Nota
El carácter de continuación de línea es necesariamente lo último que aparece en una línea. No es posible agregar nada
más en la misma línea.

Existen algunas restricciones respecto al uso del carácter de continuación de línea en determinadas posiciones, como en
medio de un nombre de argumento. Puede segmentar una lista de argumentos con el carácter de continuación de línea,
pero los nombres individuales de los argumentos deben permanecer intactos.
Nota
No es posible continuar un comentario mediante el carácter de continuación de línea. Una vez que se inicia un comenta
rio, el compilador no busca ningún significado especial en los caracteres. Para insertar un comentario de múltiples líne
as, repita el símbolo de comentario en cada línea (').

Aunque el método recomendado consiste en colocar cada instrucción en una línea separada, Visual Basic también permite
colocar varias instrucciones en la misma línea.
Para colocar varias instrucciones en la misma línea
Separe las instrucciones con un signo de dos puntos (:), como en el ejemplo siguiente:
VB
text1.Text = "Hello" : text1.BackColor = System.Drawing.Color.Red

Vea también
Otros recursos
Convenciones de código y estructura de programas
Instrucciones en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Aplicar etiquetas a las instrucciones


Los bloques de instrucciones están formados por líneas de código delimitadas por dos puntos. Las líneas de código precedidas
por una cadena o número entero identificador se denominan etiquetadas. Las etiquetas de instrucciones se utilizan para
marcar una línea de código e identificarla para su utilización en instrucciones del tipo On Error Goto.
Las etiquetas pueden ser identificadores de Visual Basic 2005 válidos, como los que identifican elementos de programación, o
literales enteros. Las etiquetas deben aparecen al principio de una línea de código fuente y deben ir seguidas de un signo dos
puntos, independientemente de si van seguidas de una instrucción en la misma línea.
El compilador identifica las etiquetas al comprobar si el principio de la línea coincide con un identificador ya definido. Si no es
así, el compilador dará por hecho que se trata de una etiqueta.
Las etiquetas tienen su propio espacio de declaración y no interfieren con otros identificadores. El ámbito de una etiqueta es el
cuerpo del método. La declaración de etiqueta tiene prioridad en cualquier situación ambigua.
Nota
Las etiquetas sólo se pueden utilizar en instrucciones ejecutables dentro de métodos.

Para etiquetar una línea de código.


Coloque un identificador, seguido de dos puntos, al principio de la línea de código fuente.
Por ejemplo, a las siguientes líneas de código se les han asignado las etiquetas Jump y 120, respectivamente:
VB
Jump: FileOpen(1, "testFile", OpenMode.Input)
' ...
120: FileClose(1)

Vea también
Conceptos
Información general sobre las instrucciones
Otros recursos
Instrucciones en Visual Basic
Convenciones de código y estructura de programas
Conceptos del lenguaje Visual Basic

Caracteres especiales en código


Algunas veces necesitará utilizar caracteres especiales en el código, es decir, caracteres que no están en la lista alfanumérica
estándar. Los caracteres de puntuación y especiales del conjunto de caracteres de Visual Basic tienen varias finalidades, desde
organizar el texto del programa hasta definir las tareas que realiza el compilador o el programa compilado. No especifican que
se deba realizar una operación.
Paréntesis
Utilice paréntesis al definir un procedimiento, como Sub o Function. Debe incluir entre paréntesis todas las listas de
argumentos de los procedimientos. También se utilizan paréntesis para agrupar las variables o argumentos en grupos lógicos,
en particular para reemplazar el orden predeterminado de prioridad de operadores en una expresión compleja. Esto se ilustra
en el siguiente ejemplo:
VB
Dim a, b, c, d, e As Double
a = 3.2
b = 7.6
c = 2
d = b + c / a
e = (b + c) / a

Siguiendo la ejecución del código precedente, el valor de d es de 8,225 y el valor de e, de 3. El cálculo de d utiliza la prioridad
predeterminada de / sobre + y es equivalente a d = b + (c / a). Los paréntesis del cálculo para e reemplazan la prioridad
predeterminada.
Separadores
Los separadores hacen lo que su nombre sugiere; separan secciones de código. En Visual Basic, el carácter separador es el dos
puntos (:). Utilice separadores cuando desee colocar varias instrucciones en una única línea en lugar de colocarlas en líneas
separadas, para ahorrar espacio y mejorar la legibilidad del código. El siguiente ejemplo muestra tres instrucciones separadas
por dos puntos (:).
VB
a = 3.2 : b = 7.6 : c = 2

Concatenación
Utilice el operador & para concatenar o vincular cadenas entre sí. No lo confunda con el operador +, que suma valores
numéricos. Si utiliza el operador + para concatenar, puede que se produzcan resultados incorrectos en el momento de operar
en valores numéricos. En el siguiente ejemplo se muestra cómo.
VB
var1 = "10.01"
var2 = 11
resultA = var1 + var2
resultB = var1 & var2

Siguiendo la ejecución del código anterior, el valor de resultA es 21,01 y el valor de resultB es "10,0111."
Operadores de acceso a miembros
Para tener acceso a un miembro de un tipo, utilice el operador punto (.) o signo de exclamación (!) entre el nombre del tipo y el
nombre del miembro.
Operador punto (.)
Utilice el operador . en una clase, estructura, interfaz o enumeración como un operador de acceso a miembros. El miembro
puede ser un campo, propiedad, evento o método. El ejemplo siguiente es ilustrativo de esto.
VB
Dim nextForm As New System.Windows.Forms.Form
' Access Text member (property) of Form class (on nextForm object).
nextForm.Text = "This is the next form"
' Access Close member (method) on nextForm.
nextForm.Close()

Operador signo de exclamación (!)


Utilice el operador !, sólo en una clase o interfaz, como operador de acceso al diccionario. La clase o interfaz debe tener una
propiedad predeterminada que acepte un solo argumento String. El identificador que sigue inmediatamente al operador ! se
convierte en el argumento de cadena para la propiedad predeterminada. En el siguiente ejemplo se muestra cómo.
VB
Public Class hasDefault
Default Public ReadOnly Property index(ByVal s As String) As Integer
Get
Return 32768 + AscW(s)
End Get
End Property
End Class
Public Class testHasDefault
Public Sub compareAccess()
Dim hD As hasDefault = New hasDefault()
MsgBox("Traditional access returns " & hD.index("X") & vbCrLf & _
"Default property access returns " & hD("X") & vbCrLf & _
"Dictionary access returns " & hD!X)
End Sub
End Class

Las tres líneas de resultado de MsgBox muestran el valor 32856. La primera línea utiliza un acceso tradicional a la propiedad
index, la segunda aprovecha el hecho de que index es la propiedad predeterminada de la clase hasDefault y la tercera usa el
acceso de diccionario a la clase.
Tenga en cuenta que el segundo operando del operador ! debe ser una cadena no incluida entre comillas dobles (" "). Dicho de
otra forma, no se puede utilizar un literal de cadena o una variable de cadena. El cambio siguiente a la última línea de la
llamada MsgBox genera un error porque "X" es un literal de cadena incluido entre comillas.
"Dictionary access returns " & hD!"X")

Nota
Las referencias a colecciones predeterminadas deben ser explícitas. En particular, no es posible utilizar el operador ! en una v
ariable de enlace en tiempo de ejecución.

El carácter ! también se utiliza como carácter de tipo Single.


Vea también
Conceptos
Caracteres de tipo
Otros recursos
Convenciones de código y estructura de programas
Conceptos del lenguaje Visual Basic

Comentarios en código
Cuando lea ejemplos de código, encontrará el símbolo de comentario ('). Este símbolo solicita al compilador de Visual Basic
que pase por alto el texto que aparece a continuación, es decir el comentario. Los comentarios son notas cortas explicativas
que se agregan al código para aportar mayor información a las personas que lo lean.
Una buena práctica de programación consiste en comenzar todos los procedimientos con un comentario breve que describe
las características funcionales del procedimiento (lo que hace). Esto ayuda al programador y a los que puedan examinar el
código. Debería separar los detalles de implementación (cómo lo hace el procedimiento) de los comentarios que describen las
características funcionales. Al incluir detalles de implementación en la descripción, recuerde actualizarlos en el momento de
actualizar la función.
Los comentarios pueden ir a continuación de una instrucción en la misma línea, o pueden ocupar una línea completa. Ambas
opciones quedan reflejadas en el código siguiente.
VB
' This is a comment beginning at the left edge of the screen.
text1.Text = "Hi!" ' This is an inline comment.

Si el comentario necesita más de una línea, utilice el símbolo de comentario en cada línea, como se muestra en el siguiente
ejemplo:
VB
' This comment is too long to fit on a single line, so we break
' it into two lines. Some comments might need three or more lines.

Instrucciones sobre los comentarios


La tabla siguiente proporciona directrices generales sobre los tipos de comentarios que pueden preceder una sección de
código. Se trata únicamente de sugerencias, ya que Visual Basic no tiene reglas obligatorias para agregar comentarios. Escriba
lo que considere más conveniente, para uso propio o para cualquier otra persona que lea el código.
Tipo de comenta Descripción del comentario
rio
Finalidad Describe qué hace el procedimiento (no cómo lo hace).

Suposiciones Enumera cada variable externa, control, archivo abierto u otro elemento al cual el procedimiento tenga acc
eso.

Efectos Enumera cada variable externa, control o archivo que esté afectado, y el efecto que tienen (únicamente si n
o es evidente).

Entradas Especifica el propósito del argumento.

Valores devueltos Explica los valores que devuelve el procedimiento

Recuerde los siguientes puntos:


Cada declaración de variable importante debe incluir un comentario anterior que describa el uso de la variable que se
declara.
Las variables, controles y procedimientos deben tener un nombre lo suficientemente claro para asegurar que el uso de
comentarios sólo sea necesario para detalles de implementación compleja.
Después de la secuencia de continuación de línea no puede escribirse un comentario en la misma línea.
Puede agregar o quitar símbolos de comentario de un bloque de código seleccionando una o más líneas de código y eligiendo
los botones Selección con comentarios ( ) y Selección sin comentarios ( ) de la barra de herramientas Edición.
Nota
También puede agregar comentarios al código poniendo la palabra clave REM antes del texto. Sin embargo, el símbolo ' y lo
s botones Selección con comentarios y Selección sin comentarios son más fáciles de utilizar y requieren menos espacio
y memoria.

Vea también
Referencia
REM (Instrucción, Visual Basic)
Otros recursos
Convenciones de código y estructura de programas
Conceptos del lenguaje Visual Basic

Cómo: Agregar un comentario al código (Visual Basic)


En este ejemplo se muestran comentarios que ocupan una línea de código fuente completa, parte de una línea y más de una
línea.
Ejemplo
VB
' This entire line is a comment.
Dim DailyTotal As Decimal = 0 ' Sales total for today.
' This comment is so long that it requires more than one line, so
' the comment character (') must be repeated on the second line.

Este ejemplo de código también está disponible como fragmento de código de IntelliSense. En el selector de fragmentos de
código, se encuentra en Lenguaje Visual Basic. Para obtener más información, vea
Cómo: Insertar fragmentos de código en el código (Visual Basic).
Compilar el código
Para este ejemplo se necesita:
Una referencia al espacio de nombres System.
Nota
No es posible continuar un comentario utilizando la secuencia de continuación de línea ( _). Deberá repetir el carácter d
e comentario (') al principio de cada línea de comentario.

Vea también
Tareas
Cómo: Interrumpir y combinar instrucciones en código
Conceptos
Comentarios en código
Conceptos del lenguaje Visual Basic

Documentar el código con XML (Visual Basic)


En Visual Basic, puede documentar el código utilizando XML
Comentarios sobre la documentación XML
Visual Basic proporciona un medio sencillo para crear automáticamente documentación XML para los proyectos. Puede
generar automáticamente un esquema XML para los tipos y miembros y, a continuación, proporcionar resúmenes,
documentación descriptiva para cada parámetro y otros comentarios. Con la configuración apropiada, la documentación XML
se emite automáticamente en un archivo XML que tiene el mismo nombre que el proyecto y la extensión .xml. Para obtener
más información, vea /doc.
El archivo XML se puede utilizar o, de lo contrario, manipularse como XML. Este archivo se encuentra en el mismo directorio
que el archivo .exe de salida o el archivo .dll del proyecto.
La documentación XML empieza con '''. El procesamiento de estos comentarios presenta algunas restricciones:
La documentación debe estar en XML bien formado. Si el código XML no está bien formado, se generará una advertencia
y el archivo de documentación incluirá un comentario que mencione el error encontrado.
Los programadores pueden crear su propio conjunto de etiquetas. Existe un conjunto de etiquetas recomendado (vea
"Secciones relacionadas" en este tema). Algunas de las etiquetas recomendadas tienen significados especiales:
La etiqueta <param> se usa para describir parámetros. Cuando se utiliza, el compilador comprueba si el
parámetro existe y si todos los parámetros están descritos en la documentación. Si la comprobación no tiene
éxito, el compilador emite una advertencia.
El atributo cref se puede asociar a cualquier etiqueta para proporcionar una referencia a un elemento de código.
El compilador comprueba si existe ese elemento de código. Si la comprobación no tiene éxito, el compilador
emite una advertencia. El compilador también respeta cualquier instrucción Imports cuando busca un tipo
descrito en el atributo cref.
La etiqueta <summary> la utiliza IntelliSense en Visual Studio para mostrar información adicional sobre un tipo
o miembro.
Secciones relacionadas
Si desea obtener información sobre cómo crear un archivo XML con comentarios de documentación, vea los siguientes temas:
/doc
Etiquetas XML recomendadas para comentarios de documentación (Visual Basic)
Procesar el archivo XML (Visual Basic)
Cómo: Crear documentación XML en Visual Basic
Ejemplo XML Comments
Herramientas XML en Visual Studio
Vea también
Otros recursos
Desarrollo de aplicaciones con Visual Basic
Guía de programación en Visual Basic
Conceptos del lenguaje Visual Basic

Procesar el archivo XML (Visual Basic)


El compilador genera una cadena id. por cada construcción del código marcada para generar documentación. (Para obtener
información sobre cómo etiquetar el código, vea
Etiquetas XML recomendadas para comentarios de documentación (Visual Basic).) La cadena id. identifica de forma exclusiva
cada construcción. Los programas que procesan el archivo XML pueden utilizar la cadena de id. para identificar el elemento de
metadatos o reflexión correspondiente en .NET Framework.
El archivo XML no es una representación jerárquica del código, es una lista sencilla con un identificador generado para cada
elemento.
El compilador cumple las siguientes reglas cuando genera las cadenas id.:
No se coloca ningún espacio en blanco en la cadena.
La primera parte de la cadena de id. identifica el tipo de miembro por medio de un único carácter seguido de dos puntos.
Se utilizan los siguientes tipos de miembros:
Carác Descripción
ter
N Espacio de nombres
No se pueden agregar comentarios de documentación a un espacio de nombres, pero, si se admiten, se pueden h
acer referencias CREF a ellos.

T tipo: Class, Module, Interface, Structure, Enum, Delegate

F campo: Dim

P propiedad: Property (incluidas las propiedades predeterminadas)

M método: Sub, Function, Declare, Operator

E evento: Event

! cadena de error
El resto de la cadena proporciona información acerca del error. El compilador de Visual Basic genera información
de error para los vínculos que no se pueden resolver.

La segunda parte de String es el nombre completo del elemento, que comienza en la raíz del espacio de nombres. El
nombre del elemento, los tipos contenedores y el espacio de nombres se separan mediante puntos. Si el propio nombre
del elemento contiene puntos, éstos se reemplazan por el signo (#). Se supone que ningún elemento contiene un signo #
directamente en su nombre. Por ejemplo, el nombre completo del constructor de String sería System.String.#ctor.
Para propiedades y métodos, si existen argumentos para el método, la lista de argumentos que se encuentra entre
paréntesis aparece a continuación. Si no existen argumentos, no se escribe ningún paréntesis. Los argumentos se
separan por comas. La codificación de cada argumento indica directamente cómo se codifica en una firma de .NET
Framework:
Ejemplo
Los siguientes ejemplos muestran cómo se generarían las cadenas de id. para una clase y sus miembros:
VB
Namespace SampleNamesapce

''' <summary>Signature is
''' "T:SampleNamesapce.SampleClass"
''' </summary>
Public Class SampleClass
''' <summary>Signature is
''' "M:SampleNamesapce.SampleClass.#ctor"
''' </summary>
Public Sub New()
End Sub

''' <summary>Signature is
''' "M:SampleNamesapce.SampleClass.#ctor(System.Int32)"
''' </summary>
Public Sub New(ByVal i As Integer)
End Sub
''' <summary>Signature is
''' "F:SampleNamesapce.SampleClass.SampleField"
''' </summary>
Public SampleField As String
''' <summary>Signature is
''' "F:SampleNamesapce.SampleClass.SampleConstant"
''' </summary>
Public Const SampleConstant As Integer = 42

''' <summary>Signature is
''' "M:SampleNamesapce.SampleClass.SampleFunction"
''' </summary>
Public Function SampleFunction() As Integer
End Function
''' <summary>Signature is
''' "M:SampleNamesapce.SampleClass.
''' SampleFunction(System.Int16[],System.Int32[0:,0:])"
''' </summary>
Public Function SampleFunction( _
ByVal array1D() As Short, _
ByVal array2D(,) As Integer) _
As Integer
End Function

''' <summary>Signature is
''' "M:SampleNamesapce.SampleClass.
''' op_Addition(SampleNamesapce.SampleClass,
''' SampleNamesapce.SampleClass)"
''' </summary>
Public Shared Operator +( _
ByVal operand1 As SampleClass, _
ByVal operand2 As SampleClass) _
As SampleClass

Return Nothing
End Operator
''' <summary>Signature is
''' "P:SampleNamesapce.SampleClass.SampleProperty"
''' </summary>
Public Property SampleProperty() As Integer
Get
End Get
Set(ByVal value As Integer)
End Set
End Property

''' <summary>Signature is
''' "P:SampleNamesapce.SampleClass.Item(System.String)"
''' </summary>
Default Public ReadOnly Property Item( _
ByVal s As String) As Integer
Get
End Get
End Property

''' <summary>Signature is
''' "T:SampleNamesapce.SampleClass.NestedClass"
''' </summary>
Public Class NestedClass
End Class
''' <summary>Signature is
''' "E:SampleNamesapce.SampleClass.SampleEvent(System.Int32)"
''' </summary>
Public Event SampleEvent As SampleDelegate

''' <summary>Signature is
''' "T:SampleNamesapce.SampleClass.SampleDelegate"
''' </summary>
Public Delegate Sub SampleDelegate(ByVal i As Integer)
End Class
End Namespace

Vea también
Tareas
Cómo: Crear documentación XML en Visual Basic
Referencia
/doc
Referencia del lenguaje Visual Basic

Cómo: Crear documentación XML en Visual Basic


En este ejemplo se muestra cómo agregar comentarios de documentación XML al código.
Para crear documentación XML para un tipo o miembro
1. En el Editor de código, coloque el cursor en la línea situada encima del tipo o miembro para el que desea crear la
documentación.
2. Escriba ''' (tres comillas simples).
Se agrega una estructura XML para el tipo o miembro en el Editor de código.
3. Agregue información descriptiva entre las etiquetas adecuadas.
Nota
Si agrega líneas adicionales dentro del bloque de documentación XML, cada línea debe comenzar con '''.

4. Agregue código adicional que utilice el tipo o miembro con los nuevos comentarios de documentación XML.
IntelliSense muestra el texto de la etiqueta <summary> para el tipo o miembro.
5. Compile el código para generar un archivo XML que incluya los comentarios de la documentación. Para obtener más
información, vea /doc.
Vea también
Referencia
Etiquetas XML recomendadas para comentarios de documentación (Visual Basic)
/doc
Conceptos
Documentar el código con XML (Visual Basic)
Conceptos del lenguaje Visual Basic

Limitaciones de Visual Basic


Las versiones anteriores de Visual Basic imponían límites en el código, como la longitud de los nombres de variable, el número
de variables permitidas en los módulos y el tamaño de los módulos. En Visual Basic 2005 se han reducido estas restricciones,
lo que proporciona mayor libertad para crear y organizar el código.
Los límites físicos dependen más de la memoria en tiempo de ejecución que de las consideraciones en tiempo de compilación.
Si se utilizan prácticas de programación prudentes y las aplicaciones grandes se dividen en varias clases y módulos, hay muy
pocas probabilidades de encontrar una limitación interna de Visual Basic.
Las siguientes son algunas limitaciones que podría encontrar en casos extremos:
Longitud del nombre. Hay un número de caracteres máximo para el nombre de cada elemento de programación
declarado. Este máximo se aplica a toda la cadena de calificación si el nombre del elemento está completo. Vea
Nombres de elementos declarados.
Longitud de la línea. En una línea física de código fuente, hay un máximo de 65535 caracteres. La línea de código
fuente lógica puede ser más larga si se utilizan caracteres de continuación de línea. Vea
Cómo: Interrumpir y combinar instrucciones en código.
Dimensiones de matriz. Hay un número máximo de dimensiones que se pueden declarar para una matriz. Esto limita
cuántos índices se pueden utilizar para especificar un elemento de matriz. Vea Dimensiones de matrices en Visual Basic.
Longitud de cadena. Hay un número máximo de caracteres Unicode que se pueden almacenar en una sola cadena. Vea
String (Tipo de datos, Visual Basic).
Longitud de cadena del entorno. Hay un máximo de 32768 caracteres para cualquier cadena del entorno que se
utilice como argumento de la línea de comandos. Ésta es una limitación de todas las plataformas. Vea
Cómo: Obtener acceso a argumentos de línea de comandos en Visual Basic.
Vea también
Conceptos
Convenciones de nomenclatura de Visual Basic
Otros recursos
Convenciones de código y estructura de programas
Conceptos del lenguaje Visual Basic

Características del lenguaje Visual Basic


Los siguientes temas sirven de introducción y de explicación de los componentes básicos de Visual Basic, un lenguaje de
programación orientado a objetos. Tras crear la interfaz de usuario de su aplicación utilizando formularios y controles, debe
escribir el código que define el comportamiento de la aplicación. Al igual que con cualquier lenguaje de programación
moderno, Visual Basic admite un gran número de constructores comunes de programación y elementos de lenguaje.
Si ha programado en otros lenguajes, gran parte del material que se trata en esta sección le resultará familiar. Aunque la
mayoría de las construcciones son similares a las de otros lenguajes, la naturaleza controlada por eventos de Visual Basic
presenta algunas diferencias sutiles.
Si es un programador principiante, el material tratado en esta sección le servirá como introducción a las unidades de
generación básicas para escribir código. Una vez que comprenda los aspectos básicos, podrá crear aplicaciones eficaces
utilizando Visual Basic.
En esta sección
Visual Studio y .NET Framework
Describe la función de Visual Basic en .NET Framework y explica los ensamblados y atributos.
Elementos declarados en Visual Basic
Cubre los elementos de programación que puede declarar, sus nombres y características, y cómo el compilador resuelve las
referencias a los mismos.
Tipos de datos en Visual Basic
Describe qué tipos de datos pueden albergar los elementos de programación y la forma en que éstos se almacenan.
Variables en Visual Basic
Explica cómo declarar variables para almacenar valores y cómo utilizarlas para hacer referencia a los objetos.
Matrices en Visual Basic
Explica cómo hacer el código más compacto y eficaz declarando y utilizando matrices, que contienen múltiples valores
relacionados.
Objetos en Visual Basic
Ofrece información general sobre objetos y clases, cómo se utilizan, cómo se relacionan entre sí, y las propiedades, métodos
y eventos que exponen.
Cadenas en Visual Basic
Trata la declaración y manipulación de variables que contienen una secuencia de caracteres.
Constantes y enumeraciones en Visual Basic
Explica el almacenamiento de valores inmutables para su uso repetido, incluidos los conjuntos de valores constantes
relacionados.
Operadores y expresiones en Visual Basic
Describe los elementos de código que manipulan elementos que contienen valores, cómo utilizarlos eficientemente y cómo
combinarlos para producir nuevos valores.
Instrucciones en Visual Basic
Proporciona información general de las dos unidades básicas de instrucción de Visual Basic: instrucciones de declaración e
instrucciones ejecutables.
Procedimientos en Visual Basic
Explica los procedimientos Sub, Function, Property y Operator, además de temas avanzados como procedimientos
recursivos y sobrecargados.
Flujo de control en Visual Basic
Muestra cómo regular el flujo de la ejecución del programa.
Secciones relacionadas
Programación orientada a objetos en Visual Basic
Está dedicado a la programación orientada a objetos, incluidas las clases e interfaces, la creación de objetos, eventos y
delegados, las herencias y los grupos de objetos.
Referencia de Visual Basic
Proporciona información de referencia sobre distintos aspectos de programación en Visual Basic.
Conceptos del lenguaje Visual Basic

Visual Studio y .NET Framework


Visual Basic se diseña en torno a .NET Framework, que ayuda a proporcionar seguridad, administración de memoria, control de
versiones y compatibilidad de implementación. .NET Framework también habilita la interoperabilidad entre los objetos creados
con cualquier lenguaje de programación de .NET Framework. Esto significa que se pueden crear objetos con Visual Basic que
después podrán utilizarse fácilmente en otros lenguajes de .NET Framework, y que se pueden utilizar objetos de otros
lenguajes de .NET Framework de la misma manera en que se utilizan los objetos creados con Visual Basic.
En esta sección
Ensamblados
Define los ensamblados y describe cómo se utilizan.
Referencias y la instrucción Imports
Explica cómo hacer referencia a objetos de otros ensamblados.
Espacios de nombres en Visual Basic
Explica la forma en que los espacios de nombres organizan los objetos contenidos en ensamblados.
Atributos en Visual Basic
Explica la forma en que los atributos de .NET Framework proporcionan información adicional sobre las entidades definidas
en una aplicación de Visual Basic.
Secciones relacionadas
Cómo: Agregar o quitar referencias en Visual Studio
Explica el proceso que hay que seguir para agregar referencias, de modo que pueda escribir código que trabaje con
componentes externos, y describe la forma de quitar referencias innecesarias.
Información general y conceptual sobre .NET Framework
Presenta la arquitectura de .NET Framework y sus componentes.
Cambios en el lenguaje para usuarios de Visual Basic 6.0
Proporciona una lista y descripciones de los elementos del lenguaje modificados.
Conceptos del lenguaje Visual Basic

Ensamblados
Los ensamblados componen la unidad fundamental de implementación, control de versiones, reutilización, ámbito de
activación y permisos de seguridad en una aplicación basada en .NET. Los ensamblados adoptan la forma de un archivo
ejecutable (.exe) o un archivo de biblioteca de vínculos dinámicos (.dll), y constituyen unidades de creación de .NET Framework.
Proporcionan a Common Language Runtime la información que necesita para estar al corriente de las implementaciones de
tipos. Un ensamblado puede entenderse como una colección de tipos y recursos que forman una unidad lógica de
funcionalidad y que se generan para trabajar conjuntamente.
En Visual Basic, se utiliza el contenido de los ensamblados y se agregan referencias a dichos ensamblados, de forma muy
parecida a como se utilizaban las bibliotecas de tipos en versiones anteriores de Visual Basic. No obstante, lo que distingue a
los ensamblados de los archivos .exe o .dll de versiones anteriores de Windows es que pueden contener toda la información
que antes se encontraba en una biblioteca de tipos, además de información de todo aquello que sea necesario para utilizar la
aplicación o el componente.
Manifiesto del ensamblado
Todos los ensamblados contienen un manifiesto del ensamblado. Éste es similar a una tabla de contenido, y contiene la
siguiente información:
La identidad del ensamblado (nombre y versión).
Una tabla de archivos que describe el resto de archivos que componen el ensamblado, por ejemplo, otros ensamblados
creados por el usuario de los que dependa el archivo .exe o .dll, e incluso archivos de mapa de bits o archivos Léame.
Una lista de referencias de ensamblado, es decir, una lista de todas las dependencias externas, archivos .dll u otros
archivos necesarios para la aplicación que otros usuarios hayan podido crear. Las referencias de ensamblado contienen
referencias a objetos globales y privados. Los objetos globales residen en la caché de ensamblados global, un área
disponible para otras aplicaciones, parecida al directorio System32. El espacio de nombres Microsoft.VisualBasic es un
ejemplo de un ensamblado en la caché de ensamblados global. Los objetos privados deben encontrarse en un directorio
del mismo nivel o inferior al directorio de instalación de la aplicación.
Dado que los ensamblados contienen información del contenido, la versión y las dependencias, las aplicaciones que se crean
con Visual Basic no dependen de los valores del Registro para que funcionen correctamente. Los ensamblados reducen los
conflictos de los archivos DLL y hacen que las aplicaciones sean más seguras y más fáciles de implementar. En muchos casos
es posible instalar una aplicación basada en .NET simplemente copiando los archivos de la aplicación en el equipo de destino.
Referencias
Para utilizar un ensamblado, debe agregar una referencia a él, tal como se describe en
Cómo: Agregar o quitar referencias en Visual Studio. Luego, utiliza la instrucción Imports para elegir el espacio de nombres de
los elementos que desea utilizar, tal como se describe en Referencias y la instrucción Imports. Una vez que se haya hecho
referencia a un ensamblado y se haya importado, todas las clases, propiedades, métodos y otros miembros accesibles de su
espacio de nombres están disponibles para la aplicación como si su código formara parte del archivo de código fuente. Un
ensamblado individual puede contener varios espacios de nombres, y cada espacio de nombres puede contener una
agrupación de elementos distinta, incluidos otros espacios de nombres.
Para obtener información sobre cómo crear ensamblados, vea Cómo: Crear y utilizar ensamblados.
Vea también
Tareas
Cómo: Crear y utilizar ensamblados
Cómo: Agregar o quitar referencias en Visual Studio
Cómo: Ver el contenido de un ensamblado
Referencia
Imports (Instrucción)
Microsoft.VisualBasic
Conceptos
Espacios de nombres en Visual Basic
Referencias y la instrucción Imports
Otros recursos
Ensamblados en Common Language Runtime
Cambios en el lenguaje para usuarios de Visual Basic 6.0
Conceptos del lenguaje Visual Basic

Cómo: Crear y utilizar ensamblados


Un ensamblado está formado por uno o más archivos .exe o .dll que componen una aplicación de Visual Studio. Los
ensamblados se crean de forma automática cuando se compilan archivos de código fuente de Visual Basic.
Nota
Los cuadros de diálogo y comandos de menú que se ven pueden diferir de los descritos en la Ayuda, dependiendo de los val
ores de configuración o de edición activos. Para cambiar la configuración, elija la opción Importar y exportar configuracio
nes en el menú Herramientas. Para obtener más información, vea Valores de configuración de Visual Studio.

Para crear un ensamblado


Para compilar la aplicación, haga clic en Generar en el menú Generar o bien genérela desde la línea de comandos,
mediante el compilador de la línea de comandos. Para obtener información detallada sobre la generación de
ensamblados desde la línea de comandos, vea Generar desde la línea de comandos (Visual Basic).
Para agregar una referencia a otro ensamblado
Haga clic en el comando Agregar referencia del menú Proyecto y seleccione el ensamblado que desee usar. Para
obtener información detallada, vea Cómo: Agregar o quitar referencias en Visual Studio.
Para utilizar objetos en otro ensamblado
Especifique el nombre completo del objeto o utilice un alias que se haya definido para el objeto por medio de una
instrucción Imports. Para obtener información detallada acerca de los nombres completos, vea
Espacios de nombres en Visual Basic. Para obtener información detallada sobre la adición de referencias y la utilización
de la instrucción Imports, vea Referencias y la instrucción Imports.
Vea también
Tareas
Cómo: Agregar o quitar referencias en Visual Studio
Cómo: Ver el contenido de un ensamblado
Referencia
Imports (Instrucción)
Conceptos
Ensamblados
Crear ensamblados
Espacios de nombres en Visual Basic
Referencias y la instrucción Imports
Otros recursos
Ensamblados en Common Language Runtime
Cambios en el lenguaje para usuarios de Visual Basic 6.0
Generar desde la línea de comandos (Visual Basic)
Conceptos del lenguaje Visual Basic

Referencias y la instrucción Imports


Para que el proyecto pueda disponer de objetos externos, seleccione el comando Agregar referencia del menú Proyecto. Las
referencias en Visual Basic pueden apuntar a ensamblados, que son similares a las bibliotecas de tipos, pero contienen más
información que éstas.
Instrucción Imports
Los ensamblados incluyen uno o varios espacios de nombres. Cuando se agrega una referencia a un ensamblado, también
puede agregarse una instrucción Imports a un módulo para controlar la visibilidad de los espacios de nombres del
ensamblado dentro del módulo. La instrucción Imports proporciona un contexto de control de ámbito que permite utilizar
solamente la parte del espacio de nombres necesaria para suministrar una referencia única.
La instrucción Imports tiene la siguiente sintaxis:
Imports [| Aliasname =] Namespace
Aliasname hace referencia a un nombre corto que se puede utilizar dentro del código para referirse a un espacio de nombres
importado. Namespace es un espacio de nombres disponible mediante una referencia de proyecto, una definición dentro del
proyecto o una instrucción Imports anterior.
Un módulo puede contener cualquier número de instrucciones Imports. Éstas deben aparecer detrás de las instrucciones
Option, si hay alguna, pero antes de cualquier otro código.
Nota
No hay que confundir las referencias de proyecto con las instrucciones Imports o Declare. Las referencias de proyecto pone
n los objetos externos, como los objetos de ensamblados, a disposición de los proyectos de Visual Basic. La instrucción Impo
rts se utiliza para simplificar el acceso a las referencias de proyecto, pero no facilita el acceso a dichos objetos. La instrucción
Declare se utiliza para declarar una referencia a un procedimiento externo de una biblioteca de vínculos dinámicos (DLL).

Utilizar alias con la instrucción Imports


La instrucción Imports facilita el acceso a los métodos de clases porque elimina la necesidad de escribir explícitamente los
nombres completos de las referencias. Los alias permiten asignar un nombre más descriptivo a una sola parte de un espacio
de nombres. Por ejemplo, la secuencia retorno de carro y avance de línea, que permite mostrar un texto en varias líneas, forma
parte del módulo Módulo ControlChars (Visual Basic) del espacio de nombres Microsoft.VisualBasic. Para utilizar esta
constante en un programa que no tenga un alias, debe escribir el siguiente fragmento de código:
VB
MsgBox("Some text" & Microsoft.VisualBasic.ControlChars.CrLf _
& "Some more text")

Las instrucciones Imports deben aparecer siempre en las primeras líneas, inmediatamente después de cualquier instrucción
Option de un módulo. El fragmento de código siguiente muestra cómo se importa y se asigna un alias al módulo
Microsoft.VisualBasic.ControlChars:
VB
Imports CtrlChrs = Microsoft.VisualBasic.ControlChars

Las referencias que después se hagan a este espacio de nombres pueden ser mucho más breves:
VB
MsgBox("Some text" & CtrlChrs.CrLf & "Some more text")

Si una instrucción Imports no incluye un nombre de alias, los elementos definidos en el espacio de nombres importado
pueden utilizarse en el módulo sin calificación. Si se especifica el nombre del alias, debe utilizarse como calificador de los
nombres contenidos en dicho espacio de nombres.
Vea también
Tareas
Cómo: Agregar o quitar referencias en Visual Studio
Cómo: Crear y utilizar ensamblados
Referencia
Imports (Instrucción)
Módulo ControlChars (Visual Basic)
Microsoft.VisualBasic
Conceptos
Espacios de nombres en Visual Basic
Ensamblados
Otros recursos
Cambios en el lenguaje para usuarios de Visual Basic 6.0
Conceptos del lenguaje Visual Basic

Espacios de nombres en Visual Basic


Los espacios de nombres organizan los objetos definidos en un ensamblado. Un ensamblado puede contener varios espacios
de nombres; éstos, a su vez, pueden contener otros espacios de nombres. Los espacios de nombres evitan las ambigüedades y
simplifican las referencias cuando se utilizan grupos grandes de objetos, como bibliotecas de clases.
Por ejemplo, .NET Framework define la clase ListBox en el espacio de nombres System.Windows.Forms. El fragmento de
código siguiente muestra cómo se puede declarar una variable utilizando el nombre completo de esta clase:
VB
Dim LBox As System.Windows.Forms.ListBox

Evitar los conflictos de nombres


Los espacios de nombres de .NET Framework resuelven un problema que a veces se denomina contaminación de espacios de
nombres y que consiste en los obstáculos con que tropieza el desarrollador de una biblioteca de clases debido al uso de
nombres similares en otra biblioteca. Estos conflictos con componentes existentes a veces se denominan conflictos de
nombres.
Por ejemplo, si crea una nueva clase denominada ListBox, podrá utilizarla en el propio proyecto sin necesidad de calificación.
No obstante, si desea utilizar la clase ListBox de .NET Framework en el mismo proyecto, deberá utilizar una referencia
completa para que sea única. Si la referencia no es única, Visual Basic genera un error que indica que el nombre es ambiguo.
En el ejemplo de código siguiente se muestra cómo declarar objetos de este tipo:
VB
' Define a new object based on your ListBox class.
Dim LBC As New ListBox
' Define a new Windows.Forms ListBox control.
Dim MyLB As New System.Windows.Forms.ListBox

La siguiente ilustración muestra dos jerarquías de espacios de nombres; ambas contienen un objeto denominado ListBox.

De forma predeterminada, todos los archivos ejecutables creados con Visual Basic contienen un espacio de nombres cuyo
nombre es el mismo que el del proyecto. Por ejemplo, si se define un objeto en un proyecto denominado ListBoxProject, el
archivo ejecutable, ListBoxProject.exe, contendrá un espacio de nombres denominado ListBoxProject.
Los ensamblajes múltiples pueden utilizar el mismo espacio de nombres. Visual Basic los trata como un conjunto único de
nombres. Por ejemplo, pueden definirse clases para un espacio de nombres denominado SomeNameSpace en un ensamblado
denominado Assemb1, y definirse clases adicionales para el mismo espacio de nombres desde un ensamblado denominado
Assemb2.

Nombres completos
Los nombres completos son referencias de objetos que llevan como prefijo el nombre del espacio de nombres en el que está
definido el objeto. Si se crea una referencia a la clase (por medio del comando Agregar referencia del menú Proyecto) se
pueden utilizar objetos definidos en otros proyectos y, después, utilizar el nombre completo del objeto en el código. En el
fragmento de código siguiente se muestra cómo utilizar el nombre completo para un objeto del espacio de nombres de otro
proyecto:
VB
Dim LBC As New ListBoxProject.Form1.ListBox

Los nombres completos evitan los conflictos de nombres porque permiten al compilador determinar qué objeto se utiliza. No
obstante, los nombres pueden llegar a ser largos y complicados. Para solucionar este problema, puede utilizar la instrucción
Imports para definir un alias, es decir, un nombre abreviado que sustituya al nombre completo. Por ejemplo, en el código
siguiente se crean alias para dos nombres completos y se utilizan para definir dos objetos.
VB
Imports LBControl = System.Windows.Forms.ListBox
Imports MyListBox = ListBoxProject.Form1.ListBox

VB
Dim LBC As LBControl
Dim MyLB As MyListBox

Si utiliza la instrucción Imports sin un alias, puede utilizar todos los nombres del espacio de nombres sin calificación, a
condición de que sean únicos en el proyecto. Si el proyecto contiene instrucciones Imports para espacios de nombres que
contienen elementos con el mismo nombre, deberá usar nombres completos. Supongamos, por ejemplo, que el proyecto
contiene estas instrucciones Imports:
VB
' This namespace contains a class called Class1.
Imports MyProj1
' This namespace also contains a class called Class1.
Imports MyProj2

Si intenta utilizar Class1 sin que su nombre sea completo, Visual Basic genera un error para indicar que el nombre Class1 es
ambiguo.
Instrucciones en el nivel de espacio de nombres
Dentro de un espacio de nombres pueden definirse elementos como los módulos, interfaces, clases, delegados,
enumeraciones, estructuras y otros espacios de nombres. Los elementos no se pueden definir como propiedades,
procedimientos, variables y eventos en el nivel de espacio de nombres. Estos elementos se deben declarar dentro de los
contenedores como módulos, estructuras o clases.
Nota
Si ha definido una jerarquía anidada de espacios de nombres, el código de esta jerarquía puede tener el acceso bloqueado a l
as clases de otros espacios de nombres con el mismo nombre. Por ejemplo, si define un espacio de nombres denominado Sy
stem dentro de un espacio de nombres denominado SpecialSpace, los miembros del espacio de nombres System de .NET F
ramework no estarán accesibles a menos que asigne nombres completos a los miembros utilizando la palabra clave Global.
Para obtener más información, vea Global.

Vea también
Tareas
Cómo: Crear y utilizar ensamblados
Referencia
Global
Imports (Instrucción)
ListBox
System.Windows.Forms
Conceptos
Ensamblados
Referencias y la instrucción Imports
Otros recursos
Cambios en el lenguaje para usuarios de Visual Basic 6.0
Conceptos del lenguaje Visual Basic

Atributos en Visual Basic


Los atributos son etiquetas de tipo palabra clave en las que puede especificar información adicional sobre entidades definidas
en aplicaciones de Visual Basic. Los atributos, que se guardan con metadatos de ensamblados, anotan elementos de
programación como tipos, campos, métodos y propiedades. Otras aplicaciones, como los compiladores de Visual Basic o
ASP.NET, pueden hacer referencia a la información en atributos para determinar cómo deberían utilizarse los objetos.
Las secciones siguientes proporcionan más información sobre los atributos y sobre cómo se definen, se aplican y se recuperan.
En esta sección
Información general sobre los atributos de Visual Basic
Proporciona información sobre los atributos, su funcionalidad y sus características.
Atributos utilizados en Visual Basic
Muestra algunos de los atributos de uso más frecuente en Visual Basic.
Usos comunes de los atributos
Describe algunas de las formas más comunes en las que se utilizan los atributos.
Aplicación de los atributos
Describe cómo se aplican los atributos a los elementos de programa.
Atributos globales de Visual Basic
Proporciona información sobre atributos que se aplican a módulos o ensamblados.
Atributos personalizados en Visual Basic
Muestra la forma de definir atributos propios.
Secciones relacionadas
Programación orientada a objetos en Visual Basic
Proporciona información sobre la programación orientada a objetos y la forma de utilizarla.
Metadatos y componentes autodescriptivos
Proporciona información detallada sobre los tipos de metadatos utilizados en Visual Studio, incluidos los atributos.
Conceptos del lenguaje Visual Basic

Información general sobre los atributos de Visual Basic


Los atributos son etiquetas descriptivas que proporcionan información adicional sobre elementos de programación como
tipos, campos, métodos y propiedades. Otras aplicaciones, como el compilador de Visual Basic, pueden hacer referencia a la
información adicional en atributos para determinar cómo pueden utilizarse estos elementos.
Atributos y metadatos
Los atributos se guardan con los metadatos de ensamblados de Visual Basic. Los metadatos son información que describe
todos los elementos administrados por el motor en tiempo de ejecución. Esto incluye información necesaria para depurar y
recolectar elementos no utilizados, así como atributos de seguridad, datos de cálculo de referencias, clases extendidas y
definiciones de miembros, enlace de versiones y cualquier otra información que requiere el motor en tiempo de ejecución.
Con los atributos, puede especificar los metadatos casi del mismo modo en que utiliza palabras clave como Public y Private
para proporcionar información sobre niveles de acceso. No obstante, a diferencia de las palabras clave, la mayoría de los
atributos no son específicos del lenguaje. Mediante los atributos, puede ampliar las capacidades del lenguaje Visual Basic sin
necesidad de cambios en el compilador.
Los lenguajes .NET Framework y Visual Basic definen muchos atributos útiles y puede definir sus propios atributos
personalizados que sean significativos para su aplicación. Los atributos personalizados se basan en la clase System.Attribute y
utilizan el atributo AttributeUsageAttribute para proporcionar información adicional sobre cómo se puede utilizar el atributo.
Funcionalidad y capacidades de los atributos
Algunos puntos clave sobre atributos incluyen:
Se puede aplicar uno o más atributos a todos los ensamblados, módulos o elementos de programa más pequeños, como
las clases y las propiedades.
Los atributos pueden aceptar argumentos del mismo modo que los métodos y las propiedades.
El proceso de recuperar metadatos de los atributos se denomina reflexión. La reflexión implica el uso de herramientas
que permite a los objetos recuperar y examinar metadatos acerca de sus propios miembros. Para obtener más
información, vea Ejemplo de reflexión.
Vea también
Tareas
Cómo: Definir atributos propios
Referencia
AttributeUsageAttribute
System.Attribute
Conceptos
Usos comunes de los atributos
Aplicación de los atributos
Atributos globales de Visual Basic
Atributos utilizados en Visual Basic
Atributos y compatibilidad en tiempo de diseño
Otros recursos
Atributos personalizados en Visual Basic
Conceptos del lenguaje Visual Basic

Atributos utilizados en Visual Basic


En la tabla siguiente se muestran algunos de los atributos más comunes de Visual Basic. Para obtener información sobre un
atributo específico, escriba el nombre del atributo en el cuadro Índice o Buscar del sistema de ayuda.
Atributo Finalidad
ComClassAttribute (Clase) Indica al compilador que la clase debe exponerse como un objeto COM. Específico de Visua
l Basic.

HideModuleNameAttribute (Clase) Permite tener acceso a los miembros de módulo utilizando sólo la calificación necesaria pa
ra el módulo.

VBFixedStringAttribute (Clase) Especifica el tamaño de una cadena de longitud fija en una estructura para utilizarla con fu
nciones de entrada y salida de archivos. Específico de Visual Basic.

VBFixedArrayAttribute (Clase) Especifica el tamaño de una matriz de tamaño fijo en una estructura para utilizarla con func
iones de entrada y salida de archivos. Específico de Visual Basic.

WebMethodAttribute Hace que se pueda llamar a un método mediante el protocolo SOAP. Se utiliza en servicios
Web XML

SerializableAttribute Indica que se puede serializar una clase

MarshalAsAttribute Determina cómo debe calcularse la referencia de un parámetro entre código administrado
de Visual Basic y código no administrado, como una API de Windows. Se utiliza en Commo
n Language Runtime.

AttributeUsageAttribute Especifica cómo se puede utilizar un atributo

DllImportAttribute Indica que el método con atributos se implementa como una exportación de un archivo DL
L no administrado.

Atributos específicos de Visual Basic


Tres atributos son específicos de Visual Basic: COMClassAttribute, VBFixedStringAttribute y VBFixedArray.
COMClassAttribute
Use COMClassAttribute para simplificar el proceso de creación de componentes COM desde Visual Basic. Los objetos COM
son considerablemente distintos de los ensamblados de .NET Framework y, sin COMClassAttribute, debe seguir varios pasos
para generar un objeto COM de Visual Basic. Para las clases marcadas con COMClassAttribute, el compilador ejecuta muchos
de estos pasos automáticamente.
HideModuleNameAttribute
Utilice HideModuleNameAttribute para permitir el acceso a los miembros de módulo utilizando sólo la calificación
necesaria para el módulo.
VBFixedStringAttribute
Utilice VBFixedStringAttribute para obligar a Visual Basic a crear una cadena de longitud fija. Las cadenas son de longitud
variable de forma predeterminada y este atributo resulta útil cuando se almacenan cadenas en archivos. El código siguiente
describe esto:
VB
Structure Worker
' The runtime uses VBFixedString to determine
' if the field should be written out as a fixed size.
<VBFixedString(10)> Public LastName As String
<VBFixedString(7)> Public Title As String
<VBFixedString(2)> Public Rank As String
End Structure

VBFixedArrayAttribute
Utilice VBFixedArrayAttribute para declarar matrices de tamaño fijo. Igual que las cadenas de Visual Basic, las matrices son
de longitud variable de forma predeterminada. Este atributo resulta de utilidad cuando se serializan o se escriben datos a
archivos.
Vea también
Referencia
ComClassAttribute (Clase)
VBFixedArrayAttribute (Clase)
VBFixedStringAttribute (Clase)
System.Runtime.InteropServices
Conceptos
Atributos globales de Visual Basic
Aplicar atributos
Recuperar información almacenada en atributos
Escribir atributos personalizados
Otros recursos
Extender metadatos mediante atributos
Conceptos del lenguaje Visual Basic

Usos comunes de los atributos


Al utilizar la biblioteca Common Language Runtime (CLR) y las bibliotecas de clases, es probable que tenga que utilizar
atributos en algún momento. La lista siguiente incluye algunos usos comunes de los atributos en el código:
Marcar métodos con el atributo WebMethod en los servicios Web XML para indicar que se podrán llamar con el
protocolo SOAP. Para obtener más información, consulte WebMethodAttribute.
Describir cómo calcular referencias de parámetros a método cuando se interopera con código nativo. Para obtener más
información, consulte MarshalAsAttribute.
Describir las propiedades COM para clases, métodos e interfaces.
Marcar componentes como COM para que el compilador de Visual Basic genere el código adicional necesario para crear
un componente COM. Para obtener más información, consulte ComClassAttribute.
Llamar a código no administrado mediante la clase DllImportAttribute.
Describir los ensamblados en cuanto a título, versión, descripción o marca.
Describir qué miembros de una clase hay que serializar para la persistencia.
Describir cómo realizar asignaciones entre miembros de clases y nodos XML para la serialización de XML.
Describir los requisitos de seguridad para métodos.
Especificar las características utilizadas para reforzar la seguridad.
Controlar optimizaciones mediante el compilador just-in-time (JIT) para que el código se conserve sencillo para depurar.
Puede utilizar atributos de muchas formas adicionales, además de crear atributos personalizados.
Vea también
Tareas
Cómo: Definir atributos propios
Conceptos
Atributos y compatibilidad en tiempo de diseño
Información general sobre los atributos de Visual Basic
Aplicación de los atributos
Atributos globales de Visual Basic
Atributos utilizados en Visual Basic
Otros recursos
Atributos personalizados en Visual Basic
Conceptos del lenguaje Visual Basic

Aplicación de los atributos


Puede aplicar atributos agregando bloques de atributos a elementos de programa como propiedades, métodos, eventos, clases
y ensamblados. Un bloque de atributos consta de una lista de declaraciones de atributos separados por comas escrita entre
corchetes angulares ("< >"). Una declaración de atributo consta de un modificador de atributo opcional, como Module o
Assembly, un nombre de atributo, una lista (posiblemente sobrecargada) de parámetros por posición necesarios y una lista de
argumentos con nombre opcionales. Debe colocar atributos con modificadores en una sección de atributos, al principio de un
archivo de código fuente. En el siguiente ejemplo el código establece un atributo de ensamblado que define un título para el
ensamblado y un atributo de módulo que indica que el módulo es compatible con CLS (especificación de lenguaje común):
VB
Imports System.Reflection
<Assembly: AssemblyTitleAttribute("Production assembly 4"), _
Module: CLSCompliant(True)>

Los atributos de ensamblado también se pueden aplicar mediante el archivo AssemblyInfo.vb, que se agrega a los proyectos
automáticamente mediante la interfaz de usuario de Visual Studio. Este archivo contiene atributos de ensamblado con valores
predeterminados o vacíos.
Cuando se aplican a elementos de programa como las propiedades, los atributos preceden al elemento. Por ejemplo, el código
siguiente aplica atributos a una definición de clase:
VB
<CustomAttr(Update:=True)> Class Class1

Por convención, todos los nombres de atributo finalizan con la palabra "Attribute" para distinguirlos de otros elementos de
.NET Framework. No obstante, no tiene que especificar el sufijo de atributo cuando utiliza atributos. Por ejemplo, si tiene un
atributo denominado CustomAttrAttribute, la especificación de <CustomAttr(Update:=True)> equivale a especificar
<CustomAttrAttribute(Update:=True)>.

Argumentos de atributos
Los atributos utilizan argumentos opcionales, necesarios, por posición y por nombre casi del mismo modo en que los objetos
utilizan estos tipos de argumentos. Los argumentos por posición son aquellos que se especifican en el orden en que se
declararon para el constructor de un atributo. Por ejemplo, el código siguiente llama al constructor Sub New de un atributo
con dos valores:
VB
<CustomAttr(True, False)> Class Class1

Los argumentos que se pasan a Sub New en clases de atributos se suelen usar para inicializar los valores de campos y
propiedades.
Puede utilizar argumentos con nombre para establecer directamente los valores de propiedades y campos. Para especificar los
argumentos con nombre se anexa ":=" al nombre del argumento, seguido del valor que se está especificando. A diferencia de
los argumentos por posición, es posible especificar argumentos con nombre en cualquier orden. Por ejemplo, el código
siguiente establece el valor True para el campo Update y False para el campo Keep:
VB
<CustomAttr(Update:=True, Keep:=False)> Class Class1

Nota
Existe una importante diferencia entre los argumentos de atributo y los argumentos utilizados con las llamadas a métodos es
tándar. Debe utilizar argumentos por posición para los argumentos que se utilizan con el constructor Sub New de clases de
atributos. Sólo es posible utilizar argumentos con nombre para establecer los valores de los campos y propiedades de las cla
ses de atributos.

Los argumentos necesarios son los que siempre se deben especificar. Los argumentos opcionales son los que se pueden omitir
utilizando una coma como marcador de posición cuando se utilizan argumentos por posición o simplemente omitirse cuando
se utilizan argumentos con nombre.
Los argumentos de los atributos deben ser expresiones constantes.
Ejemplos de atributos
Los siguientes procedimientos proporcionan ejemplos de declaraciones de atributos:
Para utilizar el atributo MarshalAs para controlar cómo se calcula la referencia de los parámetros
1. Agregue una instrucción Imports para el espacio de nombres System.Runtime.InteropServices al principio del código
fuente:
VB
Imports System.Runtime.InteropServices

2. Indique como prefijo de los parámetros el atributo MarshalAsAttribute y especifique el tipo de datos que requiere el
destino. Por ejemplo, el código siguiente calcula referencias de dos parámetros como un puntero long de tipo de datos a
una cadena (LPStr) de una función de la API de Windows:
VB
Declare Auto Sub CopyFile Lib "Kernel32.Lib" ( _
<MarshalAs(UnmanagedType.LPStr)> ByVal existingfile As String, _
<MarshalAs(UnmanagedType.LPStr)> ByVal newfile As String, _
ByVal failifexists As Boolean _
)

Common Language Runtime utiliza el atributo MarshalAsAttribute para determinar cómo debería calcularse la referencia de
un parámetro entre el código administrado de Visual Basic y el código no administrado de una llamada a la API de Windows.
Para exponer un método a clientes Web remotos
1. En el menú Archivo, haga clic en Proyecto, seleccione la plantilla Servicio Web ASP.NET y agregue una instrucción
Imports para el espacio de nombres System.Web:
VB
Imports System.Web.Services

2. Defina un método y utilice el atributo WebMethodAttribute para hacer que el método se pueda llamar desde clientes
Web remotos:
VB
<WebMethod()> Public Function HelloWorld() As String
HelloWorld = "Hello World..."
End Function
No es suficiente que un método de un servicio Web XML sea Public para exponerlo a clientes Web. Debe aplicar
explícitamente el atributo WebMethodAttribute a un método antes de poder llamarlo mediante un cliente Web remoto.
Vea también
Tareas
Cómo: Definir atributos propios
Referencia
Imports (Instrucción)
WebMethodAttribute
MarshalAsAttribute
System.Web
Conceptos
Información general sobre los atributos de Visual Basic
Usos comunes de los atributos
Pasar argumentos por posición o por nombre
Otros recursos
Atributos personalizados en Visual Basic
Conceptos del lenguaje Visual Basic

Atributos globales de Visual Basic


La mayoría de atributos se anexan a elementos específicos del lenguaje, como las clases o los métodos. Sin embargo, algunos
atributos son globales, es decir, se pueden aplicar a todo un ensamblado o a un módulo completo.
Puede establecer muchos de los atributos dentro del entorno de desarrollo integrado (IDE) de Visual Studio mediante el
Información de ensamblado (Cuadro de diálogo). Para obtener más información, vea
Administrar las propiedades de la aplicación y Administrar la firma de ensamblados y manifiestos.
Atributos de ensamblado
Para especificar atributos de nivel de ensamblado debe utilizar la siguiente sintaxis:

<Assembly: Attribute1, Assembly: Attribute2..., Assembly: AttributeN>

Para especificar atributos de nivel de módulo debe utilizar una sintaxis similar:

<Module: Attribute1, Module: Attribute2..., Module: AttributeN>

Puede colocar los atributos globales en el código fuente a continuación de las directivas de nivel superior, como las
instrucciones Option Explicit e Imports, pero delante de cualquier declaración de tipo o de espacio de nombres. Los atributos
globales pueden aparecer en varios archivos de código fuente de un proyecto, pero se suelen colocar en el archivo
AssemblyInfo.vb creado automáticamente en los proyectos de Visual Basic.
Los atributos de ensamblado son valores que proporcionan información sobre un ensamblado. Se incluyen en las siguientes
categorías:
Atributos de identidad de ensamblado
Atributos de información
Atributos del manifiesto de ensamblado
Atributos del nombre seguro
Atributos de identidad del ensamblado
Tres atributos (con un nombre seguro, si es aplicable) determinan la identidad de un ensamblado: nombre, versión y referencia
cultural. Estos atributos forman el nombre completo del ensamblado y se necesitan cuando se hace referencia a ellos en el
código. Puede establecerse una referencia cultural y una versión de ensamblado utilizando atributos. Sin embargo, el valor del
nombre lo establece el compilador, el IDE de Visual Studio del Información de ensamblado (Cuadro de diálogo) o la
herramienta Assembly Linker (Al.exe) cuando se crea el ensamblado tomando como base el archivo que contiene el manifiesto
de ensamblado. El atributo AssemblyFlagsAttribute especifica si pueden coexistir varias copias del ensamblado.
La tabla siguiente muestra los atributos de identidad:
Atributo Finalidad
AssemblyName Describe completamente la identidad del ensamblado

AssemblyVersionAttribute Especifica la versión del ensamblado.

AssemblyCultureAttribute Especifica la referencia cultural admitida por el ensamblado

AssemblyFlagsAttribute Especifica si un ensamblado admite ejecución conjunta en el mismo equipo, en el mismo proceso o
en el mismo dominio de aplicación

El código siguiente aplica los atributos de versión y referencia cultural a un ensamblado:


VB
'Set version number for assembly.
<Assembly: Reflection.AssemblyVersionAttribute("4.3.2.1")>
'Set culture as German.
<Assembly: Reflection.AssemblyCultureAttribute("de")>

Atributos informativos
Los atributos informativos se pueden usar para proporcionar información adicional del producto o de la compañía sobre un
ensamblado. La tabla siguiente muestra los atributos de información definidos en el espacio de nombres System.Reflection.
Atributo Finalidad
AssemblyProductAttribute Define un atributo personalizado que especifica un nombre de producto para un mani
fiesto de ensamblado

AssemblyTrademarkAttribute Define un atributo personalizado que especifica una marca comercial para un manifie
sto de ensamblado

AssemblyInformationalVersionAttribute Define un atributo personalizado que especifica una versión informativa para un mani
fiesto de ensamblado

AssemblyCompanyAttribute Define un atributo personalizado que especifica un nombre de compañía para un man
ifiesto de ensamblado

AssemblyCopyrightAttribute Define un atributo personalizado que especifica un copyright para un manifiesto de e


nsamblado

AssemblyFileVersionAttribute Indica al compilador que debe utilizar un número de versión específico para el recurs
o de versión de archivo Win32

CLSCompliantAttribute Indica si el ensamblado cumple los requisitos de Common Language Specification (CL
S).
Atributos de manifiesto del ensamblado
Puede utilizar atributos del manifiesto de ensamblado para proporcionar información en el manifiesto del ensamblado,
incluido el título, la descripción, el alias predeterminado y la configuración. La tabla siguiente muestra los atributos del
manifiesto de ensamblado definidos en el espacio de nombres System.Reflection.
Atributo Finalidad
AssemblyTitleAttribute Define un atributo personalizado que especifica un título de ensamblado para un manifiesto
de ensamblado

AssemblyDescriptionAttribute Define un atributo personalizado que especifica una descripción de ensamblado para un man
ifiesto de ensamblado

AssemblyConfigurationAttribute Define un atributo personalizado que especifica una configuración de ensamblado (como ver
sión comercial o de depuración) para un manifiesto de ensamblado

AssemblyDefaultAliasAttribute Define un alias predeterminado descriptivo para un manifiesto de ensamblado


Atributos del nombre seguro
Los nombres seguros son identificadores únicos que protegen la identidad y la integridad de un ensamblado. Puede firmar un
ensamblado desde dentro del IDE de Visual Studio a través de la Página Firma, Diseñador de proyectos. Para obtener más
información, vea Administrar la firma de ensamblados y manifiestos.
También tiene la posibilidad de utilizar atributos de nombre seguro para establecer nombres seguros para ensamblados. La
tabla siguiente muestra los atributos de nombre seguro definidos en el espacio de nombres System.Reflection.
Atributo Finalidad
AssemblyDelaySignAttribute Valor de tipo Boolean que indica si se desea reservar espacio en el archivo ejecutable para la firm
a del nombre seguro, aunque aplazando la firma real a una fase posterior. Para obtener más info
rmación, consulte Retrasar la firma de un ensamblado.

AssemblyKeyFileAttribute Indica el archivo que contiene una clave. La ubicación del archivo de clave (KeyFile) debe ser relat
iva al directorio de resultados del proyecto, que es %Directorio del proyecto%\obj\<configuració
n>. Por ejemplo, si el archivo de clave se encuentra en el directorio del proyecto, debe especificar
el atributo AssemblyKeyFile de la manera siguiente:
[ensamblado: AssemblyKeyFile (".. \\.. \\mykey.snk")]

AssemblyKeyNameAttribute Hace referencia a una clave instalada en el Proveedor de servicios de criptografía (CSP, Crypto Se
rvice Provider) en su equipo. Debe especificar una clave para poder firmar el archivo.

Si se han especificado los valores de KeyFile y KeyName, se realiza el siguiente procesamiento:


Si se puede encontrar el valor de KeyName en el CSP, se usa esa clave.
Si el valor de KeyName no existe y el archivo de clave existe, se instala en el CSP la clave de KeyFile y se utiliza.
Para obtener más información, consulte Consideraciones de seguridad sobre ensamblados.
Firmar ensamblados
Un ensamblado se puede firmar de dos formas diferentes pero complementarias: con un nombre seguro o con firma. Puede
firmar utilizando la Página Firma, Diseñador de proyectos del IDE de Visual Studio o utilizando la
Herramienta Firma de archivos (Signcode.exe). Al firmar un ensamblado con un nombre seguro, se agrega un cifrado mediante
clave pública al archivo que contiene el manifiesto del ensamblado. La firma mediante nombres seguros ayuda a comprobar la
exclusividad del nombre, impide la simulación de nombres y proporciona identidad a los llamadores cuando se resuelve una
referencia. Para obtener más información, vea Administrar la firma de ensamblados y manifiestos y
Cómo: Firmar un ensamblado con un nombre seguro.
Para firmar un ensamblado con un nombre seguro
1. Utilice Herramienta de nombre seguro (Sn.exe) para generar un archivo de claves que contiene un par de claves.
2. Agregue atributos de nombre seguro al archivo AssemblyInfo.vb creado automáticamente en los proyectos de Visual
Basic. Para editar este archivo, haga doble clic en su nombre en el Explorador de soluciones.
El ejemplo siguiente utiliza firma de retardo para crear ensamblados con nombres seguros y un archivo de clave pública
denominado myKey.snk.
VB
<Assembly: Reflection.AssemblyKeyFile("myKey.snk")>
<Assembly: Reflection.AssemblyDelaySign(True)>

Nota
Se omitirán los atributos de ensamblado si no está creando un ensamblado, como cuando compila desde la línea de co
mandos utilizando la opción /target:module.

Vea también
Tareas
Cómo: Definir atributos propios
Cómo: Firmar un ensamblado con un nombre seguro
Referencia
Herramienta de nombre seguro (Sn.exe)
Herramienta Firma de archivos (Signcode.exe)
Página Firma, Diseñador de proyectos
Información de ensamblado (Cuadro de diálogo)
Conceptos
Aplicación de los atributos
Consideraciones de seguridad sobre ensamblados
Otros recursos
Atributos personalizados en Visual Basic
Administrar las propiedades de la aplicación
Administrar la firma de ensamblados y manifiestos
Conceptos del lenguaje Visual Basic

Atributos personalizados en Visual Basic


Los atributos personalizados son aquellos definidos por el usuario que proporcionan información adicional sobre elementos
de programa. Por ejemplo, podría definir un atributo de seguridad personalizado que especifique los permisos necesarios del
proceso que llama para ejecutar un procedimiento.
Puede definir atributos personalizados en clases de atributos basándose en la clase System.Attribute. Las clases de atributos
propiamente dichas utilizan un atributo denominado AttributeUsageAttribute para proporcionar información adicional sobre
cómo se pueden utilizar los atributos. Si especifica Inherited = True, indica que se puede propagar un atributo a clases
derivadas. Si establece la propiedad AllowMultiple en True, podrá aplicar más de una instancia del atributo al elemento de
programa. La enumeración AttributeTargets permite definir qué tipos de elementos de programa se pueden aplicar a sus
atributos.
En el código siguiente, el atributo AttributeUsageAttribute especifica un atributo que se puede aplicar a cualquier tipo de
elemento, heredado y sólo se aplica una vez:
VB
<AttributeUsage(AttributeTargets.All, Inherited:=True, AllowMultiple:=False)> _
Class TestAttribute1
Inherits Attribute
End Class

Puede utilizar el operador Or para combinar varios elementos de la enumeración AttributeTargets, como en el código
siguiente:
VB
<AttributeUsage(AttributeTargets.Class Or AttributeTargets.Method)> _
Class TestAttribute2
Inherits Attribute
End Class

En esta sección
Cómo: Definir atributos propios
Explica cómo crear sus propios atributos utilizando clases de atributos.
Cómo: Recuperar atributos personalizados
Muestra cómo recuperar atributos personalizados mediante GetCustomAttribute u GetCustomAttributes.
Ejemplos sobre el uso de atributos personalizados
Proporciona código de ejemplo que define un atributo personalizado que se puede aplicar sólo a clases y muestra cómo
utilizar el nuevo atributo.
Secciones relacionadas
Visual Studio y .NET Framework
Describe la función de Visual Basic en .NET Framework.
Programación orientada a objetos en Visual Basic
Proporciona información sobre la programación orientada a objetos y la forma de utilizarla.
Metadatos y componentes autodescriptivos
Proporciona información detallada sobre los tipos de metadatos utilizados en Visual Studio, incluidos los atributos.
Conceptos del lenguaje Visual Basic

Cómo: Definir atributos propios


Con las clases de atributo puede crear sus propios atributos personalizados y utilizarlos con los atributos .NET Framework a fin
de proporcionar información adicional sobre los elementos del programa.
Para definir un atributo personalizado
1. Declare una clase y aplique el atributo AttributeUsageAttribute a la nueva clase. El nombre de la clase es el nombre del
nuevo atributo, como se indica en la siguiente línea de código:
VB
<AttributeUsage(AttributeTargets.All)> Class TestAttribute

2. Declare que la clase se hereda de System.Attribute:


VB
Inherits System.Attribute

3. Defina campos Private para almacenar los valores de las propiedades:


VB
Private m_SomeValue As String

4. Si fuera apropiado, cree un constructor para el atributo:


VB
Public Sub New(ByVal Value As String)
m_SomeValue = Value
End Sub

5. Defina métodos, campos y propiedades para el atributo:


VB
Public Sub Attr(ByVal AttrValue As String)
'Add method code here.
End Sub
Public Property SomeValue() As String ' A named parameter.
Get
Return m_SomeValue
End Get
Set(ByVal Value As String)
m_SomeValue = Value
End Set
End Property

6. Finalice la clase con la instrucción End Class:


VB
End Class
Vea también
Referencia
AttributeUsageAttribute
Conceptos
Aplicación de los atributos
Duración de los objetos: cómo se crean y destruyen
Conceptos del lenguaje Visual Basic

Cómo: Recuperar atributos personalizados


Puede recuperar atributos personalizados mediante los métodos GetCustomAttribute o GetCustomAttributes de la clase
Attribute.
Para recuperar una sola instancia de un atributo personalizado de una clase
1. Agregue una instrucción Imports al principio del código fuente para importar la clase Attribute del espacio de nombres
System:
VB
Imports System.Attribute

2. Cree un procedimiento para recuperar el atributo:


VB
Sub RetrieveAttribute()

End Sub

3. Dentro del procedimiento, declare una variable de tipo Attribute y otra del mismo tipo que el atributo que desea
recuperar:
VB
Dim Attr As Attribute
Dim CustAttr As CustomAttribute

4. Utilice el operador GetType para pasar el tipo de la clase y el atributo a una llamada al método GetCustomAttribute, y
después asigne el valor devuelto a la variable declarada como Attribute:
VB
Attr = GetCustomAttribute(Me.GetType, _
GetType(CustomAttribute), False)

5. Utilice la función CType para convertir el tipo de datos del atributo de atributo genérico al específico del tipo que ha
recuperado. Asigne el resultado a la variable declarada como el tipo de atributo personalizado:
VB
CustAttr = CType(Attr, CustomAttribute)

6. Compruebe si se ha recuperado el atributo; si es así, utilice los campos, las propiedades y los métodos del atributo.
VB
If CustAttr Is Nothing Then
MsgBox("The attribute was not found.")
Else
'Get the label and value from the custom attribute.
MsgBox("The attribute label is: " & CustAttr.Label)
MsgBox("The attribute value is: " & CustAttr.Value)
End If
En el ejemplo anterior, el procedimiento RetrieveAttribute llama al método GetCustomAttribute de la clase
System.Attribute para obtener el atributo personalizado aplicado a la clase ThisClass. GetCustomAttribute es un
método compartido, por lo que no necesita crear primero una instancia de System.Attribute. La función CType
convierte el atributo devuelto del tipo System.Attribute al tipo de atributo personalizado CustomAttribute.

Vea también
Tareas
Cómo: Definir atributos propios
Referencia
GetType (Operador)
CType (Función)
IsNothing (Función)
GetAttr (Función)
GetCustomAttribute
GetCustomAttributes
AttributeUsageAttribute
Conceptos
Aplicación de los atributos
Recuperar información almacenada en atributos
Conceptos del lenguaje Visual Basic

Ejemplos sobre el uso de atributos personalizados


El ejemplo siguiente define un atributo personalizado que se puede aplicar sólo a clases:
Ejemplo
VB
<AttributeUsage(AttributeTargets.Class)> Public Class CustomAttribute
Inherits System.Attribute

'Declare two private fields to store the property values.


Private m_LlabelValue As String
Private m_VValueValue As Integer

'The Sub New constructor is the only way to set the properties.
Public Sub New(ByVal _Label As String, ByVal _Value As Integer)
m_LlabelValue = _Label
m_VValueValue = _Value
End Sub

Public ReadOnly Property Label() As String


Get
Return m_LlabelValue
End Get
End Property

Public ReadOnly Property Value() As Integer


Get
Return m_VValueValue
End Get
End Property
End Class

Sólo el constructor de la clase de atributos puede establecer las propiedades definidas en este atributo. El código siguiente
muestra cómo se podría utilizar el atributo.
VB
' Apply the custom attribute to this class.
<Custom("Some metadata", 66)> Class ThisClass
' Add class members here.
End Class

Vea también
Tareas
Cómo: Definir atributos propios
Cómo: Recuperar atributos personalizados
Referencia
AttributeUsageAttribute
Conceptos
Aplicación de los atributos
Recuperar información almacenada en atributos
Conceptos del lenguaje Visual Basic

Cómo: Aplicar varios atributos


Este ejemplo muestra cómo aplicar varios atributos al mismo elemento.
Puede especificar varios atributos en el mismo bloque de atributos separando cada atributo con una coma.
Ejemplo
Este ejemplo muestra cómo aplicar los atributos EditorBrowsableAttribute y ObsoleteAttribute a la misma función.
VB
<System.ComponentModel.EditorBrowsable( _
System.ComponentModel.EditorBrowsableState.Never), _
Obsolete("This method should not be used.")> _
Public Shadows Function Update(ByVal x As Integer) As Integer
' The function code goes here.
End Function

Vea también
Conceptos
Información general sobre los atributos de Visual Basic
Aplicación de los atributos
Otros recursos
Atributos en Visual Basic
Conceptos del lenguaje Visual Basic

Elementos declarados en Visual Basic


Un elemento declarado es un elemento de programación definido en una instrucción de declaración. Los elementos
declarados incluyen variables, constantes, enumeraciones, clases, estructuras, módulos, interfaces, procedimientos, parámetros
de procedimientos, valores devueltos de funciones, referencias a procedimientos externos, operadores, propiedades, eventos y
delegados.
Las instrucciones de declaración incluyen lo siguiente:
Instrucción Dim (Visual Basic)
Instrucción Const (Visual Basic)
Instrucción Enum (Visual Basic)
Instrucción Class (Visual Basic)
Structure (Instrucción)
Module (Instrucción)
Instrucción Interface (Visual Basic)
Instrucción Function (Visual Basic)
Instrucción Sub (Visual Basic)
Declare (Instrucción)
Operator (Instrucción)
Property (Instrucción)
Event (Instrucción)
Delegate (Instrucción)
En esta sección
Nombres de elementos declarados
Describe cómo asignar un nombre a los elementos y cuándo utilizar mayúsculas y minúsculas.
Características de los elementos declarados
Trata algunas características, como el ámbito de los elementos declarados.
Referencias a elementos declarados
Explica cómo el compilador compara una referencia con una declaración, y cómo se califica un nombre.
Secciones relacionadas
Programación orientada a objetos en Visual Basic
Trata los fundamentos de la programación orientada a objetos.
Convenciones de código y estructura de programas
Explica las directrices para facilitar la lectura, la comprensión y el mantenimiento del código.
Instrucciones de declaración en Visual Basic
Describe instrucciones que asignan nombre a procedimientos, variables, matrices y constantes, y los definen.
Contextos de declaración y niveles de acceso predeterminados
Enumera los tipos de elementos declarados y muestra sus correspondientes instrucciones de declaración, en qué contexto se
pueden declarar y su nivel de acceso predeterminado.
Conceptos del lenguaje Visual Basic

Nombres de elementos declarados


Todo elemento declarado tiene un nombre, también denominado identificador, que utiliza el código para hacer referencia a él.
Reglas
Un nombre de elemento en Visual Basic debe observar las reglas siguientes:
Debe comenzar por un carácter alfabético o un signo de subrayado (_).
Sólo puede contener caracteres alfabéticos, dígitos decimales y signos de subrayado.
Debe contener por lo menos un carácter alfabético o un dígito decimal, si empieza con un signo de subrayado.
No puede superar los 1023 caracteres de longitud.
El límite de longitud de 1023 caracteres también se aplica a la cadena completa de un nombre completo, como
outerNamespace.middleNamespace.innerNamespace.thisClass.thisElement.

El ejemplo siguiente muestra algunos nombres de elementos válidos.


aB123__45
_567

El ejemplo siguiente muestra algunos nombres de elementos no válidos. El primero contiene sólo un subrayado, el segundo
comienza con un dígito decimal y el tercero contiene un carácter no válido ($).
' Three INVALID element names
_
12ABC
xyz$wv

Precaución
Los nombres de elementos que empiezan por un carácter de subrayado (_) no forman parte de
Common Language Specification (CLS); por tanto, el código compatible con CLS no puede usar ningún componente que defi
na tales nombres. Sin embargo, un carácter de subrayado en cualquier otra posición de un nombre de elemento es compatib
le con CLS.

Directrices sobre longitud de nombres


A efectos prácticos, su nombre debe ser tan corto como sea posible aunque tiene que identificar claramente la naturaleza del
elemento. Esto mejora la legibilidad de su código y reduce la longitud de línea y el tamaño del archivo de origen.
Por otro lado, su nombre no debe ser tan corto que no describa lo que el elemento representa adecuadamente y cómo lo
utiliza el código. Esto es importante para la legibilidad del código. Si alguien más lo intenta entender o si el propio usuario lo
examina después de mucho tiempo de haberlo escrito, unos nombres de elementos adecuados pueden ahorrar mucho tiempo.
Nombres con escape
En general, el nombre de un elemento no puede coincidir con ninguna de las palabras clave reservadas para Visual Basic, como
Case o Friend. No obstante, puede definir un nombre con escape que se especifica incluido entre corchetes ([ ]). Un nombre
con escape puede coincidir con cualquier palabra clave de Visual Basic, puesto que los corchetes eliminan toda ambigüedad
posible. También puede usar los corchetes en las referencias al nombre en el código.
En general, sólo debe utilizar los nombres con escape cuando:
Su código ha migrado de una versión anterior de Visual Basic que no reservó la palabra clave que está utilizando como
nombre; o
Está trabajando con código escrito en otro lenguaje en el que la palabra clave determinada no está reservada.
De lo contrario, debe considerar cambiar el nombre del elemento si su nombre entra en conflicto con una palabra clave. El
entorno de desarrollo integrado (IDE) proporciona una manera fácil de hacer esto. Para obtener más información, consulte
Cómo: Cambiar el nombre de un identificador.
Distinguir mayúsculas de minúsculas en los nombres
Los nombres de elementos en Visual Basic no distinguen entre mayúsculas y minúsculas. Es decir, cuando el compilador
compara dos nombres cuya única diferencia está en letras mayúsculas o minúsculas, los interpreta como el mismo nombre.
Por ejemplo, ABC y abc hacen referencia al mismo elemento declarado.
No obstante, Common Language Runtime (CLR) utiliza enlaces que sí tienen en cuenta esta distinción. Por lo tanto, cuando
genere un ensamblado o una DLL que pueda estar disponible para otros ensamblados, sus nombres sí se distinguirán por sus
mayúsculas o minúsculas. Por ejemplo, si define una clase que tiene un elemento denominado ABC, y otros ensamblados
utilizan la clase por medio de Common Language Runtime, deberán hacer referencia al elemento como ABC. Si,
posteriormente, vuelve a compilar la clase y cambia el nombre del elemento a abc, los otros ensamblados que utilicen la clase
ya no tendrán acceso a este elemento. Por lo tanto, cuando se lance una versión actualizada de un ensamblado, no se deben
cambiar las mayúsculas o minúsculas de los elementos públicos.
Nombres y configuraciones regionales
La comparación de nombres es independiente de la configuración regional. Si dos nombres coinciden en una configuración
regional, se garantiza que coincidirán en todas las configuraciones regionales.
Vea también
Conceptos
Características de los elementos declarados
Instrucciones de declaración en Visual Basic
Otros recursos
Elementos declarados en Visual Basic
Referencias a elementos declarados
Conceptos del lenguaje Visual Basic

Características de los elementos declarados


Una característica de un elemento declarado es un aspecto del elemento que afecta a la forma de interactuar del código con él.
Cada elemento declarado tiene una o varias de las siguientes características asociadas a él:
Tipo de datos: valores que el elemento puede contener y cómo almacena esos valores. Para obtener más información,
consulte Resumen de tipos de datos (Visual Basic).
Período de duración: período en tiempo de ejecución durante el cual el elemento está disponible para su uso. Para
obtener más información, consulte Cómo: Prolongar la duración de una variable.
Ámbito: conjunto de código que puede hacer referencia al elemento sin calificar su nombre. Para obtener más
información, consulte Cómo: Controlar el ámbito de una variable.
Nivel de acceso: permiso otorgado al código para hacer uso del elemento. Para obtener más información, consulte
Cómo: Controlar la disponibilidad de una variable.
Características de los elementos
La tabla siguiente muestra los elementos declarados y las características que se les aplican.
Elemento Tipo de datos Período de duración Ámbito 1 Nivel de acceso
Variable Sí Sí Sí Sí

Constante Sí No Sí Sí

Enumeración Sí No Sí Sí

Estructura No No Sí Sí

Propiedad Sí Sí Sí Sí

Método No Sí Sí Sí

Procedimiento (Sub o Function) No Sí Sí Sí

Parámetro de procedimiento Sí Sí Sí No

Valor devuelto de función Sí Sí Sí No

Operador Sí No Sí Sí

Interfaz No No Sí Sí

Clase No No Sí Sí

Evento No No Sí Sí

Delegado No No Sí Sí

1 A veces, se hace referencia al ámbito como visibilidad.

Vea también
Conceptos
Nombres de elementos declarados
Período de duración en Visual Basic
Ámbito en Visual Basic
Niveles de acceso en Visual Basic
Tipos de datos en Visual Basic
Declaración de variable en Visual Basic
Otros recursos
Elementos declarados en Visual Basic
Referencias a elementos declarados
Conceptos del lenguaje Visual Basic

Período de duración en Visual Basic


El período de duración de un elemento declarado es el tiempo durante el cual está disponible para el uso. Las variables son los
únicos elementos que tienen un período de duración. Para este propósito, el compilador trata los parámetros de
procedimiento y la función vuelve como un caso especial de variable. El período de duración de una variable representa el
tiempo durante el cual puede contener un valor. Su valor puede variar en su período de duración, pero siempre contiene un
valor.
Períodos de duración diferentes
Una variable miembro (declarada en el nivel de módulo, fuera de cualquier procedimiento) tiene el mismo período de
duración normalmente que el elemento en el que se declara. Una variable no compartida declarada en una clase o estructura
existe como copia separada para cada instancia de la clase o estructura en la que se declara. Este tipo de variable tiene el
mismo período de duración que su instancia. No obstante, una variable Shared sólo tiene un período de duración, que es el
tiempo completo de ejecución de la aplicación.
Una variable local (declarada dentro de un procedimiento) sólo existe mientras el procedimiento en el que se declara está en
ejecución. Esto también es aplicable a los parámetros del procedimiento y a cualquier valor devuelto de función. No obstante,
si el procedimiento llama a otros procedimientos, las variables locales conservan su valor durante la ejecución de los últimos.
Comienzo del período de duración
El período de duración de una variable local empieza con el control del procedimiento en el que se declara. Las variables
locales se inicializan con el valor predeterminado de su tipo de datos en el momento en que empieza la ejecución del
procedimiento. Cuando el procedimiento encuentra una instrucción Instrucción Dim (Visual Basic) que especifica valores
iniciales, establece esos valores para las variables, aunque su código ya haya asignado otros valores para ellas.
Los miembros de una variable de estructura se inicializan como si cada uno fuera una variable independiente. De forma
similar, los elementos de una variable de matriz se inicializan de manera individual.
Las variables declaradas dentro de un bloque en el interior de un procedimiento (como un bucle For ) se inicializan en la
entrada al procedimiento. Estas inicializaciones tienen efecto independientemente de si el código ejecuta o no el bloque.
Final del período de duración
Cuando un procedimiento finaliza, no se conservan los valores de sus variables locales y Visual Basic recupera su memoria. La
próxima vez que llame al procedimiento, se crean de nuevo y se reinicializan todas las variables locales.
Cuando finaliza una instancia de una clase o estructura, se pierde el valor y la memoria de sus variables no compartidas. Cada
nueva instancia de la clase o estructura crea y reinicializa sus variables no compartidas. No obstante, las variables Shared se
conservan hasta que finaliza la ejecución de la aplicación.
Prolongar el período de duración
Si declara una variable local con la palabra clave Static (Visual Basic), su período de duración es más largo que el tiempo de
ejecución de su procedimiento. La tabla siguiente muestra cómo determina la declaración de procedimiento el tiempo de
duración de una variable Static.
Ubicación de procedimiento y uso co Comienza el período de duración de una varia Finaliza el período de duració
mpartido ble estática n de una variable estática
En un módulo (compartido de manera pr La primera vez que se llama al procedimiento. Cuando se detiene la aplicación
edeterminada)

En una clase o estructura, Shared (el proc La primera vez que se llama al procedimiento en u Cuando se detiene la aplicación
edimiento no es un miembro de instancia na instancia específica, o en el mismo nombre de c
) lase o estructura

En una instancia de clase o estructura, no La primera vez que se llama al procedimiento en la Cuando la instancia se libera par
Shared (el procedimiento es un miembro instancia específica a la recolección de elementos no
de instancia) utilizados

Vea también
Tareas
Cómo: Prolongar la duración de una variable
Solucionar problemas de tipos de datos
Referencia
Shared (Visual Basic)
Nothing (Visual Basic)
Conceptos
Nombres de elementos declarados
Ámbito en Visual Basic
Niveles de acceso en Visual Basic
Variables en Visual Basic
Declaración de variable en Visual Basic
Otros recursos
Referencias a elementos declarados
Conceptos del lenguaje Visual Basic

Cómo: Prolongar la duración de una variable


Normalmente, una variable deja de existir cuando el elemento de programación en el que se declara deja de existir. Sin
embargo, puede alargar su duración más que la de su elemento contenedor declarándola con la palabra clave
Static (Visual Basic).
Para obtener más información, consulte Período de duración en Visual Basic.
Para alargar la duración de una variable más que la de su elemento contenedor
Si la variable es una variable local (declarada dentro de un procedimiento), incluya la palabra clave Static en la
instrucción Instrucción Dim (Visual Basic) que la declara. Una variable estática existe mientras exista la clase o módulo
que contiene el procedimiento que declara la variable.
Si una variable local está dentro de un procedimiento Shared (Visual Basic), el procedimiento y sus variables existen
siempre que la aplicación esté en ejecución. No utilice Static en este caso.
Si la variable es una variable miembro (declarada dentro de una clase o estructura, fuera de todo procedimiento), incluya
la palabra clave Shared en la instrucción Dim que la declara. Una variable compartida no está asociada a ninguna
instancia de su clase o estructura y existe siempre que la aplicación esté en ejecución. No puede utilizar Static en una
variable miembro.
Si una variable miembro se declara en un módulo, existe siempre que la aplicación esté en ejecución. No utilice Shared
en este caso.
Ejemplo
El ejemplo siguiente declara una variable con la palabra clave Static (Visual Basic). (Observe que no necesita la palabra clave
Dim cuando Instrucción Dim (Visual Basic) utiliza un modificador como Static.)

Function runningTotal(ByVal num As Integer) As Integer


Static applesSold As Integer
applesSold = applesSold + num
Return applesSold
End Function

En el ejemplo anterior, la variable applesSold continúa existiendo después de que el procedimiento runningTotal vuelve al
código de llamada. La siguiente vez que se llama a runningTotal, applesSold conserva el valor calculado anteriormente.
Si applesSold se hubiera declarado sin utilizar Static, los valores acumulados anteriores no se conservarían a través de
llamadas a runningTotal. La siguiente vez que se llamara a runningTotal, applesSold se habría vuelto a crear y se habría
inicializado a 0. runningTotal habría devuelto simplemente el mismo valor que el que tenía cuando fue llamado.
Compilar el código
Puede inicializar el valor de una variable local estática en la propia declaración. Si declara una matriz como Static, puede
inicializar su rango (número de dimensiones), la longitud de cada dimensión y los valores de los elementos individuales.
Variables estáticas del mismo nombre
Puede declarar variables estáticas con el mismo nombre en más de un procedimiento. Si hace esto, el compilador de Visual
Basic considera que cada variable es un elemento separado. La inicialización de una de estas variables no afecta al valor de las
demás. Lo mismo ocurre si se define un procedimiento con un conjunto de sobrecargas y se declara una variable estática con
el mismo nombre en cada una.
Elementos contenedores para variables estáticas
Puede declarar una variable local estática en una clase, es decir, dentro de un procedimiento de esa clase. Sin embargo, no
puede declarar una variable local estática dentro de una estructura, ya sea como miembro de una estructura o como una
variable local de un procedimiento dentro de esa estructura.
Seguridad
En el ejemplo anterior, puede generar la misma duración si declara applesSold en el nivel de módulo. No obstante, si ha
cambiado de esta forma el ámbito de una variable, el procedimiento dejará de tener acceso exclusivo a él. Dado que otros
procedimientos podrían tener acceso a applesSold y cambiar su valor, el total acumulado no sería fiable, lo que podría
dificultar el mantenimiento del código.
Vea también
Conceptos
Período de duración en Visual Basic
Características de los elementos declarados
Ámbito en Visual Basic
Niveles de acceso en Visual Basic
Variables en Visual Basic
Declaración de variable en Visual Basic
Sobrecarga de procedimientos
Conceptos del lenguaje Visual Basic

Ámbito en Visual Basic


El ámbito de un elemento declarado es el conjunto de todo el código que puede hacer referencia a él sin calificar su nombre o
marcarlo como disponible mediante Imports (Instrucción). Un elemento puede tener uno de los niveles de ámbito siguientes:
Nivel Descripción
Ámbito de bloque Ámbito disponible únicamente en el bloque de código en el que se ha declarado

Ámbito de procedimiento Disponible para todo el código dentro del procedimiento en el que se ha declarado

Ámbito de módulo Disponible para todo el código dentro del módulo, clase o estructura en el que se ha declarado

Ámbito de espacio de nombres Disponible para todo el código dentro del espacio de nombres en el que se ha declarado

Estos niveles de ámbito progresan desde el más restringido (bloque) al más amplio (espacio de nombres), donde ámbito más
restringido significa el conjunto de código más pequeño que puede hacer referencia al elemento sin calificación. Para obtener
más información, consulte "Niveles de ámbito" en esta página.
Especificar ámbito y definir variables
El ámbito de un elemento se especifica al declararlo y puede depender de los factores siguientes:
La región (bloque, procedimiento, módulo, clase o estructura) donde se declara el elemento.
El espacio de nombres que contiene la declaración del elemento.
El nivel de acceso que se declara para el elemento.
Tenga cuidado cuando defina variables del mismo nombre pero con ámbito diferente, puesto que ello podría causar resultados
inesperados. Para obtener más información, consulte
Resolver una referencia cuando muchas variables tienen el mismo nombre.
Niveles de ámbito
Un elemento de programación está disponible en toda la región en la que se declara. Todo el código de la misma región puede
hacer referencia al elemento sin calificar su nombre.
Ámbito de bloque
Un bloque es un conjunto de instrucciones incluido dentro de las instrucciones de declaración de inicio y fin, como lo siguiente:
Do y Loop
For [Each] y Next
If y End If
Select y End Select
SyncLock y End SyncLock
Try y End Try
While y End While
With y End With
Si declara una variable dentro de un bloque, sólo puede utilizarla dentro de ese bloque. En el ejemplo siguiente, el ámbito de la
variable de entero cube es el bloque entre If y End If, y las referencias a cube dejan de ser posibles cuando termina la ejecución
del bloque.

If n < 1291 Then


Dim cube As Integer
cube = n ^ 3
End If
Nota
Incluso si el ámbito de una variable está limitado a un bloque, su período de duración sigue siendo el del procedimiento com
pleto. Si utiliza el bloque varias veces durante el procedimiento, todas las variables de bloque conservan su valor anterior. Pa
ra evitar resultados inesperados en estos casos, es mejor inicializar las variables de bloque al principio del bloque.

Ámbito de procedimiento
Un elemento declarado en un procedimiento no está disponible fuera de él. Solamente el procedimiento que contiene su
declaración puede utilizarlo. Las variables en este nivel también se denominan variables locales. Se declaran con
Instrucción Dim (Visual Basic), con o sin la palabra clave Static (Visual Basic).
Los ámbitos de procedimiento y de bloque están estrechamente relacionados. Si se declara una variable dentro de un
procedimiento, pero fuera de un bloque dentro del procedimiento, puede considerarse que la variable tiene ámbito de bloque,
donde el bloque es el procedimiento completo.
Nota
Todos los elementos locales, aunque sean variables Static, son privados para el procedimiento en el que aparecen. No se pu
ede declarar un elemento mediante la palabra clave Public (Visual Basic) dentro de un procedimiento.

Ámbito de módulo
Por comodidad, el término nivel de módulo se aplica por igual a módulos, clases y estructuras. Puede declarar elementos a
este nivel si sitúa la instrucción de declaración fuera de cualquier procedimiento o bloque pero dentro del módulo, clase o
estructura.
Cuando se incluye una declaración en el nivel de módulo, el nivel de acceso seleccionado determina el ámbito. El espacio de
nombres que contiene el módulo, la clase o la estructura también afecta al ámbito.
Los elementos para los que se declara el nivel de acceso Private (Visual Basic) están disponibles para todos los procedimientos
del módulo, pero no para el código de otros módulos. La instrucción Dim en el nivel de módulo toma Private como valor
predeterminado si no utiliza ninguna palabra nivel de acceso. No obstante, el ámbito y el nivel de acceso serán más patentes si
utiliza la palabra clave Private en la instrucción Dim.
En el ejemplo siguiente, todos los procedimientos definidos en el módulo pueden hacer referencia a la variable de cadena
strMsg. Cuando se llama al segundo procedimiento, muestra el contenido de la variable de cadena strMsg en un cuadro de
diálogo:

' Put the following declaration at module level (not in any procedure).
Private strMsg As String
' Put the following Sub procedure in the same module.
Sub initializePrivateVariable()
strMsg = "This variable cannot be used outside this module."
End Sub
' Put the following Sub procedure in the same module.
Sub usePrivateVariable()
MsgBox(strMsg)
End Sub

Ámbito de espacio de nombres


Si declara un elemento en el nivel de módulo mediante la palabra claveFriend (Visual Basic) o Public (Visual Basic), dicho
elemento quedará disponible para todos los procedimientos del espacio de nombres en los que se declare. La siguiente
modificación del ejemplo anterior permite que el código haga referencia a la variable de cadena strMsg en cualquier parte del
espacio de nombres de su declaración.

' Include this declaration at module level (not inside any procedure).
Public strMsg As String

El ámbito de espacio de nombres incluye espacios de nombres anidados. Un elemento disponible de un espacio de nombres
también está disponible en cualquier espacio de nombres anidado en su interior.
Si un proyecto no contiene Namespace (Instrucción), todo lo que incluya el proyecto estará en el mismo espacio de nombres.
En este caso, el ámbito de espacio de nombres se puede considerar como el ámbito del proyecto. Los elementos Public de un
módulo, clase o estructura también están disponibles para cualquier proyecto que haga referencia a sus proyectos.
Elección de ámbito
Cuando declara una variable, debe tener presente los puntos siguientes al elegir su ámbito.
Ventajas de variables locales
Las variables locales son una buena elección para cualquier tipo de cálculo temporal, por las razones siguientes:
Evitar conflictos de nombres. Los nombres de variables locales no son susceptibles de entrar en conflicto. Por
ejemplo, es posible crear varios procedimientos distintos que contengan una variable denominada intTemp. En tanto que
intTemp esté declarado como una variable local, cada procedimiento reconocerá únicamente su propia versión de
intTemp. Cualquier procedimiento puede cambiar el valor de su variable intTemp local sin que ello afecte a las variables
intTemp del resto de los procedimientos.

Consumo de memoria. Las variables locales sólo utilizan la memoria mientras su procedimiento está en ejecución. Su
memoria se libera cuando el procedimiento vuelve al código de llamada. Por el contrario, las variables
Shared (Visual Basic) y Static (Visual Basic) consumen recursos de memoria hasta que su aplicación deja de ejecutarse,
por lo que se deben utilizar sólo cuando sea necesario. Las variables de instancia utilizan la memoria mientras su
instancia sigue existiendo, lo que les resta eficacia frente a las variables locales pero son potencialmente más eficaces que
las variables Shared o Static.
Minimizar el ámbito
En general, cuando se declara una variable o una constante, es un buen hábito de programación asignar un ámbito lo más
restringido posible (el ámbito de un bloque es el más restringido). Esto permite que no se pierda memoria y reduce al mínimo
la posibilidad de que el código haga referencia por error a una variable incorrecta. Del mismo modo, sólo debería declararse
una variable como Static (Visual Basic) si es necesario que conserve su valor entre una llamada al procedimiento y otra.
Vea también
Tareas
Cómo: Controlar el ámbito de una variable
Conceptos
Características de los elementos declarados
Período de duración en Visual Basic
Niveles de acceso en Visual Basic
Resolver una referencia cuando muchas variables tienen el mismo nombre
Declaración de variable en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Controlar el ámbito de una variable


Normalmente, una variable está en ámbito, o visible para referencia, en toda la región donde se declara. En algunos casos, el
nivel de acceso de la variable puede influir en su ámbito.
Para obtener más información, consulte Ámbito en Visual Basic.
Ámbito en el nivel de bloque o procedimiento
Para hacer que una variable sea visible sólo dentro de un bloque
Coloque Instrucción Dim (Visual Basic) para la variable entre las instrucciones de declaración de inicio y fin de ese
bloque, por ejemplo entre las instrucciones For y Next de un bucle For.
Sólo puede hacer referencia a la variable desde dentro del bloque.
Para hacer que una variable sea visible sólo dentro de un procedimiento
Coloque la instrucción Dim para la variable dentro del procedimiento pero fuera de cualquier bloque (como un bloque
With...End With).
Sólo puede hacer referencia a la variable desde dentro del procedimiento, incluyendo dentro de cualquier bloque
contenido en el procedimiento.
Ámbito en el nivel de módulo o espacio de nombres
Por comodidad, el término nivel de módulo se aplica por igual a módulos, clases y estructuras. El nivel de acceso de una
variable de nivel de módulo determina su ámbito. El espacio de nombres que contiene el módulo, la clase o la estructura
también influye en el ámbito.
Para hacer que una variable sea visible en todo un módulo, clase o estructura
1. Coloque la instrucción Dim para la variable dentro del módulo, clase o estructura, pero fuera de cualquier
procedimiento.
2. Incluya la palabra clave Private (Visual Basic) en la instrucción Dim.
3. Puede hacer referencia a la variable desde cualquier parte dentro del módulo, clase o estructura, pero no desde fuera de
él.
Para hacer que una variable sea visible en todo un espacio de nombres
1. Coloque la instrucción Dim para la variable dentro del módulo, clase o estructura, pero fuera de cualquier
procedimiento.
2. Incluya la palabra clave Friend (Visual Basic) o Public (Visual Basic) en la instrucción Dim.
3. Puede hacer referencia a la variable desde cualquier parte dentro del espacio de nombres que contiene el módulo, clase
o estructura.
Ejemplo
En el ejemplo siguiente se declara una variable en el nivel de módulo y se limita su visibilidad al código dentro del módulo.

Module demonstrateScope
Private strMsg As String
Sub initializePrivateVariable()
strMsg = "This variable cannot be used outside this module."
End Sub
Sub usePrivateVariable()
MsgBox(strMsg)
End Sub
End Module
En el ejemplo anterior, todos los procedimientos definidos en el módulo demonstrateScope pueden hacer referencia a la
variable String strMsg. Cuando se llama al procedimiento usePrivateVariable, se muestra el contenido de la variable strMsg
en un cuadro de diálogo.
La siguiente modificación del ejemplo anterior permite que el código haga referencia a la variable de cadena strMsg en
cualquier parte del espacio de nombres de su declaración.

Public strMsg As String

Programación eficaz
Cuanto más estrecho sea el ámbito de una variable, menos probabilidades tendrá de hacer referencia accidentalmente a ella en
lugar de a otra variable con el mismo nombre. También puede minimizar los problemas de concordancia de referencias.
Seguridad
Cuanto más estrecho sea el ámbito de una variable, menos posibilidades habrá de que un código malintencionado puede
hacer un uso indebido de ella.
Vea también
Referencia
Instrucción Dim (Visual Basic)
Conceptos
Ámbito en Visual Basic
Período de duración en Visual Basic
Niveles de acceso en Visual Basic
Variables en Visual Basic
Declaración de variable en Visual Basic
Conceptos del lenguaje Visual Basic

Promoción de tipos
Cuando declara un elemento de programación en un módulo, Visual Basic promueve su ámbito al espacio de nombres que
contiene el módulo. Esto se conoce como promoción de tipos.
El ejemplo siguiente muestra una definición esquemática de un módulo y dos miembros de ese módulo.

Namespace projNamespace
Module projModule
Public Enum basicEnum As Integer
one = 1
two = 2
End Enum
Public Class innerClass
Public Sub numberSub(ByVal firstArg As Integer)
End Sub
End Class
End Module
End Namespace

Dentro de projModule, los elementos de programación declarados en el nivel de módulo se promueven a projNamespace. En el
ejemplo anterior, basicEnum e innerClass se promueven, pero numberSub no, porque no está declarado en el nivel de módulo.
Efecto de promoción de tipos
El efecto de promoción de tipos es que una cadena de calificación no necesita incluir el nombre del módulo. El ejemplo
siguiente realiza dos llamadas al procedimiento del ejemplo anterior.

Sub usePromotion()
projNamespace.projModule.innerClass.numberSub(projNamespace.projModule.basicEnum.one)
projNamespace.innerClass.numberSub(projNamespace.basicEnum.two)
End Sub

En el ejemplo anterior, la primera llamada utiliza las cadenas de calificación completas. Sin embargo, esto no es necesario
debido a la promoción de tipos. La segunda llamada también tiene acceso a los miembros del módulo sin incluir projModule
en las cadenas de calificación.
Rechazo de promoción de tipos
Si el espacio de nombres ya tiene un miembro con el mismo nombre que un miembro del módulo, se rechaza la promoción de
tipos para ese miembro del módulo. El ejemplo siguiente muestra una definición esquemática de una enumeración y un
módulo dentro del mismo espacio de nombres.

Namespace thisNamespace
Public Enum abc
first = 1
second
End Enum
Module thisModule
Public Class abc
Public Sub abcSub()
End Sub
End Class
Public Class xyz
Public Sub xyzSub()
End Sub
End Class
End Module
End Namespace

En el ejemplo anterior, Visual Basic no puede promover la clase abc a thisNameSpace porque hay ya una enumeración con el
mismo nombre en el nivel de espacio de nombres. Para tener acceso a abcSub, debe utilizar la cadena de calificación completa
thisNamespace.thisModule.abc.abcSub. Sin embargo, todavía se promueve la clase xyz y puede tener acceso a xyzSub con la
cadena de calificación más corta thisNamespace.xyz.xyzSub.
Rechazo de promoción de tipos para tipos parciales
Si una clase o estructura dentro de un módulo utiliza la palabra clave Partial (Visual Basic), se rechaza automáticamente la
promoción de tipos para esa clase o estructura, ya tenga o no el espacio de nombres un miembro con el mismo nombre. Otros
elementos en el módulo reúnen todavía los requisitos necesarios para la promoción de tipos.
Consecuencias. El rechazo de la promoción de tipos de una definición parcial puede provocar unos resultados inesperados e
incluso errores del compilador. El ejemplo siguiente muestra definiciones esquemáticas parciales de una clase, una de las
cuales está dentro de un módulo.

Namespace sampleNamespace
Public Partial Class sampleClass
Public Sub sub1()
End Sub
End Class
Module sampleModule
Public Partial Class sampleClass
Public Sub sub2()
End Sub
End Class
End Module
End Namespace

En el ejemplo anterior, el desarrollador podría esperar que el compilador combinara las dos definiciones parciales de
sampleClass. Sin embargo, el compilador no considera la promoción para la definición parcial dentro de sampleModule. En
consecuencia, intenta compilar dos clases separadas y distintas, ambas denominadas sampleClass pero con rutas de acceso de
calificación diferentes.
El compilador sólo combina las definiciones parciales cuando sus rutas de acceso completas son idénticas.
Recomendaciones
Las recomendaciones siguientes representan un buen hábito de programación.
Nombres únicos. Si tiene el control completo sobre la denominación de los elementos de programación, suele ser una
buena idea utilizar nombres únicos en todas partes. Unos nombres idénticos requieren calificación adicional y pueden
dificultar la lectura del código. También pueden llevar a errores poco claros y a unos resultados inesperados.
Calificación completa. Si trabaja con módulos y otros elementos en el mismo espacio de nombres, el enfoque más
seguro es utilizar siempre una calificación completa para todos los elementos de programación. Si la promoción de tipos
se rechaza para un miembro del módulo y no califica ese miembro por completo, puede tener acceso por error a un
elemento de programación diferente.

Vea también
Tareas
Cómo: Controlar el ámbito de una variable
Referencia
Module (Instrucción)
Namespace (Instrucción)
Partial (Visual Basic)
Conceptos
Ámbito en Visual Basic
Resolver una referencia cuando muchas variables tienen el mismo nombre
Conceptos del lenguaje Visual Basic

Niveles de acceso en Visual Basic


El nivel de acceso de un elemento declarado es la extensión de la capacidad de acceso a él; es decir, qué código tiene permiso
para leer o escribir en él. Está determinado no solamente por cómo se declara el propio elemento, sino también por la nivel de
acceso del contenedor del elemento. El código que no puede tener acceso a un elemento contenedor no puede tener acceso a
ninguno de sus elementos contenedores, incluso aquéllos declarados como Public. Por ejemplo, una variable Public de una
estructura Private está accesible desde el interior de la clase que contiene la estructura, pero no desde el exterior.
Public
La palabra clave Public (Visual Basic) de la instrucción de declaración especifica que los elementos son accesibles desde un
código en cualquier parte del mismo proyecto, desde otros proyectos que hagan referencia al proyecto y desde un
ensamblado generado a partir del proyecto. El código siguiente muestra un ejemplo de declaración Public.

Public Class classForEverybody

Puede utilizar Public solamente en el nivel de módulo, interfaz o espacio de nombres. Esto es, puede declarar un elemento
público en el nivel de archivo de código fuente o de nombre de espacio, o dentro de una interfaz, módulo, clase o estructura,
pero no dentro de un procedimiento.
Protected
La palabra clave Protected (Visual Basic) de la instrucción de declaración especifica que los elementos son accesibles solamente
desde dentro de la misma clase o desde una clase derivada de ella. El código siguiente muestra un ejemplo de declaración
Protected.

Protected Class classForMyHeirs

Sólo puede utilizar Protected en el nivel de clase y sólo al declarar un miembro de una clase. Esto es, puede declarar un
elemento protegido en una clase, pero no en el nivel de archivo de código fuente o de nombre de espacio, o dentro de una
interfaz, módulo, estructura o procedimiento.
Friend
La palabra clave Friend (Visual Basic) en la instrucción de declaración especifica que los elementos son accesibles desde dentro
del mismo ensamblado, pero no desde fuera del ensamblado. El código siguiente muestra un ejemplo de declaración Friend.

Friend stringForThisProject As String

Puede utilizar Friend solamente en el nivel de módulo, interfaz o espacio de nombres. Esto es, puede declarar un elemento de
tipo amigo en el nivel de archivo de código fuente o de nombre de espacio, o dentro de una interfaz, módulo, clase o
estructura, pero no dentro de un procedimiento.
Protected Friend
Las palabras clave Protected y Friend especifican juntos en la instrucción de declaración que los elementos son accesibles
desde las clases derivadas o desde dentro del mismo ensamblado o ambos. El código siguiente muestra un ejemplo de
declaración Protected Friend.

Protected Friend stringForProjectAndHeirs As String

Sólo puede utilizar Protected Friend en el nivel de clase y sólo al declarar un miembro de una clase. Esto es, puede declarar
un elemento de tipo amigo protegido en una clase, pero no en el nivel de archivo de código fuente o de nombre de espacio, o
dentro de una interfaz, módulo, estructura o procedimiento.
Private
La palabra clave Private (Visual Basic) de la instrucción de declaración especifica que los elementos son accesibles solamente
desde dentro del mismo módulo, clase o estructura. El código siguiente muestra un ejemplo de declaración Private.
Private numberForMeOnly As Integer

Sólo puede utilizar Private en el nivel de módulo. Esto es, puede declarar un elemento privado dentro de un módulo, clase o
estructura, pero no en el nivel de archivo de código fuente o de nombre de espacio, dentro de una interfaz o un procedimiento.
En el nivel de módulo, la instrucción Dim sin ninguna palabra clave de nivel de acceso es equivalente a una declaración
Private. No obstante, podría convenirle usar la palabra clave Private para facilitar la lectura y la interpretación del código.
Modificadores de acceso
Las palabras clave que especifican el nivel de acceso se llaman modificadores de acceso. La tabla siguiente compara los
modificadores de acceso.
Modific Nivel de acceso concedido Elementos que pue Contexto de declaración
ador de de declarar con est dentro de cual puede util
acceso e nivel de acceso izar este modificador
Public Sin restricciones: Interfaces Archivo de código fuente
Cualquier código que puede ver un elemento público puede tener Módulos Espacio de nombres
acceso a él
Clases Interfaz
Estructuras Módulo
Miembros de estruct Clase
ura
Estructura
Procedimientos
Propiedades
Variables miembros
Constantes
Enumeraciones
Eventos
Declaraciones extern
as
Delegados

Protect De derivación: Interfaces Clase


ed
El código dentro de la clase que declara un elemento protegido o Clases
una clase derivada de él, puede tener acceso al elemento
Estructuras
Procedimientos
Propiedades
Variables miembros
Constantes
Enumeraciones
Eventos
Declaraciones extern
as
Delegados
Friend Ensamblado: Interfaces Archivo de código fuente
El código dentro del ensamblado que declara un elemento de tipo Módulos Espacio de nombres
de amigo puede tener acceso a él
Clases Interfaz
Estructuras Módulo
Miembros de estruct Clase
ura
Estructura
Procedimientos
Propiedades
Variables miembros
Constantes
Enumeraciones
Eventos
Declaraciones extern
as
Delegados
Protect Unión de Protected y Friend: Interfaces Clase
ed Frie
nd El código dentro de la misma clase o el mismo ensamblado como Clases
elemento de tipo amigo protegido o dentro de cualquier clase deri
vada de la clase del elemento, puede tener acceso a él Estructuras
Procedimientos
Propiedades
Variables miembros
Constantes
Enumeraciones
Eventos
Declaraciones extern
as
Delegados
Private Contexto de declaración: Interfaces Módulo
El código dentro del tipo que declara un elemento privado, incluso Clases Clase
el código dentro de los tipos contenidos, puede tener acceso al ele
mento Estructuras Estructura
Miembros de estruct
ura
Procedimientos
Propiedades
Variables miembros
Constantes
Enumeraciones
Eventos
Declaraciones extern
as
Delegados

Vea también
Tareas
Cómo: Controlar la disponibilidad de una variable
Referencia
Instrucción Dim (Visual Basic)
Static (Visual Basic)
Conceptos
Nombres de elementos declarados
Características de los elementos declarados
Período de duración en Visual Basic
Ámbito en Visual Basic
Variables en Visual Basic
Declaración de variable en Visual Basic
Otros recursos
Referencias a elementos declarados
Conceptos del lenguaje Visual Basic

Cómo: Controlar la disponibilidad de una variable


La disponibilidad de una variable se controla especificando su nivel de acceso. El nivel de acceso determina qué código tiene
permiso de lectura o escritura en la variable.
Las variables miembros (definidas en el nivel de módulo y fuera de cualquier procedimiento) tienen como valor
predeterminado un acceso público que significa cualquier código que puede verlas y tener acceso a ellas. Puede cambiar
esto especificando un modificador de acceso.
Las variables locales (definidas dentro de un procedimiento) tienen nominalmente un acceso público, aunque sólo el
código dentro de su procedimiento puede tener acceso a ellas. No puede cambiar el nivel de acceso de una variable local
pero puede cambiar el nivel de acceso del procedimiento que la contiene.
Para obtener más información, consulte Niveles de acceso en Visual Basic.
Acceso privado y público
Para hacer que una variable sea accesible únicamente desde su módulo, clase o estructura
1. Coloque la instrucción Instrucción Dim (Visual Basic) para la variable dentro del módulo, clase o estructura, pero fuera de
cualquier procedimiento.
2. Incluya la palabra clave Private (Visual Basic) en la instrucción Dim.
Puede leer o escribir en la variable desde cualquier parte dentro del módulo, clase o estructura, pero no desde fuera de
él.
Para hacer que una variable sea accesible desde cualquier código que puede verla
1. Para una variable miembro, coloque la instrucción Dim para la variable dentro del módulo, clase o estructura pero fuera
de cualquier procedimiento.
2. Incluya la palabra clave Public (Visual Basic) en la instrucción Dim.
Puede leer o escribir en la variable desde cualquier código que interopere con su ensamblado.
o bien
1. Para una variable local, coloque la instrucción Dim para la variable dentro de un procedimiento.
2. No incluya la palabra clave Public en la instrucción Dim.
Puede leer o escribir en la variable desde cualquier parte dentro del procedimiento pero no desde fuera de él.
Acceso protegido y amigo
Puede limitar el nivel de acceso de una variable a su clase y cualquier clase derivada o a su ensamblado. También puede
especificar la unión de estas limitaciones que permiten el acceso desde un código de cualquier clase derivada o de cualquier
otro lugar del mismo ensamblado. Especifica esta unión combinando las palabras clave Protected y Friend en la misma
declaración.
Para hacer que una variable sea accesible desde su clase y cualquier clase derivada
1. Coloque la instrucción Dim para la variable dentro de una clase, pero fuera de cualquier procedimiento.
2. Incluya la palabra clave Protected (Visual Basic) en la instrucción Dim.
Puede leer o escribir en la variable desde cualquier parte dentro de la clase, así como desde dentro de cualquier clase
derivada de ella pero no desde fuera de cualquier clase de la cadena de derivación.
Para hacer que una variable sea accesible sólo desde el mismo ensamblado
1. Coloque la instrucción Dim para la variable dentro de un módulo, clase o estructura, pero fuera de cualquier
procedimiento.
2. Incluya la palabra clave Friend (Visual Basic) en la instrucción Dim.
Puede leer o escribir en la variable desde cualquier parte dentro del módulo, clase o estructura, así como desde cualquier
código del mismo ensamblado pero no desde fuera del ensamblado.
Ejemplo
El ejemplo siguiente muestra declaraciones de variables con niveles de acceso Public, Protected, Friend, Protected Friend y
Private. Tenga en cuenta que cuando la instrucción Dim especifica un nivel de acceso, no necesita incluir la palabra clave Dim.

Public Class classForEverybody


Protected Class classForMyHeirs
Friend stringForThisProject As String
Protected Friend stringForProjectAndHeirs As String
Private numberForMeOnly As Integer

Seguridad
Cuanto más restrictivo sea el nivel de acceso de una variable, menos posibilidades habrá de que un código malintencionado
puede hacer un uso indebido de ella.
Vea también
Referencia
Instrucción Dim (Visual Basic)
Public (Visual Basic)
Protected (Visual Basic)
Friend (Visual Basic)
Private (Visual Basic)
Conceptos
Niveles de acceso en Visual Basic
Conceptos del lenguaje Visual Basic

Referencias a elementos declarados


Si un código hace referencia a un elemento declarado, el compilador Visual Basic debe hacer coincidir el nombre de la
referencia con la declaración pertinente del nombre. Si se han declarado varios elementos con el mismo nombre, es posible
controlar a cuál de ellos se hace referencia mediante la calificación de su nombre.
En esta sección
Resolver una referencia cuando muchas variables tienen el mismo nombre
Explica cómo compara el compilador una referencia con una declaración.
Cómo: Calificar el nombre de un elemento declarado
Explica cómo calificar un nombre de elemento para facilitar una coincidencia de la referencia.
Cómo: Distinguir entre dos elementos con el mismo nombre
Describe cómo calificar un nombre de elemento al llamarlo para permitir que el compilador de Visual Basic haga coincidir
con su referencia con el elemento deseado.
Sombrear en Visual Basic
Describe el tratamiento de los elementos con el mismo nombre.
Secciones relacionadas
Nombres de elementos declarados
Describe cómo asignar un nombre a los elementos y cuándo utilizar mayúsculas y minúsculas.
Características de los elementos declarados
Trata algunas características, como el ámbito de los elementos declarados.
Conceptos del lenguaje Visual Basic

Resolver una referencia cuando muchas variables tienen el


mismo nombre
Cuando el compilador intenta hacer coincidir una referencia de nombre con una declaración de nombre, busca la declaración
de coincidencia del ámbito más restringido. Esto significa que comienza con el código que realiza la referencia y se mueve
hacia afuera a través de los sucesivos niveles de elementos contenedores.
Si quiere omitir este proceso de búsqueda y especificar un nombre declarado en un ámbito más ancho, debe calificar el
nombre con el elemento contenedor del ámbito más ancho. En algunos casos, podría tener que calificar también el elemento
contenedor. Para obtener más información sobre calificación de nombres, consulte
Cómo: Calificar el nombre de un elemento declarado.
También podría tener que calificar una referencia de nombre si su aplicación tiene acceso a más de un elemento de
programación con el mismo nombre. Para obtener ejemplos, vea "Clases con el mismo nombre" en esta página Ayuda y
Cómo: Distinguir entre dos elementos con el mismo nombre.
Ámbito más restringido
El ejemplo siguiente muestra las referencias a dos variables con el mismo nombre.

' Assume these two modules are both in the same assembly.
Module container
Public totalCount As Integer = 1
Public Sub showCount()
Dim totalCount As Integer = 6000
' The following statement displays the local totalCount (6000).
MsgBox("Unqualified totalCount is " & CStr(totalCount))
' The following statement displays the module's totalCount (1).
MsgBox("container.totalCount is " & CStr(container.totalCount))
End Sub
End Module
Module callingModule
Public Sub displayCount()
container.showCount()
' The following statement displays the containing module's totalCount (1).
MsgBox("container.totalCount is " & CStr(container.totalCount))
End Sub
End Module

El ejemplo anterior declara dos variables, cada una denominada totalCount, en los diferentes niveles de ámbito en el módulo
container. Cuando el procedimiento showCount muestra totalCount sin la calificación, el compilador de Visual Basic resuelve
la referencia en la declaración con el ámbito más restringido, concretamente la declaración local dentro de showCount. Cuando
califica totalCount con el módulo contenedor container, el compilador resuelve la referencia en la declaración con el ámbito
más ancho.
Miembros de otros elementos contenedores
Si se utiliza un miembro no compartido de otra clase o estructura, primero debe calificarse el nombre del miembro con una
variable o una expresión que se refiera a una instancia de la clase o de la estructura. En el ejemplo siguiente, demoClass es una
instancia de una clase denominada class1.

Dim demoClass As class1 = New class1()


demoClass.someSub[(argumentlist)]

No puede utilizarse el propio nombre de la clase para calificar a un miembro que no es Shared (Visual Basic). Debe crear
primero una instancia en una variable de objeto (en este caso demoClass) y, a continuación, hacer referencia a ella por el
nombre de variable.
Si una clase o estructura tiene un miembro Shared, puede calificar ese miembro con el nombre de clase o estructura, o con
una variable o expresión que señale a una instancia.
Un módulo no tiene ninguna instancia separada y todos sus miembros son de manera predeterminada Shared. Por
consiguiente, califica un miembro de módulo con el nombre del módulo.
Ejemplo de referencia calificada
El ejemplo siguiente muestra referencias calificadas a procedimientos de miembros de módulos.

' Assume these three modules are all in the same assembly.
Module module1
Public Sub perform()
MsgBox("module1.perform() now returning")
End Sub
End Module
Module module2
Public Sub perform()
MsgBox("module2.perform() now returning")
End Sub
Public Sub doSomething()
' The following statement calls perform in module2, the active module.
perform()
' The following statement calls perform in module1.
module1.perform()
End Sub
End Module
Module module3
Public Sub callPerform()
' The following statement calls perform in module1.
module1.perform()
' The following statement makes an unresolvable name reference
' and therefore generates a COMPILER ERROR.
perform() ' INVALID statement
End Sub
End Module

El ejemplo anterior declara dos procedimientos Sub, ambos denominados perform, en módulos diferentes de un proyecto. Los
dos pueden especificarse sin calificación en su propio módulo, pero deben ser calificados si se les hace referencia desde otra
sección. Como la referencia final en module3 no califica perform, el compilador no puede resolver esa referencia.
Referencia a proyectos
Para poder utilizar elementos Public (Visual Basic) definidos en otro proyecto, primero debe definirse una referencia al
ensamblado o a la biblioteca de tipos del proyecto. Puede definir una referencia si elige Agregar referencia en el menú
Proyecto o por medio de la opción del compilador de línea de comandos /reference (Visual Basic).
Por ejemplo, puede utilizar el modelo de objetos XML de .NET Framework. Si establece una referencia en el espacio de
nombres System.Xml, puede declarar y utilizar cualquiera de sus clases, como XmlDocument. El ejemplo siguiente utiliza
XmlDocument.

' Assume this project has a reference to System.Xml


' The following statement creates xDoc as an XML document object.
Dim xDoc As System.Xml.XmlDocument

Importar elementos contenedores


Puede utilizar Imports (Instrucción) para importar los espacios de nombres que contienen los módulos o clases que desea
utilizar. Esto permite hacer referencia a los elementos definidos en un espacio de nombres importado sin calificar por
completo sus nombres. En el ejemplo siguiente se escribe de nuevo el ejemplo anterior para importar el espacio de nombres
System.Xml.

' Assume this project has a reference to System.Xml


' The following statement must precede all your declarations.
Imports System.Xml
' The following statement creates xDoc as an XML document object.
Dim xDoc As XmlDocument

Asimismo, la instrucción Imports puede definir un alias de importación para cada espacio de nombres importado. De esta
forma se resume el código fuente y se facilita su lectura. En el ejemplo siguiente se escribe de nuevo el ejemplo anterior para
utilizar xD como un alias para el espacio de nombres System.Xml.

' Assume this project has a reference to System.Xml


' The following statement must precede all your declarations.
Imports xD = System.Xml
' The following statement creates xDoc as an XML document object.
Dim xDoc As xD.XmlDocument

La instrucción Imports no hace que los elementos de otros proyectos estén disponibles para su aplicación. Es decir, no
sustituye a la configuración de una referencia. La importación de un espacio de nombres sencillamente elimina la necesidad de
calificar los nombres definidos en dicho espacio.
También puede utilizar la instrucción Imports para importar módulos, clases, estructuras y enumeraciones. Después puede
utilizar los miembros de estos elementos importados sin calificación. No obstante, debe calificar siempre los miembros no
compartidos de clases y estructuras con una variable o expresión que se evalúe en una instancia de la clase o estructura.
Clases con el mismo nombre
Cuando se crea una instancia nueva de un objeto, probablemente sea necesario calificar la clase con el espacio de nombres o el
tipo de biblioteca al que pertenece. Por ejemplo, los espacios de nombres System.Windows.Forms y
System.Web.UI.WebControls contienen los dos una clase Label (System.Windows.Forms.Label y
System.Web.UI.WebControls.Label). Si una aplicación utiliza los dos o si define su propia clase Label, debe distinguir los
objetos Label diferentes. Incluya el espacio de nombres o un alias de importación en la declaración de variable. El ejemplo
siguiente utiliza el alias de importación.

' The following statement must precede all your declarations.


Imports win = System.Windows.Forms, web = System.Web.UI.WebControls
' The following statement references the Windows.Forms.Label class.
Dim winLabel As New win.Label()

Instrucciones de nomenclatura
Si se definen dos o más elementos de programación con el mismo nombre, puede producirse una ambigüedad de nombres
cuando el compilador intente resolver una referencia al nombre. Si hay más de una definición en el ámbito o si ninguna
definición está en el ámbito, la referencia es irresoluble. Para obtener un ejemplo, vea el "Ejemplo de referencia calificada" en
esta página Ayuda.
Puede evitar la ambigüedad de nombres si asigna a todos los elementos nombres únicos. Puede hacer referencia a cualquier
elemento sin necesidad de calificar su nombre con un espacio de nombres, módulo o clase. También reduce las posibilidades
de hacer referencia accidentalmente a un elemento equivocado.
Vea también
Tareas
Cómo: Modificar las propiedades y los valores de configuración del proyecto
Cómo: Calificar el nombre de un elemento declarado
Cómo: Distinguir entre dos elementos con el mismo nombre
Referencia
Imports (Instrucción)
New (Visual Basic)
Public (Visual Basic)
Conceptos
Variables en Visual Basic
Otros recursos
Referencias a elementos declarados
Conceptos del lenguaje Visual Basic

Cómo: Calificar el nombre de un elemento declarado


Si un código hace referencia a un elemento declarado, el compilador Visual Basic debe hacer coincidir el nombre de la
referencia con la declaración pertinente del nombre. Si el elemento está definido fuera del código o si hay más de un elemento
declarado con el mismo nombre, es posible que necesite calificar el nombre para permitir al compilador resolver cualquier
posible ambigüedad o buscar el elemento.
Calificar un nombre significa que hay que hacerlo preceder en la instrucción de origen con información que identifique dónde
se ha definido el elemento de destino. Esta información se denomina cadena de la calificación. Puede incluir uno o más
espacios de nombres y un módulo, clase o estructura.
La cadena de la calificación debe especificar de forma inequívoca el módulo, clase o estructura que contiene el elemento de
destino. Se puede buscar a su vez el contenedor en otro elemento contenedor, normalmente un espacio de nombres. Es
posible que necesite incluir varios elementos contenedores en la cadena de la calificación.
Para tener acceso a un elemento declarado mediante la calificación de su nombre
1. Determine la ubicación en la que se ha definido el elemento. Esto puede incluir un espacio de nombres o incluso una
jerarquía de espacios de nombres. Dentro del espacio de nombres de nivel inferior, el elemento debe estar contenido en
un módulo, clase o estructura.

' Assume the following hierarchy exists outside your code.


Namespace outerSpace
Namespace innerSpace
Module holdsTotals
Public Structure totals
Public thisTotal As Integer
Public Shared grandTotal As Long
End Structure
End Module
End Namespace
End Namespace

2. Determine una ruta de acceso de calificación basada en la ubicación del elemento de destino. Comience con el espacio de
nombres de nivel superior, continúe con el espacio de nombres de nivel inferior y termine con el módulo, clase o
estructura que contiene el elemento de destino. Cada elemento en la ruta de acceso debe contener el elemento que le
sigue.
outerSpace → innerSpace → holdsTotals → totals

3. Prepare la cadena de la calificación para el elemento de destino. Coloque un punto (.) después de cada elemento en la
ruta de acceso. Su aplicación debe tener acceso a cada elemento en la cadena de la calificación.

outerSpace.innerSpace.holdsTotals.totals.

4. Escriba la expresión o instrucción de asignación que hace referencia al elemento de destino de la manera normal.

grandTotal = 9000

5. Preceda el nombre del elemento de destino con la cadena de la calificación. El nombre debe ir inmediatamente después
del punto (.) que sigue al módulo, clase o estructura que contiene el elemento.

' Assume the following module is part of your code.


Module accessGrandTotal
Public Sub setGrandTotal()
outerSpace.innerSpace.holdsTotals.totals.grandTotal = 9000
End Sub
End Module
6. El compilador utiliza la cadena de la calificación para encontrar una declaración clara e inequívoca con la que puede
hacer coincidir la referencia del elemento de destino.
Vea también
Tareas
Cómo: Distinguir entre dos elementos con el mismo nombre
Cómo: Ocultar una variable con el mismo nombre que su variable
Cómo: Ocultar una variable heredada
Cómo: Obtener acceso a una variable que oculta una clase derivada
Conceptos
Características de los elementos declarados
Resolver una referencia cuando muchas variables tienen el mismo nombre
Instrucciones de declaración en Visual Basic
Otros recursos
Referencias a elementos declarados
Conceptos del lenguaje Visual Basic

Cómo: Distinguir entre dos elementos con el mismo nombre


Si su aplicación tiene acceso a varios elementos con el mismo nombre, puede calificar un nombre para permitir que el
compilador de Visual Basic haga coincidir su referencia con el elemento determinado que desea utilizar. Para obtener más
información, consulte Cómo: Calificar el nombre de un elemento declarado.
Ejemplo
El ejemplo siguiente muestra dos variables con el mismo nombre en elementos contenedores diferentes con el mismo
nombre. Las variables se declaran como Shared simplemente para acortar el código en el ejemplo.

Namespace space1
Public Class innerClass
' String showMe is declared Shared to facilitate reference.
Public Shared showMe As String = "Shared string 1"
End Class
End Namespace
Namespace space2
Public Class innerClass
' String showMe is declared Shared to facilitate reference.
Public Shared showMe As String = "Shared string 2"
End Class
End Namespace
Public Module callShowMe
Public Sub showStrings()
MsgBox("From space1: " & space1.innerClass.showMe _
& vbCrLf & "From space2: " & space2.innerClass.showMe)
End Sub
End Module

El ejemplo anterior declara dos variables, las dos llamadas showMe y las dos dentro de una clase denominada innerClass. Dado
que ambos elementos contenedores tienen el mismo nombre, el código de llamada no sólo debe calificar a la variable showMe
con su contenedor innerClass, sino también a innerClass con su contenedor space1 o space2. El compilador de Visual Basic
puede resolver las referencias porque las cadenas de calificación proporcionan una ruta de acceso inequívoca a una
declaración única.
Programación eficaz
Cuantas menos variables con el mismo nombre haya declarado, menos posibilidades tendrá de referirse accidentalmente a
una en lugar de a otra. También puede minimizar los problemas de concordancia de referencias.
Seguridad
Cuantas menos variables con el mismo nombre haya declarado, menos posibilidades habrá de que un código malintencionado
puede hacer un uso indebido de ellas.
Vea también
Tareas
Cómo: Calificar el nombre de un elemento declarado
Cómo: Ocultar una variable con el mismo nombre que su variable
Cómo: Ocultar una variable heredada
Cómo: Obtener acceso a una variable que oculta una clase derivada
Conceptos
Características de los elementos declarados
Resolver una referencia cuando muchas variables tienen el mismo nombre
Instrucciones de declaración en Visual Basic
Otros recursos
Referencias a elementos declarados
Conceptos del lenguaje Visual Basic

Sombrear en Visual Basic


Si dos elementos de programación comparten el mismo nombre, uno de ellos puede ocultar o sombrear al otro. En esta
situación, el elemento sombreado no está disponible como referencia; en vez de esto, cuando el código utiliza el nombre del
elemento, el compilador de Visual Basic resuelve en favor del elemento que sombrea.
Finalidad
La finalidad principal de sombrear es proteger la definición de los miembros de la clase. La clase base puede sufrir un cambio
que cree un elemento con el mismo nombre que otro ya definido. Si sucede esto, el modificador Shadows fuerza a referencias
a través de la clase para que se resuelvan en el miembro definido en lugar de hacerlo en el nuevo elemento de la clase base.
Tipos de sombreado
Un elemento puede sombrear a otro de dos formas. El elemento que sombrea puede declararse dentro de una subregión de la
región que contiene el elemento sombreado, en cuyo caso el sombreado se consigue por ámbito. O bien, una clase derivada
puede redefinir un miembro de una clase base, en cuyo caso el sombreado se consigue por herencia.
Sombreado por ámbito
Es posible que los elementos de programación del mismo módulo, clase o estructura tengan un nombre idéntico pero ámbitos
diferentes. Si dos elementos se declaran de esta manera y el código hace referencia al nombre que comparten, el elemento de
ámbito más restringido oculta al otro elemento (el ámbito de bloque es el más restringido).
Por ejemplo, un módulo puede definir una variable Public denominada temp y un procedimiento contenido en el módulo
puede declarar una variable local con el mismo nombre temp. Las referencias al nombre temp desde dentro del procedimiento
obtienen acceso a la variable local, mientras que las referencias a temp desde fuera del procedimiento obtienen acceso a la
variable Public. En este caso, la variable de procedimiento temp ensombrece a la variable de módulo temp.
La ilustración siguiente muestra dos variables, los dos denominadas temp. La variable local temp sombrea la variable miembro
temp cuando se tiene acceso a ella desde su propio procedimiento p. Sin embargo, la palabra clave MyClass omite el
sombreado y tiene acceso a la variable miembro.
Sombreado por ámbito

Para obtener un ejemplo de sombreado por ámbito, consulte


Cómo: Ocultar una variable con el mismo nombre que su variable.
Sombreado por herencia
Si una clase derivada vuelve a definir un elemento de programación heredado de una clase base, el elemento que redefine
ensombrece al elemento original. Se puede sombrear cualquier tipo de elemento declarado o conjunto de elementos
sobrecargados con cualquier otro tipo. Por ejemplo, una variable Integer puede sombrear un procedimiento Function. Si
sombrea un procedimiento con otro, puede utilizar una lista de parámetros distinta y un tipo de devolución distinto.
La ilustración siguiente muestra una clase base b y una clase derivada d que hereda de b. La clase base define un
procedimiento denominado proc y la clase derivada lo sombrea con otro procedimiento del mismo nombre. La primera
instrucción Call tiene acceso al sombreado proc en la clase derivada. Sin embargo, la palabra clave MyBase omite el
sombreado y tiene acceso al procedimiento sombreado en la clase base.
Sombreado por herencia
Para obtener un ejemplo de sombreado por herencia, consulte
Cómo: Ocultar una variable con el mismo nombre que su variable y Cómo: Ocultar una variable heredada.
Sombreado y nivel de acceso
El elemento de sombreado no siempre es accesible desde el código que utiliza la clase derivada. Por ejemplo, se podría
declarar Private. En este caso, se rechaza el sombreado y el compilador resuelve cualquier referencia en el mismo elemento
que tendría si no hubiera habido sombreado. Éste es el elemento accesible con menos pasos de derivación en sentido inverso
desde la clase que sombrea. Si el elemento sombreado es un procedimiento, la resolución se concreta en la versión accesible
más próxima con el mismo nombre, lista de parámetros y tipo de valor devuelto.
El ejemplo siguiente muestra una jerarquía de herencia de tres clases. Cada clase define un procedimiento Sub display y cada
clase derivada sombrea el procedimiento display en su clase base.

Public Class firstClass


Public Sub display()
MsgBox("This is firstClass")
End Sub
End Class
Public Class secondClass
Inherits firstClass
Private Shadows Sub display()
MsgBox("This is secondClass")
End Sub
End Class
Public Class thirdClass
Inherits secondClass
Public Shadows Sub display()
MsgBox("This is thirdClass")
End Sub
End Class
Module callDisplay
Dim first As New firstClass
Dim second As New secondClass
Dim third As New thirdClass
Public Sub callDisplayProcedures()
' The following statement displays "This is firstClass".
first.display()
' The following statement displays "This is firstClass".
second.display()
' The following statement displays "This is thirdClass".
third.display()
End Sub
End Module

En el ejemplo anterior, la clase derivada secondClass sombrea display con un procedimiento Private. Cuando el módulo
callDisplay llama a display en secondClass, el código de llamada está fuera de secondClass y no puede tener acceso al
procedimiento display privado. Se rechaza el sombreado y el compilador resuelve la referencia en el procedimiento display
de la clase base.
Sin embargo, la siguiente clase derivada thirdClass declara display como Public, por lo que el código de callDisplay puede
tener acceso a ella.
Sombreado y reemplazo
No debe confundirse sombrear con reemplazar. Ambos se utilizan cuando una clase derivada hereda de una clase base y
ambos vuelven a definir un elemento declarado con otro. No obstante, existen diferencias significativas entre ambos. Para ver
una comparación, consulte Diferencias entre sombrear y reemplazar.
Sombreado y sobrecarga
Si sombrea el mismo elemento de la clase base con más de un elemento en la clase derivada, los elementos sombreados se
convierten en versiones sobrecargadas de este elemento. Para obtener más información, consulte
Sobrecarga de procedimientos.
Tener acceso a un elemento sombreado
Cuando se obtiene acceso a un elemento de una clase derivada, normalmente se logra a través de la instancia actual de dicha
clase derivada, mediante la calificación del nombre del elemento con la palabra clave Me. Si una clase derivada ensombrece al
elemento de la clase base, puede obtenerse acceso al elemento de la clase base mediante su calificación con la palabra clave
MyBase.
Para obtener un ejemplo de tener acceso a un elemento sombreado, consulte
Cómo: Obtener acceso a una variable que oculta una clase derivada.
Declaración de la variable de objeto
La forma de crear la variable de objeto también puede afectar al hecho de que la clase derivada tenga acceso a un elemento de
sombreado o al elemento sombreado. El ejemplo siguiente crea dos objetos a partir de una clase derivada, pero un objeto se
declara como la clase base y el otro como la clase derivada.

Public Class baseCls


' The following statement declares the element that is to be shadowed.
Public z As Integer = 100
End Class
Public Class dervCls
Inherits baseCls
' The following statement declares the shadowing element.
Public Shadows z As String = "*"
End Class
Public Class useClasses
' The following statement creates the object declared as the base class.
Dim basObj As baseCls = New dervCls()
' Note that dervCls widens to its base class baseCls.
' The following statement creates the object declared as the derived class.
Dim derObj As dervCls = New dervCls()
Public Sub showZ()
' The following statement outputs 100 (the shadowed element).
MsgBox("Accessed through base class: " & basObj.z)
' The following statement outputs "*" (the shadowing element).
MsgBox("Accessed through derived class: " & derObj.z)
End Sub
End Class

En el ejemplo anterior, la variable basObj se declara como clase base. La asignación de un objeto dervCls a ella constituye una
conversión de ampliación y, por lo tanto, es válida. Sin embargo, la clase base no puede obtener acceso a la versión de
sombreado de la variable z en la clase derivada, por lo tanto, el compilador resuelve basObj.z con el valor original de la clase
base.
Vea también
Referencia
Shadows
Overrides
Me
MyBase
Conceptos
Ámbito en Visual Basic
Conversiones de ampliación y de restricción
Otros recursos
Referencias a elementos declarados
Conceptos del lenguaje Visual Basic

Diferencias entre sombrear y reemplazar


Cuando define una clase que hereda de una clase base, a veces desea volver a definir uno o más elementos de la clase base en
la clase derivada. El sombreado y el reemplazo están ambos disponibles para esta finalidad.
Comparación
Es fácil confundir el sombreado y el reemplazo. Ambos se utilizan cuando una clase derivada hereda de una clase base y
ambos vuelven a definir un elemento declarado con otro. No obstante, existen diferencias significativas entre ambos.
La siguiente tabla compara sombrear y reemplazar.
Punto de comparación Sombrear Reemplazar
Finalidad Proteger frente a una modificación posterior d Lograr el polimorfismo mediante la definició
e clase base que introduce un miembro ya defi n de una implementación distinta de un proc
nido en la clase derivada edimiento o propiedad con la misma secuenc
ia de llamada1

Elemento redefinido Cualquier tipo de elemento declarado Sólo un procedimiento (Function, Sub o Op
erator) o propiedad

Elemento de redefinición Cualquier tipo de elemento declarado Sólo un procedimiento o propiedad con la se
cuencia de llamada idéntica1

Nivel de acceso de elemento de Cualquier nivel de acceso No se puede cambiar el nivel de acceso de el
redefinición emento reemplazado

Lectura y escritura de elemento Cualquier combinación No puede cambiar la capacidad de lectura o


de redefinición de escritura de la propiedad reemplazada

Control sobre redefinición El elemento de clase base no puede cumplir o El elemento de clase base puede especificar
prohibir el sombreado MustOverride, NotOverridable u Overrida
ble

Utilización de palabras clave Con las clases derivadas se recomienda el uso En una clase base se requiere Overridable o
de Shadows; en caso de que no se especifique MustOverride y en una clase derivada se re
Shadows ni Overrides, se utilizará Shadows c quiere Overrides.
omo predeterminada2

Herencia de elementos de redefi El elemento de sombreado será heredado por c El elemento que reemplaza a otro será hered
nición mediante clases derivada lases derivadas posteriores, mientras que el ele ado por clases derivadas posteriores; mientra
s procedentes de una clase deriv mento sombreado permanecerá oculto3 s que el elemento reemplazado permanecerá
ada en particular en el mismo estado.

1 La secuencia de llamada se compone de tipo de elemento (Function, Sub, Operator o Property), nombre, lista de
parámetros y tipo de valor devuelto. No se puede reemplazar un procedimiento con una propiedad o viceversa. No puede
reemplazar un tipo de procedimiento (Function, Sub u Operator) con otro tipo.
2 si no especifica Shadows u Overrides, el compilador emite un mensaje de advertencia para ayudarle a asegurarse del tipo
de redefinición que desea utilizar. Si omite la advertencia, se utiliza el mecanismo de sombreado.
3 Si el elemento de sombreado no está accesible en una clase derivada posterior, dicho sombreado no se hereda. Por ejemplo,
si se declara como Private el elemento de sombreado, cualquier clase que se derive de la clase derivada hereda el elemento
original en lugar del elemento de sombreado.
Instrucciones
Normalmente, el reemplazo se utiliza en los casos siguientes:
Cuando está definiendo las clases derivadas polimórficas.
Cuando quiere tener la seguridad de que el compilador cumpla el tipo de elemento idéntico y la secuencia de llamada.
Normalmente, el sombreado se utiliza en los casos siguientes:
Cuando prevé que se podría modificar su clase base y define un elemento utilizando el mismo nombre que el suyo.
Cuando quiere tener la libertad de cambiar el tipo de elemento o la secuencia de llamada.
Vea también
Tareas
Cómo: Distinguir entre dos elementos con el mismo nombre
Cómo: Ocultar una variable con el mismo nombre que su variable
Cómo: Ocultar una variable heredada
Cómo: Obtener acceso a una variable que oculta una clase derivada
Referencia
Shadows
Overrides
Conceptos
Resolver una referencia cuando muchas variables tienen el mismo nombre
Sombrear en Visual Basic
Otros recursos
Referencias a elementos declarados
Conceptos del lenguaje Visual Basic

Cómo: Ocultar una variable con el mismo nombre que su


variable
Puede ocultar una variable sombreándola, es decir, volviéndola a definir con una variable del mismo nombre. Puede sombrear
la variable que desea ocultar de dos maneras:
Sombreado por ámbito. Puede sombrearla por ámbito volviéndola a declarar dentro de una subregión de la región
que contiene la variable que desea ocultar.
Sombreado por herencia. Si la variable que desea ocultar está definida en el nivel de clase, puede sombrearla por
herencia volviéndola a declarar con la palabra clave Shadows en una clase derivada.
Dos maneras a ocultar una variable
Para ocultar una variable sombreándola por ámbito
1. Determine la región que define la variable que desea ocultar y determine una subregión en la que va a definirla de nuevo
en su variable.
Región de la variable Subregión permitida para volverla a definir
Módulo Una clase dentro del módulo

Clase Una subclase dentro de la clase


Un procedimiento dentro de la clase

No puede volver a definir una variable de procedimiento en un bloque dentro de ese procedimiento, por ejemplo en una
construcción If...End If o en un bucle For.
2. Cree la subregión si es que no existe ya.
3. Dentro de la subregión, escriba una instrucción Instrucción Dim (Visual Basic) que declara la variable de sombreado.
Cuando un código de la subregión hace referencia al nombre de variable, el compilador resuelve la referencia con la
variable sombreada.
El ejemplo siguiente ilustra el sombreado por ámbito, así como una referencia que omite el sombreado.

Module shadowByScope
' The following statement declares num as a module-level variable.
Public num As Integer
Sub show()
' The following statement declares num as a local variable.
Dim num As Integer
' The following statement sets the value of the local variable.
num = 2
' The following statement displays the module-level variable.
MsgBox(CStr(shadowByScope.num))
End Sub
Sub useModuleLevelNum()
' The following statement sets the value of the module-level variable.
num = 1
show()
End Sub
End Module

El ejemplo anterior declara la variable num tanto en el nivel de módulo como en el nivel de procedimiento (en el
procedimiento show). La variable local num sombrea la variable de nivel de módulo num dentro de show, por lo que la
variable local se establece en 2. Sin embargo, no hay ninguna variable local para sombrear num en el procedimiento
useModuleLevelNum. Por consiguiente, useModuleLevelNum establece el valor de la variable de nivel de módulo en 1.

La llamada a MsgBox dentro de show omite el mecanismo de sombreado calificando num con el nombre del módulo. Por
consiguiente, muestra la variable de nivel de módulo en lugar de la variable local.
Para ocultar una variable sombreándola por herencia
1. Asegúrese de que la variable que desea ocultar está declarada en una clase y en el nivel de clase (fuera de cualquier
procedimiento). De lo contrario no puede sombrearla por herencia.
2. Defina una clase derivada de la clase de la variable si es que no existe ya una.
3. Dentro de la clase derivada, escriba una instrucción Dim que declare su variable. Incluya la palabra clave Shadows en la
declaración.
Cuando un código de la clase derivada hace referencia al nombre de variable, el compilador resuelve la referencia en su
variable.
El ejemplo siguiente ilustra el sombreado por herencia. Realiza dos referencias, una que tiene acceso a la variable de
sombreado y otra que omite el sombreado.

Public Class shadowBaseClass


Public shadowString As String = "This is the base class string."
End Class
Public Class shadowDerivedClass
Inherits shadowBaseClass
Public Shadows shadowString As String = "This is the derived class string."
Public Sub showStrings()
Dim s As String = "Unqualified shadowString: " & shadowString _
& vbCrLf & "MyBase.shadowString: " & MyBase.shadowString
MsgBox(s)
End Sub
End Class

El ejemplo anterior declara la variable shadowString en la clase base y la sombrea en la clase derivada. El procedimiento
showStrings de la clase derivada muestra la versión de sombreado de la cadena cuando el nombre shadowString no
está calificado. Luego, muestra la versión sombreada cuando shadowString está calificado con la palabra clave MyBase.

Programación eficaz
El sombreado presenta más de una versión de una variable con el mismo nombre. Cuando una instrucción de código hace
referencia al nombre de variable, la versión en la que el compilador resuelve la referencia depende de factores como la
ubicación de la instrucción de código y la presencia de una cadena de calificación. Esto puede aumentar el riesgo de hacer
referencia a una versión no deseada de una variable sombreada. Puede reducir ese riesgo calificando por completo todas las
referencias en una variable sombreada.
Vea también
Tareas
Cómo: Distinguir entre dos elementos con el mismo nombre
Cómo: Ocultar una variable heredada
Cómo: Obtener acceso a una variable que oculta una clase derivada
Referencia
Overrides
MyBase
Conceptos
Resolver una referencia cuando muchas variables tienen el mismo nombre
Sombrear en Visual Basic
Diferencias entre sombrear y reemplazar
Otros recursos
Referencias a elementos declarados
Conceptos del lenguaje Visual Basic

Cómo: Ocultar una variable heredada


Una clase derivada hereda todas las definiciones de su clase base. Si desea definir una variable con el mismo nombre que un
elemento de la clase base, puede ocultar o sombrear ese elemento de la clase base al definir su variable en la clase derivada.
De este modo, un código de la clase derivada tiene acceso a su variable a menos que omita de forma explícita el mecanismo de
sombreado.
Otra razón para desear ocultar una variable heredada es protegerla de la revisión de la clase base. La clase base puede
experimentar un cambio que modifica el elemento que ha heredado. En este caso, el modificador Shadows fuerza las
referencias de la clase derivada que se deben resolver en la variable, no en el elemento de la clase base.
Para ocultar una variable heredada
1. Asegúrese de que la variable que desea ocultar está declarada en el nivel de clase (fuera de cualquier procedimiento). De
lo contrario, no necesita ocultarla.
2. Dentro de la clase derivada, escriba Instrucción Dim (Visual Basic) para declarar la variable. Utilice el mismo nombre que
el de la variable heredada.
3. Incluya la palabra clave Shadows en la declaración.
Cuando un código de la clase derivada hace referencia al nombre de variable, el compilador resuelve la referencia en su
variable.
El ejemplo siguiente ilustra el sombreado de una variable heredada.

Public Class shadowBaseClass


Public shadowString As String = "This is the base class string."
End Class
Public Class shadowDerivedClass
Inherits shadowBaseClass
Public Shadows shadowString As String = "This is the derived class string."
Public Sub showStrings()
Dim s As String = "Unqualified shadowString: " & shadowString _
& vbCrLf & "MyBase.shadowString: " & MyBase.shadowString
MsgBox(s)
End Sub
End Class

El ejemplo anterior declara la variable shadowString de la clase base y la sombrea en la clase derivada. El procedimiento
showStrings de la clase derivada muestra la versión sombreada de la cadena cuando el nombre shadowString no está
calificado. Luego, muestra la versión sombreada cuando shadowString está calificado con la palabra clave MyBase.

Programación eficaz
Al sombrear, se presenta más de una versión de una variable con el mismo nombre. Cuando una instrucción de código hace
referencia al nombre de variable, la versión para la que el compilador resuelve la referencia depende de factores como la
ubicación de la instrucción de código y la presencia de una cadena que califique al nombre de la variable. Esto puede aumentar
el riesgo de hacer referencia a una versión no deseada de una variable sombreada. Puede reducir ese riesgo calificando por
completo todas las referencias en una variable sombreada.
Vea también
Tareas
Cómo: Distinguir entre dos elementos con el mismo nombre
Cómo: Ocultar una variable con el mismo nombre que su variable
Cómo: Obtener acceso a una variable que oculta una clase derivada
Referencia
Overrides
Conceptos
Resolver una referencia cuando muchas variables tienen el mismo nombre
Sombrear en Visual Basic
Diferencias entre sombrear y reemplazar
Otros recursos
Referencias a elementos declarados
Conceptos del lenguaje Visual Basic

Cómo: Obtener acceso a una variable que oculta una clase


derivada
Cuando un código de una clase derivada tiene acceso a una variable, el compilador resuelve normalmente la referencia en la
versión accesible más cercana, es decir, la versión accesible con el menor número de pasos de derivación en sentido inverso
desde la clase que obtiene acceso. Si la variable está definida en la clase derivada, el código tiene acceso normalmente a esta
definición.
Si la variable de la clase derivada enmascara una variable de la clase base, oculta la versión de la clase base. Sin embargo,
puede tener acceso a la variable de la clase base calificándola con la palabra clave MyBase.
Para tener acceso a una variable de la clase base ocultada por una clase derivada
En una expresión o instrucción de asignación, preceda el nombre de variable con la palabra clave MyBase y un punto (.).
El compilador resuelve la referencia en la versión de la clase base de la variable.
El ejemplo siguiente ilustra el ocultamiento a través de la herencia. Realiza dos referencias, una que tiene acceso a la
variable de ocultamiento y otra que omite el ocultamiento.

Public Class shadowBaseClass


Public shadowString As String = "This is the base class string."
End Class
Public Class shadowDerivedClass
Inherits shadowBaseClass
Public Shadows shadowString As String = "This is the derived class string."
Public Sub showStrings()
Dim s As String = "Unqualified shadowString: " & shadowString _
& vbCrLf & "MyBase.shadowString: " & MyBase.shadowString
MsgBox(s)
End Sub
End Class

El ejemplo anterior declara la variable shadowString en la clase base y la oculta en la clase derivada. El procedimiento
showStrings de la clase derivada muestra la versión oculta de la cadena cuando el nombre shadowString no está
calificado. Luego, muestra la versión oculta cuando shadowString está calificado con la palabra clave MyBase.

Programación eficaz
Para reducir el riesgo de hacer referencia a una versión no deseada de una variable oculta, puede calificar por completo todas
las referencias a una variable oculta. El ocultamiento presenta más de una versión de una variable con el mismo nombre.
Cuando una instrucción de código hace referencia al nombre de variable, la versión en la que el compilador resuelve la
referencia depende de factores como la ubicación de la instrucción de código y la presencia de una cadena de calificación. Esto
puede aumentar el riesgo de hacer referencia a una versión errónea de la variable.
Vea también
Tareas
Cómo: Distinguir entre dos elementos con el mismo nombre
Cómo: Ocultar una variable con el mismo nombre que su variable
Cómo: Ocultar una variable heredada
Referencia
Shadows
Overrides
Conceptos
Resolver una referencia cuando muchas variables tienen el mismo nombre
Sombrear en Visual Basic
Diferencias entre sombrear y reemplazar
Otros recursos
Referencias a elementos declarados
Conceptos del lenguaje Visual Basic

Tipos de datos en Visual Basic


El tipo de datos de un elemento de programación hace referencia al tipo de datos que puede contener y a cómo se almacenan
dichos datos. Los tipos de datos se aplican a todos los valores que pueden almacenarse en la memoria del equipo o participar
en la evaluación de una expresión. Cada variable, literal, constante, enumeración, propiedad, parámetro de procedimiento,
argumento de procedimiento y valor devuelto por un procedimiento tiene un tipo de datos.
Tipos de datos declarados
A menos que utilice la programación sin tipos, debe declarar los tipos de datos de todos los elementos de programación. (Para
obtener más información, vea Programación sin tipos en Visual Basic).
Un elemento de programación se define con una instrucción de declaración y su tipo de datos se especifica con la cláusula As.
La tabla siguiente muestra las instrucciones utilizadas para declarar diversos elementos.
Elemento de progra Declaración de tipos de datos
mación
Variable En una Instrucción Dim (Visual Basic)
Dim amount As Double
Static yourName As String
Public billsPaid As Decimal = 0

Literal Con un carácter de tipo de literal; vea "Caracteres de tipo de literal" en Caracteres de tipo
Dim searchChar As Char = "." C

Constante En una Instrucción Const (Visual Basic)


Const modulus As Single = 4.17825F

Enumeración En una Instrucción Enum (Visual Basic)


Public Enum colors

Propiedad En una Property (Instrucción)


Property region() As String

Parámetro de procedi En una Instrucción Sub (Visual Basic), Instrucción Function (Visual Basic) o Operator (Instrucción)
miento Sub addSale(ByVal amount As Double)

Argumento de proced En el código de llamada; cada argumento es un elemento de programación que ya se ha declarado o un
imiento a expresión que contiene los elementos declarados
subString = Left( inputString , 5 )

Valor devuelto por pr En una Instrucción Function (Visual Basic) o Operator (Instrucción)
ocedimiento Function convert(ByVal b As Byte) As String

Vea también
Tareas
Solucionar problemas de tipos de datos
Referencia
Resumen de tipos de datos (Visual Basic)
Conceptos
Caracteres de tipo
Tipos de datos compuestos
Tipos genéricos en Visual Basic
Programación sin tipos en Visual Basic
Otros recursos
Tipos de datos elementales
Implementación de tipos de datos
Conversiones de tipos en Visual Basic
Estructuras: tipos de datos propios
Conceptos del lenguaje Visual Basic

Caracteres de tipo
Además de especificar un tipo de datos en una instrucción de declaración, puede forzar el tipo de datos de algunos elementos
de programación con un carácter de tipo. El carácter de tipo debe ir justo después del elemento, sin ningún tipo de carácter
intermedio.
El carácter de tipo no forma parte del nombre del elemento. Se puede hacer referencia a un elemento definido con un carácter
de tipo sin el carácter de tipo.
Caracteres de tipo de identificador
Visual Basic proporciona un conjunto de caracteres de tipo de identificador que se pueden utilizar en una declaración para
especificar el tipo de datos de una variable o constante. La tabla siguiente muestra los caracteres de tipo de identificador
disponibles, con ejemplos de su utilización.
Carácter de tipo de identificador Tipo de datos Ejemplo
% Integer Dim L%

& Long Dim M&

@ Decimal Const W@ = 37.5

! Single Dim Q!

# Double Dim X#

$ String Dim V$ = "Secret"

No existe ningún carácter de tipo de identificador para los tipos de datos Boolean, Byte, Char, Date, Object, SByte, Short,
UInteger, ULong o UShort, ni para los tipos de datos compuestos como matrices o estructuras.
En algunos casos, puede anexar el carácter $ a una función de Visual Basic, por ejemplo Left$ en lugar de Left, para obtener un
valor devuelto de tipo String.
En todos los casos, el carácter de tipo de identificador debe ir inmediatamente después del nombre del identificador.
Caracteres de tipo de literal
Un literal es una representación textual de un valor determinado de un tipo de datos.
Tipos de literales predeterminados
El formato de un literal tal como aparece en el código suele determinar su tipo de datos. La siguiente tabla muestra estos tipos
predeterminados.
Formato textual de literal Tipo de datos predeterminado Ejemplo
Numérico, ninguna parte fraccionaria Integer 2147483647

Numérico, ningún parte fraccionaria, demasiado grande para Integer Long 2147483648

Numérico, parte fraccionaria Double 1.2

Incluido entre comillas String "A"

Incluido con signos de número Date #5/17/1993 9:32 AM#

Tipo de literales forzados


Visual Basic proporciona un conjunto de caracteres de tipo de literal, que puede utilizar para forzar que un literal adopte un
tipo de datos distinto del que indica su formato. Para hacerlo, anexe el carácter al final del literal. La tabla siguiente muestra los
caracteres de tipo de literal disponibles, con ejemplos de su utilización.
Caracteres de tipo de literal Tipo de datos Ejemplo
S Short I = 347S

I Integer J = 347I

L Long K = 347L

D Decimal X = 347D

F Single Y = 347F

R Double Z = 347R

US UShort L = 347US

UI UInteger M = 347UI

UL ULong N = 347UL

C Char Q = "."C

No existe ningún carácter de tipo de literal para los tipos de datos Boolean, Byte, Date, Object, SByte o String, ni para los
tipos de datos compuestos como matrices o estructuras.
Los literales también pueden utilizar los caracteres de tipo de identificador (%, &, @, !, #, $), tal y como lo hacen las variables,
constantes y expresiones. Sin embargo, los caracteres de tipo de literal (S, I, L, D, F, R, C) sólo se pueden utilizar con literales.
En todos los casos, el carácter de tipo de literal debe ir inmediatamente después del valor de literal.
Literales hexadecimales y octales
El compilador traduce normalmente un literal entero para que esté en el sistema numérico decimal (base 10). Puede forzar un
literal entero para que sea hexadecimal (base 16) con el prefijo &H y puede forzarle para que sea octal (base 8) con el prefijo
&O. Los dígitos que siguen al prefijo deben ser adecuados para el sistema numérico. Esto se muestra en la tabla siguiente:
Base numérica Prefijo Valores de dígitos válidos Ejemplo
Hexadecimal (base 16) &H 0-9 y A-F &HFFFF

Octal (base 10) &O 0-7 &O77

Puede agregar a un literal prefijado un carácter de tipo de literal. Esto se muestra en el siguiente ejemplo.

Dim counter As Short = &H8000S


Dim flags As UShort = &H8000US

En el ejemplo anterior, counter tiene el valor decimal de -32768 y flags, el valor decimal de +32768.
Vea también
Tareas
Solucionar problemas de tipos de datos
Referencia
Resumen de tipos de datos (Visual Basic)
Conceptos
Tipos de datos en Visual Basic
Programación sin tipos en Visual Basic
Declaración de variable en Visual Basic
Otros recursos
Tipos de datos elementales
Implementación de tipos de datos
Conversiones de tipos en Visual Basic
Conceptos del lenguaje Visual Basic

Tipos de datos elementales


Visual Basic proporciona un conjunto de tipos de datos predefinidos que puede utilizar para numerosos elementos de
programación. Esta sección describe estos tipos y la forma de utilizarlos.
En esta sección
Tipos de datos numéricos
Describe los tipos numéricos integrales y no integrales.
Tipos de datos de caracteres
Describe los tipos Char y String.
Tipos de datos varios
Describe los tipos Boolean, Date y Object.
Secciones relacionadas
Tipos de datos en Visual Basic
Presenta los tipos de datos de Visual Basic y describe cómo utilizarlos.
Resumen de tipos de datos (Visual Basic)
Enumera los tipos de datos básicos proporcionados por Visual Basic.
Conceptos del lenguaje Visual Basic

Tipos de datos numéricos


Visual Basic proporciona diversos tipos de datos numéricos para controlar números en varias representaciones. Los tipos
integrales representan sólo números enteros (positivos, negativos y cero) y los tipos no integrales representan números con
partes enteras y fraccionarias.
Para ver una tabla que muestra una comparación punto por punto de los tipos de datos de Visual Basic, consulte
Resumen de tipos de datos (Visual Basic).
Tipos numéricos integrales
Los tipos de datos integrales son aquellos que sólo representan números sin partes fraccionarias.
Los tipos de datos integrales con signo son SByte (Tipo de datos, Visual Basic) (de 8 bits), Short (Tipo de datos, Visual Basic) (de
16 bits), Integer (Tipo de datos, Visual Basic) (de 32 bits) y Long (Tipo de datos, Visual Basic) (de 64 bits). Si una variable
almacena siempre enteros en lugar de números fraccionarios, declárela como uno de estos tipos.
Los tipos integrales sin signo son Byte (Tipo de datos, Visual Basic) (de 8 bits), UShort (Tipo de datos, Visual Basic) (de 16 bits),
UInteger (Tipo de datos) (de 32 bits) y ULong (Tipo de datos, Visual Basic) (de 64 bits). Si una variable contiene datos binarios o
datos de naturaleza desconocida, declárela como uno de estos tipos.
Rendimiento
Los operadores aritméticos son más rápidos con los tipos integrales que con cualquier otro tipo de datos. Son más rápidos con
los tipos Integer y UInteger en Visual Basic.
Enteros grandes
Si necesita contener un entero más grande que lo que el tipo de datos Integer puede contener, puede utilizar el tipo de datos
Long en su lugar. Las variables Long pueden contener números de -9.223.372.036.854.775,808 a través de
9.223.372.036.854.775,808. Las operaciones con Long son ligeramente más lentas que con Integer.
Si necesita valores aun más grandes, puede utilizar Decimal (Tipo de datos, Visual Basic). Puede contener números de -
79.228.162.514.264.337.593.543.950,335 a 79.228.162.514.264.337.593.543.950,335 en una variable Decimal si no utiliza
ninguna posición decimal. Sin embargo, las operaciones con números Decimal son considerablemente más lentas que con
cualquier otro tipo de dato numérico.
Enteros pequeños
Si no necesita el intervalo completo del tipo de datos Integer, puede utilizar el tipo de datos Short que puede contener
enteros de -32,768 a 32,767. Para el intervalo entero más pequeño, el tipo de datos SByte contiene enteros de -128 a 127. Si
tiene un número muy grande de variables que contienen enteros pequeños, Common Language Runtime puede almacenar a
veces las variables Short y SByte de un modo más eficaz y ahorrar espacio de memoria. Sin embargo, las operaciones con
Short y SByte son algo más lentas que con Integer.
Enteros sin signo
Si sabe que la variable no va a necesitar contener nunca un número negativo, puede utilizar los tipos sin signo Byte, UShort,
UInteger y ULong. Cada uno de estos tipos de datos puede contener un entero positivo dos veces más grande que su tipo
con signo correspondiente (SByte, Short, Integer y Long). En lo que se refiere a rendimiento, un tipo sin signo es
exactamente tan eficaz como su tipo con signo correspondiente. En particular, UInteger comparte con Integer la distinción de
ser el más eficaz de todos los tipos de datos numérico básicos.
Tipos numéricos no integrales
Los tipos de datos no integrales son aquellos que representan números que contienen tanto partes enteras como decimales.
Los tipos de datos numéricos no integrales son Decimal (punto fijo de 128 bits), String (Tipo de datos, Visual Basic) (punto
flotante de 32 bits) y Double (Tipo de datos, Visual Basic) (punto flotante de 64 bits). Todos ellos son tipos con signo. Si una
variable puede contener una fracción, declárela como variable de uno de estos tipos.
Decimal no es un tipo de datos en punto flotante. Los números Decimal tienen un valor entero binario y un factor de escala
entero que especifica qué parte del valor es una fracción decimal.
Los números con punto flotante (Single y Double) tienen intervalos mayores que los números Decimal pero pueden estar
sujetos a errores de redondeo. Los tipos de punto flotante admiten menos dígitos significativos que Decimal pero pueden
representar valores de mayor magnitud.
Los valores de números no integrales se pueden expresar como mmmEeee, donde mmm es la mantisa (dígitos significativos)
y eee es el exponente (una potencia de 10). Los valores positivos superiores de los tipos no integrales son
7.9228162514264337593543950335E+28 para Decimal, 3.4028235E+38 para Single y 1.79769313486231570E+308 para
Double.
Rendimiento
Double es el más eficaz de los tipos de datos fraccionarios, porque los procesadores de las plataformas actuales realizan las
operaciones de punto flotante en precisión doble. Sin embargo, las operaciones con Double no son tan rápidas como con los
tipos integrales como Integer.
Magnitudes pequeñas
Para los números con la magnitud más pequeña posible (cercana a 0), las variables Double pueden contener números tan
pequeños como -4.94065645841246544E-324 para valores negativos y 4.94065645841246544E-324 para valores positivos.
Números fraccionarios pequeños
Si no necesita el intervalo completo del tipo de datos Double, puede utilizar el tipo de datos Single que puede contener
números en punto flotante de -3.4028235E+38 a 3.4028235E+38. Las magnitudes más pequeñas para las variables Single
son -1.401298E-45 para valores negativos y 1.401298E-45 para valores positivos. Si tiene un número muy grande de variables
que contienen números en punto flotante pequeños, Common Language Runtime puede almacenar a veces las variables
Single de un modo más eficaz y ahorrar espacio de memoria.
Vea también
Tareas
Solucionar problemas de tipos de datos
Cómo: Contener los números enteros en una variable
Cómo: Contener las fracciones en una variable
Cómo: Contener el número mayor posible en una variable
Cómo: Optimizar el almacenamiento de enteros positivos con tipos sin signo
Cómo: Llamar a una función de Windows que adopta tipos sin signo
Cómo: Contener los dígitos más significativos de una variable
Cómo: Mantener los valores de moneda de una variable
Conceptos
Tipos de datos de caracteres
Tipos de datos varios
Otros recursos
Tipos de datos elementales
Conceptos del lenguaje Visual Basic

Cómo: Contener los números enteros en una variable


Los enteros son números enteros, incluidos positivos, cero y negativos. Una variable contiene enteros si la declara como tipo
Integer. Integer (Tipo de datos, Visual Basic) puede contener enteros de -2.147.483,648 a 2.147.483,647.
También puede utilizar Long (Tipo de datos, Visual Basic), Short (Tipo de datos, Visual Basic) o
SByte (Tipo de datos, Visual Basic) para contener enteros. Para obtener más información, consulte Tipos de datos numéricos.
Para contener números enteros en una variable
1. Declare la variable con Instrucción Dim (Visual Basic).
2. Agregue detrás del nombre de variable una cláusula As.
3. Agregue tras la palabra clave As la palabra clave Integer.

Dim students As Integer

Vea también
Referencia
Resumen de tipos de datos (Visual Basic)
Conceptos
Tipos de datos en Visual Basic
Caracteres de tipo
Otros recursos
Tipos de datos elementales
Conceptos del lenguaje Visual Basic

Cómo: Contener el número mayor posible en una variable


Una variable contiene los mayores números posibles con precisión si la declara como tipo de datos Decimal. La capacidad del
entero mayor siguiente es el tipo de datos ULong. Si no necesita la precisión de tipos de datos enteros, puede utilizar los tipos
de punto flotante para una magnitud aún mayor.
Dos significados diferentes para "mayor"
Valor preciso mayor. Si necesita contener enteros grandes con una precisión completa en el dígito de las unidades, puede
utilizar Decimal (Tipo de datos, Visual Basic). El tipo Decimal puede contener enteros de -
79.228.162.514.264.337.593.543.950.335 a 79.228.162.514.264.337.593.543.950.335 (7.9...E+28).
Magnitud máxima. Los tipos fraccionarios Single y Double pueden contener números de magnitud mayor, pero no con una
precisión exacta. String (Tipo de datos, Visual Basic) proporciona 8 dígitos de precisión y Double (Tipo de datos, Visual Basic),
18 dígitos de precisión.
Para contener los enteros mayores posibles en una variable
1. Declare la variable con Instrucción Dim (Visual Basic).
2. Agregue detrás del nombre de variable una cláusula As que especifique la palabra clave Decimal.

Dim atomsInTheUniverse As Decimal

Tipos de datos eficaces


El tipo Decimal tiene el rendimiento más lento de todos los tipos de datos numéricos elementales. Si los números enteros no
logran estos valores grandes y son siempre positivos o cero, considere la posibilidad de utilizar el tipo ULong.
Una variable de ULong (Tipo de datos, Visual Basic) puede contener enteros de 0 a 18.446.744.073.709.551.615 (1.8...E+19).
Las operaciones con números del tipo de datos ULong son mucho más rápidas que con el tipo de datos Decimal, aunque no
son realmente tan eficaces como las realizadas con UInteger.
Para contener enteros no negativos grandes en una variable con un rendimiento eficaz
1. Declare la variable con una instrucción Dim.
2. Agregue detrás del nombre de variable una cláusula As que especifique la palabra clave ULong.

Dim atomsInTheEarth As ULong

Vea también
Referencia
Resumen de tipos de datos (Visual Basic)
Integer (Tipo de datos, Visual Basic)
Long (Tipo de datos, Visual Basic)
Decimal (Tipo de datos, Visual Basic)
UInteger (Tipo de datos)
ULong (Tipo de datos, Visual Basic)
Conceptos
Caracteres de tipo
Otros recursos
Tipos de datos elementales
Conceptos del lenguaje Visual Basic

Cómo: Optimizar el almacenamiento de enteros positivos con


tipos sin signo
Si tiene una variable que contiene sólo valores positivos (o 0) y estos valores nunca superan 4.294.967,295, puede declarar la
variable como UInteger en lugar de Long.
La ventaja de utilizar UInteger es que los tipos Integer y UInteger enteros de 32 bits son los tipos de datos más eficaces en
plataformas de 32 bits, y proporcionan un rendimiento óptimo para su aplicación.
Puede utilizar una variable Integer si sus valores positivos nunca superan 2.147.483,647.
Para declarar un entero con sólo valores positivos
Declare la variable como As UInteger. Esto se ilustra en el siguiente ejemplo:

Public Function memoryRequired(ByVal m As UInteger) As UInteger


Static r As UInteger = 0
Try
r += m
Catch eo As System.OverflowException
r = 0
Catch ex As System.Exception
MsgBox("Incrementing required memory causes """ & ex.Message & """")
End Try
Return r
End Function

Puede probar la función memoryRequired con el código siguiente:

Public Sub consumeMemoryRequired()


Dim m1 As UInteger = UInteger.MaxValue - 100
Dim m2 As UInteger = 100
MsgBox("Max = " & CStr(UInteger.MaxValue) & vbCrLf & _
CStr(m1) & " -> " & CStr(memoryRequired(m1)) & vbCrLf & _
"+ " & CStr(m2) & " -> " & CStr(memoryRequired(m2)) _
& vbCrLf & "+ 1 -> " & CStr(memoryRequired(1)))
End Sub

Precaución
El tipo de datos UInteger no forma parte de Common Language Specification (CLS), por lo que el código compatible c
on CLS no puede utilizar un componente que lo utiliza.

Vea también
Tareas
Cómo: Llamar a una función de Windows que adopta tipos sin signo
Referencia
Resumen de tipos de datos (Visual Basic)
Integer (Tipo de datos, Visual Basic)
UInteger (Tipo de datos)
Conceptos del lenguaje Visual Basic

Cómo: Llamar a una función de Windows que adopta tipos sin


signo
Si está utilizando una clase, módulo o estructura que tiene miembros de tipos de enteros sin signo, puede tener acceso a estos
miembros con Visual Basic.
Para llamar a una función Windows que adopta un tipo sin signo
1. Utilice Declare (Instrucción) para indicar a Visual Basic qué biblioteca contiene la función, qué nombre tiene en esa
biblioteca, cuál es su secuencia de llamada y cómo convertir las cadenas al llamarla.
2. En la instrucción Declare, utilice UInteger, ULong, UShort o Byte como corresponda a cada parámetro con un tipo sin
signo.
3. Consulte la documentación de la función de Windows a la que está llamando para buscar los nombres y valores de las
constantes que utiliza. Muchos de éstas están definidas en el archivo WinUser.h.
4. Declare las constantes necesarias en su código. Muchas constantes de Windows son valores sin signo de 32 bits y debe
declararlas As UInteger.
5. Llame a la función de la manera normal. En el ejemplo siguiente se llama a la función de Windows MessageBox que
adopta un argumento de entero sin signo.

Public Class windowsMessage


Private Declare Auto Function mb Lib "user32.dll" Alias "MessageBox" _
(ByVal hWnd As Integer, _
ByVal lpText As String, _
ByVal lpCaption As String, _
ByVal uType As UInteger) As Integer
Private Const MB_OK As UInteger = 0
Private Const MB_ICONEXCLAMATION As UInteger = &H30
Private Const IDOK As UInteger = 1
Private Const IDCLOSE As UInteger = 8
Private Const c As UInteger = MB_OK Or MB_ICONEXCLAMATION
Public Function messageThroughWindows() As String
Dim r As Integer = mb(0, "Click OK if you see this!", _
"Windows API call", c)
Dim s As String = "Windows API MessageBox returned " _
& CStr(r)& vbCrLf & "(IDOK = " & CStr(IDOK) _
& ", IDCLOSE = " & CStr(IDCLOSE) & ")"
Return s
End Function
End Class

Puede probar la función messageThroughWindows con el código siguiente.

Public Sub consumeWindowsMessage()


Dim w As New windowsMessage
w.messageThroughWindows()
End Sub

Precaución
Los tipos de datos UInteger, ULong, UShort y SByte no forman parte de Common Language Specification (CLS), por
lo que el código compatible con CLS no puede utilizar un componente que los utiliza.

Nota de seguridad
Si realiza una llamada a un código no administrado, como la interfaz de programación de aplicaciones (API) de Windo
ws, expone su código a un posible riesgo de seguridad.

Nota de seguridad
Para llamar a la API de Windows, se requiere un permiso de código no administrado que puede afectar a su ejecución e
n situaciones de confianza parcial. Para obtener más información, consulte SecurityPermission y
Permisos de acceso a código.

Vea también
Tareas
Cómo: Optimizar el almacenamiento de enteros positivos con tipos sin signo
Tutorial: Llamar a las API de Windows
Referencia
Resumen de tipos de datos (Visual Basic)
Integer (Tipo de datos, Visual Basic)
UInteger (Tipo de datos)
Declare (Instrucción)
Conceptos del lenguaje Visual Basic

Cómo: Contener las fracciones en una variable


Una variable contiene números con fracciones si la declara como tipo Double. Double (Tipo de datos, Visual Basic) puede
contener números de punto flotante de -1.79769313486231570E+308 a 1.79769313486231570E+308.
También puede utilizar String (Tipo de datos, Visual Basic) o Decimal (Tipo de datos, Visual Basic) para contener las fracciones.
Para obtener más información, consulte Tipos de datos numéricos.
Para contener fracciones en una variable
1. Declare la variable con Instrucción Dim (Visual Basic).
2. Agregue detrás del nombre de variable una cláusula As.
3. Agregue tras la palabra clave As la palabra clave Double.
Vea también
Referencia
Resumen de tipos de datos (Visual Basic)
Conceptos
Caracteres de tipo
Tipos de datos numéricos
Otros recursos
Tipos de datos elementales
Conceptos del lenguaje Visual Basic

Cómo: Contener los dígitos más significativos de una variable


Una variable contiene números con fracciones si la declara como tipo de datos Decimal.
Una variable de Decimal (Tipo de datos, Visual Basic) puede contener números con 29 dígitos significativos e incluir hasta 28
posiciones decimales.
Rendimiento. Decimal es el tipo de datos numérico menos eficaz. Si no necesita la precisión completa del tipo de datos
Decimal, puede utilizar el tipo de datos Double que puede contener hasta 18 dígitos significativos. Las operaciones con
Double son más rápidas que con Decimal y las variables Double ocupan menos espacio en la memoria. Para obtener más
información sobre Double, consulte Cómo: Contener las fracciones en una variable.
Debe considerar la importancia de la precisión frente al rendimiento antes de elegir un tipo de datos.
Magnitud más grande. Si necesita la variable para que contenga números de una magnitud más grande que la que el tipo de
datos Decimal puede contener, utilice el tipo de datos Double o Single, ya que tienen un intervalo mayor. Mientras las
variables Decimal pueden contener valores de hasta 7.9228162514264337593543950335E+28, las variables Single pueden
contener hasta 3.4028235E+38 y las variables Double hasta 1.79769313486231570E+308.
Para contener los dígitos más significativos en una variable
1. Declare la variable con Instrucción Dim (Visual Basic).
2. Agregue detrás del nombre de variable una cláusula As.
3. Agregue tras la palabra clave As la palabra clave Decimal.
Vea también
Referencia
Resumen de tipos de datos (Visual Basic)
Decimal (Tipo de datos, Visual Basic)
Double (Tipo de datos, Visual Basic)
Conceptos
Caracteres de tipo
Otros recursos
Tipos de datos elementales
Conceptos del lenguaje Visual Basic

Cómo: Mantener los valores de moneda de una variable


Una variable mantiene valores de moneda si se declara como el tipo de datos Decimal.
Una variable de Decimal (Tipo de datos, Visual Basic) puede contener números con 29 dígitos significativos e incluir hasta 28
posiciones decimales. Para los valores de moneda, normalmente necesita sólo 2 ó 3 posiciones decimales. Pero para obtener
resultados intermedios durante una transacción, como multiplicar por una tasa de interés, puede ser conveniente utilizar
posiciones decimales adicionales para mayor exactitud.
La ventaja de utilizar las variables Decimal para los valores de moneda es la precisión de los valores. El tipo de datos Double
es más rápido y requiere menos memoria, pero está sujeto a errores de redondeo. El tipo de datos Decimal proporciona una
exactitud total en 28 posiciones si es necesario.
Caracteres 0 finales. Visual Basic no tiene una representación interna de caracteres 0 finales en los tipos de datos de punto
flotante como Double. No almacena los ceros finales en un literal Decimal, aunque una variable Decimal conserva cualquier
cero final que se haya adquirido mediante cálculos. Para obtener más información y un ejemplo, vea
Decimal (Tipo de datos, Visual Basic).
Visual Basic suprime a menudo los caracteres 0 finales cuando los muestra o los imprime. Por ejemplo, un valor de 4,2000 se
representa a menudo como 4,2. Puede controlar el formato de salida más estrechamente si llama al método
System.Decimal.ToString o System.Double.ToString para el tipo de datos adecuado.
Para contener valores de moneda en una variable
1. Declare la variable con Instrucción Dim (Visual Basic).
2. Agregue detrás del nombre de variable una cláusula As.
3. Agregue tras la palabra clave As la palabra clave Decimal.
Vea también
Referencia
Resumen de tipos de datos (Visual Basic)
String (Tipo de datos, Visual Basic)
Decimal (Tipo de datos, Visual Basic)
Double (Tipo de datos, Visual Basic)
Conceptos
Tipos de datos en Visual Basic
Caracteres de tipo
Otros recursos
Tipos de datos elementales
Conceptos del lenguaje Visual Basic

Tipos de datos de caracteres


Visual Basic proporciona tipos de datos de caracteres para trabajar con caracteres que se pueden mostrar e imprimir. Aunque
ambos tipos utilizan caracteres Unicode, Char contiene un único carácter, mientras que String contiene un número indefinido
de caracteres.
Para ver una tabla que muestra una comparación punto por punto de los tipos de datos de Visual Basic, consulte
Resumen de tipos de datos (Visual Basic).
Tipo Char
El tipo de datos Char es un único carácter Unicode de dos bytes (16 bits). Si una variable siempre almacena exactamente un
carácter, declárela como Char.
Para obtener más información, consulte Char (Tipo de datos, Visual Basic).
Tipo String
El tipo de datos String es una secuencia de cero o más caracteres Unicode de dos bytes (16 bits). Si una variable puede
contener un número de caracteres indefinido, declárela como String.
Para obtener más información, consulte String (Tipo de datos, Visual Basic).
Vea también
Tareas
Solucionar problemas de tipos de datos
Cómo: Contener caracteres en una variable
Conceptos
Tipos de datos compuestos
Tipos genéricos en Visual Basic
Programación sin tipos en Visual Basic
Caracteres de tipo
Otros recursos
Tipos de datos elementales
Implementación de tipos de datos
Conversiones de tipos en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Contener caracteres en una variable


Una variable contiene caracteres individuales si se declara como del tipo de datos Char o String.
Una variable de Char (Tipo de datos, Visual Basic) puede contener un carácter Unicode único. Una variable de
String (Tipo de datos, Visual Basic) puede contener una secuencia de cero o más caracteres Unicode.
Caracteres Unicode. Cada valor posible en una variable Char o String es un punto de código o código de carácter en el
juego de caracteres Unicode. Los caracteres Unicode incluyen el juego de caracteres ASCII básico, diversas letras del alfabeto,
acentos, símbolos de moneda, fracciones, signos diacríticos y símbolos matemáticos y técnicos.
Si no necesita contener nunca más que un carácter en una única variable, utilice el tipo de datos Char. El tipo de datos String
requiere más memoria y tiene un rendimiento más lento.
Nota
El juego de caracteres Unicode reserva los puntos de código de D800 a DFFF (de 55296 a 55551 decimales) para pares suple
ntes que exigen dos valores de 16 bits que representen un punto de código único. Una variable Char no puede contener un p
ar suplente y String utiliza dos posiciones para contener este tipo de par.

Para contener un carácter individual en una variable


1. Declare la variable con Instrucción Dim (Visual Basic).
2. Agregue detrás del nombre de variable una cláusula As.
3. Agregue tras la palabra clave As la palabra clave Char.
Para contener una secuencia de caracteres en una variable
1. Declare la variable con una instrucción Dim.
2. Agregue detrás del nombre de variable una cláusula As.
3. Agregue tras la palabra clave As la palabra clave String.
Vea también
Referencia
Resumen de tipos de datos (Visual Basic)
String (Tipo de datos, Visual Basic)
Char (Tipo de datos, Visual Basic)
String (Tipo de datos, Visual Basic)
Conceptos
Tipos de datos en Visual Basic
Caracteres de tipo
Otros recursos
Tipos de datos elementales
Conceptos del lenguaje Visual Basic

Tipos de datos varios


Visual Basic proporciona varios tipos de datos que no están orientados a números o caracteres. En lugar de ello, tratan con
datos especializados como valores de tipo sí/no, valores de fecha y hora, y direcciones de objetos.
Para ver una tabla que muestra una comparación punto por punto de los tipos de datos de Visual Basic, consulte
Resumen de tipos de datos (Visual Basic).
Boolean (Tipo)
Boolean (Tipo de datos, Visual Basic) es un valor sin signo interpretado como True o False. El ancho de sus datos depende de
la plataforma de implementación. Si una variable puede contener sólo valores de dos estados como verdadero/falso, sí/no, o
activado/desactivado, declárela como Boolean.
Date (Tipo)
Date (Tipo de datos, Visual Basic) es un valor de 64 bits que contiene información de fecha y hora. Cada incremento representa
100 nanosegundos de tiempo transcurrido desde el principio (12:00 a.m.) del 1 de enero del año 1 del calendario gregoriano.
Si una variable puede contener un valor de fecha, un valor de hora o ambos, declárela como Date.
Object (Tipo)
Object (Tipo de datos) es una dirección de 32 bits que apunta a una instancia de objeto dentro de la aplicación o en alguna otra
aplicación. Una variable Object puede hacer referencia a cualquier objeto que la aplicación reconoce o a datos de cualquier
tipo de datos. Si una variable almacena un puntero a una instancia de una clase que no conoce en tiempo de compilación o si
puede señalar a los datos de distintos tipos de datos, declárela como Object.
Vea también
Tareas
Solucionar problemas de tipos de datos
Cómo: Contener valores verdaderos y falsos en una variable
Cómo: Mantener los valores de fecha y hora de una variable
Cómo: Contener los datos de tipo desconocido en una variable
Conceptos
Caracteres de tipo
Tipos de datos numéricos
Tipos de datos de caracteres
Otros recursos
Tipos de datos elementales
Conceptos del lenguaje Visual Basic

Cómo: Contener valores verdaderos y falsos en una variable


Una variable contiene valores verdaderos y falsos si la declara ser de tipo de datos Boolean.
Una variable de Boolean (Tipo de datos, Visual Basic) puede contener valores lógicos de dos estados como verdadero/falso,
activado/desactivado y sí/no.
Si necesita contener valores numéricos, utilice un tipo de dato numérico como Integer o Double en lugar de Boolean. Nunca
debe utilizar valores Boolean como números y nunca debe confiar en valores numéricos equivalentes. Para obtener más
información, consulte Solucionar problemas de tipos de datos.
Para contener valores verdaderos y falsos en una variable
1. Declare la variable con Instrucción Dim (Visual Basic).
2. Agregue detrás del nombre de variable una cláusula As.
3. Agregue tras la palabra clave As la palabra clave Boolean.
Vea también
Tareas
Solucionar problemas de tipos de datos
Referencia
Resumen de tipos de datos (Visual Basic)
String (Tipo de datos, Visual Basic)
Boolean (Tipo de datos, Visual Basic)
Integer (Tipo de datos, Visual Basic)
Double (Tipo de datos, Visual Basic)
Conceptos
Tipos de datos en Visual Basic
Caracteres de tipo
Otros recursos
Tipos de datos elementales
Conceptos del lenguaje Visual Basic

Cómo: Mantener los valores de fecha y hora de una variable


Una variable mantiene valores de fecha y hora si se declara como el tipo de datos Date.
Una variable de Date (Tipo de datos, Visual Basic) puede contener valores de fecha que van del 1 de enero del año 0001 al 31
de diciembre del año 9999 y valores de hora de 12:00:00 a.m. (medianoche) a 11:59:59 p.m.
El tipo de datos Date siempre contiene un valor de fecha y un valor de hora. Si no asigna un valor de hora a una variable Date,
tiene como valor predeterminado el inicio del día, es decir, medianoche. Si no asigna un valor de fecha a una variable Date,
tiene como valor predeterminado el 1 de enero de 0001.
Para contener fechas en una variable
1. Declare la variable con Instrucción Dim (Visual Basic).
2. Agregue detrás del nombre de variable una cláusula As.
3. Agregue tras la palabra clave As la palabra clave Date.
Vea también
Referencia
Resumen de tipos de datos (Visual Basic)
String (Tipo de datos, Visual Basic)
Date (Tipo de datos, Visual Basic)
Conceptos
Tipos de datos en Visual Basic
Caracteres de tipo
Otros recursos
Tipos de datos elementales
Conceptos del lenguaje Visual Basic

Cómo: Contener los datos de tipo desconocido en una variable


Una variable contiene punteros a datos si la declara ser de tipo de datos Object.
Una variable de Object (Tipo de datos) puede contener un puntero a un valor de cualquier tipo de datos. Esto incluye tanto
tipos de valor, como Integer, Boolean e instancias de estructura, como tipos de referencia que son instancias de objetos
creados a partir de clases como String, Form e instancias de matriz.
Rendimiento. La ventaja del tipo de datos Object es que puede utilizarlo para señalar a datos de cualquier tipo de datos. El
inconveniente es que provoca operaciones adicionales que exigen más tiempo de ejecución y ralentizan su aplicación. Si utiliza
una variable Object para los tipos de valor, provoca una conversión boxing y una conversión unboxing. Si lo utiliza para los
tipos de referencia, provoca un enlace en tiempo de ejecución.
Debe utilizar el tipo de datos Object cuando sus necesidades variables contengan tipos de datos diferentes en distintos
momentos o cuando no sabe en tiempo de compilación qué tipo o tipos de datos puede contener su variable.
Para contener datos de tipo desconocido en una variable
1. Declare la variable con Instrucción Dim (Visual Basic).
2. Agregue detrás del nombre de variable una cláusula As.
3. Agregue tras la palabra clave As la palabra clave Object.
Vea también
Referencia
Resumen de tipos de datos (Visual Basic)
String (Tipo de datos, Visual Basic)
Object (Tipo de datos)
Conceptos
Tipos de datos en Visual Basic
Caracteres de tipo
Tipos de valores y tipos de referencia
Otros recursos
Tipos de datos elementales
Conceptos del lenguaje Visual Basic

Tipos de datos compuestos


Además de los tipos de datos básicos que proporciona Visual Basic, también es posible juntar elementos de distintos tipos para
crear tipos de datos compuestos, como estructuras, matrices y clases. Pueden crearse tipos de datos compuestos a partir de
tipos elementales y de otros tipos compuestos. Por ejemplo, puede definir una matriz de elementos de estructura, o una
estructura con miembros de matriz.
Tipos de datos
Un tipo compuesto es diferente del tipo de datos de cualquiera de sus componentes. Por ejemplo, una matriz de elementos
Integer no es del tipo de datos Integer.
Un tipo de datos de matriz se representa normalmente mediante el tipo de elemento, paréntesis y comas, tal como necesario.
Por ejemplo, una matriz unidimensional de los elementos String se representa como String() y una matriz bidimensional de
los elementos Boolean se representa como Boolean(,).
Tipos de estructura
No existe ningún tipo de datos que incluya todas las estructuras. En su lugar, una definición de una estructura representa un
tipo de datos único, aunque dos estructuras definan elementos idénticos en el mismo orden. Sin embargo, si crea dos o más
instancias de la misma estructura, Visual Basic considera que son del mismo tipo de datos.
Tipos de matriz
No existe ningún tipo de datos que incluya todas las matrices. El tipo de datos de una instancia específica de una matriz está
determinada por lo siguiente:
El hecho de ser una matriz
El rango (las dimensiones) de la matriz
El tipo de elemento de la matriz
En particular, la longitud de una dimensión determinada no forma parte del tipo de datos de la instancia. Esto se ilustra en el
siguiente ejemplo:

Dim arrayA( ) As Byte = New Byte(12) {}


Dim arrayB( ) As Byte = New Byte(100) {}
Dim arrayC( ) As Short = New Short(100) {}
Dim arrayD( , ) As Short
Dim arrayE( , ) As Short = New Short(4, 10) {}

En el ejemplo anterior, las variables de matriz arrayA y arrayB se consideran del mismo tipo de datos (Byte()), aunque se
hayan inicializado con distintas longitudes. Las variables arrayB y arrayC no son del mismo tipo porque sus tipos de
elementos son diferentes. Las variables arrayC y arrayD no son del mismo tipo porque sus rangos son diferentes. Las variables
arrayD y arrayE tienen el mismo tipo (Short(,)) porque sus rangos y tipos de elementos son los mismos, incluso aunque
arrayD no esté aún inicializado.

Para obtener más información sobre matrices, consulte Matrices en Visual Basic.
Tipos de clase
No existe ningún tipo de datos que incluya todas las clases. Aunque una clase puede heredar de otra clase, cada una es de un
tipo de datos distinto. Varias instancias de la misma clase son del mismo tipo de datos. Si asigna una variable de instancia de
clase a otra, no sólo tienen el mismo tipo de datos, sino que señalan a la misma instancia de clase en memoria.
Para obtener más información sobre clases, consulte Descripción de las clases.
Vea también
Tareas
Solucionar problemas de tipos de datos
Cómo: Contener más de un valor en una variable
Conceptos
Tipos de datos en Visual Basic
Tipos genéricos en Visual Basic
Programación sin tipos en Visual Basic
Los tipos de datos son tipos de .NET Framework
Otros recursos
Tipos de datos elementales
Implementación de tipos de datos
Conversiones de tipos en Visual Basic
Estructuras: tipos de datos propios
Conceptos del lenguaje Visual Basic

Cómo: Contener más de un valor en una variable


Una variable contiene más de un valor si la declara como un tipo de datos compuesto.
Tipos de datos compuestos incluye estructuras, matrices y clases. Una variable de un tipo de datos compuesto puede contener
una combinación de tipos de datos básicos y otros tipos compuestos. Las estructuras y clases pueden contener código así
como datos.
Para contener varios valores en una variable
1. Determine qué tipo de datos compuesto desea utilizar para la variable.
2. Si el tipo de datos compuesto no está aún definido, defínalo para que la variable pueda utilizarlo.
Defina una estructura con Structure (Instrucción).
Defina una matriz con Instrucción Dim (Visual Basic).
Defina una clase con Instrucción Class (Visual Basic).
3. Declare la variable con una instrucción Dim.
4. Agregue detrás del nombre de variable una cláusula As.
5. Agregue detrás de la palabra clave As el nombre del tipo de datos compuesto adecuado.
Vea también
Referencia
Resumen de tipos de datos (Visual Basic)
Conceptos
Caracteres de tipo
Tipos de datos compuestos
Los tipos de datos son tipos de .NET Framework
Otros recursos
Estructuras: tipos de datos propios
Matrices en Visual Basic
Descripción de las clases
Conceptos del lenguaje Visual Basic

Tipos genéricos en Visual Basic


Un tipo genérico es un elemento de programación único que se adapta para realizar la misma funcionalidad en una variedad
de tipos de datos. Cuando defina una clase o procedimiento genérico, no es necesario que defina una versión independiente
para cada tipo de datos para el que desee llevar a cabo esa funcionalidad.
Un ejemplo análogo sería un juego de destornilladores con puntas extraíbles. Primero se inspecciona el tornillo que se debe
apretar o aflojar y después se selecciona la punta adecuada para la cabeza del mismo (plana, en cruz o de estrella). Una vez
insertada la punta correcta en el mango del destornillador, la acción realizada con el destornillador es exactamente la misma,
es decir, girar el destornillador.
El juego de destornilladores es una herramienta genérica

Cuando defina un tipo genérico, lo puede parametrizar con uno o más tipos de datos. Esto permite al código que los utiliza
ajustar los tipos de datos a sus necesidades. Su código puede declarar varios elementos de programación diferentes a partir
del elemento genérico y cada uno de ellos actúa en un conjunto distinto de tipos de datos. Pero todos los elementos
declarados funcionan con la misma lógica, independientemente de los tipos de datos que utilicen.
Por ejemplo, puede que desee crear y utilizar una clase de cola que funcione en un tipo de datos concreto como String. Puede
declarar esa clase a partir de System.Collections.Generic.Queue, como muestra el siguiente ejemplo.
VB
Public stringQ As New System.Collections.Generic.Queue(Of String)

Ahora puede utilizar stringQ para trabajar exclusivamente con valores String. Dado que stringQ es específico para String en
lugar de generalizarse para los valores Object, no tiene enlace en tiempo de ejecución ni conversión de tipos. Así se ahorra
tiempo de ejecución y se reduce el número de errores en tiempo de ejecución.
Para obtener más información sobre cómo utilizar un tipo genérico, vea Cómo: Utilizar una clase genérica.
Ejemplo de una clase genérica
El ejemplo siguiente muestra una estructura básica de una clase genérica.
VB
Public Class classHolder(Of t)
Public Sub processNewItem(ByVal newItem As t)
Dim tempItem As t
' Insert code that processes an item of data type t.
End Sub
End Class

En la estructura básica anterior, t es un parámetro de tipo, es decir, un marcador de posición para un tipo de datos que se
proporcionará cuando declare la clase. En otra parte en su código, puede declarar distintas versiones de classHolder
proporcionando diversos tipos de datos para t. En el ejemplo siguiente se muestran dos declaraciones así.
VB
Public integerClass As New classHolder(Of Integer)
Friend stringClass As New classHolder(Of String)

Las instrucciones anteriores declaran clases construidas, en las que un tipo específico reemplaza el parámetro de tipo. Este
reemplazo se propaga por todo el código existente dentro de la clase construida. El ejemplo siguiente muestra el aspecto que
tiene el procedimiento processNewItem en integerClass.
VB
Public Sub processNewItem(ByVal newItem As Integer)
Dim tempItem As Integer
' Inserted code now processes an Integer item.
End Sub

Para obtener un ejemplo más completo, vea


Cómo: Definir una clase que pueda proporcionar la misma funcionalidad en tipos de datos diferentes.
Elementos de programación utilizables
Puede definir y utilizar clases, estructuras, interfaces, procedimientos y delegados de tipo genérico. Tenga en cuenta que .NET
Framework define varias clases genéricas, estructuras e interfaces que normalmente representan los elementos genéricos
utilizados. El espacio de nombres System.Collections.Generic proporciona diccionarios, listas, colas y pilas. Antes de definir su
propio elemento genérico, vea si ya está disponible en System.Collections.Generic.
Los procedimientos no son tipos, pero puede definir y utilizar procedimientos genéricos. Vea
Procedimientos genéricos en Visual Basic.
Ventajas de los tipos genéricos
Un tipo genérico sirve como base para declarar varios elementos de programación diferentes, cada uno de los cuales funciona
en un tipo de datos concreto. Las alternativas a un tipo genérico son:
1. Un tipo único que funciona en el tipo de datos Object.
2. Un conjunto de versiones específicas de tipo del tipo, con cada versión codificada por separado y funcionando en un tipo
de datos específico como String, Integer o un tipo definido por el usuario como, por ejemplo, customer.
Un tipo genérico presenta las ventajas siguientes sobre estas alternativas:
Seguridad de tipos. Los tipos genéricos fuerzan la comprobación de tipo en tiempo de compilación. Tipos basados en
Object aceptan cualquier tipo de datos y debe escribir el código para comprobar si un tipo de datos de entrada es
aceptable. Con los tipos genéricos, el compilador puede detectar los errores de coincidencia de tipos antes en tiempo de
ejecución.
Rendimiento. Los tipos genéricos no tienen que aplicar la conversión boxing ni aplicar la conversión unboxing a los
datos, porque cada uno de ellos está especializado para un tipo de datos. Las operaciones basadas en Object deben
aplicar la conversión boxing para convertir los tipos de datos de entrada en Object y aplicar la conversión unboxing a los
datos destinados para el resultado. Las conversiones boxing y unboxing reducen el rendimiento.
Los tipos basados en Object también son enlazados en tiempo de ejecución, lo que significa que para tener acceso a sus
miembros se requiere código adicional en tiempo de ejecución. Esto también reduce el rendimiento.
Consolidación del código. El código de un tipo genérico sólo ha de definirse una vez. Un conjunto de versiones
específicas de tipo de un tipo debe replicar el mismo código en cada versión, con la única diferencia de que se trata del
tipo de datos específico para esa versión. Con tipos genéricos, las versiones específicas de tipo se generan todas a partir
del tipo genérico original.
Reutilización del código. El código que no depende de un tipo de datos determinado se puede reutilizar con distintos
tipos de datos, si es genérico. Con frecuencia, se puede reutilizar incluso con un tipo de datos no previsto originalmente.
Compatibilidad con IDE. Cuando utilice un tipo construido a partir de un tipo genérico, Integrated Development
Environment (IDE) puede proporcionarle más apoyo mientras programa el código. Por ejemplo, IntelliSense™ puede
mostrarle las opciones específicas del tipo para un argumento a un constructor o método.
Algoritmos genéricos. Los algoritmos abstractos que son independientes del tipo son buenos candidatos para los tipos
genéricos. Por ejemplo, un procedimiento genérico que ordena elementos mediante la interfaz IComparable se puede
utilizar con cualquier tipo de datos que implemente IComparable.

Restricciones
Aunque el código de una definición de tipo genérico debe ser tan independiente del tipo como sea posible, puede que requiera
una capacidad concreta de un tipo de datos proporcionado a su tipo genérico. Por ejemplo, si desea comparar dos elementos
con el propósito de ordenar o intercalar, su tipo de datos debe implementar la interfaz IComparable. Puede forzar este
requisito agregando una restricción al parámetro de tipo.
Ejemplo de una restricción
El ejemplo siguiente muestra una definición esquema de una clase con una restricción que exige al argumento de tipo que
implemente IComparable.
VB
Public Class itemManager(Of t As IComparable)
' Insert code that defines class members.
End Class

Si el código subsiguiente intenta construir una clase a partir de itemManager proporcionando un tipo que no implementa
IComparable, el compilador señala un error.
Tipos de restricciones
Su restricción puede especificar los siguientes requisitos en cualquier combinación:
El argumento de tipo debe implementar una o más interfaces
El argumento de tipo debe ser, como máximo, del tipo de una clase o heredar de ella
El argumento de tipo debe exponer un constructor sin parámetros accesible al código que crea los objetos a partir del
mismo
El argumento de tipo debe ser un tipo de referencia o un tipo de valor
Si necesita imponer más que un requisito, utilice una lista de restricciones separada por comas dentro de llaves ({ }). Para
requerir un constructor accesible, incluya la palabra clave New (Visual Basic) en la lista. Para requerir un tipo de referencia, se
debe incluir la palabra clave Class (Visual Basic); para requerir un valor, incluya la palabra clave Structure (Visual Basic).
Para obtener más información sobre restricciones, vea Lista de tipos.
Ejemplo de varias restricciones
El ejemplo siguiente muestra una definición básica de una clase genérica con una lista de restricciones para el parámetro de
tipo. En el código que crea una instancia de esta clase, el argumento de tipo debe implementar las interfaces IComparable y
IDisposable, ser un tipo de referencia y exponer un constructor sin parámetros accesible.
VB
Public Class thisClass(Of t As {IComparable, IDisposable, Class, New})
' Insert code that defines class members.
End Class

Condiciones importantes
Los tipos genéricos introducen y utilizan las condiciones siguientes:
Tipo genérico. Una definición de una clase, estructura, interfaz, procedimiento o delegado para las que proporciona al
menos un tipo de datos cuando lo declara.
Parámetro de tipo. En una definición de tipo genérico, un marcador de posición para un tipo de datos proporcionado al
declarar el tipo.
Argumento de tipo. Un tipo de datos concreto que reemplaza un parámetro de tipo cuando declara un tipo construido a
partir de un tipo genérico.
Restricción. Una condición en un parámetro de tipo que restringe el argumento de tipo que se puede proporcionar. Una
restricción puede requerir que el argumento de tipo debe implementar una interfaz concreta, ser una clase concreta o
heredar de ella, tener un constructor sin parámetros accesible o ser un tipo de referencia o un tipo de valor. Puede
combinar estas restricciones, pero puede especificar como máximo una clase.
Tipo construido. Una clase, estructura, interfaz, procedimiento o delegado declarado a partir de un tipo genérico
proporcionando argumentos de tipo para sus parámetros de tipo.

Vea también
Tareas
Solucionar problemas de tipos de datos
Referencia
Resumen de tipos de datos (Visual Basic)
Of
As
Object (Tipo de datos)
Conceptos
Tipos de datos en Visual Basic
Caracteres de tipo
Tipos de valores y tipos de referencia
Otros recursos
Implementación de tipos de datos
Conversiones de tipos en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Definir una clase que pueda proporcionar la misma


funcionalidad en tipos de datos diferentes
Puede definir una clase a partir de la cual crear objetos que proporcionen funcionalidad idéntica en tipos de datos diferentes.
Para ello, especifica uno o más parámetros de tipo en la definición. La clase puede actuar a continuación como una plantilla
para objetos que utilizan distintos tipos de datos. Una clase definida de esta manera se denomina una clase genérica.
La ventaja de definir una clase genérica es que la define una sola vez y el código puede utilizarla para crear diferentes objetos
que utilizan una amplia variedad de tipos de datos. De esta manera consigue mayor rendimiento que si define la clase con el
tipo Object.
Además de clases, también puede definir y utilizar estructuras genéricas, interfaces, procedimientos y delegados.
Para definir una clase con un parámetro de tipo
1. Defina la clase de la manera normal.
2. Agregue (Of typeparameter) inmediatamente después del nombre de clase para especificar un parámetro de tipo.
3. Si tiene más de un parámetro de tipo, incluya una lista separada por comas entre paréntesis. No repita la palabra clave
Of.
4. Si el código realiza operaciones en un parámetro de tipo distintas de la asignación, incluya una cláusula As después del
parámetro de tipo para agregar una o más restricciones. Una restricción garantiza que el tipo proporcionado para ese
parámetro de tipo satisface un requisito como el siguiente:
Admite una operación, como >, que realiza el código
Admite un miembro, como un método, al que tiene acceso el código
Expone un constructor sin parámetros
Si no especifica ninguna restricción, las únicas operaciones y miembros que puede utilizar el código son las que admite
Object (Tipo de datos). Para obtener más información, vea Lista de tipos.
5. Identifique cada miembro de clase que se va a declarar con un tipo proporcionado y declárelo As typeparameter. Esto se
aplica al almacenamiento interno, parámetros de procedimiento y valores devueltos.
6. Asegúrese de que el código sólo utiliza operaciones y métodos admitidos por cualquier tipo de datos que puede
proporcionar a itemType.
El ejemplo siguiente define una clase que administra una lista muy simple. Mantiene la lista en la matriz interna items y
el código puede declarar el tipo de datos de los elementos de la lista. Un constructor con parámetros permite que el
código establezca el límite superior de items y el constructor predeterminado lo establece en 9 (para un total de 10
elementos).
VB
Public Class simpleList(Of itemType)
Private items() As itemType
Private top As Integer
Private nextp As Integer
Public Sub New()
Me.New(9)
End Sub
Public Sub New(ByVal t As Integer)
MyBase.New()
items = New itemType(t) {}
top = t
nextp = 0
End Sub
Public Sub add(ByVal i As itemType)
insert(i, nextp)
End Sub
Public Sub insert(ByVal i As itemType, ByVal p As Integer)
If p > nextp OrElse p < 0 Then
Throw New System.ArgumentOutOfRangeException("p", _
" less than 0 or beyond next available list position")
ElseIf nextp > top Then
Throw New System.ArgumentException("No room to insert at ", _
"p")
ElseIf p < nextp Then
For j As Integer = nextp To p + 1 Step -1
items(j) = items(j - 1)
Next j
End If
items(p) = i
nextp += 1
End Sub
Public Sub remove(ByVal p As Integer)
If p >= nextp OrElse p < 0 Then
Throw New System.ArgumentOutOfRangeException("p", _
" less than 0 or beyond last list item")
ElseIf nextp = 0 Then
Throw New System.ArgumentException("List empty; cannot remove ", _
"p")
ElseIf p < nextp - 1 Then
For j As Integer = p To nextp - 2
items(j) = items(j + 1)
Next j
End If
nextp -= 1
End Sub
Public ReadOnly Property listLength() As Integer
Get
Return nextp
End Get
End Property
Public ReadOnly Property listItem(ByVal p As Integer) As itemType
Get
If p >= nextp OrElse p < 0 Then
Throw New System.ArgumentOutOfRangeException("p", _
" less than 0 or beyond last list item")
End If
Return items(p)
End Get
End Property
End Class

Puede declarar una clase a partir de simpleList para que incluya una lista de valores de tipo Integer, otra clase para que
incluya una lista de valores de tipo String y otra para que incluya valores de tipo Date. Los objetos creados a partir de
estas clases se comportan de forma idéntica, excepto en el tipo de datos de los miembros de lista.
El argumento de tipo que el código proporciona a itemType puede ser un tipo intrínseco como Boolean o Double, una
estructura, una enumeración o cualquier clase de tipo, incluida una definida por la aplicación.
Puede probar la clase simpleList con el código siguiente.
VB
Public Sub useSimpleList()
Dim iList As New simpleList(Of Integer)(2)
Dim sList As New simpleList(Of String)(3)
Dim dList As New simpleList(Of Date)(2)
iList.add(10)
iList.add(20)
iList.add(30)
sList.add("First")
sList.add("extra")
sList.add("Second")
sList.add("Third")
sList.remove(1)
dList.add(#1/1/2003#)
dList.add(#3/3/2003#)
dList.insert(#2/2/2003#, 1)
Dim s As String = _
"Simple list of 3 Integer items (reported length " _
& CStr(iList.listLength) & "):" _
& vbCrLf & CStr(iList.listItem(0)) _
& vbCrLf & CStr(iList.listItem(1)) _
& vbCrLf & CStr(iList.listItem(2)) _
& vbCrLf _
& "Simple list of 4 - 1 String items (reported length " _
& CStr(sList.listLength) & "):" _
& vbCrLf & CStr(sList.listItem(0)) _
& vbCrLf & CStr(sList.listItem(1)) _
& vbCrLf & CStr(sList.listItem(2)) _
& vbCrLf _
& "Simple list of 2 + 1 Date items (reported length " _
& CStr(dList.listLength) & "):" _
& vbCrLf & CStr(dList.listItem(0)) _
& vbCrLf & CStr(dList.listItem(1)) _
& vbCrLf & CStr(dList.listItem(2))
MsgBox(s)
End Sub

Vea también
Tareas
Cómo: Utilizar una clase genérica
Referencia
Of
Lista de tipos
Object (Tipo de datos)
Conceptos
Tipos de datos en Visual Basic
Tipos genéricos en Visual Basic
Common Language Specification
Conceptos del lenguaje Visual Basic

Cómo: Utilizar una clase genérica


Una clase que toma parámetros de tipo se denomina clase genérica. Si está utilizando una clase genérica, puede generar una
clase construida desde ella proporcionando un tipo de argumento para cada uno de estos parámetros. Entonces puede
declarar una variable del tipo de clase construida, crear una instancia de clase construida y asignarla a esa variable.
Además de las clases, también puede definir y utilizar estructuras genéricas, interfaces, procedimientos y delegados.
El procedimiento siguiente toma una clase genérica definida en .NET Framework y crea una instancia a partir de ella.
Para utilizar una clase que toma un parámetro de tipo
1. Al principio de su archivo de código fuente, incluya una Imports (Instrucción) para importar el espacio de nombres
System.Collections.Generic. Así podrá hacer referencia a la clase System.Collections.Generic.Queue sin necesidad de
asignarle un nombre completo para diferenciarla de otras clases de cola como System.Collections.Queue.
2. Cree el objeto de la manera normal, pero agregue (Of type) inmediatamente después del nombre de clase.
El ejemplo siguiente utiliza la misma clase (System.Collections.Generic.Queue) para crear dos objetos de cola que
contienen elementos de distintos tipos de datos. Así se agregan los elementos al final de cada cola y, a continuación, se
quitan y muestran los elementos del principio de cada cola.
VB
Public Sub usequeue()
Dim queueDouble As New System.Collections.Generic.Queue(Of Double)
Dim queueString As New System.Collections.Generic.Queue(Of String)
queueDouble.Enqueue(1.1)
queueDouble.Enqueue(2.2)
queueDouble.Enqueue(3.3)
queueDouble.Enqueue(4.4)
queueString.Enqueue("First string of three")
queueString.Enqueue("Second string of three")
queueString.Enqueue("Third string of three")
Dim s As String = "Queue of Double items (reported length " _
& CStr(queueDouble.Count) & "):"
For i As Integer = 1 To queueDouble.Count
s &= vbCrLf & CStr(queueDouble.Dequeue())
Next i
s &= vbCrLf & "Queue of String items (reported length " _
& CStr(queueString.Count) & "):"
For i As Integer = 1 To queueString.Count
s &= vbCrLf & queueString.Dequeue()
Next i
MsgBox(s)
End Sub

Vea también
Tareas
Cómo: Definir una clase que pueda proporcionar la misma funcionalidad en tipos de datos diferentes
Referencia
Of
Imports (Instrucción)
Conceptos
Tipos de datos en Visual Basic
Tipos genéricos en Visual Basic
Common Language Specification
Conceptos del lenguaje Visual Basic

Procedimientos genéricos en Visual Basic


Un procedimiento genérico, también denominado método genérico, es el que está definido con al menos un parámetro de
tipo. Esto permite que el código de llamada ajuste los tipos de datos a sus requisitos cada vez que llama al procedimiento.
El simple hecho de estar definido dentro de una clase o estructura genérica no convierte en genérico al procedimiento. Para ser
genérico, el procedimiento debe tomar por lo menos un parámetro de tipo, además de cualquier otro parámetro normal que
pueda a tomar. Una clase o estructura genérica puede contener procedimientos que no sean genéricos; y las clases, estructuras
o módulos no genéricos pueden contener procedimientos genéricos.
Un procedimiento genérico puede utilizar los parámetros de tipo en su lista de parámetros normales, en su tipo de valor
devuelto, si existe, y en su código de procedimiento.
Inferencia de tipo
Puede llamar a un procedimiento genérico sin proporcionar ningún argumento de tipo. Al llamar de este modo, el compilador
intenta determinar los tipos de datos adecuados para pasar los argumentos de tipo del procedimiento. Esto se denomina
inferencia de tipo. El código siguiente muestra una llamada en la que el compilador deduce que debe pasar el tipo String al
parámetro de tipo t.
VB
Public Sub testSub(Of t)(ByVal arg As t)
End Sub
Public Sub callTestSub()
testSub("Use this string")
End Sub

Si el compilador no puede deducir los argumentos de tipo del contexto de su llamada, crea un informe de error. Una posible
causa de este tipo de error es la falta de coincidencia del rango de matriz. Por ejemplo, suponga que define un parámetro
normal como matriz de un parámetro de tipo. Si se llama al procedimiento genérico proporcionando una matriz de distinto
rango (número de dimensiones), la desigualdad provoca que se produzca un error en la inferencia de tipo. En el código
siguiente se muestra una llamada en la que se pasa una matriz bidimensional a un procedimiento que espera una matriz
unidimensional.
Public Sub demoSub(Of t)(ByVal arg() As t)
End Sub
Public Sub callDemoSub()
Dim twoDimensions(,) As Integer
demoSub(twoDimensions)
End Sub

Sólo se puede invocar la inferencia de tipo omitiendo todos los argumentos de tipo. Si proporciona alguno, debe
proporcionarlos todos.
La inferencia de tipo sólo se admite para los procedimientos genéricos. No puede invocar la inferencia de tipo en las clases,
estructuras, interfaces o delegados genéricos.
Ejemplo
En el ejemplo siguiente se define un procedimiento genérico Function para encontrar un elemento concreto en una matriz. Se
define un parámetro de tipo, que se utiliza para construir los dos parámetros de la lista de parámetros.
VB
Public Function findElement(Of T As IComparable) _
(ByVal searchArray As T(), ByVal searchValue As T) As Integer
If searchArray.GetLength(0) > 0 Then
For i As Integer = 0 To searchArray.GetUpperBound(0)
If searchArray(i).CompareTo(searchValue) = 0 Then Return i
Next i
End If
Return -1
End Function

Para el ejemplo anterior es necesario poder comparar searchValue con cada elemento de searchArray. Para garantizar esta
capacidad, se restringe el parámetro de tipo T para implementar la interfaz IComparable. El código utiliza el método
CompareTo, en lugar del operador =, puesto que no existen garantías de que el tipo de argumento proporcionado para T
admita el operador =.
Puede probar el procedimiento findElement con el código siguiente.
VB
Public Sub tryFindElement()
Dim stringArray() As String = {"abc", "def", "xyz"}
Dim stringSearch As String = "abc"
Dim integerArray() As Integer = {7, 8, 9}
Dim integerSearch As Integer = 8
Dim dateArray() As Date = {#4/17/1969#, #9/20/1998#, #5/31/2004#}
Dim dateSearch As Date = Microsoft.VisualBasic.DateAndTime.Today
MsgBox(CStr(findElement(Of String)(stringArray, stringSearch)))
MsgBox(CStr(findElement(Of Integer)(integerArray, integerSearch)))
MsgBox(CStr(findElement(Of Date)(dateArray, dateSearch)))
End Sub

Las llamadas anteriores a MsgBox muestran respectivamente "0", "1" y "-1."


Vea también
Tareas
Cómo: Definir una clase que pueda proporcionar la misma funcionalidad en tipos de datos diferentes
Cómo: Utilizar una clase genérica
Referencia
Lista de tipos
Lista de parámetros
Conceptos
Tipos genéricos en Visual Basic
Procedimientos en Visual Basic
Argumentos y parámetros de procedimiento
Conceptos del lenguaje Visual Basic

Tipos de valor que puede que no tengan un valor definido


A veces trabaja con un tipo de valor que no tiene un valor definido en ciertas circunstancias. Por ejemplo, puede que resulte
necesario que un campo de una base de datos distinga entre disponer de un valor significativo y no tener asignado un valor.
Los tipos de valor se pueden extender para tomar sus valores normales o un valor nulo. Este tipo de extensión se denomina un
tipo que acepta valores NULL.
Los tipos que aceptan valores NULL se construyen a partir de la estructura genérica Nullable. Considere una base de datos que
realiza el seguimiento de las actividades relacionadas con el trabajo. El ejemplo siguiente construye un tipo Boolean que
acepta valores NULL y declara una variable de ese tipo.

Dim ridesBusToWork As Nullable(Of Boolean)

La variable ridesBusToWork pueden contener un valor True, un valor False o ninguno de ellos. Su valor predeterminado inicial
es ningún valor, lo que en este caso podría significar que todavía no se ha obtenido la información correspondiente a esta
persona. False, por su parte, podría significar que se ha obtenido la información y la persona no utiliza el autobús para ir al
trabajo.
Puede declarar variables y propiedades con tipos que aceptan valores NULL y puede declarar una matriz con elementos de un
tipo que acepta valores NULL. Puede declarar procedimientos con tipos que aceptan valores NULL como parámetros y puede
devolver un tipo que acepta valores NULL de un procedimiento Function.
No puede construir un tipo que acepta valores NULL en un tipo de referencia como una matriz, un objeto String o una clase. El
tipo subyacente debe ser un tipo de valor. Para obtener más información, vea Tipos de valores y tipos de referencia.
Utilizar una variable de tipo que acepta valores NULL
Los miembros más importantes de un tipo que acepta valores NULL son sus propiedades HasValue y Value. En una variable de
un tipo que acepta valores NULL, HasValue indica si la variable contiene un valor definido. Si HasValue tiene el valor True,
puede leer el valor de Value. Observe que HasValue y Value son propiedades de tipo ReadOnly.
Valores predeterminados
Cuando declara una variable con un tipo que acepta valores NULL, su propiedad HasValue tiene un valor predeterminado de
False. Esto significa que la propia variable tiene como valor predeterminado no incluir ningún valor definido, en lugar del valor
predeterminado de su tipo de valor subyacente. En el ejemplo siguiente, la variable numberOfChildren no tiene inicialmente
ningún valor definido, aunque el valor predeterminado del tipo Integer es 0.

Dim numberOfChildren As Nullable(Of Integer)

Un valor nulo es útil para indicar un valor indefinido o desconocido. Si numberOfChildren se hubiese declarado como Integer,
no habría ningún valor que indicase que la información no está disponible actualmente.
Almacenar valores
El almacenamiento de un valor en una variable o una propiedad de un tipo que acepta valores NULL se realiza de la manera
normal. El ejemplo siguiente asigna un valor a la variable numberOfChildren declarada en el ejemplo anterior.

numberOfChildren = 2

Si una variable o una propiedad de un tipo que acepta valores NULL contiene un valor definido, puede determinar que vuelva
a su estado inicial, es decir, sin ningún valor asignado. Para ello, establece la variable o la propiedad como Nothing, según se
muestra en el ejemplo siguiente.

numberOfChildren = Nothing

Nota
Aunque puede asignar Nothing a una variable de un tipo que acepta valores NULL, no puede probarlo con Nothing. Debe
probar su propiedad HasValue con False.
Recuperar valores
Para recuperar el valor de una variable de un tipo que acepta valores NULL, debe probar previamente su propiedad HasValue
para confirmar que incluye un valor. Si intenta leer el valor cuando HasValue es False, Visual Basic produce una excepción
InvalidOperationException. El ejemplo siguiente muestra la manera recomendada de leer la variable numberOfChildren de los
ejemplos anteriores.

If numberOfChildren.HasValue Then
MsgBox("There are " & CStr(numberOfChildren) & " children.")
Else
MsgBox("It is not known how many children there are.")
End If

Utilizar tipos que aceptan valores NULL con datos


Una base de datos es uno de los lugares más importantes para utilizar tipos que aceptan valores NULL. No todos los objetos
de base de datos son actualmente compatibles con los tipos que aceptan valores NULL, pero sí lo son los adaptadores de
tablas generadas por el diseñador. Vea la sección sobre compatibilidad de TableAdapter con tipos que aceptan valores NULL
en Información general sobre TableAdapter.
Vea también
Tareas
Solucionar problemas de tipos de datos
Referencia
InvalidOperationException
Conceptos
Tipos de datos en Visual Basic
Tipos de valores y tipos de referencia
Información general sobre TableAdapter
Otros recursos
Implementación de tipos de datos
Conceptos del lenguaje Visual Basic

Implementación de tipos de datos


Los tipos de datos de Visual Basic se pueden clasificar en función de si una variable de un tipo específico almacena sus propios
datos o un puntero a los datos. Si almacena sus propios datos, se trata de un tipo de valor; si contiene un puntero a los datos
guardados en cualquier otro lugar de la memoria, es un tipo de referencia. Esta clasificación afecta a la forma en que se
implementa un tipo de datos.
En esta sección
Tipos de valores y tipos de referencia
Explica la diferencia entre tipos de valores y de referencia, y cuál es cada uno.
Los tipos de datos son tipos de .NET Framework
Describe cómo se implementan los tipos de datos de Visual Basic en el .NET Framework subyacente.
Secciones relacionadas
Tipos de datos en Visual Basic
Presenta los tipos de datos de Visual Basic y describe cómo utilizarlos.
Resumen de tipos de datos (Visual Basic)
Muestra los tipos de datos básicos proporcionados por Visual Basic.
Conceptos del lenguaje Visual Basic

Tipos de valores y tipos de referencia


Un tipo de datos es un tipo de valores si almacena los datos en su propia asignación de memoria. Un tipo de referencia
contiene un puntero a otra ubicación de memoria que almacena los datos.
Tipos de valor
Los tipos de valor incluyen lo siguiente:
Todos los tipos de datos numéricos
Boolean, Char y Date
Todas las estructuras, incluso si sus miembros son tipos de referencia
Las enumeraciones, ya que su tipo subyacente es siempre SByte, Short, Integer, Long, Byte, UShort, UInteger o
ULong

Tipos de referencia
Los tipos de referencia incluyen lo siguiente:
String
Todas las matrices, incluso si sus elementos son tipos de valores
Los tipos de clase, como Form
Delegados
Elementos que no son tipos
Los elementos de programación siguientes no se califican como tipos porque no es posible especificar ninguno de ellos como
tipo de datos para un elemento declarado:
Espacios de nombres
Módulos
Eventos
Propiedades y procedimientos
Variables, constantes y campos
Trabajar con el tipo de datos Object
Puede asignar indistintamente un tipo de referencia o un tipo de valores a una variable del tipo de datos Object. Una variable
Object siempre contiene un puntero a los datos, nunca los propios datos. Sin embargo, si se asigna un tipo de valor a una
variable Object, ésta se comporta como si contuviera sus propios datos. Para obtener más información, consulte
Object (Tipo de datos).
Puede averiguar si una variable Object está actuando como un tipo de referencia o un tipo de valor pasándolo al método
IsReference en la clase Information del espacio de nombres Microsoft.VisualBasic.
Microsoft.VisualBasic.Information.IsReference(System.Object) devuelve True si el contenido de la variable Object
representa un tipo de referencia.
Vea también
Referencia
Object (Tipo de datos)
Conceptos
Los tipos de datos son tipos de .NET Framework
Uso eficiente de tipos de datos
Otros recursos
Conversiones de tipos en Visual Basic
Estructuras: tipos de datos propios
Conceptos del lenguaje Visual Basic

Los tipos de datos son tipos de .NET Framework


Todos los tipos de datos básicos de Visual Basic están admitidos por una estructura o clase del espacio de nombres System. El
compilador utiliza la palabra clave de cada tipo de datos como alias para la clase o estructura subyacente. Por ejemplo, declarar
una variable con la palabra reservada Byte es igual que declararla con el nombre completo de estructura System.Byte.
Hay clases y estructuras adicionales disponibles en .NET Framework.
Common Language Runtime (CLR) también admite estructuras y clases que Visual Basic no proporciona. Por ejemplo, la
estructura System.Guid proporciona un identificador único global (GUID) y la clase System.TimeZone admite una zona horaria.
Puede utilizar estos tipos para declarar variables y constantes y puede tener acceso a los métodos que .NET Framework
implementa en estos tipos. Sin embargo, Visual Basic no admite operaciones o conversiones de tipo que impliquen a tipos que
no proporciona la aplicación.
Tipos de valores y tipos de referencia
En .NET Framework, una estructura es un tipo de valor y una clase es un tipo de referencia. Por ello, las estructuras de .NET
Framework implementan tipos de valor como Char e Integer, mientras que las clases de .NET Framework admiten tipos de
referencia como Object y String. Observe que una matriz es un tipo de referencia, incluso cuando sus miembros son tipos de
valor, y una estructura es un tipo de valor, incluso aunque tenga miembros de tipos de referencia.
Como un tipo de referencia representa una clase de .NET Framework subyacente, es preciso utilizar la palabra clave
New (Visual Basic) al inicializarlo. La instrucción siguiente inicializa una matriz.

Dim totals() As Single = New Single(8) {}

También puede utilizar la palabra clave New para inicializar un tipo de valor. Esto resulta especialmente útil si el tipo tiene un
constructor que toma parámetros. Un ejemplo de esto es el constructor Decimal que genera un nuevo valor Decimal de las
partes proporcionadas.
Los tipos de datos tienen Miembros
Como están admitidos por las estructuras y clases de .NET Framework, los tipos de datos de Visual Basic tienen miembros.
Estos miembros incluyen constructores, métodos, propiedades y campos. Puede obtener acceso a los miembros (excepto los
constructores) de una variable del mismo modo que a los métodos y propiedades de un objeto.
El ejemplo siguiente utiliza las propiedades Year, Month y Day, y el método DaysInMonth de la estructura System.DateTime
para determinar cuántos días quedan en el mes actual.

Dim current As Date = Now


Dim daysRemaining As Integer
daysRemaining = Date.DaysInMonth(current.Year, current.Month) - current.Day

Conviene señalar que se debe calificar una referencia a un miembro de tipo de datos, bien con el nombre del tipo (Date) o bien
con el nombre de una variable declarada de dicho tipo (current).
Ejemplos de miembros de tipos de datos
Los siguientes prototipos de código ilustran algunos métodos, propiedades y campos útiles con los tipos de datos.
<Char>.IsDigit() ' Returns True if character is a numeric digit.
<Char>.IsLower() ' Returns True if character is a lowercase letter.
<Date>.IsLeapYear() ' Returns True if current year is a leap year.
<Date>.ToUniversalTime() ' Returns local date/time converted to UTC.
<Double>.IsInfinity() ' Returns True if contents represent infinity.
<Double>.IsNaN() ' Returns True if contents are not a number (0/0).
<Long>.MaxValue ' Constant representing largest positive Int64 value.
<Object>.GetType() ' Returns Type object representing type of <Object>.
<Object>.GetType().GetTypeCode() ' Returns type code of <Object>.
<String>.Chars(<index>) ' Character at position <index> of <String>.
<String>.Length ' Number of characters currently in <String>.

Todos los tipos numéricos, incluidos Byte y Char, exponen los campos públicos MaxValue y MinValue que pueden ser muy
útiles al trabajar con estos tipos.
La equivalencia de miembros de tipos de datos no está asegurada
.NET Framework proporciona también varios métodos para tipos de datos que podrían resultar equivalentes a funciones y
palabras clave de Visual Basic. Sin embargo, Visual Basic no siempre utiliza los métodos de .NET Framework para realizar la
conversión u otras operaciones y los resultados no siempre son idénticos.
Por ejemplo, el método ToSingle realiza el mismo tipo de acción que hace la palabra clave CSng en una expresión Decimal.
Pero no se garantiza que CSng utilice System.<data type>.ToSingle y, por consiguiente, no se asegura que los resultados
sean los mismos en condiciones marginales o límite.
En general, debe utilizar los elementos de programación de Visual Basic porque son más sencillos de usar y facilitan la lectura
del código. En algunos casos, podría necesitar alguna función adicional proporcionada por un método de .NET Framework.
Para obtener un ejemplo, vea "Operador Mod no devuelve un resultado preciso" en Solucionar problemas de tipos de datos.
Vea también
Referencia
Boolean
Byte
Char
DateTime
Decimal
Double
Guid
TimeZone
Conceptos
Tipos de valores y tipos de referencia
Estructuras y clases
Conceptos del lenguaje Visual Basic

Conversiones de tipos en Visual Basic


El proceso de cambiar un valor de un tipo de datos a otro tipo se denomina conversión. Las conversiones son de ampliación o
de conversión, en función de las capacidades de datos de los tipos involucrados. También pueden ser implícitas o explícitas,
según la sintaxis del código fuente.
En esta sección
Conversiones de ampliación y de restricción
Explica las conversiones clasificadas por el criterio de si el tipo de destino puede contener los datos o no.
Conversiones implícitas y explícitas
Trata las conversiones clasificadas en función de si Visual Basic las realiza automáticamente.
Cambios de valores durante las conversiones
Describe el modo en que la conversión de un tipo de datos a otro puede modificar la representación de los datos o el valor.
Conversiones entre cadenas y otros tipos
Ilustra las conversiones entre cadenas y valores numéricos, de tipo Boolean o de fecha y hora.
Cómo: Convertir un objeto en otro tipo en Visual Basic
Muestra cómo convertir una variable Object a cualquier otro tipo de datos.
Conversiones de matrices
Explica paso a paso el proceso de conversión entre matrices de distintos tipos de datos.
Secciones relacionadas
Tipos de datos en Visual Basic
Presenta los tipos de datos de Visual Basic y describe cómo utilizarlos.
Resumen de tipos de datos (Visual Basic)
Muestra los tipos de datos básicos proporcionados por Visual Basic.
Solucionar problemas de tipos de datos
Explica algunos problemas comunes que pueden surgir al trabajar con tipos de datos.
Conceptos del lenguaje Visual Basic

Conversiones de ampliación y de restricción


Una consideración importante de una conversión de tipos es si el resultado de la conversión está dentro del intervalo del tipo
de datos de destino. Una conversión de ampliación cambia un valor a un tipo de datos que puede alojar cualquier valor posible
de los datos originales. Una conversión de restricción cambia un valor a un tipo de datos que quizás no pueda contener alguno
de los valores posibles.
Conversiones de ampliación
La tabla siguiente muestra las conversiones de ampliación estándar.
Tipo de datos Se amplía a los siguientes tipos de datos 1
SByte SByte, Short, Integer, Long, Decimal, Single, Double

Byte Byte, Short, UShort, Integer, UInteger, Long, ULong, Decimal, Single, Double

Short Short, Integer, Long, Decimal, Single, Double

UShort UShort, Integer, UInteger, Long, ULong, Decimal, Single, Double

Integer Integer, Long, Decimal, Single, Double2

UInteger UInteger, Long, ULong, Decimal, Single, Double 2

Long Long, Decimal, Single, Double 2

ULong ULong, Decimal, Single, Double 2

Decimal Decimal, Single, Double 2

Single Single, Double

Double Double

Cualquier tipo enumerado (Enum) Su tipo integral subyacente y cualquier tipo al que se amplía el tipo subyacente

Char Char, String

Char array Char array, String

Cualquier tipo Object

Cualquier tipo derivado Cualquier tipo básico del que se deriva 3

Cualquier tipo Cualquier interfaz que implemente

Nothing Cualquier tipo de datos o tipo de objeto

1 Por definición, cada tipo de datos se amplia a sí mismo.

2 Las conversiones de Integer, UInteger, Long, ULong o Decimal a Single o Double podrían generar una pérdida de
precisión pero nunca una pérdida de magnitud. En este sentido, no provocan pérdida de información.
3 Puede parecer sorprendente que una conversión de un tipo derivado en uno de sus tipos básicos sea una ampliación. La
justificación está en el hecho de que el tipo derivado contiene todos los miembros del tipo básico, por lo que se califica como
una instancia del tipo básico. A la inversa, el tipo básico no contiene nuevos miembros definidos por el tipo derivado.
Las conversiones de ampliación son siempre satisfactorias en tiempo de ejecución y no provocan nunca pérdida de datos.
Siempre puede realizarlas implícitamente, independientemente de si Option Strict (Instrucción) establece el modificador de
comprobación de tipos en On o en Off.
Conversiones de restricción
Las conversiones de restricción estándar incluyen:
Las direcciones inversas de las conversiones de ampliación en la tabla anterior (sólo que cada tipo se amplía a sí mismo)
Conversiones en ambas direcciones entre Boolean y cualquier tipo numérico
Conversiones de cualquier tipo numérico a cualquier tipo enumerado (Enum)
Conversiones en ambas direcciones entre String y cualquier tipo numérico, Boolean o Date
Conversiones de un tipo de datos o tipo de objeto en un tipo derivado del mismo
Las conversiones de restricción no son siempre satisfactorias en tiempo de ejecución y pueden generar errores o provocar
pérdida de datos. Se produce un error si el tipo de datos de destino no puede recibir el valor que se está convirtiendo. Por
ejemplo, una conversión numérica puede provocar un desbordamiento. El compilador no le permite realizar las conversiones
de restricción implícitamente a menos que Option Strict (Instrucción) establezca el modificador de comprobación de tipos en
Off.
Cuándo se utilizan las conversiones de restricción
Se utiliza una conversión de restricción cuando se sabe que el valor de origen se puede convertir en el tipo de datos de destino
sin error o pérdida de datos. Por ejemplo, si tiene un tipo de datos String y sabe que contiene "True" o "False", puede utilizar la
palabra clave CBool para convertirlo en Boolean.
Excepciones durante la conversión
Como las conversiones de ampliación siempre son satisfactorias, no producen excepciones. Las conversiones de restricción,
cuando se produce un error, suelen producir las excepciones siguientes:
InvalidCastException: si no hay definida ninguna conversión entre los dos tipos
OverflowException: (tipos integrales sólo) si el valor convertido es demasiado grande para el tipo de destino
Si una clase o estructura define CType (Función) para que actúe como un operador de conversión a esa clase o estructura o
desde ellas, CType puede producir cualquier excepción que considere apropiada. Además, CType podría llamar a las funciones
de Visual Basic o métodos de .NET Framework que a su vez pueden producir una variedad de excepciones.
Vea también
Tareas
Cómo: Convertir un objeto en otro tipo en Visual Basic
Referencia
Resumen de tipos de datos (Visual Basic)
Funciones de conversión de tipos
Conceptos
Tipos de datos en Visual Basic
Conversiones implícitas y explícitas
Cambios de valores durante las conversiones
Conversiones entre cadenas y otros tipos
Conversiones de matrices
Programación sin tipos en Visual Basic
Otros recursos
Conversiones de tipos en Visual Basic
Conceptos del lenguaje Visual Basic

Conversiones implícitas y explícitas


Una conversión implícita no requiere ninguna sintaxis especial en el código fuente. En el ejemplo siguiente, Visual Basic
convierte el valor de k implícitamente en un valor de punto flotante de precisión simple antes de asignarlo a q.

Dim k As Integer
Dim q As Double
' Integer widens to Double, so you can do this with Option Strict On.
k = 432
q = K

Una conversión explícita utiliza una palabra clave de conversión de tipos. Visual Basic proporciona varias de estas palabras
clave que convierten una expresión entre paréntesis en el tipo de datos deseado. Estas palabras clave actúan como funciones,
pero el compilador genera el código en la misma línea, de modo que la ejecución es un poco más rápida que con una llamada
de función.
En esta extensión del ejemplo anterior, la palabra clave CInt convierte el valor de q de nuevo en un entero antes de asignarlo a
k.

' q had been assigned the value 432 from k.


q = Math.Sqrt(q)
k = CInt(q)
' k now has the value 21 (rounded square root of 432).

Palabras clave para conversiones


La tabla siguiente muestra las palabras clave de conversión disponibles.
Palabra clave de Convierte una expresión en el si Tipos de datos permitidos para la expresión que se va a conver
conversión de tip guiente tipo de datos tir
os
CBool Boolean (Tipo de datos, Visual Basic) Cualquier tipo numérico (incluidos Byte, SByte y los tipos enumerad
os), String, Object

CByte Byte (Tipo de datos, Visual Basic) Cualquier tipo numérico (incluidos SByte y los tipos enumerados), B
oolean, String, Object

CChar Char (Tipo de datos, Visual Basic) String, Object

CDate Date (Tipo de datos, Visual Basic) String, Object

CDbl Double (Tipo de datos, Visual Basic) Cualquier tipo numérico (incluidos Byte, SByte y los tipos enumerad
os), Boolean, String, Object

CDec Decimal (Tipo de datos, Visual Basic) Cualquier tipo numérico (incluidos Byte, SByte y los tipos enumerad
os), Boolean, String, Object

CInt Integer (Tipo de datos, Visual Basic) Cualquier tipo numérico (incluidos Byte, SByte y los tipos enumerad
os), Boolean, String, Object

CLng Long (Tipo de datos, Visual Basic) Cualquier tipo numérico (incluidos Byte, SByte y los tipos enumerad
os), Boolean, String, Object

CObj Object (Tipo de datos) Cualquier tipo


CSByte SByte (Tipo de datos, Visual Basic) Cualquier tipo numérico (incluidos Byte y los tipos enumerados), Bo
olean, String, Object

CShort Short (Tipo de datos, Visual Basic) Cualquier tipo numérico (incluidos Byte, SByte y los tipos enumerad
os), Boolean, String, Object

CSng String (Tipo de datos, Visual Basic) Cualquier tipo numérico (incluidos Byte, SByte y los tipos enumerad
os), Boolean, String, Object

CStr String (Tipo de datos, Visual Basic) Cualquier tipo numérico (incluidos Byte, SByte y los tipos enumerad
os), Boolean, Char, matriz Char, Date, Object

CType Tipo especificado después de la com Al convertir a un tipo de datos básico (incluida una matriz de un tipo
a (,) básico), se permiten los mismos tipos para la palabra clave de conver
sión correspondiente
Al convertir a un tipo de datos compuesto, las interfaces que impleme
nta y las clases de las que hereda
Al convertir a una clase o estructura en que ha sobrecargado CType,
esta clase o estructura

CUInt UInteger (Tipo de datos) Cualquier tipo numérico (incluidos Byte, SByte y los tipos enumerad
os), Boolean, String, Object

CULng ULong (Tipo de datos, Visual Basic) Cualquier tipo numérico (incluidos Byte, SByte y los tipos enumerad
os), Boolean, String, Object

CUShort UShort (Tipo de datos, Visual Basic) Cualquier tipo numérico (incluidos Byte, SByte y los tipos enumerad
os), Boolean, String, Object

La función CType
CType (Función) actúa sobre dos argumentos. El primero es la expresión que va a convertirse y el segundo es la clase de objeto
o el tipo de datos de destino. Observe que el primer argumento debe ser una expresión, no un tipo.
CType es una función en línea, lo que significa que el código compilado realiza la conversión, a menudo sin generar una
llamada a la función. Esto mejora el rendimiento.
Para una comparación de CType con las otras palabras clave de conversión de tipos, consulte DirectCast y TryCast.
Tipos básicos
El siguiente ejemplo muestra el uso de CType.

k = CType(q, Integer)
' The following statement coerces w to the specific object class Label.
f = CType(w, Label)

Tipos compuestos
Puede utilizar CType para convertir valores en tipos de datos compuestos así como en tipos básicos. También puede utilizarlo
para convertir una clase de objeto en el tipo de una de sus interfaces, como en el ejemplo siguiente.

' Assume class cZone implements interface iZone.


Dim h As Object
' The first argument to CType must be an expression, not a type.
Dim cZ As cZone
' The following statement coerces a cZone object to its interface iZone.
h = CType(cZ, iZone)

Tipos de matriz
CType también puede convertir tipos de datos de matrices, como en el ejemplo siguiente.

Dim v() As classV


Dim obArray() As Object
' Assume some object array has been assigned to obArray.
' Check for run-time type compatibility.
If TypeOf obArray Is classV()
' obArray can be converted to classV.
v = CType(obArray, classV())
End If

Para obtener más información y un ejemplo, consulte Conversiones de matrices.


Tipos que define CType
Puede definir CType en una clase o estructura que haya definido. Esto le permite convertir los valores al tipo de su clase o
estructura y desde él. Para obtener más información y un ejemplo, consulte Cómo: Definir un operador de conversión.
Nota
Los valores utilizados con una palabra clave de conversión deben ser válidos para el tipo de datos de destino; de lo contrario,
se produce un error. Por ejemplo, si intenta convertir un tipo Long en Integer, el valor de Long debe estar dentro del interv
alo válido para el tipo de datos Integer.

Precaución
Especificar CType para convertir de un tipo de clase a otro produce un error en tiempo de ejecución si el tipo de origen no d
eriva del tipo de destino. Este tipo de error produce una excepción InvalidCastException.

Sin embargo, si uno de los tipos es una estructura o clase que ha definido y si ha definido CType en esa estructura o clase, una
conversión puede tener éxito si satisface los requisitos de CType. Consulte Cómo: Definir un operador de conversión.
La acción de realizar una conversión explícita se denomina también convertir una expresión en un determinado tipo de datos o
clase de objeto.
Vea también
Tareas
Cómo: Convertir un objeto en otro tipo en Visual Basic
Solucionar problemas de tipos de datos
Referencia
Resumen de tipos de datos (Visual Basic)
Funciones de conversión de tipos
Conceptos
Cambios de valores durante las conversiones
Conversiones entre cadenas y otros tipos
Programación sin tipos en Visual Basic
Otros recursos
Conversiones de tipos en Visual Basic
Estructuras: tipos de datos propios
Conceptos del lenguaje Visual Basic

Cambios de valores durante las conversiones


Una conversión de un tipo de valor almacena una copia del valor de origen en el destino de la conversión. Sin embargo, esta
copia no es una imagen exacta del valor de origen. El tipo de datos de destino almacena valores de forma distinta, e incluso
puede modificarse el valor que se está representando, en función del tipo de conversión que se esté realizando.
Cambios durante las conversiones de ampliación y de restricción
Las conversiones de restricción cambian la copia de destino del valor de origen con una pérdida potencial de información. Por
ejemplo, un valor fraccionario se redondea al convertirlo en un tipo integral y un tipo numérico que se está convirtiendo a
Boolean se reduce a True o False.
Las conversiones de ampliación conservan el valor de origen pero pueden cambiar su representación. Esto sucede si se
convierte un tipo integral en Decimal o un tipo Char en String.
El valor de origen inicial no cambia como resultado de una conversión.
Cambios durante las conversiones de tipos de referencia
Una conversión de un tipo de referencia sólo copia el puntero al valor. El valor en sí mismo no se copia ni se cambia en modo
alguno. Lo único que puede cambiar es el tipo de datos de la variable que contiene el puntero. En el ejemplo siguiente, el tipo
de datos cambia de la clase derivada a su clase base, pero el objeto al que apuntan ahora ambas variables no se modifica.

' Assume class cSquare inherits from class cShape.


Dim shape As cShape
Dim square As cSquare = New cSquare
' The following statement performs a widening
' conversion from a derived class to its base class.
shape = square

Vea también
Tareas
Cómo: Convertir un objeto en otro tipo en Visual Basic
Referencia
Resumen de tipos de datos (Visual Basic)
Funciones de conversión de tipos
Conceptos
Conversiones de ampliación y de restricción
Conversiones implícitas y explícitas
Conversiones entre cadenas y otros tipos
Conversiones de matrices
Programación sin tipos en Visual Basic
Otros recursos
Conversiones de tipos en Visual Basic
Estructuras: tipos de datos propios
Conceptos del lenguaje Visual Basic

Conversiones entre cadenas y otros tipos


Los valores numéricos, Boolean o de fecha y hora pueden convertirse en un valor de tipo String. También puede realizarse la
conversión en la dirección inversa (de un valor de cadena a un valor numérico, Boolean o Date) siempre que el contenido de
la cadena se pueda interpretar como un valor válido del tipo de datos de destino. Si no es posible, se produce un error en
tiempo de ejecución.
Las conversiones de todas estas asignaciones, en ambas direcciones, son conversiones de restricción. Deben utilizarse las
palabras clave de conversión de tipos (CBool, CByte, CDate, CDbl, CDec, CInt, CLng, CSByte, CShort, CSng, CStr, CUInt,
CULng, CUShort y CType). Las funciones Format (Función) y Val (Función) proporcionan un control adicional sobre las
conversiones entre cadenas y números.
Si ha definido una clase o estructura, puede definir operadores de conversión de tipos entre String y el tipo de su clase o
estructura. Para obtener más información, consulte Cómo: Definir un operador de conversión.
Conversión de números en cadenas
Puede utilizar la función Format para convertir un número en una cadena con formato que puede incluir no sólo los dígitos
adecuados sino también los símbolos de formato como un símbolo de moneda (como $), separadores de miles o símbolos que
agrupan dígitos (como ,) y un separador decimal (como .). Format utiliza automáticamente los símbolos adecuados según la
Configuración regional especificada en el Panel de control de Windows.
Tenga en cuenta que el operador de concatenación (&) puede convertir un número en una cadena de forma implícita, como se
muestra en el ejemplo siguiente.

' The following statement converts count to a String value.


Str = "The total count is " & count

Conversión de cadenas en números


Puede utilizar la función Val para convertir explícitamente los dígitos de una cadena en un número. Val lee la cadena hasta
que encuentra un carácter distinto de un dígito, espacio, ficha, avance de línea o punto. Las secuencias “&O” y “&H” alteran la
base del sistema numérico y finalizan la exploración. Hasta que finaliza la lectura, Val convierte todos los caracteres
apropiados en un valor numérico. Por ejemplo, la instrucción siguiente devuelve el valor 141.825.
Val(" 14 1.825 miles")

Cuando Visual Basic convierte una cadena en un valor numérico, utiliza los valores especificados en la Configuración
regional del Panel de control de Windows para interpretar el separador de miles, el separador decimal y el símbolo de
moneda. Esto significa que una conversión puede realizarse correctamente bajo una configuración, pero no bajo otra. Por
ejemplo, "$14.20" es aceptable en la configuración regional de inglés (Estados Unidos), pero no en la de francés.
Vea también
Tareas
Cómo: Convertir un objeto en otro tipo en Visual Basic
Referencia
Resumen de tipos de datos (Visual Basic)
Funciones de conversión de tipos
Conceptos
Conversiones de ampliación y de restricción
Conversiones implícitas y explícitas
Cambios de valores durante las conversiones
Conversiones de matrices
Introducción a aplicaciones internacionales basadas en .NET Framework
Otros recursos
Conversiones de tipos en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Convertir un objeto en otro tipo en Visual Basic


Convierte una variable Object en otro tipo de datos utilizando una palabra clave de conversión como CType (Función).
Ejemplo
En el ejemplo siguiente se convierte una variable de tipo Object en Integer y String.

Public Sub objectConversion(ByVal anObject As Object)


Dim anInteger As Integer
Dim aString As String
anInteger = CType(anObject, Integer)
aString = CType(anObject, String)
End Sub

Si sabe que el contenido de una variable Object es de un tipo de datos determinado, es mejor convertir la variable en ese tipo
de datos. Si sigue utilizando la variable Object, provoca una conversión boxing y una conversión unboxing (para un tipo de
valor) o un enlace en tiempo de ejecución (para un tipo de referencia). Estas operaciones exigen todas un tiempo de ejecución
adicional y ralentizan el rendimiento.
Compilar el código
Este ejemplo necesita:
Una referencia al espacio de nombres System.
Vea también
Referencia
Resumen de tipos de datos (Visual Basic)
Funciones de conversión de tipos
Object
Conceptos
Conversiones de ampliación y de restricción
Conversiones implícitas y explícitas
Cambios de valores durante las conversiones
Conversiones entre cadenas y otros tipos
Conversiones de matrices
Programación sin tipos en Visual Basic
Otros recursos
Conversiones de tipos en Visual Basic
Estructuras: tipos de datos propios
Conceptos del lenguaje Visual Basic

Conversiones de matrices
Puede convertir un tipo de matriz en otro tipo de matriz diferente, siempre que se cumplan las condiciones siguientes:
Rango igual. Los rangos de las dos matrices deben ser los mismos; es decir, deben tener las mismas dimensiones. Sin
embargo, las longitudes de las dimensiones respectivas no tienen que ser necesariamente iguales.
Tipo de datos de elementos. Los tipos de datos de los elementos de ambas matrices deben ser tipos de referencia. No
se puede convertir una matriz Integer en una matriz Long, ni siquiera en una matriz Object, ya que hay al menos un
tipo de valor implicado. Para obtener más información, consulte Tipos de valores y tipos de referencia.
Convertibilidad. Una conversión, ya sea de ampliación o de restricción, debe poder realizarse entre los tipos de
elementos de las dos matrices. Un ejemplo en el que se incumple este requisito es una conversión intentada entre una
matriz String y una matriz de una clase derivada de System.Attribute. Estos dos tipos no tienen nada en común y no
existe ningún tipo de conversión entre ellos.
Una conversión de un tipo de matriz en otro será de ampliación o de restricción en función de si la conversión de los
respectivos elementos es de ampliación o de restricción. Para obtener más información, consulte
Conversiones de ampliación y de restricción.
Conversión en una matriz de objeto
Al declarar una matriz Object sin inicializarla, su tipo de elemento es Object mientras permanezca sin inicializar. Cuando se
establece una matriz de una clase específica, adopta el tipo de la clase. Sin embargo, su tipo subyacente continúa siendo
Object y es posible establecerlo más tarde en otra matriz de una clase no relacionada. Dado que todas las clases derivan de
Object, es posible cambiar el tipo de elemento de la matriz de una clase cualquiera a otra.
En el ejemplo siguiente, no existe ninguna conversión entre los tipos student y String, pero ambos derivan de Object, así que
todas las asignaciones son válidas.

' Assume student has already been defined as a class.


Dim testArray() As Object
' testArray is still an Object array at this point.
Dim names() As String = New String(3) {"Name0", "Name1", "Name2", "Name3"}
testArray = New student(3) {}
' testArray is now of type student().
testArray = names
' testArray is now a String array.

Tipo subyacente de una matriz


Si declara originalmente una matriz con una clase específica, su tipo de elemento subyacente será esa clase. Si más tarde la
establece en una matriz de otra clase, deberá haber una conversión entre las dos clases.
En el ejemplo siguiente, students es una matriz student. Puesto que no existe ninguna conversión entre String y student, en
la última instrucción se producirá un error.

Dim students() As student


Dim names() As String = New String(3) {"Name0", "Name1", "Name2", "Name3"}
students = New Student(3) {}
' The following statement fails at compile time.
students = names

Vea también
Tareas
Cómo: Convertir un objeto en otro tipo en Visual Basic
Referencia
Resumen de tipos de datos (Visual Basic)
Funciones de conversión de tipos
Conceptos
Tipos de datos en Visual Basic
Conversiones implícitas y explícitas
Cambios de valores durante las conversiones
Conversiones entre cadenas y otros tipos
Programación sin tipos en Visual Basic
Otros recursos
Conversiones de tipos en Visual Basic
Matrices en Visual Basic
Conceptos del lenguaje Visual Basic

Estructuras: tipos de datos propios


Una estructura es una generalización del tipo definido por el usuario (UDT) admitido por versiones anteriores de Visual Basic.
Además de campos, las estructuras pueden exponer propiedades, métodos y eventos. Una estructura puede implementar una
o más interfaces, y se pueden declarar niveles de acceso individuales para cada campo.
Para crear una estructura se pueden combinar elementos de datos de distintos tipos. Una estructura asocia uno o más
elementos entre ellos y con la propia estructura. Al declarar una estructura, ésta se convierte en un tipo de datos compuesto y
se pueden declarar variables de este tipo.
Las estructuras son útiles si se desea que una única variable contenga varios datos relacionados. Por ejemplo, quizás desee
mantener juntos el nombre de un empleado, su extensión telefónica y su salario. Podría utilizar varias variables para esta
información, o bien definir una estructura y utilizarla para una única variable de empleado. La ventaja de la estructura se hace
evidente si tiene muchos empleados y, por consiguiente, muchas instancias de la variable.
En esta sección
Cómo: Declarar una estructura
Muestra cómo declarar una estructura y sus elementos.
Variables de estructura
Explica la asignación de una estructura a una variable y el acceso a sus elementos.
Estructuras y otros elementos de programación
Resume cómo interactúan las estructuras con matrices, objetos y procedimientos, y también cómo interactúan éstos últimos
entre ellos.
Estructuras y clases
Describe las similitudes y diferencias entre estructuras y clases.
Secciones relacionadas
Tipos de datos en Visual Basic
Presenta los tipos de datos de Visual Basic y describe cómo utilizarlos.
Resumen de tipos de datos (Visual Basic)
Muestra los tipos de datos básicos proporcionados por Visual Basic.
Conceptos del lenguaje Visual Basic

Cómo: Declarar una estructura


Una declaración de estructuras empieza con la instrucción Structure (Instrucción) y finaliza con la instrucción End Structure.
Entre estas dos instrucciones debe declararse por lo menos un elemento. Los elementos pueden ser de cualquier tipo de datos,
pero al menos uno debe ser una variable no compartida o un evento no compartido y no personalizado.
No puede inicializar ninguno de los elementos de la estructura en la declaración de la estructura. Al declarar una variable como
un tipo de estructura, le asigna valores a los elementos al obtener acceso a los mismos mediante la variable.
Para obtener una descripción de las diferencias entre estructuras y clases, consulte Estructuras y clases.
Para efectos demostrativos, considere una situación en la que desee mantener el seguimiento del nombre de un empleado,
extensión de teléfono y sueldo. Una estructura le permite hacer esto en una variable única.
Para declarar una estructura
1. Cree las instrucciones de principio y fin para la estructura.
Puede especificar el nivel de acceso de una estructura mediante la palabra clave Public (Visual Basic),
Protected (Visual Basic), Friend (Visual Basic) o Private (Visual Basic), o puede dejar el valor predeterminado Public.

Private Structure employee


End Structure

2. Agregar elementos al cuerpo de la estructura.


Una estructura debe tener al menos un elemento. Debe declarar cada elemento y especificar un nivel de acceso para el
mismo. Si utiliza la instrucción Instrucción Dim (Visual Basic) sin palabras clave, la accesibilidad se establece de forma
predeterminada en Public.

Private Structure employee


Public givenName As String
Public familyName As String
Public phoneExtension As Long
Private salary As Decimal
Public Sub giveRaise(raise As Double)
salary *= raise
End Sub
Public Event salaryReviewTime()
End Structure

El campo salary del ejemplo anterior es Private, es decir que es inaccesible fuera de la estructura, incluso desde la clase
contenedora. Sin embargo, el procedimiento giveRaise es Public, así que es posible llamarlo desde fuera de la
estructura. De forma similar, puede provocar el evento salaryReviewTime desde fuera de la estructura.
Además de las variables, procedimientos Sub y eventos, también puede definir constantes, procedimientos Function y
propiedades en una estructura. Puede designar como máximo una propiedad como propiedad predeterminada, siempre
que admita al menos un argumento. Es posible controlar un evento con un procedimiento Shared (Visual Basic) Sub.
Para obtener más información, consulte Cómo: Declarar y llamar a una propiedad predeterminada en Visual Basic.
Vea también
Tareas
Solucionar problemas de tipos de datos
Referencia
Tipo de datos definido por el usuario
Conceptos
Tipos de datos en Visual Basic
Tipos de datos compuestos
Variables de estructura
Estructuras y otros elementos de programación
Estructuras y clases
Otros recursos
Tipos de datos elementales
Implementación de tipos de datos
Estructuras: tipos de datos propios
Conceptos del lenguaje Visual Basic

Variables de estructura
Una vez creada una estructura, se pueden declarar variables de procedimiento y de módulo como del mismo tipo. Por ejemplo,
puede crear una estructura que registra información sobre un sistema del equipo. En el siguiente ejemplo se muestra cómo.

Public Structure systemInfo


Public cPU As String
Public memory As Long
Public purchaseDate As Date
End Structure

Ahora puede declarar variables de ese tipo: Esto se muestra en la declaración siguiente:

Dim mySystem, yourSystem As systemInfo

Nota
En las clases y módulos, las estructuras declaradas mediante Instrucción Dim (Visual Basic) se establecen de forma predeter
minada como de acceso público. Si desea que una estructura sea privada, asegúrese de declararla utilizando la palabra clave
Private (Visual Basic).

Acceso a valores de estructura


Para asignar y recuperar valores de los elementos de una variable de estructura, utilice la misma sintaxis que para establecer y
obtener propiedades de un objeto. Coloca al operador de acceso a miembros (.) entre el nombre de la variable de estructura y
el nombre del elemento. El ejemplo siguiente tiene acceso a los elementos de las variables declaradas previamente como tipo
systemInfo.

mySystem.cPU = "486"
Dim tooOld As Boolean
If yourSystem.purchaseDate < #1/1/1992# Then tooOld = True

Asignar variables de estructura


También puede asignar una variable a otra si ambas son del mismo tipo de estructura. Se copian todos los elementos de una
estructura en los elementos correspondientes de la otra. Esto se muestra en la declaración siguiente:

yourSystem = mySystem

Si un elemento de una estructura es de tipo referencia, como String, Object o matriz, se copia el puntero a los datos. Si
systemInfo hubiera incluido una variable de objeto, en el ejemplo anterior se habría copiado el puntero de mySystem a
yourSystem y los cambios realizados en los datos del objeto a través de una estructura habrían surtido efecto al tener acceso a
ellos a través de la otra estructura.
Vea también
Tareas
Solucionar problemas de tipos de datos
Cómo: Declarar una estructura
Referencia
Structure (Instrucción)
Conceptos
Tipos de datos en Visual Basic
Tipos de datos compuestos
Estructuras y otros elementos de programación
Estructuras y clases
Otros recursos
Tipos de datos elementales
Implementación de tipos de datos
Estructuras: tipos de datos propios
Conceptos del lenguaje Visual Basic

Estructuras y otros elementos de programación


Se pueden utilizar estructuras conjuntamente con matrices, objetos y procedimientos, así como unos con otros. Las
interacciones utilizan la misma sintaxis que utilizan estos elementos de forma individual.
Nota
No puede inicializar ninguno de los elementos de la estructura en la declaración de la estructura. Sólo se pueden asignar val
ores a los elementos de una variable que se ha declarado como del tipo estructura.

Estructuras y matrices
Una estructura puede contener una matriz como uno o más de sus elementos. Esto se ilustra en el siguiente ejemplo:

Public Structure systemInfo


Public cPU As String
Public memory As Long
Public diskDrives() As String
Public purchaseDate As Date
End Structure

Tiene acceso a los valores de una matriz dentro de una estructura de la misma manera que tiene acceso a una propiedad en un
objeto. Esto se ilustra en el siguiente ejemplo:

Dim mySystem As systemInfo


ReDim mySystem.diskDrives(3)
mySystem.diskDrives(0) = "1.44 MB"

También puede declarar una matriz de estructuras. Esto se ilustra en el siguiente ejemplo:

Dim allSystems(100) As systemInfo

Se siguen las mismas reglas para tener acceso a los componentes de esta arquitectura de datos. Esto se ilustra en el siguiente
ejemplo:

ReDim allSystems(5).diskDrives(3)
allSystems(5).CPU = "386SX"
allSystems(5).diskDrives(2) = "100M SCSI"

Estructuras y objetos
Una estructura puede contener un objeto como uno o más de sus elementos. Esto se ilustra en el siguiente ejemplo:

Protected Structure userInput


Public userName As String
Public inputForm As System.Windows.Forms.Form
Public userFileNumber As Integer
End Structure

Se puede utilizar una clase de objeto específica en este tipo de declaración, en lugar de Object.
Estructuras y procedimientos
Puede pasar una estructura como un argumento de procedimiento. Esto se ilustra en el siguiente ejemplo:

Public currentCPUName As String = "700MHz Pentium compatible"


Public currentMemorySize As Long = 256
Public Sub fillSystem(ByRef someSystem As systemInfo)
someSystem.cPU = currentCPUName
someSystem.memory = currentMemorySize
someSystem.purchaseDate = Now
End Sub

El ejemplo anterior pasa la estructura por referencia, lo que permite al procedimiento modificar sus elementos de tal forma
que los cambios se hacen efectivos en el código de llamada. Si desea proteger una estructura frente a una modificación de este
tipo, pásela por valor.
También puede devolver una estructura de un procedimiento Function. Esto se ilustra en el siguiente ejemplo:

Dim allSystems(100) As systemInfo


Function findByDate(ByVal searchDate As Date) As systemInfo
Dim i As Integer
For i = 1 To 100
If allSystems(i).purchaseDate = searchDate Then Return allSystems(i)
Next i
' Process error: system with desired purchase date not found.
End Function

Estructuras dentro de estructuras


Las estructuras pueden contener otras estructuras. Esto se ilustra en el siguiente ejemplo:

Public Structure driveInfo


Public type As String
Public size As Long
End Structure
Public Structure systemInfo
Public cPU As String
Public memory As Long
Public diskDrives() As driveInfo
Public purchaseDate As Date
End Structure
Dim allSystems(100) As systemInfo
ReDim allSystems(1).diskDrives(3)
allSystems(1).diskDrives(0).type = "Floppy"

También puede utilizar esta técnica para encapsular una estructura definida en un módulo dentro de una estructura definida
en un módulo distinto.
Las estructuras pueden contener otras estructuras hasta cualquier nivel.
Vea también
Tareas
Solucionar problemas de tipos de datos
Cómo: Declarar una estructura
Referencia
Structure (Instrucción)
Conceptos
Tipos de datos en Visual Basic
Tipos de datos compuestos
Variables de estructura
Estructuras y clases
Otros recursos
Tipos de datos elementales
Implementación de tipos de datos
Estructuras: tipos de datos propios
Conceptos del lenguaje Visual Basic

Estructuras y clases
Visual Basic unifica la sintaxis para clases y estructuras, y el resultado es que ambas entidades admiten prácticamente las
mismas características. No obstante, existen también importantes diferencias entre clases y estructuras.
Las clases tienen la ventaja de ser tipos de referencia: pasar una referencia es más eficiente que pasar una variable de
estructura con todos sus datos. Por otra parte, las estructuras no necesitan asignación de memoria en la pila global.
Puesto que no es posible heredar de una estructura, las estructuras sólo deben utilizarse para objetos que no necesiten
extenderse. Utilice estructuras cuando el objeto que desee crear tenga un tamaño de instancia pequeño; tenga en cuenta las
características de rendimiento de las clases frente a las estructuras.
Similitudes
Las estructuras y las clases son similares en los siguientes aspectos:
Ambas son tipos container, lo que significa que contienen otros tipos como miembros.
Ambas tienen miembros, que pueden incluir constructores, métodos, propiedades, campos, constantes, enumeraciones,
eventos y controladores de eventos. Sin embargo, no confunda estos miembros con los elementos declarados de una
estructura.
Los miembros de ambas pueden tener niveles de acceso individualizados. Por ejemplo, un miembro puede declararse
como Public y otro como Private.
Ambas pueden implementar interfaces.
Ambas pueden tener constructores compartidos, con o sin parámetros.
Ambas pueden exponer una propiedad predeterminada, siempre que esa propiedad acepte al menos un parámetro.
Ambas pueden iniciar eventos y ambas pueden declarar delegados.
Diferencias
Las estructuras y las clases difieren en los siguientes aspectos:
Las estructuras son tipos de valor, las clases son tipos de referencia. Una variable de un tipo de estructura contiene los
datos de la estructura, en lugar de contener una referencia a los datos, como sucede con los tipos de clase.
Las estructuras utilizan asignación de pila y las clases utilizan asignación del montón.
De forma predeterminada, todos los elementos de estructura son Public; las variables y constantes de clase son Private,
mientras que otros miembros de clase son Public de forma predeterminada. Este comportamiento de los miembros de
las clases proporcionan compatibilidad con el sistema de valores predeterminados de Visual Basic 6.0.
Una estructura debe tener al menos una variable no compartida o un elemento de evento no compartido y no
personalizado; una clase puede estar completamente vacía.
Los elementos de estructura no se pueden declarar como Protected, mientras que los miembros de clase sí se pueden.
Un procedimiento de estructura sólo puede controlar eventos si es un procedimiento Shared (Visual Basic) Sub y sólo
mediante AddHandler (Instrucción); cualquier procedimiento de clase puede controlar eventos, ya sea utilizando la
palabra clave Handles o la instrucción AddHandler. Para obtener más información, consulte
Eventos y controladores de eventos.
Las declaraciones de variables de estructura no pueden especificar inicializadores o tamaños iniciales para matrices;
mientras que las declaraciones de variables de clase sí pueden.
Las estructuras heredan de forma implícita de la clase System.ValueType y no pueden heredar de ningún otro tipo de
clase. Las clases pueden heredar de cualquier clase o clases que no sean del tipo System.ValueType.
Las estructuras no son heredables; las clases, sí.
Las estructuras no se terminan nunca, por lo tanto, Common Language Runtime (CLR) nunca llama al método Finalize en
una estructura; las clases las termina el recolector de elementos no utilizados, que llama al método Finalize en una clase
cuando detecta que no quedan referencias activas.
Una estructura no requiere un constructor, una clase sí.
Las estructuras sólo pueden tener constructores no compartidos si pueden tomar parámetros; sin embargo las clases
pueden tener constructores con o sin parámetros.
Cada estructura tiene un constructor público implícito sin parámetros. El constructor inicializa todos los elementos de datos de
estructura con sus valores predeterminados. Este comportamiento no puede redefinirse.
Instancias y variables
Puesto que las estructuras son tipos de valor, cada variable de estructura está enlazada de forma permanente a una instancia
de estructura individual. Por otro lado, las clases son tipos de referencia y una variable de objeto puede hacer referencia a
varias instancias de clase en distintos momentos. Esta distinción afecta al uso de estructuras y clases de las siguientes formas:
Inicialización. Una variable de estructura incluye implícitamente una inicialización de los elementos mediante el
constructor sin parámetros de la estructura. Por tanto, Dim s As struct1 equivale a Dim s As struct1 = New
struct1().

Asignar variables. Al asignar una variable de estructura a otra o pasar una instancia de estructura a un argumento de
procedimiento, se copian los valores actuales de todos los elementos de variable en la nueva estructura. Al asignar una
variable de objeto a otra o pasar una variable de objeto a un procedimiento, sólo se copia el puntero de referencia.
No asignar nada. Puede asignar el valor Nothing (Visual Basic) a una variable de estructura, aunque la instancia sigue
asociada con la variable. Puede seguir llamando a los métodos y obteniendo acceso a sus elementos de datos, aunque la
asignación inicializa de nuevo los elementos de variable.
En contraposición, si establece una variable de objeto en Nothing, elimina su asociación con cualquier instancia de clase
y no puede tener acceso a ningún miembro a través de la variable hasta que le asigne otra instancia.
Varias instancias. Una variable de objeto puede tener asignadas distintas instancias de clase en momentos distintos y
varias variables de objeto pueden hacer referencia a la misma instancia de clase al mismo tiempo. Los cambios que
realice a los valores de los miembros de clase afectan a dichos miembros cuando se tiene acceso a estos mediante otra
variable que apunta a la misma instancia.
Los elementos de estructura, sin embargo, están aislados dentro de su propia instancia. Los cambios a sus valores no se
ven reflejados en ninguna otra variable de estructura, incluso en otras instancias de la misma declaración Structure.
Igualdad. La comprobación de igualdad de dos estructuras debe realizarse mediante una prueba elemento a elemento.
Dos variables de objeto se pueden comparar utilizando el método Equals. Equals indica si las dos variables señalan a la
misma instancia.
Vea también
Tareas
Solucionar problemas de tipos de datos
Conceptos
Tipos de datos en Visual Basic
Tipos de datos compuestos
Estructuras y otros elementos de programación
Tipos de valores y tipos de referencia
Otros recursos
Implementación de tipos de datos
Estructuras: tipos de datos propios
Descripción de las clases
Conceptos del lenguaje Visual Basic

Programación sin tipos en Visual Basic


El compilador de Visual Basic es capaz de cumplir dos reglas que afectan a su código fuente:
Cada variable local debe aparecer en una instrucción de declaración antes de que se utilice en cualquier otro tipo de
instrucción. Esta regla se cumple de manera predeterminada.
Cada conversión de tipos de restricción debe especificarse con una palabra clave de conversión de tipos. Esta regla no se
cumple de manera predeterminada.
Opciones de compilador que cambian las reglas
Puede cambiar cada una de estas reglas o ambas restableciendo las opciones del compilador correspondientes. Si se suaviza la
regla de conversión de tipos, el compilador funcionará con una semántica de tipos permisiva, lo que le permite realizar
conversiones de restricción sin palabras clave de conversión. Para obtener más información, consulte
Comprobar tipos en Visual Basic.
Si se suaviza la regla de declaración de variable, podrá utilizar la programación sin tipos, lo que le permite hacer referencia a
variables sin necesidad de declararlas primero. Para obtener más información, consulte Declaración implícita y explícita.
Normalmente, no se recomienda la programación sin tipos, ya que puede comportar errores de ejecución poco claros que
afecten a los tipos de datos. Sin embargo, puede que le resulte útil en determinadas circunstancias, como al trasladar código de
una aplicación antigua que no declaraba variables.
Vea también
Tareas
Solucionar problemas de tipos de datos
Referencia
Instrucción Option Explicit (Visual Basic)
Option Strict (Instrucción)
Conceptos
Tipos de datos en Visual Basic
Caracteres de tipo
Tipos de datos compuestos
Object como tipo de datos universal
Uso eficiente de tipos de datos
Otros recursos
Tipos de datos elementales
Conversiones de tipos en Visual Basic
Conceptos del lenguaje Visual Basic

Declaración implícita y explícita


De forma predeterminada, el compilador de Visual Basic impone una declaración explícita, que requiere declarar todas las
variables antes de utilizarlas. Puede eliminar este requisito y permitir la declaración implícita.
Visual Basic proporciona un modificador que controla la declaración explícita. De manera predeterminada, este modificador se
establece en On y el compilador fuerza la declaración explícita. Si establece este modificador en Off, puede utilizar variables sin
declararlas.
Modificador de declaración explícita. Puede establecer el modificador de declaración explícita en On o Off de cualquiera
de estas formas:
Establecer una propiedad de proyecto adecuada en el entorno de desarrollo integrado (IDE). Elija Propiedades de
<nombre de proyecto> en el menú Proyecto, a continuación, elija la ficha Compilación. Puede establecer los valores
predeterminados para Option Explicit, Option Strict y Option Compare.
Especificar la opción del compilador de línea de comandos /optionexplicit.
Incluir Instrucción Option Explicit (Visual Basic) al principio de su código.
Si utiliza la instrucción Option Explicit, esta configuración reemplaza las configuraciones tanto de la propiedad de proyecto
como de la opción de compilador, pero únicamente en el archivo de código fuente en el cual aparece.
Ventaja de rendimiento. Establecer Option Explicit en On tiene la ventaja de forzar que la inferencia de tipo se realice en
tiempo de compilación en lugar de en tiempo de ejecución. Esto mejora el rendimiento.
Declaración implícita
Si establece Option Explicit en Off, puede declarar de forma implícita una variable utilizándola simplemente en el código. El
compilador asigna Object (Tipo de datos) a todas las variables declaradas de forma implícita. Sin embargo, la aplicación es más
eficiente si se declaran todas las variables explícitamente y con un tipo de datos específico. Esto reduce la incidencia de los
errores de conflicto de nombres y de los errores de escritura. También permite al compilador detectar errores potenciales en
tiempo de ejecución, como asignar un tipo Integer a un tipo Short.
Errores potenciales
Nuevas variables imprevistas
Puede escribir un procedimiento en el que no declara una variable local. Esto se ilustra en el siguiente ejemplo:

Function safeSqrt(num)
' Make sure num is positive for square root.
tempVal = Math.Abs(num)
Return Math.Sqrt(tempVal)
End Function

Visual Basic crea automáticamente tempVal como una variable local que puede utilizar como si la hubiera declarado de forma
explícita. Aunque esto resulta cómodo, puede inducir a errores difíciles de detectar en el código si se escribe incorrectamente el
nombre de una variable. Supongamos que ha escrito el procedimiento del ejemplo anterior tal como sigue:

Function safeSqrt(num)
' Make sure num is positive for square root.
tempVal = Math.Abs(num)
Return Math.Sqrt(temVal)
End Function

A primera vista, el código parece idéntico. Pero como la variable tempVal se ha escrito incorrectamente, al igual que el
argumento de Sqrt, el compilador crea una variable local adicional denominada temVal, a la que nunca se asigna un valor y la
función devuelve siempre cero.
Referencia de elemento existente imprevisto
Cuando Visual Basic encuentra un nuevo nombre, no puede determinar si quiso declarar una nueva variable implícitamente o
si escribió mal un nombre de variable existente. Por consiguiente, intenta crear una nueva variable con ese nombre. Puede
haber una variable o un elemento de programación ya definido con ese nombre y su código utilizaría esa definición
involuntariamente.
Puede evitar los problemas derivados de las variables mal escritas mediante el uso de una declaración explícita.
Declaración explícita
En el ejemplo anterior, si la declaración explícita hubiera estado vigente para el archivo de código fuente que contenía el
procedimiento safeSqrt, Visual Basic habría reconocido tempVal y temVal como variables no declaradas, y habría generado
errores relativos a ambas. Como resultado, debería declararse de forma explícita tempVal: Esto se ilustra en el siguiente
ejemplo:

Function safeSqrt(ByVal num As Double) As Double


' Make sure num is positive for square root.
Dim tempVal As Double = Math.Abs(num)
Return Math.Sqrt(temVal)
End Function

Con este código revisado, se entendería inmediatamente el problema porque Visual Basic mostraría un mensaje de error para
la variable temVal escrita de forma incorrecta. Es recomendable utilizar la declaración explícita con la totalidad del código,
porque ayuda a detectar este tipo de errores.
Nota
La instrucción Option Explicit opera sobre una base archivo por archivo. Debe estar al principio de cada archivo de código f
uente en el cual desee controlar la imposición de una declaración de variable explícita.

Vea también
Tareas
Cómo: Modificar las propiedades y los valores de configuración del proyecto
Referencia
Resumen de tipos de datos (Visual Basic)
Funciones de conversión de tipos
Conceptos
Programación sin tipos en Visual Basic
Comprobar tipos en Visual Basic
Object como tipo de datos universal
Uso eficiente de tipos de datos
Variables en Visual Basic
Convenciones de nomenclatura de Visual Basic
Conceptos del lenguaje Visual Basic

Comprobar tipos en Visual Basic


Cuando se realiza una conversión entre tipos de datos, el compilador de Visual Basic puede funcionar con una semántica de
tipos estricta o permisiva. Si está vigente la semántica de tipos estricta, sólo se permiten de forma implícita las conversiones de
ampliación, mientras que las conversiones de restricción deben ser explícitas. Con una semántica de tipos permisiva, puede
intentar todas las conversiones de ampliación y de restricción de forma implícita. La semántica de tipos se aplica a
conversiones entre tipos de datos, incluyendo los tipos de objeto.
Maneras de establecer la opción de comprobación de tipos
Visual Basic proporciona un modificador que controla la comprobación de tipos. De manera predeterminada, este modificador
es Off y el compilador permite las conversiones de restricción implícitas. Si establece el modificador en On, el compilador
impone una semántica de tipos estricta.
Modificador de comprobación de tipos
Puede activar o desactivar el modificador de comprobación de tipos On o Off de cualquiera de estas formas:
Establecer la propiedad de proyecto adecuada en la ventana Propiedades del entorno de desarrollo integrado (IDE)
Especificar la opción del compilador de línea de comandos /optionstrict
Incluir la instrucción Option Strict al principio de su código
Si utiliza la instrucción Option Strict, esta configuración reemplaza las configuraciones tanto de la propiedad de proyecto
como de la opción de compilador, pero únicamente en el archivo de código fuente en el cual aparece. Para obtener más
información, consulte Option Strict (Instrucción).
Ventaja de rendimiento
Establecer Option Strict en On tiene la ventaja de forzar un enlace en tiempo de compilación. Esto mejora el rendimiento.
Vea también
Tareas
Cómo: Modificar las propiedades y los valores de configuración del proyecto
Referencia
Resumen de tipos de datos (Visual Basic)
Funciones de conversión de tipos
Conceptos
Tipos de datos en Visual Basic
Programación sin tipos en Visual Basic
Declaración implícita y explícita
Object como tipo de datos universal
Uso eficiente de tipos de datos
Conversiones de ampliación y de restricción
Conversiones implícitas y explícitas
Conceptos del lenguaje Visual Basic

Object como tipo de datos universal


Object (Tipo de datos) es el tipo de raíz en .NET Framework y en Visual Basic. Esto significa que el resto de tipos de datos y de
tipos de objeto se derivan de este tipo, ya sea de forma directa como remota. También significa que cualquier otro tipo de
datos, ya sea elemental o compuesto, se puede convertir a Object.
Asignación de tipos dinámica
Puede utilizar Object como el tipo de datos universal. A esto se le llama asignación de tipos dinámica. El siguiente ejemplo
ilustra esta flexibilidad.

Dim v As Object
v = "17"
' v contains the 2-character String value "17".
v = v - 15
' v now contains the Integer value 2.
v = "H" & v
' v now contains the 2-character String value "H2".

Aunque puede realizar operaciones en variables Object sin preocuparse excesivamente por el tipo de datos que contienen,
debe evitar los siguientes pequeños problemas:
Si realiza operaciones aritméticas o funciones en Object, deben contener datos numéricos o se produce un error en
tiempo de ejecución.
Si va a concatenar cadenas, utilice el operador & en lugar del operador +. Existen reglas complejas que rigen cuando el
operador + agrega sus operandos y cuando los concatena. El operador + también debe realizar la comprobación de tipos
y la conversión en algunos casos, lo que reduce el rendimiento.
Cambiar el tipo de datos de una variable de objeto
A pesar de que una variable Object puede aceptar datos de cualquier tipo, no puede cambiar la variable a un tipo de datos
distinto. Sin embargo, puede volver cambiar las dimensiones de una variable Object a una matriz de variables Object. El
ejemplo siguiente ilustra los usos válidos y no válidos de Instrucción ReDim (Visual Basic).

' The following statement declares a single Object.


Dim someObj As Object
' The following reallocation is valid only for Object.
ReDim someObj(8)
' The following statement attempts an INVALID change of data type.
ReDim someObj(8) As Double

La primera instrucción ReDim cambia someObj a una matriz de tipo Object. Esto resulta válido únicamente con el tipo de
datos Object. La segunda instrucción ReDim no es válida porque implica un tipo de datos distinto. Puede lograr el efecto
deseado utilizando una matriz separada. Esto se ilustra en el siguiente ejemplo:

' First allocate a separate array.


Dim someArray(8) As Double
' Then assign the new array to the Object variable.
someObj = someArray

Object como alternativa a una estructura


Como el tipo de datos Object puede almacenar muchos tipos de datos distintos, puede utilizar una matriz Object en muchas
situaciones en las que normalmente utilizaría una estructura. Una matriz Object es algo más flexible que una estructura, ya
que puede cambiar el tipo de datos que almacena en cada elemento en cualquier momento, y puede hacer que la matriz sea
dinámica, de tal modo que pueda cambiarle el tamaño como sea necesario. Sin embargo, una matriz Object utiliza más
memoria que una estructura equivalente y su rendimiento es más lento.
Vea también
Referencia
Resumen de tipos de datos (Visual Basic)
Funciones de conversión de tipos
Conceptos
Programación sin tipos en Visual Basic
Declaración implícita y explícita
Comprobar tipos en Visual Basic
Uso eficiente de tipos de datos
Declaración de variables de objeto
Asignación de variables de objeto
Valores de las variables de objeto
Otros recursos
Conversiones de tipos en Visual Basic
Conceptos del lenguaje Visual Basic

Uso eficiente de tipos de datos


A las variables no declaradas y a las variables declaradas sin un tipo de datos se les asigna el tipo de datos Object. Esto facilita
la creación más rápida de programas, pero puede provocar que se ejecuten de una forma más lenta.
Establecimiento inflexible de tipos
La especificación de tipos de datos para todas las variables recibe el nombre de establecimiento inflexible de tipos. La
utilización del establecimiento inflexible de tipos tiene diversas ventajas:
Habilita la compatibilidad con IntelliSense® para las variables. Esto le permite ver las propiedades de las variables y otros
miembros a medida que escribe el código.
Saca partido de la comprobación de tipos del compilador. Permite detectar las instrucciones que pueden fallar en tiempo
de ejecución debido a errores tales como el desbordamiento. También detecta llamadas a métodos en objetos que no las
admiten.
Tiene como consecuencia una ejecución más rápida del código.
Tipos de datos más eficaces
Para las variables que no contienen nunca valores decimales, los tipos de datos integrales son más eficientes que los tipos no
integrales. En Visual Basic, Integer y UInteger son los tipos numéricos más eficaces.
Para los números fraccionarios, Double es el más eficaz de los tipos de datos, porque los procesadores de las plataformas
actuales realizan las operaciones de punto flotante en precisión doble. Sin embargo, las operaciones con Double no son tan
rápidas como con los tipos integrales como Integer.
Especificar tipo de datos
Utilice Instrucción Dim (Visual Basic) para declarar una variable de un tipo específico. Puede especificar su nivel de acceso
simultáneamente utilizando la palabra clave Public (Visual Basic), Protected (Visual Basic), Friend (Visual Basic) o
Private (Visual Basic), como en el ejemplo siguiente.

Private x As Double
Protected s As String

Conversión de caracteres
Las funciones AscW y ChrW funcionan en Unicode. Es más recomendable utilizar estas funciones que Asc y Chr, que deben
traducir a Unicode y desde éste.
Vea también
Referencia
Asc, AscW (Funciones)
Chr, ChrW (Funciones)
Conceptos
Tipos de datos en Visual Basic
Programación sin tipos en Visual Basic
Declaración implícita y explícita
Comprobar tipos en Visual Basic
Object como tipo de datos universal
Tipos de datos numéricos
Declaración de variable en Visual Basic
Otros recursos
Utilizar IntelliSense
Referencia del lenguaje Visual Basic

Solucionar problemas de tipos de datos


Esta página muestra algunos problemas comunes que pueden aparecer al realizar operaciones en tipos de datos intrínsecos.
Las expresiones de punto flotante no se comparan como iguales
Cuando trabaje con números de punto flotante (String (Tipo de datos, Visual Basic) y Double (Tipo de datos, Visual Basic)),
tenga en cuenta que se almacenan como fracciones binarias. Esto significa que no pueden contener una representación exacta
de ninguna cantidad que no sea una fracción binaria (de la forma k / (2 ^ n) donde k y n son números enteros). Por ejemplo,
0,5 (= 1/2) y 0,3125 (= 5/16) se pueden almacenar como valores precisos, mientras que 0,2 (= 1/5) y 0,3 (= 3/10) sólo pueden
se aproximaciones.
Debido a esta imprecisión, no puede confiar en resultados exactos cuando trabaje en valores de punto flotante. Concretamente,
dos valores que son teóricamente iguales podrían tener representaciones ligeramente distintas.
Para comparar cantidades de punto flotante
1. Calcule el valor absoluto de su diferencia, utilizando el método Abs de la clase Math contenida en el espacio de nombres
System.
2. Determine una diferencia máxima aceptable, de manera que considere ambas cantidades como iguales a efectos
prácticos si su diferencia es menor que la especificada.
3. Compare el valor absoluto de la diferencia con la diferencia aceptable.
El ejemplo siguiente muestra comparaciones incorrectas y correctas de dos valores Double.
VB
Dim oneThird As Double = 1.0 / 3.0
Dim pointThrees As Double = 0.333333333333333

' The following comparison does not indicate equality.


Dim exactlyEqual As Boolean = (oneThird = pointThrees)

' The following comparison indicates equality.


Dim closeEnough As Double = 0.000000000000001
Dim absoluteDifference As Double = Math.Abs(oneThird - pointThrees)
Dim practicallyEqual As Boolean = (absoluteDifference < closeEnough)

MsgBox("1.0 / 3.0 is represented as " & oneThird.ToString("G17") _


& vbCrLf & "0.333333333333333 is represented as " _
& pointThrees.ToString("G17") _
& vbCrLf & "Exact comparison generates " & CStr(exactlyEqual) _
& vbCrLf & "Acceptable difference comparison generates " _
& CStr(practicallyEqual))

El ejemplo anterior utiliza el método ToString de la estructura Double para que pueda especificar una mayor precisión que la
utilizada por la palabra clave CStr. El valor predeterminado es de 15 dígitos, pero el formato "G17" lo amplía a 17 dígitos.
El operador Mod no devuelve un resultado preciso
Debido al imprecisión de almacenamiento con punto flotante, el Mod (Operador, Visual Basic) puede devolver un resultado
inesperado cuando al menos uno de los operandos es de punto flotante.
El Decimal (Tipo de datos, Visual Basic) no utiliza la representación en punto flotante. Muchos números que son inexactos en
formato Single y Double son exactos en el formato Decimal (por ejemplo 0,2 y 0,3). Aunque la aritmética es más lenta en
formato Decimal que con punto flotante, podría merecer la pena perder rendimiento para conseguir una mayor precisión.
Para buscar el resto entero de cantidades de punto flotante
1. Declare las variables como Decimal.
2. Utilice el carácter de tipo de literal D para forzar que los valores literales sean Decimal, en caso de que sus valores sean
demasiado grandes para el tipo de datos Long.
En el ejemplo siguiente se muestra la imprecisión potencial de los operandos de punto flotante.
VB
Dim two As Double = 2.0
Dim zeroPointTwo As Double = 0.2
Dim quotient As Double = two / zeroPointTwo
Dim doubleRemainder As Double = two Mod zeroPointTwo
MsgBox("2.0 is represented as " & two.ToString("G17") _
& vbCrLf & "0.2 is represented as " & zeroPointTwo.ToString("G17") _
& vbCrLf & "2.0 / 0.2 generates " & quotient.ToString("G17") _
& vbCrLf & "2.0 Mod 0.2 generates " _
& doubleRemainder.ToString("G17"))

Dim decimalRemainder As Decimal = 2D Mod 0.2D


MsgBox("2.0D Mod 0.2D generates " & CStr(decimalRemainder))

El ejemplo anterior utiliza el método ToString de la estructura Double para que pueda especificar una mayor precisión que la
utilizada por la palabra clave CStr. El valor predeterminado es de 15 dígitos, pero el formato "G17" lo amplía a 17 dígitos.
Dado que zeroPointTwo es Double, su valor para 0,2 es una fracción binaria infinitamente repetitiva con un valor almacenado
de 0,20000000000000001. Al dividir 2,0 por esta cantidad, se obtiene 9,9999999999999995 con un resto de
0,19999999999999991.
En la expresión de decimalRemainder, el carácter de tipo de literal D obliga a que ambos operandos sean Decimal, y 0,2 tenga
una representación precisa. Por consiguiente el operador Mod produce el resto esperado de 0,0.
Tenga en cuenta que no basta con declarar decimalRemainder como Decimal. También debe forzar los valores literales a
Decimal, o a que su valor predeterminado sea Double y decimalRemainder recibe el mismo valor inexacto que
doubleRemainder.

El tipo booleano no convierte con precisión al tipo numérico


Los valores Boolean (Tipo de datos, Visual Basic) no se almacenan como números y los valores almacenados no se consideran
equivalentes a números. Para la compatibilidad con versiones anteriores, Visual Basic proporciona las palabras clave de
conversión (CType (Función), CBool, CInt, etc.) para convertir entre Boolean y los tipos numéricos. Sin embargo, en ocasiones
otros lenguajes realizan de manera diferente estas conversiones, como ocurre con los métodos .NET Framework.
No debe escribir código que se base en los valores numéricos equivalentes de True y False. Siempre que sea posible, debe
restringir el uso de variables Boolean a los valores lógicos para los que se han diseñado. Si fuera necesario mezclar valores de
tipo Boolean y valores numéricos, asegúrese de comprender el método de conversión elegido.
Conversión en Visual Basic
Cuando utilice la conversión CType o CBool para convertir tipos de datos numéricos en Boolean, 0 se convierte en False y
todos los demás valores en True. Al convertir valores Boolean en tipos numéricos utilizando las palabras clave de conversión,
False se convierte en 0 y True en -1.
Conversión en Framework
El método ToInt32 de la clase Convert del espacio de nombres System convierte True en +1.
Si necesita convertir un valor Boolean en un tipo de datos numérico, tenga cuidado al elegir el método de conversión
utilizado.
El carácter literal genera un error del compilador
En ausencia de caracteres de tipo, Visual Basic presupone los tipos de datos predeterminados para los valores literales. El tipo
predeterminado para un literal de carácter, incluido entre comillas dobles (" "), es String.
El tipo de datos String no amplía al Char (Tipo de datos, Visual Basic). Esto significa que, si desea asignar un literal a una
variable Char, debe realizar una conversión de restricción para forzar a que el valor literal sea del tipo Char.
Para crear un literal Char para asignarlo a una variable o constante
1. Declare la variable o constante como Char.
2. Incluya el valor de carácter entre comillas dobles (" ").
3. A continuación de la comilla doble de cierre, coloque el carácter de tipo literal C para forzar que el valor literal sea de tipo
Char. Esto es necesario si el modificador de comprobación de tipo (Option Strict (Instrucción)) es On, y es deseable en
cualquier caso.
El ejemplo siguiente muestra asignaciones incorrectas y correctas de un valor literal a una variable Char.
VB
Option Strict On

VB
Dim charVar As Char
' The following statement attempts to convert a String literal to Char.
' Because Option Strict is On, it generates a compiler error.
charVar = "Z"
' The following statement succeeds because it specifies a Char literal.
charVar = "Z"c
' The following statement succeeds because it converts String to Char.
charVar = CChar("Z")

Siempre existe un riesgo en la utilización de conversiones de restricción, porque se pueden producir errores en tiempo de
ejecución. Por ejemplo, se puede producir un error en una conversión de String a Char si el valor String contiene más de un
carácter. Por consiguiente, es mejor programar para que se utilice el carácter de tipo C.
La conversión de cadenas produce errores en tiempo de ejecución
El String (Tipo de datos, Visual Basic) toma parte en muy pocas conversiones de ampliación. String sólo se amplía a sí mismo y
a Object, y sólo Char y Char() (una matriz de Char) amplían a String. Esto es así porque las variables y constantes String
pueden contener valores que no pueden alojar otros tipos de datos.
Cuando el modificador de comprobación de tipo (Option Strict (Instrucción)) es On, el compilador impide todas las
conversiones de restricción implícitas, incluso las que implican a String. Su código todavía puede utilizar palabras clave de
conversión como CStr y CType (Función), que indican a .NET Framework que intente realizar la conversión.
Protección de conversión de restricción
El inconveniente de las conversiones de restricción es que pueden producir errores en tiempo de ejecución. Por ejemplo, si una
variable String contiene un valor distinto de "True" o "False", no se puede convertir a Boolean. Si contiene caracteres de
puntuación, se produce un error al convertir en cualquier tipo numérico. A menos que sepa que su variable String siempre
contiene valores aceptables por el tipo de destino, no debería intentar la conversión.
Si necesita convertir de String a otro tipo de datos, el procedimiento más seguro consiste en incluir la conversión intentada en
la Instrucción Try...Catch...Finally (Visual Basic). Esto le permite tratar los errores en tiempo de ejecución.
Matrices de caracteres
Un único carácter Char y una matriz de elementos Char se amplían a String. Sin embargo, String no amplia a Char(). Para
convertir un valor String en una matriz Char, puede utilizar el método ToCharArray de la clase System.String.
Valores sin sentido
En general, los valores String no tienen ningún sentido en otros tipos de datos y la conversión resulta muy artificial y
peligrosa. Siempre que sea posible, debe restringir el uso de variables String a las secuencias de caracteres para las que están
diseñadas. Nunca debería escribir código basándose en los valores equivalentes en otros tipos.
Vea también
Referencia
Resumen de tipos de datos (Visual Basic)
Funciones de conversión de tipos
Conceptos
Tipos de datos en Visual Basic
Caracteres de tipo
Programación sin tipos en Visual Basic
Los tipos de datos son tipos de .NET Framework
Uso eficiente de tipos de datos
Otros recursos
Implementación de tipos de datos
Conversiones de tipos en Visual Basic
Conceptos del lenguaje Visual Basic

Variables en Visual Basic


Al realizar cálculos con Visual Basic, con frecuencia es necesario almacenar valores. Por ejemplo, puede que necesite calcular
varios valores, compararlos y realizar distintas operaciones con ellos, en función del resultado de la comparación. Si desea
compararlos, es necesario conservar los valores.
Uso
Visual Basic, al igual que la mayoría de los lenguajes de programación, utiliza variables para almacenar valores. Una variable
tiene un nombre (la palabra que se utiliza para referirse al valor que contiene la variable) y un tipo de datos (que determina la
clase de datos que puede almacenar la variable). Una variable puede representar una matriz, si es necesario que almacene un
conjunto indizado de elementos de datos estrechamente relacionados entre sí.
Asignar valores
Para efectuar cálculos y asignar el resultado a una variable, se utilizan instrucciones de asignación, como se muestra en el
ejemplo siguiente.
VB
' The following statement assigns the value 10 to the variable.
applesSold = 10
' The following statement increments the variable.
applesSold = applesSold + 1
' The variable now holds the value 11.

Nota
El signo igual (=) de este ejemplo es un operador de asignación, no un operador de igualdad. El valor se asigna a la variable
applesSold.

Para obtener más información, vea Cómo: Introducir y extraer los datos de una variable.
Variables y propiedades
Como una variable, una propiedad representa un valor al que puede tener acceso. Sin embargo, es más complejo que una
variable. Una propiedad utiliza bloques de código que controlan cómo establecer y recuperar su valor. Para obtener más
información, vea Diferencias entre propiedades y variables en Visual Basic.
Vea también
Tareas
Solucionar problemas de variables en Visual Basic
Cómo: Introducir y extraer los datos de una variable
Conceptos
Declaración de variable en Visual Basic
Variables de objeto en Visual Basic
Diferencias entre propiedades y variables en Visual Basic
Conceptos del lenguaje Visual Basic

Declaración de variable en Visual Basic


Una variable se declara para especificar su nombre y sus características. La instrucción de declaración para variables es
Instrucción Dim (Visual Basic). Su ubicación y contenido determinan las características de la variable.
Para las reglas de denominación de variables y consideraciones, consulte Nombres de elementos declarados.
Niveles de declaración
Valor local y variables miembros
Una variable local es aquella que se declara dentro de un procedimiento. Una variable miembro es un miembro de un tipo de
Visual Basic; se declara en el nivel de módulo, dentro de una clase, estructura o módulo, pero no dentro de ningún
procedimiento interno de esa clase, estructura o módulo.
Variables compartidas y de instancias
La categoría de una variable miembro, en una clase o estructura, depende de que la variable esté o no compartida. Si una
variable se declara con la palabra clave Shared, es una variable compartida, y existe en una única copia compartida por todas
las instancias de la clase o estructura.
De lo contrario, es una variable de instancia, y se crea una copia independiente de ella para cada instancia de la clase o
estructura. Una copia determinada de una variable de instancia sólo está disponible en la instancia para la cual se creó. Es
independiente de una copia en cualquier otra instancia.
Declarar el tipo de datos
La cláusula As de la instrucción de declaración permite definir el tipo de datos o de objetos de la variable que se está
declarando. Se puede especificar cualquiera de los siguientes tipos para una variable:
Un tipo de datos básico, como Boolean, Long o Decimal.
Un tipo de datos compuesto, como una matriz o una estructura.
Un tipo de objeto o clase, definido en su aplicación o en otra aplicación
Una clase de .NET Framework, como Label o TextBox
Un tipo de interfaz, como IComparable o IDisposable
Se pueden declarar varias declarar distintas variables en la misma instrucción sin necesidad de repetir el tipo de datos. En las
instrucciones siguientes, las variables i, jy k se declaran como tipo Integer, l y m como Long, y x e y como Single:

Dim i, j, k As Integer
' All three variables in the preceding statement are declared as Integer.
Dim l, m As Long, x, y As Single
' In the preceding statement, l and m are Long, x and y are Single.

Para obtener más información acerca de tipos de datos, consulte Tipos de datos en Visual Basic. Para obtener más información
sobre objetos, consulte Programación orientada a objetos en Visual Basic y Programar con componentes.
Declarar características
El período de duración de una variable representa el tiempo durante el cual la variable está disponible para que pueda ser
utilizada. En general, una variable existe mientras el elemento que lo declara (como un procedimiento o clase) siga existiendo.
En algunos casos es posible extender la duración de una variable. Para obtener más información, consulte
Período de duración en Visual Basic.
El ámbito de una variable está formado por todo código que puede hacer referencia a la variable sin tener que calificar su
nombre. El ámbito de una variable está determinado por la ubicación en la que se haya declarado la variable. El código de una
región determinada puede utilizar las variables definidas en dicha región sin necesidad de especificar los nombres de las
variables. Para obtener más información, consulte Ámbito en Visual Basic.
El nivel de acceso de una variable es la extensión de código que tiene permiso para tener acceso a ella. El modificador de
acceso (como Public (Visual Basic) o Private (Visual Basic)) que utiliza en la instrucción Dim es quien determina esto. Para
obtener más información, consulte Niveles de acceso en Visual Basic.
Vea también
Tareas
Cómo: Crear una variable nueva
Cómo: Crear una variable que no cambia de valor
Cómo: Introducir y extraer los datos de una variable
Referencia
Resumen de tipos de datos (Visual Basic)
Protected (Visual Basic)
Friend (Visual Basic)
Static (Visual Basic)
Conceptos
Decidir el tipo de variable que se va a definir
Características de los elementos declarados
Conceptos del lenguaje Visual Basic

Cómo: Crear una variable nueva


Crea una variable con una instrucción Instrucción Dim (Visual Basic).
Para crear una nueva variable
1. Declare la variable con una instrucción Dim.

Dim newCustomer

2. Incluya las especificaciones para las características de la variable, como Private (Visual Basic), Static (Visual Basic),
Shadows o WithEvents. Para obtener más información, consulte Características de los elementos declarados.

Public Static newCustomer

No necesita la palabra clave Dim si utiliza otras palabras clave en la declaración.


3. Agregue a las especificaciones el nombre de la variable que debe seguir las reglas y convenciones de Visual Basic. Para
obtener más información, consulte Nombres de elementos declarados.

Public Static newCustomer

4. Agregue al nombre la cláusula As para especificar el tipo de datos de la variable.

Public Static newCustomer As Customer

Si no especifica el tipo de datos, tiene como valor predefinido Object.


5. Agregue a la cláusula As un signo igual (=) y agregue al signo igual el valor inicial de la variable.
Visual Basic asigna el valor especificado a la variable cada vez que ejecuta la instrucción Dim. Si no especifica un valor
inicial, Visual Basic asigna el valor inicial predeterminado para el tipo de datos de la variable cuando escribe por primer
vez el código que contiene la instrucción Dim.
Si la variable es un tipo de referencia, puede crear una instancia de su clase incluyendo la palabra clave
New (Visual Basic) en la cláusula As. Si no utiliza New, el valor inicial de la variable es Nothing (Visual Basic).

Public Static newCustomer As New Customer

Vea también
Conceptos
Variables en Visual Basic
Declaración de variable en Visual Basic
Nombres de elementos declarados
Características de los elementos declarados
Tipos de valores y tipos de referencia
Instrucciones de declaración en Visual Basic
Conceptos del lenguaje Visual Basic

Decidir el tipo de variable que se va a definir


Cuando define una variable, debe decidir las características siguientes:
Su tipo de datos: qué tipo de datos debe contener
Su período de duración: cuánto tiempo debe continuar existiendo
Su ámbito: qué código debe poder hacer referencia a él sin calificar su nombre
Su nivel de acceso: qué código debe tener el permiso de lectura y escritura en ella.
Tipo de datos
En la instrucción Instrucción Dim (Visual Basic) que declara la variable, incluya una cláusula As que especifica el tipo de datos
adecuado (como Integer o String). Las páginas siguientes pueden ayudarle a elegir el tipo de datos de una variable.
Cómo: Contener los números enteros en una variable
Cómo: Contener el número mayor posible en una variable
Cómo: Optimizar el almacenamiento de enteros positivos con tipos sin signo
Cómo: Contener las fracciones en una variable
Cómo: Contener los dígitos más significativos de una variable
Cómo: Mantener los valores de moneda de una variable
Cómo: Contener caracteres en una variable
Cómo: Contener valores verdaderos y falsos en una variable
Cómo: Mantener los valores de fecha y hora de una variable
Cómo: Contener los datos de tipo desconocido en una variable
Cómo: Declarar una estructura
Crear y utilizar objetos
Para obtener más información, consulte Resumen de tipos de datos (Visual Basic).
Período de duración
La decisión importante sobre el período de duración es si es aceptable para la variable dejar de existir cuando el módulo, clase
o procedimiento que lo declara dejan de existir.
Si la variable no necesita seguir existiendo más allá del período de duración de su elemento contenedor, no necesita hacer
nada más. Si la variable debe seguir existiendo durante más tiempo que su elemento contenedor, puede incluir la palabra clave
Static o Shared en su instrucción Dim. Siga los pasos descritos en Cómo: Prolongar la duración de una variable.
Para obtener más información, consulte Período de duración en Visual Basic.
Ámbito
El ámbito de una variable suele ser normalmente el mismo que su espacio de declaración, es decir, el elemento contenedor en
el que se declara. Debe decidir qué extensión debe tener el ámbito de la variable.
Asegúrese de que la instrucción Dim aparece en el nivel adecuado, como bloque, procedimiento o nivel de módulo. Siga los
pasos descritos en Cómo: Controlar el ámbito de una variable.
Para obtener más información, consulte Ámbito en Visual Basic.
Nivel de acceso
Cada variable tiene un nivel de acceso predeterminado que depende de dónde se declara, es decir, en qué tipo de elemento
contenedor.
Si necesita especificar un nivel de acceso distinto del valor predeterminado, puede incluir un modificador de acceso (como
Protected o Private) en su instrucción Dim. Sólo puede hacer esto para las variables miembros (concretamente, las variables
declaradas fuera de un procedimiento). Siga los pasos descritos en Cómo: Controlar la disponibilidad de una variable.
Para obtener más información, consulte Niveles de acceso en Visual Basic.
Vea también
Tareas
Cómo: Prolongar la duración de una variable
Cómo: Controlar el ámbito de una variable
Referencia
As (Visual Basic)
Conceptos
Declaración de variable en Visual Basic
Características de los elementos declarados
Ámbito en Visual Basic
Niveles de acceso en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Crear una variable que no cambia de valor


La noción de una variable que no cambia de valor podría parecer contradictoria. Pero hay situaciones en las que una constante
no es factible y es útil tener una variable con un valor fijo. En tal caso puede definir una variable miembro con la palabra clave
ReadOnly (Visual Basic).
No puede utilizar Instrucción Const (Visual Basic) para declarar y asignar un valor constante en las circunstancias siguientes:
La instrucción Const no acepta el tipo de datos que desea utilizar.
No conoce el valor en tiempo de compilación.
No puede calcular el valor constante en tiempo de compilación.
Para crear una variable que no cambia de valor
1. En el nivel de módulo, declare una variable miembro con Instrucción Dim (Visual Basic) e incluya la palabra clave
ReadOnly (Visual Basic)

Dim ReadOnly timeStarted

Sólo puede especificar ReadOnly en una variable miembro. Esto significa que debe definir la variable en el nivel de
módulo, fuera de cualquier procedimiento.
2. Si puede calcular el valor en una instrucción única en el momento de la compilación, utilice una cláusula de inicialización
en la instrucción Dim. Agregue detrás de la cláusula As un signo igual (=), seguido de una expresión. Asegúrese de que
el compilador puede evaluar esta expresión en un valor constante.

Dim ReadOnly timeStarted As Date = Now

Sólo puede asignar una vez un valor a una variable ReadOnly. Una vez hecho esto, ningún código podrá cambiar nunca
su valor.
Si no conoce el valor o no puede calcularlo en una instrucción única en tiempo de compilación, puede asignarlo durante
el tiempo de ejecución en un constructor. Para ello, debe declarar la variable ReadOnly en la clase o nivel de estructura.
En el constructor para esa clase o estructura, calcule el valor fijo de la variable y asígnelo a la variable antes de que vuelva
del constructor.
Vea también
Referencia
WriteOnly
Instrucción Const (Visual Basic)
Conceptos del lenguaje Visual Basic

Cómo: Introducir y extraer los datos de una variable


Almacena un valor en una variable colocando el nombre de variable en el lado izquierdo de una instrucción de asignación.
Colocar datos en una variable
Para almacenar un valor en una variable
Utilice el nombre de variable en el lado izquierdo de una instrucción de asignación.
El ejemplo siguiente establece el valor de la variable alpha.

alpha = (beta * 6.27) / (gamma + 2.1)

El valor generado en el lado derecho de la instrucción de asignación se almacena en la variable.


Obtener datos de una variable
Recupera el valor de una variable incluyendo el nombre de variable en una expresión.
Para recuperar un valor de una variable
Utilice el nombre de variable en una expresión. Puede utilizar una variable en cualquier parte donde se puede utilizar una
constante o un literal, excepto en una expresión que define el valor de una constante.
o bien
Utilice el nombre de variable que sigue al signo igual (=) en una instrucción de asignación.
El ejemplo siguiente lee el valor de la variable startValue y, a continuación, utiliza el valor de la variable counter en una
expresión.

counter = startValue
cellValue = (counter + 5) ^ 2

El valor de la variable participa en la expresión del mismo modo que una constante y se almacena en la variable o
propiedad en el lado izquierdo de la instrucción de asignación.
Vea también
Conceptos
Variables en Visual Basic
Declaración de variable en Visual Basic
Variables de objeto en Visual Basic
Conceptos del lenguaje Visual Basic

Variables de objeto en Visual Basic


Una variable, además de almacenar valores directamente, puede hacer referencia a un objeto. Puede asignar un objeto a una
variable por los mismos motivos que asigna un valor a una variable:
Un nombre de variable suele ser más corto y más fácil de recordar que la ruta de acceso completa a los métodos y
propiedades necesarios para obtener acceso al propio objeto.
El uso de una variable que hace referencia a un objeto es más eficiente que el acceso reiterado al propio objeto mediante
los métodos o propiedades adecuados.
Es posible cambiar una variable para que haga referencia a otros objetos durante la ejecución del código.
Acortar el código
Las variables de objeto permiten reducir la cantidad de código que hay que escribir. El ejemplo siguiente utiliza la ruta de
acceso completa de métodos y propiedades para tener acceso a un objeto Control.

' Assume Me is a valid Form, or replace Me with a valid Form.


Me.ActiveForm.ActiveControl.Text = "Test"
Me.ActiveForm.ActiveControl.Location = New Point(100, 100)
Me.ActiveForm.ActiveControl.Show()

Podría abreviar este segmento de código utilizando una variable de objeto para el control, con lo que aumentaría la rapidez de
su ejecución. Es conveniente que declare la variable de objeto con la clase específica que desee asignarle (Control en este
caso). Una vez que haya asignado un objeto a la variable, podrá tratarla exactamente igual que el objeto al que hace referencia.
Puede establecer o recuperar las propiedades del objeto o utilizar cualquiera de sus métodos. El ejemplo siguiente utiliza una
variable de objeto para simplificar el código del ejemplo anterior.

Dim ctrlActv As System.Windows.Forms.Control = Me.ActiveForm.ActiveControl


ctrlActv.Text = "Test"
ctrlActv.Location = New Point(100, 100)
ctrlActv.Show()

Vea también
Tareas
Cómo: Acelerar el acceso a un objeto con una ruta de acceso de calificación larga
Conceptos
Declaración de variable en Visual Basic
Declaración de variables de objeto
Asignación de variables de objeto
Valores de las variables de objeto
Conceptos del lenguaje Visual Basic

Cómo: Acelerar el acceso a un objeto con una ruta de acceso de


calificación larga
Si frecuentemente tiene acceso a un objeto que requiere una ruta de acceso de calificación de varios métodos y propiedades,
puede acelerar su código sin tener que repetir la ruta de acceso de calificación.
Hay dos maneras de evitar la repetición de la ruta de acceso de calificación. Puede asignar el objeto a una variable o puede
utilizarlo en un bloque With...End With.
Para acelerar el acceso a un objeto muy calificado asignándolo a una variable
1. Declare una variable del tipo del objeto al que está teniendo acceso con frecuencia. Especifique la ruta de acceso de
calificación en la parte de inicialización de la declaración.

Dim ctrlActv As Control = someForm.ActiveForm.ActiveControl

2. Utilice la variable para tener acceso a los miembros del objeto.

ctrlActv.Text = "Test"
ctrlActv.Location = New Point(100, 100)
ctrlActv.Show()

Para acelerar el acceso a un objeto muy calificado mediante un bloque With...End


1. Coloque la ruta de acceso de calificación en una instrucción With.

With someForm.ActiveForm.ActiveControl

2. Tenga acceso a los miembros del objeto dentro del bloque With, antes de la instrucción End With.

.Text = "Test"
.Location = New Point(100, 100)
.Show()
End With

Vea también
Referencia
Instrucción With...End With (Visual Basic)
Conceptos
Variables de objeto en Visual Basic
Conceptos del lenguaje Visual Basic

Declaración de variables de objeto


Utiliza una instrucción de declaración normal para declarar una variable de objeto. Para el tipo de datos, especifica Object (es
decir, Object (Tipo de datos)) o una clase más específica a partir de la cual se crea el objeto.
Declarar una variable como Object es lo mismo que declararla como System.Object.
Cuando se declara una variable con una clase de objeto específica, ésta obtiene acceso a todos los métodos y propiedades de
dicha clase y las clases de las que hereda. Si declara la variable con Object, puede tener acceso sólo a los miembros de la clase
Object, a menos que cambie Option Strict Off para permitir el enlace en tiempo de ejecución.
Sintaxis de la declaración
Use la sintaxis siguiente para declarar una variable de objeto:

Dim variablename As [New] { objectclass | Object }

También puede especificar Public (Visual Basic), Protected (Visual Basic), Friend (Visual Basic), Protected Friend,
Private (Visual Basic), Shared (Visual Basic) o Static (Visual Basic) en la declaración. Son válidas las siguientes declaraciones de
ejemplo:

Private objA As Object


Static objB As System.Windows.Forms.Label
Dim objC As System.OperatingSystem

Enlace en tiempo de ejecución y enlace en tiempo de compilación


A veces no se conoce la clase específica hasta que se ejecuta el código. En este caso, debe declarar la variable de objeto con el
tipo de datos Object, Esto crea una referencia general a cualquier tipo de objeto y se asigna la clase específica en tiempo de
ejecución. Esto se llama enlace en tiempo de ejecución. El enlace en tiempo de ejecución requiere tiempo de ejecución
adicional. También limita su código a los métodos y propiedades de la clase que le ha asignado recientemente. Esto puede
producir errores en tiempo de ejecución si su código intenta tener acceso a miembros de una clase diferente.
Si conoce la clase específica en tiempo de compilación, declare la variable de objeto como miembro de dicha clase. Esto se
llama enlace en tiempo de compilación. El enlace en tiempo de compilación mejora el rendimiento y garantiza el acceso de su
código a todos los métodos y propiedades de la clase específica. En las declaraciones del ejemplo anterior, si la variable objA
utiliza sólo objetos de clase System.Windows.Forms.Label, debe especificar As System.Windows.Forms.Label en su
declaración.
Ventajas del enlace en tiempo de compilación
La declaración de una variable de objeto como una clase específica ofrece varias ventajas:
Comprobación automática de tipos
Acceso garantizado a todos los miembros de la clase específica
Compatibilidad con Microsoft IntelliSense en el Editor de código
Legibilidad mejorada de su código
Disminución del número de errores en el código
Errores detectados en tiempo de compilación en vez de en tiempo de ejecución
Aumento de la velocidad de ejecución del código
Acceso a los miembros de variables de objeto
Si Option Strict está en On, una variable de objeto sólo puede tener acceso a los métodos y propiedades de la clase con la
que se ha declarado. Esto se ilustra en el siguiente ejemplo:

' Option statements must precede all other source file lines.
Option Strict On
' Imports statement must precede all declarations in the source file.
Imports System.Windows.Forms
Public Sub accessMembers()
Dim p As Object
Dim q As System.Windows.Forms.Label
p = New System.Windows.Forms.Label
q = New System.Windows.Forms.Label
Dim j, k As Integer
' The following statement generates a compiler ERROR.
j = p.Left
' The following statement retrieves the left edge of the label in pixels.
k = q.Left
End Sub

En este ejemplo, p puede utilizar sólo los miembros de la propia clase Object, que no incluyen la propiedad Left. Por otro
lado, q se ha declarado con el tipo Label, así que puede utilizar todos los métodos y propiedades de la clase Label en el
espacio de nombres System.Windows.Forms.
Flexibilidad de las variables de objeto
Cuando se trabaja con objetos en una jerarquía de herencia, existe la posibilidad de elegir la clase que se va a utilizar para
declarar las variables de objeto. A la hora de tomar esta decisión, debe buscarse un equilibrio entre la flexibilidad de la
asignación de objetos y el acceso a los miembros de una clase. Por ejemplo, si consideramos la jerarquía de herencia que
conduce a la clase System.Windows.Forms.Form:
Object
Component
Control
ScrollableControl
ContainerControl
Form
Supongamos que una aplicación define un clase de formulario denominado specialForm, que hereda de la clase Form. Puede
declarar una variable de objeto que haga referencia específicamente a specialForm, como se muestra en el ejemplo siguiente:

Public Class specialForm


Inherits System.Windows.Forms.Form
' Insert code defining methods and properties of specialForm.
End Class
Dim nextForm As New specialForm

La declaración del ejemplo anterior limita la variable nextForm a objetos de la clase specialForm, pero también pone todos los
métodos y propiedades de specialForm a disposición de nextForm, así como todos los miembros de todas las clases de las que
hereda specialForm.
Puede hacer que una variable de objeto sea más general si la declara de tipo Form, como se muestra en el ejemplo siguiente.

Dim anyForm As System.Windows.Forms.Form

La declaración del ejemplo anterior le permite asignar cualquier formulario de su aplicación a anyForm. Sin embargo, aunque
anyForm pueda tener acceso a todos los miembros de la clase Form, no puede utilizar ninguno de los métodos o propiedades
adicionales definidos para formularios específicos como specialForm.
Todos los miembros de una clase base están disponibles para las clases derivadas, pero los miembros adicionales de una clase
derivada no están disponibles para la clase base.
Vea también
Tareas
Cómo: Declarar una variable de objeto y asignarle un objeto en Visual Basic
Cómo: Obtener acceso a los miembros de un objeto
Referencia
New (Visual Basic)
Option Strict (Instrucción)
Conceptos
Variables de objeto en Visual Basic
Asignación de variables de objeto
Valores de las variables de objeto
Programación sin tipos en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Obtener acceso a los miembros de un objeto


Cuando tiene una variable de objeto que hace referencia a un objeto, a menudo quiere trabajar con los miembros de ese
objeto, como métodos, propiedades, campos y eventos. Por ejemplo, una vez haya creado un nuevo objeto Form, podría
querer establecer la propiedad Text o llamar al método Focus.
Tener acceso a miembros
Tiene acceso a los miembros de un objeto a través de la variable que hace referencia a él.
Para tener acceso a los miembros de un objeto
Utilice el operador de acceso a miembros (.) entre el nombre de la variable de objeto y el nombre del miembro.

currentText = newForm.Text

Si el miembro es Shared (Visual Basic), no necesita una variable para tener acceso a él. Para obtener más información,
consulte Cómo: Obtener acceso a miembros compartidos y no compartidos de un objeto.

Tener acceso a miembros de un objeto de tipo conocido


Si conoce el tipo de un objeto en tiempo de compilación, puede utilizar el enlace en tiempo de compilación para una variable
que hace referencia a él.
Para tener acceso a los miembros de un objeto para el que conoce el tipo en tiempo de compilación
1. Declare la variable de objeto para que sea del tipo del objeto que piensa asignar a la variable.

Dim extraForm As System.Windows.Forms.Form

Con Option Strict On, puede asignar sólo objetos Form (u objetos de un tipo derivado de Form) a extraForm. Si ha
definido una clase o estructura con una conversión de ampliación CType en Form, también puede asignar esa clase o
estructura a extraForm.
2. Utilice el operador de acceso a miembros (.) entre el nombre de la variable de objeto y el nombre del miembro.

extraForm.Show()

Puede tener acceso a todos los métodos y propiedades específicos de la clase Form, independientemente de cuál sea la
configuración de Option Strict.
Tener acceso a miembros de un objeto de tipo desconocido
Si no conoce el tipo de un objeto en tiempo de compilación, debe utilizar el enlace en tiempo de ejecución para una variable
que hace referencia a él.
Para tener acceso a los miembros de un objeto para el que no conoce el tipo en tiempo de compilación
1. Declare la variable de objeto para que sea Object (Tipo de datos). (Declarar una variable como Object es lo mismo que
declararla como System.Object.)

Dim someControl As Object

Con Option Strict On, puede tener acceso sólo a miembros que están definidos en la clase Object.
2. Utilice el operador de acceso a miembros (.) entre el nombre de la variable de objeto y el nombre del miembro.

someControl.GetType()
Para poder tener acceso a miembros de cualquier objeto que asigne a la variable de objeto, debe establecer Option
Strict Off. Cuando hace esto, el compilador no puede garantizar que el objeto que asigna a la variable exponga un
miembro determinado. Si el objeto no expone un miembro al que intenta tener acceso, se produce una excepción
MemberAccessException.
Vea también
Referencia
Object (Tipo de datos)
Option Strict (Instrucción)
Object
Form
MemberAccessException
Conceptos
Variables de objeto en Visual Basic
Declaración de variables de objeto
Conceptos del lenguaje Visual Basic

Asignación de variables de objeto


Utilice una instrucción de asignación normal para asignar un objeto a una variable de objeto. Puede asignar una expresión de
objeto o la palabra clave Nothing, tal como se muestra en el ejemplo siguiente.

Dim thisObject As Object


' The following statement assigns an object reference.
thisObject = Form1
' The following statement discontinues association with any object.
thisObject = Nothing

Nothing significa que no hay ningún objeto asignado actualmente a la variable.


Inicialización
Cuando el código empieza a ejecutarse, las variables de objeto se inicializan con Nothing. Aquéllos cuyas declaraciones
incluyen la inicialización se reinicializan con los valores que especifica cuando se ejecutan las instrucciones de declaración.
Puede incluir la inicialización en su declaración utilizando la palabra clave New. En las siguientes instrucciones de declaración
se declaran variables de objeto testUri y ver, y se les asignan objetos específicos. Cada una utiliza uno de los constructores
sobrecargados de la clase adecuada para inicializar el objeto.

Dim testUri As New System.Uri("http://www.microsoft.com")


Dim ver As New System.Version(6, 1, 0)

Desasociación
Si se establece una variable de objeto en Nothing se interrumpe la asociación de la variable con cualquier objeto específico, lo
que impide que el objeto se modifique de forma accidental al cambiar la variable. También permite comprobar si la variable de
objeto señala a un objeto válido, tal como se muestra en el ejemplo siguiente:

If otherObject IsNot Nothing Then


' otherObject refers to a valid object, so your code can use it.
End If

Si el objeto al que hace referencia la variable está en otra aplicación, esta comprobación no permite averiguar si la aplicación
se ha terminado o ha invalidado el objeto.
Una variable de objeto con un valor de Nothing también se llama referencia nula.
Instancia actual
La instancia actual de un objeto es aquella en la que se está ejecutando el código. Dado que todo el código se ejecuta siempre
dentro de un procedimiento, la instancia actual es aquella en la cual se invocó al procedimiento.
La palabra clave Me cumple la función de una variable de objeto que hace referencia a la instancia actual. Si un procedimiento
no es Shared (Visual Basic), puede utilizar la palabra clave Me para obtener un puntero a la instancia actual. Los
procedimientos compartidos no pueden asociarse a una instancia específica de una clase.
El uso de la palabra clave Me es especialmente útil para pasar la instancia actual a un procedimiento de otro módulo. Por
ejemplo, suponga que tiene varios documentos XML y desea agregar un texto estándar a todos ellos. El ejemplo siguiente
define un procedimiento para ello.

Sub addStandardText(XmlDoc As System.Xml.XmlDocument)


XmlDoc.CreateTextNode("This text goes into every XML document.")
End Sub

Después, todos los objetos de documento XML pueden llamar al procedimiento y pasar como argumento su instancia actual.
En el siguiente ejemplo se muestra cómo.

addStandardText(Me)
Vea también
Tareas
Cómo: Declarar una variable de objeto y asignarle un objeto en Visual Basic
Cómo: Crear una variable de objeto que no haga referencia a ninguna instancia
Conceptos
Variables de objeto en Visual Basic
Declaración de variables de objeto
Valores de las variables de objeto
Conceptos del lenguaje Visual Basic

Cómo: Declarar una variable de objeto y asignarle un objeto en


Visual Basic
Declara una variable de Object (Tipo de datos) especificando As Object en Instrucción Dim (Visual Basic). Asigna un objeto a
este tipo de variable colocando el objeto después del signo igual (=) en una instrucción de asignación o una cláusula de
inicialización.
Ejemplo
En el siguiente ejemplo se declara una variable Object y se le asigna la instancia actual.

Dim thisObject As Object


thisObject = Me

Puede combinar la declaración y la asignación inicializando la variable como parte de su declaración. El ejemplo siguiente es
equivalente al ejemplo anterior.

Dim thisObject As Object = Me

Compilar el código
Este ejemplo necesita:
Una referencia al espacio de nombres System.
Una clase, estructura o módulo en las que colocar la instrucción Dim.
Un procedimiento en el que colocar la instrucción de asignación.
Vea también
Referencia
Object (Tipo de datos)
Me
Instrucción Dim (Visual Basic)
Conceptos
Declaración de variable en Visual Basic
Variables de objeto en Visual Basic
Declaración de variables de objeto
Conceptos del lenguaje Visual Basic

Cómo: Crear una variable de objeto que no haga referencia a


ninguna instancia
Puede desasociar una variable de objeto de cualquier instancia de objeto estableciéndola en Nothing (Visual Basic).
Para desasociar una variable de objeto de cualquier instancia de objeto
Establezca la variable en Nothing en una instrucción de asignación.

' Assume account is a defined class


Dim currentAccount As account
currentAccount = Nothing

Programación eficaz
Si su código intenta tener acceso a un miembro de una variable de objeto establecida en Nothing, se produce una excepción
NullReferenceException. Si establece a menudo una variable de objeto en Nothing o si es posible que la variable no esté
inicializada, resulta conveniente agregar los accesos a los miembros en un bloque Try...Catch...Finally.
Seguridad
Si utiliza una variable para objetos que contienen datos confidenciales o sensibles, puede establecer la variable en Nothing
cuando no esté tratando activamente uno de esos objetos. Esto reduce la posibilidad de que código malintencionado tenga
acceso a los datos.
Vea también
Referencia
Nothing (Visual Basic)
Instrucción Try...Catch...Finally (Visual Basic)
Solución de problemas de excepciones: System.NullReferenceException
NullReferenceException
Conceptos
Variables de objeto en Visual Basic
Asignación de variables de objeto
Conceptos del lenguaje Visual Basic

Valores de las variables de objeto


Una variable de Object (Tipo de datos) puede hacer referencia a datos de cualquier tipo. El valor que se le da a una variable
Object se guarda en algún lugar de la memoria fuera de la variable; lo que contiene la variable es un puntero a los datos.
Funciones del clasificador de objetos
Visual Basic proporciona funciones que devuelven información de la referencia a que remite una variable Object, tal como se
muestra en la siguiente tabla.
Función Devuelve True si la variable Object hace referencia a
IsArray (Función, Visual Basic) Una matriz de valores, en lugar de un valor único.

IsDate (Función, Visual Basic) Un valor Date (Tipo de datos, Visual Basic) o una cadena que puede interpretarse como un va
lor de fecha y hora.

IsDBNull (Función) Un objeto de tipo DBNull que representa datos que faltan o que no existen.

IsError (Función) Un objeto de excepción que se deriva de Exception.

IsNothing (Función) Nothing (Visual Basic), es decir que no hay ningún objeto asignado actualmente a la variable.

IsNumeric (Función, Visual Basic) Un número o una cadena que puede interpretarse como un número.

IsReference (Función) Un tipo de referencia (como una cadena, matriz, delegado o tipo de clase).

Puede utilizar estas funciones para impedir que se envíe un valor no válido a una operación o a un procedimiento.
Operador TypeOf
También puede utilizar el operador TypeOf (Operador, Visual Basic) para averiguar si una variable de objeto hace referencia en
ese momento a un tipo de datos específico. La expresión TypeOf...Is se evalúa como True si el tipo en tiempo de ejecución del
operando se deriva del tipo especificado o lo implementa.
En el siguiente ejemplo se utiliza TypeOf en variables de objeto que hacen referencia a tipos de valor y de referencia:

' The following statement puts a value type (Integer) in an Object variable.
Dim num As Object = 10
' The following statement puts a reference type (Form) in an Object variable.
Dim frm As Object = New Form()
If TypeOf num Is Long Then Debug.WriteLine("num is Long")
If TypeOf num Is Integer Then Debug.WriteLine("num is Integer")
If TypeOf num Is Short Then Debug.WriteLine("num is Short")
If TypeOf num Is Object Then Debug.WriteLine("num is Object")
If TypeOf frm Is Form Then Debug.WriteLine("frm is Form")
If TypeOf frm Is Label Then Debug.WriteLine("frm is Label")
If TypeOf frm Is Object Then Debug.WriteLine("frm is Object")

Como resultado del ejemplo anterior, se escriben las siguientes líneas en la ventana Depuración:
num is Integer
num is Object
frm is Form
frm is Object

La variable de objeto num hace referencia a datos de tipo Integer y frm hace referencia a un objeto de clase Form.
Matrices de objetos
Puede declarar y utilizar matrices de variables Object, lo cual puede resultarle útil si necesita controlar varios tipos de datos y
clases de objetos. Todos los elementos de una matriz deben tener declarado el mismo tipo de datos. Si este tipo de datos se
declara como Object, se pueden almacenar en la matriz instancias de clase y objetos junto con otros tipos de datos.
Vea también
Tareas
Cómo: Hacer referencia a la instancia actual de un objeto
Cómo: Determinar el tipo al que hace referencia una variable de objeto
Cómo: Determinar si dos objetos están relacionados
Cómo: Determinar si dos objetos son idénticos
Referencia
Is (Visual Basic)
Conceptos
Variables de objeto en Visual Basic
Declaración de variables de objeto
Asignación de variables de objeto
Tipos de datos en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Hacer referencia a la instancia actual de un objeto


La instancia actual de un objeto es la instancia en la que se está ejecutando el código.
Utiliza la palabra clave Me para hacer referencia a la instancia actual.
Para hacer referencia a la instancia actual
Utilice la palabra clave Me donde utilizaría normalmente el nombre de una variable de objeto.

Me.ForeColor = System.Drawing.Color.Crimson
Me.Close()

Aunque Me se comporta como una variable de objeto, no puede declararlo ni asignarle nada. Me siempre hace
referencia a la instancia actual.
Vea también
Referencia
Me
Conceptos
Variables de objeto en Visual Basic
Asignación de variables de objeto
Conceptos del lenguaje Visual Basic

Cómo: Determinar el tipo al que hace referencia una variable de


objeto
Una variable de objeto contiene un puntero a datos que se almacenan en otra parte. El tipo de estos datos puede cambiar
durante el tiempo de ejecución. En cualquier momento, puede utilizar el método GetTypeCode para determinar el tipo en
tiempo de ejecución actual o TypeOf (Operador, Visual Basic) para averiguar si el tipo en tiempo de ejecución actual es
compatible con un tipo especificado.
Para determinar el tipo exacto al que una variable de objeto hace referencia actualmente
1. En la variable de objeto, llame al método GetType para recuperar un objeto System.Type.

Dim myObject As Object


myObject.GetType()

2. En la clase System.Type, llame al método GetTypeCode compartido para recuperar el valor de enumeración TypeCode
para el tipo del objeto.

Dim myObject As Object


Dim datTyp As Integer = Type.GetTypeCode(myObject.GetType())
MsgBox("myObject currently has type code " & CStr(datTyp))

Puede probar el valor de enumeración TypeCode con los miembros de enumeración que sean de su interés, como
Double.
Para determinar si el tipo de una variable de objeto es compatible con un tipo especificado
Utilice al operador TypeOf en combinación con Is (Operador, Visual Basic) para probar el objeto con una expresión
TypeOf...Is.

If TypeOf objA Is System.Windows.Forms.Control Then


MsgBox("objA is compatible with the Control class")
End If

La expresión TypeOf...Is devuelve True si el tipo del objeto en tiempo de ejecución es compatible con el tipo
especificado.
El criterio para la compatibilidad depende de si el tipo especificado es una clase, estructura o interfaz. En general, los
tipos son compatibles si el objeto es del mismo tipo que hereda o implementa el tipo especificado. Para obtener más
información, consulte TypeOf (Operador, Visual Basic).
Compilar el código
Observe que el tipo especificado no puede ser una variable o expresión. Debe ser el nombre de un tipo definido, como una
clase, estructura o interfaz. Esto incluye los tipos intrínsecos como Integer y String.
Vea también
Referencia
Object (Tipo de datos)
GetType
System.Type
GetTypeCode
TypeCode
Conceptos
Variables de objeto en Visual Basic
Valores de las variables de objeto
Conceptos del lenguaje Visual Basic

Cómo: Determinar si dos objetos están relacionados


Puede comprar dos objetos para determinar la relación que hay, si existe, entre las clases a partir de las cuales se crearon. El
método IsInstanceOfType de la clase System.Type devuelve True si la clase especificada se hereda de la clase actual o si el tipo
actual es una interfaz compatible con la clase especificada.
Para determinar si un objeto hereda de la clase o interfaz de otro objeto
1. En el objeto que piensa que podría ser del tipo base, invoque el método GetType.
2. En el objeto System.Type devuelto por GetType, invoque el método IsInstanceOfType.
3. En la lista de argumentos para IsInstanceOfType, especifique el objeto que piensa que podría ser del tipo derivado.
IsInstanceOfType devuelve True si su tipo de argumento hereda del tipo de objeto System.Type.

Ejemplo
El ejemplo siguiente determina si un objeto representa una clase derivada de la clase de otro objeto.

Public Class baseClass


End Class
Public Class derivedClass : Inherits baseClass
End Class
Public Class testTheseClasses
Public Sub seeIfRelated()
Dim baseObj As Object = New baseClass()
Dim derivedObj As Object = New derivedClass()
Dim related As Boolean
related = baseObj.GetType().IsInstanceOfType(derivedObj)
MsgBox(CStr(related))
End Sub
End Class

Observe la posición inesperada de las dos variables de objeto en la llamada a IsInstanceOfType. El tipo base supuesto se
utiliza para generar la clase System.Type y el tipo derivado supuesto se pasa como argumento al método IsInstanceOfType.
Vea también
Tareas
Cómo: Determinar si dos objetos son idénticos
Referencia
Object (Tipo de datos)
GetType
System.Type
IsInstanceOfType
Conceptos
Variables de objeto en Visual Basic
Valores de las variables de objeto
Conceptos del lenguaje Visual Basic

Cómo: Determinar si dos objetos son idénticos


Visual Basic considera que dos objetos son idénticos si sus punteros son los mismos, es decir, si ambas variables señalan a la
misma instancia de clase en la memoria. Es posible que desee realizar esta comparación, por ejemplo, para determinar si la
instancia actual (Me) es igual que una instancia determinada como Form2.
Visual Basic proporciona dos operadores para comparar los punteros. Is (Operador, Visual Basic) devuelve True si los objetos
son idénticos e IsNot (Operador) devuelve True si no lo son.
Determinar si dos objetos son idénticos
Para determinar si dos objetos son idénticos
1. Prepare una expresión Boolean para probar los dos objetos.
2. En la expresión de prueba, utilice el operador Is con los dos objetos como operandos.
Is devuelve True si los objetos señalan a la misma instancia de clase.

Determinar si dos objetos no son idénticos


A veces, desea realizar una acción cuando los dos objetos no son idénticos y puede ser complicado combinar Not e Is, por
ejemplo If Not obj1 Is obj2. En estos casos puede utilizar el operador IsNot.
Para determinar si dos objetos no son idénticos
1. Prepare una expresión Boolean para probar los dos objetos.
2. En la expresión de prueba, utilice el operador IsNot con los dos objetos como operandos.
IsNot devuelve True si los objetos no señalan a la misma instancia de clase.
Ejemplo
El ejemplo siguiente prueba pares de variables Object para ver si señalan a la misma instancia de clase.

Dim objA, objB, objC as Object


objA = Me
objB = New System.Windows.Forms.Form()
objC = Me
MsgBox("objA different from objB? " & CStr(objA IsNot objB))
MsgBox("objA identical to objC? " & CStr(objA Is objC))

El ejemplo anterior muestra el siguiente resultado.


objA different from objB? True
objA identical to objC? True

Vea también
Tareas
Cómo: Determinar si dos objetos están relacionados
Referencia
Object (Tipo de datos)
Is (Operador, Visual Basic)
IsNot (Operador)
Conceptos
Variables de objeto en Visual Basic
Valores de las variables de objeto
Conceptos del lenguaje Visual Basic

Solucionar problemas de variables en Visual Basic


Esta página muestra algunos problemas comunes que pueden aparecer al trabajar con variables en Visual Basic.
No se puede obtener acceso a los miembros de un objeto
Si el código intenta tener acceso a una propiedad o un método en un objeto, hay dos posibles resultados de error:
El compilador puede generar un mensaje de error si declara la variable de objeto con un tipo específico y, a continuación,
hace referencia a un miembro no definido por dicho tipo.
Se produce una excepción MemberAccessException en tiempo de ejecución cuando el objeto asignado a una variable de
objeto no expone el miembro al que el código intenta obtener acceso. En el caso de una variable de
Object (Tipo de datos), también puede obtener esta excepción si el miembro no es de tipo Public. Esto se debe a que el
enlace en tiempo de ejecución sólo permite el acceso a miembros de tipo Public.
Si Option Strict (Instrucción) establece la comprobación de tipos como On, una variable de objeto sólo puede tener acceso a
los métodos y propiedades de la clase con la que se ha declarado. Esto se ilustra en el siguiente ejemplo:
VB
Option Strict On

VB
Dim p As Object = New System.Windows.Forms.Label
Dim q As System.Windows.Forms.Label = New System.Windows.Forms.Label
Dim j, k As Integer
' The following statement generates a compiler error.
j = p.Left
' The following statement retrieves the left edge of the label
' in pixels.
k = q.Left

En este ejemplo, p puede utilizar sólo los miembros de la propia clase Object, que no incluyen la propiedad Left. Por otro lado,
q se ha declarado con el tipo Label, así que puede utilizar todos los métodos y propiedades de la clase Label en el espacio de
nombres System.Windows.Forms.
Enfoque correcto
Para obtener acceso a todos los miembros de un objeto de una clase determinada, declare la variable de objeto con el tipo de
dicha clase siempre que sea posible. Si no puede realizarlo de esta manera, por ejemplo si no conoce el tipo del objeto en
tiempo de compilación, debe establecer Option Strict como Off y declarar la variable como Object (Tipo de datos). Esto
permite que se asignen a la variable los objetos de cualquier tipo; debe llevar a cabo los pasos necesarios para asegurarse de
que el objeto asignado es de un tipo válido. Para esto, puede utilizar TypeOf (Operador, Visual Basic).
Otros componentes no pueden tener acceso a la variable
En los nombres de Visual Basic no se distingue entre mayúsculas y minúsculas. Si dos nombres sólo se distinguen por el uso de
mayúsculas y minúsculas, el compilador los interpreta como el mismo nombre. Por ejemplo, ABC y abc hacen referencia al
mismo elemento declarado.
No obstante, Common Language Runtime (CLR) utiliza enlaces que sí distinguen entre mayúsculas y minúsculas. Por lo tanto,
cuando genere un ensamblado o una DLL que pueda estar disponible para otros ensamblados, sus nombres sí se distinguirán
por sus mayúsculas o minúsculas. Por ejemplo, si define una clase que tiene un elemento denominado ABC, y otros
ensamblados utilizan la clase por medio de Common Language Runtime, deberán hacer referencia al elemento como ABC. Si,
posteriormente, vuelve a compilar la clase y cambia el nombre del elemento a abc, los otros ensamblados que utilicen la clase
ya no tendrán acceso a este elemento. Por lo tanto, cuando se lance una versión actualizada de un ensamblado, no se deben
cambiar las mayúsculas o minúsculas de los elementos públicos.
Para obtener más información, vea Common Language Runtime.
Enfoque correcto
Para permitir a otros componentes tener acceso a las variables, trate sus nombres como si distinguieran entre mayúsculas y
minúsculas. Cuando pruebe la clase o el módulo, asegúrese de que los demás ensamblados se enlazan con las variables
esperadas. Después de publicar un componente, no realice ninguna modificación en los nombres de variable existentes,
incluido el cambio entre mayúsculas y minúsculas.
Uso de la variable equivocada
Cuando tiene más de una variable con el mismo nombre, el compilador de Visual Basic intenta resolver cada referencia como
dicho nombre. Si las variables tienen ámbito diferente, el compilador resuelve una referencia como la declaración con el
ámbito más limitado. Si tienen el mismo ámbito, se produce un error en la resolución y el compilador señala un error. Para
obtener más información, vea Resolver una referencia cuando muchas variables tienen el mismo nombre.
Enfoque correcto
Evite utilizar variables con el mismo nombre pero ámbito diferente. Si utiliza otros ensamblados o proyectos, evite en la
medida de lo posible utilizar nombres definidos en dichos componentes externos. Si tiene más de una variable con el mismo
nombre, asegúrese de calificar todas las referencias a ella. Para obtener más información, vea
Cómo: Distinguir entre dos elementos con el mismo nombre.
Vea también
Tareas
Cómo: Obtener acceso a los miembros de un objeto
Cómo: Determinar el tipo al que hace referencia una variable de objeto
Conceptos
Variables en Visual Basic
Declaración de variable en Visual Basic
Variables de objeto en Visual Basic
Declaración de variables de objeto
Valores de las variables de objeto
Resolver una referencia cuando muchas variables tienen el mismo nombre
Nombres de elementos declarados
Conceptos del lenguaje Visual Basic

Matrices en Visual Basic


Al utilizar matrices, puede emplear el mismo nombre para hacer referencia a distintos valores gracias a la utilización de un
número denominado índice o subíndice que permite distinguirlos. Las matrices pueden reducir y simplificar el código,
permitiendo crear bucles que gestionan de forma eficiente cualquier número de elementos.
En esta sección
Información general sobre matrices en Visual Basic
Define las condiciones pertinentes y muestra las matrices de ejemplo.
Dimensiones de matrices en Visual Basic
Explica el rango y las dimensiones de las matrices.
Matrices multidimensionales en Visual Basic
Analiza las matrices que tienen más de una dimensión.
Matrices escalonadas en Visual Basic
Describe las matrices de matrices, también conocidas como matrices escalonadas.
Tipos de datos de matrices en Visual Basic
Describe los factores que determinan el tipo de datos de una matriz.
Tamaño de matriz en Visual Basic
Explica consideraciones relacionadas con el tamaño de una matriz y cada una de sus dimensiones.
Trabajar con matrices y elementos de matrices
Describe la ordenación de matrices, cómo se obtiene o coloca un valor de matriz, etc.
Colecciones como alternativa a las matrices
Compara el almacenamiento de elementos en una colección con el almacenamiento en una matriz.
Solucionar problemas de matrices
Describe algunos problemas comunes que surgen al trabajar con matrices.
Secciones relacionadas
Cambios en el lenguaje para usuarios de Visual Basic 6.0
Proporciona información general sobre las funciones nuevas de Visual Basic 2005.
Programación orientada a objetos en Visual Basic
Trata los fundamentos de la programación orientada a objetos.
Conceptos del lenguaje Visual Basic

Información general sobre matrices en Visual Basic


Una matriz es un conjunto de valores relacionados lógicamente entre sí, como el número de estudiantes de cada curso en una
escuela primaria.
Una matriz permite hacer referencia a estos valores relacionados mediante un mismo nombre y utilizar un número,
denominado índice o subíndice, para distinguirlos. Los valores individuales se llaman elementos de la matriz. Son contiguos
desde el índice 0 hasta el valor del índice superior.
Ejemplo
En el ejemplo siguiente se declara una variable de matriz para que contenga el número de estudiantes de cada curso en una
escuela primaria.

Dim students(6) As Integer

La matriz students del ejemplo anterior contiene 7 elementos. Los índices de los elementos van de 0 a 6. Tener esta matriz es
más fácil que declarar 7 variables diferentes.
En la siguiente ilustración se muestra la matriz students. Para cada elemento de la matriz:
El índice del elemento representa el curso (el índice 0 representa el jardín de infancia).
El valor contenido en el elemento representa el número de estudiantes en ese curso.
Elementos de la matriz "students"

En el ejemplo siguiente se muestra cómo hacer referencia al primer, segundo y último elemento de la matriz students.

Dim kindergarten As Integer = students(0)


Dim firstGrade As Integer = students(1)
Dim sixthGrade As Integer = students(6)
MsgBox("Students in kindergarten = " & CStr(kindergarten))
MsgBox("Students in first grade = " & CStr(firstGrade))
MsgBox("Students in sixth grade = " & CStr(sixthGrade))

Puede hacer referencia a la matriz en conjunto utilizando simplemente el nombre de la variable de la matriz sin índices.
Tipos de matriz y otros tipos
Tipos de datos
Cada matriz tiene un tipo de datos pero no es igual que el tipo de datos de sus elementos. Por ejemplo, la matriz students del
ejemplo anterior es de tipo Integer(), mientras que cada uno de sus elementos es de tipo Integer. La notación Integer()
significa una matriz de elementos Integer. Para obtener más información, consulte Tipos de datos de matrices en Visual Basic.
Cada matriz hereda de la clase System.Array y puede declarar una variable que sea de tipo Array pero no puede crear una
matriz de tipo Array. Asimismo, Instrucción ReDim (Visual Basic) no puede funcionar en una variable declarada de tipo Array.
Por estas razones y para mayor seguridad del tipo, es aconsejable declarar cada matriz como un tipo específico, como por
ejemplo Integer en el ejemplo anterior.
Dimensiones de matriz
La matriz students del ejemplo anterior utiliza un índice y se dice que es unidimensional. Una matriz que utiliza más de un
índice o subíndice se denomina multidimensional.
Otro tipo de matriz es el que contiene otras matrices como elementos. Esto se conoce como una matriz de matrices o una
matriz escalonada. Una matriz escalonada puede ser unidimensional o multidimensional, y lo mismo sucede con sus
elementos.
Contrastar tipos
A diferencia de una matriz, una variable que contiene un único valor se llama variable escalar.
Una matriz no es lo mismo que una colección. Para obtener más información, consulte
Colecciones como alternativa a las matrices.
Vea también
Tareas
Cómo: Declarar una variable de matriz
Cómo: Crear una matriz
Cómo: Inicializar una variable de matriz
Solucionar problemas de matrices
Conceptos
Dimensiones de matrices en Visual Basic
Matrices multidimensionales en Visual Basic
Matrices escalonadas en Visual Basic
Tipos de datos de matrices en Visual Basic
Otros recursos
Matrices en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Declarar una variable de matriz


Una variable de matriz se declara de la misma manera que cualquier otra variable mediante la instrucción Dim. Se agregan
uno o más pares de paréntesis a continuación del nombre de la variable para indicar que es para contener una matriz en vez
de una variable escalar (una variable que contiene un solo valor).
Declarar variables de matriz
Para declarar una variable de matriz unidimensional
En su declaración, agregue un par de paréntesis después del nombre de variable. En el ejemplo siguiente se declara una
variable para que contenga una matriz unidimensional con elementos de Double (Tipo de datos, Visual Basic).

Dim cargoWeights() As Double

En el ejemplo anterior se declara una variable de matriz pero no se le asigna una matriz. Todavía debe crear una matriz
unidimensional, inicializarla y asignarla a cargoWeights.

Para declarar una variable de matriz multidimensional


En la declaración, agregue un par de paréntesis detrás del nombre de la variable y coloque comas dentro de los
paréntesis para separar las dimensiones. En el ejemplo siguiente se declara una variable para que contenga una matriz
de cuatro dimensiones con elementos de Short (Tipo de datos, Visual Basic).

Dim atmospherePressures(,,,) As Short

En el ejemplo anterior se declara una variable de matriz pero no se le asigna una matriz. Todavía debe crear una matriz
de cuatro dimensiones, inicializarla y asignarla a atmospherePressures.

Para declarar una variable de matriz escalonada


En la declaración, agregue tantos pares de paréntesis después del nombre de variable como niveles haya de matrices
anidadas. En el ejemplo siguiente se declara una variable para que contenga una matriz de matrices de matrices (una
matriz, cada elemento de la cual es una matriz, cada elemento de la cual es una matriz), en la que la matriz más profunda
tiene elementos de Byte (Tipo de datos, Visual Basic).

Dim inquiriesByYearMonthDay()()() As Byte

En el ejemplo anterior se declara una variable de matriz pero no se le asigna una matriz. Todavía debe crear una matriz
de matrices de matrices, inicializarla y asignarla a inquiriesByYearMonthDay.

Vea también
Tareas
Cómo: Crear una matriz
Cómo: Crear una matriz con varias dimensiones
Cómo: Crear una matriz de matrices
Cómo: Inicializar una variable de matriz
Solucionar problemas de matrices
Conceptos
Información general sobre matrices en Visual Basic
Matrices multidimensionales en Visual Basic
Matrices escalonadas en Visual Basic
Otros recursos
Matrices en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Crear una matriz


Una matriz es un objeto, por lo que la crea con una cláusula New (Visual Basic) y la asigna a la variable de matriz. Puede hacer
esto como parte de la declaración de la matriz o en una instrucción de asignación subsiguiente.
Para crear una matriz en la instrucción de declaración de matriz
En su declaración, agregue una cláusula New después del nombre de variable y sus paréntesis. En el ejemplo siguiente
se declara una variable para que contenga una matriz con elementos de Date (Tipo de datos, Visual Basic), se crea la
matriz y se asigna a la variable.

Dim validDates() As Date = New Date() {}

Tras la ejecución de esta instrucción, la matriz de la variable validDates tiene una longitud de 0.
Nota
La cláusula New debe especificar el nombre de tipo, seguido de paréntesis y luego llaves, {}. Los paréntesis no represe
ntan una llamada a un constructor de matriz. Indican que el tipo de objeto es un tipo de matriz. Las llaves proporcionan
los valores de inicialización. El compilador requiere las llaves aunque no proporcionen ningún valor. Por consiguiente, l
a cláusula New debe incluir paréntesis y llaves, aunque estén vacíos.

Para crear una matriz en una instrucción de asignación separada


Utilice una instrucción de asignación posterior con una cláusula New. En el ejemplo siguiente se declara una variable
para que contenga una matriz con elementos de Integer (Tipo de datos, Visual Basic), se crea la matriz y se asigna a la
variable de otra instrucción.

Dim scores() As Integer


scores = New Integer() {}

Tras la ejecución de estas instrucciones, la matriz de la variable scores tiene una longitud de 0.
o bien
Utilice Instrucción ReDim (Visual Basic) no sólo para crear una matriz sino para inicializar su longitud.

ReDim scores(4)

Tras la ejecución de esta instrucción, la matriz de la variable scores tiene una longitud de 5, con todos los elementos que
contienen valores predeterminados.
Vea también
Tareas
Cómo: Declarar una variable de matriz
Cómo: Crear una matriz con varias dimensiones
Cómo: Crear una matriz de matrices
Cómo: Crear una matriz con tipos de elementos mixtos
Cómo: Crear una matriz sin elementos
Cómo: Inicializar una variable de matriz
Solucionar problemas de matrices
Conceptos
Información general sobre matrices en Visual Basic
Otros recursos
Matrices en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Crear una matriz con tipos de elementos mixtos


Declara sólo un tipo de datos para una matriz y todos sus elementos deben ser de ese tipo de datos. Normalmente, es
preferible esta limitación, ya que todos los elementos se relacionan estrechamente entre sí y tienen tipos de valores similares.
Sin embargo, a veces los elementos no están estrechamente relacionados o no tienen valores similares. En este caso, puede
declarar los elementos de la matriz para que sean Object (Tipo de datos) y los elementos individuales pueden señalar a tipos
de datos diferentes, como números, caracteres, cadenas, objetos y otras matrices.
Para crear una matriz con elementos de tipos de datos diferentes
Declare la matriz como Object. El ejemplo siguiente declara una variable para que contenga una matriz de elementos de
Object, crea la matriz y la asigna a la variable.

Dim mixedTypes As Object() = New Object() {}

Cuando utiliza el tipo de datos Object, tenga presente que el rendimiento no es tan eficaz como cuando utiliza un tipo de
datos más concreto. Esto se debe a que el tiempo de ejecución tiene que convertir los datos entre su tipo de datos natural
y Object, utilizando operaciones llamadas conversión boxing y conversión unboxing. Este procesamiento adicional puede
afectar negativamente al rendimiento si lo hace a menudo.

Para tener acceso a los elementos de tipos de datos diferentes de una matriz
Lea o escriba los elementos de la manera normal. Puede almacenar y recuperar un elemento de cualquier tipo de datos
en una matriz Object.
El ejemplo siguiente muestra cómo colocar información de tipos de datos diferentes en una matriz Object. Almacena
información de empleado en la matriz de una variable employeeData.

Dim employeeData(3) As Object


employeeData(0) = "Alex Hankin"
employeeData(1) = "4242 Maple Street"
employeeData(2) = 48
employeeData(3) = #8/23/1956#

Para recuperar información de tipos de datos diferentes de una matriz Object, puede convertir un elemento en el tipo de
datos adecuado, como se muestra en el ejemplo siguiente.

Dim age As Integer = CInt(employeeData(2))


Dim birthDate as Date = CDate(employeeData(3))

En una situación en la que los elementos no son similares o no están relacionados entre sí, existe la posibilidad de colocarlos
en una colección en lugar de una matriz Object. Para obtener más información, consulte
Colecciones como alternativa a las matrices.
Vea también
Tareas
Cómo: Declarar una variable de matriz
Cómo: Crear una matriz
Cómo: Crear una matriz con varias dimensiones
Cómo: Crear una matriz de matrices
Cómo: Crear una matriz sin elementos
Cómo: Inicializar una variable de matriz
Solucionar problemas de matrices
Conceptos
Información general sobre matrices en Visual Basic
Colecciones como alternativa a las matrices
Otros recursos
Matrices en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Crear una matriz sin elementos


Una matriz sin elementos se llama también una matriz de longitud cero. Un variable que contenga una matriz de longitud cero
no tiene el valor Nothing.
Podría necesitar crear una matriz de longitud cero en las circunstancias siguientes:
Su código necesita tener acceso a los miembros de la clase Array, como Length o Rank, o llamar a una función de Visual
Basic como UBound (Función, Visual Basic), sin arriesgarse a provocar una excepción NullReferenceException.
Desea que el código utilizado sea más sencillo sin tener que comprobar Nothing como caso especial.
El código interactúa con una interfaz de programación de aplicaciones (API) que le exige que pase una matriz de longitud
cero a uno o más procedimientos o que devuelve una matriz de longitud cero desde uno o más procedimientos.

Para crear una matriz sin elementos


Declare una de las dimensiones de la matriz para que sea -1. En el ejemplo siguiente se declara una variable para que
contenga una matriz con elementos de String (Tipo de datos, Visual Basic), pero se establece inicialmente que esté vacía.

Dim twoDimensionalStrings(-1, 3) As String

Tras la ejecución de esta instrucción, la matriz de la variable twoDimensionalStrings es bidimensional con una longitud
de 0. Está vacía pero existe no obstante. En consecuencia, una variable que apunte a la matriz no será igual a Nothing. En
consecuencia, puede crear una matriz no vacía y asignarla a twoDimensionalStrings.
Por el contrario, en el ejemplo siguiente se declara una variable de matriz que no señala inicialmente a ninguna matriz.

Dim twoDimStrings( , ) As String

A diferencia de twoDimensionalStrings en el ejemplo anterior, la variable twoDimStrings tiene el valor Nothing.

Vea también
Tareas
Cómo: Declarar una variable de matriz
Cómo: Crear una matriz
Cómo: Crear una matriz con varias dimensiones
Cómo: Crear una matriz de matrices
Cómo: Crear una matriz con tipos de elementos mixtos
Cómo: Inicializar una variable de matriz
Solucionar problemas de matrices
Conceptos
Información general sobre matrices en Visual Basic
Otros recursos
Matrices en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Inicializar una variable de matriz


Puede inicializar una matriz al mismo tiempo que la crea, como parte de la cláusula New (Visual Basic). También puede
inicializarla en instrucciones de asignación subsiguientes.
Los aspectos de una matriz que puede inicializar son los siguientes:
Los límites superiores del índice que especifican las longitudes de las dimensiones de la matriz
Los valores de algunos o de todos los elementos de la matriz
Puede inicializar uno de éstos aspectos sin inicializar otros. Sin embargo, si proporciona valores de elementos pero no los
límites superiores, el número de valores que proporciona determina los límites superiores.
Para inicializar una matriz en la cláusula New en el momento de la creación
En la cláusula New, especifique el límite superior del índice dentro de paréntesis y proporcione los valores de elementos
dentro de llaves ({}). El ejemplo siguiente declara, crea e inicializa una variable para contener una matriz con elementos
de Char (Tipo de datos, Visual Basic), especificando el límite superior y los valores.

Dim testChars As Char() = New Char(2) {"%"c, "&"c, "@"c}

Tras la ejecución de esta instrucción, la matriz de la variable testChars tiene una longitud de 3, con elementos desde el
índice 0 hasta el 2 que contienen valores inicializados. Si proporciona el límite superior y los valores, debe incluir un
valor para cada elemento desde el índice 0 hasta el límite superior.
Tenga en cuenta el carácter c de tipo literal, que fuerza un literal de carácter para que sea del tipo de datos Char. Sin no
hay ningún carácter de tipo, un literal incluido entre comillas (" ") tiene un valor predeterminado String.
No necesita especificar el límite superior del índice si proporciona valores de elementos en la cláusula New. El ejemplo
siguiente declara, crea e inicializa una variable para contener una matriz con elementos de
Boolean (Tipo de datos, Visual Basic), especificando sólo los valores de elementos.

Dim answers As Boolean() = New Boolean() {True, True, False, True}

Tras la ejecución de esta instrucción, la matriz de la variable answers tiene una longitud de 4, con elementos desde el
índice 0 hasta el 3 que contienen valores inicializados.
Puede inicializar el límite superior del índice sin inicializar ningún elemento. Si crea una matriz de esta manera, debe utilizar
una instrucción de asignación subsiguiente para inicializar cada valor de elemento.
Para inicializar una matriz en instrucciones de asignación subsiguientes
1. Especifique el límite superior del índice en la declaración de la variable de matriz.
2. Utilice una o más instrucciones de asignación, cada una de las cuales asignan un valor a uno de los elementos de la
matriz. El ejemplo siguiente declara y crea una variable para contener una matriz con elementos de
String (Tipo de datos, Visual Basic) y proporciona dos valores de elementos en instrucciones subsiguientes.

Dim comments(30) As String


comments(0) = "This is the first comment."
comments(5) = "This is the sixth comment."

Tras la ejecución de estas instrucciones, la matriz de la variable comments tiene una longitud de 31, con elementos en los
índices 0 y 5 que contienen valores inicializados y los otros 29 elementos que contienen valores predeterminados. Si
inicializa una matriz de esta manera, puede inicializar algunos elementos y omitir otros.
o bien
Utilice Instrucción ReDim (Visual Basic) para inicializar la longitud de la matriz.
ReDim comments(5)

Tras la ejecución de esta instrucción, la matriz de la variable comments tiene una longitud de 6, con todos los elementos
que contienen valores predeterminados.
Nota
Puede inicializar el límite superior del índice solamente en un lugar. Si especifica un límite superior en los paréntesis qu
e siguen al nombre de la variable de la matriz, no puede utilizar una cláusula New. Si especifica el límite superior en lo
s paréntesis de la cláusula New, debe dejar vacíos los paréntesis que siguen al nombre de variable.

Vea también
Tareas
Cómo: Declarar una variable de matriz
Cómo: Crear una matriz
Cómo: Inicializar una matriz multidimensional
Cómo: Inicializar una matriz escalonada
Solucionar problemas de matrices
Conceptos
Información general sobre matrices en Visual Basic
Otros recursos
Matrices en Visual Basic
Conceptos del lenguaje Visual Basic

Dimensiones de matrices en Visual Basic


Una dimensión es una dirección en la que puede variar la especificación de los elementos de una matriz. Una matriz que
contiene el total de ventas de todos los días del mes tiene una dimensión (el día del mes). Una matriz que contiene el total de
ventas por departamento de todos los días del mes tiene dos dimensiones (el número del departamento y el día del mes). El
número de dimensiones que tiene una matriz se denomina rango.
Trabajar con dimensiones
Para especificar un elemento de una matriz, proporcione un índice o un subíndice para cada una de sus dimensiones. Los
elementos son contiguos a lo largo de cada dimensión del índice 0 al índice más alto para esa dimensión.
Las ilustraciones siguientes muestran la estructura conceptual de matrices con rangos diferentes. Cada elemento de las
ilustraciones muestra los valores de índice que tienen acceso a él. Por ejemplo, puede tener acceso al primer elemento de la
segunda fila de la matriz bidimensional especificando los índices (1, 0).
Matriz unidimensional

Matriz bidimensional

Matriz tridimensional

Una dimensión
Muchas matrices tienen sólo una dimensión, como el número de personas de cada edad. El único requisito para especificar un
elemento es la edad para la que ese elemento contiene el recuento. Por lo tanto, este tipo de matriz utiliza sólo un índice. El
ejemplo siguiente declara una variable para que contenga una matriz unidimensional de recuentos de edad para edades de 0 a
120.

Dim ageCounts(120) As UInteger

Dos dimensiones
Algunas matrices tienen dos dimensiones, como el número de oficinas de cada planta de todos los edificios de un campus. La
especificación de un elemento requiere el número del edificio y de la planta, y cada elemento contiene el recuento para esa
combinación de edificio y planta. Por consiguiente, este tipo de matriz utiliza dos índices. El ejemplo siguiente declara una
variable para que contenga una matriz bidimensional de recuentos de oficinas para 0 a 40 edificios y 0 a 5 plantas.

Dim officeCounts(40, 5) As Byte

Una matriz bidimensional también se denomina matriz rectangular.


Tres dimensiones
Algunas matrices tienen tres dimensiones, como los valores de un espacio tridimensional. Este tipo de matriz utiliza tres
índices que, en este caso, representan las coordenadas x, y y z del espacio físico. El ejemplo siguiente declara una variable para
que contenga una matriz tridimensional de las temperaturas del aire en distintos puntos de un volumen tridimensional.

Dim airTemperatures(99, 99, 24) As Single

Más de tres dimensiones


Aunque una matriz puede tener hasta un máximo de 32 dimensiones, es raro que tenga más de tres.
Nota
Cuando se agregan dimensiones a una matriz, el espacio total necesario para guardar la matriz aumenta considerablemente;
por ello, debe utilizar las matrices multidimensionales con prudencia.

Uso de dimensiones diferentes


Suponga que desea realizar el seguimiento de las cantidades de ventas de todos los días del mes actual. Es posible que desee
declarar una matriz unidimensional con 31 elementos, uno por cada día del mes, tal como muestra el ejemplo siguiente.

Dim salesAmounts(30) As Double

Ahora, suponga que desea realizar el seguimiento de la misma información no sólo para todos los días del mes sino también
para todos los meses del año. Puede declarar una matriz bidimensional con 12 filas (para los meses) y 31 columnas (para los
días), tal como muestra el ejemplo siguiente.

Dim salesAmounts(11, 30) As Double

Ahora, suponga que decide mantener la información en la matriz durante más de un año. Si desea realizar el seguimiento de
las cantidades de ventas durante 5 años, puede declarar una matriz tridimensional con 5 capas, 12 filas y 31 columnas, tal
como muestra el ejemplo siguiente.

Dim salesAmounts(4, 11, 30) As Double

Tenga en cuenta que, debido a que un índice varía de 0 a su máximo, las dimensiones de salesAmounts se declaran como una
menos que la longitud necesaria para esa dimensión. Observe igualmente que el tamaño de la matriz aumenta con cada nueva
dimensión. Los tres tamaños de los ejemplos anteriores son respectivamente 31, 372 y 1.860 elementos.
Vea también
Tareas
Cómo: Declarar una variable de matriz
Cómo: Crear una matriz
Cómo: Inicializar una variable de matriz
Solucionar problemas de matrices
Conceptos
Información general sobre matrices en Visual Basic
Matrices multidimensionales en Visual Basic
Matrices escalonadas en Visual Basic
Tipos de datos de matrices en Visual Basic
Otros recursos
Matrices en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Especificar el límite inferior cero de una matriz


Si está declarando una matriz, puede especificar el límite inferior de cada dimensión utilizando el carácter cero (0) con la
palabra clave To. Esto no cambia el límite inferior necesario, pero puede facilitar la lectura de su código.
Para especificar el límite inferior cero de forma explícita en una matriz
1. Declare la matriz de la manera normal.
2. Dentro de los paréntesis, agregue 0 To delante del límite superior de cada dimensión.

Public Sub declarelowerbounds()


Dim monthtotal(0 To 11) As Double
Dim cell(0 To 39, 0 To 19) As Integer
MsgBox("Total number of elements:" _
& vbCrLf & "monthtotal (0 To 11) length " & CStr(monthtotal.Length) _
& vbCrLf & "cell (0 To 39, 0 To 19) length " & CStr(cell.Length))
End Sub

El límite inferior debe ser siempre 0, pero su código puede ser más legible si lo declara explícitamente. La especificación de
ambos límites recuerda igualmente al lector que el límite inferior es 0.
Creación de una matriz alternativa. Puede crear una matriz sin utilizar la cláusula Instrucción Dim (Visual Basic) o
New (Visual Basic). Por ejemplo, puede llamar al método CreateInstance u otro componente puede pasar su código a una
matriz creada de esta manera. Este tipo de matriz puede tener límites inferiores distintos de 0. Siempre puede probar el límite
inferior de una dimensión con el método GetLowerBound o LBound (Función, Visual Basic).
Vea también
Tareas
Solucionar problemas de matrices
Conceptos
Dimensiones de matrices en Visual Basic
Otros recursos
Matrices en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Determinar el número de dimensiones de una matriz


La propiedad Rank de una matriz devuelve su rango (el número de dimensiones).
Para determinar el rango de una matriz
Lea la propiedad Rank de la matriz. No agregue paréntesis detrás del nombre de la matriz.

Dim thisThreeDimArray(,,) As Byte = New Byte(4, 4, 4) {}


MsgBox("Rank of thisThreeDimArray is " & CStr(thisThreeDimArray.Rank))

La llamada a MsgBox muestra "Rank of thisThreeDimArray is 3".


El rango de una matriz forma parte de su tipo de datos. Por ello, no puede cambiar el rango, incluso con una instrucción
ReDim.
Vea también
Tareas
Cómo: Especificar el límite inferior cero de una matriz
Cómo: Declarar una variable de matriz
Cómo: Crear una matriz
Cómo: Inicializar una variable de matriz
Solucionar problemas de matrices
Conceptos
Dimensiones de matrices en Visual Basic
Otros recursos
Matrices en Visual Basic
Conceptos del lenguaje Visual Basic

Matrices multidimensionales en Visual Basic


Las matrices pueden tener una o varias dimensiones. Si tiene más de una, se llama matriz multidimensional. Observe que tener
varias dimensiones no es lo mismo que una matriz escalonada que tiene otras matrices como elementos suyos.
Dimensiones y tamaño
La dimensión o rango de una matriz corresponde al número de índices que se utilizan para identificar un elemento individual.
Se pueden especificar hasta 32 dimensiones, aunque no es habitual tener más de tres. El ejemplo siguiente declara una
variable de matriz bidimensional y una variable de matriz tridimensional.

Dim populations(200, 3) As Long


Dim matrix(5, 15, 10) As Single

El número total de elementos es el producto de las longitudes de todas las dimensiones. En el ejemplo anterior, populations
tiene un total de 804 elementos (201 x 4) y matrix tiene 1056 elementos (6 x 16 x 11). Cada índice va de 0 a la longitud
especificada para su dimensión.
Una matriz bidimensional también se denomina una matriz rectangular.
Nota
Cuando se agregan dimensiones a una matriz, el espacio total necesario para guardar la matriz aumenta considerablemente;
por ello, debe utilizar las matrices multidimensionales con prudencia.

Miembros de clase de matriz


Todas las matrices heredan de la clase Array del espacio de nombres System, por lo que es posible obtener acceso a los
métodos y a las propiedades de Array para cualquier matriz. Los miembros siguientes de Array pueden ser útiles:
La propiedad Rank devuelve la categoría de la matriz (número de dimensiones).
El método GetLength devuelve la longitud a lo largo de la dimensión especificada.
El método GetUpperBound devuelve el valor de índice más alto para la dimensión especificada. El valor de índice más
bajo para cada dimensión es siempre 0.
La propiedad Length devuelve el número total de elementos en la matriz.
El método System.Array.Sort ordena los elementos de una matriz unidimensional.
Tenga en cuenta que GetLength y GetUpperBound toman un argumento basado en 0 para la dimensión que está
especificando.
Vea también
Tareas
Cómo: Declarar una variable de matriz
Cómo: Crear una matriz con varias dimensiones
Cómo: Inicializar una matriz multidimensional
Cómo: Inicializar una matriz escalonada
Cómo: Inicializar una matriz multidimensional
Solucionar problemas de matrices
Conceptos
Información general sobre matrices en Visual Basic
Dimensiones de matrices en Visual Basic
Matrices escalonadas en Visual Basic
Tamaño de matriz en Visual Basic
Otros recursos
Matrices en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Crear una matriz con varias dimensiones


Una matriz que utiliza más de un índice se denomina matriz multidimensional. Al igual que con una matriz unidimensional, se
crea con una cláusula New (Visual Basic) y se asigna a la variable de matriz. Puede hacer esto como parte de la declaración de
la matriz o en una instrucción de asignación subsiguiente.
Para crear una matriz multidimensional
1. Coloque el número adecuado de comas dentro de los paréntesis que siguen al nombre de variable. Debe tener una coma
menos que el número de dimensiones.
2. Coloque el número adecuado de comas dentro de los paréntesis en la cláusula New. No necesita comas dentro de las
llaves ({}) si no proporciona ningún valor de elemento.
El ejemplo siguiente declara una variable para que contenga una matriz bidimensional con elementos de
Double (Tipo de datos, Visual Basic), crea la matriz y la asigna a la variable.

Dim weights(,) As Double = New Double(,) {}

Tras la ejecución de esta instrucción, la matriz de la variable weights tiene una longitud de 0.
Nota
Cuando se agregan dimensiones a una matriz, el espacio total necesario para guardar la matriz aumenta considerable
mente; por ello, debe utilizar las matrices multidimensionales con prudencia.

Para trabajar de forma eficaz con una matriz multidimensional


Agréguela a un bucle For anidado.
En el siguiente ejemplo se inicializan todos los elementos de matrix con valores comprendidos entre 0 y 99, según sus
posiciones en la matriz.

Dim matrix(9, 9) As Double


Dim maxDim0 As Integer = UBound(matrix, 1)
Dim maxDim1 As Integer = UBound(matrix, 2)
For i As Integer = 0 To maxDim0
For j As Integer = 0 To maxDim1
matrix(i, j) = (i * 10) + j
Next j
Next i

Una matriz multidimensional no es lo mismo que una matriz escalonada. Para obtener más información, consulte
Cómo: Crear una matriz de matrices.
Vea también
Tareas
Cómo: Declarar una variable de matriz
Cómo: Crear una matriz
Cómo: Crear una matriz con tipos de elementos mixtos
Cómo: Crear una matriz sin elementos
Cómo: Inicializar una matriz multidimensional
Solucionar problemas de matrices
Referencia
Instrucción For...Next (Visual Basic)
Conceptos
Matrices multidimensionales en Visual Basic
Otros recursos
Matrices en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Inicializar una matriz multidimensional


Puede inicializar una variable de matriz multidimensional de la misma manera que inicializa una matriz unidimensional, sólo
que debe contar con cada dimensión.
Para inicializar una variable de matriz multidimensional
En la declaración de la variable de matriz, especifique cada límite superior del índice entre paréntesis, separado por
comas. El ejemplo siguiente declara y crea una variable que contiene una matriz bidimensional con elementos de
Short (Tipo de datos, Visual Basic), especificando sólo los límites superiores.

Dim sizes(1, 1) As Short

Tras la ejecución de esta instrucción, la matriz de la variable sizes tiene un total de cuatro elementos, en los índices (0, 0),
(0, 1) (1, 0) y (1, 1), que contienen valores predeterminados. Si crea una matriz de esta manera, debe utilizar una
instrucción de asignación subsiguiente para asignar cada valor de elemento.
o bien
La declaración debe ir seguida del signo de igualdad (=) y una cláusula New (Visual Basic). En la cláusula New, repita el
tipo de datos del elemento, especifique los límites superiores del índice entre paréntesis e incluya llaves vacías ({}). El
ejemplo siguiente declara y crea una variable que contiene una matriz tridimensional con elementos del tipo de datos
Short, especificando sólo los límites superiores.

Dim replyCounts(,,) As Short = New Short(2, 1, 2) {}

Tras la ejecución de esta instrucción, la matriz de la variable replyCounts tiene una longitud de 18, que contiene
elementos predeterminados. Si crea una matriz de esta manera, debe utilizar una instrucción de asignación subsiguiente
para asignar cada valor de elemento.
Nota
Puede inicializar los límites superiores del índice solamente en un lugar. Si especifica los límites superiores en los paré
ntesis que siguen al nombre de la variable de la matriz, no puede utilizar una cláusula New. Si especifica los límites sup
eriores en los paréntesis de la cláusula New, debe dejar vacíos los paréntesis que siguen al nombre de variable.

o bien
En la cláusula New, especifique los límites superiores del índice entre paréntesis y proporcione los valores de elementos
entre llaves ({}). El ejemplo siguiente declara, crea e inicializa una variable para contener una matriz bidimensional con
elementos del tipo de datos Short, especificando los límites superiores y los valores. Tenga en cuenta los dos niveles de
llaves en la cláusula New.

Dim startingScores(,) As Short = New Short(1, 1) {{10, 10}, {10, 10}}

Tras la ejecución de esta instrucción, la matriz de la variable startingScores contiene cuatro elementos inicializados. Si
proporciona los límites superiores y los valores, debe incluir un valor para cada elemento desde el índice 0 hasta el límite
superior en cada dimensión.
o bien
En la cláusula New, debe dejar vacíos los paréntesis, excepto en el caso de las comas para el número apropiado de
dimensiones, e incluya los valores de elemento entre las llaves ({}). El ejemplo siguiente declara, crea e inicializa una
variable para contener una matriz bidimensional con elementos de String (Tipo de datos, Visual Basic), especificando sólo
los valores de elementos. Tenga en cuenta los dos niveles de llaves en la cláusula New.

Dim diagonal(,) As Single = New Single(,) {{1, 0}, {0, 1}}


Tras la ejecución de esta instrucción, la matriz de la variable diagonal contiene cuatro elementos inicializados.

Vea también
Tareas
Cómo: Declarar una variable de matriz
Cómo: Crear una matriz con varias dimensiones
Cómo: Inicializar una variable de matriz
Cómo: Inicializar una matriz escalonada
Solucionar problemas de matrices
Conceptos
Matrices multidimensionales en Visual Basic
Otros recursos
Matrices en Visual Basic
Conceptos del lenguaje Visual Basic

Matrices escalonadas en Visual Basic


Una matriz de la que cada elemento es una matriz se llama una matriz de matrices o una matriz escalonada. Observe que
tener matrices como elementos no es lo mismo que una matriz multidimensional que tiene más de un índice en una única
matriz.
Significado de escalonado
En algunas ocasiones, la estructura de datos de la aplicación es bidimensional pero no rectangular. Por ejemplo, puede tener
una matriz de meses, siendo cada elemento a su vez una matriz de días. Puesto que los distintos meses tienen un número
distinto de días, los elementos no forman una matriz bidimensional rectangular. En este caso, puede utilizar una matriz
escalonada en lugar de una matriz multidimensional.
Ejemplo
El ejemplo siguiente declara una variable de matriz para que contenga una matriz de matrices con elementos de
Double (Tipo de datos, Visual Basic). Cada elemento de la matriz sales es una matriz que representa un mes. Cada matriz de
meses contiene valores para cada día de ese mes.

Dim sales()() As Double = New Double(11)() {}


Dim month As Integer
Dim days As Integer
For month = 0 To 11
days = DateTime.DaysInMonth(Year(Now), month + 1)
sales(month) = New Double(days - 1) {}
Next month

La cláusula New de la declaración sales establece la variable de matriz en un matriz de 12 elementos, cada uno de los cuales
es de tipo Double(), una matriz de elementos Double. El bucle For determina cuántos días tiene cada mes este año
(Year(Now)) y establece el elemento correspondiente de sales en una matriz Double del tamaño adecuado.
En el ejemplo anterior, la matriz escalonada guarda siete elementos (seis en un año bisiesto) en comparación con una matriz
bidimensional. En un caso más extremo, el ahorro de memoria podría ser significativo.
Vea también
Tareas
Cómo: Declarar una variable de matriz
Cómo: Crear una matriz de matrices
Cómo: Inicializar una matriz escalonada
Solucionar problemas de matrices
Conceptos
Información general sobre matrices en Visual Basic
Dimensiones de matrices en Visual Basic
Matrices multidimensionales en Visual Basic
Tipos de datos de matrices en Visual Basic
Escribir código compatible con CLS
Otros recursos
Matrices en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Crear una matriz de matrices


Una matriz con matrices para elementos se denomina matriz de matrices o matriz escalonada. Al igual que con una matriz
unidimensional, se crea con una cláusula New (Visual Basic) y se asigna a la variable de matriz. Puede hacer esto como parte
de la declaración de la matriz o en una instrucción de asignación subsiguiente.
Para crear una matriz escalonada
1. Agregue después del nombre de variable tantos pares de paréntesis como niveles de matrices anidadas existan.
2. Agregue el mismo número de pares de paréntesis a la cláusula New. No necesita más que un par de llaves ({}) si no va a
proporcionar ningún valor de elemento. El ejemplo siguiente declara una variable para que contenga una matriz de
matrices con elementos de Byte (Tipo de datos, Visual Basic), crea la matriz y la asigna a la variable.

Dim ratings As Byte()() = New Byte()() {}

Tras la ejecución de esta instrucción, la matriz de la variable ratings tiene una longitud de 0.

Vea también
Tareas
Cómo: Declarar una variable de matriz
Cómo: Crear una matriz
Cómo: Crear una matriz con varias dimensiones
Cómo: Crear una matriz con tipos de elementos mixtos
Cómo: Crear una matriz sin elementos
Cómo: Inicializar una matriz escalonada
Solucionar problemas de matrices
Conceptos
Matrices escalonadas en Visual Basic
Escribir código compatible con CLS
Otros recursos
Matrices en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Inicializar una matriz escalonada


Al inicializar una variable de matriz escalonada, sólo puede especificar las longitudes de dimensión para la matriz del nivel
superior. Existen varias maneras de hacerlo:
Para inicializar una variable de matriz escalonada
En la declaración de la variable de la matriz, especifique el límite superior del índice del nivel superior dentro del primer
par de paréntesis, separado por comas. El ejemplo siguiente declara y crea una variable para contener una matriz
escalonada de elementos Byte, especificando sólo el límite superior del nivel superior.

Dim rainfall(11)() As Byte

Tras la ejecución de esta instrucción, la matriz de la variable rainfall contiene 12 elementos, cada uno de los cuales es
una matriz vacía de elementos Byte.
o bien
En la cláusula New, especifique el límite superior del índice del nivel superior dentro del primer par de paréntesis y
proporcione llaves vacías ({}). El ejemplo siguiente declara y crea una variable para contener una matriz escalonada de
elementos Short, especificando sólo el límite superior del nivel superior.

Dim snowfall()() As Short = New Short(11)() {}

Tras la ejecución de esta instrucción, la matriz de la variable snowfall contiene 12 elementos, cada uno de los cuales es
una matriz vacía de elementos Short.
Nota
Puede inicializar el límite superior del índice del nivel superior solamente en un lugar. Si especifica un límite superior e
n los paréntesis que siguen al nombre de la variable de la matriz, no puede utilizar una cláusula New. Si especifica el lí
mite superior en los paréntesis de la cláusula New, debe dejar vacíos los paréntesis que siguen al nombre de variable.

o bien
En la cláusula New, especifique el límite superior del índice del nivel dentro de los paréntesis y proporcione los valores
de elementos dentro de llaves ({}). El ejemplo siguiente declara, crea e inicializa una variable para contener una matriz
escalonada de elementos Char, especificando el límite superior del nivel superior y los valores. Tenga en cuenta las
cláusulas New anidadas para inicializar las matrices del nivel inferior.

Dim decodeValues()() As Char = New Char(1)() {New Char() {"a"c, "b"c}, New Char() {"p"
c, "q"c}}

Tras la ejecución de esta instrucción, la matriz de la variable decodeValues contiene dos elementos, cada uno de los
cuales es una matriz Char de longitud 1 con el elemento en el índice 0 que contiene un valor inicializado. Si proporciona
el límite superior del nivel superior y los valores, debe incluir un valor para cada elemento del nivel superior desde el
índice 0 hasta el límite superior.
o bien
En la cláusula New, omita los paréntesis del nivel superior y proporcione los valores de elementos dentro de llaves ({}).
El ejemplo siguiente declara, crea e inicializa una variable para contener una matriz escalonada de elementos Byte,
especificando sólo los valores de elementos. Tenga en cuenta los dos niveles de llaves en la cláusula New.

Dim firstValues()() As Byte = {New Byte() {2, 1}, New Byte() {3, 0}}

Tras la ejecución de esta instrucción, la matriz de la variable firstValues tiene una longitud de 2, con elementos
firstValues(0) y firstValues(1). Cada uno de los elementos se inicializa en una matriz Byte de dos elementos, el
primero con los valores de elementos 2 y 1, y el segundo con los valores de elementos 3 y 0.
Vea también
Tareas
Cómo: Declarar una variable de matriz
Cómo: Crear una matriz de matrices
Cómo: Inicializar una variable de matriz
Cómo: Inicializar una matriz multidimensional
Solucionar problemas de matrices
Referencia
New (Visual Basic)
Conceptos
Matrices escalonadas en Visual Basic
Escribir código compatible con CLS
Otros recursos
Matrices en Visual Basic
Conceptos del lenguaje Visual Basic

Tipos de datos de matrices en Visual Basic


No existe ningún tipo de datos para todas las matrices. Los factores siguientes determinan, en su lugar, el tipo de datos de una
matriz:
El hecho de ser una matriz
El rango (número de dimensiones)
El tipo de datos de los elementos de la matriz
Por lo tanto, se considera que dos variables de matrices son del mismo tipo de datos sólo cuando tienen el mismo rango y sus
elementos tienen el mismo tipo de datos.
Observe que las longitudes de las dimensiones no influyen en el tipo de datos de la matriz.
Ejemplos de matriz
En el ejemplo siguiente se declaran cuatro variables de matriz que tienen distintos tipos de datos.

Dim firstArray(12, 8) As UInteger


Dim secondArray(12, 8, 3) As UInteger
Dim thirdArray(12, 8) As String
Dim fourthArray(5, 20) As UInteger

Tras la ejecución de las instrucciones anteriores, las relaciones del tipo de datos siguientes se aplican a las variables de matriz:
Las variables firstArray y secondArray no son del mismo tipo porque tienen rangos diferentes.
Las variables firstArray y thirdArray no son del mismo tipo de datos porque tienen tipos de datos de elementos
diferentes.
Las variables firstArray y fourthArray son del mismo tipo de datos y puede asignar una a otra.
Tipos de datos de matrices escalonadas
Matrices de matrices, es decir, matrices que contienen otras matrices como elementos, también se conocen como matrices
escalonadas porque las longitudes de las matrices de elementos no son necesariamente iguales. En el ejemplo siguiente se
declaran dos variables de matrices escalonadas que tienen distintos tipos de datos.

Dim twoDimOfOneDim(,)() As Integer


Dim oneDimOfTwoDim()(,) As Integer

La matriz de twoDimOfOneDim es bidimensional y su tipo de datos de elementos es Integer() o matrices Integer


unidimensionales. La matriz de oneDimOfTwoDim es unidimensional y su tipo de datos de elementos es Integer(,) o matrices
Integer bidimensionales.
Vea también
Tareas
Cómo: Declarar una variable de matriz
Cómo: Crear una matriz
Cómo: Inicializar una variable de matriz
Cómo: Determinar el tipo de datos de una matriz
Solucionar problemas de matrices
Conceptos
Información general sobre matrices en Visual Basic
Dimensiones de matrices en Visual Basic
Matrices multidimensionales en Visual Basic
Matrices escalonadas en Visual Basic
Otros recursos
Matrices en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Determinar el tipo de datos de una matriz


Tenga en cuenta que el tipo de datos de una matriz no es nunca igual al de sus elementos. Puede averiguar el tipo de datos de
una matriz o de sus elementos de varias maneras.
Llame al método System.Object.GetType en la variable a fin de obtener un objeto Type para el tipo en tiempo de
ejecución de la variable. El objeto Type contiene amplia información en sus propiedades y métodos.
Pase la variable a TypeName (Función, Visual Basic) para obtener un objeto String que contiene el nombre del tipo en
tiempo de ejecución.
Pase la variable a VarType (Función, Visual Basic) para obtener un valor VariantType que representa la clasificación del
tipo de la variable.
Para determinar el tipo de datos de una matriz
Llame a TypeName en el nombre de la matriz. No agregue paréntesis detrás del nombre de la matriz porque está
solicitando el tipo de la propia matriz.

Dim thisTwoDimArray(,) As Integer = New Integer(9, 9) {}


MsgBox("Type of thisTwoDimArray is " & TypeName(thisTwoDimArray))

La llamada a MsgBox muestra "Type of thisTwoDimArray is Integer(,)" que indica el tipo de elemento y el número de
dimensiones. No muestra las longitudes actuales de las dimensiones porque no forman parte del tipo de datos de una
matriz.
Para determinar el tipo de datos de un elemento de matriz
Seleccione un elemento existente y llame a TypeName en ese elemento.

Dim thisTwoDimArray(,) As Integer = New Integer(9, 9) {}


MsgBox("Type of thisTwoDimArray(0, 0) is " & TypeName(thisTwoDimArray(0, 0)))

La llamada a MsgBox muestra "Type of thisTwoDimArray(0, 0) is Integer".


El tipo de datos de los elementos forma parte del tipo de datos de la matriz. Por ello, el tipo de datos no se puede
cambiar ni siquiera con una instrucción de asignación o una instrucción ReDim.
Vea también
Tareas
Cómo: Declarar una variable de matriz
Cómo: Crear una matriz
Cómo: Inicializar una variable de matriz
Solucionar problemas de matrices
Referencia
TypeName (Función, Visual Basic)
VarType (Función, Visual Basic)
VariantType (Enumeración)
Conceptos
Tipos de datos de matrices en Visual Basic
Otros recursos
Matrices en Visual Basic
Conceptos del lenguaje Visual Basic

Tamaño de matriz en Visual Basic


El tamaño de una matriz es el producto de las longitudes de todas sus dimensiones. Representa el número total de elementos
contenido actualmente en la matriz.
A continuación, se muestra un ejemplo de declaración de una matriz tridimensional.

Dim prices(3, 4, 5) As Long

El tamaño total de la matriz en la variable prices es (3 + 1) x (4 + 1) x (5 + 1) = 120.


Consideraciones sobre el tamaño de una matriz
Se deben tener presentes varias cosas cuando se trata con el tamaño de una matriz.
Longitud de la dimensión
El índice de cada dimensión está basado en 0, lo que significa que va desde 0 hasta su límite superior. Por consiguiente, la
longitud de una dimensión determinada supera en 1 al límite superior declarado para esa dimensión.
Límites de longitud
La longitud de cada dimensión de una matriz está limitada al valor máximo del tipo de datos Integer que es (2 ^ 31) - 1. No
obstante, la memoria disponible en el sistema limita también el tamaño total de una matriz. Si intenta inicializar una matriz que
supera la cantidad de memoria RAM disponible, Common Language Runtime produce una excepción OutOfMemoryException.
Tamaño y tamaño de elementos
El tamaño de una matriz es independiente del tipo de datos de sus elementos. El tamaño siempre representa el número total
de elementos, no el número de bytes que utilizan en el almacenamiento.
Consumo de memoria
No es seguro dar nada por supuesto en lo que respecta al modo de almacenar una matriz en la memoria. El almacenamiento
varía en función de las plataformas de diferentes anchos de datos, por lo que la misma matriz puede utilizar más memoria en
un sistema de 64 bits que en un sistema de 32 bits. Según la configuración del sistema cuando inicializa una matriz, Common
Language Runtime (CLR) puede asignar el almacenamiento para empaquetar los elementos tan juntos como sea posible o
para alinearlos todos en los límites naturales del hardware. Asimismo, una matriz requiere una sobrecarga de almacenamiento
para obtener su información de control y esta sobrecarga aumenta con cada dimensión agregada.
Vea también
Tareas
Cómo: Declarar una variable de matriz
Cómo: Crear una matriz
Cómo: Inicializar una variable de matriz
Cómo: Determinar el tamaño de una matriz
Cómo: Cambiar el tamaño de una matriz
Cómo: Determinar la longitud de una dimensión de una matriz
Solucionar problemas de matrices
Otros recursos
Matrices en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Determinar el tamaño de una matriz


El tamaño total de una matriz es el producto de las longitudes de todas sus dimensiones. La propiedad Length de la matriz
devuelve este tamaño total, que representa el número total de elementos contenidos actualmente en la matriz, no el número
de bytes que se utilizan en el almacenamiento.
Para determinar el tamaño total de una matriz
Lea la propiedad Length de la matriz. No agregue paréntesis detrás del nombre de la matriz.

Dim thisDoubleArray(,) As Char = New Char(4, 9) {}


MsgBox("Total length of thisDoubleArray is " & CStr(thisDoubleArray.Length))

La llamada a MsgBox muestra "Total length of thisDoubleArray is 50".


Puede averiguar la longitud de cada dimensión en el método GetLength de la matriz.
Puede cambiar la longitud de una dimensión individual, lo cual modifica el tamaño total. Sin embargo, no puede cambiar el
rango (el número de dimensiones).
Vea también
Tareas
Cómo: Declarar una variable de matriz
Cómo: Crear una matriz
Cómo: Inicializar una variable de matriz
Cómo: Cambiar el tamaño de una matriz
Cómo: Determinar la longitud de una dimensión de una matriz
Solucionar problemas de matrices
Referencia
Length
Conceptos
Tamaño de matriz en Visual Basic
Otros recursos
Matrices en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Cambiar el tamaño de una matriz


Cambia el tamaño de una variable de matriz asignándole un nuevo objeto de matriz. Puede utilizar una instrucción de
asignación estándar o Instrucción ReDim (Visual Basic). En cualquier caso, la matriz original se reemplaza por una
completamente nueva y la variable de matriz señala a la nueva matriz.
Cambiar el tamaño de una matriz le ayuda a administrar la memoria de forma eficaz. Por ejemplo, puede empezar con una
matriz pequeña y aumentar su tamaño si necesita más elementos. Asimismo, puede empezar con una matriz grande y reducir
su tamaño cuando ya no la necesita entera. Esta técnica sólo ocupa la memoria adicional cuando se necesita.
Para cambiar el tamaño de una variable de matriz mediante una instrucción de asignación estándar
1. Cree el nuevo objeto de matriz especificando las nuevas longitudes de la dimensión.
2. Asigne el nuevo objeto de matriz a la variable de matriz.

Dim thisArrayVariable() As Integer = New Integer(99) {}


thisArrayVariable = New Integer(49) {}

Para cambiar el tamaño de una variable de matriz mediante la instrucción ReDim


Especifique las nuevas longitudes de dimensión para la variable de matriz en la instrucción ReDim.

Dim thisArrayVariable() As Integer = New Integer(99) {}


ReDim thisArrayVariable(9)

Cuando se redimensiona una matriz mediante ReDim, normalmente se pierden los valores existentes de sus elementos. No
obstante, se pueden conservar si se incluye la palabra clave Preserve en la instrucción ReDim.
Para cambiar el tamaño de una variable de matriz conservando los valores de elementos existentes
1. Especifique las nuevas longitudes de dimensión para la variable de matriz en la instrucción ReDim.
2. Agregue la palabra clave Preserve en la instrucción ReDim. El ejemplo siguiente crea una nueva matriz, inicializa sus
elementos desde los elementos correspondientes de la matriz existente en arrayToIncreasey asigna la nueva matriz a la
variable de matriz arrayToIncrease.

Dim arrayToIncrease(9, 49)


ReDim Preserve arrayToIncrease(9, 199)

Si utiliza Preserve en una matriz multidimensional, puede cambiar sólo la última longitud de dimensión. Si intenta cambiar
cualquiera de las demás dimensiones, aparece una excepción ArrayTypeMismatchException.
Si cambia el tamaño de una matriz grande mediante la palabra clave Preserve, tenga presente que Visual Basic debe copiar
todos los elementos existentes en la nueva matriz. Esto puede ralentizar el rendimiento.
Vea también
Tareas
Cómo: Declarar una variable de matriz
Cómo: Crear una matriz
Cómo: Inicializar una variable de matriz
Cómo: Determinar el tamaño de una matriz
Cómo: Determinar la longitud de una dimensión de una matriz
Cómo: Asignar una matriz a otra
Cómo: Cambiar una matriz por otra distinta
Solucionar problemas de matrices
Conceptos
Tamaño de matriz en Visual Basic
Otros recursos
Matrices en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Determinar la longitud de una dimensión de una matriz


El método GetLength de una matriz devuelve la longitud junto con la dimensión especificada.
Para determinar la longitud de una dimensión de una matriz
Llame a GetLength en el nombre de la matriz. Proporcione la dimensión cuya longitud desea definir como argumento
para GetLength. Observe que el argumento de dimensión está basado en 0.

Dim sampleTripleArray(,,) As Short = New Short(2, 3, 4) {}


MsgBox("Dimension lengths of sampleTripleArray are " & CStr(sampleTripleArray.GetLengt
h(0)) _
& ", " & CStr(sampleTripleArray.GetLength(1)) & ", " & CStr(sampleTripleArray.GetL
ength(2)))

La llamada a MsgBox muestra "Dimension lengths of sampleTripleArray are 3, 4, 5".


El valor de índice inferior para cada dimensión es siempre 0 y el método GetUpperBound devuelve el valor de índice superior
de una dimensión. Para cada dimensión, GetLength devuelve un valor superior en 1 al devuelto por GetUpperBound. Al
igual que ocurre con GetLength, la dimensión que se especifica para GetUpperBound está basada en 0.
Puede averiguar la longitud total de una matriz a partir de su propiedad Length.
Para cambiar el tamaño total, modifique la longitud de una dimensión individual. Sin embargo, no puede cambiar el rango (el
número de dimensiones).
Vea también
Tareas
Cómo: Declarar una variable de matriz
Cómo: Crear una matriz
Cómo: Inicializar una variable de matriz
Cómo: Determinar el tamaño de una matriz
Cómo: Cambiar el tamaño de una matriz
Solucionar problemas de matrices
Conceptos
Tamaño de matriz en Visual Basic
Otros recursos
Matrices en Visual Basic
Conceptos del lenguaje Visual Basic

Trabajar con matrices y elementos de matrices


Esta sección trata la ordenación de matrices, la colocación u obtención de un valor de la matriz y otras acciones en las matrices
y elementos de matriz.
En esta sección
Cómo: Establecer un valor en una matriz
Muestra cómo almacenar valores en elementos de matriz.
Cómo: Obtener un valor a partir de una matriz
Explica cómo recuperar valores de los elementos de matriz.
Cómo: Localizar un elemento en una matriz de Visual Basic
Explica cómo encontrar un elemento determinado en una matriz.
Cómo: Invertir el contenido de una matriz en Visual Basic
Describe cómo invertir el orden de los elementos de una matriz.
Cómo: Ordenar una matriz en Visual Basic
Muestra cómo ordenar alfabéticamente los elementos de una matriz.
Cómo: Asignar una matriz a otra
Describe las reglas y pasos para asignar una matriz a otra variable de matriz.
Cómo: Cambiar una matriz por otra distinta
Explica qué cambios son posibles y cómo lograrlos.
Cómo: Pasar una matriz a un procedimiento o una propiedad
Explica cómo pasar una matriz como un argumento a un procedimiento o propiedad.
Cómo: Devolver una matriz desde un procedimiento o una propiedad
Describe cómo devolver una matriz al código que llama a un procedimiento o propiedad.
Referencia
Instrucción Dim (Visual Basic)
Declara y asigna espacio de almacenamiento para una o varias variables.
System.Array
Proporciona métodos para crear, manipular, buscar y ordenar matrices, actuando como clase base de todas las matrices en
Common Language Runtime.
Secciones relacionadas
Solucionar problemas de matrices
Trata algunos problemas comunes que surgen al trabajar con matrices.
Matrices en Visual Basic
Explica cómo hacer el código más compacto y eficaz declarando y utilizando matrices.
Conceptos del lenguaje Visual Basic

Cómo: Establecer un valor en una matriz


Puede almacenar uno de los valores de una matriz utilizando el nombre de la matriz y los índices adecuados para especificar el
elemento individual.
Para poner un valor en un elemento de matriz
1. A la izquierda del signo igual (=), especifique el nombre de la matriz seguido de paréntesis.
2. Dentro de los paréntesis, incluya una expresión para cada índice que corresponda al elemento que desea almacenar.
Necesita un índice para cada dimensión de la matriz. El ejemplo siguiente muestra algunas instrucciones que almacenan
valores en matrices.
Dim numbers() As Integer

Dim matrix(,) As Double

numbers(i + 1) = 0

matrix(3, j * 2) = j

Para cada dimensión de la matriz, el método GetUpperBound devuelve el valor máximo que puede tener el índice. El
valor de índice mínimo es siempre 0.
Vea también
Tareas
Cómo: Declarar una variable de matriz
Cómo: Crear una matriz
Cómo: Inicializar una variable de matriz
Cómo: Obtener un valor a partir de una matriz
Cómo: Localizar un elemento en una matriz de Visual Basic
Cómo: Invertir el contenido de una matriz en Visual Basic
Cómo: Ordenar una matriz en Visual Basic
Solucionar problemas de matrices
Conceptos
Dimensiones de matrices en Visual Basic
Otros recursos
Matrices en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Obtener un valor a partir de una matriz


Puede obtener uno de los valores de una matriz utilizando el nombre de la matriz y los índices adecuados para especificar el
elemento individual.
Para recibir un valor de un elemento de matriz
1. Dentro de una expresión, especifique el nombre de la matriz seguido de paréntesis.
2. Dentro de los paréntesis, incluya una expresión para cada índice que corresponda al elemento que desea obtener.
Necesita un índice para cada dimensión de la matriz. El ejemplo siguiente muestra algunas instrucciones que reciben
valores de las matrices.

Dim sortedValues(), rawValues(), estimates(,,) As Double


lowestValue = sortedValues(0)
wTotal += (rawValues(v) ^ 2)
firstGuess = estimates(i, j, k)

Para cada dimensión de la matriz, el método GetUpperBound devuelve el valor máximo que puede tener el índice. El valor de
índice mínimo es siempre 0.
Vea también
Tareas
Cómo: Declarar una variable de matriz
Cómo: Crear una matriz
Cómo: Inicializar una variable de matriz
Cómo: Establecer un valor en una matriz
Cómo: Localizar un elemento en una matriz de Visual Basic
Cómo: Invertir el contenido de una matriz en Visual Basic
Cómo: Ordenar una matriz en Visual Basic
Solucionar problemas de matrices
Conceptos
Dimensiones de matrices en Visual Basic
Otros recursos
Matrices en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Localizar un elemento en una matriz de Visual Basic


En este ejemplo se declara una matriz de objetos String denominada zooAnimals, se llena y se busca el elemento "turtle" y se
muestra su ubicación.
Ejemplo
Este ejemplo de código también está disponible en el fragmento de código de IntelliSense. En el selector de fragmentos de
código, se encuentra en Lenguaje Visual Basic. Para obtener más información, consulte
Cómo: Insertar fragmentos de código en el código (Visual Basic).

Public Sub findAnimal()


Dim zooAnimals(2) As String
zooAnimals(0) = "lion"
zooAnimals(1) = "turtle"
zooAnimals(2) = "ostrich"
Dim turtleIndex As Integer
turtleIndex = (Array.IndexOf(zooAnimals,"turtle"))
MsgBox("The turtle is element " & turtleIndex)
End Sub

Compilar el código
Este ejemplo necesita:
Obtener acceso a Mscorlib.dll y al espacio de nombres System.
Programación eficaz
Las condiciones siguientes pueden provocar una excepción:
La matriz está vacía (clase ArgumentNullException)
La matriz es multidimensional (clase RankException)
Uno o más elementos de la matriz no implementan la interfaz IComparable (clase InvalidOperationException).
Vea también
Tareas
Cómo: Establecer un valor en una matriz
Cómo: Obtener un valor a partir de una matriz
Cómo: Invertir el contenido de una matriz en Visual Basic
Cómo: Ordenar una matriz en Visual Basic
Solucionar problemas de matrices
Referencia
System.Array.IndexOf
Conceptos
Información general sobre matrices en Visual Basic
Otros recursos
Matrices en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Invertir el contenido de una matriz en Visual Basic


En este ejemplo se declara una matriz de objetos String denominada zooAnimals, se llena y se invierte su contenido.
Ejemplo
Este ejemplo de código también está disponible en el fragmento de código de IntelliSense. En el selector de fragmentos de
código, se encuentra en Lenguaje Visual Basic. Para obtener más información, consulte
Cómo: Insertar fragmentos de código en el código (Visual Basic).

Public Sub reverseAnimals()


Dim zooAnimals(2) As String
zooAnimals(0) = "lion"
zooAnimals(1) = "turtle"
zooAnimals(2) = "ostrich"
Array.Reverse(zooAnimals)
End Sub

Compilar el código
Este ejemplo necesita:
Obtener acceso a Mscorlib.dll y al espacio de nombres System.
Programación eficaz
Las condiciones siguientes pueden provocar una excepción:
La matriz está vacía (clase ArgumentNullException)
La matriz es multidimensional (clase RankException)
Uno o más elementos de la matriz no implementan la interfaz IComparable (clase InvalidOperationException).
Vea también
Tareas
Cómo: Establecer un valor en una matriz
Cómo: Obtener un valor a partir de una matriz
Cómo: Localizar un elemento en una matriz de Visual Basic
Cómo: Ordenar una matriz en Visual Basic
Solucionar problemas de matrices
Referencia
System.Array.Reverse
Conceptos
Información general sobre matrices en Visual Basic
Otros recursos
Matrices en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Ordenar una matriz en Visual Basic


En el siguiente ejemplo se declara una matriz de objetos String denominada zooAnimals, se llena y se ordena alfabéticamente.
Ejemplo
Este ejemplo de código también está disponible en el fragmento de código de IntelliSense. En el selector de fragmentos de
código, se encuentra en Lenguaje Visual Basic. Para obtener más información, consulte
Cómo: Insertar fragmentos de código en el código (Visual Basic).

Private Sub sortAnimals()


Dim zooAnimals(2) As String
zooAnimals(0) = "lion"
zooAnimals(1) = "turtle"
zooAnimals(2) = "ostrich"
Array.Sort(zooAnimals)
End Sub

Compilar el código
Este ejemplo necesita:
Obtener acceso a Mscorlib.dll y al espacio de nombres System.
Programación eficaz
Las condiciones siguientes pueden provocar una excepción:
La matriz está vacía (clase ArgumentNullException)
La matriz es multidimensional (clase RankException)
Uno o más elementos de la matriz no implementan la interfaz IComparable (clase InvalidOperationException).
Vea también
Tareas
Cómo: Establecer un valor en una matriz
Cómo: Obtener un valor a partir de una matriz
Cómo: Localizar un elemento en una matriz de Visual Basic
Cómo: Invertir el contenido de una matriz en Visual Basic
Solucionar problemas de matrices
Referencia
System.Array.Sort
Conceptos
Información general sobre matrices en Visual Basic
Otros recursos
Matrices en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Asignar una matriz a otra


Puesto que las matrices son objetos, puede utilizarlas en instrucciones de asignación como cualquier otro tipo de objeto. Una
variable de matriz contiene un puntero a los datos que constituyen los elementos de matriz, y a la información de rango y
longitud; una asignación copia sólo este puntero.
Para asignar una matriz a otra
1. Asegúrese de que las dos matrices tienen el mismo rango (número de dimensiones) y tipos de datos de elementos
compatibles.
2. Utilice una instrucción de asignación estándar para asignar la matriz de origen a la matriz de destino. No agregue
paréntesis detrás del nombre de las matrices.

Dim formArray() As System.Windows.Forms.Form


Dim controlArray() As System.Windows.Forms.Control
controlArray = formArray

En la asignación de una matriz a otra, se aplican las siguientes reglas:


Rangos iguales. El rango (número de dimensiones) de la matriz de destino debe coincidir con el de la matriz de origen.
Siempre que los rangos de las dos matrices sean iguales, no es necesario que las dimensiones sean iguales. El número de
elementos de una dimensión dada puede cambiar durante la asignación.
Tipos de elementos. Ambas matrices deben tener elementos de tipo de referencia o bien ambas matrices deben tener
elementos de tipo de valor. Para obtener más información, consulte Tipos de valores y tipos de referencia.
Si ambas matrices tienen elementos de tipo valor, los tipos de datos deben coincidir exactamente. La única
excepción a esto es que puede asignar una matriz de elementos Enum a una matriz del tipo base de esta Enum.
Si ambas matrices tienen elementos de tipo de referencia, el tipo de elemento de origen debe derivar del tipo de
elemento de destino. Cuando éste es el caso, las dos matrices tienen la misma relación de herencia que sus
elementos. Esto se denomina covarianza de matriz.
El compilador notifica un error si las reglas anteriores no se cumplen, por ejemplo, si los tipos de datos no son compatibles o si
los rangos no son iguales. Se puede incluir control de errores en el código para comprobar si las matrices son compatibles
antes de intentar realizar la asignación. También puede utilizar la palabra clave TryCast si desea evitar que se produzca una
excepción.
Vea también
Tareas
Cómo: Declarar una variable de matriz
Cómo: Crear una matriz
Cómo: Inicializar una variable de matriz
Cómo: Cambiar el tamaño de una matriz
Cómo: Cambiar una matriz por otra distinta
Cómo: Pasar una matriz a un procedimiento o una propiedad
Cómo: Devolver una matriz desde un procedimiento o una propiedad
Solucionar problemas de matrices
Referencia
Instrucción Enum (Visual Basic)
Conceptos
Conversiones de matrices
Otros recursos
Matrices en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Cambiar una matriz por otra distinta


Es importante distinguir entre un objeto de matriz y una variable de matriz. Una variable de matriz contiene un puntero a un
objeto de matriz que contiene los elementos de la matriz, así como el rango y la información de longitud.
Una vez creado un objeto de matriz, no puede cambiar su rango (número de dimensiones), sus longitudes de dimensión
ni el tipo de datos de sus elementos. Sólo puede cambiar el contenido de sus elementos.
Una vez declarada una variable de matriz, no puede cambiar su rango ni el tipo de datos de sus elementos. Sin embargo,
puede asignar una sucesión de diferentes objetos de matriz a la variable durante su período de duración. Estos objetos
de matriz pueden tener longitudes de dimensión diferentes.
Para cambiar una variable de matriz para que señale a un objeto de matriz diferente
Utilice una instrucción de asignación estándar para asignar la matriz de origen a la matriz de destino.

Dim array1(4), array2(19) As String


array2 = array1

Puede cambiar una variable de matriz para que señale a un objeto de matriz con longitudes de dimensión diferentes, pero no
puede cambiarla para que señale a un objeto de matriz de un tipo de datos diferente. Esto significa que el rango y el tipo de
datos de los elementos deben seguir siendo los mismos porque forman parte inherente del tipo de datos de la variable de
matriz.
Vea también
Tareas
Cómo: Declarar una variable de matriz
Cómo: Crear una matriz
Cómo: Inicializar una variable de matriz
Cómo: Asignar una matriz a otra
Cómo: Pasar una matriz a un procedimiento o una propiedad
Cómo: Devolver una matriz desde un procedimiento o una propiedad
Cómo: Cambiar el tamaño de una matriz
Solucionar problemas de matrices
Otros recursos
Matrices en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Pasar una matriz a un procedimiento o una propiedad


Puede pasar una matriz de la misma manera que cualquier otra variable. Proporcione el nombre de la variable de matriz en el
argumento adecuado cuando llame al procedimiento o tenga acceso a la propiedad.
Para pasar una matriz a un procedimiento
1. Asegúrese de que uno de los parámetros del procedimiento especifica una matriz con el mismo rango (número de
dimensiones) y tipo de datos de los elementos.
2. Proporcione la variable de matriz en el lugar correspondiente en la lista de argumentos. No agregue paréntesis detrás
del nombre de la matriz.

Public Function findLargest(ByVal numbers() As Double) As Double


' Insert code to calculate and return largest number.
End Function
Dim testNumbers() As Double = New Double() {5.0, 3.7, 1.2, 7.6}
Dim largestNumber As Double = findLargest(testNumbers)

Para pasar una matriz a una propiedad


1. Asegúrese de que uno de los parámetros de la propiedad especifica una matriz con el mismo rango (número de
dimensiones) y tipo de datos de los elementos.
2. Proporcione la variable de matriz en el lugar correspondiente en la lista de argumentos. No agregue paréntesis detrás
del nombre de la matriz.

Public Property bestMatch(ByVal formattedStrings() As String) As Double


' Insert Get and Set procedures for number best matching strings.
End Property
Dim testStrings() As String = New String() {}
Dim formattedNumber As Double = bestMatch(testStrings)

Vea también
Tareas
Cómo: Declarar una variable de matriz
Cómo: Crear una matriz
Cómo: Inicializar una variable de matriz
Cómo: Asignar una matriz a otra
Cómo: Cambiar una matriz por otra distinta
Cómo: Devolver una matriz desde un procedimiento o una propiedad
Solucionar problemas de matrices
Otros recursos
Matrices en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Devolver una matriz desde un procedimiento o una


propiedad
Puede devolver una matriz de la misma manera que cualquier otro tipo de datos. Proporcione el tipo de matriz como tipo de
valor devuelto del procedimiento o de la propiedad.
Para devolver una matriz de un procedimiento Function
1. Especifique el tipo de matriz (rango y tipo de datos de los elementos) como el tipo de valor devuelto en
Instrucción Function (Visual Basic).
2. Dentro del procedimiento, declare una variable de matriz local con el mismo rango y tipo de datos de los elementos.
3. Incluya esta variable de matriz local en Instrucción Return (Visual Basic). No agregue paréntesis detrás del nombre de la
matriz.

Public Function splitNumber(ByVal number As Double) As Char()


Dim characters() As Char
' Insert code to split number into characters.
Return characters
End Function
Dim piCharacters() As Char = splitNumber(3.14159265)

Para devolver una matriz de una propiedad


1. Especifique el tipo de matriz (rango y tipo de datos de los elementos) como el tipo de propiedad en
Property (Instrucción).
2. Dentro del procedimiento Get de la propiedad o en un lugar disponible para el procedimiento Get, declare una variable
de matriz local con el mismo rango y tipo de datos de los elementos.
3. Incluya esta variable de matriz local en la instrucción Return. No agregue paréntesis detrás del nombre de la matriz.

Private nameList() As String


Public Property stationNames As String()
Get
Return nameList
End Get
Set(ByVal Value As String())
' Insert code to store nameList values.
End Set
End Property
Dim listOfNames() As String = stationNames

Vea también
Tareas
Cómo: Declarar una variable de matriz
Cómo: Crear una matriz
Cómo: Inicializar una variable de matriz
Cómo: Asignar una matriz a otra
Cómo: Cambiar una matriz por otra distinta
Cómo: Pasar una matriz a un procedimiento o una propiedad
Solucionar problemas de matrices
Otros recursos
Matrices en Visual Basic
Conceptos del lenguaje Visual Basic

Colecciones como alternativa a las matrices


Aunque las colecciones se suelen utilizar para trabajar con Object (Tipo de datos), también se pueden usar para trabajar con
cualquier tipo de datos. En algunas circunstancias, puede resultar más eficaz almacenar elementos en una colección que en una
matriz.
Si necesita cambiar el tamaño de una matriz, debe utilizar Instrucción ReDim (Visual Basic). Si hace esto, Visual Basic crea una
nueva matriz y libera la matriz anterior para su disposición. Esto requiere tiempo de ejecución. Por consiguiente, si el número
de elementos con los que trabaja cambia a menudo o no puede predecir el número máximo de elementos que necesita, puede
obtener un mejor rendimiento utilizando una colección.
Una colección, que no tiene que crear un nuevo objeto o copiar elementos existentes, puede controlar el cambio de tamaño en
un tiempo de ejecución menor que una matriz, que tiene que utilizar ReDim. Pero si el tamaño no cambia, o sólo cambia
raramente, es probable que una matriz sea más eficaz. Como siempre, el rendimiento depende en gran medida de la aplicación
individual. Suele merecer la pena probar una matriz y una colección.
Colecciones especializadas
.NET Framework también proporciona una variedad de clases, interfaces y estructuras para colecciones generales y especiales.
Los espacios de nombres System.Collections y System.Collections.Specialized contienen las definiciones e implementaciones
que incluyen diccionarios, listas, colas y pilas. El espacio de nombres System.Collections.Generic proporciona muchos de ellos
en versiones genéricas que adoptan uno o más argumentos de tipos.
Si su colección es para contener elementos de sólo un tipo de datos concreto, una colección genérica tiene la ventaja de forzar
la seguridad de tipos. Para obtener más información sobre genéricos, consulte Tipos genéricos en Visual Basic.
Ejemplo
El ejemplo siguiente utiliza la clase genérica System.Collections.Generic.List de .NET Framework para crear una colección de
listas de estructuras customer.

' Define the structure for a customer.


Public Structure customer
Public name As String
' Insert code for other members of customer structure.
End Structure
' Create a module-level collection that can hold 200 elements.
Public custFile As New List(Of customer)(200)
' Add a specified customer to the collection.
Private Sub addNewCustomer(ByVal newCust As customer)
' Insert code to perform validity check on newCust.
custFile.Add(newCust)
End Sub
' Display the list of customers in the Debug window.
Private Sub printCustomers()
For Each cust As customer In custFile
Debug.WriteLine(cust)
Next cust
End Sub

La declaración de la colección custFile especifica que sólo puede contener elementos de tipo customer. También proporciona
una capacidad inicial de 200 elementos. El procedimiento addNewCustomer comprueba la validez del nuevo elemento y, a
continuación, lo agrega a la colección. El procedimiento printCustomers utiliza un bucle For Each para recorrer la colección y
mostrar sus elementos.
Vea también
Tareas
Cómo: Declarar una variable de matriz
Cómo: Crear una matriz
Cómo: Inicializar una variable de matriz
Solucionar problemas de matrices
Referencia
Instrucción ReDim (Visual Basic)
Conceptos
Colecciones en Visual Basic
Tipos genéricos en Visual Basic
Otros recursos
Matrices en Visual Basic
Conceptos del lenguaje Visual Basic

Solucionar problemas de matrices


En esta página se muestran algunos problemas comunes que pueden aparecer al trabajar con matrices.
Errores de compilación al declarar e inicializar una matriz
Pueden surgir errores de compilación si se comprenden mal las reglas para declarar, crear e inicializar matrices. Las causas
más comunes de errores son las siguientes:
Proporcionar una cláusula New (Visual Basic) después de especificar longitudes de dimensión en la declaración de
variables de la matriz. En las líneas de código siguientes se muestran declaraciones no válidas de este tipo.
Dim INVALIDsingleDimByteArray(2) As Byte = New Byte()

Dim INVALIDtwoDimShortArray(1, 1) As Short = New Short(,)

Dim INVALIDjaggedByteArray(1)() As Byte = New Byte()()

Especificar longitudes de dimensión para más que la matriz de nivel superior de una matriz escalonada. En la línea de
código siguiente se muestra una declaración no válida de este tipo.
Dim INVALIDjaggedByteArray(1)(1) As Byte

Omitir la palabra clave New al especificar los valores de elemento. En la línea de código siguiente se muestra una
declaración no válida de este tipo.
Dim INVALIDoneDimShortArray() As Short = Short() {0, 1, 2, 3}

Proporcionar una cláusula New sin corchetes ({}). En las líneas de código siguientes se muestran declaraciones no
válidas de este tipo.
Dim INVALIDsingleDimByteArray() As Byte = New Byte()

Dim INVALIDsingleDimByteArray() As Byte = New Byte(2)

Dim INVALIDtwoDimShortArray(,) As Short = New Short(,)

Dim INVALIDtwoDimShortArray(,) As Short = New Short(1, 1)

Tener acceso a una matriz fuera de límites


El proceso de inicializar una matriz asigna un límite superior y un límite inferior a cada dimensión. Cada acceso a un elemento
de la matriz debe especificar un índice válido, o subíndice, para cada dimensión. Si un índice está por debajo del límite inferior
o por encima del límite superior, se produce una excepción IndexOutOfRangeException. El compilador no puede detectar este
tipo de error, por lo que aparece un error en tiempo de ejecución.
Determinar los límites
Si otro componente pasa una matriz al código, por ejemplo como un argumento de procedimiento, no se conoce el tamaño de
la matriz o la longitud de sus dimensiones. Siempre se debe determinar el límite superior para cada dimensión de una matriz
antes de intentar tener acceso a cualquier elemento. Si la matriz se ha creado por un medio distinto de una cláusula New de
Visual Basic, el límite inferior podría ser distinto de cero y es más seguro determinar también ese límite inferior.
Especificar la dimensión
Al determinar los límites de una matriz multidimensional, tenga cuidado de cómo especifica la dimensión. Los parámetros
dimension de los métodos GetLowerBound y GetUpperBound están basados en cero, mientras los parámetros Rank de Visual
Basic LBound (Función, Visual Basic) y UBound (Función, Visual Basic) están basados en uno.
Vea también
Tareas
Cómo: Declarar una variable de matriz
Cómo: Crear una matriz
Cómo: Crear una matriz con varias dimensiones
Cómo: Crear una matriz de matrices
Cómo: Crear una matriz con tipos de elementos mixtos
Cómo: Crear una matriz sin elementos
Cómo: Inicializar una variable de matriz
Cómo: Inicializar una matriz multidimensional
Cómo: Inicializar una matriz escalonada
Otros recursos
Matrices en Visual Basic
Conceptos del lenguaje Visual Basic

Objetos en Visual Basic


Cuando se crea una aplicación en Visual Basic, se trabaja con objetos constantemente. Se pueden utilizar objetos
proporcionados por Visual Basic, como controles, formularios y objetos de acceso a datos. También se pueden usar los objetos
de otras aplicaciones dentro de su aplicación de Visual Basic. Incluso pueden crearse objetos propios y agregarles propiedades
y métodos adicionales. Los objetos actúan como unidades de creación prefabricadas para programas: permiten escribir una
porción de código y utilizarla una y otra vez.
Los siguientes temas describen los objetos con más detalle:
En esta sección
Objetos y clases
Proporciona información general sobre objetos y clases.
Cómo: Crear un objeto
Explica cómo crear un objeto para poder utilizar sus miembros.
Cómo: Volver a usar un componente de trabajo
Describe cómo utilizar funcionalidad que ya se ha escrito y se ha depurado.
Cómo: Definir una clase que usa miembros de una clase existente
Muestra cómo utilizar las propiedades y métodos de una clase base en su clase derivada.
Relaciones entre objetos
Explica las jerarquías de objetos, contenedores y colecciones.
Miembros de objetos
Resume los campos, propiedades, métodos y eventos expuestos por objetos.
Cómo: Obtener acceso a miembros compartidos y no compartidos de un objeto
Explica cómo leer, escribir o llamar a un miembro de un objeto que ha creado.
Secciones relacionadas
Introducción a los objetos en Visual Basic
Proporciona información general sobre cómo se utilizan los objetos en Visual Basic.
Crear y utilizar objetos
Muestra cómo crear y utilizar instancias de clases.
Conceptos del lenguaje Visual Basic

Objetos y clases
Un objeto es una combinación de código y datos que puede tratarse como una unidad. Un objeto puede ser una porción de
una aplicación, como un control o un formulario. Una aplicación entera también puede ser un objeto.
Reutilizar el código
Los objetos permiten declarar variables y procedimientos una vez y utilizarlos siempre que sean necesarios. Por ejemplo, si
desea agregar un corrector ortográfico a una aplicación, puede definir todas las variables y funciones auxiliares para
proporcionar funcionalidad de corrección ortográfica. Si crea el corrector ortográfico como una clase, puede volver a utilizarlo
en otras aplicaciones mediante la inclusión de una referencia en el ensamblado compilado. Aún mejor, tal vez pueda ahorrarse
trabajo mediante el uso de una clase de corrector ortográfico que otra persona ya haya desarrollado.
Clases
Cada objeto de Visual Basic está definido por una clase. Una clase describe las variables, propiedades, procedimientos y
eventos de un objeto. Los objetos son instancias de clases; pueden crearse tantos objetos como sean necesarios una vez que se
defina una clase.
Para comprender la relación entre un objeto y su clase, piense en los moldes de hacer galletas y en las galletas. El molde es la
clase. Define las características de cada galleta, por ejemplo, el tamaño y la forma. La clase se utiliza para crear objetos. Los
objetos son las galletas.
Dos ejemplos en Visual Basic podrían ayudar a ilustrar la relación entre las clases y objetos.
Los controles en el Cuadro de herramientas de Visual Basic representan las clases. Cuando se arrastra un control del
Cuadro de herramientas a un formulario, se está creando un objeto; una instancia de una clase.
El formulario con el que se trabaja en tiempo de diseño es una clase. En tiempo de ejecución, Visual Basic crea una
instancia de la clase del formulario, es decir, un objeto.
Varias instancias
Los objetos recientemente creados a partir de una clase son a menudo idénticos. Una vez que existen como objetos
individuales no obstante, sus variables y propiedades se pueden cambiar independientemente de las demás instancias. Por
ejemplo, si agrega tres casillas de verificación a un formulario, cada objeto de botón de casilla de verificación es una instancia
de la clase CheckBox. Los objetos CheckBox individuales comparten un conjunto de características y funciones comunes
(propiedades, variables, procedimientos y eventos) definidos por la clase. No obstante, cada uno tiene su propio nombre,
puede habilitarse y deshabilitarse por separado, y puede colocarse en una ubicación diferente en el formulario.
Vea también
Conceptos
Relaciones entre objetos
Introducción a los objetos en Visual Basic
Otros recursos
Crear y utilizar objetos
Descripción de las clases
Conceptos del lenguaje Visual Basic

Cómo: Crear un objeto


Una objeto es una instancia de una clase. Para utilizar los miembros de la clase debe crear primero un objeto a partir de esa
clase.
Para crear un objeto a partir de una clase
1. Determine en qué clase desea crear un objeto.
2. Escriba Instrucción Dim (Visual Basic) para crear una variable a la que puede asignar una instancia de clase. La variable
debe ser del tipo de la clase deseada.

Dim nextCustomer As customer

3. Agregue la palabra clave New (Visual Basic) para inicializar la variable a una nueva instancia de la clase.

Dim nextCustomer As New customer

4. Puede tener acceso a los miembros de la clase ahora a través de la variable de objeto.

nextCustomer.accountNumber = lastAccountNumber + 1

Programación eficaz
Siempre que sea posible, debe declarar la variable para que sea del tipo de clase que piensa asignarle. Esto se llama enlace en
tiempo de compilación. Si no conoce el tipo de clase en el tiempo de compilación, puede invocar el enlace en tiempo de
ejecución declarando la variable para que sea Object (Tipo de datos). Sin embargo, el enlace en tiempo de ejecución puede
ralentizar el rendimiento y limitar el acceso a los miembros del objeto en tiempo de ejecución. Para obtener más información,
consulte Declaración de variables de objeto.
Vea también
Tareas
Cómo: Volver a usar un componente de trabajo
Cómo: Definir una clase que usa miembros de una clase existente
Cómo: Obtener acceso a miembros compartidos y no compartidos de un objeto
Conceptos
Objetos y clases
Conceptos del lenguaje Visual Basic

Cómo: Volver a usar un componente de trabajo


Si ya existe un componente y está depurado y en funcionamiento, puede aprovecharlo y utilizarlo en su código en lugar de
desarrollar otro componente con la misma funcionalidad. Este tipo de componente se expone normalmente como una clase.
Para volver a usarlo, cree un objeto a partir de esa clase.
Ejemplo
.NET Framework proporciona muchos ejemplos de componentes que están disponibles para su uso. Este componente es la
clase TimeZone en el espacio de nombres System. TimeZone proporciona miembros que le permiten recuperar información
acerca de la zona horaria del sistema del equipo actual.

Public Sub examineTimeZone()


Dim tz As System.TimeZone = System.TimeZone.CurrentTimeZone
Dim s As String = "Current time zone is "
s &= CStr(tz.GetUtcOffset(Now).Hours) & " hours and "
s &= CStr(tz.GetUtcOffset(Now).Minutes) & " minutes "
s &= "different from UTC (coordinated universal time)"
s &= vbCrLf & "and is currently "
If tz.IsDaylightSavingTime(Now) = False Then s &= "not "
s &= "on ""summer time""."
MsgBox(s)
End Sub

El primer Instrucción Dim (Visual Basic) declara una variable de objeto de tipo TimeZone y le asigna un objeto TimeZone
devuelto por la propiedad CurrentTimeZone.
Vea también
Tareas
Cómo: Crear un objeto
Cómo: Definir una clase que usa miembros de una clase existente
Cómo: Obtener acceso a miembros compartidos y no compartidos de un objeto
Conceptos
Objetos y clases
Conceptos del lenguaje Visual Basic

Cómo: Definir una clase que usa miembros de una clase


existente
Puede utilizar miembros de una clase existente en otra clase que se deriva de ella.
En el ejemplo siguiente, suponga que desea definir un tipo especial de Button que se comporta como una clase Button normal
pero también expone un método que invierte los colores de primer plano y de fondo.
Para definir una clase que utiliza los miembros de una clase existente
1. Utilice Instrucción Class (Visual Basic) para definir una clase a partir de la cual crea el objeto que necesita.
Public Class reversibleButton

Asegúrese de que sigue una instrucción End Class después de la última línea de código de la clase. De manera
predeterminada, el entorno de desarrollo integrado (IDE) genera automáticamente End Class cuando escribe una
instrucción Class.
2. Agregue Inherits (Instrucción) inmediatamente después de la instrucción Class. Especifique la clase de la que se deriva su
nueva clase.
Inherits System.Windows.Forms.Button

Su nueva clase hereda todos los miembros definidos por la clase base.
3. Agregue el código para los miembros adicionales que expone la clase derivada. Por ejemplo, puede agregar un método
reverseColors y su clase derivada podría aparecer del modo siguiente:

Public Class reversibleButton


Inherits System.Windows.Forms.Button
Public Sub reverseColors()
Dim saveColor As System.Drawing.Color = Me.BackColor
Me.BackColor = Me.ForeColor
Me.ForeColor = saveColor
End Sub
End Class

Si crea un objeto a partir de la clase reversibleButton, puede tener acceso a todos los miembros de la clase Button, así
como al método reverseColors y a cualquier otro miembro nuevo que define en reversibleButton.

Compilar el código
Asegúrese de que el compilador puede tener acceso a la clase de la que piensa hacer derivar su nueva clase. Esto podría
significar la calificación completa de su nombre, como en el ejemplo anterior, o la identificación del espacio de nombres en
Imports (Instrucción). Si la clase está en un proyecto diferente, es posible que necesite agregar una referencia a ese proyecto.
Para obtener más información, consulte Hacer referencia a espacios de nombres y componentes.
Vea también
Tareas
Cómo: Crear un objeto
Cómo: Volver a usar un componente de trabajo
Cómo: Obtener acceso a miembros compartidos y no compartidos de un objeto
Cómo: Crear clases derivadas
Conceptos
Objetos y clases
Fundamentos de la herencia
Conceptos del lenguaje Visual Basic

Relaciones entre objetos


Los objetos pueden relacionarse entre sí de varias maneras. Los tipos principales de relación son jerárquicos y contención.
Relación jerárquica
Cuando las clases se derivan de las clases más fundamentales, se dice que tienen una relación jerárquica. Las jerarquías de
clases son útiles cuando se describen elementos que constituyen un subtipo de una clase más general. Por ejemplo, en el
espacio de nombres System.Windows.Forms, las clases Label y TextBox derivan las dos de la clase Control. Las clases derivadas
heredan miembros de la clase en la que se basan, lo que permite agregar complejidad a medida que se progresa en una
jerarquía de clases.
Relación de contención
Otra manera en que se pueden relacionar objetos es una relación de contención. Los objetos contenedores encapsulan
lógicamente otros objetos. Por ejemplo, el objeto OperatingSystem contiene lógicamente un objeto Version que vuelve a
través de su propiedad Version. Observe que el objeto contenedor no contiene ningún otro objeto físicamente.
Colecciones
Un tipo de contención de objetos particular lo representan las colecciones. Las colecciones son grupos de objetos similares que
se pueden enumerar. Visual Basic admite una sintaxis específica en Instrucción For Each...Next (Visual Basic) que le permite
recorrer en iteración los elementos de una colección. Además, las colecciones suelen permitir el uso de
Item (Propiedad, objeto Collection) para recuperar elementos mediante su índice o asociándolos con una cadena única. Las
colecciones pueden ser más fáciles de utilizar que las matrices puesto que permiten agregar o quitar elementos sin utilizar
índices. Debido a su facilidad de uso, las colecciones se utilizan frecuentemente para almacenar formularios y controles.
Vea también
Conceptos
Miembros de objetos
Colecciones en Visual Basic
Objetos de Visual Basic y otros orígenes
Otros recursos
Diseñar una jerarquía de herencia
Crear y utilizar objetos
Conceptos del lenguaje Visual Basic

Miembros de objetos
Los objetos son las unidades básicas de la programación orientada a objetos. Un objeto es un elemento de una aplicación, que
representa una instancia de una clase. Campos, propiedades, métodos y eventos son las unidades de creación básicas de los
objetos y constituyen sus miembros.
Objetos
Un objeto representa una instancia de una clase, como Form o Label. Debe crear un objeto antes de poder tener acceso a sus
miembros no compartidos. Para ello, utiliza la palabra clave New a fin de especificar la clase a partir de la cual va a crear el
objeto y, a continuación, asigna el nuevo objeto a una variable de objeto.

Dim warningLabel As New System.Windows.Forms.Label

Para obtener más información, consulte Cómo: Crear un objeto.


Acceso a miembros
Tiene acceso a un miembro de un objeto especificando, en orden, el nombre de la variable de objeto, un punto (.) y el nombre
del miembro. En el siguiente ejemplo se establece la propiedad Text de un objeto Label.

warningLabel.Text = "Data not saved"

Campos y propiedades
Campos y propiedades representan información almacenada en un objeto. Recupera y establece los valores con instrucciones
de asignación de la misma manera que recupera y establece variables locales en un procedimiento. En el siguiente ejemplo se
recupera la propiedad Width y se establece la propiedad ForeColor de un objeto Label.

Dim warningWidth As Integer = warningLabel.Width


warningLabel.ForeColor = System.Drawing.Color.Red

Observe que un campo se llama también variable miembro.


Para obtener más información, consulte Comparación de procedimientos de propiedades y campos.
Métodos
Un método es una acción que un objeto puede realizar. Por ejemplo, Add es un método del objeto ComboBox que agrega una
nueva entrada a un cuadro combinado.
En el siguiente ejemplo se muestra el método Start de un objeto Timer.

Dim safetyTimer As New System.Windows.Forms.Timer


safetyTimer.Start()

Observe que un método es simplemente un procedimiento expuesto por un objeto.


Para obtener más información, consulte Cómo: Realizar acciones con métodos.
Eventos
Un evento es una acción que un objeto reconoce, como hacer clic con el mouse (ratón) o presionar una tecla, y para el que
puede escribir código para responder. Los eventos se producen como consecuencia de una acción del usuario o de código de
programa, o bien pueden ser generados por el sistema. Se dice que el código que señala un evento provoca el evento y que el
código que responde a él lo controla.
También puede desarrollar eventos personalizados propios para que los generen sus objetos y los controlen otros objetos.
Para obtener más información, consulte Eventos y controladores de eventos.
Miembros de instancias y miembros compartidos
Cuando crea un objeto a partir de una clase, el resultado es una instancia de esa clase. Los miembros que no están declarados
con la palabra clave Shared (Visual Basic) son miembros de instancias que pertenecen estrictamente a esta instancia en
particular. Un miembro de instancia en una instancia es independiente del mismo miembro en otra instancia de la misma
clase. Por ejemplo, una variable miembro de la instancia puede tener valores diferentes en instancias diferentes.
Los miembros declarados con la palabra clave Shared son miembros compartidos que pertenecen a la clase en su conjunto y
no a una instancia determinada. Un miembro compartido sólo existe una vez, independientemente de las instancias de su clase
que pueda crear o incluso si no crea ninguna. Por ejemplo, una variable miembro compartida tiene sólo un valor que está
disponible para todo el código que pueda tener acceso a la clase.
Lista de miembros de IntelliSense
IntelliSense lista los miembros de una clase cuando invoca su opción Lista de miembros, por ejemplo, cuando escribe un punto
(.) como un operador de acceso a miembros. Si escribe el punto después del nombre de una variable declarada como una
instancia de esa clase, IntelliSense muestra todos los miembros de instancias y ninguno de los miembros compartidos. Si
escribe el punto después del nombre de clase, IntelliSense lista todos los miembros compartidos y ninguno de los miembros
de instancias. Para obtener más información, consulte Utilizar IntelliSense.
Vea también
Conceptos
Relaciones entre objetos
Otros recursos
Objetos en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Obtener acceso a miembros compartidos y no


compartidos de un objeto
Una vez creado un objeto, puede tener acceso a sus campos, propiedades, métodos y eventos a través de la variable del objeto.
Si el miembro es Shared (Visual Basic), no necesita crear un objeto para tener acceso a él.
Tener acceso a miembros no compartidos
Para tener acceso a un miembro no compartido de un objeto
1. Asegúrese de que el objeto se ha creado a partir de su clase y se ha asignado a una variable de objeto.

Dim secondForm As New System.Windows.Forms.Form

2. En la instrucción que tiene acceso al miembro, agregue detrás del nombre de la variable de objeto el operador de acceso
a miembros (.) y, a continuación, el nombre del miembro.

secondForm.Show()

Tener acceso a miembros compartidos


Para tener acceso a un miembro compartido de un objeto
Agregue detrás del nombre de clase el operador de acceso a miembros (.) y, a continuación, el nombre del miembro.
Siempre debe tener acceso a un miembro Shared del objeto directamente a través del nombre de clase.

MsgBox("This computer is called " & Environment.MachineName)

Si ya ha creado un objeto a partir de la clase, puede tener acceso a un miembro Shared alternativamente a través de la
variable del objeto.
Vea también
Tareas
Cómo: Crear un objeto
Cómo: Volver a usar un componente de trabajo
Cómo: Definir una clase que usa miembros de una clase existente
Cómo: Obtener acceso a los miembros de un objeto
Conceptos
Miembros de objetos
Conceptos del lenguaje Visual Basic

Cadenas en Visual Basic


En esta sección se describen los conceptos básicos del uso de cadenas en Visual Basic.
En esta sección
Introducción a las cadenas en Visual Basic
Muestra temas que describen los conceptos básicos que subyacen en el uso de cadenas en Visual Basic.
Crear cadenas en Visual Basic
Muestra temas que explican cómo crear nuevas cadenas.
Conversión entre cadenas y otros tipos de datos en Visual Basic
Muestra temas que describen cómo convertir las cadenas en otros tipos de datos.
Tutoriales para cadenas en Visual Basic
Muestra tutoriales relacionados con la manipulación de cadenas.
Validar cadenas en Visual Basic
Muestra temas que explican cómo validar las cadenas.
Buscar y reemplazar cadenas en Visual Basic
Muestra temas que explican cómo utilizar las funciones de buscar y reemplazar en las cadenas.
Analizar cadenas en Visual Basic
Muestra temas que explican cómo analizar las cadenas.
Solucionar problemas de cadenas en Visual Basic
Muestra temas que proporcionan consejos sobre cómo resolver problemas relacionados con la manipulación de cadenas.
Vea también
Otros recursos
Características del lenguaje Visual Basic
Conceptos del lenguaje Visual Basic

Introducción a las cadenas en Visual Basic


En esta sección se describen los conceptos básicos del uso de cadenas en Visual Basic.
En esta sección
Fundamentos de cadenas en Visual Basic
Presenta los conceptos básicos del uso de cadenas y variables de cadena.
Tipos de métodos de manipulación de cadenas en Visual Basic
Presenta diferentes formas de analizar y manipular las cadenas.
Nothing y cadenas en Visual Basic
Describe cómo Visual Basic en tiempo de ejecución y .NET Framework evalúan de manera diferente Nothing cuando afecta
a las cadenas.
Cómo afecta la referencia cultural a las cadenas en Visual Basic
Explica cómo Visual Basic utiliza la información de referencia cultural para realizar conversiones y comparaciones de
cadenas.
Acceso de base cero y de base uno a a cadenas en Visual Basic
Compara cómo Visual Basic y .NET Framework proporcionan acceso a los caracteres de una cadena.
Vea también
Otros recursos
Cadenas en Visual Basic
Crear cadenas en Visual Basic
Conceptos del lenguaje Visual Basic

Fundamentos de cadenas en Visual Basic


El tipo de datos String representa una serie de caracteres (que, a su vez, representan cada uno una instancia del tipo de datos
Char). En este tema se presentan los conceptos básicos de las cadenas en Visual Basic.
Variables de cadena
A una instancia de una cadena se puede asignar un valor literal que representa una serie de caracteres. Por ejemplo:
VB
Dim MyString As String
MyString = "This is an example of the String data type"

Una variable String también puede aceptar cualquier expresión que se evalúe como una cadena. A continuación, se muestran
algunos ejemplos:
VB
Dim OneString As String
Dim TwoString As String
OneString = "one, two, three, four, five"
' Evaluates to "two".
TwoString = OneString.Substring(5, 3)
OneString = "1"
' Evaluates to "11".
TwoString = OneString & "1"

Cualquier literal que se asigne a una variable String debe escribirse entre comillas (""). Esto significa que una comilla
contenida en una cadena no se puede representar mediante una comilla. Por ejemplo, el código siguiente provoca un error del
compilador:
VB
Dim myString As String

' This line would cause an error.


' myString = "He said, "Look at this example!""

Este código provoca un error porque el compilador termina la cadena después de la segunda comilla, y el resto de la cadena se
interpreta como código. Para solucionar este problema, Visual Basic interpreta dos comillas en un literal de cadena como una
comilla en la cadena. En el ejemplo siguiente se muestra la forma correcta de incluir una comilla en una cadena:
VB
' The value of myString is: He said, "Look at this example!"
myString = "He said, ""Look at this example!"""

En el ejemplo anterior, las dos comillas que preceden la palabra Look se convierten en una comilla en la cadena. Las tres
comillas al final de la línea representan una comilla en la cadena y un carácter de terminación de cadena.
Caracteres en cadenas
Una cadena puede considerarse como una serie de instancias de valores Char y el tipo String tiene funciones integradas que
permiten realizar muchas manipulaciones en una cadena, similares a las permitidas por las matrices. Como toda la matriz en
.NET Framework, éstas son matrices basadas en cero. Puede hacer referencia a un carácter específico de una cadena con la
propiedad Chars, que proporciona una forma de acceso a un carácter mediante la posición en la que éste aparece en la cadena.
Por ejemplo:
VB
Dim myString As String = "ABCDE"
Dim myChar As Char
' The value of myChar is "C".
myChar = myString.Chars(3)

En el ejemplo anterior, la propiedad Chars de la cadena devuelve el cuarto carácter de la cadena, el carácter D, y lo asigna a
myChar. También puede obtener la longitud de una cadena concreta mediante la propiedad Length. Si necesita realizar varias
manipulaciones de tipo de matriz en una cadena, puede convertirla en una matriz de instancias de Char usando la función
ToCharArray de la cadena. Por ejemplo:
VB
Dim myString As String = "abcdefghijklmnop"
Dim myArray As Char() = myString.ToCharArray

La variable myArray contiene ahora una matriz de instancias Char, que representan, cada una de ellas, un carácter de myString.
La inmutabilidad de las cadenas
Una cadena es inmutable, lo que significa que su valor no se puede cambiar una vez que ha sido creado. Sin embargo, esto no
impide que se asigne más que un valor a una variable de cadena. Considere el ejemplo siguiente:
VB
Dim myString As String = "This string is immutable"
myString = "Or is it?"

Aquí, se crea una variable de cadena, se le da un valor y, a continuación, se cambia su valor.


Más específicamente, en la primera línea, se crea una instancia de tipo String y se le asigna el valor This string is
immutable. En la segunda línea del ejemplo, se crea una nueva instancia y se le da el valor Or is it?, y la variable de cadena
descarta su referencia a la primera instancia y almacena una referencia a la nueva instancia.
A diferencia de otros tipos de datos intrínsecos, String es un tipo de referencia. Cuando se pasa una variable de tipo de
referencia como un argumento a una función o subrutina, se pasa una referencia a la dirección de memoria donde se
almacenan los datos en lugar del valor real de la cadena. Así, en el ejemplo anterior, el nombre de la variable sigue siendo el
mismo, pero apunta a una nueva instancia diferente de la clase String, que contiene el nuevo valor.
Vea también
Referencia
String (Tipo de datos, Visual Basic)
Char (Tipo de datos, Visual Basic)
Otros recursos
Introducción a las cadenas en Visual Basic
Operaciones básicas de cadenas
Conceptos del lenguaje Visual Basic

Tipos de métodos de manipulación de cadenas en Visual Basic


Existen diferentes formas de analizar y manipular las cadenas. Algunos métodos forman parte del lenguaje Visual Basic,
mientras que otros son inherentes a la clase String.
Lenguaje Visual Studio y .NET Framework
Los métodos de Visual Basic se utilizan como funciones inherentes del lenguaje. Pueden utilizarse sin calificación en el código.
En el siguiente ejemplo se muestra el uso habitual de un comando de manipulación de cadenas de Visual Basic:
VB
Dim aString As String = "SomeString"
Dim bString As String
bString = Mid(aString, 3, 3)

En este ejemplo, la función Mid realiza una operación directa en aString y asigna el valor a bString.
Métodos compartidos y métodos de instancia
También puede manipular cadenas con los métodos de la clase String. Existen dos tipos de métodos en String: métodos
compartidos y métodos de instancia.
Métodos compartidos
Un método compartido es un método que se deriva de la propia clase String y no necesita una instancia de dicha clase para
funcionar. Estos métodos se pueden calificar con el nombre de la clase (String) en lugar de hacerlo con una instancia de la
clase String. Por ejemplo:
VB
Dim aString As String = String.Copy("A literal string")

En el ejemplo anterior, el método System.String.Copy(System.String) es un método estático, que actúa sobre una expresión
dada y asigna el valor resultante a bString.
Métodos de instancia
En contraste, los métodos de instancia se derivan de una instancia concreta de String y deben calificarse con el nombre de la
instancia. Por ejemplo:
VB
Dim aString As String = "A String"
Dim bString As String
' Assign "String" to bString.
bString = aString.Substring(2, 6)

En este ejemplo, el método System.String.Substring(System.Int32) es un método de la instancia de String (es decir, aString).
Realiza una operación en aString y asigna ese valor a bString.
Vea también
Otros recursos
Introducción a las cadenas en Visual Basic
Conceptos del lenguaje Visual Basic

Nothing y cadenas en Visual Basic


Visual Basic en tiempo de ejecución y .NET Framework evalúan de manera diferente Nothing cuando se trata de cadenas.
Visual Basic Runtime y .NET Framework
Considere el ejemplo siguiente:
VB
Dim MyString As String = "This is my string"
Dim stringLength As Integer
' Explicitly set the string to Nothing.
MyString = Nothing
' stringLength = 0
stringLength = Len(MyString)
' This line, however, causes an exception to be thrown.
stringLength = MyString.Length

Visual Basic Runtime normalmente evalúa Nothing como una cadena vacía (""). Sin embargo, .NET Framework no lo hace, y se
producirá una excepción cuando se intente realizar una operación de cadena en Nothing.
Vea también
Otros recursos
Introducción a las cadenas en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo afecta la referencia cultural a las cadenas en Visual Basic


Esta página de ayuda explica cómo Visual Basic utiliza la información de referencia cultural para realizar conversiones y
comparaciones de cadenas.
Cuándo utilizar las cadenas específicas de referencia cultural
Normalmente, debe utilizar cadenas específicas de referencia cultural para todos los datos que se presentan a y se leen de los
usuarios y utilizar cadenas independientes de la referencia cultural para los datos internos de la aplicación.
Por ejemplo, si la aplicación pide a los usuarios que escriban una fecha como una cadena, debe esperar que los usuarios
adopten el formato de las cadenas correspondiente a su referencia cultural y debe convertir la cadena de manera adecuada. Si
a continuación la aplicación presenta esta fecha en su interfaz de usuario, debe presentarla en la referencia cultural del usuario.
Sin embargo, si la aplicación carga la fecha en un servidor central, debe aplicar a la cadena el formato correspondiente a una
referencia cultural específica, para evitar la confusión entre formatos de fecha potencialmente diferentes.
Funciones que tienen en cuenta la referencia cultural
Todas las funciones de conversión de cadenas de Visual Basic (excepto las funciones Str y Val) utilizan la información de
referencia cultural de la aplicación para asegurarse de que las conversiones y comparaciones resultan adecuadas para la
referencia cultural del usuario de la aplicación.
La clave para utilizar correctamente las funciones de conversión de cadenas en aplicaciones que se ejecutan en equipos con
configuraciones de referencia cultural diferentes consiste en comprender qué funciones utilizan una configuración de
referencia cultural específica y cuáles utilizan la configuración de referencia cultural actual. Observe que la configuración de la
referencia cultural de la aplicación, de manera predeterminada, se hereda de la configuración de la referencia cultural del
sistema operativo. Para obtener más información, vea Asc, AscW (Funciones), Chr, ChrW (Funciones), Format (Función),
Hex (Función, Visual Basic), Oct (Función) y Funciones de conversión de tipos.
Las funciones Str (convierte números a cadenas) y Val (convierte cadenas a números) no utilizan la información de referencia
cultural de la aplicación cuando convierten entre cadenas y números. De hecho, sólo reconocen el punto (.) como separador
decimal válido. Los elementos análogos de estas funciones que sí tienen en cuenta la referencia cultural son:
Conversiones que utilizan la referencia cultural actual. Las funciones CStr y Format convierten un número en una
cadena y las funciones CDbl y CInt convierten una cadena en un número.
Conversiones que utilizan una referencia cultural específica. Cada objeto de número dispone de un método
ToString(IFormatProvider) que convierte un número en una cadena y un método Parse(String, IFormatProvider)
que convierte una cadena en un número. Por ejemplo, el tipo Double proporciona los métodos ToString y Parse.
Para obtener más información, vea Str (Función) y Val (Función).
Utilizar una referencia cultural concreta
Supongamos que desarrolla una aplicación que envía una fecha (con formato de cadena) a un servicio Web. En este caso, la
aplicación debe utilizar una referencia cultural concreta para la conversión de cadenas. Para explicarlo, supongamos cuál es el
resultado de utilizar el método ToString de la fecha: Si la aplicación utiliza este método para aplicar formato a la fecha 4 de
julio de 2005, devuelve "7/4/2005 12:00:00 AM" cuando se ejecuta con la referencia cultural de inglés de Estados Unidos (en-
US) o "04.07.2005 00:00:00" cuando se ejecuta con la referencia cultura de alemán (de-DE).
Cuando debe realizar una conversión de cadenas en un formato de referencia cultural específico, debe utilizar la clase
CultureInfo integrada en .NET Framework. Puede crear un nuevo objeto CultureInfo para una referencia cultural concreta
pasando el nombre de la referencia cultural al constructor CultureInfo. Los nombres de referencia cultural compatibles se
muestran en la página de ayuda de la clase CultureInfo.
También puede obtener una instancia de la referencia cultural de todos los idiomas de la propiedad
System.Globalization.CultureInfo.InvariantCulture. La referencia cultural de todos los idiomas se basa en la referencia cultural
inglesa, pero hay algunas diferencias. Por ejemplo, la referencia cultural de todos los idiomas especifica el formato de hora de
24 horas en lugar del formato de 12 horas.
Para convertir una fecha a la cadena de la referencia cultural, pase el objeto CultureInfo al método ToString del objeto de
fecha. Por ejemplo, el código siguiente muestra "07/04/2005 00:00:00", independientemente de la configuración de la
referencia cultural de la aplicación.
Dim d As Date = #7/4/2005#
MsgBox(d.ToString(System.Globalization.CultureInfo.InvariantCulture))

Nota
Los literales de fecha siempre se interpretan según la referencia cultural inglesa.

Comparar cadenas
Existen dos situaciones importantes donde se necesitan las comparaciones de cadenas:
Ordenar datos para la presentación al usuario. Utilice operaciones basadas en la referencia cultural actual para que
las cadenas se ordenen correctamente.
Determinar si dos cadenas internas de la aplicación coinciden de forma exacta (normalmente por motivos de
seguridad). Utilice operaciones que no tengan en cuenta la referencia cultural actual.
Puede realizar ambos tipos de comparaciones con la función StrComp de Visual Basic. Especifique el argumento opcional
Compare para controlar el tipo de comparación: Text para la mayoría de las entradas y salidas, Binary para determinar
coincidencias exactas.
La función StrComp devuelve un entero que indica la relación entre las dos cadenas comparadas basándose en el criterio de
ordenación. Un resultado con un valor positivo indica que la primera cadena es mayor que la segunda. Un resultado negativo
indica que la primera cadena es más pequeña y cero indica igualdad entre las dos cadenas.
VB
' Defines variables.
Dim TestStr1 As String = "ABCD"
Dim TestStr2 As String = "abcd"
Dim TestComp As Integer
' The two strings sort equally. Returns 0.
TestComp = StrComp(TestStr1, TestStr2, CompareMethod.Text)
' TestStr1 sorts after TestStr2. Returns -1.
TestComp = StrComp(TestStr1, TestStr2, CompareMethod.Binary)
' TestStr2 sorts before TestStr1. Returns 1.
TestComp = StrComp(TestStr2, TestStr1)

También puede utilizar el equivalente en .NET Framework de la función StrComp, el método


System.String.Compare(System.String,System.String). Éste es un método estático sobrecargado de la clase de cadena base. En
el siguiente ejemplo se ilustra cómo se utiliza este método:
VB
Dim myString As String = "Alphabetical"
Dim secondString As String = "Order"
Dim result As Integer
result = String.Compare(myString, secondString)

Para un control más estricto sobre la realización de las comparaciones, puede utilizar sobrecargas adicionales del método
Compare. Con el método System.String.Compare(System.String,System.String,System.StringComparison), puede utilizar el
argumento comparisonType para especificar qué tipo de comparación se debe utilizar.
Valor para el argumento Tipo de comparación Cuándo utilizarla
comparisonType
Ordinal Comparación basada en los bytes del compon Utilice este valor al comparar identificadores con di
ente de las cadenas. stinción entre mayúsculas y minúsculas, configurac
ión relacionada con seguridad u otros identificador
es no lingüísticos donde los bytes deben coincidir
exactamente.
OrdinalIgnoreCase Comparación basada en los bytes del compon Utilice este valor al comparar identificadores sin di
ente de las cadenas. stinción entre mayúsculas y minúsculas, configurac
ión relacionada con seguridad y datos almacenaro
OrdinalIgnoreCase utiliza la información de l n en Windows.
a referencia cultural de todos los idiomas para
determinar si dos caracteres sólo se diferencia
n por el uso de mayúsculas.

CurrentCulture O bien Comparación basada en la interpretación de la Utilice estos valores al comparar datos que se mue
CurrentCultureIgnoreCase s cadenas en la referencia cultural actual. stran al usuario, la mayor parte de los datos propo
rcionados por el usuario y otros datos que requier
en interpretación lingüística.

InvariantCulture O bien Comparación basada en la interpretación de la Utilice estos valores únicamente al comparar datos
InvariantCultureIgnoreCase s cadenas en la referencia cultural de todos los persistentes o mostrar datos lingüísticamente perti
idiomas. nentes que requieren un criterio de ordenación fijo
.
Es diferente de Ordinal y OrdinalIgnoreCase
, porque la referencia cultural de todos los idio
mas trata los caracteres fuera de su intervalo a
ceptado como caracteres de todos los idiomas
equivalentes.
Consideraciones de seguridad
Si la aplicación toma decisiones sobre la seguridad basándose en el resultado de una comparación o de una operación de
cambio de mayúsculas y minúsculas, la operación debe utilizar el método
System.String.Compare(System.String,System.String,System.StringComparison) y pasar Ordinal o
OrdinalIgnoreCase al argumento comparisonType.
Vea también
Referencia
Funciones de conversión de tipos
CultureInfo
Otros recursos
Introducción a las cadenas en Visual Basic
Conceptos del lenguaje Visual Basic

Acceso de base cero y de base uno a a cadenas en Visual Basic


En este tema se compara cómo Visual Basic y .NET Framework proporcionan el acceso a los caracteres de una cadena. .NET
Framework siempre proporciona el acceso basado en cero a los caracteres en una cadena, mientras que Visual Basic
proporciona acceso basado en cero y basado en uno, dependiendo de la función.
Basado en uno
Para obtener un ejemplo de una función Visual Basic basada en uno, observe la función Mid. Toma un argumento que indica la
posición del carácter en el que comenzará la subcadena, empezando por la posición 1. El método
System.String.Substring(System.Int32) de .NET Framework toma un índice del carácter de la cadena en el que debe comenzar
la subcadena, empezando por la posición 0. De esta manera, si tiene una cadena "ABCDE", los caracteres individuales se
numeran como 1,2,3,4,5 para su uso con la función Mid, pero como 0,1,2,3,4 para usarlos con el método
System.String.Substring(System.Int32).
Basado en cero
Para obtener un ejemplo de una función de Visual Basic basada en uno, observe la función Split. Divide una cadena y devuelve
una matriz que contiene las subcadenas. El método System.String.Split(System.Char[]) de .NET Framework también divide una
cadena y devuelve una matriz que contiene las subcadenas. Puesto que la función Split y el método Split devuelven matrices
de .NET Framework, deben ser estar basados en cero.
Vea también
Tareas
Solucionar problemas de colecciones
Referencia
Mid (Función, Visual Basic)
Split (Función, Visual Basic)
Substring
Split
Otros recursos
Introducción a las cadenas en Visual Basic
Conceptos del lenguaje Visual Basic

Crear cadenas en Visual Basic


En esta sección se trata la creación de cadenas en Visual Basic.
En esta sección
Cómo: Crear cadenas mediante un objeto StringBuilder en Visual Basic
Crea una cadena larga a partir de varias cadenas más pequeñas con la clase StringBuilder.
Cómo: Generar literales de cadena multilínea (Visual Basic)
Crea un literal de cadena de tres líneas de longitud.
Vea también
Conceptos
Utilizar la clase StringBuilder
Conceptos del lenguaje Visual Basic

Cómo: Crear cadenas mediante un objeto StringBuilder en


Visual Basic
Este ejemplo crea una cadena larga a partir de muchas cadenas más pequeñas mediante la clase StringBuilder. La clase
StringBuilder es más eficaz que el operador &= para concatenar muchas cadenas.
Ejemplo
En el ejemplo siguiente se crea una instancia de la clase StringBuilder, se anexan 1.000 cadenas a esa instancia y, a
continuación, se devuelve su representación de cadena.
VB
Private Function StringBuilderTest() As String
Dim builder As New System.Text.StringBuilder
For i As Integer = 1 To 1000
builder.Append("Step " & i & vbCrLf)
Next
Return builder.ToString
End Function

Vea también
Referencia
&= (Operador, Visual Basic)
Conceptos
Utilizar la clase StringBuilder
Crear cadenas nuevas
Ejemplo Strings
Otros recursos
Cadenas en Visual Basic
Manipular cadenas
Crear cadenas en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Generar literales de cadena multilínea (Visual Basic)


En este ejemplo se construye un literal de cadena de tres líneas de longitud.
Ejemplo
VB
Dim MyString As String
MyString = "This is the first line of my string." & VbCrLf & _
"This is the second line of my string." & VbCrLf & _
"This is the third line of my string."

Este ejemplo de código también está disponible como fragmento de código de IntelliSense. En el selector de fragmentos de
código, se encuentra en Tipos de datos: definidos por Visual Basic. Para obtener más información, vea
Cómo: Insertar fragmentos de código en el código (Visual Basic).
Compilar el código
Para este ejemplo se necesita:
Una instrucción Imports que especifica el espacio de nombres System. Para obtener más información, vea
Imports (Instrucción).
Vea también
Conceptos
Convertir cadenas en tipos de datos de .NET Framework
Crear cadenas nuevas
Ejemplo Strings
Otros recursos
Cadenas en Visual Basic
Analizar cadenas
Manipular cadenas
Crear cadenas en Visual Basic
Conceptos del lenguaje Visual Basic

Conversión entre cadenas y otros tipos de datos en Visual Basic


En esta sección se describe cómo convertir cadenas en otros tipos de datos.
En esta sección
Cómo: Convertir una matriz de bytes en una cadena en Visual Basic
Cómo convertir bytes de una matriz de bytes en una cadena.
Cómo: Convertir cadenas en una matriz de bytes en Visual Basic
Cómo convertir una cadena en una matriz de bytes.
Cómo: Crear una cadena a partir de una matriz de caracteres (Visual Basic)
Cómo crear la cadena "abcd" a partir de caracteres individuales.
Cómo: Convertir cadenas hexadecimales en números
Cómo convertir una cadena hexadecimal en un entero.
Conceptos del lenguaje Visual Basic

Cómo: Convertir una matriz de bytes en una cadena en Visual


Basic
En este tema se muestra cómo convertir los bytes de una matriz de bytes en una cadena.
Ejemplo
Este ejemplo utiliza el método GetString de la clase de codificación System.Text.Encoding.Unicode para convertir todos los
bytes de una matriz de bytes en una cadena.
VB
Private Function UnicodeBytesToString( _
ByVal bytes() As Byte) _
As String

Return System.Text.Encoding.Unicode.GetString(bytes)
End Function

Puede elegir varias opciones de codificación para convertir una matriz de bytes en una cadena:
System.Text.Encoding.ASCII: Obtiene una codificación para el juego de caracteres ASCII (7 bits).
System.Text.Encoding.BigEndianUnicode: Obtiene una codificación para el formato UTF-16 utilizando el orden de bytes
big-endian.
System.Text.Encoding.Default: Obtiene una codificación para la página de códigos ANSI actual del sistema.
System.Text.Encoding.Unicode: Obtiene una codificación para el formato UTF-16 utilizando el orden de bytes little-
endian.
System.Text.Encoding.UTF32: Obtiene una codificación para el formato UTF-32 utilizando el orden de bytes little-endian.
System.Text.Encoding.UTF7: Obtiene una codificación para el formato UTF-7.
System.Text.Encoding.UTF8: Obtiene una codificación para el formato UTF-8.
Vea también
Tareas
Cómo: Convertir cadenas en una matriz de bytes en Visual Basic
Referencia
System.Text.Encoding
GetString
Conceptos del lenguaje Visual Basic

Cómo: Convertir cadenas en una matriz de bytes en Visual Basic


En este tema se muestra cómo convertir una cadena en una matriz de bytes.
Ejemplo
Este ejemplo utiliza el método GetBytes de la clase de codificación System.Text.Encoding.Unicode para convertir una cadena en
una matriz de bytes.
VB
Private Function UnicodeStringToBytes( _
ByVal str As String) _
As Byte()

Return System.Text.Encoding.Unicode.GetBytes(str)
End Function

Puede elegir varias opciones de codificación para convertir una cadena en una matriz de bytes:
System.Text.Encoding.ASCII: Obtiene una codificación para el juego de caracteres ASCII (7 bits).
System.Text.Encoding.BigEndianUnicode: Obtiene una codificación para el formato UTF-16 utilizando el orden de bytes
big-endian.
System.Text.Encoding.Default: Obtiene una codificación para la página de códigos ANSI actual del sistema.
System.Text.Encoding.Unicode: Obtiene una codificación para el formato UTF-16 utilizando el orden de bytes little-
endian.
System.Text.Encoding.UTF32: Obtiene una codificación para el formato UTF-32 utilizando el orden de bytes little-endian.
System.Text.Encoding.UTF7: Obtiene una codificación para el formato UTF-7.
System.Text.Encoding.UTF8: Obtiene una codificación para el formato UTF-8.
Vea también
Tareas
Cómo: Convertir una matriz de bytes en una cadena en Visual Basic
Referencia
System.Text.Encoding
GetBytes
Conceptos del lenguaje Visual Basic

Cómo: Crear una cadena a partir de una matriz de caracteres


(Visual Basic)
Este ejemplo crea la cadena "abcd" a partir de caracteres individuales.
Ejemplo
VB
Private Sub MakeStringFromCharacters()
Dim characters() As Char = {"a"c, "b"c, "c"c, "d"c}
Dim alphabet As New String(characters)
End Sub

Compilar el código
Este método no tiene ningún requisito especial.
Para crear un literal de carácter se utiliza la sintaxis "a"c, donde una c única sigue a un carácter individual en comillas.
Programación eficaz
Los caracteres Null (equivalentes a Chr(0)) de la cadena producirán resultados inesperados cuando ésta se utilice. Aunque el
carácter null se incluirá en la cadena, podría ocurrir que los caracteres que lo siguen no aparezcan en algunas situaciones.
Vea también
Referencia
Char (Tipo de datos, Visual Basic)
String
Conceptos
Tipos de datos en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Convertir cadenas hexadecimales en números


En este ejemplo se convierte una cadena hexadecimal en un entero utilizando el método ToInt32.
Para convertir una cadena hexadecimal en un número
Utilice el método ToInt32 para convertir el número expresado en base 16 a un entero.
El primer argumento del método ToInt32 es la cadena que se va a convertir. El segundo argumento describe la base en
que se expresa el número; el valor hexadecimal es base 16.
VB
' Assign the value 49153 to i.
Dim i As Integer = Convert.ToInt32("c001", 16)

Vea también
Referencia
Hex (Función, Visual Basic)
ToInt32
Conceptos del lenguaje Visual Basic

Cómo: Convertir una cadena en una matriz de caracteres en


Visual Basic
En ocasiones es útil tener información sobre los caracteres de una cadena y de su posición dentro de la misma, como cuando
se está analizando una cadena. Este ejemplo muestra cómo se puede obtener una matriz de los caracteres que contiene una
cadena llamando al método ToCharArray de la cadena.
Ejemplo
Este ejemplo muestra cómo dividir una cadena en una matriz de caracteres (Char), y cómo dividir una cadena en una matriz
String de sus caracteres de texto Unicode. El motivo de esta distinción es que los caracteres de texto Unicode pueden constar
de dos o más caracteres Char (como un par suplente o una secuencia de caracteres combinada). Para obtener más
información, vea TextElementEnumerator y el "Estándar Unicode" en la dirección http://www.unicode.org.
VB
Dim testString1 As String = "ABC"
' Create an array containing "A", "B", and "C".
Dim charArray() As Char = testString1.ToCharArray

Es más difícil dividir una cadena en sus caracteres de texto Unicode, pero es necesario hacerlo si necesita información sobre la
representación visual de una cadena. Este ejemplo utiliza el método SubstringByTextElements para obtener información sobre
los caracteres de texto Unicode que constituyen una cadena.
VB
' This string is made up of a surrogate pair (high surrogate
' U+D800 and low surrogate U+DC00) and a combining character
' sequence (the letter "a" with the combining grave accent).
Dim testString2 As String = ChrW(&HD800) & ChrW(&HDC00) & "a" & ChrW(&H300)

' Create and initialize a StringInfo object for the string.


Dim si As New System.Globalization.StringInfo(testString2)

' Create and populate the array.


Dim unicodeTestArray(si.LengthInTextElements) As String
For i As Integer = 0 To si.LengthInTextElements - 1
unicodeTestArray(i) = si.SubstringByTextElements(i, 1)
Next

Vea también
Tareas
Cómo: Obtener acceso a caracteres de cadenas en Visual Basic
Referencia
Chars
System.Globalization.StringInfo
Otros recursos
Conversión entre cadenas y otros tipos de datos en Visual Basic
Cadenas en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Obtener acceso a caracteres de cadenas en Visual Basic


Este ejemplo muestra cómo utilizar la propiedad Chars para tener acceso al carácter situado en la ubicación especificada en
una cadena.
Ejemplo
En ocasiones es útil tener información sobre los caracteres de una cadena y de su posición dentro de la misma. Una cadena se
puede considerar como una matriz de caracteres (instancias Char); se puede recuperar un carácter concreto haciendo
referencia al índice de dicho carácter a través de la propiedad Chars.
VB
Dim myString As String = "ABCDE"
Dim myChar As Char
' Assign "D" to myChar.
myChar = myString.Chars(3)

El parámetro index de la propiedad Chars está basado en cero.


Programación eficaz
La propiedad Chars devuelve el carácter situado en la posición especificada. Sin embargo, algunos caracteres Unicode se
pueden representar con más de un carácter. Para obtener más información sobre cómo trabajar con caracteres Unicode, vea
Cómo: Convertir una cadena en una matriz de caracteres en Visual Basic.
La propiedad Chars produce una excepción IndexOutOfRangeException si el parámetro index es mayor o igual que la longitud
de la cadena, o si es menor que cero.
Vea también
Tareas
Cómo: Convertir una cadena en una matriz de caracteres en Visual Basic
Referencia
Chars
Otros recursos
Conversión entre cadenas y otros tipos de datos en Visual Basic
Cadenas en Visual Basic
Conceptos del lenguaje Visual Basic

Tutoriales para cadenas en Visual Basic


Esta sección contiene un tutorial en el que se realiza manipulación de cadenas de caracteres.
En esta sección
Tutorial: Cifrar y descifrar cadenas en Visual Basic
Explica cómo cifrar y descifrar cadenas utilizando el algoritmo de cifrado de datos estándar.
Vea también
Otros recursos
Cadenas en Visual Basic
Conceptos del lenguaje Visual Basic

Tutorial: Cifrar y descifrar cadenas en Visual Basic


Este tutorial muestra cómo utilizar la clase DESCryptoServiceProvider para cifrar y descifrar cadenas utilizando la versión del
proveedor de servicios criptográficos (CSP) del algoritmo de Triple cifrado de datos estándar (TripleDES). El primer paso
consiste en crear una clase contenedora simple que encapsula el algoritmo (3DES) y almacena los datos cifrados como una
cadena Base-64 codificada. A continuación, ese contenedor se utiliza para almacenar con seguridad los datos privados del
usuario en un archivo de texto públicamente accesible.
Puede utilizar el cifrado para proteger secretos de usuario (por ejemplo, contraseñas) y hacer que las credenciales sean
ilegibles por los usuarios no autorizados. Así se puede proteger la identidad de un usuario autorizado contra su substracción,
que protege los activos del usuario y proporciona su no repudiación. El cifrado también puede proteger los datos de un
usuario para que los usuarios no autorizados no puedan tener acceso a ellos.
Para obtener más información, vea Información general sobre criptografía.
Nota de seguridad
Los algoritmos Rijndael (denominado en la actualidad como Estándar avanzado de cifrado [AES]) y Triple cifrado de datos est
ándar (3DES) proporcionan una seguridad mayor que la de DES porque realizan una mayor carga computacional. Para obten
er más información, vea DES y Rijndael.

Para crear el contenedor de cifrado


1. Agregue una importación del espacio de nombres de criptografía al principio del archivo.
VB
Imports System.Security.Cryptography

2. Cree una clase para encapsular los métodos de cifrado y descifrado.


VB
Public NotInheritable Class Simple3Des
End Class

3. Agregue un campo privado para almacenar el proveedor de servicios criptográficos 3DES.


VB
Private TripleDes As New TripleDESCryptoServiceProvider

4. Agregar un método privado que cree una matriz de bytes de una longitud especificada a partir del hash de la clave
especificada.
VB
Private Function TruncateHash( _
ByVal key As String, _
ByVal length As Integer) _
As Byte()

Dim sha1 As New SHA1CryptoServiceProvider

' Hash the key.


Dim keyBytes() As Byte = _
System.Text.Encoding.Unicode.GetBytes(key)
Dim hash() As Byte = sha1.ComputeHash(keyBytes)
' Truncate or pad the hash.
ReDim Preserve hash(length - 1)
Return hash
End Function

5. Agregar un constructor para inicializar el proveedor de servicios criptográficos 3DES.


El parámetro key controla los métodos EncryptData y DecryptData.
VB
Sub New(ByVal key As String)
' Initialize the crypto provider.
TripleDes.Key = TruncateHash(key, TripleDes.KeySize \ 8)
TripleDes.IV = TruncateHash("", TripleDes.BlockSize \ 8)
End Sub

6. Agregue un método público que cifre una cadena.


VB
Public Function EncryptData( _
ByVal plaintext As String) _
As String

' Convert the plaintext string to a byte array.


Dim plaintextBytes() As Byte = _
System.Text.Encoding.Unicode.GetBytes(plaintext)

' Create the stream.


Dim ms As New System.IO.MemoryStream
' Create the encoder to write to the stream.
Dim encStream As New CryptoStream(ms, _
TripleDes.CreateEncryptor(), _
System.Security.Cryptography.CryptoStreamMode.Write)

' Use the crypto stream to write the byte array to the stream.
encStream.Write(plaintextBytes, 0, plaintextBytes.Length)
encStream.FlushFinalBlock()

' Convert the encrypted stream to a printable string.


Return Convert.ToBase64String(ms.ToArray)
End Function

7. Agregue un método público que descifre una cadena.


VB
Public Function DecryptData( _
ByVal encryptedtext As String) _
As String

' Convert the encrypted text string to a byte array.


Dim encryptedBytes() As Byte = Convert.FromBase64String(encryptedtext)

' Create the stream.


Dim ms As New System.IO.MemoryStream
' Create the decoder to write to the stream.
Dim decStream As New CryptoStream(ms, _
TripleDes.CreateDecryptor(), _
System.Security.Cryptography.CryptoStreamMode.Write)

' Use the crypto stream to write the byte array to the stream.
decStream.Write(encryptedBytes, 0, encryptedBytes.Length)
decStream.FlushFinalBlock()

' Convert the plaintext stream to a string.


Return System.Text.Encoding.Unicode.GetString(ms.ToArray)
End Function

La clase contenedora se puede utilizar ahora para proteger los activos del usuario. En este ejemplo, se utiliza para
almacenar con seguridad los datos privados del usuario en un archivo de texto públicamente accesible.
Para probar el contenedor de cifrado
1. En una clase independiente, agregue un método que utilice el método EncryptData del contenedor para cifrar una
cadena y escribirla en la carpeta Mis documentos del usuario.
VB
Sub TestEncoding()
Dim plainText As String = InputBox("Enter the plain text:")
Dim password As String = InputBox("Enter the password:")

Dim wrapper As New Simple3Des(password)


Dim cipherText As String = wrapper.EncryptData(plainText)

MsgBox("The cipher text is: " & cipherText)


My.Computer.FileSystem.WriteAllText( _
My.Computer.FileSystem.SpecialDirectories.MyDocuments & _
"\cipherText.txt", cipherText, False)
End Sub

2. Agregue un método que lea la cadena cifrada de la carpeta Mis documentos del usuario y descifre la cadena con el
método DecryptData del contenedor.
VB
Sub TestDecoding()
Dim cipherText As String = My.Computer.FileSystem.ReadAllText( _
My.Computer.FileSystem.SpecialDirectories.MyDocuments & _
"\cipherText.txt")
Dim password As String = InputBox("Enter the password:")
Dim wrapper As New Simple3Des(password)

' DecryptData throws if the wrong password is used.


Try
Dim plainText As String = wrapper.DecryptData(cipherText)
MsgBox("The plain text is: " & plainText)
Catch ex As System.Security.Cryptography.CryptographicException
MsgBox("The data could not be decrypted with the password.")
End Try
End Sub
3. Agregue el código de la interfaz de usuario para llamar a los métodos TestEncoding y TestDecoding.
4. Ejecute la aplicación.
Cuando pruebe la aplicación, fíjese en que no descifrará los datos si proporciona una contraseña incorrecta.
Vea también
Referencia
System.Security.Cryptography
DESCryptoServiceProvider
DES
TripleDES
Rijndael
Conceptos
Información general sobre criptografía
Otros recursos
Tutoriales para cadenas en Visual Basic
Conceptos del lenguaje Visual Basic

Validar cadenas en Visual Basic


En esta sección se trata la validación de cadenas en Visual Basic.
En esta sección
Crear una función de validación en Visual Basic
Explica las propiedades de las funciones de validación y describe cómo crear y utilizar las funciones de validación.
Cómo: Validar rutas de acceso y nombres de archivo en Visual Basic
Cómo determinar si una cadena representa un nombre de archivo o una ruta de acceso.
Cómo: Validar cadenas que representan fechas u horas (Visual Basic)
Cómo determinar si una cadena representa una fecha válida.
Cómo: Validar cadenas que representan direcciones de correo electrónico (Visual Basic)
Cómo determinar si una cadena representa una dirección de correo electrónico válida.
Cómo: Validar texto para su presentación en un explorador Web en Visual Basic
Muestra cómo garantizar que un explorador mostrará correctamente el texto.
Utilizar expresiones regulares con el control MaskedTextBox en Visual Basic
Muestra cómo convertir las expresiones regulares simples para trabajar con el control MaskedTextBox.
Expresiones regulares y el operador Like
Compara y contrasta el operador Like y las expresiones regulares.
Tutorial: Comprobar la complejidad de las contraseñas (Visual Basic)
Cómo determinar si una cadena tiene las características de una contraseña segura.
Vea también
Otros recursos
Cadenas en Visual Basic
Analizar cadenas en Visual Basic
Buscar y reemplazar cadenas en Visual Basic
MaskedTextBox (Control, formularios Windows Forms)
Conceptos del lenguaje Visual Basic

Crear una función de validación en Visual Basic


Una función de validación determina si una cadena cumple o no ciertos requisitos. Este tema trata las propiedades de
funciones de validación y describe cómo crear y utilizar dichas funciones.
Tipos de funciones de validación
Una cadena que está intentando validar pertenece a una de estas tres categorías:
1. Está demostrado que es válida.
2. Está demostrado que no es válido.
3. No esta demostrado que sea válida ni no válida.
Está claro lo que una función de validación debería hacer con las cadenas de las primeras dos categorías; la tercera categoría es
más problemática.
Las funciones de validación se pueden agrupar en dos categorías, dependiendo de cómo tratan las cadenas de la tercera
categoría:
Funciones de validación conservadoras. Estas funciones sólo validan las cadenas que se puede demostrar que son
válidas.
Debe utilizar funciones de validación conservadoras cuando su aplicación confía en la cadena para la seguridad. Por
ejemplo, no cree un filtro que intente dejar fuera los elementos inaceptables: resulta difícil anticipar todas las entradas
incorrectas posibles. En lugar de eso, si decide crear un filtro, incluya en él una lista de los elementos aceptables.
Funciones de validación permisivas. Estas funciones validan todas las cadenas a menos que no sean
demostrablemente no válidas.
En la mayoría de las situaciones no relacionadas con la seguridad, como guardar un perfil de usuario, puede utilizar
funciones de validación permisivas, que son más flexibles y fáciles de usar que las funciones de validación
conservadoras.
Expresiones regulares en funciones de validación
Puede utilizar la clase de expresiones regulares Regex de .NET Framework para determinar si una cadena coincide con cierto
modelo o contiene cierto modelo.
Al validar una cadena, la expresión regular se debe iniciar con el carácter ^. Esto indica al motor de expresiones regulares que
inicie la concordancia con el modelo especificado al principio de la cadena.
Vea también
Tareas
Cómo: Comprobar si las cadenas tienen un formato de correo electrónico válido
Otros recursos
Validar cadenas en Visual Basic
Expresiones regulares de .NET Framework
Conceptos del lenguaje Visual Basic

Cómo: Validar rutas de acceso y nombres de archivo en Visual


Basic
Este ejemplo devuelve un valor Boolean que indica si una cadena representa un nombre de archivo o ruta de acceso. La
validación comprueba si el nombre contiene caracteres que el sistema de archivos no admite.
Ejemplo
VB
Function IsValidFileNameOrPath(ByVal name As String) As Boolean
' Determines if the name is Nothing.
If name Is Nothing Then
Return False
End If

' Determines if there are bad characters in the name.


For Each badChar As Char In System.IO.Path.GetInvalidPathChars
If InStr(name, badChar) > 0 Then
Return False
End If
Next

' The name passes basic validation.


Return True
End Function

Este ejemplo no comprueba si el nombre tiene signos de punto y coma en posiciones incorrectas, si hay directorios sin nombre
o si la longitud del nombre supera la longitud máxima definida por el sistema. Tampoco comprueba si la aplicación dispone de
permiso para tener acceso al recurso del sistema de archivos con el nombre especificado.
Vea también
Referencia
GetInvalidPathChars
Otros recursos
Validar cadenas en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Validar cadenas que representan fechas u horas (Visual


Basic)
El ejemplo de código siguiente establece un valor Boolean que indica si una cadena representa una fecha o una hora válida.
Ejemplo
VB
Dim isValidDate As Boolean = IsDate("01/01/03")
Dim isValidTime As Boolean = IsDate("9:30 PM")

Compilar el código
Reemplace ("01/01/03") y "9:30 PM" con la fecha y hora que desea validar. Puede reemplazar la cadena con otra cadena
codificada, con una variable String o con un método que devuelve una cadena, como InputBox.
Programación eficaz
Utilice este método para validar la cadena antes de intentar convertir el objeto String en una variable DateTime. Si
comprueba previamente la fecha o la hora, puede evitar generar una excepción en tiempo de ejecución.
Vea también
Referencia
IsDate (Función, Visual Basic)
InputBox (Función, Visual Basic)
Otros recursos
Validar cadenas en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Validar cadenas que representan direcciones de correo


electrónico (Visual Basic)
En el ejemplo de código siguiente se establece una variable booleana que indica si una cadena representa una dirección de
correo electrónico válida.
Ejemplo
VB
Function ValidateEmail(ByVal email As String) As Boolean
Dim emailRegex As _
New System.Text.RegularExpressions.Regex( _
"^(?<user>[^@]+)@(?<host>.+)$")
Dim emailMatch As _
System.Text.RegularExpressions.Match = emailRegex.Match(email)
Return emailMatch.Success
End Function

Compilar el código
Llame a este método y pase la cadena que contiene una dirección de correo electrónico.
Programación eficaz
Este método comprueba que las direcciones de correo electrónico tengan el formato "alguien@microsoft.com".
Utilice este código para validar la cadena antes de intentar utilizarla como una dirección de correo electrónico. Esto podría
evitar otros errores en tiempo de ejecución.
Vea también
Referencia
Regex
Conceptos del lenguaje Visual Basic

Cómo: Validar texto para su presentación en un explorador


Web en Visual Basic
Este ejemplo muestra cómo utilizar el método HtmlEncode para garantizar que un explorador muestra el texto correctamente.
Los caracteres de una cadena como <, > y & se representan incorrectamente a menos que se precedan de caracteres de escape
como &lt;, &gt; y &amp;.
Ejemplo
El ejemplo de código siguiente codifica una cadena que se va a mostrar en un explorador. Codifica la cadena denominada
TestString, que contiene el texto This is a <Test String>, y lo copia en la cadena denominada EncodedString como This
is a &lt;Test String&gt;.

Dim TestString As String = "This is a <Test String>"


Dim EncodedString As String = Server.HtmlEncode(TestString)

Este ejemplo requiere una referencia a System.Web.dll.


Vea también
Referencia
HtmlEncode
Otros recursos
Validar cadenas en Visual Basic
Conceptos del lenguaje Visual Basic

Utilizar expresiones regulares con el control MaskedTextBox en


Visual Basic
Este ejemplo muestra cómo convertir las expresiones regulares simples para trabajar con el control MaskedTextBox.
Descripción del idioma de enmascarado
El lenguaje de enmascarado estándar MaskedTextBox se basa en el usado por el control Masked Edit de Visual Basic 6.0 y
debe resultar familiar a los usuarios que migren desde esa plataforma.
La propiedad Mask del control MaskedTextBox especifica qué máscara de entrada se debe utilizar. La máscara debe ser una
cadena compuesta de uno o más de los elementos de enmascarado contenidos en la tabla siguiente.
Elemento de Descripción Elemento de ex
enmascarado presión regular
0 Cualquier dígito único comprendido entre 0 y 9. Entrada obligatoria. \d

9 Dígito o espacio. Entrada opcional. [ \d]?

# Dígito o espacio. Entrada opcional. Si esta posición es el espacio en blanco izquierdo de la m [ \d+-]?
áscara, se representará como un espacio. Se pueden usar signos más (+) y menos (-).

L Letra ASCII. Entrada obligatoria. [a-zA-Z]

? Letra ASCII. Entrada opcional. [a-zA-Z]?

& Character. Entrada obligatoria. [\p{Ll}\p{Lu}\p{Lt}


\p{Lm}\p{Lo}]

C Character. Entrada opcional. [\p{Ll}\p{Lu}\p{Lt}


\p{Lm}\p{Lo}]?

A Alfanumérico. Entrada opcional. \W

. Marcador de posición de decimales adecuado para la configuración regional. No disponible.

, Marcador de posición de separador de miles adecuado para la referencia cultural. No disponible.

: Separador de hora adecuado para la configuración regional. No disponible.

/ Separador de fecha adecuado para la configuración regional. No disponible.

$ Símbolo de moneda adecuado para la referencia cultural. No disponible.

< Convierte a minúsculas todos los caracteres siguientes. No disponible.

> Convierte a mayúsculas todos los caracteres siguientes. No disponible.

| Deshace un cambio anterior a mayúsculas o minúsculas. No disponible.

\ Es un escape para un carácter de máscara, convirtiéndolo en un literal. "\\" es la secuencia de \


escape para una barra diagonal inversa.
Todos los dem Literales. Todos los elementos no enmascarados aparecerán como tales dentro de MaskedT Todos los demás
ás caracteres. extBox. caracteres.

Los símbolos decimal (.), de miles (,), de hora (:), de fecha (/) y de moneda ($) toman como valor predeterminado los definidos
por la configuración regional y de referencia cultural de la aplicación. Puede forzarlos a que muestren los símbolos de otra
referencia cultural utilizando la propiedad FormatProvider.
Expresiones regulares y máscaras
Aunque puede utilizar expresiones regulares y máscaras para validar los datos proporcionados por el usuario, no son
completamente equivalentes. Las expresiones regulares pueden expresar modelos más complejos que los de las máscaras,
pero las máscaras pueden expresar más sucintamente la misma información y en un formato adecuado a las referencias
culturales.
La tabla siguiente compara cuatro expresiones regulares y la máscara equivalente a cada una.
Expresión Másc Notas
regular ara
\d{2}/\d{2 00/00 El carácter / de la máscara es un separador de fecha lógico, y se presentará al usuario como el separador d
}/\d{4} /0000
e fecha apropiado a las referencias culturales actuales de la aplicación.

\d{2}-[A-Z 00->L Una fecha (día, abreviatura del mes y año) en el formato de Estados Unidos, en el que se muestra la abrevia
][a-z]{2}- <LL-0
\d{4} 000 tura de los meses con tres letras con una letra mayúscula inicial seguida por dos letras en minúscula.

(\(\d{3}\) (999) Número de teléfono de Estados Unidos, con código de área opcional. Si el usuario no desea escribir los car
-)?\d{3}-d -000-
{4} 0000 acteres opcionales, puede escribir espacios o colocar el puntero del mouse directamente en la posición de l
a máscara representada por el primer 0.

$\d{6}.00 $999, Un valor de moneda comprendido entre 0 y 999999. Los caracteres de moneda, separadores de miles y se
999.0
0 paradores decimales se reemplazarán en tiempo de ejecución con sus equivalentes en la referencia cultural
.

Vea también
Referencia
Mask
MaskedTextBox
Otros recursos
Validar cadenas en Visual Basic
MaskedTextBox (Control, formularios Windows Forms)
Conceptos del lenguaje Visual Basic

Expresiones regulares y el operador Like


Este tema compara y contrasta el operador Like de Visual Basic y las expresiones regulares de .NET Framework.
Comparación de la sintaxis
La tabla siguiente compara la especificación del modelo de sintaxis del lenguaje para el operador Like con la sintaxis de las
expresiones regulares.
Sintaxis del operador Like Sintaxis de las expresiones regulares
El comportamiento del operador Like depende de Las expresiones regulares funcionan de la misma man
Option Compare (Instrucción). El método de comparación de cadenas era sin tener en cuenta Option Compare.
predeterminado para cada archivo de código fuente es Option Comp
are Binary.

Para hacer coincidir cualquier carácter individual de la lista charlist, util Para hacer coincidir cualquier carácter individual de la l
ice [charlist]. ista charlist, utilice [charlist].

Para hacer coincidir cualquier carácter individual no incluido en la lista Para hacer coincidir cualquier carácter individual no inc
charlist, utilice [!charlist]. luido en la lista charlist, utilice [^charlist].

Para hacer coincidir cualquier dígito único (0-9), utilice #. Para hacer coincidir cualquier dígito único (0-9), utilice
la clase de caracteres para los dígitos decimales, \d.

Para hacer coincidir cualquier carácter individual, utilice ?. Para hacer coincidir cualquier carácter individual, espec
ifique clases de caracteres mutuamente exclusivas para
charlist en [charlist]. Por ejemplo, [\s\S].

Para hacer coincidir cero o más caracteres, utilice *. Para hacer coincidir cero o más caracteres, especifique
clases de caracteres mutuamente exclusivas para charli
st en [charlist]*. Por ejemplo, [\s\S]*.

Para hacer coincidir un carácter especial con un char, inclúyalo entre c Para hacer coincidir un carácter especial char, coloque
orchetes: [char]. una barra diagonal inversa delante del mismo: \char.

Para hacer coincidir cualquier carácter incluido en un intervalo, utilice Para hacer coincidir cualquier carácter incluido en un i
un guión (–) para separar los límites inferior y superior del intervalo e ntervalo, utilice un guión (–) para separar los límites inf
n una lista charlist. erior y superior del intervalo en una lista charlist.

Vea también
Referencia
Like (Operador)
Otros recursos
Validar cadenas en Visual Basic
Expresiones regulares de .NET Framework
Conceptos del lenguaje Visual Basic

Tutorial: Comprobar la complejidad de las contraseñas (Visual


Basic)
Este método comprueba algunas características de contraseña segura y actualiza un parámetro de cadena con información
sobre qué comprobaciones no supera la contraseña.
Las contraseñas se pueden utilizar en un sistema seguro para autorizar a un usuario. Sin embargo, las contraseñas deben ser
difíciles de adivinar para los usuarios no autorizados. Los atacantes pueden utilizar un programa de ataque de diccionario, que
recorre en iteración todas las palabras de un diccionario (o varios diccionarios en distintos idiomas) y prueba si alguna de las
palabras funciona como contraseña de un usuario. Las contraseñas débiles como "Ferrari" o "Barcelona" se pueden averiguar
rápidamente. Hay muchas menos posibilidades de que se adivinen las contraseñas más fuertes, como "?
nUnKaseT'8oCurRir@mYcoNtrase_n_a3!". Un sistema protegido mediante contraseña debería garantizar que los usuarios
eligen contraseñas seguras.
Una contraseña segura es compleja (contiene una mezcla de mayúsculas, minúsculas, números y caracteres especiales) y no es
una palabra. Este ejemplo muestra cómo comprobar la complejidad.
Ejemplo
VB
''' <summary>Determines if a password is sufficiently complex.</summary>
''' <param name="pwd">Password to validate</param>
''' <param name="minLength">Minimum number of password characters.</param>
''' <param name="numUpper">Minimum number of uppercase characters.</param>
''' <param name="numLower">Minimum number of lowercase characters.</param>
''' <param name="numNumbers">Minimum number of numeric characters.</param>
''' <param name="numSpecial">Minimum number of special characters.</param>
''' <returns>True if the password is sufficiently complex.</returns>
Function ValidatePassword(ByVal pwd As String, _
Optional ByVal minLength As Integer = 8, _
Optional ByVal numUpper As Integer = 2, _
Optional ByVal numLower As Integer = 2, _
Optional ByVal numNumbers As Integer = 2, _
Optional ByVal numSpecial As Integer = 2) _
As Boolean

' Replace [A-Z] with \p{Lu}, to allow for Unicode uppercase letters.
Dim upper As New System.Text.RegularExpressions.Regex("[A-Z]")
Dim lower As New System.Text.RegularExpressions.Regex("[a-z]")
Dim number As New System.Text.RegularExpressions.Regex("[0-9]")
' Special is "none of the above".
Dim special As New System.Text.RegularExpressions.Regex("[^a-zA-Z0-9]")
' Check the length.
If Len(pwd) < minLength Then Return False
' Check for minimum number of occurrences.
If upper.Matches(pwd).Count < numUpper Then Return False
If lower.Matches(pwd).Count < numLower Then Return False
If number.Matches(pwd).Count < numNumbers Then Return False
If special.Matches(pwd).Count < numSpecial Then Return False
' Passed all checks.
Return True
End Function
Sub TestValidatePassword()
Dim password As String = "Password"
' Demonstrate that "Password" is not complex.
MsgBox(password & " is complex: " & ValidatePassword(password))
password = "Z9f%a>2kQ"
' Demonstrate that "Z9f%a>2kQ" is not complex.
MsgBox(password & " is complex: " & ValidatePassword(password))
End Sub
Compilar el código
Llame a este método pasando la cadena que contiene esa contraseña.
Para este ejemplo se necesita:
Acceso a los miembros del espacio de nombres System.Text.RegularExpressions. Agregue una instrucción Imports si no
incluye nombres de miembro completos en el código. Para obtener más información, vea Imports (Instrucción).
Seguridad
Si está moviendo la contraseña por una red, necesita utilizar un método seguro para transferir los datos. Para obtener más
información, vea Seguridad de aplicaciones Web ASP.NET.
Puede mejorar la exactitud de la función ValidatePassword agregando comprobaciones de complejidad adicionales:
Compare la contraseña y sus subcadenas con respecto al nombre del usuario, el identificador de usuario y un diccionario
definido por la aplicación. Además, trate los caracteres visualmente similares como equivalentes al realizar las
comparaciones. Por ejemplo, considere las letras "l" y "e" como equivalentes a los números "1" y "3".
Si hay sólo un carácter en mayúscula, asegúrese de que no es el primer carácter de la contraseña.
Asegúrese de que los últimos dos caracteres de la contraseña son caracteres de letra.
No permita contraseñas en las que todos los símbolos se escriben desde la fila superior del teclado.
Vea también
Referencia
Regex
Otros recursos
Seguridad de aplicaciones Web ASP.NET
Tutoriales para cadenas en Visual Basic
Conceptos del lenguaje Visual Basic

Buscar y reemplazar cadenas en Visual Basic


En esta sección se describe cómo utilizar la función de buscar y reemplazar para las cadenas en Visual Basic.
En esta sección
Cómo: Quitar secciones de una cadena (Visual Basic)
Quita todas las apariciones de una cadena de otra.
Cómo: Buscar una cadena en una matriz de cadenas (Visual Basic)
Obtiene el índice de la primera cadena en la matriz con la subcadena especificada y el índice de la subcadena en la cadena.
Cómo: Buscar en una cadena (Visual Basic)
Obtiene el índice de la primera aparición de una subcadena en una cadena.
Vea también
Conceptos
Tipos de métodos de manipulación de cadenas en Visual Basic
Otros recursos
Cadenas en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Buscar una cadena en una matriz de cadenas (Visual


Basic)
En este ejemplo se recorren las cadenas de una matriz de cadenas para determinar cuáles contienen la subcadena especificada.
Para cada coincidencia, el ejemplo muestra el índice de la subcadena en la cadena.
Ejemplo
El ejemplo siguiente utiliza los métodos Contains y IndexOf del objeto String.
El método Contains indica si la cadena contiene la subcadena especificada.
El método IndexOf informa de la ubicación del primer carácter de la primera aparición de la subcadena. El índice está basado
en 0, lo que significa que el primer carácter de una cadena tiene un índice de 0. Si IndexOf no encuentra la subcadena,
devuelve -1.
VB
Dim StrArray() As String = {"ABCDEFG", "HIJKLMNOP"}
Dim FindThisString As String = "JKL"
For Each Str As String In StrArray
If Str.Contains(FindThisString) Then
MsgBox("Found " & FindThisString & " at index " & _
Str.IndexOf(FindThisString))
End If
Next

Este ejemplo de código también está disponible como fragmento de código de IntelliSense. En el selector de fragmentos de
código, se encuentra en Tipos de datos - definidos por Visual Basic. Para obtener más información, vea
Cómo: Insertar fragmentos de código en el código (Visual Basic).
Compilar el código
Para este ejemplo se necesitan:
Una instrucción Imports que especifica el espacio de nombres System. Para obtener más información, vea
Imports (Instrucción).

Programación eficaz
El método IndexOf distingue entre mayúsculas y minúsculas, y utiliza la referencia cultural actual.
Para un control óptimo de errores, sería recomendable incluir la búsqueda de cadenas en el bloque Try de una construcción
Instrucción Try...Catch...Finally (Visual Basic).
Vea también
Tareas
Cómo: Buscar en una cadena (Visual Basic)
Referencia
Instrucción Try...Catch...Finally (Visual Basic)
IndexOf
Otros recursos
Introducción a las cadenas en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Buscar en una cadena (Visual Basic)


En este ejemplo se llama al método IndexOf de un objeto String para informar del índice de la primera aparición de una
subcadena.
Ejemplo
VB
Dim SearchWithinThis As String = "ABCDEFGHIJKLMNOP"
Dim SearchForThis As String = "DEF"
Dim FirstCharacter As Integer = SearchWithinThis.IndexOf(SearchForThis)

Este ejemplo de código también está disponible como fragmento de código de IntelliSense. En el selector de fragmentos de
código, se encuentra en Tipos de datos: definidos por Visual Basic. Para obtener más información, vea
Cómo: Insertar fragmentos de código en el código (Visual Basic).
Compilar el código
Para este ejemplo se necesitan:
Una instrucción Imports que especifica el espacio de nombres System. Para obtener más información, vea
Imports (Instrucción).
Programación eficaz
El método IndexOf informa de la ubicación del primer carácter de la primera aparición de la subcadena. El índice es de base 0,
lo que significa que el índice del primer carácter de una cadena es 0.
Si IndexOf no encuentra la subcadena, devuelve -1.
El método IndexOf distingue entre mayúsculas y minúsculas y utiliza la referencia cultural actual.
Para un control óptimo de errores, sería recomendable incluir la búsqueda de cadenas en el bloque Try de una construcción
Instrucción Try...Catch...Finally (Visual Basic).
Vea también
Referencia
Instrucción Try...Catch...Finally (Visual Basic)
IndexOf
Otros recursos
Introducción a las cadenas en Visual Basic
Buscar y reemplazar cadenas en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Quitar secciones de una cadena (Visual Basic)


El ejemplo de código siguiente quita todas las apariciones de una cadena de otra cadena.
Ejemplo
En este ejemplo se utiliza la función Replace para reemplazar cada aparición de la subcadena por una cadena vacía. El
resultado es una nueva cadena sin las subcadenas.
El ejemplo asigna el valor devuelto de la función Replace a la variable de cadena withoutParts. No se cambia la cadena
original, almacenada en withParts.
VB
Dim withParts As String = "Books and Chapters and Pages"
Dim withoutParts As String = Replace(withParts, "and ", "")

Compilar el código
Reemplace "Books and Chapters and Pages" con la cadena que desea manipular.

Vea también
Referencia
Replace (Función, Visual Basic)
String (Tipo de datos, Visual Basic)
Conceptos del lenguaje Visual Basic

Analizar cadenas en Visual Basic


En esta sección se trata el análisis de cadenas en Visual Basic.
En esta sección
Cómo: Analizar URI en Visual Basic
Muestra cómo utilizar la clase System.Uri para analizar un identificador uniforme de recursos (URI).
Cómo: Analizar direcciones de correo electrónico en Visual Basic
Muestra una expresión regular simple para analizar una dirección de correo electrónico.
Cómo: Identificar URI en una cadena en Visual Basic
Muestra cómo utilizar una expresión regular simple para identificar un identificador uniforme de recursos URI en una
cadena.
Cómo: Identificar texto en una cadena HTML en Visual Basic
Muestra cómo utilizar una expresión regular simple para quitar etiquetas de un documento HTML.
Cómo: Identificar hipervínculos en una cadena HTML en Visual Basic
Muestra una expresión regular simple para identificar hipervínculos en un documento HTML.
Vea también
Otros recursos
Cadenas en Visual Basic
Introducción a las cadenas en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Analizar URI en Visual Basic


Este ejemplo muestra cómo utilizar la clase System.Uri para analizar un identificador uniforme de recursos (URI).
Ejemplo
Este ejemplo utiliza varios métodos de un objeto Uri para obtener información sobre un identificador uniforme de recursos
(URI).

Dim uriString As String = "http://www.contoso.com/index.htm?date=today"


Dim uriObject As New Uri(uriString)
' Display "Scheme: http"
MsgBox("Scheme: " & uriObject.Scheme)
' Display "Host: www.contoso.com"
MsgBox("Host: " & uriObject.Host)
' Display "Local path: /index.htm"
MsgBox("Local path: " & uriObject.LocalPath)
' Display "Query: ?date=today"
MsgBox("Query: " & uriObject.Query)

Vea también
Referencia
Uri
Otros recursos
Analizar cadenas en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Analizar direcciones de correo electrónico en Visual


Basic
Este ejemplo muestra una expresión regular simple para analizar una dirección de correo electrónico.
Ejemplo
Este ejemplo utiliza la expresión regular (\S+)@([^\.\s]+)(?:\.([^\.\s]+))+, que quiere decir:
1. Conjunto de uno o más caracteres distintos del espacio en blanco (capturados), seguido
2. del carácter "@", seguido
3. Conjunto de uno o más caracteres distintos del espacio en blanco (capturados), seguido de
4. Uno o más de los siguientes elementos:
a. El carácter ".", seguido de
b. Un conjunto de uno o más caracteres distintos del espacio en blanco (capturados).
El método Match de la expresión regular devuelve un objeto Match que contiene información sobre con qué parte de la cadena
de entrada coincide la expresión regular.

''' <summary>
''' Parses an e-mail address into its parts.
''' </summary>
''' <param name="emailString">E-mail address to parse.</param>
''' <remarks> For example, this method displays the following
''' text when called with "someone@mail.contoso.com":
''' User name: someone
''' Address part: mail
''' Address part: contoso
''' Address part: com
''' </remarks>
Sub ParseEmailAddress(ByVal emailString As String)
Dim emailRegEx As New Regex("(\S+)@([^\.\s]+)(?:\.([^\.\s]+))+")
Dim m As Match = emailRegEx.Match(emailString)
If m.Success Then
Dim output As String = ""
output &= "User name: " & m.Groups(1).Value & vbCrLf
For i As Integer = 2 To m.Groups.Count - 1
Dim g As Group = m.Groups(i)
For Each c As Capture In g.Captures
output &= "Address part: " & c.Value & vbCrLf
Next
Next
MsgBox(output)
Else
MsgBox("The e-mail address cannot be parsed.")
End If
End Sub

Este ejemplo requiere que utilice la instrucción Imports para importar el espacio de nombres System.Text.RegularExpressions.
Para obtener más información, vea Imports (Instrucción).
Vea también
Tareas
Cómo: Comprobar si las cadenas tienen un formato de correo electrónico válido
Otros recursos
Analizar cadenas en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Identificar URI en una cadena en Visual Basic


Este ejemplo muestra cómo utilizar una expresión regular simple para identificar un identificador uniforme de recursos URI en
una cadena. Para reducir el número de falsos positivos (texto identificado incorrectamente como URI), se supone un formato
URI específico. Esto significa que habrá algunos falsos negativos, donde no se identifican los identificadores uniforme de
recursos (URI) válidos.
Ejemplo
Un formulario concreto de URI puede coincidir con la expresión regular ([^=":\s]+:)?//[^\s"]+, lo que supone:
1. Aparición opcional de:
a. Conjunto de uno o más caracteres que no son =, ": o un carácter de espacio en blanco, seguido por
b. El carácter :, seguido por
2. La cadena //, seguida por
3. Conjunto de uno o más caracteres que no son comillas o caracteres de espacio en blanco.
El objeto Regex se inicializa con la expresión regular.
El método Matches del objeto Regex devuelve un objeto MatchCollection que contiene información sobre todas las partes de
la cadena de entrada con las que coincide la expresión regular.

''' <summary>Identifies URIs in text.</summary>


''' <param name="text">Text to parse.</param>
''' <remarks>Displays each URI in the input text.</remarks>
Sub IdentifyURIs(ByVal text As String)
Dim uriRegex As New Regex("([^="":\s]+:)?//[^\s""]+")
Dim output As String = ""
For Each m As Match In uriRegex.Matches(text)
output &= m.Value & vbCrLf
Next
MsgBox(output)
End Sub

Este ejemplo requiere que utilice la instrucción Imports para importar el espacio de nombres System.Text.RegularExpressions.
Para obtener más información, vea Imports (Instrucción).
Vea también
Tareas
Cómo: Identificar hipervínculos en una cadena HTML en Visual Basic
Cómo: Quitar caracteres no válidos de una cadena
Otros recursos
Analizar cadenas en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Identificar texto en una cadena HTML en Visual Basic


En este ejemplo se muestra cómo utilizar una expresión regular simple para quitar las etiquetas de un documento HTML.
Ejemplo
Las etiquetas HTML se pueden buscar con la expresión regular \<[^\>]+\>, que significa:
1. El carácter "<", seguido de
2. Un conjunto de uno o más caracteres, no incluido el carácter ">", seguido de
3. El carácter ">".
En este ejemplo se utiliza el método
System.Text.RegularExpressions.Regex.Replace(System.String,System.String,System.String) compartido para reemplazar todas
las coincidencias de la expresión regular de etiqueta con la cadena vacía.

''' <summary>Removes the tags from an HTML document.</summary>


''' <param name="htmlText">HTML text to parse.</param>
''' <returns>The text of an HTML document without tags.</returns>
''' <remarks></remarks>
Function GetTextFromHtml(ByVal htmlText As String) As String
Dim output As String = Regex.Replace(htmlText, "\<[^\>]+\>", "")
Return output
End Function

Este ejemplo requiere que se utilice la instrucción Imports para importar el espacio de nombres
System.Text.RegularExpressions. Para obtener más información, vea Imports (Instrucción).
Vea también
Tareas
Cómo: Identificar hipervínculos en una cadena HTML en Visual Basic
Cómo: Quitar caracteres no válidos de una cadena
Otros recursos
Analizar cadenas en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Identificar hipervínculos en una cadena HTML en Visual


Basic
Este ejemplo muestra una expresión regular simple para identificar los hipervínculos en un documento HTML.
Ejemplo
Este ejemplo utiliza la expresión regular <A[^>]*?HREF\s*=\s*"([^"]+)"[^>]*?>([\s\S]*?)<\/A>, que quiere decir:
1. La cadena"<A", seguida de
2. El menor conjunto de cero o más caracteres que no incluye el carácter">", seguido por
3. La cadena"HREF", seguida de
4. Cero o más caracteres de espacio en blanco, seguidos por
5. El carácter "=", seguido de
6. Cero o más caracteres de espacio en blanco, seguidos por
7. El carácter de comilla, seguido de
8. El conjunto de caracteres que no incluyen el carácter de la comilla (capturado), seguido por
9. El carácter de comilla, seguido de
10. El menor conjunto de cero o más caracteres que no incluye el carácter">", seguido por
11. El carácter ">", seguido de
12. El conjunto más pequeño de cero o más caracteres (capturados), seguido por
13. La cadena"</A>".
El objeto Regex se inicializa con la expresión regular, especificando que no se distinga entre mayúsculas y minúsculas.
El método Matches del objeto Regex devuelve un objeto MatchCollection que contiene información sobre todas las partes de
la cadena de entrada que hace coincidir la expresión regular.

''' <summary>Identifies hyperlinks in HTML text.</summary>


''' <param name="htmlText">HTML text to parse.</param>
''' <remarks>This method displays the label and destination for
''' each link in the input text.</remarks>
Sub IdentifyLinks(ByVal htmlText As String)
Dim hrefRegex As New Regex( _
"<A[^>]*?HREF\s*=\s*""([^""]+)""[^>]*?>([\s\S]*?)<\/A>", _
RegexOptions.IgnoreCase)
Dim output As String = ""
For Each m As Match In hrefRegex.Matches(htmlText)
output &= "Link label: " & m.Groups(2).Value & vbCrLf
output &= "Link destination: " & m.Groups(1).Value & vbCrLf
Next
MsgBox(output)
End Sub

Este ejemplo requiere que utilice la instrucción Imports para importar el espacio de nombres System.Text.RegularExpressions.
Para obtener más información, vea Imports (Instrucción).
Vea también
Conceptos
Ejemplo: Buscar etiquetas HREF
Otros recursos
Analizar cadenas en Visual Basic
Conceptos del lenguaje Visual Basic

Solucionar problemas de cadenas en Visual Basic


En esta sección se proporcionan consejos sobre cómo solucionar problemas de la manipulación de cadenas de caracteres en
Visual Basic.
En esta sección
Solucionar problemas de expresiones regulares en Visual Basic
Muestra temas que describen los conceptos básicos que subyacen en el uso de cadenas en Visual Basic.
Secciones relacionadas
Nothing y cadenas en Visual Basic
Explica cómo Visual Basic en tiempo de ejecución y .NET Framework evalúan Nothing de manera diferente cuando se trata
de cadenas.
Cómo afecta la referencia cultural a las cadenas en Visual Basic
Discute cómo utiliza Visual Basic información de referencia cultural para realizar conversiones de cadenas y comparaciones.
Acceso de base cero y de base uno a a cadenas en Visual Basic
Compara cómo proporcionan acceso Visual Basic y .NET Framework a los caracteres de una cadena.
Vea también
Otros recursos
Cadenas en Visual Basic
Tutoriales para cadenas en Visual Basic
Introducción a las cadenas en Visual Basic
Conceptos del lenguaje Visual Basic

Solucionar problemas de expresiones regulares en Visual Basic


En este tema se tratan algunos problemas habituales que se pueden producir al trabajar con expresiones regulares, se
proporcionan algunas sugerencias para solucionar estos problemas y se proporciona un procedimiento para obtener acceso a
cadenas capturadas.
Sin coincidencia con el patrón esperado
A continuación se indican algunas tareas comunes que puede realizar con expresiones regulares, así como sugerencias para
solucionar problemas si no obtiene los resultados que espera:
Validación de las cadenas. Una expresión regular de validación de cadenas debe comenzar con el carácter ^. Esto
indica al motor de la expresión regular que inicie la concordancia con el patrón especificado en el inicio de la cadena.
Para obtener más información, vea Crear una función de validación en Visual Basic y Aserciones atómicas de ancho cero.
Coincidencia con cuantificadores. Los cuantificadores de expresión regular (*, +, ?, {}) son expansivos, es decir,
coinciden con la cadena más larga posible. Sin embargo, en algunos patrones puede preferir utilizar una coincidencia no
expansiva para obtener la cadena más corta posible. Los cuantificadores de expresión regular no expansivos son *?, +?,
?? y {}?. Para obtener más información, vea Cuantificadores.
Coincidencia con cuantificadores anidados. Cuando utilice cuantificadores anidados, debe asegurarse de que todos
los cuantificadores son expansivos o no expansivos. De lo contrario, los resultados de la coincidencia serán difíciles de
predecir.
Acceso a cadenas capturadas
Cuando una expresión regular localiza las cadenas esperadas, puede desear capturar esas cadenas y a continuación, tener
acceso a lo capturado. Puede utilizar estructuras de agrupación para capturar las cadenas que coinciden con grupos de
subexpresiones de la expresión regular. Para obtener más información, vea Construcciones de agrupamiento.
El acceso a cadenas capturadas con grupos anidados implica varios pasos.
Para tener acceso a texto capturado
1. Cree un objeto Regex para una expresión regular.
2. Llame al método Match para obtener el objeto Match.
El objeto Match contiene información sobre cómo la expresión regular coincide con la cadena.
3. Recorra en iteración los objetos Group almacenados en la colección Groups del objeto Match.
El objeto Group contiene información sobre el resultado de un único grupo de capturas.
4. Recorra en iteración los objetos Capture almacenados en la colección Captures de cada objeto Group.
Cada objeto Capture contiene información sobre una única subexpresión capturada, incluida la subcadena coincidente y
la ubicación.
Por ejemplo, el código siguiente muestra cómo tener acceso a las cadenas capturadas con una expresión regular que contiene
tres grupos de captura:

''' <summary>
''' Parses an e-mail address into its parts.
''' </summary>
''' <param name="emailString">E-mail address to parse.</param>
''' <remarks> For example, this method displays the following
''' text when called with "someone@mail.contoso.com":
''' User name: someone
''' Address part: mail
''' Address part: contoso
''' Address part: com
''' </remarks>
Sub ParseEmailAddress(ByVal emailString As String)
Dim emailRegEx As New Regex("(\S+)@([^\.\s]+)(?:\.([^\.\s]+))+")
Dim m As Match = emailRegEx.Match(emailString)
If m.Success Then
Dim output As String = ""
output &= "User name: " & m.Groups(1).Value & vbCrLf
For i As Integer = 2 To m.Groups.Count - 1
Dim g As Group = m.Groups(i)
For Each c As Capture In g.Captures
output &= "Address part: " & c.Value & vbCrLf
Next
Next
MsgBox(output)
Else
MsgBox("The e-mail address cannot be parsed.")
End If
End Sub

Vea también
Tareas
Solucionar problemas de cadenas en Visual Basic
Conceptos
Crear una función de validación en Visual Basic
Conceptos del lenguaje Visual Basic

Constantes y enumeraciones en Visual Basic


Las constantes son una forma de utilizar nombres significativos en lugar de valores que no se modifican. Las constantes
almacenan valores que, como su nombre indica, permanecen constantes durante la ejecución de una aplicación. Puede utilizar
constantes para hacer más legible el código, puesto que se utilizan nombres significativos en lugar de números.
Las enumeraciones proporcionan una forma cómoda de trabajar con conjuntos de constantes relacionadas y de asociar
valores de constantes con nombres. Por ejemplo, se puede declarar una enumeración para un conjunto de constantes de tipo
entero asociadas con los días de la semana, y después utilizar los nombres de los días en el código en lugar de sus valores
enteros.
En esta sección
Constantes de Visual Basic
Los temas de esta sección describen constantes y sus usos.
Información general sobre las enumeraciones
Los temas de esta sección describen enumeraciones y sus usos.
Constantes y enumeraciones intrínsecas
Explica las constantes y enumeraciones que proporciona Visual Basic 2005.
Secciones relacionadas
Instrucción Const (Visual Basic)
Proporciona las reglas de sintaxis y utilización de la instrucción Const, necesaria para declarar constantes.
Instrucción Enum (Visual Basic)
Proporciona las reglas de sintaxis y utilización de la instrucción Enum, necesaria para crear enumeraciones.
Instrucción Option Explicit (Visual Basic)
Proporciona las reglas de sintaxis y utilización de la instrucción Option Explicit, que se utiliza en el nivel de módulo para
exigir la declaración explícita de todas las variables de dicho módulo.
Option Strict (Instrucción)
Proporciona las reglas de sintaxis y utilización de la instrucción Option Strict, que restringe las conversiones de tipos de
datos implícitos a conversiones de ampliación únicamente.
Conceptos del lenguaje Visual Basic

Constantes de Visual Basic


Las constantes almacenan valores que, como su nombre indica, permanecen constantes durante la ejecución de una aplicación.
Utilice las constantes de su código para valores que se utilizan repetidamente o para facilitar la lectura del código.
En esta sección
Información general sobre las constantes
Define las constantes, y describe cuándo y dónde se utilizan.
Constantes declaradas por Visual Basic
Muestra las constantes predefinidas por Visual Basic.
Cómo: Declarar una constante
Explica cómo utilizar la instrucción Const para declarar una constante y establecer su valor; al declarar una constante, asigna
un nombre significativo al valor.
Constantes definidas por el usuario
Describe la manera de crear sus propias constantes, información sobre ámbito y sobre cómo evitar las referencias circulares.
Tipos de datos constantes y literales
Proporciona información sobre cómo inicializa las constantes el compilador de Visual Basic cuando se desactiva Option
Explicit.
Cómo: Agrupar valores de constantes relacionadas
Muestra cómo se agrupan valores de constantes que están relacionados.
Referencia
Instrucción Const (Visual Basic)
Describe la instrucción Const y su uso.
Option Strict (Instrucción)
Describe la instrucción Option Strict y su uso.
Secciones relacionadas
Información general sobre las enumeraciones
Explica las enumeraciones y su uso, incluidas las tareas comunes que implican enumeraciones.
Constantes de impresión y presentación
Lista las constantes de impresión y presentación predefinidas por Visual Basic.
Constantes y enumeraciones intrínsecas
Explica las constantes y enumeraciones que proporciona Visual Basic.
Constantes y enumeraciones en Visual Basic
Cambios de constantes y enumeraciones en la última versión de Visual Basic.
Conceptos del lenguaje Visual Basic

Información general sobre las constantes


Una constante es un nombre significativo que toma el lugar de un número o cadena que no cambia. Las constantes almacenan
valores que, como su nombre indica, permanecen iguales durante la ejecución de una aplicación. Puede mejorar
considerablemente la legibilidad del código y facilitar su mantenimiento mediante constantes. Utilícelas en código que
contiene valores que reaparecen o que dependen de ciertos números que son difíciles de recordar o que no tienen un
significado evidente.
Cómo crear y utilizar constantes
Visual Basic contiene varias constantes predefinidas, que se utilizan principalmente para imprimir y mostrar. Puede crear
también sus propias constantes con la instrucción Const, utilizando las mismas directrices que en la creación de nombres de
variables. Si Option Strict es On, debe declarar el tipo de constante explícitamente.
El ámbito de una constante, que es el conjunto de todo el código que puede hacer referencia a ella sin calificar su nombre, es
igual al de una variable declarada en la misma ubicación. Para crear una constante que exista en el ámbito de un
procedimiento concreto, declárela dentro de dicho procedimiento. Para crear una constante disponible en toda la aplicación,
declárela con la palabra clave Public en la sección de declaraciones de la clase.
Nota
Aunque las constantes son de algún modo similares a las variables, no se pueden modificar ni asignárseles valores como a é
stas últimas.

Las constantes que se utilizan en el código pueden ser definidas por el modelo de objeto para los controles o componentes
con los que trabaja o definidas por el usuario, es decir, creadas por éste.
Constantes en tiempo de compilación y en tiempo de ejecución
Una constante en tiempo de compilación se calcula cuando se compila el código, mientras que una constante en tiempo de
ejecución sólo se puede calcular mientras la aplicación está en ejecución. Una constante en tiempo de compilación tendrá el
mismo valor cada vez que se ejecuta una aplicación, mientras que una constante en tiempo de ejecución puede cambiar cada
vez. Las constantes en tiempo de compilación se requieren para casos como límites de matriz, expresiones de caso o
inicializadores de enumerador.
Vea también
Tareas
Cómo: Declarar una constante
Referencia
Instrucción Const (Visual Basic)
Public (Visual Basic)
Conceptos
Tipos de datos constantes y literales
Constantes declaradas por Visual Basic
Otros recursos
Constantes y enumeraciones (Visual Basic)
Constantes de Visual Basic
Conceptos del lenguaje Visual Basic

Constantes declaradas por Visual Basic


Visual Basic proporciona varias constantes predefinidas a los desarrolladores para utilizarlas en la compilación condicional, así
como para imprimir y mostrar datos.
Constantes de compilación condicional
La tabla siguiente lista las constantes predefinidas disponibles para la compilación condicional.
Co Descripción
ns
ta
nt
e
C Una cadena que corresponde a la configuración actual del cuadro Configuración de soluciones activas en el Administr
O ador de configuración.
NF
IG

DE Un valor Boolean que se puede establecer en el cuadro de diálogo Propiedades del proyecto. De manera predetermina
B da, la configuración de depuración para un proyecto define DEBUG. Si está definido DEBUG, los métodos de la clase
U Debug generan resultados en la ventana Resultados. Si no está definido, los métodos de la clase Debug no se compilan y
G no se generan resultados de depuración.

TA Una cadena que representa el tipo de resultado para el proyecto o la configuración de la opción /target de la línea de com
RG andos. Los posibles valores de TARGET son:
ET
"winexe" para una aplicación para Windows.
"exe" para una aplicación de la consola.
"library" para una biblioteca de clases.
"module" para un módulo.
La opción /target se puede establecer en el entorno de desarrollo integrado de Visual Studio. Para obtener más infor
mación, consulte /target (Visual Basic).

TR Un valor Boolean que se puede establecer en el cuadro de diálogo Propiedades del proyecto. De manera predetermina
AC da, todas las configuraciones para un proyecto definen TRACE. Si está definido TRACE, los métodos de la clase Trace gener
E an resultados en la ventana Resultados. Si no está definido, los métodos de la clase Trace no se compilan y no se generan
resultados Trace.

VB Un número que representa la versión de Visual Basic, en formato major.minor. El número de versión para Visual Basic 200
C_ 5 es 8.0.
VE
R

Constantes de impresión y presentación


Cuando se llama a funciones de impresión y presentación, se pueden utilizar las siguientes constantes en el código en lugar de
los valores reales.
Constante Descripción
vbCrLf Combinación de caracteres de retorno de carro/avance de línea.

vbCr Carácter de retorno de carro.

vbLf Carácter de avance de línea.


vbNewLine Carácter de nueva línea.

vbNullChar Carácter que tiene el valor 0.

vbNullString No es lo mismo que una cadena de longitud cero (""). Se utiliza para llamar a procedimientos externos.

vbObjectErro Número de error. Los números de error definidos por el usuario deberían ser mayores que este valor. Por ejem
r plo:
Err.Raise(Number) = vbObjectError + 1000

vbTab Carácter de tabulador.

vbBack Carácter de retroceso.

vbFormFeed No se utiliza en Microsoft Windows.

vbVerticalTa No es útil en Microsoft Windows.


b

Vea también
Tareas
Cómo: Declarar una constante
Conceptos
Enumeraciones declaradas por Visual Basic
Información general sobre las constantes
Constantes definidas por el usuario
Tipos de datos constantes y literales
Conceptos del lenguaje Visual Basic

Cómo: Declarar una constante


La instrucción Const se utiliza para declarar una constante y establecer su valor. Al declarar una constante, puede asignar un
nombre significativo a un valor. Una vez que se declara una constante, no se puede modificar ni se le puede asignar un nuevo
valor.
Una constante puede declararse dentro de un procedimiento o en la sección de declaraciones de un módulo, clase o estructura.
Las constantes de clase o nivel de estructura son de manera predeterminada Private pero también se pueden declarar como
Public, Friend, Protected o Protected Friend para el nivel de acceso al código adecuado.
La constante debe tener un nombre simbólico válido (las reglas son las mismas que se aplican para la creación de nombres de
variables) y una expresión que se componga de constantes numéricas o de cadena, y operadores; no obstante, no se pueden
utilizar llamadas a funciones.
Nota
Las opciones disponibles en los cuadros de diálogo, y los nombres y ubicaciones de los comandos de menú que se ven podrí
an diferir de lo que se describe en la Ayuda, en función de los valores de configuración o de edición activos. Esta página de A
yuda se ha redactado teniendo en cuenta la Configuración general de desarrollo. Para cambiar la configuración, elija Imp
ortar y exportar configuraciones en el menú Herramientas. Para obtener más información, consulte
Valores de configuración de Visual Studio.

Para declarar una constante


Escriba una declaración que incluya un especificador de acceso, la palabra clave Const y una expresión, como en los
ejemplos siguientes:
VB
Public Const DaysInYear = 365
Private Const WorkDays = 250

Cuando Option Strict es On, debe declarar una constante explícitamente especificando un tipo de datos (Boolean, Byte,
Char, DateTime, Decimal, Double, Integer, Long, Short, Single o String). Cuando Option Strict es Off, el
compilador asigna a la constante un tipo de datos. Para obtener más información, consulte
Tipos de datos constantes y literales.
Para declarar una constante con Option Strict On
Con Option Strict On, escriba una declaración que incluya la palabra clave As y un tipo de datos explícito, como en los
ejemplos siguientes:
VB
Public Const MyInteger As Integer = 42
Private Const DaysInWeek As Short = 7
Protected Friend Const Funday As String = "Sunday"

Pueden declararse varias constantes en una sola línea, si bien para facilitar la lectura del código se recomienda declarar
solamente una constante por línea. Si declara varias constantes en una línea única, deben tener todas ellas el mismo nivel
de acceso (Public, Private, Friend, Protected o Protected Friend).
Para declarar varias constantes en una sola línea
Separe las declaraciones con una coma y un espacio, como en el ejemplo siguiente:

Public Const Four As Integer = 4, Five As Integer = 5, Six As Integer = 44


Vea también
Tareas
Cómo: Declarar enumeraciones
Referencia
Instrucción Const (Visual Basic)
Option Strict (Instrucción)
Conceptos
Tipos de datos constantes y literales
Información general sobre las enumeraciones
Información general sobre las constantes
Enumeraciones y calificación de nombres
Constantes y enumeraciones intrínsecas
Otros recursos
Constantes y enumeraciones en Visual Basic
Conceptos del lenguaje Visual Basic

Constantes definidas por el usuario


Una constante es un nombre significativo que toma el lugar de un número o cadena que no cambia. Las constantes almacenan
valores que, como su nombre indica, permanecen constantes durante la ejecución de una aplicación. Puede utilizar constantes
definidas por los controles o componentes con los que trabaja o puede crear sus propias constantes. Las constantes que crea el
usuario se denominan definidas por el usuario.
Las constantes se declaran con la instrucción Const, utilizando las mismas directrices que en la creación de nombres de
variables. Si Option Strict es On, debe declarar el tipo de constante explícitamente.
Utilización de la instrucción Const
Una instrucción Const puede representar una cantidad matemática o fecha y hora:
VB
Const conPi = 3.14159265358979
Public Const conMaxPlanets As Integer = 9
Const conReleaseDate = #1/1/1995#

También puede definir constantes String:


VB
Public Const conVersion = "07.10.A"
Const conCodeName = "Enigma"

La expresión a la derecha del signo igual (=) suele ser un número o una cadena de literal, pero también puede ser una
expresión que da como resultado un número o una cadena (si bien dicha expresión no puede contener llamadas a funciones).
Incluso pueden definirse constantes en términos de constantes definidas anteriormente:
VB
Const conPi2 = conPi * 2

Ámbito de las constantes definidas por el usuario


El ámbito de la instrucción Const es el mismo que el de una variable declarada en la misma ubicación. Puede especificar el
ámbito de cualquiera de las siguientes maneras:
Para crear una constante que exista sólo dentro de un procedimiento concreto, declárela dentro de dicho procedimiento.
Para crear una constante disponible para todos los procedimientos de una clase, pero no para código fuera de ese
módulo, declárela en la sección de declaraciones de la clase.
Para crear una constante que esté disponible para todos los miembros de un ensamblado, pero no para clientes fuera del
ensamblado, declárela mediante la palabra clave Friend en la sección de declaraciones de la clase.
Para crear una constante disponible en toda la aplicación, declárela con la palabra clave Public en la sección de
declaraciones de la clase.
Para obtener más información, consulte Cómo: Declarar una constante.
Evitar referencias circulares
Puesto que las constantes pueden definirse en función de otras constantes, puede ocurrir que sin darse cuenta cree un ciclo o
referencia circular involuntariamente, entre dos o más constantes. Un ciclo se produce cuando hay dos o más constantes
públicas, cada una definida basándose en la otra, como en este ejemplo:
VB
Public Const conA = conB * 2
... Public Const conB = conA / 2
Si se produce un ciclo, Visual Basic genera un error del compilador.
Vea también
Tareas
Cómo: Declarar enumeraciones
Referencia
Instrucción Const (Visual Basic)
Option Strict (Instrucción)
Conceptos
Tipos de datos constantes y literales
Información general sobre las enumeraciones
Información general sobre las constantes
Enumeraciones y calificación de nombres
Constantes y enumeraciones intrínsecas
Información general sobre las constantes
Otros recursos
Constantes y enumeraciones en Visual Basic
Conceptos del lenguaje Visual Basic

Tipos de datos constantes y literales


Un literal es un valor que se expresa a sí mismo en lugar de a un valor de variable o el resultado de una expresión, como el
número 3 o la cadena "Hello". Una constante es un nombre descriptivo que sustituye a un literal y retiene este mismo valor a
lo largo del programa, lo que se opone a una variable cuyo valor puede cambiar.
Cuando Option Strict es On, debe declarar todas las constantes explícitamente con un tipo de datos. En el siguiente ejemplo,
el tipo de datos de MyByte se declara explícitamente como tipo de datos Byte:

Option Strict On
Public Const MyByte As Byte = 2

La declaración explícita de los tipos de datos es inequívoca, y el código con tipo es más fácil de leer y mantener. No obstante, si
Option Strict es Off, el compilador utiliza el tipo de la expresión que se usa para inicializar la constante. Un literal entero
numérico se convierte a tipo de datos Integer de manera predeterminada. El tipo de datos predeterminado para números de
punto flotante es Double, y las palabras clave True y False especifican una constante de tipo Boolean.
Literales y conversión de tipos
En algunos casos, puede que sea conveniente forzar un literal a un tipo de datos concreto, por ejemplo, al asignar un valor
literal integral de gran tamaño a una variable de tipo Decimal. El siguiente ejemplo produce un error:

Dim myDecimal as Decimal


myDecimal = 100000000000000000000 ' This causes a compiler error.

El error tiene su origen en la representación del literal. El tipo de datos Decimal puede contener un valor de este tamaño. Sin
embargo, el literal se representa implícitamente como Long, lo que no es posible.
Se puede forzar la conversión de un literal a un tipo de datos concreto de dos maneras: agregándole un carácter de tipo o
encerrándolo entre caracteres de inclusión. El carácter de tipo o los caracteres de inclusión deben ir justo antes o a
continuación del literal, sin ningún espacio o caracteres intermedios.
Para que funcione el ejemplo anterior, se anexa el carácter de tipo D al literal para que sea representado como un Decimal:

MyDecimal = 100000000000000000000D

En el ejemplo siguiente se muestra la utilización correcta de los caracteres de tipo y de inclusión:

Option Strict Off


Public Const DefaultInteger = 100 ' Default is Integer.
Public Const DefaultDouble = 54.3345612 ' Default is Double.
Public Const MyCharacter = "a"C ' Forces constant to be a Char type.
Public Const MyDate = #01/15/01# ' Demonstrates DateTime constants.
Public Const MyTime = #1:15:59 AM#
Public Const MyLong = 45L ' Forces data type to be a Long.
Public Const MySingle = 45.55! ' Forces data type to be a Single.

En la siguiente tabla se muestran los caracteres de inclusión y los caracteres de tipo disponibles en Visual Basic.
Tipo de datos Carácter de inclusión Carácter de tipo anexado
Boolean (ninguno) (ninguno)

Byte (ninguno) (ninguno)

Char " C

Date # (ninguno)
Decimal (ninguno) Do@

Double (ninguno) Ro#

Integer (ninguno) Io%

Long (ninguno) Lo&

Short (ninguno) S

Single (ninguno) Fo!

String " (ninguno)

Vea también
Tareas
Cómo: Declarar una constante
Cómo: Declarar enumeraciones
Referencia
Option Strict (Instrucción)
Instrucción Option Explicit (Visual Basic)
Resumen de tipos de datos (Visual Basic)
Conceptos
Constantes definidas por el usuario
Información general sobre las constantes
Información general sobre las enumeraciones
Enumeraciones y calificación de nombres
Constantes y enumeraciones intrínsecas
Conceptos del lenguaje Visual Basic

Cómo: Agrupar valores de constantes relacionadas


Una enumeración es la manera mejor de agrupar las constantes relacionadas. Una enumeración se crea con la instrucción
Enum en la sección de declaraciones de una clase o módulo. Para obtener más información, consulte
Cómo: Declarar enumeraciones.
Para agrupar los valores de constantes relacionadas
1. Escriba una declaración que incluya un nivel de acceso a código, la palabra clave Enum y un nombre válido. Este ejemplo
crea los valores temperatureValues de la enumeración Private.
VB
Private Enum temperatureValues

2. Defina las constantes en la enumeración. Este ejemplo crea los valores temperatureValues de la enumeración Public y
asigna sus valores.
VB
Public Enum temperatureValues
Scorching
Hot
Lukewarm
Cool
Cold
End Enum

Vea también
Tareas
Cómo: Hacer referencia al miembro de una enumeración
Conceptos
Enumeraciones y calificación de nombres
Cuándo se debe utilizar una enumeración
Constantes y enumeraciones intrínsecas
Información general sobre las constantes
Tipos de datos constantes y literales
Conceptos del lenguaje Visual Basic

Información general sobre las enumeraciones


Las enumeraciones proporcionan una forma cómoda de trabajar con conjuntos de constantes relacionadas y de asociar
valores de constantes con nombres. Por ejemplo, se puede declarar una enumeración para un conjunto de constantes de tipo
entero asociadas con los días de la semana, y después utilizar los nombres de los días en el código en lugar de sus valores
enteros.
Tareas que implican enumeraciones
La tabla siguiente lista tareas comunes que implican enumeraciones.
Para esto Vea
Encuentre una enumeración predefinida Enumeraciones declaradas por Visual Basic

Declare una enumeración Cómo: Declarar enumeraciones

Asigne un nombre completo a una enumeración Enumeraciones y calificación de nombres

Haga referencia a un miembro de una enumeración Cómo: Hacer referencia al miembro de una enumeración

Recorra en iteración una enumeración Cómo: Recorrer en iteración una enumeración en Visual Basic

Determine la cadena asociada a una enumeración Cómo: Determinar la cadena asociada a un valor de enumeración

Decida cuándo utilizar una enumeración Cuándo se debe utilizar una enumeración

Vea también
Tareas
Cómo: Declarar una constante
Referencia
Instrucción Enum (Visual Basic)
Conceptos
Información general sobre las constantes
Constantes definidas por el usuario
Tipos de datos constantes y literales
Constantes y enumeraciones intrínsecas
Conceptos del lenguaje Visual Basic

Enumeraciones declaradas por Visual Basic


Las enumeraciones proporcionan una forma cómoda de trabajar con conjuntos de constantes relacionadas y de asociar
valores de constantes con nombres. Visual Basic proporciona algunas enumeraciones útiles.
Enumeraciones predefinidas
La tabla siguiente lista y describe las enumeraciones proporcionadas en Visual Basic.
Enumeración Descripción
AppWinStyle (Enumeración) Indica el estilo de ventana que se va a utilizar para el programa invocado al llamar a la f
unción Shell.

AudioPlayMode (Enumeración) Indica cómo reproducir sonidos al llamar a los métodos de audio.

BuiltInRole (Enumeración) Indica el tipo de función que se debe comprobar cuando se llama a
My.User.IsInRole (Método).

CallType (Enumeración) Indica el tipo de procedimiento que se debe invocar al llamar a la función CallByName.

CompareMethod (Enumeración) Indica cómo comparar las cadenas cuando se llama a las funciones de comparación.

DateFormat (Enumeración) Indica cómo se muestran las fechas al llamar a la función FormatDateTime.

DateInterval (Enumeración) Indica cómo determinar y dar formato a los intervalos de fecha al llamar a las funciones
relacionadas con fechas.

DeleteDirectoryOption (Enumeración) Especifica qué se hace cuando un directorio que se va a borrar contiene archivos o direc
torios.

DueDate (Enumeración) Indica cuándo vencen los pagos al llamar a métodos financieros.

FieldType (Enumeración) Indica si los campos de texto están delimitados o son de ancho fijo.

FileAttribute (Enumeración) Indica los atributos de archivo que se deben utilizar al llamar a las funciones de acceso a
archivos.

FirstDayOfWeek (Enumeración) Indica el primer día de la semana que se utiliza al llamar a funciones relacionadas con fe
chas.

FirstWeekOfYear (Enumeración) Indica la primera semana del año que se utiliza al llamar a funciones relacionadas con fe
chas.

MsgBoxResult (Enumeración) Indica en qué botón se hizo clic en un cuadro de mensaje, devuelto por la función MsgB
ox.

MsgBoxStyle (Enumeración) Indica los botones que se muestran al llamar a la función MsgBox.

OpenAccess (Enumeración) Indica el tipo de acceso cuando se llama a las funciones de acceso a archivos.

OpenMode (Enumeración) Indica el modo que se debe utilizar al llamar a las funciones de acceso a archivos.

OpenShare (Enumeración) Indica si otros procesos pueden utilizar un archivo al llamar a las funciones de acceso a
archivos.
RecycleOption (Enumeración) Especifica si se debe eliminar un archivo permanentemente o colocar en la Papelera de
reciclaje.

SearchOption (Enumeración) Especifica si se buscan todos o sólo los directorios de nivel superior.

TriState (Enumeración) Indica un valor Boolean o si se debe utilizar el valor predeterminado al llamar a las fun
ciones de formato de números.

UICancelOption (Enumeración) Especifica lo que se debe hacer si el usuario hace clic en Cancelar durante una operació
n.

UIOption (Enumeración) Especifica si se muestra o no un cuadro de diálogo de progreso al copiar, eliminar o mo


ver archivos o directorios.

VariantType (Enumeración) Indica el tipo de un objeto de variante, devuelto por la función VarType.

VbStrConv (Enumeración) Indica qué tipo de conversión se debe realizar al llamar a la función StrConv.

DueDate (Enumeración) Indica cuándo vencen los pagos al llamar a métodos financieros.

Vea también
Tareas
Cómo: Declarar enumeraciones
Cómo: Hacer referencia al miembro de una enumeración
Cómo: Recorrer en iteración una enumeración en Visual Basic
Cómo: Determinar la cadena asociada a un valor de enumeración
Conceptos
Enumeraciones y calificación de nombres
Cuándo se debe utilizar una enumeración
Conceptos del lenguaje Visual Basic

Cómo: Declarar enumeraciones


Una enumeración se crea con la instrucción Enum en la sección de declaraciones de una clase o módulo. No puede declarar
una enumeración dentro de un método. Para especificar el nivel adecuado de acceso, utilice Private, Protected, Friend o
Public.
Un tipo Enum tiene un nombre, un tipo subyacente y un conjunto de campos, cada uno de los cuales representa una
constante. El nombre debe ser un calificador de Visual Basic 2005 válido. El tipo subyacente debe ser uno de los tipos de
enteros —Byte, Short, Long o Integer. Integer es el valor predeterminado. Las enumeraciones tienen siempre
establecimiento inflexible de tipos y no son intercambiables con los tipos de números enteros.
Las enumeraciones no pueden tener valores de punto flotante. Si se asigna un valor de punto flotante a una enumeración con
Option Strict On, se producirá un error del compilador. Si Option Strict es Off, el valor se convierte automáticamente en el
tipo Enum.
Para obtener información sobre los nombres y sobre cómo utilizar la instrucción Imports de manera que la calificación de
nombres resulte innecesaria, consulte Enumeraciones y calificación de nombres.
Para declarar una enumeración
1. Escriba una declaración que incluya un nivel de acceso al código, la palabra clave Enum y un nombre válido, como en los
ejemplos siguientes, cada uno de los cuales declara una palabra clave Enum diferente.
VB
Private Enum SampleEnum
SampleMember
End Enum
Public Enum SampleEnum2
SampleMember
End Enum
Protected Enum SampleEnum3
SampleMember
End Enum
Friend Enum SampleEnum4
SampleMember
End Enum
Protected Friend Enum SampleEnum5
SampleMember
End Enum

2. Defina las constantes en la enumeración. De manera predeterminada, la primera constante de una enumeración se
inicializa con 0 y las siguientes se inicializan con un valor igual al de la constante anterior más uno. Por ejemplo, la
siguiente enumeración, Days, contiene una constante denominada Sunday con el valor 0, una constante denominada
Monday con el valor 1, una constante denominada Tuesday con el valor 2, etc.

VB
Public Enum Days
Sunday
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
End Enum
3. Se pueden asignar explícitamente valores a constantes en una enumeración mediante una instrucción de asignación. Se
puede asignar cualquier valor entero, incluidos números negativos. Por ejemplo, puede que desee que las constantes con
valores menores que cero representen condiciones de error. En la siguiente enumeración, a la constante Invalid se le
asigna explícitamente el valor –1, y a la constante Sunday se le asigna el valor 0. Como es la primera constante de la
enumeración, Saturday también se inicializa con el valor 0. El valor de Monday es 1 (el valor de Sunday más uno); el valor
de Tuesday es 2, y así sucesivamente.
VB
Public Enum WorkDays
Saturday
Sunday = 0
Monday
Tuesday
Wednesday
Thursday
Friday
Invalid = -1
End Enum

Este ejemplo de código también está disponible en el fragmento de código de IntelliSense. En el selector de fragmentos de
código, se encuentra en Lenguaje Visual Basic. Para obtener más información, consulte
Cómo: Insertar fragmentos de código en el código (Visual Basic).
Para declarar una enumeración explícitamente
Escriba una declaración con la sintaxis siguiente.
VB
Public Enum MyEnum As Byte
Zero
One
Two
End Enum

Vea también
Tareas
Cómo: Hacer referencia al miembro de una enumeración
Cómo: Recorrer en iteración una enumeración en Visual Basic
Cómo: Determinar la cadena asociada a un valor de enumeración
Conceptos
Enumeraciones y calificación de nombres
Cuándo se debe utilizar una enumeración
Constantes y enumeraciones intrínsecas
Tipos de datos constantes y literales
Otros recursos
Constantes de Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Hacer referencia al miembro de una enumeración


Las enumeraciones proporcionan una forma cómoda de trabajar con conjuntos de constantes relacionadas y de asociar
valores de constantes con nombres. Por ejemplo, se puede declarar una enumeración para un conjunto de constantes de tipo
entero asociadas con los días de la semana, y después utilizar los nombres de los días en el código en lugar de sus valores
enteros.
Puede evitar utilizar los nombres completos con la instrucción Imports. Para obtener más información, consulte
Enumeraciones y calificación de nombres.
Para hacer referencia a un miembro de una enumeración
Califique el nombre de miembro con la enumeración. Por ejemplo, el ejemplo siguiente asigna el miembro Saturday de
la enumeración FirstDayOfWeek a la variable DayValue.
VB
DayValue = FirstDayOfWeek.Saturday

Vea también
Tareas
Cómo: Declarar enumeraciones
Cómo: Recorrer en iteración una enumeración en Visual Basic
Cómo: Determinar la cadena asociada a un valor de enumeración
Conceptos
Enumeraciones declaradas por Visual Basic
Enumeraciones y calificación de nombres
Cuándo se debe utilizar una enumeración
Conceptos del lenguaje Visual Basic

Enumeraciones y calificación de nombres


Normalmente, cuando se hace referencia a un miembro de una enumeración, es necesario calificarlo con el nombre de la
enumeración. Por ejemplo, para hacer referencia al miembro Sunday de la enumeración Days, se utilizaría la siguiente sintaxis:
VB
X = Days.Sunday

Utilizar la instrucción Imports


Se puede evitar la utilización de nombres completos agregando la instrucción Imports a la sección de declaraciones de
espacios de nombres del código, como en el ejemplo siguiente:
VB
Imports WindowsApplication1.Form1.Days
Imports WindowsApplication1.Form1.WorkDays

Una instrucción Imports importa nombres de espacios de nombres de proyectos y ensamblados a los que se hace referencia y
de dentro del mismo proyecto como el módulo en el que aparece la instrucción. Una vez agregada esta instrucción, podría
hacer referencia a los miembros de la enumeración sin calificación, como se muestra a continuación:
VB
X = Sunday

Mediante la organización de conjuntos de constantes relacionadas en enumeraciones, se pueden utilizar los mismos nombres
de constantes en diferentes contextos. Por ejemplo, puede utilizar los mismos nombres de las constantes de días de la semana
en las enumeraciones Days y WorkDays. Si utiliza la instrucción Imports con las enumeraciones, debe evitar referencias
ambiguas. Considere el ejemplo siguiente:
VB
Imports WindowsApplication1.Form1.Days
Imports WindowsApplication1.Form1.WorkDays

VB
Public Sub New()
' Insert code to implement constructor.
X = Monday
End Sub

Suponiendo que Monday sea un miembro de las enumeraciones Days y Workdays, este código generará un error del
compilador. Para evitar las referencias ambiguas a una constante individual, debe calificar el nombre de la constante con su
enumeración. El siguiente código hace referencia a las constantes Saturday en las enumeraciones Days y WorkDays.
VB
X = Days.Saturday
Y = WorkDays.Saturday

Vea también
Tareas
Cómo: Declarar enumeraciones
Cómo: Hacer referencia al miembro de una enumeración
Cómo: Recorrer en iteración una enumeración en Visual Basic
Cómo: Determinar la cadena asociada a un valor de enumeración
Referencia
Instrucción Enum (Visual Basic)
Imports (Instrucción)
Resumen de tipos de datos (Visual Basic)
Conceptos
Enumeraciones declaradas por Visual Basic
Cuándo se debe utilizar una enumeración
Tipos de datos constantes y literales
Conceptos del lenguaje Visual Basic

Cómo: Recorrer en iteración una enumeración en Visual Basic


Las enumeraciones proporcionan una forma cómoda de trabajar con conjuntos de constantes relacionadas y de asociar
valores de constantes con nombres. Para recorrer en iteración una enumeración, puede moverla a una matriz mediante el
método GetValues. También puede recorrer en iteración una enumeración mediante una instrucción For...Each, mediante un
método GetNames o GetValues para extraer la cadena o valor numérico.
Para recorrer en iteración una enumeración
Declare una matriz y convierta la enumeración en ella con el método GetValues antes de pasar la matriz como haría con
cualquier otra variable. En el ejemplo siguiente se muestra cada miembro de la enumeración MyEnum cuando la recorre en
iteración.
VB
Dim items As Array
items = System.Enum.GetValues(GetType(FirstDayOfWeek))
Dim item As String
For Each item In items
MsgBox(item)
Next

Vea también
Tareas
Cómo: Declarar enumeraciones
Cómo: Determinar la cadena asociada a un valor de enumeración
Cómo: Hacer referencia al miembro de una enumeración
Cómo: Pasar una matriz a un procedimiento o una propiedad
Conceptos
Información general sobre las enumeraciones
Cuándo se debe utilizar una enumeración
Enumeraciones y calificación de nombres
Enumeraciones declaradas por Visual Basic
Información general sobre matrices en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Determinar la cadena asociada a un valor de


enumeración
Los métodos GetValues y GetNames permiten determinar las cadenas y los valores asociados a miembros de enumeración.
Para determinar la cadena asociada a una enumeración
Utilice el método GetNames para recuperar las cadenas asociadas a los miembros de enumeración. Este ejemplo declara
una enumeración, flavorEnum, y utiliza luego el método GetNames para mostrar las cadenas asociadas a cada miembro.
VB
Public Enum flavorEnum
salty
sweet
sour
bitter
End Enum

Private Sub TestMethod()


MsgBox("The strings in the flavorEnum are:")
Dim i As String
For Each i In [Enum].GetNames(GetType(flavorEnum))
MsgBox(i)
Next
End Sub

Vea también
Tareas
Cómo: Declarar enumeraciones
Cómo: Hacer referencia al miembro de una enumeración
Cómo: Recorrer en iteración una enumeración en Visual Basic
Referencia
Instrucción Enum (Visual Basic)
GetValues
GetNames
Enum
Conceptos
Enumeraciones declaradas por Visual Basic
Enumeraciones y calificación de nombres
Cuándo se debe utilizar una enumeración
Conceptos del lenguaje Visual Basic

Cuándo se debe utilizar una enumeración


Las enumeraciones ofrecen un modo fácil de trabajar con conjuntos de constantes relacionadas. Una enumeración, o Enum, es
un nombre simbólico para un conjunto de valores. Las enumeraciones se tratan como tipos de datos, y puede utilizarlas para
crear conjuntos de constantes y usarlas con variables y propiedades.
Cuándo se debe utilizar una enumeración
Cuando un procedimiento acepta un conjunto limitado de variables, considere el uso de una enumeración. Las enumeraciones
hacen que el código sea más claro y legible, especialmente cuando se utilizan nombres significativos.
Entre las ventajas de utilizar las enumeraciones se incluyen:
Reducir los errores producidos por números transpuestos o mal escritos.
Facilitar el cambio de valores en el futuro.
Facilitar la lectura del código, lo que significa que habrá menos posibilidad de errores.
Garantizar la compatibilidad futura. Con enumeraciones, es menos probable que haya errores en el código si alguien
cambia los valores correspondientes a los nombres de miembros en el futuro.
Nombres de enumeraciones
Utilice una convención de nomenclatura para los miembros de enumeraciones. Cuando Visual Basic encuentra un nombre de
miembro de una enumeración, se puede producir una excepción si otras bibliotecas de tipos a los que se hace referencia
contienen el mismo nombre. Utilice un prefijo único que identifique los valores de su aplicación o componente.
Cuando se hace referencia a un miembro de una enumeración, es necesario calificarlo con el nombre de la enumeración o
utilizar si no la instrucción Imports. Para obtener más información, consulte Enumeraciones y calificación de nombres.
Enumeraciones predefinidas
Visual Basic proporciona varias enumeraciones predefinidas, como FirstDayOfWeek y MsgBoxResul, para facilitar el código.
Para obtener una lista de ellas, consulte Enumeraciones declaradas por Visual Basic.
Vea también
Tareas
Cómo: Declarar enumeraciones
Cómo: Hacer referencia al miembro de una enumeración
Cómo: Recorrer en iteración una enumeración en Visual Basic
Cómo: Determinar la cadena asociada a un valor de enumeración
Referencia
Instrucción Enum (Visual Basic)
Conceptos
Enumeraciones y calificación de nombres
Constantes y enumeraciones intrínsecas
Conceptos del lenguaje Visual Basic

Constantes y enumeraciones intrínsecas


Visual Basic proporciona una serie de constantes y enumeraciones intrínsecas para facilitar el proceso de programación.
Comentarios
Las constantes almacenan valores que permanecen constantes durante la ejecución de una aplicación. Son nombres
significativos que ocupan el lugar de un número o una cadena y facilitan la lectura del código. Las enumeraciones ofrecen un
modo fácil de trabajar con conjuntos de constantes relacionadas. Una enumeración, o Enum, es un nombre simbólico para un
conjunto de valores.
Puede crear sus propias constantes y enumeraciones, tal como se indica en Constantes definidas por el usuario, o puede
utilizar las constantes y las enumeraciones intrínsecas que proporciona Visual Basic y que se muestran en
Examinador de objetos.
La tabla siguiente lista y describe las enumeraciones intrínsecas disponibles en Visual Basic.
Enumeración Descripción
AppWinStyle (Enumeración) Indica el estilo de ventana que se va a utilizar para el programa invocado al llamar a la f
unción Shell.

AudioPlayMode (Enumeración) Indica cómo reproducir sonidos al llamar a los métodos de audio.

BuiltInRole (Enumeración) Indica el tipo de función que se debe comprobar cuando se llama a
My.User.IsInRole (Método).

CallType (Enumeración) Indica el tipo de procedimiento que se debe invocar al llamar a la función CallByName.

CompareMethod (Enumeración) Indica cómo comparar las cadenas cuando se llama a las funciones de comparación.

DateFormat (Enumeración) Indica cómo se muestran las fechas al llamar a la función FormatDateTime.

DateInterval (Enumeración) Indica cómo determinar y dar formato a los intervalos de fecha al llamar a las funciones
relacionadas con fechas.

DeleteDirectoryOption (Enumeración) Especifica qué se hace cuando un directorio que se va a borrar contiene archivos o direc
torios.

DueDate (Enumeración) Indica cuándo vencen los pagos al llamar a métodos financieros.

FieldType (Enumeración) Indica si los campos de texto están delimitados o son de ancho fijo.

FileAttribute (Enumeración) Indica los atributos de archivo que se deben utilizar al llamar a las funciones de acceso a
archivos.

FirstDayOfWeek (Enumeración) Indica el primer día de la semana que se utiliza al llamar a funciones relacionadas con fe
chas.

FirstWeekOfYear (Enumeración) Indica la primera semana del año que se utiliza al llamar a funciones relacionadas con fe
chas.

MsgBoxResult (Enumeración) Indica en qué botón se hizo clic en un cuadro de mensaje, devuelto por la función MsgB
ox.

MsgBoxStyle (Enumeración) Indica los botones que se muestran al llamar a la función MsgBox.
OpenAccess (Enumeración) Identifica si se puede leer, escribir en un archivo o ambos.

OpenMode (Enumeración) Indica qué modo de acceso se debe utilizar al tener acceso a un archivo.

OpenShare (Enumeración) Especifica si otros procesos pueden tener acceso a un archivo abierto.

RecycleOption (Enumeración) Especifica si se debe eliminar un archivo permanentemente o colocar en la Papelera de


reciclaje.

SearchOption (Enumeración) Especifica si se buscan todos o sólo los directorios de nivel superior.

TriState (Enumeración) Indica un valor booleano o si se debe utilizar el valor predeterminado al llamar a las fun
ciones de formato de números.

UICancelOption (Enumeración) Especifica lo que se debe hacer si el usuario hace clic en Cancelar durante una operació
n.

UIOption (Enumeración) Especifica si se muestra o no un cuadro de diálogo de progreso al copiar, eliminar o mo


ver archivos o directorios.

VariantType (Enumeración) Indica el tipo de un objeto de variante, devuelto por la función VarType.

VbStrConv (Enumeración) Indica qué tipo de conversión se debe realizar al llamar a la función StrConv.

Vea también
Tareas
Cómo: Declarar una constante
Referencia
Instrucción Enum (Visual Basic)
Examinador de objetos
Conceptos
Información general sobre las constantes
Tipos de datos constantes y literales
Información general sobre las enumeraciones
Constantes definidas por el usuario
Otros recursos
Constantes y enumeraciones (Visual Basic)
Conceptos del lenguaje Visual Basic

Operadores y expresiones en Visual Basic


Un operador es un elemento de código que realiza una operación en uno o más elementos de código que contienen valores.
Los elementos de valor incluyen variables, constantes, literales, propiedades, valores devueltos de procedimientos Function y
Operator y expresiones.
Una expresión es una serie de elementos de valor combinados con operadores, que produce un nuevo valor. Los operadores
actúan sobre los elementos de valor realizando cálculos, comparaciones y otras operaciones.
Tipos de operadores
Visual Basic proporciona los tipos siguientes de operadores:
Operadores aritméticos, realizan los cálculos familiares en valores numéricos, incluido el desplazamiento de sus modelos
de bits.
Operadores de comparación, comparan dos expresiones y devuelven un valor Boolean que representa el resultado de la
comparación.
Operadores de concatenación, combinan varias cadenas en una sola.
Operadores lógicos y bit a bit en Visual Basic, combinan valores Boolean o numéricos y devuelven un resultado del
mismo tipo de datos que los valores.
Los elementos de valor que se combinan con un operador se denominan operandos de ese operador. Los operadores
combinados con los elementos de valor forman expresiones, salvo el operador de asignación, que forma una instrucción. Para
obtener más información, vea Instrucciones de asignación.
Evaluación de expresiones
El resultado final de una expresión representa un valor, que suele ser de un tipo de datos habitual como Boolean, String o un
tipo numérico.
A continuación se muestran ejemplos de expresiones.
5 + 4
' The preceding expression evaluates to 9.
15 * System.Math.Sqrt(9) + x
' The preceding expression evaluates to 45 plus the value of x.
"Concat" & "ena" & "tion"
' The preceding expression evaluates to "Concatenation".
763 < 23
' The preceding expression evaluates to False.

Varios operadores pueden realizar acciones en una expresión o instrucción simples, como se muestra en el siguiente ejemplo.
VB
x = 45 + y * z ^ 2

En el ejemplo anterior, Visual Basic realiza las operaciones en la expresión del lado derecho del operador de asignación (=) y, a
continuación, asigna el valor resultante a la variable x de la izquierda. No existe un límite real en cuanto al número de
operadores que se pueden combinar en una expresión, pero debe comprender que es necesaria la
Prioridad de operador en Visual Basic para asegurarse de que obtendrá los resultados previstos.
Vea también
Conceptos
Combinación eficaz de operadores
Otros recursos
Operadores (Visual Basic)
Instrucciones en Visual Basic
Conceptos del lenguaje Visual Basic

Tareas comunes realizadas con los operadores de Visual Basic


Los operadores realizan muchas tareas comunes en las que intervienen una o más expresiones denominadas operandos.
Tareas aritméticas y de cambio de bits
En la tabla siguiente se resumen las operaciones aritméticas y de cambio de bits disponibles.
Para Vea
Sumar un valor numérico a otro + (Operador, Visual Basic)

Restar un valor numérico de otro - (Operador, Visual Basic)

Invertir el signo de un valor numérico - (Operador, Visual Basic)

Multiplicar un valor numérico por otro * (Operador, Visual Basic)

Dividir un valor numérico por otro / (Operador, Visual Basic)

Encontrar el cociente de un valor numérico dividido por otro (sin el resto) \ (Operador)

Encontrar el resto de un valor numérico dividido por otro (sin el cociente) Mod (Operador, Visual Basic)

Elevar un valor numérico a una potencia ^ (Operador, Visual Basic)

Desplazar el modelo de bits de un valor numérico a la izquierda << (Operador, Visual Basic)

Desplazar el modelo de bits de un valor numérico a la derecha >> (Operador, Visual Basic)

Tareas de comparación
En la tabla siguiente se resumen las operaciones de comparación disponibles.
Para Vea
Determinar si dos valores son iguales Operador =
(Operadores de comparación en Visual Basic)

Determinar si dos valores no son iguales Operador <>


(Operadores de comparación en Visual Basic)

Determinar si un valor es menor que otro Operador <


(Operadores de comparación en Visual Basic)

Determinar si un valor es mayor que otro Operador >


(Operadores de comparación en Visual Basic)

Determinar si un valor es menor o igual que otro Operador <=


(Operadores de comparación en Visual Basic)

Determinar si un valor es mayor o igual que otro Operador >=


(Operadores de comparación en Visual Basic)

Determinar si dos variables de objeto hacen referencia a la misma instanci Is (Operador, Visual Basic)
a de objeto
Determinar si dos variables de objeto hacen referencia a instancias de obje IsNot (Operador)
to diferentes

Determinar si un objeto es de un tipo específico TypeOf (Operador, Visual Basic)

Tareas de concatenación
En la tabla siguiente se resumen las operaciones de concatenación disponibles.
Para Vea
Unir varias cadenas en una única cadena Operador & (Operadores de concatenación en Visual Basic)

Unir valores numéricos con valores de cadena Operador + (Operadores de concatenación en Visual Basic)

Tareas lógicas y bit a bit


En la tabla siguiente se resumen las operaciones lógicas y bit a bit disponibles.
Para Vea
Realizar la negación lógica en un valor booleano Not (Operador, Visual Basic)

Realizar la conjunción lógica en dos valores booleanos And (Operador, Visual Basic)

Realizar la disyunción lógica inclusiva en dos valores booleanos Or (Operador, Visual Basic)

Realizar la disyunción lógica exclusiva en dos valores booleanos Xor (Operador, Visual Basic)

Realizar la conjunción lógica de evaluación cortocircuitada en dos valores booleanos AndAlso (Operador)

Realizar la disyunción lógica inclusiva de evaluación cortocircuitada en dos valores booleanos OrElse (Operador)

Realizar la conjunción lógica bit a bit en dos valores enteros And (Operador, Visual Basic)

Realizar la disyunción lógica inclusiva bit a bit en dos valores enteros Or (Operador, Visual Basic)

Realizar la disyunción lógica exclusiva bit a bit en dos valores enteros Xor (Operador, Visual Basic)

Realizar la negación lógica bit a bit en un valor entero Not (Operador, Visual Basic)

Vea también
Referencia
Operadores enumerados por funcionalidad
Conceptos
Operadores y expresiones en Visual Basic
Conceptos del lenguaje Visual Basic

Operadores aritméticos en Visual Basic


Los operadores aritméticos se utilizan para realizar muchas de las operaciones aritméticas habituales que implican el cálculo
de valores numéricos representados por literales, variables, otras expresiones, llamadas a funciones y propiedades, y
constantes. También se clasifican como operadores aritméticos los operadores de desplazamiento de bits, que actúan al nivel
de bits individuales de los operandos y cambian sus modelos de bits a la izquierda o la derecha.
Operaciones aritméticas
Puede sumar dos valores en una expresión con el + (Operador, Visual Basic) o restar un valor de otro con el
- (Operador, Visual Basic), como se muestra en el siguiente ejemplo.
VB
Dim x As Integer
x = 67 + 34
x = 32 - 12

La negación también utiliza el - (Operador, Visual Basic), pero con un solo operando, como se puede ver en el ejemplo
siguiente.
VB
Dim x As Integer = 65
Dim y As Integer
y = -x

La multiplicación y la división utilizan los * (Operador, Visual Basic) y / (Operador, Visual Basic), respectivamente, como se
muestra en el ejemplo siguiente.
VB
Dim y As Double
y = 45 * 55.23
y = 32 / 23

La exponenciación utiliza el ^ (Operador, Visual Basic), como se puede ver en el ejemplo siguiente.
VB
Dim z As Double
z = 23 ^ 3
' The preceding statement sets z to 12167 (the cube of 23).

La división de enteros se lleva a cabo con el \ (Operador). La división de enteros devuelve el cociente, es decir, el número
entero que representa el número de veces que puede se puede dividir dividendo entre el divisor sin tener en cuenta el valor
del resto. El divisor y el dividendo deben ser tipos integrales (SByte, Byte, Short, UShort, Integer, UInteger, Long y ULong)
para este operador. Todos los demás tipos deben convertirse antes a tipo integral. El ejemplo siguiente ilustra la división de
enteros.
VB
Dim k As Integer
k = 23 \ 5
' The preceding statement sets k to 4.

El módulo aritmético se calcula con el Mod (Operador, Visual Basic). Este operador devuelve el resto después de dividir el
divisor por el dividendo un número integral de veces. Si tanto el divisor como el dividendo son tipos integrales, el valor
devuelto es integral. Si el divisor y el dividendo son tipos de punto flotante, el valor devuelto es una variable de punto flotante.
En el siguiente ejemplo se muestra este comportamiento.
VB
Dim x As Integer = 100
Dim y As Integer = 6
Dim z As Integer
z = x Mod y
' The preceding statement sets z to 4.

VB
Dim a As Double = 100.3
Dim b As Double = 4.13
Dim c As Double
c = a Mod b
' The preceding statement sets c to 1.18.

Intento de dividir por cero


La división por cero produce resultados diferentes dependiendo de los tipos de datos que se utilicen. En divisiones de enteros
(SByte, Byte, Short, UShort, Integer, UInteger, Long, ULong), .NET Framework produce una excepción
DivideByZeroException. En operaciones de división en tipos de datos Decimal o Single, .NET Framework también produce
una excepción DivideByZeroException.
En las divisiones de punto flotante que impliquen el tipo de datos Double, no se produce ninguna excepción y el resultado es
el miembro de clase que representa NaN, PositiveInfinity o NegativeInfinity, dependiendo del dividendo. La siguiente tabla
resume los diferentes resultados de intentar dividir un valor Double por cero.
Tipo de datos del dividen Tipo de datos del divis Valor del dividend Resultado
do or o
Double Double 0 NaN (no es un número definido matemáticamen
te)

Double Double >0 PositiveInfinity

Double Double <0 NegativeInfinity

Cuando se detecta una excepción DivideByZeroException, puede utilizar los miembros de la excepción para controlarla. Por
ejemplo, la propiedad Message contiene el texto del mensaje de la excepción. Para obtener más información, vea
Información general sobre el control estructurado de excepciones de Visual Basic.
Operaciones de desplazamiento de bits
Una operación de desplazamiento de bits realiza un desplazamiento aritmético sobre un modelo de bits. El patrón está
contenido en el operando de la izquierda, mientras que el operando de la derecha especifica el número de posiciones que debe
desplazarse el modelo. Puede desplazar el modelo a la derecha con >> (Operador, Visual Basic) o a la izquierda con
<< (Operador, Visual Basic).
El tipo de datos del operando del modelo debe ser SByte, Byte, Short, UShort, Integer, UInteger, Long o ULong. El tipo de
datos del operando de cantidad de desplazamiento debe ser Integer o se debe ampliar a Integer.
Los desplazamientos aritméticos no son circulares, lo que significa que los bits desplazados a un extremo del resultado no se
vuelven a introducir en el otro extremo. Las posiciones de bits que quedan vacantes debido a un desplazamiento se establecen
de la siguiente manera:
0 para un desplazamiento aritmético a la izquierda
0 para un desplazamiento aritmético a la derecha de un número positivo
0 para un desplazamiento aritmético a la derecha de un tipo de datos sin signo (Byte, UShort, UInteger, ULong)
1 para un desplazamiento aritmético a la derecha de un número negativo (SByte, Short, Integer o Long)
El ejemplo siguiente desplaza un valor Integer tanto a la izquierda como a la derecha.
VB
Dim lResult, rResult As Integer
Dim pattern As Integer = 12
' The low-order bits of pattern are 0000 1100.
lResult = pattern << 3
' A left shift of 3 bits produces a value of 96.
rResult = pattern >> 2
' A right shift of 2 bits produces value of 3.

Los desplazamientos aritméticos nunca generan excepciones de desbordamiento.


Operaciones bit a bit
Además de ser operadores lógicos, Not, Or, And y Xor también realizan operaciones aritméticas bit a bit cuando se utilizan en
valores numéricos. Para obtener más información, vea "Operaciones bit a bit" en Operadores lógicos y bit a bit en Visual Basic.
Seguridad de tipos
Normalmente, los operandos deben ser del mismo tipo. Por ejemplo, si está realizando sumas con una variable Integer, debe
sumarla a otra variable Integer y asignar el resultado a una variable que también sea del tipo Integer.
Una manera de asegurar unas buenas prácticas de codificación con seguridad de tipos consiste en usar la
Option Strict (Instrucción). Si establece Option Strict On, Visual Basic realiza automáticamente las conversiones con seguridad
de tipos. Por ejemplo, si intenta agregar una variable Integer a una variable Double y asignar el valor a una variable de tipo
Double, la operación se realizará normalmente, porque un valor Integer puede convertirse a Double sin pérdida de datos.
Por otra parte, las conversiones no seguras de tipos, causan un error del compilador con Option Strict On. Por ejemplo, si
intenta agregar una variable Integer a una variable Double y asignar el valor a la variable Integer, se produce un error del
compilador, porque una variable Double no se puede convertir implícitamente al tipo Integer.
Sin embargo, si establece Option Strict Off, Visual Basic permite que se efectúen conversiones implícitas de restricción,
aunque pueden dar como resultado la pérdida inesperada de datos o de precisión. Por esta razón, es recomendable utilizar
Option Strict On al escribir el código de producción. Para obtener más información, vea
Conversiones de ampliación y de restricción.
Vea también
Referencia
Operadores aritméticos (Visual Basic)
Operadores de desplazamiento
Conceptos
Operadores de comparación en Visual Basic
Operadores de concatenación en Visual Basic
Operadores lógicos y bit a bit en Visual Basic
Combinación eficaz de operadores
Conceptos del lenguaje Visual Basic

Operadores de comparación en Visual Basic


Los operadores de comparación comparan dos expresiones y devuelven un valor Boolean que representa la relación entre sus
valores. Existen operadores para comparar valores numéricos, operadores para comparar cadenas y operadores para
comparar objetos. Los tres tipos de operadores se describen a continuación.
Comparar valores numéricos
Visual Basic compara valores numéricos mediante seis operadores de comparación numéricos. Cada operador toma como
operandos dos expresiones que se evalúan como valores numéricos. La tabla siguiente enumera los operadores y muestra
ejemplos de cada uno.
Operador Condición que prueba Ejemplos
= (Igualdad) ¿Es igual el valor de la primera expresión que el de la segunda? 23 = 33 ' False
23 = 23 ' True
23 = 12 ' False

<> (Desigualdad) ¿Es distinto el valor de la primera expresión del valor de la segunda? 23 <> 33 ' True
23 <> 23 ' False
23 <> 12 ' True

< (Menor que) ¿Es el valor de la primera expresión menor que el valor de la segunda? 23 < 33 ' True
23 < 23 ' False
23 < 12 ' False

> (Mayor que) ¿Es el valor de la primera expresión mayor que el valor de la segunda? 23 > 33 ' False
23 > 23 ' False
23 > 12 ' True

<= (Menor o igual que) ¿Es el valor de la primera expresión menor o igual que el valor de la segunda? 23 <= 33 ' True
23 <= 23 ' True
23 <= 12 ' False

>= (Mayor o igual que) ¿Es el valor de la primera expresión mayor o igual que el valor de la segunda? 23 >= 33 ' False
23 >= 23 ' True
23 >= 12 ' True

Comparar cadenas
Visual Basic compara cadenas mediante Like (Operador) así como los operadores de comparación numéricos. El operador Like
le permite especificar un modelo. La cadena se compara a continuación contra el modelo y si coincide, el resultado es True. De
lo contrario, el resultado es False. Los operadores numéricos permiten comparar valores String basándose en su criterio de
ordenación, como se indica en el ejemplo siguiente:
"73" < "9"
' The result of the preceding comparison is True.

El resultado del ejemplo anterior es True porque el primer carácter de la primera cadena se ordena antes que el primer
carácter de la segunda cadena. Si los primeros caracteres fueran iguales, la comparación continuaría con el siguiente carácter
de las dos cadenas, y así sucesivamente. También puede probar la igualdad de cadenas utilizando al operador de igualdad,
como se puede ver en el ejemplo siguiente.
"734" = "734"
' The result of the preceding comparison is True.

Si una cadena es un prefijo de otra, como "aa" y "aaa", la cadena más larga se considera mayor que la más corta. Esto se ilustra
en el siguiente ejemplo:
"aaa" > "aa"
' The result of the preceding comparison is True.

El criterio de ordenación se basará en una comparación binaria o una comparación textual, en función del valor de Option
Compare. Para obtener más información, vea Option Compare (Instrucción).
Comparar objetos
Visual Basic compara dos variables de referencia a objeto con Is (Operador, Visual Basic) e IsNot (Operador). Puede utilizar
cualquiera de estos operadores para determinar si las dos variables de referencia se refieren a la misma instancia de objeto.
Esto se ilustra en el siguiente ejemplo:
VB
Dim x As testClass
Dim y As New testClass()
x = y
If x Is y Then
' Insert code to run if x and y point to the same instance.
End If

En el ejemplo anterior, x Is y se evalúa como True, porque ambas variables se refieren a la misma instancia. Compare este
resultado con el del ejemplo siguiente.
VB
Dim x As New customer()
Dim y As New customer()
If x Is y Then
' Insert code to run if x and y point to the same instance.
End If

En el ejemplo anterior, x Is y se evalúa como False, porque aunque las variables hacen referencia a objetos del mismo tipo,
se refieren a distintas instancias de ese tipo.
Cuando desee probar dos objetos que no señalan a la misma instancia, el operador IsNot permite evitar una combinación
gramaticalmente torpe de Not e Is. Esto se ilustra en el siguiente ejemplo:
VB
Dim a As New classA()
Dim b As New classB()
If a IsNot b Then
' Insert code to run if a and b point to different instances.
End If

En el ejemplo anterior, If a IsNot b es equivalente a If Not a Is b.


Comparar tipos de objetos
Para probar si un objeto es de un tipo concreto se puede utilizar la expresión TypeOf...Is. La sintaxis es la siguiente:
TypeOf <objectexpression> Is <typename>

Cuando typename especifica un tipo de interfaz, la expresión TypeOf...Is devuelve True si el objeto implementa el tipo de
interfaz. Cuando typename es un tipo de clase, la expresión devuelve True si el objeto es una instancia de la clase especificada o
de una clase que se deriva de la clase especificada. Esto se ilustra en el siguiente ejemplo:
VB
Dim x As System.Windows.Forms.Button
x = New System.Windows.Forms.Button()
If TypeOf x Is System.Windows.Forms.Control Then
' Insert code to run if x is of type System.Windows.Forms.Control.
End If
En el ejemplo anterior, la expresión TypeOf x Is Control se evalúa como True porque el tipo de x es Button, que hereda de
Control.

Para obtener más información, vea TypeOf (Operador, Visual Basic).


Vea también
Referencia
Operadores de comparación (Visual Basic)
Conceptos
Comparaciones de valores
Operadores aritméticos en Visual Basic
Operadores de concatenación en Visual Basic
Operadores lógicos y bit a bit en Visual Basic
Otros recursos
Operadores (Visual Basic)
Conceptos del lenguaje Visual Basic

Cómo: Comprobar si dos objetos son iguales


Si hay dos variables que hacen referencia a objetos, se puede utilizar el operador Is o IsNot, o ambos, para determinar si hacen
referencia a la misma instancia.
Para probar si dos objetos son el mismo
Utilice el operador Is (Operador, Visual Basic) o IsNot (Operador) con las dos variables como operandos.
VB
Public Sub processControl(ByVal f As System.Windows.Forms.Form, _
ByVal c As System.Windows.Forms.Control)
Dim active As System.Windows.Forms.Control = f.ActiveControl
If (active IsNot Nothing) And (c Is active) Then
' Insert code to process control c
End If
Return
End Sub

Podría ser conveniente tomar ciertas medidas que dependen de si los dos objetos hacen referencia a la misma instancia. En el
ejemplo anterior se compara el control c con el control activo en el formulario f. Si no hay un control activo o hay uno que no
es la misma instancia de control que c, la instrucción If genera un error y se vuelve al procedimiento sin procesar la
instrucción.
El uso de Is o IsNot es una cuestión de preferencias personales. Uno podría ser más fácil de leer que el otro en una expresión
determinada.
Vea también
Conceptos
Operadores de comparación en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Comprobar si una cadena coincide con un modelo


Si desea averiguar si una expresión de String (Tipo de datos, Visual Basic) satisface un modelo, puede utilizar el
Like (Operador).
Like toma dos operandos. El operando izquierdo es una expresión de cadena, y el operando derecho es una cadena que
contiene el modelo que se debe utilizar para la equivalencia. Like devuelve un valor Boolean que indica que la expresión de
cadena se atiene al modelo.
Puede hacer coincidir cada carácter de la expresión de cadena con un carácter concreto, un carácter comodín, una lista de
caracteres o un intervalo de caracteres. Las posiciones de las especificaciones de la cadena modelo corresponden con las
posiciones de los caracteres que se deben hacer coincidir en la expresión de cadena.
Para hacer coincidir un carácter de la expresión de cadena con respecto a un carácter concreto
Coloque directamente el carácter concreto en la cadena del modelo. Ciertos caracteres especiales se deben incluir entre
corchetes ([ ]). Para obtener más información, vea Like (Operador).
El ejemplo siguiente prueba si myString consta exactamente del carácter individual H.
VB
Dim sMatch As Boolean = myString Like "H"

Para hacer coincidir un carácter de la expresión de cadena con respecto a un carácter comodín
Coloque un signo de interrogación (?) en la cadena del modelo. Cualquier carácter válido para esta posición obtiene una
coincidencia correcta.
El ejemplo siguiente prueba si myString está compuesto del carácter individual W seguido de exactamente dos caracteres
de cualquier valor.
VB
Dim sMatch As Boolean = myString Like "W??"

Para hacer coincidir un carácter de la expresión de cadena con respecto a una lista de caracteres
Coloque corchetes ([ ]) en la cadena del modelo y, dentro de los corchetes, coloque la lista de caracteres. No separe los
caracteres con comas ni con cualquier otro separador. Cualquier carácter individual en la lista consigue una coincidencia
correcta.
El ejemplo siguiente prueba si myString está compuesto de cualquier carácter válido seguido por exactamente uno de los
caracteres A, C o E.
VB
Dim sMatch As Boolean = myString Like "?[ACE]"

Tenga en cuenta que esta coincidencia distingue entre mayúsculas y minúsculas.


Para hacer coincidir un carácter de la expresión de cadena con respecto a un intervalo de caracteres
Coloque corchetes ([ ]) en la cadena del modelo y, dentro de los corchetes, coloque el primer y el último caracteres del
intervalo, separados por un guión (–). Cualquier carácter individual contenido en del intervalo obtiene una coincidencia
correcta.
El ejemplo siguiente prueba si myString incluye los caracteres num seguidos por exactamente uno de los caracteres i, j, k,
l, m o n.

VB
Dim sMatch As Boolean = myString Like "num[i-m]"

Tenga en cuenta que esta coincidencia distingue entre mayúsculas y minúsculas.


Coincidencia de cadenas vacías
Like trata la secuencia [] como una cadena de longitud cero (""). Puede utilizar [] para probar si toda la expresión de cadena
está vacía, pero no para probar si una posición concreta de la expresión de cadena está vacía. Si una posición vacía es una de
las opciones que necesita comprobar, puede utilizar Like más de una vez.
Para hacer coincidir un carácter de la expresión de cadena con respecto a una lista de caracteres o con
ningún carácter
1. Llame dos veces al operador Like en la misma expresión de cadena y conecte las dos llamadas con
Or (Operador, Visual Basic) u OrElse (Operador).
2. En la cadena del modelo para la primera cláusula Like, incluya la lista de caracteres, encerrándola entre corchetes ([ ]).
3. En la cadena del modelo para la segunda cláusula Like, no coloque ningún carácter en la posición en cuestión.
El ejemplo siguiente prueba el número de teléfono de siete dígitos phoneNum para ver si está formado exactamente por
tres números seguidos por un espacio, un guión (–), un punto (.) o ningún carácter, seguidos exactamente por cuatro
números.
VB
Dim sMatch As Boolean = _
(phoneNum Like "###[ -.]####") OrElse (phoneNum Like "#######")

Vea también
Referencia
Operadores de comparación (Visual Basic)
Like (Operador)
String (Tipo de datos, Visual Basic)
Conceptos
Operadores y expresiones en Visual Basic
Conceptos del lenguaje Visual Basic

Operadores de concatenación en Visual Basic


Los operadores de concatenación combinan varias cadenas en una sola. Hay dos operadores de concatenación: + y &. Los dos
realizan la operación de concatenación básica, como se muestra en el ejemplo siguiente.
VB
Dim x As String = "Con" & "caten" & "ation"
Dim y As String = "Con" + "caten" + "ation"
' The preceding statements set both x and y to "Concatenation".

Estos operadores también concatenan variables String, como en el ejemplo siguiente.


VB
Dim a As String = "abc"
Dim d As String = "def"
Dim z As String = a & d
Dim w As String = a + d
' The preceding statements set both z and w to "abcdef".

Diferencias entre los dos operadores de concatenación


El + (Operador, Visual Basic) tiene la finalidad principal de sumar dos números. Sin embargo, también puede concatenar
operandos numéricos con operandos de cadena. El operador + tiene un conjunto complejo de reglas que determinan si se
debe sumar, concatenar, señalar un error del compilador o producir una excepción InvalidCastException en tiempo de
ejecución.
El & (Operador, Visual Basic) sólo se define para operandos de tipo String y siempre amplía sus operandos a String,
independientemente de la configuración de Option Strict. El operador & está recomendado para la concatenación de cadenas,
porque está definido exclusivamente para cadenas y reduce las posibilidades de generar una conversión no deseada.
Rendimiento: String y StringBuilder
Si se realiza un número significativo de manipulaciones en una cadena, como concatenaciones, eliminaciones y sustituciones,
el rendimiento puede beneficiarse de la clase StringBuilder del espacio de nombres System.Text. La creación e inicialización de
un objeto StringBuilder requiere una instrucción adicional y otra instrucción más para convertir su valor final en un valor de
tipo String, pero en este caso se puede recuperar porque StringBuilder puede ejecutarse más rápidamente.
Vea también
Referencia
Option Strict (Instrucción)
Conceptos
Tipos de métodos de manipulación de cadenas en Visual Basic
Operadores aritméticos en Visual Basic
Operadores de comparación en Visual Basic
Operadores lógicos y bit a bit en Visual Basic
Conceptos del lenguaje Visual Basic

Operadores lógicos y bit a bit en Visual Basic


Los operadores lógicos comparan expresiones Boolean y devuelven un resultado Boolean. Los operadores And, Or,
AndAlso, OrElse y Xor son binarios porque toman dos operandos, mientras que el operador Not es unario porque toma un
solo operando. Algunos de estos operadores también pueden realizar operaciones lógicas bit a bit en valores enteros.
Operador lógico unario
El Not (Operador, Visual Basic) realiza la negación lógica en una expresión Boolean. Produce el contrario lógico de su
operando. Si la expresión se evalúa como True, Not devuelve False; si la expresión se evalúa como False, Not devuelve True.
Esto se ilustra en el siguiente ejemplo:
VB
Dim x, y As Boolean
x = Not 23 > 14
y = Not 23 > 67
' The preceding statements set x to False and y to True.

Operadores lógicos binarios


El And (Operador, Visual Basic) realiza la conjunción lógica de dos expresiones Boolean. Si ambas expresiones se evalúan
como True, And devuelve True. Si al menos una de las expresiones se evalúa como False, And devuelve False.
El Or (Operador, Visual Basic) realiza la disyunción o inclusión lógicas de dos expresiones Boolean. Si una de las expresiones o
ambas se evalúan como True, Or devuelve True. Si ninguna de las expresiones se evalúa como True, Or devuelve False.
Xor (Operador, Visual Basic) realiza la exclusión lógica de dos expresiones Boolean. Si exactamente una expresión, pero no
ambas, se evalúa como True, Xor devuelve True. Si ambas expresiones se evalúan como True o como False, Xor devuelve
False.
En el siguiente ejemplo se muestra cómo utilizar los operadores And, Or y Xor.
VB
Dim a, b, c, d, e, f, g As Boolean

a = 23 > 14 And 11 > 8


b = 14 > 23 And 11 > 8
' The preceding statements set a to True and b to False.

c = 23 > 14 Or 8 > 11
d = 23 > 67 Or 8 > 11
' The preceding statements set c to True and d to False.

e = 23 > 67 Xor 11 > 8


f = 23 > 14 Xor 11 > 8
g = 14 > 23 Xor 8 > 11
' The preceding statements set e to True, f to False, and g to False.

Cortocircuitar las operaciones lógicas


El AndAlso (Operador) es muy similar al operador And, ya que también realiza la conjunción lógica de dos expresiones
Boolean. La diferencia clave entre ambos es que AndAlso presenta un comportamiento de evaluación "cortocircuitada". Si la
primera parte de una expresión AndAlso se evalúa como False, la segunda parte de la expresión no se evalúa porque no
puede modificar el resultado final y AndAlso devuelve False.
De igual forma, el OrElse (Operador) realiza la disyunción lógica de evaluación cortocircuitada de dos expresiones Boolean. Si
la primera parte de una expresión OrElse se evalúa como True, la segunda parte de la expresión no se evalúa porque no
puede modificar el resultado final y OrElse devuelve True.
Inconvenientes de las evaluaciones cortocircuitadas
Cortocircuitar puede mejorar el rendimiento ya que no se evalúa una expresión que no puede modificar el resultado de la
operación lógica. Sin embargo, si esa expresión realiza acciones adicionales, al cortocircuitar se pasan por alto esas acciones.
Por ejemplo, si la expresión incluye una llamada a un procedimiento Function, no se llama a ese procedimiento si la expresión
se cortocircuita y el código adicional incluido en Function no se ejecuta. Si la lógica del programa depende de algún código
adicional, debe evitar probablemente los operadores de evaluación cortocircuitada.
En el ejemplo siguiente se muestra la diferencia entre And, Or y sus homólogos de evaluación cortocircuitada.
VB
Dim amount As Integer = 12
Dim highestAllowed As Integer = 45
Dim grandTotal As Integer

VB
If amount > highestAllowed And checkIfValid(amount) Then
' The preceding statement calls checkIfValid().
End If
If amount > highestAllowed AndAlso checkIfValid(amount) Then
' The preceding statement does not call checkIfValid().
End If
If amount < highestAllowed Or checkIfValid(amount) Then
' The preceding statement calls checkIfValid().
End If
If amount < highestAllowed OrElse checkIfValid(amount) Then
' The preceding statement does not call checkIfValid().
End If

VB
Function checkIfValid(ByVal checkValue As Integer) As Boolean
If checkValue > 15 Then
MsgBox(CStr(checkValue) & " is not a valid value.")
' The MsgBox warning is not displayed if the call to
' checkIfValid() is part of a short-circuited expression.
Return False
Else
grandTotal += checkValue
' The grandTotal value is not updated if the call to
' checkIfValid() is part of a short-circuited expression.
Return True
End If
End Function

En el ejemplo anterior, observe que una parte de código importante dentro de checkIfValid() no se ejecuta cuando se
cortocircuita la llamada. La primera instrucción If llama a checkIfValid() aunque 12 > 45 devuelve False, porque And no
cortocircuita. La segunda instrucción If no llama a checkIfValid(), porque cuando 12 > 45 devuelve False, AndAlso
cortocircuita la segunda expresión. La tercera instrucción If llama a checkIfValid() aunque 12 < 45 devuelve True, porque Or
no cortocircuita. La cuarta instrucción If no llama a checkIfValid(), porque cuando 12 < 45 devuelve True, OrElse
cortocircuita la segunda expresión.
Operaciones bit a bit
Las operaciones bit a bit evalúan dos valores enteros en formato binario (base 2). Comparan los bits en las posiciones
correspondientes y, a continuación, asignan valores basados en la comparación. En el siguiente ejemplo se muestra cómo se
utiliza el operador And.

Dim x As Integer
x = 3 And 5

El ejemplo anterior establece el valor de x en 1. Esto ocurre por las razones siguientes:
Los valores se tratan como binarios:
3 en formato binario = 011
5 en formato binario = 101
El operador And compara las representaciones binarias, una posición binaria (bit) a la vez. Si los dos bits en una posición
dada son 1, entonces se coloca un 1 en esa posición del resultado. Si uno de los dos bits es 0, entonces se coloca un 0 en
esa posición del resultado. En el ejemplo anterior, esto funciona como sigue:
011 (3 en formato binario)
101 (5 en formato binario)
001 (el resultado, en formato binario)
El resultado se trata como decimal. El valor 001 es la representación binaria de 1, por lo que x = 1.
La operación Or bit a bit es similar, excepto en que se asigna 1 al bit resultante si cualquiera de los bits comparados es 1. Xor
asigna 1 al bit del resultado si sólo uno de los bits comparados (no ambos) es 1. Not acepta un solo operando e invierte todos
los bits, incluido el bit de signo, y asigna ese valor al resultado. Esto significa que para números positivos sin signo, Not
siempre devuelve un valor negativo y, para números negativos, Not siempre devuelve un valor positivo o cero.
Los operadores AndAlso y OrElse no admiten las operaciones bit a bit.
Nota
Las operaciones bit a bit sólo se pueden realizar en tipos enteros. Los valores de punto flotante deben convertirse a tipos ent
eros para que la operación bit a bit pueda proseguir.

Vea también
Referencia
Operadores lógicos y operadores bit a bit
Conceptos
Expresiones booleanas
Operadores aritméticos en Visual Basic
Operadores de comparación en Visual Basic
Operadores de concatenación en Visual Basic
Combinación eficaz de operadores
Conceptos del lenguaje Visual Basic

Combinación eficaz de operadores


Las expresiones complejas pueden contener muchos operadores diferentes. Esto se ilustra en el siguiente ejemplo:
x = (45 * (y + z)) ^ (2 / 85) * 5 + z

La creación de expresiones complejas como la del ejemplo anterior requiere comprender a fondo las reglas de prioridad de
operador. Para obtener más información, vea Prioridad de operador en Visual Basic.
Expresiones entre paréntesis
A menudo, desea que las operaciones se realicen en un orden diferente del que determina la prioridad de operador. Considere
el ejemplo siguiente.
x = z * y + 4

El ejemplo anterior multiplica z por y y suma el resultado a 4. Si desea sumar y y 4 antes de multiplicar el resultado por z,
puede anular la prioridad de operadores normal utilizando paréntesis. Si escribe una expresión entre paréntesis, fuerza a que
dicha expresión se evalúe primero, independientemente de la prioridad de operador. Para indicar que en el ejemplo anterior se
lleve a cabo la suma en primer lugar, podría reescribirlo como en el ejemplo siguiente.
x = z * (y + 4)

El ejemplo anterior suma y y 4 y, a continuación, multiplica esa suma por z.


Expresiones entre paréntesis anidadas
Puede anidar expresiones en varios niveles de paréntesis para anular todavía más la prioridad. La expresión en el último nivel
de anidación entre paréntesis se evalúa en primer lugar, después la siguiente expresión más anidada y así sucesivamente hasta
el último nivel de anidación; por último, se evalúan las expresiones situadas fuera de los paréntesis. Esto se ilustra en el
siguiente ejemplo:
x = (z * 4) ^ (y * (z + 2))

En el ejemplo anterior, se evalúa z + 2 en primer lugar y, a continuación, las otras expresiones entre paréntesis. La
exponenciación, que generalmente tiene mayor prioridad que la suma o la multiplicación, se evalúa en último lugar debido a
que las demás expresiones están escritas entre paréntesis.
Vea también
Tareas
Cómo: Calcular valores numéricos
Referencia
Operadores lógicos y operadores bit a bit
Prioridad de operador en Visual Basic
Conceptos
Operadores aritméticos en Visual Basic
Operadores de comparación en Visual Basic
Operadores lógicos y bit a bit en Visual Basic
Expresiones booleanas
Comparaciones de valores
Conceptos del lenguaje Visual Basic

Cómo: Calcular valores numéricos


Puede calcular valores numéricos mediante el uso de expresiones numéricas. Una expresión numérica es una expresión que
contiene literales, constantes y variables que representan valores numéricos, y operadores que actúan sobre esos valores.
Calcular valores numéricos
Para calcular un valor numérico
Combine uno o más literales, constantes y variables numéricos en una expresión numérica. El ejemplo siguiente muestra
algunas expresiones numéricas válidas.
93.217

System.Math.PI

counter

4 * (67 + i)

Las tres primeras líneas muestran un literal, una constante y una variable. Cada uno forma una expresión numérica
válida por sí mismo. La línea final muestra una combinación de una variable con dos literales.
Observe que una expresión numérica no forma una instrucción de Visual Basic completa por sí misma. Debe utilizar la
expresión como parte de una instrucción completa.
Para almacenar un valor numérico
Puede utilizar una instrucción de asignación para asignar el valor representado por una expresión numérica a una
variable, como se muestra en el ejemplo siguiente.
VB
Dim i As Integer = 2
Dim j As Integer
j = 4 * (67 + i)

En el ejemplo anterior, el valor de la expresión situada a la derecha del operador igual (=) se asigna a la variable j situada
a la izquierda del operador, por lo que j da como resultado 276.
Para obtener más información, vea Instrucciones de asignación.
Varios operadores
Si la expresión numérica contiene más de un operador, el orden en que se evalúan lo determina las reglas de prioridad de
operador. Para anular las reglas de prioridad de operador, las expresiones se escriben entre paréntesis, como en el ejemplo
anterior; estas expresiones se evalúan primero.
Para reemplazar la prioridad normal de operadores
Utilice paréntesis para indicar las operaciones que desea efectuar en primer lugar. En el ejemplo siguiente se muestran
dos resultados diferentes con los mismos operandos y operadores.
VB
Dim i As Integer = 2
Dim j, k As Integer
j = 4 * (67 + i)
k = 4 * 67 + i

En el ejemplo anterior, el cálculo de j ejecuta el operador de suma (+) en primer lugar debido a que los paréntesis en (67
+ i) anulan la prioridad normal, por lo que el valor asignado a j es 276 (4 por 69). El cálculo de k ejecuta los operadores
con su prioridad normal (* antes de +), por lo que el valor asignado a k es 270 (268 más 2).
Para obtener más información, vea Prioridad de operador en Visual Basic.
Vea también
Referencia
Prioridad de operador en Visual Basic
Operadores aritméticos (Visual Basic)
Conceptos
Operadores y expresiones en Visual Basic
Comparaciones de valores
Instrucciones de asignación
Combinación eficaz de operadores
Conceptos del lenguaje Visual Basic

Comparaciones de valores
Los operadores de comparación pueden utilizarse para construir expresiones que comparan los valores de variables
numéricas. Estas expresiones devuelven un valor Boolean que depende de si la comparación es verdadera o falsa. A
continuación se exponen ejemplos de estas expresiones.
45 > 26
26 > 45

La primera expresión se evalúa como True, porque 45 es mayor que 26. El segundo ejemplo se evalúa como False, porque 26
no es mayor que 45.
También puede comparar cualquier par de expresiones numéricas de este modo. Las expresiones comparadas pueden ser
complejas, como en el siguiente ejemplo:
x / 45 * (y +17) >= System.Math.Sqrt(z) / (p - (x * 16))

Esta expresión compleja incluye literales, variables y llamadas a funciones. Se evalúan las expresiones especificadas a ambos
lados del operador de comparación y los valores resultantes se comparan mediante el operador de comparación >=. Si el
valor de la expresión de la izquierda es mayor o igual que el valor de la expresión de la derecha, la evaluación de la expresión
completa devuelve True; de lo contrario, devuelve False.
Las expresiones que comparan valores se utilizan con frecuencia en construcciones If...Then, como en el siguiente ejemplo.
VB
If x > 50 Then
' Insert code to run if x is greater than 50.
Else
' Insert code to run if x is less than or equal to 50.
End If

El signo = es un operador de comparación, además de un operador de asignación. Cuando se utiliza como operador de
comparación, evalúa si el valor de la izquierda es igual que el valor de la derecha, como se muestra en el siguiente ejemplo.
VB
If x = 50 Then
' Insert code to continue program.
End If

Una expresión de comparación también se puede utilizar allí donde sea necesario un valor Boolean, como en una instrucción
If, While, Loop, ElseIf, o cuando se asigna o se pasa un valor a una variable Boolean. En el siguiente ejemplo, el valor
devuelto por la expresión de comparación se asigna a una variable Boolean.
VB
Dim x As Boolean
x = 50 < 30
' The preceding statement assigns False to x.

Vea también
Tareas
Cómo: Calcular valores numéricos
Referencia
Prioridad de operador en Visual Basic
Conceptos
Expresiones booleanas
Operadores y expresiones en Visual Basic
Operadores de comparación en Visual Basic
Conceptos del lenguaje Visual Basic

Expresiones booleanas
Una expresión booleana es una expresión que se evalúa como un valor del Tipo de datos booleano. Las expresiones Boolean
pueden tener varias formas. La más simple es la comparación directa del valor de una variable Boolean con un literal
Boolean, como se muestra en el ejemplo siguiente:
VB
If newCustomer = True Then
' Insert code to execute if newCustomer = True.
Else
' Insert code to execute if newCustomer = False.
End If

Dos significados del operador =


Tenga en cuenta que la instrucción de asignación newCustomer = True tiene la misma apariencia que la expresión del ejemplo
anterior, pero realiza funciones diferentes y se utiliza de forma distinta. En el ejemplo anterior, la expresión newCustomer =
True representa un valor booleano y el signo = se interpreta como un operador de comparación. En una instrucción
independiente, el signo = se interpretaría como operador de asignación y asignaría el valor de la derecha a la variable de la
izquierda. Esto se ilustra en el siguiente ejemplo:
VB
If newCustomer = True Then
newCustomer = False
End If

Para obtener más información, vea Comparaciones de valores e Instrucciones de asignación.


Operadores de comparación
Los operadores de comparación como =, <, >, <>, <= y >= producen expresiones booleanas, comparan la expresión situada a
la izquierda del operador con la situada a la derecha y evalúan el resultado como True o False. Esto se ilustra en el siguiente
ejemplo:
42 < 81

Dado que 42 es menor que 81, la expresión booleana del ejemplo anterior se evalúa como True. Para obtener más
información sobre este tipo de expresión, vea Comparaciones de valores.
Operadores de comparación combinados con operadores lógicos
Las expresiones de comparación se pueden combinar con operadores lógicos para producir expresiones booleanas más
complejas. En el ejemplo siguiente se muestra el uso de operadores de comparación junto con un operador lógico.
x > y And x < 1000

En el ejemplo anterior, el valor de toda la expresión depende de los valores de las expresiones especificadas a cada lado del
operador And. Si las dos expresiones son True, toda la expresión se evalúa como True. Si una de las expresiones es False,
toda la expresión se evalúa como False.
Operadores de evaluación "cortocircuitada"
Los operadores lógicos AndAlso y OrElse exhiben un comportamiento conocido como evaluación cortocircuitada. Un
operador de evaluación cortocircuitada evalúa primero el operando de la izquierda. Si el operando de la izquierda determina el
valor de la expresión completa, la ejecución del programa continúa sin evaluar la expresión de la derecha. Esto se ilustra en el
siguiente ejemplo:
VB
If 45 < 12 AndAlso testFunction(3) = 81 Then
' Add code to continue execution.
End If
En el ejemplo anterior, el operador evalúa la expresión de la izquierda, 45 < 12. Dado que la expresión de la izquierda se
evalúa como False, la expresión lógica completa se debe evaluar como False. Por tanto el programa pasa por alto la ejecución
del código del bloque If sin evaluar la expresión de la derecha, testFunction(3). Este ejemplo no llama a testFunction()
porque la expresión de la izquierda hace que toda la expresión se evalúe como False.
De forma similar, si la expresión de la izquierda en una expresión lógica que utiliza OrElse se evalúa como True, la ejecución
prosigue con la siguiente línea de código sin evaluar la expresión de la derecha, puesto que la expresión de la izquierda ya ha
validado toda la expresión.
Comparación con operadores que no cortocircuitan
Por el contrario, cuando se utilizan los operadores lógicos And y Or, se evalúan los dos lados de la expresión. Esto se ilustra en
el siguiente ejemplo:
VB
If 45 < 12 And testFunction(3) = 81 Then
' Add code to continue execution.
End If

El ejemplo anterior llama a testFunction() aunque la expresión de la izquierda se evalúe como False.
Expresiones entre paréntesis
Pueden utilizarse paréntesis para controlar la evaluación de expresiones booleanas. Las expresiones entre paréntesis se
evalúan primero. En el caso de múltiples niveles de anidamiento, se garantiza la prioridad de las expresiones anidadas a mayor
profundidad. Dentro de los paréntesis, la evaluación se lleva a cabo según las reglas de prioridad de operador. Para obtener
más información, vea Prioridad de operador en Visual Basic.
Vea también
Referencia
Operadores de comparación (Visual Basic)
Prioridad de operador en Visual Basic
Boolean (Tipo de datos, Visual Basic)
Conceptos
Operadores lógicos y bit a bit en Visual Basic
Comparaciones de valores
Instrucciones de asignación
Combinación eficaz de operadores
Conceptos del lenguaje Visual Basic

Instrucciones en Visual Basic


En Visual Basic, una instrucción es una comando completo que puede contener palabras clave, operadores, variables,
constantes y expresiones. Las instrucciones se clasifican en dos categorías: instrucciones de declaración, que asignan nombre a
una variable, constante o procedimiento, y también pueden especificar un tipo de datos, e instrucciones ejecutables, que inician
acciones.
En esta sección
Información general sobre las instrucciones
Proporciona un análisis de alto nivel de las instrucciones, incluida la forma de escribir varias instrucciones en una línea,
continuar una instrucción en varias líneas, agregar comentarios y comprobar errores de compilación.
Instrucciones de asignación
Describe instrucciones que realizan operaciones de asignación (asignan el valor de la derecha del operador a la variable de la
izquierda).
Instrucciones de declaración en Visual Basic
Describe instrucciones que asignan nombre a procedimientos, variables, matrices y constantes, y los definen.
Instrucciones ejecutables
Describe instrucciones ejecutables que inician una acción mediante la ejecución de un método. Las instrucciones ejecutables
pueden ejecutarse en bucle o bifurcarse en bloques de código, y suelen contener operadores matemáticos o condicionales.
Secciones relacionadas
Operadores de asignación
Proporciona vínculos a páginas de referencia del lenguaje que describen los operadores de asignación, como =, *= y &=.
Operadores y expresiones en Visual Basic
Muestra cómo combinar elementos con operadores para obtener nuevos valores.
Conceptos del lenguaje Visual Basic

Información general sobre las instrucciones


En Visual Basic, una instrucción es una instrucción completa. Puede contener palabras clave, operadores, variables, constantes
y expresiones. Cada instrucción pertenece a una de las categorías siguientes:
Instrucciones de declaración, que dan nombre a una variable, constante o procedimiento y también pueden especificar
un tipo de datos.
Instrucciones ejecutables, que inician acciones. Estas instrucciones pueden llamar a un método o función, y pueden
recorrer bloques de código o bifurcar a otro bloque de código. Las instrucciones ejecutables incluyen
instrucciones de asignación, que asignan un valor o expresión a una variable o constante.
Colocar varias instrucciones en una línea
Se pueden tener varias instrucciones en una sola línea separadas por el carácter de dos puntos (:). Esto se ilustra en el siguiente
ejemplo:
VB
Dim sampleString As String = "Hello World" : MsgBox(sampleString)

Aunque ocasionalmente puede resultar conveniente, esta forma de sintaxis dificulta la lectura y el mantenimiento del código.
Por tanto, se recomienda mantener una instrucción por línea.
Continuar una instrucción en varias líneas
Normalmente, una línea suele ser suficiente para una instrucción, pero si la instrucción es demasiado larga, se puede continuar
en la siguiente línea mediante una secuencia de continuación de línea, que está compuesta por un espacio seguido de un
carácter de subrayado (_) y de un retorno de carro. En el siguiente ejemplo, la instrucción ejecutable MsgBox continúa en más
de dos líneas.
VB
Public Sub demoBox()
Dim nameVar As String
nameVar = "John"
MsgBox("Hello " & nameVar & _
". How are you?")
End Sub

Agregar comentarios
El código fuente no es siempre fácil de entender, ni siquiera para el programador que lo escribió. Por consiguiente, como
ayuda para documentar el código, la mayoría de los programadores utilizan libremente comentarios incrustados. Los
comentarios del código pueden explicar un procedimiento o una instrucción concreta a cualquiera que los lea o trabaje con
ellos posteriormente. Visual Basic omite los comentarios durante la compilación y no afectan al código compilado.
Las líneas de comentario comienzan con un apóstrofo (') o REM seguido de un espacio. Se pueden agregar en cualquier parte
del código, excepto en una cadena. Para anexar un comentario a una instrucción, inserte un apóstrofo o REM después de la
instrucción, seguido del comentario. Los comentarios también pueden escribirse separados en una línea propia. En el ejemplo
siguiente se muestran estas posibilidades.
VB
' This is a comment on a separate code line.
REM This is another comment on a separate code line.
x += a(i) * b(i) ' Add this amount to total.
MsgBox(statusMessage) REM Inform operator of status.

Comprobar errores de compilación


Si después de escribir una línea de código, la línea se muestra con un subrayado azul con líneas onduladas (también puede
mostrarse un mensaje de error), la instrucción contiene un error de sintaxis. Debe averiguar cuál es el problema en la
instrucción y corregirlo; para ello, busque en la lista de tareas o pase el puntero del mouse (ratón) sobre el error y lea el
mensaje de error). Mientras no corrija todos los errores de sintaxis del código, el programa no se compilará correctamente.
Vea también
Tareas
Cómo: Interrumpir y combinar instrucciones en código
Cómo: Aplicar etiquetas a las instrucciones
Conceptos
Instrucciones de asignación
Instrucciones de declaración en Visual Basic
Instrucciones ejecutables
Conceptos del lenguaje Visual Basic

Instrucciones de asignación
Las instrucciones de asignación realizan operaciones de asignación, que consisten en tomar el valor de la derecha del operador
de asignación (=) y almacenarlo en el elemento de la izquierda, como en el ejemplo siguiente.
VB
v = 42

En el ejemplo anterior, la instrucción de asignación almacena el valor literal 42 en la variable v.


Elementos de programación elegibles
El elemento de programación del lado izquierdo del operador de asignación debe poder aceptar y almacenar un valor. Esto
significa que debe ser una variable o propiedad que no es ReadOnly (Visual Basic), o debe ser un elemento de matriz. En el
contexto de una instrucción de asignación, este tipo de elemento a veces se denomina valor l, que significa "valor de la
izquierda".
El valor del lado derecho del operador de asignación se genera mediante una expresión que puede estar formada por
cualquier combinación de literales, constantes, variables, propiedades, elementos de matriz, otras expresiones o llamadas a
función. Esto se ilustra en el siguiente ejemplo:
VB
x = y + z + findResult(3)

En el ejemplo anterior se agrega el valor almacenado en la variable y al valor almacenado en la variable z y, a continuación, se
agrega el valor que devuelve la llamada a la función findResult. El valor total de esta expresión se almacena en la variable x.
Tipos de datos en instrucciones de asignación
Además de valores numéricos, el operador de asignación también puede asignar valores String, tal como muestra el ejemplo
siguiente.
VB
Dim a, b As String
a = "String variable assignment"
b = "Con" & "cat" & "enation"
' The preceding statement assigns the value "Concatenation" to b.

También se pueden asignar valores Boolean utilizando un literal Boolean o una expresión Boolean, tal como muestra el
ejemplo siguiente.
VB
Dim r, s, t As Boolean
r = True
s = 45 > 1003
t = 45 > 1003 Or 45 > 17
' The preceding statements assign False to s and True to t.

Igualmente, se pueden asignar valores adecuados a elementos de programación del tipo de datos Char, Date u Object.
También se puede asignar una instancia de objeto a un elemento declarado como miembro de la clase a partir de la que se
crea esa instancia.
Instrucciones de asignación compuesta
Las instrucciones de asignación compuesta realizan primero una operación en una expresión antes de asignarla a un elemento
de programación. En el siguiente ejemplo se muestra uno de estos operadores, +=, que incrementa el valor de la variable del
lado izquierdo del operador con el valor de la expresión de la derecha.
VB
n += 1

En el ejemplo anterior se suma 1 al valor de n y, a continuación, el nuevo valor se almacena en n. Es el equivalente abreviado
de la siguiente instrucción:
VB
n = n + 1

Mediante el uso de este tipo de operadores, puede realizarse una serie de operaciones de asignación compuestas. Para obtener
una lista de estos operadores y más información sobre ellos, vea Operadores de asignación.
El operador de asignación de concatenación (&=) es útil para agregar una cadena al final de cadenas existentes, como se
muestra en este ejemplo.
VB
Dim q As String = "Sample "
q &= "String"
' q now contains "Sample String".

Conversiones de tipos en instrucciones de asignación


El valor que se asigna a una variable, propiedad o elemento de matriz debe ser de un tipo de datos apropiado para el elemento
de destino. En general, hay que intentar generar un valor del mismo tipo de datos que el del elemento de destino. Sin
embargo, algunos tipos se pueden convertir en otros tipos durante la asignación.
Para obtener información sobre cómo convertir entre tipos de datos, vea Conversiones de tipos en Visual Basic. En pocas
palabras, Visual Basic convierte automáticamente un valor de un tipo dado en cualquier otro tipo al que amplia. Una
conversión de ampliación es aquella que siempre se produce en tiempo de ejecución y no pierde datos. Por ejemplo, Visual
Basic convierte un valor Integer en Double cuando es apropiado, porque Integer se amplia a Double. Para obtener más
información, vea Conversiones de ampliación y de restricción.
Las conversiones de restricción (las que no son de ampliación) conllevan el riesgo de error o de pérdida de datos en tiempo de
ejecución. Las conversiones de restricción se pueden realizar explícitamente mediante una función de conversión de tipos, o se
puede indicar al compilador que realice implícitamente todas las conversiones estableciendo Option Strict Off. Para obtener
más información, vea Conversiones implícitas y explícitas.
Vea también
Referencia
Operadores de asignación
Conceptos
Información general sobre las instrucciones
Instrucciones de declaración en Visual Basic
Instrucciones ejecutables
Conversiones de ampliación y de restricción
Conceptos del lenguaje Visual Basic

Instrucciones de declaración en Visual Basic


Las instrucciones de declaración se utilizan para definir procedimientos, variables, propiedades, matrices y constantes, y
asignarles nombre. Cuando se declara un elemento de programación, también se puede definir su tipo de datos, nivel de
acceso y ámbito. Para obtener más información, vea Características de los elementos declarados.
El siguiente ejemplo contiene tres declaraciones.
VB
Public Sub applyFormat()
Const limit As Integer = 33
Dim thisWidget As New widget
' Insert code to implement the procedure.
End Sub

La primera declaración es la instrucción Sub. Junto con su instrucción End Sub correspondiente, declara un procedimiento
denominado applyFormat. También especifica que applyFormat es Public, lo que quiere decir que cualquier código que pueda
hacer referencia a ella, puede también llamarla.
La segunda declaración es la instrucción Const, que declara la constante limit, que especifica el tipo de datos Integer y un
valor de 33.
La tercera declaración es la instrucción Dim, que declara la variable thisWidget. El tipo de datos es un objeto concreto,
específicamente un objeto creado a partir de la clase Widget. Puede declarar una variable para que sea de cualquier tipo de
datos elemental o de cualquier tipo de objeto que esté expuesto a la aplicación que está usando.
Valores iniciales
Cuando se ejecuta el código que contiene una declaración de instrucción, Visual Basic reserva la memoria requerida para el
elemento declarado. Si el elemento contiene un valor, Visual Basic lo inicializa al valor predeterminado para su tipo de datos.
Para obtener más información, vea "Comportamiento" en Instrucción Dim (Visual Basic).
Puede asignar un valor inicial a una variable como parte de su declaración, como se puede ver en el ejemplo siguiente.
VB
Dim m As Integer = 45
' The preceding declaration creates m and assigns the value 45 to it.

Si la variable es una variable de objeto, al declararla puede crear de forma explícita una instancia de su clase utilizando la
palabra clave New (Visual Basic), como se muestra a continuación:
VB
Dim f As New System.Windows.Forms.Form()

Observe que el valor inicial especificado en una instrucción de declaración no se asigna a una variable hasta que la ejecución
llega a su instrucción de declaración. Hasta ese momento, la variable contiene el valor predeterminado para su tipo de datos.
Vea también
Tareas
Cómo: Declarar una constante
Conceptos
Información general sobre las instrucciones
Instrucciones de asignación
Instrucciones ejecutables
Conceptos del lenguaje Visual Basic

Instrucciones ejecutables
Una instrucción ejecutable realiza una acción. Puede llamar a un procedimiento, bifurcar a otra parte del código, recorrer varias
instrucciones con un bucle o evaluar una expresión. Una instrucción de asignación es un caso especial de una instrucción
ejecutable.
En el ejemplo siguiente se utiliza una estructura de control If...Then...Else para ejecutar diferentes bloques de código
basándose en el valor de una variable. En cada bloque de código, un bucle For...Next se ejecuta un número especificado de
veces.
VB
Public Sub startWidget(ByVal aWidget As widget, _
ByVal clockwise As Boolean, ByVal revolutions As Integer)
Dim counter As Integer
If clockwise = True Then
For counter = 1 To revolutions
aWidget.spinClockwise()
Next counter
Else
For counter = 1 To revolutions
aWidget.spinCounterClockwise()
Next counter
End If
End Sub

Después, la instrucción If del ejemplo anterior comprueba el valor del parámetro clockwise. Si el valor es True, llama al
método spinClockwise de aWidget. Si el valor es False, llama al método spinCounterClockwise de aWidget. La estructura de
control If...Then...Else finaliza con End If.
El bucle For...Next de cada bloque llama al método adecuado un número de veces igual al valor del parámetro revolutions.
Vea también
Conceptos
Información general sobre las instrucciones
Instrucciones de asignación
Instrucciones de declaración en Visual Basic
Conceptos del lenguaje Visual Basic

Procedimientos en Visual Basic


Un procedimiento es un bloque de instrucciones de Visual Basic incluido entre una instrucción de declaración (Function, Sub,
Operator, Get, Set) y una declaración End correspondiente. En Visual Basic, todas las instrucciones ejecutables deben incluirse
en algún procedimiento.
Llamar a un procedimiento
Los procedimientos se invocan desde otras partes del código. Esto se conoce como una llamada a procedimiento. Cuando
finaliza la ejecución de un procedimiento, éste devuelve el control al código que lo invocó, que recibe el nombre de código de
llamada. El código de llamada es una instrucción o una expresión contenida en una instrucción, que hace referencia al
procedimiento por su nombre y le transfiere el control.
Volver de un procedimiento
Los procedimientos devuelven el control al código de llamada cuando finalizan su ejecución. Para ello, puede utilizar
Instrucción Return (Visual Basic), la instrucción Instrucción Exit (Visual Basic) apropiada para el procedimiento o la instrucción
End (Visual Basic) del procedimiento. El control se devuelve al código de llamada, a continuación del punto de la llamada al
procedimiento.
Con una instrucción Return, el control vuelve inmediatamente al código de llamada. No se ejecutan las instrucciones
siguientes a la instrucción Return. Puede tener más de una instrucción Return en el mismo procedimiento.
Con una instrucción Exit Sub o Exit Function, el control vuelve inmediatamente al código de llamada. No se ejecutan
las instrucciones siguientes a la instrucción Exit. Puede tener más de una instrucción Exit en el mismo procedimiento, y
puede mezclar las instrucciones Return y Exit en el mismo procedimiento.
Si un procedimiento no incluye instrucciones Return o Exit, concluye con una instrucción End Sub o End Function,
End Get o End Set a continuación de la última instrucción del cuerpo del procedimiento. La instrucción End devuelve el
control inmediatamente al código de llamada. Puede tener sólo una instrucción End en un procedimiento.
Parámetros y argumentos
En la mayoría de los casos, un procedimiento necesita funcionar en datos diferentes cada vez que lo llama. Puede pasar esta
información al procedimiento como parte de la llamada al procedimiento. El procedimiento define cero o más parámetros,
cada uno de los cuales representa un valor que el procedimiento espera que le pase. Cada parámetro de la definición del
procedimiento cuenta con un argumento correspondiente en la llamada al procedimiento. Un argumento representa el valor
que pasa al parámetro correspondiente en una llamada a procedimiento determinada.
Tipos de procedimientos
Visual Basic utiliza varios tipos de procedimientos:
Procedimientos Sub: ejecutan acciones pero no devuelven un valor al código de llamada.
Los procedimientos de control de eventos son procedimientos Sub que se ejecutan en respuesta a un evento provocado
por una acción del usuario o por un suceso en un programa.
Procedimientos Function: devuelven un valor al código de llamada. Pueden realizar otras acciones antes de volver.
Procedimientos de propiedad: devuelven y asignan valores de propiedades en objetos o módulos.
Procedimientos de operador: definen el comportamiento de un operador estándar cuando uno o los dos operandos son
una clase definida recientemente o una estructura.
Procedimientos genéricos en Visual Basic: definen uno o varios parámetros de tipo además de sus parámetros normales,
de forma que el código de llamada puede pasar tipos de datos específicos cada vez que realiza una llamada.
Procedimientos y código estructurado
Todas las líneas de código ejecutable de una aplicación deben encontrarse dentro de un procedimiento, por ejemplo, Main,
calculate o Button1_Click. La aplicación se leerá con mayor facilidad si subdivide los procedimientos grandes en
procedimientos más pequeños.
Los procedimientos son útiles para realizar tareas repetitivas o compartidas, como cálculos de uso frecuente, manipulación de
texto y controles, y operaciones con bases de datos. Se puede llamar a un procedimiento desde distintos lugares del código; de
modo que los procedimientos se prestan a servir de unidades de creación de la aplicación.
La estructuración del código en procedimientos aporta las siguientes ventajas:
Los procedimientos permiten desglosar los programas en unidades lógicas independientes. Es más fácil depurar
unidades individuales que todo un programa sin procedimientos.
Después de desarrollar los procedimientos para el uso en un programa, puede utilizarlos en otros programas, a menudo
con pocas o ninguna modificación. Esto ayuda a evitar la duplicación del código.
Vea también
Tareas
Cómo: crear un procedimiento
Conceptos
Procedimientos Sub
Procedimientos Function
Procedimientos de propiedad
Procedimientos de operador
Argumentos y parámetros de procedimiento
Procedimientos recursivos
Sobrecarga de procedimientos
Procedimientos genéricos en Visual Basic
Otros recursos
Programación orientada a objetos en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Dividir secciones de código grandes en secciones más


pequeñas
Todas las instrucciones ejecutables en Visual Basic deben estar dentro de algún procedimiento, como Main, Form1_Load o
calculateTotal. Es posible escribir toda la aplicación como un procedimiento único y grande pero si lo divide en partes más
pequeñas, el código es más legible.
La programación estructurada es un enfoque que resalta la modularidad del programa y una estructura jerárquica dentro de
una aplicación. En Visual Basic, la manera más sencilla de lograr una programación estructurada es hacer un uso juicioso de los
procedimientos para dividir la aplicación en unidades lógicas discretas. Puede depurar más fácilmente una unidad individual
que el programa completo. Los procedimientos desarrollados para un programa pueden utilizarse también en otros
programas, generalmente sin tener que realizar apenas modificaciones.
División de un procedimiento grande
Para dividir un procedimiento grande en partes independientes
1. Identifique una o más secciones independientes de su código.
2. Para cada sección independiente, mueva el código fuente fuera del procedimiento grande e inclúyalo entre las
instrucciones Sub y End Sub
3. En el lugar del procedimiento grande en el que quitó la sección de código, agregue una instrucción que llame al
procedimiento Sub.
Devolver un valor al procedimiento grande
Si es útil que el nuevo procedimiento devuelva un valor al procedimiento grande, puede definir un procedimiento Function.
Para dividir una sección que devuelve un valor
1. Incluya el código fuente quitado entre las instrucciones Function y End Function en lugar de Sub y End Sub.
2. En el lugar en el que el procedimiento Function tiene el valor listo para devolver al código de llamada, agregue una
instrucción Return.
3. En el punto del procedimiento grande en el que quitó la sección de código, asegúrese de que la instrucción de llamada
hace algo con el valor devuelto. Puede almacenarlo en una variable o utilizarlo en una expresión.
Vea también
Tareas
Cómo: crear un procedimiento
Conceptos
Procedimientos en Visual Basic
Procedimientos Sub
Procedimientos Function
Procedimientos de propiedad
Procedimientos de operador
Argumentos y parámetros de procedimiento
Procedimientos recursivos
Sobrecarga de procedimientos
Otros recursos
Programación orientada a objetos en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: crear un procedimiento


Se incluye un procedimiento entre una instrucción de declaración de inicio (Sub o Function) y una instrucción de declaración
de fin (End Sub o End Function). Todo el código del procedimiento está incluido entre estas instrucciones.
Un procedimiento no puede contener otro procedimiento, por lo que sus instrucciones de inicio y de fin deben estar fuera de
cualquier otro procedimiento.
Si tiene un código que realiza la misma tarea en distintos lugares, puede escribir la tarea una vez como procedimiento y
llamarlo después desde distintos lugares del código.
Para crear un procedimiento que no devuelve un valor
1. Fuera de cualquier otro procedimiento, utilice una instrucción Sub, seguida de una instrucción End Sub.
2. En la instrucción Sub, agregue detrás de la palabra clave Sub el nombre del procedimiento y, a continuación, la lista de
parámetros entre paréntesis.
3. Coloque las instrucciones del código del procedimiento entre las instrucciones Sub y End Sub
Para crear un procedimiento que devuelva un valor
1. Fuera de cualquier otro procedimiento, utilice una instrucción Function, seguida de una instrucción End Function.
2. En la instrucción Function, agregue detrás de la palabra clave Function el nombre del procedimiento y una cláusula As
en la que se especifique el tipo de datos del valor devuelto.
3. Coloque las instrucciones del código del procedimiento entre las instrucciones Function y End Function
4. Utilice una instrucción Return para devolver el valor al código de llamada.
Para conectar el nuevo procedimiento con los anteriores bloques de código repetitivos
1. Asegúrese de que define el nuevo procedimiento en un lugar donde el código anterior tiene acceso a él.
2. En el anterior bloque de código repetitivo, reemplace las instrucciones que realizan la tarea repetitiva por una única
instrucción que llama al procedimiento Sub o Function.
3. Si el procedimiento es una Function que devuelve un valor, asegúrese de que la instrucción de llamada realiza una
acción con el valor devuelto, como almacenarlo en una variable o, de lo contrario, se perderá el valor.
Ejemplo
El siguiente procedimiento Function calcula la hipotenusa de un triángulo rectángulo a partir de los valores de los catetos.
VB
Function hypotenuse(ByVal side1 As Single, ByVal side2 As Single) As Single
Return Math.Sqrt((side1 ^ 2) + (side2 ^ 2))
End Function

Vea también
Tareas
Cómo: Dividir secciones de código grandes en secciones más pequeñas
Conceptos
Procedimientos en Visual Basic
Procedimientos Sub
Procedimientos Function
Procedimientos de propiedad
Procedimientos de operador
Argumentos y parámetros de procedimiento
Procedimientos recursivos
Sobrecarga de procedimientos
Otros recursos
Programación orientada a objetos en Visual Basic
Conceptos del lenguaje Visual Basic

Procedimientos Sub
Un procedimiento Sub consiste en una serie de instrucciones de Visual Basic delimitadas por las instrucciones Sub y End Sub.
El procedimiento Sub ejecuta una tarea y devuelve el control al código de llamada, pero no le devuelve un valor.
Cada vez que se llama a un procedimiento, se ejecutan las instrucciones de éste, desde la primera instrucción ejecutable tras la
instrucción Sub hasta la primera instrucción End Sub, Exit Sub o Return que se encuentre.
Se puede definir un procedimiento Sub en módulos, clases y estructuras. Es Public de forma predeterminada, lo que significa
que puede llamarlo desde cualquier lugar de la aplicación que tenga acceso al módulo, clase o estructura en el que se ha
definido. El término método describe un procedimiento Sub o Function al que se tiene acceso desde fuera de su módulo,
clase o estructura en el que se ha definido. Para obtener más información, vea Métodos de una clase.
Un procedimiento Sub puede aceptar argumentos, como constantes, variables o expresiones, que le pasa el código de llamada.
Sintaxis de la declaración
La sintaxis para declarar un procedimiento Sub es la siguiente:
[ modifiers ] Sub subname [( parameterlist )]
' Statements of the Sub procedure.
End Sub

Los modifiers pueden especificar un nivel de acceso e información relativo a la sobrecarga, al reemplazo, uso compartido y
sombreado. Para obtener más información, vea Instrucción Sub (Visual Basic).
Declaración de parámetros
Puede declarar un parámetro del procedimiento de igual forma que lo haría con una variable, especificando el nombre de
parámetro y el tipo de datos. También puede especificar el mecanismo para pasar argumentos y si el parámetro es opcional o
una matriz de parámetros.
La sintaxis de los parámetros de una lista de parámetros es la siguiente:
[Optional] [ByVal | ByRef] [ParamArray] parametername As datatype
Si el parámetro es opcional, debe proporcionar también un valor predeterminado como parte de su declaración. La sintaxis
para especificar un valor predeterminado es la siguiente:
Optional [ByVal | ByRef] parametername As datatype = defaultvalue
Parámetros como variables locales
Cuando el control pasa al procedimiento, cada parámetro se trata como una variable local. Esto significa que su período de
duración es igual al del procedimiento y su ámbito es el procedimiento completo.
Sintaxis de llamada
Los procedimientos Sub se invocan de forma explícita, con una instrucción de llamada independiente. No se les puede llamar
utilizando su nombre en una expresión. Debe suministrar valores para todos los argumentos que no sean opcionales e incluir
la lista de argumentos entre paréntesis. Si no se proporcionan argumentos, se puede omitir el paréntesis. El uso de la palabra
clave Call es opcional aunque no recomendado.
La sintaxis para llamar a un procedimiento Sub es la siguiente:
[Call] subname [( argumentlist )]
Puede llamar a un método Sub desde fuera de la clase que lo define. Primero, tiene que utilizar la palabra clave New para
crear una instancia de la clase o llamar a un método que devuelve una instancia de la clase. Para obtener más información, vea
Cómo: Utilizar la nueva palabra clave. A continuación, puede utilizar la sintaxis siguiente para llamar al método Sub en el
objeto de instancia:
Object.methodname[(argumentlist)]
Para obtener más información, vea Cómo: Realizar acciones con métodos.
Ejemplo de declaración y llamada
El procedimiento Sub que aparece a continuación notifica al usuario del equipo la tarea que está a punto de realizar la
aplicación, y también muestra una marca de tiempo. En lugar de duplicar este código al principio de cada tarea, la aplicación
simplemente llama a tellOperator desde varios lugares. Cada llamada pasa una cadena al argumento task que identifica la
tarea que se va a iniciar.
VB
Sub tellOperator(ByVal task As String)
Dim stamp As Date
stamp = TimeOfDay()
MsgBox("Starting " & task & " at " & CStr(stamp))
End Sub

El ejemplo siguiente muestra una llamada típica a tellOperator.


VB
Call tellOperator("file update")

Vea también
Tareas
Cómo: Llamar a un procedimiento que no devuelve un valor
Cómo: Llamar a un controlador de eventos en Visual Basic
Referencia
Instrucción Sub (Visual Basic)
Conceptos
Procedimientos en Visual Basic
Procedimientos Function
Procedimientos de propiedad
Procedimientos de operador
Argumentos y parámetros de procedimiento
Conceptos del lenguaje Visual Basic

Cómo: Llamar a un procedimiento que no devuelve un valor


Un procedimiento Sub no devuelve un valor al código de llamada. Se llama a este procedimiento de forma explícita, con una
instrucción de llamada independiente. No se le puede llamar utilizando simplemente su nombre en una expresión.
La instrucción de llamada puede utilizar opcionalmente la palabra clave Call. Esto se recomienda porque mejora la legibilidad
de su código.
Para llamar a un procedimiento Sub
1. Utilice una instrucción Call y agregue detrás de la palabra clave Call el nombre del procedimiento Sub.
2. Agregue paréntesis detrás del nombre de procedimiento para incluir la lista de argumentos. Si no hay ningún
argumento, puede omitir opcionalmente los paréntesis. No obstante, el uso de paréntesis facilita la lectura del código.
3. Coloque los argumentos en la lista de argumentos entre paréntesis y separados por comas. Asegúrese de proporcionar
los argumentos en el mismo orden en que el procedimiento Sub define los parámetros correspondientes.
El ejemplo siguiente llama a la función AppActivate de Visual Basic para activar una ventana de la aplicación.
AppActivate acepta el título de la ventana como único argumento. No devuelve ningún valor al código de llamada. Si no
se está ejecutando un proceso del Bloc de notas, el ejemplo produce una excepción ArgumentException. En el
procedimiento Shell se presupone que las aplicaciones se encuentran en las rutas de acceso especificadas.
VB
Dim notepadID As Integer
' Activate a running Notepad process.
AppActivate("Untitled - Notepad")
' AppActivate can also use the return value of the Shell function.
' Shell runs a new instance of Notepad.
notepadID = Shell("C:\WINNT\NOTEPAD.EXE", AppWinStyle.NormalFocus)
' Activate the new instance of Notepad.
AppActivate(notepadID)

Vea también
Tareas
Cómo: crear un procedimiento
Cómo: Llamar a un procedimiento que devuelve un valor
Cómo: Llamar a un controlador de eventos en Visual Basic
Referencia
Instrucción Sub (Visual Basic)
Shell (Función)
ArgumentException
Conceptos
Procedimientos en Visual Basic
Procedimientos Sub
Argumentos y parámetros de procedimiento
Conceptos del lenguaje Visual Basic

Cómo: Llamar a un controlador de eventos en Visual Basic


Un evento es una acción o un suceso (por ejemplo, cuando se hace clic con el mouse o cuando se supera un límite de crédito)
que reconoce algún componente del programa y para el cual puede escribirse un código de respuesta. Un controlador de
eventos es el código que se escribe para responder a un evento.
En Visual Basic, un controlador de eventos es un procedimiento Sub. Sin embargo, normalmente no se llama a este
procedimiento del mismo modo que a otros procedimientos Sub; sino que se identifica el procedimiento como un controlador
del evento. Esto puede hacerse con una cláusula Handles y una variable WithEvents o con una instrucción
AddHandler (Instrucción). En Visual Basic, de manera predeterminada se utiliza una cláusula Handles para declarar un
controlador de eventos. Ésta es la técnica que utilizan los diseñadores para escribir los controladores de eventos cuando
programan en el entorno de desarrollo integrado (IDE). La instrucción AddHandler resulta conveniente para desencadenar
eventos de forma dinámica en tiempo de ejecución.
Cuando se produce el evento, Visual Basic llama automáticamente al procedimiento del controlador de eventos. Cualquier
código que tenga acceso al evento puede hacer que éste se desencadene ejecutando RaiseEvent (Instrucción).
Puede asociar más de un controlador de eventos al mismo evento. En algunos casos, puede desasociar un controlador de un
evento. Para obtener más información, vea Eventos en Visual Basic.
Para llamar a un controlador de eventos utilizando Handles y WithEvents
1. Asegúrese de que el evento se declara con una instrucción Event (Instrucción).
2. Declare una variable de objeto en el nivel de módulo o de clase utilizando la palabra clave WithEvents. La cláusula As de
esta variable debe especificar la clase que produce el evento.
3. En la declaración del procedimiento Sub de control de eventos, agregue una cláusula Handles que especifique la variable
WithEvents y el nombre del evento.
4. Cuando se produce el evento, Visual Basic llama automáticamente al procedimiento Sub. El código puede utilizar una
instrucción RaiseEvent para desencadenar el evento.
En el ejemplo siguiente se define un evento y una variable WithEvents que hace referencia a la clase que desencadena el
evento. El procedimiento Sub de control de eventos utiliza una cláusula Handles para especificar la clase y el evento que
ésta controla.
VB
Public Class raisesEvent
Public Event somethingHappened()
Dim WithEvents happenObj As New raisesEvent
Public Sub processHappen() Handles happenObj.somethingHappened
' Insert code to handle somethingHappened event.
End Sub
End Class

Para llamar a un controlador de eventos utilizando AddHandler


1. Asegúrese de que el evento se declara con una instrucción Event.
2. Ejecute una instrucción AddHandler (Instrucción) para conectar de forma dinámica el procedimiento Sub de control de
eventos con el evento.
3. Cuando se produce el evento, Visual Basic llama automáticamente al procedimiento Sub. El código puede utilizar una
instrucción RaiseEvent para desencadenar el evento.
En el ejemplo siguiente se define un procedimiento Sub que controla el evento Closing de un formulario. A continuación,
utiliza la instrucción AddHandler (Instrucción) para asociar el procedimiento catchClose como un controlador del evento
Closing.
VB
' Place these procedures inside a Form class definition.
Private Sub catchClose(ByVal sender As Object, ByVal e As System.ComponentModel.Cancel
EventArgs)
' Insert code to deal with impending closure of this form.
End Sub
Public Sub formOpened()
AddHandler Me.Closing, AddressOf catchClose
End Sub

Puede desasociar un controlador de eventos de un evento ejecutando RemoveHandler (Instrucción).


Vea también
Tareas
Cómo: crear un procedimiento
Cómo: Llamar a un procedimiento que no devuelve un valor
Referencia
Instrucción Sub (Visual Basic)
AddressOf (Operador)
Conceptos
Procedimientos en Visual Basic
Procedimientos Sub
Conceptos del lenguaje Visual Basic

Procedimientos Function
Un procedimiento Function consiste en una serie de instrucciones de Visual Basic delimitadas por las instrucciones Function
y End Function. El procedimiento Function realiza una tarea y, a continuación, devuelve el control al código de llamada.
Cuando devuelve el control, también devuelve un valor al código de llamada.
Cada vez que se llama a un procedimiento, se ejecutan las instrucciones de éste, desde la primera instrucción ejecutable tras la
instrucción Function hasta la primera instrucción End Function, Exit Function o Return que se encuentre.
Puede definir un procedimiento Function en un módulo, clase o estructura. Es Public de forma predeterminada, lo que
significa que puede llamarlo desde cualquier lugar de la aplicación que tenga acceso al módulo, clase o estructura en el que se
ha definido.
Un procedimiento Function puede aceptar argumentos, como constantes, variables o expresiones, que le pasa el código de
llamada.
Sintaxis de la declaración
La sintaxis para declarar un procedimiento Function es la siguiente:
[ modifiers ] Function functionname [( parameterlist )] As returntype
' Statements of the Function procedure.
End Function

Los modifiers pueden especificar un nivel de acceso e información relativo a la sobrecarga, al reemplazo, uso compartido y
sombreado. Para obtener más información, vea Instrucción Function (Visual Basic).
Declara cada parámetro de la misma manera que para Procedimientos Sub.
Tipo de datos
Todos los procedimientos Function tienen un tipo de datos, al igual que las variables. La cláusula As especifica este tipo de
datos en la instrucción Function y determina el tipo de datos del valor que la función devuelve al código de llamada. En las
siguientes declaraciones de ejemplo se ilustra esto último.

Function yesterday() As Date


End Function
Function findSqrt(ByVal radicand As Single) As Single
End Function

Para obtener más información, vea "Partes" en Instrucción Function (Visual Basic).
Valores devueltos
El valor que un procedimiento Function devuelve al código de llamada se denomina valor devuelto. El procedimiento
devuelve dicho valor de dos maneras:
La función asigna un valor a su propio nombre de función en una o más instrucciones del procedimiento. El control no
vuelve al programa de llamada hasta que se ejecuta una instrucción Exit Function o End Function. Esto se ilustra en el
siguiente ejemplo:
Function functionname [( parameterlist )] As returntype
' The following statement does not transfer control back to the calling code.

functionname = expression
' When control returns to the calling code, expression is the return value.

End Function

Utiliza la instrucción Return para especificar el valor devuelto y devuelve el control inmediatamente al programa de
llamada. Esto se ilustra en el siguiente ejemplo:
Function functionname [( parameterlist )] As returntype
' The following statement immediately transfers control back to the calling code and returns the value
of expression .

Return expression

End Function

La ventaja de asignar el valor devuelto al nombre de la función es que el control permanece en el procedimiento hasta que
encuentra una instrucción Exit Function o End Function, lo que permite asignar un valor previo y, si es necesario, se puede
ajustar después.
Para obtener más información, vea "Valor devuelto" en Instrucción Function (Visual Basic).
Matrices devueltas
Si el procedimiento Function devuelve datos de tipo matricial, el acceso a los elementos individuales de la matriz no es
posible dentro de la función. Si se intentara hacerlo, el compilador lo interpretará como una llamada recursiva al
procedimiento. Esto se ilustra en el siguiente ejemplo:
Function allOnes(ByVal n As Integer) As Integer()
For i As Integer = 1 To n - 1
' The following statement generates a COMPILER ERROR .
allOnes(i) = 1
Next i
' The following statement generates a COMPILER ERROR .
Return allOnes()
End Function

En el ejemplo anterior, el compilador interpreta la asignación intentada allOnes(i) = 1 como una llamada a allOnes en el
lado izquierdo de una instrucción de asignación. Interpreta la instrucción intentada Return allOnes() como una llamada sin
argumento. Ambas instrucciones generan errores de compilador.
Sintaxis de llamada
Para invocar a un procedimiento Function hay que incluir el nombre y los argumentos de éste en la parte derecha de una
instrucción de asignación o en una expresión. Debe suministrar valores para todos los argumentos que no sean opcionales e
incluir la lista de argumentos entre paréntesis. Si no se proporcionan argumentos, se puede omitir el paréntesis.
La sintaxis para llamar a un procedimiento Function es la siguiente:
lvalue = functionname [( argumentlist )]
If (( functionname [( argumentlist )] / 3) <= expression ) Then

Cuando se llama a un procedimiento Function, no es necesario utilizar su valor devuelto, en cuyo caso se ejecutan todas las
acciones de la función, pero se omite el valor devuelto. A menudo, se llama así a MsgBox.
Ejemplo de declaración y llamada
El siguiente procedimiento Function calcula la hipotenusa de un triángulo rectángulo a partir de los valores de los catetos.
VB
Function hypotenuse(ByVal side1 As Single, ByVal side2 As Single) As Single
Return Math.Sqrt((side1 ^ 2) + (side2 ^ 2))
End Function

El ejemplo siguiente muestra una llamada típica a hypotenuse.


VB
Dim testLength, testHypotenuse As Single
testHypotenuse = hypotenuse(testLength, 10.7)

Funciones en tiempo de ejecución de Visual Basic


El tiempo de ejecución de Visual Basic proporciona muchas funciones que se encuentran en el espacio de nombres
Microsoft.VisualBasic. Entre las funciones más comunes se incluyen, por ejemplo, Beep (Función),
MsgBox (Función, Visual Basic) y StrComp (Función, Visual Basic). Puede llamar a estas funciones de la misma manera que
llama a los procedimientos Function que ha creado.
Vea también
Tareas
Cómo: Crear un procedimiento que devuelve un valor
Cómo: Devolver un valor de un procedimiento
Cómo: Llamar a un procedimiento que devuelve un valor
Referencia
Instrucción Function (Visual Basic)
Conceptos
Procedimientos en Visual Basic
Procedimientos Sub
Procedimientos de propiedad
Procedimientos de operador
Argumentos y parámetros de procedimiento
Conceptos del lenguaje Visual Basic

Cómo: Crear un procedimiento que devuelve un valor


Utiliza un procedimiento Function para devolver un valor al código de llamada.
Para crear un procedimiento que devuelva un valor
1. Fuera de cualquier otro procedimiento, utilice una instrucción Function, seguida de una instrucción End Function.
2. En la instrucción Function, siga la palabra clave Function con el nombre del procedimiento y a continuación la lista de
parámetros entre paréntesis.
3. A continuación de paréntesis incluya una cláusula As para especificar el tipo de datos del valor devuelto.
4. Coloque las instrucciones de código del procedimiento entre las instrucciones Function y End Function.
5. Utilice una instrucción Return para devolver el valor al código de llamada.
El siguiente procedimiento Function calcula la hipotenusa de un triángulo rectángulo a partir de los valores de los
catetos.
VB
Function hypotenuse(ByVal side1 As Single, ByVal side2 As Single) As Single
Return Math.Sqrt((side1 ^ 2) + (side2 ^ 2))
End Function

El ejemplo siguiente muestra una llamada típica a hypotenuse.


VB
Dim testLength, testHypotenuse As Single
testHypotenuse = hypotenuse(testLength, 10.7)

Vea también
Tareas
Cómo: Devolver un valor de un procedimiento
Cómo: Llamar a un procedimiento que devuelve un valor
Referencia
Instrucción Function (Visual Basic)
Conceptos
Procedimientos en Visual Basic
Procedimientos Sub
Procedimientos de propiedad
Procedimientos de operador
Argumentos y parámetros de procedimiento
Conceptos del lenguaje Visual Basic

Cómo: Devolver un valor de un procedimiento


Un procedimiento Function devuelve un valor al código de llamada ejecutando una instrucción Return o encontrando una
instrucción Exit Function o End Function
Para devolver un valor mediante la instrucción Return
1. Coloque una instrucción Return en el punto en el que finaliza la tarea del procedimiento.
2. Agregue detrás de la palabra clave Return una expresión que genere el valor que desea que se devuelva al código de
llamada.
3. Puede tener más de una instrucción Return en el mismo procedimiento.
El siguiente procedimiento Function calcula la hipotenusa de un triángulo rectángulo y la devuelve al código de llamada.
VB
Function hypotenuse(ByVal side1 As Single, ByVal side2 As Single) As Single
Return Math.Sqrt((side1 ^ 2) + (side2 ^ 2))
End Function

El ejemplo siguiente muestra una llamada típica a hypotenuse que almacena el valor devuelto.
VB
Dim testLength, testHypotenuse As Single
testHypotenuse = hypotenuse(testLength, 10.7)

Para devolver un valor mediante Exit Function o End Function


1. En al menos un lugar del procedimiento Function, asigne un valor al nombre del procedimiento.
2. Al ejecutar una instrucción Exit Function o End Function, Visual Basic devuelve el valor asignado más recientemente al
nombre del procedimiento.
3. Puede tener más de una instrucción Exit Function en el mismo procedimiento, y puede mezclar las instrucciones
Return y Exit Function en el mismo procedimiento.
4. Puede tener sólo una instrucción End Function en un procedimiento Function.
Para obtener más información y un ejemplo, vea "Valor devuelto" en Instrucción Function (Visual Basic).
Vea también
Tareas
Cómo: Crear un procedimiento que devuelve un valor
Cómo: Llamar a un procedimiento que devuelve un valor
Referencia
Instrucción Function (Visual Basic)
Instrucción Return (Visual Basic)
Conceptos
Procedimientos en Visual Basic
Procedimientos Sub
Procedimientos de propiedad
Procedimientos de operador
Argumentos y parámetros de procedimiento
Conceptos del lenguaje Visual Basic

Cómo: Llamar a un procedimiento que devuelve un valor


Un procedimiento Function devuelve un valor al código de llamada. Para llamar a un procedimiento, hay que incluir el
nombre y los argumentos de éste en la parte derecha de una instrucción de asignación o en una expresión.
Puede utilizar la palabra clave Call para llamar al procedimiento Function. Sin embargo, esta técnica omite el valor devuelto
por el procedimiento.
Para llamar a un procedimiento Function dentro de una expresión
1. Utilice el nombre del procedimiento Function del mismo modo que utilizaría una variable. Puede utilizar una llamada al
procedimiento Function en cualquier parte de la expresión en la que utilizaría una variable o una constante.
2. Agregue paréntesis después del nombre del procedimiento para incluir entre ellos la lista de argumentos. Si no hay
ningún argumento, puede omitir opcionalmente los paréntesis. Sin embargo, los paréntesis hacen que el código sea más
fácil de leer.
3. En la lista de argumentos, sitúe los argumentos entre paréntesis y separados por comas. Asegúrese de proporcionar los
argumentos en el mismo orden en que el procedimiento Function define los parámetros correspondientes.
Si lo desea, puede transferir también uno o varios argumentos por nombre. Para obtener más información, vea
Pasar argumentos por posición o por nombre.
4. El valor devuelto desde el procedimiento participa en la expresión del mismo modo que lo haría una variable o una
constante.
Para llamar a un procedimiento Function en una instrucción de asignación
1. Utilice el nombre del procedimiento Function situado detrás del signo igual (=) en una instrucción de asignación.
2. Agregue paréntesis después del nombre del procedimiento para incluir entre ellos la lista de argumentos. Si no hay
ningún argumento, puede omitir opcionalmente los paréntesis. Sin embargo, los paréntesis hacen que el código sea más
fácil de leer.
3. En la lista de argumentos, sitúe los argumentos entre paréntesis y separados por comas. Asegúrese de proporcionar los
argumentos en el mismo orden en que el procedimiento Function define los parámetros correspondientes, a menos que
los esté transfiriendo por nombre.
4. El valor devuelto desde el procedimiento se almacena en la variable o propiedad situada en el lado izquierdo de la
instrucción de asignación.
Ejemplo
En el ejemplo siguiente se llama a la función Environ (Función) de Visual Basic para recuperar el valor de una variable de
entorno del sistema operativo. La primera línea llama a Environ dentro de una expresión, y la segunda línea hace la llamada
en una instrucción de asignación. Environ toma el nombre de la variable como su único argumento. Devuelve el valor de la
variable al código de llamada.
VB
MsgBox("Value of PATH is " & Environ("PATH"))
Dim currentPath As String = Environ("PATH")

Vea también
Tareas
Cómo: Crear un procedimiento que devuelve un valor
Cómo: Devolver un valor de un procedimiento
Cómo: Llamar a un procedimiento que no devuelve un valor
Referencia
Instrucción Function (Visual Basic)
Conceptos
Procedimientos Function
Argumentos y parámetros de procedimiento
Conceptos del lenguaje Visual Basic

Procedimientos de propiedad
Un procedimiento de propiedad es una serie de instrucciones de Visual Basic que manipulan una propiedad personalizada en
un módulo, una clase o una estructura. Los procedimientos Property también se conocen como descriptores de acceso de
propiedades.
Visual Basic proporciona los procedimientos de propiedad siguientes:
Un procedimiento Get devuelve el valor de una propiedad. Se le llama al tener acceso a la propiedad en una expresión.
Un procedimiento Set establece una propiedad en un valor, incluida una referencia a objeto. Se le llama al asignar un
valor a la propiedad.
Se suelen definir procedimientos de propiedad en pares, mediante las instrucciones Get y Set, pero también se puede definir
uno de los procedimientos solamente si la propiedad es de sólo lectura (Get (Instrucción)) o de sólo escritura
(Instrucción Set (Visual Basic)).
Las propiedades pueden definirse en clases, estructuras y módulos. Las propiedades son Public de manera predeterminada, lo
que significa que es posible llamarlas desde cualquier parte de la aplicación que tenga acceso al contenedor de propiedades.
Para consultar una comparación de propiedades y variables, vea Diferencias entre propiedades y variables en Visual Basic.
Sintaxis de la declaración
Una propiedad en sí se define como un bloque de código delimitado por las instrucciones Property (Instrucción) y End
Property. Dentro de este bloque, cada procedimiento de propiedad aparece como un bloque interno incluido entre una
instrucción de declaración (Get o Set) y la declaración End correspondiente.
La sintaxis para declarar una propiedad y sus procedimientos es la siguiente:
[Default] [modifiers] Property propertyname[(parameterlist)] As datatype
[accesslevel] Get
' Statements of the Get procedure.
' The following statement returns expression as the property's value.
Return expression
End Get
[accesslevel] Set[(ByVal newvalue As datatype)]
' Statements of the Set procedure.
' The following statement assigns newvalue as the property's value.
lvalue = newvalue
End Set
End Property

Los modifiers pueden especificar un nivel de acceso e información relativo a la sobrecarga, al reemplazo, uso compartido y
sombreado, y si la propiedad es de sólo lectura o de sólo escritura. El access level del procedimiento Get o Set puede ser de un
nivel que sea más restrictivo que el nivel de acceso especificado por la propiedad en sí. Para obtener más información, vea
Property (Instrucción).
Tipo de datos
El tipo de datos de una propiedad y el nivel de acceso principal están definidos en la instrucción Property y no en los
procedimientos de propiedad. Una propiedad puede tener sólo un tipo de datos. Por ejemplo, no puede definirse una
propiedad para que almacene un valor Decimal y que recupere un valor Double.
Nivel de acceso
Sin embargo, puede definir un nivel de acceso principal para una propiedad y restringir aún más el nivel de acceso en uno de
sus procedimientos de propiedad. Por ejemplo, puede definir una propiedad Public y, a continuación, definir un
procedimiento Private Set. El procedimiento Get sigue siendo Public. Puede cambiar el nivel de acceso en sólo uno de los
procedimientos de una propiedad y que sea aún más restrictivo que el nivel de acceso principal. Para obtener más
información, vea Cómo: Declarar una propiedad con niveles de acceso mixtos.
Declaración de parámetros
Los parámetros se declaran de la misma manera que se declara Procedimientos Sub, excepto que el mecanismo para pasar
argumentos debe ser ByVal.
La sintaxis de los parámetros de una lista de parámetros es la siguiente:
[Optional] ByVal [ParamArray] parametername As datatype

Si el parámetro es opcional, debe proporcionar también un valor predeterminado como parte de su declaración. La sintaxis
para especificar un valor predeterminado es la siguiente:
Optional ByVal parametername As datatype = defaultvalue

Valor de propiedad
En un procedimiento Get, el valor devuelto se suministra a la expresión de llamada como valor de la propiedad.
En un procedimiento Set, el nuevo valor de la propiedad se pasa al parámetro de la instrucción Set. Si un parámetro se declara
de forma explícita, el tipo de datos de éste debe ser el mismo que el de la propiedad. Si no se declara un parámetro, el
compilador utiliza el parámetro implícito Value para representar el nuevo valor que se va a asignar a la propiedad.
Sintaxis de llamada
Se invoca un procedimiento de propiedad implícitamente haciendo referencia a la propiedad. Se utiliza el nombre de la
propiedad del mismo modo que si se tratase del nombre de una variable, a excepción de que se deben suministrar valores
para todos los argumentos que no sean opcionales e incluir la lista de argumentos entre paréntesis. Si no se proporcionan
argumentos, se puede omitir el paréntesis.
La sintaxis de una llamada implícita a un procedimiento Set es la siguiente:
propertyname[(argumentlist)] = expression

La sintaxis de una llamada implícita a un procedimiento Get es la siguiente:


lvalue = propertyname[(argumentlist)]
Do While (propertyname[(argumentlist)] > expression)
Ejemplo de declaración y llamada
La propiedad siguiente almacena un nombre completo como dos nombres constitutivos, el nombre y el apellido. Cuando el
código de llamada lee fullName, el procedimiento Get combina los dos nombres constitutivos y devuelve el nombre completo.
Cuando el código de llamada asigna un nuevo nombre completo, el procedimiento Set intenta dividirlo en dos nombres
constitutivos. Si no encuentra espacio, lo almacena como nombre.
VB
Dim firstName, lastName As String
Property fullName() As String
Get
If lastName = "" Then
Return firstName
Else
Return firstName & " " & lastName
End If

End Get
Set(ByVal Value As String)
Dim space As Integer = Value.IndexOf(" ")
If space < 0 Then
firstName = Value
lastName = ""
Else
firstName = Value.Substring(0, space)
lastName = Value.Substring(space + 1)
End If
End Set
End Property

El ejemplo siguiente muestra las llamadas típicas a los procedimientos de propiedad de fullName.
VB
fullName = "MyFirstName MyLastName"
MsgBox(fullName)

Vea también
Tareas
Cómo: Crear una propiedad
Cómo: Llamar a un procedimiento de propiedad
Cómo: Declarar y llamar a una propiedad predeterminada en Visual Basic
Cómo: Establecer un valor en una propiedad
Cómo: Obtener un valor de una propiedad
Conceptos
Procedimientos en Visual Basic
Procedimientos Function
Procedimientos de operador
Argumentos y parámetros de procedimiento
Diferencias entre propiedades y variables en Visual Basic
Conceptos del lenguaje Visual Basic

Diferencias entre propiedades y variables en Visual Basic


Tanto las variables como las propiedades representan valores a los que puede tener acceso. Sin embargo, existen diferencias
en su almacenamiento e implementación.
Variables
Una variable se corresponde directamente con una ubicación de la memoria. Una variable se define con una única instrucción
de declaración. Una variable puede ser una variable local, si está definida dentro de un procedimiento y sólo está disponible en
dicho procedimiento, o puede ser una variable miembro, si se define en un módulo, una clase o una estructura, pero no dentro
de un procedimiento. Una variable miembro también se denomina campo.
Propiedades
Una propiedad es un elemento de datos que se define en un módulo, una clase o una estructura. Una propiedad se define con
un bloque de código comprendido entre las instrucciones Property y End Property. El bloque de código contiene un
procedimiento Get, un procedimiento Set o ambos procedimientos. Estos procedimientos se denominan procedimientos de
propiedades o descriptores de acceso de propiedades. Además de recuperar o almacenar el valor de una propiedad, también
pueden llevar a cabo acciones personalizadas, como actualizar un contador de acceso.
Diferencias
En la tabla siguiente se muestran algunas diferencias importantes que existen entre las variables y propiedades.
Punto de diferencia Variable Propiedad
Declaración Única instrucción de decla Serie de instrucciones en un bloque de código
ración

Implementación Única ubicación de almac Código ejecutable (procedimientos de propiedades)


enamiento

Almacenamiento Directamente asociado co Normalmente dispone de un almacén interno que no está dispon
n el valor de una variable ible fuera de la clase o el módulo que contiene la propiedad
El valor de la propiedad podría existir o no como un elemento al
macenado 1

Código ejecutable Ninguno Debe tener al menos un procedimiento

Acceso de lectura y escritura Acceso de lectura y escritu Acceso de lectura y escritura, de sólo lectura o de sólo escritura
ra o de sólo lectura

Acciones personalizadas (además No es posible Se pueden llevar a cabo como parte del proceso de configuració
de aceptar o devolver un valor) n o de recuperación del valor de una propiedad

1 A diferencia de una variable, es posible que el valor de una propiedad no se corresponda directamente con un único
elemento de almacenamiento. El almacenamiento podría dividirse en partes por motivos de comodidad o seguridad, o el valor
podría almacenarse en un formato cifrado. En estos casos, el procedimiento Get ensamblaría las partes o descifraría el valor
almacenado, y el procedimiento Set cifraría el nuevo valor o lo dividiría en el almacenamiento fundamental. El valor de una
propiedad podría ser efímero, como una hora del día, en cuyo caso el procedimiento Get lo calcularía sobre la marcha cada vez
que se obtuviera acceso a la propiedad.
Vea también
Tareas
Cómo: Crear una propiedad
Cómo: Declarar una propiedad con niveles de acceso mixtos
Cómo: Llamar a un procedimiento de propiedad
Cómo: Declarar y llamar a una propiedad predeterminada en Visual Basic
Cómo: Establecer un valor en una propiedad
Cómo: Obtener un valor de una propiedad
Referencia
Property (Instrucción)
Instrucción Dim (Visual Basic)
Conceptos
Procedimientos de propiedad
Argumentos y parámetros de procedimiento
Conceptos del lenguaje Visual Basic

Cómo: Crear una propiedad


Una definición de propiedad se agrega entre una instrucción Property y una instrucción End Property Dentro de esta
definición, se define un procedimiento Get, un procedimiento Set o ambos. Todo el código de la propiedad está incluido
dentro de estos procedimientos.
El procedimiento Get recupera el valor de la propiedad y el procedimiento Set almacena un valor. Si desea que la propiedad
tenga acceso de lectura y escritura, debe definir ambos procedimientos. Para una propiedad de sólo lectura, se define
únicamente Get y para una propiedad de sólo escritura, Set.
Para crear una propiedad
1. Fuera de cualquier propiedad o procedimiento, utilice Property (Instrucción), seguido de una instrucción End Property.
2. Si la propiedad acepta parámetros, agregue detrás de la palabra clave Property el nombre del procedimiento y, a
continuación, la lista de parámetros entre paréntesis.
3. Agregue detrás de los paréntesis una cláusula As para especificar el tipo de datos del valor de la propiedad. Debe
especificar el tipo de datos incluso para una propiedad de sólo escritura.
4. Agregue los procedimientos Get y Set, tal como sea preciso. Vea las direcciones siguientes.
Para crear un procedimiento Get que recupera un valor de la propiedad
1. Entre las instrucciones Property y End Property, escriba Get (Instrucción), seguido de una instrucción End Get. No
necesita definir ningún parámetro para el procedimiento Get.
2. Coloque las instrucciones de código para recuperar el valor de la propiedad entre las instrucciones Get y End Get Este
código puede incluir otros cálculos y manipulaciones de datos, además de generar y devolver el valor de la propiedad.
3. Utilice una instrucción Return para devolver el valor de la propiedad al código de llamada.
Debe escribir un procedimiento Get para una propiedad de lectura y escritura, así como para una propiedad de sólo lectura.
No debe definir un procedimiento Get para una propiedad de sólo escritura.
Para crear un procedimiento Set que escribe el valor de una propiedad
1. Entre las instrucciones Property y End Property, escriba Instrucción Set (Visual Basic), seguido de una instrucción End
Set.
2. En la instrucción Set, agregue detrás de la palabra clave Set una lista de parámetros entre paréntesis. Esta lista de
parámetros debe incluir por lo menos un parámetro de valor para el valor pasado por el código de llamada. El nombre
predeterminado para este parámetro de valor es Value, pero puede utilizar un nombre diferente, si es preciso. El
parámetro de valor debe tener el mismo tipo de datos que la propiedad misma.
3. Coloque las instrucciones de código para almacenar la propiedad entre las instrucciones Set y End Set Este código
puede incluir otros cálculos y manipulaciones de datos, además de validar y almacenar el valor de la propiedad.
4. Utilice el parámetro de valor para aceptar el valor proporcionado por el código de llamada. Puede almacenar este valor
directamente en una instrucción de asignación o utilizarlo en una expresión para calcular el valor interno que se va a
almacenar.
Debe escribir un procedimiento Set para una propiedad de lectura y escritura, así como para una propiedad de sólo escritura.
No debe definir un procedimiento Set para una propiedad de sólo lectura.
Ejemplo
El ejemplo siguiente crea una propiedad de lectura y escritura que almacena un nombre completo como dos nombres
constitutivos, el nombre y el apellido. Cuando el código de llamada lee fullName, el procedimiento Get combina los dos
nombres constitutivos y devuelve el nombre completo. Cuando el código de llamada asigna un nuevo nombre completo, el
procedimiento Set intenta dividirlo en dos nombres constitutivos. Si no encuentra espacio, lo almacena como nombre.
VB
Dim firstName, lastName As String
Property fullName() As String
Get
If lastName = "" Then
Return firstName
Else
Return firstName & " " & lastName
End If

End Get
Set(ByVal Value As String)
Dim space As Integer = Value.IndexOf(" ")
If space < 0 Then
firstName = Value
lastName = ""
Else
firstName = Value.Substring(0, space)
lastName = Value.Substring(space + 1)
End If
End Set
End Property

El ejemplo siguiente muestra las llamadas típicas a los procedimientos de propiedad de fullName. La primera llamada
establece el valor de la propiedad y la segunda la recupera.
VB
fullName = "MyFirstName MyLastName"
MsgBox(fullName)

Vea también
Tareas
Cómo: Declarar una propiedad con niveles de acceso mixtos
Cómo: Llamar a un procedimiento de propiedad
Cómo: Declarar y llamar a una propiedad predeterminada en Visual Basic
Cómo: Establecer un valor en una propiedad
Cómo: Obtener un valor de una propiedad
Conceptos
Procedimientos en Visual Basic
Procedimientos de propiedad
Argumentos y parámetros de procedimiento
Diferencias entre propiedades y variables en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Declarar una propiedad con niveles de acceso mixtos


Si desea que los procedimientos Get y Set de una propiedad tengan niveles de acceso distintos, puede utilizar el nivel más
permisivo en la instrucción Property y el nivel más restrictivo en las instrucciones Get o Set. Puede utilizar niveles de acceso
mixtos en una propiedad cuando desee que ciertas partes del código puedan obtener el valor de la propiedad y que otras
partes del código puedan modificar el valor.
Para obtener más información sobre los niveles de acceso, vea Niveles de acceso en Visual Basic.
Para declarar una propiedad con niveles de acceso mixtos
1. Declare la propiedad de la manera habitual y especifique el nivel de acceso menos restrictivo (por ejemplo, Public) en la
instrucción Property.
2. Declare el procedimiento Get o Set especificando el nivel de acceso más restrictivo (por ejemplo, Friend).
3. No especifique un nivel de acceso en el otro procedimiento de propiedad. Se acepta el nivel de acceso declarado en la
instrucción Property. Puede restringir el acceso en un solo procedimiento de propiedad.
VB
Public Class employee
Private salaryValue As Double
Protected Property salary() As Double
Get
Return salaryValue
End Get
Private Set(ByVal value As Double)
salaryValue = value
End Set
End Property
End Class

En el ejemplo anterior, el procedimiento Get tiene el mismo acceso Protected que la propiedad, mientras que el
procedimiento Set tiene acceso Private. Una clase derivada de employee puede leer el valor salary, pero sólo la clase
employee puede establecerlo.

Vea también
Tareas
Cómo: Crear una propiedad
Cómo: Llamar a un procedimiento de propiedad
Cómo: Declarar y llamar a una propiedad predeterminada en Visual Basic
Cómo: Establecer un valor en una propiedad
Cómo: Obtener un valor de una propiedad
Referencia
Property (Instrucción)
Conceptos
Procedimientos en Visual Basic
Procedimientos de propiedad
Argumentos y parámetros de procedimiento
Diferencias entre propiedades y variables en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Llamar a un procedimiento de propiedad


Cuando se almacena un valor en una propiedad o cuando se recupera el valor de una propiedad, se llama a un procedimiento
de dicha propiedad. El acceso a una propiedad se obtiene del mismo modo que el acceso a una variable.
El procedimiento Set de la propiedad almacena un valor y el procedimiento Get recupera dicho valor. Sin embargo, no se
llama explícitamente a estos procedimientos. Sólo tiene que utilizar la propiedad en una expresión o instrucción de asignación,
del mismo que almacenaría o recuperaría el valor de una variable, y Visual Basic se encargará de realizar las llamadas a los
procedimientos de la propiedad.
Para llamar al procedimiento Get de una propiedad
1. Utilice el nombre de la propiedad en una expresión del mismo modo que utilizaría el nombre de una variable. Las
propiedades pueden utilizarse en los mismos lugares que las variables o las constantes.
O bien
Utilice el nombre de la propiedad que aparece después del signo igual (=) en una instrucción de asignación.
En el ejemplo siguiente se lee el valor de Now (Propiedad), y se llama implícitamente a su procedimiento Get.
VB
Dim ThisMoment As Date
' The following statement calls the Get procedure of the Visual Basic Now property.
ThisMoment = Now

2. Si la propiedad toma argumentos, agregue paréntesis después del nombre de la propiedad para incluir entre ellos la lista
de argumentos. Si no hay ningún argumento, de forma opcional puede omitir los paréntesis.
3. En la lista de argumentos, sitúe los argumentos entre paréntesis y separados por comas. Asegúrese de proporcionar los
argumentos en el mismo orden en que la propiedad define los parámetros correspondientes.
El valor de la variable participa en la expresión del mismo modo que una variable o una constante, o se almacena en la variable
o propiedad en el lado izquierdo de la instrucción de asignación.
Para llamar al procedimiento Set de una propiedad
1. Utilice el nombre de la propiedad situado en el lado izquierdo de una instrucción de asignación.
En el ejemplo siguiente se establece el valor de TimeOfDay (Propiedad), y se llama implícitamente a su procedimiento
Set.
VB
' The following statement calls the Set procedure of the Visual Basic TimeOfDay proper
ty.
TimeOfDay = #12:00:00 PM#

2. Si la propiedad toma argumentos, agregue paréntesis después del nombre de la propiedad para incluir entre ellos la lista
de argumentos. Si no hay ningún argumento, de forma opcional puede omitir los paréntesis.
3. En la lista de argumentos, sitúe los argumentos entre paréntesis y separados por comas. Asegúrese de proporcionar los
argumentos en el mismo orden en que la propiedad define los parámetros correspondientes.
El valor generado en el lado derecho de la instrucción de asignación se almacena en la propiedad.
Vea también
Tareas
Cómo: Crear una propiedad
Cómo: Declarar una propiedad con niveles de acceso mixtos
Cómo: Declarar y llamar a una propiedad predeterminada en Visual Basic
Cómo: Establecer un valor en una propiedad
Cómo: Obtener un valor de una propiedad
Referencia
Property (Instrucción)
Get (Instrucción)
Instrucción Set (Visual Basic)
Conceptos
Procedimientos de propiedad
Argumentos y parámetros de procedimiento
Diferencias entre propiedades y variables en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Declarar y llamar a una propiedad predeterminada en


Visual Basic
Una propiedad predeterminada es una propiedad de clase o de estructura a la que el código puede tener acceso sin
especificarlo. Cuando el código de llamada menciona una clase o estructura pero no una propiedad, y el contexto permite tener
acceso a una propiedad, Visual Basic resuelve el acceso a la propiedad predeterminada de esa clase o estructura, si existe.
Una clase o estructura puede tener a lo sumo una propiedad predeterminada. No obstante, puede sobrecargar una propiedad
predeterminada y tener más de una versión de ella.
Para obtener más información, vea Propiedades predeterminadas.
Para declarar una propiedad predeterminada
1. Declare la propiedad de la manera normal. No especifique la palabra clave Shared o Private.
2. Incluya la palabra clave Default en la declaración de la propiedad.
3. Especifique al menos un parámetro para la propiedad. No puede definir una propiedad predeterminada que no acepte al
menos un argumento.
VB
Default Property myProperty(ByVal index As Integer) As String

Para llamar a una propiedad predeterminada


1. Declare una variable de la clase contenedora o tipo de estructura.
VB
Dim x As New class1(3)

2. Utilice el nombre de variable solo en una expresión donde normalmente incluiría el nombre de propiedad.
VB
MsgBox(x)

3. Agregue detrás del nombre de variable una lista de argumentos entre paréntesis. Una propiedad predeterminada debe
aceptar al menos un argumento.
VB
MsgBox(x(1))

4. Para recuperar el valor de la propiedad predeterminada, utilice el nombre de variable, con una lista de argumentos, en
una expresión o detrás del signo igual (=) en una instrucción de asignación.
VB
MsgBox(x(1) & x(2) & x(3))

5. Para establecer el valor predeterminado de la propiedad, utilice el nombre de variable, con una lista de argumentos, a la
izquierda de una instrucción de asignación.
VB
x(1) = "Hello"
x(2) = " "
x(3) = "World"

6. Siempre puede especificar el nombre de la propiedad predeterminada junto con el nombre de variable, tal como lo haría
para tener acceso a cualquier otra propiedad.
VB
x.myProperty(1) = "Hello"
x.myProperty(2) = " "
x.myProperty(3) = "World"

Ejemplo
En el siguiente ejemplo se declara una propiedad predeterminada en una clase.
VB
Public Class class1
Private myStrings() As String
Sub New(ByVal size As Integer)
ReDim myStrings(size)
End Sub
Default Property myProperty(ByVal index As Integer) As String
Get
' The Get property procedure is called when the value
' of the property is retrieved.
Return myStrings(index)
End Get
Set(ByVal Value As String)
' The Set property procedure is called when the value
' of the property is modified.
' The value to be assigned is passed in the argument
' to Set.
myStrings(index) = Value
End Set
End Property
End Class

Este ejemplo de código también está disponible como fragmento de código de IntelliSense. En el selector de fragmentos de
código, se encuentra en Lenguaje Visual Basic. Para obtener más información, vea
Cómo: Insertar fragmentos de código en el código (Visual Basic).
En el ejemplo siguiente se indica cómo se llama a la propiedad predeterminada myProperty en la clase class1. Las tres
instrucciones de asignación almacenan valores en myProperty y la llamada MsgBox lee los valores.
VB
Sub Test()
Dim x As New class1(3)
x(1) = "Hello"
x(2) = " "
x(3) = "World"
MsgBox(x(1) & x(2) & x(3))
End Sub

El uso más común de una propiedad predeterminada es Item (Propiedad, objeto Collection) en diversas clases de colección.
Programación eficaz
Las propiedades predeterminadas pueden producir una pequeña reducción en los caracteres del código fuente pero pueden
dificultar la lectura del código. Si el código de llamada no está familiarizado con su clase o estructura, cuando hace referencia al
nombre de éstas, no puede estar seguro de si esta referencia tiene acceso a la clase o estructura en sí, o a una propiedad
predeterminada. Esto puede conducir a errores del compilador o a ligeros errores lógicos en tiempo de ejecución.
Puede reducir levemente las posibilidades de errores de propiedades predeterminadas utilizando siempre
Option Strict (Instrucción) para establecer la comprobación de tipos del compilador en On.
Si está pensando en utilizar una clase o estructura en el código, debe determinar si tiene una propiedad predeterminada, y si es
así, cómo se llama.
Debido a estas desventajas, debería considerar no definir propiedades predeterminadas. Para una mejor lectura del código,
debería considerar asimismo hacer siempre una referencia explícita a todas las propiedades, incluso a las propiedades
predeterminadas.
Vea también
Tareas
Cómo: Crear una propiedad
Cómo: Declarar una propiedad con niveles de acceso mixtos
Cómo: Llamar a un procedimiento de propiedad
Cómo: Establecer un valor en una propiedad
Cómo: Obtener un valor de una propiedad
Referencia
Property (Instrucción)
Default (Visual Basic)
Conceptos
Procedimientos de propiedad
Argumentos y parámetros de procedimiento
Cambios en las propiedades predeterminadas para usuarios de Visual Basic 6.0
Diferencias entre propiedades y variables en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Establecer un valor en una propiedad


Almacena un valor en una propiedad colocando el nombre de propiedad en el lado izquierdo de una instrucción de asignación.
El procedimiento Set de la propiedad almacena un valor, pero no se llama explícitamente por el nombre. Utiliza la propiedad
tal como utilizaría una variable. Visual Basic realiza las llamadas a los procedimientos de la propiedad.
Para almacenar un valor en una propiedad
1. Utilice el nombre de propiedad en el lado izquierdo de una instrucción de asignación.
El ejemplo siguiente establece el valor de la propiedad TimeOfDay de Visual Basic en mediodía, llamando
implícitamente a su procedimiento Set.
VB
' The following statement calls the Set procedure of the Visual Basic TimeOfDay proper
ty.
TimeOfDay = #12:00:00 PM#

2. Si la propiedad toma argumentos, agregue paréntesis a continuación del nombre de la propiedad para incluir entre ellos
la lista de argumentos. Si no hay ningún argumento, puede omitir opcionalmente los paréntesis.
3. Coloque los argumentos en la lista de argumentos entre paréntesis y separados por comas. Asegúrese de proporcionar
los argumentos en el mismo orden en que la propiedad define los parámetros correspondientes.
4. El valor generado en el lado derecho de la instrucción de asignación se almacena en la propiedad.
Vea también
Tareas
Cómo: Crear una propiedad
Cómo: Declarar una propiedad con niveles de acceso mixtos
Cómo: Llamar a un procedimiento de propiedad
Cómo: Declarar y llamar a una propiedad predeterminada en Visual Basic
Cómo: Obtener un valor de una propiedad
Referencia
Property (Instrucción)
TimeOfDay (Propiedad)
Conceptos
Procedimientos de propiedad
Argumentos y parámetros de procedimiento
Diferencias entre propiedades y variables en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Obtener un valor de una propiedad


Recupera el valor de una propiedad incluyendo el nombre de propiedad en una expresión.
El procedimiento Get de la propiedad recupera el valor pero no se le llama explícitamente por su nombre. Se utiliza la
propiedad igual que una variable. Visual Basic realiza las llamadas a los procedimientos de la propiedad.
Para recuperar un valor de una propiedad
1. Utilice el nombre de propiedad en una expresión de la misma manera que utilizaría un nombre de variable. Puede utilizar
una propiedad en cualquier parte donde pueda utilizar una variable o constante.
O bien,
Utilice el nombre de propiedad detrás del signo igual (=) en una instrucción de asignación.
En el ejemplo siguiente se lee el valor de la propiedad Now de Visual Basic, y se llama implícitamente a su procedimiento
Get.
VB
Dim ThisMoment As Date
' The following statement calls the Get procedure of the Visual Basic Now property.
ThisMoment = Now

2. Si la propiedad acepta argumentos, agregue paréntesis a continuación del nombre de la propiedad para incluir entre
ellos la lista de argumentos. Si no hay ningún argumento, puede omitir opcionalmente los paréntesis.
3. Coloque los argumentos en la lista de argumentos entre paréntesis y separados por comas. Asegúrese de proporcionar
los argumentos en el mismo orden en que la propiedad define los parámetros correspondientes.
El valor de la propiedad participa en la expresión del mismo modo que una variable o constante, o se almacena en la variable o
propiedad en el lado izquierdo de la instrucción de asignación.
Vea también
Tareas
Cómo: Crear una propiedad
Cómo: Declarar una propiedad con niveles de acceso mixtos
Cómo: Llamar a un procedimiento de propiedad
Cómo: Declarar y llamar a una propiedad predeterminada en Visual Basic
Cómo: Establecer un valor en una propiedad
Referencia
Property (Instrucción)
Conceptos
Procedimientos en Visual Basic
Procedimientos de propiedad
Argumentos y parámetros de procedimiento
Diferencias entre propiedades y variables en Visual Basic
Conceptos del lenguaje Visual Basic

Procedimientos de operador
Un procedimiento de operador es una serie de instrucciones Visual Basic que definen el comportamiento de un operador
estándar (como *, <> o And) en una clase o estructura definida, lo que también se conoce como sobrecarga de operadores.
Cuándo definir procedimientos de operador
Tras definir una clase o estructura, puede declarar las variables para que pertenezcan al tipo de dicha clase o estructura. A
veces estas variables deben participar en una operación como parte de una expresión. Para ello, estas variables deben ser un
operando de un operador.
Visual Basic sólo define operadores en sus tipos de datos fundamentales. Puede definir el comportamiento de un operador
cuando uno o los dos operandos pertenecen al tipo de la clase o de la estructura.
Para obtener más información, vea Operator (Instrucción).
Tipos de procedimientos de operador
Los procedimientos de operador pueden ser de uno de los siguientes tipos:
Una definición de un operador unario donde el argumento pertenece al tipo de la clase o estructura.
Una definición de un operador binario donde al menos uno de los argumentos pertenece al tipo de la clase o estructura.
Una definición de un operador de conversión donde el argumento pertenece al tipo de la clase o estructura.
Una definición de un operador de conversión que devuelve el tipo de la clase o estructura.
Los operadores de conversión siempre son unarios y siempre utilizan CType como el operador que se está definiendo.
Sintaxis de la declaración
La sintaxis para declarar un procedimiento de operador es la siguiente:
Public Shared [Widening | Narrowing] Operator operatorsymbol ( operand1 [, operand2 ]) As datatype
' Statements of the operator procedure.
End Operator

Utilice únicamente la palabra clave Widening o Narrowing en un operador de conversión de tipos. El símbolo del operador
siempre es CType (Función) en un operador de conversión de tipos.
Declare dos operandos para definir un operador binario y declare un operando para definir un operador unario, incluidos los
operadores de conversión de tipos. Todos los operandos deben declararse ByVal.
Declare cada operando del mismo modo que declara los parámetros de Procedimientos Sub.
Tipo de datos
Como está definiendo un operador de una clase o estructura que ha definido, al menos uno de los operandos debe tener el
mismo tipo de datos que la clase o la estructura. En un operador de conversión de tipos, el operando o el tipo de valor
devuelto debe pertenecer al tipo de datos de la clase o estructura.
Para obtener más detalles, consulte Operator (Instrucción).
Sintaxis de llamada
Para invocar un procedimiento de operador de forma implícita, utilice el símbolo del operador en una expresión. Proporcione
los operandos de la misma manera que proporciona los operadores predefinidos.
La sintaxis de una llamada implícita a un procedimiento de operador es la siguiente:
Dim testStruct As structurename
Dim testNewStruct As structurename = testStruct operatorsymbol 10
Ejemplo de declaración y llamada
La estructura siguiente almacena un valor entero con signo de 128 bits como las partes constitutivas de orden superior y de
orden inferior. Esta estructura define el operador + para agregar dos valores veryLong y generar un valor veryLong
resultante.
VB
Public Structure veryLong
Dim highOrder As Long
Dim lowOrder As Long
Public Shared Operator +(ByVal v As veryLong, _
ByVal w As veryLong) As veryLong
Dim sum As New veryLong
sum = v
Try
sum.lowOrder += w.lowOrder
Catch ex As System.OverflowException
sum.lowOrder -= (Long.MaxValue - w.lowOrder + 1)
sum.highOrder += 1
End Try
sum.highOrder += w.highOrder
Return sum
End Operator
End Structure

En el ejemplo siguiente se muestra una llamada típica al operador + establecido en veryLong.


VB
Dim v1, v2, v3 As veryLong
v1.highOrder = 1
v1.lowOrder = Long.MaxValue
v2.highOrder = 0
v2.lowOrder = 4
v3 = v1 + v2

Vea también
Tareas
Cómo: Definir un operador
Cómo: Definir un operador de conversión
Cómo: Llamar a un procedimiento de operador
Cómo: Utilizar una clase que define operadores
Referencia
Operator (Instrucción)
Conceptos
Procedimientos en Visual Basic
Procedimientos Sub
Procedimientos Function
Procedimientos de propiedad
Argumentos y parámetros de procedimiento
Conceptos del lenguaje Visual Basic

Cómo: Definir un operador


Si ha definido una clase o estructura, puede definir el comportamiento de un operador estándar (como *, <> o And) cuando
uno o los dos operandos pertenecen al tipo de datos de la clase o estructura.
Defina al operador estándar como un procedimiento de operador dentro de la clase o estructura. Todos los procedimientos de
operador deben ser Public Shared.
La definición de un operador de una clase o estructura también se denomina sobrecarga del operador.
Ejemplo
En el ejemplo siguiente se define el operador + en una estructura denominada height. La estructura utiliza altos que se miden
en pies y pulgadas. Una pulgada equivale a 2,54 centímetros y un pie a 12 pulgadas. Para garantizar que los valores están
normalizados (pulgadas < 12,0), el constructor lleva a cabo una aritmética módulo 12. El operador + utiliza el constructor para
generar valores normalizados.
VB
Public Shadows Structure height
' Need Shadows because System.Windows.Forms.Form also defines property Height.
Private feet As Integer
Private inches As Double
Public Sub New(ByVal f As Integer, ByVal i As Double)
Me.feet = f + (CInt(i) \ 12)
Me.inches = i Mod 12.0
End Sub
Public Overloads Function ToString() As String
Return Me.feet & "' " & Me.inches & """"
End Function
Public Shared Operator +(ByVal h1 As height, ByVal h2 As height) _
As height
Return New height(h1.feet + h2.feet, h1.inches + h2.inches)
End Operator
End Structure

Puede probar la estructura height con el código siguiente.


VB
Public Sub consumeHeight()
Dim p1 As New height(3, 10)
Dim p2 As New height(4, 8)
Dim p3 As height = p1 + p2
Dim s As String = p1.ToString() & " + " & p2.ToString() _
& " = " & p3.ToString() & " (= 8' 6"" ?)"
Dim p4 As New height(2, 14)
s &= vbCrLf & "2' 14"" = " & p4.ToString() & " (= 3' 2"" ?)"
Dim p5 As New height(4, 24)
s &= vbCrLf & "4' 24"" = " & p5.ToString() & " (= 6' 0"" ?)"
MsgBox(s)
End Sub

Vea también
Tareas
Cómo: Definir un operador de conversión
Cómo: Llamar a un procedimiento de operador
Cómo: Utilizar una clase que define operadores
Cómo: Declarar una estructura
Referencia
Operator (Instrucción)
Structure (Instrucción)
Conceptos
Procedimientos de operador
Conceptos del lenguaje Visual Basic

Cómo: Definir un operador de conversión


Si ha definido una clase o estructura, puede definir un operador de conversión de tipos entre el tipo de la clase o estructura y
otro tipo de datos (como Integer, Double o String).
Defina la conversión de tipos como un procedimiento CType (Función) en una clase o estructura. Todos los procedimientos de
conversión deben ser Public Shared y cada uno debe especificar Widening o Narrowing.
La definición de un operador en una clase o estructura también se denomina sobrecargar al operador.
Ejemplo
El ejemplo siguiente define operadores de conversión entre una estructura denominada digit y un Byte.
VB
Public Structure digit
Private dig As Byte
Public Sub New(ByVal b As Byte)
If (b < 0 OrElse b > 9) Then Throw New _
System.ArgumentException("Argument outside range for Byte")
Me.dig = b
End Sub
Public Shared Widening Operator CType(ByVal d As digit) As Byte
Return d.dig
End Operator
Public Shared Narrowing Operator CType(ByVal b As Byte) As digit
Return New digit(b)
End Operator
End Structure

Puede probar la estructura digit con el código siguiente.


VB
Public Sub consumeDigit()
Dim d1 As New digit(4)
Dim d2 As New digit(7)
Dim d3 As digit = CType(CByte(3), digit)
Dim s As String = "Initial 4 generates " & CStr(CType(d1, Byte)) _
& vbCrLf & "Initial 7 generates " & CStr(CType(d2, Byte)) _
& vbCrLf & "Converted 3 generates " & CStr(CType(d3, Byte))
Try
Dim d4 As digit
d4 = CType(CType(d1, Byte) + CType(d2, Byte), digit)
Catch e4 As System.Exception
s &= vbCrLf & "4 + 7 generates " & """" & e4.Message & """"
End Try
Try
Dim d5 As digit = CType(CByte(10), digit)
Catch e5 As System.Exception
s &= vbCrLf & "Initial 10 generates " & """" & e5.Message & """"
End Try
MsgBox(s)
End Sub

Vea también
Tareas
Cómo: Definir un operador
Cómo: Llamar a un procedimiento de operador
Cómo: Utilizar una clase que define operadores
Cómo: Declarar una estructura
Referencia
Operator (Instrucción)
Structure (Instrucción)
Conceptos
Procedimientos de operador
Conversiones implícitas y explícitas
Conversiones de ampliación y de restricción
Conceptos del lenguaje Visual Basic

Cómo: Llamar a un procedimiento de operador


Se llama a un procedimiento de operador utilizando el símbolo de operador en una expresión. En el caso de un operador de
conversión, se hace llamando a CType (Función) para convertir un valor de un tipo de datos en otro.
No se llama de forma explícita a los procedimientos de operador. Se utiliza simplemente el operador o la función CType, en
una instrucción de asignación o una expresión, del mismo modo que se hace en un operador. Visual Basic realiza la llamada al
procedimiento de operador.
Definir un operador en una clase o estructura se denomina también sobrecargar el operador.
Para llamar a un procedimiento de operador
1. Utilice el símbolo de operador en una expresión de la manera normal.
2. Asegúrese de que los tipos de datos de los operandos son adecuados para el operador y están en el orden correcto.
3. El operador contribuye al valor de la expresión tal como se espera.
Para llamar a un procedimiento de operador de conversión
1. Utilice CType dentro de una expresión.
2. Asegúrese de que los tipos de datos de los operandos son adecuados para la conversión y están en el orden correcto.
3. CType llama al procedimiento de operador de conversión y devuelve el valor convertido.
Ejemplo
El ejemplo siguiente crea dos estructuras TimeSpan, las suma y almacena el resultado en una tercera estructura TimeSpan. La
estructura TimeSpan define los procedimientos de operador para sobrecargar varios operadores estándar.
VB
Dim firstSpan As New TimeSpan(3, 30, 0)
Dim secondSpan As New TimeSpan(1, 30, 30)
Dim combinedSpan As TimeSpan = firstSpan + secondSpan
Dim s As String = firstSpan.ToString() & _
" + " & secondSpan.ToString() & _
" = " & combinedSpan.ToString()
MsgBox(s)

Como TimeSpan sobrecarga el operador + estándar, el ejemplo anterior llama a un procedimiento de operador cuando
calcula el valor de combinedSpan.
Para obtener un ejemplo de llamada a un procedimiento de operador de conversación, vea
Cómo: Utilizar una clase que define operadores.
Compilar el código
Asegúrese de que la clase o estructura que está utilizando define el operador que desea utilizar.
Vea también
Tareas
Cómo: Definir un operador
Cómo: Definir un operador de conversión
Cómo: Declarar una estructura
Referencia
Operator (Instrucción)
Widening
Narrowing
Structure (Instrucción)
Conceptos
Procedimientos de operador
Conversiones implícitas y explícitas
Conversiones de ampliación y de restricción
Conceptos del lenguaje Visual Basic

Cómo: Utilizar una clase que define operadores


Si está utilizando una clase o una estructura que define sus propios operadores, puede tener acceso a estos operadores desde
Visual Basic.
La definición de un operador de una clase o estructura también se denomina sobrecarga del operador.
Ejemplo
En el ejemplo siguiente se tiene acceso a la estructura SQL SqlString, que define los operadores de conversión
(CType (Función)) entre una cadena SQL y una cadena de Visual Basic y viceversa. Utilice CType(SQL string expression, String)
para convertir una cadena SQL en una cadena de Visual Basic y CType(Visual Basic string expression, SqlString) para realizar
la conversión a la inversa.
VB
' Insert the following line at the beginning of your source file.
Imports System.Data.SqlTypes

VB
Public Sub setJobString(ByVal g As Integer)
Dim title As String
Dim jobTitle As System.Data.SqlTypes.SqlString
Select Case g
Case 1
title = "President"
Case 2
title = "Vice President"
Case 3
title = "Director"
Case 4
title = "Manager"
Case Else
title = "Worker"
End Select
jobTitle = CType(title, SqlString)
MsgBox("Group " & CStr(g) & " generates title """ _
& CType(jobTitle, String) & """")
End Sub

La estructura SqlString define un operador de conversión (CType (Función)) de String a SqlString y otro de SqlString a
String. La instrucción que asigna title a jobTitle utiliza el primer operador y la llamada a MsgBox (Función, Visual Basic)
utiliza el segundo.
Compilar el código
Asegúrese de que la clase o la estructura que está utilizando define el operador que desea utilizar. No debe presuponer que la
clase o la estructura ha definido cada operador disponible para su sobrecarga. Para obtener una lista de los operadores
disponibles, vea Operator (Instrucción).
Incluya la instrucción Imports apropiada en la cadena SQL al comienzo de su archivo de código fuente (en este caso
System.Data.SqlTypes).
El proyecto debe tener referencias a System.Data y System.XML. Si necesita ayuda para agregarlas, vea
Cómo: Agregar y quitar referencias en Visual Studio (C#, J#).
Vea también
Tareas
Cómo: Definir un operador
Cómo: Definir un operador de conversión
Cómo: Llamar a un procedimiento de operador
Cómo: Declarar una estructura
Referencia
Widening
Narrowing
Structure (Instrucción)
Conceptos
Procedimientos de operador
Conversiones implícitas y explícitas
Conversiones de ampliación y de restricción
Conceptos del lenguaje Visual Basic

Argumentos y parámetros de procedimiento


En la mayoría de los casos, un procedimiento necesita cierta información sobre las circunstancias en las que se le ha llamado.
Un procedimiento que ejecuta tareas repetidas o compartidas utiliza datos distintos en cada llamada. Estos datos se componen
de variables, constantes y expresiones que se transfieren al procedimiento cada vez que se le llama.
Un parámetro representa un valor que el procedimiento espera que se proporcione cuando es llamado. La declaración del
procedimiento define sus parámetros.
Puede definir un procedimiento sin parámetros, con un parámetro o con varios. La parte de la definición del procedimiento
que especifica los parámetros se denomina lista de parámetros.
Un argumento representa el valor que se proporciona a un parámetro del procedimiento cuando se llama al procedimiento. El
código de llamada proporciona los argumentos cuando llama al procedimiento. La parte de la llamada del procedimiento que
especifica los argumentos se denomina lista de argumentos.
En la siguiente ilustración se muestra un código que llama al procedimiento safeSquareRoot desde dos lugares diferentes. La
primera llamada transfiere el valor de la variable x (4.0) al parámetro number y el valor devuelto en root (2.0) se asigna a la
variable y. La segunda llamada transfiere el valor literal 9.0 a number y asigna el valor devuelto (3.0) a la variable z.
Pasar un argumento a un parámetro

Para obtener más información, vea Diferencias entre parámetros y argumentos.


Tipo de datos de parámetro
El tipo de datos de un parámetro se define utilizando la cláusula As en su declaración. Por ejemplo, la siguiente función acepta
una cadena y un entero.
VB
Function appointment(ByVal day As String, ByVal hour As Integer) As String
' Insert code to return any appointment for the given day and time.
Return "appointment"
End Function

Si el modificador de comprobación de tipos (Option Strict (Instrucción)) es Off, la cláusula As es opcional, pero si la utiliza un
parámetro, deben utilizarla todos. Si la comprobación de tipos es On, la cláusula As será obligatoria para todos los parámetros
del procedimiento.
Si el código de llamada espera que se proporcione un argumento con un tipo de datos diferente al del parámetro
correspondiente, por ejemplo Byte a un parámetro String, debe llevar a cabo una de las operaciones siguientes:
Proporcionar sólo argumentos con tipos de datos que se amplíen al tipo de datos del parámetro;
Establecer Option Strict Off para que permita conversiones de restricción implícitas; o
Utilizar una palabra clave de conversión para convertir explícitamente el tipo de datos.
Parámetros de tipo
Un procedimiento genérico también define uno o más parámetros de tipo, además de sus parámetros normales. Un
procedimiento genérico permite que el código que llama pase tipos de datos distintos cada vez que llame al procedimiento;
por tanto, puede personalizar los tipos de datos para los requisitos de cada llamada individual. Vea
Procedimientos genéricos en Visual Basic.
Vea también
Tareas
Cómo: Definir un parámetro para un procedimiento
Cómo: Pasar argumentos a un procedimiento
Conceptos
Procedimientos en Visual Basic
Procedimientos Sub
Procedimientos Function
Procedimientos de propiedad
Procedimientos de operador
Pasar argumentos por valor y por referencia
Sobrecarga de procedimientos
Otros recursos
Conversiones de tipos en Visual Basic
Conceptos del lenguaje Visual Basic

Diferencias entre parámetros y argumentos


En la mayoría de los casos, un procedimiento necesita cierta información sobre las circunstancias en las que se le ha llamado.
Un procedimiento que ejecuta tareas repetidas o compartidas utiliza datos distintos en cada llamada. Estos datos se componen
de variables, constantes y expresiones que se transfieren al procedimiento cada vez que se le llama.
Para comunicar esta información al procedimiento, el procedimiento define un parámetro, y el código de llamada transfiere un
argumento a dicho parámetro. Puede imaginar el parámetro como una plaza de aparcamiento y el argumento como un
automóvil. Del mismo modo que diferentes automóviles puede aparcan en la misma plaza de aparcamiento en momentos
distintos, el código de llamada puede transferir un argumento distinto al mismo parámetro cada vez que llama al
procedimiento.
Parámetros
Un parámetro representa un valor que el procedimiento espera que se transfiera cuando es llamado. La declaración del
procedimiento define sus parámetros.
Cuando se define un procedimiento Function o Sub, se especifica una lista de parámetros entre paréntesis que va
inmediatamente después del nombre de procedimiento. Para cada parámetro, se especifica un nombre, un tipo de datos y un
mecanismo para pasar argumentos (ByVal o ByRef). También se puede indicar que un parámetro es opcional, lo que significa
que el código de llamada no tiene que transferirle un valor.
El nombre de cada parámetro actúa como una variable local dentro del procedimiento. El nombre del parámetro se utiliza del
mismo modo que cualquier otra variable.
Argumentos
Un argumento representa el valor que se transfiere a un parámetro del procedimiento cuando se llama al procedimiento. El
código de llamada proporciona los argumentos cuando llama al procedimiento.
Cuando se llama al procedimiento Function o Sub, se incluye una lista de argumentos entre paréntesis que van
inmediatamente después del nombre del procedimiento. Cada argumento se corresponde con el parámetro situado en la
misma posición de la lista.
A diferencia de la definición de parámetros, los argumentos no tienen nombres. Cada argumento es una expresión que puede
contener cero o más variables, constantes y literales. El tipo de datos de la expresión evaluada normalmente debe coincidir con
el tipo de datos definido para el parámetro correspondiente, y en algún caso, debe poder convertirse al tipo del parámetro.
Vea también
Tareas
Cómo: Definir un parámetro para un procedimiento
Cómo: Pasar argumentos a un procedimiento
Conceptos
Procedimientos en Visual Basic
Procedimientos Sub
Procedimientos Function
Procedimientos de propiedad
Procedimientos de operador
Pasar argumentos por valor y por referencia
Procedimientos recursivos
Sobrecarga de procedimientos
Conceptos del lenguaje Visual Basic

Cómo: Definir un parámetro para un procedimiento


Un parámetro permite al código de llamada pasar un valor al procedimiento cuando éste lo invoca. Los parámetros de un
procedimiento se declaran igual que las variables, especificando el nombre y el tipo de datos. También puede especificarse el
mecanismo para pasar argumentos, y si se trata de un parámetro opcional.
Para obtener más información, vea Argumentos y parámetros de procedimiento.
Para definir un parámetro de procedimiento
1. En la declaración del procedimiento, agregue el nombre de parámetro a la lista de parámetros del procedimiento,
separándolo de otros parámetros mediante comas.
2. Decida el tipo de datos del parámetro.
3. Inserte una cláusula As después del nombre de parámetro para especificar el tipo de datos.
4. Decida el mecanismo para pasar los argumentos que desea para el parámetro. Normalmente los parámetros se
transfieren por valor, a menos que desee que el procedimiento pueda cambiar su valor en el código de llamada.
5. Anteponga ByVal o ByRef al nombre del parámetro para especificar el mecanismo para pasar argumentos. Para obtener
más información, vea Diferencias entre pasar un argumento por valor y por referencia.
6. Si el parámetro es opcional, anteponga Optional (Visual Basic) al mecanismo para pasar argumentos y, detrás del tipo de
datos del parámetro, incluya un signo igual (=) y un valor predeterminado.
En el ejemplo siguiente se define el esquema de un procedimiento Sub con tres parámetros. Los dos primeros
parámetros son obligatorios, mientras que el tercero es opcional. Las declaraciones de parámetros están separadas en la
lista de parámetros mediante comas.
VB
Sub updateCustomer(ByRef c As customer, ByVal region As String, _
Optional ByVal level As Integer = 0)
' Insert code to update a customer object.
End Sub

El primer parámetro acepta un objeto customer , y updateCustomer puede actualizar directamente la variable transferida
a c porque el argumento se ha transferido ByRef. El procedimiento no puede cambiar los valores de los últimos dos
argumentos porque se han transferido ByVal.
Si el código de llamada no proporciona un valor para el parámetro level , Visual Basic lo establece en el valor
predeterminado, que es 0.
Si el modificador de comprobación de tipo (Option Strict (Instrucción)) es Off, la cláusula As es opcional cuando define
un parámetro. Sin embargo, si un parámetro utiliza una cláusula As, deberán utilizarla todos ellos. Si el modificador de
comprobación de tipo es On, la cláusula As es obligatoria en todas las definiciones de parámetros.
La especificación de tipos de datos para todos los elementos de programación recibe el nombre de establecimiento
inflexible de tipos. Cuando se establece Option Strict On, Visual Basic fuerza el establecimiento inflexible de tipos. Esto
resulta muy recomendable por las siguientes razones:
Habilita la compatibilidad con IntelliSense® para las variables y los parámetros. Esto permite ver las propiedades
de las variables y otros miembros a medida que se escribe el código.
Permite que el compilador realice la comprobación de tipos. Permite detectar las instrucciones en las que se
pueden producir errores en tiempo de ejecución, como el desbordamiento. También detecta llamadas a métodos
en objetos que no las admiten.
Tiene como consecuencia una ejecución más rápida del código. Esto se debe en parte a que si no se especifica un
tipo de datos para un elemento de programación, el compilador de Visual Basic asigna el tipo Object. El código
compilado tendría que realizar conversiones en ambos sentidos entre Object y otros tipos de datos, lo que
reduciría el rendimiento.
Vea también
Tareas
Cómo: Pasar argumentos a un procedimiento
Conceptos
Procedimientos en Visual Basic
Procedimientos Sub
Procedimientos Function
Pasar argumentos por valor y por referencia
Procedimientos recursivos
Sobrecarga de procedimientos
Otros recursos
Programación orientada a objetos en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Pasar argumentos a un procedimiento


Al llamar a un procedimiento, se agrega detrás del nombre de procedimiento una lista de argumentos entre paréntesis. Se
proporciona un argumento correspondiente a cada parámetro necesario que el procedimiento define y, opcionalmente, se
pueden proporcionar argumentos para los parámetros Optional. Cuando no se proporciona un parámetro Optional en la
llamada, se debe incluir una coma para marcar su lugar en la lista de argumentos si se indica algún argumento posterior.
Si se desea pasar un argumento de un tipo de datos diferente al del parámetro correspondiente, como Byte a String, se puede
establecer el modificador de comprobación de tipos (Option Strict (Instrucción)) en Off. Si Option Strict está en On, se deben
utilizar conversiones de ampliación o palabras clave de conversión explícita. Para obtener más información, vea
Conversiones de ampliación y de restricción y Funciones de conversión de tipos.
Para obtener más información, vea Argumentos y parámetros de procedimiento.
Para pasar uno o varios argumentos a un procedimiento
1. En la instrucción de llamada, agregue paréntesis detrás del nombre de procedimiento.
2. Coloque una lista de argumentos entre los paréntesis. Incluya un argumento para cada parámetro necesario que el
procedimiento define y separe los argumentos por comas.
3. Asegúrese de que cada argumento sea una expresión válida que evalúa el tipo de datos convertible al tipo que el
procedimiento define para el parámetro correspondiente.
4. Si un parámetro está definido como Optional (Visual Basic), puede incluirlo en la lista de argumentos u omitirlo. Si lo
omite, el procedimiento utiliza el valor predeterminado definido para ese parámetro.
5. Si omite un argumento para un parámetro Optional y hay otro parámetro después de él en la lista de parámetros,
puede marcar el lugar del argumento omitido mediante una coma adicional en la lista de argumentos.
El ejemplo siguiente llama a MsgBox (Función, Visual Basic) de Visual Basic.
VB
Dim mbResult As MsgBoxResult
Dim displayString As String = "Show this string to the user"
mbResult = MsgBox(displayString, , "Put this in the title bar")

El ejemplo anterior proporciona el primer argumento necesario que es la cadena de mensaje que se va a mostrar. Omite
un argumento para el segundo parámetro opcional que especifica los botones que se van a mostrar en el cuadro de
mensaje. Como la llamada no proporciona ningún valor, MsgBox utiliza el valor predeterminado,
MsgBoxStyle.OKOnly, que muestra sólo un botón Aceptar.
La segunda coma de la lista de argumentos marca el lugar del segundo argumento omitido y la última cadena pasa al
tercer parámetro opcional de MsgBox, que es el texto que se va a mostrar en la barra de título.
Vea también
Tareas
Cómo: Definir un parámetro para un procedimiento
Conceptos
Procedimientos Sub
Procedimientos Function
Procedimientos de propiedad
Procedimientos de operador
Pasar argumentos por valor y por referencia
Procedimientos recursivos
Sobrecarga de procedimientos
Otros recursos
Programación orientada a objetos en Visual Basic
Conceptos del lenguaje Visual Basic

Pasar argumentos por valor y por referencia


En Visual Basic, puede transferir un argumento a un procedimiento por valor o por referencia. Esto se conoce como
mecanismo para pasar argumentos, y determina si el procedimiento puede modificar el elemento de programación
subyacente al argumento en el código de llamada. La declaración del procedimiento determina el mecanismo para pasar
argumentos de cada parámetro mediante la palabra clave ByVal o ByRef.
Distinciones
Al pasar un argumento a un procedimiento, tenga en cuenta las distintas condiciones que interactúan entre sí:
Si el elemento de programación subyacente es modificable o no modificable
Si el propio argumento es modificable o no modificable
Si el argumento se transfiere por valor o por referencia
Si el tipo de datos del argumento es un tipo de valor o un tipo de referencia
Para obtener más información, vea Diferencias entre argumentos modificables y no modificables y
Diferencias entre pasar un argumento por valor y por referencia.
Selección del mecanismo para pasar argumentos
Debe seleccionar minuciosamente el mecanismo para pasar argumentos de cada argumento.
Protección. A la hora de elegir uno de los dos mecanismos que existen para pasar argumentos, el criterio más
importante que hay que tener en cuenta es la exposición al cambio de las variables de llamada. La ventaja de pasar un
argumento con ByRef es que el procedimiento puede devolver un valor al código de llamada por medio del argumento.
La ventaja de pasarlo con ByVal es que protege a la variable de los cambios que sobre ella pueda efectuar el
procedimiento.
Rendimiento. Aunque el mecanismo que se utilice para pasar argumentos también puede afectar al rendimiento del
código, la diferencia suele ser insignificante. Existe una excepción: cuando se pasa un tipo de valor con ByVal. En esta
caso, Visual Basic copia todo el contenido de los datos del argumento. Por lo tanto, para un tipo de valor grande, como
una estructura, lo más eficiente es transferirlo ByRef.
En los tipos de referencia, sólo se copia el puntero de los datos (cuatro bytes en plataformas de 32 bits y ocho bytes en
plataformas de 64 bits). Por lo tanto, se pueden pasar argumentos de tipo String u Object por valor sin que esto afecte
negativamente al rendimiento.
Determinación del mecanismo para pasar argumentos
La declaración del procedimiento especifica el mecanismo para pasar argumentos de cada parámetro. El código de llamada no
puede reemplazar a un mecanismo ByVal, pero si un argumento se declara con ByRef, el código de llamada puede forzar al
mecanismo para que pase el argumento ByVal; para ello hay que encerrar el nombre del argumento entre paréntesis en la
llamada.
En Visual Basic, los argumentos se pasan por valor de forma predeterminada. Puede hacer que al código sea más fácil de leer
utilizando la palabra clave ByVal. Es un hábito de programación recomendado incluir la palabra clave ByVal o ByRef con cada
parámetro declarado.
Cuándo pasar un argumento por valor
Si el elemento del código de llamada subyacente al argumento es un elemento no modificable, declare el parámetro
correspondiente ByVal. Ningún código puede cambiar el valor de un elemento no modificable.
Si el elemento subyacente es modificable, pero no desea que el procedimiento pueda modificar su valor, declare el
parámetro ByVal. Sólo el código de llamada puede cambiar el valor de un elemento modificable transferido por valor.
Cuándo pasar un argumento por referencia
Si el procedimiento necesita realmente modificar el valor subyacente en el código de llamada, declare el parámetro
correspondiente ByRef.
Si la ejecución correcta del código depende del procedimiento que cambia el elemento subyacente en el código de
llamada, declare el parámetro ByRef. Si lo transfiere por valor o si el código de llamada en lugar de utilizar el mecanismo
para pasar argumentos ByRef incluye el argumento entre paréntesis, la llamada al procedimiento podría producir
resultados inesperados.
Vea también
Tareas
Cómo: Pasar argumentos a un procedimiento
Cómo: Cambiar el valor de un argumento de procedimiento
Cómo: Proteger un argumento de procedimiento para que no se realicen cambios de valor
Cómo: Forzar un argumento para que pase como un valor
Conceptos
Procedimientos en Visual Basic
Argumentos y parámetros de procedimiento
Pasar argumentos por posición o por nombre
Tipos de valores y tipos de referencia
Conceptos del lenguaje Visual Basic

Diferencias entre argumentos modificables y no modificables


Cuando se llama a un procedimiento, normalmente se transfieren uno o varios argumentos a dicho procedimiento. Cada
argumento se corresponde con un elemento de programación subyacente. Los elementos subyacentes y los argumentos
pueden ser modificables o no modificables.
Elementos modificables y no modificables
Un elemento de programación puede ser un elemento modificable, cuyo valor se puede modificar, o un elemento no
modificable, cuyo valor se mantiene fijo una vez que se ha creado.
En la tabla siguiente se muestran los elementos de programación modificables y no modificables.
Elementos modificables Elementos no modificables
Variables locales (se declaran dentro de los procedimientos), incluidas las variables Variables, campos y propiedades de sólo
de objeto, excepto las de sólo lectura lectura

Campos (variables miembro de módulos, clases y estructuras), excepto las de sólo le Constantes y literales
ctura

Propiedades, salvo las de sólo lectura Miembros de enumeraciones

Elementos matriciales Expresiones (aun cuando sus elementos s


ean modificables)

Argumentos modificables y no modificables


Un argumento modificable es aquel que tiene un elemento subyacente que se puede modificar. El código de llamada puede
almacenar un nuevo valor en cualquier momento y, si se transfiere el argumento ByRef, el código del procedimiento también
puede modificar el elemento subyacente en el código de llamada.
Un argumento no modificable o tiene un elemento subyacente no modificable o se ha transferido ByVal. El procedimiento no
puede modificar el elemento subyacente en el código de llamada, aun cuando se trate de un elemento modificable. Si es un
elemento no modificable, tampoco podrá modificarlo el propio código de llamada.
El procedimiento invocado podría modificar la copia local del argumento no modificable, pero esta modificación no afectaría al
elemento subyacente del código de llamada.
Vea también
Tareas
Cómo: Pasar argumentos a un procedimiento
Cómo: Cambiar el valor de un argumento de procedimiento
Cómo: Proteger un argumento de procedimiento para que no se realicen cambios de valor
Cómo: Forzar un argumento para que pase como un valor
Conceptos
Procedimientos en Visual Basic
Argumentos y parámetros de procedimiento
Pasar argumentos por valor y por referencia
Diferencias entre pasar un argumento por valor y por referencia
Pasar argumentos por posición o por nombre
Tipos de valores y tipos de referencia
Conceptos del lenguaje Visual Basic

Diferencias entre pasar un argumento por valor y por


referencia
Cuando pasa uno o más argumentos a un procedimiento, cada argumento corresponde a un elemento de programación
subyacente en el código de llamada. Puede pasar el valor de este elemento subyacente o una referencia a él. Esto se conoce
como mecanismo para pasar argumentos.
Pasar por valor
Un argumento se pasa por valor especificando la palabra clave ByVal para el parámetro correspondiente en la definición de
procedimiento. Cuando utiliza este mecanismo para pasar argumentos, Visual Basic copia el valor del elemento de
programación subyacente en una variable local del procedimiento. El código de procedimiento no tiene ningún acceso al
elemento subyacente del código de llamada.
Pasar por referencia
Un argumento se pasa por referencia especificando la palabra clave ByRef para el parámetro correspondiente en la definición
de procedimiento. Cuando utiliza este mecanismo para pasar argumentos, Visual Basic da al procedimiento una referencia
directa al elemento de programación subyacente del código de llamada.
Mecanismo para pasar argumentos y tipo de elemento
La opción del mecanismo para pasar argumentos no es igual que la clasificación del tipo de elemento subyacente. Pasar por
valor o por referencia hace referencia a lo que Visual Basic proporciona al código de procedimiento. Un tipo de valor o un tipo
de referencia hace referencia a cómo se almacena un elemento de programación en memoria.
Sin embargo, el mecanismo para pasar argumentos y el tipo de elemento están relacionados. El valor de un tipo de referencia
es un puntero que señala a los datos de otra parte de la memoria. Esto significa que cuando pasa un tipo de referencia por
valor, el código de procedimiento tiene un puntero que señala a los datos del elemento subyacente, aunque no tenga acceso al
elemento subyacente en sí. Por ejemplo, si el elemento es una variable de matriz, el código de procedimiento no tiene acceso a
la variable en sí, pero sí a los miembros de la matriz.
Capacidad de modificación
Si se pasa un elemento no modificable como argumento, el procedimiento no podrá modificarlo nunca en el código de
llamada, se pase con ByVal o con ByRef.
En la tabla siguiente se resume, para un elemento modificable, la interacción entre el tipo del elemento y el mecanismo para
pasar argumentos.
Tipo de elemento ByVal pasado ByRef pasado
Tipo de valor (sólo contiene un va El procedimiento no puede modificar la variable ni El procedimiento puede modificar la var
lor) ninguno de los miembros de ésta. iable y los miembros de ésta.

Tipo de referencia (contiene un pu El procedimiento no puede modificar la variable, p El procedimiento puede cambiar la varia
ntero a una instancia de clase o es ero puede cambiar los miembros de la instancia a l ble y los miembros de la instancia a la q
tructura) a que señala. ue señala.

Vea también
Tareas
Cómo: Pasar argumentos a un procedimiento
Cómo: Cambiar el valor de un argumento de procedimiento
Cómo: Proteger un argumento de procedimiento para que no se realicen cambios de valor
Cómo: Forzar un argumento para que pase como un valor
Conceptos
Procedimientos en Visual Basic
Argumentos y parámetros de procedimiento
Pasar argumentos por valor y por referencia
Diferencias entre argumentos modificables y no modificables
Pasar argumentos por posición o por nombre
Tipos de valores y tipos de referencia
Conceptos del lenguaje Visual Basic

Cómo: Cambiar el valor de un argumento de procedimiento


Cuando llama a un procedimiento, cada argumento proporcionado se corresponde con uno de los parámetros definidos en el
procedimiento. En algunos casos, el código del procedimiento puede cambiar el valor subyacente a un argumento en el código
de llamada. En otros casos, el procedimiento sólo puede cambiar la copia local de un argumento.
Cuando llama al procedimiento, Visual Basic hace una copia local de cada argumento transferido ByVal. En cada argumento
transferido ByRef, Visual Basic proporciona al código del procedimiento una referencia directa al elemento de programación
subyacente al argumento en el código de llamada.
Si el elemento subyacente del código de llamada es un elemento modificable y el argumento se transfiere ByRef, el código del
procedimiento puede utilizar la referencia directa para cambiar el valor del elemento en el código de llamada.
Cambiar el valor subyacente
Para cambiar el valor subyacente de un argumento del procedimiento en el código de llamada
1. En la declaración del procedimiento, especifique ByRef en el parámetro que se corresponda con el argumento.
2. En el código de llamada, transfiera un elemento de programación modificable como argumento.
3. En el código de llamada, no incluya el argumento entre paréntesis en la lista de argumentos.
4. En el código de procedimiento, utilice el nombre de parámetro para asignar un valor al elemento subyacente del código
de llamada.
Vea el ejemplo siguiente para consultar una demostración.
Cambiar las copias locales
Si el elemento subyacente del código de llamada no es un elemento modificable o si el argumento se transfiere ByVal, el
procedimiento no puede cambiar su valor en el código de llamada. Sin embargo, el procedimiento puede cambiar la copia
local de este tipo de argumento.
Para cambiar la copia de un argumento del procedimiento en el código del procedimiento
1. En la declaración del procedimiento, especifique ByVal en el parámetro que se corresponda con el argumento.
O bien
En el código de llamada, incluya el argumento entre paréntesis en la lista de argumentos. Esto hace que Visual Basic
transfiera el argumento por valor, aun cuando el parámetro correspondiente especifique ByRef.
2. En el código del procedimiento, utilice el nombre de parámetro para asignar un valor a la copia local del argumento. El
valor subyacente del código de llamada no se modifica.
Ejemplo
En el siguiente ejemplo se muestran dos procedimientos que toman una variable de matriz y operan con sus elementos. El
procedimiento increase sencillamente suma una unidad a cada elemento. El procedimiento replace asigna una nueva matriz
al parámetro a() y, a continuación, suma una unidad a cada elemento.
VB
Public Sub increase(ByVal a() As Long)
For j As Integer = 0 To UBound(a)
a(j) = a(j) + 1
Next j
End Sub

VB
Public Sub replace(ByRef a() As Long)
Dim k() As Long = {100, 200, 300}
a = k
For j As Integer = 0 To UBound(a)
a(j) = a(j) + 1
Next j
End Sub

VB
Dim n() As Long = {10, 20, 30, 40}
Call increase(n)
MsgBox("After increase(n): " & CStr(n(0)) & ", " & _
CStr(n(1)) & ", " & CStr(n(2)) & ", " & CStr(n(3)))
Call replace(n)
MsgBox("After replace(n): " & CStr(n(0)) & ", " & _
CStr(n(1)) & ", " & CStr(n(2)) & ", " & CStr(n(3)))

La primera llamada a MsgBox muestra "After increase(n): 11, 21, 31, 41". Dado que la matriz n es un tipo de referencia,
replace puede cambiar sus miembros, aunque el mecanismo para transferir argumentos es ByVal.

La segunda llamada a MsgBox muestra "After replace(n): 101, 201, 301". Dado que n se transfiere ByRef, replace puede
modificar la variable n en el código de llamada y asignarle una nueva matriz. Como n es un tipo de referencia, replace
también puede cambiar sus miembros.
Puede evitar que el procedimiento modifique la propia variable en el código de llamada. Vea
Cómo: Proteger un argumento de procedimiento para que no se realicen cambios de valor.
Compilar el código
Cuando se pasa una variable por referencia, debe utilizarse la palabra clave ByRef para especificar este mecanismo.
En Visual Basic, los argumentos se pasan por valor de forma predeterminada. Sin embargo, es una práctica de programación
recomendable incluir la palabra clave ByVal o ByRef con cada parámetro declarado. De este modo, el código resulta más fácil
de leer.
Seguridad
Existe siempre el riesgo potencial de permitir que un procedimiento cambie el valor subyacente a un argumento en el código
de llamada. Asegúrese de que tiene previsto que este valor se modifique y prepárese para comprobar su validez antes de
utilizarlo.
Vea también
Tareas
Cómo: Pasar argumentos a un procedimiento
Cómo: Proteger un argumento de procedimiento para que no se realicen cambios de valor
Cómo: Forzar un argumento para que pase como un valor
Conceptos
Procedimientos en Visual Basic
Argumentos y parámetros de procedimiento
Pasar argumentos por valor y por referencia
Diferencias entre argumentos modificables y no modificables
Diferencias entre pasar un argumento por valor y por referencia
Pasar argumentos por posición o por nombre
Tipos de valores y tipos de referencia
Conceptos del lenguaje Visual Basic

Cómo: Proteger un argumento de procedimiento para que no


se realicen cambios de valor
Si un procedimiento declara un parámetro ByRef, Visual Basic proporciona al código del procedimiento una referencia directa
al elemento de programación subyacente al argumento en el código de llamada. Esto permite al procedimiento cambiar el
valor subyacente al argumento en el código de llamada. En algunos casos, es probable que se desee proteger el código de
llamada frente a este tipo de cambios.
Para proteger un argumento y que no se efectúen cambios, puede declarar el parámetro correspondiente ByVal en el
procedimiento. Si desea poder cambiar un determinado argumento en algunos casos pero no en otros, puede declararlo
ByRef y permitir que el código de llamada determine el mecanismo para pasar argumentos en cada llamada. Para ello, incluya
el argumento correspondiente entre paréntesis para transferirlo por valor o déjelo sin paréntesis para transferirlo por
referencia. Para obtener más información, vea Cómo: Forzar un argumento para que pase como un valor.
Ejemplo
En el siguiente ejemplo se muestran dos procedimientos que toman una variable de matriz y operan con sus elementos. El
procedimiento increase sencillamente suma una unidad a cada elemento. El procedimiento replace asigna una nueva matriz
al parámetro a() y, a continuación, suma una unidad a cada elemento. La reasignación, sin embargo, no afecta a la variable de
matriz subyacente al código de llamada.
VB
Public Sub increase(ByVal a() As Long)
For j As Integer = 0 To UBound(a)
a(j) = a(j) + 1
Next j
End Sub

VB
Public Sub replace(ByVal a() As Long)
Dim k() As Long = {100, 200, 300}
a = k
For j As Integer = 0 To UBound(a)
a(j) = a(j) + 1
Next j
End Sub

VB
Dim n() As Long = {10, 20, 30, 40}
Call increase(n)
MsgBox("After increase(n): " & CStr(n(0)) & ", " & _
CStr(n(1)) & ", " & CStr(n(2)) & ", " & CStr(n(3)))
Call replace(n)
MsgBox("After replace(n): " & CStr(n(0)) & ", " & _
CStr(n(1)) & ", " & CStr(n(2)) & ", " & CStr(n(3)))

La primera llamada a MsgBox muestra "After increase(n): 11, 21, 31, 41". Dado que la matriz n es un tipo de referencia,
replace puede cambiar sus miembros, aunque el mecanismo para transferir argumentos es ByVal.

La segunda llamada a MsgBox muestra "After replace(n): 11, 21, 31, 41". Dado que n se transfiere ByVal, replace no puede
modificar la variable n en el código de llamada ni asignarle una nueva matriz. Cuando replace crea la nueva instancia de la
matriz k y la asigna a la variable local a, pierde la referencia a n que se transfirió en el código de llamada. Cuando cambia los
miembros de a, sólo resulta afectada la matriz local k . Por consiguiente, replace no incrementa los valores de la matriz n en
el código de llamada.
Compilar el código
En Visual Basic, los argumentos se pasan por valor de forma predeterminada. Sin embargo, es una práctica de programación
recomendable incluir la palabra clave ByVal o ByRef con cada parámetro declarado. De este modo, el código resulta más fácil
de leer.
Vea también
Tareas
Cómo: Pasar argumentos a un procedimiento
Cómo: Cambiar el valor de un argumento de procedimiento
Cómo: Forzar un argumento para que pase como un valor
Conceptos
Procedimientos en Visual Basic
Argumentos y parámetros de procedimiento
Pasar argumentos por valor y por referencia
Diferencias entre argumentos modificables y no modificables
Diferencias entre pasar un argumento por valor y por referencia
Pasar argumentos por posición o por nombre
Tipos de valores y tipos de referencia
Conceptos del lenguaje Visual Basic

Cómo: Forzar un argumento para que pase como un valor


El mecanismo para pasar argumentos se determina en la declaración del procedimiento. Si un parámetro se declara ByRef,
Visual Basic espera transferir el argumento correspondiente por referencia. Esto permite al procedimiento cambiar el valor del
elemento de programación subyacente al argumento en el código de llamada. Si desea proteger el elemento subyacente frente
a un cambio de este tipo, puede encerrar entre paréntesis el nombre del argumento en lugar de utilizar el mecanismo para
pasar argumentos ByRef en la llamada al procedimiento. Estos paréntesis son distintos de los paréntesis que encierran la lista
de argumentos en la llamada.
El código de llamada no puede reemplazar un mecanismo ByVal.
Para forzar un argumento para que pase por valor
Si el parámetro correspondiente se declara ByVal en el procedimiento, no es necesario realizar pasos adicionales. Visual
Basic ya tiene previsto transferir el argumento por valor.
Si el parámetro correspondiente se declara ByRef en el procedimiento, incluya el argumento entre paréntesis en la
llamada al procedimiento.
Ejemplo
En el ejemplo siguiente se reemplaza una declaración del parámetro ByRef. En la llamada que obliga a utilizar ByVal, tenga en
cuenta los dos niveles de paréntesis.
VB
Sub setNewString(ByRef inString As String)
inString = "This is a new value for the inString argument."
MsgBox(inString)
End Sub

VB
Dim str As String = "Cannot be replaced if passed ByVal"

' The following call passes str ByVal even though it is declared ByRef.
Call setNewString((str))
' The parentheses around str protect it from change.
MsgBox(str)

' The following call allows str to be passed ByRef as declared.


Call setNewString(str)
' Variable str is not protected from change.
MsgBox(str)

Cuando str está encerrado entre paréntesis adicionales dentro de la lista de argumentos, el procedimiento setNewString no
puede cambiar su valor en el código de llamada, y MsgBox muestra "Cannot be replaced if passed ByVal". Cuando str no está
incluido entre paréntesis adicionales, el procedimiento no puede cambiarlo, y MsgBox muestra "This is a new value for the
inString argument".
Compilar el código
Cuando se pasa una variable por referencia, debe utilizarse la palabra clave ByRef para especificar este mecanismo.
En Visual Basic, los argumentos se pasan por valor de forma predeterminada. Sin embargo, es una práctica de programación
recomendable incluir la palabra clave ByVal o ByRef con cada parámetro declarado. De este modo, el código resulta más fácil
de leer.
Programación eficaz
Si un procedimiento declara un parámetro ByRef, la ejecución correcta del código dependerá de si es capaz de cambiar el
elemento subyacente en el código de llamada. Si el código de llamada sustituye este mecanismo de llamada encerrando el
argumento entre paréntesis, o si transfiere un argumento que no se puede modificar, el procedimiento no puede cambiar el
elemento subyacente. Esto podría generar resultados inesperados en el código de llamada.
Seguridad
Existe siempre el riesgo potencial de permitir que un procedimiento cambie el valor subyacente a un argumento en el código
de llamada. Asegúrese de que tiene previsto que este valor se modifique y prepárese para comprobar su validez antes de
utilizarlo.
Vea también
Tareas
Cómo: Pasar argumentos a un procedimiento
Cómo: Cambiar el valor de un argumento de procedimiento
Cómo: Proteger un argumento de procedimiento para que no se realicen cambios de valor
Conceptos
Procedimientos en Visual Basic
Argumentos y parámetros de procedimiento
Pasar argumentos por valor y por referencia
Diferencias entre argumentos modificables y no modificables
Diferencias entre pasar un argumento por valor y por referencia
Pasar argumentos por posición o por nombre
Tipos de valores y tipos de referencia
Conceptos del lenguaje Visual Basic

Pasar argumentos por posición o por nombre


Cuando se llama a un procedimiento Sub o Function, los argumentos pueden pasarse por posición, es decir, en el orden en
que aparecen en la definición del procedimiento, o por nombre, sin tener en cuenta la posición.
Para pasar un argumento por nombre, hay que especificar el nombre declarado del argumento, seguido de un signo de dos
puntos y un signo igual (:=) y seguido del valor del argumento. Los argumentos que se pasan por nombre pueden
suministrarse en cualquier orden.
Por ejemplo, el siguiente procedimiento Sub toma tres argumentos:
VB
Sub studentInfo(ByVal name As String, _
Optional ByVal age As Short = 0, _
Optional ByVal birth As Date = #1/1/2000#)

Debug.WriteLine("Name = " & name & _


"; age = " & CStr(age) & _
"; birth date = " & CStr(birth))
End Sub

Cuando se llama a este procedimiento, los argumentos pueden suministrarse por posición, por nombre o mediante una
combinación de ambos.
Pasar argumentos por posición
Puede llamar al procedimiento studentInfo pasando sus argumentos por posición y delimitados por comas, como se muestra
en el ejemplo siguiente:
VB
Call studentInfo("Mary", 19, #9/21/1981#)

Si omite un argumento opcional de una lista de argumentos por posición, deberá mantener su posición mediante una coma. El
ejemplo siguiente llama a studentInfo sin el argumento age :
VB
Call studentInfo("Mary", , #9/21/1981#)

Pasar argumentos por nombre


Otra opción es llamar al procedimiento studentInfo pasando sus argumentos por nombre, también delimitados por comas,
como se muestra en el ejemplo siguiente:
VB
Call studentInfo(age:=19, birth:=#9/21/1981#, name:="Mary")

Pasar argumentos por posición y por nombre


Puede suministrar los argumentos por posición y por nombre a la vez en la misma llamada a un procedimiento, como se
muestra en el ejemplo siguiente:
VB
Call studentInfo("Mary", birth:=#9/21/1981#)

En el ejemplo anterior, no se necesita una coma adicional para mantener la posición del argumento age omitido, puesto que
birth se pasa por nombre.
Si se suministran argumentos por nombre y por posición, los argumentos por posición deben preceder al resto. Si se ha
suministrado un argumento por nombre, el resto de los argumentos deberán especificarse también por nombre.
Suministrar argumentos opcionales por nombre
Pasar argumentos por nombre tiene especial utilidad si se llama a un procedimiento que tiene varios argumentos opcionales.
Si se suministran argumentos por nombre, no es necesario utilizar comas consecutivas para denotar los argumentos por
posición ausentes. Pasar argumentos por nombre facilita también la tarea de realizar un seguimiento de los argumentos que
se pasan y de los que se omiten.
Restricciones al suministro de argumentos por nombre
No se pueden pasar argumentos por nombre a fin de evitar tener que especificar argumentos requeridos. Sólo pueden
omitirse los argumentos opcionales.
No se puede pasar una matriz de parámetros por nombre. Esto obedece a que, cuando se llama al procedimiento, se
suministra a la matriz de parámetros un número indeterminado de argumentos separados por comas, y el compilador no
puede asociar más de un argumento a cada nombre individual.
Vea también
Tareas
Cómo: Pasar argumentos a un procedimiento
Cómo: Pasar argumentos a un procedimiento por nombre
Referencia
Optional (Visual Basic)
ParamArray
Conceptos
Procedimientos en Visual Basic
Argumentos y parámetros de procedimiento
Pasar argumentos por valor y por referencia
Parámetros opcionales
Matrices de parámetros
Conceptos del lenguaje Visual Basic

Cómo: Pasar argumentos a un procedimiento por nombre


Cuando llama a un procedimiento Sub o Function, puede transferirle argumentos por nombre, sin tener en cuenta el orden
en el que aparecen los parámetros correspondientes en la definición del procedimiento.
Los argumentos que se transfieren por nombre hacen que el código de llamada sea más fácil de leer porque proporcionan
significado a los valores de los argumentos en la llamada al procedimiento. Si el procedimiento tiene parámetros opcionales, al
transferir los argumentos por nombre, también resulta más fácil hacer un seguimiento de los argumentos que se están
transfiriendo y de los que se están omitiendo.
Para obtener información sobre las reglas y restricciones necesarias para proporcionar argumentos por nombre, vea
Pasar argumentos por posición o por nombre.
Para pasar un argumento por nombre
1. Examine el código fuente de la declaración del procedimiento para determinar la ortografía exacta de los nombres de
parámetro.
2. En el código de llamada, prepare la llamada al procedimiento de la manera habitual, con la lista de argumentos entre
paréntesis detrás del nombre de procedimiento.
3. En cada argumento que desee transferir, proporcione el nombre declarado del parámetro seguido de dos puntos y un
signo igual (:=) y, a continuación, incluya el valor que está transfiriendo para el argumento.
4. Puede proporcionar los argumentos con nombre en cualquier orden, pero debe proporcionar todos los argumentos
posicionales antes de proporcionar cualquier argumento con nombre.

Ejemplo
En el ejemplo siguiente se muestra un procedimiento Sub con tres parámetros, y una instrucción Instrucción Call (Visual Basic)
que transfiere los argumentos a estos parámetros por nombre.
VB
Sub studentInfo(ByVal name As String, _
Optional ByVal age As Short = 0, _
Optional ByVal birth As Date = #1/1/2000#)

Debug.WriteLine("Name = " & name & _


"; age = " & CStr(age) & _
"; birth date = " & CStr(birth))
End Sub

VB
Call studentInfo(age:=19, birth:=#9/21/1981#, name:="Mary")

Cuando pasa los argumentos por nombre, no tiene que proporcionarlos en el mismo orden en el que los declara el
procedimiento.
Compilar el código
Asegúrese de que el nombre del parámetro en la lista de argumentos coincide exactamente con el nombre declarado por el
procedimiento.
Vea también
Tareas
Cómo: Pasar argumentos a un procedimiento
Referencia
Optional (Visual Basic)
ParamArray
Conceptos
Procedimientos en Visual Basic
Argumentos y parámetros de procedimiento
Pasar argumentos por valor y por referencia
Pasar argumentos por posición o por nombre
Parámetros opcionales
Matrices de parámetros
Conceptos del lenguaje Visual Basic

Parámetros opcionales
Un parámetro de un procedimiento puede ser opcional si así se especifica y no es necesario proporcionarle argumentos al
llamar al procedimiento. Los parámetros opcionales se indican mediante la palabra clave Optional en la definición del
procedimiento. Se aplican las siguientes reglas:
Todos los parámetros opcionales de la definición del procedimiento deben especificar un valor predeterminado.
El valor predeterminado de un parámetro opcional debe ser una expresión constante.
Todos los parámetros que vayan a continuación de un parámetro opcional en la definición del procedimiento también
deben ser opcionales.
La siguiente sintaxis muestra una declaración de procedimiento con un parámetro opcional:

Sub sub name(ByVal parameter 1 As data type 1, Optional ByVal parameter 2 As data type 2 =
default value)

Llamar a procedimientos con parámetros opcionales


Cuando se llama a un procedimiento con un parámetro opcional, se puede elegir si se proporciona o no el argumento. Si no se
proporciona, el procedimiento utiliza el valor predeterminado declarado para dicho parámetro.
Si se omiten uno o más argumentos opcionales de la lista de argumentos, hay que utilizar comas sucesivas para delimitar sus
posiciones. En el ejemplo de llamada siguiente se suministran los argumentos primero y cuarto, pero no el segundo ni el
tercero:

Call sub name(argument 1, , , argument 4)

Determinar si un argumento opcional está presente


En tiempo de ejecución un procedimiento no puede detectar si un argumento determinado se ha omitido o si el código de
llamada ha suministrado de forma explícita el valor predeterminado de dicho argumento. Si fuese necesario hacer esta
distinción, se podría establecer como valor predeterminado un valor improbable. El siguiente procedimiento define el
parámetro opcional office y comprueba si su valor predeterminado, QJZ, ha sido omitido en la llamada:
VB
Sub notify(ByVal company As String, Optional ByVal office As String = "QJZ")
If office = "QJZ" Then
Debug.WriteLine("office not supplied -- using Headquarters")
office = "Headquarters"
End If
' Insert code to notify headquarters or specified office.
End Sub

Si el parámetro opcional es un tipo de referencia, como String, puede utilizar Nothing como valor predeterminado, siempre y
cuando éste no sea un valor esperado para el argumento.
Parámetros opcionales y sobrecarga
Otra forma de definir un procedimiento con parámetros opcionales consiste en utilizar una sobrecarga. Si tiene un parámetro
opcional, puede definir dos versiones sobrecargadas del procedimiento, una que acepte el parámetro y otra sin él. Este
planteamiento se complica a medida que aumenta el número de parámetros opcionales. No obstante, tiene la ventaja de que
permite saber con total certeza si el programa de llamada ha suministrado o no cada argumento opcional.
Vea también
Tareas
Cómo: Definir parámetros opcionales para un procedimiento
Cómo: Llamar a un procedimiento que utiliza parámetros opcionales
Cómo: Determinar si se ha suministrado un parámetro opcional
Referencia
Optional (Visual Basic)
ParamArray
Conceptos
Procedimientos en Visual Basic
Argumentos y parámetros de procedimiento
Pasar argumentos por valor y por referencia
Pasar argumentos por posición o por nombre
Matrices de parámetros
Sobrecarga de procedimientos
Conceptos del lenguaje Visual Basic

Cómo: Definir parámetros opcionales para un procedimiento


Puede especificar que un parámetro de un procedimiento sea opcional, para que el código de llamada no tenga que
proporcionar un argumento al llamar al procedimiento. En este caso, se define un valor predeterminado que el procedimiento
utiliza si no se proporciona el argumento.
Puede definir más de un parámetro opcional pero todos los parámetros opcionales deben estar al final de la lista de
parámetros. Todos los parámetros necesarios deben preceder a los parámetros opcionales.
Para definir un parámetro opcional
1. En la declaración del procedimiento, anteponga al nombre de parámetro en la lista de parámetros la palabra clave
Optional.
2. Agregue detrás del nombre de parámetro la cláusula As de la manera habitual y agregue detrás de la cláusula As un
signo igual (=).
3. Agregue detrás del signo igual el valor predeterminado para el parámetro. Éste debe ser una expresión constante para
que el compilador pueda evaluarlo completamente en tiempo de compilación.
4. Debe declarar todos los parámetros subsiguientes como Optional.
Ejemplo
El siguiente ejemplo muestra una declaración de procedimiento con un parámetro opcional:
VB
Sub notify(ByVal company As String, Optional ByVal office As String = "QJZ")
If office = "QJZ" Then
Debug.WriteLine("office not supplied -- using Headquarters")
office = "Headquarters"
End If
' Insert code to notify headquarters or specified office.
End Sub

Si el código de llamada no proporciona un valor para office en la lista de argumentos, Visual Basic proporciona el valor
predeterminado de "QJZ".
Compilar el código
Debe especificar un valor predeterminado para todos los parámetros opcionales en la declaración de procedimiento.
Asegúrese de que los valores predeterminados sean una constante que el compilador pueda evaluar en tiempo de
compilación.
Vea también
Tareas
Cómo: Llamar a un procedimiento que utiliza parámetros opcionales
Cómo: Determinar si se ha suministrado un parámetro opcional
Referencia
Optional (Visual Basic)
ParamArray
Conceptos
Argumentos y parámetros de procedimiento
Pasar argumentos por valor y por referencia
Pasar argumentos por posición o por nombre
Parámetros opcionales
Matrices de parámetros
Sobrecarga de procedimientos
Conceptos del lenguaje Visual Basic

Cómo: Llamar a un procedimiento que utiliza parámetros


opcionales
Cuando se llama a un procedimiento con un parámetro opcional, es posible elegir si se suministra o no el argumento
correspondiente. Si no se suministra, el procedimiento utiliza el valor predeterminado declarado para dicho parámetro.
Si desea proporcionar el argumento, inclúyalo en la lista de argumentos del modo habitual, entre comas.
Si desea omitir el argumento, utilice comas sucesivas en la lista de argumentos para marcar su omisión.
Si omite el argumento y está proporcionando los argumentos por nombre, no es necesario indicar al argumento omitido
mediante el nombre ni mediante comas.
Ejemplo
En el ejemplo siguiente se llevan a cabo varias llamadas a la función MsgBox. MsgBox tiene un parámetro obligatorio y dos
parámetros opcionales.
VB
MsgBox("Important message", MsgBoxStyle.Critical, "MsgBox Example")
MsgBox("Just display this message.")
MsgBox("Test message", , "Title bar text")
MsgBox(Title:="Title bar text", Prompt:="Test message")

La primera llamada a MsgBox proporciona los tres argumentos en el orden en que MsgBox los define. La segunda llamada
únicamente proporciona el argumento obligatorio. La tercera y la cuarta llamada proporcionan el primer y el tercer
argumento. La tercera llamada lo hace por posición y la llamada cuarta, por nombre.
Compilar el código
Antes de omitir un argumento en una lista de argumentos, asegúrese de que el parámetro correspondiente es opcional y de
que desea que el procedimiento utilice el valor predeterminado para dicho parámetro.
Si proporciona un argumento por nombre, compruebe que el nombre incluido en la lista de argumentos coincide exactamente
con el nombre del parámetro declarado.
Vea también
Tareas
Cómo: Definir parámetros opcionales para un procedimiento
Cómo: Determinar si se ha suministrado un parámetro opcional
Referencia
Optional (Visual Basic)
ParamArray
Conceptos
Argumentos y parámetros de procedimiento
Pasar argumentos por valor y por referencia
Pasar argumentos por posición o por nombre
Parámetros opcionales
Matrices de parámetros
Sobrecarga de procedimientos
Conceptos del lenguaje Visual Basic

Cómo: Determinar si se ha suministrado un parámetro opcional


Cuando un procedimiento define un parámetro opcional, es posible que sea necesario determinar si el código de llamada ha
proporcionado el argumento correspondiente o lo ha omitido.
Si el valor del parámetro es igual a su valor predeterminado, esto podría deberse a uno de los motivos siguientes:
El código de llamada omitió el argumento en la llamada al procedimiento; o
El código de llamada proporcionó un argumento con un valor que es exactamente igual al valor predeterminado del
parámetro.
El código del procedimiento no puede distinguir entre estas dos posibilidades. A menudo esto no es importante, pero en
ciertos casos el procedimiento podría tener que tomar medidas distintas en cada una de estas situaciones. El mejor enfoque
del que dispone es definir un valor improbable como valor predeterminado, aunque esto no garantiza que el código de
llamada no pueda suministrarlo.
Es importante estar completamente seguro de que el programa que realiza la llamada proporciona un argumento opcional; el
enfoque más seguro es definir versiones sobrecargadas del procedimiento. Vea
Cómo: Definir varias versiones de un procedimiento y Consideraciones sobre la sobrecarga de procedimientos.
Para determinar si un argumento se ha transferido a un parámetro opcional
1. Defina un valor que sea sumamente improbable como valor predeterminado para el parámetro.
2. Si el argumento opcional es un tipo de referencia, como String, puede utilizar Nothing como valor predeterminado,
siempre y cuando éste no sea un valor esperado para el argumento.
3. En el código del procedimiento, compare el parámetro frente el valor predeterminado y tome las medidas adecuadas.
Sobrecargar un procedimiento con y sin un parámetro opcional
Otra forma de definir un procedimiento con parámetros opcionales consiste en utilizar una sobrecarga. Si tiene un parámetro
opcional, puede definir dos versiones sobrecargadas del procedimiento, una que acepte el parámetro y otra que no lo acepte.
Este planteamiento se complica a medida que aumenta el número de parámetros opcionales. No obstante, tiene la ventaja de
que permite saber con total certeza si el programa de llamada ha suministrado o no cada argumento opcional.
Para definir versiones diferentes del procedimiento en las que se incluya y se omita un argumento
1. Defina una versión del procedimiento con el parámetro en la lista de argumentos. No declare el parámetro como
Optional.
2. Defina otra versión del procedimiento sin el parámetro. La declaración debería ser idéntica a la de la primera versión en
todos los demás aspectos.
3. Sitúe el código apropiado para cada llamada en la versión correspondiente del procedimiento.
Ejemplo
El procedimiento que se muestra a continuación define el argumento opcional office y comprueba si su valor
predeterminado, QJZ, se ha omitido en la llamada:
VB
Sub notify(ByVal company As String, Optional ByVal office As String = "QJZ")
If office = "QJZ" Then
Debug.WriteLine("office not supplied -- using Headquarters")
office = "Headquarters"
End If
' Insert code to notify headquarters or specified office.
End Sub

Si el código de llamada no proporciona un valor para office en la lista de argumentos, Visual Basic proporciona el valor
predeterminado "QJZ".
Si el argumento opcional es un tipo de referencia, como String, puede utilizar Nothing (Visual Basic) como valor
predeterminado, siempre y cuando éste no sea un valor esperado para el argumento.
Para consultar un ejemplo sobre cómo se utilizan las sobrecargas para determinar si se ha transferido un parámetro opcional,
vea Cómo: Sobrecargar un procedimiento que toma parámetros opcionales.
Vea también
Tareas
Cómo: Definir parámetros opcionales para un procedimiento
Cómo: Llamar a un procedimiento que utiliza parámetros opcionales
Referencia
Optional (Visual Basic)
ParamArray
Conceptos
Argumentos y parámetros de procedimiento
Pasar argumentos por valor y por referencia
Pasar argumentos por posición o por nombre
Parámetros opcionales
Matrices de parámetros
Sobrecarga de procedimientos
Conceptos del lenguaje Visual Basic

Matrices de parámetros
Normalmente no es posible llamar a un procedimiento con un número de argumentos superior al especificado en la
declaración del procedimiento. Si se necesita un número indeterminado de argumentos, puede declararse una matriz de
parámetros, que permite que un procedimiento acepte una matriz de valores en un parámetro. No es necesario conocer el
número de elementos de la matriz de parámetros en el momento de definir el procedimiento. El tamaño de la matriz se
determina individualmente en cada llamada al procedimiento.
Declarar una matriz de parámetros
Utilice la palabra clave ParamArray para denotar una matriz de parámetros en la lista de parámetros. Se aplican las siguientes
reglas:
Un procedimiento puede definir únicamente una matriz de parámetros, que debe ser el último parámetro en la definición
del procedimiento.
La matriz de parámetros debe pasarse por valor. Es un hábito de programación recomendado incluir de manera explícita
la palabra clave ByVal en la definición del procedimiento.
La matriz de parámetros es opcional de forma automática. Su valor predeterminado es una matriz unidimensional vacía
del tipo de elemento de la matriz de parámetros.
Todos los parámetros que preceden a la matriz de parámetros deben ser obligatorios. La matriz de parámetros debe ser
el único parámetro opcional.
Para obtener más información, vea Cómo: Definir un procedimiento con un número indefinido de parámetros.
Llamar a un lista de parámetros
Cuando se llama a un procedimiento que define una matriz de parámetros, se puede proporcionar el argumento de los
siguientes modos:
Ninguno, es decir, puede omitirse el argumento ParamArray. En este caso, se pasará una matriz vacía al procedimiento.
También puede pasarse la palabra clave Nothing (Visual Basic), obteniéndose el mismo efecto.
Una lista con un número arbitrario de argumentos, separados por comas. El tipo de los datos de cada argumento debe
poder convertirse implícitamente al tipo de elemento ParamArray.
Una matriz con el mismo tipo de elemento que la matriz de parámetros.
En todas las clases, el código del procedimiento debe considerar la matriz de parámetros una matriz unidimensional, cuyos
elementos deben tener el mismo tipo de datos que ParamArray.
Para obtener más información, vea Cómo: Llamar a un procedimiento que toma un número indefinido de parámetros.
Nota de seguridad
Si se trabaja con matrices cuyo tamaño es excesivamente grande, existe el riesgo de sobrecargar alguna capacidad interna de
la aplicación. Si acepta una matriz de parámetros, debe comprobar el tamaño de la matriz que el código de llamada ha transf
erido. Tome las medidas necesarias si la matriz es demasiado grande para la aplicación. Para obtener más información, vea
Cómo: Determinar el tamaño de una matriz.

Vea también
Referencia
Optional (Visual Basic)
UBound (Función, Visual Basic)
Conceptos
Procedimientos en Visual Basic
Argumentos y parámetros de procedimiento
Pasar argumentos por valor y por referencia
Pasar argumentos por posición o por nombre
Parámetros opcionales
Sobrecarga de procedimientos
Comprobar tipos en Visual Basic
Otros recursos
Matrices en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Definir un procedimiento con un número indefinido de


parámetros
Puede declarar una matriz de parámetros como la última entrada en la lista de parámetros de un procedimiento. Esto permite
al procedimiento aceptar un conjunto de valores para ese parámetro, en lugar de sólo un único valor. No es necesario conocer
el número de valores del conjunto en el momento de definir el procedimiento. Cada llamada al procedimiento determina
individualmente el conjunto y cada llamada puede pasar un número diferente de valores.
Para obtener más información, vea Matrices de parámetros.
Para definir un procedimiento que puede aceptar un número indefinido de valores para su último
parámetro
1. En la declaración de procedimiento, defina la lista de parámetros de la manera normal. Todos los parámetros excepto el
último son obligatorios (no Optional (Visual Basic)).
2. Anteponga al último nombre de parámetro las palabras clave ByVal ParamArray. Este parámetro es opcional de forma
automática. No incluya la palabra clave Optional.
3. Agregue detrás del nombre de la matriz de parámetros un par de paréntesis vacíos.
4. Agregue detrás de los paréntesis vacíos la cláusula As habitual.
5. No agregue detrás de la cláusula As un valor predeterminado. El valor predeterminado de la matriz de parámetros es
automáticamente una matriz unidimensional vacía del tipo de datos especificado en la cláusula As.
Trabajar con los valores de la matriz de parámetros
El código del procedimiento debe considerar a la matriz de parámetros una matriz unidimensional; el tipo de datos de los
elementos de la matriz ha de ser el mismo que el tipo de datos de ParamArray.
Para tener acceso a uno de los valores de una matriz de parámetros
1. En el código de procedimiento, determine la longitud de la matriz pasada a la matriz de parámetros llamando a
UBound (Función, Visual Basic) en el nombre de la matriz de parámetros.
2. En una instrucción ejecutable del código de procedimiento, agregue detrás del nombre de la matriz de parámetros un
subíndice entre paréntesis. Este subíndice debería estar entre 0 y el límite superior devuelto por UBound.
Nota de seguridad
Si se trabaja con matrices cuyo tamaño es excesivamente grande, existe el riesgo de saturar alguna capacidad interna de la a
plicación. Si acepta un matriz de parámetros desde el código de llamada, debe comprobar su longitud y seguir los pasos ade
cuados si es demasiado grande para la aplicación.

Ejemplo
En el ejemplo siguiente se define un procedimiento con una matriz de parámetros y se generan los valores de todos los
elementos de matriz pasados a la matriz de parámetros.
VB
Sub studentScores(ByVal name As String, ByVal ParamArray scores() As String)
Debug.WriteLine("Scores for " & name & ":" & vbCrLf)
' Use UBound to determine largest subscript of the array.
For i As Integer = 0 To UBound(scores, 1)
Debug.WriteLine("Score " & i & ": " & scores(i))
Next i
End Sub

En los siguientes ejemplos se muestran llamadas típicas a studentScores.


VB
Call studentScores("Anne", "10", "26", "32", "15", "22", "24", "16")
Call studentScores("Mary", "High", "Low", "Average", "High")
Dim JohnScores() As String = {"35", "Absent", "21", "30"}
Call studentScores("John", JohnScores)

Compilar el código
Asegúrese de que ParamArray es el último parámetro en la lista de parámetros y que ninguno de los parámetros anteriores
se declara Optional.
Vea también
Tareas
Cómo: Llamar a un procedimiento que toma un número indefinido de parámetros
Referencia
ByVal
ParamArray
Conceptos
Argumentos y parámetros de procedimiento
Pasar argumentos por valor y por referencia
Pasar argumentos por posición o por nombre
Parámetros opcionales
Sobrecarga de procedimientos
Comprobar tipos en Visual Basic
Otros recursos
Matrices en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Llamar a un procedimiento que toma un número


indefinido de parámetros
Un procedimiento puede declarar que la última entrada en su lista de parámetros sea una matriz de parámetros. Esto le
permite aceptar un número indefinido de valores para ese parámetro, en lugar de sólo un único valor.
Para obtener más información, vea Matrices de parámetros.
Para llamar a un procedimiento con una matriz de parámetros y omitir el argumento correspondiente
1. Escriba la llamada al procedimiento de la manera normal. La matriz de parámetros debe ser el último argumento.
2. Finalice la lista de argumentos con el penúltimo argumento. La matriz de parámetros es opcional y todos los parámetros
anteriores deben ser obligatorios.
O bien,
Proporcione la palabra clave Nothing como argumento para la matriz de parámetros.
3. Visual Basic pasa una matriz unidimensional vacía al procedimiento para la matriz de parámetros.
Para llamar a un procedimiento con una matriz de parámetros y proporcionar una lista de argumentos
1. Escriba la llamada al procedimiento de la manera normal. La matriz de parámetros debe ser el último argumento.
2. Proporcione cualquier número de argumentos, separados por comas, para la matriz de parámetros. El tipo de los datos
de cada argumento debe poder convertirse implícitamente al tipo de elemento ParamArray.
3. Visual Basic pasa una matriz unidimensional al procedimiento, que contiene todos los valores proporcionados.
Para llamar a un procedimiento con una matriz de parámetros y proporcionar una matriz de
argumentos
1. Escriba la llamada al procedimiento de la manera normal. La matriz de parámetros debe ser el último argumento.
2. Para la matriz de parámetros, proporcione una matriz unidimensional con el mismo tipo de elemento que el de la matriz
de parámetros.
3. Visual Basic pasa la matriz al procedimiento.
Ejemplo
Los ejemplos siguientes muestran las llamadas típicas al procedimiento studentScores definido en
Cómo: Definir un procedimiento con un número indefinido de parámetros.
VB
Call studentScores("George")
... Call studentScores("Anne", "10", "26", "32", "15", "22", "24", "16")
Call studentScores("Mary", "High", "Low", "Average", "High")
Dim JohnScores() As String = {"35", "Absent", "21", "30"}
Call studentScores("John", JohnScores)

La primera llamada omite totalmente la matriz de parámetros y proporciona sólo el primer argumento necesario. El
procedimiento studentScores trata esta llamada como si pasara una matriz vacía.
La segunda y la tercera llamadas proporcionan las listas de argumentos de longitudes diferentes a la matriz de parámetros.
Cada lista de éstas se pasa como una matriz de valores.
La cuarta llamada pasa una matriz a la matriz de parámetros.
Vea también
Referencia
Optional (Visual Basic)
ParamArray
ByVal
UBound (Función, Visual Basic)
Conceptos
Argumentos y parámetros de procedimiento
Pasar argumentos por valor y por referencia
Pasar argumentos por posición o por nombre
Parámetros opcionales
Sobrecarga de procedimientos
Comprobar tipos en Visual Basic
Conceptos del lenguaje Visual Basic

Procedimientos recursivos
Un procedimiento recursivo es aquél que se llama a sí mismo. En general, ésta no suele ser la manera más eficaz de escribir
código en Visual Basic.
En el siguiente procedimiento se utiliza la recursividad para calcular el factorial de su argumento original.
VB
Function factorial(ByVal n As Integer) As Integer
If n <= 1 Then
Return 1
Else
Return factorial(n - 1) * n
End If
End Function

Consideraciones sobre procedimientos recursivos


Condiciones de limitación. Debe designar un procedimiento recursivo para probar al menos una condición que pueda
poner fin a la recursividad; también debe supervisar los casos en los que no se satisface ninguna condición dentro de un
número razonable de llamadas recursivas. Si no existe al menos una condición que pueda cumplirse sin errores, el
procedimiento corre un riesgo elevado de ejecutarse en un bucle infinito.
Uso de la memoria. La aplicación tiene una cantidad de espacio limitada para las variables locales. Cada vez que un
procedimiento se llama a sí mismo, utiliza más cantidad de ese espacio para las copias adicionales de sus variables locales. Si
este proceso continúa indefinidamente, se acaba produciendo un error StackOverflowException.
Eficacia. Casi siempre se puede sustituir un bucle por la recursividad. Un bucle no tiene la sobrecarga de transferir
argumentos, inicializar el almacenamiento adicional y devolver valores. Su rendimiento puede ser mucho mayor sin llamadas
recursivas.
Recursividad mutua. Si dos procedimientos se llaman mutuamente, el rendimiento puede ser muy deficiente o incluso puede
producirse un bucle infinito. Este tipo de diseño presenta los mismos problemas que un procedimiento recursivo único, pero
puede ser más difícil de detectar y depurar.
Llamadas con paréntesis. Cuando un procedimiento Function se llama a sí mismo de manera recursiva, debe agregar
paréntesis detrás del nombre del procedimiento, aun cuando no exista una lista de argumentos. De lo contrario, se considerará
que el nombre de la función representa al valor devuelto por ésta.
Pruebas Si escribe un procedimiento recursivo, debe probarlo minuciosamente para asegurarse de que siempre cumple
ciertas condiciones de limitación. También debería comprobar que la memoria no resulta insuficiente debido a la gran cantidad
de llamadas recursivas.
Vea también
Tareas
Procedimientos de solución de problemas
Solución de problemas de excepciones: System.StackOverflowException
Referencia
StackOverflowException
Conceptos
Procedimientos en Visual Basic
Procedimientos Sub
Procedimientos Function
Procedimientos de propiedad
Procedimientos de operador
Argumentos y parámetros de procedimiento
Sobrecarga de procedimientos
Estructuras de bucles
Conceptos del lenguaje Visual Basic

Sobrecarga de procedimientos
Sobrecargar un procedimiento significa definirlo en varias versiones, utilizando el mismo nombre pero distintas listas de
parámetros. El propósito de sobrecargar un procedimiento es definir varias versiones de un procedimiento estrechamente
relacionadas sin tener que distinguirlas por su nombre. Esto se lleva a cabo modificando la lista de parámetros.
Reglas de sobrecarga
Cuando se sobrecarga un procedimiento, se aplican las siguientes reglas:
Mismo nombre. Todas las versiones sobrecargadas deben tener el mismo nombre de procedimiento.
Diferente firma. Cada versión sobrecargada debe diferir de todas las demás por lo menos en uno de los siguientes
aspectos:
Número de parámetros
Orden de los parámetros
Tipos de datos de los parámetros
Número de parámetros de tipo (para un procedimiento genérico)
Tipo de valor devuelto (sólo para un operador de conversión)
Junto con el nombre de procedimiento, los elementos anteriores se denominan de forma colectiva firma del
procedimiento. Cuando llama a un procedimiento sobrecargado, el compilador utiliza la firma para comprobar que la
llamada coincide exactamente con la definición.
Elementos que no forman parte de la firma. No se puede sobrecargar un procedimiento sin modificar la firma. En
concreto, no es posible sobrecargar un procedimiento cambiando únicamente uno o varios de los siguientes elementos:
Palabras clave que modifican a los procedimientos, como Public, Shared y Static
Nombres de parámetros o de parámetros de tipo
Restricciones de parámetros de tipo (para un procedimiento genérico)
Palabras clave que modifican a los parámetros, como ByRef y Optional
Si devuelve un valor
El tipo de datos del valor devuelto (excepto para un operador de conversión)
Los elementos de la lista anterior no forman parte de la firma. Aunque no puede utilizarlos para diferenciar las versiones
sobrecargadas, puede modificarlos en las versiones sobrecargadas que ya se diferencian debidamente por sus firmas.
Argumentos enlazados en tiempo de ejecución. Si piensa pasar una variable de objeto de enlace en tiempo de
ejecución a un procedimiento sobrecargado, deberá declarar el parámetro correspondiente como Object.
Varias versiones de un procedimiento
Supongamos que está escribiendo un procedimiento Sub para contabilizar una transacción en el saldo de un cliente, y que
desea hacer referencia al cliente por su nombre o por su número de cuenta. Para ello, puede definir dos procedimientos Sub
diferentes, como se indica en este ejemplo:
VB
Sub postName(ByVal custName As String, ByVal amount As Single)
' Insert code to access customer record by customer name.
End Sub
Sub postAcct(ByVal custAcct As Integer, ByVal amount As Single)
' Insert code to access customer record by account number.
End Sub

Versiones sobrecargadas
Una alternativa podría ser sobrecargar un único nombre de procedimiento. Puede utilizar la palabra clave Overloads para
definir una versión del procedimiento para cada lista de parámetros, tal y como se indica a continuación:
VB
Overloads Sub post(ByVal custName As String, ByVal amount As Single)
' Insert code to access customer record by customer name.
End Sub
Overloads Sub post(ByVal custAcct As Integer, ByVal amount As Single)
' Insert code to access customer record by account number.
End Sub

Sobrecargas adicionales
Si también deseara aceptar el importe de una transacción en Decimal o Single, podría sobrecargar de nuevo post para que
admitiera esa variación. Si hiciera esto en cada una de las sobrecargas del ejemplo anterior, obtendría cuatro procedimientos
Sub, todos ellos con el mismo nombre pero con cuatro firmas diferentes.
Ventajas de la sobrecarga
La ventaja de sobrecargar un procedimiento radica en la flexibilidad de la llamada. Si utilizamos el procedimiento post
declarado en el ejemplo anterior, el código de llamada puede obtener la identificación de cliente como String o Integer, y
después llamar al mismo procedimiento en los dos casos. Esto se ilustra en el siguiente ejemplo:
VB
Imports MSVB = Microsoft.VisualBasic

VB
Dim customer As String
Dim accountNum As Integer
Dim amount As Single
customer = MSVB.Interaction.InputBox("Enter customer name or number")
amount = MSVB.Interaction.InputBox("Enter transaction amount")
Try
accountNum = CInt(customer)
Call post(accountNum, amount)
Catch
Call post(customer, amount)
End Try

Vea también
Tareas
Cómo: Definir varias versiones de un procedimiento
Cómo: Llamar a un procedimiento sobrecargado
Cómo: Sobrecargar un procedimiento que toma parámetros opcionales
Cómo: Sobrecargar un procedimiento que toma un número indefinido de parámetros
Referencia
Overloads
Conceptos
Procedimientos en Visual Basic
Consideraciones sobre la sobrecarga de procedimientos
Resolución de sobrecargas
Tipos genéricos en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Definir varias versiones de un procedimiento


Puede definir un procedimiento en varias versiones sobrecargándolo, es decir, utilizando el mismo nombre pero una lista de
parámetros diferente para cada versión. El propósito de sobrecargar un procedimiento es definir varias versiones de un
procedimiento estrechamente relacionadas sin tener que distinguirlas por su nombre.
Para obtener más información, vea Sobrecarga de procedimientos.
Para definir varias versiones de un procedimiento
1. Escriba una instrucción de declaración Sub o Function para cada versión del procedimiento que desea definir. Utilice el
mismo nombre de procedimiento en cada declaración.
2. Anteponga la palabra clave Sub o Function en cada declaración con la palabra clave Overloads. Si lo desea, puede omitir
Overloads en las declaraciones, pero si incluye esta palabra clave en alguna declaración, deberá incluirla en todas.
3. Después de cada instrucción de declaración, escriba el código de procedimiento para que controle el caso concreto en el
que el código de llamada proporciona argumentos que coinciden con la lista de parámetros de esa versión. No es
necesario que compruebe los parámetros que ha proporcionado el código de llamada. Visual Basic transfiere el control a
la versión correspondiente de su procedimiento.
4. Finalice cada versión del procedimiento con la instrucción End Sub o End Function
Ejemplo
En el ejemplo siguiente se define un procedimiento Sub que contabiliza una transacción en el balance de un cliente. El
procedimiento utiliza la palabra clave Overloads para definir dos versiones del procedimiento, una que acepta al cliente por
nombre y otra que lo acepta por número de cuenta.
VB
Overloads Sub post(ByVal custName As String, ByVal amount As Single)
' Insert code to access customer record by customer name.
End Sub
Overloads Sub post(ByVal custAcct As Integer, ByVal amount As Single)
' Insert code to access customer record by account number.
End Sub

El código de llamada puede obtener la identificación del cliente como una String o como un Integer, pero a continuación
utiliza la misma instrucción de llamada en los dos casos.
Para obtener información sobre cómo llamar a estas versiones del procedimiento post, vea
Cómo: Llamar a un procedimiento sobrecargado.
Compilar el código
Asegúrese de que cada una de las versiones sobrecargadas tiene el mismo nombre de procedimiento pero una lista de
parámetros diferente.
Vea también
Tareas
Procedimientos de solución de problemas
Cómo: Sobrecargar un procedimiento que toma parámetros opcionales
Cómo: Sobrecargar un procedimiento que toma un número indefinido de parámetros
Conceptos
Procedimientos en Visual Basic
Argumentos y parámetros de procedimiento
Consideraciones sobre la sobrecarga de procedimientos
Resolución de sobrecargas
Conceptos del lenguaje Visual Basic

Cómo: Llamar a un procedimiento sobrecargado


La ventaja de sobrecargar un procedimiento radica en la flexibilidad de la llamada. El código de llamada puede obtener la
información que necesita pasar al procedimiento y llamar después a un único nombre de procedimiento, independientemente
de los argumentos que pase.
Para llamar a un procedimiento que tiene más que una versión definida
1. En el código de llamada, determine qué datos va a pasar al procedimiento.
2. Escriba la llamada a procedimiento de la manera normal y presente los datos en la lista de argumentos. Asegúrese de
que los argumentos coincidan con la lista de parámetros en una de las versiones definidas para el procedimiento.
3. No tiene que determinar a qué versión del procedimiento debe llamar. Visual Basic pasa el control a la versión que
coincida con la lista de argumentos.
El ejemplo siguiente llama al procedimiento post declarado en Cómo: Definir varias versiones de un procedimiento.
Obtiene la identificación del cliente, determina si es String o Integer, y a continuación llama en cualquier caso al mismo
procedimiento.
VB
Imports MSVB = Microsoft.VisualBasic

VB
Dim customer As String
Dim accountNum As Integer
Dim amount As Single
customer = MSVB.Interaction.InputBox("Enter customer name or number")
amount = MSVB.Interaction.InputBox("Enter transaction amount")
Try
accountNum = CInt(customer)
Call post(accountNum, amount)
Catch
Call post(customer, amount)
End Try

Vea también
Tareas
Procedimientos de solución de problemas
Cómo: Definir varias versiones de un procedimiento
Cómo: Sobrecargar un procedimiento que toma parámetros opcionales
Cómo: Sobrecargar un procedimiento que toma un número indefinido de parámetros
Referencia
Overloads
Conceptos
Procedimientos en Visual Basic
Argumentos y parámetros de procedimiento
Sobrecarga de procedimientos
Consideraciones sobre la sobrecarga de procedimientos
Resolución de sobrecargas
Conceptos del lenguaje Visual Basic

Cómo: Sobrecargar un procedimiento que toma parámetros


opcionales
Si un procedimiento tiene uno o varios parámetros Optional (Visual Basic), no se puede definir ninguna versión sobrecargada
que se corresponda con alguna de sus sobrecargas implícitas. Para obtener más información, vea "Sobrecargas implícitas para
parámetros opcionales" en Consideraciones sobre la sobrecarga de procedimientos.
Un parámetro opcional
Para sobrecargar un procedimiento que toma un parámetro opcional
1. Escriba una instrucción de declaración Sub o Function que incluya el parámetro opcional en la lista de parámetros. No
utilice la palabra clave Optional en esta versión sobrecargada.
2. Anteponga la palabra clave Overloads a la palabra clave Sub o Function.
3. Escriba el código de procedimiento que debería ejecutarse cuando el código de llamada proporcione el argumento
opcional.
4. Finalice el procedimiento con la instrucción End Sub o End Function, según corresponda.
5. Escriba una segunda instrucción de declaración que sea idéntica a la primera salvo porque no debe incluir el parámetro
opcional en la lista de parámetros.
6. Escriba el código de procedimiento que debería ejecutarse cuando el código de llamada no proporcione el argumento
opcional. Finalice el procedimiento con la instrucción End Sub o End Function, según corresponda.
En el ejemplo siguiente se muestra un procedimiento definido con un parámetro opcional, un conjunto equivalente de
dos procedimientos sobrecargados y, por último, ejemplos de versiones sobrecargadas válidas y no válidas.
VB
Sub q(ByVal b As Byte, Optional ByVal j As Long = 6)

VB
' The preceding definition is equivalent to the following two overloads.
' Overloads Sub q(ByVal b As Byte)
' Overloads Sub q(ByVal b As Byte, ByVal j As Long)

VB
' Therefore, the following overload is not valid because the signature is already in u
se.
' Overloads Sub q(ByVal c As Byte, ByVal k As Long)
' The following overload uses a different signature and is valid.
Overloads Sub q(ByVal b As Byte, ByVal j As Long, ByVal s As Single)

Varios parámetros opcionales


En un procedimiento con varios parámetros opcionales, normalmente son necesarias más de dos versiones sobrecargadas. Por
ejemplo, si hay dos parámetros opcionales y el código de llamada puede proporcionar u omitir cada uno de ellos con
independencia del otro, serán necesarias cuatro versiones sobrecargadas, una por cada combinación posible de los
argumentos proporcionados.
Como el número de parámetros opcionales aumenta, también se incrementa la complejidad de la sobrecarga. A menos que
algunas combinaciones de los argumentos proporcionados no sean aceptables, para N parámetros opcionales necesitará 2 ^
N versiones sobrecargadas. Dependiendo de la naturaleza del procedimiento, quizás considere que la claridad de la lógica
podría justificar el esfuerzo adicional que supone definir todas las versiones sobrecargadas.
Para sobrecargar un procedimiento que toma varios parámetros opcionales
1. Determine qué combinaciones de los argumentos opcionales proporcionados son aceptables en la lógica del
procedimiento. Podría generarse una combinación inaceptable si un parámetro opcional dependiera de otro. Por
ejemplo, si un parámetro acepta el nombre del cónyuge y otro acepta la edad del cónyuge, una combinación de
argumentos que proporcione la edad pero omita el nombre sería inaceptable.
2. Para cada combinación aceptable de los argumentos opcionales proporcionados, escriba una instrucción de declaración
Sub o Function que defina la lista de parámetros correspondiente. No utilice la palabra clave Optional.
3. En cada declaración, anteponga la palabra clave Overloads a la palabra clave Sub o Function.
4. Después de cada declaración, escriba el código del procedimiento que debería ejecutarse cuando el código de llamada
proporcione una lista de argumentos que se corresponda con la lista de parámetros de esa declaración.
5. Finalice todos los procedimientos con la instrucción End Sub o End Function, según corresponda.
Vea también
Tareas
Procedimientos de solución de problemas
Cómo: Definir varias versiones de un procedimiento
Cómo: Llamar a un procedimiento sobrecargado
Cómo: Sobrecargar un procedimiento que toma un número indefinido de parámetros
Conceptos
Procedimientos en Visual Basic
Argumentos y parámetros de procedimiento
Parámetros opcionales
Matrices de parámetros
Sobrecarga de procedimientos
Resolución de sobrecargas
Conceptos del lenguaje Visual Basic

Cómo: Sobrecargar un procedimiento que toma un número


indefinido de parámetros
Si un procedimiento tiene un parámetro ParamArray, no se puede definir una versión sobrecargada que tome una matriz
unidimensional para la matriz de parámetros. Para obtener más información, vea "Sobrecargas implícitas de un parámetro
ParamArray" en Consideraciones sobre la sobrecarga de procedimientos.
Para sobrecargar un procedimiento que toma un número variable de parámetros
1. Determine si para el procedimiento y el código de llamada resulta más ventajoso utilizar versiones sobrecargadas que
utilizar un parámetro ParamArray. Vea "Sobrecargas y matrices de parámetros" en
Consideraciones sobre la sobrecarga de procedimientos.
2. Determine qué número de valores proporcionados debe aceptar el procedimiento en la parte variable de la lista de
parámetros. Podría tratarse de ningún valor y de una matriz unidimensional.
3. Para cada combinación aceptable de valores proporcionados, escriba una instrucción de declaración Sub o Function que
defina la lista de parámetros correspondiente. No utilice la palabra clave Optional ni ParamArray en esta versión
sobrecargada.
4. En cada declaración, anteponga la palabra clave Overloads a la palabra clave Sub o Function.
5. Después de cada declaración, escriba el código del procedimiento que debería ejecutarse cuando el código de llamada
proporcione los valores correspondientes a la lista de parámetros de esa declaración.
6. Finalice todos los procedimientos con la instrucción End Sub o End Function, según corresponda.
Ejemplo
En el ejemplo siguiente se muestra un procedimiento definido con un parámetro ParamArray y a continuación se muestra una
definición equivalente con procedimientos sobrecargados.
VB
Sub p(ByVal d As Date, ByVal ParamArray c() As Char)

VB
' The preceding definition is equivalent to the following overloads.
' Overloads Sub p(ByVal d As Date)
' Overloads Sub p(ByVal d As Date, ByVal c() As Char)
' Overloads Sub p(ByVal d As Date, ByVal c1 As Char)
' Overloads Sub p(ByVal d As Date, ByVal c1 As Char, ByVal c2 As Char)
' And so on, with an additional Char argument in each successive overload.

No puede sobrecargar este tipo de procedimiento con una lista de parámetros que tome una matriz unidimensional para la
matriz de parámetros. Sin embargo, puede utilizar las firmas de las otras sobrecarga implícitas. Las siguientes declaraciones
ilustran este comportamiento:
VB
' The following overload is not valid because it takes an array for the parameter array.
' Overloads Sub p(ByVal x As Date, ByVal y() As Char)
' The following overload takes a single value for the parameter array and is valid.
Overloads Sub p(ByVal z As Date, ByVal w As Char)

En las versiones sobrecargadas, el código no tiene que comprobar si el código de llamada proporciona uno o varios valores
para el parámetro ParamArray , pero si lo hace, no tiene que comprobar cuántos valores proporciona. Visual Basic transfiere
el control a la versión correspondiente a la lista de argumentos de llamada.
Compilar el código
Como un procedimiento con un parámetro ParamArray es equivalente a un conjunto de versiones sobrecargadas, no puede
sobrecargar un procedimiento de este tipo con una lista de parámetros que se corresponda con alguna de estas sobrecargas
implícitas. Para obtener más información, vea Consideraciones sobre la sobrecarga de procedimientos.
Seguridad
Si se trabaja con matrices cuyo tamaño es excesivamente grande, existe el riesgo de sobrecargar alguna capacidad interna de
la aplicación. Si acepta una matriz de parámetros, debe comprobar la longitud de la matriz que transfiere el código de llamada
y tomar las medidas apropiadas si es demasiado grande para la aplicación.
Vea también
Tareas
Procedimientos de solución de problemas
Cómo: Definir varias versiones de un procedimiento
Cómo: Llamar a un procedimiento sobrecargado
Cómo: Sobrecargar un procedimiento que toma parámetros opcionales
Conceptos
Procedimientos en Visual Basic
Argumentos y parámetros de procedimiento
Parámetros opcionales
Matrices de parámetros
Sobrecarga de procedimientos
Resolución de sobrecargas
Conceptos del lenguaje Visual Basic

Consideraciones sobre la sobrecarga de procedimientos


Cuando se sobrecarga un procedimiento, debe utilizarse una firma diferente en cada versión sobrecargada. Normalmente esto
significa que cada versión debe especificar una lista de parámetros diferente. Para obtener más información, vea "Firmas
diferentes" en Sobrecarga de procedimientos.
Se puede sobrecargar un procedimiento Function con un procedimiento Sub, y viceversa, a condición de que sus firmas sean
diferentes. Dos sobrecargas no pueden diferir únicamente en que una tenga un valor devuelto y la otra no.
Se puede sobrecargar una propiedad del mismo modo que se sobrecarga un procedimiento, pero también con las mismas
restricciones. Sin embargo, no se puede sobrecargar un procedimiento con una propiedad, o viceversa.
Alternativas a las versiones sobrecargadas
A veces existen alternativas a las versiones sobrecargadas, es especial cuando la presencia de argumentos es opcional o su
número es variable.
Tenga presente que los argumentos opcionales no se admiten necesariamente en todos los lenguajes y que las matrices de
parámetros están limitadas a Visual Basic. Si se está escribiendo un procedimiento y es probable que un código escrito en
diferentes lenguajes llame a este procedimiento, las versiones sobrecargadas ofrecen la mayor flexibilidad.
Sobrecargas y argumentos opcionales
Cuando el código de llamada puede proporcionar u omitir uno o varios argumentos, se pueden definir varias versiones
sobrecargadas o utilizar parámetros opcionales.
Cuándo utilizar versiones sobrecargadas
Puede considerar la posibilidad de definir una serie de versiones sobrecargadas en los casos siguientes:
La lógica del código del procedimiento difiere significativamente en función de si el código de llamada proporciona o no
un argumento opcional.
El código del procedimiento no puede probar con seguridad si el código de llamada ha proporcionado un argumento
opcional. Esto ocurre, por ejemplo, si no se puede esperar que el código de llamada proporcione un candidato posible a
un valor predeterminado.
Cuándo utilizar parámetros opcionales
Es posible que prefiera utilizar uno o varios parámetros opcionales en los siguientes casos:
La única acción necesaria cuando el código de llamada no proporciona un argumento opcional es establecer el
parámetro en un valor predeterminado. En una situación como esta, el código del procedimiento puede resultar menos
complicado si se define una única versión con uno o varios parámetros Optional.
Para obtener más información, vea Parámetros opcionales.
Sobrecargas y ParamArrays
Cuando el código de llamada puede pasar un número variable de argumentos, puede definir varias versiones sobrecargadas o
utilizar una matriz de parámetros.
Cuándo utilizar versiones sobrecargadas
Puede considerar la posibilidad de definir una serie de versiones sobrecargadas en los casos siguientes:
Sabe que el código de llamada nunca pasa más que un pequeño número de valores a la matriz de parámetros.
La lógica del código del procedimiento difiere significativamente en función de la cantidad de valores que transfiere el
código de llamada.
El código de llamada puede pasar valores de tipos de datos diferentes.
Cuándo utilizar una matriz de parámetros
Conviene utilizar un parámetro ParamArray en los casos siguientes:
No se puede predecir cuántos valores puede pasar el código de llamada a la matriz de parámetros, y puede tratarse de
un número elevado.
La lógica del procedimiento se presta a recorrer en iteración todos los valores que transfiere el código de llamada,
efectuando fundamentalmente las mismas operaciones en cada valor.
Para obtener más información, vea Matrices de parámetros.
Sobrecargas implícitas de parámetros opcionales
Un procedimiento con un parámetro Optional (Visual Basic) equivale a dos procedimientos sobrecargados, uno con el
parámetro opcional y otro sin él. No puede sobrecargar este tipo de procedimiento con una lista de parámetros que se
corresponda con cualquiera de ellos. Las siguientes declaraciones ilustran este comportamiento:
VB
Overloads Sub q(ByVal b As Byte, Optional ByVal j As Long = 6)

VB
' The preceding definition is equivalent to the following two overloads.
' Overloads Sub q(ByVal b As Byte)
' Overloads Sub q(ByVal b As Byte, ByVal j As Long)

VB
' Therefore, the following overload is not valid because the signature is already in use.
' Overloads Sub q(ByVal c As Byte, ByVal k As Long)
' The following overload uses a different signature and is valid.
Overloads Sub q(ByVal b As Byte, ByVal j As Long, ByVal s As Single)

Existe un conjunto de sobrecargas implícitas para un procedimiento con varios argumentos opcionales, a las que se llega por
una lógica similar a la del ejemplo anterior.
Sobrecargas implícitas de un parámetro ParamArray
El compilador considera que un procedimiento con un parámetro ParamArray tiene un número infinito de sobrecargas, que se
diferencian entre sí por la información que el código de llamada pasa a la matriz de parámetros, como se muestra a
continuación:
Una sobrecarga cuando el código de llamada no proporciona ningún argumento a ParamArray
Una sobrecarga cuando el código de llamada proporciona una matriz unidimensional del tipo de elemento ParamArray
Para cada entero positivo, una sobrecarga cuando el código de llamada pasa ese número de argumentos, todos del tipo
de elemento ParamArray
Las siguientes declaraciones ilustran estas sobrecargas implícitas:
VB
Overloads Sub p(ByVal d As Date, ByVal ParamArray c() As Char)

VB
' The preceding definition is equivalent to the following overloads.
' Overloads Sub p(ByVal d As Date)
' Overloads Sub p(ByVal d As Date, ByVal c() As Char)
' Overloads Sub p(ByVal d As Date, ByVal c1 As Char)
' Overloads Sub p(ByVal d As Date, ByVal c1 As Char, ByVal c2 As Char)
' And so on, with an additional Char argument in each successive overload.

No puede sobrecargar este tipo de procedimiento con una lista de parámetros que tome una matriz unidimensional para la
matriz de parámetros. Sin embargo, puede utilizar las firmas de las otras sobrecarga implícitas. Las siguientes declaraciones
ilustran este comportamiento:
VB
' The following overload is not valid because it takes an array for the parameter array.
' Overloads Sub p(ByVal x As Date, ByVal y() As Char)
' The following overload takes a single value for the parameter array and is valid.
Overloads Sub p(ByVal z As Date, ByVal w As Char)

Programación sin tipos como alternativa a la sobrecarga


Si desea permitir que el código de llamada transfiera tipos de datos diferentes a un parámetro, un enfoque alternativo es
Programación sin tipos en Visual Basic. Puede establecer el modificador de comprobación de tipo en Off con la opción del
compilador Option Strict (Instrucción) u /optionstrict. No tiene que declarar después el tipo de datos del parámetro. No
obstante, este planteamiento presenta estas desventajas en comparación con la sobrecarga:
La programación sin tipos hace que la ejecución del código sea menos eficiente.
El procedimiento debe comprobar todos los tipos de datos que anticipe que se le van a pasar.
El compilador no puede indicar que se ha producido un error si el código de llamada pasa un tipo de datos que el
procedimiento no admite.

Vea también
Tareas
Procedimientos de solución de problemas
Cómo: Definir varias versiones de un procedimiento
Cómo: Llamar a un procedimiento sobrecargado
Cómo: Sobrecargar un procedimiento que toma parámetros opcionales
Cómo: Sobrecargar un procedimiento que toma un número indefinido de parámetros
Referencia
Overloads
Conceptos
Procedimientos en Visual Basic
Argumentos y parámetros de procedimiento
Resolución de sobrecargas
Conceptos del lenguaje Visual Basic

Resolución de sobrecargas
Cuando el compilador de Visual Basic encuentra una llamada a un procedimiento que está definido en varias versiones
sobrecargadas, debe decidir a qué sobrecarga tiene que llamar. Para ello, sigue estos pasos:
1. Accesibilidad. Elimina cualquier sobrecarga con un nivel de acceso que impida que el código de llamada pueda
invocarla.
2. Número de parámetros. Elimina cualquier sobrecarga que defina un número de parámetros que no coincida con los
que se suministran en la llamada.
3. Tipos de datos de parámetros. Elimina cualquier sobrecarga en la que los tipos de datos de los argumentos de
llamada no se puedan convertir a los tipos definidos en la sobrecarga.
4. Conversiones de restricción. Elimina cualquier sobrecarga que requiera una conversión de restricción de los tipos de
argumentos de llamada a los tipos de parámetros definidos. Esto se aplica si el modificador de comprobación de tipo
(Option Strict (Instrucción)) es On u Off.
5. Ampliación mínima. Considera las sobrecargas restantes en parejas. En cada pareja, compara los tipos de datos de los
parámetros definidos. Si los tipos de una de las sobrecargas se amplían a los tipos correspondientes de la otra, el
compilador elimina la última. Es decir, conserva la sobrecarga que necesite la menor cantidad de ampliación.
6. Candidata única. Continúa considerando las sobrecargas por partes hasta que sólo quede una y resuelve la llamada en
esa sobrecarga. Si el compilador no puede reducir las sobrecargas a una sola candidata, genera un error.
La ilustración siguiente muestra el proceso que determina a qué conjunto de versiones sobrecargadas se va a llamar.
Resolver entre versiones sobrecargadas

Este proceso de resolución de las sobrecargas se ilustra en el siguiente ejemplo:


VB
Overloads Sub z(ByVal x As Byte, ByVal y As Double)
End Sub
Overloads Sub z(ByVal x As Short, ByVal y As Single)
End Sub
Overloads Sub z(ByVal x As Integer, ByVal y As Single)
End Sub

VB
Dim r, s As Short
Call z(r, s)
Dim p As Byte, q As Short
' The following statement causes an overload resolution error.
Call z(p, q)

En la primera llamada, el compilador elimina la primera sobrecarga porque el tipo del primer argumento (Short) se restringe
al tipo del parámetro correspondiente (Byte). A continuación, elimina la tercera sobrecarga porque cada tipo de argumento de
la segunda sobrecarga (Short y Single) se amplía al tipo correspondiente a la tercera sobrecarga (Integer y Single). La
segunda sobrecarga requiere una ampliación menor, y por eso el compilador la utiliza en la llamada.
En la segunda llamada, el compilador no puede eliminar ninguna sobrecarga teniendo en cuenta la restricción. Elimina la
tercera sobrecarga por el mismo motivo por el que la eliminó en la primera llamada, porque puede llamar a la segunda
sobrecarga con una ampliación menor de los tipos de argumentos. Sin embargo, el compilador no puede decidirse entre la
primera y la segunda sobrecarga. Cada una de ellas tiene un tipo de parámetro definido que se amplía al tipo correspondiente
de la otra (Byte a Short, pero Single a Double). Por lo tanto, el compilador genera un error de resolución de sobrecarga.
Argumentos opcionales sobrecargados y ParamArray
Si dos sobrecargas de un procedimiento tienen firmas idénticas excepto en que el último argumento se declara
Optional (Visual Basic) en una sobrecarga y ParamArray en la otra, el compilador resuelve la llamada a dicho procedimiento de
la manera siguiente:
Si la llamada suministra el último argumen El compilador resuelve la llamada a la sobrecarga declarando el último
to como argumento como
Ningún valor (argumento omitido) Optional

Un valor único Optional

Dos o más valores en una lista separada por co ParamArray


mas

Una matriz de cualquier longitud (incluida una ParamArray


matriz vacía)

Vea también
Tareas
Procedimientos de solución de problemas
Cómo: Definir varias versiones de un procedimiento
Cómo: Llamar a un procedimiento sobrecargado
Cómo: Sobrecargar un procedimiento que toma parámetros opcionales
Cómo: Sobrecargar un procedimiento que toma un número indefinido de parámetros
Referencia
Overloads
Conceptos
Parámetros opcionales
Matrices de parámetros
Sobrecarga de procedimientos
Consideraciones sobre la sobrecarga de procedimientos
Conceptos del lenguaje Visual Basic

Procedimientos de solución de problemas


Esta página muestra algunos problemas comunes que pueden aparecer al trabajar con procedimientos.
Devolver una matriz de tipo desde un procedimiento de función
Si un procedimiento Function devuelve un tipo de datos de matriz, no puede utilizar el nombre Function para almacenar
valores en los elementos de la matriz. Si se intenta hacerlo, el compilador lo interpreta como una llamada a la función
Function. En el siguiente ejemplo se generan errores de compilador.
Function allOnes(ByVal n As Integer) As Integer()
For i As Integer = 1 To n - 1
' The following statement generates a COMPILER ERROR .
allOnes(i) = 1
Next i
' The following statement generates a COMPILER ERROR .
Return allOnes()
End Function

La instrucción allOnes(i) = 1 genera un error de compilador porque llama a allOnes con un argumento de tipo de datos
erróneo (un objeto singleton Integer en lugar de una matriz Integer). La instrucción Return allOnes() genera un error de
compilador porque llama a allOnes sin argumento.
Enfoque correcto: para poder modificar los elementos de una matriz que se debe devolver, defina una matriz interna como
variable local. En el siguiente ejemplo se compila sin errores.
VB
Function allOnes(ByVal n As Integer) As Integer()
Dim i As Integer, iArray(n) As Integer
For i = 0 To n - 1
iArray(i) = 1
Next i
Return iArray
End Function

Argumento no modificado por una llamada a procedimiento


Si intenta permitir a un procedimiento que cambie un elemento de programación subyacente a un argumento en el código de
llamada, debe pasarlo por referencia. No obstante, un procedimiento puede tener acceso a los elementos de un argumento de
tipo de referencia aun cuando se pase por valor.
Variable subyacente Para permitir al procedimiento reemplazar el valor del propio elemento variable subyacente, el
procedimiento debe declarar el parámetro ByRef. El código de llamada no debe incluir tampoco el argumento entre
paréntesis, porque eso reemplazaría el mecanismo para pasar argumentos ByRef.
Elementos de tipo de referencia. Si declara un parámetro ByVal, el procedimiento no puede modificar el propio
elemento variable subyacente. No obstante, si el argumento es un tipo de referencia, el procedimiento puede modificar
los miembros del objeto al que señala, aunque no puede reemplazar el valor de la variable. Por ejemplo, si el argumento
es una variable de matriz, el procedimiento no puede asignarle otra matriz, pero sí puede cambiar uno o varios de sus
elementos. La modificación de los elementos queda reflejada en la variable de matriz subyacente al código de llamada.
En el siguiente ejemplo se definen dos procedimientos que aceptan una variable de matriz por valor y operan con sus
elementos. El procedimiento increase suma sencillamente una unidad a cada elemento. El procedimiento replace asigna una
nueva matriz al parámetro a() y, a continuación, agrega una unidad a cada elemento. La reasignación, sin embargo, no afecta a
la variable de matriz subyacente al código de llamada porque a() se declara ByVal.
VB
Public Sub increase(ByVal a() As Long)
For j As Integer = 0 To UBound(a)
a(j) = a(j) + 1
Next j
End Sub

VB
Public Sub replace(ByVal a() As Long)
Dim k() As Long = {100, 200, 300}
a = k
For j As Integer = 0 To UBound(a)
a(j) = a(j) + 1
Next j
End Sub

En el ejemplo siguiente se realizan llamadas a increase y replace.


VB
Dim n() As Long = {10, 20, 30, 40}
Call increase(n)
MsgBox("After increase(n): " & CStr(n(0)) & ", " & _
CStr(n(1)) & ", " & CStr(n(2)) & ", " & CStr(n(3)))
Call replace(n)
MsgBox("After replace(n): " & CStr(n(0)) & ", " & _
CStr(n(1)) & ", " & CStr(n(2)) & ", " & CStr(n(3)))

La primera llamada MsgBox muestra "After increase(n): 11, 21, 31, 41". Como n es un tipo de referencia, increase puede
cambiar sus miembros, aunque se pase ByVal.
La segunda llamada MsgBox muestra "After replace(n): 11, 21, 31, 41". Como n se pasa ByVal, replace no puede modificar la
variable n asignándole una nueva matriz. Cuando replace crea una nueva instancia de matriz k y la asigna a la variable local a,
pierde la referencia a n que le ha pasado el código de llamada. Cuando incrementa los miembros de a, esto sólo afecta a la
matriz local k.
Enfoque correcto: para poder modificar un elemento variable subyacente en sí, páselo por referencia. En el ejemplo siguiente
se muestra el cambio en la declaración de replace que permite reemplazar una matriz por otra en el código de llamada.
VB
Public Sub replace(ByRef a() As Long)

No se puede definir una sobrecarga


Si desea definir una versión sobrecargada de un procedimiento, debe utilizar el mismo nombre pero con una firma diferente.
Si el compilador no puede diferenciar su declaración de una sobrecarga con la misma firma, genera un error.
El nombre de procedimiento y la lista de parámetros determinan la firma de un procedimiento. Cada sobrecarga debe tener el
mismo nombre que todas las demás sobrecargas pero debe diferenciarse de todas ellas en al menos uno de los componentes
de la firma. Para obtener más información, vea Sobrecarga de procedimientos.
Los elementos siguientes, aunque pertenecen a la lista de parámetros, no son componentes de la firma de un procedimiento:
Palabras clave que modifican a los procedimientos, como Public, Shared y Static
Nombres de parámetros
Palabras clave de modificadores de parámetros, como ByRef y Optional
Tipo de datos del valor devuelto (excepto para un operador de conversión)
No es posible sobrecargar un procedimiento cambiando únicamente uno o varios de los elementos anteriores:
Enfoque correcto: para poder definir una sobrecarga de procedimiento, debe variar la firma. Como debe utilizar el mismo
nombre, debe variar el número, orden o tipos de datos de los parámetros. En un procedimiento genérico, puede variar el
número de parámetros de tipo. En un operador de conversión (CType (Función)), puede variar el tipo de valor devuelto.
Resolución de sobrecarga con argumentos Optional y ParamArray
Si sobrecarga un procedimiento con uno o varios parámetros Optional (Visual Basic) o un parámetro ParamArray, debe evitar
duplicar las sobrecargas implícitas. Para obtener más información, vea
Consideraciones sobre la sobrecarga de procedimientos.
Llamar a una versión incorrecta de un procedimiento sobrecargado
Si un procedimiento tiene varias versiones sobrecargadas, debe estar familiarizado con todas las listas de parámetros y
comprender cómo resuelve Visual Basic las llamadas entre las sobrecargas. De lo contrario podría llamar a una sobrecarga
distinta de la que desea.
Cuando haya determinado a qué sobrecarga desea llamar, observe cuidadosamente las reglas siguientes:
Proporcione el número correcto de argumentos y en el orden correcto.
Lo ideal es que sus argumentos tengan los mismos tipos de datos exactos que los parámetros correspondientes. En
cualquier caso, el tipo de datos de cada argumento debe ampliarse al de su parámetro correspondiente. Esto es verdad
incluso con Option Strict (Instrucción) establecido en Off. Si una sobrecarga requiere cualquier conversión de restricción
de la lista de argumentos, no se debe llamar a esta sobrecarga.
Si proporciona argumentos que requieren ampliación, haga que sus tipos de datos se acerquen lo más posible a los tipos
de datos de los parámetros correspondientes. Si dos o más sobrecargas aceptan los tipos de datos de argumentos, el
compilador resuelve la llamada con la sobrecarga que solicita la menor cantidad de ampliación.
Puede reducir las posibilidades de que aparezcan discordancias del tipo de datos mediante la palabra clave de conversión
CType (Función) cuando prepara los argumentos.
Error de resolución de sobrecarga
Cuando llama a un procedimiento sobrecargado, el compilador intenta eliminar todas menos una de las sobrecargas. Si lo
consigue, resuelve la llamada con esa sobrecarga. Si elimina todas las sobrecargas o si no puede reducir las sobrecargas
seleccionables a un candidato único, genera un error.
Este proceso de resolución de las sobrecargas se ilustra en el siguiente ejemplo:
VB
Overloads Sub z(ByVal x As Byte, ByVal y As Double)
End Sub
Overloads Sub z(ByVal x As Short, ByVal y As Single)
End Sub
Overloads Sub z(ByVal x As Integer, ByVal y As Single)
End Sub

VB
Dim r, s As Short
Call z(r, s)
Dim p As Byte, q As Short
' The following statement causes an overload resolution error.
Call z(p, q)

En la primera llamada, el compilador elimina la primera sobrecarga porque el tipo del primer argumento (Short) se restringe
al tipo del parámetro correspondiente (Byte). Luego elimina la tercera sobrecarga porque cada tipo de argumento de la
segunda sobrecarga (Short y Single) se amplía al tipo correspondiente de la tercera sobrecarga (Integer y Single). La
segunda sobrecarga requiere una ampliación menor, por lo que el compilador la utiliza para la llamada.
En la segunda llamada, el compilador no puede eliminar ninguna de las sobrecargas sobre la base de la restricción. Elimina la
tercera sobrecarga por el mismo motivo que en la primera llamada ya que puede llamar a la segunda sobrecarga con una
ampliación menor de los tipos de argumentos. No obstante, el compilador no puede resolver entre la primera y la segunda
sobrecarga. Cada una tiene un tipo de parámetro definido que se amplía al tipo correspondiente en la otra (de Byte a Short,
pero de Single a Double). Por lo tanto, el compilador genera un error de resolución de sobrecarga.
Enfoque correcto: para poder llamar a un procedimiento sobrecargado sin ambigüedad, utilice CType (Función) para que los
tipos de datos de argumentos coincidan con los tipos de parámetros. En el ejemplo siguiente se muestra una llamada a z que
fuerza a la resolución a la segunda sobrecarga.
VB
Call z(CType(p, Short), CType(q, Single))

Resolución de sobrecarga con argumentos Optional y ParamArray


Si dos sobrecargas de un procedimiento tienen las mismas firmas excepto que el último parámetro está declarado
Optional (Visual Basic) en una y ParamArray en la otra, el compilador resuelve una llamada a ese procedimiento según la
coincidencia más próxima. Para obtener más información, vea Resolución de sobrecargas.
Vea también
Conceptos
Procedimientos en Visual Basic
Procedimientos Sub
Procedimientos Function
Procedimientos de propiedad
Procedimientos de operador
Argumentos y parámetros de procedimiento
Sobrecarga de procedimientos
Consideraciones sobre la sobrecarga de procedimientos
Resolución de sobrecargas
Conceptos del lenguaje Visual Basic

Flujo de control en Visual Basic


Si se deja libre, un programa avanza por sus instrucciones de principio a fin. Algunos programas muy simples pueden
escribirse sólo con este flujo unidireccional. No obstante, la mayor eficacia y utilidad de cualquier lenguaje de programación se
deriva de la posibilidad de cambiar el orden de ejecución con instrucciones de control y bucles.
Las estructuras de control permiten regular el flujo de ejecución de un programa. Utilizando estructuras de control, puede
escribir código de Visual Basic que tome decisiones o repita acciones. Otras estructuras de control le permiten garantizar la
eliminación de un recurso o ejecutar una serie de instrucciones en la misma referencia a objeto.
En esta sección
Estructuras de decisión
Describe estructuras de control utilizadas para la bifurcación.
Estructuras de bucles
Explica estructuras de control utilizadas para repetir procesos.
Estructuras de control adicionales
Describe estructuras de control utilizadas para la eliminación de recursos y acceso a objetos.
Estructuras de control anidadas
Cubre las estructuras de control situadas dentro de otras estructuras de control.
Cómo: Transferir el control fuera de una estructura de control
Resume cómo transferir el control directamente fuera de una estructura de control.
Secciones relacionadas
Instrucción de control para usuarios de Visual Basic 6.0
Enumera los cambios efectuados en el comportamiento y la sintaxis de estructuras de control de las versiones anteriores de
Visual Basic.
Resumen de flujo de control
Proporciona vínculos a páginas de referencia del lenguaje sobre este asunto.
Conceptos del lenguaje Visual Basic

Estructuras de decisión
Visual Basic permite probar condiciones y realizar diferentes operaciones en función de los resultados de la prueba. Puede
comprobar si una condición es verdadera o falsa, los distintos valores de una expresión o las diferentes excepciones que se
generan al ejecutar una serie de instrucciones.
En el siguiente ejemplo se muestra una estructura de decisión que prueba si el valor de una condición es true y emprende
distintas acciones en función del resultado.
Emprender acciones diferentes cuando el valor de una condición es true y cuando es false

Construcción If...Then...Else
Las construcciones If...Then...Else le permiten probar una o más condiciones y ejecutar una o más instrucciones en función de
cada condición. Puede probar las condiciones y tomar medidas de las maneras siguientes:
Ejecutar una o más instrucciones si una condición es True.
Ejecutar una o más instrucciones si una condición es False.
Ejecutar algunas instrucciones si una condición es True y otras si es False.
Probar una condición adicional si una condición anterior es False.
La estructura de control que proporciona todas estas posibilidades es Instrucción If...Then...Else (Visual Basic). Puede utilizar una
versión de una línea si tiene simplemente una comprobación y una instrucción para ejecutar. Si tiene un conjunto más
complejo de condiciones y acciones, puede utilizar la versión de varias líneas.
Construcción Select...Case
La construcción Select...Case le permite evaluar una expresión una vez y ejecutar distintos conjuntos de instrucciones basados
en valores posibles diferentes. Para obtener más información, consulte Instrucción Select...Case (Visual Basic).
Construcción Try...Catch...Finally
Las construcciones Try...Catch...Finally le permiten ejecutar un conjunto de instrucciones en un entorno que conserva el
control si cualquiera de las instrucciones provoca una excepción. Puede tomar distintas medidas para excepciones diferentes.
Puede especificar opcionalmente un bloque de código, es decir, que se ejecuta antes de salir de toda la construcción
Try...Catch...Finally, independientemente de lo que suceda. Para obtener más información, consulte
Instrucción Try...Catch...Finally (Visual Basic).
Vea también
Tareas
Cómo: Transferir el control fuera de una estructura de control
Cómo: Ejecutar instrucciones en función de una o varias condiciones
Cómo: Probar varios valores de una expresión
Cómo: Mantener el control cuando se produce un error
Conceptos
Estructuras de bucles
Estructuras de control adicionales
Estructuras de control anidadas
Otros recursos
Flujo de control en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Ejecutar instrucciones en función de una o varias


condiciones
Puede utilizar Instrucción If...Then...Else (Visual Basic) para ejecutar una instrucción específica o un bloque de instrucciones
dependiendo del valor Boolean (Tipo de datos, Visual Basic) de una condición. Generalmente, la condición es el resultado de
comparar dos valores, pero también puede ser cualquier expresión que da como resultado un valor Boolean (True o False).
Esto incluye los valores de otros tipos de datos, como los numéricos, que han sido convertidos a valores de tipo Boolean.
Para ejecutar una o más instrucciones si una condición es verdadera
Si tiene sólo una instrucción para ejecutar, utilice la sintaxis de línea única de la construcción If...Then...Else. No necesita
las instrucciones Else o End If Esto se ilustra en el siguiente ejemplo:

Sub fixDate()
Dim myDate As Date = #2/13/1973#
If myDate < Now Then myDate = Now
End Sub

o bien
Para ejecutar más de una línea de código cuando la condición es True, se utiliza la sintaxis de varias líneas, que incluye la
instrucción End If. Si no tiene ningún código para ejecutar cuando la condición es False, omita la instrucción Else. Esto
se ilustra en el siguiente ejemplo:

Dim alertLabel As New System.Windows.Forms.Label


Sub alertUser(ByVal value As Long)
If value = 0 Then
alertLabel.ForeColor = System.Drawing.Color.Red
alertLabel.Font = New Font(alertLabel.Font, _
FontStyle.Bold Or FontStyle.Italic)
End If
End Sub

Para ejecutar algunas instrucciones si una condición es verdadera y otras si es falsa


Utilice la construcción If...Then...Else con la instrucción Else (Visual Basic) para definir dos bloques de instrucciones.
Visual Basic ejecuta un bloque si la condición es True y el otro si es False. Esto se ilustra en el siguiente ejemplo:

Dim alertLabel As New System.Windows.Forms.Label


Sub alertUser(ByVal value As Long)
If value = 0 Then
alertLabel.ForeColor = System.Drawing.Color.Red
alertLabel.Font = New Font(alertLabel.Font, _
FontStyle.Bold Or FontStyle.Italic)
Else
alertLabel.Forecolor = System.Drawing.Color.Black
alertLabel.Font = New Font(alertLabel.Font, _
FontStyle.Regular)
End If
End Sub

Para probar las condiciones adicionales si la primera condición es falsa


Utilice la construcción If...Then...Else con una o más instrucciones ElseIf (Visual Basic) para probar las condiciones
adicionales si la primera condición es False. En el siguiente ejemplo, el procedimiento Function calcula una bonificación
en la nómina basándose en el nivel de rendimiento. El bloque de instrucciones que sigue a la instrucción Else sólo se
ejecuta si las condiciones de las instrucciones If y ElseIf son todas False.

Function bonus(ByVal performance As Integer, ByVal salary As Decimal) _


As Decimal
If performance = 1 Then
Return salary * 0.1
ElseIf performance = 2 Then
Return salary * 0.09
ElseIf performance = 3 Then
Return salary * 0.07
Else
Return 0
End If
End Function

Visual Basic prueba las condiciones en el orden en que aparecen en las instrucciones If...Then...Else. Si encuentra una
condición True o una instrucción Else, ejecuta el bloque de instrucciones correspondiente. Después, el control pasa a la
instrucción que sigue a la instrucción End If.
Puede existir un número arbitrario de instrucciones ElseIf o ninguna. Puede incluir u omitir una instrucción Else
independientemente de que existan otras instrucciones ElseIf.

Vea también
Tareas
Cómo: Transferir el control fuera de una estructura de control
Cómo: Probar varios valores de una expresión
Cómo: Mantener el control cuando se produce un error
Conceptos
Estructuras de decisión
Estructuras de bucles
Estructuras de control adicionales
Estructuras de control anidadas
Otros recursos
Flujo de control en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Probar varios valores de una expresión


Cuando compara una misma expresión con varios valores diferentes, puede utilizar la construcción
Instrucción Select...Case (Visual Basic) como alternativa a la construcciónInstrucción If...Then...Else (Visual Basic). A diferencia de
las instrucciones If y ElseIf (Visual Basic), que pueden evaluar una expresión diferente en cada instrucción, la instrucción Select
evalúa una única expresión una sola vez y la utiliza para cada comparación.
Para evaluar una expresión una vez y comprobar varios valores
Utilice la construcción Select...Case para especificar la expresión y los valores que va a probar. Cada instrucción Case
puede contener uno o más valores, un intervalo de valores o una combinación de valores y operadores de comparación.
Puede utilizar una instrucción Case Else para controlar todos los valores no probados por las instrucciones Case
anteriores. En el siguiente ejemplo se ilustran estas posibilidades.

Function bonus(ByVal performance As Integer, ByVal salary As Decimal) _


As Decimal
Select performance
Case 1
Return salary * 0.1
Case 2, 3
Return salary * 0.09
Case 5 To 7
Return salary * 0.07
Case 4, 8 To 10
Return salary * 0.05
Case Is < 15
Return 100
Case Else
Return 0
End Select
End Function

Visual Basic compara el valor de la expresión con los valores en las instrucciones Case en el orden en el que aparecen en
la construcción Select...Case. Si encuentra una coincidencia o una instrucción Case Else, ejecuta el bloque de
instrucciones correspondiente. En cualquier caso, el control se bifurca a la instrucción que sigue a la instrucción End
Select.
Puede tener cualquier número de instrucciones Case y puede incluir u omitir una instrucción Case Else
independientemente de si tiene una instrucción Case.
Un ejemplo de código para la construcción Select...Case aparece también en el fragmento de código de IntelliSense. En el
selector de fragmentos de código, se encuentra en Lenguaje Visual Basic. Para obtener más información, consulte
Cómo: Insertar fragmentos de código en el código (Visual Basic).
Vea también
Tareas
Cómo: Transferir el control fuera de una estructura de control
Cómo: Ejecutar instrucciones en función de una o varias condiciones
Cómo: Mantener el control cuando se produce un error
Conceptos
Estructuras de decisión
Estructuras de bucles
Estructuras de control adicionales
Estructuras de control anidadas
Otros recursos
Flujo de control en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Mantener el control cuando se produce un error


Puede utilizar la construcción Instrucción Try...Catch...Finally (Visual Basic) para el control de excepciones estructurado. Permite
ejecutar un bloque concreto de instrucciones si se produce una excepción especificada mientras se ejecuta el código. Cuando
esto ocurre, se dice que el código provoca la excepción, que se detecta con la instrucción Catch correspondiente.
Para ejecutar un conjunto de instrucciones si su código produce una excepción
Utilice la construcción Try...Catch...Finally para agregar el código que puede producir una excepción. A continuación,
especifique el código que se va a ejecutar si aparece una excepción y proporcione opcionalmente un conjunto de
instrucciones que se ejecutará antes de que el control salga de la construcción Try...Catch...Finally.
En el ejemplo siguiente, se intenta calcular la fecha y la hora de 100 años después exactamente a partir del valor que se
proporciona en la variable givenDate de Object.

Dim givenDate As Object


Dim nextCentury As Date
Try
nextCentury = Microsoft.VisualBasic.DateAdd("yyyy", 100, givenDate)
Catch thisExcep As System.ArgumentOutOfRangeException
' The resulting date/time is later than December 31, 9999.
Catch thisExcep As System.ArgumentException
' At least one argument has an invalid value.
Catch thisExcep As System.InvalidCastException
' The value in givenDate cannot be interpreted as a date/time.
Catch
' An unforeseen exception has occurred.
Finally
' This block is always run before leaving the Try structure.
End Try

Los primeros tres bloques Catch controlan las excepciones que puede esperar de DateAdd (Función, Visual Basic). Puede
tratar con cualquier excepción inesperada en el último bloque Catch.
Con independencia de lo que suceda, el bloque Finally es siempre el código que se ejecuta en último lugar antes de salir
de la construcción Try...Catch...Finally. Si crea o abre los recursos como conexiones a objetos o a bases de datos en el
bloque Try o Catch, puede utilizar el bloque Finally para cerrarlos y desecharlos, si es necesario.
Si no aparece la variable de excepción thisExcep en una instrucción de declaración como Dim, la instrucción Catch con
la cláusula As actúa como una declaración.

Vea también
Tareas
Cómo: Transferir el control fuera de una estructura de control
Cómo: Ejecutar instrucciones en función de una o varias condiciones
Cómo: Probar varios valores de una expresión
Conceptos
Estructuras de decisión
Estructuras de bucles
Estructuras de control adicionales
Estructuras de control anidadas
Otros recursos
Flujo de control en Visual Basic
Conceptos del lenguaje Visual Basic

Estructuras de bucles
Las estructuras de bucles de Visual Basic permiten ejecutar una o más líneas de código de forma repetitiva. Puede repetir las
instrucciones de una estructura de bucles hasta que una condición sea True, una condición sea False, un número de veces
especificado o una vez para cada objeto de una colección.
En el siguiente ejemplo se muestra una estructura de bucle que ejecuta un conjunto de instrucciones hasta que una condición
se convierta en verdadera.
Ejecutar un conjunto de instrucciones hasta que una condición se convierta en verdadera

Bucles While
La construcción While...End While ejecuta un conjunto de instrucciones mientras la condición especificada en la instrucción
While sea True. Para obtener más información, consulte Instrucción While...End While (Visual Basic).
Bucles Do
La construcción Do...Loop le permite probar una condición al comienzo o al final de una estructura de bucle. También puede
especificar si repite el bucle mientras la condición sigue siendo True o hasta que se convierta en True. Para obtener más
información, consulte Instrucción Do...Loop (Visual Basic).
Bucles For
La construcción For...Next ejecuta el bucle un número fijo de veces. Utiliza una variable de control de bucle, también
denominada contador para realizar el seguimiento de las repeticiones. Especifica los valores de inicio y fin de este contador, y
puede especificar opcionalmente la cantidad en la que se incrementa de una repetición a la siguiente. Para obtener más
información, consulte Instrucción For...Next (Visual Basic).
Bucles For Each
La construcción For Each...Next ejecuta un conjunto de instrucciones una vez para cada elemento de una colección. Especifica
la variable de control de bucle pero no tiene que determinar los valores de inicio y fin para ella. Para obtener más información,
consulte Instrucción For Each...Next (Visual Basic).
Vea también
Tareas
Cómo: Transferir el control fuera de una estructura de control
Cómo: Ejecutar varias instrucciones de forma repetida
Cómo: Ejecutar varias instrucciones para todos los elementos de una colección o matriz
Cómo: Mejorar el rendimiento de un bucle
Cómo: Pasar a la siguiente iteración de un bucle
Conceptos
Estructuras de decisión
Estructuras de control adicionales
Estructuras de control anidadas
Otros recursos
Flujo de control en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Ejecutar varias instrucciones de forma repetida


Puede utilizar las estructuras de bucle para ejecutar un bloque de instrucciones de forma repetida. El bucle puede ejecutarse un
número indeterminado de veces, en función del valor Boolean de una condición o durante un número fijo de veces
controlado por una variable especial.
Repetición del bucle durante un número indeterminado de veces
Para ejecutar un grupo de instrucciones mientras la condición sea True
Utilice Instrucción While...End While (Visual Basic) para especificar la condición que controla la repetición del bucle. El
ejemplo siguiente repite el bloque de instrucciones mientras number sea mayor que 6.

Sub checkWhile()
Dim counter As Integer = 0
Dim number As Integer = 10
While number > 6
number -= 1
counter += 1
End While
MsgBox("The loop ran " & counter & " times.")
End Sub

La instrucción While comprueba siempre la condición antes de iniciar el bucle. Si number se hubiera inicializado en 6 y
no en 10, las instrucciones del bucle nunca se ejecutarían.
Para ejecutar un grupo de instrucciones mientras una condición siga siendo True
Utilice Instrucción Do...Loop (Visual Basic) y especifique la condición de la prueba al principio o al final del bucle. La
posición de la palabra clave While (Visual Basic) determina dónde se prueba la condición. Esto se ilustra en el siguiente
ejemplo:

Sub checkWhileFirst()
Dim counter As Integer = 0
Dim number As Integer = 10
Do While number > 6
number -= 1
counter += 1
Loop
MsgBox("The loop ran " & counter & " times.")
End Sub
Sub checkWhileLast()
Dim counter As Integer = 0
Dim number As Integer = 5
Do
number -= 1
counter += 1
Loop While number > 6
MsgBox("The loop ran " & counter & " times.")
End Sub

En el ejemplo anterior, el primer bucle Do se ejecuta cuatro veces y el segundo bucle Do se ejecuta una vez.
Para ejecutar un grupo de instrucciones hasta que una condición sea True
Utilice la construcción Do...Loop con la palabra clave Until en lugar de While. Al igual que con While, la posición de la
palabra clave determina dónde se prueba la condición. Esto se ilustra en el siguiente ejemplo:
Sub checkUntilFirst()
Dim counter As Integer = 0
Dim number As Integer = 20
Do Until number = 15
number -= 1
counter += 1
Loop
MsgBox("The loop ran " & counter & " times.")
End Sub
Sub checkUntilLast()
Dim counter As Integer = 0
Dim number As Integer = 20
Do
number -= 1
counter += 1
Loop Until number = 15
MsgBox("The loop ran " & counter & " times.")
End Sub

En el ejemplo anterior, cada bucle Do se ejecuta cinco veces.


Repetición del bucle durante un número fijo de veces
Los bucles While y Do funcionan bien cuando no se sabe de antemano cuántas veces se necesitan ejecutar las instrucciones
en un bucle. Sin embargo, cuando espera ejecutar el bucle un número concreto de veces, Instrucción For...Next (Visual Basic) es
una mejor elección. A diferencia de un bucle While o Do, un bucle For...Next utiliza una variable denominada variable de
control que aumenta o reduce su valor en cada repetición del bucle.
Para ejecutar un grupo de instrucciones un número fijo de veces
1. Determine los valores de inicio y fin de la variable de control y utilice la instrucción For para especificarlos.

For i As Integer = 1 To 10

Si la variable de control no está declarada fuera del bucle, puede utilizar la cláusula As para declararla como parte de la
instrucción For.
2. Utilice la palabra clave Step para indicar la cantidad que debe aumentar la variable de control en cada iteración. Aumenta
en 1 a menos que especifique lo contrario. Utilice un valor negativo para hacer que la variable de control disminuya.

For i As Integer = 10 To 1 Step -1

3. Finalice la construcción For...Next con una instrucción Next que sigue a la última instrucción que se va a repetir. Puede
especificar la variable de control en la instrucción Next.

Function addBackward(ByVal highest As Integer) As Integer


Dim total As Integer = 0
For i As Integer = highest To 1 Step -1
total += i
Next i
Return total
End Function

El ejemplo anterior devuelve la suma de todos los números enteros desde 1 hasta el valor pasado al parámetro highest.

Vea también
Tareas
Cómo: Transferir el control fuera de una estructura de control
Cómo: Ejecutar varias instrucciones para todos los elementos de una colección o matriz
Cómo: Mejorar el rendimiento de un bucle
Cómo: Pasar a la siguiente iteración de un bucle
Referencia
Instrucción For Each...Next (Visual Basic)
Conceptos
Estructuras de decisión
Estructuras de bucles
Estructuras de control adicionales
Estructuras de control anidadas
Otros recursos
Flujo de control en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Ejecutar varias instrucciones para todos los elementos de


una colección o matriz
La construcción de la instrucción For Each es parecida a la del bucle For...Next, pero ejecuta el bloque de instrucciones una vez
por cada elemento de una colección, en vez de un número de veces especificado. Un bucle For Each...Next utiliza una variable
de elemento que representa un elemento diferente de la colección durante cada repetición del bucle.
Repetir un bloque de instrucciones para una colección
Para repetir un grupo de instrucciones para cada elemento de una colección.
1. Identifique la colección en la que va a ejecutar el bloque de instrucciones y utilice Instrucción For Each...Next (Visual Basic)
para especificar la variable de elemento y la colección.

For Each thisControl As System.Windows.Forms.Control In thisForm.Contr


ols

Si la variable de elemento no está declarada fuera del bucle, puede utilizar la cláusula As para declararla como parte de la
instrucción For Each.
Visual Basic sustituye automáticamente un elemento diferente de la colección para cada iteración.
2. Finalice la construcción For Each...Next con una instrucción Next que sigue a la última instrucción que se va a repetir.
Puede especificar la variable de elemento en la instrucción Next.

Sub lightBlueBackground(ByVal thisForm As System.Windows.Forms.Form)


For Each thisControl As System.Windows.Forms.Control In thisForm.Controls
thisControl.BackColor = System.Drawing.Color.LightBlue
Next thisControl
End Sub

Puede leer los elementos de la colección, pero no puede realizar ningún cambio en la propia colección, como agregar,
eliminando o reemplazar cualquier elemento. Sin embargo, si un elemento es un tipo de referencia, puede obtener
acceso y establecer sus miembros. Como cada elemento Control es un tipo de referencia, el código del ejemplo anterior
puede cambiar su propiedad BackColor.
Repetir un bloque de instrucciones para una matriz
También puede recorrer en iteración una matriz con un bucle For Each...Next. Sin embargo, al igual que con las colecciones,
sólo podrá leer los elementos de la matriz pero no modificarlos.
Para repetir un grupo de instrucciones para cada elemento de una matriz
1. Utilice la instrucción For Each para especificar la variable de elemento y la matriz. No agregue paréntesis detrás del
nombre de la matriz.
Visual Basic trata la matriz de la misma manera que trata una colección.
2. Agregue al bloque de instrucciones una instrucción Next. Puede especificar la variable de elemento en la instrucción
Next.
El propósito del siguiente procedimiento es calcular la suma de los elementos de una matriz y reiniciar cada elemento a
cero.

Function sumAndReset(ByRef numbers() As Integer) As Integer


Dim sum As Integer = 0
For Each elt As Integer In numbers
sum += elt
' The following statement works only on the local copy
' of the array, not on the original array.
elt = 0
Next elt
Return sum
End Function

La suma funciona según los esperado, porque se basa sólo en leer los elementos. Sin embargo, la reinicialización a cero
no funciona según lo esperado porque sólo se reinicia a cero la copia local de cada elemento mientras que los elementos
originales permanecen sin modificar en la matriz original.
Vea también
Tareas
Cómo: Transferir el control fuera de una estructura de control
Cómo: Ejecutar varias instrucciones de forma repetida
Cómo: Mejorar el rendimiento de un bucle
Cómo: Pasar a la siguiente iteración de un bucle
Referencia
Instrucción For...Next (Visual Basic)
Conceptos
Estructuras de decisión
Estructuras de bucles
Estructuras de control adicionales
Estructuras de control anidadas
Otros recursos
Flujo de control en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Mejorar el rendimiento de un bucle


Puede optimizar el rendimiento de un bucle utilizando los tipos de datos más eficaces. Para un bucle corto que no se ejecuta
muchas veces la diferencia podría ser insignificante. Sin embargo, si el bucle se ejecuta un gran número de veces, el ahorro en
el rendimiento puede ser considerable.
Integer y UInteger son los tipos más eficaces en las plataformas actuales. Short, Long, UShort y ULong no son tan eficaces
y Decimal es considerablemente más lento. Para obtener más información, consulte Tipos de datos numéricos.
Para optimizar el rendimiento de un bucle For...Next
Utilice el tipo de datos más eficaz para la variable de control. El ejemplo siguiente muestra algunas posibles variaciones
en un bucle. Los cronometrajes absolutos dependen de la plataforma, pero las comparaciones en tiempo de ejecución
siguen siendo válidas.

For fastest As Integer = 0 to 1000000


' Insert statements to execute for each value of fastest.
Next fastest
For notAsFast As Long = 0 to 1000000
' Insert statements to execute for each value of notAsFast.
Next notAsFast
For muchSlower As Decimal = 0 to 1000000
' Insert statements to execute for each value of muchSlower.
Next muchSlower

En el primer caso, la ejecución tarda un poco menos que en el segundo caso. Sin embargo, Integer puede controlar sólo
valores de hasta 2,147,483,647 y UInteger sólo hasta 4,294,967,295. El segundo y tercer caso pueden controlar valores
más grandes, porque Long y Decimal aceptan un intervalo más ancho de enteros, pero funcionan más despacio. Es
posible que tenga que tomar una decisión de diseño entre velocidad y capacidad de los tipos de datos que utiliza.
Vea también
Tareas
Cómo: Transferir el control fuera de una estructura de control
Cómo: Ejecutar varias instrucciones de forma repetida
Cómo: Ejecutar varias instrucciones para todos los elementos de una colección o matriz
Cómo: Pasar a la siguiente iteración de un bucle
Referencia
Instrucción For...Next (Visual Basic)
Conceptos
Estructuras de bucles
Otros recursos
Flujo de control en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Pasar a la siguiente iteración de un bucle


Si ha finalizado el procesamiento para la iteración actual de un bucle Do, For o While, puede pasar inmediatamente a la
siguiente iteración mediante Instrucción Continue (Visual Basic).
Pasar a la siguiente iteración
Para pasar a la siguiente iteración de un bucle For...Next
1. Escriba el bucle For...Next de la manera normal.
2. Utilice Continue For en cualquier lugar en el que desee finalizar la iteración actual y continúe inmediatamente con la
iteración siguiente.

Public Function findLargestRatio(ByVal high() As Double, _


ByVal low() As Double) As Double
Dim ratio As Double
Dim largestRatio As Double = Double.MinValue
For counter As Integer = 0 To low.GetUpperBound(0)
If Math.Abs(low(counter)) < System.Double.Epsilon _
Then Continue For
ratio = high(counter) / low(counter)
If Double.IsInfinity(ratio) OrElse Double.IsNaN(ratio) _
Then Continue For
If ratio > largestRatio Then largestRatio = ratio
Next counter
Return largestRatio
End Function

Pasar desde dentro de un bucle anidado


Si tiene los bucles Do, For o While anidados uno dentro de otro, puede pasar inmediatamente a la siguiente iteración de
cualquier nivel en el anidamiento. Sin embargo, esto sólo se puede hacer cuando los bucles son de tipos diferentes. Si tiene
bucles anidados del mismo tipo, por ejemplo bucles While anidados, Continue While pasa a la siguiente iteración del bucle
While más interno.
Para pasar a la siguiente iteración de un bucle Do desde dentro de un bucle For anidado
1. Escriba los bucles anidados de la manera normal.
2. Utilice Continue Do en cualquier lugar en el que desee finalizar la iteración actual del bucle For más interno y pase a la
siguiente iteración del bucle Do más externo.

Public Sub divideElements(ByRef matrix(,) As Double)


Dim i As Integer = -1
Do Until i > matrix.GetUpperBound(0)
i += 1
For j As Integer = 0 To matrix.GetUpperBound(1)
If matrix(j, j) = 0 Then Continue Do
matrix(i, j) /= matrix(j, j)
Next j
Loop
End Sub

Vea también
Tareas
Cómo: Transferir el control fuera de una estructura de control
Cómo: Ejecutar varias instrucciones de forma repetida
Cómo: Ejecutar varias instrucciones para todos los elementos de una colección o matriz
Cómo: Mejorar el rendimiento de un bucle
Referencia
Instrucción While...End While (Visual Basic)
Instrucción Do...Loop (Visual Basic)
Instrucción For...Next (Visual Basic)
Conceptos
Estructuras de bucles
Estructuras de control anidadas
Otros recursos
Flujo de control en Visual Basic
Conceptos del lenguaje Visual Basic

Estructuras de control adicionales


Visual Basic proporciona estructuras de control que ayudan a eliminar de un recurso o reducen el número de veces que tiene
que repetir una referencia de objeto.
Construcción Using...End Using
La construcción Using...End Using establece un bloque de instrucciones dentro del cual utiliza un recurso como una conexión
de SQL. Puede adquirir el recurso opcionalmente con la instrucción Using. Cuando sale del bloque Using, Visual Basic dispone
automáticamente del recurso para que esté disponible para otro código. El recurso debe ser local y ser descartable. Para
obtener más información, consulte Instrucción Using (Visual Basic).
Construcción With...End With
La construcción With...End With le permite especificar una referencia de objeto una vez y ejecutar luego una serie de
instrucciones que tienen acceso a sus miembros. Esto puede simplificar su código y mejorar el rendimiento porque Visual
Basic no tiene que restablecer la referencia para cada instrucción que tiene acceso a él. Para obtener más información, consulte
Instrucción With...End With (Visual Basic).
Vea también
Tareas
Cómo: Transferir el control fuera de una estructura de control
Referencia
Instrucción Using (Visual Basic)
Instrucción With...End With (Visual Basic)
Conceptos
Estructuras de decisión
Estructuras de bucles
Estructuras de control anidadas
Otros recursos
Flujo de control en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Deshacerse de un recurso del sistema


Puede utilizar un bloque Using para garantizar que el sistema desecha un recurso cuando su código sale del bloque. Esto es
útil si está empleando un recurso del sistema que utiliza una gran cantidad de memoria o que otros componentes también
desean utilizar.
Para desechar una conexión a bases de datos cuando su código haya acabado de usarla
1. Asegúrese de que incluye la instrucción Imports (Instrucción) apropiada para la conexión a bases de datos al principio del
archivo de código fuente (en este caso, System.Data.SqlClient).
2. Cree un bloque Using con las instrucciones Using y End Using. Coloque el código que trata la conexión a bases de
datos dentro del bloque.
3. Declare la conexión y cree una instancia de ella como parte de la instrucción Using.

' Insert the following line at the beginning of your source file.
Imports System.Data.SqlClient
Public Sub AccessSql(ByVal s As String)
Using sqc As New System.Data.SqlClient.SqlConnection(s)
MsgBox("Connected with string """ & sqc.ConnectionString & """")
End Using
End Sub

El sistema desecha el recurso independientemente de cómo salga del bloque, incluido el caso de una excepción no
controlada.
Tenga en cuenta que no puede tener acceso a sqc desde fuera del bloque Using porque su ámbito se limita al bloque.
Puede utilizar esta misma técnica en un recurso del sistema como un identificador de archivos o un contenedor COM.
Utilice un bloque Using cuando desee dejar el recurso disponible para otros componentes después de haber salido del
bloque Using.
Vea también
Tareas
Cómo: Transferir el control fuera de una estructura de control
Cómo: Realizar varias acciones en un objeto
Referencia
Instrucción Using (Visual Basic)
SqlConnection
Conceptos
Estructuras de decisión
Estructuras de bucles
Estructuras de control adicionales
Estructuras de control anidadas
Otros recursos
Flujo de control en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Realizar varias acciones en un objeto


En Visual Basic generalmente se debe especificar un objeto en cada instrucción que llame a uno de sus métodos o que tenga
acceso a una de sus propiedades. Sin embargo, si tiene una serie de instrucciones que operan en un mismo objeto, puede
utilizar una estructura With...End With para especificar el objeto solo una sola vez para todas las instrucciones. De este modo
puede acelerar la ejecución de los procedimientos y evitar la escritura repetitiva.
Ejemplo
El ejemplo siguiente establece el color del primer plano y el estilo de fuente de Label según el valor de un argumento de
procedimiento.

Imports draw = System.Drawing


' The preceding statement must appear at the beginning of the source file.
Dim alertLabel As New System.Windows.Forms.Label
Sub alertUser(ByVal value As Long)
With alertLabel
If value = 0 Then
.ForeColor = draw.Color.Red
.Font = New draw.Font(.Font, draw.FontStyle.Bold Or draw.FontStyle.Italic)
Else
.Forecolor = draw.Color.Black
.Font = New draw.Font(.Font, draw.FontStyle.Regular)
End If
End With
End Sub

Tenga en cuenta el uso de Or (Operador, Visual Basic) para combinar los estilos de fuente. Especifica la combinación deseada
de indicadores de bits. And (Operador, Visual Basic) habría generado 0 porque todos los miembros de enumeración FontStyle
utilizan bits diferentes.
También tenga en cuenta el uso de Imports (Instrucción) para establecer draw de alias de importación, lo que facilita la lectura y
acorta la referencia a los miembros System.Drawing.
También se pueden anidar instrucciones With...End With situándolas una dentro de otra, como en el código siguiente:
VB
Sub setupForm()
Dim anotherForm As New System.Windows.Forms.Form
Dim button1 As New System.Windows.Forms.Button
With anotherForm
.Show()
.Top = 250
.Left = 250
.ForeColor = System.Drawing.Color.LightBlue
.BackColor = System.Drawing.Color.DarkBlue
.Controls.Add(button1)
With .Controls.Item(1)
.BackColor = System.Drawing.Color.Thistle
.Text = "Text on button1"
End With
End With
End Sub

Sin embargo, en la instrucción anidada With, la sintaxis hace referencia al objeto anidado; las propiedades del objeto en la
instrucción With externa no están establecidas.
Vea también
Tareas
Cómo: Transferir el control fuera de una estructura de control
Cómo: Deshacerse de un recurso del sistema
Cómo: Acelerar el acceso a un objeto con una ruta de acceso de calificación larga
Referencia
Instrucción With...End With (Visual Basic)
Conceptos
Estructuras de decisión
Estructuras de bucles
Estructuras de control adicionales
Estructuras de control anidadas
Otros recursos
Flujo de control en Visual Basic
Conceptos del lenguaje Visual Basic

Estructuras de control anidadas


Puede colocar instrucciones de control dentro de otras instrucciones de control, por ejemplo un bloque If...Then...Else dentro
de un bucle For...Next. Cuando una instrucción de control se coloca dentro de otra, se dice que está anidada.
Niveles de anidamiento
En Visual Basic, las instrucciones de control pueden anidarse en tantos niveles como se desee. A fin de que las estructuras
anidadas sean más fáciles de leer, es práctica habitual aplicar sangría al cuerpo de cada una. El editor del entorno de desarrollo
integrado (IDE) lo hace automáticamente.
En el siguiente ejemplo, el procedimiento sumRows suma los elementos positivos de cada fila de la matriz.

Public Sub sumRows(ByVal a(,) As Double, ByRef r() As Double)


Dim i, j As Integer
For i = 0 To UBound(a, 1)
r(i) = 0
For j = 0 To UBound(a, 2)
If a(i, j) > 0 Then
r(i) = r(i) + a(i, j)
End If
Next j
Next i
End Sub

En el ejemplo anterior, la primera instrucción Next cierra el bucle For interno y la última instrucción Next cierra el bucle For
externo.
Del mismo modo, en las instrucciones If anidadas, las instrucciones End If se aplican automáticamente a la instrucción If
anterior más próxima. Los bucles Do anidados funcionan de forma similar; la instrucción Loop más interna está emparejada
con la instrucción Do más interna.
Anidar diferentes tipos de estructuras de control
Puede anidar un tipo de estructura de control dentro de otro tipo. El ejemplo siguiente utiliza un bloque With dentro de un
bucle For Each y bloques If anidados dentro del bloque With.

For Each ctl As System.Windows.Forms.Control In Me.Controls


With ctl
.BackColor = System.Drawing.Color.Yellow
.ForeColor = System.Drawing.Color.Black
If .CanFocus Then
.Text = "Colors changed"
If Not .Focus() Then
' Insert code to process failed focus.
End If
End If
End With
Next ctl

Superposición de estructuras de control


No puede superponer estructuras de control. Esto significa que cualquier estructura anidada debe estar completamente
incluida dentro de la siguiente estructura más profunda. Por ejemplo, la organización siguiente no es válida porque el bucle
For finaliza antes de que termine el bloque With interno.
Anidamiento no válido de estructuras For y With
El compilador de Visual Basic detecta este tipo de estructuras de control superpuestas y señala un error en tiempo de
compilación.
Vea también
Tareas
Cómo: Transferir el control fuera de una estructura de control
Conceptos
Estructuras de decisión
Estructuras de bucles
Estructuras de control adicionales
Otros recursos
Flujo de control en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Transferir el control fuera de una estructura de control


Puede utilizar Instrucción Exit (Visual Basic) para salir directamente de una estructura de control. Exit transfiere
inmediatamente la ejecución a la instrucción que sigue a la última instrucción de la estructura de control. La sintaxis de la
instrucción Exit especifica el tipo de estructura de control desde la que se transfiere la ejecución. Son posibles las siguientes
versiones de la instrucción Exit:
Exit Select
Exit Try
Exit While
Exit Do
Exit For
Las instrucciones Exit pueden aparecer tantas veces como sea necesario dentro de una estructura de control que las admite.
Exit es útil cuando una estructura de control ha hecho todo que necesita hacer y no necesita ejecutar ninguna instrucción más.
Estructuras de control que no admiten la salida. No puede utilizar la instrucción Exit para transferir fuera de un bloque If,
Using o With. Para lograr el mismo resultado, puede colocar una etiqueta de instrucción en la instrucción End del bloque y
transferir hacia él mediante una instrucción GoTo. Para obtener más información sobre etiquetas de instrucciones, consulte
Cómo: Aplicar etiquetas a las instrucciones.
Ejemplo
Si se encuentra una instrucción Exit dentro de estructuras de control anidadas, el control pasa a la instrucción que sigue al
final de la estructura más interna del tipo especificado en la instrucción Exit. Esto se ilustra en el siguiente ejemplo:

Public Sub invertElements(ByRef a(,) As Double)


For i As Integer = 0 To UBound(a, 1)
For j As Integer = 0 To UBound(a, 2)
If a(i, j) = 0 Then
' Cannot complete this row; resume outer loop.
Exit For
Else
a(i, j) = 1.0 / a(i, j)
End If
Next j
' Control comes here directly from the Exit For statement.
Next i
End Sub

En el ejemplo anterior, la instrucción Exit For se encuentra en el bucle For interno, de modo que pasa el control a la instrucción
que sigue al bucle y continúa con el bucle For externo.
Vea también
Tareas
Cómo: Aplicar etiquetas a las instrucciones
Referencia
Instrucción Exit (Visual Basic)
GoTo (Instrucción)
Conceptos
Estructuras de decisión
Estructuras de bucles
Estructuras de control adicionales
Estructuras de control anidadas
Otros recursos
Flujo de control en Visual Basic
Conceptos del lenguaje Visual Basic

Programación orientada a objetos en Visual Basic


Los objetos son el elemento central de la programación en Visual Basic. Los formularios y controles son objetos. Las bases de
datos son objetos. Si ha utilizado Visual Basic durante algún tiempo, o si ha trabajado con los ejemplos de la documentación,
ya ha programado con objetos, pero hay mucho más en lo que se refiere a objetos de lo que ha visto hasta aquí.
En los siguientes temas, verá lo fácil que resulta crear objetos propios a partir de las clases que defina, así como utilizar objetos
para simplificar la creación de código y aumentar su reutilización.
En esta sección
Introducción a los objetos en Visual Basic
Proporciona una introducción a los términos y conceptos utilizados en la programación orientada a objetos.
Enlace en tiempo de compilación y en tiempo de ejecución
Describe los enlaces, que realiza el compilador cuando se asigna un objeto a una variable de objeto, y las diferencias entre
los objetos con enlaces en tiempo de compilación y en tiempo de ejecución.
Miembros compartidos en Visual Basic
Describe los miembros que se pueden utilizar sin instancias.
Crear y utilizar objetos
Muestra cómo crear y utilizar instancias de clases.
Administrar grupos de objetos
Proporciona técnicas para trabajar con matrices y colecciones de objetos.
Obtener información de clases en tiempo de ejecución
Muestra cómo determinar la clase a la que pertenece un objeto.
Descripción de las clases
Explica la creación y duración de objetos en un procedimiento paso a paso.
Eventos en Visual Basic
Muestra cómo declarar y utilizar eventos.
Delegados de Visual Basic
Muestra cómo declarar y utilizar delegados.
Interfaces en Visual Basic
Describe qué son las interfaces y cómo pueden utilizarse en las aplicaciones.
Herencia en Visual Basic
Describe cómo definir clases que sirvan como base para otras clases.
Secciones relacionadas
Objetos en Visual Basic
Describe qué son los objetos y cómo se utilizan.
Programar con componentes
Muestra cómo se puede utilizar Visual Basic para controlar objetos proporcionados por otras aplicaciones.
Conceptos del lenguaje Visual Basic

Introducción a los objetos en Visual Basic


Un objeto es una estructura que contiene los datos y métodos que manipulan los datos. Casi todas las tareas realizadas en
Visual Basic están asociadas con el uso de objetos. Si no tiene experiencia en programación orientada a objetos, los siguientes
términos y conceptos le ayudarán a comenzar.
Clases y objetos
Las palabras "clase" y "objeto" se utilizan con tanta frecuencia en la programación orientada a objetos que es fácil confundir los
términos. En general, una class es una representación abstracta de algo, mientras que un objeto es un ejemplo utilizable de lo
que representa la clase. La única excepción a esta regla la constituyen los miembros de clases compartidas, que pueden
utilizarse en instancias de una clase y en variables de objeto declaradas como tipo de la clase.
Campos, propiedades, métodos y eventos
Las clases se componen de campos, propiedades, métodos y eventos. Los campos y propiedades representan información que
contiene un objeto. Los campos se parecen a las variables en que se pueden leer y establecer directamente. Por ejemplo, si
tiene un objeto denominado "Car", podría almacenar su color en un campo denominado "Color".
Las propiedades se recuperan y establecen como los campos, pero se implementan mediante los procedimientos Get
propiedad y Set propiedad, que proporcionan más control sobre la forma en que los valores se establecen o se devuelven. El
nivel de direccionamiento indirecto entre el valor que se va a almacenar y los procedimientos que lo utilizan ayuda a aislar los
datos y permite validar valores antes de ser asignados o recuperados.
Los métodos representan acciones que un objeto puede realizar. Por ejemplo, un objeto "Car" podría tener los métodos
"StartEngine", "Drive" y "Stop". Los métodos se definen agregando procedimientos, ya sean rutinas o funciones Sub, a la clase.
Los eventos son notificaciones que un objeto recibe de, o transmite a, otros objetos o aplicaciones. Los eventos permiten a los
objetos realizar acciones siempre que se produce un acontecimiento específico. Un ejemplo de evento para la clase "Car" sería
un evento "Check_Engine". Puesto que Microsoft Windows es un sistema controlado por eventos, éstos pueden proceder de
otros objetos, aplicaciones o entradas de usuario realizadas al hacer clic con el mouse (ratón) o al presionar teclas.
Encapsulación, herencia y polimorfismo
Los campos, propiedades, métodos y eventos son solamente la mitad de la ecuación de la programación orientada a objetos.
Para que la programación orientada a objetos sea auténtica los objetos deben admitir tres cualidades: encapsulación, herencia
y polimorfismo.
La encapsulación significa que un grupo de propiedades, métodos y otros miembros relacionados se tratan como si de una
sola unidad u objeto se tratase. Los objetos pueden controlar cómo se cambian propiedades o se ejecutan métodos. Por
ejemplo, un objeto puede validar valores antes de permitir cambios en la propiedad. La encapsulación, además, facilita la
posibilidad de realizar cambios en la implementación pasado algún tiempo, mediante una actividad denominada ocultación de
datos que permite ocultar los detalles de implementación de los objetos.
Herencia describe la posibilidad de crear nuevas clases basadas en una clase existente. La nueva clase hereda todas las
propiedades, métodos y eventos de la clase base, y puede personalizarse con propiedades y métodos adicionales. Por ejemplo,
puede crear una nueva clase denominada "Truck" basada en la clase "Car". La clase "Truck" hereda la propiedad "Color" de la
clase "Car" y puede tener propiedades adicionales como "FourWheelDrive".
Polimorfismo significa que puede tener múltiples clases que se pueden utilizar de forma intercambiable, si bien cada clase
implementa las mismas propiedades o los mismos métodos de maneras diferentes. El polimorfismo es esencial en la
programación orientada a objetos puesto que permite utilizar elementos con los mismos nombres, independientemente del
tipo de objeto que se esté utilizando en ese momento. Por ejemplo, dada una clase base "Car", el polimorfismo permite al
programador definir diferentes métodos "StartEngine" para cualquier número de clases derivadas. El método "StartEngine" de
una clase derivada denominada "DieselCar" puede ser totalmente diferente del método con el mismo nombre en la clase base.
Otros procedimientos o métodos pueden utilizar el método "StartEngine" de las clases derivadas exactamente de la misma
forma, con independencia del tipo de objeto "Car" que se esté utilizando en ese momento.
Sobrecarga, reemplazo y sombreado
La sobrecarga, el reemplazo y el sombreado son conceptos similares que pueden confundirse fácilmente. Aunque las tres
técnicas permiten crear miembros con el mismo nombre, existen algunas diferencias importantes.
Los miembros sobrecargados se utilizan para proporcionar diferentes versiones de una propiedad o método que tienen
el mismo nombre, pero que aceptan un número diferente de parámetros, o parámetros con diferentes tipos de datos.
Las propiedades y métodos reemplazados se utilizan para reemplazar una propiedad o método heredados que no son
apropiados en una clase derivada. Los miembros reemplazados deben aceptar el mismo tipo de datos y número de
argumentos. Las clases derivadas heredan los miembros reemplazados.
Los miembros sombreados se utilizan para reemplazar localmente un miembro que tiene un ámbito más amplio.
Cualquier tipo puede sombrear cualquier otro tipo. Por ejemplo, puede declarar un propiedad que sombree un método
heredado con el mismo nombre. Los miembros sombreados no se pueden heredar.
Vea también
Conceptos
Clases: como planos para objetos
Propiedades y métodos sobrecargados
Reemplazar propiedades y métodos
Sombrear en Visual Basic
Otros recursos
Objetos en Visual Basic
Crear y utilizar objetos
Herencia en Visual Basic
Conceptos del lenguaje Visual Basic

Descripción de las clases


Las clases son importantes en la programación orientada a objetos puesto que permiten agrupar elementos relacionados
como una unidad, así como controlar su visibilidad y accesibilidad en otros procedimientos. Las clases también pueden
heredar y reutilizar código definido en otras clases.
En esta sección
Clases: como planos para objetos
Proporciona información general de encapsulación, herencia y miembros compartidos.
Tutorial: Definir clases
Recorre paso a paso el proceso de creación de una clase.
Clases y módulos
Explica las diferencias entre clases y módulos estándar.
Duración de los objetos: cómo se crean y destruyen
Explica cómo se crean y destruyen las instancias de clases.
Cómo: Implementar el modelo DisposeFinalize (Visual Basic)
Explica cómo garantizar que se liberan los recursos de un objeto cuando ya no son necesarios.
Utilizar constructores y destructores
Explica cómo se inicializan nuevas instancias de clases y cómo se eliminan recursos cuando ya no son necesarios.
Propiedades, campos y métodos de clases
Explica los campos, propiedades y métodos que forman una clase.
Secciones relacionadas
Crear y utilizar objetos
Muestra cómo crear y utilizar instancias de clases.
Interfaces en Visual Basic
Describe qué son las interfaces y cómo pueden utilizarse en las aplicaciones.
Herencia en Visual Basic
Describe cómo definir clases que sirvan como base para otras clases.
Conceptos del lenguaje Visual Basic

Clases: como planos para objetos


Las clases son representaciones simbólicas de objetos; describen las propiedades, campos, métodos y eventos que forman
objetos de la misma forma que los planos describen los elementos que componen un edificio. Así como un plano puede
utilizarse para crear varios edificios, una única clase puede utilizarse para crear tantos objetos como sea necesario. Del mismo
modo que un plano define qué partes de un edificio son accesibles a las personas que lo utilizan, las clases también pueden
controlar el acceso de los usuarios a los elementos de objetos a través de la encapsulación.
Clases y objetos
Los términos clase y objeto se utilizan a veces indistintamente, pero en realidad, las clases describen la estructura de los
objetos, mientras que los objetos son instancias de clases que se pueden utilizar. Cada instancia es una copia exacta pero
diferente de su clase. Puesto que un objeto es una instancia de una clase, la acción de crear un objeto se denomina creación de
instancias.
Con la analogía de plano, una clase es un plano y un objeto es un edificio construido a partir de ese plano. Normalmente, al
cambiar los datos en un objeto, no se cambian los datos en ningún otro objeto. (La excepción la constituyen los miembros
compartidos, miembros de clase declarados con el modificador Shared, que existen de forma independiente de las instancias
específicas de una clase).
Encapsulación
La encapsulación es la capacidad de contener y controlar el acceso a un grupo de elementos asociados. Las clases
proporcionan una de las formas más comunes de encapsular elementos. En el ejemplo siguiente, la clase BankAccount
encapsula los métodos, campos y propiedades que describen una cuenta bancaria.
Sin la encapsulación, debería declarar diferentes procedimientos y variables para almacenar y administrar la información de la
cuenta bancaria, y sería difícil trabajar con más de una cuenta bancaria a la vez. La encapsulación permite utilizar datos y
procedimientos de la clase BankAccount como una unidad. Puede trabajar con varias cuentas bancarias al mismo tiempo sin
confusión, puesto que cada cuenta se representa mediante una instancia única de la clase.
La encapsulación también permite controlar la forma de utilizar los datos y los procedimientos. Se pueden utilizar
modificadores de acceso, como Private o Protected, para evitar que unos procedimientos externos ejecuten métodos de clase
o lean y modifiquen datos en propiedades y campos. Debe declarar detalles internos de una clase como Private para evitar
que se utilicen fuera de su clase; esta técnica se llama ocultación de datos y es el modo de proteger información del cliente,
como un saldo de cuenta por ejemplo.
Una regla básica de la encapsulación es que los datos de clase sólo se deben modificar o recuperar mediante métodos o
procedimientos Property. Al ocultar los detalles de implementación de las clases se evita que sean utilizados de forma no
deseada y hace posible la modificación posterior de tales elementos sin problemas de compatibilidad. Por ejemplo, en las
versiones posteriores de la clase BankAccount se podría cambiar el tipo de datos del campo AccountBalance sin peligro de
interrumpir otras aplicaciones que se basan en que ese campo tenga un tipo de datos específico.
Herencia
Al igual que para las estructuras de Visual Basic, puede utilizar las clases para definir tipos de datos que encapsulan un grupo
de elementos relacionados. No obstante, a diferencia de las estructuras, las clases de Visual Basic pueden heredar y extender
las características de otras clases. Las clases que sirven de base para nuevas clases se denominan clases base. Las clases que se
derivan de clases base se denominan clases derivadas. Las clases derivadas heredan todos los campos, propiedades, métodos
y eventos de la clase base. Esto significa que puede desarrollar y depurar una clase una vez y reutilizarla después como base de
otras clases.
En el siguiente ejemplo se define una clase base que representa una cuenta bancaria genérica y una clase específica que
hereda las propiedades de la clase base pero que se personaliza para describir una cuenta corriente.
VB
Class BankAccount
Private AccountNumber As String
Private AccountBalance As Decimal
Private HoldOnAccount As Boolean = False
Public Sub PostInterest()
' Add code to calculate the interest for this account.
End Sub
ReadOnly Property Balance() As Decimal
Get
' Return the available balance.
Return AccountBalance
End Get
End Property
End Class

Class CheckingAccount
Inherits BankAccount
Sub ProcessCheck()
' Add code to process a check drawn on this account.
End Sub
End Class

Para obtener más información sobre herencias, consulte Fundamentos de la herencia.


Miembros compartidos
De forma predeterminada, los datos de clase se especifican para cada instancia de la clase, pero en ocasiones puede ser
deseable compartir un solo elemento de datos entre todos los objetos creados a partir de una clase. En casos como éste, utilice
el modificador Shared para hacer que una variable comparta el mismo valor en todas las instancias de una clase (los
miembros Shared a veces se llaman "miembros estáticos" en otros lenguajes de programación). Los métodos compartidos
pueden llamarse directamente mediante un nombre de clase sin necesidad de crear previamente una instancia de la clase.
Para obtener más información acerca de miembros compartidos, consulte Miembros compartidos en Visual Basic.
Sombrear
Las clases derivadas pueden utilizar la palabra clave Shadows para declarar un miembro con el mismo nombre que un
miembro heredado. El tipo de datos de los miembros sombreados no es necesario que sea el mismo que el del miembro que
se sombrea. Por ejemplo, una propiedad puede sombrear una variable de tipo Integer.
Para obtener más información acerca de miembros compartidos, consulte Sombrear en Visual Basic.
Vea también
Referencia
Shadows
Shared (Visual Basic)
Conceptos
Estructuras y clases
Fundamentos de la herencia
Miembros compartidos en Visual Basic
Sombrear en Visual Basic
Otros recursos
Crear y utilizar objetos
Herencia en Visual Basic
Conceptos del lenguaje Visual Basic

Tutorial: Definir clases


Este tutorial muestra cómo definir clases que se pueden utilizar luego para crear objetos. También muestra cómo agregar
propiedades y métodos a las clases nuevas, e indica cómo inicializar un objeto.
Nota
Los cuadros de diálogo y comandos de menú que se ven pueden diferir de los descritos en la Ayuda, dependiendo de los val
ores de configuración o de edición activos. Para cambiar la configuración, elija la opción Importar y exportar configuracio
nes en el menú Herramientas. Para obtener más información, vea Valores de configuración de Visual Studio.

Para definir una clase


1. Cree un proyecto haciendo clic en Nuevo proyecto en el menú Archivo. Aparecerá el cuadro de diálogo Nuevo
proyecto.
2. Seleccione Aplicación para Windows de la lista de plantillas del proyecto de Visual Basic para mostrar el nuevo proyecto.
3. Agregue una clase nueva al proyecto haciendo clic en Agregar clase en el menú Proyecto. Aparecerá el cuadro de
diálogo Agregar nuevo elemento.
4. Seleccione la plantilla Clase.
5. Asigne a la nueva clase el nombre UserNameInfo.vb y, a continuación, haga clic en Agregar para mostrar el código de la
nueva clase.
VB
Public Class UserNameInfo
End Class

Nota
Puede utilizar el Editor de código de Visual Basic para agregar una clase al formulario de inicio escribiendo la palabra
clave Class seguida del nombre de la clase nueva. El Editor de código proporciona la instrucción End Class correspo
ndiente.

6. Defina un campo privado para la clase ubicando el siguiente código entre las instrucciones Class y End Class:
VB
Private userNameValue As String

Declarar el campo como Private quiere decir que sólo se puede utilizar dentro de la clase. Se pueden utilizar
modificadores de acceso más amplio, por ejemplo Public, para hacer que los campos sean accesibles desde fuera de la
clase. Para obtener más información, vea Niveles de acceso en Visual Basic.
7. Defina una propiedad para la clase agregando el código siguiente:
VB
Public Property UserName() As String
Get
' Gets the property value.
Return userNameValue
End Get
Set(ByVal Value As String)
' Sets the property value.
userNameValue = Value
End Set
End Property

8. Defina un método para la clase agregando el código siguiente:


VB
Public Sub Capitalize()
' Capitalize the value of the property.
userNameValue = UCase(userNameValue)
End Sub

9. Defina un constructor parametrizado para la clase nueva agregando un procedimiento denominado Sub New:

VB
Public Sub New(ByVal UserName As String)
' Set the property value.
Me.UserName = UserName
End Sub

Cuando se crea un objeto basado en esta clase, se llama al constructor Sub New automáticamente. Este constructor
establece el valor del campo que contiene el nombre de usuario.
Para crear un botón que pruebe la clase
1. Cambie el formulario de inicio al modo de diseño haciendo clic con el botón secundario del mouse (ratón) en su nombre
en el Explorador de soluciones y, a continuación, haga clic en Diseñador de vistas. El nombre predeterminado del
formulario de inicio para los proyectos de aplicación para Windows es Form1.vb. Aparecerá el formulario principal.
2. Agregue un botón al formulario principal y haga doble clic en él para mostrar el código del controlador de eventos
Button1_Click. Agregue el código siguiente para llamar al procedimiento de prueba:

VB
' Create an instance of the class.
Dim user As New UserNameInfo("Moore, Bobby")
' Capitalize the value of the property.
user.Capitalize()
' Display the value of the property.
MsgBox("The original UserName is: " & user.UserName)
' Change the value of the property.
user.UserName = "Worden, Joe"
' Redisplay the value of the property.
MsgBox("The new UserName is: " & user.UserName)

Para ejecutar la aplicación


1. Presione F5 para ejecutar la aplicación. Llame al procedimiento de prueba haciendo clic en el botón del formulario.
Muestra un mensaje que indica que el UserName original es "MOORE, BOBBY", porque el procedimiento llamó al método
Capitalize del objeto.

2. Haga clic en Aceptar para descartar el cuadro de mensaje. El procedimiento Button1 Click cambia el valor de la
propiedad UserName y muestra un mensaje que indica que el nuevo valor de UserName es "Worden, Joe."
Vea también
Tareas
Cómo: Agregar eventos a una clase
Referencia
Imports (Instrucción)
Conceptos
Clases y módulos
Otros recursos
Descripción de las clases
Propiedades, campos y métodos de clases
Conceptos del lenguaje Visual Basic

Clases y módulos
Tanto las clases como los módulos son tipos de referencia que encapsulan los elementos definidos en ellos, pero difieren en la
forma en que se realiza el acceso a los elementos desde otros procedimientos.
Diferencias entre clases y módulos
La diferencia principal entre clases y módulos consiste en que pueden crearse instancias de clases como objetos pero no de
módulos. Como sólo existe una copia de los datos de un módulo estándar, cuando una parte del programa cambia una
variable pública en un módulo estándar, cualquier otra parte del programa obtendrá el mismo valor si lee luego esa variable.
En comparación, los datos de objeto existen individualmente para cada objeto con instancias. Otra distinción es que, a
diferencia de los módulos estándar, las clases pueden implementar interfaces.
Nota
Cuando el modificador Shared se aplica a un miembro de clase, está asociado con la propia clase en lugar de con una instan
cia determinada de la clase. Se tiene acceso directo al miembro mediante el nombre de clase, de la misma manera que se tie
ne acceso a los miembros de módulos. Para obtener más información acerca de miembros compartidos, consulte
Miembros compartidos en Visual Basic.

Las clases y los módulos también emplean ámbitos diferentes para sus miembros. Los miembros definidos dentro de una
clase tienen el ámbito de una instancia específica de la clase y sólo existen mientras dure el objeto. Para tener acceso a los
miembros de clases desde el exterior de una clase, debe utilizar los nombres completos en el formato de Object.Member.
Por otro lado, los miembros declarados dentro de un módulo son de manera predeterminada accesibles públicamente y se
puede obtener acceso a ellos mediante cualquier código que tenga acceso al módulo. Esto significa que las variables en un
módulo estándar son de hecho variables globales porque son visibles desde cualquier parte del proyecto y existen durante
toda la vida útil del programa.
Vea también
Referencia
Shared (Visual Basic)
Conceptos
Estructuras y clases
Miembros compartidos en Visual Basic
Otros recursos
Descripción de las clases
Conceptos del lenguaje Visual Basic

Duración de los objetos: cómo se crean y destruyen


Una instancia de una clase (un objeto) se crea mediante la palabra clave New. A menudo hay que realizar tareas de
inicialización en los objetos nuevos antes de utilizarlos. Entre las tareas de inicialización comunes se incluyen abrir archivos,
conectar con bases de datos y leer valores de claves del Registro. Microsoft Visual Basic 2005 controla la inicialización de
objetos nuevos mediante procedimientos denominados constructores (métodos especiales que proporcionan control sobre la
inicialización).
Common Language Runtime (CLR) libera un objeto cuando éste ha salido del ámbito. Visual Basic 2005 controla la liberación
de recursos del sistema mediante recursos denominados destructores. Juntos, los constructores y destructores admiten la
creación de bibliotecas de clases robustas y predecibles.
Sub New y Sub Finalize
Los procedimientos Sub New y Sub Finalize de Visual Basic 2005 inicializan y destruyen objetos; reemplazan a los métodos
Class_Initialize y Class_Terminate que se utilizaban en Visual Basic 6.0 y versiones anteriores. A diferencia de
Class_Initialize, el constructor Sub New sólo se puede ejecutar una vez cuando se crea una clase. Sólo se le puede llamar
explícitamente desde la primera línea de código de otro constructor en la misma clase o en una clase derivada. Además, el
código del método Sub New siempre se ejecuta antes que cualquier otro código de una clase. Visual Basic 2005 crea
implícitamente un constructor Sub New en tiempo de ejecución si no se define explícitamente un procedimiento Sub New
para una clase.
Antes de liberar objetos, CLR llama automáticamente al método Finalize para los objetos que definen un procedimiento Sub
Finalize. El método Finalize puede contener código que es necesario ejecutar inmediatamente antes de destruir un objeto,
por ejemplo el código para cerrar archivos y guardar información de estado. Puesto que se produce una ligera disminución del
rendimiento al ejecutar Sub Finalize, este método sólo debe definirse cuando sea necesario liberar objetos explícitamente.
Nota
El recolector de elementos no utilizados de CLR no se deshace de los objetos no administrados (ni puede eliminarlos), que so
n aquellos que el sistema operativo ejecuta directamente, fuera del entorno de CLR. Esto se debe a que hay que deshacerse d
e los objetos no administrados diferentes de maneras distintas. Esa información no está asociada directamente al objeto no a
dministrado; se debe buscar en la documentación del objeto. Una clase que utiliza objetos no administrados debe deshacerse
de ellos en su método Finalize.

El destructor Finalize es un método protegido al que sólo se puede llamar desde la clase a la que pertenece o desde clases
derivadas. El sistema llama automáticamente a Finalize cuando se destruye un objeto, por lo que no se debe llamar
explícitamente a Finalize desde fuera de una implementación de su clase derivada.
A diferencia de Class_Terminate, que se ejecuta en cuanto un objeto se establece en Nothing, normalmente hay un retardo
entre el momento en que un objeto pierde el ámbito y el momento en que Visual Basic 2005 llama al destructor Finalize.
Visual Basic 2005 admite un segundo tipo de destructor, Dispose, al que se puede llamar explícitamente en cualquier momento
para liberar recursos de forma inmediata.
Nota
Un destructor Finalize no debería producir excepciones porque la aplicación no puede controlarlas y pueden hacer que la ap
licación finalice.

Interfaz IDisposable
A menudo, las instancias de clase controlan los recursos que no administra CLR, como identificadores de Windows y
conexiones de bases de datos. Estos recursos se deben desechar en el método Finalize de la clase, a fin de liberarlos cuando el
recolector de elementos no utilizados destruya el objeto. Sin embargo, el recolector de elementos no utilizados sólo destruye
los objetos cuando CLR requiere más memoria libre. Esto significa que los recursos pueden no liberarse hasta mucho después
de que el objeto salga del ámbito.
Para complementar la recolección de elementos no utilizados, las clases pueden proporcionar un mecanismo que administra
activamente los recursos del sistema si implementan la interfaz IDisposable. IDisposable tiene un método, Dispose, al que los
clientes deben llamar cuando terminan de utilizar un objeto. Se puede utilizar el método Dispose para liberar recursos
inmediatamente y realizar tareas como cerrar archivos y conexiones de bases de datos. A diferencia del destructor Finalize, el
método Dispose no se llama automáticamente. Los clientes de una clase deben llamar explícitamente a Dispose cuando se
desea liberar recursos inmediatamente.
Implementar IDisposable
Una clase que implementa la interfaz IDisposable debería incluir estas secciones de código:
Un campo para mantener el seguimiento de si se ha desechado el objeto:

Protected disposed As Boolean = False

Una sobrecarga de Dispose que libera los recursos de la clase. Los métodos Dispose y Finalize de la clase base deben
llamar a este método:

Protected Overridable Sub Dispose(ByVal disposing As Boolean)


If Not Me.disposed Then
If disposing Then
' Insert code to free unmanaged resources.
End If
' Insert code to free shared resources.
End If
Me.disposed = True
End Sub

Una implementación de Dispose que contiene sólo el código siguiente:

Public Sub Dispose() Implements IDisposable.Dispose


Dispose(True)
GC.SuppressFinalize(Me)
End Sub

Un reemplazo del método Finalize que contiene sólo el código siguiente:

Protected Overrides Sub Finalize()


Dispose(False)
MyBase.Finalize()
End Sub

Derivar de una clase que implementa IDisposable


Una clase derivada de una clase base que implementa la interfaz IDisposable no necesita reemplazar ninguno de los métodos
base a menos que utilice recursos adicionales que se deban desechar. En esa situación, la clase derivada debería reemplazar el
método Dispose(disposing) de la clase base para desechar los recursos de la clase derivada. Este reemplazo debe llamar al
método Dispose(disposing) de la clase base.

Protected Overrides Sub Dispose(ByVal disposing As Boolean)


If Not Me.disposed Then
If disposing Then
' Insert code to free unmanaged resources.
End If
' Insert code to free shared resources.
End If
MyBase.Dispose(disposing)
End Sub

Una clase derivada no debería reemplazar los métodos Dispose y Finalize de la clase base. Cuando se llama a estos métodos
desde una instancia de una clase derivada, la implementación de estos métodos en la clase base llama al reemplazo del
método Dispose(disposing) en la clase derivada.
Visualización
El diagrama siguiente muestra qué métodos se heredan y qué métodos se reemplazan en la clase derivada.
Cuando se sigue el modelo DisposeFinalize, los recursos de la clase derivada y de la clase base se desechan correctamente. El
diagrama siguiente muestra a qué métodos se llaman cuando las clases se desechan y finalizan.

Recolección de elementos no utilizados y el destructor Finalize


.NET Framework utiliza el sistema de recolección de elementos no utilizados por seguimiento de referencias para liberar
periódicamente los recursos no utilizados. Visual Basic 6.0 y las versiones anteriores utilizaban un sistema diferente
denominado recuento de referencias para administrar los recursos. Aunque ambos sistemas realizan la misma función
automáticamente, existen algunas diferencias importantes.
CLR destruye periódicamente objetos cuando el sistema determina que ya no son necesarios. Los objetos se liberan con mayor
rapidez cuando los recursos del sistema son escasos y con menor frecuencia en caso contrario. El retraso que se produce entre
el momento en que un objeto pierde su ámbito y el momento en que CLR lo libera significa que, a diferencia de lo que ocurre
con los objetos en Visual Basic 6.0 y versiones anteriores, no se puede determinar exactamente cuándo se destruirá el objeto.
En tal situación, se dice que los objetos tienen duración no determinista. En la mayoría de los casos, la duración no
determinista no cambia la forma de escribir las aplicaciones, siempre que se recuerde que el destructor Finalize puede no
ejecutarse inmediatamente cuando un objeto pierde su ámbito.
Otra diferencia entre los sistemas de recolección de elementos no utilizados tiene que ver con el uso de Nothing. Para
aprovechar el recuento de referencias de Visual Basic 6.0 y versiones anteriores, los programadores a veces asignaban
Nothing a variables de objeto para liberar las referencias que esas variables almacenaban. Si la variable almacenaba la última
referencia al objeto, los recursos del objeto se liberaban inmediatamente. En Visual Basic 2005, aunque puede haber casos en
los que este procedimiento sea aún útil, su realización nunca ocasionará que el objeto de referencia libere sus recursos
inmediatamente. Para liberar inmediatamente los recursos, utilice el método Dispose del objeto, si está disponible. La única
vez en que debe establecerse una variable en Nothing es cuando su duración sea larga con relación al tiempo que necesita el
recolector de elementos no utilizados para detectar objetos huérfanos.
Vea también
Tareas
Cómo: Implementar el modelo DisposeFinalize (Visual Basic)
Referencia
Utilizar constructores y destructores
New (Visual Basic)
Nothing (Visual Basic)
Dispose
Conceptos
Inicialización y finalización de componentes
Métodos de finalización y destructores
Otros recursos
Cambios en el lenguaje para usuarios de Visual Basic 6.0
Conceptos del lenguaje Visual Basic

Cómo: Implementar el modelo DisposeFinalize (Visual Basic)


El modelo DisposeFinalize garantiza que se liberan los recursos cuando ya no se necesita el objeto.
Ejemplo
La clase ResourceClass del ejemplo siguiente utiliza recursos administrados y no administrados y, a continuación, utiliza el
modelo DisposeFinalize para desecharlos correctamente. Los recursos y sus funciones son:
La implementación del método Dispose, que permite a los usuarios de la clase desechar las instancias de clase. Este
método llama a Dispose(True) para desechar los recursos del objeto y, a continuación, llama a SuppressFinalize para
evitar que el código de finalización se ejecute una segunda vez.
El reemplazo del método base Finalize, que permite al recolector de elementos no utilizados de Common Language
Runtime (CLR) desechar las instancias de clase. Este método llama a Dispose(False) para desechar los recursos del
objeto. Observe que si se llama a Dispose previamente para el objeto, su llamada a SuppressFinalize evitaría que el
recolector de elementos no utilizados llamase al método Finalize.
La sobrecarga del método Dispose, que lleva a cabo el trabajo de eliminación. Toma un parámetro de tipo Boolean,
disposing, que indica si el código ha iniciado la eliminación del objeto. Cuando desecha un objeto, también se deben
desechar todos sus recursos. Cuando el recolector de elementos no utilizados de CLR elimina un objeto, sólo deben
eliminarse los recursos no administrados; el recolector elimina automáticamente los recursos administrados cuando
resulta necesario.
Para obtener más información, vea Duración de los objetos: cómo se crean y destruyen.
VB
Public Class ResourceClass
Implements IDisposable

Private managedResource As System.ComponentModel.Component


Private unmanagedResource As IntPtr
Protected disposed As Boolean = False

Public Sub New()


' Insert appropriate constructor code here.
End Sub

Protected Overridable Overloads Sub Dispose( _


ByVal disposing As Boolean)
If Not Me.disposed Then
If disposing Then
managedResource.Dispose()
End If
' Add code here to release the unmanaged resource.
unmanagedResource = IntPtr.Zero
' Note that this is not thread safe.
End If
Me.disposed = True
End Sub
Public Sub AnyOtherMethods()
If Me.disposed Then
Throw New ObjectDisposedException(Me.GetType().ToString, _
"This object has been disposed.")
End If
End Sub

#Region " IDisposable Support "


' Do not change or add Overridable to these methods.
' Put cleanup code in Dispose(ByVal disposing As Boolean).
Public Overloads Sub Dispose() Implements IDisposable.Dispose
Dispose(True)
GC.SuppressFinalize(Me)
End Sub
Protected Overrides Sub Finalize()
Dispose(False)
MyBase.Finalize()
End Sub
#End Region
End Class

Este ejemplo de código también está disponible como fragmento de código de IntelliSense. En el selector de fragmentos de
código, se encuentra en Lenguaje Visual Basic. Para obtener más información, vea
Cómo: Insertar fragmentos de código en el código (Visual Basic).
Compilar el código
Para este ejemplo se necesita:
Obtener acceso a los miembros de los espacios de nombres System y System.ComponentModel. Agregar una
instrucción Imports si no se incluyen nombres de miembro completos en el código. Para obtener más información, vea
Imports (Instrucción).
Estos cambios se deben realizar en el código:
Reemplace ResourceClass con el nombre de la clase que implementa IDisposable.
Utilice la comprobación de AnyOtherMethods en cualquier método que utilice recursos que se pueden haber desechado.
Reemplace la declaración managedResource con declaraciones de cualquier objeto administrado en su clase que deba ser
desechado. Si una clase implementa IDisposable o tiene un método Close, probablemente necesita ser desechado. En el
método Dispose, cierre o deseche estos objetos.
Reemplace la declaración unManagedResource con declaraciones de objetos no administrados en su clase que deban ser
desechados. El método para desechar estos objetos depende de cómo se define el objeto. Para obtener detalles, consulte
la documentación sobre el objeto.
Programación eficaz
Cuando se ha llamado al método Dispose, los objetos contenidos en su colección no serán válidos. Debería probar el campo
disposed antes de realizar cualquier operación en su objeto. Para obtener un ejemplo, vea el método AnyOtherMethods en el
ejemplo de código.
Vea también
Referencia
IDisposable
Conceptos
Implementar un método Dispose
Otros recursos
Recolección de elementos no utilizados
Conceptos del lenguaje Visual Basic

Utilizar constructores y destructores


Los constructores y destructores controlan la creación y destrucción de objetos.
Constructores
Para crear un constructor para una clase, cree un procedimiento denominado Sub New en cualquier parte de la definición de
clase. Para crear un constructor parametrizado, especifique los nombres y los tipos de datos de los argumentos de Sub New
tal como lo haría en cualquier otro procedimiento, como en el código siguiente:
VB
Sub New(ByVal s As String)

Con frecuencia, los constructores están sobrecargados, como en el código siguiente:


VB
Sub New(ByVal s As String, i As Integer)

Cuando se define una clase derivada de otra, la primera línea del constructor debe ser una llamada al constructor de la clase
base, a no ser que ésta tenga un constructor accesible que no requiera parámetros. Por ejemplo, para llamar a la clase base
que contiene el constructor anterior, sería MyBase.New(s). En caso contrario, MyBase.New es opcional y el tiempo de ejecución
de Visual Basic la llama implícitamente.
Después de escribir código para llamar al constructor del objeto primario, puede agregar cualquier código de inicialización
adicional en el procedimiento Sub New. Sub New puede aceptar argumentos cuando se lo llama como un constructor con
parámetros. Estos parámetros se pasan desde el procedimiento que llama al constructor; por ejemplo, Dim AnObject As New
ThisClass(X).

Destructores
El código siguiente muestra cómo utilizar Dispose y Finalize para liberar los recursos de una clase base.
Nota
Debería seguir las instrucciones para implementar IDisposable incluidas en
Duración de los objetos: cómo se crean y destruyen.

VB
' Design pattern for a base class.
Public Class Base
Implements IDisposable

' Keep track of when the object is disposed.


Protected disposed As Boolean = False
' This method disposes the base object's resources.
Protected Overridable Sub Dispose(ByVal disposing As Boolean)
If Not Me.disposed Then
If disposing Then
' Insert code to free unmanaged resources.
End If
' Insert code to free shared resources.
End If
Me.disposed = True
End Sub
#Region " IDisposable Support "
' Do not change or add Overridable to these methods.
' Put cleanup code in Dispose(ByVal disposing As Boolean).
Public Sub Dispose() Implements IDisposable.Dispose
Dispose(True)
GC.SuppressFinalize(Me)
End Sub
Protected Overrides Sub Finalize()
Dispose(False)
MyBase.Finalize()
End Sub
#End Region
End Class

El código siguiente muestra cómo utilizar Dispose y Finalize para liberar los recursos de una clase derivada.
VB
' Design pattern for a derived class.
Public Class Derived
Inherits Base

' This method disposes the derived object's resources.


Protected Overrides Sub Dispose(ByVal disposing As Boolean)
If Not Me.disposed Then
If disposing Then
' Insert code to free unmanaged resources.
End If
' Insert code to free shared resources.
End If
MyBase.Dispose(disposing)
End Sub

' The derived class does not have a Finalize method


' or a Dispose method with parameters because it inherits
' them from the base class.
End Class

El código siguiente muestra un modelo de diseño común para el destructor Dispose, utilizando un bloque Using y un bloque
Try...Finally equivalente.
VB
Sub DemonstrateUsing()
Using d As New Derived
' Code to use the Derived object goes here.
End Using
End Sub

Sub DemonstrateTry()
Dim d As Derived = Nothing
Try
d = New Derived
' Code to use the Derived object goes here.
Finally
' Call the Dispose method when done, even if there is an exception.
If Not d Is Nothing Then
d.Dispose()
End If
End Try
End Sub

En el siguiente ejemplo se crea un objeto mediante un constructor con parámetros y se llama a los destructores cuando el
objeto deja de ser necesario.
Nota
Aunque este ejemplo usa Collect para mostrar a qué métodos llama el recolector de elementos no utilizados para eliminar m
étodos, en general es más conveniente dejar que Common Language Runtime (CLR) administre la recolección de elementos
no utilizados.

VB
Sub TestConstructorsAndDestructors()
' Demonstrate how the Using statement calls the Dispose method.
Using AnObject As New ThisClass(6)
' Place statements here that use the object.
MsgBox("The value of ThisProperty after being initialized " & _
" by the constructor is " & AnObject.ThisProperty & ".")
End Using
' Demonstrate how the garbage collector calls the Finalize method.
Dim AnObject2 As New ThisClass(6)
AnObject2 = Nothing
GC.Collect()
End Sub

Public Class BaseClass


Sub New()
MsgBox("BaseClass is initializing with Sub New.")
End Sub

Protected Overrides Sub Finalize()


MsgBox("BaseClass is shutting down with Sub Finalize.")
' Place final cleanup tasks here.
MyBase.Finalize()
End Sub
End Class

Public Class ThisClass


Inherits BaseClass
Implements IDisposable

Sub New(ByVal SomeValue As Integer)


' Call MyBase.New if this is a derived class.
MyBase.New()
MsgBox("ThisClass is initializing with Sub New.")
' Place initialization statements here.
ThisPropertyValue = SomeValue
End Sub

Private ThisPropertyValue As Integer


Property ThisProperty() As Integer
Get
CheckIfDisposed()
ThisProperty = ThisPropertyValue
End Get
Set(ByVal Value As Integer)
CheckIfDisposed()
ThisPropertyValue = Value
End Set
End Property

Protected Overrides Sub Finalize()


MsgBox("ThisClass is shutting down with Sub Finalize.")
Dispose(False)
End Sub

' Do not add Overridable to this method.


Public Overloads Sub Dispose() Implements IDisposable.Dispose
MsgBox("ThisClass is shutting down with Sub Dispose.")
Dispose(True)
GC.SuppressFinalize(Me)
End Sub

Private disposed As Boolean = False


Public Sub CheckIfDisposed()
If Me.disposed Then
Throw New ObjectDisposedException(Me.GetType().ToString, _
"This object has been disposed.")
End If
End Sub

Protected Overridable Overloads Sub Dispose( _


ByVal disposing As Boolean)
MsgBox("ThisClass is shutting down with the Sub Dispose overload.")
' Place final cleanup tasks here.
If Not Me.disposed Then
If disposing Then
' Dispose of any managed resources.
End If
' Dispose of any unmanaged resource.

' Call MyBase.Finalize if this is a derived class,


' and the base class does not implement Dispose.
MyBase.Finalize()
End If
Me.disposed = True
End Sub
End Class

Cuando ejecute este ejemplo, la clase ThisClass llama al constructor Sub New de la clase BaseClass. Una vez que finaliza el
constructor de la clase base, la clase ThisClass ejecuta el resto de instrucciones de Sub New que inicializan un valor para la
propiedad ThisProperty.
Cuando la clase ya no es necesaria, se llama al destructor Dispose en ThisClass.
Este ejemplo muestra lo siguiente:
BaseClass is initializing with Sub New.
ThisClass is initializing with Sub New.
The value of ThisProperty after being initialized by the constructor is 6.
ThisClass is shutting down with Sub Dispose.
ThisClass is shutting down with the Sub Dispose overload.
BaseClass is shutting down with Sub Finalize.
BaseClass is initializing with Sub New.
ThisClass is initializing with Sub New.
ThisClass is shutting down with Sub Finalize.
ThisClass is shutting down with the Sub Dispose overload.
BaseClass is shutting down with Sub Finalize.

Vea también
Referencia
Dispose
Conceptos
Duración de los objetos: cómo se crean y destruyen
Métodos de finalización y destructores
Cómo funcionan los métodos New y Finalize en una jerarquía de clases
Conceptos del lenguaje Visual Basic

Propiedades, campos y métodos de clases


En general, los campos y las propiedades representan información sobre un objeto, mientras que los métodos representan
acciones que un objeto puede realizar.
Los temas siguientes describen los mecanismos para agregar propiedades, campos y métodos a las clases, y abordan
cuestiones relacionadas con estos elementos.
En esta sección
Cómo: Agregar campos y propiedades a una clase
Proporciona información acerca de la declaración de campos y propiedades.
Propiedades y procedimientos de propiedad
Explica cómo funcionan los procedimientos Property y cómo se implementan los tipos de propiedad comunes.
Comparación de procedimientos de propiedades y campos
Ayuda a decidir cuándo deben utilizarse campos para almacenar datos de una clase y cuándo el uso de propiedades es una
opción mejor.
Métodos de una clase
Describe los procedimientos públicos que se agregan a la clase.
Propiedades frente a métodos
Ayuda a decidir si la funcionalidad que se desea se implementa mejor como propiedad o como método.
Propiedades predeterminadas
Describe las propiedades que se utilizan cuando no se define ninguna propiedad específica.
Propiedades y métodos sobrecargados
Describe cómo se definen varias propiedades o métodos que tienen el mismo nombre, pero que funcionan con tipos de
datos diferentes.
Reemplazar propiedades y métodos
Describe la redefinición de una propiedad o método heredados.
Secciones relacionadas
Crear y utilizar objetos
Muestra cómo crear y utilizar instancias de clases.
Eventos en Visual Basic
Muestra cómo declarar y utilizar eventos.
Delegados de Visual Basic
Muestra cómo declarar y utilizar delegados.
Administrar objetos propios con colecciones
Proporciona información sobre el uso de colecciones para almacenar y recuperar objetos.
Conceptos del lenguaje Visual Basic

Cómo: Agregar campos y propiedades a una clase


Se pueden utilizar tanto campos como propiedades para almacenar información en un objeto. Aunque los campos y las
propiedades son muy difíciles de distinguir desde una perspectiva de aplicación de cliente, se declaran de forma diferente en
una clase. Mientras que los campos son simplemente variables públicas que una clase expone, las propiedades utilizan
procedimientos Property para controlar cómo se establecen y devuelven valores.
Para agregar un campo a una clase
Declare una variable pública en la definición de clase, como en el código siguiente:
VB
Class ThisClass
Public ThisField As String
End Class

Para agregar una propiedad a una clase


1. Declare una variable local en la clase para almacenar el valor de la propiedad. Este paso es necesario puesto que las
propiedades no asignan almacenamiento por sí mismas. A fin de proteger sus valores contra la modificación directa, las
variables que se utilizan para almacenar valores de propiedad deben declarase como Private.
2. Escriba modificadores antes de las declaraciones de propiedad, como Public y Shared, según corresponda. Utilice la
palabra clave Property para declarar el nombre de la propiedad y declare el tipo de datos que la propiedad almacena y
devuelve.
3. Defina los procedimientos de propiedad Get y Set dentro de la definición de propiedad. Los procedimientos de
propiedad Get se utilizan para devolver el valor de una propiedad y son aproximadamente equivalentes a las funciones
de sintaxis. No aceptan ningún argumento y se pueden utilizar para devolver el valor de variables local privadas
declaradas dentro de la clase utilizada para almacenar el valor de la propiedad. Los procedimientos de propiedad Set se
utilizan para establecer el valor de una propiedad; tienen un parámetro, llamado normalmente Value, con el mismo tipo
de datos que la propiedad en sí. Cada vez que se cambia el valor de la propiedad, se pasa Value al procedimiento de
propiedad Set, donde se puede validar y almacenar en una variable local.
4. Finalice los procedimientos de propiedad Get y Set con las instrucciones End Get y End Set correspondientes.
5. Finalice el bloque de propiedad con una instrucción End Property.
Nota
Si está trabajando dentro del entorno de desarrollo integrado (IDE) de Visual Studio, puede dirigirlo para crear procedi
mientos de propiedad Get y Set vacíos. Escriba Property PropName As DataType (donde PropName es el nombre de
la propiedad y DataType es un tipo de datos específico, por ejemplo Integer), y los procedimientos de propiedad apare
cen en el Editor de código.

En el siguiente ejemplo se declara una propiedad en una clase:


VB
Class ThisClass
Private m_PropVal As String
Public Property One() As String
Get
' Return the value stored in the local variable.
Return m_PropVal
End Get
Set(ByVal Value As String)
' Store the value in a local variable.
m_PropVal = Value
End Set
End Property
End Class

Cuando se crea una instancia de ThisClass y se establece el valor de la propiedad One, se llama al procedimiento de
propiedad Set y se pasa el valor en el parámetro Value, que se almacena en una variable local denominada m_PropVal.
Cuando se recupera el valor de esta propiedad, se llama al procedimiento de propiedad Get como función y devuelve el
valor almacenado en la variable local m_PropVal.

Vea también
Tareas
Cómo: Agregar eventos a una clase
Referencia
Property (Instrucción)
Public (Visual Basic)
Shared (Visual Basic)
Conceptos
Propiedades y procedimientos de propiedad
Conceptos del lenguaje Visual Basic

Propiedades y procedimientos de propiedad


Se pueden utilizar tanto propiedades como campos para almacenar información en un objeto. Mientras que los campos son
simplemente variables públicas, las propiedades utilizan procedimientos de propiedad para controlar cómo se establecen y
devuelven valores. Los procedimientos de propiedad son bloques de código declarados dentro de las definiciones de
propiedad que puede ejecutar código cuando se establece o recupera el valor de una propiedad.
Visual Basic tiene dos tipos de procedimientos de propiedad: los procedimientos de propiedad Get para recuperar un valor de
una propiedad y los procedimientos de propiedad Set para asignar un valor a una propiedad. Por ejemplo, una propiedad que
almacena el saldo de una cuenta bancaria podría utilizar código en un procedimiento de propiedad Get para notificar el interés
y comprobar comisiones por servicios antes de devolver el saldo disponible. Puede utilizar luego el procedimiento de
propiedad Set para validar el balance y evitar que se actualice incorrectamente. Es decir, los procedimientos de propiedad
permiten a un objeto proteger y validar sus propios datos.
En el siguiente fragmento de código se compara el modo en el que los campos y propiedades validan los valores.
VB
Protected Sub TestFieldsAndProperties()
' Assume, for this example, that the only valid values for
' the field and property are numbers less than 10.
Dim NewClass As New ThisClass

' Test data validation.

' Works because there is no data validation.


NewClass.ThisField = 36
' Will print 36.
MsgBox("ThisField = " & NewClass.ThisField)

' The attempt to set the field to a value greater than 10 will silently fail.
NewClass.ThisProperty = 36
' The next statement will print the old value of 0 instead.
MsgBox("ThisProperty = " & NewClass.ThisProperty)
End Sub

Public Class ThisClass


' Declare a field.
Public ThisField As Integer
' Field used for Property Set operations.
Private thisPropertyValue As Integer = 0
' Declare a property.
Public Property ThisProperty() As Integer
Get
Return thisPropertyValue
End Get
Set(ByVal Value As Integer)
' Only allow Set operation for values less than 10.
If Value < 10 Then thisPropertyValue = Value
End Set
End Property
End Class

El procedimiento TestFieldsAndProperties crea una instancia de la clase, y establece y recupera los valores de los campos y
propiedades. En este ejemplo se asume que los únicos valores válidos son números menores de 10. Dado que no hay forma de
validar los valores asignados a los campos, es posible establecer en el campo el valor 36. No obstante, la propiedad solamente
realiza asignaciones para números menores de 10, de modo que el intento de establecer 36 en el campo no se tiene en cuenta.
Propiedades de sólo lectura y escritura
La mayoría de las propiedades tienen procedimientos de propiedad Get y Set que puede utilizar para leer y modificar el valor
que almacenan. No obstante, puede utilizar los modificadores ReadOnly y WriteOnly para restringir la modificación o la
lectura de las propiedades.
Las propiedades de sólo lectura no pueden tener procedimientos de propiedad Set; estas propiedades son útiles para
elementos que desea exponer, pero cuya modificación no desea permitir. Por ejemplo, podría utilizar una propiedad de sólo
lectura para proporcionar la velocidad del procesador de un equipo.
Las propiedades de sólo escritura no pueden tener procedimientos de propiedad Get y son útiles para configurar objetos con
datos que no deben o no se pueden almacenar en el objeto. Por ejemplo, se puede utilizar una propiedad de sólo escritura
para tomar una contraseña y cambiar el estado del objeto sin almacenar la contraseña.
Nota
Las versiones anteriores de Visual Basic admiten procedimientos de propiedad Let que se utilizan al asignar objetos a las pro
piedades. Visual Basic elimina la necesidad de procedimientos de propiedad Let porque la asignación de objetos se controla
como cualquier otro tipo de asignación.

Vea también
Referencia
Get (Instrucción)
Instrucción Set (Visual Basic)
ReadOnly (Visual Basic)
WriteOnly
Conceptos
Procedimientos de propiedad
Comparación de procedimientos de propiedades y campos
Conceptos del lenguaje Visual Basic

Comparación de procedimientos de propiedades y campos


Las propiedades y los campos ambos almacenan y recuperan información en un objeto. Dada su similitud, resulta difícil
determinar cuál es la mejor opción de programación en casos concretos.
Utilice procedimientos de propiedad cuando:
Necesite controlar cuándo y cómo se establece o recupera un valor.
La propiedad tenga un conjunto de valores bien definidos que no necesiten validación.
El establecimiento del valor genera algún cambio perceptible en el estado del objeto, como una propiedad IsVisible.
El establecimiento de la propiedad ocasione cambios en otras variables internas o en los valores de otras propiedades.
Deban ejecutarse un conjunto de pasos antes de poder establecer o recuperar la propiedad.
Utilice campos cuando:
El valor sea de un tipo de autovalidación. Por ejemplo, si un valor distinto de True o False se asigna a una variable
Boolean, se produce un error o una conversión de datos automática.
Sea válido cualquier valor del intervalo admitido por el tipo de datos. Esto es verdadero en muchas propiedades de tipo
Single o Double.
La propiedad sea un tipo de datos String y no existan restricciones en cuanto al tamaño o al valor de la cadena.
Vea también
Conceptos
Clases y módulos
Propiedades y procedimientos de propiedad
Tipos de datos en Visual Basic
Conceptos del lenguaje Visual Basic

Métodos de una clase


Los métodos de una clase son simplemente procedimientos Sub o Function declarados dentro de la clase. Por ejemplo, para
crear un método Withdrawal para una clase denominada Account, se podría agregar la función Public al módulo de la clase:
VB
Public Function WithDrawal(ByVal Amount As Decimal, _
ByVal TransactionCode As Byte) As Double
' Add code here to perform the withdrawal,
' return a transaction code,
' or to raise an overdraft error.
End Function

Métodos compartidos
Los métodos compartidos pueden llamarse directamente desde la clase sin necesidad de crear previamente una instancia de la
clase. Los métodos compartidos son útiles cuando se desea asociar un método con una instancia específica de una clase. Los
métodos compartidos no se pueden declarar mediante los modificadores Overridable, NotOverridable o MustOverride.
Los métodos que se declaran en módulos están compartidos implícitamente y no pueden utilizar el modificador Shared
explícitamente.
Ejemplo
VB
Class ShareClass
Shared Sub SharedSub()
MsgBox("Shared method.")
End Sub
End Class

Sub Test()
' Call the method.
ShareClass.SharedSub()
End Sub

Protección de los detalles de la implementación


Los procedimientos de utilidades empleados internamente por una clase se deben declarar como Private, Protected o
Friend. La restricción de la accesibilidad de tales métodos protege a los desarrolladores que utilizan sus objetos, ya que le
permite realizar futuros cambios sin que afecte al código que utiliza los objetos.
La protección de los detalles de la implementación de un objeto es otra faceta de la encapsulación. La encapsulación permite
mejorar el rendimiento de los métodos o cambiar totalmente la forma de implementar un método, sin necesidad de modificar
el código que utiliza el método.
Vea también
Tareas
Cómo: Agregar eventos a una clase
Referencia
Overridable
NotOverridable
MustOverride
Shared (Visual Basic)
Public (Visual Basic)
Private (Visual Basic)
Protected (Visual Basic)
Friend (Visual Basic)
Conceptos
Propiedades frente a métodos
Miembros compartidos en Visual Basic
Conceptos del lenguaje Visual Basic

Propiedades frente a métodos


Las propiedades y los métodos son similares en que ambos se implementan como procedimientos que aceptan argumentos.
En general, las propiedades almacenan datos para un objeto, y los métodos son acciones cuya realización puede pedirse a un
objeto. Algunas características de objeto son claramente propiedades, como Name, mientras que otras son evidentemente
métodos, como Move y Show. En otros casos, no resulta obvio qué miembros de una clase deberían ser propiedades y cuáles
deberían ser métodos. Por ejemplo, el método Item de una clase de colección almacena y recupera datos, y puede
implementarse como una propiedad indizada. Por otra parte, también resulta razonable implementar Item como un método.
Sintaxis de propiedades frente a sintaxis de métodos
Una forma de decidir cómo implementar un miembro de una clase consiste en considerar cómo se desea utilizar. Aunque la
sintaxis para recuperar información de una propiedad parametrizada es casi idéntica a la utilizada con un método
implementado como función, la sintaxis para modificar tal valor es algo diferente. Por ejemplo, si implementa el miembro de
una clase como propiedad, la sintaxis siguiente describe cómo debería utilizarse:
ThisObject.ThisProperty(Index) = NewValue
Si implementa el miembro de la clase como método, el valor que se modifica debe ser un argumento. El fragmento de código
siguiente describe el uso de sintaxis equivalente:
ThisObject.ThisProperty(Index, NewValue)
Mensajes de error
Otro factor a considerar a la hora de elegir cómo implementar un miembro de una clase es qué tipo de mensajes se generarán
cuando la clase se utilice incorrectamente. Si alguien intenta accidentalmente asignar un valor a una propiedad de sólo lectura,
el mensaje de error devuelto es distinto del que se obtendría en respuesta a una llamada similar a un método. Los miembros
de una clase implementados correctamente devuelven mensajes de error que son más fáciles de interpretar.
Vea también
Tareas
Cómo: Agregar campos y propiedades a una clase
Referencia
Item (Propiedad, objeto Collection)
Conceptos
Métodos de una clase
Conceptos del lenguaje Visual Basic

Propiedades predeterminadas
Una propiedad que acepta argumentos puede declararse como propiedad predeterminada de una clase. Una propiedad
predeterminada es aquella que utiliza Visual Basic cuando no se haya asignado una propiedad específica para un objeto. Las
propiedades predeterminadas son útiles porque permiten que el código fuente sea más compacto al omitirse nombres de
propiedades que se utilizan frecuentemente.
Las mejores candidatas a propiedades predeterminadas son las propiedades que aceptan parámetros y que se utilizarán con
más frecuencia. Por ejemplo, la propiedad Item es una buena opción como propiedad predeterminada de una clase de
colección, ya que se usa con frecuencia.
Las siguientes reglas se aplican a las propiedades predeterminadas:
Un tipo sólo puede tener una propiedad predeterminada, incluyendo las propiedades heredadas de una clase base. Hay
una excepción para esta regla. Una propiedad predeterminada definida en una clase base puede ser sombreada por otra
propiedad predeterminada de una clase derivada.
Si una propiedad predeterminada de una clase base es sombreada por una propiedad no predeterminada de una clase
derivada, la propiedad predeterminada continúa permitiendo el acceso mediante la sintaxis de propiedad
predeterminada.
Una propiedad predeterminada no puede ser de tipo Shared o Private.
Si una propiedad sobrecargada es una propiedad predeterminada, también lo serán todas las demás propiedades
sobrecargadas que tengan el mismo nombre.
Las propiedades predeterminadas deben aceptar al menos un argumento.
Ejemplo
El siguiente ejemplo declara una propiedad que contiene una matriz de cadenas como propiedad predeterminada de una clase:
VB
Class Class2
' Define a local variable to store the property value.
Private PropertyValues As String()
' Define the default property.
Default Public Property Prop1(ByVal Index As Integer) As String
Get
Return PropertyValues(Index)
End Get
Set(ByVal Value As String)
If PropertyValues Is Nothing Then
' The array contains Nothing when first accessed.
ReDim PropertyValues(0)
Else
' Re-dimension the array to hold the new element.
ReDim Preserve PropertyValues(UBound(PropertyValues) + 1)
End If
PropertyValues(Index) = Value
End Set
End Property
End Class

Acceso a propiedades predeterminadas


El acceso a propiedades predeterminadas puede realizarse mediante sintaxis abreviada. Por ejemplo, en el fragmento de
código siguiente se utiliza sintaxis estándar y sintaxis predeterminada:
VB
Dim C As New Class2
' The first two lines of code access a property the standard way.
' Property assignment.
C.Prop1(0) = "Value One"
' Property retrieval.
MsgBox(C.Prop1(0))
' The following two lines of code use default property syntax.

' Property assignment.


C(1) = "Value Two"
' Property retrieval.
MsgBox(C(1))

Vea también
Referencia
Default (Visual Basic)
Conceptos
Recomendación de actualización: resolver las propiedades predeterminadas sin parámetros
Cambios en las propiedades predeterminadas para usuarios de Visual Basic 6.0
Conceptos del lenguaje Visual Basic

Propiedades y métodos sobrecargados


La sobrecarga consiste en crear más de un procedimiento, constructor de instancia o propiedad en una clase con el mismo
nombre y distintos tipos de argumento.
Uso de la sobrecarga
La sobrecarga es especialmente útil cuando un modelo de objeto exige el uso de nombres idénticos para procedimientos que
operan en diferentes tipos de datos. Por ejemplo, una clase que puede mostrar diferentes tipos de datos podría tener
procedimientos Display como los siguientes:
VB
Overloads Sub Display(ByVal theChar As Char)
' Add code that displays Char data.
End Sub
Overloads Sub Display(ByVal theInteger As Integer)
' Add code that displays Integer data.
End Sub
Overloads Sub Display(ByVal theDouble As Double)
' Add code that displays Double data.
End Sub

Sin sobrecarga, sería necesario crear distintos nombres para cada procedimiento, aunque realicen el mismo cometido, como se
muestra a continuación:
VB
Sub DisplayChar(ByVal theChar As Char)
' Add code that displays Char data.
End Sub
Sub DisplayInt(ByVal theInteger As Integer)
' Add code that displays Integer data.
End Sub
Sub DisplayDouble(ByVal theDouble As Double)
' Add code that displays Double data.
End Sub

La sobrecarga facilita el uso de propiedades o métodos, puesto que ofrece una selección de tipos de datos que se pueden
utilizar. Por ejemplo, se pude llamar al método sobrecargado Display descrito anteriormente con cualquiera de las siguientes
líneas de código:
VB
' Call Display with a literal of type Char.
Display("9"c)
' Call Display with a literal of type Integer.
Display(9)
' Call Display with a literal of type Double.
Display(9.9R)

En tiempo de ejecución, Visual Basic llama al procedimiento correcto basándose en los tipos de datos de los parámetros que se
han especificado.
Nota
La sobrecarga, el reemplazo y el sombreado son conceptos similares que pueden confundirse fácilmente. Para obtener más i
nformación, consulte Introducción a los objetos en Visual Basic.

Reglas de sobrecarga
Es posible crear un miembro sobrecargado para una clase agregando dos o más propiedades o métodos con el mismo
Es posible crear un miembro sobrecargado para una clase agregando dos o más propiedades o métodos con el mismo
nombre. A excepción de los miembros derivados sobrecargados, cada miembro sobrecargado debe tener distintas listas de
parámetros, y los elementos que a continuación se enumeran, no se pueden utilizar como características diferenciadoras al
sobrecargar una propiedad o un procedimiento:
Modificadores, como por ejemplo ByVal o ByRef, que se aplican a un miembro o parámetros de un miembro.
Nombres de parámetros
Tipos de valores devueltos de procedimientos
La palabra clave Overloads es opcional en la sobrecarga, aunque si algún miembro sobrecargado la utiliza, todos los demás
miembros sobrecargados con el mismo nombre deben especificarla también.
Las clases derivadas pueden sobrecargar miembros heredados con miembros que tengan idénticos parámetros y tipos de
parámetros, un proceso denominado sombrear por nombre y firma. Si se utiliza la palabra clave Overloads al sombrear por
nombre y firma, se utilizará la implementación de la clase derivada del miembro en vez de la implementación de la clase base
y todas las demás sobrecargas de dicho miembro estarán disponibles para las instancias de la clase derivada.
Si se omite la palabra clave Overloads al sobrecargar un miembro heredado con un miembro que tiene parámetros y tipos de
parámetros idénticos, la sobrecarga se denomina sombrear por nombre. El proceso sombrear por nombre reemplaza a la
implementación heredada de un miembro y hace que todas las demás sobrecargas no estén disponibles para las instancias de
la clase derivada y sus descendientes.
Los modificadores Overloads y Shadows no pueden utilizarse a la vez con la misma propiedad o método.
Ejemplo
El ejemplo siguiente crea métodos sobrecargados que aceptan una representación String o Decimal de una cantidad en
dólares y devuelven una cadena que contiene los impuestos sobre ventas.
Para utilizar este ejemplo para crear un método sobrecargado
1. Abra un nuevo proyecto y agregue una clase denominada TaxClass.
2. Agregue el código siguiente a la clase TaxClass.
VB
Public Class TaxClass
Overloads Function TaxAmount(ByVal decPrice As Decimal, _
ByVal TaxRate As Single) As String
TaxAmount = "Price is a Decimal. Tax is $" & _
(CStr(decPrice * TaxRate))
End Function

Overloads Function TaxAmount(ByVal strPrice As String, _


ByVal TaxRate As Single) As String
TaxAmount = "Price is a String. Tax is $" & _
CStr((CDec(strPrice) * TaxRate))
End Function
End Class

3. Agregue el procedimiento siguiente a su formulario.


VB
Sub ShowTax()
' 8% tax rate.
Const TaxRate As Single = 0.08
' $64.00 Purchase as a String.
Dim strPrice As String = "64.00"
' $64.00 Purchase as a Decimal.
Dim decPrice As Decimal = 64
Dim aclass As New TaxClass
'Call the same method with two different kinds of data.
MsgBox(aclass.TaxAmount(strPrice, TaxRate))
MsgBox(aclass.TaxAmount(decPrice, TaxRate))
End Sub

4. Agregue un botón al formulario y llame al procedimiento ShowTax desde el evento Button1_Click del botón.
5. Ejecute el proyecto y haga clic en el botón del formulario para probar el procedimiento sobrecargado ShowTax.
En tiempo de ejecución, el compilador elige la función sobrecargada adecuada que coincida con los parámetros que se utilicen.
Al hacer clic en el botón, primero se llama al método sobrecargado con un parámetro Price que es una cadena y se muestra el
mensaje: "Price is a String. Tax is $5.12". La segunda vez se llama a TaxAmount con un valor Decimal y se muestra el mensaje,
"Price is a Decimal. Tax is $5.12".
Vea también
Referencia
Instrucción Sub (Visual Basic)
Shadows
ByVal
ByRef
Overloads
Shadows
Conceptos
Sombrear en Visual Basic
Introducción a los objetos en Visual Basic
Reemplazar propiedades y métodos
Conceptos del lenguaje Visual Basic

Reemplazar propiedades y métodos


Una clase derivada hereda las propiedades y métodos definidos en su clase base. Esto es útil porque puede reutilizar estos
elementos cuando son adecuados para la clase derivada. Si la propiedad o método en la clase base está marcada con la
palabra clave Overridable, puede definir una nueva implementación para el miembro en la clase derivada. Utilice la palabra
clave Overrides para sombrear el miembro volviéndolo a definir en la clase derivada. Esto es útil cuando no puede utilizar el
miembro "tal cual".
En la práctica, los miembros reemplazados suelen utilizarse para implementar el polimorfismo. Para obtener más información,
consulte Polimorfismo.
Las siguientes reglas se aplican a los métodos de reemplazo.
Sólo se pueden reemplazar miembros que estén marcados con la palabra clave Overridable en la clase base.
Las propiedades y los métodos son NotOverridable de manera predeterminada.
Los miembros reemplazados deben tener los mismos argumentos que los miembros heredados de la clase base.
La nueva implementación de un miembro puede llamar a la implementación original de la clase primaria mediante la
especificación de MyBase antes del nombre de método.
Nota
La sobrecarga, el reemplazo y el sombreado son conceptos similares que pueden confundirse fácilmente. Para obtener
más información, consulte Introducción a los objetos en Visual Basic.

Ejemplo
Suponga que desea definir clases para controlar la nómina. Podría definir una clase genérica Payroll que contenga un método
RunPayroll para calcular la nómina de una semana normal. Podría utilizar Payroll como clase base de una clase más
especializada BonusPayroll que se utilizaría para distribuir bonificaciones entre los empleados.
La clase BonusPayroll puede heredar y reemplazar al método PayEmployee definido en la clase base Payroll.
En el siguiente ejemplo se define una clase base, Payroll, y una clase derivada, BonusPayroll, que reemplaza a un método
heredado, PayEmployee. Un procedimiento, RunPayroll crea y luego pasa un objeto Payroll y un objeto BonusPayroll a una
función, Pay, que ejecuta el método PayEmployee de ambos objetos.
VB
Const BonusRate As Decimal = 1.45D
Const PayRate As Decimal = 14.75D
Class Payroll
Overridable Function PayEmployee( _
ByVal HoursWorked As Decimal, _
ByVal PayRate As Decimal) _
As Decimal

PayEmployee = HoursWorked * PayRate


End Function
End Class

Class BonusPayroll
Inherits Payroll
Overrides Function PayEmployee( _
ByVal HoursWorked As Decimal, _
ByVal PayRate As Decimal) _
As Decimal
' The following code calls the original method in the base
' class, and then modifies the returned value.
PayEmployee = MyBase.PayEmployee(HoursWorked, PayRate) * BonusRate
End Function
End Class
Sub RunPayroll()
Dim PayrollItem As Payroll = New Payroll
Dim BonusPayrollItem As New BonusPayroll
Dim HoursWorked As Decimal = 40
MsgBox("Normal pay is: " & _
PayrollItem.PayEmployee(HoursWorked, PayRate))
MsgBox("Pay with bonus is: " & _
BonusPayrollItem.PayEmployee(HoursWorked, PayRate))
End Sub

Vea también
Conceptos
Propiedades y métodos sobrecargados
Reemplazar modificadores
Sombrear en Visual Basic
Otros recursos
Polimorfismo
Conceptos del lenguaje Visual Basic

Reemplazar modificadores
Puede utilizar los modificadores NotOverridable y MustOverride en una clase base para controlar cómo las clases derivadas
reemplazan sus propiedades y métodos.
El modificador NotOverridable define un método de una clase base que no se puede reemplazar en clases derivadas. Todos
los métodos son NotOverridable a menos que se marquen con el modificador Overridable. Puede utilizar el modificador
NotOverridable si no desea permitir que un método reemplazado sea reemplazado de nuevo en una clase derivada.
Los métodos definidos con el modificador MustOverride no tienen ninguna implementación en la clase base y deben
implementarse en clases derivadas. Las clases que contienen métodos MustOverride deben marcarse con el modificador
MustInherit.
Ejemplo
VB
MustInherit Class BaseClass
Public MustOverride Sub aProcedure()
End Class

Class DerivedClass
Inherits BaseClass
Public NotOverridable Overrides Sub aProcedure()
' Override a procedure inherited from the base class
' and mark it with the NotOverridable modifier so that
' it cannot be overridden in classes derived from this class.
End Sub
End Class

Vea también
Conceptos
Propiedades y métodos sobrecargados
Conceptos del lenguaje Visual Basic

Crear y utilizar objetos


Los objetos son combinaciones de código y datos que pueden tratarse como unidades individuales. Prácticamente todas las
actividades que se realizan en Visual Basic implican el uso de objetos, desde los controles que se utilizan hasta los formularios
en los que se colocan. En esta sección se explica dónde se originan los objetos y la forma de utilizarlos.
En esta sección
Objetos de Visual Basic y otros orígenes
Explica cómo se utilizan los objetos de Microsoft Word, Microsoft Excel y otras aplicaciones.
Cómo: Establecer y recuperar propiedades
Explica cómo cambiar y obtener valores de propiedad.
Cómo: Realizar acciones con métodos
Explica qué son los métodos y cómo se utilizan.
Cómo: Tratar formularios como objetos
Muestra el uso de formularios como objetos ordinarios.
Cómo: Obtener acceso a un formulario
Muestra cómo tener acceso a los miembros de un formulario sin tener que crear una variable.
Cómo: Utilizar la nueva palabra clave
Muestra cómo crear instancias de formularios, clases definidas en módulos de clase y colecciones.
Administración de recursos
Explica cómo se pueden ahorrar memoria y recursos del sistema mediante la liberación de referencias a objetos.
Cómo: Pasar objetos a procedimientos
Explica cómo pasar objetos como argumentos a los procedimientos.
Tutorial: Guardar un objeto en Visual Basic
Muestra cómo se puede utilizar la serialización para guardar los datos de un objeto entre instancias, permitiendo así
almacenar valores y recuperarlos la próxima vez que se cree una instancia del objeto.
Cómo: Heredar de una clase en Visual Basic
Muestra cómo se define una clase base y se declaran clases que amplían la clase base.
Secciones relacionadas
Objetos en Visual Basic
Trata los fundamentos de la programación orientada a objetos.
Administrar grupos de objetos
Proporciona un listado de técnicas para trabajar con matrices y colecciones de objetos.
Cómo: Realizar varias acciones en un objeto
Trata el uso de la instrucción With...End With para simplificar el acceso a las propiedades.
Conceptos del lenguaje Visual Basic

Objetos de Visual Basic y otros orígenes


Los objetos que se utilizan en Visual Basic proceden de orígenes internos y externos. Entre los ejemplos de objetos internos se
incluyen los objetos y clases intrínsecos en el proyecto; entre los ejemplos de objeto externos se incluyen los ensamblados y
los objetos COM.
Objetos internos
Los objetos intrínsecos (o integrados) son los que proporciona Visual Basic de forma nativa. Entre éstos se incluyen los tipos
escalares primitivos como Integer y Double, así como los tipos Array y String. No hace falta crear referencias a objetos
internos antes de utilizarlos en el proyecto.
Otros objetos internos son instancias de clases en el proyecto actual. Estas clases pueden utilizarse siempre que sean
necesarias dentro del proyecto y pueden estar disponibles para otras aplicaciones cuando se crea un ensamblado.
Objetos externos
Los objetos externos son los que proceden de otros proyectos o ensamblados que no están disponibles en el proyecto de
manera predeterminada. Es necesario crear referencias de proyecto a los objetos externos para poder utilizarlos en el proyecto.
Los ensamblados son el origen más común de objetos para las aplicaciones de Visual Basic. .NET Framework incluye
ensamblados que contienen objetos que se utilizan habitualmente. Algunos objetos en .NET Framework se tratan como objetos
intrínsecos, pero la mayoría de los ensamblados deben importarse de forma explícita mediante la instrucción Imports antes de
poder utilizarlos. Cualquier lenguaje compatible con Common Language Specification (CLS), como Visual Basic o Visual C#,
puede crear y utilizar ensamblados. Para obtener más información, consulte Ensamblados.
En el pasado, los componentes COM eran el origen tradicional de objetos para programadores de Visual Basic, pero
actualmente los ensamblados de .NET Framework constituyen una opción mejor para los nuevos objetos. Todavía se pueden
utilizar los componentes COM existentes en las aplicaciones; no obstante, el acceso a los objetos COM debe realizarse
mediante clases de interoperabilidad de .NET Framework. El acceso a una biblioteca COM requiere el uso de un ensamblado de
interoperabilidad que contenga clases de interoperabilidad para cada clase COM definida en la biblioteca. Para obtener más
información, consulte Interoperabilidad COM.
Además de tener acceso a las clases de .NET Framework nativas y las clases COM, también es posible llamar a las funciones
definidas en bibliotecas de vínculos dinámicos (archivos DLL), como las de la API Win32. Visual Basic le permite llamar a las
funciones en archivos DLL una vez que se hayan declarado con una instrucción Declare. Visual Basic agrega la funcionalidad a
la instrucción Declare y le permite utilizar el atributo DllImportAttribute para especificar valores predeterminados para
elementos como CallingConvention, ExactSpelling y SetLastError. Los parámetros de instrucciones Declare pueden anotarse
con el atributo MarshalAsAttribute, que admite la conversión de parámetros en formas que no eran posibles en versiones
anteriores de Visual Basic.
Vea también
Tareas
Tutorial: Implementar la herencia mediante objetos COM
Cómo: Establecer y recuperar propiedades
Referencia
Declare (Instrucción)
Imports (Instrucción)
Integer (Tipo de datos, Visual Basic)
Double (Tipo de datos, Visual Basic)
String (Tipo de datos, Visual Basic)
DllImportAttribute
MarshalAsAttribute
Conceptos
Relaciones entre objetos
Otros recursos
Crear y utilizar objetos
Conceptos del lenguaje Visual Basic

Cómo: Establecer y recuperar propiedades


Las propiedades de formularios y controles en Visual Basic pueden establecerse mediante programación en tiempo de
ejecución o en modo de diseño en la ventana Propiedades. Las propiedades de la mayoría de los objetos restantes, como los
objetos de los ensamblados o los objetos que haya creado, únicamente pueden establecerse mediante programación.
Las propiedades que se pueden establecer y leer se denominan propiedades de lectura y escritura. Las propiedades que se
pueden leer pero no modificar se denominan propiedades de sólo lectura. Las propiedades en las que se puede escribir pero
que no se pueden leer se denominan propiedades de sólo escritura.
El valor de una propiedad se establece cuando se desea modificar el aspecto o el comportamiento de un objeto. Por ejemplo, la
propiedad Text de un control de cuadro de texto se cambia para modificar el contenido del cuadro de texto.
El valor de una propiedad se obtiene cuando se desea conocer el estado de un objeto antes de que el código ejecute acciones
adicionales, tales como asignar el valor a otro objeto. Por ejemplo, se puede devolver la propiedad Text de un control de
cuadro de texto para determinar el contenido del cuadro de texto antes de ejecutar un código que podría modificar el valor.
Para establecer valores de propiedad
Utilice la sintaxis siguiente:
Object . property = expression
Las instrucciones siguientes proporcionan ejemplos sobre cómo establecer propiedades:
VB
' Set the Top property to 200 twips.
TextBox1.Top = 200
' Display the text box.
TextBox1.Visible = True
' Display 'hello' in the text box.
TextBox1.Text = "hello"

Nota
También puede establecer una propiedad pasándola a parámetros ByRef, en cuyo caso la propiedad queda modificada
por el resultado devuelto por el parámetro ByRef.

Para obtener valores de propiedad


Utilice la sintaxis siguiente:
variable = Object.property
También puede obtener un valor de propiedad como parte de una expresión más compleja, sin asignar la propiedad a
una variable. El siguiente código modifica la propiedad Top de un control de botón de opción:
VB
RadioButton1.Top += 20

Vea también
Tareas
Cómo: Realizar acciones con métodos
Conceptos
Objetos de Visual Basic y otros orígenes
Otros recursos
Crear y utilizar objetos
Conceptos del lenguaje Visual Basic

Cómo: Realizar acciones con métodos


Los métodos son procedimientos asociados a objetos. Excepto los campos y las propiedades, que representan información que
puede almacenar un objeto, los métodos representan acciones que puede realizar un objeto. Los métodos pueden afectar a los
valores de las propiedades. Por ejemplo, en el caso de una analogía de radio, se puede emplear un método SetVolume para
cambiar el valor de una propiedad Volume. De igual forma, en Visual Basic, los elementos de cuadros de lista tienen una
propiedad List que puede cambiar con los métodos Clear y Add.
Al utilizar un método en código, la forma de crear la instrucción depende de cuántos argumentos requiere el método y de si
devuelve un valor. Generalmente, los métodos se utilizan igual que las subrutinas o las llamadas de función. De forma más
específica, los métodos se invocan del mismo modo que los procedimientos de módulos, exceptuando que los métodos se
pueden calificar con una expresión especificando la instancia del objeto a cuyo método debe llamarse. Si no está calificada, la
instancia es de forma implícita la variable Me.
Para utilizar un método que no requiera argumentos
Utilice la sintaxis siguiente:
Object.method()
En el ejemplo siguiente, el método Refresh vuelve a dibujar el cuadro de imagen:
VB
' Force the control to repaint.
PictureBox1.Refresh()

Nota
Algunos métodos, como Refresh, no tienen argumentos y no devuelven valores.

Para utilizar un método que requiera varios argumentos


Ponga los argumentos entre paréntesis y sepárelos mediante comas. En el ejemplo siguiente, el método MsgBox utiliza
argumentos que especifican el mensaje que se debe mostrar y el estilo del cuadro de mensaje:
VB
MsgBox("Database update complete", _
MsgBoxStyle.OKOnly Or MsgBoxStyle.Exclamation, _
"My Application")

Para utilizar un método que devuelva un valor


Asigne el valor devuelto a una variable o utilice directamente la llamada al método como parámetro para otra llamada. El
código siguiente almacena el valor devuelto:
VB
Dim Response As MsgBoxResult
Response = MsgBox("Do you want to exit?", _
MsgBoxStyle.YesNo Or MsgBoxStyle.Question, _
"My Application")

Este ejemplo utiliza el valor devuelto desde el método Len como un argumento para MsgBox.
VB
Dim TestStr As String = "Some String"
' Display the string "String length is : 11".
MsgBox("String length is : " & Len(TestStr))

Vea también
Tareas
Cómo: Establecer y recuperar propiedades
Conceptos
Relaciones entre objetos
Otros recursos
Crear y utilizar objetos
Conceptos del lenguaje Visual Basic

Cómo: Tratar formularios como objetos


Los formularios son objetos gráficos que componen la interfaz de usuario de una aplicación. Dentro de Visual Basic, las clases
definen cómo se muestran los formularios y qué pueden hacer. Cuando se muestra un formulario en tiempo de ejecución,
Visual Basic crea una instancia de la clase Form que se puede utilizar como cualquier otro objeto. Puede agregar propiedades y
métodos personalizados a formularios y tener acceso a ellos desde otros formularios o clases de la aplicación.
Para crear un método nuevo para un formulario
Agregue un procedimiento declarado como Public, como en el código siguiente:
VB
' Create a custom method on a form.
Public Sub PrintMyJob()
' Insert the code for your method here.
End Sub

Para agregar un campo nuevo a un formulario


Declare una variable pública en el módulo del formulario, como en el código siguiente:
VB
Public IDNumber As Integer

Para tener acceso a métodos de un formulario distinto


1. Cree una nueva instancia del formulario a cuyos métodos desea obtener acceso. Cuando hace referencia a un nombre de
formulario, en realidad, está haciendo referencia a la clase a la cual pertenece el formulario, no propiamente al objeto.
Nota
Visual Basic proporciona el mismo nombre a una variable global implícita que el formulario para cada clase de formula
rio. Para obtener más información, consulte Cómo: Obtener acceso a un formulario.

2. Asigne el formulario a una variable de objeto. La variable de objeto hace referencia a una instancia nueva de la clase de
formulario.
El ejemplo siguiente llama correctamente al procedimiento PrintMyJob:
VB
Dim newForm1 As New Form1
newForm1.PrintMyJob()

En el ejemplo anterior, no se muestra el formulario nuevo. No es necesario mostrar un objeto de formulario para utilizar
sus métodos. Para mostrar el formulario nuevo, debe agregar el código siguiente:
VB
newForm1.Show()

Vea también
Tareas
Cómo: Utilizar la nueva palabra clave
Conceptos
Procedimientos de propiedad
Conceptos del lenguaje Visual Basic

Cómo: Obtener acceso a un formulario


Puede tener acceso a los miembros de un formulario de Visual Basic sin tener que crear una variable. Los ejemplos siguientes
muestran esto cambiando los colores en un formulario.
Tener acceso a un formulario
Para tener acceso a Form1
1. Asegúrese de que su proyecto tiene una referencia al espacio de nombres System.Drawing. Esto es necesario para
trabajar con la configuración de colores, no para tener acceso al formulario.
2. Cambie los colores directamente en Form1.
3. Llame directamente al método Show en Form1.
VB
Public Sub ChangeForm1Colors()
Form1.ForeColor = System.Drawing.Color.Coral
Form1.BackColor = System.Drawing.Color.Cyan
Form1.Show()
End Sub

Si Form1 no existe, Visual Basic lo creará. No tiene que declarar una variable para él.

Crear una instancia adicional de un formulario


Si desea crear un nuevo formulario, en lugar de tener acceso a uno existente, puede declarar una variable e inicializarla
utilizando la palabra clave New.
Para crear una copia adicional de Form1
1. Asegúrese de que su proyecto tiene una referencia al espacio de nombres System.Drawing. Esto es necesario para
trabajar con la configuración de colores, no para tener acceso al formulario.
2. Asigne New Form1 a una variable.

VB
Public Sub GetSecondInstance()
Dim newForm1 As New Form1
newForm1.BackColor = System.Drawing.Color.YellowGreen
newForm1.Show()
End Sub

Si desea mostrar dos o más copias del mismo formulario, debe crear copias adicionales. El ejemplo anterior crea una
segunda copia de Form1 y lo pinta de un color diferente. Puede tener acceso a la copia original utilizando Form1 y a la
segunda copia mediante newForm1.

Vea también
Referencia
New (Visual Basic)
System.Drawing
Form
Conceptos del lenguaje Visual Basic

Cómo: Utilizar la nueva palabra clave


Para crear una instancia de una clase, utilice la palabra clave New. A diferencia de los tipos de valor, como Integer y Double,
los objetos son tipos de referencia, y debe crearlos de forma explícita antes de poder utilizarlos. Por ejemplo, observe las
siguientes dos líneas de código:
VB
Dim Button1 As System.Windows.Forms.Button
Dim Button2 As New System.Windows.Forms.Button()

La primera instrucción declara una variable de objeto que puede contener una referencia a un objeto de botón. Sin embargo, la
variable Button1 contiene el valor Nothing hasta que le asigne un objeto de tipo Button. La segunda instrucción también
define una variable que puede contener un objeto de botón, pero la palabra clave New crea un objeto de botón y lo asigna a la
variable Button2.
Como los formularios y controles son en realidad clases, puede utilizar la palabra clave New para crear instancias nuevas de
estos elementos, cuando sea necesario.
Para crear instancias nuevas de una clase con New
1. Abra un nuevo proyecto de aplicación para Windows, y coloque un botón de comando y otros controles diversos en un
formulario denominado Form1.
2. Agregue el código siguiente al procedimiento de evento Click del botón de comando:
VB
Dim f As New Form1
f.Show()

3. Ejecute la aplicación, y haga clic en el botón de comando varias veces.


4. Coloque a un lado el formulario frontal. Como el formulario es una clase con una interfaz visible, puede ver las copias
adicionales. Cada copia tiene los mismos controles, en la misma posición que los del formulario original en tiempo de
diseño.
Puede utilizar la palabra clave New para crear objetos desde dentro de las clases. El procedimiento siguiente proporciona un
ejemplo.
Para ver cómo New crea instancias de una clase
1. Abra un proyecto nuevo, y coloque un botón de comando en un formulario denominado Form1.
2. En el menú Proyecto, elija Agregar clase para agregar una clase al proyecto.
3. Ponga a la clase nueva el nombre de ShowMe.vb.
4. Agregue el procedimiento siguiente a ShowMe:
VB
Public Class ShowMe
Sub ShowFrm()
Dim frmNew As Form1
frmNew = New Form1
frmNew.Show()
frmNew.WindowState = FormWindowState.Minimized
End Sub
End Class
5. Agregue el código siguiente para controlar el evento Click de Button1 de su formulario:
VB
Protected Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
Dim clsNew As New ShowMe
clsNew.ShowFrm()
End Sub

6. Para utilizar este ejemplo, ejecute la aplicación y haga clic en el botón de comando varias veces. Aparecerá un icono
minimizado de formulario en la barra de tareas cada vez que se cree una instancia nueva de la clase ShowMe.

Vea también
Otros recursos
Crear y utilizar objetos
Conceptos del lenguaje Visual Basic

Administración de recursos
Todos los objetos consumen recursos del sistema, como memoria, identificadores de archivo y conexiones de bases de datos.
Common Language Runtime (CLR) administra los recursos automáticamente y generalmente no hay que preocuparse de
liberar los objetos innecesarios. No obstante, comprender cómo funciona la administración de recursos puede ayudarle a
diseñar las aplicaciones más eficazmente.
Recolección de elementos no utilizados
CLR utiliza un sistema denominado recolección de elementos no utilizados para administrar los recursos asignados. La
recolección de elementos no utilizados del sistema libera los recursos de un objeto cuando la ejecución de código de la
aplicación ya no puede tener acceso al objeto. El algoritmo de la recolección de elementos no utilizados es no determinista, por
lo que no se puede determinar cuándo los CLR liberarán los recursos de un objeto. En las siguientes secciones se describen
algunos de los cambios en la forma de administrar los recursos en Visual Basic.
Asignar objetos a Nothing
Nothing es una palabra clave utilizada por Visual Basic para indicar que una variable de objeto no contiene una referencia a
un objeto. En las versiones anteriores de Visual Basic se recomendaba asignar los objetos no utilizados a Nothing para
disociar la variable de objeto y liberar recursos. Aún pueden asignarse objetos no utilizados a Nothing, pero debido a la forma
en que Visual Basic administra los recursos, este proceso no garantiza que los objetos queden liberados inmediatamente. En
general, sólo se deben asignar a Nothing objetos duraderos (como miembros compartidos o variables globales).
Desechar
Algunos objetos admiten un método denominado Dispose cuya finalidad consiste en liberar recursos del sistema de forma
más expeditiva. Las clases que admiten el método Dispose deben implementar la interfaz IDisposable. Es necesario llamar
explícitamente al método Dispose cuando se deseen liberar recursos de objetos. Por ejemplo:
ThisObject.Dispose()
Finalize
Otro método que admiten algunas clases, Finalize, se ejecuta automáticamente cuando se libera un objeto y puede utilizarse
para realizar otras tareas de limpieza. El método Finalize es similar al método Class_Terminate() utilizado en versiones
anteriores de Visual Basic. Después de que un objeto quede inaccesible, CLR llamará en el futuro al método Finalize del
objeto. Dado que el algoritmo de la recolección de elementos no utilizados es no determinista, se podría llamar al método
Finalize inmediatamente o después varias horas.
Vea también
Referencia
Nothing (Visual Basic)
Dispose
IDisposable
Conceptos
Duración de los objetos: cómo se crean y destruyen
Inicialización y finalización de componentes
Conceptos del lenguaje Visual Basic

Cómo: Pasar objetos a procedimientos


Visual Basic permite pasar objetos como argumentos a procedimientos del mismo modo en que se pasan otros tipos de
argumentos. Los procedimientos siguientes le mostrarán cómo hacerlo.
Para pasar una instancia nueva de un formulario a un procedimiento
1. Abra un proyecto, cree un formulario nuevo llamado Form1 y agréguele un botón de comando denominado Button1.
2. Copie el código siguiente en el formulario:
VB

Private Sub Button1_Click(ByVal sender As Object, _


ByVal e As System.EventArgs) Handles Button1.Click

Dim newForm As New Form1


newForm.Show()
CenterForm(newForm)
End Sub

Sub CenterForm(ByVal TheForm As Form)


' Centers the form on the screen.
Dim RecForm As Rectangle = Screen.GetBounds(TheForm)
TheForm.Left = CInt((RecForm.Width - TheForm.Width) / 2)
TheForm.Top = CInt((RecForm.Height - TheForm.Height) / 2)
End Sub

También puede pasar un objeto como un argumento por referencia y posteriormente, en el procedimiento, establecer el
argumento a un objeto nuevo.
Para pasar una referencia de objeto a un procedimiento de otro formulario
1. Abra un proyecto y cree un formulario denominado Form1.
2. Agregue un segundo formulario denominado Form2.
3. Coloque un control de cuadro de imagen en cada formulario.
4. Ponga al cuadro de imagen de Form1 el nombre de PictureBox1.
5. Ponga al cuadro de imagen de Form2 el nombre de PictureBox2.
6. Asigne una imagen a PictureBox2 haciendo clic en la propiedad Image de la ventana Propiedades. Funcionará
cualquier imagen pequeña; encontrará archivos .bmp y .jpg en el directorio de Windows.
7. Agregue el código siguiente a Form2:
VB
Public Sub GetPicture(ByVal x As PictureBox)
Dim objX As PictureBox
' Assign the passed-in picture box to an object variable.
objX = x
' Assign the value of the Picture property to the Form1 picture box.
objX.Image = PictureBox2.Image
End Sub
8. Agregue el código siguiente al evento Form1_Click de Form1:
VB
Protected Sub Form1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs)
Dim newForm2 As New Form2
newForm2.GetPicture(PictureBox1)
End Sub

9. Ejecute la aplicación y haga clic en Form1. La imagen de Form2 aparece en el cuadro de imagen de Form1.
El procedimiento de evento Form1_Click llama al procedimiento GetPicture de Form2 y le pasa el cuadro de imagen
vacío. El procedimiento GetPicture de Form2 asigna la propiedad Image del cuadro de imagen de Form2 al cuadro de
imagen vacío de Form1, y la imagen de Form2 se muestra en Form1.

Vea también
Conceptos
Administración de recursos
Otros recursos
Programación orientada a objetos en Visual Basic
Programar con componentes
Conceptos del lenguaje Visual Basic

Tutorial: Guardar un objeto en Visual Basic


Aunque en tiempo de diseño se pueden establecer las propiedades de un objeto en valores predeterminados, cualquier valor
introducido en tiempo de ejecución se pierde cuando se destruye el objeto. Puede utilizar la serialización en Visual Basic para
guardar los datos de un objeto entre instancias, lo que permite almacenar valores y recuperarlos la próxima vez que se cree
una instancia del objeto.
Para almacenar datos simples, como un nombre o un número, puede utilizar el objeto My.Settings. Para obtener más
información, vea My.Settings (Objeto).
En este tutorial, se creará un objeto Loan simple y se guardarán sus datos en un archivo; a continuación, se recuperarán los
datos del archivo al volver a crear el objeto. Posteriormente, se modificará el código para guardar el objeto en un formato
SOAP.
Nota de seguridad
En este ejemplo se crea un nuevo archivo, si el archivo no existe ya. Si una aplicación necesita crear un archivo, necesitará ten
er permisos Create en la carpeta correspondiente. Los permisos se establecen usando listas de control de acceso. Sin embar
go, si el archivo ya existe, la aplicación sólo precisará permisos Write, un privilegio menor. Por tanto, siempre que sea posibl
e, resulta más seguro crear el archivo durante la implementación y conceder sólo privilegios Read a un solo archivo (en luga
r de conceder privilegios Create a una carpeta). También es más seguro escribir datos en carpetas de usuario que en la carpe
ta raíz o en la carpeta Archivos de programa.

Nota de seguridad
En este ejemplo se almacenan datos en un formato de archivo binario o SOAP. Estos formatos no se deberían utilizar con dat
os confidenciales, como contraseñas o información de la tarjeta de crédito.

Nota
Los cuadros de diálogo y los comandos de menú que se ven pueden diferir de los descritos en la Ayuda, dependiendo de los
valores de configuración o de edición activos. Para cambiar la configuración, seleccione Importar y exportar configuracio
nes en el menú Herramientas. Para obtener más información, vea Valores de configuración de Visual Studio.

Crear el objeto Loan


El primer paso consiste en crear una clase Loan y una aplicación de prueba que utilice esta clase.
Para crear la clase Loan
1. Cree un nuevo proyecto Biblioteca de clases y denomínelo "LoanClass". Para obtener más información, vea
Cómo: Crear soluciones y proyectos.
2. En el Editor de código, cambie el nombre de la clase de "Class1" a "Loan".
3. Agregue a la clase los miembros públicos siguientes:
VB
Public LoanAmount As Double = 10000.0
Public InterestRate As Double = 7.5
Public Term As Integer = 36
Public Customer As String

También tendrá que crear una aplicación simple que utilice la clase Loan.
Para crear una aplicación de prueba
1. En el menú Archivo, agregue un proyecto Aplicación para Windows a la solución; para ello, elija Agregar y a
continuación, haga clic en Nuevo proyecto.
2. En el cuadro de diálogo Agregar nuevo proyecto, escriba LoanApp como el nombre del proyecto y haga clic en
Aceptar para cerrar el cuadro de diálogo.
3. En el Explorador de soluciones, seleccione el proyecto LoanApp.
4. En el menú Proyecto, haga clic en Establecer como proyecto de inicio.
5. En el menú Proyecto, haga clic en Agregar referencia.
6. En el cuadro de diálogo Agregar referencia, haga clic en la ficha Proyectos y seleccione el proyecto LoanClass.
7. Haga clic en Aceptar para cerrar el cuadro de diálogo.
8. En el diseñador, agregue cuatro controles TextBox al formulario.
9. En el Editor de códigos, agregue el siguiente código:
VB
Private TestLoan As New LoanClass.Loan
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles MyBase.Load
TextBox1.Text = TestLoan.LoanAmount.ToString
TextBox2.Text = TestLoan.InterestRate.ToString
TextBox3.Text = TestLoan.Term.ToString
TextBox4.Text = TestLoan.Customer
End Sub

Llegado este punto, puede generar y ejecutar la aplicación. Observe que los valores predeterminados de la clase Loan aparecen
en los cuadros de texto. Pruebe a cambiar el valor del tipo de interés de 7,5 a 7,1 y, a continuación, cierre la aplicación y
ejecútela de nuevo; comprobará que el valor vuelve a ser el predeterminado: 7,5.
En el mundo real, los tipos de interés cambian periódicamente, pero no forzosamente cada vez que se ejecuta la aplicación. En
lugar de hacer que el usuario actualice el tipo de interés cada vez que se ejecute la aplicación, sería mejor guardar el tipo de
interés más reciente entre las instancias de la aplicación. En el paso siguiente, hará exactamente eso agregando la serialización
a la clase Loan.
Usar serialización para guardar el objeto
Para guardar los valores de la clase Loan, primero debe marcarse la clase con el atributo Serializable.
Para marcar una clase como serializable
Cambie la declaración de la clase Loan del modo siguiente:
VB
<Serializable()> Public Class Loan

El atributo Serializable indica al compilador que todo el contenido de la clase se puede guardar en un archivo. En este caso, es
probable que sólo desee guardar el miembro InterestRate, y no los miembros Customer, LoanAmount o Period. El atributo
NonSerialized se puede utilizar para marcar miembros de clase que no deberían guardarse. Por razones de simplicidad, en
este ejemplo se guarda todo excepto el miembro Customer.
Para evitar que un miembro se serialice
Cambie la declaración del miembro Customer del modo siguiente:
VB
<NonSerialized()> Public Customer As String

El paso siguiente es agregar el código de serialización a la aplicación LoanApp. Para serializar la clase y escribirla en un archivo,
utilizará los espacios de nombres System.IO y System.Xml.Serialization. Para no tener que escribir los nombres completos,
puede usar la instrucción Imports.
Para agregar referencias a espacios de nombres
Agregue las siguientes instrucciones Imports al comienzo de la clase Form1:
VB
Imports System.IO
Imports System.Runtime.Serialization.Formatters.Binary

En este caso, está usando un formateador para guardar el objeto en un formato binario. Más adelante en este tutorial
modificará el código para guardar el objeto en un formato SOAP.
El paso siguiente es agregar código para deserializar el objeto del archivo cuando se cree.
Para deserializar un objeto
1. Agregue una constante a la clase para el nombre de archivo de datos serializados.
VB
Const FileName As String = "SavedLoan.bin"

2. Modifique el código del procedimiento de eventos Form1_Load del modo siguiente:


VB
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles MyBase.Load
If File.Exists(FileName) Then
Dim TestFileStream As Stream = File.OpenRead(FileName)
Dim deserializer As New BinaryFormatter
TestLoan = CType(deserializer.Deserialize(TestFileStream), LoanClass.Loan)
TestFileStream.Close()
End If
TextBox1.Text = TestLoan.LoanAmount.ToString
TextBox2.Text = TestLoan.InterestRate.ToString
TextBox3.Text = TestLoan.Term.ToString
TextBox4.Text = TestLoan.Customer
End Sub

Tenga en cuenta que primero tiene que comprobar que el archivo existe. Si es así, cree una clase Stream para leer el
archivo binario y una clase BinaryFormatter para traducirlo. El método CType se usa para convertir del tipo de la
secuencia al tipo del objeto Loan.
A continuación, tiene que agregar código para guardar los datos introducidos en los cuadros de texto de la clase Loan y para
serializar la clase en un archivo.
Para guardar los datos y serializar la clase
Agregue el siguiente código al procedimiento de evento Form1_Closing:
VB
Private Sub Form1_Closing(ByVal sender As System.Object, ByVal e As _
System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
TestLoan.LoanAmount = CType(TextBox1.Text, Double)
TestLoan.InterestRate = CType(TextBox2.Text, Double)
TestLoan.Term = CType(TextBox3.Text, Integer)
TestLoan.Customer = TextBox4.Text

Dim TestFileStream As Stream = File.Create(FileName)


Dim serializer As New BinaryFormatter
serializer.Serialize(TestFileStream, TestLoan)
TestFileStream.Close()
End Sub

Llegado este punto, puede generar y ejecutar de nuevo la aplicación. Inicialmente, los valores predeterminados aparecen en los
cuadros de texto. Pruebe a cambiar los valores e introducir un nombre en el cuarto cuadro de texto. Cierre la aplicación y, a
continuación, ejecútela de nuevo. Observe que los valores nuevos aparecen ahora en los cuadros de texto, excepto el nombre
del cliente que se marcó como NonSerialized.
Guardar el objeto con un formato SOAP
En este ejemplo se ha mostrado hasta ahora cómo guardar un objeto en un objeto de texto usando un formato binario, que
resulta correcto para la mayoría de las aplicaciones Windows; sin embargo, para las aplicaciones Web o los servicios Web XML,
deseará guardar el objeto en un archivo XML mediante un formato SOAP, que facilita compartir el objeto.
Para guardar el objeto en un formato SOAP, primero debe hacerse referencia a la clase SoapFormatter. La clase
SoapFormatter reside en su propio espacio de nombres: System.Runtime.Serialization.Formatters.Soap.
Para guardar el objeto con un formato SOAP
1. En el Explorador de soluciones, seleccione el proyecto LoanApp.
2. En el menú Proyecto, haga clic en Agregar referencia.
3. En el cuadro de diálogo Agregar referencia, haga clic en la ficha .NET y seleccione el componente
System.Runtime.Serialization.Formatters.Soap.
4. Haga clic en Aceptar para cerrar el cuadro de diálogo.
5. En el Editor de código, agregue una instrucción Imports al comienzo del módulo Form1:
VB
Imports System.Runtime.Serialization.Formatters.Soap

6. Cambie el nombre de archivo de SavedLoan.bin a SavedLoan.xml.


7. En el procedimiento de eventos Form1_Load, cambie la instrucción Dim de Dim deserializer As New BinaryFormatter
a:
VB
Dim deserializer As New SoapFormatter

8. En el procedimiento de eventos Form1_Closing, cambie la instrucción Dim de Dim serializer As New BinaryFormatter
a:
VB
Dim serializer As New SoapFormatter

Llegado este punto, puede generar y probar la aplicación. La primera vez que ejecute la aplicación, se creará el archivo
SavedLoan.xml. Podrá ver este archivo si elige la opción Mostrar todos los archivos en el Explorador de soluciones; se
encuentra en el nodo Bin del proyecto de aplicación para Windows.
Nota
Si ya se encuentra en el modo Mostrar todos los archivos, para ver el archivo tendrá que actualizar la vista; para ello, selecc
ione Actualizar en el menú Ver.

Observe que los tres miembros de la clase LoanClass se muestran en formato XML. Pruebe a cambiar el valor de InterestRate
en el archivo XML, a continuación guárdelo y ejecute la aplicación de nuevo. El nuevo tipo de interés aparecerá en el segundo
cuadro de texto.
Vea también
Conceptos
Equivalentes de PropertyBag para usuarios de Visual Basic 6.0
Fundamentos de la serialización de .NET Framework
Conceptos del lenguaje Visual Basic

Cómo: Heredar de una clase en Visual Basic


Este ejemplo define las clases Circle y Rectangle que los dos heredan de la clase Shape y la clase Square que hereda de la
clase Rectangle.
Ejemplo
Este ejemplo de código también está disponible en el fragmento de código de IntelliSense. En el selector de fragmentos de
código, se encuentra en Lenguaje Visual Basic. Para obtener más información, consulte
Cómo: Insertar fragmentos de código en el código (Visual Basic).
VB
Public Class Shape
' Definitions of properties, methods, fields, and events.
End Class
Public Class Circle : Inherits Shape
' Specialized properties, methods, fields, events for Circle.
End Class
Public Class Rectangle : Inherits Shape
' Specialized properties, methods, fields, events for Rectangle.
End Class
Public Class Square : Inherits Rectangle
' Specialized properties, methods, fields, events for Square.
End Class

Compilar el código
Este ejemplo necesita:
Una referencia al espacio de nombres System.
Nota
Asegúrese de que la clase desde la que desea heredar no está definida como NotInheritable.

Vea también
Tareas
Cómo: Dibujar una forma con contorno
Referencia
NotInheritable
Otros recursos
Herencia en Visual Basic
Crear y utilizar objetos
Ejemplos de Visual Basic

Cómo: Leer datos de objetos de un archivo XML en Visual Basic


En este ejemplo se leen datos de objetos escritos previamente en un archivo XML mediante la clase XmlSerializer.
Ejemplo
Este ejemplo de código también está disponible en el fragmento de código de IntelliSense. En el selector de fragmentos de
código, se encuentra en XML. Para obtener más información, consulte
Cómo: Insertar fragmentos de código en el código (Visual Basic).
VB
Public Class Book
Public Title As String
Public Sub New()
End Sub
End Class

Public Sub ReadXML()


Dim reader As New System.Xml.Serialization.XmlSerializer(GetType(Book))
Dim file As New System.IO.StreamReader("c:\IntroToVB.xml")
Dim introToVB As Book
introToVB = CType(reader.Deserialize(file), Book)
End Sub

Compilar el código
Sustituya el nombre de archivo "c:\IntroToVB.xml" por el nombre del archivo que contenga los datos serializados. Para obtener
más información sobre datos de serialización, consulte Cómo: Escribir datos de objetos en un archivo XML de Visual Basic.
La clase debe tener un constructor público sin parámetros.
Sólo se deserializan propiedades y campos públicos.
Programación eficaz
Las condiciones siguientes pueden provocar una excepción:
La clase que se va a serializar no tiene un constructor público sin parámetros.
Los datos del archivo no representan datos de la clase que se va a deserializar.
El archivo no existe (IOException).
Seguridad
Compruebe siempre las entradas y nunca deserialice datos procedentes de un origen que no sea de confianza. El objeto
recreado se ejecuta en un equipo local con los permisos del código que lo deserializó. Compruebe todas las entradas antes de
utilizar los datos en la aplicación.
Vea también
Tareas
Cómo: Escribir datos de objetos en un archivo XML de Visual Basic
Cómo: Leer texto de archivos con Streamreader (Visual Basic)
Referencia
StreamWriter
Ejemplos de Visual Basic

Cómo: Escribir datos de objetos en un archivo XML de Visual


Basic
En este ejemplo se escribe el objeto de una clase en un archivo XML mediante la clase XmlSerializer.
Ejemplo
En este ejemplo de código se define una clase denominada Book, se crea una instancia de la clase y se utiliza la serialización
XML para escribir la instancia en un archivo XML.
Código parecido a éste está disponible como fragmentos de código de IntelliSense. En el selector de fragmentos de código, se
encuentra en XML. Para obtener más información, vea Cómo: Insertar fragmentos de código en el código (Visual Basic).
VB
Public Class Book
Public Title As String
Public Sub New()
End Sub
End Class

Public Sub WriteXML()


Dim introToVB As New Book
introToVB.Title = "Intro to Visual Basic"
Dim writer As New System.Xml.Serialization.XmlSerializer(GetType(Book))
Dim file As New System.IO.StreamWriter("c:\IntroToVB.xml")
writer.Serialize(file, introToVB)
file.Close()
End Sub

Compilar el código
La clase debe tener un constructor público sin parámetros.
Programación eficaz
Las condiciones siguientes pueden producir una excepción:
La clase que se va a serializar no tiene un constructor público sin parámetros.
El archivo ya existe y es de sólo lectura (IOException).
La ruta de acceso es demasiado larga (PathTooLongException).
El disco está lleno (IOException).
Seguridad
Este ejemplo crea un nuevo archivo, si el archivo no existe ya. Si una aplicación necesita crear un archivo, precisará acceso
Create para la carpeta correspondiente. Sin embargo, si el archivo ya existe, la aplicación sólo precisará acceso Write, un
privilegio menor. Por tanto, siempre que sea posible, resulta más seguro crear el archivo durante la implementación y
conceder sólo acceso Read para un único archivo, en lugar de acceso Create para una carpeta.
Vea también
Tareas
Cómo: Leer datos de objetos de un archivo XML en Visual Basic
Referencia
StreamWriter
Otros recursos
Acceso a archivos con Visual Basic
Conceptos del lenguaje Visual Basic

Colecciones en Visual Basic


En términos generales, una colección es un objeto utilizado para agrupar y administrar objetos relacionados. Por ejemplo, cada
formulario Form tiene una colección de controles. (Puede tener acceso a esta colección a través de la propiedad Controls del
formulario.) Esta colección es un objeto que representa todos los controles de ese formulario. Le permite recuperar un control
de la colección utilizando su índice y recorrer en iteración los elementos de la colección utilizando una
Instrucción For Each...Next (Visual Basic).
Sin embargo, hay varios tipos de colecciones y se diferencian entre sí de varias maneras.
Diferentes tipos de colecciones
Visual Basic también proporciona una clase Collection, con la que puede definir y crear sus propias colecciones. Al igual que
la colección Controls de un formulario, la clase Collection también proporciona la funcionalidad integrada que permite
recorrer en iteración los miembros mediante For Each...Next y recuperar los elementos usando su índice. Para obtener más
información, vea Collection (Objeto, Visual Basic).
Sin embargo, los dos tipos de colecciones no interoperan entre sí. Por ejemplo, el código siguiente genera un error del
compilador:
Dim localControls As Collection
' The following line generates a COMPILER ERROR.
localControls = Me.Controls()

Las colecciones son incompatibles porque la colección Controls es una colección de .NET Framework, mientras que la variable
localControls es una Collection de Visual Basic. Los dos tipos de colecciones se implementan a partir de distintas clases. Sus
métodos son similares pero no idénticos y sus esquemas de indización son diferentes.
Colecciones basadas en cero y en uno
Una colección puede ser basada en cero o basada en uno, según cuál sea su índice de comienzo. La primera de ellas significa
que el índice del primer elemento de la colección es 0, y la última, que es 1. Un ejemplo de colección basada en cero es la
colección Controls de .NET Framework, explicada anteriormente en esta página. El objeto Collection de Visual Basic es un
ejemplo de una colección basada en uno.
Las colecciones basadas en uno pueden resultar más intuitivas para los usuarios de Visual Basic, porque el intervalo del índice
se extiende desde 1 hasta el valor de Count (Propiedad, objeto Collection), que devuelve el número de elementos existentes en
una colección. En cambio, el índice de una colección basada en cero varía desde cero hasta el valor de la propiedad Count
menos uno. Esto puede ser adecuado cuando los valores de índice son desplazamientos respecto a un valor base o
corresponder a miembros de una enumeración basada en cero.
Las colecciones de .NET Framework están basadas en cero con el fin de seguir un esquema estándar. La clase Collection de
Visual Basic está basada en uno con el fin de proporcionar compatibilidad con versiones anteriores.
Valores de índice y de clave
Las instancias de la clase Collection de Visual Basic permiten tener acceso a un elemento utilizando un índice numérico o una
clave String. Puede agregar elementos a los objetos Collection de Visual Basic especificando una clave o sin especificarla. Si
agrega un elemento sin una clave, debe utilizar su índice numérico para tener acceso a él.
Por contraste, las colecciones como System.Collections.ArrayList sólo permiten un índice numérico. No se pueden asociar
claves con los elementos de estas colecciones, a menos que construya las suyas propias basadas en asignaciones, por ejemplo,
en una matriz de String que contiene las claves.
Agregar y quitar elementos
Las colecciones se diferencian en si se les puede o no agregar elementos y, en caso afirmativo, en cómo se pueden agregar.
Puesto que el objeto Collection de Visual Basic es una herramienta de programación de uso general, es más flexible que
algunas otras colecciones. Tiene un Add (Método, objeto Collection) para colocar elementos en la colección y un
Remove (Método, objeto Collection) para quitar elementos de ella.
Por otra parte, ciertas colecciones especializadas no permiten agregar o quitar elementos mediante código. Por ejemplo, la
propiedad System.Windows.Forms.CheckedListBox.CheckedItems devuelve una colección de referencias a elementos por
índice, pero su código no puede agregar elementos a la colección ni quitarlos de ella. Sólo el usuario puede hacer esta
operación, activando o desactivando la casilla de verificación correspondiente en la interfaz de usuario. Por tanto, no hay
ningún método Add ni Remove para esta colección.
Vea también
Tareas
Cómo: Crear una colección de objetos
Cómo: Crear una matriz de objetos
Cómo: Agregar, eliminar y recuperar los elementos de una colección
Cómo: Definir colecciones en clases propias
Cómo: Recorrer en iteración una colección de Visual Basic
Solucionar problemas de colecciones
Conceptos
Administrar grupos de objetos
Clase de colección de Visual Basic
Administrar objetos propios con colecciones
Conceptos del lenguaje Visual Basic

Administrar grupos de objetos


En muchas aplicaciones se desea poder crear y administrar grupos de objetos relacionados. Existen dos formas de agrupar
objetos: mediante la creación de matrices de objetos y mediante la creación de colecciones de objetos.
Matrices de objetos
Las matrices son estructuras relativamente inflexibles. Si desea cambiar el tamaño de una matriz en tiempo de ejecución, debe
utilizar Instrucción ReDim (Visual Basic) para volver a declararla. Todos los elementos de la matriz deben ser del mismo tipo.
Por otra parte, las matrices permiten procesar secuencialmente todos los elementos y pueden existir elementos de una matriz
vacíos. Por estos motivos, las matrices son muy útiles para crear y trabajar con un número fijo de objetos con establecimiento
inflexible de tipos.
Para obtener más información, consulte Cómo: Crear una matriz de objetos.
Colecciones de objetos
Las colecciones proporcionan un método más flexible de trabajar con grupos de objetos. Una colección es una clase, de modo
que antes de poder agregar elementos a una nueva colección, debe declararla. A diferencia de las matrices, el grupo de objetos
con el que trabaja puede aumentar y reducirse dinámicamente a medida que cambian las necesidades de la aplicación. Puede
asignar una clave a cualquier objeto que incluya en una colección, de manera que puede recuperarlo y manipularlo basándose
en esa clave.
Puede crear una colección generalizada a partir de Clase de colección de Visual Basic. Si quiere una funcionalidad específica en
una colección, por ejemplo un diccionario o una lista vinculada, puede crearla a partir de una de las clases en el espacio de
nombres System.Collections de .NET Framework. Las clases de colecciones especializadas están disponibles en el espacio de
nombres System.Collections.Specialized.
Si su colección se limita a los elementos de sólo un tipo de datos, puede utilizar una de las clases en el espacio de nombres
System.Collections.Generic. Una colección genérica cumple la seguridad de tipos para que ningún otro tipo de datos se pueda
agregar a ella. Cuando recupera un elemento de una colección genérica, no tiene que determinar su tipo de datos ni
convertirlo.
Para obtener más información, consulte Cómo: Crear una colección de objetos.
Vea también
Tareas
Cómo: Agregar, eliminar y recuperar los elementos de una colección
Referencia
System.Collections
System.Collections.Generic
System.Collections.Specialized
Conceptos
Colecciones en Visual Basic
Clase de colección de Visual Basic
Otros recursos
Matrices en Visual Basic
Crear y utilizar objetos
Conceptos del lenguaje Visual Basic

Administrar objetos propios con colecciones


Las colecciones proporcionan un método ideal para administrar diferentes objetos. Puede agregar y quitar objetos de una
colección, recuperarlos basándose en un índice o en una clave y utilizar Instrucción For Each...Next (Visual Basic) para recorrer
en iteración los elementos de la colección.
Colecciones de tipo no seguras
No obstante, la propia flexibilidad de las colecciones puede socavar la solidez de las clases. Por ejemplo, la colección
proporcionada por Visual Basic almacena todos sus elementos como tipo Object, por lo que puede agregar un elemento de
cualquier tipo de datos. No hay ningún método de protección contra los tipos de datos impropios que se agregan y cuando
tiene acceso a un elemento, debe convertirlo de Object en el tipo de datos deseado.
Colecciones especializadas
.NET Framework proporciona varias alternativas a la colección Visual Basic. El espacio de nombres System.Collections contiene
clases de colección con una funcionalidad específica, como una cola o una lista ordenada, y el espacio de nombres
System.Collections.Specialized contiene clases de colección de naturaleza especializada, como HybridDictionary.
Colecciones de tipo seguras
Para evitar los inconvenientes de los elementos de tipo Object, puede utilizar las colecciones genéricas del espacio de
nombres System.Collections.Generic. Estas colecciones proporcionan la seguridad de tipos y le permiten limitar los elementos
de una colección a sólo un tipo de datos específico.
Enfoques sobre el uso de colecciones
Existen tres enfoques generales que se pueden seguir para implementar la administración de objetos mediante colecciones.
Considere una aplicación que define una clase widgetRepository que organiza y expone los objetos widget para los
componentes de cliente. Para implementar widgetRepository con una colección, puede utilizar una de las estrategias
siguientes.
Utilice una clase de colección. En la clase widgetRepository, declare una variable widgetsColl como una instancia de
Clase de colección de Visual Basic o de una de las clases de los espacios de nombres System.Collections,
System.Collections.Generic o System.Collections.Specialized. Haga que la variable sea pública y utilice la palabra
clave New (Visual Basic) para crear una instancia de la colección. Para obtener más información, consulte
Cómo: Definir colecciones en clases propias.
Herede una clase base de colección. Implemente una clase widgetsColl propia mediante herencia de la clase
CollectionBase. En la clase widgetRepository, defina una instancia de la clase widgetsColl y una propiedad que devuelva
esta instancia. Para obtener más información, vea Cómo: Definir colecciones en clases propias.
Escriba la colección. Implemente la funcionalidad de colección en la clase widgetRepository escribiendo clases y
procedimientos adecuados. Este enfoque es especialmente útil si desea disponer de la funcionalidad de colección en la
clase pero no puede heredar de ninguna de las clases de colección existentes. Por ejemplo, esto puede ser posible en el
caso poco frecuente de que su clase necesitara heredar de una clase que no fuera una clase de colección. Como no puede
heredar de más de una clase, tendría que definir e implementar miembros de colección.
Vea también
Referencia
System.Collections
System.Collections.Generic
System.Collections.Specialized
Conceptos
Administrar grupos de objetos
Clase de colección de Visual Basic
Conceptos del lenguaje Visual Basic

Clase de colección de Visual Basic


Una colección es una forma de agrupar un conjunto de elementos relacionados. Existen muchos tipos diferentes de
colecciones. Las colecciones predefinidas se utilizan en aplicaciones de Visual Basic para muchos propósitos, por ejemplo
ControlCollection en Form, devuelto por la propiedad Controls del formulario. También puede crear sus propias colecciones
para organizar y manipular los objetos.
Las colecciones son un buen método para hacer un seguimiento de los objetos que una aplicación puede necesitar crear o
destruir dinámicamente. El fragmento de código siguiente muestra cómo se puede utilizar Agregar método de un
objeto de colección de Visual Basic para mantener una lista de objetos widget que ha creado el usuario.

' Declare and create the Collection object.


Public widgetColl As New Microsoft.VisualBasic.Collection()
' Create a new widget and add it to the widgetColl collection.
Private Sub makeAWidget()
Dim tempWidget As New widget()
widgetColl.Add(tempWidget)
End Sub

En el ejemplo anterior, la colección widgetColl organiza y expone todos los objetos widget creados a través del procedimiento
makeAWidget. Se pueden recuperar referencias a objetos para cada widget a través del índice de la colección. El tamaño de la
colección se ajusta automáticamente cada vez que se agrega un nuevo objeto widget. Puede utilizar
Instrucción For Each...Next (Visual Basic) para repetir la acción a lo largo de la colección. Si desea asignar al objeto widget una
clave mediante la que se pueda recuperar dicho objeto, puede proporcionar una cadena de texto como el segundo parámetro
del método Add.
El objeto Collection de Visual Basic almacena todos sus elementos como tipo Object, por lo que puede agregar un elemento
de cualquier tipo de datos. No hay ningún método de protección contra los tipos de datos inadecuados que se agreguen. Para
evitar esta limitación, puede utilizar las colecciones genéricas del espacio de nombres System.Collections.Generic. Para obtener
más información, consulte Cómo: Crear una colección de objetos.
Crear y destruir un objeto de colección
La palabra clave New (Visual Basic) en la declaración de la variable widgetColl produce un objeto Collection que se va a crear
cuando el control pasa a la instrucción de declaración. Como Collection es una clase y no un tipo de datos, debe crear una
instancia de la misma y mantener una referencia a esa instancia en una variable. Esta instancia es un objeto de colección de
Visual Basic.
Como cualquier otro objeto, un objeto Collection se marca para la recolección de elementos no utilizados (GC) cuando la
última variable que contiene una referencia a él se establece en Nothing (Visual Basic) o sale del ámbito. Todas las referencias a
objetos que contiene se liberan cuando la reclama una recolección de elementos no utilizados. Por este motivo, la variable
widgetColl del ejemplo anterior se declara en la clase principal para que exista a lo largo de la vida del programa.

Una colección mantiene las referencias a los objetos que controla pero no contiene los objetos en sí. Al destruir un objeto
Collection, por consiguiente, no se destruyen los objetos que controla. Cada objeto individual que había sido un elemento de
la colección continúa existiendo hasta que se marque individualmente para la recolección de elementos no utilizados.
Trabajar con elementos
Los servicios básicos de agregar, eliminar y recuperar elementos de una colección dependen de claves e índices. Una clave es
un valor String. Podría ser un nombre, un número de permiso de conducción, un número de teléfono o simplemente un
entero convertido en una cadena. El método Add le permite asociar una clave a un elemento, tal como se describe en
Cómo: Agregar, eliminar y recuperar los elementos de una colección.
Un índice en la clase Collection es un entero entre 1 y el número de elementos de la colección.
Count (Propiedad, objeto Collection) devuelve el número actual de elementos. Se puede controlar el valor inicial del índice de
un elemento mediante los parámetros Before y After, cuando llama a Add, pero su valor puede cambiar cuando se agregan o
eliminan otros elementos. Para obtener más información, consulte Add (Método, objeto Collection).
Puede quitar un elemento único de una colección pasando su clave o su índice a Remove (Método, objeto Collection). Puede
vaciar una colección y quitar todos los elementos con Clear (Método, objeto Collection).
Tener acceso a elementos
Puede pasar un valor clave a Contains (Método, objeto Collection) para probar si una colección contiene un elemento con esa
clave. Puede recuperar un elemento pasando su clave o su índice a Item (Propiedad, objeto Collection).
Puede utilizar valores de índice y la propiedad Item para recorrer en iteración los elementos de una colección o puede utilizar
Instrucción For Each...Next (Visual Basic). El ejemplo siguiente muestra dos maneras de aplicar una subida del 10 por ciento a
todos los empleados de una colección de objetos employee, suponiendo que la variable employeesColl contiene una referencia
a un objeto Collection.

Option Strict On
' The following alternative uses the Count and Item properties.
Dim emp As employee
For counter As Integer = 1 To employeesColl.Count
emp = CType(employeesColl.Item(counter), employee)
emp.payRate *= 1.1
Next counter
' The following alternative uses the For Each...Next statements.
For Each emp As employee In employeesColl
emp.payRate *= 1.1
Next emp

Sin embargo, si ha agregado uno o más elementos a employeesColl que no son de tipo employee, el bucle For Each produce
una excepción ArgumentException en tiempo de ejecución.
Tipo de datos de elementos
Un objeto de colección de Visual Basic almacena los elementos con el tipo de datos Object. Por consiguiente, el intervalo de
tipos de datos que puede agregar a un objeto Collection es igual al intervalo de tipos de datos que puede almacenar en una
variable Object. Ésta incluye tipos de datos estándar, objetos y matrices, así como estructuras definidas por el usuario e
instancias de clase.
Como el objeto Collection almacena los elementos como Object, la propiedad Item devuelve un valor Object. Para utilizar el
elemento en su código, debe convertir normalmente de Object al tipo de datos en tiempo de ejecución del elemento. La
manera de hacerlo depende de la configuración del modificador de comprobación de tipos en Option Strict (Instrucción).
Conversión implícita desde el objeto
Si Option Strict es Off, puede convertir un elemento de Collection implícitamente a su tipo de datos adecuado, tal como se
muestra en el ejemplo siguiente.

Option Strict Off


Dim sampleColl As New Microsoft.VisualBasic.Collection()
Dim sampleString As String = "This is a string"
Dim aString As String
sampleColl.Add(sampleString)
' The following statements convert the collection item to a string.
Try
aString = sampleColl.Item(1)
Catch ex As Exception
' Insert code to run if the collection item cannot be converted to String.
End Try

Conversión explícita desde el objeto


Si Option Strict es On, debe convertir explícitamente desde Object al tipo de datos en tiempo de ejecución del elemento. Para
obtener un elemento de Item de esta manera, puede utilizar CType (Función) para realizar la conversión, tal como se muestra
en el ejemplo siguiente.

Option Strict On
Dim sampleColl As New Microsoft.VisualBasic.Collection()
Dim sampleString As String = "This is a string"
Dim aString As String
sampleColl.Add(sampleString)
' The following statements convert the collection item to a string.
Try
aString = CType(sampleColl.Item(1), String)
Catch ex As Exception
' Insert code to run if the collection item cannot be converted to String.
End Try

Servicios adicionales
Los métodos y propiedades del objeto Collection proporcionan solamente los servicios más básicos para colecciones. Por
ejemplo, el método Add no puede comprobar el tipo de un elemento que se agrega a una colección, comprobación que puede
resultar deseable para asegurarnos de que la colección contiene únicamente una clase de elementos. Si puede garantizar esto
en el método Add, tiene una colección con establecimiento inflexible de tipos y no tiene que convertir el valor devuelto de la
propiedad Item a su tipo de datos en tiempo de ejecución. Esto mejora el rendimiento.
Puede proporcionar una funcionalidad más robusta (y propiedades, métodos y eventos adicionales) creando su propia clase de
colección, tal como se describe en Cómo: Definir colecciones en clases propias.
Vea también
Referencia
Collection (Objeto, Visual Basic)
Conceptos
Colecciones como alternativa a las matrices
Colecciones en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Definir colecciones en clases propias


Puede agregar una colección a una de sus clases para administrar los grupos de objetos que utiliza su clase. La forma más
sencilla de hacerlo consiste en agregar una variable pública de tipo Collection a la clase. Considere una clase hipotética
denominada widgetRepository que administra y expone objetos widget. Podría crear una variable widgetColl para hacer
referencia a una colección widget, tal como se describe en el procedimiento siguiente.
Definir una colección simple
Para definir una colección simple en una clase
Cree una variable pública para que actúe como una colección para sus objetos.

Public Class widgetRepository


Public widgetColl As New Microsoft.VisualBasic.Collection()
' Insert code to implement additional functionality.
End Class

La clase widgetRepository tiene ahora una colección pública a la que se pueden agregar objetos widget. Puede utilizar
Instrucción For Each...Next (Visual Basic) para procesar los elementos de colección, como muestra el código siguiente.

For Each aWidget As widget In widgetColl


' Insert code to process widgetColl elements
Next aWidget

La colección widgetColl definida en el ejemplo anterior no es con establecimiento inflexible de tipos, lo que significa que
puede agregar cualquier tipo de objeto, no sólo objetos widget. Esto puede conducir a problemas de seguridad de tipos.
Por ejemplo, suponga que agrega String a la colección, como en el código siguiente.

Dim notWidget As String = "This is not a widget object!"


widgetColl.Add(notWidget)

Si hace esto, el bucle For Each del procedimiento anterior produce una excepción ArgumentException en tiempo de
ejecución porque un elemento de la colección no es de tipo widget.
Se recomienda definir una clase genérica cuando se desea garantizar la seguridad de tipos. Para obtener más
información y un ejemplo, consulte Cómo: Definir colecciones con seguridad de tipos.
Vea también
Tareas
Cómo: Definir colecciones con seguridad de tipos
Referencia
Option Strict (Instrucción)
Conceptos
Clase de colección de Visual Basic
Colecciones en Visual Basic
Tipos genéricos en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Definir colecciones con seguridad de tipos


Puede definir y crear una colección utilizando la clase Collection proporcionada por Visual Basic, como muestra el ejemplo
siguiente.
VB
Public Class widgetRepository
Public widgetColl As New Microsoft.VisualBasic.Collection()
' Insert code to implement additional functionality.
End Class

Sin embargo, esta colección widgetColl no dispone de establecimiento inflexible de tipos. En ella puede agregar cualquier tipo
de elemento, no sólo objetos widget. Cuando recupera un elemento, puede que deba intentar convertirlo en widget. Esto
puede conducir a problemas de seguridad de tipos. Por ejemplo, suponga que agrega un objeto tipo String a la colección con
el código siguiente.
VB
Dim notWidget As String = "This is not a widget object!"
widgetColl.Add(notWidget)

En este caso, un intento posterior de recuperar dicho elemento produce una excepción ArgumentException en tiempo de
ejecución ya que el elemento de la colección no es del tipo widget.
Protección contra los problemas de seguridad de tipos
Recomendamos que aumente la seguridad de tipos definiendo una clase genérica. Así se exige el establecimiento inflexible de
tipos se consigue flexibilidad en el tipo de datos concreto con el que trabaja. Para obtener más información, vea
Tipos genéricos en Visual Basic.
Para definir una colección con seguridad de tipos en una clase
Utilice una de las clases genéricas en el espacio de nombres System.Collections.Generic, por ejemplo List, para la clase de
colección. A continuación, puede crear una colección que se restringe a los miembros widget. El ejemplo siguiente
muestra cómo se podría modificar la declaración del ejemplo anterior para crear una colección genérica.
VB
Public widgetColl As New System.Collections.Generic.List(Of widget)

En este caso, el establecimiento inflexible de tipos sólo permite agregar elementos widget a la colección y cada elemento
que se recupera por medio de la propiedad Item es un objeto widget. Debido al establecimiento inflexible de tipos, el
código de recuperación también puede utilizar todas las propiedades y los métodos expuestos por widget.
O bien
Cree su propia clase de colección sin utilizar ninguna clase predefinida. Restrinja el método Add para que sólo acepte
objetos widget e implemente la propiedad Item con un tipo de valor devuelto de widget. Para obtener más información,
vea Cómo: Definir colecciones con seguridad de tipos.
Si Item devuelve elementos de tipo Object, sólo tendría acceso explícito a las propiedades y métodos definidos en la
clase Object. Para tener acceso a los miembros de widget, debería activar Option Strict Off o utilizar CType (Función)
para convertir de forma explícita el elemento devuelto a widget, como en el código siguiente.
VB
Dim nextWidget As widget
Try
nextWidget = CType(widgetColl.Item(1), widget)
Catch ex As Exception
' Insert code to run if the collection item is not a widget.
End Try

En cualquiera de los casos, si utiliza los elementos Object de esta manera, Visual Basic emplea el enlace en tiempo de
ejecución, lo que reduce el rendimiento.
Tenga en cuenta que la clase Collection de Visual Basic acepta y devuelve elementos Object, por lo que también tiene
las desventajas de los tipos flexibles y el enlace en tiempo de ejecución.
Vea también
Referencia
Option Strict (Instrucción)
System.Collections
System.Collections.Generic
System.Collections.Specialized
Conceptos
Clase de colección de Visual Basic
Colecciones en Visual Basic
Tipos genéricos en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Crear una colección de objetos


Como con cualquier objeto, declare una variable para contener el objeto, cree el objeto de colección y asígnelo a la variable.
Para un objeto de colección, puede utilizar Clase de colección de Visual Basic o una clase de colección de .NET Framework. En
particular, puede crear una colección genérica utilizando una de las clases en el espacio de nombres
System.Collections.Generic. Una colección genérica es útil cuando todos los elementos de la colección tienen el mismo tipo de
datos. Las colecciones genéricas cumplen el establecimiento inflexible de tipos al permitir agregar sólo el tipo de datos
deseado. Para obtener más información, consulte Cómo: Definir colecciones con seguridad de tipos.
Cuando se crea el objeto de colección, puede agregar y quitar elementos y elementos de acceso de la colección.
A continuación, se describen dos ejemplos sobre cómo crear colecciones. Cada colección contiene elementos String y asocia
una clave String a cada elemento. Los dos primeros procedimientos crean una colección mediante la clase de colección de
Visual Basic. Los dos últimos procedimientos crean una colección mediante una clase de colección genérica de .NET
Framework.
Crear una colección mediante la clase de colección de Visual Basic
1. Declare y cree una variable de Visual Basic Collection, tal como se muestra en el ejemplo siguiente.

Dim sampleVisualBasicColl As New Microsoft.VisualBasic.Collection()

La colección de sampleVisualBasicColl puede aceptar elementos de cualquier tipo de datos.


2. Utilice Add (Método, objeto Collection) para agregar elementos a la colección. El ejemplo siguiente crea cuatro elementos
String y los agrega a la colección. Crea un valor String único como clave para cada nuevo elemento y lo pasa al método
Add.

Dim item1, item2, item3, item4 As String


item1 = "Items"
item2 = "In"
item3 = "A"
item4 = "Collection"
sampleVisualBasicColl.Add(item1, "firstkey")
sampleVisualBasicColl.Add(item2, "secondkey")
sampleVisualBasicColl.Add(item3, "thirdkey")
sampleVisualBasicColl.Add(item4, "fourthkey")

El argumento Key es opcional en una colección de Visual Basic.


3. Si desea quitar un elemento de la colección, puede utilizar Remove (Método, objeto Collection) identificando el elemento
por su índice posicional o por su clave opcional. Esto se ilustra en el siguiente ejemplo:

' Remove the first element of the Visual Basic collection.


sampleVisualBasicColl.Remove(1)
' Remove the element with the key "secondkey".
sampleVisualBasicColl.Remove("secondkey")

Tenga en cuenta que al quitar un elemento de Visual Basic Collection, los valores del índice se numeran desde 1 hasta el
valor de Count (Propiedad, objeto Collection).
Para utilizar For Each...Next para procesar los elementos de la colección de Visual Basic
1. Declare una variable del tipo almacenado en la colección. Para obtener el ejemplo anterior, declare una variable de tipo
String, tal como muestra el ejemplo siguiente.

' Insert code from the preceding example.


Dim aString As String
2. Utilice Instrucción For Each...Next (Visual Basic) para examinar cada elemento de la colección. El ejemplo siguiente busca
una cadena determinada y la muestra si la encuentra.

For Each aString in sampleVisualBasicColl


If aString = "Collection" Then
MsgBox(aString)
End If
Next aString

Para crear una colección mediante una clase de colección genérica


1. Declare y cree una variable de .NET Framework System.Collections.Generic.Dictionary, tal como se muestra en el ejemplo
siguiente.

Dim sampleGenericColl As New System.Collections.Generic.Dictionary(Of String, String)

La variable sampleGenericColl contiene una colección de tipo seguro que sólo acepta elementos y claves de tipo String.
2. Utilice el método System.Collections.Generic.Dictionary.Add( para agregar elementos a la colección. El ejemplo siguiente
crea cuatro elementos String y los agrega a la colección. Crea un valor String único como clave para cada nuevo
elemento y lo pasa al método Add.

Dim item1, item2, item3, item4 As String


item1 = "Items"
item2 = "In"
item3 = "A"
item4 = "Collection"
sampleGenericColl.Add("firstkey", item1)
sampleGenericColl.Add("secondkey", item2)
sampleGenericColl.Add("thirdkey", item3)
sampleGenericColl.Add("fourthkey", item4)

Se requiere el argumento Key en esta colección genérica.


3. Para quitar un elemento de la colección, utilice el método System.Collections.Generic.IDictionary.Remove(. Debe
proporcionar la clave para identificar el elemento que se va a quitar. Esto se ilustra en el siguiente ejemplo:

If Not sampleGenericColl.Remove("thirdkey")
' Insert code to handle "thirdkey" not found in collection.
End If

Puede utilizar una instrucción For Each...Next para recorrer en iteración y procesar los elementos de una colección,
como muestra el procedimiento siguiente.

Para utilizar For Each...Next para procesar los elementos de la colección genérica
1. Declare una variable del tipo almacenado en la colección. Para obtener el ejemplo anterior, declare una variable de tipo
String, tal como muestra el ejemplo siguiente.

' Insert code from the preceding example.


Dim aPair As KeyValuePair(Of String, String)

2. Utilice Instrucción For Each...Next (Visual Basic) para examinar cada elemento de la colección. El ejemplo siguiente busca
una cadena determinada y la muestra si la encuentra.

For Each aPair In sampleGenericColl


If aPair.Value = "Items" Then
MsgBox(aPair.Key & " -- " & aPair.Value)
End If
Next aPair

Vea también
Tareas
Cómo: Crear una matriz de objetos
Referencia
Collection (Objeto, Visual Basic)
System.Collections
System.Collections.Generic
System.Collections.Specialized
Conceptos
Clase de colección de Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Crear una matriz de objetos


Un objeto es un tipo de referencia. Para declarar y utilizar una matriz de un tipo de referencia se procede del mismo modo que
para declarar y utilizar una matriz de cualquier tipo de datos. Los elementos de una matriz de tipo objeto pueden recuperarse
mediante su índice y manipularse como cualquier otro objeto del tipo determinado.
Las matrices también tienen funcionalidad integrada para buscar y ordenar, a la que se puede tener acceso a través la variable
de matriz. Para obtener más información acerca de estos métodos, consulte Array.
Para crear una matriz de objetos
1. Declare la matriz como se muestra en el ejemplo siguiente. Debido a que las matrices se basan en cero, contienen un
elemento más que el límite superior que se declara.

Dim x(10) As widget


' x now contains 11 elements of type widget, x(0) through x(10).

2. Cree los elementos de la matriz o asigne a cada elemento una referencia a un objeto ya existente. En el siguiente ejemplo
se muestra cómo.

' Create each element of an array by using a loop.


For q As Integer = 0 To 10
x(q) = New widget()
Next q
' Assign a reference to an existing object to two array elements.
Dim specialWidget As New widget()
x(0) = specialWidget
x(1) = specialWidget

Observe que puede asignar referencias al mismo objeto a distintos elementos de la matriz.
Vea también
Tareas
Cómo: Crear una colección de objetos
Conceptos
Administrar grupos de objetos
Tipos de valores y tipos de referencia
Otros recursos
Matrices en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Agregar, eliminar y recuperar los elementos de una


colección
La clase Collection de Visual Basic contiene funcionalidad integrada, que permite agregar, eliminar y recuperar elementos.
Es posible que desee agregar un elemento a una colección en cuanto se crea o se obtiene el elemento, por ejemplo un
nuevo cliente.
Puede desear eliminar un elemento de una colección cuando ya no pertenece a la colección, por ejemplo cuando un
empleado deja su compañía.
Es posible que desee recuperar un elemento de una colección para editar su contenido, por ejemplo cambiar el número
de teléfono de un estudiante.
Nota
Los objetos Collection actualizan sus números de índice numéricos automáticamente cuando agrega y elimina elementos. P
or ello, el índice numérico de un elemento determinado puede cambiar a menudo. Por ello, cuando guarde un valor de índice
numérico, no espere recuperar el mismo elemento posteriormente en el programa. Para este propósito utilice claves.

Para agregar un elemento a una colección


Utilice Add (Método, objeto Collection) y especifique el elemento por su Key.
object.Add(Item, Key [, {Before | After}])

Por ejemplo, para agregar un objeto de orden de trabajo a una colección de órdenes de trabajo utilizando como clave la
propiedad ID de la orden de trabajo, puede realizar la siguiente llamada:

workOrders.Add(woNew, woNew.ID)

La llamada anterior supone que la propiedad ID es una cadena. Si es un número (por ejemplo, un entero Long ), utilice
su método ToString para convertirlo en el valor String necesario para el argumento Key.

workOrders.Add(woNew, woNew.ID.ToString())

El uso de una clave es opcional. Si no desea asociar una clave al objeto de su colección, puede agregarlo sin una clave.

workOrders.Add(woNew)

Puede utilizar los argumentos Before y After para mantener una colección ordenada de objetos. El miembro que se
agrega se coloca en la colección antes o después del miembro identificado por el argumento Before o After
respectivamente. Por ejemplo, si estable Before igual a 1, se inserta un elemento al principio de la colección porque los
objetos Collection están basados en 1.

workOrders.Add(woNew, woNew.ID, 1)

De forma similar, el argumento After agrega un elemento después del índice especificado. El siguiente ejemplo agrega
un tercer elemento.

workOrders.Add(woNew, woNew.ID,,2)

Se puede especificar un valor para Before o para After, pero no para ambos.
Para eliminar un elemento de una colección
Utilice Remove (Método, objeto Collection) y especifique el elemento por su Index o su Key.
object.Remove({Index | Key})

El argumento Index es la posición del elemento que desea eliminar. El argumento Key es la misma cadena que ha
utilizado para agregar el elemento a la colección. Si la clave del tercer elemento de una colección es "W017493", puede
utilizar cualquiera de las dos instrucciones siguientes para eliminarlo.

workOrders.Remove(3)
workOrders.Remove("W017493")

Para eliminar todos los elementos de una colección


Use Clear (Método, objeto Collection).
object.Clear()

El método Clear vacía la colección.

Para recuperar un elemento de una colección


1. Utilice Item (Propiedad, objeto Collection) y especifique el elemento por su Index o su Key.
variable = object.Item({Index | Key})

Igual que con el método Remove, el argumento Index es la posición del elemento en la colección y el argumento Key es
la cadena utilizada al agregar el elemento. Con el mismo ejemplo del método Remove, cualquiera de las instrucciones
siguientes recupera el tercer elemento de la colección:

woCurrent = workOrders.Item(3)
woCurrent = workOrders.Item("W017493")

Nota
Si utiliza números como claves, debe utilizar sus métodos ToString para convertirlos en las cadenas antes de pasarlos a
l método Add o Remove o a la propiedad Item. Un objeto de Visual Basic Collection supone siempre que un número
es un índice, en vez de una cadena de clave.

2. Si conoce la clave en el tiempo de compilación, puede utilizar alternativamente el operador (!) de acceso a diccionario
para tener acceso a un elemento de la colección sin incluir la clave entre comillas o paréntesis. La llamada anterior se
puede escribir del modo siguiente.

woCurrent = workOrders!W017493

Vea también
Referencia
Collection (Miembros del objeto)
Add (Método, objeto Collection)
Remove (Método, objeto Collection)
Clear (Método, objeto Collection)
Item (Propiedad, objeto Collection)
Conceptos
Clase de colección de Visual Basic
Colecciones como alternativa a las matrices
Colecciones en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Recorrer en iteración una colección de Visual Basic


Puede utilizar un bucle For Each para recorrer en iteración los elementos de una colección.
Ejemplo
El ejemplo siguiente utiliza Instrucción For Each...Next (Visual Basic) para tener acceso a todos los elementos de una colección.

Dim testCollection As New Microsoft.VisualBasic.Collection()


' The collection is empty until you add one or more items to it.
For Each collectionItem As Object In testCollection
' Perform desired processing on each item.
Next collectionItem

Compilar el código
Este ejemplo necesita:
Obtener acceso al espacio de nombres System.

Vea también
Tareas
Cómo: Agregar, eliminar y recuperar los elementos de una colección
Referencia
Instrucción For Each...Next (Visual Basic)
Conceptos
Colecciones en Visual Basic
Conceptos del lenguaje Visual Basic

Solucionar problemas de colecciones


Esta página muestra algunos problemas comunes que pueden aparecer al trabajar con colecciones.
Utilizar el tipo de colección equivocado
Hay varios tipos de colecciones disponibles para los desarrolladores de Visual Basic: la clase Collection de Visual Basic y las
clases de colección proporcionadas por .NET Framework. Estas clases no son compatibles entre sí. Esto significa que, si declara
una variable para que sea de un tipo de colección, no puede asignar un objeto de otro tipo a esa variable. Además, sólo puede
tener acceso a los métodos y propiedades del tipo de colección que ha declarado.
Las diferencias principales entre Visual Basic y clases de colección de .NET Framework incluyen lo siguiente:
Base de índice. Las colecciones de .NET Framework están basadas en cero, mientras que las colecciones de Visual Basic
están basadas en uno. Esto significa que los elementos de una colección de Visual Basic tienen valores de índice
comprendidos entre 1 y el valor de Count (Propiedad, objeto Collection), mientras que los elementos de una colección de
.NET Framework tienen valores de índice que van desde 0 hasta uno menos que el valor de la propiedad Count de la
colección.
Tipo de elemento. La colección de Visual Basic admite elementos de tipo Object, que no posee seguridad de tipos
porque puede agregar un elemento de cualquier tipo de datos. Esto normalmente produce una degradación del
rendimiento porque el compilador debe aplicar conversiones boxing y unboxing a los elementos para convertirlos al
Object (Tipo de datos) y desde él. Algunas de las colecciones de .NET Framework también tienen elementos del tipo
Object, pero muchas otras tienen establecimiento inflexible de tipos, que significa que admiten elementos de un tipo
específico, lo cual les atribuye seguridad de tipos y normalmente permite conseguir un rendimiento óptimo.
Elementos con clave. La colección de Visual Basic permite especificar una clave cuando se agrega un elemento a ella.
La clave es un valor String único que se puede utilizar después para tener acceso a ese elemento concreto. Las
colecciones .NET Framework varían con respecto a las claves. Algunas admiten claves y otras no.
Los espacios de nombres que contienen las distintas definiciones de clase de colección son los siguientes:
Microsoft.VisualBasic — clase Collection de Visual Basic
System.Collections — clases de colección específicas como listas, colas, matrices de bits, tablas de hash y diccionarios
System.Collections.Generic — clases de colección genéricas, que permiten crear colecciones con establecimiento
inflexible de tipos y especificar el tipo de datos de los elementos cuando se crean
System.Collections.Specialized — clases de colección especializadas con establecimiento inflexible de tipos, como
diccionarios híbridos y de listas vinculadas, colecciones de bits-vectores y nombres-objetos, y colecciones sólo de
cadenas
Enfoque correcto
Determine qué tipo de colección es más adecuado para sus necesidades. Declare su variable de colección para que sea de ese
tipo y asegúrese de crear un objeto de ese mismo tipo. Utilice la calificación completa para asegurarse de que está
especificando el tipo de colección deseado. El ejemplo siguiente muestra dos declaraciones con calificación completa.
VB
Dim customers As New Microsoft.VisualBasic.Collection()
Dim stringQueue As New System.Collections.Generic.Queue(Of String)

Una vez creada una colección de un tipo específico, asegúrese de utilizar sólo los métodos y propiedades definidos en ese tipo.
Establezca Option Strict On para detectar cualquier asignación incorrecta de objeto o acceso a miembro en tiempo de
compilación.
Vea también
Referencia
Option Strict (Instrucción)
Conceptos
Colecciones en Visual Basic
Clase de colección de Visual Basic
Conceptos del lenguaje Visual Basic

Eventos en Visual Basic


Un evento es un mensaje que envía un objeto anunciando que ha sucedido algo. Los eventos se implementan mediante
delegados, una forma de puntero de función orientado a objetos que permite invocar una función indirectamente mediante
una referencia a la función.
En esta sección
Eventos y controladores de eventos
Proporciona información general sobre los eventos, los controladores de eventos y terminología relacionada.
WithEvents y la cláusula Handles
Muestra cómo utilizar la palabra clave WithEvents y la cláusula Handles para asociar un evento a un controlador de
eventos.
AddHandler y RemoveHandler
Muestra cómo utilizar las instrucciones AddHandler y RemoveHandler para asociar de forma dinámica un evento a un
controlador de eventos.
Cómo: Agregar eventos a una clase
Describe el proceso para definir eventos.
Cómo: Crear controladores de eventos en el Editor de código de Visual Basic
Proporciona instrucciones para escribir código que responda a eventos en el Editor de código de Visual Basic.
Cómo: Provocar un evento (Visual Basic)
Muestra cómo definir un evento y utiliza la instrucción RaiseEvent para hacer que se produzca el evento.
Cómo: Crear un evento y un controlador (Visual Basic)
Muestra cómo definir un evento y un controlador de eventos y cómo utilizar la instrucción AddHandler para asociarlos.
Cómo: Escribir controladores de eventos
Muestra cómo crear controladores de eventos mediante la cláusula Handles o la instrucción AddHandler.
Cómo: Controlar eventos en Visual Basic
Define una clase que provoca un evento al llamar al método CauseEvent.
Tutorial: Declarar y provocar eventos
Explica paso a paso el proceso de declarar y producir eventos para una clase.
Tutorial: Controlar eventos
Muestra cómo escribir un procedimiento controlador de eventos.
Cómo: Declarar eventos que evitan bloqueos
Muestra cómo definir un evento personalizado que permite llamar a sus controladores de eventos de forma asincrónica.
Cómo: Declarar eventos que evitan que se pierda memoria
Muestra cómo definir un evento personalizado que sólo utiliza la memoria cuando se controla el evento.
Solucionar problemas de controladores de eventos heredados en Visual Basic 2005
Enumera problemas comunes que surgen con controladores de eventos en componentes heredados.
Secciones relacionadas
Delegados de Visual Basic
Información general sobre los delegados en Visual Basic.
Controlar y provocar eventos
Proporciona información general sobre el modelo de eventos de .NET Framework.
Crear controladores de eventos en formularios Windows Forms
Describe cómo trabajar con eventos asociados a objetos de formularios Windows Forms.
Conceptos del lenguaje Visual Basic

Eventos y controladores de eventos


A pesar de que puede visualizar un proyecto de Visual Studio como una serie de procedimientos que se ejecutan
consecutivamente, en realidad la mayoría de los programas están dirigidos por eventos, es decir, el flujo de ejecución está
determinado por elementos externos denominados eventos.
Un evento es una señal que comunica a una aplicación que ha sucedido algo importante. Por ejemplo, cuando un usuario hace
clic en un control de un formulario, el formulario puede provocar un evento Click y llamar a un procedimiento que controla el
evento. Los eventos también permiten que las tareas separadas se comuniquen. Suponga, por ejemplo, que una aplicación
realiza una tarea de ordenación independientemente de la aplicación principal. Si un usuario cancela la ordenación, la
aplicación puede enviar un evento de cancelación que ordene la detención del proceso de ordenación.
Conceptos y términos de los eventos
Esta sección describe los términos y conceptos que se utilizan con eventos en Visual Basic.
Declarar eventos
Los eventos se declaran en clases, estructuras, módulos e interfaces mediante la palabra clave Event, como se muestra en el
siguiente ejemplo:
VB
Event AnEvent(ByVal EventNumber As Integer)

Producir eventos
Un evento es como un mensaje que anuncia que ha pasado algo importante. A la acción de difundir el mensaje se le llama
producir el evento. En Visual Basic, los eventos se producen con la instrucción RaiseEvent, como en el ejemplo siguiente:
VB
RaiseEvent AnEvent(EventNumber)

Los eventos se deben provocar dentro del ámbito de la clase, módulo o estructura donde se declaran. Por ejemplo, una clase
derivada no puede producir eventos heredados de una clase base.
Remitentes de eventos
Cualquier objeto capaz de producir un evento es un remitente de eventos, y también recibe el nombre de origen de eventos.
Los formularios, controles y objetos definidos por el usuario son ejemplos de remitentes de eventos.
Controladores de eventos
Los controladores de eventos son procedimientos llamados cuando se produce un evento correspondiente. Puede utilizar
cualquier subrutina válida con una firma coincidente como controlador de eventos. No obstante, no puede utilizar una función
como controlador de eventos, porque no puede devolver un valor al origen del evento.
Visual Basic utiliza una convención de nomenclatura estándar para controladores de eventos que combina el nombre del
remitente del evento, un signo de subrayado y el nombre del evento. Por ejemplo, el evento Click de un botón denominado
button1 recibiría el nombre de Sub button1_Click.

Nota
Es recomendable utilizar esta convención de nomenclatura al definir controladores de eventos para sus propios eventos, per
o no es estrictamente necesario; puede utilizar cualquier nombre de subrutina válido.

Asociar eventos a controladores de eventos


Para que un controlador de eventos se pueda utilizar, primero debe asociarse a un evento mediante la instrucción Handles o
AddHandler.
La instrucción WithEvents y la cláusula Handles proporcionan una forma declarativa de especificar controladores de eventos.
Los eventos provocados por un objeto declarado con WithEvents los puede controlar cualquier subrutina con una cláusula
Handles que dé nombre a este evento. Aunque la cláusula Handles es la forma estándar de asociar un evento a un
controlador de eventos, está limitada a asociar eventos a controladores de eventos en tiempo de compilación.
Las instrucciones AddHandler y RemoveHandler son más flexibles que la cláusula Handles. Le permiten conectar y
desconectar de forma dinámica los eventos con uno o varios controladores de eventos en tiempo de ejecución, y no requieren
que declare variables de objeto mediante WithEvents. Sin embargo, hay algunas restricciones en el uso de WithEvents. Para
obtener más información, vea WithEvents y la cláusula Handles.
En algunos casos, como con eventos asociados a formularios o controles, Visual Basic finaliza automáticamente un controlador
de eventos vacío y lo asocia con un evento. Por ejemplo, al hacer doble clic en un botón de comando en un formulario en
modo de diseño, Visual Basic crea un controlador de eventos vacío y una variable WithEvents para el botón de comando,
como en el código siguiente:
VB
Friend WithEvents Button1 As System.Windows.Forms.Button
Protected Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
End Sub

Vea también
Tareas
Cómo: Escribir controladores de eventos
Referencia
Handles
AddHandler (Instrucción)
Conceptos
AddHandler y RemoveHandler
WithEvents y la cláusula Handles
Conceptos del lenguaje Visual Basic

WithEvents y la cláusula Handles


La instrucción WithEvents y la cláusula Handles proporcionan una forma declarativa de especificar controladores de eventos.
Los eventos provocados por un objeto declarado con la palabra clave WithEvents pueden controlarse mediante cualquier
procedimiento con una instrucción Handles para ese evento, tal y como se muestra en el ejemplo siguiente:
VB
' Declare a WithEvents variable.
Dim WithEvents EClass As New EventClass

' Call the method that raises the object's events.


Sub TestEvents()
EClass.RaiseEvents()
End Sub

' Declare an event handler that handles multiple events.


Sub EClass_EventHandler() Handles EClass.XEvent, EClass.YEvent
MsgBox("Received Event.")
End Sub

Class EventClass
Public Event XEvent()
Public Event YEvent()
' RaiseEvents raises both events.
Sub RaiseEvents()
RaiseEvent XEvent()
RaiseEvent YEvent()
End Sub
End Class

La instrucción WithEvents y la cláusula Handles son a menudo la mejor opción para los controladores de eventos, ya que la
sintaxis declarativa que utilizan hace que el control de eventos sea más sencillo de codificar, leer y depurar. No obstante, tenga
en cuenta las siguientes limitaciones en la utilización de las variables WithEvents:
No se puede utilizar una variable WithEvents como variable de objeto. Es decir, no es posible declararla como Object;
se debe especificar el nombre de clase al declarar la variable.
Dado que los eventos compartidos no están asociados a instancias de clase, no se puede usar WithEvents para controlar
los eventos mediante declaraciones compartidas. De forma parecida, no se puede utilizar WithEvents ni Handles para
controlar los eventos desde una estructura Structure. En ambos casos, puede utilizar la instrucción AddHandler para
controlar esos eventos.
No se pueden crear matrices de variables WithEvents.
Las variables WithEvents permiten que un solo controlador controle uno o más tipos de eventos, así como que uno o
más controladores de eventos controlen el mismo tipo de evento.
Vea también
Referencia
Handles
WithEvents
AddHandler (Instrucción)
Conceptos
AddHandler y RemoveHandler
Conceptos del lenguaje Visual Basic

AddHandler y RemoveHandler
La instrucción AddHandler se parece a la cláusula Handles en que las dos permiten especificar un controlador de eventos.
Sin embargo, AddHandler, utilizado con RemoveHandler, proporciona más flexibilidad que la cláusula Handles, lo que
permite agregar, quitar y cambiar de forma dinámica el controlador de errores asociado con un evento. Si desea controlar
eventos compartidos o eventos de una estructura, debe utilizar AddHandler.
AddHandler toma dos argumentos: el nombre de un evento de un remitente de evento, como un control, y una expresión que
evalúa a un delegado. No necesita especificar explícitamente la clase delegada al utilizar AddHandler, ya que la instrucción
AddressOf siempre devuelve una referencia al delegado. El ejemplo siguiente asocia un controlador de eventos a un evento
provocado por un objeto:
VB
AddHandler Obj.XEvent, AddressOf Me.XEventHandler

RemoveHandler, que desconecta un evento de un controlador de eventos, utiliza la misma sintaxis que AddHandler. Por
ejemplo:
VB
RemoveHandler Obj.XEvent, AddressOf Me.XEventHandler

Vea también
Tareas
Cómo: Escribir controladores de eventos
Referencia
AddHandler (Instrucción)
Conceptos
Eventos y controladores de eventos
WithEvents y la cláusula Handles
Conceptos del lenguaje Visual Basic

Cómo: Agregar eventos a una clase


Se agregan eventos a una clase declarándolos con la instrucción Events. La declaración incluye el nombre del evento y los
argumentos que utiliza.
La acción de agregar un evento a una clase determina que un objeto de esta clase puede provocar un evento específico. Para
conseguir que se produzca un evento, se debe utilizar la instrucción RaiseEvent. Puede utilizar la palabra clave Handles o la
instrucción AddHandler para asociar el evento a un procedimiento controlador de eventos. Los eventos deben producirse
dentro del ámbito en el que se han declarado. Por ejemplo, una clase derivada no puede producir eventos heredados de una
clase base.
Nota
Los eventos no pueden tener valores devueltos, argumentos opcionales o argumentos ParamArray.

Para agregar un evento a una clase


En la sección Declaraciones del módulo de clase que define la clase, utilice la instrucción Event para declarar el evento
con cualquier argumento que desee que tenga. Por ejemplo:
VB
Public Event PercentDone(ByVal Percent As Single, _
ByRef Cancel As Boolean)

Vea también
Tareas
Tutorial: Declarar y provocar eventos
Tutorial: Controlar eventos
Cómo: Escribir controladores de eventos
Referencia
RaiseEvent (Instrucción)
Handles
AddHandler (Instrucción)
Conceptos
Eventos y controladores de eventos
Los delegados y el operador AddressOf
AddHandler y RemoveHandler
Otros recursos
Polimorfismo
Conceptos del lenguaje Visual Basic

Cómo: Crear controladores de eventos en el Editor de código de


Visual Basic
El Editor de código de Visual Basic ofrece una forma sencilla de crear controladores de eventos para los formularios
Windows Forms. Aunque no permite conectar varios eventos a un único controlador de eventos (vea
Cómo: Conectar varios eventos con un único controlador de eventos en formularios Windows Forms), sí ofrece una forma fácil
y rápida de crear controladores de eventos mientras se trabaja en el código del formulario, sin tener que abrirlo en el
Diseñador de Windows Forms.
Para crear un controlador de eventos en el Editor de código de Visual Basic
1. En el Editor de código, en la lista desplegable Nombre de clase, elija el formulario o el control para el que desea crear
un controlador de eventos.
2. En la lista Nombre de método, en la parte superior del Editor de código, elija el evento para el que desea crear un
controlador.
Visual Basic creará un controlador de eventos y lo agregará a la clase del formulario.

Vea también
Tareas
Cómo: Crear controladores de eventos con el diseñador
Solucionar problemas de controladores de eventos heredados en Visual Basic 2005
Conceptos
Información general sobre controladores de eventos (Formularios Windows Forms)
Otros recursos
Crear controladores de eventos en formularios Windows Forms
Crear un nuevo formulario Windows Forms
Conceptos del lenguaje Visual Basic

Cómo: Provocar un evento (Visual Basic)


En este ejemplo se define un evento (TimeExpired) y se utiliza la instrucción RaiseEvent para hacer que se produzca el evento.
Ejemplo
VB
Public Event TimeExpired(ByVal Status As String)
Public Sub RaiseTimeExpiredEvent()
RaiseEvent TimeExpired("Your time has run out")
End Sub

Este ejemplo de código también está disponible como fragmento de código de IntelliSense. En el selector de fragmentos de
código, se encuentra en Lenguaje Visual Basic. Para obtener más información, vea
Cómo: Insertar fragmentos de código en el código (Visual Basic).
Compilar el código
Para este ejemplo se necesita:
Acceso a los miembros del espacio de nombres System. Agregue una instrucción Imports si no incluye nombres de
miembro completos en el código. Para obtener más información, vea Imports (Instrucción).
La instrucción Event debe estar en el nivel de la clase, no dentro de ningún procedimiento.
La instrucción RaiseEvent debe estar dentro de algún procedimiento de la aplicación.
Vea también
Tareas
Cómo: Crear un evento y un controlador (Visual Basic)
Referencia
Event (Instrucción)
RaiseEvent (Instrucción)
Conceptos
Eventos y controladores de eventos
Otros recursos
Eventos en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Crear un evento y un controlador (Visual Basic)


En este ejemplo se define un evento, TimeExpired, y un controlador de eventos, HandleTimeExpired, y se utiliza la instrucción
AddHandler para asociarlos.
Ejemplo
VB
Public Event TimeExpired(ByVal Status As String)
Public Sub HandleTimeExpired(ByVal Status As String)
' Perform desired processing for when time has expired.
MsgBox("HandleTimeExpired caught the TimeExpired event" & _
vbCrLf & "Status = " & Status)
End Sub
Public Sub SetUpEventHandler()
AddHandler TimeExpired, AddressOf HandleTimeExpired
End Sub

Compilar el código
Para este ejemplo se necesita:
Acceso a los miembros del espacio de nombres System. Agregue una instrucción Imports si no incluye nombres de
miembro completos en el código. Para obtener más información, vea Imports (Instrucción).
La instrucción Event debe estar en el nivel de la clase, no dentro de ningún procedimiento.
La instrucción Event y ambos procedimientos (HandleTimeExpired y SetUpEventHandler) deben estar definidos en la
misma clase o el mismo módulo. De lo contrario, la instrucción AddHandler debe calificar el evento y el controlador
para los objetos en los que están definidos.
Vea también
Tareas
Cómo: Provocar un evento (Visual Basic)
Referencia
Event (Instrucción)
AddHandler (Instrucción)
Conceptos
Eventos y controladores de eventos
Otros recursos
Eventos en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Escribir controladores de eventos


La forma de crear un controlador de eventos depende de cómo quiera asociarlo a los eventos. La manera estándar de crear un
controlador de eventos consiste en usar la palabra clave Handles con la palabra clave WithEvents. Visual Basic proporciona
una segunda forma de controlar los eventos: la instrucción AddHandler. AddHandler y RemoveHandler le permiten iniciar
y detener dinámicamente el control de un evento específico. Es posible utilizar ambos enfoques, pero no se debe utilizar
WithEvents y AddHandler en el mismo evento.
Controlar eventos mediante WithEvents
La palabra clave WithEvents permite crear variables de objeto en el nivel de módulo o clase que pueden utilizarse con la
cláusula Handles en controladores de eventos.
Para controlar eventos mediante WithEvents y la cláusula Handles
1. Cree una clase simple que contiene un evento.
VB
Class Class1
Public Event AnEvent(ByVal EventNumber As Integer)
End Class

2. En la clase o el módulo que controlará el evento, utilice la palabra clave WithEvents para declarar una variable de objeto
para el código fuente de los eventos, como en el ejemplo siguiente:
VB
Public WithEvents ClassInst As Class1

3. En el Editor de código, elija la variable WithEvents que acaba de declarar en la lista desplegable Nombre de clase de la
parte izquierda.
4. Elija el evento que desea controlar de la lista desplegable Method Name en la parte derecha. El Editor de código crea el
procedimiento controlador de eventos vacío con una cláusula Handles.
Nota
Este paso es opcional. Puede crear el procedimiento controlador de eventos de forma manual mientras el procedimient
o que se crea sea una subrutina, tenga la lista de argumentos correcta para que coincida con el evento que se controla
y tenga una cláusula Handles que especifique el evento que se controla.

5. Agregue código de control de eventos al procedimiento controlador de eventos utilizando los argumentos
suministrados. El código siguiente proporciona un ejemplo:
VB
Public Sub ClassInst_AnEvent(ByVal EventNumber As Integer) _
Handles ClassInst.AnEvent
MsgBox("Received event number: " & CStr(EventNumber))
End Sub

Controlar eventos mediante AddHandler


Se puede utilizar la instrucción AddHandler para conectar de forma dinámica eventos a procedimientos controladores de
eventos.
Para controlar eventos mediante AddHandler
1. Cree una subrutina para controlar el evento, como en el ejemplo siguiente:
VB
Public Sub EHandler(ByVal EventNumber As Integer)
MsgBox("Received event number " & CStr(EventNumber))
End Sub

2. Declare una variable de objeto de la clase que sea el origen de los eventos y que desea controlar. A diferencia de la
variable WithEvents, puede ser una variable local en un procedimiento. Por ejemplo:
VB
Public Sub TestAddHandler()
Dim CI As New Class1
End Sub

3. Utilice la instrucción AddHandler para especificar el nombre del remitente del evento, y la instrucción AddressOf para
proporcionar el nombre del controlador de eventos. Por ejemplo, agregue el código siguiente al final de la subrutina
TestAddHandler:

VB
AddHandler CI.AnEvent, AddressOf EHandler

Cualquier procedimiento puede servir como controlador de eventos siempre que admita los argumentos correctos para
el evento que se controla.
Utilizar RemoveHandler para detener el control de eventos
Puede utilizar la instrucción RemoveHandler para desconectar de forma dinámica eventos de procedimientos controladores
de eventos.
+Para detener el control de eventos con RemoveHandler
Utilice la instrucción RemoveHandler para especificar el nombre del remitente del evento y la instrucción AddressOf
para proporcionar el nombre del controlador de eventos. La sintaxis para las instrucciones RemoveHandler siempre
coincidirá exactamente con la instrucción AddHandler utilizada para iniciar el control de eventos. Por ejemplo:
VB
RemoveHandler CI.AnEvent, AddressOf EHandler

Controlar eventos heredados de una clase base


Las clases derivadas (clases que heredan características de una clase base) pueden controlar eventos provocados por su clase
base mediante la instrucción Handles MyBase.
Controlar eventos de una clase base
Declare un controlador de eventos en la clase derivada agregando una instrucción Handles MyBase.eventname a la
línea de declaración del procedimiento controlador de eventos, donde eventname es el nombre del evento de la clase
base que está controlando. Por ejemplo:
VB
Public Class BaseClass
Public Event BaseEvent(ByVal i As Integer)
' Place methods and properties here.
End Class

Public Class DerivedClass


Inherits BaseClass
Sub EventHandler(ByVal x As Integer) Handles MyBase.BaseEvent
' Place code to handle events from BaseClass here.
End Sub
End Class

Vea también
Referencia
Handles
AddHandler (Instrucción)
Conceptos
Eventos y controladores de eventos
Los delegados y el operador AddressOf
AddHandler y RemoveHandler
Conceptos del lenguaje Visual Basic

Cómo: Controlar eventos en Visual Basic


En el ejemplo siguiente se define una clase que produce un evento al llamar al método CauseEvent. Este evento está
controlado por un procedimiento controlador de eventos denominado EventHandler.
Ejemplo
Para ejecutar este ejemplo, agregue el código siguiente a la clase de formulario de un proyecto de aplicación para Windows
Visual Basic y llame al procedimiento TestEvents con un argumento de tipo integer.
VB
Public Class Class1
' Declare an event for this class.
Public Event Event1(ByVal EventNumber As Integer)
' Define a method that raises an event.
Sub CauseEvent(ByVal EventNumber As Integer)
RaiseEvent Event1(EventNumber)
End Sub
End Class

Protected Sub TestEvents(ByVal EventNumber As Integer)


Dim Obj As New Class1
AddHandler Obj.Event1, AddressOf Me.EventHandler
' Cause the object to raise an event.
Obj.CauseEvent(EventNumber)
End Sub

Sub EventHandler(ByVal EventNumber As Integer)


MsgBox("Received event number " & EventNumber.ToString)
End Sub

Vea también
Tareas
Cómo: Escribir controladores de eventos
Conceptos
Eventos y controladores de eventos
Los delegados y el operador AddressOf
AddHandler y RemoveHandler
Conceptos del lenguaje Visual Basic

Tutorial: Declarar y provocar eventos


Este tutorial explica cómo declarar y provocar eventos para una clase denominada Widget. Cuando finalice los pasos tal vez
desee leer el tema complementario, Tutorial: Controlar eventos, que muestra cómo utilizar eventos de objetos Widget para
proporcionar información de estado en una aplicación.
La clase Widget
Suponga por el momento que tiene una clase Widget. Su clase Widget tiene un método que puede tardar bastante tiempo en
ejecutarse, y desea que la aplicación pueda establecer alguna clase de indicador de finalización.
Por supuesto, podría hacer que el objeto Widget mostrara un cuadro de diálogo de porcentaje finalizado, pero entonces ese
cuadro de diálogo aparecería en cada proyecto en el que utilizase la clase Widget. Un buen principio del diseño de objetos
consiste en dejar que la aplicación que utiliza un objeto controle la interfaz de usuario, a no ser que el objeto tenga como única
finalidad administrar un formulario o un cuadro de diálogo.
La finalidad de Widget es realizar otras tareas, de modo que es mejor agregar un evento PercentDone y dejar que el
procedimiento que llama a los métodos de Widget lo controle y muestre las actualizaciones del estado. El evento PercentDone
también puede proporcionar un mecanismo para cancelar la tarea.
Para generar el ejemplo de código para este tema
1. Abra un nuevo proyecto de aplicación para Windows de Visual Basic y cree un formulario llamado Form1.
2. Agregue dos botones y una etiqueta a Form1.
3. Dé nombre a los objetos como se muestra en la tabla siguiente.
Objeto Propiedad Ajuste
Button1 Text Start Task

Button2 Text Cancelar

Label (Name), Text lblPercentDone, 0

4. En el menú Proyecto, elija Agregar clase para agregar al proyecto una clase denominada Widget.vb.

Para declarar un evento para la clase Widget


Utilice la palabra clave Event para declarar un evento en la clase Widget. Observe que un evento puede tener
argumentos ByVal y ByRef, como se puede ver en el evento PercentDone de Widget:
VB
Public Event PercentDone(ByVal Percent As Single, _
ByRef Cancel As Boolean)

Cuando el objeto de llamada recibe un evento PercentDone, el argumento Percent contiene el porcentaje de la tarea que se ha
finalizado. El argumento Cancel se puede establecer en True para cancelar el método que provocó el evento.
Nota
Los argumentos de eventos se pueden declarar igual que se hace con los argumentos de procedimientos, con las siguientes
excepciones: los eventos no pueden tener argumentos Optional, ParamArray, ni valores devueltos.

El evento PercentDone lo produce el método LongTask de la clase Widget. LongTask acepta dos argumentos: el período de
tiempo durante el cual el método simulará trabajar y el intervalo de tiempo mínimo antes de que LongTask se detenga para
provocar el evento PercentDone.
Para provocar el evento PercentDone
1. Para simplificar el acceso a la propiedad Timer utilizada por esta clase, agregue una instrucción Imports a la parte
superior de la sección de declaraciones del módulo de clase, por encima de la instrucción Class Widget.
VB
Imports Microsoft.VisualBasic.DateAndTime

2. Agregue el código siguiente a la clase Widget:


VB
Public Sub LongTask(ByVal Duration As Single, _
ByVal MinimumInterval As Single)
Dim Threshold As Single
Dim Start As Single
Dim blnCancel As Boolean

' The Timer property of the DateAndTime object returns the seconds
' and milliseconds that have passed since midnight.
Start = CSng(Timer)
Threshold = MinimumInterval

Do While CSng(Timer) < (Start + Duration)


' In a real application, some unit of work would
' be done here each time through the loop.
If CSng(Timer) > (Start + Threshold) Then
RaiseEvent PercentDone( _
Threshold / Duration, blnCancel)
' Check to see if the operation was canceled.
If blnCancel Then Exit Sub
Threshold = Threshold + MinimumInterval
End If
Loop
End Sub

Cuando su aplicación llama al método LongTask, la clase Widget provoca el evento PercentDone cada vez que transcurran los
especificados en MinimumInterval. Cuando se vuelve del evento, LongTask comprueba si se estableció en True el argumento
Cancel.

En este punto son necesarias algunas aclaraciones. Para simplificar, en el procedimiento LongTask se supone que el usuario
conoce de antemano cuánto tarda en realizarse la tarea. Esto casi nunca es así. Dividir las tareas en bloques del mismo tamaño
puede resultar difícil y, a menudo, lo que es más importante para los usuarios es simplemente el tiempo que transcurre antes
de recibir una indicación de que algo está ocurriendo.
También puede haber detectado otro error en este ejemplo. La propiedad Timer devuelve el número de segundos
transcurridos desde medianoche; por lo tanto, la aplicación se bloquea si se inicia inmediatamente antes de medianoche. Una
forma más cuidadosa de medir el tiempo tendría en cuenta condiciones de límite como ésta, o las evitaría globalmente
utilizando propiedades como Now.
Ahora que la clase Widget puede provocar eventos, puede continuar con el siguiente tutorial. Tutorial: Controlar eventos
explica cómo utilizar WithEvents para asociar un controlador de eventos con el evento PercentDone.
Vea también
Tareas
Tutorial: Controlar eventos
Cómo: Escribir controladores de eventos
Referencia
Timer (Propiedad)
WithEvents
Now (Propiedad)
Event (Instrucción)
ByVal
ByRef
Imports (Instrucción)
Conceptos
Eventos y controladores de eventos
Los delegados y el operador AddressOf
AddHandler y RemoveHandler
Conceptos del lenguaje Visual Basic

Tutorial: Controlar eventos


Éste es el segundo de los dos temas que muestran cómo trabajar con eventos. En el primer tema,
Tutorial: Declarar y provocar eventos, se muestra cómo declarar y provocar eventos. Esta sección utiliza el formulario y la clase
del tutorial para mostrar cómo controlar eventos cuando tienen lugar.
La clase Widget de ejemplo utiliza las instrucciones de control de eventos tradicionales. Visual Basic proporciona otras técnicas
para trabajar con eventos. Como ejercicio, puede modificar este ejemplo para utilizar las instrucciones AddHandler y
Handles.
Para controlar el evento PercentDone de la clase Widget
Coloque el código siguiente en Form1:
VB
Private WithEvents mWidget As Widget
Private mblnCancel As Boolean

La palabra clave WithEvents especifica que se utiliza la variable mWidget para controlar los eventos de un objeto. Puede
especificar el tipo de objeto proporcionando el nombre de la clase de la que se creará el objeto.
La variable mWidget se declara en Form1 porque las variables WithEvents deben ser de nivel de clase. Esto es cierto
independientemente del tipo de módulo donde se coloquen.
Se utiliza la variable mblnCancel para cancelar el método LongTask.
Escritura de código para controlar eventos
Tan pronto como declara una variable utilizando WithEvents, el nombre de variable aparece en la lista desplegable izquierda
del Editor de código de la clase. Cuando selecciona mWidget, aparecen los eventos de la clase Widget en la lista desplegable
derecha. Al seleccionar un evento se muestra el procedimiento de evento correspondiente, con el prefijo mWidget y un carácter
de subrayado. Se da a todos los procedimientos de eventos asociados a la variable WithEvents el nombre de variable como
prefijo.
Para controlar un evento
1. Seleccione mWidget en la lista desplegable izquierda del Editor de código.
2. Seleccione el evento PercentDone en la lista desplegable derecha. El Editor de código abre el procedimiento de evento
mWidget_PercentDone.

Nota
El Editor de código es útil, pero no necesario, para insertar los nuevos controladores de eventos. En este tutorial, es m
ás directo copiar simplemente los controladores de eventos en el código.

3. Agregue el código siguiente al controlador de eventos mWidget_PercentDone:


VB
Private Sub mWidget_PercentDone( _
ByVal Percent As Single, _
ByRef Cancel As Boolean _
) Handles mWidget.PercentDone
lblPercentDone.Text = CInt(100 * Percent) & "%"
My.Application.DoEvents()
If mblnCancel Then Cancel = True
End Sub
Siempre que se provoca el evento PercentDone, el procedimiento de evento muestra el porcentaje completo en un
control Label. El método DoEvents permite volver a dibujar la etiqueta y también le da al usuario la oportunidad de
hacer clic en el botón Cancel.
4. Agregue el código siguiente para el controlador de eventos Button2_Click:
VB
Private Sub Button2_Click( _
ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles Button2.Click
mblnCancel = True
End Sub

Si el usuario hace clic en el botón Cancel cuando se está ejecutando LongTask, se ejecuta el evento Button2_Click tan pronto
como la instrucción DoEvents permite que se produzca el procesamiento de eventos. La variable mblnCancel de nivel de clase
se establece como True y el evento mWidget_PercentDone lo comprueba luego y establece el argumento ByRef Cancel como
True.
Conectar la variable WithEvents con un objeto
Form1 está ahora configurado para controlar los eventos de un objeto Widget. Sólo queda buscar un objeto Widget en alguna
parte.
Cuando declara una variable WithEvents en tiempo de diseño, no se asocia ningún objeto a ésta. La variable WithEvents es
como cualquier otra variable de objeto. Tendrá que crear un objeto y asignar una referencia a éste con la variable WithEvents.
Para crear un objeto y asignarlo una referencia
1. Seleccione (Eventos Form1) en la lista desplegable izquierda del Editor de código.
2. Seleccione el evento Load en la lista desplegable derecha. El Editor de código abre el procedimiento de evento
Form1_Load.

3. Agregue el código siguiente para el procedimiento de evento Form1_Load a fin de crear el objeto Widget:
VB
Private Sub Form1_Load( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs _
) Handles MyBase.Load
mWidget = New Widget
End Sub

Cuando se ejecuta este código, Visual Basic crea un objeto Widget y conecta sus eventos a los procedimientos de evento
asociados con mWidget. Desde este momento en adelante, siempre que el objeto Widget provoque el evento PercentDone, se
ejecutará el procedimiento de evento mWidget_PercentDone.
Para llamar al método LongTask
Agregue el código siguiente al controlador de eventos Button1_Click:
VB
Private Sub Button1_Click( _
ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles Button1.Click
mblnCancel = False
lblPercentDone.Text = "0%"
lblPercentDone.Refresh()
mWidget.LongTask(12.2, 0.33)
If Not mblnCancel Then lblPercentDone.Text = CStr(100) & "%"
End Sub

Antes de llamar al método LongTask, la etiqueta que muestra el porcentaje completo debe inicializarse y el indicador Boolean
de nivel de clase que cancela el método debe establecerse como False.
LongTask se llama con una duración de tarea de 12,2 segundos. Se provoca el evento PercentDone una vez cada tercio de
segundo. Cada vez que se provoca el evento, se ejecuta el procedimiento de evento mWidget_PercentDone.
Cuando termina LongTask, se comprueba mblnCancel para ver si LongTask ha finalizado de forma normal o si se ha detenido
porque mblnCancel estaba establecido como True. El porcentaje completo se actualiza sólo en el primer caso.
Para ejecutar el programa
1. Presione F5 para poner el proyecto en modo de ejecución.
2. Haga clic en el botón Iniciar tarea. Cada vez que se provoca el evento PercentDone, se actualiza la etiqueta con el
porcentaje de la tarea que se ha completado.
3. Haga clic en el botón Cancelar para detener la tarea. Observe que la apariencia del botón Cancelar no cambia
inmediatamente cuando se hace clic en él. El evento Click no puede tener lugar hasta que la instrucción
My.Application.DoEvents permita el procesamiento del evento.
Nota
El método My.Application.DoEvents no procesa los eventos exactamente de la misma manera en que lo hace el for
mulario. Por ejemplo, en este tutorial, debe hacer clic dos veces en el botón Cancelar. Para permitir que el formulario c
ontrole directamente los eventos, puede utilizar el subprocesamiento múltiple. Para obtener más información, vea
Subprocesamiento múltiple en Visual Basic.

Puede resultarle instructivo ejecutar el programa con F11 y recorrer el código línea a línea. Puede ver claramente cómo la
ejecución escribe LongTask y luego vuelve a escribir Form1 brevemente cada vez que se provoca el evento PercentDone.
¿Qué sucedería si cuando se estaba devolviendo la ejecución al código de Form1, se llamara al método LongTask de nuevo? En
el peor de los casos, podría ocurrir un desbordamiento de la pila si se llamara a LongTask cada vez que se provocara el evento.
Puede hacer que la variable mWidget controle los eventos de un objeto Widget distinto asignando una referencia al nuevo
Widget con mWidget. De hecho, puede hacer que el código de Button1_Click realice esto cada vez que hace clic en el botón.

Para controlar eventos para un Widget distinto


Agregue la línea de código siguiente al procedimiento Button1_Click, inmediatamente antes de la línea que indica
mWidget.LongTask(12.2, 0.33):

VB
mWidget = New Widget
' Create a new Widget object.

El código anterior crea un nuevo Widget cada vez que se hace clic en el botón. Tan pronto como finaliza el método LongTask, se
libera la referencia al objeto Widget y se destruye éste.
Las variables WithEvents pueden contener sólo una referencia a objeto a la vez, de modo que si asigna otro objeto Widget a
mWidget, los eventos del objeto Widget anterior ya no se controlarán. Si mWidget es la única variable de objeto que contiene
una referencia al objeto Widget antiguo, éste se destruirá. Si desea controlar eventos desde varios objetos Widget, utilice la
instrucción AddHandler para procesar independientemente los eventos de cada objeto.
Nota
Puede declarar todas las variables WithEvents que sean necesarias, pero no se admiten las matrices de variables WithEven
ts.

Vea también
Tareas
Tutorial: Declarar y provocar eventos
Cómo: Escribir controladores de eventos
Referencia
Handles
WithEvents
Conceptos
Eventos y controladores de eventos
Los delegados y el operador AddressOf
AddHandler y RemoveHandler
Otros recursos
Polimorfismo
Conceptos del lenguaje Visual Basic

Cómo: Declarar eventos que evitan bloqueos


Hay varias circunstancias en las que resulta importante que un controlador de eventos no bloquee los controladores de
eventos subsiguientes. Los eventos personalizados permiten al evento llamar de forma asincrónica a sus controladores de
eventos.
De manera predeterminada, el campo de almacén de respaldo de una declaración de evento es un delegado multidifusión que
combina de forma consecutiva todos los controladores de eventos. Esto significa que si un controlador tarda mucho tiempo en
completarse, bloquea a los demás controladores hasta que finaliza. (Los controladores de eventos con buen comportamiento
no deben realizar operaciones largas ni que puedan producir bloqueos.)
En lugar de utilizar la implementación predeterminada de eventos que proporciona Visual Basic, puede utilizar un evento
personalizado para ejecutar los controladores de eventos de forma asincrónica.
Ejemplo
En este ejemplo, el descriptor de acceso AddHandler agrega el delegado para cada controlador del evento Click en un
elemento ArrayList almacenado en el campo EventHandlerList.
Cuando el código provoca el evento Click, el descriptor de acceso RaiseEvent invoca a todos los delegados del controlador
de eventos de forma asincrónica con el método BeginInvoke. Ese método invoca cada controlador en un subproceso de trabajo
y vuelve inmediatamente, por lo que los controladores no se pueden bloquear entre si.
VB
Public NotInheritable Class ReliabilityOptimizedControl
'Defines a list for storing the delegates
Private EventHandlerList As New ArrayList

'Defines the Click event using the custom event syntax.


'The RaiseEvent always invokes the delegates asynchronously
Public Custom Event Click As EventHandler
AddHandler(ByVal value As EventHandler)
EventHandlerList.Add(value)
End AddHandler
RemoveHandler(ByVal value As EventHandler)
EventHandlerList.Remove(value)
End RemoveHandler
RaiseEvent(ByVal sender As Object, ByVal e As EventArgs)
For Each handler As EventHandler In EventHandlerList
If handler IsNot Nothing Then
handler.BeginInvoke(sender, e, Nothing, Nothing)
End If
Next
End RaiseEvent
End Event
End Class

Vea también
Tareas
Cómo: Declarar eventos que evitan que se pierda memoria
Referencia
Event (Instrucción)
ArrayList
BeginInvoke
Conceptos del lenguaje Visual Basic

Cómo: Declarar eventos que evitan que se pierda memoria


Hay varias circunstancias en las que es importante que una aplicación mantenga un bajo uso de memoria. Los eventos
personalizados permiten a la aplicación utilizar memoria sólo para los eventos que controla.
De manera predeterminada, cuando una clase declara un evento, el compilador asigna memoria para que un campo almacene
información de eventos. Si una clase tiene muchos eventos no usados, ocupan memoria inútilmente.
En lugar de utilizar la implementación predeterminada de los eventos que Visual Basic proporciona, puede utilizar los eventos
personalizados para administrar más cuidadosamente el uso de memoria.
Ejemplo
En este ejemplo, la clase utiliza una instancia de la clase EventHandlerList, almacenada en el campo Events, para guardar
información sobre los eventos que están en uso. La clase EventHandlerList es una clase de lista optimizada diseñada para
contener delegados.
Todos los eventos de la clase usan el campo Events para realizar un seguimiento de qué métodos está controlando cada
evento.
VB
Public Class MemoryOptimizedBaseControl
' Define a delegate store for all event handlers.
Private Events As New System.ComponentModel.EventHandlerList

' Define the Click event to use the delegate store.


Public Custom Event Click As EventHandler
AddHandler(ByVal value As EventHandler)
Events.AddHandler("ClickEvent", value)
End AddHandler
RemoveHandler(ByVal value As EventHandler)
Events.RemoveHandler("ClickEvent", value)
End RemoveHandler
RaiseEvent(ByVal sender As Object, ByVal e As EventArgs)
CType(Events("ClickEvent"), EventHandler).Invoke(sender, e)
End RaiseEvent
End Event

' Define the Click event to use the same delegate store.
Public Custom Event DoubleClick As EventHandler
AddHandler(ByVal value As EventHandler)
Events.AddHandler("DoubleClickEvent", value)
End AddHandler
RemoveHandler(ByVal value As EventHandler)
Events.RemoveHandler("DoubleClickEvent", value)
End RemoveHandler
RaiseEvent(ByVal sender As Object, ByVal e As EventArgs)
CType(Events("DoubleClickEvent"), EventHandler).Invoke(sender, e)
End RaiseEvent
End Event
' Define additional events to use the same delegate store.
' ...
End Class

Vea también
Tareas
Cómo: Declarar eventos que evitan bloqueos
Referencia
Event (Instrucción)
EventHandlerList
Conceptos del lenguaje Visual Basic

Solucionar problemas de controladores de eventos heredados


en Visual Basic 2005
Este tema enumera problemas comunes que surgen con controladores de eventos en componentes heredados.
Procedimientos
El código de un controlador de eventos se ejecuta dos veces por llamada
Un controlador de eventos heredado no debe incluir una cláusula Handles. El método de la clase base está asociado ya
con el evento y se iniciará en consecuencia. Quite la cláusula Handles del método heredado.
VB
' INCORRECT
Protected Overrides Sub Button1_Click( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles Button1.Click

' The Handles clause will cause all code


' in this block to be executed twice.
End Sub

Si el método heredado no tiene una palabra clave Handles, compruebe que el código no contiene una instrucción
AddHandler (Instrucción) o métodos adicionales que controlen el mismo evento.
Vea también
Tareas
Cómo: Escribir controladores de eventos
Conceptos
Eventos y controladores de eventos
Cómo: Controlar eventos en Visual Basic
Otros recursos
Eventos en Visual Basic
Conceptos del lenguaje Visual Basic

Delegados de Visual Basic


Los delegados son una forma de puntero de función orientado a objetos que permite invocar una función indirectamente
mediante una referencia a la función. Los delegados se pueden utilizar para enlazar controladores de eventos y pasar un
procedimiento de un procedimiento a otro.
En esta sección
Los delegados y el operador AddressOf
Proporciona una introducción a los delegados y a cómo se utilizan.
Cómo: Invocar un método delegado
Crea un procedimiento de ordenación en una clase que utiliza la ordenación alfabética estándar en la mayoría de los cuadros
de lista, pero que puede cambiar en tiempo de ejecución a un procedimiento de ordenación personalizado. Para ello, pasa el
procedimiento de ordenación personalizado a la clase de ordenación en tiempo de ejecución, utilizando delegados.
Cómo: Pasar procedimientos a otro procedimiento en Visual Basic
Muestra cómo utilizar los delegados para pasar un procedimiento a otro procedimiento.
Secciones relacionadas
Eventos en Visual Basic
Información general sobre los eventos de Visual Basic.
Controlar y provocar eventos
Proporciona información general sobre el modelo de evento en .NET Framework.
Crear controladores de eventos en formularios Windows Forms
Describe cómo trabajar con eventos asociados a objetos de formularios Windows Forms.
Conceptos del lenguaje Visual Basic

Los delegados y el operador AddressOf


Los delegados son objetos que puede utilizar para llamar a los métodos de otros objetos. Algunas veces están descritos como
punteros de función con seguridad de tipos porque son parecidos a los punteros de función utilizados en otros lenguajes de
programación. Pero a diferencia de los punteros de función, los delegados de Visual Basic son un tipo de referencia basado en
la clase System.Delegate. Los delegados pueden hacer referencia a los dos métodos compartidos, métodos a los que se pueden
llamar sin una instancia específica de una clase, y a métodos de instancia.
Delegados y eventos
Los delegados son útiles en situaciones donde es necesario un intermediario entre el procedimiento que realiza una llamada y
el procedimiento que la recibe. Por ejemplo, puede que desee que un objeto que provoca eventos sea capaz de llamar a
diferentes controladores de eventos bajo diferentes circunstancias. Desgraciadamente, el objeto que provoca los eventos no
puede saber con anticipación qué controlador de eventos está controlando un evento específico. Visual Basic le permite asociar
dinámicamente controladores de eventos con eventos creando un delegado para el usuario cuando utiliza la instrucción
AddHandler. En tiempo de ejecución, el delegado remite las llamadas al controlador de eventos adecuado.
Aunque puede crear sus propios delegados, en la mayoría de los casos Visual Basic crea el delegado y se ocupa de los detalles.
Por ejemplo, una instrucción Event define de forma implícita una clase delegada denominada <EventName>EventHandler
como clase anidada de la clase que contiene la instrucción Event, y con la misma firma que el evento. La instrucción
AddressOf crea de forma implícita una instancia de un delegado. Por ejemplo, las siguientes dos líneas de código son
equivalentes:
VB
AddHandler Button1.Click, AddressOf Me.Button1_Click
' The previous line of code is shorthand for the next line of code.
AddHandler Button1.Click, New EventHandler(AddressOf Button1_Click)

Puede utilizar el método abreviado para crear delegados en cualquier lugar donde el compilador pueda determinar el tipo de
delegado por el contexto.
Declarar eventos que utilicen un tipo de delegado existente
En algunas situaciones, puede que desee declarar un evento para que utilice un tipo de delegado existente como delegado
subyacente. La sintaxis siguiente describe cómo hacerlo:
VB
Delegate Sub DelegateType()
Event AnEvent As DelegateType

Esto resulta útil cuando se desea enrutar diversos eventos hacia el mismo controlador.
Variables delegadas y parámetros
Puede utilizar delegados para otras tareas, no relacionadas con eventos, como un subprocesamiento libre o con
procedimientos que necesiten llamar a diferentes versiones de funciones en tiempo de compilación.
Por ejemplo, suponga que tiene una aplicación de anuncio clasificado que incluye un cuadro de lista con nombres de coches.
Los anuncios están ordenados por títulos, que normalmente son las marcas de los coches. Un problema con el que puede
encontrarse se produce cuando algunos coches incluyen el año del coche antes de la marca. El problema es que la
funcionalidad de ordenación integrada del cuadro de lista ordena únicamente por códigos de carácter; primero coloca todos
los anuncios que empiezan por el año y, a continuación, los anuncios que empiezan por la marca.
Para corregir este problema, puede crear un procedimiento de ordenación en una clase que utilice la ordenación alfabética
estándar en la mayoría de los cuadros de lista, pero que pueda cambiar en tiempo de ejecución al procedimiento de
ordenación personalizado para anuncios de coches. Para ello, pasa el procedimiento de ordenación personalizado a la clase de
ordenación en tiempo de ejecución, utilizando delegados.
Cada clase delegada define un constructor que acepta una especificación de un método de objeto. La sintaxis siguiente
proporciona un ejemplo de un parámetro a dicho constructor delegado:
AddressOf [expression.]methodname
El tipo de tiempo de compilación de expression debe ser una clase o una interfaz con un método por el nombre especificado
cuya firma coincida con la firma de la clase delegada. Este método puede ser un método compartido (clase) o un método de
instancia.
Vea también
Tareas
Cómo: Pasar procedimientos a otro procedimiento en Visual Basic
Cómo: Invocar un método delegado
Cómo: Escribir controladores de eventos
Referencia
Delegate (Instrucción)
AddressOf (Operador)
Conceptos
Eventos y controladores de eventos
AddHandler y RemoveHandler
Aplicaciones multiproceso
Conceptos del lenguaje Visual Basic

Cómo: Invocar un método delegado


Este ejemplo muestra cómo asociar un método a un delegado e invocar luego este método a través del delegado.
Cree el delegado y los procedimientos correspondientes
1. Cree un delegado denominado MySubDelegate.

Delegate Sub MySubDelegate(ByVal x As Integer)

2. Declare una clase que contenga un método con la misma firma que el delegado.

Class class1
Sub Sub1(ByVal x As Integer)
MsgBox("The value of x is: " & CStr(x))
End Sub
End Class

3. Defina un método que cree una instancia del delegado e invoque el método asociado al delegado llamando al método
Invoke integrado.

Protected Sub DelegateTest()


Dim c1 As New class1
' Create an instance of the delegate.
Dim msd As MySubDelegate = AddressOf c1.Sub1
' Call the method.
msd.Invoke(10)
End Sub

Vea también
Tareas
Cómo: Escribir controladores de eventos
Referencia
Delegate (Instrucción)
Conceptos
Los delegados y el operador AddressOf
Eventos y controladores de eventos
AddHandler y RemoveHandler
Aplicaciones multiproceso
Conceptos del lenguaje Visual Basic

Cómo: Pasar procedimientos a otro procedimiento en Visual


Basic
Este ejemplo muestra cómo se utilizan los delegados para pasar un procedimiento a otro.
Un delegado es un tipo que puede utilizar como cualquier otro tipo en Visual Basic. El operador AddressOf devuelve un objeto
de delegado cuando se aplica a un nombre de procedimiento.
Este ejemplo tiene un procedimiento con un parámetro de delegado que puede llevar una referencia a otro procedimiento
obtenido con el operador AddressOf.
Crear el delegado y los procedimientos correspondientes
1. Cree un delegado denominado MathOperator.
VB
Delegate Function MathOperator( _
ByVal x As Double, _
ByVal y As Double _
) As Double

2. Cree un procedimiento denominado AddNumbers con los parámetros y el valor devuelto que coincidan con aquéllos de
MathOperator para que coincidan las firmas.

VB
Function AddNumbers( _
ByVal x As Double, _
ByVal y As Double _
) As Double
Return x + y
End Function

3. Cree un procedimiento denominado SubtractNumbers con una firma que coincida con MathOperator.
VB
Function SubtractNumbers( _
ByVal x As Double, _
ByVal y As Double _
) As Double
Return x - y
End Function

4. Cree un procedimiento denominado DelegateTest que tome un delegado como parámetro.


Este procedimiento puede aceptar una referencia para AddNumbers o SubtactNumbers porque sus firmas coinciden con la
firma MathOperator.
VB
Sub DelegateTest( _
ByVal x As Double, _
ByVal op As MathOperator, _
ByVal y As Double _
)
Dim ret As Double
ret = op.Invoke(x, y) ' Call the method.
MsgBox(ret)
End Sub

5. Cree un procedimiento denominado Test que llame a DelegateTest una vez con el delegado para AddNumbers como
parámetro y, de nuevo, con el delegado para SubtractNumbers como parámetro.
VB
Protected Sub Test()
DelegateTest(5, AddressOf AddNumbers, 3)
DelegateTest(9, AddressOf SubtractNumbers, 3)
End Sub

Cuando se llama a Test, muestra en primer lugar el resultado de AddNumbers al actuar sobre 5 y 3, que es 8. A
continuación, se muestra el resultado de SubtractNumbers al actuar sobre 9 y 3, que es 6.

Vea también
Tareas
Cómo: Invocar un método delegado
Referencia
AddressOf (Operador)
Delegate (Instrucción)
Otros recursos
Delegados de Visual Basic
Conceptos del lenguaje Visual Basic

Interfaces en Visual Basic


Las Interfaces definen las propiedades, métodos y eventos que pueden implementar las clases. Las interfaces le permiten
definir características como grupos pequeños de propiedades, métodos y eventos estrechamente relacionados; de esta forma
se reducen los problemas de compatibilidad, ya que pueden desarrollarse implementaciones mejoradas para las interfaces sin
poner en peligro el código existente. Se pueden agregar nuevas características en cualquier momento, mediante el desarrollo
de implementaciones e interfaces adicionales.
En versiones anteriores de Visual Basic, podía utilizar interfaces pero no crearlas directamente. En esta versión, puede utilizar la
instrucción Interface, que permite definir interfaces reales como entidades diferenciadas a partir de clases e implementarlas
con una versión mejorada de la palabra clave Implements.
En esta sección
Información general sobre interfaces
Proporciona información general sobre los interfaces y cómo los implementa Visual Basic.
Definición de interfaz
Describe cómo definir interfaces con las instrucciones Interface y End Interface.
Palabra clave Implements e instrucción Implements
Describe cómo indicar que una sección de código implementa una interfaz específica.
Ejemplos de implementación de interfaces en Visual Basic
Proporciona tres ejemplos de implementación de interfaces.
Cuándo se deben utilizar interfaces
Explica cuándo se deben utilizar interfaces en lugar de una jerarquía de herencia.
Cómo: Crear e implementar interfaces
Proporciona los pasos necesarios para definir e implementar una interfaz y aporta algunos ejemplos.
Tutorial: Crear e implementar interfaces
Proporciona un procedimiento detallado que le conduce a través del proceso de definición e implementación de su propia
interfaz.
Secciones relacionadas
Herencia en Visual Basic
Explica la compatibilidad de Visual Basic con la herencia y permite definir clases que sirven de base para clases derivadas.
Conceptos del lenguaje Visual Basic

Información general sobre interfaces


Las interfaces, como las clases, definen un conjunto de propiedades, métodos y eventos. Pero de forma contraria a las clases,
las interfaces no proporcionan implementación. Se implementan como clases y se definen como entidades separadas de las
clases.
Una interfaz representa un contrato, en el cual una clase que implementa una interfaz debe implementar cualquier aspecto de
dicha interfaz exactamente como esté definido.
Con las interfaces, puede definir características como grupos pequeños de miembros relacionados estrechamente. Puede
desarrollar implementaciones mejoradas para sus interfaces sin poner en peligro el código existente, minimizando de este
modo los problemas de compatibilidad. También puede agregar nuevas características en cualquier momento, mediante el
desarrollo de implementaciones e interfaces adicionales.
A pesar de que las implementaciones de interfaces pueden evolucionar, las propias interfaces no pueden cambiarse una vez
editadas. Los cambios que se realicen en una interfaz editada pueden interrumpir el código existente. Si piensa en una interfaz
como si fuera un contrato, resulta evidente que ambas partes del contrato tienen un papel específico. El editor de una interfaz
se compromete a no cambiar nunca la interfaz, y la persona que la implementa se compromete a implementarla exactamente
tal y como haya sido diseñada.
En versiones anteriores de Visual Basic, podía utilizar interfaces pero no crearlas directamente. Ahora puede definir verdaderas
interfaces mediante la instrucción Interface e implementarlas con una versión mejorada de la palabra clave Implements.
Vea también
Tareas
Cómo: Crear e implementar interfaces
Tutorial: Crear e implementar interfaces
Referencia
Instrucción Interface (Visual Basic)
Conceptos
Definición de interfaz
Palabra clave Implements e instrucción Implements
Ejemplos de implementación de interfaces en Visual Basic
Cuándo se deben utilizar interfaces
Otros recursos
Herencia en Visual Basic
Conceptos del lenguaje Visual Basic

Definición de interfaz
Las definiciones de interfaz se encuentran dentro de las instrucciones Interface y End Interface. Después de la instrucción
Interface, puede agregar una instrucción Inherits opcional que proporciona una lista de una o varias interfaces heredadas.
Las instrucciones Inherits deben ir antes que el resto de instrucciones de una declaración, a excepción de los comentarios. El
resto de instrucciones de una definición de interfaz deberían ser instrucciones Event, Sub, Function, Property, Interface,
Class, Structure y Enum. Las interfaces no pueden contener código de implementación ni instrucciones asociadas a código de
implementación, como End Sub o End Property.
En un espacio de nombres, las instrucciones de interfaz son de manera predeterminada Friend, pero también se pueden
declarar explícitamente como Public o Friend. Las interfaces definidas dentro de las clases, módulos, interfaces y estructuras
son de manera predeterminada Public, pero también se pueden declarar explícitamente como Public, Friend, Protected o
Private.
Nota
La palabra clave Shadows se puede aplicar a todos los miembros de la interfaz. La palabra clave Overloads se puede aplicar
a las instrucciones declaradas Sub, Function y Property en la definición de una interfaz. Además, las instrucciones Propert
y pueden tener los modificadores Default, ReadOnly o WriteOnly. No se permite ninguno del resto de los modificadores:
Public, Private, Friend, Protected, Shared, Overrides, MustOverride o Overridable. Para obtener más información, vea
Contextos de declaración y niveles de acceso predeterminados.

Vea también
Tareas
Cómo: Crear e implementar interfaces
Tutorial: Crear e implementar interfaces
Referencia
Instrucción Interface (Visual Basic)
Inherits (Instrucción)
Overloads
Default (Visual Basic)
Conceptos
Información general sobre interfaces
Palabra clave Implements e instrucción Implements
Ejemplos de implementación de interfaces en Visual Basic
Cuándo se deben utilizar interfaces
Otros recursos
Herencia en Visual Basic
Conceptos del lenguaje Visual Basic

Palabra clave Implements e instrucción Implements


La palabra reservada Implements de Visual Basic se utiliza de dos formas. La instrucción Implements significa que una clase
o estructura implementa una interfaz. La palabra clave Implements significa que un miembro de clase o de estructura
implementa un miembro de interfaz específico.
Instrucción de implementación
Si una clase o estructura implementa una o más interfaces, debe incluir la instrucción Implements inmediatamente después
de la instrucción Class o Structure. La instrucción Implements exige que una lista separada por comas de interfaces sea
implementada por una clase. La clase o estructura debe implementar todos los miembros de interfaz mediante la palabra clave
Implements.
La palabra clave Implements
La palabra clave Implements requiere una lista separada por comas de los miembros de la interfaz que deben implementarse.
Por lo general, se especifica solamente un único miembro de interfaz, pero se pueden especificar varios miembros. La
especificación de un miembro de interfaz consta del nombre de la interfaz, que debe especificarse en una instrucción
Implements dentro de la clase, un punto y el nombre del evento, propiedad o función miembro que debe implementarse. El
nombre de un miembro que implementa un miembro de interfaz puede utilizar cualquier identificador permitido y no se limita
a la convención InterfaceName_MethodName que se utilizaba en las versiones anteriores de Visual Basic.
Por ejemplo, el código siguiente muestra cómo declarar una subrutina denominada Sub1 que implementa un método de una
interfaz:
VB
Class Class1
Implements interfaceclass.interface2

Sub Sub1(ByVal i As Integer) Implements interfaceclass.interface2.Sub1


End Sub
End Class

Los tipos de parámetro y de valores devueltos del miembro que realiza la implementación deben coincidir con la propiedad de
interfaz o la declaración de miembro de la interfaz. La forma más habitual de implementar un elemento de una interfaz es con
un miembro que tenga el mismo nombre que la interfaz, como se muestra en el ejemplo anterior.
Para declarar la implementación de un método de interfaz, puede utilizar cualquier atributo permitido en las declaraciones de
método de instancia, incluidos Overloads, Overrides, Overridable, Public, Private, Protected, Friend, Protected Friend,
MustOverride, Default y Static. El atributo Shared no está permitido, ya que define una clase en lugar de un método de
instancia.
Con Implements también puede crear un único método que implemente varios métodos definidos en una interfaz, como en
el ejemplo siguiente:
VB
Class Class2
Implements I1, I2

Protected Sub M1() Implements I1.M1, I1.M2, I2.M3, I2.M4


End Sub
End Class

Puede utilizar un miembro privado para implementar un miembro de interfaz. Cuando un miembro privado implementa un
miembro de una interfaz, el miembro pasa a estar disponible por medio de la interfaz, aunque no está disponible directamente
en las variables de objeto para la clase.
Vea también
Tareas
Cómo: Crear e implementar interfaces
Tutorial: Crear e implementar interfaces
Referencia
Implements (Instrucción)
Implements (Visual Basic)
Conceptos
Información general sobre interfaces
Definición de interfaz
Ejemplos de implementación de interfaces en Visual Basic
Cuándo se deben utilizar interfaces
Otros recursos
Herencia en Visual Basic
Conceptos del lenguaje Visual Basic

Ejemplos de implementación de interfaces en Visual Basic


Las clases que implementan una interfaz deben implementar todas sus propiedades, métodos y eventos.
El ejemplo siguiente define dos interfaces. La segunda interfaz, Interface2, hereda Interface1 y define un método y una
propiedad adicional.
VB
Interface Interface1
Sub sub1(ByVal i As Integer)
End Interface

' Demonstrates interface inheritance.


Interface Interface2
Inherits Interface1
Sub M1(ByVal y As Integer)
ReadOnly Property Num() As Integer
End Interface

El ejemplo siguiente implementa Interface1, la interfaz definida en el ejemplo anterior:


VB
Public Class ImplementationClass1
Implements Interface1
Sub Sub1(ByVal i As Integer) Implements Interface1.sub1
' Insert code here to implement this method.
End Sub
End Class

El ejemplo final implementa Interface2, incluyendo un método heredado de Interface1:


VB
Public Class ImplementationClass2
Implements Interface2
Dim INum As Integer = 0
Sub sub1(ByVal i As Integer) Implements Interface2.sub1
' Insert code here that implements this method.
End Sub
Sub M1(ByVal x As Integer) Implements Interface2.M1
' Insert code here to implement this method.
End Sub

ReadOnly Property Num() As Integer Implements _


Interface2.Num
Get
Num = INum
End Get
End Property
End Class

Vea también
Tareas
Cómo: Crear e implementar interfaces
Tutorial: Crear e implementar interfaces
Referencia
Instrucción Interface (Visual Basic)
Implements (Instrucción)
Conceptos
Información general sobre interfaces
Definición de interfaz
Palabra clave Implements e instrucción Implements
Cuándo se deben utilizar interfaces
Conceptos del lenguaje Visual Basic

Cuándo se deben utilizar interfaces


Las interfaces son una herramienta de programación eficaz porque le permiten separar la definición de objetos de su
implementación. La herencia de clases y las interfaces tienen ventajas e inconvenientes, y puede que al final decida utilizar una
combinación de ambas en sus proyectos. Esta página y Cuándo utilizar la herencia le ayudarán a determinar qué enfoque es
mejor para su situación.
Flexibilidad en la implementación
Existen otras razones por las que se podría desear utilizar interfaces en lugar de la herencia de clases:
Las interfaces admiten mejor las situaciones en las cuales las aplicaciones necesitan el mayor número de tipos de objetos
no relacionados posible para proporcionar determinadas funciones.
Las interfaces son más flexibles que las clases de base, porque puede definir una única implementación que puede
implementar interfaces múltiples.
Las interfaces son mejores en situaciones en las que no es necesario heredar una implementación de una clase de base.
Las interfaces son útiles en casos en los que no se puede utilizar la herencia de clases. Por ejemplo, las estructuras no
pueden heredarse de las clases, pero pueden implementar interfaces.
Vea también
Tareas
Cómo: Crear e implementar interfaces
Tutorial: Crear e implementar interfaces
Conceptos
Cuándo utilizar la herencia
Información general sobre interfaces
Definición de interfaz
Palabra clave Implements e instrucción Implements
Ejemplos de implementación de interfaces en Visual Basic
Otros recursos
Herencia en Visual Basic
Conceptos del lenguaje Visual Basic

Cómo: Crear e implementar interfaces


Como se explica en Información general sobre interfaces, las interfaces describen las propiedades, métodos y eventos de una
clase sin proporcionar ninguna implementación.
Para crear una interfaz
1. Defina la interfaz agregándole código, de tal forma que empiece con la palabra clave Interface y el nombre de la
interfaz, y que acabe con la instrucción End Interface. Por ejemplo, el siguiente código define una interfaz denominada
IAsset.

VB
Interface IAsset
End Interface

2. Agregue instrucciones que definan las propiedades, métodos y eventos que sean compatibles con la interfaz. Por
ejemplo, el siguiente código define una función, una propiedad y un evento.
VB
Interface IAsset
Event ComittedChange(ByVal Success As Boolean)
Property Division() As String
Function GetID() As Integer
End Interface

Para implementar una interfaz


1. Si la interfaz que está implementando no forma parte del proyecto, agregue una referencia al ensamblado que contiene
la interfaz.
2. Cree una clase nueva que implemente la interfaz, e incluya la palabra clave Implements en la línea que sigue al nombre
de clase. Por ejemplo, para implementar la interfaz IAsset, podría darle a la clase de implementación el nombre
Computer, como en el código siguiente.

VB
Class Computer
Implements IAsset
End Class

3. Agregue procedimientos para implementar las propiedades, métodos y eventos de la clase como en el código siguiente,
que se basa en el ejemplo del paso anterior:
VB
Class Computer
Implements IAsset

Public Event ComittedChange(ByVal Success As Boolean) _


Implements IAsset.ComittedChange

Private divisionValue As String

Public Property Division() As String _


Implements IAsset.Division
Get
Return divisionValue
End Get
Set(ByVal value As String)
divisionValue = value
RaiseEvent ComittedChange(True)
End Set
End Property

Private IDValue As Integer

Public Function GetID() As Integer _


Implements IAsset.GetID

Return IDValue
End Function

Public Sub New(ByVal Division As String, ByVal ID As Integer)


Me.divisionValue = Division
Me.IDValue = ID
End Sub
End Class

Vea también
Tareas
Tutorial: Crear e implementar interfaces
Referencia
Instrucción Interface (Visual Basic)
Conceptos
Información general sobre interfaces
Definición de interfaz
Palabra clave Implements e instrucción Implements
Ejemplos de implementación de interfaces en Visual Basic
Cuándo se deben utilizar interfaces
Otros recursos
Herencia en Visual Basic
Conceptos del lenguaje Visual Basic

Tutorial: Crear e implementar interfaces


Las interfaces describen las características de las propiedades, los métodos y los eventos, pero dejan los detalles de la
implementación para las estructuras o clases.
Este tutorial explica cómo declarar e implementar una interfaz.
Nota
Los cuadros de diálogo y los comandos de menú que se ven pueden diferir de los descritos en la Ayuda, dependiendo de los
valores de configuración o de edición activos. Para cambiar la configuración, seleccione Importar y exportar configuracio
nes en el menú Herramientas. Para obtener más información, vea Valores de configuración de Visual Studio.

Para definir una interfaz


1. Abra un nuevo proyecto Aplicación para Windows de Visual Basic.
2. Agregue un módulo nuevo al proyecto haciendo clic en Agregar módulo en el menú Proyecto.
3. Asigne al módulo el nombre Module1.vb y haga clic en Agregar. Aparecerá el código del módulo nuevo.
4. Defina una interfaz con el nombre TestInterface dentro de Module1; para ello, escriba Interface TestInterface entre
las instrucciones Module y End Module y presione ENTRAR. El Editor de código aplica una sangría delante de la
palabra clave Interface y agrega una instrucción End Interface para formar un bloque de código.
5. Defina una propiedad, un método y un evento para la interfaz; para ello, sitúe el siguiente código entre las instrucciones
Interface y End Interface:
VB
Property Prop1() As Integer
Sub Method1(ByVal X As Integer)
Event Event1()

Implementación
Puede notar que la sintaxis utilizada para declarar los miembros de la interfaz es diferente de la sintaxis utilizada para declarar
los miembros de la clase. Esta diferencia refleja el hecho de que las interfaces no pueden contener código de implementación.
Para implementar la interfaz
1. Agregue una clase denominada ImplementationClass; para ello, agregue la siguiente instrucción a Module1 después de
la instrucción End Interface pero antes de la instrucción End Module y, a continuación, presione ENTRAR:
VB
Class ImplementationClass

Si está trabajando dentro del entorno de desarrollo integrado, el Editor de código proporciona la instrucción End Class
correspondiente al presionar ENTRAR.
2. Agregue la siguiente instrucción Implements a ImplementationClass, que da nombre a la interfaz que implementa la
clase:
VB
Implements TestInterface

Cuando se muestra separada de otros elementos en la parte superior de la clase o estructura, la instrucción Implements
indica que la clase o estructura implementa una interfaz.
Si está trabajando dentro del entorno de desarrollo integrado, el Editor de código implementa los miembros de clase
requeridos por TestInterface al presionar ENTRAR, y se puede omitir el paso siguiente.
3. Si no está trabajando dentro del entorno de desarrollo integrado, debe implementar todos los miembros de la interfaz
MyInterface. Agregue el código siguiente a ImplementationClass para implementar Event1, Method1 y Prop1:

VB
Event Event1() Implements TestInterface.Event1

Public Sub Method1(ByVal X As Integer) Implements TestInterface.Method1


End Sub

Public Property Prop1() As Integer Implements TestInterface.Prop1


Get
End Get
Set(ByVal value As Integer)
End Set
End Property

La instrucción Implements asigna un nombre a la interfaz y al miembro de la interfaz que se está implementando.
4. Para finalizar la definición de Prop1, agregue un campo privado a la clase que almacenó el valor de la propiedad:
VB
' Holds the value of the property.
Private pval As Integer

Devuelva el valor de pval desde el descriptor de acceso get de la propiedad.


VB
Return pval

Establezca el valor de pval en el descriptor de acceso set de la propiedad.


VB
pval = value

5. Para finalizar la definición de Method1, agregue el código siguiente:


VB
MsgBox("The X parameter for Method1 is " & X)
RaiseEvent Event1()

Para probar la implementación de la interfaz


1. Haga clic con el botón secundario del mouse (ratón) en el formulario de inicio del proyecto en el Explorador de
soluciones y haga clic en Ver código. El editor mostrará la clase del formulario de inicio. De manera predeterminada, el
formulario de inicio se denomina Form1.
2. Agregue el siguiente campo testInstance a la clase Form1:
VB
Dim WithEvents testInstance As TestInterface

Al declarar testInstance como WithEvents, la clase Form1 puede controlar sus eventos.
3. Agregue el siguiente controlador de eventos a la clase Form1 para controlar los eventos desencadenados por
testInstance:

VB
Sub EventHandler() Handles testInstance.Event1
MsgBox("The event handler caught the event.")
End Sub

4. Agregue una subrutina denominada Test a la clase Form1 para probar la clase de implementación:
VB
Sub Test()
' Create an instance of the class.
Dim T As New ImplementationClass
' Assign the class instance to the interface.
' Calls to the interface members are
' executed through the class instance.
testInstance = T
' Set a property.
testInstance.Prop1 = 9
' Read the property.
MsgBox("Prop1 was set to " & testInstance.Prop1)
' Test the method and raise an event.
testInstance.Method1(5)
End Sub

El procedimiento Test crea una instancia de la clase que implementa MyInterface, asigna esa instancia al campo
testInstance, define una propiedad y ejecuta un método a través de la interfaz.

5. Agregue código para llamar al procedimiento Test desde el procedimiento Form1 Load del formulario de inicio:

VB
Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles MyBase.Load
Test() ' Test the class.
End Sub

6. Ejecute el procedimiento Test presionando F5. Aparecerá el mensaje "Prop1 se ha definido como 9". Tras hacer clic en
Aceptar, aparecerá el mensaje "El parámetro X de Method1 es 5". Al hacer clic en Aceptar, aparecerá el mensaje "El
controlador de eventos ha interceptado el evento".
Vea también
Tareas
Cómo: Crear e implementar interfaces
Referencia
Implements (Instrucción)
Instrucción Interface (Visual Basic)
Event (Instrucción)
Conceptos
Cuándo se deben utilizar interfaces
Otros recursos
Interfaces en Visual Basic
Conceptos del lenguaje Visual Basic

Herencia en Visual Basic


Visual Basic admite el concepto de herencia, es decir, la posibilidad de definir clases que sirven de base para clases derivadas.
Las clases derivadas heredan, y pueden extender, las propiedades, métodos y eventos de la clase base. Las clases derivadas
también pueden reemplazar métodos heredados con nuevas implementaciones. De manera predeterminada, se pueden
heredar todas las clases creadas con Visual Basic.
La herencia permite escribir y depurar una clase una vez, y después volver a utilizar ese código una y otra vez como base de
nuevas clases. La herencia también permite utilizar el polimorfismo basado en la herencia, la posibilidad de definir clases que
pueden utilizarse de forma intercambiable mediante código cliente en tiempo de ejecución, pero con funcionalidad diferente,
incluyo con métodos o propiedades denominados de manera idéntica.
En esta sección
Fundamentos de la herencia
Se describen los modificadores de herencia, la forma de reemplazar métodos y propiedades, MyClass y MyBase.
Cómo: Crear clases derivadas
Se describe paso a paso el proceso de creación de clases derivadas.
Cuándo utilizar la herencia
Se explica cuándo se debe utilizar la herencia en lugar de interfaces.
Herencia y .NET Framework
Explica cómo .NET Framework admite la herencia.
Tutorial: Implementar la herencia mediante objetos COM
Se describe la forma de utilizar objetos COM existentes como base de nuevos objetos.
La herencia y la clase de objeto base
Se proporciona información general sobre la clase que sirve de base para todas las demás clases.
Cómo funcionan los métodos New y Finalize en una jerarquía de clases
Se describe la forma de llamar a constructores y destructores en una jerarquía de clases.
Polimorfismo
Se describe el polimorfismo y se explica la forma de utilizarlo.
Diseñar una jerarquía de herencia
Se proporciona información sobre cómo diseñar e implementar una jerarquía de clases.
Secciones relacionadas
Interfaces en Visual Basic
Se ofrece un resumen que describe las interfaces y la forma de utilizarlas.
Programación orientada a objetos en Visual Basic
Se presentan los conceptos de programación orientada a objetos utilizados en Visual Basic.
Conceptos del lenguaje Visual Basic

Fundamentos de la herencia
La instrucción Inherits se utiliza para declarar una nueva clase, denominada clase derivada, basada en una clase existente
conocida como clase base. Las clases derivadas heredan, y pueden extender, las propiedades, métodos, eventos, campos y
constantes definidos en la clase base. En la siguiente sección se describen algunas de las reglas de herencia, así como los
modificadores que se pueden utilizar para cambiar la forma en que las clases heredan o son heredadas:
De forma predeterminada, todas las clases son heredables a menos que se marquen con la palabra clave
NotInheritable. Las clases pueden heredar de otras clases del proyecto o de clases en otros ensamblados a los que hace
referencia el proyecto.
A diferencia de los lenguajes que permiten la herencia múltiple, Visual Basic sólo permite la herencia simple en las clases;
es decir, las clases derivadas sólo pueden tener una clase base. Aunque no se permite la herencia múltiple en las clases,
éstas pueden implementar múltiples interfaces, lo que permite lograr de manera eficaz los mismos fines.
Para evitar la exposición de elementos restringidos en una clase base, el tipo de acceso de una clase derivada debe ser
igual o más restrictivo que el de su clase base. Por ejemplo, una clase Public no puede heredar una clase Friend o
Private, y una clase Friend no puede heredar una clase Private.
Modificadores de herencia
Visual Basic presenta las siguientes instrucciones y modificadores de nivel de clase para ofrecer compatibilidad con la herencia:
Instrucción Inherits: especifica la clase base.
Modificador NotInheritable: impide que los programadores utilicen la clase como clase base.
Modificador MustInherit: especifica que la clase sólo se debe utilizar como clase base. Las instancias de las clases
MustInherit no se pueden crear directamente; sólo se pueden crear como instancias de clase base de una clase derivada.
Otros lenguajes de programación, como C++ y C#, utilizan el término clase abstracta para describir tal clase.
Reemplazar propiedades y métodos en clases derivadas
De forma predeterminada, una clase derivada hereda los métodos y propiedades de su clase base. Si una propiedad o método
heredado debe comportarse de forma diferente en la clase derivada, puede ser reemplazado; es decir, puede definirse una
nueva implementación del método en la clase derivada. Los siguientes modificadores se utilizan para controlar cómo se
reemplazan propiedades y métodos:
Overridable: permite reemplazar una propiedad o un método de una clase en una clase derivada.
Overrides: reemplaza una propiedad o un método Overridable definido en la clase base.
NotOverridable: impide reemplazar una propiedad o método en una clase que hereda. Los métodos Public son
NotOverridable de forma predeterminada.
MustOverride: requiere que una clase derivada reemplace una propiedad o un método. Cuando se utiliza la palabra
clave MustOverride, la definición del método está formada simplemente por la instrucción Sub, Function o Property.
No se permite ninguna otra instrucción y no hay específicamente ninguna instrucción End Sub o End Function. Los
métodos MustOverride se deben declarar en las clases MustInherit.
Para obtener más información sobre los métodos de reemplazo, consulte Reemplazar propiedades y métodos.
La palabra clave MyBase
Puede utilizar la palabra clave MyBase para llamar a métodos de una clase base cuando reemplace métodos en una clase
derivada. Por ejemplo, suponga que diseña una clase derivada que reemplaza un método heredado de la clase base. El método
reemplazado puede llamar al método de la clase base y modificar el valor devuelto como se muestra en el fragmento de
código siguiente:
VB
Class DerivedClass
Inherits BaseClass
Public Overrides Function CalculateShipping( _
ByVal Dist As Double, _
ByVal Rate As Double) _
As Double
' Call the method in the base class and modify the return value.
Return MyBase.CalculateShipping(Dist, Rate) * 2
End Function
End Class

En la lista siguiente se describen las restricciones de uso de MyBase:


MyBase hace referencia a la clase base inmediata y a sus miembros heredados. No se puede utilizar para tener acceso a
miembros Private de la clase.
MyBase es una palabra clave, no un objeto real. MyBase no se puede asignar a una variable, pasar a procedimientos o
utilizar en una comparación Is.
No es necesario definir el método al que califica MyBase en la clase base inmediata; puede definirse en una clase base
heredada indirectamente. Para compilar correctamente una referencia calificada mediante MyBase, alguna clase base
debe contener un método correspondiente al nombre y el tipo de los parámetros que aparezcan en la llamada.
No puede utilizar MyBase para llamar a métodos de clase base con el modificador MustOverride.
No se puede utilizar MyBase para calificarse a sí misma. Por tanto, el siguiente código no es válido:
MyBase.MyBase.BtnOK_Click()

No se puede utilizar MyBase en módulos.


No se puede utilizar MyBase para tener acceso a miembros de clase base marcados como Friend si la clase base está en
un ensamblado diferente.

La palabra clave MyClass


La palabra clave MyClass permite llamar a un método Overridable implementado en la clase y asegurarse de que se llama a
la implementación del método en esta clase y no a la de un método reemplazado en una clase derivada.
MyClass es una palabra clave, no un objeto real. MyClass no se puede asignar a una variable, pasar a procedimientos o
utilizar en una comparación Is.
MyClass hace referencia a la clase base inmediata y a sus miembros heredados.
MyClass puede utilizarse como calificador de miembros Shared.
MyClass no se puede utilizar en módulos estándar.
MyClass puede utilizarse para calificar un método que está definido en un clase base y que no tiene ninguna
implementación del método proporcionado en esa clase. Este tipo de referencia tiene el mismo significado que
MyBase.Method.
Vea también
Tareas
Cómo: Crear clases derivadas
Referencia
Inherits (Instrucción)
Conceptos
Reemplazar propiedades y métodos
Otros recursos
Cambios en el lenguaje para usuarios de Visual Basic 6.0
Conceptos del lenguaje Visual Basic

Cómo: Crear clases derivadas


La instrucción Inherits hace que una clase herede todos los miembros no privados de la clase especificada.
Para heredar de otra clase
Agregue una instrucción Inherits (con el nombre de una clase que desee utilizar como clase base) como primera
instrucción de la clase derivada. La instrucción Inherits debe ser la primera instrucción sin comentario después de la
instrucción de clase.
Ejemplo
El ejemplo siguiente define dos clases. La primera es una clase base que tiene dos métodos. La segunda hereda los dos
métodos de la clase base, reemplaza el segundo método y define un campo denominado Field.
VB
Class Class1
Sub Method1()
MsgBox("This is a method in the base class.")
End Sub
Overridable Sub Method2()
MsgBox("This is another method in the base class.")
End Sub
End Class

Class Class2
Inherits Class1
Public Field2 As Integer
Overrides Sub Method2()
MsgBox("This is a method in a derived class.")
End Sub
End Class

Protected Sub TestInheritance()


Dim C1 As New Class1
Dim C2 As New Class2
C1.Method1() ' Calls a method in the base class.
C1.Method2() ' Calls another method from the base class.
C2.Method1() ' Calls an inherited method from the base class.
C2.Method2() ' Calls a method from the derived class.
End Sub

Al ejecutar el procedimiento TestInheritance, aparecen los siguientes mensajes:


This is a method in the base class.
This is another method in the base class.
This is a method in the base class.
This is a method in a derived class.

Vea también
Conceptos
Reemplazar propiedades y métodos
Reemplazar modificadores
Otros recursos
Herencia en Visual Basic
Propiedades, campos y métodos de clases
Conceptos del lenguaje Visual Basic

Cuándo utilizar la herencia


La herencia es un concepto de programación útil, pero es fácil utilizarlo de manera poco adecuada. A menudo, las interfaces
solucionan mejor la situación. Este tema y Cuándo se deben utilizar interfaces le ayudan a entender cuándo se debe utilizar
cada enfoque.
La herencia es una buena opción cuando:
La jerarquía de herencia representa una relación de identidad y no una relación de pertenencia.
Se puede volver a utilizar código de las clases base.
Es necesario aplicar la misma clase y los mismos métodos a tipos de datos diferentes.
La jerarquía de clases es poco profunda y es poco probable que otros programadores agreguen muchos más niveles.
Desea realizar cambios globales en clases derivadas modificando una clase base.
Estas consideraciones se explican en este orden a continuación.
Herencia y relaciones de identidad
Dos maneras de mostrar las relaciones de clase en la programación orientada a objetos son las relaciones de identidad y de
pertenencia. En una relación de identidad, la clase derivada es claramente un tipo de clase base. Por ejemplo, una clase
denominada PremierCustomer representa una relación de tipo identidad con una clase base denominada Customer, puesto que
un cliente principal es un cliente. No obstante, una clase denominada CustomerReferral representa una relación de
pertenencia con la clase Customer porque una cartera de clientes tiene un cliente, pero no es un tipo de cliente.
Los objetos de una jerarquía de herencia deben tener una relación de identidad con la clase base puesto que heredan los
campos, propiedades, métodos y eventos definidos en dicha clase. Las clases que representan una relación de pertenencia con
otras clases no son válidas para jerarquías de herencia debido a que podrían heredar propiedades y métodos inadecuados. Por
ejemplo, si la clase CustomerReferral se derivase de la clase Customer descrita anteriormente, podría heredar propiedades que
no tendrían sentido, como ShippingPrefs y LastOrderPlaced. Las relaciones de pertenencia como ésta deben representarse
mediante clases o interfaces no relacionadas. La siguiente ilustración muestra ejemplos de relaciones de tipo "es un" y "tiene
un".

Clases base y reutilización de código


Otra razón para usar la herencia es la ventaja de poder reutilizar el código. Las clases bien diseñadas, una vez depuradas,
pueden utilizarse una y otra vez como base de nuevas clases.
Un ejemplo común de reutilización eficaz de código está relacionado con bibliotecas que administran estructuras de datos. Por
ejemplo, suponga que tiene una gran aplicación comercial que administra varias clases de listas en la memoria. Una es una
copia en memoria de la base de datos de clientes, que se lee desde una base de datos al iniciar la sesión para conseguir mayor
velocidad. La estructura de datos tendría un aspecto similar al siguiente:
VB
Class CustomerInfo
Protected PreviousCustomer As CustomerInfo
Protected NextCustomer As CustomerInfo
Public ID As Integer
Public FullName As String

Public Sub InsertCustomer(ByVal FullName As String)


' Insert code to add a CustomerInfo item to the list.
End Sub

Public Sub DeleteCustomer()


' Insert code to remove a CustomerInfo item from the list.
End Sub

Public Function GetNextCustomer() As CustomerInfo


' Insert code to get the next CustomerInfo item from the list.
Return NextCustomer
End Function

Public Function GetPrevCustomer() As CustomerInfo


'Insert code to get the previous CustomerInfo item from the list.
Return PreviousCustomer
End Function
End Class

La aplicación también podría tener una lista similar de productos que el usuario ha agregado a una lista del carro de la compra,
como se muestra en el siguiente fragmento de código:
VB
Class ShoppingCartItem
Protected PreviousItem As ShoppingCartItem
Protected NextItem As ShoppingCartItem
Public ProductCode As Integer
Public Function GetNextItem() As ShoppingCartItem
' Insert code to get the next ShoppingCartItem from the list.
Return NextItem
End Function
End Class

Aquí puede ver un modelo: dos listas se comportan del mismo modo (inserciones, eliminaciones y recuperaciones) pero
funcionan con tipos de datos diferentes. Mantener dos bases de código para realizar esencialmente las mismas funciones no es
eficaz. La solución más eficaz consiste en separar la administración de listas en su propia clase y después heredar de esa clase
para diferentes tipos de datos:
VB
Class ListItem
Protected PreviousItem As ListItem
Protected NextItem As ListItem
Public Function GetNextItem() As ListItem
' Insert code to get the next item in the list.
Return NextItem
End Function
Public Sub InsertNextItem()
' Insert code to add a item to the list.
End Sub

Public Sub DeleteNextItem()


' Insert code to remove a item from the list.
End Sub

Public Function GetPrevItem() As ListItem


'Insert code to get the previous item from the list.
Return PreviousItem
End Function
End Class
La clase ListItem sólo tiene que ser depurada una vez. Después podrá generar clases que la utilicen sin tener que pensar
nunca más sobre la administración de listas. Por ejemplo:
VB
Class CustomerInfo
Inherits ListItem
Public ID As Integer
Public FullName As String
End Class
Class ShoppingCartItem
Inherits ListItem
Public ProductCode As Integer
End Class

Aunque la reutilización de código basado en la herencia es una herramienta eficaz, también tiene riesgos asociados. Incluso los
sistemas mejor diseñados cambian a veces de tal modo que los diseñadores no podrían prever. A veces, los cambios en una
jerarquía de clases existente pueden tener consecuencias no deseadas; en la sección
Cambios en el diseño de la clase base después de la implementación de "El problema de fragilidad de la clase base" se
describen algunos ejemplos.
Clases derivadas intercambiables
Las clases derivadas de una jerarquía de clases pueden a veces intercambiarse con la clase base, un proceso denominado
polimorfismo basado en la herencia. Este enfoque combina las mejores características del polimorfismo basado en la interfaz
con la opción de reutilizar o reemplazar código de una clase base.
Así, esto podría ser útil en un paquete de dibujo. Por ejemplo, considere el siguiente fragmento de código, que no utiliza
herencia:
VB
Sub Draw(ByVal Shape As DrawingShape, ByVal X As Integer, _
ByVal Y As Integer, ByVal Size As Integer)

Select Case Shape.type


Case shpCircle
' Insert circle drawing code here.
Case shpLine
' Insert line drawing code here.
End Select
End Sub

Este enfoque presenta algunos problemas. Si alguien decide agregar una opción de elipse posteriormente, será necesario
modificar el código fuente; puede ocurrir que los usuarios a los que va dirigido ni siquiera tengan acceso al código fuente. Un
problema más sutil consiste en que para dibujar una elipse se necesita otro parámetro (las elipses tienen un diámetro principal
y uno secundario) que no sería relevante para el caso de la línea. Si alguien desea agregar una polilínea (múltiples líneas
conectadas), entonces se agregaría otro parámetro que no sería relevante para otros casos.
La herencia resuelve la mayoría de estos problemas. Las clases base bien diseñadas dejan la implementación de métodos
específicos para las clases derivadas, de modo que se pueda incluir cualquier forma. Otros programadores pueden
implementar métodos en clases derivadas con la documentación de la clase base. Otros elementos de clase (como las
coordenadas x e y) se pueden integrar en la clase base porque todas las descendientes los utilizan. Por ejemplo, Draw podría
ser un método MustOverride:
VB
MustInherit Class Shape
Public X As Integer
Public Y As Integer
MustOverride Sub Draw()
End Class

Después podría agregar los elementos necesarios a esa clase para las diferentes formas. Por ejemplo, una clase Line podría
necesitar únicamente un campo Length:
VB
Class Line
Inherits Shape
Public Length As Integer
Overrides Sub Draw()
' Insert code here to implement Draw for this shape.
End Sub
End Class

Este planteamiento es útil debido a que otros programadores que no tienen acceso al código fuente pueden extender la clase
base con nuevas clases derivadas según sea necesario. Por ejemplo, una clase denominada Rectangle podría derivarse de la
clase Line:
VB
Class Rectangle
Inherits Line
Public Width As Integer
Overrides Sub Draw()
' Insert code here to implement Draw for the Rectangle shape.
End Sub
End Class

En este ejemplo se muestra cómo se puede pasar de clases de propósito general a clases muy específicas mediante la
implementación de detalles en cada nivel.
En este punto podría ser conveniente volver a evaluar si la clase derivada realmente representa una relación de identidad o,
por el contrario, es una relación de pertenencia. Si la nueva clase de rectángulo se compone solamente de líneas, entonces la
herencia no es la mejor opción. No obstante, si el nuevo rectángulo es una línea con una propiedad de ancho, entonces se
mantiene la relación de identidad.
Jerarquías de clases poco profundas
La herencia se adapta mejor a jerarquías de clases relativamente poco profundas. Las jerarquías de clases complejas y
profundas en exceso pueden ser difíciles de desarrollar. La decisión de utilizar una jerarquía de clases implica sopesar sus
ventajas y su complejidad. Como norma general, las jerarquías deberían limitarse a seis niveles o menos. No obstante, la
profundidad máxima de una jerarquía de clases concreta depende de varios factores, incluida la complejidad de cada nivel.
Cambios globales en clases derivadas a través de la clase base
Una de las características más eficaces de la herencia es la posibilidad de realizar cambios en una clase base que se propagan a
las clases derivadas. Si se usa con cuidado, puede actualizarse la implementación de un solo método y decenas, e incluso
cientos, de clases derivadas podrán utilizar el nuevo código. No obstante, esta práctica puede resultar peligrosa puesto que
tales cambios podrían generar problemas en clases heredadas diseñadas por otras personas. Debe tenerse cuidado para
asegurarnos de que la nueva clase es compatible con las clases que utilizan la original. Concretamente, debe evitarse cambiar
el nombre o el tipo de los miembros de la clase base.
Suponga, por ejemplo, que diseña una clase base con un campo de tipo Integer para almacenar la información de código
postal, y que otros programadores han creado clases derivadas que utilizan el campo de código postal heredado. Suponga
además que el campo de código postal almacena cinco dígitos y que la oficina de correos ha ampliado los códigos postales
con un guión y cuatro dígitos adicionales. En el peor de los casos, podría modificar el campo en la clase base para almacenar
una cadena de diez caracteres, pero otros programadores tendrían que cambiar y volver a compilar las clases derivadas para
utilizar el tamaño y el tipo de datos nuevos.
La forma más segura de cambiar una clase base es simplemente agregar nuevos miembros. Por ejemplo, podría agregar un
nuevo campo para almacenar cuadro dígitos más en el ejemplo de código postal descrito anteriormente. De esta forma, las
aplicaciones cliente pueden actualizarse para que utilicen el nuevo campo sin interrumpir las aplicaciones existentes. Esta
posibilidad de extender clases base en una jerarquía de herencia es una ventaja importante que no existe con interfaces.
Vea también
Conceptos
Cuándo se deben utilizar interfaces
Cambios en el diseño de la clase base después de la implementación
Conceptos del lenguaje Visual Basic

Herencia y .NET Framework


Las aplicaciones de Visual Studio pueden utilizar muchas de las clases que se encuentran en .NET Framework como clases
base. Las clases de atributo, por ejemplo, siempre están basadas en la clase Attribute. Otras clases base útiles de .NET
Framework incluyen Component que se hereda para definir los componentes y Exception que se hereda para definir las clases
de excepción personalizadas.
.NET Framework es más que un origen para las clases base; garantiza la compatibilidad entre clases creadas con lenguajes de
programación diferentes. las clases de Visual Basic pueden heredar de las clases en ensamblados creados por cualquier
lenguaje admitido por Visual Studio. Las clases que crea en Visual Basic también se pueden utilizar como clases base por otros
lenguajes de programación de .NET Framework.
Vea también
Tareas
Tutorial: Implementar la herencia mediante objetos COM
Conceptos
La herencia y la clase de objeto base
Cuándo utilizar la herencia
Conceptos del lenguaje Visual Basic

Tutorial: Implementar la herencia mediante objetos COM


Puede derivar las clases de Visual Basic 2005 de las clases Public en objetos COM, incluso aquéllas que se han creado con
versiones anteriores de Visual Basic. Las propiedades y los métodos de las clases heredadas de objetos COM pueden ser
reemplazados o sobrecargados del mismo modo que las propiedades y métodos de cualquier otra clase base. La herencia de
objetos COM resulta útil cuando se tiene una biblioteca de clases que no se desea volver a compilar.
El procedimiento siguiente muestra la forma de utilizar Visual Basic 6.0 para crear un objeto COM que contenga una clase y
utilizarlo como clase base en Visual Basic 2005.
Nota
Los cuadros de diálogo y los comandos de menú que se ven pueden diferir de los descritos en la Ayuda, dependiendo de los
valores de configuración o de edición activos. Para cambiar la configuración, seleccione Importar y exportar configuracio
nes en el menú Herramientas. Para obtener más información, vea Valores de configuración de Visual Studio.

Para generar el objeto COM que se utilizará en este tutorial


1. En Visual Basic 6.0, abra un proyecto de archivo DLL ActiveX nuevo. Se crea un proyecto denominado Project1 con una
clase denominada Class1.
2. En el Explorador de proyectos, haga clic con el botón secundario del mouse (ratón) en Project1 y, a continuación, haga
clic en Propiedades de Project1. Aparece el cuadro de diálogo Propiedades del proyecto.
3. En la ficha General del cuadro de diálogo Propiedades del proyecto, escriba ComObject1 en el campo Nombre de
proyecto para cambiar el nombre del proyecto.
4. En el Explorador de proyectos, haga clic con el botón secundario del mouse en Class1 y, a continuación, haga clic en
Propiedades. Aparecerá la ventana Propiedades correspondiente a la clase.
5. Establezca la propiedad Name en MathFunctions.
6. En el Explorador de proyectos, haga clic con el botón secundario del mouse en MathFunctions y, a continuación, haga
clic en Ver código. Aparece el Editor de código.
7. Agregue una variable local, que contendrá el valor de la propiedad:

' Local variable to hold property value


Private mvarProp1 As Integer

8. Agregue los procedimientos de propiedad Let y Get:

Public Property Let Prop1(ByVal vData As Integer)


'Used when assigning a value to the property.
mvarProp1 = vData
End Property
Public Property Get Prop1() As Integer
'Used when retrieving a property's value.
Prop1 = mvarProp1
End Property

9. Agregue una función:

Function AddNumbers( _
ByVal SomeNumber As Integer, _
ByVal AnotherNumber As Integer) _
As Integer

AddNumbers = SomeNumber + AnotherNumber


End Function

10. Cree y registre el objeto COM; para ello, seleccione Make ComObject1.dll en el menú Archivo.
Nota
Aunque es posible exponer una clase creada con Visual Basic como un objeto COM, en realidad, no se trata de un verda
dero objeto COM y no se puede utilizar en este tutorial. Para obtener información detallada, vea
Interoperabilidad COM en aplicaciones .NET Framework.

Ensamblados de interoperabilidad
En el procedimiento siguiente se creará un ensamblado de interoperabilidad que actuará como puente entre el código no
administrado (como un objeto COM) y el código administrado que utiliza Visual Studio. El ensamblado de interoperabilidad
que crea Visual Basic controla muchos de los aspectos del trabajo con objetos COM, como el cálculo de referencia de
interoperabilidad, el proceso de empaquetado de parámetros y valores devueltos en los tipos de datos equivalentes enviados
a objetos COM (o recibidos de objetos COM). La referencia de la aplicación de Visual Basic apunta al ensamblado de
interoperabilidad, no al objeto COM real.
Para utilizar un objeto COM con Visual Basic 2005
1. Abra un nuevo proyecto Aplicación para Windows de Visual Basic.
2. En el menú Proyecto, haga clic en Agregar referencia.
Aparece el cuadro de diálogo Agregar referencia.
3. En la ficha COM, haga doble clic en ComObject1 en la lista Nombre de componente y, a continuación, haga clic en
Aceptar.
4. En el menú Proyecto, haga clic en Agregar nuevo elemento.
Se abrirá el cuadro de diálogo Agregar nuevo elemento.
5. En el panel Plantillas, haga clic en Clase.
En el campo Nombre aparecerá el nombre de archivo predeterminado, Class1.vb. Cambie este campo a MathClass.vb y
haga clic en Agregar. Esto creará una clase denominada MathClass y mostrará su código.
6. Agregue el código siguiente al principio de MathClass para heredar de la clase COM.
VB
' The inherited class is called MathFunctions in the base class,
' but the interop assembly appends the word Class to the name.
Inherits ComObject1.MathFunctionsClass

7. Sobrecargue el método público de la clase base agregando el código siguiente a MathClass:


VB
' This method overloads the method AddNumbers from the base class.
Overloads Function AddNumbers( _
ByVal SomeNumber As Integer, _
ByVal AnotherNumber As Integer) _
As Integer

Return SomeNumber + AnotherNumber


End Function

8. Amplíe la clase heredada agregando el código siguiente a MathClass:


VB
' The following function extends the inherited class.
Function SubtractNumbers( _
ByVal SomeNumber As Integer, _
ByVal AnotherNumber As Integer) _
As Integer

Return AnotherNumber - SomeNumber


End Function

La nueva clase hereda las propiedades de la clase base del objeto COM, sobrecarga un método y define otro método para
extender la clase.
Para probar la clase heredada
1. Agregue un botón al formulario de inicio y, a continuación, haga doble clic en él para ver su código.
2. En el procedimiento del controlador de eventos Click del botón, agregue el código siguiente para crear una instancia de
MathClass y llamar a los métodos sobrecargados:

VB
Dim Result1 As Short
Dim Result2 As Integer
Dim Result3 As Integer
Dim MathObject As New MathClass
Result1 = MathObject.AddNumbers(4S, 2S) ' Add two Shorts.
Result2 = MathObject.AddNumbers(4, 2) 'Add two Integers.
Result3 = MathObject.SubtractNumbers(2, 4) ' Subtract 2 from 4.
MathObject.Prop1 = 6 ' Set an inherited property.

MsgBox("Calling the AddNumbers method in the base class " & _


"using Short type numbers 4 and 2 = " & Result1)
MsgBox("Calling the overloaded AddNumbers method using " & _
"Integer type numbers 4 and 2 = " & Result2)
MsgBox("Calling the SubtractNumbers method " & _
"subtracting 2 from 4 = " & Result3)
MsgBox("The value of the inherited property is " & _
MathObject.Prop1)

3. Presione F5 para ejecutar el proyecto.


Cuando haga clic en el botón del formulario, se llamará primero al método AddNumbers con números de tipo de datos Short y
Visual Basic elegirá el método apropiado en la clase base. La segunda llamada a AddNumbers se dirige al método de sobrecarga
de MathClass. La tercera llamada llama al método SubtractNumbers, que extiende la clase. Se establece el valor de la propiedad
en la clase base y se muestra dicho valor.
Pasos siguientes
Es posible que haya observado que la función AddNumbers sobrecargada parece tener el mismo tipo de datos que el método
heredado de la clase base del objeto COM. Esto se debe a que los argumentos y los parámetros de método de la clase base
están definidos como enteros de 16 bits en Visual Basic 6.0, pero se exponen como enteros de 16 bits de tipo Short en Visual
Basic 2005. La nueva función acepta enteros de 32 bits y sobrecarga la función de la clase base.
Al trabajar con objetos COM, es importante comprobar el tamaño y los tipos de datos de los parámetros. Por ejemplo, al
utilizar un objeto COM que acepta un objeto de colección de Visual Basic 6.0 como argumento, no puede proporcionar una
colección de Visual Basic 2005. Para obtener más información sobre los controles de tipo de datos, vea
Cambios en el lenguaje para usuarios de Visual Basic 6.0.
Es posible reemplazar propiedades y métodos heredados de clases COM, lo que significa que se puede declarar una propiedad
o método local que reemplace una propiedad o método heredado de una clase base COM. Las reglas para reemplazar
propiedades COM heredadas son similares a las reglas para reemplazar otras propiedades y métodos, con las excepciones
siguientes:
Si reemplaza cualquier propiedad o método heredado de una clase COM, deberá reemplazar todas las demás
propiedades y métodos heredados.
No es posible reemplazar las propiedades que utilizan parámetros ByRef.
Vea también
Tareas
Cómo: Crear clases derivadas
Referencia
Inherits (Instrucción)
Short (Tipo de datos, Visual Basic)
Conceptos
Reemplazar propiedades y métodos
Otros recursos
Interoperabilidad COM en aplicaciones .NET Framework
Cambios en el lenguaje para usuarios de Visual Basic 6.0
Conceptos del lenguaje Visual Basic

La herencia y la clase de objeto base


Casi todas las tareas que se pueden realizar con Visual Basic implican el uso de objetos, entre ellos algunas entidades que
normalmente no se suponen objetos, por ejemplo, cadenas y enteros. Todos los objetos de Visual Basic se derivan y heredan
métodos de una clase base llamada System.Object. La clase System.Object proporciona una clase base común para todos los
objetos de .NET Framework, lo que garantiza la interoperabilidad de objetos desarrollada con Visual Studio. Las nuevas clases
heredan implícitamente la clase System.Object; no es necesario incluir explícitamente esta clase con una instrucción Inherits.
De los métodos que los objetos heredan de System.Object, uno de los más útiles es GetType, que se utiliza para devolver el
tipo exacto del objeto actual.
Vea también
Referencia
Object
GetType
Conceptos
Reemplazar propiedades y métodos
Fundamentos de la herencia
Conceptos del lenguaje Visual Basic

Cómo funcionan los métodos New y Finalize en una jerarquía


de clases
Cuando se crea una instancia de una clase, Common Language Runtime (CLR) intenta ejecutar un procedimiento denominado
New, si existe en ese objeto. New es un tipo de procedimiento llamado constructor que se utiliza para inicializar nuevos
objetos antes de que se ejecute cualquier otro código de un objeto. Un constructor New puede utilizarse para abrir archivos,
conectarse a bases de datos, inicializar variables y realizar cualquier otra tarea necesaria antes de poder utilizar un objeto.
Cuando se crea una instancia de una clase derivada, se ejecuta primero el constructor Sub New de la clase base, seguido de
los constructores de las clases derivadas. Esto se debe a que la primera línea de código en un constructor Sub New utiliza la
sintaxis MyBase.New() para llamar al constructor de la clase situada inmediatamente por encima en la jerarquía de clases.
Después se llama al constructor Sub New para cada clase de la jerarquía hasta llegar al constructor de la clase base. En este
punto, se ejecuta el código del constructor para la clase base, seguido del código en cada constructor de todas las clases
derivadas, ejecutándose en último lugar el código de las clases más derivadas.

Cuando un objeto deja de ser necesario, CLR llama al método Finalize para ese objeto antes de liberar su memoria. El método
Finalize se denomina destructor porque realiza tareas de limpieza, como guardar información de estado, cerrar archivos y
conexiones a bases de datos, y otras tareas que deben realizarse antes de liberar el objeto.

Vea también
Conceptos
Duración de los objetos: cómo se crean y destruyen
Conceptos del lenguaje Visual Basic

Polimorfismo
El polimorfismo se refiere a la posibilidad de definir múltiples clases con funcionalidad diferente, pero con métodos o
propiedades denominados de forma idéntica, que pueden utilizarse de manera intercambiable mediante código cliente en
tiempo de ejecución.
En esta sección
Cómo proporciona Visual Basic polimorfismo
Se ilustran distintos enfoques del polimorfismo.
Polimorfismo basado en la herencia
Se describe el uso de la herencia para conseguir el polimorfismo.
Polimorfismo basado en la interfaz
Se describe el uso de las interfaces para conseguir el polimorfismo.
Secciones relacionadas
Cuándo se deben utilizar interfaces
Explica cuándo se deben utilizar interfaces en lugar de una jerarquía de herencia.
Cuándo utilizar la herencia
Proporciona información sobre cuándo se debe utilizar la herencia en lugar de interfaces.
Conceptos del lenguaje Visual Basic

Cómo proporciona Visual Basic polimorfismo


Tradicionalmente, el polimorfismo en Visual Basic se conseguía con interfaces, y éstas aún pueden utilizarse para este
propósito. Pero ahora, Visual Basic también proporciona la opción de utilizar la herencia para conseguir el polimorfismo.
Como en otros temas de la programación orientada a objetos, la opción que debe utilizarse depende de los requisitos
específicos. En general, utilice la herencia cuando desee crear funcionalidad básica que las clases derivadas puedan extender;
utilice interfaces en los casos en que proporcionar funcionalidad similar requiera múltiples implementaciones que tienen poco
en común.
Vea también
Conceptos
Polimorfismo basado en la herencia
Polimorfismo basado en la interfaz
Otros recursos
Diseñar una jerarquía de herencia
Conceptos del lenguaje Visual Basic

Polimorfismo basado en la herencia


La mayoría de los sistemas de programación orientada a objetos proporcionan polimorfismo a través de la herencia. El
polimorfismo basado en la herencia implica definir métodos en una clase base y reemplazarlos con nuevas implementaciones
en clases derivadas.
Por ejemplo, podría definir una clase, BaseTax, que proporciona la funcionalidad básica para calcular los impuestos sobre
ventas en un estado. Las clases derivadas de BaseTax, como CountyTax o CityTax, podrían implementar métodos como
CalculateTax según las necesidades.

El polimorfismo se deriva del hecho de que se podría llamar al método CalculateTax de un objeto perteneciente a cualquier
clase derivada de BaseTax, sin saber a qué clase pertenecía el objeto.
El procedimiento TestPoly del siguiente ejemplo muestra el polimorfismo basado en la herencia:
VB
' %5.3 State tax
Const StateRate As Double = 0.053
' %2.8 City tax
Const CityRate As Double = 0.028
Public Class BaseTax
Overridable Function CalculateTax(ByVal Amount As Double) As Double
' Calculate state tax.
Return Amount * StateRate
End Function
End Class

Public Class CityTax


' This method calls a method in the base class
' and modifies the returned value.
Inherits BaseTax
Private BaseAmount As Double
Overrides Function CalculateTax(ByVal Amount As Double) As Double
' Some cities apply a tax to the total cost of purchases,
' including other taxes.
BaseAmount = MyBase.CalculateTax(Amount)
Return CityRate * (BaseAmount + Amount) + BaseAmount
End Function
End Class

Sub TestPoly()
Dim Item1 As New BaseTax
Dim Item2 As New CityTax
' $22.74 normal purchase.
ShowTax(Item1, 22.74)
' $22.74 city purchase.
ShowTax(Item2, 22.74)
End Sub

Sub ShowTax(ByVal Item As BaseTax, ByVal SaleAmount As Double)


' Item is declared as BaseTax, but you can
' pass an item of type CityTax instead.
Dim TaxAmount As Double
TaxAmount = Item.CalculateTax(SaleAmount)
MsgBox("The tax is: " & Format(TaxAmount, "C"))
End Sub

En este ejemplo, el procedimiento ShowTax acepta un parámetro denominado Item de tipo BaseTax, pero también puede pasar
cualquiera de las clases derivadas de la clase BaseTax, como CityTax. La ventaja de este diseño es que se pueden agregar
nuevas clases derivadas de la clase BaseTax sin cambiar el código cliente en el procedimiento ShowTax.
Vea también
Conceptos
Polimorfismo basado en la interfaz
Otros recursos
Diseñar una jerarquía de herencia
Conceptos del lenguaje Visual Basic

Polimorfismo basado en la interfaz


Las interfaces proporcionan otro método de conseguir el polimorfismo en Visual Basic. Las interfaces describen propiedades y
métodos como clases, pero a diferencia de éstas, no pueden proporcionar ninguna implementación. Las interfaces múltiples
tienen la ventaja de permitir la evolución de los sistemas de componentes de software sin interrumpir el código existente.
Para conseguir el polimorfismo con interfaces, se implementa una interfaz de diferentes formas en varias clases distintas. Las
aplicaciones cliente pueden utilizar la implementación nueva o la antigua, exactamente de la misma manera. La ventaja del
polimorfismo basado en interfaz es que no es necesario volver a compilar aplicaciones cliente existentes para que funcionen
con nuevas implementaciones de interfaz.
El siguiente ejemplo define una interfaz denominada Shape2 que se implementa en una clase denominada
RightTriangleClass2 y RectangleClass2. Un método denominado ProcessShape2 llama al método de instancias
CalculateArea de RightTriangleClass2 o RectangleClass2:

VB
Sub TestInterface()
Dim RectangleObject2 As New RectangleClass2
Dim RightTriangleObject2 As New RightTriangleClass2
ProcessShape2(RightTriangleObject2, 3, 14)
ProcessShape2(RectangleObject2, 3, 5)
End Sub

Sub ProcessShape2(ByVal Shape2 As Shape2, ByVal X As Double, _


ByVal Y As Double)
MsgBox("The area of the object is " _
& Shape2.CalculateArea(X, Y))
End Sub

Public Interface Shape2


Function CalculateArea(ByVal X As Double, ByVal Y As Double) As Double
End Interface

Public Class RightTriangleClass2


Implements Shape2
Function CalculateArea(ByVal X As Double, _
ByVal Y As Double) As Double Implements Shape2.CalculateArea
' Calculate the area of a right triangle.
Return 0.5 * (X * Y)
End Function
End Class
Public Class RectangleClass2
Implements Shape2
Function CalculateArea(ByVal X As Double, _
ByVal Y As Double) As Double Implements Shape2.CalculateArea
' Calculate the area of a rectangle.
Return X * Y
End Function
End Class

Vea también
Tareas
Cómo: Crear e implementar interfaces
Conceptos
Polimorfismo basado en la herencia
Conceptos del lenguaje Visual Basic

Diseñar una jerarquía de herencia


Las jerarquías de herencia son más fáciles de implementar que de diseñar, por lo que es arriesgado comenzar a codificar antes
de identificar claramente las necesidades. La corrección de errores de diseño en una jerarquía de clases tras la implementación
puede requerir cambios que deshabilitan las aplicaciones existentes. En esta sección se explican consideraciones del diseño de
jerarquía de herencia y se proporciona información que ayuda a evitar estos errores.
En esta sección
Consideraciones de diseño de jerarquías de clases para la extensibilidad
Se describe la forma de diseñar jerarquías de clases de modo que otros programadores pueden actualizarlas o ampliarlas.
Consideraciones sobre la elección de niveles de acceso para métodos
Se describe el uso correcto de niveles de accesibilidad dentro de las clases.
Cambios en el diseño de la clase base después de la implementación
Se explican los problemas los que se enfrentan los programadores al intentar hacer cambios en una jerarquía de clases.
Secciones relacionadas
Cuándo se deben utilizar interfaces
Explica cuándo se deben utilizar interfaces en lugar de una jerarquía de herencia.
Interfaces en Visual Basic
Se resume la forma de diseñar e implementar interfaces.
Conceptos del lenguaje Visual Basic

Consideraciones de diseño de jerarquías de clases para la


extensibilidad
Incluso las jerarquías de clases bien diseñadas necesitan evolucionar con el tiempo. Las opciones iniciales que elija en el
momento de diseñar una jerarquía de clases pueden simplificar su trabajo posteriormente.
Extender jerarquías de clases
En la siguiente lista se incluyen sugerencias para simplificar la extensión de las jerarquías de clases:
Las jerarquías se definen desde lo general a lo específico. Defina las clases en cada nivel de una jerarquía de herencia de
la forma más genérica posible. Las clases derivadas pueden heredar, reutilizar y extender métodos de clases base.
Por ejemplo, suponga que está diseñando un jerarquía de clases que modela el hardware del equipo. Al comenzar a
modelar los dispositivos de salida, podría definir clases denominadas Display, Printer y File. Después podría definir las
clases que implementan los métodos definidos en las clases base. Por ejemplo, la clase LCDDisplay puede haber
derivado de Display e implementar un método denominado EnterPowerSaveMode.
Defina los tipos de datos y el almacenamiento con generosidad a fin de evitar cambios difíciles posteriormente. Por
ejemplo, podría considerar el uso de una variable de tipo Long aunque los datos actuales sólo requieran una variable
estándar Integer.
Exponga sólo los elementos que las clases derivadas necesiten. Los campos y métodos Private reducen los conflictos de
denominación y protegen a otros usuarios del uso de elementos que pueden necesitar cambios posteriormente.
Los miembros que sólo sean necesarios para las clases derivadas deben marcarse como Protected. Esto garantiza que
sólo las clases derivadas dependen de estos miembros y facilita la actualización de estos miembros durante el desarrollo.
Asegúrese de que los métodos de clase base no dependen de miembros Overridable cuya funcionalidad pueden
cambiar las clases herederas.
Vea también
Referencia
MustInherit
MustOverride
Conceptos
Consideraciones sobre la elección de niveles de acceso para métodos
Cambios en el diseño de la clase base después de la implementación
Conceptos del lenguaje Visual Basic

Consideraciones sobre la elección de niveles de acceso para


métodos
Al aplicar los niveles de acceso óptimos a los miembros de una jerarquía de clases se facilita su mantenimiento, ya que se
puede controlar cómo se utilizarán dichos miembros.
Como norma general, deben declararse miembros de clase con modificadores que proporcionen la menor cantidad posible de
accesos. Al restringir el acceso a los miembros de clases se reducen los conflictos de denominación y se impide que los
métodos se utilicen de forma no deseada.
Los miembros de clase internos deben declararse como Private; el acceso a tales miembros sólo es posible desde la clase en la
que están definidos.
Los métodos que sólo se utilizan en una clase o en los descendientes de una clase deben utilizar el modificador de acceso
Protected. Un miembro Protected es accesible desde dentro de la clase en la que se ha declarado, y desde dentro de
cualquier clase derivada de la clase que declaró este miembro.
El acceso a los miembros de datos Friend puede realizarse desde fuera de una clase, pero sólo mediante los módulos que
forman parte del proyecto en que está definida la clase.
Los miembros de datos Public están siempre visibles y suelen utilizarse al final de una jerarquía de clases.
Vea también
Conceptos
Consideraciones de diseño de jerarquías de clases para la extensibilidad
Cambios en el diseño de la clase base después de la implementación
Conceptos del lenguaje Visual Basic

Cambios en el diseño de la clase base después de la


implementación
Lo ideal sería que las jerarquías de clases nunca cambiaran después de su implementación, puesto que incluso los pequeños
cambios pueden tener consecuencias no deseadas. En realidad, estos cambios no siempre pueden evitarse: los requisitos del
producto pueden cambiar y las especificaciones de diseño a veces omiten elementos clave. Una categoría de problemas de
herencia se denomina el problema de fragilidad de la clase base.
El problema de fragilidad de la clase base
El principal inconveniente de utilizar jerarquías de herencia es un problema denominado fragilidad de las clases base. Para
cambiar clases base suele ser necesario cambiar, volver a compilar y redistribuir la clase base y todo el código de las clases
derivadas. Este problema es aún mayor cuando son varios los autores de la clase base y de las clases derivadas, puesto que
cada uno puede denegar el acceso a su código fuente. En el peor de los casos, un cliente podría utilizar sin darse cuenta la
forma binaria compilada de una clase base actualizada con el original y la versión binaria incompatible de las clases derivadas.
Los cambios en la clase base que pueden interrumpir las clases derivadas incluyen el reemplazar o cambiar el tipo de datos de
los miembros de la clase base.
Minimizar los problemas de fragilidad de la clase base
La mejor manera de evitar el problema de fragilidad de la clase base consiste en realizar los cambios sólo en las clases
derivadas. No obstante, esto no siempre es posible porque es necesario considerar todas las posibilidades cuando se libera por
primera vez la clase base; a pesar de todos los esfuerzos realizados en este sentido, a veces los cambios imprevisibles en la
clase base son inevitables.
El uso de clases MustInherit y métodos MustOverride ayuda a reducir los problemas de fragilidad de la clase base, puesto
que así los detalles de la implementación se trasladan a las clases derivadas y se reduce la necesidad de cambios en la clase
base. Una vez más, esto no siempre es posible, ni siquiera con el mejor planeamiento.
Los miembros de datos sombreados en clases derivadas también sirven de ayuda, puesto que reducen los conflictos de
nomenclatura con los miembros de la clase base.
La forma más segura de extender la funcionalidad de una clase base consiste en agregar nuevos miembros. Los nuevos
miembros sólo podrán interrumpir una clase base si la clase derivada utiliza la palabra clave Overloads para heredar métodos
de la clase base e introducir nuevos métodos con el mismo nombre. Este problema puede evitarse mediante la especificación
explícita en la clase derivada de los métodos de la clase base que desea heredar y redefiniendo esos métodos y delegando en
ellos.
De alguna manera, todas las clases base tienen cierto grado de fragilidad. En el análisis final, el problema de fragilidad de la
clase base no se puede eliminar, pero sí minimizar mediante un diseño cuidadoso de las jerarquías de clases que reduzca la
necesidad de realizar cambios en la clase base y mediante la realización de pruebas exhaustivas cuando tales cambios sean
inevitables.
Vea también
Referencia
Shadows
Otros recursos
Diseñar una jerarquía de herencia
Conceptos del lenguaje Visual Basic

Miembros compartidos en Visual Basic


Los miembros compartidos son propiedades, procedimientos y campos que comparten todas las instancias de una clase o
estructura. En algunos lenguajes de programación estos elementos se denominan miembros estáticos.
Campos y propiedades compartidos
Los campos y propiedades compartidos son útiles cuando se tiene información que forma parte de una clase, pero que no es
específica de ninguna instancia de una clase. Cuando se cambia el valor de un campo y propiedad compartido, se cambia el
valor asociado a la clase y todas las instancias de la clase.
Por otro lado, al cambiar el valor de un campo o propiedad no compartidos asociados a una instancia, el valor de dicho campo
o propiedad no se ve afectado en otras instancias de la clase. Los campos y propiedades no compartidos existen de forma
independiente en cada instancia de una clase.
De esta forma, los campos y propiedades compartidos se comportan como variables globales a las que sólo se puede tener
acceso desde instancias de una clase, o con cualificación del nombre de clase. Sin campos ni propiedades compartidos, sería
necesario utilizar variables en el nivel de módulo para conseguir el mismo efecto. No obstante, las variables módulo pueden
dificultar la comprensión y el mantenimiento de las clases. Además, el uso de variables en el ámbito de módulo de esta forma
infringe el concepto de encapsulación que las clases representan.
Procedimientos compartidos
Los procedimientos compartidos son métodos de clase que no están asociados con una instancia específica de una clase. Por
ejemplo, el método Cos definido dentro de la clase Math es un método compartido. Se puede llamar a un procedimiento
compartido como un método de un objeto o directamente desde la clase.
Los procedimientos y las propiedades compartidos no tienen acceso a las instancias de la clase. Por este motivo, en los
métodos compartidos, sólo se permiten referencias calificadas a miembros de datos no compartidos.
Nota
No conviene escribir código desde el que se pueda tener acceso a un miembro compartido a través de una instancia de la cla
se. Esto se debe a que el compilador no tiene en cuenta la calificación del miembro compartido y lo trata como si se obtuvier
a acceso a él directamente a través de la clase. En algunas situaciones, quizás desee que el objeto de cualificación ejecute cier
to código y, por tanto, el compilador de Visual Basic genere una advertencia de acceso a un miembro compartido a través de
una instancia de una clase. IntelliSense no muestra los miembros compartidos de una instancia de la clase.

Ejemplo de miembros compartidos


En el ejemplo siguiente se crea un campo compartido, dos campos de instancias y un método compartido para demostrar
cómo funcionan los miembros compartidos en el código:
VB
Public Class Item
Public Shared Count As Integer = 1
Public Shared Sub ShareMethod()
MsgBox("Current value of Count: " & Count)
End Sub
Public Sub New(ByVal Name As String)
' Use Count to initialize SerialNumber.
Me.SerialNumber = Count
Me.Name = Name
' Increment the shared variable
Count += 1
End Sub
Public SerialNumber As Integer
Public Name As String
Public Sub InstanceMethod()
MsgBox("Information in the first object: " & _
Me.SerialNumber & vbTab & Me.Name)
End Sub
End Class
Sub TestShared()
' Create two instances of the class.
Dim part1 As New Item("keyboard")
Dim part2 As New Item("monitor")
part1.InstanceMethod()
part2.InstanceMethod()
Item.ShareMethod()
End Sub

Cuando ejecuta el procedimiento TestShared, se crean dos instancias de la clase. El constructor utiliza el campo compartido
Count para inicializar el campo de instancia SerialNumber y, a continuación, incrementa Count. Esta técnica proporciona
automáticamente a cada instancia un número de serie diferente.
Después de crear las dos instancias, el método de instancia InstanceMethod se llama en ambos objetos, y también se llama al
método compartido ShareMethod. El resultado es:
Information in the first object: 1 keyboard
Information in the second object: 2 monitor
Current value of the shared Count field: 3

Vea también
Referencia
Instrucción Dim (Visual Basic)
Cos
Conceptos
Estructuras y clases
Otros recursos
Propiedades, campos y métodos de clases
Estructuras: tipos de datos propios
Conceptos del lenguaje Visual Basic

Enlace en tiempo de compilación y en tiempo de ejecución


El compilador de Visual Basic lleva a cabo un proceso denominado binding cuando se asigna un objeto a una variable de
objeto. Un objeto es de enlace en tiempo de compilación cuando se asigna a una variable que se declara de un tipo de objeto
específico. Los objetos de enlace en tiempo de compilación permiten al compilador asignar memoria y realizar otras
optimizaciones antes de que se ejecute la aplicación. Por ejemplo, en el siguiente fragmento de código se declara que una
variable es de tipo FileStream:
VB
' Create a variable to hold a new object.
Dim FS As System.IO.FileStream
' Assign a new object to the variable.
FS = New System.IO.FileStream("C:\tmp.txt", _
System.IO.FileMode.Open)

Como FileStream es un tipo de objeto específico, la instancia asignada a FS es de enlace en tiempo de compilación.
Por el contrario, un objeto es de enlace en tiempo de ejecución cuando se asigna a una variable que se declara de tipo Object.
Los objetos de este tipo pueden contener referencias a cualquier objeto, pero carecen de muchas de las ventajas de los objetos
de enlace en tiempo de compilación. Por ejemplo, en el siguiente fragmento de código se declara una variable de objeto para
contener un objeto devuelto por la función CreateObject:
VB
' To use this example, you must have Microsoft Excel installed on your computer.
' Compile with Option Strict Off to allow late binding.
Sub TestLateBinding()
Dim xlApp As Object
Dim xlBook As Object
Dim xlSheet As Object
xlApp = CreateObject("Excel.Application")
' Late bind an instance of an Excel workbook.
xlBook = xlApp.Workbooks.Add
' Late bind an instance of an Excel worksheet.
xlSheet = xlBook.Worksheets(1)
xlSheet.Activate()
' Show the application.
xlSheet.Application.Visible = True
' Place some text in the second row of the sheet.
xlSheet.Cells(2, 2) = "This is column B row 2"
End Sub

Ventajas del enlace en tiempo de compilación


Siempre que sea posible, utilice objetos de enlace en tiempo de compilación, puesto que permiten al compilador realizar
importantes optimizaciones que producen aplicaciones más eficientes. Los objetos de enlace en tiempo de compilación son
bastante más rápidos y también facilitan la lectura y el mantenimiento del código, ya que declaran exactamente qué clase de
objetos se están utilizando. Otra ventaja del enlace en tiempo de compilación consiste en que permite el uso de funciones
útiles como la finalización automática de código y la Ayuda dinámica, puesto que el entorno de desarrollo integrado (IDE) de
Visual Studio puede determinar exactamente el tipo de objeto con el que se está trabajando mientras se edita el código. El
enlace en tiempo de compilación reduce el número y la gravedad de los errores en tiempo de ejecución al permitir que el
compilador notifique los errores cuando se compila un programa.
Nota
El enlace en tiempo de ejecución sólo puede utilizarse para obtener acceso a miembros de tipo declarados como Public. Ten
er acceso a miembros declarados como Friend o Protected Friend produce un error en tiempo de ejecución.

Vea también
Referencia
Object (Tipo de datos)
CreateObject (Función, Visual Basic)
Conceptos
Duración de los objetos: cómo se crean y destruyen
Conceptos del lenguaje Visual Basic

Obtener información de clases en tiempo de ejecución


En algunos casos, es posible que necesite trabajar con variables definidas como tipo Object en lugar de variables definidas
como tipos de objeto más específicos. Las variables definidas como Object pueden contener cualquier otro objeto de tipo,
como tipos de datos Integer, Double u Object.
En esta sección
Determinar el tipo de objeto
Explica cómo determinar la clase a la que pertenece un objeto.
Llamar a una propiedad o método mediante un nombre de cadena
Explica paso a paso el proceso de especificación de argumentos por nombre en lugar de por posición, al llamar a un método.
Secciones relacionadas
Objetos en Visual Basic
Describe los fundamentos de la programación orientada a objetos.
Conceptos del lenguaje Visual Basic

Determinar el tipo de objeto


Las variables de objeto genéricas (es decir, variables declaradas como Object) pueden contener objetos de cualquier clase. Al
utilizar variables de tipo Object, puede necesitar tomar medidas diferentes basadas en la clase del objeto; por ejemplo,
algunos objetos no podrían admitir una propiedad determinada o método. Visual Basic proporciona dos formas de determinar
qué tipo de objeto se almacena en una variable de objeto: la función TypeName y el operador TypeOf...Is.
TypeName y TypeOf…Is
La función TypeName devuelve una cadena y es la opción más conveniente si se necesita almacenar o presentar el nombre de
clase de un objeto, como se muestra en el fragmento de código siguiente:
VB
Dim Ctrl As Control = New TextBox
MsgBox(TypeName(Ctrl))

El operador TypeOf...Is es idóneo para comprobar el tipo de un objeto, puesto que es mucho más rápido que una
comparación de cadenas equivalente que utiliza TypeName. El fragmento de código siguiente usa TypeOf...Is dentro de una
instrucción If...Then...Else:
VB
If TypeOf Ctrl Is Button Then
MsgBox("The control is a button.")
End If

Use este método con precaución. El operador TypeOf...Is devuelve True si un objeto es de un tipo específico o si se deriva de
un tipo específico. Casi todas las tareas que se pueden realizar con Visual Basic implican el uso de objetos, entre ellos algunos
elementos que normalmente no se suponen objetos, por ejemplo, cadenas y enteros. Estos objetos se derivan de Object y
heredan métodos de ellos. Cuando se pasa un Integer y se evalúa con Object, el operador TypeOf...Is devuelve True. El
resultado del ejemplo siguiente declara que el parámetro InParam es a la vez Object e Integer:
VB
Sub CheckType(ByVal InParam As Object)
' Both If statements evaluate to True when an
' Integer is passed to this procedure.
If TypeOf InParam Is Object Then
MsgBox("InParam is an Object")
End If
If TypeOf InParam Is Integer Then
MsgBox("InParam is an Integer")
End If
End Sub

En el ejemplo siguiente se utilizan TypeOf...Is y TypeName para determinar el tipo del objeto que se les pasa en el
argumento Ctrl. El procedimiento TestObject llama a ShowType con tres clases de controles diferentes.
Para ejecutar el ejemplo
1. Cree un nuevo proyecto de aplicación para Windows y agregue al formulario un control Button, un control CheckBox y
un control RadioButton.
2. Llame al procedimiento TestObject desde el botón del formulario.
3. Agregue el código siguiente al formulario:
VB
Sub ShowType(ByVal Ctrl As Object)
'Use the TypeName function to display the class name as text.
MsgBox(TypeName(Ctrl))
'Use the TypeOf function to determine the object's type.
If TypeOf Ctrl Is Button Then
MsgBox("The control is a button.")
ElseIf TypeOf Ctrl Is CheckBox Then
MsgBox("The control is a check box.")
Else
MsgBox("The object is some other type of control.")
End If
End Sub

Protected Sub TestObject()


'Test the ShowType procedure with three kinds of objects.
ShowType(Me.Button1)
ShowType(Me.CheckBox1)
ShowType(Me.RadioButton1)
End Sub

Vea también
Referencia
Object (Tipo de datos)
TypeName (Función, Visual Basic)
Instrucción If...Then...Else (Visual Basic)
String (Tipo de datos, Visual Basic)
Integer (Tipo de datos, Visual Basic)
Conceptos
Llamar a una propiedad o método mediante un nombre de cadena
Otros recursos
Obtener información de clases en tiempo de ejecución
Conceptos del lenguaje Visual Basic

Llamar a una propiedad o método mediante un nombre de


cadena
En la mayoría de los casos, puede descubrir las propiedades y métodos de un objeto en tiempo de diseño y escribir código
para controlarlos. No obstante, en algunos pocos casos, puede que no conozca de antemano las propiedades y los métodos de
un objeto, o puede que simplemente desee la flexibilidad de permitir a un usuario final que especifique propiedades o ejecute
métodos en tiempo de ejecución.
CallByName (Función)
Piense, por ejemplo, en una aplicación cliente que evalúe expresiones escritas por el usuario mediante el paso de un operador
a un componente COM. Suponga que está agregando constantemente funciones nuevas al componente que requiere
operadores nuevos. Con el uso de las técnicas estándar de acceso a objetos, necesitaría volver a compilar y volver a distribuir
la aplicación cliente antes de poder utilizar los operadores nuevos. Para evitarlo, puede utilizar la función CallByName para
pasar los operadores nuevos como cadenas, sin modificar la aplicación.
La función CallByName le permite utilizar una cadena para especificar una propiedad o método en tiempo de ejecución. La
firma para la función CallByName tiene el siguiente aspecto:
Resultado = CallByName(Objeto, nombreDeProcedimiento, tipoDeLlamada, Argumentos())
El primer argumento, Objeto, toma el nombre del objeto sobre el que desea actuar. El argumento nombreDeProcedimiento
toma una cadena que contiene el nombre del procedimiento de propiedad o método que debe invocarse. El argumento
tipoDeLlamada toma una constante que representa el tipo de procedimiento que debe invocarse: un método
(Microsoft.VisualBasic.CallType.Method), una lectura de propiedad (Microsoft.VisualBasic.CallType.Get) o un conjunto
de propiedades (Microsoft.VisualBasic.CallType.Set). El argumento Argumentos, que es opcional, toma una matriz de tipo
Object que contiene los argumentos para el procedimiento.
Puede utilizar CallByName con clases en la solución actual, pero se utiliza más frecuentemente para obtener acceso a objetos
COM o a objetos de ensamblados de .NET Framework.
Suponga que agrega una referencia a un ensamblado que contiene una clase denominada MathClass, que tiene una función
nueva denominada SquareRoot, como se muestra en el siguiente código:
VB
Class MathClass
Function SquareRoot(ByVal X As Double) As Double
Return Math.Sqrt(X)
End Function
Function InverseSine(ByVal X As Double) As Double
Return Math.Atan(X / Math.Sqrt(-X * X + 1))
End Function
Function Acos(ByVal X As Double) As Double
Return Math.Atan(-X / Math.Sqrt(-X * X + 1)) + 2 * Math.Atan(1)
End Function
End Class

La aplicación podría utilizar controles de cuadro de texto para controlar qué método se va a llamar y sus argumentos. Por
ejemplo, si TextBox1 contiene la expresión que se va a evaluar y TextBox2 se utiliza para escribir el nombre de la función,
puede utilizar el siguiente código para invocar la función SquareRoot en la expresión de TextBox1:
VB
Private Sub CallMath()
Dim Math As New MathClass
Me.TextBox1.Text = CStr(CallByName(Math, Me.TextBox2.Text, _
Microsoft.VisualBasic.CallType.Method, TextBox1.Text))
End Sub

Si escribe "64" en TextBox1, "SquareRoot" en TextBox2 y, a continuación, llama al procedimiento CallMath, se evalúa la raíz
cuadrada del número que aparece en TextBox1. El código del ejemplo invoca la función SquareRoot (que toma una cadena con
la expresión que se va a evaluar como argumento requerido) y devuelve "8" en TextBox1 (la raíz cuadrada de 64). Si el usuario
escribe una cadena no válida en TextBox2, o si la cadena contiene el nombre de una propiedad en lugar de un método, o si el
método tiene un argumento necesario adicional, sin duda se producirá un error en tiempo de ejecución. Es necesario agregar
un código sólido de control de errores cuando utilice CallByName para anticipar estos errores u otros.
Nota
Mientras que la función CallByName puede ser útil en algunas situaciones, debe sopesar su utilidad frente a las implicacion
es de rendimiento; el uso de CallByName para invocar un procedimiento es un poco más lento que una llamada enlazada e
n tiempo de ejecución. Si está invocando una función a la que se llama repetidamente, como ocurriría dentro de un bucle, Ca
llByName puede afectar de forma grave al rendimiento.

Vea también
Tareas
Cómo: Realizar varias acciones en un objeto
Referencia
CallByName (Función)
Conceptos
Determinar el tipo de objeto
Otros recursos
Obtener información de clases en tiempo de ejecución
Conceptos del lenguaje Visual Basic

Interoperabilidad COM
El Modelo de objetos componentes (COM) permite a un objeto exponer su funcionalidad a otros componentes y a aplicaciones
host. La mayor parte del software actual incluye objetos COM. Aunque los ensamblados de .NET son la mejor opción para las
aplicaciones nuevas, es posible que a veces tenga que utilizar objetos COM. En esta sección se explican los problemas de
interoperabilidad asociados a la creación y el uso de objetos COM en Visual Basic.
En esta sección
Información general sobre la interoperabilidad COM
Proporciona información general sobre la interoperabilidad COM.
Cómo: Hacer referencia a objetos COM desde Visual Basic
Describe la forma de agregar referencias a objetos COM que tienen biblioteca de tipos.
Cómo: Trabajar con controles ActiveX
Ilustra la forma de utilizar controles ActiveX existentes para agregar características al cuadro de herramientas de Visual
Studio.
Tutorial: Llamar a las API de Windows
Describe paso a paso el proceso de llamada a las API que forman parte del sistema operativo Windows.
Cómo: Llamar a las API de Windows (Visual Basic)
Muestra cómo definir y llamar a la función MessageBox en User32.dll.
Tutorial: Crear objetos COM con Visual Basic 2005
Muestra el proceso de crear objetos COM con (o sin) la plantilla de clase COM.
Solución de problemas de interoperabilidad
Describe algunos de los problemas que pueden producirse al utilizar COM.
Interoperabilidad COM en aplicaciones .NET Framework
Proporciona información general sobre la utilización de objetos COM y objetos de .NET Framework en la misma aplicación.
Secciones relacionadas
Tutorial: Implementar la herencia mediante objetos COM
Ilustra la forma de utilizar las clases en objetos COM como base para la herencia en Visual Basic.
Interoperar con código no administrado
Describe los servicios de interoperabilidad proporcionados por Common Language Runtime.
Exponer componentes COM en .NET Framework
Describe el proceso de llamada a tipos COM mediante interoperabilidad COM.
Exponer componentes de .NET Framework en COM
Describe la preparación y el uso de tipos administrados desde COM.
Aplicar atributos de interoperabilidad
Describe los atributos que se pueden utilizar cuando se utiliza código no administrado.
Conceptos del lenguaje Visual Basic

Información general sobre la interoperabilidad COM


El Modelo de objetos componentes (COM) permite a un objeto exponer su funcionalidad a otros componentes y a aplicaciones
host. Aunque los objetos COM han sido fundamentales para la programación para Windows durante muchos años, las
aplicaciones diseñadas para Common Language Runtime (CLR) proporcionan muchas ventajas.
Las aplicaciones de .NET Framework terminarán por reemplazar finalmente a las aplicaciones desarrolladas con COM. Hasta
entonces, es posible que necesite utilizar o crear objetos COM con Visual Studio. La interoperabilidad con COM, o
interoperabilidad COM, le permite utilizar objetos COM existentes mientras realiza la transición a .NET Framework a su ritmo.
Utilizando .NET Framework para crear componentes COM, puede usar la interoperabilidad COM sin necesidad de registrarse.
Esto le permite controlar qué versión del archivo DLL se activa cuando hay instalada más de una versión en un equipo y
permite a los usuarios finales utilizar XCOPY o FTP para copiar su aplicación en un directorio adecuado de su equipo donde se
puede ejecutar. Para obtener más información, consulte Interoperabilidad COM sin registro.
Código administrado y datos administrados
El código desarrollado para .NET Framework se denomina código administrado y contiene metadatos que utiliza Common
Language Runtime (CLR). Los datos utilizados por las aplicaciones de .NET Framework se denominan datos administrados
porque Runtime administra tareas relacionadas con datos, como asignación y recuperación de memoria, y comprobación de
tipos. De forma predeterminada, Visual Basic 2005 utiliza código y datos administrados, pero puede tener acceso a código y
datos no administrados de objetos COM que utilizan ensamblados de interoperabilidad (esto se describe más adelante en esta
página).
Ensamblados
Un ensamblado es la unidad de creación principal de una aplicación de .NET Framework. Es un conjunto de características de
funcionalidad que se genera, recibe un número de versión y se implanta como una sola unidad de implementación que
contiene uno o más archivos. Cada ensamblado contiene un manifiesto de ensamblado.
Bibliotecas de tipos y manifiestos de ensamblado
Las bibliotecas de tipos describen las características de los objetos COM, como los nombres de miembro y los tipos de datos.
Los manifiestos de ensamblado realizan esta misma función para aplicaciones de .NET Framework. Incluyen información sobre:
Identidad, versión, referencia cultural y firma digital de ensamblado
Los archivos que componen la implementación de un ensamblado
Los tipos y recursos que componen el ensamblado, incluidos los que se exportan desde el ensamblado
Las dependencias de tiempo de compilación en otros ensamblados
Los permisos requeridos para que el ensamblado se ejecute correctamente
Para obtener más información sobre ensamblados y manifiestos de ensamblado, consulte Ensamblados.
Importar y exportar las bibliotecas de tipos
Visual Studio contiene una utilidad, Tlbimp, que le permite importar información de una biblioteca de tipos a una aplicación de
.NET Framework. Puede generar bibliotecas de tipos a partir de ensamblados mediante la utilidad Tlbexp.
Para obtener información sobre Tlbimp y Tlbexp, consulte Importador de la biblioteca de tipos (TlbImp.exe) y
Exportador de la biblioteca de tipos (Tlbexp.exe).
Ensamblados de interoperabilidad
Los ensamblados de interoperabilidad son ensamblados de .NET Framework que actúan como puentes entre código
administrado y código no administrado, y asignan miembros de objetos COM a miembros administrados de .NET Framework
equivalentes. Los ensamblados de interoperabilidad creados en Visual Basic 2005 controlan muchos de los detalles del trabajo
con objetos COM, como el cálculo de referencia de interoperabilidad.
Cálculo de referencia de interoperabilidad
Todas las aplicaciones de .NET Framework comparten un conjunto de tipos comunes que permiten la interoperabilidad de
objetos, independientemente del lenguaje de programación que se utilice. A veces, los parámetros de los objetos COM y los
valores devueltos utilizan tipos de datos distintos de los que se utilizan en el código administrado. El cálculo de referencia de
interoperabilidad es el proceso de empaquetar parámetros y valores devueltos en tipos de datos equivalentes enviados a (o
recibidos de) objetos COM. Para obtener más información, consulte
Información general acerca del cálculo de referencia de interoperabilidad.
Vea también
Tareas
Tutorial: Implementar la herencia mediante objetos COM
Solución de problemas de interoperabilidad
Referencia
Importador de la biblioteca de tipos (TlbImp.exe)
Exportador de la biblioteca de tipos (Tlbexp.exe)
Conceptos
Ensamblados
Información general acerca del cálculo de referencia de interoperabilidad
Otros recursos
Interoperabilidad COM
Interoperar con código no administrado
Interoperabilidad COM sin registro
Conceptos del lenguaje Visual Basic

Cómo: Hacer referencia a objetos COM desde Visual Basic


En Visual Basic, agregar referencias a objetos COM que tienen bibliotecas de tipos es parecido a como se hacía en versiones
anteriores. Sin embargo, Visual Basic agrega al procedimiento la creación de un ensamblado de interoperabilidad. Las
referencias a los miembros del objeto COM se enrutan al ensamblado de interoperabilidad y después se reenvían al objeto
COM real. Las respuestas del objeto COM se enrutan al ensamblado de interoperabilidad y se reenvían a la aplicación de .NET
Framework.
Para agregar referencias a objetos COM
1. En el menú Proyecto, haga clic en Agregar referencia y, a continuación, elija la ficha COM en el cuadro de diálogo.
2. Seleccione en la lista de objetos COM el componente que desea utilizar.
3. Para simplificar el acceso al ensamblado de interoperabilidad, agregue una instrucción Imports al principio del código
de la clase o el módulo en el que va a utilizar el objeto COM:
Visual Basic crea automáticamente ensamblados de interoperabilidad cuando se agrega una referencia a una biblioteca
de tipos en el entorno de desarrollo integrado (IDE). Si trabaja desde la línea de comandos, puede utilizar la herramienta
Tlbimp para crear manualmente ensamblados de interoperabilidad.
Para crear un ensamblado de interoperabilidad mediante Tlbimp
1. Agregue la ubicación de Tlbimp a la ruta de búsqueda, si no forma parte ya de la ruta de búsqueda y si no está
actualmente en el directorio en que se encuentra.
2. Llame a Tlbimp desde el símbolo del sistema con la siguiente información:
Nombre y ubicación del archivo DLL que contiene la biblioteca de tipos
Nombre y ubicación del espacio de nombres en que debe colocarse la información
Nombre y ubicación del ensamblado de interoperabilidad de destino
El código siguiente proporciona un ejemplo:

Tlbimp test3.dll /out:NameSpace1 /out:Interop1.dll

Puede utilizar Tlbimp para crear ensamblados de interoperabilidad para bibliotecas de tipos, incluso para objetos COM
no registrados. Sin embargo, los objetos COM a los que se hace referencia mediante ensamblados de interoperabilidad
deben registrarse correctamente en el equipo en que se vayan a utilizar. Puede registrar un objeto COM con la
herramienta Regsvr32 incluida en el sistema operativo Windows.
Vea también
Tareas
Tutorial: Implementar la herencia mediante objetos COM
Solución de problemas de interoperabilidad
Referencia
Importador de la biblioteca de tipos (TlbImp.exe)
Exportador de la biblioteca de tipos (Tlbexp.exe)
Imports (Instrucción)
Otros recursos
Interoperabilidad COM
Conceptos del lenguaje Visual Basic

Cómo: Trabajar con controles ActiveX


Los controles ActiveX son componentes u objetos COM que se pueden insertar en una página Web o en otra aplicación para
reutilizar una funcionalidad empaquetada programada por otros. Puede utilizar controles ActiveX desarrollados para Visual
Basic 6.0 y versiones anteriores a fin de agregar características al Cuadro de herramientas de Visual Studio.
Para agregar controles ActiveX al cuadro de herramientas
1. En el menú Herramientas, haga clic en Elegir elementos del cuadro de herramientas.
Aparece el cuadro de diálogo Elegir cuadro de herramientas.
2. Haga clic en la ficha Componentes COM.
3. Active la casilla de verificación situada junto al control ActiveX que desea utilizar y, a continuación, haga clic en Aceptar.
El nuevo control aparece junto a las demás herramientas del Cuadro de herramientas.
Nota
Puede utilizar la herramienta Aximp para crear manualmente un ensamblado de interoperabilidad para controles Activ
eX. Para obtener más información, consulte
Importador de controles ActiveX de formularios Windows Forms (Aximp.exe).

Vea también
Tareas
Cómo: Agregar controles ActiveX a formularios Windows Forms
Solución de problemas de interoperabilidad
Referencia
Elegir elementos del cuadro de herramientas (Cuadro de diálogo): Visual Studio
Importador de controles ActiveX de formularios Windows Forms (Aximp.exe)
Conceptos
Consideraciones al alojar un control ActiveX en un formulario Windows Forms
Otros recursos
Interoperabilidad COM
Conceptos del lenguaje Visual Basic

Tutorial: Llamar a las API de Windows


Las API de Windows son bibliotecas de vínculos dinámicos (DLL) que forman parte del sistema operativo Windows. Se utilizan
para realizar tareas cuando resulta difícil escribir procedimientos equivalentes. Por ejemplo, Windows proporciona una función
denominada FlashWindowEx que permite que la barra de título de una aplicación alterne entre un sombreado claro y otro
oscuro.
La ventaja de utilizar las API de Windows en el código es que pueden ahorrar tiempo porque contienen numerosas funciones
útiles ya escritas y listas para utilizar. La desventaja es que puede resultar difícil trabajar con las API de Windows y pueden ser
implacables cuando las cosas van mal.
Las API de Windows representan una categoría especial de interoperabilidad. Las API de Windows no utilizan código
administrado, no tienen bibliotecas de tipos integradas y utilizan tipos de datos que son diferentes a los que se utilizan en
Visual Studio. Debido a estas diferencias y a que las API de Windows no son objetos COM, la interoperabilidad con las API de
Windows y .NET Framework se lleva a cabo mediante la invocación de la plataforma o PInvoke. Invocación de la plataforma es
un servicio que permite al código administrado llamar a funciones no administradas implementadas en archivos DLL. Para
obtener más información, vea Consumir funciones DLL no administradas. Puede utilizar PInvoke en Visual Basic mediante la
instrucción Declare o aplicando el atributo DllImport a un procedimiento vacío.
Las llamadas a las API de Windows constituían en el pasado un parte importante de la programación de Visual Basic, pero en
Visual Basic 2005 pocas veces resultan necesarias. Siempre que sea posible, debe utilizar código administrado en .NET
Framework para llevar a cabo tareas en lugar de utilizar llamadas a las API de Windows. Este tutorial proporciona información
sobre aquellas situaciones en las que es necesario utilizar las API de Windows.
Nota
Los cuadros de diálogo y los comandos de menú que se ven pueden diferir de los descritos en la Ayuda, dependiendo de los
valores de configuración o de edición activos. Para cambiar la configuración, seleccione Importar y exportar configuracio
nes en el menú Herramientas. Para obtener más información, vea Valores de configuración de Visual Studio.

Llamadas a API utilizando Declare


El modo más común de llamar a las API de Windows es utilizar la instrucción Declare.
Para declarar un procedimiento de DLL
1. Determine el nombre de la función que desea llamar y sus argumentos, los tipos de argumento y el valor devuelto, así
como el nombre y la ubicación de la DLL que la contiene.
Nota
Para obtener información completa sobre las API de Windows, consulte la documentación Win32 SDK relacionada con
la API de Windows de Platform SDK. Para obtener más información sobre las constantes que utilizan las API de Windo
ws, vea los archivos de encabezado, como Windows.h, que se incluyen en el SDK de la plataforma.

2. En el menú Archivo, haga clic en Nuevo para abrir un nuevo proyecto de aplicación para Windows y, a continuación,
haga clic en Proyecto. Aparecerá el cuadro de diálogo Nuevo proyecto.
3. Seleccione Aplicación para Windows en la lista de plantillas de proyecto de Visual Basic. Aparecerá el proyecto nuevo.
4. Agregue la función Declare siguiente a la clase o al módulo en el que desea utilizar el archivo DLL:
VB
Declare Auto Function MBox Lib "user32.dll" Alias "MessageBox" ( _
ByVal hWnd As Integer, _
ByVal txt As String, _
ByVal caption As String, _
ByVal Typ As Integer) _
As Integer
Partes de la instrucción Declare
La instrucción Declare incluye los siguientes elementos.
Modificador Auto
El modificador Auto indica al motor en tiempo de ejecución que convierta la cadena basada en el nombre del método de
acuerdo con las reglas de Common Language Runtime (o el alias, si se ha especificado).
Palabras clave Lib y Alias
El nombre que sigue a la palabra clave Function es el nombre que utiliza el programa para tener acceso a la función
importada. Puede ser igual que el nombre real de la función a la que llama; o bien, puede utilizar cualquier nombre de
procedimiento válido y utilizar después la palabra clave Alias para especificar el nombre real de la función a la que llama.
Especifique la palabra clave Lib seguida del nombre y la ubicación de la DLL que contiene la función a la que se está llamando.
No es necesario que especifique la ruta de acceso de los archivos ubicados en los directorios del sistema de Windows.
Utilice la palabra clave Alias si el nombre de la función a la que se está llamando no es un nombre de procedimiento de Visual
Basic válido o si está en conflicto con el nombre de otros sistemas de la aplicación. Alias indica el nombre real de la función a
la que se está llamando.
Declaraciones de argumentos y tipos de datos
Declare los argumentos y sus tipos de datos. Esta parte puede resultar complicada porque los tipos de datos que utiliza
Windows no se corresponden con los tipos de datos de Visual Studio. Visual Basic realiza automáticamente gran parte del
trabajo al convertir los argumentos en tipos de datos compatibles; un proceso que se denomina cálculo de referencias. Puede
controlar explícitamente el modo en que se calculan las referencias de los argumentos mediante el atributo MarshalAsAttribute
definido en el espacio de nombres System.Runtime.InteropServices.
Nota
Las versiones anteriores de Visual Basic permitían declarar parámetros As Any, lo que significa que se podía utilizar cualquie
r tipo de datos. Visual Basic requiere que se utilice un tipo de datos específico en todas las instrucciones Declare.

Constantes de las API de Windows


Algunos argumentos son combinaciones de constantes. Por ejemplo, la API MessageBox que se muestra en este tutorial acepta
un argumento Integer denominado Typ que controla cómo se muestra el cuadro de mensaje. Para determinar el valor
numérico de estas constantes, puede examinar las instrucciones #define del archivo WinUser.h. Los valores numéricos suelen
aparecer en formato hexadecimal, así que deberá utilizar una calculadora para sumarlos y convertirlos al sistema decimal. Por
ejemplo, si desea combinar las constantes del estilo de exclamación MB_ICONEXCLAMATION 0x00000030 y el estilo sí/no
MB_YESNO 0x00000004, puede sumar los números y obtener el resultado de 0x00000034, o 52 en el sistema decimal. Aunque
puede utilizar el resultado decimal directamente, es mejor declarar estos valores como constantes en la aplicación y
combinarlos utilizando el operador Or.
Para declarar constantes para las llamadas a API de Windows
1. Consulte la documentación de la función de Windows a la que está llamando. Determine el nombre de las constantes
que utiliza y el nombre del archivo .h que contiene los valores numéricos de estas constantes.
2. Utilice un editor de texto, como el Bloc de notas, para ver el contenido del archivo de encabezado .h y busque los valores
asociados con las constantes que está utilizando. Por ejemplo, la API MessageBox utiliza la constante MB_ICONQUESTION
para mostrar un signo de interrogación en el cuadro de mensaje. La definición para MB_ICONQUESTION está en WinUser.h
y aparece como sigue:
#define MB_ICONQUESTION 0x00000020L

3. Agregue instrucciones Const equivalentes en la clase o el módulo para que estas constantes estén disponibles para la
aplicación. Por ejemplo:
VB
Const MB_ICONQUESTION As Integer = &H20
Const MB_YESNO As Integer = &H4
Const IDYES As Integer = 6
Const IDNO As Integer = 7
Para llamar al procedimiento de DLL
1. Agregue un botón denominado Button1 al formulario de inicio del proyecto y haga doble clic en él para ver su código.
Aparecerá el controlador de eventos del botón.
2. Agregue código al controlador de eventos Click del botón que ha agregado para llamar al procedimiento, y proporcione
los argumentos correspondientes:
VB
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click

' Stores the return value.


Dim RetVal As Integer
RetVal = MBox(0, "Declare DLL Test", "Windows API MessageBox", _
MB_ICONQUESTION Or MB_YESNO)

' Check the return value.


If RetVal = IDYES Then
MsgBox("You chose Yes")
Else
MsgBox("You chose No")
End If
End Sub

3. Presione F5 para ejecutar el proyecto. El cuadro de mensaje aparecerá con dos botones de respuesta Sí y No. Haga clic
en alguno de ellos.
Cálculo de referencias de datos
Visual Basic convierte automáticamente los tipos de datos de los parámetros y devuelve valores para las llamadas a las API de
Windows, aunque se puede utilizar el atributo MarshalAs para especificar de manera explícita los tipos de datos no
administrados que espera una API. Para obtener más información sobre el cálculo de referencia de interoperabilidad, vea
Cálculo de referencia de interoperabilidad.
Para utilizar Declare y MarshalAs en una llamada a una API
1. Determine el nombre de la función a la que desea llamar y sus argumentos, tipos de datos y valor devuelto.
2. Para simplificar el acceso al atributo MarshalAs, agregue una instrucción Imports en la parte superior del código de la
clase o módulo, como en el siguiente ejemplo:
VB
Imports System.Runtime.InteropServices

3. Agregue el prototipo de la función importada en la clase o módulo que está utilizando y aplique el atributo MarshalAs a
los parámetros o al valor devuelto. En el siguiente ejemplo, se calculan las referencias de una llamada a una API que
espera el tipo void* como AsAny:
VB
Declare Sub SetData Lib "..\LIB\UnmgdLib.dll" ( _
ByVal x As Short, _
<MarshalAsAttribute(UnmanagedType.AsAny)> _
ByVal o As Object)

Llamadas a API utilizando DllImport


El atributo DllImport proporciona un medio alternativo para llamar a funciones en los archivos DLL sin utilizar bibliotecas de
tipos. DllImport es prácticamente equivalente a la instrucción Declare, pero proporciona más control sobre el modo en que
se llama a las funciones.
Puede utilizar DllImport con la mayoría de las llamadas a API de Windows siempre y cuando la llamada haga referencia a un
método compartido (a veces denominado static). No puede utilizar métodos que requieran una instancia de una clase. A
diferencia de las instrucciones Declare, las llamadas a DllImport no pueden utilizar el atributo MarshalAs.
Para llamar a una API de Windows utilizando el atributo DllImport
1. En el menú Archivo, haga clic en Nuevo para abrir un nuevo proyecto de aplicación para Windows y, a continuación,
haga clic en Proyecto. Aparecerá el cuadro de diálogo Nuevo proyecto.
2. Seleccione Aplicación para Windows en la lista de plantillas de proyecto de Visual Basic. Aparecerá el proyecto nuevo.
3. Agregue un botón denominado Button2 al formulario de inicio.
4. Haga doble clic en Button2 para abrir la vista de código del formulario.
5. Para simplificar el acceso a DllImport, agregue una instrucción Imports a la parte superior del código para la clase del
formulario de inicio:
VB
Imports System.Runtime.InteropServices

6. Declare una función vacía que preceda a la instrucción End Class para el formulario y dé a la función el nombre
MoveFile.

7. Aplique los modificadores Public y Shared a la declaración de la función y establezca parámetros para MoveFile de
acuerdo con los argumentos que utiliza la función de la API de Windows:
VB
Public Shared Function MoveFile( _
ByVal src As String, _
ByVal dst As String) _
As Boolean
' Leave the body of the function empty.
End Function

La función puede tener cualquier nombre de procedimiento válido; el atributo DllImport especifica el nombre de la DLL.
También controla el cálculo de referencia de interoperabilidad de los parámetros y los valores devueltos, de manera que
puede elegir tipos de datos de Visual Studio que sean similares a los tipos de datos que utiliza la API.
8. Aplique el atributo DllImport a la función vacía. El primer parámetro es el nombre y la ubicación de la DLL que contiene
la función a la que llama. No es necesario que especifique la ruta de acceso de los archivos ubicados en los directorios
del sistema de Windows. El segundo parámetro es un argumento con nombre que especifica el nombre de la función de
la API de Windows. En este ejemplo, el atributo DllImport hace que las llamadas a MoveFile se reenvíen a MoveFileW en
KERNEL32.DLL. El método MoveFileW copia un archivo de la ruta de acceso src a la ruta de acceso dst.
VB
<DllImport("KERNEL32.DLL", EntryPoint:="MoveFileW", SetLastError:=True, _
CharSet:=CharSet.Unicode, ExactSpelling:=True, _
CallingConvention:=CallingConvention.StdCall)> _
Public Shared Function MoveFile( _
ByVal src As String, _
ByVal dst As String) _
As Boolean
' Leave the body of the function empty.
End Function
9. Agregue el código al controlador de eventos Button2_Click para llamar a la función:
VB
Private Sub Button2_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button2.Click

Dim RetVal As Boolean = MoveFile("c:\tmp\Test.txt", "c:\Test.txt")


If RetVal = True Then
MsgBox("The file was moved successfully.")
Else
MsgBox("The file could not be moved.")
End If
End Sub

10. Cree un archivo con el nombre Test.txt y sitúelo en el directorio C:\Tmp del disco duro. Cree el directorio Tmp si es
necesario.
11. Presione F5 para iniciar la aplicación. Aparecerá el formulario principal.
12. Haga clic en Button2. Aparecerá el mensaje "El archivo se ha movido correctamente" si se puede mover el archivo.
Vea también
Referencia
Declare (Instrucción)
Auto
Alias
Lib
DllImportAttribute
MarshalAsAttribute
Conceptos
Crear prototipos en código administrado
Ejemplo Callback
Otros recursos
Interoperabilidad COM
Ejemplos de Visual Basic

Cómo: Llamar a las API de Windows (Visual Basic)


En este ejemplo se define y se llama a la función MessageBox de user32.dll y, a continuación, se le pasa una cadena.
Ejemplo
Este ejemplo de código también está disponible en el fragmento de código de IntelliSense. En el selector de fragmentos de
código, se encuentra en Lenguaje Visual Basic. Para obtener más información, consulte
Cómo: Insertar fragmentos de código en el código (Visual Basic).
VB
' Defines the MessageBox function.
Public Class Win32
Declare Auto Function MessageBox Lib "user32.dll" ( _
ByVal hWnd As Integer, ByVal txt As String, _
ByVal caption As String, ByVal Type As Integer) _
As Integer
End Class

' Calls the MessageBox function.


Public Class DemoMessageBox
Public Shared Sub Main()
Win32.MessageBox(0, "Here's a MessageBox", "Platform Invoke Sample", 0)
End Sub
End Class

Compilar el código
Este ejemplo necesita:
Una referencia al espacio de nombres System.
Programación eficaz
Las condiciones siguientes pueden provocar una excepción:
El método no es estático, es abstracto o se ha definido previamente. El tipo principal es una interfaz o la longitud de
name o dllName es cero. (ArgumentException)
name o dllName es Nothing. (ArgumentNullException)
El tipo contenedor se ha creado previamente mediante CreateType. (InvalidOperationException)

Vea también
Tareas
Tutorial: Llamar a las API de Windows
Conceptos
Aproximación a la invocación de plataforma
Ejemplos de invocación de plataforma
Consumir funciones DLL no administradas
Definir un método con la emisión de la reflexión
Otros recursos
Interoperabilidad COM
Conceptos del lenguaje Visual Basic

Tutorial: Crear objetos COM con Visual Basic 2005


Cuando se crean nuevas aplicaciones o componentes, es mejor crear ensamblados de .NET Framework. No obstante, Visual
Basic 2005 facilita también la exposición de un componente de .NET Framework en COM, lo que le permite proporcionar
nuevos componentes a conjuntos de aplicaciones heredadas que requieren componentes COM. En este tutorial se muestra
cómo se utiliza Visual Basic para exponer los objetos de .NET Framework como objetos COM, tanto con la plantilla de clase
COM como sin ella.
El modo más sencillo de exponer un objeto COM es utilizar la plantilla de clase COM. Esta plantilla crea una clase nueva y, a
continuación, configura el proyecto para generar la clase y el nivel de interoperabilidad como un objeto COM y registra este
objeto en el sistema operativo.
Nota
Aunque es posible exponer una clase creada con Visual Basic como un objeto COM en el código no administrado que se va a
utilizar, en realidad, no se trata de un verdadero objeto COM y Visual Basic no lo puede utilizar. Para obtener más informació
n, vea Interoperabilidad COM en aplicaciones .NET Framework.

Nota
Los cuadros de diálogo y los comandos de menú que se ven pueden diferir de los descritos en la Ayuda, dependiendo de los
valores de configuración o de edición activos. Para cambiar la configuración, elija la opción Importar y exportar configura
ciones en el menú Herramientas. Para obtener más información, vea Valores de configuración de Visual Studio.

Para crear un objeto COM mediante la plantilla de clase COM


1. Abra un nuevo proyecto de aplicación para Windows en el menú Archivo; para ello, haga clic en Nuevo proyecto.
2. En el cuadro de diálogo Nuevo proyecto, situado bajo el campo Tipos de proyecto, compruebe que se ha
seleccionado Windows. Seleccione Biblioteca de clases en la lista Plantillas y, a continuación, haga clic en Aceptar.
Aparecerá el proyecto nuevo.
3. Seleccione Agregar nuevo elemento en el menú Proyecto. Se abrirá el cuadro de diálogo Agregar nuevo elemento.
4. Seleccione Clase COM en la lista Plantillas y, a continuación, haga clic en Agregar. Visual Basic agrega una nueva clase
y configura el nuevo proyecto para la interoperabilidad COM.
5. Agregue código a la clase COM, como propiedades, métodos y eventos.
6. Seleccione Generar ClassLibrary1 en el menú Generar. Visual Basic genera el ensamblado y registra el objeto COM en
el sistema operativo.
Crear objetos COM sin la plantilla de clase COM
También puede crear una clase COM manualmente en lugar de utilizar la plantilla de clase COM. Este procedimiento resulta
útil cuando se trabaja desde la línea de comandos o cuando se desea tener más control sobre la definición de los objetos COM.
Para configurar el proyecto para generar un objeto COM
1. Abra un nuevo proyecto de aplicación para Windows desde el menú Archivo; para ello, haga clic en Nuevo proyecto.
2. En el cuadro de diálogo Nuevo proyecto, situado bajo el campo Tipos de proyecto, compruebe que se ha
seleccionado Windows. Seleccione Biblioteca de clases en la lista Plantillas y, a continuación, haga clic en Aceptar.
Aparecerá el proyecto nuevo.
3. En el Explorador de soluciones, haga clic con el botón secundario del mouse en su proyecto y, a continuación,
seleccione Propiedades. Se mostrará el Diseñador de proyectos.
4. Haga clic en la ficha Compilar.
5. Active la casilla de verificación Registrar para interoperabilidad COM.
Para configurar el código de la clase para crear un objeto COM
1. En el Explorador de soluciones, haga doble clic en Class1.vb para mostrar el código que contiene.
2. Cambie el nombre de la clase a ComClass1.
3. Agregue a ComClass1 las constantes que se especifican a continuación. Estas constantes almacenarán las constantes de
identificador único global (GUID) que necesitan los objetos COM.
VB
Public Const ClassId As String = ""
Public Const InterfaceId As String = ""
Public Const EventsId As String = ""

4. Para obtener un identificador único global (GUID), abra Guidgen.exe para iniciar la utilidad Guidgen. Seleccione Formato
de Registro en la lista de formatos proporcionados por la aplicación Guidgen. Haga clic en el botón Nuevo GUID para
generar el GUID y, a continuación, haga clic en el botón Copiar para copiar el GUID al Portapapeles.
5. Reemplace la cadena vacía de ClassId con el GUID, y elimine las llaves de apertura y cierre. Por ejemplo, si el GUID
proporcionado por Guidgen es "{2C8B0AEE-02C9-486e-B809-C780A11530FE}", el código debería aparecer como se
muestra a continuación.
VB
Public Const ClassId As String = "2C8B0AEE-02C9-486e-B809-C780A11530FE"

6. Repita los pasos anteriores para las constantes InterfaceId y EventsId, como en el ejemplo siguiente.
VB
Public Const InterfaceId As String = "3D8B5BA4-FB8C-5ff8-8468-11BF6BD5CF91"
Public Const EventsId As String = "2B691787-6ED7-401e-90A4-B3B9C0360E31"

Nota
Asegúrese de que los GUID son nuevos y únicos; de lo contrario, el componente COM podría entrar en conflicto con otr
os componentes COM.

7. Agregue el atributo ComClass a ComClass1, especificando los GUID correspondientes al Id. de clase, al Id. de interfaz y a
los Id. de eventos, como en el siguiente ejemplo:
VB
<ComClass(ComClass1.ClassId, ComClass1.InterfaceId, ComClass1.EventsId)> _
Public Class ComClass1

8. Las clases COM deben tener un constructor Public Sub New() sin parámetros; de lo contrario, la clase no se registrará
correctamente. Agregue un constructor sin parámetros a la clase:
VB
Public Sub New()
MyBase.New()
End Sub

9. Agregue propiedades, métodos y eventos a la clase, y agregue la instrucción End Class al final. Seleccione Generar
solución en el menú Generar. Visual Basic genera el ensamblado y registra el objeto COM en el sistema operativo.
Nota
Los objetos COM que genere con Visual Basic 2005 no se pueden utilizar en otras aplicaciones de Visual Basic 2005 po
rque no son auténticos objetos COM. Si intenta agregar referencias a estos objetos COM se producirá un error. Para ob
tener información detallada, vea Interoperabilidad COM en aplicaciones .NET Framework.

Vea también
Tareas
Tutorial: Implementar la herencia mediante objetos COM
Solución de problemas de interoperabilidad
Referencia
ComClassAttribute (Clase)
#Region (Directiva)
Otros recursos
Interoperabilidad COM
Interoperabilidad COM en aplicaciones .NET Framework
Conceptos del lenguaje Visual Basic

Solución de problemas de interoperabilidad


En la interoperabilidad de COM y el código administrado de .NET Framework, es posible que se le presenten algunos de los
siguientes problemas comunes.
Cálculo de referencia de interoperabilidad
En ocasiones es posible que necesite utilizar tipos de datos que no forman parte de .NET Framework. Los ensamblados de
interoperabilidad controlan la mayor parte del trabajo para objetos COM, pero es posible que tenga que controlar los tipos de
datos utilizados cuando exponga a COM objetos administrados. Por ejemplo, las estructuras de las bibliotecas de clases deben
especificar el tipo no administrado BStr en las cadenas enviadas a los objetos COM creados con Visual Basic 6.0 y versiones
anteriores. En estos casos, puede utilizar el atributo MarshalAsAttribute para exponer los tipos administrados como tipos no
administrados.
Exportar cadenas de longitud fija a código no administrado
En Visual Basic 6.0 y versiones anteriores, las cadenas se exportan a objetos COM como secuencias de bytes sin un carácter de
terminación de tipo NULL. Por compatibilidad con otros lenguajes, Visual Basic 2005 incluye un carácter de terminación al
exportar cadenas. La mejor forma de solucionar esta incompatibilidad es exportar cadenas sin carácter de terminación como
matrices de tipo Byte o Char.
Exportar jerarquías de herencia
Las jerarquías de clases administradas desaparecen cuando las clases se exponen como objetos COM. Por ejemplo, si define
una clase base con un miembro y después hereda la clase base en una clase derivada expuesta como un objeto COM, los
clientes que utilizan la clase derivada en el objeto COM no podrán utilizar los miembros heredados. Los miembros de la clase
base sólo son accesibles desde objetos COM como instancias de una clase base, y sólo en el caso de que la clase base también
se cree como un objeto COM.
Métodos sobrecargados
Aunque se pueden crear métodos sobrecargados con Visual Basic, COM no los admite. Cuando una clase que contiene
métodos sobrecargados se expone como objeto COM, se generan nombres de método nuevos para los métodos
sobrecargados.
Suponga, por ejemplo, que una clase tiene dos sobrecargas del método Synch. Si la clase se expone como objeto COM, los
nombres de método nuevos generados podrían ser Synch y Synch_2.
El cambio de nombre puede producir dos problemas para los consumidores del objeto COM.
1. Es posible que los clientes no esperen los nombres de método generados.
2. Los nombres de método generados en la clase expuesta como objeto COM pueden cambiar al agregar nuevas
sobrecargas a la clase o a su clase base, lo que puede provocar problemas de versión.
Para resolver ambos problemas, asigne un nombre único a cada método, en lugar de utilizar la sobrecarga, cuando desarrolle
objetos que se van a exponer como objetos COM.
Uso de objetos COM mediante ensamblados de interoperabilidad
Los ensamblados de interoperabilidad se utilizan casi como si fueran equivalentes de código administrado a los objetos COM
que representan. Sin embargo, como son encapsuladores y no objetos COM reales, hay algunas diferencias entre el uso de
ensamblados de interoperabilidad y ensamblados estándar. Son diferencias en la exposición de clases y los tipos de datos para
parámetros y valores devueltos.
Clases expuestas como interfaces y como clases
A diferencia de las clases de los ensamblados estándar, las clases COM se exponen en ensamblados de interoperabilidad como
una interfaz y una clase que representa la clase COM. El nombre de la interfaz es idéntico al de la clase COM. El nombre de la
clase de interoperabilidad es igual al de la clase COM original, pero con la palabra "Class" anexada. Por ejemplo, suponga que
tiene un proyecto con una referencia a un ensamblado de interoperabilidad para un objeto COM. Si la clase COM se denomina
MyComClass, IntelliSense y el Examinador de objetos muestran una interfaz denominada MyComClass y una clase denominada
MyComClassClass.

Crear instancias de una clase de .NET Framework


Por lo general, una instancia de una clase de .NET Framework se crea mediante la instrucción New con un nombre de clase. La
representación de una clase COM mediante un ensamblado de interoperabilidad es el caso en el que se puede utilizar la
instrucción New con una interfaz. A menos que utilice la clase COM con una instrucción Inherits, puede utilizar la interfaz del
mismo modo que utilizaría una clase. En el código siguiente se muestra cómo se crea un objeto Command en un proyecto que
tiene una referencia al objeto COM de Microsoft ActiveX Data Objects 2.8 Library:
VB
Dim cmd As New ADODB.Command

Sin embargo, si utiliza la clase COM como base para una clase derivada deberá utilizar la clase de interoperabilidad que
representa la clase COM, como en las líneas siguientes:
VB
Class DerivedCommand
Inherits ADODB.CommandClass
End Class

Nota
Los ensamblados de interoperabilidad implementan implícitamente interfaces que representan clases COM. No debe intenta
r utilizar la instrucción Implements para implementar estas interfaces; si lo hace, se producirá un error.

Tipos de datos para parámetros y valores devueltos


A diferencia de los miembros de los ensamblados estándar, los miembros de los ensamblados de interoperabilidad pueden
tener tipos de datos distintos de los utilizados en la declaración original del objeto. Aunque los ensamblados de
interoperabilidad convierten implícitamente los tipos COM en tipos compatibles con Common Language Runtime, debe tener
en cuenta los tipos que utiliza en los dos lados para evitar errores en tiempo de ejecución. Por ejemplo, en los objetos COM
creados con Visual Basic 6.0 y versiones anteriores, los valores de tipo Integer adquieren el tipo de .NET Framework
equivalente, Short. Se recomienda utilizar el Examinador de objetos para examinar las características de los miembros
importados antes de utilizarlos.
Métodos COM de módulos
La mayoría de los objetos COM se utilizan creando una instancia de una clase COM mediante la palabra clave New y, a
continuación, llamando a métodos del objeto. Existe una excepción a esta regla relacionada con los objetos COM que contienen
clases COM AppObj o GlobalMultiUse. Estas clases son similares a los métodos de nivel de módulo de las clases de Visual
Basic 2005. Visual Basic 6.0 y versiones anteriores crea implícitamente instancias de estos objetos la primera vez que se llama
a uno de sus métodos. Por ejemplo, en Visual Basic 6.0 es posible agregar una referencia a Microsoft DAO 3.6 Object Library y
llamar al método DBEngine sin crear primero una instancia:

Dim db As DAO.Database
' Open the database.
Set db = DBEngine.OpenDatabase("C:\nwind.mdb")
' Use the database object.

Visual Basic 2005 requiere que siempre se creen instancias de los objetos COM antes de utilizar sus métodos. Para utilizar
estos métodos en Visual Basic 2005, declare una variable de la clase que desee y utilice la nueva palabra clave para asignar el
objeto a la variable de objeto. Puede utilizar la palabra clave Shared para asegurarse de que sólo se crea una instancia de la
clase.
VB
' Class level variable.
Shared DBEngine As New DAO.DBEngine

Sub DAOOpenRecordset()
Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim fld As DAO.Field
' Open the database.
db = DBEngine.OpenDatabase("C:\nwind.mdb")
' Open the Recordset.
rst = db.OpenRecordset( _
"SELECT * FROM Customers WHERE Region = 'WA'", _
DAO.RecordsetTypeEnum.dbOpenForwardOnly, _
DAO.RecordsetOptionEnum.dbReadOnly)
' Print the values for the fields in the debug window.
For Each fld In rst.Fields
Debug.WriteLine(fld.Value.ToString & ";")
Next
Debug.WriteLine("")
' Close the Recordset.
rst.Close()
End Sub

Errores no controlados en controladores de errores


Un problema habitual de interoperabilidad implica a los errores de controladores de eventos que controlan eventos
producidos por objetos COM. Estos errores se omiten a menos que se compruebe específicamente la existencia de errores
mediante instrucciones On Error o Try...Catch...Finally. Por ejemplo, el ejemplo siguiente procede de un proyecto de Visual
Basic 2005 que tiene una referencia al objeto COM de Microsoft ActiveX Data Objects 2.8 Library.
VB
' To use this example, add a reference to the
' Microsoft ActiveX Data Objects 2.8 Library
' from the COM tab of the project references page.
Dim WithEvents cn As New ADODB.Connection
Sub ADODBConnect()
cn.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\NWIND.MDB"
cn.Open()
MsgBox(cn.ConnectionString)
End Sub

Private Sub Form1_Load(ByVal sender As System.Object, _


ByVal e As System.EventArgs) Handles MyBase.Load

ADODBConnect()
End Sub

Private Sub cn_ConnectComplete( _


ByVal pError As ADODB.Error, _
ByRef adStatus As ADODB.EventStatusEnum, _
ByVal pConnection As ADODB.Connection) _
Handles cn.ConnectComplete

' This is the event handler for the cn_ConnectComplete event raised
' by the ADODB.Connection object when a database is opened.
Dim x As Integer = 6
Dim y As Integer = 0
Try
x = CInt(x / y) ' Attempt to divide by zero.
' This procedure would fail silently without exception handling.
Catch ex As Exception
MsgBox("There was an error: " & ex.Message)
End Try
End Sub

Este ejemplo produce un error, según lo esperado. Sin embargo, si intenta ejecutar el mismo ejemplo sin el bloque
Try...Catch...Finally, el error se omitirá como si hubiera utilizado la instrucción OnError Resume Next. Sin control de errores,
la división por cero produce un error pero no lo comunica. Dado que tales errores nunca producen errores de excepción no
controlados, es vital utilizar algún tipo de control de excepciones en los controladores de eventos que controlan eventos de
objetos COM.
Errores de interoperabilidad COM
Sin control de errores, las llamadas de interoperabilidad suelen generar errores que proporcionan poca información. Siempre
que sea posible, utilice control de errores estructurado para proporcionar más información sobre los errores en el momento
en que se produzcan. Esto puede resultar especialmente útil durante la depuración de aplicaciones. Por ejemplo:
VB
Try
' Place call to COM object here.
Catch ex As Exception
' Display information about the failed call.
End Try

Puede examinar el contenido del objeto de excepción para averiguar información tal como la descripción del error, HRESULT y
el origen de los errores COM.
Cuestiones sobre controles ActiveX
La mayor parte de los controles ActiveX que funcionan con Visual Basic 6.0 funcionan con Visual Basic 2005 sin problemas. Las
principales excepciones son los controles contenedores, o controles que contienen visualmente a otros controles. Estos son
algunos ejemplos de controles más antiguos que no funcionan correctamente con Visual Studio:
Control Microsoft Forms 2.0 Frame
Control Arriba-Abajo, también conocido como control giratorio
Control Tab Sheridan
Sólo hay unas pocas soluciones para los problemas de controles ActiveX incompatibles. Es posible migrar controles existentes
a Visual Studio si se dispone del código fuente original. Si no es así, puede consultar a los proveedores de software para ver si
disponen de versiones actualizadas de los controles compatibles con .NET para sustituir los controles ActiveX incompatibles.
Pasar propiedades ReadOnly de controles ByRef
Visual Basic 2005 produce a veces errores COM como "Error 0x800A017F CTL_E_SETNOTSUPPORTED" cuando se transfieren
propiedades ReadOnly de algunos controles ActiveX antiguos como parámetros ByRef a otros procedimientos. Las llamadas
de procedimiento similares desde Visual Basic 6.0 no producen ningún error; los parámetros se tratan como si se hubieran
pasado por valor. El mensaje de error que se ve en Visual Basic 2005 es el objeto COM que informa de que se está intentando
cambiar una propiedad que no tiene un procedimiento Set de propiedad.
Si tiene acceso al procedimiento al que se está llamando, puede utiliza la palabra clave ByVal para declarar parámetros que
acepten propiedades ReadOnly y, así, evitar el error. Por ejemplo:
VB
Sub ProcessParams(ByVal c As Object)
'Use the arguments here.
End Sub

Si no tiene acceso al código fuente de la propiedad a la que se está llamando puede forzar que se pase la propiedad por valor;
para ello, agregue un conjunto adicional de llaves alrededor del procedimiento que hace la llamada. Por ejemplo, en un
proyecto que tenga una referencia al objeto COM de Microsoft ActiveX Data Objects 2.8 Library, se puede utilizar:
VB
Sub PassByVal(ByVal pError As ADODB.Error)
' The extra set of parentheses around the arguments
' forces them to be passed by value.
ProcessParams((pError.Description))
End Sub

Implementar ensamblados que expongan interoperabilidad


Implementar ensamblados que expongan interfaces COM supone algunas dificultades. Por ejemplo, un posible problema se
produciría si aplicaciones independientes hacen referencia al mismo ensamblado COM. Es una situación normal cuando se
instala una nueva versión de un ensamblado habiendo otra aplicación que utiliza aún la versión antigua de ese ensamblado. Al
desinstalar cualquier ensamblado que comparta un archivo DLL, impedirá que se disponga de otros ensamblados sin desearlo.
Para evitarlo, debe instalar ensamblados compartidos en la caché de ensamblados global (GAC) y que el componente utilice un
MergeModule. Si no puede instalar la aplicación en la GAC, deberá instalarla en CommonFilesFolder en un subdirectorio
específico para esa versión.
Los ensamblados no compartidos deberán instalarse en el mismo nivel en el directorio de la aplicación que hace la llamada.
Vea también
Tareas
Tutorial: Implementar la herencia mediante objetos COM
Referencia
Importador de la biblioteca de tipos (TlbImp.exe)
Exportador de la biblioteca de tipos (Tlbexp.exe)
Inherits (Instrucción)
MarshalAsAttribute
Conceptos
Cambios en los tipos de datos para usuarios de Visual Basic 6.0
Introducción a los módulos de combinación
Proyectos de módulo de combinación
Caché de ensamblados global
Otros recursos
Interoperabilidad COM
Cálculo de referencia de interoperabilidad
Conceptos del lenguaje Visual Basic

Interoperabilidad COM en aplicaciones .NET Framework


Si desea utilizar objetos COM y objetos de .NET Framework en la misma aplicación, debe tener en cuenta las diferencias que
existen en el modo en que los objetos residen en la memoria. Un objeto de .NET Framework reside en la memoria
administrada, es decir, en la memoria que controla Common Language Runtime, y el motor en tiempo de ejecución puede
desplazarlo según sea necesario. Un objeto COM reside en la memoria no administrada y no es previsible que se desplace a
otra ubicación de la memoria. Visual Studio y .NET Framework proporcionan herramientas para controlar la interacción de
estos componentes administrados y no administrados. Para obtener más información sobre el código administrado, vea
Common Language Runtime.
Además de utilizar objetos COM en aplicaciones .NET, es posible que también desee utilizar Visual Basic para hacer que los
objetos sean accesibles a partir de código no administrado a través de COM.
Los vínculos de esta página proporcionan información detallada sobre las interacciones entre los objetos COM y los objetos de
.NET Framework.
Secciones relacionadas
Interoperabilidad COM
Proporciona vínculos a temas sobre la interoperabilidad COM en Visual Basic, incluidos los objetos COM, los controles
ActiveX, las DLL Win32, los objetos administrados y la herencia de los objetos COM.
Error de contenedor de interoperabilidad COM
Explica las consecuencias y opciones en caso de que el sistema del proyecto no pueda crear un contenedor de
interoperabilidad COM para un componente concreto.
Interoperar con código no administrado
Describe brevemente algunos de los problemas de la interacción entre el código administrado y no administrado, y
proporciona vínculos a más información.
Contenedores COM
Describe los contenedores a los que se llama en tiempo de ejecución y que permiten que el código administrado llame a
métodos COM, y los contenedores a los que llama COM, que permiten que los clientes COM llamen a métodos de objetos
.NET.
Interoperabilidad COM avanzada
Proporciona vínculos a temas en los que se describe la interoperabilidad COM en lo que respecta a contenedores,
excepciones, herencia, subprocesos, eventos, conversiones y cálculos de referencias.
Automatizar aplicaciones con el modelo de objetos de Office
Proporciona información sobre cómo utilizar Microsoft Office y Visual Studio .NET como parte de una aplicación
empresarial.
Importador de la biblioteca de tipos (TlbImp.exe)
Describe la herramienta que se puede utilizar para convertir las definiciones de tipos que se encuentran en una biblioteca de
tipos COM en definiciones equivalentes en un ensamblado de Common Language Runtime.
Conceptos del lenguaje Visual Basic

Subprocesamiento múltiple en Visual Basic


Las aplicaciones de Visual Basic pueden realizar varias tareas a la vez mediante el subprocesamiento múltiple (o
subprocesamiento libre), un proceso en el cual las tareas individuales se ejecutan en subprocesos independientes. El
subprocesamiento múltiple mejora el rendimiento y la capacidad de respuesta de las aplicaciones.
En esta sección
Aplicaciones multiproceso
Se describe cómo crear y utilizar subprocesos.
Estados de subprocesos
Se explica cómo determinar y cambiar el estado de un subproceso.
Parámetros y valores devueltos para procedimientos multiproceso
Se describe cómo pasar y devolver parámetros con aplicaciones multiproceso.
Subprocesamiento múltiple con formularios y controles
Se describen consideraciones especiales para trabajar con subprocesamiento múltiple, formularios y controles.
Tutorial: Subprocesamiento múltiple
Muestra cómo crear una aplicación sencilla de subprocesamiento múltiple.
Secciones relacionadas
Subprocesamiento múltiple avanzado con Visual Basic
Muestra temas que describen cómo administrar los subprocesos en aplicaciones multiproceso
Subprocesamiento múltiple en componentes
Proporciona vínculos a temas que describen cómo utilizar el subprocesamiento múltiple en la programación de
componentes.
Tutorial: Crear un componente sencillo con múltiples procesos en Visual Basic
Muestra cómo crear componentes multiproceso.
Conceptos del lenguaje Visual Basic

Aplicaciones multiproceso
Con Visual Basic, puede crear aplicaciones que realicen varias tareas de forma simultánea. Las tareas con la posibilidad de
mantener otras tareas pueden ejecutarse en subprocesos separados, un proceso que se conoce como subprocesamiento
múltiple o subprocesamiento libre.
Las aplicaciones que utilizan el subprocesamiento múltiple son más receptivas a las entradas del usuario, porque la interfaz de
usuario permanece activa mientras se ejecutan tareas con un consumo de procesador elevado en subprocesos separados. El
subprocesamiento múltiple también es útil cuando se crean aplicaciones escalables, porque se pueden agregar subprocesos a
medida que aumenta la carga de trabajo.
Utilizar el componente BackgroundWorker
La manera más confiable de crear una aplicación multiproceso consiste en utilizar el componente BackgroundWorker. Esta
clase administra un subproceso independiente dedicado a procesar el método que se especifique. Para obtener un ejemplo,
vea Tutorial: Subprocesamiento múltiple.
Para iniciar una operación en segundo plano, cree un componente BackgroundWorker que escuche los eventos que indican
el progreso de la operación y señale la finalización de la operación. Puede crear el objeto BackgroundWorker mediante
programación o puede arrastrarlo al formulario desde la ficha Componentes del Cuadro de herramientas. Si crea
BackgroundWorker en el Diseñador de formularios, aparece en la Bandeja de componentes y sus propiedades se
muestran en la ventana Propiedades.
Configuración para una operación en segundo plano
Para preparar una operación en segundo plano, agregue un controlador de eventos al evento DoWork. Llame a la operación
que consume tiempo en este controlador de eventos.
Para iniciar la operación, llame a RunWorkerAsync. Para recibir notificaciones de actualizaciones del progreso, controle el
evento ProgressChanged. Para recibir una notificación cuando finalice la operación, controle el evento RunWorkerCompleted.
Los métodos que controlan los eventos ProgressChanged y RunWorkerCompleted pueden tener acceso a la interfaz de
usuario de la aplicación, ya que se inician en el subproceso que ha llamado el método RunWorkerAsync. Sin embargo, el
controlador de eventos DoWork no puede manipular ningún objeto de la interfaz de usuario porque se ejecuta en el
subproceso en segundo plano.
Crear y usar subprocesos
Si necesita más control sobre el comportamiento de los subprocesos de la aplicación, puede administrar los subprocesos
personalmente. Sin embargo, debe ser consciente de que escribir aplicaciones multiproceso correctas puede ser difícil: la
aplicación puede dejar de responder o experimentar errores transitorios debido a las condiciones de anticipación. Para obtener
más información, vea Componentes seguros para subprocesos.
En Visual Basic se puede crear un subproceso mediante la declaración de una variable del tipo Thread y la llamada al
constructor con la instrucción AddressOf y el nombre del procedimiento o método que se desea ejecutar en el nuevo
subproceso. El código siguiente proporciona un ejemplo:
VB
Dim TestThread As New System.Threading.Thread(AddressOf TestSub)

Iniciar y detener subprocesos


Para iniciar la ejecución de un nuevo subproceso, utilice el método Start, como en el código siguiente:
VB
TestThread.Start()

Para detener la ejecución de un subproceso, utilice el método Abort, como en el código siguiente:
VB
TestThread.Abort()
Además de iniciar y detener subprocesos, también se puede realizar pausas en los subprocesos llamando a los métodos Sleep
o Suspend, reanudar un subproceso suspendido con el método Resume y destruir un subproceso mediante el método Abort,
como en el código siguiente:
VB
TestThread.Sleep(1000)
TestThread.Abort()

Métodos de subproceso
La tabla siguiente muestra algunos de los métodos que se pueden utilizar para controlar subprocesos individuales.
Mét Acción
odo
Start Inicia la ejecución de un subproceso.

Slee Hace una pausa en la ejecución de un subproceso durante un período de tiempo determinado.
p

Susp Hace una pausa en la ejecución de un subproceso cuando alcanza un punto seguro.
end

Abor Detiene un subproceso cuando alcanza un punto seguro.


t

Resu Reinicia un subproceso suspendido


me

Join Hace que el subproceso actual espere a que termine otro subproceso. Si se utiliza con un valor de tiempo de espera, este
método devuelve True si el subproceso termina en el tiempo asignado.
Puntos seguros
La mayoría de estos métodos son autoexplicativos, pero es posible que el concepto de puntos seguros resulte nuevo. Los
puntos seguros son puntos del código donde Common Language Runtime puede realizar, de forma segura, la recolección de
elementos no utilizados (el proceso de liberar variables no utilizadas y reclamar memoria) automáticamente. Cuando se llama
a los métodos Abort o Suspend de un subproceso, Common Language Runtime analiza el código y determina la ubicación de
un lugar adecuado para que el subproceso detenga su ejecución.
Propiedades de subprocesos
Los subprocesos contienen también varias propiedades útiles, como se muestra en la tabla siguiente:
Propiedad Valor
IsAlive Contiene el valor True si un subproceso está activo.

IsBackground Obtiene o establece un valor de tipo Boolean que indica si un subproceso está o debe estar en segundo plano.
Los subprocesos de segundo plano son como los de primer plano, pero los de segundo plano no impiden que
se termine un proceso. Una vez terminados todos los subprocesos de primer plano pertenecientes a un proce
so, Common Language Runtime termina el proceso mediante una llamada al método Abort de los subproces
os de segundo plano que continúan activos.

Name Obtiene o establece el nombre de un subproceso. Suelen utilizarse para descubrir subprocesos individuales d
urante la depuración.

Priority Obtiene o establece un valor que utiliza el sistema operativo para asignar prioridades en la programación de s
ubprocesos.
ApartmentState Obtiene o establece el modelo de subprocesos utilizado para un subproceso en particular. Los modelos de su
bprocesos son importantes cuando un subproceso llama a código no administrado.

ThreadState Contiene un valor que describe el estado o estados de un subproceso.

Vea Estados de subprocesos para obtener más información acerca de los métodos y los estados de los subprocesos.
Prioridades de los subprocesos
Cada subproceso tiene una propiedad de prioridad, que determina qué porción de tiempo del procesador tarda en ejecutarse.
El sistema operativo asigna mayores porciones de tiempo a los subprocesos de alta prioridad y menores a los subprocesos de
baja prioridad. Los nuevos subprocesos se crean con el valor de Normal, pero puede cambiar la propiedad Priority a cualquier
valor de la enumeración ThreadPriority.
Vea ThreadPriority para obtener una descripción detallada de las diversas prioridades de los subprocesos.
Subprocesos de primer y segundo plano
Un subproceso de primer plano se ejecuta de forma indefinida, mientras que un subproceso de fondo finaliza una vez que el
último subproceso de primer plano se ha detenido. Puede utilizar la propiedad IsBackground para determinar o cambiar el
estado de segundo plano de un subproceso.
Vea también
Conceptos
Estados de subprocesos
Parámetros y valores devueltos para procedimientos multiproceso
Sincronización de subprocesos
Subprocesamiento múltiple con formularios y controles
Otros recursos
Subprocesamiento múltiple en componentes
Conceptos del lenguaje Visual Basic

Estados de subprocesos
La propiedad ThreadState proporciona información acerca del estado de un subproceso. Ya que los subprocesos pueden estar
en más de un estado en un momento determinado, el valor almacenado en ThreadState puede ser una combinación de los
valores de la enumeración ThreadState. Por ejemplo, si un subproceso está bloqueado en una llamada a Wait y otro
subproceso llama al método Abort en ese mismo subproceso, el subproceso estará en el estado WaitSleepJoin y en el estado
AbortRequested al mismo tiempo.
Cambiar el estado de los subprocesos
Una vez se ha iniciado un subproceso, puede llamar a sus métodos para modificar su estado. Puede hacer que, por ejemplo, un
subproceso se detenga un número fijo de milisegundos llamando a System.Threading.Thread.Sleep(System.Int32). El método
Sleep toma como parámetro un tiempo de espera, que es el número de milisegundos que el subproceso permanece
bloqueado.
Si se llama a Sleep con el argumento Infinite, el subproceso se detiene hasta que lo interrumpe otro subproceso que llama a
Interrupt. El método Interrupt reactiva el subproceso de destino de cualquier estado de espera en el que pueda estar y genera
una excepción.
También puede pausar un subproceso si llama a Suspend. Cuando un subproceso llama a Suspend en sí mismo, la llamada se
bloquea hasta que lo reanuda otro subproceso con una llamada a Resume. Cuando un subproceso llama a Suspend en otro
subproceso, la llamada no es de bloqueo y hace que el otro subproceso se pause. Llamar a Resume interrumpe el estado de
suspensión de otro subproceso y provoca que se reanude la ejecución. A diferencia de Sleep, Suspend no detiene
inmediatamente un subproceso; el subproceso suspendido no realiza una pausa hasta que Common Language Runtime
determine que se ha llegado a un punto seguro.
El método Abort detiene un subproceso en ejecución generando una excepción ThreadAbortException que provoca la
finalización del subproceso.
Vea Thread para obtener información detallada sobre estos métodos.
Vea también
Referencia
SyncLock (Instrucción)
System.Threading
Conceptos
Aplicaciones multiproceso
Sincronización de subprocesos
Parámetros y valores devueltos para procedimientos multiproceso
Subprocesamiento múltiple con formularios y controles
Los delegados y el operador AddressOf
Otros recursos
Subprocesamiento múltiple en componentes
Conceptos del lenguaje Visual Basic

Parámetros y valores devueltos para procedimientos


multiproceso
Suministrar y devolver valores en aplicaciones multiproceso es complicado, porque se debe pasar una referencia a un
procedimiento que no tome ningún argumento ni devuelva ningún valor al constructor de la clase de subproceso. Las
secciones siguientes muestran formas sencillas de suministrar parámetros y devolver valores de procedimientos en
subprocesos separados.
Suministrar parámetros para procedimientos multiproceso
La mejor forma de suministrar parámetros para una llamada a un método multiproceso es ajustar el método de destino en
una clase y definir campos para dicha clase que servirán como parámetros para el nuevo subproceso. La ventaja de este
planteamiento es que se puede crear una nueva instancia de la clase, con sus propios parámetros, cada vez que se desee iniciar
un nuevo subproceso. Por ejemplo, suponga que tiene una función que calcula el área de un triángulo, como en el código
siguiente:
VB
Function CalcArea(ByVal Base As Double, ByVal Height As Double) As Double
CalcArea = 0.5 * Base * Height
End Function

Se puede escribir una clase que encapsule la función CalcArea y cree campos para almacenar parámetros de entrada de la
forma indicada a continuación:
VB
Class AreaClass
Public Base As Double
Public Height As Double
Public Area As Double
Sub CalcArea()
Area = 0.5 * Base * Height
MsgBox("The area is: " & Area)
End Sub
End Class

Para utilizar AreaClass, puede crear un objeto AreaClass y establecer las propiedades Base y Height como se muestra en el
código siguiente:
VB
Protected Sub TestArea()
Dim AreaObject As New AreaClass
Dim Thread As New System.Threading.Thread _
(AddressOf AreaObject.CalcArea)
AreaObject.Base = 30
AreaObject.Height = 40
Thread.Start()
End Sub

Tenga en cuenta que el procedimiento TestArea no comprueba el valor del campo Area después de llamar al método the
CalcArea. Como the CalcArea se ejecuta en un subproceso independiente, no se garantiza que se establezca el valor del campo
Area si se comprueba inmediatamente después de llamar a Thread.Start. La sección siguiente explica una mejor forma de
devolver valores de procedimientos multiproceso.
Devolver valores de procedimientos multiproceso
Devolver valores de procedimientos multiproceso que se ejecutan en subprocesos separados es complicado por el hecho de
que los procedimientos no pueden ser funciones y no pueden utilizar argumentos ByRef. La forma más sencilla de devolver
valores consiste en utilizar el componente BackgroundWorker para administrar los subprocesos, generar un evento cuando
finalice la tarea y procesar los resultados con un controlador de eventos.
El ejemplo siguiente devuelve un valor mediante la generación de un evento desde un procedimiento que se ejecuta en un
subproceso separado:
VB
Private Class AreaClass2
Public Base As Double
Public Height As Double
Function CalcArea() As Double
' Calculate the area of a triangle.
Return 0.5 * Base * Height
End Function
End Class
Private WithEvents BackgroundWorker1 As New System.ComponentModel.BackgroundWorker

Private Sub TestArea2()


Dim AreaObject2 As New AreaClass2
AreaObject2.Base = 30
AreaObject2.Height = 40
' Start the asynchronous operation.
BackgroundWorker1.RunWorkerAsync(AreaObject2)
End Sub

' This method runs on the background thread when it starts.


Private Sub BackgroundWorker1_DoWork(ByVal sender As Object, _
ByVal e As System.ComponentModel.DoWorkEventArgs) _
Handles BackgroundWorker1.DoWork
Dim AreaObject2 As AreaClass2 = CType(e.Argument, AreaClass2)
' Return the value through the Result property.
e.Result = AreaObject2.CalcArea()
End Sub

' This method runs on the main thread when the background thread finishes.
Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As Object, _
ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) _
Handles BackgroundWorker1.RunWorkerCompleted

' Access the result through the Result property.


Dim Area As Double = CDbl(e.Result)
MsgBox("The area is: " & Area)
End Sub

Se pueden proporcionar parámetros y valores devueltos a subprocesos de grupos de subprocesos, mediante la variable
opcional de objeto de estado ByVal del método QueueUserWorkItem. Los subprocesos de temporizador de subproceso
admiten también un objeto de estado con este propósito. Para obtener información sobre la agrupación de subprocesos y los
temporizadores de subprocesos, vea Agrupación de subprocesos y Temporizadores de subprocesos.
Vea también
Conceptos
Estados de subprocesos
Agrupación de subprocesos
Sincronización de subprocesos
Eventos y controladores de eventos
Aplicaciones multiproceso
Subprocesamiento múltiple con formularios y controles
Los delegados y el operador AddressOf
Otros recursos
Subprocesamiento múltiple en componentes
Conceptos del lenguaje Visual Basic

Subprocesamiento múltiple con formularios y controles


Aunque el subprocesamiento múltiple se adapta mejor a los métodos de clase y procedimientos en ejecución, también puede
utilizarlo con formularios y controles. Si lo hace, tenga en cuenta los puntos siguientes:
Siempre que sea posible, ejecute los métodos de un control únicamente en el subproceso con el cual haya sido creado. Si
tiene que llamar a un método de un control desde otro subproceso, debe utilizar Invoke para llamar al método.
No utilice la instrucción SyncLock para bloquear subprocesos que manipulen controles o formularios. Puesto que los
métodos de los controles y los formularios algunas veces devuelven la llamada a un procedimiento que realizó la
llamada, puede que sin darse cuenta acabe creando un interbloqueo: una situación en la cual dos subprocesos esperan
cada uno a que el otro libere el bloqueo, provocando que se detenga la aplicación.
Vea también
Referencia
Invoke
InvokeRequired
Conceptos
Estados de subprocesos
Parámetros y valores devueltos para procedimientos multiproceso
Aplicaciones multiproceso
Otros recursos
Subprocesamiento múltiple en componentes
Conceptos del lenguaje Visual Basic

Tutorial: Subprocesamiento múltiple


En este tutorial se muestra cómo crear aplicaciones multiproceso que buscan en archivos de texto las apariciones de palabras.
Explica cómo:
Definir una clase con un método al que puede llamar el componente BackgroundWorker.
Controlar eventos iniciados por el componente BackgroundWorker.
Iniciar un componente BackgroundWorker para ejecutar un método.
Implementar un botón Cancel que detiene el componente BackgroundWorker.

Para generar el ejemplo de código para este tema


1. Abra un nuevo proyecto Visual Basic de aplicación para Windows y cree un formulario con el nombre Form1.
2. Agregue dos botones y cuatro cuadros de texto a Form1.
3. Dé nombre a los objetos como se muestra en la tabla siguiente.
Objeto Propiedad Valor
Primer botón Name, Text Start, Start

Segundo botón Name, Text Cancel, Cancel

Primer cuadro de texto Name, Text SourceFile, ""

Segundo cuadro de texto Name, Text CompareString, ""

Tercer cuadro de texto Name, Text WordsCounted, "0"

Cuarto cuadro de texto Name, Text LinesCounted, "0"

4. Agregue una etiqueta a cada cuadro de texto. Establezca la propiedad Text de cada etiqueta como se muestra en la tabla
siguiente.
Objeto Propiedad Valor
Primera etiqueta Text Source File

Segunda etiqueta Text Compare String

Tercera etiqueta Text Matching Words

Cuarta etiqueta Text Lines Counted

5. Agregue a su formulario un componente BackgroundWorker desde la sección Componentes del Cuadro de


herramientas. Aparecerá en la bandeja de componentes del formulario.
6. Establezca las siguientes propiedades para el objeto BackgroundWorker1.
Propiedad Valor
WorkerReportsProgress True

WorkerSupportsCancellation True
7.
Para definir el método que se ejecutará en un subproceso aparte
1. En el menú Proyecto, elija Agregar clase para agregar una clase al proyecto. Se abrirá el cuadro de diálogo Agregar
nuevo elemento.
2. En la ventana de plantillas, seleccione Clase y escriba Words.vb en el campo de nombre.
3. Haga clic en Agregar. Se muestra la clase Words.
4. Agregue una instrucción Option Compare al principio de la clase Words, encima de la instrucción Class:
VB
Option Compare Text ' Case insensitive search.
' Use Option Compare Binary for case sensitive search.

5. Agregue el código siguiente a la clase Words:


VB
Public Class Words
' Object to store the current state, for passing to the caller.
Public Class CurrentState
Public LinesCounted As Integer
Public WordsMatched As Integer
End Class

Public SourceFile As String


Public CompareString As String
Private WordCount As Integer = 0
Private LinesCounted As Integer = 0

Public Sub CountWords( _


ByVal worker As System.ComponentModel.BackgroundWorker, _
ByVal e As System.ComponentModel.DoWorkEventArgs _
)
' Initialize the variables.
Dim mystream As System.IO.StreamReader = Nothing
Dim line As String = ""

If CompareString Is Nothing Or _
CompareString = System.String.Empty Then
Throw New Exception("CompareString not specified.")
End If

Try
' Open a new stream.
mystream = My.Computer.FileSystem.OpenTextFileReader(SourceFile)
' Do until the stream returns Nothing at end of file.
Do Until line Is Nothing
If worker.CancellationPending Then
e.Cancel = True
Exit Do
Else
line = mystream.ReadLine
WordCount += CountInString(line, CompareString)
LinesCounted += 1 ' Increment line count.

' Raise an event so the form can monitor progress.


Dim state As New CurrentState
state.LinesCounted = LinesCounted
state.WordsMatched = WordCount
worker.ReportProgress(0, state)
End If
Loop
Finally
If mystream IsNot Nothing Then
' Close the file.
mystream.Close()
End If
End Try
End Sub

Private Function CountInString( _


ByVal SourceString As String, _
ByVal CompareString As String _
) As Integer
' This function counts the number of times
' a word is found in a line.
If SourceString Is Nothing Then
Return 0
End If

Dim regex As New System.Text.RegularExpressions.Regex( _


System.Text.RegularExpressions.Regex.Escape(CompareString))
Dim matches As System.Text.RegularExpressions.MatchCollection
matches = regex.Matches(SourceString)
Return matches.Count
End Function
End Class

Para tratar eventos desde el subproceso


Agregue los controladores de eventos siguientes a su formulario principal.
VB
Private Sub BackgroundWorker1_RunWorkerCompleted( _
ByVal sender As Object, _
ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) _
Handles BackgroundWorker1.RunWorkerCompleted

' This event handler is called when the background thread finishes.
' This method runs on the main thread.

If e.Error IsNot Nothing Then


MsgBox("Error: " & e.Error.Message)
ElseIf e.Cancelled Then
MsgBox("Word counting canceled.")
Else
MsgBox("Finished counting words.")
End If
End Sub

Private Sub BackgroundWorker1_ProgressChanged( _


ByVal sender As Object, _
ByVal e As System.ComponentModel.ProgressChangedEventArgs) _
Handles BackgroundWorker1.ProgressChanged
' This event handler is called after the background thread
' reads a line from the source file.
' This method runs on the main thread.

Dim state As Words.CurrentState = _


CType(e.UserState, Words.CurrentState)
Me.LinesCounted.Text = state.LinesCounted.ToString
Me.WordsCounted.Text = state.WordsMatched.ToString
End Sub

Para iniciar y llamar a un nuevo subproceso que ejecuta el método WordCount


1. Agregue a su programa el procedimiento siguiente:
VB
Private Sub BackgroundWorker1_DoWork( _
ByVal sender As Object, _
ByVal e As System.ComponentModel.DoWorkEventArgs) _
Handles BackgroundWorker1.DoWork

' This event handler is where the actual work is done.


' This method runs on the background thread.

' Get the BackgroundWorker object that raised this event.


Dim worker As System.ComponentModel.BackgroundWorker
worker = CType(sender, System.ComponentModel.BackgroundWorker)

' Get the Works object and call the main method.
Dim WC As Words = CType(e.Argument, Words)
WC.CountWords(worker, e)
End Sub

Sub StartThread()
' This method runs on the main thread.

Me.WordsCounted.Text = "0"

' Initialize the object that the background worker calls.


Dim WC As New Words
WC.CompareString = Me.CompareString.Text
WC.SourceFile = Me.SourceFile.Text

' Start the asynchronous operation.


BackgroundWorker1.RunWorkerAsync(WC)
End Sub

2. Llame al método StartThread desde el botón Start del formulario:


VB
Private Sub Start_Click( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles Start.Click

StartThread()
End Sub

Para implementar el botón Cancel que detiene el subproceso


Llame al procedimiento StopThread desde el controlador de evento Click para el botón Cancel.
VB
Private Sub Cancel_Click( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles Cancel.Click

' Cancel the asynchronous operation.


Me.BackgroundWorker1.CancelAsync()
End Sub

Pruebas
Ahora puede probar la aplicación para asegurarse de que funciona correctamente.
Para probar la aplicación
1. Presione F5 para ejecutar la aplicación.
2. Cuando se muestre el formulario, escriba la ruta de acceso al archivo que desea probar en el cuadro sourceFile. Por
ejemplo, suponiendo que el nombre del archivo de prueba es Prueba.txt, escriba C:\Prueba.txt.
3. En el segundo cuadro de texto, escriba una palabra o frase para que la aplicación la busque en el archivo de texto.
4. Haga clic en el botón Start. El botón LinesCounted empezará a incrementar inmediatamente. La aplicación mostrará el
mensaje "Finished Counting" cuando termine.
Para comprobar el botón Cancel
1. Presione F5 para iniciar la aplicación y escriba el nombre de archivo y la palabra de búsqueda como se describe en el
procedimiento anterior. Asegúrese de que el archivo que elige es lo suficientemente grande para que le dé tiempo a
cancelar el procedimiento antes de que termine.
2. Haga clic en el botón Start para iniciar la aplicación.
3. Haga clic en el botón Cancel. La aplicación parará de contar inmediatamente.
Pasos siguientes
Esta aplicación contiene algunos ejemplos de control básico de errores. Detecta las cadenas de búsqueda en blanco. Puede
ampliar este programa tratando otros errores, como la superación del número máximo de palabras o líneas que se pueden
contabilizar.
Vea también
Tareas
Tutorial: Crear un componente sencillo con múltiples procesos en Visual Basic
Otros recursos
Subprocesamiento múltiple en Visual Basic
Referencia del lenguaje Visual Basic

Referencia (Visual Basic)


En esta sección, se proporcionan vínculos a información de referencia sobre distintos aspectos de programación en Visual
Basic.
En esta sección
Referencia de Visual Basic
Proporciona información de referencia sobre distintos aspectos del lenguaje Visual Basic.
Herramientas de línea de comandos de Visual Basic
Trata sobre el compilador de línea de comandos de Visual Basic, las opciones del compilador y la herramienta de
actualización de palabras clave.
Referencia de actualización para Visual Basic
Proporciona vínculos a información sobre cómo actualizar sus aplicaciones desde versiones anteriores de Visual Basic a la
versión actual.
Información de referencia de .NET Framework
Proporciona vínculos a información sobre cómo trabajar con la biblioteca de clases de .NET Framework.
Especificación del lenguaje de Visual Basic
Proporciona vínculos a la especificación completa del lenguaje Visual Basic, que contiene información detallada sobre todos
los aspectos del lenguaje.
Secciones relacionadas
Elementos generales de la interfaz de usuario (Visual Studio)
Contiene temas sobre los cuadros de diálogo y las ventanas utilizadas en Visual Studio.
Referencia de esquemas XML
Proporciona vínculos a temas sobre distintos esquemas XML disponibles en Visual Studio.
Equivalentes del lenguaje
Compara palabras clave, conceptos de programación, tipos de datos, operadores, controles y objetos programables de varios
lenguajes de programación.
Referencia de automatización y extensibilidad
Proporciona vínculos a temas dedicados a la automatización y extensibilidad de Visual Studio, tanto para componentes
compartidos del lenguaje como específicos del mismo.
Referencia del lenguaje Visual Basic

Referencia de Visual Basic


En esta sección se proporciona información de referencia para diversos aspectos del lenguaje Visual Basic.
En esta sección
Convenciones tipográficas y de código
Resume la forma en que se da formato a las palabras clave, marcadores de posición y otros elementos del lenguaje en la
documentación de Visual Basic.
Palabras clave del lenguaje Visual Basic
Documenta las palabras clave reservadas y no reservadas del lenguaje Visual Basic.
Miembros de la biblioteca en tiempo de ejecución de Visual Basic
Muestra las clases y módulos del espacio de nombres Microsoft.VisualBasic, con vínculos a sus funciones, métodos,
propiedades, constantes y enumeraciones miembro.
Palabras clave y miembros por tareas
Resume las palabras clave del lenguaje Visual Basic y los miembros de las bibliotecas en tiempo de ejecución por uso y por
propósito.
Atributos de Visual Basic
Documenta los atributos disponibles en Visual Basic.
Constantes y enumeraciones (Visual Basic)
Documenta las constantes y enumeraciones disponibles en Visual Basic.
Resumen de tipos de datos (Visual Basic)
Documenta los tipos de datos disponibles en Visual Basic.
Directivas (Visual Basic)
Documenta las directivas de compilador disponibles en Visual Basic.
Funciones (Visual Basic)
Documenta las funciones en tiempo de ejecución disponibles en Visual Basic.
Palabras clave (Visual Basic)
Documenta las palabras clave del lenguaje disponibles en Visual Basic.
Módulos (Visual Basic)
Documenta los módulos disponibles en Visual Basic y en sus miembros.
Objetos (Visual Basic)
Documenta los objetos disponibles en Visual Basic y en sus miembros.
Operadores (Visual Basic)
Documenta los operadores disponibles en Visual Basic.
Propiedades (Visual Basic)
Documenta las propiedades disponibles en Visual Basic.
Instrucciones (Visual Basic)
Documenta las instrucciones de declaración y ejecutables disponibles en Visual Basic.
Etiquetas XML recomendadas para comentarios de documentación (Visual Basic)
Describe los comentarios de la documentación para los que se incluye IntelliSenseTM en el editor de código de Visual Basic.
Mensajes de error (Visual Basic)
Proporciona una lista de mensajes de error de compilador y en tiempo de ejecución de Visual Basic y ofrece ayuda acerca de
cómo solucionarlos.
Secciones relacionadas
Visual Basic
Proporciona ayuda completa sobre todas las áreas del lenguaje de Visual Basic.
Compilador de Visual Basic
Describe cómo utilizar el compilador de línea de comandos como alternativa a la compilación de programas desde el
entorno de desarrollo integrado (IDE) de Visual Studio.
Referencia del lenguaje Visual Basic

Convenciones tipográficas y de código


La documentación de Visual Basic utiliza las siguientes convenciones tipográficas y de código.
Convenciones tipográficas
Convención Descripción
Sub, If, ChDir, Print, True, Las palabras en negrita y con mayúscula inicial indican palabras clave específicas del lenguaje o mi
Debug embros en tiempo de ejecución.

Module (Instrucción) Las palabras y frases que aparecen con formato subrayado y en color son hipervínculos en los que
puede hacer clic para ir inmediatamente a una página de Ayuda pertinente.

object, variablename, argu Las letras en cursiva indican marcadores de posición de la información que debe proporcionar el u
mentlist suario.

[ Shadows ], [ expressionlist Los elementos de la sintaxis que aparecen entre corchetes son opcionales.
]

{ Public | Friend | Private En la sintaxis, las llaves y las barras verticales indican una elección obligatoria entre dos o más ele
} mentos. Debe elegir uno, y sólo uno, de los elementos.

[ Protected | Friend ] En la sintaxis, los corchetes y las barras verticales indican dos o más opciones independientes. Pue
de elegir cualquier combinación de los elementos o ninguno de ellos.

[{ ByVal | ByRef }] En la sintaxis, los corchetes que rodean llaves y barras verticales indican que sólo puede elegir un
elemento, pero que también puede omitir por completo los elementos.

membername 1, membern Los subíndices diferencian múltiples instancias del mismo marcador.
ame2, membername3

memerbname1 En sintaxis, los puntos suspensivos indican un número indefinido de elementos del tipo que prece
de inmediatamente a los puntos suspensivos.
...
En código, los puntos suspensivos significan que se ha omitido código en favor de una mayor clari
membernamen dad.

Esc, Entrar Las palabras en mayúsculas indican nombres de teclas y secuencias de pulsación de teclas.

Alt+F1, Ctrl+R Un signo más (+) entre nombres de teclas indica una combinación de teclas. Por ejemplo, Alt+F1 s
ignifica mantener presionada la tecla Alt mientras se presiona la tecla F1.
Convenciones de código
Código de ejemplo Descripción
sampleString = "Hello, world!" Para los ejemplos de código se utiliza una fuente de ancho fijo, así como para lo
La instrucción anterior establece el valor de s s elementos de código incluidos en texto de explicación.
ampleString en "Hello, world!".

' This is a comment. Un apóstrofo (') o la palabra clave REM introduce comentarios al código.
REM This is also a comment.

sampleVar = "This is an " _ Un espacio seguido de un signo de subrayado ( _) al final de una línea indica que
& "example" _ la instrucción de código fuente continúa.
& " of how to continue code."

Vea también
Tareas
Cómo: Interrumpir y combinar instrucciones en código
Referencia
Palabras clave del lenguaje Visual Basic
Miembros de la biblioteca en tiempo de ejecución de Visual Basic
Conceptos
Convenciones de nomenclatura de Visual Basic
Comentarios en código
Otros recursos
Referencia de Visual Basic
Referencia del lenguaje Visual Basic

Palabras clave del lenguaje Visual Basic


Las tablas siguientes muestran todas las palabras clave del lenguaje Visual Basic.
Palabras clave reservadas
Las palabras clave siguientes están reservadas, lo que significa que no se pueden utilizar como nombres para los elementos de
programación, como son las variables o los procedimientos. Puede omitir esta restricción incluyendo el nombre entre
corchetes ([ ]). Para obtener más información, vea "Nombres de escape" en Nombres de elementos declarados.
Nota
No se recomienda utilizar nombres de escape porque pueden complicar la lectura del código y llevar a errores imperceptible
s difíciles de encontrar.

AddHandler AddressOf Alias And

AndAlso As Boolean ByRef

Byte ByVal Call Case

Catch CBool CByte CChar

CDate CDec CDbl Char

CInt Class CLng CObj

Const Continue CSByte CShort

CSng CStr CType CUInt

CULng CUShort Date Decimal

Declare Default Delegate Dim

DirectCast Do Double Each

Else ElseIf End EndIf

Enum Erase Error Event

Exit False Finally For

Friend Function Get GetType

Global GoSub GoTo Handles

If Implements Imports In

Inherits Integer Interface Is

IsNot Let Lib Like

Long Loop Me Mod


Module MustInherit MustOverride MyBase

MyClass Namespace Narrowing New

Next Not Nothing NotInheritable

NotOverridable Object Of On

Operator Option Optional Or

OrElse Overloads Overridable Overrides

ParamArray Partial Private Property

Protected Public RaiseEvent ReadOnly

ReDim REM RemoveHandler Resume

Return SByte Select Set

Shadows Shared Short Single

Static Step Stop String

Structure Sub SyncLock Then

Throw To True Try

TryCast TypeOf Variant Wend

UInteger ULong UShort Using

When While Widening With

WithEvents WriteOnly Xor #Const

#Else #ElseIf #End #If

- & &= *

*= / /= \

\= ^ ^= +

+= = -=
Nota
EndIf, GoSub, Let, Variant y Wend se conservan como palabras clave reservadas, aunque ya no se utilizan en Visual Basic.

Palabras clave no reservadas


Las palabras clave siguientes no están reservadas, lo que significa que se pueden utilizar como nombres para los elementos de
programación. Sin embargo, no es recomendable utilizarlas, puesto que pueden complicar la lectura del código y provocar
errores casi imperceptibles y difíciles de encontrar.
Ansi Assembly Auto Binary

Compare Custom Explicit IsFalse

IsTrue Mid Off Preserve

Strict Text Unicode Until

#ExternalSource #Region
Vea también
Referencia
Miembros de la biblioteca en tiempo de ejecución de Visual Basic
Palabras clave y miembros por tareas
Palabras clave comparadas en diferentes lenguajes
Referencia del lenguaje Visual Basic

Miembros de la biblioteca en tiempo de ejecución de Visual


Basic
El espacio de nombres Microsoft.VisualBasic contiene las clases, los módulos, las constantes y las enumeraciones que
conforman la biblioteca en tiempo de ejecución de Visual Basic. Estos miembros de la biblioteca proporcionan los
procedimientos, las propiedades y los valores de las constantes que puede utilizar en el código. Cada módulo y clase
representa una categoría o funcionalidad particular.
Clase Microsoft.VisualBasic.Collection
Add Clear Contains Count

GetEnumerator Item Remove


Clase Microsoft.VisualBasic.ComClassAttribute
ClassID EventID InterfaceID InterfaceShadows
Clase Microsoft.VisualBasic.ControlChars
Back Cr CrLf FormFeed

Lf NewLine NullChar Quote

Tabulador VerticalTab
Módulo Microsoft.VisualBasic.Conversion
ErrorToString Fix Hex Int

Oct Str Val


Módulo Microsoft.VisualBasic.DateAndTime
DateAdd DateDiff DatePart DateSerial

DateString DateValue Day Hour

Minute Month MonthName Now

Second TimeOfDay Timer TimeSerial

TimeString TimeValue Today WeekDay

WeekDayName Year
Clase Microsoft.VisualBasic.ErrObject
Clear Description Erl GetException

HelpContext HelpFile LastDLLError Number

Raise Source
Módulo Microsoft.VisualBasic.FileSystem
ChDir ChDrive CurDir Dir

EOF FileAttr FileClose FileCopy


FileDateTime FileGet FileGetObject FileLen

FileOpen FilePut FilePutObject FileWidth

FreeFile GetAttr Input InputString

Kill LineInput Loc Lock

LOF MkDir Print PrintLine

Rename Reset RmDir Seek

SetAttr SPC TAB Unlock

Write WriteLine
Módulo Microsoft.VisualBasic.Financial
DDB FV IPmt IRR

MIRR NPer NPV Pmt

PPmt PV Rate SLN

SYD
Módulo Microsoft.VisualBasic.Globals
ScriptEngine ScriptEngineBuildVersion ScriptEngineMajorVersion ScriptEngineMinorVersion
Módulo Microsoft.VisualBasic.Information
Err IsArray IsDate IsDBNull

IsError IsNothing IsNumeric IsReference

LBound QBColor RGB SystemTypeName

TypeName UBound VarType VbTypeName


Módulo Microsoft.VisualBasic.Interaction
AppActivate Beep CallByName Choose

Command CreateObject DeleteSetting Environ

GetAllSettings GetObject GetSetting IIf

InputBox MsgBox Partition SaveSetting

Shell Switch
Módulo Microsoft.VisualBasic.Strings
Asc AscW Chr ChrW

Filter Format FormatCurrency FormatDateTime


FormatNumber FormatPercent GetChar InStr

InStrRev Join LCase Left

Len LSet LTrim Mid

Replace Right RSet RTrim

Space Split StrComp StrConv

StrDup StrReverse Trim UCase


Clase Microsoft.VisualBasic.VBFixedArrayAttribute
Bounds Length
Clase Microsoft.VisualBasic.VBFixedStringAttribute
Length
Módulo Microsoft.VisualBasic.VbMath
Randomize Rnd
Constantes y enumeraciones de Microsoft.VisualBasic
El espacio de nombres Microsoft.VisualBasic proporciona las constantes y las enumeraciones como parte de la biblioteca en
tiempo de ejecución de Visual Basic. Puede utilizar estos valores de constantes en el código. Cada enumeración representa una
categoría o funcionalidad particular. Para obtener más información, vea Constantes y enumeraciones (Visual Basic).
Vea también
Referencia
Palabras clave del lenguaje Visual Basic
Palabras clave y miembros por tareas
Otros recursos
Espacio de nombres en tiempo de ejecución de Visual Basic en Visual Studio
Constantes y enumeraciones (Visual Basic)
Referencia del lenguaje Visual Basic

Palabras clave y miembros por tareas


Las palabras clave del lenguaje Visual Basic y los miembros de las bibliotecas en tiempo de ejecución están organizados por
uso y propósito.
Categoría Descripción
Resumen de matrices Crear, definir y utilizar matrices.

Resumen de objetos de colección Utilizar colecciones.

Resumen de directivas del compilador Controlar el comportamiento del compilador.

Resumen de flujo de control Ejecutar en bucle y controlar el flujo del procedimiento.

Resumen de conversión Convertir números y tipos de datos.

Resumen de tipos de datos Tipos de datos y subtipos de objetos.

Resumen de fechas y horas Convertir y utilizar expresiones de fechas y horas.

Resumen de constantes y declaraciones Declarar elementos de programación y definir constantes.

Resumen de archivos y directorios Controlar el sistema de archivos y procesar archivos.

Resumen de errores Interceptar y devolver valores de error.

Resumen financiero Ejecutar cálculos financieros.

Resumen de entrada y salida Recibir entradas y mostrar o imprimir resultados.

Resumen de información e interacción Iniciar otras aplicaciones y procesar eventos.

Resumen de funciones matemáticas Ejecutar cálculos trigonométricos y otros cálculos matemáticos.

Referencia de My Documenta My, una característica que permite el desarrollo rápido y sencillo de aplica
ciones y proporciona acceso intuitivo a métodos, propiedades y eventos de uso comú
n que se emplean para programar contra el equipo en el que se ejecuta la aplicación, l
a aplicación actual, los recursos y valores de configuración de la aplicación, etc.

Resumen de operadores Comparar expresiones y otras operaciones.

Resumen del Registro Eliminar, leer y guardar configuraciones del programa.

Resumen de manipulación de cadenas Manipular cadenas y tipos de datos de cadena.


Vea también
Referencia
Palabras clave del lenguaje Visual Basic
Miembros de la biblioteca en tiempo de ejecución de Visual Basic
Palabras clave comparadas en diferentes lenguajes
Referencia del lenguaje Visual Basic

Resumen de matrices
Las palabras clave del lenguaje Visual Basic y los miembros de las bibliotecas en tiempo de ejecución están organizados por
uso y propósito.
Acción Elemento del lenguaje
Comprobar una matriz. IsArray

Declarar e inicializar una matriz. Dim, Private, Public, ReDim

Buscar los límites de una matriz. LBound, UBound

Volver a inicializar una matriz. Erase, ReDim


Vea también
Referencia
Palabras clave y miembros por tareas
Palabras clave del lenguaje Visual Basic
Miembros de la biblioteca en tiempo de ejecución de Visual Basic
Palabras clave comparadas en diferentes lenguajes
Referencia del lenguaje Visual Basic

Resumen de objetos de colección


Las palabras clave del lenguaje Visual Basic y los miembros de las bibliotecas en tiempo de ejecución están organizados por
uso y propósito.
Acción Elemento del lenguaje
Crear un objeto Collection. Collection

Agregar un elemento a una colección. Add

Quitar un objeto de una colección. Remove

Hacer referencia a un elemento en una colección. Item

Devolver una referencia a una interfaz IEnumerator. GetEnumerator


Vea también
Referencia
Palabras clave y miembros por tareas
Palabras clave del lenguaje Visual Basic
Miembros de la biblioteca en tiempo de ejecución de Visual Basic
Palabras clave comparadas en diferentes lenguajes
Referencia del lenguaje Visual Basic

Resumen de directivas del compilador


Las palabras clave del lenguaje Visual Basic y los miembros de las bibliotecas en tiempo de ejecución están organizados por
uso y propósito.
Acción Elemento del lenguaje
Definir una constante del compilador #Const (Directiva)

Compilar bloques de código seleccionados. #If...Then...#Else (Directivas)

Contraer y ocultar secciones de código. #Region (Directiva)

Indicar una asignación entre líneas de código fuente y texto externo al código fuente. #ExternalSource (Directiva)
Vea también
Referencia
Palabras clave y miembros por tareas
Palabras clave del lenguaje Visual Basic
Miembros de la biblioteca en tiempo de ejecución de Visual Basic
Palabras clave comparadas en diferentes lenguajes
Referencia del lenguaje Visual Basic

Resumen de flujo de control


Las palabras clave del lenguaje Visual Basic y los miembros de las bibliotecas en tiempo de ejecución están organizados por
uso y propósito.
Acción Elemento del lenguaje
Bifurcar. GoTo, On Error

Salir o detener el programa. End, Exit, Stop

Ejecutar bucles. Do...Loop, For...Next, For Each...Next, While...End While, With

Tomar decisiones. Choose, If...Then...Else, Select Case, Switch

Utilizar procedimientos. Call, Function, Property, Sub


Vea también
Referencia
Palabras clave y miembros por tareas
Palabras clave del lenguaje Visual Basic
Miembros de la biblioteca en tiempo de ejecución de Visual Basic
Palabras clave comparadas en diferentes lenguajes
Referencia del lenguaje Visual Basic

Resumen de conversión
Las palabras clave del lenguaje Visual Basic y los miembros de las bibliotecas en tiempo de ejecución están organizados por
uso y propósito.
Acción Elemento del lenguaje
Convertir un valor ANSI a una cadena. Chr, ChrW

Convertir una cadena a mayúsculas o minúsculas. Format, LCase, UCase

Convertir una fecha a un número de serie. DateSerial, DateValue

Convertir un número decimal a otras bases. Hex, Oct

Convertir un número a una cadena. Format, Str

Convertir un tipo de datos a otro. CBool, CByte, CDate, CDbl, CDec, CInt, CLng, CSng, CShort, CStr, CType,
Fix, Int

Convertir una fecha a día, mes, día de la semana o a Day, Month, Weekday, Year
ño.

Convertir una hora a horas, minutos o segundos. Hour, Minute, Second

Convertir una cadena a un valor ASCII. Asc, AscW

Convertir una cadena a un número. Val

Convertir una hora a un número de serie. TimeSerial, TimeValue


Vea también
Referencia
Palabras clave y miembros por tareas
Palabras clave del lenguaje Visual Basic
Miembros de la biblioteca en tiempo de ejecución de Visual Basic
Palabras clave comparadas en diferentes lenguajes
Referencia del lenguaje Visual Basic

Resumen de tipos de datos


Las palabras clave del lenguaje Visual Basic y los miembros de las bibliotecas en tiempo de ejecución están organizados por
uso y propósito.
Acción Elemento del lenguaje
Convertir entre tipos de datos CBool, CByte, CChar, CDate, CDbl, CDec, CInt, CLng, CObj, CShort, CSng, CStr, Fix, Int

Establecer tipos de datos intrínsecos Boolean, Byte, Char, Date, Decimal, Double, Integer, Long, Object, Short, Single, String

Comprobar tipos de datos IsArray, IsDate, IsDbNull, IsError, IsNothing, IsNumeric, IsReference
Vea también
Referencia
Palabras clave y miembros por tareas
Palabras clave del lenguaje Visual Basic
Miembros de la biblioteca en tiempo de ejecución de Visual Basic
Palabras clave comparadas en diferentes lenguajes
Referencia del lenguaje Visual Basic

Resumen de fechas y horas


Las palabras clave del lenguaje Visual Basic y los miembros de las bibliotecas en tiempo de ejecución están organizados por
uso y propósito.
Acción Elemento del lenguaje
Obtener la hora o la fecha actual. Now, Today, TimeOfDay

Ejecutar cálculos de fechas. DateAdd, DateDiff, DatePart

Devolver una fecha. DateSerial, DateValue, MonthName, WeekDayName

Devolver una hora. TimeSerial, TimeValue

Establecer la fecha o la hora. DateString, TimeOfDay, TimeString, Today

Establecer la duración de un proceso. Timer


Vea también
Referencia
Palabras clave y miembros por tareas
Palabras clave del lenguaje Visual Basic
Miembros de la biblioteca en tiempo de ejecución de Visual Basic
Palabras clave comparadas en diferentes lenguajes
Referencia del lenguaje Visual Basic

Resumen de constantes y declaraciones


Las palabras clave del lenguaje Visual Basic y los miembros de las bibliotecas en tiempo de ejecución están organizados por
uso y propósito.
Acción Elemento del lenguaje
Asignar un valor. Get, Property

Declarar variables o constantes. Const, Dim, Private, Protected, Public, Shadows, Shared, Static

Declarar una clase, un delegado, una enumeración, un Class, Delegate, Enum, Module, Namespace, Structure
módulo, un espacio de nombres o una estructura.

Crear objetos. CreateObject, GetObject, New

Obtener información acerca de un objeto. GetType, IsArray, IsDate, IsDbNull, IsError, IsNothing, IsNumeric,
IsReference, SystemTypeName, TypeName, VarType, VbTypeName

Hacer referencia al objeto actual. Me

Requerir declaraciones explícitas de variables. Option Explicit, Option Strict

Controlar eventos. AddHandler, Event, RaiseEvent, RemoveHandler

Implementar la herencia. Inherits, MustInherit, MustOverride, MyBase, MyClass, New,


NotInheritable, NotOverridable, Overloads, Overridable, Overrides
Vea también
Referencia
Palabras clave y miembros por tareas
Palabras clave del lenguaje Visual Basic
Miembros de la biblioteca en tiempo de ejecución de Visual Basic
Palabras clave comparadas en diferentes lenguajes
Referencia del lenguaje Visual Basic

Resumen de archivos y directorios


Las palabras clave del lenguaje Visual Basic y los miembros de las bibliotecas en tiempo de ejecución están organizados por
uso y propósito.
La característica My proporciona mayor productividad y rendimiento en las operaciones de E/S del archivo que si se utilizan
estos miembros. Para obtener más información, vea My.Computer.FileSystem (Objeto).
Acción Elemento del lenguaje
Cambiar un directorio o una carpeta. ChDir

Cambiar la unidad. ChDrive

Copiar un archivo. FileCopy

Crear un directorio o una carpeta. MkDir

Quitar un directorio o una carpeta. RmDir

Cambia el nombre de un archivo, directorio o carpeta. Cambiar nombre

Devolver la ruta de acceso actual. CurDir

Devolver la marca de fecha y hora de un archivo. FileDateTime

Devolver los atributos de archivo, directorio o carpeta. GetAttr

Devolver la longitud de un archivo. FileLen

Devolver el nombre de un archivo o la etiqueta de volumen. Dir

Establecer la información de atributos para un archivo. SetAttr


Vea también
Referencia
Palabras clave y miembros por tareas
Palabras clave del lenguaje Visual Basic
Miembros de la biblioteca en tiempo de ejecución de Visual Basic
Palabras clave comparadas en diferentes lenguajes
Conceptos
Analizar archivos de texto con el objeto TextFieldParser
Otros recursos
Leer archivos en Visual Basic
Escribir en archivos en Visual Basic
Crear, eliminar y mover archivos y directorios en Visual Basic
Propiedades de archivos, directorios y unidades en Visual Basic
Referencia del lenguaje Visual Basic

Resumen de errores
Las palabras clave del lenguaje Visual Basic y los miembros de las bibliotecas en tiempo de ejecución están organizados por
uso y propósito.
Acción Elemento del lenguaje
Generar errores en tiempo de ejecución. Clear, Error, Raise

Obtener excepciones. GetException

Proporcionar información sobre errores. Err

Interceptar errores en tiempo de ejecución. On Error, Resume, Try...Catch...Finally

Proporcionar el número de línea de error. Erl

Proporcionar el código de error del sistema. LastDLLError


Vea también
Referencia
Palabras clave y miembros por tareas
Palabras clave del lenguaje Visual Basic
Miembros de la biblioteca en tiempo de ejecución de Visual Basic
Palabras clave comparadas en diferentes lenguajes
Referencia del lenguaje Visual Basic

Resumen financiero
Las palabras clave del lenguaje Visual Basic y los miembros de las bibliotecas en tiempo de ejecución están organizados por
uso y propósito.
Acción Elemento del lenguaje
Calcular la amortización. DDB, SLN, SYD

Calcular el valor futuro. FV

Calcular el tipo de interés. Rate

Calcular la tasa interna de retorno. IRR, MIRR

Calcular el número de períodos. NPer

Calcular los pagos. IPmt, Pmt, PPmt

Calcular el valor actual. NPV, PV


Vea también
Referencia
Palabras clave y miembros por tareas
Palabras clave del lenguaje Visual Basic
Miembros de la biblioteca en tiempo de ejecución de Visual Basic
Palabras clave comparadas en diferentes lenguajes
Referencia del lenguaje Visual Basic

Resumen de información e interacción


Las palabras clave del lenguaje Visual Basic y los miembros de las bibliotecas en tiempo de ejecución están organizados por
uso y propósito.
Acción Elemento del lenguaje
Ejecutar otros programas. AppActivate, Shell

Llamar a un método o a una propiedad CallByName

Emitir un sonido desde el equipo. Beep

Proporcionar una cadena de la línea de comandos. Command

Manipular objetos COM. CreateObject, GetObject

Recuperar información de color. QBColor, RGB

Controlar cuadros de diálogo. InputBox, MsgBox


Vea también
Referencia
Palabras clave y miembros por tareas
Palabras clave del lenguaje Visual Basic
Miembros de la biblioteca en tiempo de ejecución de Visual Basic
Palabras clave comparadas en diferentes lenguajes
Referencia del lenguaje Visual Basic

Resumen de entrada y salida


Las palabras clave del lenguaje Visual Basic y los miembros de las bibliotecas en tiempo de ejecución están organizados por
uso y propósito.
Acción Elemento del lenguaje
Tener acceso o crear un archivo. FileOpen

Cerrar archivos. FileClose, Reset

Controlar la apariencia de los resultados. Format, Print, SPC, TAB, FileWidth

Copiar un archivo. FileCopy

Obtener información acerca de un archivo. EOF, FileAttr, FileDateTime, FileLen, FreeFile, GetAttr, Loc,
LOF, Seek

Obtener o proporcionar información de/al usuario por medio de u InputBox, MsgBox


n cuadro de diálogo de control.

Administrar archivos. Dir, Kill, Lock, Unlock

Leer de un archivo. FileGet, FileGetObject, Input, InputString, LineInput

Devolver el tamaño de un archivo. FileLen

Establecer u obtener atributos de un archivo. FileAttr, GetAttr, SetAttr

Establecer la posición de lectura/escritura en un archivo. Seek

Escribir en un archivo. FilePut, FilePutObject, Print, Write, WriteLine (Funciones),


Write, WriteLine (Funciones)
Vea también
Referencia
Palabras clave y miembros por tareas
Palabras clave del lenguaje Visual Basic
Miembros de la biblioteca en tiempo de ejecución de Visual Basic
Palabras clave comparadas en diferentes lenguajes
Referencia del lenguaje Visual Basic

Resumen de funciones matemáticas


Las palabras clave del lenguaje Visual Basic y los miembros de las bibliotecas en tiempo de ejecución están organizados por
uso y propósito.
Acción Elemento del lenguaje
Derivar funciones trigonométricas. Atn, Cos, Sin, Tan

Cálculos generales. Exp, Log, Sqr

Generar números aleatorios. Randomize, Rnd

Obtener el valor absoluto. Abs

Obtener el signo de una expresión. Sgn

Ejecutar conversiones numéricas. Fix, Int


Vea también
Referencia
Funciones matemáticas derivadas (Visual Basic)
Palabras clave y miembros por tareas
Palabras clave del lenguaje Visual Basic
Miembros de la biblioteca en tiempo de ejecución de Visual Basic
Palabras clave comparadas en diferentes lenguajes
Referencia del lenguaje Visual Basic

Funciones matemáticas derivadas (Visual Basic)


A continuación, se muestra una lista de funciones matemáticas no intrínsecas que pueden derivarse de las funciones
matemáticas intrínsecas:
Función Funciones derivadas equivalentes
Secante (Sec(x)) 1 / Cos(x)

Cosecante (Csc(x)) 1 / Sin(x)

Cotangente (Ctan(x)) 1 / Tan(x)

Seno inverso (Asin(x)) Atan(x / Sqrt(-x * x + 1))

Coseno inverso (Acos(x)) Atan(-x / Sqrt(-x * x + 1)) + 2 * Atan(1)

Secante inversa (Asec(x)) 2 * Atan(1) – Atan(Sign(x) / Sqrt(x * x – 1))

Cosecante inversa (Acsc(x)) Atan(Sign(x) / Sqrt(x * x – 1))

Cotangente inversa (Acot(x)) 2 * Atan(1) - Atan(x)

Seno hiperbólico (Sinh(x)) (Exp(x) – Exp(-x)) / 2

Coseno hiperbólico (Cosh(x)) (Exp(x) + Exp(-x)) / 2

Tangente hiperbólica (Tanh(x)) (Exp(x) – Exp(-x)) / (Exp(x) + Exp(-x))

Secante hiperbólica (Sech(x)) 2 / (Exp(x) + Exp(-x))

Cosecante hiperbólica (Csch(x)) 2 / (Exp(x) – Exp(-x))

Cotangente hiperbólica (Coth(x)) (Exp(x) + Exp(-x)) / (Exp(x) – Exp(-x))

Seno hiperbólico inverso (Asinh(x)) Log(x + Sqrt(x * x + 1))

Coseno hiperbólico inverso (Acosh(x)) Log(x + Sqrt(x * x – 1))

Tangente hiperbólica inversa (Atanh(x)) Log((1 + x) / (1 – x)) / 2

Secante hiperbólica inversa (AsecH(x)) Log((Sqrt(-x * x + 1) + 1) / x)

Cosecante hiperbólica inversa (Acsch(x)) Log((Sign(x) * Sqrt(x * x + 1) + 1) / x)

Cotangente hiperbólica inversa (Acoth(x)) Log((x + 1) / (x – 1)) / 2


Requisitos
Espacio de nombres: Math
Ensamblado: mscorlib (en mscorlib.dll)
Vea también
Referencia
Funciones matemáticas (Visual Basic)
Referencia del lenguaje Visual Basic

Referencia de My
La característica My facilita y agiliza la programación, ya que proporciona acceso intuitivo a los métodos, propiedades y
eventos de uso frecuente. Esta tabla muestra los objetos contenidos en My y las acciones que se pueden realizar con cada uno.
Acción Objeto
Tener acceso a información y servicios de la aplicación. My.Application (Objeto)

Tener acceso al equipo host y sus recursos, servicios y datos. My.Computer (Objeto)

Tener acceso a los formularios del proyecto actual. My.Forms (Objeto)

Tener acceso al registro de aplicación. My.Log (Objeto)

Tener acceso a la solicitud de Web actual. My.Request (Objeto)

Tener acceso a los elementos de recurso. My.Resources (Objeto)

Tener acceso a la respuesta de Web actual. My.Response (Objeto)

Tener acceso a la configuración de nivel de usuario y aplicación. My.Settings (Objeto)

Tener acceso al contexto de seguridad del usuario actual. My.User (Objeto)

Tener acceso a servicios Web XML a los que hace referencia el proyecto actual. My.WebServices (Objeto)
Vea también
Conceptos
Lo nuevo en Visual Basic
Información general sobre el modelo de aplicaciones de Visual Basic
Desarrollo con la función My
Referencia del lenguaje Visual Basic

Resumen de operadores
Las palabras clave del lenguaje Visual Basic y los miembros de las bibliotecas en tiempo de ejecución están organizados por
uso y propósito.
Acción Elemento del lenguaje
Operadores aritméticos ^, –, *, /, \, Mod, +, =

Asignación =, ^=, *=, /=, \=, +=, -=, &=

Comparación =, <>, <, >, <=, >=, Like, Is

Concatenación &, +

Operadores lógicos y bit a bit Not, And, Or, Xor, AndAlso, OrElse

Operaciones varias AddressOf, GetType


Vea también
Referencia
Palabras clave y miembros por tareas
Palabras clave del lenguaje Visual Basic
Miembros de la biblioteca en tiempo de ejecución de Visual Basic
Palabras clave comparadas en diferentes lenguajes
Referencia del lenguaje Visual Basic

Resumen del Registro


Las palabras clave del lenguaje de Visual Basic y los miembros de las bibliotecas en tiempo de ejecución están organizados por
uso y propósito.
Si utiliza la característica My, consigue mayor productividad y rendimiento en operaciones del Registro que con estos
elementos. Para obtener más información, vea My.Computer.Registry (Objeto).
Acción Elemento del lenguaje
Eliminar la configuración del programa. DeleteSetting

Leer la configuración del programa. GetSetting, GetAllSettings

Guardar la configuración del programa. SaveSetting


Vea también
Referencia
Palabras clave y miembros por tareas
Palabras clave del lenguaje Visual Basic
Miembros de la biblioteca en tiempo de ejecución de Visual Basic
Palabras clave comparadas en diferentes lenguajes
Conceptos
Tareas habituales del Registro
Referencia del lenguaje Visual Basic

Resumen de manipulación de cadenas


Las palabras clave del lenguaje Visual Basic y los miembros de las bibliotecas en tiempo de ejecución están organizados por
uso y propósito.
Acción Elemento del lenguaje
Comparar dos cadenas. StrComp

Convertir cadenas. StrConv

Invertir una cadena. InStrRev, StrReverse

Convertir en mayúsculas o minúsculas. Format, LCase, UCase

Crear una cadena de caracteres repetidos. Space, StrDup

Buscar la longitud de una cadena. Len

Aplicar formato a una cadena. Format, FormatCurrency, FormatDateTime, FormatNumber,


FormatPercent

Manipular cadenas. InStr, Left, LTrim, Mid, Right, RTrim, Trim

Establecer reglas de comparación de cadenas. Option Compare

Trabajar con valores ASCII y ANSI. Asc, AscW, Chr, ChrW

Sustituir una subcadena especificada. Replace

Devolver una matriz de cadenas basada en un filtro Filter


.

Devolver un número de subcadenas especificado. Split, Join


Vea también
Referencia
Palabras clave y miembros por tareas
Palabras clave del lenguaje Visual Basic
Miembros de la biblioteca en tiempo de ejecución de Visual Basic
Palabras clave comparadas en diferentes lenguajes
Referencia del lenguaje Visual Basic

Atributos de Visual Basic


Visual Basic proporciona varios atributos que permiten a los objetos interactuar con código no administrado y un atributo que
permite tener acceso a los miembros de un módulo sin indicar el nombre del módulo.
En esta sección
ComClassAttribute (Clase)
HideModuleNameAttribute (Clase)
VBFixedArrayAttribute (Clase)
VBFixedStringAttribute (Clase)
Secciones relacionadas
Atributos en Visual Basic
Referencia del lenguaje Visual Basic

ComClassAttribute (Clase)
El atributo ComClassAttribute indica al compilador que debe agregar metadatos que permitan exponer una clase como un
objeto COM.

<System.AttributeUsage(System.AttributeTargets.Class, _
Inherited := False, AllowMultiple := False)> _
Public NotInheritable Class ComClassAttribute
Inherits System.Attribute

Comentarios
Use ComClassAttribute para simplificar el proceso de exposición de componentes COM desde Visual Basic .NET. Los objetos
COM son muy distintos de los ensamblados .NET Framework y sin el ComClassAttribute, necesita seguir varios pasos para
generar un objeto COM desde Visual Basic. Para las clases marcadas con ComClassAttribute, el compilador ejecuta muchos
de estos pasos automáticamente.
Nota
Este atributo simplifica la creación de objetos COM. Para exponer una clase como un objeto COM, deberá compilar el proyect
o con la opción Registrar para interoperabilidad COM seleccionada en la sección Generar del cuadro de diálogo Propied
ades de configuración.

Nota
También puede exponer una clase creada con Visual Basic como un objeto COM para su uso en código no administrado; sin
embargo, no se trata de un objeto COM auténtico. Para obtener información detallada, vea
Interoperabilidad COM en aplicaciones .NET Framework.

Ejemplo
Para ejecutar este ejemplo, cree una aplicación Biblioteca de clases nueva y agregue el código siguiente a un módulo de
clase.
VB
<ComClass(ComClass1.ClassId, ComClass1.InterfaceId, ComClass1.EventsId)> _
Public Class ComClass1
' Use the Region directive to define a section named COM Guids.
#Region "COM GUIDs"
' These GUIDs provide the COM identity for this class
' and its COM interfaces. You can generate
' these guids using guidgen.exe
Public Const ClassId As String = "7666AC25-855F-4534-BC55-27BF09D49D46"
Public Const InterfaceId As String = "54388137-8A76-491e-AA3A-853E23AC1217"
Public Const EventsId As String = "EA329A13-16A0-478d-B41F-47583A761FF2"
#End Region
Public Sub New()
MyBase.New()
End Sub
Function AddNumbers(ByVal X As Integer, ByVal Y As Integer)
AddNumbers = X + Y
End Function
End Class

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Tareas
Tutorial: Crear objetos COM con Visual Basic 2005
Referencia
ComClassAttribute (Miembros de clase)
VBFixedArrayAttribute (Clase)
VBFixedStringAttribute (Clase)
System.Runtime.InteropServices
Conceptos
Aplicar atributos de interoperabilidad
Atributos utilizados en Visual Basic
Otros recursos
Atributos en Visual Basic
Referencia del lenguaje Visual Basic

ComClassAttribute (Miembros de clase)


ComClassAttribute (Clase) proporciona propiedades que identifican el objeto e indica si el nombre prevalece sobre otro
miembro.
Propiedades
ClassID (Propiedad) Contiene un Id. de clase que se utiliza para identificar de forma exclusiva la clase.

EventID (Propiedad) Contiene un identificador de evento que se utiliza para identificar de forma exclusiva el evento.

InterfaceID (Propiedad) Contiene un identificador de interfaz que se utiliza para identificar de forma exclusiva la interfaz
.

InterfaceShadows (Propiedad) Indica que un nombre de interfaz COM generado ensombrece a otro miembro de la clase o la cl
ase base.
Constructor
ComClassAttribute (Constructor) Inicializa una nueva instancia de la clase ComClassAttribute.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Tareas
Tutorial: Crear objetos COM con Visual Basic 2005
Referencia
VBFixedArrayAttribute (Clase)
VBFixedStringAttribute (Clase)
ComClassAttribute (Clase)
Shadows
System.Runtime.InteropServices
Conceptos
Aplicar atributos de interoperabilidad
Atributos utilizados en Visual Basic
Otros recursos
Atributos en Visual Basic
Referencia del lenguaje Visual Basic

ComClassAttribute (Constructor)
Inicializa una nueva instancia de la clase ComClassAttribute.

Public Sub New()


' -or-
Public Sub New( _
ByVal _ClassID As String _
)
' -or-
Public Sub New( _
ByVal _ClassID As String, _
ByVal _InterfaceID As String _
)
' -or-
Public Sub New( _
ByVal _ClassID As String, _
ByVal _InterfaceID As String, _
ByVal _EventId As String _
)

Parámetros
_ClassID
Inicializa el valor de la propiedad ClassID que se utiliza para identificar de forma única una clase.
_InterfaceID
Inicializa el valor de la propiedad InterfaceID que se utiliza para identificar de forma exclusiva una interfaz.
_EventId
Inicializa el valor de la propiedad EventID que se utiliza para identificar de forma exclusiva un evento.
Comentarios
Utilice el constructor de la clase ComClassAttribute para establecer las propiedades ClassID, InterfaceID o EventID cuando
se aplica ComClassAttribute a una clase.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Clase: ComClassAttribute
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Tareas
Tutorial: Crear objetos COM con Visual Basic 2005
Referencia
ComClassAttribute (Clase)
System.Runtime.InteropServices
Conceptos
Atributos utilizados en Visual Basic
Duración de los objetos: cómo se crean y destruyen
Otros recursos
Atributos en Visual Basic
Referencia del lenguaje Visual Basic

ComClassAttribute.ClassID (Propiedad)
Obtiene un Id. de clase que se utiliza para identificar de forma exclusiva una clase.

Public ReadOnly Property ClassID As String

Valor devuelto
Sólo lectura. Una cadena que puede utilizar el compilador para identificar de forma exclusiva la clase cuando se crea un objeto
COM.
Comentarios
El constructor establece esta propiedad cuando se aplica ComClassAttribute a una clase.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Clase: ComClassAttribute
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
ComClassAttribute (Clase)
System.Runtime.InteropServices
Conceptos
Atributos utilizados en Visual Basic
Otros recursos
Atributos en Visual Basic
Referencia del lenguaje Visual Basic

ComClassAttribute.EventID (Propiedad)
Obtiene un Id. de evento que se utiliza para identificar de forma exclusiva un evento.

Public ReadOnly Property EventID As String

Valor devuelto
Sólo lectura. Una cadena que puede utilizar el compilador para identificar de forma exclusiva un evento para la clase cuando se
crea un objeto COM.
Comentarios
El constructor establece esta propiedad cuando se aplica ComClassAttribute a una clase.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Clase: ComClassAttribute
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
ComClassAttribute (Clase)
System.Runtime.InteropServices
Conceptos
Atributos utilizados en Visual Basic
Otros recursos
Atributos en Visual Basic
Referencia del lenguaje Visual Basic

ComClassAttribute.InterfaceID (Propiedad)
Obtiene un Id. de interfaz que se utiliza para identificar de forma exclusiva una interfaz.

Public ReadOnly Property InterfaceID As String

Valor devuelto
Sólo lectura. Una cadena que puede utilizar el compilador para identificar de forma exclusiva una interfaz para la clase cuando
se crea un objeto COM.
Comentarios
El constructor establece esta propiedad cuando se aplica ComClassAttribute a una clase.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Clase: ComClassAttribute
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
ComClassAttribute (Clase)
System.Runtime.InteropServices
Conceptos
Atributos utilizados en Visual Basic
Otros recursos
Atributos en Visual Basic
Referencia del lenguaje Visual Basic

ComClassAttribute.InterfaceShadows (Propiedad)
Indica que el nombre de interfaz COM prevalece o ensombrece otro miembro de la clase o la clase base.

Public Property InterfaceShadows As Boolean

Valor devuelto
Valor Boolean que indica que el nombre de interfaz COM prevalece sobre otro miembro de la clase o la clase base.
Comentarios
El sombreado se produce cuando un miembro utiliza el mismo nombre que otro miembro.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Clase: ComClassAttribute
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
ComClassAttribute (Clase)
System.Runtime.InteropServices
Conceptos
Sombrear en Visual Basic
Atributos utilizados en Visual Basic
Otros recursos
Atributos en Visual Basic
Referencia del lenguaje Visual Basic

HideModuleNameAttribute (Clase)
El atributo HideModuleNameAttribute, cuando se aplica a un módulo, permite tener acceso a los miembros del módulo
utilizando sólo la calificación necesaria para el módulo.

' Usage
<HideModuleName> Module moduleName
' Declaration
<System.AttributeUsage(System.AttributeTargets.Class, _
Inherited := False, AllowMultiple := False)> _
Public NotInheritable Class HideModuleNameAttribute
Inherits System.Attribute

Comentarios
Este atributo es útil para exponer los miembros del módulo sin mostrar el propio módulo. Al utilizar IntelliSense en el entorno
de desarrollo integrado (IDE) de Visual Studio para Visual Basic, el módulo no se muestra en la lista de finalización de
instrucciones. En su lugar, IntelliSense muestra los miembros del módulo.
Incluso cuando se oculta el nombre del módulo, sus miembros todavía son accesibles a través del módulo.
Si un nombre de miembro entra en conflicto con otro identificador o con un miembro de otro módulo que tenga el atributo
HideModuleNameAttribute, el miembro no se muestra en IntelliSense en el nivel de módulo.
Ejemplo
En este ejemplo se muestra cómo utilizar el atributo HideModuleNameAttribute para agregar a My un objeto de base de
datos al que se puede tener acceso a través de My.Database.
VB
Namespace My
<HideModuleName()> Module CustomMyDatabase
Public ReadOnly Property Database() As MyDatabase
Get
Return databaseValue
End Get
End Property
Private ReadOnly databaseValue As MyDatabase = New MyDatabase
End Module
End Namespace

Class MyDatabase
' The members of the My.Database object go here.
End Class

La instrucción Namespace debe aparecer fuera de las clases o módulos.


Requisitos
Espacio de nombres:Microsoft.VisualBasic
Clase: HideModuleNameAttribute
Ensamblado:Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
VBFixedArrayAttribute (Clase)
VBFixedStringAttribute (Clase)
Conceptos
Atributos utilizados en Visual Basic
Otros recursos
Atributos en Visual Basic
Referencia del lenguaje Visual Basic

VBFixedArrayAttribute (Clase)
Indica que una matriz de una estructura o variable no local debe ser tratada como una matriz de longitud fija.

<System.AttributeUsage(System.AttributeTargets.Field, _
Inherited := False, AllowMultiple := False)> _
Public NotInheritable Class VBFixedArrayAttribute
Inherits System.Attribute

Comentarios
De forma predeterminada, las matrices de Visual Basic son de longitud variable. Este atributo es útil cuando se utilizan
funciones de entrada y salida de archivos de Visual Basic, como FileGet y FilePut, y llamadas a API que requieren matrices de
longitud fija.
Ejemplo
VB
Structure Book
<VBFixedArray(4)> Public Chapter() As Integer
End Structure

Sub WriteData()
Dim FileNum As Integer = FreeFile()
Dim MyBook As Book
ReDim MyBook.Chapter(4)
' Add code to populate the array.
MyBook.Chapter(0) = 1
MyBook.Chapter(1) = 2
MyBook.Chapter(2) = 3
MyBook.Chapter(3) = 4
MyBook.Chapter(4) = 5
' Write the array to a file.
FileOpen(FileNum, "C:\testfile", OpenMode.Binary, _
OpenAccess.Write, OpenShare.Default)
FilePut(FileNum, MyBook) ' Write data.
FileClose(FileNum)
End Sub

Nota
El atributo VBFixedArrayAttribute es informativo y no asigna ningún almacenamiento. El propósito de este atributo es mo
dificar cómo los métodos o llamadas a API que reconocen el atributo VBFixedArrayAttribute utilizan las matrices en estruct
uras y variables no locales. Tenga en cuenta que este atributo no convierte una matriz de longitud variable en una matriz fija
y que deberá continuar asignando almacenamiento para la matriz mediante instrucciones Dim o ReDim.

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
VBFixedArrayAttribute (Miembros de clase)
VBFixedStringAttribute (Clase)
ComClassAttribute (Clase)
FileGet (Función)
FilePut (Función)
FileOpen (Función)
MarshalAsAttribute
Otros recursos
Atributos en Visual Basic
Serialización XML y SOAP
Referencia del lenguaje Visual Basic

VBFixedArrayAttribute (Miembros de clase)


VBFixedArrayAttribute (Clase) proporciona propiedades que identifican el tamaño y los límites de la matriz.
Propiedades
Límites Devuelve los límites de la matriz.

Length Devuelve el tamaño de la matriz.


Constructor
VBFixedArrayAttribute (Constructor) Inicializa los enlaces a una matriz de tamaño fijo.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Clase: VBFixedArrayAttribute
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
VBFixedStringAttribute (Clase)
ComClassAttribute (Clase)
MarshalAsAttribute
Conceptos
Atributos utilizados en Visual Basic
Otros recursos
Atributos en Visual Basic
Referencia del lenguaje Visual Basic

VBFixedArrayAttribute (Constructor)
Inicializa el valor de la propiedad Bounds.

Public Sub New( _


ByVal UpperBound1 As Integer, _
)
' -or-
Public Sub New( _
ByVal UpperBound1 As Integer, _
ByVal UpperBound2 As Integer, _
)

Parámetros
UpperBound1
Inicializa el valor del campo superior, que representa el tamaño de la primera dimensión de la matriz.
UpperBound2
Inicializa el valor del campo superior, que representa el tamaño de la segunda dimensión de la matriz.
Comentarios
El constructor se ejecuta cuando se aplica el atributo VBFixedArrayAttribute a una matriz.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Clase: VBFixedArrayAttribute
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
VBFixedStringAttribute (Clase)
ComClassAttribute (Clase)
MarshalAsAttribute Class
Conceptos
Atributos utilizados en Visual Basic
Duración de los objetos: cómo se crean y destruyen
Otros recursos
Atributos en Visual Basic
Referencia del lenguaje Visual Basic

VBFixedArrayAttribute.Bounds (Propiedad)
Devuelve los límites de la matriz.

Public ReadOnly Property Bounds() As Integer()

Valor devuelto
Contiene una matriz de enteros que representa los límites de la matriz.
Comentarios
El constructor establece esta propiedad cuando se aplica VBFixedArrayAttribute a una matriz.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Clase: VBFixedArrayAttribute
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
VBFixedStringAttribute (Clase)
ComClassAttribute (Clase)
MarshalAsAttribute
Conceptos
Atributos utilizados en Visual Basic
Otros recursos
Atributos en Visual Basic
Referencia del lenguaje Visual Basic

VBFixedArrayAttribute.Length (Propiedad)
Devuelve el tamaño de la matriz.

Public ReadOnly Property Length As Integer

Valor devuelto
Contiene una matriz de enteros que representa el número de elementos de la matriz.
Comentarios
El constructor establece esta propiedad cuando se aplica VBFixedArrayAttribute a una matriz.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Clase: VBFixedArrayAttribute
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
VBFixedStringAttribute (Clase)
ComClassAttribute (Clase)
MarshalAsAttribute Class
Conceptos
Atributos utilizados en Visual Basic
Otros recursos
Atributos en Visual Basic
Referencia del lenguaje Visual Basic

VBFixedStringAttribute (Clase)
Indica que una matriz debe ser tratada como si fuera de longitud fija.

<System.AttributeUsage(System.AttributeTargets.Field, _
Inherited := False, AllowMultiple := False)> _
Public NotInheritable Class VBFixedStringAttribute
Inherits System.Attribute

Comentarios
De forma predeterminada, las cadenas de Visual Basic son de longitud variable. Este atributo es útil cuando se utilizan
funciones de entrada y salida de archivos de Visual Basic, como FileGet y FilePut, que requieren cadenas de longitud fija.
Nota
El atributo VBFixedStringAttribute especifica la longitud de una cadena en bytes, no en caracteres.

Ejemplo
VB
Structure Person
Public ID As Integer
Public MonthlySalary As Decimal
Public LastReviewDate As Long
<VBFixedString(15)> Public FirstName As String
<VBFixedString(15)> Public LastName As String
<VBFixedString(15)> Public Title As String
<VBFixedString(150)> Public ReviewComments As String
End Structure

Nota
El atributo VBFixedStringAttribute es informativo y no se puede utilizar para convertir una cadena de longitud variable en
una cadena fija. La finalidad de este atributo es modificar la forma en que los métodos y las llamadas a las API que reconoce
n VBFixedStringAttribute, como las funciones Len y FilePut, utilizan las cadenas en estructuras y variables no locales. Ten
ga en cuenta que este atributo no cambia la longitud real de la propia cadena.

Notas para desarrolladores de dispositivos inteligentes


Esta clase no está admitida.
Requisitos
Espacio de nombres:Microsoft.VisualBasic
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
VBFixedStringAttribute (Miembros de clase)
VBFixedArrayAttribute (Clase)
ComClassAttribute (Clase)
Len (Función, Visual Basic)
FileGet (Función)
FilePut (Función)
FileOpen (Función)
StringBuilder
MarshalAsAttribute
Conceptos
Atributos utilizados en Visual Basic
Otros recursos
Atributos en Visual Basic
Referencia del lenguaje Visual Basic

VBFixedStringAttribute (Miembros de clase)


VBFixedStringAttribute (Clase) proporciona una propiedad que identifica la longitud de cadena.
Campos
VBFixedStringAttribute.Length Obtiene la longitud de la cadena.
Constructor
VBFixedStringAttribute (Constructor) Inicializa el valor del campo SizeConst.
Notas para desarrolladores de dispositivos inteligentes
Esta clase no está admitida.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
VBFixedArrayAttribute (Clase)
VBFixedStringAttribute (Clase)
ComClassAttribute (Clase)
StringBuilder
MarshalAsAttribute
Conceptos
Atributos utilizados en Visual Basic
Otros recursos
Atributos en Visual Basic
Referencia del lenguaje Visual Basic

VBFixedStringAttribute (Constructor)
Inicializa el valor del campo SizeConst.

Public Sub New( _


ByVal Length As Integer _
)

Parámetros
Length
La longitud de la cadena fija.
Comentarios
El constructor se ejecuta cuando se aplica el atributo VBFixedStringAttribute a una cadena.
Notas para desarrolladores de dispositivos inteligentes
Este constructor no se admite.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Clase: VBFixedStringAttribute
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
VBFixedStringAttribute (Clase)
StringBuilder Class
MarshalAsAttribute Class
Conceptos
Atributos utilizados en Visual Basic
Duración de los objetos: cómo se crean y destruyen
Otros recursos
Atributos en Visual Basic
Referencia del lenguaje Visual Basic

VBFixedStringAttribute.Length (Propiedad)
Obtiene la longitud de la cadena.

Public ReadOnly Property Length As Integer

Valor devuelto
Devuelve la longitud de la cadena.
Comentarios
El constructor de este atributo establece esta propiedad cuando se aplica VBFixedStringAttribute a una cadena.
Notas para desarrolladores de dispositivos inteligentes
Esta propiedad no es compatible.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Clase: VBFixedStringAttribute
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
VBFixedStringAttribute (Clase)
Conceptos
Atributos utilizados en Visual Basic
Otros recursos
Atributos en Visual Basic
Referencia del lenguaje Visual Basic

Constantes y enumeraciones (Visual Basic)


Visual Basic proporciona varias constantes y enumeraciones predefinidas para desarrolladores. Las constantes almacenan
valores que permanecen constantes durante la ejecución de una aplicación. Las enumeraciones proporcionan una forma
cómoda de trabajar con conjuntos de constantes relacionadas y de asociar valores de constantes con nombres.
En esta sección
AppWinStyle (Enumeración)
Indica el estilo de ventana que se va a utilizar para el programa invocado al llamar a la función Shell.
AudioPlayMode (Enumeración)
Indica cómo reproducir sonidos al llamar a los métodos de audio.
BuiltInRole (Enumeración)
Indica el tipo de función que se debe comprobar cuando se llama a My.User.IsInRole (Método).
CallType (Enumeración)
Indica el tipo de procedimiento que se debe invocar al llamar a la función CallByName.
CompareMethod (Enumeración)
Indica cómo comparar las cadenas cuando se llama a las funciones de comparación.
Constantes de compilación condicional
Ofrece una lista de las constantes predefinidas disponibles para la compilación condicional.
DateFormat (Enumeración)
Indica cómo se muestran las fechas al llamar a la función FormatDateTime.
DateInterval (Enumeración)
Indica cómo determinar y dar formato a los intervalos de fecha al llamar a las funciones relacionadas con fechas.
DeleteDirectoryOption (Enumeración)
Especifica qué se hace cuando un directorio que se va a borrar contiene archivos o directorios.
DueDate (Enumeración)
Indica cuándo vencen los pagos al llamar a métodos financieros.
FieldType (Enumeración)
Indica si los campos de texto están delimitados o son de ancho fijo.
FileAttribute (Enumeración)
Indica los atributos de archivo que se deben utilizar al llamar a las funciones de acceso a archivos.
FirstDayOfWeek (Enumeración)
Indica el primer día de la semana que se utiliza al llamar a funciones relacionadas con fechas.
FirstWeekOfYear (Enumeración)
Indica la primera semana del año que se utiliza al llamar a funciones relacionadas con fechas.
MsgBoxResult (Enumeración)
Indica en qué botón se hizo clic en un cuadro de mensaje, devuelto por la función MsgBox.
MsgBoxStyle (Enumeración)
Indica los botones que se muestran al llamar a la función MsgBox.
OpenAccess (Enumeración)
Indica cómo abrir un archivo al llamar a funciones de acceso a archivos.
OpenMode (Enumeración)
Indica cómo abrir un archivo al llamar a funciones de acceso a archivos.
OpenShare (Enumeración)
Indica cómo abrir un archivo al llamar a funciones de acceso a archivos.
Constantes de impresión y presentación
Muestra las constantes predefinidas disponibles cuando se llama a funciones de impresión y visualización.
RecycleOption (Enumeración)
Especifica si se debe eliminar un archivo permanentemente o se debe colocar en la Papelera de reciclaje.
SearchOption (Enumeración)
Especifica si se buscan todos o sólo los directorios de nivel superior.
TriState (Enumeración)
Indica un valor de tipo Boolean o si se debe utilizar el valor predeterminado al llamar a las funciones de formato de
números.
UICancelOption (Enumeración)
Especifica lo que se debe hacer si el usuario hace clic en Cancelar durante una operación.
UIOption (Enumeración)
Especifica si se muestra o no un cuadro de diálogo de progreso al copiar, eliminar o mover archivos o directorios.
VariantType (Enumeración)
Indica el tipo de un objeto de variante, devuelto por la función VarType.
VbStrConv (Enumeración)
Indica qué tipo de conversión se debe realizar al llamar a la función StrConv.
Secciones relacionadas
Referencia de Visual Basic
Visual Basic
Constantes de Visual Basic
Información general sobre las enumeraciones
Referencia del lenguaje Visual Basic

AppWinStyle (Enumeración)
Indica el estilo de ventana que se va a utilizar para el programa invocado al llamar a la función Shell.
Comentarios
Cuando se ejecutan comandos Shell, se pueden utilizar los siguientes miembros de la enumeración en el código en vez de los
valores reales.
El argumento Style toma los miembros de enumeración AppWinStyle.
Miembros
Miembro Constante Descripción
Hide vbHide Se oculta la ventana y el foco se pasa a la ventana oculta.

NormalFocus vbNormalFocus La ventana tiene el foco y se restaura a su tamaño y posición originales.

MinimizedFoc vbMinimizedFoc La ventana se muestra como un icono con foco.


us us

MaximizedFoc vbMaximizedFoc La ventana se maximiza con foco.


us us

NormalNoFoc vbNormalNoFoc La ventana se restaura a su tamaño y posición más recientes. La ventana activa en ese mo
us us mento permanece activa.

MinimizedNoF vbMinimizedNo La ventana se muestra como un icono. La ventana activa en ese momento permanece acti
ocus Focus va.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Tareas
Cómo: Hacer referencia al miembro de una enumeración
Referencia
Shell (Función)
Conceptos
Constantes y enumeraciones intrínsecas
Cuándo se debe utilizar una enumeración
Referencia del lenguaje Visual Basic

AudioPlayMode (Enumeración)
Indica cómo reproducir sonidos al llamar a los métodos de audio.
Comentarios
Puede utilizar los miembros de la enumeración AudioPlayMode para controlar cómo My.Computer.Audio.Play (Método)
reproduce los sonidos.
Miembros
Miembro Descripción
WaitToCo Determina que el método My.Computer.Audio.Play reproduzca el sonido y espera hasta que finalice antes de qu
mplete e el código de llamada continúe.

Backgrou Determina que el método My.Computer.Audio.Play reproduzca el sonido en segundo plano. El código de llamad
nd a continúa ejecutándose.

Backgrou Determina que el método My.Computer.Audio.Play reproduzca el sonido en segundo plano hasta que se llame a
ndLoop My.Computer.Audio.Stop (Método). El código de llamada continúa ejecutándose.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
My.Computer.Audio.Play (Método)
AudioPlayMode
Conceptos
Constantes y enumeraciones intrínsecas
Referencia del lenguaje Visual Basic

BuiltInRole (Enumeración)
Indica el tipo de función que se debe comprobar cuando se llama al método My.User.IsInRole (Método).
Comentarios
Esta enumeración proporciona una funcionalidad similar a la de la enumeración WindowsBuiltInRole.
Estas funciones representan los grupos locales de Windows comunes a la mayoría de las instalaciones de Windows NT,
Windows 2000 y Windows XP.
Miembros
Miembro Descripción
Account Los operadores de cuentas administran las cuentas de usuario en un equipo o dominio.
Operator

Administ Los administradores tienen acceso completo y no restringido al equipo o dominio.


rator

BackupO Los operadores de copia de seguridad pueden reemplazar las restricciones de seguridad con el único propósito de
perator hacer copias de seguridad de los archivos o restaurarlos.

Guest Las cuentas de invitado son más restringidas que las de usuario.

PowerUs Los usuarios avanzados poseen la mayoría de los permisos administrativos con algunas restricciones. Así, los usuar
er ios avanzados pueden ejecutar aplicaciones heredadas, además de aplicaciones certificadas.

PrintOpe Los operadores de impresión pueden tomar el control de una impresora.


rator

Replicato Los replicadores pueden realizar la replicación de archivos en un dominio.


r

SystemO Los operadores de sistema administran un equipo determinado.


perator

User Se evita que los usuarios realicen cambios accidentales o intencionados en todo el sistema. Así, los usuarios pueden
ejecutar las aplicaciones certificadas, pero no la mayoría de las aplicaciones heredadas.
Requisitos
Espacio de nombres: Microsoft.VisualBasic.ApplicationServices
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Vea también
Referencia
My.User.IsInRole (Método)
Microsoft.VisualBasic.ApplicationServices.BuiltInRole
Conceptos
Constantes y enumeraciones intrínsecas
Referencia del lenguaje Visual Basic

CallType (Enumeración)
Indica el tipo de procedimiento que se debe invocar al llamar a la función CallByName.
Comentarios
Cuando se llama a la función CallByName, se pueden utilizar los siguientes miembros de la enumeración CallType en el
código en lugar de los valores reales. El argumento UseCallType toma los miembros de enumeración CallType.
Miembros
Miembro Constante Descripción
Method vbMethod Se llama a un método.

Get vbGet Se recupera el valor de una propiedad.

Set vbSet Se determina el valor de una propiedad.

Let vbLet Se determina el valor de una propiedad de objeto.


Notas para desarrolladores de dispositivos inteligentes
Esta enumeración no está admitida.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Tareas
Cómo: Hacer referencia al miembro de una enumeración
Referencia
CallByName (Función)
Constantes de CallType para usuarios de Visual Basic 6.0
Conceptos
Constantes y enumeraciones intrínsecas
Cuándo se debe utilizar una enumeración
Referencia del lenguaje Visual Basic

CompareMethod (Enumeración)
Indica cómo comparar las cadenas cuando se llama a las funciones de comparación.
Comentarios
Cuando se llama a funciones de comparación, se puede utilizar la enumeración CompareMethod en el código en vez de los
valores reales. El argumento Compare toma los miembros de enumeración CompareMethod.
Miembros
Miembro Constante Descripción
Binary vbBinaryCompare Realiza una comparación binaria.

Text vbTextCompare Realiza una comparación textual.


Requisitos
Espacio de nombres: Microsoft.VisualBasic
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Tareas
Cómo: Hacer referencia al miembro de una enumeración
Referencia
Filter (Función, Visual Basic)
InStr (Función, Visual Basic)
InStrRev (Función, Visual Basic)
Replace (Función, Visual Basic)
Split (Función, Visual Basic)
StrComp (Función, Visual Basic)
Conceptos
Constantes y enumeraciones intrínsecas
Cuándo se debe utilizar una enumeración
Referencia del lenguaje Visual Basic

Constantes de compilación condicional


La compilación condicional permite controlar fácilmente en tiempo de compilación el código que se va a incluir en el
programa.
La tabla siguiente lista las constantes predefinidas disponibles para la compilación condicional.
C Descripción
o
ns
ta
nt
e
C Cadena que corresponde a la configuración actual del cuadro Configuración de soluciones activas en el Administrador
O de configuración.
N
FI
G

D Valor Boolean que se puede establecer en el cuadro de diálogo Propiedades del proyecto. De manera predeterminada, l
E a configuración de depuración para un proyecto define DEBUG. Si está definido DEBUG, los métodos de la clase Debug ge
B neran resultados en la ventana Resultados. Si no está definido, los métodos de la clase Debug no se compilan y no se gen
U eran resultados de depuración.
G

T Cadena que representa el tipo de resultado para el proyecto o la configuración de la opción /target de la línea de comando
A s. Los posibles valores de TARGET son: "winexe" para una aplicación para Windows, "exe" para una aplicación de consola, "li
R brary" para una aplicación de biblioteca y "module" para un módulo. La opción /target se puede establecer en el entorno i
G ntegrado de desarrollo (IDE) de Visual Studio. Para obtener más información, vea /target.
ET

T Valor Boolean que se puede establecer en el cuadro de diálogo Propiedades del proyecto. De manera predeterminada, t
R odas las configuraciones para un proyecto definen TRACE. Si está definido TRACE, los métodos de la clase Trace generan r
A esultados en la ventana Resultados. Si no está definido, los métodos de la clase Trace no se compilan y no se generan res
C ultados Trace.
E

V Número que representa la versión de Visual Basic, en formato major.minor. El número de versión para Visual Basic 2005 es
B 8.0.
C_
V
E
R

_ Cadena que representa el tipo de proyecto que se está creando. Esto controla qué objetos My están disponibles en el códig
M o. Para obtener más información, vea Cómo My depende del tipo de proyecto.
Y
T
Y
P
E

Sólo puede utilizar estas constantes para la compilación condicional; no se pueden utilizar en código ejecutable.
Ejemplo
En este ejemplo se utiliza la constante de compilación condicional TARGET para determinar si se compilan determinadas
instrucciones.
VB
#If TARGET = "winexe" Then
' Insert code to be compiled for a Windows application.
#ElseIf TARGET = "exe" Then
' Insert code to be compiled for a console application.
#End If

Requisitos
El entorno integrado de desarrollo (IDE) de Visual Studio define las constantes de compilación condicional CONFIG, DEBUG,
TRACE y _MYTYPE.
El compilador de Visual Basic define las constantes de compilación condicional TARGET y VBC_VER. Las constantes TARGET,
VBC_VER y _MYTYPE no están disponibles en versiones de compilador anteriores a Visual Basic 2005.
Vea también
Tareas
Cómo: Declarar constantes de compilación condicional
Referencia
#If...Then...#Else (Directivas)
#Const (Directiva)
/target (Visual Basic)
Conceptos
Información general sobre la compilación condicional
Cómo My depende del tipo de proyecto
Referencia del lenguaje Visual Basic

DateFormat (Enumeración)
Indica cómo se muestran las fechas al llamar a la función FormatDateTime.
Comentarios
Cuando se llama a la función FormatDateTime, se pueden utilizar los siguientes miembros de la enumeración en el código en
lugar de los valores reales.
Nota
Para obtener acceso a la configuración regional de su equipo, haga doble clic en el icono Configuración regional, que se e
ncuentra en el Panel de control.

Miembros
Mie Const Descripción
mbro ante
Gene vbGen Con números reales, muestra una fecha y una hora. Si el número no tiene parte fraccionaria, muestra sólo una f
ralDa eralDa echa. Si no tiene parte entera, muestra sólo una hora. El formato de fecha y hora depende de la configuración re
te te gional del equipo.

Long vbLon Muestra una fecha con el formato de fecha larga especificado en la configuración regional del equipo.
Date gDate

Short vbSho Muestra una fecha con el formato de fecha corta especificado en la configuración regional del equipo.
Date rtDate

Long vbLon Muestra una hora con el formato de hora larga especificado en la configuración regional de su equipo.
Time gTime

Short vbSho Muestra una hora con el formato de hora corta especificado en la configuración regional de su equipo.
Time rtTime
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Tareas
Cómo: Hacer referencia al miembro de una enumeración
Referencia
FormatDateTime (Función, Visual Basic)
Conceptos
Cadenas con formato de fecha y hora personalizado
Cuándo se debe utilizar una enumeración
Referencia del lenguaje Visual Basic

DateInterval (Enumeración)
Indica cómo determinar y dar formato a los intervalos de fecha al llamar a las funciones relacionadas con fechas.
Comentarios
Cuando se llama a funciones relacionadas con la fecha, se pueden utilizar miembros de enumeración en el código en lugar de
los valores reales.
La enumeración DateInterval define constantes empleadas con funciones relacionadas con fechas para identificar cómo se
determinan y dan formato a los intervalos de fechas. La tabla siguiente enumera los miembros de la enumeración
DateInterval.
Miembros
Miembro Descripción
Day Día del mes (del 1 al 31)

DayOfYear Día del año (del 1 al 366)

Hour Hora (de 1 a 24)

Minute Minuto (de 1 a 60)

Month Mes (de 1 a 12)

Quarter Trimestre del año (de 1 a 4)

Second Segundo (de 1 a 60)

Weekday Día de la semana (del 1 al 7)

WeekOfYear Semana del año (de la 1 a la 53)

Year Año
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Tareas
Cómo: Hacer referencia al miembro de una enumeración
Referencia
DateFormat (Enumeración)
DueDate (Enumeración)
DatePart (Función, Visual Basic)
DateAdd (Función, Visual Basic)
DateDiff (Función, Visual Basic)
Conceptos
Constantes y enumeraciones intrínsecas
Cuándo se debe utilizar una enumeración
Referencia del lenguaje Visual Basic

DeleteDirectoryOption (Enumeración)
Especifica qué se hace cuando un directorio que se va a borrar contiene archivos o directorios.
Comentarios
Esta enumeración se utiliza con My.Computer.FileSystem.DeleteDirectory (Método).
Miembros
Miembro Descripción
DeleteAllContents Elimina el contenido del directorio junto con el directorio. Predeterminado.

ThrowIfDirectoryNo Produce IOException si el directorio no está vacío. La propiedad Data de la excepción lista el archivo o a
nEmpty rchivos que no se pudieron eliminar.
Requisitos
Espacio de nombres: Microsoft.VisualBasic.FileIO
Clase: DeleteDirectoryOption
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Tareas
Cómo: Eliminar un directorio en Visual Basic
Referencia
My.Computer.FileSystem.DeleteDirectory (Método)
Microsoft.VisualBasic.FileIO.DeleteDirectoryOption
Referencia del lenguaje Visual Basic

DueDate (Enumeración)
Indica cuándo vencen los pagos al llamar a métodos financieros.
Comentarios
Cuando se llama a las funciones financieras, se pueden utilizar miembros de enumeración en el código en lugar de los valores
reales.
La enumeración DueDate define constantes empleadas para identificar cuándo vencen los pagos.
Miembros
Miembro Descripción
BegOfPeriod Está al principio del intervalo de fechas

EndOfPeriod Está al final del intervalo de fechas


Requisitos
Espacio de nombres: Microsoft.VisualBasic
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Tareas
Cómo: Hacer referencia al miembro de una enumeración
Referencia
DateInterval (Enumeración)
Resumen financiero
Conceptos
Constantes y enumeraciones intrínsecas
Cuándo se debe utilizar una enumeración
Referencia del lenguaje Visual Basic

FieldType (Enumeración)
Indica si los campos de texto están delimitados o son de ancho fijo.
Comentarios
Esta enumeración se utiliza con TextFieldParser (Objeto).
Miembros
Nombre de miembro Descripción
Delimited Indica que los campos están delimitados.

FixedWidth Indica que los campos son de ancho fijo.


Requisitos
Espacio de nombres: Microsoft.VisualBasic
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Tareas
Cómo: Leer archivos de texto delimitado por comas en Visual Basic
Cómo: Leer archivos de texto de ancho fijo en Visual Basic
Referencia
TextFieldParser.TextFieldType (Propiedad)
TextFieldParser
OpenTextFieldParser
Referencia del lenguaje Visual Basic

FileAttribute (Enumeración)
Indica los atributos de archivo que se deben utilizar al llamar a las funciones de acceso a archivos.
Comentarios
Cuando se llama a las funciones Dir, GetAttr o SetAttr, se puede utilizar la enumeración FileAttribute en el código en vez de
los valores reales.
El argumento Attributes toma los miembros de enumeración FileAttribute.
Al realizar operaciones de E/S de archivos, el objeto My.Computer.FileSystem proporciona mayor rendimiento y facilidad de
uso que los métodos heredados de E/S de archivos. Para obtener más información, consulte My.Computer.FileSystem (Objeto).
Miembros
Miembr Constante Descripción
o
Normal vbNormal Normal (valor predeterminado para Dir y SetAttr). A este archivo no se le aplica ninguna característica
en especial.

ReadOnl vbReadOn Sólo lectura.


y ly

Hidden vbHidden Oculto.

System vbSystem Archivo de sistema.

Volume vbVolume Etiqueta de volumen. Este atributo no es válido cuando se utiliza con SetAttr.

Director vbDirector Directorio o carpeta.


y y

Archive vbArchive El archivo ha cambiado desde la última copia de seguridad.


Notas para desarrolladores de dispositivos inteligentes
Esta enumeración no está admitida.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Tareas
Cómo: Hacer referencia al miembro de una enumeración
Referencia
Dir (Función)
GetAttr (Función)
SetAttr (Función)
Conceptos
Constantes y enumeraciones intrínsecas
Cuándo se debe utilizar una enumeración
Referencia del lenguaje Visual Basic

FirstDayOfWeek (Enumeración)
Indica el primer día de la semana que se utiliza al llamar a funciones relacionadas con fechas.
Comentarios
Cuando se llama a funciones relacionadas con la fecha, se pueden utilizar los siguientes miembros de la enumeración en el
código en lugar de los valores reales.
Algunas funciones relacionadas con fechas aceptan un argumento DayOfWeek, un argumento WeekOfYear, o ambos. La
enumeración FirstDayOfWeek especifica los valores válidos de los argumentos DayOfWeek, así como los posibles valores
devueltos de las funciones.
El argumento DayOfWeek toma los miembros de enumeración FirstDayOfWeek.
Las funciones relacionadas con fechas también devuelven valores FirstDayOfWeek (excepto System).
Miembros
Miembro Constante Descripción
System vbUseSystemDayOfWeek El primer día de la semana según se especifique en la configuración del sistema.

Sunday vbSunday Domingo (predeterminado)

Monday vbMonday Lunes

Tuesday vbTuesday Martes

Wednesday vbWednesday Miércoles

Thursday vbThursday Jueves

Friday vbFriday Viernes

Saturday vbSaturday Sábado


Requisitos
Espacio de nombres: Microsoft.VisualBasic
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Tareas
Cómo: Hacer referencia al miembro de una enumeración
Referencia
FirstWeekOfYear (Enumeración)
DateFormat (Enumeración)
DateDiff (Función, Visual Basic)
DatePart (Función, Visual Basic)
Format (Función)
Weekday (Función, Visual Basic)
Conceptos
Constantes y enumeraciones intrínsecas
Cuándo se debe utilizar una enumeración
Referencia del lenguaje Visual Basic

FirstWeekOfYear (Enumeración)
Indica la primera semana del año que se utiliza al llamar a funciones relacionadas con fechas.
Comentarios
Cuando se llama a funciones relacionadas con la fecha, se pueden utilizar los siguientes miembros de la enumeración en el
código en lugar de los valores reales.
Algunas funciones relacionadas con fechas aceptan un argumento DayOfWeek, un argumento WeekOfYear, o ambos. La
enumeración FirstWeekOfYear especifica los valores válidos de los argumentos WeekOfYear, así como los posibles valores
devueltos de las funciones.
El argumento WeekOfYear toma los miembros de enumeración FirstWeekOfYear.
Miembros
Miembro Constante Descripción
System vbUseSystem El día de la semana especificado en la configuración del sistema como primer día de la seman
a.

Jan1 vbFirstJan1 La semana en la que se encuentra el 1 de enero (predeterminado).

FirstFourDay vbFirstFourDay La primera semana que tiene al menos cuatro días en el nuevo año.
s s

FirstFullWee vbFirstFullWee La primera semana completa del año.


k k
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Tareas
Cómo: Hacer referencia al miembro de una enumeración
Referencia
FirstDayOfWeek (Enumeración)
DateFormat (Enumeración)
DateDiff (Función, Visual Basic)
DatePart (Función, Visual Basic)
Format (Función)
Conceptos
Constantes y enumeraciones intrínsecas
Cuándo se debe utilizar una enumeración
Referencia del lenguaje Visual Basic

MsgBoxResult (Enumeración)
Indica en qué botón se hizo clic en un cuadro de mensaje, devuelto por la función MsgBox.
Comentarios
Cuando se llama a la función MsgBox, se puede utilizar la enumeración MsgBoxResult en el código en vez de los valores
reales.
La función MsgBox devuelve un valor de enumeración MsgBoxResult.
Miembros
Miembro Constante Descripción
OK vbOK Se hizo clic en el botón Aceptar.

Cancel vbCancel Se hizo clic en el botón Cancelar.

Abort vbAbort Se hizo clic en el botón Anular.

Retry vbRetry Se hizo clic en el botón Reintentar.

Ignore vbIgnore Se hizo clic en el botón Omitir.

Yes vbYes Se hizo clic en el botón Sí.

No vbNo Se hizo clic en el botón No.


Requisitos
Espacio de nombres: Microsoft.VisualBasic
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Tareas
Cómo: Hacer referencia al miembro de una enumeración
Referencia
MsgBoxStyle (Enumeración)
MsgBox (Función, Visual Basic)
Conceptos
Constantes y enumeraciones intrínsecas
Cuándo se debe utilizar una enumeración
Referencia del lenguaje Visual Basic

MsgBoxStyle (Enumeración)
Indica los botones que se muestran al llamar a la función MsgBox.
Comentarios
Cuando se llama a la función MsgBox, se puede utilizar la enumeración MsgBoxStyle en el código en vez de los valores
reales. El argumento Buttons toma los miembros de enumeración MsgBoxStyle.
Miembros
Miembro Constante Descripción
OKOnly vbOKOnly Sólo el botón Aceptar (predeterminado).

OKCancel vbOKCancel Los botones Aceptar y Cancelar.

AbortRetryIgnore vbAbortRetryIgnore Los botones Anular, Reintentar y Omitir.

YesNoCancel vbYesNoCancel Los botones Sí, No y Cancelar.

YesNo vbYesNo Los botones Sí y No.

RetryCancel vbRetryCancel Los botones Reintentar y Cancelar.

Critical vbCritical Mensaje crítico.

Question vbQuestion Consulta de advertencia.

Exclamation vbExclamation Mensaje de advertencia.

Information vbInformation Mensaje de información.

DefaultButton1 vbDefaultButton1 El primer botón es el predeterminado.

DefaultButton2 vbDefaultButton2 El segundo botón es el predeterminado.

DefaultButton3 vbDefaultButton3 El tercer botón es el predeterminado.

ApplicationModal vbApplicationModal Cuadro de mensaje modal de la aplicación.

SystemModal vbSystemModal Cuadro de mensajes modal del sistema.

MsgBoxSetForeground vbMsgBoxSetForeground Ventana del cuadro de mensajes de primer plano.

MsgBoxRight vbMsgBoxRight Texto alineado a la derecha.

MsgBoxRtlReading vbMsgBoxRtlReading Texto que se lee de derecha a izquierda (sistemas hebreo y árabe).

MsgBoxHelp vbMsgBoxHelp Texto de ayuda.


Requisitos
Espacio de nombres: Microsoft.VisualBasic
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Tareas
Cómo: Hacer referencia al miembro de una enumeración
Referencia
MsgBoxResult (Enumeración)
MsgBox (Función, Visual Basic)
Conceptos
Constantes y enumeraciones intrínsecas
Cuándo se debe utilizar una enumeración
Referencia del lenguaje Visual Basic

OpenAccess (Enumeración)
Indica cómo abrir un archivo al llamar a funciones de acceso a archivos.
Comentarios
Cuando se llama a funciones relacionadas con el acceso a archivos, se pueden utilizar miembros de enumeración en el código
en lugar de los valores reales.
La enumeración OpenAccess define las constantes utilizadas para identificar si se puede leer desde un archivo (Read), escribir
en él (Write) o ambos (ReadWrite). No se puede modificar un archivo abierto con un acceso Read, sólo leer desde él. La tabla
siguiente enumera los miembros de la enumeración OpenAccess.
Al realizar operaciones de E/S de archivos, el objeto My.Computer.FileSystem proporciona mayor rendimiento y facilidad de
uso que los métodos heredados de E/S de archivos. Para obtener más información, consulte My.Computer.FileSystem (Objeto).
Miembros
Miembro Descripción
Default Acceso de lectura y escritura permitido. Éste es el valor predeterminado.

Read Acceso de lectura permitido.

ReadWrite Acceso de lectura y escritura permitido.

Write Acceso de escritura permitido.


Requisitos
Espacio de nombres: Microsoft.VisualBasic
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Tareas
Cómo: Hacer referencia al miembro de una enumeración
Referencia
OpenMode (Enumeración)
OpenShare (Enumeración)
Conceptos
Constantes y enumeraciones intrínsecas
Cuándo se debe utilizar una enumeración
Referencia del lenguaje Visual Basic

OpenMode (Enumeración)
Indica cómo abrir un archivo al llamar a funciones de acceso a archivos.
Comentarios
Cuando se llama a las funciones relacionadas con el acceso a archivos, se pueden utilizar miembros de enumeración en el
código en lugar de los valores reales.
La enumeración OpenMode define constantes empleadas para establecer los distintos modos de acceso a archivos. La tabla
siguiente enumera los miembros de la enumeración OpenMode.
Se utilizan Input, Output y Append al obtener acceso a los archivos secuencialmente, como archivos de texto, mientras que
Binary se utiliza para el acceso al archivo binario y Random, para el acceso del archivo aleatorio.
Al obtener acceso a un archivo secuencialmente, no puede cambiar sus datos. Puede leer los datos, anexar o sobrescribir
nuevos datos en él. Si lo abre para una entrada, se sobrescribirá el contenido del archivo, incluso cuando no escriba
directamente en el archivo.
Al realizar operaciones de E/S de archivos, el objeto My.Computer.FileSystem proporciona mayor rendimiento y facilidad de
uso que los métodos heredados de E/S de archivos. Para obtener más información, consulte My.Computer.FileSystem (Objeto).
Miembros
Miembro Descripción
Append Archivo abierto para anexar. Predeterminado.

Binary Archivo abierto para acceso binario.

Input Archivo abierto para acceso de lectura.

Output Archivo abierto para acceso de escritura.

Random Archivo abierto para acceso aleatorio.


Requisitos
Espacio de nombres: Microsoft.VisualBasic
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Tareas
Cómo: Hacer referencia al miembro de una enumeración
Referencia
OpenShare (Enumeración)
OpenAccess (Enumeración)
Conceptos
Constantes y enumeraciones intrínsecas
Cuándo se debe utilizar una enumeración
Referencia del lenguaje Visual Basic

OpenShare (Enumeración)
Indica cómo abrir un archivo al llamar a funciones de acceso a archivos.
Comentarios
Cuando se llama a las funciones relacionadas con el acceso a archivos, se pueden utilizar miembros de enumeración en el
código en lugar de valores reales.
La enumeración OpenShare define constantes que especifican si otros procesos pueden tener acceso al archivo mientras está
abierto en la aplicación. La tabla siguiente enumera los miembros de la enumeración OpenShare.
Al realizar operaciones de E/S de archivos, el objeto My.Computer.FileSystem proporciona mayor rendimiento y facilidad de
uso que los métodos heredados de E/S de archivos. Para obtener más información, vea My.Computer.FileSystem (Objeto).
Miembros
Miembro Descripción
Default LockReadWrite. Éste es el valor predeterminado.

LockRead Otros procesos no pueden leer el archivo.

LockReadWrite Otros procesos no pueden leer ni escribir en el archivo.

LockWrite Otros procesos no pueden escribir en el archivo.

Shared Cualquier proceso pueden leer o escribir en el archivo.


Requisitos
Espacio de nombres: Microsoft.VisualBasic
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Tareas
Cómo: Hacer referencia al miembro de una enumeración
Referencia
OpenAccess (Enumeración)
OpenMode (Enumeración)
Conceptos
Constantes y enumeraciones intrínsecas
Cuándo se debe utilizar una enumeración
Referencia del lenguaje Visual Basic

Constantes de impresión y presentación


Cuando se llama a funciones de impresión y presentación, se pueden utilizar las siguientes constantes en el código en lugar de
los valores reales.
Miembros del módulo ControlChars
Miembro Constante Equivalente Descripción
CrLf vbCrLf Chr(13) + Chr( Combinación de caracteres de retorno de carro/avance de línea.
10)

Cr vbCr Chr(13) Carácter de retorno de carro.

Lf vbLf Chr(10) Carácter de avance de línea.

NewLine vbNewLin Chr(13) + Chr( Carácter de nueva línea.


e 10)

NullChar vbNullCh Chr(0) Carácter que tiene el valor 0.


ar

no dispon vbNullStri Cadena con el v No es lo mismo que una cadena de longitud cero (""). Se utiliza para llamar a procedim
ible ng alor 0 ientos externos.

no dispon vbObjectE -2147221504 Número de error. Los números de error definidos por el usuario deberían ser mayores
ible rror que este valor. Por ejemplo:
Err.Raise(Number) = vbObjectError + 1000

Tab vbTab Chr(9) Carácter de tabulador.

Back vbBack Chr(8) Carácter de retroceso.

FormFee vbFormFe Chr(12) No es útil en Microsoft Windows.


d ed

VerticalT vbVertical Chr(11) No es útil en Microsoft Windows.


ab Tab

Quote no disponi Chr(34) Carácter de comilla (" o ') utilizado para encerrar valores.
ble
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Constants
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Print, PrintLine (Funciones)
Write, WriteLine (Funciones)
Conceptos
Constantes y enumeraciones intrínsecas
Información general sobre las constantes
Constantes declaradas por Visual Basic
Referencia del lenguaje Visual Basic

RecycleOption (Enumeración)
Especifica si se debe eliminar un archivo permanentemente o colocar en la Papelera de reciclaje.
Comentarios
Esta enumeración se utiliza con My.Computer.FileSystem.DeleteDirectory (Método) y
My.Computer.FileSystem.DeleteFile (Método).
Para proteger a los usuarios contra la eliminación accidental de archivos importantes, la Papelera de reciclaje almacena los
archivos eliminados y proporciona un método para restaurar esos archivos. Debe eliminar los archivos explícitamente en la
Papelera de reciclaje para realizar una eliminación permanente. Hasta que los archivos se eliminen de la Papelera de
reciclaje, el espacio en disco ocupado por esos archivos no está disponible para otros usos.
A veces es beneficioso omitir la Papelera de reciclaje, sobre todo si está eliminando un número grande de archivos (o un
número más pequeño de archivos muy grandes) que está seguro que ya no se necesita y desea recuperar el espacio en disco.
Miembros
Miembro Descripción
DeletePermanently Elimina el archivo o directorio permanentemente. Predeterminado.

SendToRecycleBin Envía el archivo o directorio a la Papelera de reciclaje.


Requisitos
Espacio de nombres: Microsoft.VisualBasic.FileIO
Clase: RecycleOption
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Tareas
Cómo: Eliminar un archivo en Visual Basic
Cómo: Eliminar un directorio en Visual Basic
Referencia
My.Computer.FileSystem.DeleteDirectory (Método)
My.Computer.FileSystem.DeleteFile (Método)
Microsoft.VisualBasic.FileIO.RecycleOption
Referencia del lenguaje Visual Basic

SearchOption (Enumeración)
Especifica si se buscan todos o sólo los directorios de nivel superior.
Comentarios
Esta enumeración se utiliza con My.Computer.FileSystem.GetFiles (Método), My.Computer.FileSystem.GetDirectories (Método)
y My.Computer.FileSystem.FindInFiles (Método).
Miembros
Miembro Descripción
SearchAllSubDirectories Busca el directorio especificado y todos los subdirectorios dentro de él. Predeterminado.

SearchTopLevelOnly Busca sólo el directorio especificado y excluye los subdirectorios.


Requisitos
Espacio de nombres: Microsoft.VisualBasic.FileIO
Clase: SearchOption
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
My.Computer.FileSystem.FindInFiles (Método)
My.Computer.FileSystem.GetDirectories (Método)
My.Computer.FileSystem.GetFiles (Método)
Microsoft.VisualBasic.FileIO.SearchOption
Referencia del lenguaje Visual Basic

TriState (Enumeración)
Indica un valor booleano o si se debe utilizar el valor predeterminado al llamar a las funciones de formato de números.
Comentarios
A la hora de llamar a funciones de formato de números, se pueden utilizar en el código los siguientes miembros de
enumeración en lugar de los valores reales.
Miembros
Miembro Descripción
True Verdadero. El valor numérico de este miembro es -1.

False Falso. El valor numérico de este miembro es 0.

UseDefault Configuración predeterminada. El valor numérico de este miembro es -2.


Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Strings
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Tareas
Cómo: Hacer referencia al miembro de una enumeración
Referencia
FormatNumber (Función, Visual Basic)
FormatCurrency (Función, Visual Basic)
FormatPercent (Función, Visual Basic)
Conceptos
Cuándo se debe utilizar una enumeración
Referencia del lenguaje Visual Basic

UICancelOption (Enumeración)
Especifica si se produce una excepción cuando el usuario hace clic en Cancelar durante una operación.
Comentarios
Esta enumeración determina si se produce una IOException cuando un usuario hace clic en Cancelar durante una operación.
En cualquier caso, se cancela la operación.
Miembros
Nombre de miembro Descripción
DoNothing No se hace nada cuando el usuario hace clic en Cancelar.

ThrowException Se produce una excepción cuando el usuario hace clic en Cancelar.


Requisitos
Espacio de nombres: Microsoft.VisualBasic.FileIO
Clase: UICancelOption
Plataformas: Windows 95, Windows 98, Windows 98 Segunda edición, Windows Millennium Edition, Windows NT 4.0,
Windows NT Workstation 4.0, Windows NT Server 4.0, Windows 2000, Windows 2000 Server, Windows 2000 Advanced
Server, Windows XP Home Edition, Windows XP Professional, Windows Server 2003, .NET Compact Framework - Mobile
Phone, .NET Compact Framework, Estándar Common Language Infrastructure (CLI)
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
My.Computer.FileSystem.CopyDirectory (Método)
My.Computer.FileSystem.CopyFile (Método)
My.Computer.FileSystem.DeleteDirectory (Método)
My.Computer.FileSystem.DeleteFile (Método)
My.Computer.Network.DownloadFile (Método)
My.Computer.FileSystem.MoveDirectory (Método)
My.Computer.FileSystem.MoveFile (Método)
My.Computer.Network.UploadFile (Método)
UICancelOption
Referencia del lenguaje Visual Basic

UIOption (Enumeración)
Especifica los cuadros de diálogo que se muestran al copiar, eliminar o mover archivos o directorios.
Comentarios
Esta enumeración se utiliza con My.Computer.FileSystem.CopyDirectory (Método),
My.Computer.FileSystem.CopyFile (Método), My.Computer.FileSystem.DeleteDirectory (Método),
My.Computer.FileSystem.DeleteFile (Método), My.Computer.FileSystem.MoveDirectory (Método) y
My.Computer.FileSystem.MoveFile (Método).
Miembros
Miembro Descripción
OnlyErrorDialogs Mostrar sólo cuadros de diálogo de error y ocultar cuadros de diálogo de progreso. Predeterminado.

AllDialogs Mostrar cuadro de diálogo de progreso y cualquier cuadro de diálogo de error.


Requisitos
Espacio de nombres: Microsoft.VisualBasic.FileIO
Clase: UIOption
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
My.Computer.FileSystem.CopyDirectory (Método)
My.Computer.FileSystem.CopyFile (Método)
My.Computer.FileSystem.DeleteDirectory (Método)
My.Computer.FileSystem.DeleteFile (Método)
My.Computer.FileSystem.MoveDirectory (Método)
My.Computer.FileSystem.MoveFile (Método)
Microsoft.VisualBasic.FileIO.UIOption
Referencia del lenguaje Visual Basic

VariantType (Enumeración)
Indica el tipo de un objeto de variante, devuelto por la función VarType.
Comentarios
Cuando se llama a la función VarType, se pueden utilizar miembros de enumeración en el código en lugar de los valores
reales.
La enumeración VariantType define constantes empleadas para identificar posibles tipos Variant. La tabla siguiente enumera
los miembros de la enumeración VariantType.
Miembros
Miem Consta Descripción
bro nte
Array vbArray Matriz.

Boole vbBool Boolean. (True o False.)


an ean

Byte vbByte Byte. (De 0 a 255).

Char vbChar Char. (De 0 a 65535).

Curren vbCurre Moneda.


cy ncy

DataO DataObject.
bject

Date vbDate Date. (De 0:00:00 del 1 de enero de 0001 a 11:59:59 PM del 31 de diciembre de 9999.)

Decim vbDeci Decimal. (De 0 a +/-79.228.162.514.264.337.593.543.950.335 sin punto decimal; de 0 a +/-7,92281625142


al mal 64337593543950335 con 28 posiciones a la derecha del signo decimal; el número más pequeño distinto de
cero es +/-0,0000000000000000000000000001.)

Doubl vbDou Double. (De -1.79769313486231E+308 a -4.94065645841247E-324 para valores negativos; de 4.94065645
e ble 841247E-324 a 1.79769313486231E+308 para valores positivos.)

Empty vbEmpt Referencia NULL.


y

Error System.Exception

Intege vbInteg Integer. (De -2.147.483.648 a 2.147.483.647.)


r er

Long vbLong Long. (De -9,223,372,036,854,775,808 a 9,223,372,036,854,775,807.)

Null vbNull Objeto NULL.

Object vbObje Cualquier tipo puede almacenarse en una variable de tipo Object.
ct

Short Short. (De -32,768 a 32,767.)


Single vbSingl Single. (De -3,402823E38 a –1,401298E-45 para valores negativos; de 1,401298E-45 a 3,402823E38 para va
e lores positivos.)

String vbStrin String. (De 0 a 2.000 millones de caracteres Unicode aprox.)


g

UserD vbUser Tipo definido por el usuario. Cada miembro de la estructura tiene un intervalo de valores determinado por su
efined Define tipo de datos e independiente de los intervalos de valores correspondientes a los demás miembros.
Type dType

Varian vbVaria Variant.


t nt
Notas para desarrolladores de dispositivos inteligentes
Esta enumeración no está admitida.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Tareas
Cómo: Hacer referencia al miembro de una enumeración
Referencia
VarType (Función, Visual Basic)
Conceptos
Constantes y enumeraciones intrínsecas
Cuándo se debe utilizar una enumeración
Referencia del lenguaje Visual Basic

VbStrConv (Enumeración)
Indica qué tipo de conversión se debe realizar al llamar a la función StrConv.
Comentarios
Cuando se llama a la función StrConv, se pueden utilizar los siguientes miembros de la enumeración en el código en lugar de
los valores reales. El argumento Conversion toma los miembros de enumeración VbStrConv.
Miembros
Miembro Constante Descripción
UpperCase vbUpperCase Convierte la cadena a mayúsculas.

LowerCase vbLowerCase Convierte la cadena a minúsculas.

ProperCase vbProperCas Pone en mayúscula la primera letra de cada palabra de la cadena.


e

Wide vbWide Convierte los caracteres estrechos (un solo byte) de la cadena en caracteres anchos (de doble byt
e). Se aplica a configuraciones regionales asiáticas.

Narrow vbNarrow Convierte los caracteres anchos (de doble byte) de la cadena en caracteres estrechos (de un solo
byte). Se aplica a configuraciones regionales asiáticas.

Ninguna No se realiza ninguna conversión.

Katakana vbKatakana Convierte los caracteres Hiragana de la cadena en caracteres Katakana. Sólo se aplica a configura
ciones regionales japonesas.

Hiragana vbHiragana Convierte los caracteres Katakana de la cadena en caracteres Hiragana. Sólo se aplica a configura
ciones regionales japonesas.

SimplifiedC vbSimplified Convierte la cadena en caracteres de chino simplificado.


hinese Chinese

Traditional vbTraditional Convierte la cadena en caracteres de chino tradicional.


Chinese Chinese

LinguisticC vbLinguisticC Convierte la cadena de reglas del sistema de archivos para mayúsculas y minúsculas a reglas ling
asing asing üísticas.
Notas para desarrolladores de dispositivos inteligentes
Esta enumeración no está admitida.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Tareas
Cómo: Hacer referencia al miembro de una enumeración
Referencia
StrConv (Función)
Conceptos
Constantes y enumeraciones intrínsecas
Cuándo se debe utilizar una enumeración
Otros recursos
Introducción a las cadenas en Visual Basic
Referencia del lenguaje Visual Basic

Resumen de tipos de datos (Visual Basic)


En la tabla siguiente se muestran los tipos de datos de Visual Basic .NET, los tipos compatibles con Common Language
Runtime, su asignación de almacenamiento nominal y sus intervalos de valores.
Tipo de Visual Estructura de tipo Asignación de a Intervalo de valores
Basic Common Langua lmacenamiento
ge Runtime nominal
Boolean Boolean En función de la p True o False
lataforma de impl
ementación

Byte Byte 1 byte 0 a 255 (sin signo)

Char (carácter i Char 2 bytes 0 a 65535 (sin signo)


ndividual)

Date DateTime 8 bytes 0:00:00 (medianoche) del 1 de enero de 0001 a 11:59:59 p.m. del 31 d
e diciembre de 9999.

Decimal Decimal 16 bytes 0 a +/-79.228.162.514.264.337.593.543.950.335 (+/-7,9... E+28) † sin s


eparador decimal; 0 a +/-7,9228162514264337593543950335 con 2
8 posiciones a la derecha del decimal;
el número distinto de cero más pequeño es +/-0,0000000000000000
000000000001 (+/-1E-28) †

Double (punto f Double 8 bytes -1,79769313486231570E+308 a -4,94065645841246544E-324 † para


lotante de preci los valores negativos;
sión doble)
4,94065645841246544E-324 a 1,79769313486231570E+308 † para l
os valores positivos

Integer Int32 4 bytes -2.147.483.648 a 2.147.483.647 (con signo)

Long (entero lar Int64 8 bytes -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807 (9,2...E+18 †)


go) (con signo)

Object Object (clase) 4 bytes en platafo Cualquier tipo puede almacenarse en una variable de tipo Object
rma de 32 bits
8 bytes en platafo
rma de 64 bits

SByte SByte 1 byte -128 a 127 (con signo)

Short (entero co Int16 2 bytes -32.768 a 32.767 (con signo)


rto)

Single (punto fl Single 4 bytes -3,4028235E+38 a -1,401298E-45 † para los valores negativos;
otante de precis
ión simple) 1,401298E-45 a 3,4028235E+38 † para los valores positivos

String (longitud String (clase) En función de la p 0 a 2.000 millones de caracteres Unicode aprox.
variable) lataforma de impl
ementación
UInteger UInt32 4 bytes 0 a 4.294.967.295 (sin signo)

ULong UInt64 8 bytes 0 a 18.446.744.073.709.551.615 (1,8...E+19 †) (sin signo)

User-Defined (e (hereda de En función de la p Cada miembro de la estructura tiene un intervalo de valores determina
structura) ValueType) lataforma de impl do por su tipo de datos y es independiente de los intervalos de valores
ementación correspondientes a los demás miembros.

UShort UInt16 2 bytes 0 a 65.535 (sin signo)

† En la notación científica, "E" hace referencia a una potencia de 10. Por lo tanto, 3,56E+2 significa 3.56 x 10 2 o 356, y 3,56E-2
significa 3.56 / 102 o 0,0356.
Nota
En las cadenas que contienen texto, utilice la función StrConv para pasar de un formato de texto a otro.

Consumo de memoria
Al declarar un tipo de datos básico, no debe suponerse que su consumo de memoria es igual a su asignación de
almacenamiento nominal. Esto se debe a las consideraciones siguientes:
Asignación de almacenamiento. Common Language Runtime puede asignar el almacenamiento en función de las
características actuales de la plataforma en la que se ejecuta la aplicación. Si la memoria está casi completa, se pueden
empaquetar los elementos declarados de la forma más estrecha posible. En otros casos, se podrían alinear las
direcciones de memoria a los límites del hardware naturales para optimizar el rendimiento.
Ancho de plataforma. La asignación de almacenamiento en una plataforma de 64 bits es diferente a la asignación en
una plataforma de 32 bits.
Tipos de datos compuestos
Las mismas consideraciones se aplican a cada miembro de un tipo de datos compuesto, como una estructura o una matriz. No
se pueden sumar simplemente todas las asignaciones de almacenamiento nominales de los miembros de tipo. Además,
existen otras consideraciones, como las siguientes:
Sobrecarga. Algunos tipos compuestos tienen requisitos adicionales de memoria. Por ejemplo, una matriz utiliza
memoria adicional para la matriz en sí y para cada dimensión. En una plataforma de 32 bits, esta sobrecarga
corresponde a 12 bytes y 8 bytes por cada dimensión. En una plataforma de 64 bits, los requisitos se duplican.
Diseño de almacenamiento. No debe suponerse que el orden de almacenamiento en la memoria es igual al orden de
declaración. Ni siquiera pueden hacerse predicciones sobre la alineación de bytes, como un límite de 2 bytes o de 4
bytes. Si define una clase o estructura y necesita controlar el diseño de almacenamiento de sus miembros, puede aplicar
el atributo StructLayoutAttribute a la clase o estructura.
Sobrecarga de objetos
Una variable Object que haga referencia a un tipo de datos básico o compuesto, utiliza 4 bytes además de los datos
contenidos en el tipo de datos.
Vea también
Referencia
Funciones de conversión de tipos
Resumen de conversión
StrConv (Función)
StructLayoutAttribute Class
Conceptos
Caracteres de tipo
Uso eficiente de tipos de datos
Referencia del lenguaje Visual Basic

Boolean (Tipo de datos, Visual Basic)


Contiene valores que pueden ser sólo True o False. Las palabras clave True y False corresponden a los dos estados de las
variables Boolean.
Comentarios
Utilice el tipo de datos Boolean para contener valores de dos estados como verdadero/falso, sí/no o activado/desactivado.
El valor predeterminado de Boolean es False.
Conversiones de tipo
Cuando Visual Basic convierte los valores de tipos de datos numéricos en Boolean, 0 pasa a ser False y todos los otros
valores, True. Cuando Visual Basic convierte los valores Boolean en tipos numéricos, False pasa a ser 0 y True, -1.
Al convertir entre valores Boolean y tipos de datos numéricos, recuerde que los métodos de conversión de .NET Framework
no siempre producen los mismos resultados que las palabras clave de conversión de Visual Basic. Esto se debe a que la
conversión de Visual Basic conserva un comportamiento compatible con versiones anteriores. Para obtener más información,
vea Solucionar problemas de tipos de datos.
Sugerencias de programación
Números negativos. Boolean no es un tipo numérico y no puede representar un valor negativo. En cualquier caso, no
debería utilizar Boolean para contener valores numéricos.
Caracteres de tipo. Boolean no tiene ningún carácter de tipo de literal o de tipo de identificador.
Tipo de Framework. El tipo correspondiente en .NET Framework es la estructura System.Boolean.
Ejemplo
En el ejemplo siguiente, runningVB es una variable Boolean que almacena un único parámetro de tipo sí/no.

Dim runningVB As Boolean


' Check to see if program is running on Visual Basic engine.
If scriptEngine = "VB" Then
runningVB = True
End If

Vea también
Tareas
Solucionar problemas de tipos de datos
Referencia
Resumen de tipos de datos (Visual Basic)
Funciones de conversión de tipos
Resumen de conversión
CType (Función)
System.Boolean
Conceptos
Uso eficiente de tipos de datos
Referencia del lenguaje Visual Basic

Byte (Tipo de datos, Visual Basic)


Contiene enteros de 8 bits sin signo (1 bytes) que se sitúan en el intervalo entre 0 y 255.
Comentarios
Utilice el tipo de datos Byte para contener datos binarios.
El valor predeterminado de Byte es 0.
Sugerencias de programación
Números negativos. Dado que Byte es un tipo sin signo, no puede representar un número negativo. Si utiliza el
operador menos (-) unario en una expresión que produce un resultado del tipo Byte, Visual Basic convierte primero la
expresión a Short.
Conversiones de formato. Cuando Visual Basic lee o escribe archivos o cuando llama a archivos DLL, métodos y
propiedades, puede convertir automáticamente entre los formatos de datos. Los datos binarios almacenados en variables
Byte y matrices se conservan durante estas conversiones de formato. No debería utilizar una variable String para datos
binarios, ya que su contenido puede dañarse durante la conversión entre los formatos ANSI y Unicode.
Ampliación. El tipo de datos Byte se amplía a Short, UShort, Integer y UInteger, Long, ULong, Decimal, Single y
Double. Esto significa que se puede convertir Byte en cualquiera de estos tipos sin encontrar un error
System.OverflowException.
Caracteres de tipo. Byte no tiene ningún carácter de tipo de literal o de tipo de identificador.
Tipo en Framework. El tipo correspondiente en .NET Framework es la estructura System.Byte.
Vea también
Referencia
Resumen de tipos de datos (Visual Basic)
Funciones de conversión de tipos
Resumen de conversión
System.Byte
Conceptos
Uso eficiente de tipos de datos
Referencia del lenguaje Visual Basic

Char (Tipo de datos, Visual Basic)


Contiene puntos de código de 16 bits (2 bytes) sin signo comprendidos entre 0 y 65535. Cada punto de código o código de
carácter representa un único carácter Unicode.
Comentarios
Utilice el tipo de datos Char cuando necesite albergar únicamente un carácter individual y no necesite la sobrecarga de String.
En algunos casos, puede utilizar Char(), una matriz de elementos Char, para albergar varios caracteres.
El valor predeterminado de Char es el carácter con el punto de código 0.
Caracteres Unicode
Los primeros 128 puntos de código (0–127) Unicode corresponden a las letras y símbolos de un teclado estándar de EE.UU.
Estos primeros 128 puntos de código son los mismos que los definidos por el conjunto de caracteres ASCII. Los siguientes 128
puntos de código (128–255) representan caracteres especiales, como letras de alfabetos latinos, acentos, símbolos de moneda
y fracciones. Unicode utiliza los puntos de código restantes (256-65535) para albergar una amplia variedad de símbolos,
incluidos caracteres de texto de todo el mundo, signos diacríticos y símbolos técnicos y matemáticos.
Puede utilizar métodos como IsDigit y IsPunctuation en una variable Char para determinar su clasificación Unicode.
Conversiones de tipo
Visual Basic no realiza conversiones directas entre el tipo Char y los tipos numéricos. Puede utilizar Asc, AscW (Funciones) para
convertir un valor Char a un tipo Integer que represente su punto de código. Puede utilizar Chr, ChrW (Funciones) para
convertir un valor Integer a un tipo Char que tenga ese punto de código.
Si el modificador de comprobación de tipos (Option Strict (Instrucción)) está habilitado, debe agregar el carácter de tipo de
literal a un literal de cadena de un solo carácter para identificarlo como el tipo de datos Char. Esto se ilustra en el siguiente
ejemplo:

Option Strict On
Dim charVar As Char
' The following statement attempts to convert a String literal to Char.
' Because Option Strict is On, it generates a compiler error.
charVar = "Z"
' The following statement succeeds because it specifies a Char literal.
charVar = "Z"C

Sugerencias de programación
Números negativos. Char es un tipo sin signo y no puede representar un valor negativo. En cualquier caso, no debería
utilizar Char para albergar valores numéricos.
Consideraciones de interoperabilidad. Si está interactuando con componentes que no se han escrito para .NET
Framework, por ejemplo objetos de automatización u objetos COM, tenga presente que ese tipo de caracteres tienen un
ancho de datos distinto (8 bits) en otros entornos. Al pasar un argumento de 8 bits a esos componentes, declárelo como
Byte en lugar de Char.
Ampliación. El tipo de datos Char se amplía a String. Esto significa que puede convertir Char a String sin que se
produzca un error System.OverflowException.
Caracteres de tipo. Al anexar el carácter de tipo de literal C a un literal de cadena de un solo carácter, se le impone el
tipo de datos Char. Char no tiene ningún carácter de tipo de identificador.
Tipo de marco de trabajo. El tipo correspondiente en .NET Framework es la estructura System.Char.
Vea también
Tareas
Cómo: Optimizar el almacenamiento de enteros positivos con tipos sin signo
Cómo: Llamar a una función de Windows que adopta tipos sin signo
Referencia
Resumen de tipos de datos (Visual Basic)
String (Tipo de datos, Visual Basic)
Funciones de conversión de tipos
Resumen de conversión
Asc, AscW (Funciones)
Chr, ChrW (Funciones)
System.Char
Conceptos
Uso eficiente de tipos de datos
Referencia del lenguaje Visual Basic

Date (Tipo de datos, Visual Basic)


Contiene valores IEEE de 64 bits (8 bytes) que representan fechas comprendidas entre el 1 de enero del año 0001 y el 31 de
diciembre de 9999, y horas comprendidas entre las 0:00:00 (medianoche) y las 11:59:59. Cada incremento representa 100
nanosegundos de tiempo transcurrido desde el comienzo del 1 de enero del año 1 del calendario gregoriano. El valor máximo
representa 100 nanosegundos antes del comienzo del 1 de enero del año 10000.
Comentarios
Utilice el tipo de datos Date para albergar valores de fecha, valores de tiempo o valores de fecha y hora.
El valor predeterminado de Date es 0:00:00 (medianoche) del 1 de enero de 0001.
Requisitos de formato
Debe incluir un literal Date dentro de los signos de número (# #). Debe especificar el valor de fecha en el formato M/d/yyyy,
por ejemplo #5/31/1993#. Este requisito es independiente de la configuración regional y de la configuración de formato de
fecha y hora del equipo.
El motivo de esta restricción es que el significado del código nunca debe cambiar en función de la configuración regional en
que se ejecuta la aplicación. Suponga que asigna un literal Date de #3/4/1998# para representar 4 de marzo de 1998. En una
configuración regional que utilice el formato mm/dd/yyyy, 3/4/1998 se compila como desee. Pero suponga que implementa la
aplicación en varios países. En una configuración regional que utilice el formato dd/mm/yyyy, el literal incluido en el código se
compilará como Abril 3, 1998. En una configuración local que utilice el formato yyyy/mm/dd, el literal podría no ser válido
(Abril 1998, 0003) y generar un error de compilación.
Soluciones
Para convertir un literal de tipo Date al formato de la configuración regional o a un formato personalizado, proporcione el
literal a la función Format (Función) especificando Formatos de fecha y hora predefinidos (Función Format) o
Formatos de fecha y hora definidos por el usuario (Función Format). En el siguiente ejemplo se muestra esta operación.

MsgBox("The formatted date is " & Format(#5/31/1993#, "dddd, d MMM yyyy"))

Si lo desea, puede utilizar también uno de los constructores sobrecargados de la estructura DateTime para ensamblar un valor
de fecha y hora. En el ejemplo siguiente se crea un valor para representar Mayo 31, 1993 a las 12:14 del mediodía.

Dim dateInMay As New System.DateTime(1993, 5, 31, 12, 14, 0)

Formato de hora
Puede especificar el valor de hora con un formato de 12 horas o de 24 horas, por ejemplo #1:15:30 PM# o #13:15:30#. Sin
embargo, si no especifica los minutos ni los segundos, debe especificar a.m. o p.m.
Valores predeterminados de fecha y hora
Si no se incluye una fecha en un literal de fecha/hora, Visual Basic establece la parte de fecha del valor en Enero 1, 0001.Si no
se incluye una hora en un literal de fecha y hora, Visual Basic establece la parte de hora del valor en el inicio del día, es decir,
medianoche (0:00:00).
Conversiones de tipo
Si convierte un valor Date al tipo String, Visual Basic representa la fecha en función del formato corto de fecha especificado
por la configuración regional en tiempo de ejecución, y representa la hora de acuerdo con el formato de hora (12 o 24 horas)
especificado por la configuración regional en tiempo de ejecución.
Sugerencias de programación
Consideraciones de interoperabilidad. Si está interactuando con componentes que no se han escrito para .NET
Framework, por ejemplo objetos de automatización u objetos COM, tenga presente que los tipos de fecha y hora
definidos en otros entornos no son compatibles con el tipo Date de Visual Basic. Al transferir un argumento de fecha y
hora a un componente de este tipo, declárelo como Double en lugar de Date en el nuevo código de Visual Basic, y
utilice los métodos de conversión System.DateTime.FromOADate(System.Double) y System.DateTime.ToOADate.
Caracteres de tipo. Date no tiene caracteres de tipo de literal ni caracteres de tipo de identificador. Sin embargo, el
compilador trata los literales incluidos entre caracteres de signo de número (# #) como Date.
Tipo de marco de trabajo. El tipo correspondiente en .NET Framework es la estructura System.DateTime.
Ejemplo
Una variable o constante del tipo de datos Date contiene tanto la fecha como la hora. Esto se ilustra en el siguiente ejemplo:

Dim someDateAndTime As Date = #8/13/2002 12:14 PM#

Vea también
Referencia
Resumen de tipos de datos (Visual Basic)
Funciones de conversión de tipos
Resumen de conversión
System.DateTime
Conceptos
Uso eficiente de tipos de datos
Cambios en los tipos de datos para usuarios de Visual Basic 6.0
Referencia del lenguaje Visual Basic

Decimal (Tipo de datos, Visual Basic)


Contiene valores de 128 bits con signo (16 bytes) que representan números enteros de 96 bits (12 bytes) que se ajustan a una
potencia variable de 10. El factor de ajuste especifica el número de dígitos a la derecha del separador decimal; comprendidos
entre 0 y 28. Con un ajuste de 0 (sin decimales), el valor más grande posible es +/-79,228,162,514,264,337,593,543,950,335
(+/-7.9228162514264337593543950335E+28). Con 28 posiciones decimales, el valor más grande es +/-
7.9228162514264337593543950335 y el valor más pequeño distinto de cero es +/-0.0000000000000000000000000001
(+/-1E-28).
Comentarios
El tipo de datos Decimal proporciona el número máximo de dígitos significativos para un número. Admite hasta 29 dígitos
significativos y puede representar valores que superan 7.9228 x 10^28. Es especialmente cómodo para cálculos, por ejemplo,
financieros, que requieren un gran número de dígitos pero no puede tolerar errores del redondeo.
El valor predeterminado de Decimal es 0.
Sugerencias de programación
Precisión. Decimal no es un tipo de datos de punto flotante. La estructura Decimal contiene un valor entero binario,
junto con un bit de signo y un factor de ajuste de entero que especifica qué parte del valor es una fracción decimal.
Debido a esto, los números Decimal tienen una representación más precisa en la memoria que los tipos de punto
flotante (Single y Double).
Rendimiento. El tipo de datos Decimal es el más lento de todos los tipos numéricos. Debe considerar la importancia de
la precisión frente al rendimiento antes de elegir un tipo de datos.
Ampliación. El tipo de datos Decimal se amplía a Single o Double. Esto significa que se puede convertir Decimal a
cualquiera de estos tipos sin encontrar un error System.OverflowException.
Ceros finales. Visual Basic no almacena los ceros finales en un literal Decimal. Sin embargo, una variable Decimal
conserva cualquier cero final adquirido de forma computacional. Esto se ilustra en el siguiente ejemplo:

Dim d1, d2, d3, d4 As Decimal


d1 = 2.375D
d2 = 1.625D
d3 = d1 + d2
d4 = 4.000D
MsgBox("d1 = " & CStr(d1) & ", d2 = " & CStr(d2) _
& ", d3 = " & CStr(d3) & ", d4 = " & CStr(d4))

El resultado de MsgBox en el ejemplo anterior es el siguiente:


d1 = 2.375, d2 = 1.625, d3 = 4.000, d4 = 4
Caracteres de tipo. Al agregar el carácter de tipo de literal D a un literal, el tipo de datos se convierte en un tipo de
datos Decimal. Si se agrega el carácter de tipo de identificador @ a cualquier identificador, se convierte su tipo de datos
al tipo Decimal.
Tipo de Framework. El tipo correspondiente en .NET Framework es la estructura System.Decimal.
Intervalo
Podría necesitar utilizar el carácter de tipo D para asignar un valor grande a una variable o constante Decimal. Esto se ilustra
en el siguiente ejemplo:

Dim bigDec1 As Decimal = 9223372036854775807 ' No overflow.


Dim bigDec2 As Decimal = 9223372036854775808 ' Overflow.
Dim bigDec3 As Decimal = 9223372036854775808D ' No overflow.

El compilador interpreta un literal como Long a menos que le siga un carácter de tipo de literal. La declaración para bigDec1
no genera un desbordamiento porque su valor está dentro del intervalo para Long. Sin embargo, el valor para bigDec2 es
demasiado grande para Long, por lo que el compilador genera un error. El carácter de tipo de literal D resuelve el problema
para bigDec3 obligando al compilador a que interprete el literal como Decimal.
Vea también
Referencia
Resumen de tipos de datos (Visual Basic)
String (Tipo de datos, Visual Basic)
Double (Tipo de datos, Visual Basic)
Funciones de conversión de tipos
Resumen de conversión
System.Decimal
System.Decimal.#ctor(System.Int32[])
Conceptos
Uso eficiente de tipos de datos
Referencia del lenguaje Visual Basic

Double (Tipo de datos, Visual Basic)


Contiene números IEEE de punto flotante de doble precisión de 64 bits (8 bytes) con valores de –
1,79769313486231570E+308 a –4,94065645841246544E-324 para números negativos y de 4,94065645841246544E-324 a
1,79769313486231570E+308 para números positivos. Los números de doble precisión almacenan aproximaciones de
números reales.
Comentarios
El tipo de datos Double proporciona las magnitudes más grandes y más pequeñas posibles para un número.
El valor predeterminado de Double es 0.
Sugerencias de programación
Precisión. Cuando trabaje con números de punto flotante, tenga presente que no siempre tienen una representación
precisa en memoria. Esto podría provocar unos resultados inesperados en ciertas operaciones, como comparación de
valor y el operador Mod. Para obtener más información, vea Solucionar problemas de tipos de datos.
Ceros finales. Los tipos de datos de punto flotante no tienen ninguna representación interna de caracteres 0 finales. Por
ejemplo, no distinguen entre 4,2000 y 4,2. Por consiguiente, los caracteres 0 finales no aparecen al mostrar o imprimir
valores de punto flotante.
Caracteres de tipo. Al agregar el carácter de tipo de literal R a un literal, el tipo de datos se convierte en un tipo de datos
Double. Si se agrega el carácter de tipo de identificador # a cualquier identificador, se convierte su tipo de datos al tipo
Double.
Tipo de Framework. El tipo correspondiente en .NET Framework es la estructura System.Double.
Vea también
Tareas
Solucionar problemas de tipos de datos
Referencia
Resumen de tipos de datos (Visual Basic)
Decimal (Tipo de datos, Visual Basic)
String (Tipo de datos, Visual Basic)
Funciones de conversión de tipos
Resumen de conversión
System.Double
Conceptos
Uso eficiente de tipos de datos
Referencia del lenguaje Visual Basic

Integer (Tipo de datos, Visual Basic)


Contiene enteros de 32 bits con signo (4 bytes) que se sitúan en el intervalo entre -2.147.483.648 y 2.147.483.647.
Comentarios
El tipo de datos Integer proporciona rendimiento óptimo en un procesador de 32 bits. Los demás tipos integrales son más
lentos para cargarse y almacenarse de y a la memoria.
El valor predeterminado de Integer es 0.
Sugerencias de programación
Consideraciones sobre la interoperabilidad. Si interactúa con componentes no escritos para .NET Framework, por
ejemplo, objetos de automatización o COM, recuerde que Integer tiene un ancho de datos diferente (16 bits) en otros
entornos. Al pasar un argumento de 16 bits a esos componentes, declárelo en el código de Visual Basic como Short en
lugar de Integer.
Ampliación. El tipo de datos Integer se amplía a Long, Decimal, Single o Double. Esto significa que se puede
convertir Integer en cualquiera de estos tipos sin encontrar un error System.OverflowException.
Caracteres de tipo Al agregar el carácter de tipo de literal I a un literal, el tipo de datos se convierte al tipo de datos
Integer. Si se agrega el carácter de tipo de identificador % a cualquier identificador, se convierte su tipo de datos al tipo
Integer.
Tipo en Framework. El tipo correspondiente en .NET Framework es la estructura System.Int32.
Intervalo
Si intenta asignar a una variable de un tipo integral un número que esté fuera del intervalo correspondiente a este tipo, se
produce un error. Si intenta establecerlo en una fracción, el número se redondea. Esto se muestra en el siguiente ejemplo.

' The valid range of an Integer variable is -2147483648 through +2147483647.


Dim k As Integer
' The following statement causes an error because the value is too large.
k = 2147483648
' The following statement sets k to 6.
k = CInt(5.9)

Vea también
Referencia
Resumen de tipos de datos (Visual Basic)
Long (Tipo de datos, Visual Basic)
Short (Tipo de datos, Visual Basic)
Funciones de conversión de tipos
Resumen de conversión
System.Int32
Conceptos
Tipo de datos Integer para usuarios de Visual Basic 6.0
Uso eficiente de tipos de datos
Referencia del lenguaje Visual Basic

Long (Tipo de datos, Visual Basic)


Contiene enteros de 64 bits (8 bytes) con signo cuyo valor se sitúa entre -9.223.372.036.854.775.808 y
9.223.372.036.854.775.807 (9,2... E+18).
Comentarios
Utilice el tipo de datos Long para incluir números enteros demasiado grandes para ajustarse en el tipo de datos Integer.
El valor predeterminado de Long es 0.
Sugerencias de programación
Consideraciones sobre la interoperabilidad. Si interactúa con componentes no escritos para .NET Framework, por
ejemplo, objetos de automatización o COM, recuerde que Long tiene un ancho de datos diferente (32 bits) en otros
entornos. Al pasar un argumento de 32 bits a esos componentes, declárelo en el código de Visual Basic como Integer en
lugar de Long.
Además, la automatización no admite enteros de 64 bits en Windows 95, Windows 98, Windows ME o Windows 2000.
No se puede pasar ningún argumento Long de Visual Basic a un componente de automatización en estas plataformas.
Ampliación. El tipo de datos Long se amplía a Decimal, Single o Double. Esto significa que se puede convertir Byte
en cualquiera de estos tipos sin encontrar un error System.OverflowException.
Caracteres de tipo Al agregar el carácter de tipo de literal L a un literal, el tipo de datos se convierte al tipo de datos
Long. Si se agrega el carácter de tipo de identificador & a cualquier identificador, se convierte su tipo de datos al tipo
Long.
Tipo en Framework. El tipo correspondiente en .NET Framework es la estructura System.Int64.
Vea también
Referencia
Resumen de tipos de datos (Visual Basic)
Int64 Structure
Integer (Tipo de datos, Visual Basic)
Short (Tipo de datos, Visual Basic)
Funciones de conversión de tipos
Resumen de conversión
Conceptos
Tipo de datos Integer para usuarios de Visual Basic 6.0
Uso eficiente de tipos de datos
Referencia del lenguaje Visual Basic

Object (Tipo de datos)


Contiene direcciones de 32 bits (4 bytes) que hacen referencia s objetos. Se puede asignar cualquier tipo de referencia (cadena,
matriz, clase o interfaz) a una variable Object. Una variable Object también puede hacer referencia a datos de cualquier tipo
de valor (numérico, Boolean, Char, Date, estructura o enumeración).
Comentarios
El tipo de datos Object puede señalar a datos de cualquier tipo de datos, incluso cualquier instancia de objeto que su
aplicación reconozca. Utilice Object cuando en tiempo de compilación no conoce a qué tipo de datos puede señalar la variable.
El valor predeterminado de Object es Nothing (una referencia nula).
Tipos de datos
Puede asignar una variable, constante o expresión de cualquier tipo de datos a una variable Object. Para determinar el tipo de
datos a los que hace referencia actualmente una variable Object, puede utilizar el método GetTypeCode de la clase
System.Type. Esto se ilustra en el siguiente ejemplo:

Dim myObject As Object


' Suppose myObject has now had something assigned to it.
Dim datTyp As Integer
datTyp = Type.GetTypeCode(myObject.GetType())

El tipo de datos Object es un tipo de referencia. Sin embargo, Visual Basic trata una variable Object como un tipo de valor
cuando hace referencia a datos de un tipo de valor.
Almacenamiento
Independientemente del tipo de datos al que haga referencia, una variable Object no contiene el valor de datos en sí, sino un
puntero al valor. Siempre utiliza cuatro bytes en la memoria del sistema, pero sin incluir el almacenamiento para los datos que
representan el valor de la variable. Debido al código que el puntero utiliza para buscar los datos, las variables Object que
contienen tipos de valor son de acceso un poco más lento que las variables que tienen un tipo explícito.
Sugerencias de programación
Consideraciones sobre interoperabilidad. Si trabaja con componentes no escritos para .NET Framework, por ejemplo
objetos de automatización o COM, recuerde que los tipos de puntero de otros entornos no son compatibles con el tipo
Object de Visual Basic.
Rendimiento. Una variable que declara con el tipo Object es bastante flexible para contener una referencia a cualquier
objeto. Sin embargo, cuando invoca un método o propiedad en este tipo de variable, se produce siempre el enlace en
tiempo de ejecución. Para forzar el enlace en tiempo de compilación y un mejor rendimiento, declare la variable con un
nombre de clase específico o conviértala en el tipo de datos específico.
Cuando declara una variable de objeto, intente utilizar un tipo de clase concreto, por ejemplo OperatingSystem, en lugar
del tipo Object generalizado. También es preferible utilizar la clase más específica disponible, como TextBox en lugar de
Control, así podrá tener acceso a sus propiedades y métodos. Normalmente puede utilizar la lista Clases del
Examinador de objetos para buscar nombres de clase disponibles.
Ampliación. Todos los tipos de datos y todos los tipos de referencia se amplían al tipo de datos Object. Esto significa
que se puede convertir cualquier tipo a Object sin encontrar un error System.OverflowException.
Sin embargo, si convierte entre tipos de valor y Object, Visual Basic realiza unas operaciones llamadas conversión
boxing y conversión unboxing, que ralentizan la ejecución.
Caracteres de tipo. Object no tiene ningún carácter de tipo de literal o de tipo de identificador.
Tipo de Framework. El tipo correspondiente en .NET Framework es la clase System.Object.
Ejemplo
El ejemplo siguiente ilustra una variable Object que señala a una instancia de objeto.

Dim objDb As Object


Dim myCollection As New Collection()
' Suppose myCollection has now been populated.
objDb = myCollection.Item(1)

Vea también
Tareas
Cómo: Determinar si dos objetos están relacionados
Cómo: Determinar si dos objetos son idénticos
Referencia
Resumen de tipos de datos (Visual Basic)
Object Class
Funciones de conversión de tipos
Resumen de conversión
Conceptos
Uso eficiente de tipos de datos
Object como tipo de datos universal
Referencia del lenguaje Visual Basic

SByte (Tipo de datos, Visual Basic)


Contiene enteros de 8 bits con signo (1 bytes) que se sitúan en el intervalo entre -128 y 127.
Comentarios
Utilice el tipo de datos SByte para incluir valores enteros que no precisen el ancho total de datos de Integer ni la mitad del
ancho de datos de Short. En algunos casos, Common Language Runtime puede empaquetar las variables SByte de forma que
se ahorre consumo de memoria.
El valor predeterminado de SByte es 0.
Sugerencias de programación
Compatibilidad con CLS. El tipo de datos SByte no forma parte de Common Language Specification (CLS), por lo que
el código compatible con CLS no puede utilizar un componente que lo utiliza.
Ampliación. El tipo de datos SByte se amplía a Short, Integer, Long, Decimal, Single y Double. Esto significa que se
puede convertir SByte en cualquiera de estos tipos sin encontrar un error System.OverflowException.
Caracteres de tipo. SByte no tiene ningún carácter de tipo de literal o de tipo de identificador.
Tipo en Framework. El tipo correspondiente en .NET Framework es la estructura System.SByte.
Vea también
Referencia
Resumen de tipos de datos (Visual Basic)
Funciones de conversión de tipos
Resumen de conversión
Short (Tipo de datos, Visual Basic)
Integer (Tipo de datos, Visual Basic)
Long (Tipo de datos, Visual Basic)
System.SByte
Conceptos
Tipo de datos Integer para usuarios de Visual Basic 6.0
Uso eficiente de tipos de datos
Referencia del lenguaje Visual Basic

Short (Tipo de datos, Visual Basic)


Contiene enteros de 16 bits con signo (2 bytes) que se sitúan en el intervalo entre -32.768 y 32.767.
Comentarios
Utilice el tipo de datos Short para incluir valores enteros que no requieren el ancho completo de datos de Integer. En algunos
casos, Common Language Runtime puede empaquetar las variables Short de forma que se ahorre consumo de memoria.
El valor predeterminado de Short es 0.
Sugerencias de programación
Ampliación. El tipo de datos Short se amplía a Integer, Long, Decimal, Single o Double. Esto significa que se puede
convertir Short en cualquiera de estos tipos sin encontrar un error System.OverflowException.
Caracteres de tipo Si se anexa el carácter de tipo literal S a un literal, se convierte al tipo de datos Short. Short no tiene
ningún carácter de tipo de identificador.
Tipo en Framework. El tipo correspondiente en .NET Framework es la estructura System.Int16.
Vea también
Referencia
Resumen de tipos de datos (Visual Basic)
Funciones de conversión de tipos
Resumen de conversión
Integer (Tipo de datos, Visual Basic)
Long (Tipo de datos, Visual Basic)
System.Int16
Conceptos
Tipo de datos Integer para usuarios de Visual Basic 6.0
Uso eficiente de tipos de datos
Referencia del lenguaje Visual Basic

String (Tipo de datos, Visual Basic)


Incluye números IEEE de punto flotante de precisión simple de 32 bits (4 bytes) con signo cuyos valores van de -
3,4028235E+38 a -1,401298E-45 para números negativos y de 1,401298E-45 a 3,4028235E+38 para números positivos. Los
números de precisión simple almacenan aproximaciones de números reales.
Comentarios
Utilice el tipo de datos Single para incluir valores de punto flotante que no requieren el ancho completo de datos de Double.
En algunos casos, Common Language Runtime puede empaquetar las variables Single de forma que se ahorre consumo de
memoria.
El valor predeterminado de Single es 0.
Sugerencias de programación
Precisión. Cuando trabaje con números de punto flotante, tenga presente que no siempre tienen una representación
precisa en memoria. Esto podría conducir a resultados inesperados en ciertas operaciones, como la comparación de
valores y el operador Mod. Para obtener más información, vea Solucionar problemas de tipos de datos.
Ampliación. El tipo de datos Single amplía a Double. Esto significa que puede convertir Single en Double sin
encontrar un error System.OverflowException.
Ceros finales. Los tipos de datos de punto flotante no tienen representación interna de caracteres 0 finales. Por ejemplo,
no distinguen entre 4,2000 y 4,2. Por consiguiente, los caracteres 0 finales no aparecen cuando muestra o imprime
valores de punto flotante.
Caracteres de tipo Al agregar el carácter de tipo de literal F a un literal, el tipo de datos se convierte al tipo de datos
Single. Si se agrega el carácter de tipo de identificador ! a cualquier identificador, se convierte su tipo de datos al tipo
Single.
Tipo en Framework. El tipo correspondiente en .NET Framework es la estructura System.Single.
Vea también
Tareas
Solucionar problemas de tipos de datos
Referencia
Resumen de tipos de datos (Visual Basic)
Decimal (Tipo de datos, Visual Basic)
Double (Tipo de datos, Visual Basic)
Funciones de conversión de tipos
Resumen de conversión
System.Single
Conceptos
Uso eficiente de tipos de datos
Referencia del lenguaje Visual Basic

String (Tipo de datos, Visual Basic)


Contiene secuencias de puntos de código de 16 bits sin signo (2 bytes) que van de un valor de 0 a 65535. Cada punto de
código, o código de carácter, representa un carácter Unicode único. Una cadena puede contener de 0 a 2.000 millones (2^31)
de caracteres Unicode aproximadamente.
Comentarios
Utilice el tipo de datos String para contener varios caracteres sin la sobrecarga de administración de matriz de Char(), una
matriz de elementos Char.
El valor predeterminado de String es Nothing (una referencia nula). Observe que esto no es lo mismo que la cadena vacía
(valor "").
Caracteres Unicode
Los primeros 128 puntos de código (0–127) Unicode corresponden a las letras y símbolos de un teclado estándar de EE.UU.
Estos primeros 128 puntos de código son los mismos que los que define el juego de caracteres ASCII. Los siguientes 128
puntos de código (128–255) representan caracteres especiales, como letras de alfabetos latinos, acentos, símbolos de moneda
y fracciones. Unicode utiliza los puntos de código restantes (256-65535) para una amplia variedad de símbolos, incluidos
caracteres de texto de todo el mundo, signos diacríticos, y símbolos técnicos y matemáticos.
Puede utilizar métodos como IsDigit y IsPunctuation en una variable individual String para determinar su clasificación
Unicode.
Requisitos de formato
Debe agregar un literal String entre comillas (" "). Si necesita incluir una comilla como uno de los caracteres de la cadena,
utilice dos comillas contiguas (""). Esto se ilustra en el siguiente ejemplo:

Dim j As String = "Joe said ""Hello"" to me."


Dim h As String = "Hello"
' The following messages all display the same thing:
' "Joe said "Hello" to me."
MsgBox(j)
MsgBox("Joe said " & """" & h & """" & " to me.")
MsgBox("Joe said """ & h & """ to me.")

Observe que las comillas contiguas que representan unas comillas de la cadena son independientes de las comillas que
comienzan y terminan el literal String.
Manipulación de cadenas
Cuando asigna una cadena a una variable String, esa cadena es inmutable, lo que significa que no puede cambiar su longitud
ni su contenido. Cuando modifica una cadena de alguna manera, Visual Basic crea una nueva cadena y abandona la anterior. La
variable String señala a continuación a la nueva cadena.
Puede manipular el contenido de una variable String mediante varias funciones de cadena. En el siguiente ejemplo se ilustra
Left (Función, Visual Basic):

Dim S As String = "Database"


' The following statement sets S to a new string containing "Data".
S = Microsoft.VisualBasic.Left(S, 4)

Una cadena creada por otro componente puede completarse con espacios iniciales o finales. Si recibe este tipo de cadena,
puede utilizar Trim, LTrim y RTrim (Funciones) para quitar estos espacios.
Para obtener más información sobre manipulación de cadenas, vea Cadenas en Visual Basic.
Sugerencias de programación
Números negativos. Tenga presente que los caracteres contenidos en String son sin signo y no pueden representar
valores negativos. En cualquier caso, no debería utilizar String para contener valores numéricos.
Consideraciones sobre interoperabilidad. Si trabaja con componentes no escritos para .NET Framework, por ejemplo
objetos de automatización o COM, recuerde que los caracteres de cadena pueden tener un ancho de datos distinto (8
bits) en otros entornos. Si está pasando un argumento de cadena de caracteres de 8 bits a este tipo de componentes,
declárelo como Byte(), una matriz de elementos Byte, en lugar de String en el nuevo código de Visual Basic.
Caracteres de tipo. Anexar el carácter de tipo de identificador $ a un literal fuerza a que sea de un tipo de datos String.
String no tiene ningún carácter de tipo de literal. Sin embargo, el compilador trata los literales incluidos entre comillas ("
") como String.
Tipo de Framework. El tipo correspondiente en .NET Framework es la clase System.String.
Vea también
Tareas
Cómo: Optimizar el almacenamiento de enteros positivos con tipos sin signo
Cómo: Llamar a una función de Windows que adopta tipos sin signo
Referencia
Resumen de tipos de datos (Visual Basic)
Char (Tipo de datos, Visual Basic)
Funciones de conversión de tipos
Resumen de conversión
System.String
Conceptos
Uso eficiente de tipos de datos
Referencia del lenguaje Visual Basic

UInteger (Tipo de datos)


Contiene enteros de 32 bits sin signo (4 bytes) que se sitúan en el intervalo entre 0 y 4.294.967.295.
Comentarios
El tipo de datos UInteger proporciona el valor sin signo más largo en el ancho de datos más eficaz.
El valor predeterminado de UInteger es 0.
Sugerencias de programación
Los tipos de datos UInteger y Integer proporcionan un rendimiento óptimo en un procesador de 32 bits, ya que los tipos de
enteros más pequeños (UShort, Short, Byte y SByte), aunque utilizan menos bits, necesitan más tiempo para cargarse,
almacenarse y obtenerse.
Vea también
Tareas
Cómo: Optimizar el almacenamiento de enteros positivos con tipos sin signo
Cómo: Llamar a una función de Windows que adopta tipos sin signo
Referencia
Resumen de tipos de datos (Visual Basic)
UInt32 Structure
Funciones de conversión de tipos
Resumen de conversión
Conceptos
Uso eficiente de tipos de datos
Referencia del lenguaje Visual Basic

ULong (Tipo de datos, Visual Basic)


Contiene enteros de 64 bits sin signo (8 bytes) que van de un valor de 0 a 18.446.744.073.709.551.615 (más de 1,84 veces 10
^ 18).
Comentarios
Utilice el tipo de datos ULong para contener datos binarios demasiado grandes para UInteger o valores de enteros sin signo
lo más grandes posibles.
El valor predeterminado de ULong es 0.
Sugerencias de programación
Números negativos. Dado que ULong es un tipo sin signo, no puede representar un número negativo. Si utiliza el
operador menos (-) unario en una expresión que produce un resultado del tipo ULong, Visual Basic convierte primero la
expresión a Decimal.
Compatibilidad con CLS.El tipo de datos ULong no forma parte de Common Language Specification (CLS), por lo que
el código compatible con CLS no puede utilizar un componente que lo utiliza.
Consideraciones sobre interoperabilidad. Si trabaja con componentes no escritos para .NET Framework, por ejemplo
objetos de automatización o COM, recuerde que los tipos como ulong pueden tener un ancho de datos distinto (32 bits)
en otros entornos. Al pasar un argumento de 32 bits a esos componentes, declárelo como UInteger en lugar de ULong
en el código administrado de Visual Basic.
Además, la automatización no admite enteros de 64 bits en Windows 95, Windows 98, Windows ME o Windows 2000.
No se puede pasar ningún argumento ULong de Visual Basic a un componente de automatización en estas plataformas.
Ampliación. El tipo de datos ULong se amplía a Decimal, Single y Double. Esto significa que se puede convertir
ULong a cualquiera de estos tipos sin encontrar un error System.OverflowException.
Caracteres de tipo. Anexar los caracteres de tipo de literal UL a un literal fuerza a que sea de un tipo de datos ULong.
ULong no tiene ningún carácter de tipo de identificador.
Tipo de Framework. El tipo correspondiente en .NET Framework es la estructura System.UInt64.
Vea también
Tareas
Cómo: Llamar a una función de Windows que adopta tipos sin signo
Referencia
Resumen de tipos de datos (Visual Basic)
UInt64 Structure
Funciones de conversión de tipos
Resumen de conversión
Conceptos
Uso eficiente de tipos de datos
Referencia del lenguaje Visual Basic

Tipo de datos definido por el usuario


Contiene los datos en el formato que defina el usuario. La instrucción Structure define el formato.
Las versiones anteriores de Visual Basic admitían el tipo definido por el usuario (UDT). La versión actual amplía el tipo definido
por el usuario a una estructura. Una estructura es una concatenación de uno o varios miembros de diversos tipos de datos.
Visual Basic trata una estructura como una unidad única, aunque también puede tener acceso individualmente a sus
miembros.
Comentarios
Defina y utilice un tipo de datos de estructura cuando necesite combinar varios tipos de datos en una única unidad o cuando
ninguno de los tipos de datos básicos satisfaga sus necesidades.
El valor predeterminado de un tipo de datos de estructura se compone de la combinación de valores predeterminados de cada
uno de sus miembros.
Formato de declaración
Una declaración de estructura se inicia con la instrucción Structure (Instrucción) y finaliza con la instrucción End Structure. La
instrucción Structure proporciona el nombre de la estructura, que también actúa como identificador del tipo de datos que está
definiendo la estructura. Otras partes del código pueden utilizar este identificador para declarar variables, parámetros y valores
devueltos de la función para que pertenezca al tipo de datos de esta estructura.
Las declaraciones comprendidas entre las instrucciones Structure y EndStructure definen los miembros de la estructura.
Niveles de acceso a miembros
Debe declarar cada miembro utilizando una instrucción Instrucción Dim (Visual Basic) o una instrucción que especifique el
nivel de acceso, como Public (Visual Basic), Friend (Visual Basic) o Private (Visual Basic). Si utiliza una instrucción Dim, el nivel
de acceso es público de manera predeterminada.
Sugerencias de programación
Consumo de memoria. Como en los demás tipos de datos compuestos, no puede calcularse de forma precisa el
consumo total de memoria de una estructura sumando las asignaciones de almacenamiento nominal de sus miembros.
Es más, no puede suponerse que el orden de almacenamiento en la memoria sea el mismo que el orden de la
declaración. Si necesita controlar el diseño de almacenamiento de una estructura, puede aplicar el atributo
StructLayoutAttribute a la instrucción Structure.
Consideraciones de interoperabilidad. Si está interactuando con componentes que no se han escrito para .NET
Framework, por ejemplo objetos de automatización u objetos COM, tenga presente que los tipos de datos definidos por
el usuario en otros entornos no son compatibles con los tipos de estructuras de Visual Basic.
Ampliación. No existen conversiones automáticas a un tipo de datos de estructuras o desde un tipo de datos de
estructuras. Puede definir operadores de conversión en la estructura utilizando Operator (Instrucción) y puede declarar
cada operador de conversión para que sea Widening o Narrowing.
Caracteres de tipo. Los tipos de datos de estructura no tienen ningún carácter de tipo de literal ni ningún carácter de
tipo de identificador.
Tipo de marco de trabajo. No hay ningún tipo correspondiente en .NET Framework. Todas las estructuras se heredan
de la clase de .NET Framework System.ValueType, pero ninguna estructura individual se corresponde con
System.ValueType.
Ejemplo
En el siguiente modelo se muestra el esquema de declaración de una estructura.

[Public | Protected | Friend | Protected Friend | Private] Structure structname


{Dim | Public | Friend | Private} member1 As datatype1
' ...
{Dim | Public | Friend | Private} memberN As datatypeN
End Structure

Vea también
Referencia
Resumen de tipos de datos (Visual Basic)
ValueType Class
Funciones de conversión de tipos
Resumen de conversión
Structure (Instrucción)
Widening
Narrowing
StructLayoutAttribute
Conceptos
Uso eficiente de tipos de datos
Otros recursos
Estructuras: tipos de datos propios
Referencia del lenguaje Visual Basic

UShort (Tipo de datos, Visual Basic)


Contiene enteros de 16 bits sin signo (2 bytes) que se sitúan en el intervalo entre 0 y 65.535.
Comentarios
Utilice el tipo de datos UShort para contener datos binarios demasiado grandes para Byte.
El valor predeterminado de UShort es 0.
Sugerencias de programación
Números negativos. Dado que UShort es un tipo sin signo, no puede representar un número negativo. Si utiliza el
operador menos (-) unario en una expresión que produce un resultado del tipo UShort, Visual Basic convierte primero la
expresión a Integer.
Compatibilidad con CLS. El tipo de datos UShort no forma parte de Common Language Specification (CLS), por lo que
el código compatible con CLS no puede utilizar un componente que lo utiliza.
Ampliación. El tipo de datos UShort se amplía a Integer, UInteger, Long, ULong, Decimal, Single y Double. Esto
significa que se puede convertir UShort en cualquiera de estos tipos sin encontrar un error System.OverflowException.
Caracteres de tipo Si se anexa el carácter de tipo literal US a un literal, se convierte al tipo de datos UShort. UShort no
tiene ningún carácter de tipo de identificador.
Tipo en Framework. El tipo correspondiente en .NET Framework es la estructura System.UInt16.
Vea también
Tareas
Cómo: Llamar a una función de Windows que adopta tipos sin signo
Referencia
Resumen de tipos de datos (Visual Basic)
UInt16 Structure
Funciones de conversión de tipos
Resumen de conversión
Conceptos
Uso eficiente de tipos de datos
Referencia del lenguaje Visual Basic

Directivas (Visual Basic)


Los temas de esta sección documentan las directivas de compilador de código fuente de Visual Basic.
En esta sección
#Const (Directiva)
#ExternalSource (Directiva)
#If...Then...#Else (Directivas)
#Region (Directiva)
Secciones relacionadas
Referencia de Visual Basic
Visual Basic
Referencia del lenguaje Visual Basic

#Const (Directiva)
Permite definir constantes de compilación condicional para Visual Basic.

#Const constname = expression

Partes
constname
Requerido. String. Nombre de la constante que se define.
expression
Requerido. Literal, otra constante de compilación condicional o cualquier combinación que incluya operadores aritméticos o
lógicos, excepto Is.
Comentarios
Las constantes de compilación condicional son siempre privadas para el archivo en que aparecen. No es posible crear
constantes de compilación públicas con la directiva #Const, esto sólo es posible en la interfaz de usuario o con la opción de
compilador /define.
En expression solamente pueden utilizarse constantes de compilación condicional y literales. El uso de una constante estándar
definida con Const produce un error. A la inversa, las constantes definidas con la palabra clave #Const solamente pueden
utilizarse para la compilación condicional. También es posible que las constantes no estén definidas, en cuyo caso su valor es
Nothing.
Ejemplo
En el ejemplo siguiente se utiliza la directiva #Const.
VB
#Const MyLocation = "USA"
#Const Version = "8.0.0012"
#Const CustomerNumber = 36

Vea también
Tareas
Cómo: Declarar constantes de compilación condicional
Referencia
/define (Visual Basic)
#If...Then...#Else (Directivas)
Instrucción Const (Visual Basic)
Instrucción If...Then...Else (Visual Basic)
Conceptos
Información general sobre la compilación condicional
Referencia del lenguaje Visual Basic

#ExternalSource (Directiva)
Indica una asignación entre líneas específicas de código fuente y texto externo al código fuente.

#ExternalSource( StringLiteral , IntLiteral )


[ LogicalLine+ ]
#End ExternalSource

Partes
StringLiteral
La ruta del código fuente externo.
IntLiteral
El número de línea de la primera línea del código fuente externo.
LogicalLine
La línea en la que se produce el error en el código fuente externo.
#End ExternalSource
Termina el bloque #ExternalSource.
Comentarios
Únicamente el compilador y el depurador utilizan esta directiva.
Un archivo de código fuente puede incluir directivas de origen externo, que indican una asignación entre líneas de código
específicas de dicho archivo y texto externo al código fuente, como un archivo .aspx. Si se encuentran errores en el código
fuente designado durante la compilación, se identifican como provenientes del código fuente externo.
Las directivas de código fuente externo no tienen efecto en la compilación y no se pueden anidar. Están pensadas sólo para el
uso interno de la aplicación.
Vea también
Otros recursos
Compilación condicional (Visual Basic)
Referencia del lenguaje Visual Basic

#If...Then...#Else (Directivas)
Compila de forma condicional bloques de código seleccionados de Visual Basic.

#If expression Then


statements
[ #ElseIf expression Then
[ statements ]
...
#ElseIf expression Then
[ statements ] ]
[ #Else
[ statements ] ]
#End If

Partes
expression
Requerida para las instrucciones #If y #ElseIf; en caso contrario, opcional. Cualquier expresión formada exclusivamente por
una o más constantes de compilación condicional, literales y operadores, que se evalúa como True o False.
statements
Requerida para el bloque de instrucción #If; en caso contrario, opcional. Líneas de programa de Visual Basic o directivas de
compilación que se compilan si la expresión asociada se evalúa como True.
#End If
Termina el bloque de instrucción #If.
Comentarios
Aparentemente, el comportamiento de las directivas #If...Then...#Else es el mismo que el de las instrucciones If...Then...Else.
Sin embargo, las directivas #If...Then...#Else evalúan lo compilado por el compilador, mientras que las instrucciones
If...Then...Else evalúan las condiciones en tiempo de ejecución.
La compilación condicional se utiliza habitualmente para compilar el mismo programa para plataformas distintas. También se
utiliza para evitar que el código de depuración aparezca en los archivos ejecutables. El código excluido durante una
compilación condicional se omite completamente en el archivo ejecutable final, de modo que no tiene ningún efecto en el
tamaño ni en el rendimiento.
Independientemente del resultado de la evaluación, todas las expresiones se evalúan utilizando Option Compare Binary. La
instrucción Option Compare no afecta a las expresiones de las instrucciones #If y #ElseIf.
Nota
No existe ningún formulario de línea única de las directivas #If, #Else, #ElseIf y #End If. No puede aparecer otro código en l
a misma línea que cualquiera de las directivas.

Ejemplo
En el siguiente ejemplo se utiliza el constructor #If...Then...#Else para determinar si se compilan ciertas instrucciones.
VB
#Const CustomerNumber = 36
#If CustomerNumber = 35 Then
' Insert code to be compiled for customer # 35.
#ElseIf CustomerNumber = 36 Then
' Insert code to be compiled for customer # 36.
#Else
' Insert code to be compiled for all other customers.
#End If
Vea también
Referencia
#Const (Directiva)
Instrucción If...Then...Else (Visual Basic)
Constantes de compilación condicional
Conceptos
Información general sobre la compilación condicional
Referencia del lenguaje Visual Basic

#Region (Directiva)
Contrae y oculta secciones de código en archivos de Visual Basic.

#Region
"
identifier_string
"
#End Region

Partes
identifier_string
Requerido. Cadena que hace la función de título de una región cuando ésta se contrae. Las regiones están contraídas de
forma predeterminada.
#End Region
Termina el bloque #Region.
Comentarios
Utilice la directiva #Region para especificar un bloque de código que se expande o contrae cuando se utiliza la característica
de esquematización del Editor de código de Visual Studio. Las instrucciones #Region admiten semántica de bloque (como
#If...#End If); es decir, el inicio y el final deben incluirse en el mismo bloque de código.
Ejemplo
En el ejemplo siguiente se utiliza la directiva #Region.
VB
#Region "MathFunctions"
' Insert code for the Math functions here.
#End Region

Vea también
Tareas
Cómo: Esquematizar y ocultar el código
Cómo: Contraer y ocultar secciones de código
Referencia
#If...Then...#Else (Directivas)
Referencia del lenguaje Visual Basic

Funciones (Visual Basic)


Los temas de esta sección contienen tablas de las funciones miembro en tiempo de ejecución de Visual Basic.
En esta sección
Funciones de conversión (Visual Basic)
Funciones matemáticas (Visual Basic)
Funciones de conversión de tipos
Funciones A-C
Funciones D-G
Funciones H-L
Funciones M-R
Funciones S-Z
Secciones relacionadas
Referencia de Visual Basic
Visual Basic
Referencia del lenguaje Visual Basic

Funciones de conversión (Visual Basic)


Asc (Función)
AscW (Función)
CBool (Función)
CByte (Función)
CChar (Función)
CDate (Función)
CDbl (Función)
CDec (Función)
Chr (Función)
ChrW (Función)
CInt (Función)
CLng (Función)
CObj (Función)
CSByte (Función)
CShort (Función)
CSng (Función)
CStr (Función)
CType (Función)
CUInt (Función)
CULng (Función)
CUShort (Función)
Format (Función)
Hex (Función)
Oct (Función)
Str (Función)
Val (Función)
Vea también
Referencia
Funciones de conversión de tipos
Referencia del lenguaje Visual Basic

Funciones matemáticas (Visual Basic)


Las funciones matemáticas de Visual Basic 6 han sido reemplazadas por métodos equivalentes en la clase System.Math de
.NET Framework.
Comentarios
Los métodos matemáticos de .NET Framework funcionan del mismo modo que sus equivalentes de Visual Basic 6, si bien
algunos de sus nombres han sufrido ligeras diferencias. Así, por ejemplo, el equivalente en .NET Framework de la función Atn
de Visual Basic 6 es Atan. En la siguiente tabla se detallan los nombres de las funciones matemáticas de Visual Basic 6 y sus
métodos equivalentes en .NET Framework:
Función Método e Descripción
de Visual n .NET Fra
Basic 6 mework
Abs Abs Devuelve el valor absoluto de un número especificado.

Atn Atan Devuelve un valor Double que contiene el ángulo cuya tangente es el número especificado.

Cos Cos Devuelve un valor Double que contiene el coseno del ángulo especificado.

Exp Exp Devuelve un valor Double que contiene e (base de los logaritmos naturales) elevado a la potencia esp
ecificada.

Log Log Devuelve un valor Double que contiene el logaritmo del número especificado. Este método está sobre
cargado y puede devolver o bien el logaritmo natural (de base e) del número especificado o bien el log
aritmo del número especificado en una base especificada.

Round Round Devuelve un valor de tipo Double que contiene el número más próximo al valor especificado. Existen f
unciones de redondeo adicionales disponibles como métodos de los tipos intrínsecos, tales como
Round.

Sgn Sign Devuelve un valor Integer que indica el signo de un número.

Sin Sin Devuelve un valor Double que especifica el seno de un ángulo.

Sqr Sqrt Devuelve un valor Double que especifica la raíz cuadrada de un número.

Tan Tan Devuelve un valor Double que contiene la tangente de un ángulo.

Además, la clase matemática de .NET Framework ofrece constantes y otros métodos estáticos para funciones trigonométricas,
logarítmicas y otras funciones matemáticas habituales. Todo ello puede utilizarse en un programa de Visual Basic.
Para utilizar estas funciones sin calificación, importe el espacio de nombres System.Math a su proyecto agregando el
siguiente código en la parte superior del código fuente:

'Imports System.Math

Ejemplo
En este ejemplo se utiliza el método Abs de la clase Math para calcular el valor absoluto de un número.

' Returns 50.3.


Dim MyNumber1 As Double = Math.Abs(50.3)
' Returns 50.3.
Dim MyNumber2 As Double = Math.Abs(-50.3)
En este ejemplo se utiliza el método Atan de la clase Math para calcular el valor de pi.

Public Function GetPi() As Double


' Calculate the value of pi.
Return 4.0 * Math.Atan(1.0)
End Function

En este ejemplo se utiliza el método Cos de la clase Math para devolver el coseno de un ángulo.

Public Function Sec(ByVal angle As Double) As Double


' Calculate the secant of angle, in radians.
Return 1.0 / Math.Cos(angle)
End Function

En este ejemplo se utiliza el método Exp de la clase Math para devolver e elevado a una potencia.

Public Function Sinh(ByVal angle As Double) As Double


' Calculate hyperbolic sine of an angle, in radians.
Return (Math.Exp(angle) - Math.Exp(-angle)) / 2.0
End Function

En este ejemplo se utiliza el método Log de la clase Math para devolver el logaritmo natural de un número.

Public Function Asinh(ByVal value As Double) As Double


' Calculate inverse hyperbolic sine, in radians.
Return Math.Log(value + Math.Sqrt(value * value + 1.0))
End Function

En este ejemplo se utiliza el método Round de la clase Math para redondear un número al entero más próximo.

' Returns 3.
Dim MyVar2 As Double = Math.Round(2.8)

En este ejemplo se utiliza el método Sign de la clase Math para determinar el signo de un número.

' Returns 1.
Dim MySign1 As Integer = Math.Sign(12)
' Returns -1.
Dim MySign2 As Integer = Math.Sign(-2.4)
' Returns 0.
Dim MySign3 As Integer = Math.Sign(0)

En este ejemplo se utiliza el método Sin de la clase Math para devolver el seno de un ángulo.

Public Function Csc(ByVal angle As Double) As Double


' Calculate cosecant of an angle, in radians.
Return 1.0 / Math.Sin(angle)
End Function

En este ejemplo se utiliza el método Sqrt de la clase Math para calcular la raíz cuadrada de un número.

' Returns 2.
Dim MySqr1 As Double = Math.Sqrt(4)
' Returns 4.79583152331272.
Dim MySqr2 As Double = Math.Sqrt(23)
' Returns 0.
Dim MySqr3 As Double = Math.Sqrt(0)
' Returns NaN (not a number).
Dim MySqr4 As Double = Math.Sqrt(-4)
En este ejemplo se utiliza el método Tan de la clase Math para devolver la tangente de un ángulo.

Public Function Ctan(ByVal angle As Double) As Double


' Calculate cotangent of an angle, in radians.
Return 1.0 / Math.Tan(angle)
End Function

Requisitos
Clase: Math
Espacio de nombres: System
Ensamblado: mscorlib (en mscorlib.dll)
Vea también
Referencia
Rnd (Función, Visual Basic)
Randomize (Función, Visual Basic)
Funciones matemáticas derivadas (Visual Basic)
NaN
Referencia del lenguaje Visual Basic

Funciones de conversión de tipos


Estas funciones se compilan en línea, es decir, el código de conversión forma parte del código que evalúa la expresión. A veces
no se produce una llamada a un procedimiento para realizar la conversión, lo que mejora el rendimiento. Cada función
convierte una expresión a un tipo de datos específico.

CBool(expression)
CByte(expression)
CChar(expression)
CDate(expression)
CDbl(expression)
CDec(expression)
CInt(expression)
CLng(expression)
CObj(expression)
CSByte(expression)
CShort(expression)
CSng(expression)
CStr(expression)
CUInt(expression)
CULng(expression)
CUShort(expression)

Parte
expression
Obligatoria. Cualquier expresión del tipo de datos de origen.
Tipo de datos del valor devuelto
El nombre de función determina el tipo de datos del valor devuelto, como se muestra en la tabla siguiente.
Nombr Tipo de datos devuelto Intervalo de valores del argumento expression
e de la
funció
n
CBool Boolean (Tipo de datos, Visual Basic) Cualquier expresión numérica, Char o String válida.

CByte Byte (Tipo de datos, Visual Basic) 0 a 255 (sin signo); las partes fraccionarias se redondean.1

CChar Char (Tipo de datos, Visual Basic) Cualquier expresión Char o String válida; sólo se convierte el primer carácter de
String; el valor puede estar comprendido entre 0 y 65535 (sin signo).

CDate Date (Tipo de datos, Visual Basic) Cualquier representación válida de fecha y hora.

CDbl Double (Tipo de datos, Visual Basic) de -1,79769313486231570E+308 a -4,94065645841246544E-324 para valores
negativos; de 4,94065645841246544E-324 a 1,79769313486231570E+308 par
a valores positivos.

CDec Decimal (Tipo de datos, Visual Basic) +/-79.228.162.514.264.337.593.543.950.335 para números a partir de cero, es d
ecir, números sin decimales. Para números con 28 posiciones decimales, el interv
alo es 
+/-7,9228162514264337593543950335. El menor número posible distint
o de cero es 0,0000000000000000000000000001 (+/-1E-28).

CInt Integer (Tipo de datos, Visual Basic) de -2.147.483.648 a 2.147.483.647; las partes fraccionarias se redondean.1

CLng Long (Tipo de datos, Visual Basic) de -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807; las partes fraccion
arias se redondean.1
CObj Object (Tipo de datos) Cualquier expresión válida.

CSByte SByte (Tipo de datos, Visual Basic) de -128 a 127; las partes fraccionarias se redondean.1

CShort Short (Tipo de datos, Visual Basic) de -32.768 a 32.767; las partes fraccionarias se redondean.1

CSng String (Tipo de datos, Visual Basic) De -3,402823E+38 a –1,401298E-45 para valores negativos; de 1,401298E-45 a
3,402823E+38 para valores positivos.

CStr String (Tipo de datos, Visual Basic) Los valores devueltos para CStr dependen del argumento expression. Vea
Valores devueltos para la función CStr.

CUInt UInteger (Tipo de datos) de 0 a 4.294.967.295 (sin signo); las partes fraccionarias se redondean.1

CULng ULong (Tipo de datos, Visual Basic) de 0 a 18.446.744.073.709.551.615 (sin signo); las partes fraccionarias se redond
ean.1

CUSho UShort (Tipo de datos, Visual Basic) de 0 a 65.535 (sin signo); las partes fraccionarias se redondean.1
rt

1 Las partes fraccionarias pueden estar sujetas a un tipo especial de redondeo denominado redondeo bancario. Vea
"Comentarios" para obtener más información.
Comentarios
Por regla general, debe utilizar preferentemente las funciones de conversión de tipos de Visual Basic que los métodos de .NET
Framework, como ToString(), en la clase Convert o en una clase o estructura individual de tipos. Las funciones de Visual Basic
se han diseñado para que interactúen de forma óptima con el código de Visual Basic; además hacen que el código fuente sea
más corto y fácil de leer. Asimismo, los métodos de conversión de .NET Framework no siempre producen los mismos
resultados que las funciones de Visual Basic, por ejemplo cuando se convierte de Boolean a Integer. Para obtener más
información, vea Solucionar problemas de tipos de datos.
Comportamiento
Conversión. En general, puede utilizar las funciones de conversión de tipos de datos para convertir el resultado de una
operación a un tipo de datos concreto en vez de al tipo de datos predeterminado. Por ejemplo, utilice CDec para forzar la
ejecución de operaciones con aritmética decimal en los casos en los que se haría con precisión simple, doble precisión o
aritmética de enteros.
Conversiones incorrectas. Si el argumento expression transferido a la función está fuera del intervalo de valores del
tipo de datos al que se va a convertir, se inicia una excepción OverflowException.
Partes fraccionarias. Cuando un valor no integral se convierte a un tipo integral, las funciones de conversión de enteros
(CByte, CInt, CLng, CSByte, CShort, CUInt, CULng y CUShort) eliminan la parte fraccionaria y redondean el valor al
entero más próximo.
Si la parte fraccionaria es exactamente 0,5, las funciones de conversión de enteros lo rodean al entero par más próximo.
Por ejemplo, 0,5 se redondea a 0, y 1,5 y 2,5 se redondean a 2. En ocasiones, esto se denomina redondeo bancario, y su
finalidad es compensar el margen de error que se pudiera acumular al sumar muchos números de este tipo.
CInt y CLng difieren de Int, Fix (Funciones, Visual Basic), que, en lugar de redondear, trunca la parte fraccionaria de un
número. Además, Fix e Int siempre devuelven un valor del mismo tipo de datos que reciben.
Conversiones de fecha y hora. Utilice IsDate (Función, Visual Basic) para determinar si un valor se puede convertir a
una fecha y hora. CDate reconoce literales de fecha y de hora, pero no valores numéricos. Para convertir un valor Date
de Visual Basic 6.0 en un valor Date de Visual Basic 2005, puede utilizar el método
System.DateTime.FromOADate(System.Double).
Valores de fecha u hora neutrales. El tipo de datos Date (Tipo de datos, Visual Basic) contiene siempre información de
fecha y hora. Para la conversión de tipos, Visual Basic considera 1/1/0001 (1 de enero del año 1) un valor neutral de
fecha y 00:00:00 (medianoche) un valor neutral de hora. Si se convierte un valor Date a una cadena, CStr no incluye
valores neutrales en la cadena resultante. Por ejemplo, si se convierte #January 1, 0001 9:30:00# en una cadena, el
resultado sería "9:30:00 a.m.", ya que la información de fecha se omite. No obstante, la información de fecha sigue
estando presente en el valor Date original y se puede recuperar mediante funciones como
DatePart (Función, Visual Basic).
Distinción de referencias culturales. Las funciones de conversión de tipos que implican cadenas realizan las
conversiones en función de la configuración de la referencia cultural actual de la aplicación. Por ejemplo, CDate reconoce
formatos de fecha de acuerdo con la configuración regional del sistema. Debe suministrar el día, mes y año en el orden
correcto para la configuración regional; de no hacerlo así, es posible que la fecha no se interprete de forma correcta. No
se puede reconocer un formato de fecha largo si contiene la cadena del día de la semana, por ejemplo “Miércoles”.
Si necesita convertir una representación de cadena de un valor en un formato diferente al especificado por la
configuración regional, no puede utilizar las funciones de conversión de tipos de Visual Basic. Para ello, utilice los
métodos ToString(IFormatProvider) y Parse(String, IFormatProvider) de ese tipo de valor. Por ejemplo, utilice
System.Double.Parse(System.String,System.IFormatProvider) cuando convierte una cadena a un valor de tipo Double y
utilice System.Double.ToString(System.IFormatProvider) cuando convierta un valor de tipo Double en una cadena.
CType (Función)
La función CType toma un segundo argumento, typename, y convierte expression en typename, donde typename puede ser
cualquier tipo de datos, estructura, clase o interfaz para la que exista una conversión válida.
Para una comparación de CType con otras palabras clave de conversión de tipos, vea DirectCast y TryCast.
Ejemplo de la función CBool
En este ejemplo se utiliza la función CBool para convertir expresiones en valores Boolean. Si una expresión se evalúa en un
valor distinto de cero, CBool devuelve True; en caso contrario, devuelve False.
VB
Dim a, b, c As Integer
Dim check As Boolean
a = 5
b = 5
' The following line of code sets check to True.
check = CBool(a = b)
c = 0
' The following line of code sets check to False.
check = CBool(c)

Ejemplo de la función CByte


En este ejemplo se utiliza la función CByte para convertir expresiones en Byte.
VB
Dim aDouble As Double
Dim aByte As Byte
aDouble = 125.5678
' The following line of code sets aByte to 126.
aByte = CByte(aDouble)

Ejemplo de la función CChar


En el ejemplo siguiente se utiliza la función CChar para convertir el primer carácter de una expresión String en un tipo Char.
VB
Dim aString As String
Dim aChar As Char
' CChar converts only the first character of the string.
aString = "BCD"
' The following line of code sets aChar to "B".
aChar = CChar(aString)

El argumento de entrada para CChar debe pertenecer al tipo de datos Char o String. No puede utilizar CChar para convertir
un número en un carácter, porque CChar no acepta un tipo de datos numéricos. En el ejemplo siguiente se obtiene un número
que representa un punto de código (código de carácter) y se convierte al carácter correspondiente. En el ejemplo se utiliza
InputBox (Función, Visual Basic) para obtener la cadena de dígitos, CInt para convertir la cadena en el tipo Integer y ChrW
para convertir el número en el tipo Char.
VB
Dim someDigits As String
Dim codePoint As Integer
Dim thisChar As Char
someDigits = InputBox("Enter code point of character:")
codePoint = CInt(someDigits)
' The following line of code sets thisChar to the Char value of codePoint.
thisChar = ChrW(codePoint)

Ejemplo de la función CDate


En este ejemplo se utiliza la función CDate para convertir cadenas en valores Date. En general, no se recomienda especificar
las fechas y horas como cadenas en el código, tal y como se puede ver en este ejemplo. Utilice literales de fecha y hora, por
ejemplo #Feb 12, 1969# y #4:45:233 p.m.#.
VB
Dim aDateString, aTimeString As String
Dim aDate, aTime As Date
aDateString = "February 12, 1969"
aTimeString = "4:35:47 PM"
' The following line of code sets aDate to a Date value.
aDate = CDate(aDateString)
' The following line of code sets aTime to Date value.
aTime = CDate(aTimeString)

Ejemplo de la función CDbl


VB
Dim aDec As Decimal
Dim aDbl As Double
' The following line of code uses the literal type character D to make aDec a Decimal.
aDec = 234.456784D
' The following line of code sets aDbl to 1.9225456288E+1.
aDbl = CDbl(aDec * 8.2D * 0.01D)

Ejemplo de la función CDec


En el siguiente ejemplo se utiliza la función CDec para convertir un valor numérico en Decimal.
VB
Dim aDouble As Double
Dim aDecimal As Decimal
aDouble = 10000000.0587
' The following line of code sets aDecimal to 10000000.0587.
aDecimal = CDec(aDouble)

Ejemplo de la función CInt


En este ejemplo se utiliza la función CInt para convertir un valor a Integer.
VB
Dim aDbl As Double
Dim anInt As Integer
aDbl = 2345.5678
' The following line of code sets anInt to 2346.
anInt = CInt(aDbl)

Ejemplo de la función CLng


En el ejemplo siguiente se utiliza la función CLng para convertir valores a Long.
VB
Dim aDbl1, aDbl2 As Double
Dim aLng1, aLng2 As Long
aDbl1 = 25427.45
aDbl2 = 25427.55
' The following line of code sets aLng1 to 25427.
aLng1 = CLng(aDbl1)
' The following line of code sets aLng2 to 25428.
aLng2 = CLng(aDbl2)

Ejemplo de la función CObj


En el siguiente ejemplo se utiliza la función CObj para convertir un valor numérico en Object. La variable Object en sí
contiene sólo un puntero de cuatro bytes, que señala al valor Double que tiene asignado.
VB
Dim aDouble As Double
Dim anObject As Object
aDouble = 2.7182818284
' The following line of code sets anObject to a pointer to aDouble.
anObject = CObj(aDouble)

Ejemplo de CSByte
En el siguiente ejemplo se utiliza la función CSByte para convertir un valor numérico en SByte.
VB
Dim aDouble As Double
Dim anSByte As SByte
aDouble = 39.501
' The following line of code sets anSByte to 40.
anSByte = CSByte(aDouble)

Ejemplo de la función CShort


En el siguiente ejemplo se utiliza la función CShort para convertir un valor numérico en Short.
VB
Dim aByte As Byte
Dim aShort As Short
aByte = 100
' The following line of code sets aShort to 100.
aShort = CShort(aByte)

Ejemplo de la función CSng


En el ejemplo siguiente se utiliza la función CSng para convertir valores a Single.
VB
Dim aDouble1, aDouble2 As Double
Dim aSingle1, aSingle2 As Single
aDouble1 = 75.3421105
aDouble2 = 75.3421567
' The following line of code sets aSingle1 to 75.34211.
aSingle1 = CSng(aDouble1)
' The following line of code sets aSingle2 to 75.34216.
aSingle2 = CSng(aDouble2)

Ejemplo de la función CStr


En el siguiente ejemplo se utiliza la función CStr para convertir un valor numérico en String.
VB
Dim aDouble As Double
Dim aString As String
aDouble = 437.324
' The following line of code sets aString to "437.324".
aString = CStr(aDouble)

En el ejemplo siguiente se utiliza la función CStr para convertir valores Date en valores String.
VB
Dim aDate As Date
Dim aString As String
' The following line of code generates a COMPILER ERROR because of invalid format.
' aDate = #February 12, 1969 00:00:00#
' Date literals must be in the format #m/d/yyyy# or they are invalid.
' The following line of code sets the time component of aDate to midnight.
aDate = #2/12/1969#
' The following conversion suppresses the neutral time value of 00:00:00.
' The following line of code sets aString to "2/12/1969".
aString = CStr(aDate)
' The following line of code sets the time component of aDate to one second past midnight.
aDate = #2/12/1969 12:00:01 AM#
' The time component becomes part of the converted value.
' The following line of code sets aString to "2/12/1969 12:00:01 AM".
aString = CStr(aDate)

CStr siempre representa un valor Date en el formato corto estándar de la configuración regional actual, por ejemplo,
"15/6/2003 4:35:47 p.m.". Sin embargo, CStr suprime los valores neutrales 1/1/0001 para la fecha y 00:00:00 para la hora.
Para obtener información detallada sobre los valores devueltos por CStr, vea Valores devueltos para la función CStr.
Ejemplo de CUInt
En el siguiente ejemplo se utiliza la función CUInt para convertir un valor numérico en UInteger.
VB
Dim aDouble As Double
Dim aUInteger As UInteger
aDouble = 39.501
' The following line of code sets aUInteger to 40.
aUInteger = CUInt(aDouble)

Ejemplo de CULng
En el siguiente ejemplo se utiliza la función CULng para convertir un valor numérico en ULong.
VB
Dim aDouble As Double
Dim aULong As ULong
aDouble = 39.501
' The following line of code sets aULong to 40.
aULong = CULng(aDouble)

Ejemplo de CUShort
En el siguiente ejemplo se utiliza la función CUShort para convertir un valor numérico en UShort.
VB
Dim aDouble As Double
Dim aUShort As UShort
aDouble = 39.501
' The following line of code sets aUShort to 40.
aUShort = CUShort(aDouble)

Vea también
Referencia
Funciones de conversión (Visual Basic)
Asc, AscW (Funciones)
Chr, ChrW (Funciones)
Int, Fix (Funciones, Visual Basic)
Format (Función)
Hex (Función, Visual Basic)
Oct (Función)
Str (Función)
Val (Función)
Otros recursos
Conversiones de tipos en Visual Basic
Referencia del lenguaje Visual Basic

Valores devueltos para la función CStr


En la tabla siguiente se describen los valores devueltos por la función CStr en varios tipos de expression.
Si el tipo de expression es CStr devuelve
Boolean (Tipo de datos, Visual Basic) Cadena que contiene "True" o "False".

Date (Tipo de datos, Visual Basic) Cadena que contiene un valor Date (fecha y hora) en el formato de fecha corta del sistem
a.

Tipos de datos numéricos Cadena que representa el número.


CStr y Date
El tipo Date siempre contiene información de fecha y hora. Para la conversión de tipos, Visual Basic considera 1/1/0001 (1 de
enero del año 1) como un valor neutral de la fecha y 00:00:00 (medianoche) como un valor neutral de hora. CStr no incluye
valores neutrales en la cadena de resultado. Por ejemplo, si se convierte #January 1, 0001 9:30:00# en una cadena, el
resultado sería "9:30:00 a.m.", ya que la información de fecha se omite. No obstante, la información de fecha sigue estando
presente en el valor Date original y se puede recuperar mediante funciones como DatePart (Función, Visual Basic).
Nota
La función CStr realiza su conversión basándose en la configuración de la referencia cultural actual de la aplicación. Para obt
ener la representación de cadena de un número en una referencia cultural determinada, utilice el método ToString(IFormat
Provider) del número. Por ejemplo, utilice System.Double.ToString(System.IFormatProvider) al convertir un valor de tipo D
ouble en String.

Vea también
Referencia
Funciones de conversión de tipos
Boolean (Tipo de datos, Visual Basic)
Date (Tipo de datos, Visual Basic)
DatePart (Función, Visual Basic)
Referencia del lenguaje Visual Basic

Funciones A-C
La siguiente tabla contiene una lista de las funciones miembro en tiempo de ejecución de Visual Basic.

AppActivate Asc AscW Beep

CallByName CBool CByte CChar

CDate CDbl CDec ChDir

ChDrive Choose Chr ChrW

CInt CLng CObj Command

CreateObject CShort CSng CStr

CType CurDir

Las funciones matemáticas Abs, Atn y Cos, que estaban disponibles como funciones miembro en tiempo de ejecución en la
versión 6.0 de Visual Basic y en versiones anteriores, se han reemplazado por métodos (Abs, Atan y Cos) de la biblioteca de
clases de .NET Framework Math. Para obtener más información, vea Funciones matemáticas (Visual Basic).
Notas para desarrolladores de dispositivos inteligentes
Las funciones siguientes no se admiten en aplicaciones de dispositivos inteligentes: AppActivate, Beep, CallByName, ChDir,
ChDrive, CreateObject y CurDir.
Vea también
Referencia
Funciones D-G
Funciones H-L
Funciones M-R
Funciones S-Z
Otros recursos
Referencia de Visual Basic
Referencia del lenguaje Visual Basic

AppActivate (Función)
Activa una aplicación que ya se está ejecutando.

Public Overloads Sub AppActivate( _


ByVal { Title As String | ProcessId As Integer } _
)

Parámetros
Title
Expresión String que especifica el título que aparecerá en la barra de título de la aplicación que se desea activar. Puede
utilizar el título que se asignó a la aplicación cuando se ésta se inició.
ProcessId
Valor Integer que especifica el número del identificador de proceso Win32 asignado a este proceso. Puede utilizar el Id.
devuelto por la Shell (Función), siempre que no sea cero.
Excepciones
Tipo de excepción Número de error Condición
ArgumentException 5 No se puede encontrar el valor de Title o el de ProcessId.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
Para colocar el foco en la ventana activa de una aplicación se utiliza AppActivate. Podría no tener un identificador o una
referencia a la ventana activa, o incluso no saber qué ventana está activa en un momento determinado. En ese caso, no se
puede utilizar el método Focus.
La función AppActivate cambia el foco a la aplicación o ventana que tiene ese nombre, independientemente de que esté
maximizada o minimizada. El foco se quita de la ventana de aplicación activada cuando el usuario ejecuta alguna acción para
cambiar el foco o cerrar la ventana. La función Shell se puede usar para iniciar una aplicación y establecer el estilo de la
ventana.
Si utiliza el parámetro Title, AppActivate utiliza una comparación sin distinción entre mayúsculas y minúsculas pero, por otro
lado, requiere una coincidencia exacta con el contenido de la barra de título. Primero pasa por las ventanas de nivel superior y,
a continuación, por las ventanas secundarias. Si no se encuentra ninguna coincidencia, inicia una ArgumentException.
Utilice AppActivate sólo con procesos que son propietarios de ventanas La mayor parte de las aplicaciones de consola no son
propietarias de ventanas, lo que significa que no aparecen en la lista de procesos que AppActivate busca. Al ejecutarse desde
una aplicación de consola, el sistema crea un proceso independiente para ejecutar la aplicación y devuelve el resultado al
proceso de consola. Por consiguiente, cuando se solicita el Id. de proceso actual, se obtiene el Id. de proceso de este proceso
independiente, en lugar del Id. de proceso de la aplicación de consola.
En tiempo de ejecución, la función AppActivate activa cualquier aplicación que esté en ejecución y su título sea igual al valor
de Title o tenga Id. de proceso igual al valor de ProcessId. Si no se da una correspondencia exacta, se activará cualquier
aplicación cuya cadena de título termine por Title. En caso de que haya más de una aplicación cuyo nombre sea el valor de
Title, la función AppActivate elige aleatoriamente cuál de ellas activar.
Nota
La función AppActivate requiere un permiso UIPermission del nivel SafeTopLevelWindows que podría afectar a su ejecuci
ón en situaciones de confianza parcial. Para obtener más información, vea Solicitar permisos y UIPermission (Clase).

Ejemplo
En este ejemplo se muestran los distintos usos de la función AppActivate para activar una ventana de aplicación. Si no se está
ejecutando un proceso del Bloc de notas, el ejemplo produce una ArgumentException. En el procedimiento Shell se supone
que las aplicaciones se encuentran en las rutas de acceso especificadas.
VB
Dim notepadID As Integer
' Activate a running Notepad process.
AppActivate("Untitled - Notepad")
' AppActivate can also use the return value of the Shell function.
' Shell runs a new instance of Notepad.
notepadID = Shell("C:\WINNT\NOTEPAD.EXE", AppWinStyle.NormalFocus)
' Activate the new instance of Notepad.
AppActivate(notepadID)

Notas para desarrolladores de dispositivos inteligentes


Esta función no es compatible.
Requisitos
Espacio de nombres:Microsoft.VisualBasic
Módulo: Interaction
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Shell (Función)
Focus
ArgumentException
Referencia del lenguaje Visual Basic

Asc, AscW (Funciones)


Devuelve un valor Integer que representa el código de carácter correspondiente a un carácter.

Public Overloads Function Asc(ByVal String As Char) As Integer


Public Overloads Function AscW(ByVal String As Char) As Integer
' -or-
Public Overloads Function Asc(ByVal String As String) As Integer
Public Overloads Function AscW(ByVal String As String) As Integer

Parámetros
String
Requerido. Cualquier expresión Char o String válida. Si String es una expresión String, sólo se utiliza el primer carácter de la
cadena para la entrada. Si String es Nothing o no contiene caracteres, se produce un error ArgumentException.
Excepciones
Tipo de excepción Número de error Condición
ArgumentException 9B07D280-66C6-4EA5-A8ED-5DDB0036F877 String está vacío o tiene longitud cero.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
Asc devuelve el punto de código, o código de carácter, del carácter de entrada. Pueden ser valores comprendidos entre 0 y 255
para el juego de caracteres de un solo byte (SBCS) y valores comprendidos entre –32768 y 32767 para el juego de caracteres
de doble byte (DBCS). Para gráficos de caracteres ASCII de un solo byte, vea Códigos de caracteres ASCII.
El valor devuelto depende de la página de códigos para el subproceso actual, que está en la propiedad ANSICodePage de la
clase TextInfo en el espacio de nombres System.Globalization. Puede obtener ANSICodePage especificando
System.Globalization.CultureInfo.CurrentCulture.TextInfo.ANSICodePage.

AscW devuelve el punto de código Unicode del carácter de entrada. Puede estar comprendido entre 0 y 65535. El valor
devuelto es independiente de la configuración de referencia cultural y página de códigos del subproceso actual.
Nota
La función AscB de versiones anteriores de Visual Basic devuelve un código para un byte, en lugar de un carácter. Se utiliza p
rincipalmente para convertir cadenas en aplicaciones de juegos de caracteres de doble byte (DBCS). En Visual Basic 2005, tod
as las cadenas están en Unicode y ya no se admite AscB.

Ejemplo
Este ejemplo utiliza la función Asc para devolver los códigos de carácter Integer (Tipo de datos, Visual Basic) correspondientes
a la primera letra de cada cadena.
VB
Dim codeInt As Integer
' The following line of code sets myInt to 65.
codeInt = Asc("A")
' The following line of code sets myInt to 97.
codeInt = Asc("a")
' The following line of code sets myInt to 65.
codeInt = Asc("Apple")

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Strings
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Chr, ChrW (Funciones)
Funciones de conversión (Visual Basic)
Funciones de conversión de tipos
Integer (Tipo de datos, Visual Basic)
System.Globalization
CultureInfo
ANSICodePage
ArgumentException
Otros recursos
Códigos de caracteres ASCII
Referencia del lenguaje Visual Basic

Beep (Función)
Emite un sonido por el altavoz del equipo.

Public Sub Beep()

Comentarios
El tono y la duración del sonido dependerán del hardware y del software del sistema, por lo que cambiarán de un equipo a
otro.
Nota
La función Beep requiere un permiso UIPermission del nivel SafeTopLevelWindows que podría afectar a su ejecución en sit
uaciones de confianza parcial. Para obtener más información, vea Solicitar permisos y UIPermission (Clase).

Ejemplo
En este ejemplo se utiliza la función Beep para emitir un sonido largo e ininterrumpido por el altavoz del equipo.
VB
Dim I As Integer
For I = 1 To 100 ' Loop 100 times.
Beep ' Sound a tone.
Next I

Notas para desarrolladores de dispositivos inteligentes


Esta función no es compatible.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Interaction
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Miembros de la biblioteca en tiempo de ejecución de Visual Basic
Otros recursos
Reproducir sonidos
Referencia del lenguaje Visual Basic

CallByName (Función)
Ejecuta un método en un objeto o establece o devuelve una propiedad en un objeto.

Public Function CallByName( _


ByVal ObjectRef As System.Object, _
ByVal ProcName As String, _
ByVal UseCallType As CallType, _
ByVal Args() As Object _
) As Object

Parámetros
ObjectRef
Requerido. Object. Puntero al objeto que expone la propiedad o el método.
ProcName
Requerido. String. Expresión de cadena que contiene el nombre de la propiedad o método en el objeto.
UseCallType
Requerido. Un miembro de enumeración de tipo CallType (Enumeración) que representa el tipo de procedimiento que se
llama. El valor de CallType puede ser Method, Get o Set.
Args
Opcional. ParamArray. Matriz de parámetros que contiene los argumentos que se van a transferir a la propiedad o método
al que se llama.
Excepciones
Tipo de excepción Número de error Condición
ArgumentException 9B07D280-66C6-4EA5-A8ED-5DDB0036F877 Valor UseCallType no válido; debe ser Method, Get o Set.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
La función CallByName se utiliza en tiempo de ejecución para obtener o establecer una propiedad, o bien para invocar un
método.
Ejemplo
En el siguiente ejemplo, en la primera línea se utiliza CallByName para establecer la propiedad Text de un cuadro de texto, en
la segunda línea se recupera el valor de la propiedad Text y en la tercera línea se llama al método Move para desplazar el
cuadro de texto.
VB
' Imports statements must be at the top of a module.
Imports Microsoft.VisualBasic.CallType

VB
Sub TestCallByName1()
'Set a property.
CallByName(TextBox1, "Text", CallType.Set, "New Text")
'Retrieve the value of a property.
MsgBox(CallByName(TextBox1, "Text", CallType.Get))
'Call a method.
CallByName(TextBox1, "Hide", CallType.Method)
End Sub

En el siguiente ejemplo, se utiliza la función CallByName para llamar a los métodos Add e Item de un objeto de la colección.
VB
Public Sub TestCallByName2()
Dim col As New Collection()
'Store the string "Item One" in a collection by
'calling the Add method.
CallByName(col, "Add", CallType.Method, "Item One")
'Retrieve the first entry from the collection using the
'Item property and display it using MsgBox().
MsgBox(CallByName(col, "Item", CallType.Get, 1))
End Sub

Notas para desarrolladores de dispositivos inteligentes


Esta función no es compatible.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Interaction
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
CallType (Enumeración)
ArgumentException Class
Conceptos
Matrices de parámetros
Llamar a una propiedad o método mediante un nombre de cadena
Referencia del lenguaje Visual Basic

ChDir (Función)
Cambia el directorio o carpeta actuales.
La característica My proporciona mayor productividad y rendimiento en las operaciones de E/S del archivo que si se utiliza la
función ChDir . Para obtener más información, vea My.Computer.FileSystem.CurrentDirectory (Propiedad)

Public Sub ChDir(ByVal Path As String)

Parámetros
Path
Requerido. Expresión String que determina qué directorio o carpeta se va a convertir en el nuevo directorio o la nueva
carpeta predeterminada. Path puede incluir la unidad. Si no se especifica ninguna unidad, ChDir cambia el directorio o la
carpeta predeterminada en la unidad actual.
Excepciones
Tipo de excepción Número de error Condición
ArgumentException D0E96AEA-7621-48F6-A78B-5D37D18AAA4E Path está vacío.

FileNotFoundException 644C45D5-4FFA-47E2-96DB-6C4D2D5AE815 Se ha especificado una unidad no válida o la unidad no


está disponible.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
La función ChDir cambia el directorio predeterminado, pero no la unidad predeterminada. Por ejemplo, si la unidad
predeterminada es C, la siguiente instrucción cambia el directorio predeterminado en la unidad D pero C permanece siendo la
unidad predeterminada:
VB
ChDir("D:\TMP")

Para realizar un cambio relativo de directorio se escriben dos puntos, como se indica a continuación:
VB
ChDir("..") ' Moves up one directory.

Nota de seguridad
La función ChDir requiere un permiso de código no administrado que puede afectar a su ejecución en situaciones de confian
za parcial. Para obtener más información, vea SecurityPermission (Clase) y Permisos de acceso a código.

Ejemplo
En este ejemplo, se utiliza la función ChDir para cambiar el directorio o la carpeta actual.
VB
' Change current directory or folder to "MYDIR".
ChDir("MYDIR")

' Assume "C:" is the current drive. The following statement changes
' the default directory on drive "D:". "C:" remains the current drive.
ChDir("D:\WINDOWS\SYSTEM")

Notas para desarrolladores de dispositivos inteligentes


Esta función no es compatible.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: FileSystem
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Tareas
Cómo: Analizar rutas de acceso a archivos en Visual Basic
Referencia
ChDrive (Función)
CurDir (Función)
Dir (Función)
MkDir (Función)
RmDir (Función)
ArgumentException Class
FileNotFoundException Class
Otros recursos
Crear, eliminar y mover archivos y directorios en Visual Basic
Referencia del lenguaje Visual Basic

ChDrive (Función)
Cambia la unidad actual.

Public Overloads Sub ChDrive(ByVal Drive As { Char | String })

Parámetros
Drive
Requerido. Expresión de cadena que especifica una unidad existente. Si se proporciona una cadena de longitud cero (""), la
unidad actual no cambia. Si el argumento Drive es una cadena con varios caracteres, ChDrive sólo utiliza la primera letra.
Excepciones
Tipo de excepci Número de error Condición
ón
IOException 9A89BEDA-140E-4B32-8D0A-2DC598EF279A Se ha especificado una unidad no válida o la unidad no está
disponible.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
La función ChDrive requiere un permiso de código no administrado que puede afectar a su ejecución en situaciones de
confianza parcial. Para obtener más información, vea SecurityPermission (Clase) y Permisos de acceso a código.
Ejemplo
En este ejemplo, se utiliza la función ChDrive para cambiar la unidad actual. La función produce una excepción si la unidad no
existe.
VB
ChDrive("D") ' Make "D" the current drive.

Notas para desarrolladores de dispositivos inteligentes


Esta función no es compatible.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: FileSystem
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
ChDir (Función)
CurDir (Función)
MkDir (Función)
RmDir (Función)
IOException Class
Otros recursos
Propiedades de archivos, directorios y unidades en Visual Basic
Referencia del lenguaje Visual Basic

Choose (Función)
Selecciona y devuelve un valor de una lista de argumentos.

Public Function Choose( _


ByVal Index As Double, _
ByVal ParamArray Choice() As Object _
) As Object

Parámetros
Index
Requerido. Double. Expresión numérica que da como resultado un valor entre 1 y el número de elementos transferidos en
el argumento Choice.
Choice
Requerido. Matriz de parámetros Object. Puede proporcionar una única variable o una expresión que devuelva el tipo de
datos Object, una lista de variables o expresiones separadas por comas Object o una matriz unidimensional de elementos
Object.
Comentarios
La función Choose devuelve un miembro de la lista pasada en Choice(), basándose en el valor de Index. El primer miembro de
la lista se selecciona cuando Index es 1. El último miembro de la lista se selecciona cuando Index es UBound (Choice()). Si
Index está fuera de estos límites, Choose devuelve Nothing.
Si Index no es un número entero, se redondeará al entero más cercano antes de su evaluación.
Puede utilizar la función Choose para buscar un valor en una lista de posibilidades.
Nota
Las expresiones de la lista de argumentos pueden incluir llamadas a funciones. Mientras prepara la lista de argumentos para
llamar a la función Choose, el compilador de Visual Basic llama a cada una de las funciones de todas las expresiones. Esto si
gnifica que no puede confiar en que no se esté llamando a una función concreta si se selecciona una expresión diferente med
iante Index.

Ejemplo
Este ejemplo utiliza la función Choose para mostrar un nombre como respuesta a un índice que se pasa al procedimiento en el
parámetro Ind.
VB
Function GetChoice(ByVal Ind As Integer) As String
GetChoice = CStr(Choose(Ind, "Speedy", "United", "Federal"))
End Function

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Interaction
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
IIf (Función)
Instrucción Select...Case (Visual Basic)
Switch (Función)
Referencia del lenguaje Visual Basic

Chr, ChrW (Funciones)


Devuelve el carácter asociado al código de carácter especificado.

Public Function Chr(ByVal CharCode As Integer) As Char


Public Function ChrW(ByVal CharCode As Integer) As Char

Parámetros
CharCode
Obligatorio. Expresión Integer que representa el punto de código (code point) o código de carácter del carácter. Si CharCode
está fuera del intervalo válido, aparece un error ArgumentException. El intervalo válido para Chr es de 0 a 255 y para ChrW,
de -32768 a 65535.
Excepciones
Tipo de excepción Número de error Condición
ArgumentException 5 CharCode < -32768 o > 65535 para ChrW.

ArgumentException 5 CharCode < 0 o > 255 para Chr.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
El intervalo asimétrico aceptado para CharCode compensa las diferencias de almacenamiento entre
Short (Tipo de datos, Visual Basic) e Integer (Tipo de datos, Visual Basic). Por ejemplo, -29183 es Short pero +36353 es
Integer. De este modo también se facilita la compatibilidad con Visual Basic 6.0.
Chr utiliza la clase Encoding del espacio de nombres System.Text para determinar si el subproceso actual está utilizando un
juego de caracteres de un solo byte (SBCS) o un juego de caracteres de doble byte (DBCS). Después utiliza como punto de
código el CharCode del juego correspondiente. El intervalo puede ser del 0 al 255 para caracteres SBCS y del -32768 al 65535
para caracteres DBCS. Para gráficos de caracteres ASCII de un solo byte, vea Códigos de caracteres ASCII.
El valor devuelto depende de la página de códigos para el subproceso actual, que está en la propiedad ANSICodePage de la
clase TextInfo en el espacio de nombres System.Globalization. Puede obtener ANSICodePage especificando
System.Globalization.CultureInfo.CurrentCulture.TextInfo.ANSICodePage.

ChrW utiliza CharCode como punto de código Unicode. El intervalo no depende de la configuración de referencia cultural y
página de códigos del subproceso actual. Los valores del -32768 al -1 se tratan igual que los valores del intervalo del +32768
al +65535.
Los números del 0 al 31 son los mismos que los códigos ASCII estándar no imprimibles. Por ejemplo, Chr(10) devuelve un
carácter de avance de línea.
Nota
La función ChrB en las versiones anteriores de Visual Basic devuelve un byte único. Se utiliza principalmente para convertir c
adenas en aplicaciones de juegos de caracteres de doble byte (DBCS). En Visual Basic y en .NET Framework, todas las cadena
s están en Unicode y ya no se admite ChrB.

Ejemplo
En el ejemplo siguiente se utiliza la función Chr para devolver el carácter asociado al código de carácter especificado.
VB
Dim associatedChar As Char
' Returns "A".
associatedChar = Chr(65)
' Returns "a".
associatedChar = Chr(97)
' Returns ">".
associatedChar = Chr(62)
' Returns "%".
associatedChar = Chr(37)

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Strings
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Resumen de manipulación de cadenas
Asc, AscW (Funciones)
Str (Función)
Funciones de conversión (Visual Basic)
Funciones de conversión de tipos
CultureInfo
ArgumentException
Otros recursos
Códigos de caracteres ASCII
Referencia del lenguaje Visual Basic

Command (Función)
Devuelve la parte del argumento de la línea de comandos utilizada para iniciar Visual Basic o algún programa ejecutable
desarrollado con Visual Basic.
La característica My proporciona mayor productividad y rendimiento que la función Command . Para obtener más
información, vea My.Application.CommandLineArgs (Propiedad).

Public Function Command() As String

Comentarios
Una vez devueltos los argumentos, puede buscar delimitadores habituales, como espacios, barras o barras inversas, guiones o
comillas, para dividir la cadena o buscar en ella parámetros individuales.
Con aplicaciones desarrolladas con Visual Basic y compiladas como un archivo .exe, la función Command devolverá todos los
argumentos que aparezcan en la línea de comandos tras el nombre de la aplicación, como se ve en este
ejemplo:MyApp(cmdlineargs).
Ejemplo
En este ejemplo se utiliza la función Command para devolver los argumentos de la línea de comandos de un objeto que
contiene una matriz.
VB
Function GetCommandLineArgs() As String()
' Declare variables.
Dim separators As String = " "
Dim commands As String = Microsoft.VisualBasic.Interaction.Command()
Dim args() As String = commands.Split(separators.ToCharArray)
Return args
End Function

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Interaction
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Miembros de la biblioteca en tiempo de ejecución de Visual Basic
Estructura de un programa de Visual Basic
Environment.GetCommandLineArgs Method
My.Application.CommandLineArgs (Propiedad)
Conceptos
Versión de Visual Basic del programa Hola a todos
Otros recursos
Compilador de Visual Basic
Referencia del lenguaje Visual Basic

CreateObject (Función, Visual Basic)


Crea y devuelve una referencia a un objeto COM. CreateObject no se puede utilizar para crear instancias de clases en Visual
Basic a menos que estas clases se expongan explícitamente como componentes COM.

Public Shared Function CreateObject( _


ByVal ProgId As String, _
Optional ByVal ServerName As String = "" _
) As Object

Parámetros
ProgId
Obligatorio. String. Identificador de programa del objeto que se va a crear.
ServerName
Opcional. String. Nombre del servidor de red en que se va a crear el objeto. Si ServerName es una cadena vacía (""), se
utiliza el equipo local.
Excepciones
Tipo de excepción Número Condición
de error
Exception 429 No se encuentra ProgId o no se ha suministrado.
O bien,
Se produce un error en la función DnsValidateName de ServerName, debido probablemente
a que su longitud supera los 63 caracteres o contiene un carácter no válido.

Exception 462 El servidor no está disponible.

FileNotFoundException 53 No existe ningún objeto del tipo especificado.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, debe considerarse la posibilidad de sustituir dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
Para crear una instancia de un componente COM, asigne el objeto devuelto por CreateObject a una variable de objeto:

Sub CreateADODB()
Dim adoApp As Object
adoApp = CreateObject("ADODB.Connection")
End Sub

El tipo de variable de objeto que utilice para almacenar el objeto devuelto puede afectar al rendimiento de la aplicación. La
declaración de una variable de objeto con la cláusula As Object crea una variable que puede contener una referencia a
cualquier tipo de objeto. Sin embargo, el acceso al objeto a través de esa variable se enlaza en tiempo de ejecución; es decir, el
enlace se produce cuando se ejecuta el programa. Existen muchas razones por las cuales se deben evitar los enlaces en tiempo
de ejecución, incluido el rendimiento más lento de la aplicación.
Puede crear una variable de objeto que se enlace en tiempo de compilación, es decir, el enlace se produce cuando se compila el
programa. Para ello, agregue una referencia a la biblioteca de tipos del objeto desde la ficha COM del cuadro de diálogo
Agregar referencia situado en el menú Proyecto. A continuación, declare la variable de objeto del tipo específico de su
objeto. En la mayoría de los casos, resulta más eficaz utilizar la instrucción Dim y un ensamblado de interoperabilidad primario
para crear objetos que usar la función CreateObject.
Interactuar con código no administrado
Otro problema es que los objetos COM utilizan código no administrado; es decir, código sin la ventaja de Common Language
Runtime. Mezclar el código administrado de Visual Basic con código no administrado de COM entraña cierta complejidad.
Cuando agrega una referencia a un objeto COM, Visual Basic busca un ensamblado de interoperabilidad primario para esa
biblioteca; si encuentra uno, lo utiliza. Si no lo encuentra, crea un ensamblado de interoperabilidad que contenga clases de
interoperabilidad local para cada clase de la biblioteca COM. Para obtener más información, vea
Interoperabilidad COM en aplicaciones .NET Framework.
Siempre que sea posible, se deben utilizar objetos con enlace seguro y ensamblados de interoperabilidad primarios. En los
ejemplos siguientes se utiliza la función CreateObject con objetos de Microsoft Office únicamente con fines demostrativos.
Sin embargo, estos objetos son más fáciles de utilizar y más confiables cuando se utilizan con el ensamblado de
interoperabilidad primario adecuado.
Crear un objeto en un equipo remoto
Puede crear un objeto en un equipo remoto de red; para ello, transfiera el nombre del equipo al argumento ServerName de la
función CreateObject. Ese nombre es el mismo que la parte del nombre del equipo de un recurso compartido: en un recurso
compartido denominado "\\MyServer\Public", ServerName sería "MyServer".
Nota
Consulte la documentación de COM (vea Microsoft Developer Network) para obtener información adicional sobre cómo hac
er que una aplicación sea accesible en un equipo de red remoto. Es posible que necesite agregar una clave de Registro para l
a aplicación.

El siguiente código devuelve el número de versión de una instancia de Excel que se ejecuta en un equipo remoto denominado
MyServer:

Sub CreateRemoteExcelObj()
Dim xlApp As Object
' Replace string "\\MyServer" with name of the remote computer.
xlApp = CreateObject("Excel.Application", "\\MyServer")
MsgBox(xlApp.Version)
End Sub

Si el nombre de servidor remoto es incorrecto, o si no está disponible, se produce un error en tiempo de ejecución.
Nota
Utilice CreateObject cuando no exista una instancia actual del objeto. Si ya se está ejecutando una instancia del objeto, se ini
ciará una nueva instancia y se creará un objeto del tipo especificado. Para utilizar la instancia actual o para iniciar la aplicació
n y hacer que cargue un archivo, utilice la función GetObject. Si un objeto se registró como un objeto de una única instancia,
sólo se creará una instancia del objeto, con independencia del número de veces que se ejecute CreateObject.

Crear objetos de marco de trabajo


Sólo puede utilizar la función CreateObject para crear un objeto COM. Aunque no existe un mecanismo equivalente exacto
para crear un objeto de .NET Framework, el control Activator del espacio de nombres System contiene métodos para crear
objetos locales y remotos. En particular, el método CreateInstance o el método CreateInstanceFrom podrían resultar útiles.
Nota de seguridad
La función CreateObject requiere permisos de código no administrado, lo que podría afectar a su ejecución en situaciones d
e confianza parcial. Para obtener más información, vea SecurityPermission y Permisos de acceso a código.

Ejemplo
En este ejemplo se utiliza la función CreateObject para crear una hoja de cálculo de Microsoft Excel y guardar la hoja en un
archivo. Para utilizar este ejemplo, Excel debe instalarse en el equipo en el que se ejecuta el programa. Además, debe agregar
una referencia a la biblioteca de tipos desde la ficha COM del cuadro de diálogo Agregar referencia situado en el menú
Proyecto. El nombre de la biblioteca de tipos variará en función de la versión de Excel instalada en el equipo. Por ejemplo, la
biblioteca de tipos de Microsoft Excel 2002 se denomina Biblioteca de objetos de Microsoft Excel 10.0.
VB
Sub TestExcel()
Dim xlApp As Microsoft.Office.Interop.Excel.Application
Dim xlBook As Microsoft.Office.Interop.Excel.Workbook
Dim xlSheet As Microsoft.Office.Interop.Excel.Worksheet

xlApp = CType(CreateObject("Excel.Application"), _
Microsoft.Office.Interop.Excel.Application)
xlBook = CType(xlApp.Workbooks.Add, _
Microsoft.Office.Interop.Excel.Workbook)
xlSheet = CType(xlBook.Worksheets(1), _
Microsoft.Office.Interop.Excel.Worksheet)

' The following statement puts text in the second row of the sheet.
xlSheet.Cells(2, 2) = "This is column B row 2"
' The following statement shows the sheet.
xlSheet.Application.Visible = True
' The following statement saves the sheet to the C:\Test.xls directory.
xlSheet.SaveAs("C:\Test.xls")
' Optionally, you can call xlApp.Quit to close the workbook.
End Sub

Notas para desarrolladores de dispositivos inteligentes


Esta función no es compatible.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Interaction
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
GetObject (Función, Visual Basic)
Instrucción Dim (Visual Basic)
Declare (Instrucción)
Exception
FileNotFoundException
Activator
CreateInstance
CreateInstanceFrom
Otros recursos
Interoperabilidad COM en aplicaciones .NET Framework
Interoperar con código no administrado
Referencia del lenguaje Visual Basic

CType (Función)
Devuelve el resultado de convertir explícitamente una expresión a un tipo de datos, objeto, estructura, clase o interfaz.

CType(expression, typename)

Partes
expression
Cualquier expresión válida. Si el valor de expression está fuera del intervalo permitido por typename, Visual Basic produce
una excepción.
typename
Cualquier expresión válida dentro de una cláusula As de una instrucción Dim, es decir, el nombre de cualquier tipo de datos,
objeto, estructura, clase o interfaz.
Comentarios
CType se compila en línea, es decir, el código de conversión forma parte del código que evalúa la expresión. En algunos casos,
no se produce ninguna llamada a un procedimiento para llevar a cabo la conversión, lo que acelera la ejecución.
Si no se ha definido ninguna conversión de expression a typename, por ejemplo de Integer a Date, Visual Basic muestra un
mensaje de error de compilación.
Si en una conversión se produce un error en tiempo de ejecución, se produce la excepción correspondiente. Si se produce un
error en una conversión de restricción, OverflowException es el resultado más común. Si la conversión es indefinida, se
produce una excepción InvalidCastException. Esto puede pasar, por ejemplo, si expression es de tipo Object y su tipo en
tiempo de ejecución no tiene ninguna conversión a typename.
Si el tipo de datos de expression o typename es una clase o estructura que ha definido, puede definir CType en dicha clase o
estructura como un operador de conversión. Esto hace que CType actúe como un operador sobrecargado. De este modo,
puede controlar el comportamiento de las conversiones que tienen como destino o como origen la clase o estructura, incluidas
las excepciones que se pueden producir.
Sobrecarga
El operador CType también se puede sobrecargar en una clase o la estructura definida fuera del código. Si el código realiza
conversiones que tienen como destino o como origen una clase o estructura de este tipo, asegúrese de conocer el
comportamiento de su operador CType. Para obtener más información, vea Procedimientos de operador.
Ejemplo
En el ejemplo siguiente se utiliza la función CType para convertir una expresión al tipo de datos especificado.
VB
Dim testNumber As Long = 1000
' The following line of code sets testNewType to 1000.0.
Dim testNewType As Single = CType(testNumber, Single)

Vea también
Tareas
Cómo: Definir un operador de conversión
Referencia
Funciones de conversión de tipos
Funciones de conversión (Visual Basic)
Operator (Instrucción)
OverflowException
InvalidCastException
Referencia del lenguaje Visual Basic

CurDir (Función)
Devuelve una cadena que representa la ruta actual.
My.Computer.FileSystem (Objeto) proporciona mayor productividad y rendimiento en las operaciones de E/S del archivo que
si se utiliza CurDir. Para obtener más información, vea My.Computer.FileSystem.CurrentDirectory (Propiedad).

Public Overloads Function CurDir([ ByVal Drive As Char ]) As String

Parámetros
Drive
Opcional. Expresión Char que especifica una unidad existente. Si no se especifica ninguna unidad o si Drive es una cadena de
longitud cero (""), CurDir devuelve la ruta de acceso de la unidad actual.
Excepciones
Tipo de excepción Número de error Condición
IOException 9A89BEDA-140E-4B32-8D0A-2DC598EF279A No se ha encontrado Drive.

ArgumentException 9A89BEDA-140E-4B32-8D0A-2DC598EF279A Se ha especificado un valor no válido para Drive.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
Esta función devuelve una cadena que representa la ruta actual.
Ejemplo
En este ejemplo, se utiliza la función CurDir para devolver la ruta de acceso actual.
VB
' Assume current path on C drive is "C:\WINDOWS\SYSTEM".
' Assume current path on D drive is "D:\EXCEL".
' Assume C is the current drive.
Dim MyPath As String
MyPath = CurDir() ' Returns "C:\WINDOWS\SYSTEM".
MyPath = CurDir("C"c) ' Returns "C:\WINDOWS\SYSTEM".
MyPath = CurDir("D"c) ' Returns "D:\EXCEL".

Notas para desarrolladores de dispositivos inteligentes


Esta función no es compatible.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: FileSystem
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
ChDir (Función)
ChDrive (Función)
MkDir (Función)
RmDir (Función)
IOException Class
ArgumentException Class
Referencia del lenguaje Visual Basic

Funciones D-G
La siguiente tabla contiene una lista de funciones miembro en tiempo de ejecución de Visual Basic.

DateAdd DateDiff DatePart DateSerial

DateValue Day DDB DeleteSetting

Derived Math Dir Environ EOF

ErrorToString FileAttr FileClose FileCopy

FileDateTime FileGet FileGetObject FileLen

FileOpen FilePut FilePutObject FileWidth

Filter Fix Format FormatCurrency

FormatDateTime FormatNumber FormatPercent FreeFile

FV GetAllSettings GetAttr GetChar

GetException GetObject GetSetting

La función matemática Exp disponible como una función miembro en tiempo de ejecución de Visual Basic en la versión 6.0 y
anterior se ha reemplazado por un método (Exp) en la clase Math de la biblioteca de clases .NET Framework. Para obtener más
información, vea Funciones matemáticas (Visual Basic).
Notas para desarrolladores de dispositivos inteligentes
Los siguientes elementos no se admiten en las aplicaciones de dispositivos inteligentes: DeleteSetting, Dir, Environ, EOF,
FileAttr, FileClose, FileCopy, FileDateTime, FileGet, FileGetObject, FileLen, FileOpen, FilePut, FilePutObject, FileWidth,
FreeFile, GetAllSettings, GetAttr, GetObject y GetSetting.
Vea también
Referencia
Funciones A-C
Funciones H-L
Funciones M-R
Funciones S-Z
Otros recursos
Referencia de Visual Basic
Referencia del lenguaje Visual Basic

DateAdd (Función, Visual Basic)


Devuelve un valor de tipo Date que contiene un valor de fecha y hora al que se ha agregado un intervalo de tiempo
especificado.

Public Overloads Function DateAdd( _


ByVal Interval As DateInterval, _
ByVal Number As Double, _
ByVal DateValue As DateTime _
) As DateTime
' -or-
Public Overloads Function DateAdd( _
ByVal Interval As String, _
ByVal Number As Double, _
ByVal DateValue As Object _
) As DateTime

Parámetros
Interval
Obligatorio. Valor de enumeración DateInterval o expresión String que representa el intervalo de tiempo que se desea
agregar.
Number
Obligatorio. Double. Expresión de punto flotante que representa el número de intervalos que se desea agregar. Number
puede ser un valor positivo (para obtener fechas u horas futuras) o negativo (para obtener fechas u horas pasadas). Se omite
cualquier fracción de Number.
DateValue
Obligatorio. Date. Expresión que representa la fecha y la hora a las que se debe agregar el intervalo. No se cambia
DateValue en el programa de llamada.
Valores
El argumento Interval puede tener uno de los siguientes valores:
Valor de enumeración Cadena Unidad de intervalo de tiempo agregada
DateInterval.Day d Día; truncado al valor integral

DateInterval.DayOfYear y Día; truncado al valor integral

DateInterval.Hour h Hora; truncada al valor integral

DateInterval.Minute n Minuto; truncado al valor integral

DateInterval.Month m Mes; truncado al valor integral

DateInterval.Quarter q Trimestre; truncado al valor integral

DateInterval.Second s Segundo; truncado al valor integral

DateInterval.Weekday w Día; truncado al valor integral

DateInterval.WeekOfYear ww Semana; truncada al valor integral

DateInterval.Year yyyy Año; truncado al valor integral


Excepciones
Tipo de excepción Número d Condición
e error
InvalidCastException 13 DateValue no es convertible en Date.

ArgumentException 5 El intervalo no es válido.

ArgumentOutOfRangeException 9 La fecha calculada es anterior a las 00:00:00 horas del 1 de enero del año 1 o post
erior a las 23:59:59 del 31 de diciembre de 9999.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
Se puede utilizar la función DateAdd para agregar o sustraer un intervalo de tiempo especificado de una fecha. Por ejemplo,
se puede calcular una fecha 30 días posterior al día de hoy o una hora 45 minutos anterior a la actual.
Para agregar días a DateValue, puede utilizar DateInterval.Day, DateInterval.DayOfYear o DateInterval.Weekday. Éstos
se tratan como equivalentes porque DayOfYear y Weekday no son intervalos de tiempo significativos.
La función DateAdd nunca devuelve una fecha no válida. Si es necesario, la parte del día de la fecha resultante se ajusta en
sentido descendente hasta el último día del mes resultante del año resultante. En el ejemplo siguiente se agrega un mes al 31
de enero:

Dim NextMonth As Date = DateAdd(DateInterval.Month, 1, #1/31/1995#)

En este ejemplo, DateAdd devuelve #2/28/1995#, no #2/31/1995#. Si DateValue es #1/31/1996#, devuelve #2/29/1996#
porque 1996 es un año bisiesto.
Nota
DateAdd utiliza la configuración de calendario actual de la propiedad CurrentCulture de la clase CultureInfo en el espacio de
nombres System.Globalization. Los valores de CurrentCulture predeterminados están determinados por la configuración de
l Panel de control.

Puesto que todos los valores Date se basan en una estructura DateTime, sus métodos proporcionan opciones adicionales para
agregar intervalos de tiempo. Por ejemplo, se puede agregar a la variable Date un número decimal de días, redondeado al
milisegundo más cercano, del siguiente modo:

Dim NextTime As Date = Now ' Current date and time.


NextTime = NextTime.AddDays(3.4) ' Increment by 3 2/5 days.

Ejemplo
En este ejemplo se toma una fecha y mediante la función DateAdd, se muestra la fecha correspondiente un número
especificado de meses en el futuro.
VB
Dim Msg, Number, StartDate As String 'Declare variables.
Dim Months As Double
Dim SecondDate As Date
Dim IntervalType As DateInterval
IntervalType = DateInterval.Month ' Specifies months as interval.
StartDate = InputBox("Enter a date")
SecondDate = CDate(StartDate)
Number = InputBox("Enter number of months to add")
Months = Val(Number)
Msg = "New date: " & DateAdd(IntervalType, Months, SecondDate)
MsgBox(Msg)
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: DateAndTime
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
DateDiff (Función, Visual Basic)
DatePart (Función, Visual Basic)
Day (Función, Visual Basic)
Format (Función)
Now (Propiedad)
Weekday (Función, Visual Basic)
Year (Función, Visual Basic)
Date (Tipo de datos, Visual Basic)
System
Referencia del lenguaje Visual Basic

DateDiff (Función, Visual Basic)


Devuelve un valor Long que especifica el número de intervalos de tiempo entre dos valores Date.

Public Overloads Function DateDiff( _


ByVal Interval As [ DateInterval | String ], _
ByVal Date1 As DateTime, _
ByVal Date2 As DateTime, _
Optional ByVal DayOfWeek As FirstDayOfWeek = FirstDayOfWeek.Sunday, _
Optional ByVal WeekOfYear As FirstWeekOfYear = FirstWeekOfYear.Jan1 _
) As Long

Parámetros
Interval
Obligatorio. Valor de enumeración DateInterval o expresión String que representa el intervalo de tiempo que se desea
utilizar como unidad de diferencia entre Date1 y Date2.
Date1
Obligatorio. Date. Primer valor de fecha u hora que se desea utilizar en el cálculo.
Date2
Obligatorio. Date. Segundo valor de fecha u hora que se desea utilizar en el cálculo.
DayOfWeek
Opcional. Un valor elegido de la enumeración FirstDayOfWeek que especifica el primer día de la semana. Si no se
especifica, se utiliza FirstDayOfWeek.Sunday.
WeekOfYear
Opcional. Un valor elegido de la enumeración FirstWeekOfYear que especifica la primera semana del año. Si no se
especifica, se utiliza FirstWeekOfYear.Jan1.
Configuración
El argumento Interval puede tener uno de los siguientes valores:
Valor de enumeración Valor String Unidad de diferencia temporal
DateInterval.Day "d" Día

DateInterval.DayOfYear "y" Día

DateInterval.Hour "h" Hora

DateInterval.Minute "n" Minuto

DateInterval.Month "m" Mes

DateInterval.Quarter "q" Trimestre

DateInterval.Second "s" Segundo

DateInterval.Weekday "w" Semana

DateInterval.WeekOfYear "ww" Semana del calendario

DateInterval.Year "yyyy" Año


El argumento DayOfWeek puede tener uno de los siguientes valores:
Valor de enumeración Valor Descripción
FirstDayOfWeek.System 0 Primer día de la semana especificado en la configuración del sistema

FirstDayOfWeek.Sunday 1 Domingo (predeterminado)

FirstDayOfWeek.Monday 2 Lunes (de acuerdo con la norma ISO 8601, sección 3.17)

FirstDayOfWeek.Tuesday 3 Martes

FirstDayOfWeek.Wednesday 4 Miércoles

FirstDayOfWeek.Thursday 5 Jueves

FirstDayOfWeek.Friday 6 Viernes

FirstDayOfWeek.Saturday 7 Sábado

El argumento WeekOfYear puede tener uno de los siguientes valores:


Valor de enumeración Val Descripción
or
FirstWeekOfYear.System 0 Primera semana del año especificada en la configuración del sistema

FirstWeekOfYear.Jan1 1 Semana en la que se encuentra el 1 de enero (predeterminado)

FirstWeekOfYear.FirstFour 2 Semana que contiene al menos cuatro días del nuevo año (de acuerdo con la norma ISO 86
Days 01, sección 3.17)

FirstWeekOfYear.FirstFull 3 Primera semana completa del nuevo año


Week
Excepciones
Tipo de excepción Número de error Condición
ArgumentException 5 Interval no válido.

ArgumentException 5 Date1, Date2 o DayofWeek está fuera del intervalo.

InvalidCastException 13 Date1 o Date2 pertenece a un tipo no válido.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, debe considerarse la posibilidad de sustituir dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
Se puede utilizar la función DateDiff para determinar el número de intervalos de tiempo especificados que existen entre dos
valores de fecha u hora. Por ejemplo, con DateDiff podría calcular el número de días entre dos fechas o el número de
semanas entre hoy y el último día del año.
Comportamiento
Tratamiento de Parámetros. DateDiff resta el valor de Date1 del valor de Date2 para generar la diferencia. Ninguno
de los dos valores se modifica en el programa que realiza la llamada.
Valores devueltos. Como Date1 y Date2 pertenecen al tipo de datos Date, albergan valores precisos de fecha y hora en
pasos de 100 nanosegundos en el temporizador del sistema. Sin embargo, DateDiff siempre devuelve el número de
intervalos de tiempo como un valor Long.
Si Date1 representa una fecha y hora posterior a Date2, DateDiff devuelve un valor negativo.
Intervalos de días. Si Interval se establece en DateInterval.DayOfYear, se trata del mismo modo que
DateInterval.Day, porque DayOfYear no es una unidad significativa para un intervalo de tiempo.
Intervalos de semanas. Si Interval se establece en DateInterval.WeekOfYear, el valor devuelto representa el número
de semanas entre el primer día de la semana que contiene Date1 y el primer día de la semana que contiene Date2. En el
ejemplo siguiente se muestra cómo este procedimiento genera resultados distintos en DateInterval.Weekday.
VB
' The following statements set datTim1 to a Thursday
' and datTim2 to the following Tuesday.
Dim datTim1 As Date = #1/4/2001#
Dim datTim2 As Date = #1/9/2001#
' Assume Sunday is specified as first day of the week.
Dim wD As Long = DateDiff(DateInterval.Weekday, datTim1, datTim2)
Dim wY As Long = DateDiff(DateInterval.WeekOfYear, datTim1, datTim2)

En el ejemplo anterior, DateDiff devuelve 0 a wD porque la diferencia entre las dos fechas es inferior a siete días, pero
devuelve 1 a wY porque hay una diferencia de siete días entre los primeros días de las respectivas semanas del
calendario.
Precaución
Cuando la parte correspondiente a la hora de Date1 es mayor que la de Date2 e Interval se establece en DateInterval.
WeekOfYear, la función DateDiff devuelve un valor que es uno menos que el valor correcto.

Intervalos mayores. Si Interval se establece en DateInterval.Year, el valor devuelto se calcula simplemente a partir de
las partes del año de Date1 y Date2. Del mismo modo, el valor devuelto para DateInterval.Month se calcula
simplemente a partir de las partes del año y del mes de los argumentos, y para DateInterval.Quarter a partir de los
trimestres que contienen las dos fechas.
Por ejemplo, al comparar 31 de diciembre con 1 de enero del año siguiente, DateDiff devuelve 1 para
DateInterval.Year, DateInterval.Quarter o DateInterval.Month, aunque únicamente haya transcurrido como mucho
un solo día.
Otros intervalos. Como todos los valores Date se basan en una estructura DateTime, sus métodos proporcionan
opciones adicionales para buscar intervalos de tiempo. Por ejemplo, puede utilizar el método Subtract en cualquiera de
sus formas sobrecargadas: System.DateTime.Subtract(System.TimeSpan) resta TimeSpan de una variable Date para
devolver otro valor Date, y System.DateTime.Subtract(System.DateTime) resta un valor Date para devolver TimeSpan.
Se puede cronometrar un proceso para saber cuántos milisegundos tardará, como en el caso siguiente:
VB
Dim startTime As Date = Now
' Run the process that is to be timed.
Dim runLength As Global.System.TimeSpan = Now.Subtract(startTime)
Dim millisecs As Integer = runLength.Milliseconds

Ejemplo
En este ejemplo se utiliza la función DateDiff para mostrar el número de días entre una fecha dada y la fecha actual.
VB
Dim firstDate, msg As String
Dim secondDate As Date
firstDate = InputBox("Enter a date")
secondDate = CDate(firstDate)
msg = "Days from today: " & DateDiff(DateInterval.Day, Now, secondDate)
MsgBox(msg)

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: DateAndTime
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
DateAdd (Función, Visual Basic)
DatePart (Función, Visual Basic)
Day (Función, Visual Basic)
Format (Función)
Now (Propiedad)
Weekday (Función, Visual Basic)
Year (Función, Visual Basic)
Date (Tipo de datos, Visual Basic)
DateTime
TimeSpan
Referencia del lenguaje Visual Basic

DatePart (Función, Visual Basic)


Devuelve un valor Integer que contiene el componente especificado de un valor Date dado.

Public Overloads Function DatePart( _


ByVal Interval As DateInterval, _
ByVal DateValue As DateTime, _
Optional ByVal FirstDayOfWeekValue As FirstDayOfWeek = VbSunday, _
Optional ByVal FirstWeekOfYearValue As FirstWeekOfYear = VbFirstJan1 _
) As Integer
' -or-
Public Overloads Function DatePart( _
ByVal Interval As String, _
ByVal DateValue As Object, _
Optional ByVal DayOfWeek As FirstDayOfWeek = FirstDayOfWeek.Sunday, _
Optional ByVal WeekOfYear As FirstWeekOfYear = FirstWeekOfYear.Jan1 _
) As Integer

Parámetros
Interval
Requerido. Valor de enumeración DateInterval o expresión String que representa la parte del valor de fecha u hora que se
desea devolver.
DateValue
Requerido. Valor de tipo Date que se desea evaluar.
FirstDayOfWeekValue DayOfWeek
Opcional. Un valor elegido de la enumeración FirstDayOfWeek que especifica el primer día de la semana. Si no se
especifica, se utiliza FirstDayOfWeek.Sunday.
FirstWeekOfYearValue WeekOfYear
Opcional. Valor elegido de la enumeración FirstWeekOfYear que especifica la primera semana del año. Si no se especifica,
se utiliza FirstWeekOfYear.Jan1.
Valores
El argumento Interval puede tener uno de los siguientes valores:
Valor de enumeración Cadena Parte del valor de fecha u hora devuelta
DateInterval.Day d Día del mes (del 1 al 31)

DateInterval.DayOfYear y Día del año (del 1 al 366)

DateInterval.Hour h Hora

DateInterval.Minute n Minuto

DateInterval.Month m Mes

DateInterval.Quarter q Trimestre

DateInterval.Second s Segundo

DateInterval.Weekday w Día de la semana (del 1 al 7)

DateInterval.WeekOfYear ww Semana del año (de la 1 a la 53)


DateInterval.Year yyyy Año

El argumento FirstDayOfWeekValue puede tener uno de los siguientes valores:


Valor de enumeración Valor Descripción
FirstDayOfWeek.System Primer día de la semana especificado en la configuración del sistema

FirstDayOfWeek.Sunday Domingo (predeterminado)

FirstDayOfWeek.Monday Lunes (de acuerdo con la norma ISO 8601, sección 3.17)

FirstDayOfWeek.Tuesday Martes

FirstDayOfWeek.Wednesday Miércoles

FirstDayOfWeek.Thursday Jueves

FirstDayOfWeek.Friday Viernes

FirstDayOfWeek.Saturday Sábado

El argumento FirstWeekOfYearValue puede tener uno de los siguientes valores:


Valor de enumeración Val Descripción
or
FirstWeekOfYear.System Primera semana del año especificada en la configuración del sistema

FirstWeekOfYear.Jan1 Semana en la que se encuentra el 1 de enero (predeterminado)

FirstWeekOfYear.FirstFour Semana que contiene al menos cuatro días del nuevo año (de acuerdo con la norma ISO 86
Days 01, sección 3.17)

FirstWeekOfYear.FirstFull Primera semana completa del nuevo año


Week
Excepciones
Tipo de excepción Número de error Condición
ArgumentException 9B07D280-66C6-4EA5-A8ED-5DDB0036F877 Interval no es válido.

InvalidCastException F72E9E21-F475-43F2-9464-29C8AD27B6C2 DateValue no está establecido en Date.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
Se puede utilizar la función DatePart para evaluar un valor de fecha u hora y devolver un componente específico. Por ejemplo,
se podría utilizar DatePart para calcular el día de la semana o la hora actual.
Si elige DateInterval.Weekday para el argumento Interval, el valor devuelto es coherente con los valores de la enumeración
FirstDayOfWeek. Si elige DateInterval.WeekOfYear, DatePart utiliza las clases Calendar y CultureInfo del espacio de
nombres System.Globalization para determinar la configuración actual.
El argumento FirstDayOfWeekValue afecta a los cálculos que utilizan la configuración DateInterval.Weekday y
DateInterval.WeekOfYear en Interval. El argumento FirstWeekOfYearValue afecta a los cálculos que especifican
DateInterval.WeekOfYear en Interval.
Puesto que todos los valores Date se basan en una estructura DateTime, sus métodos proporcionan opciones adicionales para
recuperar partes de fecha u hora. Por ejemplo, se puede obtener el valor de fecha completo de una variable Date, con el valor
de hora establecido en medianoche, como se muestra a continuación:

Dim CurrDatTim As Date = Now ' Current date and time.


Dim LastMidnight As Date = CurrDatTim.Date ' At midnight.

Ejemplo
En este ejemplo se utiliza la función DatePart sobre una fecha para mostrar el trimestre del año en que se produce.
VB
Dim FirstDate, Msg As String 'Declare variables.
Dim SecondDate As Date
FirstDate = InputBox("Enter a date:")
SecondDate = CDate(FirstDate)
Msg = "Quarter: " & DatePart(DateInterval.Quarter, SecondDate)
MsgBox(Msg)

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: DateAndTime
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
DateAdd (Función, Visual Basic)
DateDiff (Función, Visual Basic)
Day (Función, Visual Basic)
Format (Función)
Now (Propiedad)
Weekday (Función, Visual Basic)
Year (Función, Visual Basic)
Date (Tipo de datos, Visual Basic)
System
Referencia del lenguaje Visual Basic

DateSerial (Función, Visual Basic)


Devuelve un valor Date que representa un año, mes y día específicos, con la información de la hora establecida en
medianoche (00:00:00).

Public Function DateSerial( _


ByVal [Year] As Integer, _
ByVal [Month] As Integer, _
ByVal [Day] As Integer _
) As DateTime

Parámetros
Year
Obligatorio. Expresión Integer entre 1 y 9999. Sin embargo, los valores por debajo de este intervalo también se aceptan. Si
Year está entre 0 y 99, se interpreta como si estuviera entre 1930 y 2029, tal y como se explica en la sección "Comentarios"
que aparece a continuación. Si Year es menor que 1, se sustrae del año actual.
Month
Obligatorio. Expresión Integer entre 1 y 12. Sin embargo, los valores fuera de este intervalo también se aceptan. El valor de
Month tiene un desplazamiento de 1 y se aplica al mes de enero del año calculado. En otras palabras, (Month - 1) se agrega
al mes de enero. Si es necesario, se vuelve a calcular el año. Los resultados siguientes ilustran este efecto:
Si Month es 1, el resultado es el mes de enero del año calculado.
Si Month es 0, el resultado es el mes de diciembre del año anterior.
Si Month es -1, el resultado es el mes de noviembre del año anterior.
Si Month es 13, el resultado es el mes de enero del año siguiente.
Day
Obligatorio. Expresión Integer entre 1 y 31. Sin embargo, los valores fuera de este intervalo también se aceptan. El valor de
Day tiene un desplazamiento de 1 y se aplica al primer día del mes calculado. En otras palabras, (Day - 1) se agrega al primer
día del mes. Si es necesario, se vuelven a calcular el mes y el año. Los resultados siguientes ilustran este efecto:
Si Day es 1, el resultado es el primer día del mes calculado.
Si Day es 0, el resultado es el último día del mes anterior.
Si Day es -1, el resultado es el penúltimo día del mes anterior.
Si Day pasa del final del mes actual, el resultado es el día adecuado del mes siguiente. Por ejemplo, si Month es 4 y Day
es 31, el resultado es el día 1 de mayo.
Comentarios
En Windows 98 o Windows 2000, los años de dos dígitos para el argumento Year se interpretan de acuerdo con la
configuración del equipo definida por el usuario. La configuración predeterminada es que los valores entre 0 y 29 se
interpretan como los años 2000–2029, y los valores entre 30 y 99 como los años 1930–1999. Para los demás argumentos de
Year se utiliza un año de cuatro dígitos, por ejemplo, 1924.
Las versiones anteriores de Windows interpretan los años de dos dígitos de acuerdo con los valores predeterminados
descritos anteriormente. Para estar seguro de que la función devuelve el valor adecuado, utilice un valor Year de cuatro dígitos.
El siguiente ejemplo muestra valores de argumento negativo, cero y positivo. Aquí, la función DateSerial devuelve un valor
Date que representa el día antes del primer día de marzo del año que es 10 años anterior al año actual; en otras palabras, el
último día de febrero de hace diez años.

Dim EndFeb As Date = DateSerial(-10, 3, 0)

Si Month o Day excede de su intervalo normal, se aplica a la siguiente unidad mayor, como sea adecuado. Por ejemplo, si
especifica 32 días, se evalúa como un mes y entre uno y cuatro días, dependiendo del valor de Month. Si Year es mayor que
9999, o si cualquier argumento está fuera del intervalo entre -2.147.483.648 y 2.147.483.647, se produce un error
ArgumentException. Si la fecha especificada por los tres argumentos es anterior a las 00:00:00 del día 1 de enero del año 1, o
posterior a las 23:59:59 del 31 de diciembre del año 9999, se produce un error ArgumentOutOfRangeException.
El tipo de datos Date incluye componentes de fecha y hora. DateSerial los establece todos en 0, de tal forma que el valor
devuelto representa el principio del día calculado.
Puesto que todos los valores Date se basan en una estructura DateTime, sus métodos proporcionan opciones adicionales para
ensamblar un valor Date. Por ejemplo, se puede utilizar uno de los constructores DateTime sobrecargados para rellenar una
variable Date que utilice la combinación de componentes deseada. El ejemplo siguiente establece NewDateTime en 6 de mayo
de 1978, a una décima de segundo antes de las 8:30 de la mañana:

Dim NewDateTime As Date = New Date(1978, 5, 6, 8, 29, 59, 900)

Ejemplo
En este ejemplo se utiliza la función DateSerial para devolver una fecha para el año, mes y día especificados.
VB
Dim MyDate As Date
' MyDate contains the date for February 12, 1969.
MyDate = DateSerial(1969, 2, 12) ' Return a date.

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: DateAndTime
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
DateValue (Función, Visual Basic)
Day (Función, Visual Basic)
Month (Función, Visual Basic)
Now (Propiedad)
TimeSerial (Función, Visual Basic)
TimeValue (Función, Visual Basic)
Weekday (Función, Visual Basic)
Year (Función, Visual Basic)
Date (Tipo de datos, Visual Basic)
System
Referencia del lenguaje Visual Basic

DateValue (Función, Visual Basic)


Devuelve un valor Date que contiene información sobre la fecha representada por una cadena, con la información sobre la
hora establecida en medianoche (00:00:00).

Public Function DateValue(ByVal StringDate As String) As DateTime

Parámetros
StringDate
Obligatorio. Expresión String que representa un valor de fecha u hora desde las 00:00:00 del 1 de enero del año 1 hasta las
23:59:59 del 31 de diciembre de 9999.
Excepciones
Tipo de excepción Número de error Condición
InvalidCastException 13 StringDate incluye información de hora no válida.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, debe considerarse la posibilidad de sustituir dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
Si StringDate sólo incluye números comprendido entre 1 y 12 separados mediante separadores de fecha válidos, DateValue
reconoce el orden del mes, día y año de acuerdo con el formato corto de fecha especificado en el sistema . DateValue utiliza la
configuración del calendario actual de la propiedad CurrentCulture de la clase CultureInfo incluida en el espacio de nombres
System.Globalization. Los valores de CurrentCulture predeterminados están determinados por la configuración del Panel de
control. Puede reemplazar el formato corto de fecha; para ello, defina la propiedad ShortDatePattern de la clase
DateTimeFormatInfo incluida en el espacio de nombres System.Globalization.
DateValue reconoce nombres de mes en formato largo, abreviado y numérico. Por ejemplo, además de reconocer
30/12/1991 y 30/12/91, DateValue también reconoce 30 de diciembre de 1991 y 30 de dic., 1991.
Si se omite la parte de año de StringDate, DateValue utiliza el año actual de la fecha del sistema del equipo.
Si el argumento StringDate incluye información de hora, DateValue no la incluye en el valor devuelto. Sin embargo, si
StringDate incluye información de hora no válida (como "89:98"), se producirá un error InvalidCastException.
Ejemplo
Este ejemplo utiliza la función DateValue para convertir una cadena en una fecha. También pueden utilizarse literales de fecha
para asignar directamente una fecha a una variable Object o Date, por ejemplo oldDate = #2/12/69#.
VB
Dim oldDate As Date
oldDate = DateValue("February 12, 1969")

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: DateAndTime
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
DateSerial (Función, Visual Basic)
Day (Función, Visual Basic)
Month (Función, Visual Basic)
Now (Propiedad)
TimeSerial (Función, Visual Basic)
TimeValue (Función, Visual Basic)
Weekday (Función, Visual Basic)
Year (Función, Visual Basic)
Date (Tipo de datos, Visual Basic)
DateTime
Referencia del lenguaje Visual Basic

Day (Función, Visual Basic)


Devuelve un valor Integer entre 1 y 31 que representa el día del mes.

Public Function Day(ByVal DateValue As DateTime) As Integer

Parámetros
DateValue
Requerido. Valor Date del cual se desea extraer el día.
Comentarios
Si utiliza la función Day, es posible que deba calificarla con el espacio de nombres Microsoft.VisualBasic, ya que el espacio
de nombres System.Windows.Forms define Day como una enumeración. El ejemplo siguiente muestra cómo se resuelve esta
ambigüedad mediante la calificación de Day:

Dim thisDay As Integer = Microsoft.VisualBasic.DateAndTime.Day(Now)

También se puede obtener el día del mes llamando a DatePart y especificando DateInterval.Day para el argumento Interval.
Ejemplo
En el ejemplo siguiente se utiliza la función Day para obtener el día del mes de una fecha especificada. En el entorno de
desarrollo, el literal de fecha se muestra en formato corto estándar (por ejemplo “12/02/1969”) con los valores de
configuración regional del código correspondiente.
VB
Dim oldDate As Date
Dim oldDay As Integer
' Assign a date using standard short format.
oldDate = #2/12/1969#
oldDay = Microsoft.VisualBasic.DateAndTime.Day(oldDate)
' oldDay now contains 12.

Day se califica para distinguirlo de la enumeración System.Windows.Forms.Day.

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: DateAndTime
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
DatePart (Función, Visual Basic)
Month (Función, Visual Basic)
Now (Propiedad)
Weekday (Función, Visual Basic)
Year (Función, Visual Basic)
DateTime
ArgumentException
ArgumentOutOfRangeException
Referencia del lenguaje Visual Basic

DDB (Función)
Devuelve un valor de tipo Double que indica la amortización de un activo, durante un período de tiempo determinado,
mediante el método de amortización por doble disminución de saldo u otro método especificado.

Function DDB( _
ByVal Cost As Double, _
ByVal Salvage As Double, _
ByVal Life As Double, _
ByVal Period As Double, _
Optional ByVal Factor As Double = 2.0 _
) As Double

Parámetros
Cost
Requerido. Valor de tipo Double que indica el costo inicial del activo.
Salvage
Requerido. Valor de tipo Double que indica el valor del activo al término de su vida útil.
Life
Requerido. Valor de tipo Double que indica la duración de la vida útil del activo.
Period
Requerido. Valor de tipo Double que indica el período para el que se calcula la amortización del activo.
Factor
Opcional. Valor de tipo Double que indica la tasa de disminución del saldo. Si se omite, se asume el valor 2 (método de
doble disminución).
Excepciones
Tipo de excepción Número de error Condición
ArgumentException 9B07D280-66C6-4EA5-A8ED-5DDB0036F877 Factor <= 0, Salvage < 0, Period <= 0 o Period > Life.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
El método de la doble disminución de saldo calcula la amortización a un ritmo acelerado. La amortización es mayor en el
primer período y se reduce en los períodos sucesivos.
Los argumentos Life y Period deben expresarse en las mismas unidades. Por ejemplo, si Life se indica en meses, Period
también se debe indicar en meses. Todos los argumentos deben ser números positivos.
La función DDB utiliza la fórmula siguiente para calcular la amortización en un período dado:
Depreciation / Period = ((Cost – Salvage) * Factor) / Life
Ejemplo
En este ejemplo, se utiliza la función DDB para devolver la amortización de un activo en un período especificado, dados el
costo inicial (InitCost), el valor de rescate al final de la vida útil del activo (SalvageVal), la duración total del activo en años
(LifeTime) y el período para el que se calcula la amortización, en años (Depr).
VB
Dim InitCost, SalvageVal, LifeTime, DepYear As Double
Dim Fmt As String = "###,##0.00"
InitCost = CDbl(InputBox("What's the initial cost of the asset?"))
SalvageVal = CDbl(InputBox("Enter the asset's value at end of its life."))
LifeTime = CDbl(InputBox("What's the asset's useful life in years?"))
' Use the SLN function to calculate the deprecation per year.
Dim SlnDepr As Double = SLN(InitCost, SalvageVal, LifeTime)
Dim msg As String = "The depreciation per year: " & Format(SlnDepr, Fmt)
msg &= vbCrLf & "Year" & vbTab & "Linear" & vbTab & "Doubling" & vbCrLf
' Use the SYD and DDB functions to calculate the deprecation for each year.
For DepYear = 1 To LifeTime
msg &= DepYear & vbTab & _
Format(SYD(InitCost, SalvageVal, LifeTime, DepYear), Fmt) & vbTab & _
Format(DDB(InitCost, SalvageVal, LifeTime, DepYear), Fmt) & vbCrLf
Next
MsgBox(msg)

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Financial
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
SLN (Función)
SYD (Función)
Resumen financiero
ArgumentException
Referencia del lenguaje Visual Basic

DeleteSetting (Función)
Elimina una sección o una clave de la entrada de una aplicación en el Registro de Windows.
La característica My proporciona mayor productividad y rendimiento en las operaciones del Registro que si se utiliza la
función DeleteSetting . Para obtener más información, vea My.Computer.Registry (Objeto).

Public Sub DeleteSetting( _


ByVal AppName As String, _
Optional ByVal Section As String = Nothing, _
Optional ByVal Key As String = Nothing _
)

Parámetros
AppName
Requerido. Expresión de tipo String que contiene el nombre de la aplicación o el proyecto al que corresponde la sección o
clave.
Section
Requerido. Expresión de tipo String que contiene el nombre de la sección de la que se va a eliminar la clave. Si sólo se
proporcionan AppName y Section, se eliminará la sección especificada junto con todas las claves relacionadas.
Key
Opcional. Expresión de tipo Stringque contiene el nombre de la clave que se va a eliminar.
Excepciones
Tipo de excepción Número de error Condición
ArgumentException 9B07D280-66C6-4EA5-A8ED-5DDB0036F877 Section, AppName o Key no existen.

ArgumentException 9B07D280-66C6-4EA5-A8ED-5DDB0036F877 El usuario no ha iniciado la sesión.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
Si se especifican todos los argumentos, se eliminará el valor indicado. Se producirá un error en tiempo de ejecución si se
intenta utilizar DeleteSetting con una sección o clave inexistente.
DeleteSetting requiere que un usuario se conecte ya que funciona bajo la clave del Registro HKEY_LOCAL_USER, que no se
activa hasta que un inicia la sesión de forma interactiva.
Los valores de configuración del Registro a los que se va a tener acceso mediante un proceso no interactivo (como Mtx.exe)
deben almacenarse bajo las claves del Registro HKEY_LOCAL_MACHINE\Software\ o HKEY_USER\DEFAULT\Software.
Ejemplo
En el siguiente ejemplo primero se utiliza el procedimiento SaveSetting para crear entradas en el Registro de Windows para
la aplicación MyApp y, a continuación, se usa la función DeleteSetting para quitarlas. Ya que no se ha especificado un
argumento Key, se elimina toda la sección Startup, incluido el nombre de sección y todas sus claves.
VB
' Place some settings in the registry.
SaveSetting("MyApp", "Startup", "Top", "75")
SaveSetting("MyApp","Startup", "Left", "50")
' Remove section and all its settings from registry.
DeleteSetting ("MyApp", "Startup")
' Remove MyApp from the registry.
DeleteSetting ("MyApp")

Notas para desarrolladores de dispositivos inteligentes


Esta función no es compatible.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Interaction
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
GetAllSettings (Función)
GetSetting (Función)
SaveSetting (Función)
ArgumentException Class
Referencia del lenguaje Visual Basic

Dir (Función)
Devuelve una cadena que representa el nombre de un archivo, directorio o carpeta que coincide con un modelo especificado,
con un atributo de archivo o con la etiqueta de volumen de una unidad.
My.Computer.FileSystem (Objeto) proporciona mayor productividad y rendimiento en las operaciones de E/S de archivo que si
se utiliza la función Dir. Vea My.Computer.FileSystem.GetDirectoryInfo (Método) para obtener más información.

Public Overloads Function Dir() As String


' -or-
Public Overloads Function Dir( _
ByVal PathName As String, _
Optional ByVal Attributes As FileAttribute = FileAttribute.Normal _
) As String

Parámetros
PathName
Opcional. Expresión de tipo String que especifica un nombre de archivo, un nombre de directorio o carpeta, o la etiqueta de
volumen de la unidad. Se devuelve una cadena de longitud cero ("") si no se encuentra PathName.
Attributes
Opcional. Enumeración o expresión numérica cuyo valor especifica los atributos del archivo. Si se omite, Dir devuelve
archivos que coinciden con PathName pero que carecen de atributos.
Valores
Los valores de enumeración del argumento Attributes son los siguientes:
Valor Constante Descripción
Normal vbnormal Predeterminado. Especifica los archivos sin atributos.

ReadOnly vbReadOnly Especifica los archivos de sólo lectura además de los archivos sin atributos.

Hidden vbHidden Especifica los archivos ocultos además de los archivos sin atributos.

System vbSystem Especifica los archivos de sistema además de los archivos sin atributos.

Volume vbVolume Especifica la etiqueta de volumen; si se especifica cualquier otro atributo, se omite vbVolume.

Directory vbDirectory Especifica los archivos o carpetas además de los archivos sin atributos.

Archive vbArchive El archivo ha cambiado desde la última copia de seguridad.

Alias vbAlias El archivo tiene un nombre diferente.


Nota
El lenguaje de Visual Basic especifica estas enumeraciones, que se pueden utilizar en cualquier parte del código en sustitució
n de valores reales.

Comentarios
La función Dir admite el uso de caracteres comodín de carácter múltiple (*) y de carácter único (?) para especificar varios
archivos.
VbVolume devuelve la etiqueta del volumen para la unidad en lugar de un nombre de archivo concreto.
La primera vez que se llame a la función PathName, se debe especificar la función Dir. Para recuperar el elemento siguiente,
puede realizar llamadas posteriores a la función Dir sin parámetros.
Nota de seguridad
Para que se ejecute correctamente, la función Dir requiere que se otorguen los indicadores Read y PathDiscovery de
FileIOPermission al código de ejecución. Para obtener más información, vea FileIOPermission, SecurityException y
Permisos de acceso a código.

Ejemplo
En este ejemplo se utiliza la función Dir para comprobar si existen determinados archivos y directorios.
VB
Dim MyFile, MyPath, MyName As String
' Returns "WIN.INI" if it exists.
MyFile = Dir("C:\WINDOWS\WIN.INI")

' Returns filename with specified extension. If more than one *.INI
' file exists, the first file found is returned.
MyFile = Dir("C:\WINDOWS\*.INI")

' Call Dir again without arguments to return the next *.INI file in the
' same directory.
MyFile = Dir()

' Return first *.TXT file, including files with a set hidden attribute.
MyFile = Dir("*.TXT", vbHidden)
' Display the names in C:\ that represent directories.
MyPath = "c:\" ' Set the path.
MyName = Dir(MyPath, vbDirectory) ' Retrieve the first entry.
Do While MyName <> "" ' Start the loop.
' Use bitwise comparison to make sure MyName is a directory.
If (GetAttr(MyPath & MyName) And vbDirectory) = vbDirectory Then
' Display entry only if it's a directory.
MsgBox(MyName)
End If
MyName = Dir() ' Get next entry.
Loop

Notas para desarrolladores de dispositivos inteligentes


Esta función no está admitida.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: FileSystem
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
ChDir (Función)
CurDir (Función)
FileAttribute (Enumeración)
Referencia del lenguaje Visual Basic

Environ (Función)
Devuelve la cadena asociada con una variable de entorno del sistema operativo.

Overloads Function Environ(ByVal Expression As Integer) As String


' -or-
Overloads Function Environ(ByVal Expression As String) As String

Parámetros
Expression
Requerido. Expresión que se evalúa como una cadena que contiene el nombre de una variable de entorno o un entero que
corresponde al orden numérico de una cadena de entorno en la tabla de cadenas de entorno.
Excepciones
Tipo de excepción Número de error Condición
ArgumentException 9B07D280-66C6-4EA5-A8ED-5DDB0036F877 No se encuentra Expression.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
Si Expression contiene una cadena, la función Environ devuelve el texto asignado a la cadena de entorno especificada, es decir,
el texto que sigue al signo igual (=) en la tabla de cadenas de entorno para esa variable de entorno. Si la cadena de Expression
no se puede encontrar en la tabla de cadenas de entorno, se devuelve una cadena de longitud cero ("").
Si Expression contiene un entero, se devuelve la cadena que ocupa la posición numérica en la tabla de cadenas de entorno. En
este caso, Environ devuelve todo el texto, incluido el nombre de la variable de entorno. Si no hay ninguna cadena de entorno
en la posición especificada, Environ devuelve una cadena de longitud cero.
Nota de seguridad
La función Environ requiere un permiso de entorno que puede afectar a su ejecución en situaciones de confianza parcial. Par
a obtener más información, vea SecurityPermission y Permisos de acceso a código.

Ejemplo
En este ejemplo se utiliza la función Environ para proporcionar el número de entrada y longitud de la instrucción PATH desde
la tabla de cadenas de entorno.
VB
Sub tenv()
Dim envString As String
Dim found As Boolean = False
Dim index As Integer = 1
Dim pathLength As Integer
Dim message As String
envString = Environ(index)
While Not found And (envString <> "")
If (envString.Substring(0, 5) = "Path=") Then
found = True
Else
index += 1
envString = Environ(index)
End If
End While

If found Then
pathLength = Environ("PATH").Length
message = "PATH entry = " & index & " and length = " & pathLength
Else
message = "No PATH environment variable exists."
End If
MsgBox(message)
End Sub

Notas para desarrolladores de dispositivos inteligentes


Esta función no es compatible.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Interaction
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Miembros de la biblioteca en tiempo de ejecución de Visual Basic
ArgumentException
Referencia del lenguaje Visual Basic

EOF (Función)
Devuelve un valor Boolean True cuando se llega al final de un archivo abierto para Random o Input de tipo secuencial.

Public Function EOF(ByVal FileNumber As Integer) As Boolean

Parámetros
FileNumber
Requerido. Integer que contiene algún número de archivo válido.
Excepciones
Tipo de excepción Número de error Condición
IOException D0E96AEA-7621-48F6-A78B-5D37D18AAA4E FileNumber no existe.

IOException 74891E96-884B-4C8D-872D-CD11AE272372 El modo de archivo no es válido.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
EOF se utiliza para evitar el error generado al intentar obtener datos más allá del final de un archivo.
La función EOF devuelve False hasta que se llega al final del archivo. En el caso de archivos abiertos para acceso Random o
Binary, EOF devuelve False hasta que la última función FileGet ejecutada ya no puede leer un registro completo.
En los archivos abiertos para acceso Binary, se genera un error al intentar leer el archivo mediante la función Input hasta que
EOF devuelve True. Utilice las funciones LOF y Loc en lugar de EOF cuando se lean archivos binarios con Input o utilice Get
cuando se utilice la función EOF. En archivos abiertos para Output, EOF siempre devuelve True.
Ejemplo
En este ejemplo se utiliza la función EOF para detectar el final de un archivo. En este ejemplo se supone que Testfile es un
archivo de texto con pocas líneas de texto.
VB
Dim TextLine As String
' Open file.
FileOpen(1, "TESTFILE", OpenMode.Input)
' Loop until end of file.
Do While Not EOF(1)
' Read line into variable.
TextLine = LineInput(1)
' Display result in a message box.
MsgBox("End of file reached at " & TextLine)
Loop
FileClose(1)

Notas para desarrolladores de dispositivos inteligentes


Esta función no es compatible.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: FileSystem
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
FileGet (Función)
Loc (Función)
LOF (Función)
FileOpen (Función)
IOException
Referencia del lenguaje Visual Basic

ErrorToString (Función)
Devuelve el mensaje de error que corresponde a un número de error determinado.

Public Shared Function ErrorToString(ByVal ErrorNumber As Integer) As String

Parámetros
ErrorNumber
Opcional. Cualquier número de error válido.
Excepciones
Tipo de excepción Número de error Condición
ArgumentException 9B07D280-66C6-4EA5-A8ED-5DDB0036F877 ErrorNumber está fuera del intervalo.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
La función ErrorToString examina los valores de la propiedad del objeto Err para identificar el error en tiempo de ejecución
más reciente. El valor devuelto de la función ErrorToString corresponde a la propiedad Description del objeto Err. Si
ErrorNumber es un número de error válido pero no está definido, ErrorToString devuelve "Application-defined or
object-defined error." a la cadena. Si ErrorNumber no es válido, se produce un error. Si ErrorNumber se omite, se devuelve
el mensaje correspondiente al error en tiempo de ejecución más reciente. Si no se ha producido ningún error en tiempo de
ejecución o ErrorNumber es 0, ErrorToString devuelve una cadena de longitud cero ("").
En Visual Basic versión 6.0 y anteriores, la función Error proporcionaba esta funcionalidad.
Ejemplo
El siguiente código utiliza la función ErrorToString para mostrar mensajes de error que corresponden a los números de error
especificados.
VB
Dim ErrorNumber As Integer
For ErrorNumber = 61 To 64 ' Loop through values 61 - 64.
MsgBox(ErrorToString(ErrorNumber)) ' Display error names in message box.
Next ErrorNumber

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Conversion
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Err (Objeto, Visual Basic)
Description (Propiedad, objeto Err)
ArgumentException
Conceptos
Información general sobre el control estructurado de excepciones de Visual Basic
Información general sobre el control no estructurado de excepciones
Referencia del lenguaje Visual Basic

FileAttr (Función)
En archivos abiertos con la función FileOpen, devuelve una enumeración que representa el modo de archivo.
My.Computer.FileSystem (Objeto) proporciona mayor productividad y rendimiento en las operaciones de E/S del archivo que
si se utiliza la función FileAttr . Vea My.Computer.FileSystem.GetFileInfo (Método) para obtener más información.

Public Function FileAttr(ByVal FileNumber As Integer) As OpenMode

Parámetros
FileNumber
Requerido. Integer. Cualquier número de archivo válido.
Excepciones
Tipo de excepción Número de error Condición
IOException D0E96AEA-7621-48F6-A78B-5D37D18AAA4E FileNumber no existe.

IOException 74891E96-884B-4C8D-872D-CD11AE272372 El modo de archivo no es válido.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Valor devuelto
Los siguientes valores de enumeración indican el modo de acceso al archivo:
Valor Modo
OpenMode.Input

OpenMode.Output

OpenMode.Random

OpenMode.Append

OpenMode.Binary
Comentarios
En archivos abiertos con la función FileOpen, esta función devuelve una enumeración que representa el modo de archivo.
Ejemplo
En este ejemplo se utiliza la función FileAttr para devolver el modo de archivo de un archivo abierto.
VB
Dim mode As OpenMode
FileOpen(1, "c:\TESTFILE.TXT", OpenMode.Input)
mode = FileAttr(1)
MsgBox("The file mode is " & mode.ToString())
FileClose(1)

Notas para desarrolladores de dispositivos inteligentes


Esta función no es compatible.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: FileSystem
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
GetAttr (Función)
FileOpen (Función)
SetAttr (Función)
IOException Class
Otros recursos
Propiedades de archivos, directorios y unidades en Visual Basic
Referencia del lenguaje Visual Basic

FileClose (Función)
Concluye las operaciones de entrada/salida (E/S) en un archivo abierto con la función FileOpen.
La utilización de My proporciona mayor productividad y rendimiento en las operaciones de E/S del archivo. Vea
My.Computer.FileSystem (Objeto) para obtener más información.

Public Sub FileClose(ParamArray FileNumbers() As Integer)

Parámetros
FileNumbers
Opcional. Matriz de parámetros con 0 ó más canales por cerrar.
Excepciones
Tipo de excepción Número de error Condición
IOException D0E96AEA-7621-48F6-A78B-5D37D18AAA4E FileNumber no existe.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
La función FileClose se proporciona para la compatibilidad con versiones anteriores y puede afectar al rendimiento. En el caso
de aplicaciones no heredadas, el objeto My.Computer.FileSystem proporciona un rendimiento superior. Para obtener más
información, vea Acceso a archivos con Visual Basic.
Si se omite FileNumbers, todos los archivos activos abiertos con la función FileOpen se cerrarán.
Cuando se cierra un archivo abierto originalmente para Output o Append, el búfer final de salida se escribe en el búfer del
sistema operativo correspondiente a dicho archivo. Todo el espacio de búfer asociado al archivo cerrado se liberará.
Cuando se ejecuta la función FileClose, finaliza la asociación de un archivo con su número de archivo.
Ejemplo
En este ejemplo se utiliza la función FileClose para cerrar un archivo abierto para Input.
VB
Dim TextLine As String
FileOpen(1, "TESTFILE", OpenMode.Input) ' Open file.
Do While Not EOF(1) ' Loop until end of file.
TextLine = LineInput(1) ' Read line into variable.
MsgBox(TextLine) ' Display the line
Loop
FileClose(1) ' Close file.

Notas para desarrolladores de dispositivos inteligentes


Esta función no es compatible.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: FileSystem
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
End (Instrucción)
FileOpen (Función)
Reset (Función)
Instrucción Stop (Visual Basic)
Otros recursos
Acceso a archivos con Visual Basic
Referencia del lenguaje Visual Basic

FileCopy (Función)
Copia un archivo.
My.Computer.FileSystem (Objeto) proporciona mayor productividad y rendimiento en las operaciones de E/S del archivo que
si se utiliza FileCopy. Vea My.Computer.FileSystem.CopyFile (Método) para obtener más información.

Public Sub FileCopy( _


ByVal Source As String, _
ByVal Destination As String _
)

Parámetros
Source
Requerido. Expresión de tipo String que especifica el nombre del archivo que se va a copiar. Source puede incluir el
directorio o carpeta y la unidad del archivo de código fuente.
Destination
Requerido. Expresión de tipo String que especifica el nombre del archivo de destino. Destination puede incluir el directorio o
carpeta y la unidad del archivo de destino.
Excepciones
Tipo de excepción Número de error Condición
ArgumentException D0E96AEA-7621-48F6-A78B-5D37D18AAA4E Source o Destination no son válidos o no se especifica
n.

IOException D674A0FB-EF16-4CC2-9DA7-709A8A07DBEA El archivo ya está abierto

FileNotFoundException 57ADDB16-6F9A-444D-8AF8-DDA52431DACA El archivo no existe.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
Si intenta utilizar la función FileCopy en un archivo abierto, se produce un error.
FileCopy exige plena confianza para funcionar en la unidad local.
Ejemplo
En este ejemplo, se utiliza la función FileCopy para copiar un archivo en otro. Para el propósito de este ejemplo, SrcFile es un
archivo que contiene datos.
VB
Dim SourceFile, DestinationFile As String
SourceFile = "SRCFILE" ' Define source file name.
DestinationFile = "DESTFILE" ' Define target file name.
FileCopy(SourceFile, DestinationFile) ' Copy source to target.

Notas para desarrolladores de dispositivos inteligentes


Esta función no es compatible.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: FileSystem
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Tareas
Cómo: Crear una copia de un archivo en un directorio diferente en Visual Basic
Cómo: Crear una copia de un archivo en el mismo directorio en Visual Basic
Cómo: Copiar un directorio en otro directorio en Visual Basic
Referencia
Kill (Función)
IOException Class
FileNotFoundException Class
ArgumentException
Referencia del lenguaje Visual Basic

FileDateTime (Función)
Devuelve un valor Date que indica la fecha y la hora en que se creó un archivo o en que fue modificado por última vez.
La característica My proporciona mayor productividad y rendimiento en las operaciones de E/S del archivo que si se utiliza
FileDateTime. Para obtener más información, vea My.Computer.FileSystem.GetFileInfo (Método).

Public Function FileDateTime(ByVal PathName As String) As DateTime

Parámetros
PathName
Requerido. Expresión de tipo String que especifica un nombre de archivo. PathName puede incluir el directorio o la carpeta
y la unidad.
Excepciones
Tipo de excepción Número de error Condición
ArgumentException D0E96AEA-7621-48F6-A78B-5D37D18AAA4E PathName no es válido o contiene caracteres comodín
.

FileNotFoundException 57ADDB16-6F9A-444D-8AF8-DDA52431DACA El archivo de destino no existe.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
Esta función devuelve un valor Date que indica la fecha y la hora en que se creó un archivo o en que fue modificado por última
vez.
Ejemplo
En este ejemplo se utiliza la función FileDateTime para determinar la fecha y la hora en que se creó un archivo o en que fue
modificado por última vez. El formato de la hora y el tiempo se basa en la configuración regional del sistema.
VB
Dim MyStamp As Date
' Assume TESTFILE was last modified on October 12, 2001 at 4:35:47 PM.
' Assume English/U.S. locale settings.
' Returns "10/12/2001 4:35:47 PM".
MyStamp = FileDateTime("C:\TESTFILE.txt")

Notas para desarrolladores de dispositivos inteligentes


Esta función no es compatible.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: FileSystem
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
FileLen (Función)
GetAttr (Función)
ArgumentException Class
FileNotFoundException Class
Otros recursos
Propiedades de archivos, directorios y unidades en Visual Basic
Referencia del lenguaje Visual Basic

FileGet (Función)
Lee datos de un archivo de disco abierto y los coloca en una variable.
La característica My proporciona mayor productividad y rendimiento en las operaciones de E/S de archivo que si se utiliza
FileGet. Para obtener más información, vea My.Computer.FileSystem (Objeto).

Public Overloads Sub FileGet( _


ByVal FileNumber As Integer, _
ByRef Value As Object, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FileGet( _
ByVal FileNumber As Integer, _
ByRef Value As Short, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FileGet( _
ByVal FileNumber As Integer, _
ByRef Value As Integer, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FileGet( _
ByVal FileNumber As Integer, _
ByRef Value As Single, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FileGet( _
ByVal FileNumber As Integer, _
ByRef Value As Double, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FileGet( _
ByVal FileNumber As Integer, _
ByRef Value As Decimal, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FileGet( _
ByVal FileNumber As Integer, _
ByRef Value As Byte, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FileGet( _
ByVal FileNumber As Integer, _
ByRef Value As Boolean, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FileGet( _
ByVal FileNumber As Integer, _
ByRef Value As Date, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FileGet( _
ByVal FileNumber As Integer, _
ByRef Value As System.Array, _
Optional RecordNumber As Integer = -1, _
Optional ArrayIsDynamic As Boolean = False _
)
' -or-
Public Overloads Sub FileGet(
ByVal FileNumber As Integer, _
ByRef Value As String, _
Optional RecordNumber As Integer = -1, _
Optional StringIsFixedLength As Boolean = False _
)

Parámetros
FileNumber
Obligatorio. Cualquier número de archivo válido.
Value
Obligatorio. Nombre de variable válido en el que se leen los datos.
RecordNumber
Opcional. Número de registro (archivos en modo Random) o número de byte (archivos en modo Binary) desde el que
comienza la lectura.
ArrayIsDynamic
Opcional. Sólo se aplica cuando se escribe una matriz. Especifica si se ha de tratar la matriz como dinámica y si es necesario
un descriptor de matriz que describa el tamaño y los límites de la matriz.
StringIsFixedLength
Opcional. Sólo se aplica cuando se escribe una cadena. Especifica si se escribe un descriptor de dos bytes para la cadena que
describe la longitud. El valor predeterminado es False.
Excepciones
Tipo de excepción Número de error Condición
ArgumentException 63 RecordNumber < 1 y distinto de -1.

IOException 52 FileNumber no existe.

IOException 54 El modo de archivo no es válido.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
FileGet sólo es válido en los modos Random y Binary.
Los datos leídos con FileGet se escriben normalmente en un archivo con FilePut.
El primer registro o byte de un archivo se encuentra en la posición 1, el segundo en la posición 2 y así sucesivamente. Si omite
RecordNumber, se lee el siguiente registro o byte que siga a la última función FileGet o FilePut (o al que señale la última
función Seek).
Nota de seguridad
Cuando se leen archivos, no deben tomarse decisiones acerca del contenido de un archivo basándose en la extensión del no
mbre de archivo. Por ejemplo, un archivo denominado Form1.vb puede no ser un archivo de código fuente de Visual Basic.

Modo aleatorio
Con los archivos abiertos en modo Random, se aplican las siguientes reglas:
Si la longitud de los datos que se estén leyendo es menor que la especificada en la cláusula RecordLength de la función
FileOpen, FileGet leerá los registros posteriores en los límites de longitud de registro. El espacio comprendido entre el
final de un registro y el principio del siguiente se rellena con el contenido existente del búfer del archivo. Como no se
puede determinar con seguridad la cantidad de datos de relleno, se recomienda en general que la longitud del registro
coincida con la de los datos que se estén leyendo.
Si la variable que se está leyendo es una cadena, FileGet de forma predeterminada, leerá primero un descriptor de dos
bytes con la longitud de la cadena y, a continuación, la información destinada a la variable. Por tanto, la longitud de
registro especificada por la cláusula RecordLength de la función FileOpen ha de ser, como mínimo, dos bytes mayor que
la longitud real de la cadena. Visual Basic 6.0 y otras versiones anteriores admiten cadenas de longitud fija; cuando se
colocan en un archivo, no se escribe el descriptor de longitud. Si desea leer una cadena sin el descriptor, debería pasar
True al parámetro StringIsFixedLength y la cadena que lea debería tener la longitud correcta.
Si la variable que se esté leyendo es una matriz, puede elegir leer un descriptor con el tamaño y dimensiones de la
matriz. Para escribirlo, establezca el parámetro ArrayIsDynamic en True. Al leer la matriz, deberá hacer que coincida con
la forma en que se escribió la matriz. Si fue escrita con el descriptor, deberá leer el descriptor. Si no se utiliza el
descriptor, el tamaño y los límites de la matriz pasados a FileGet determinan qué es lo que se debe leer.
El descriptor especifica tanto el rango de la matriz, como el tamaño y los límites inferiores de cada rango. Su longitud es
igual a 2 más 8 veces el número de dimensiones: (2 + 8 * NumberOfDimensions). La longitud de registro especificada
por el parámetro RecordLength de la función FileOpen debe ser mayor o igual que la suma de todos los bytes
necesarios para escribir los datos y el descriptor de la matriz. Por ejemplo, la siguiente declaración de matriz requiere
118 bytes cuando la matriz se escribe en disco:
VB
Dim MyArray(4,9) As Integer

Los 118 bytes se distribuyen del modo siguiente:


18 bytes para el descriptor: (2 + 8 * 2)
100 bytes para los datos: (5 * 10 * 2)
Si la variable que se está leyendo es de cualquier otro tipo (no una cadena de longitud variable o un objeto), FileGet
únicamente leerá los datos variables. La longitud de registro especificada por la cláusula RecordLength de la función
FileOpen debe ser mayor o igual que la longitud de los datos que se estén leyendo.
FileGet lee elementos de estructuras como si cada uno de ellos se estuviera leyendo por separado, con la excepción de
que no existe relleno entre ellos. En disco, las matrices dinámicas de tipos definidos por el usuario (escritas con FilePut)
vienen prefijadas con un descriptor cuya longitud es igual a 2 más 8 veces el número de dimensiones: (2 + 8 *
NumberOfDimensions). La longitud del registro especificada por la cláusula RecordLength de la función FileOpen debe
ser mayor o igual que la suma de todos los bytes necesarios para leer de forma individual cada uno de los elementos,
incluidas las matrices y sus descriptores. El atributo VBFixedString puede aplicarse a campos de cadena de las
estructuras para indicar el tamaño de una cadena cuando se escribe en disco.
Modo binario
Para los archivos abiertos en modo Binary, se aplica la mayoría de las reglas del modo Random, con algunas excepciones. Las
reglas siguientes para los archivos abiertos en modo Binary difieren de las reglas para el modo Random :
La cláusula RecordLength de la función FileOpen no tiene ningún efecto. FileGet lee todas las variables desde el disco de
forma contigua; es decir, sin relleno entre los registros.
En el caso de matrices no asociadas a estructuras, FileGet leerá únicamente los datos. No se leerá ningún descriptor.
FileGet lee las cadenas de longitud variable que no sean elementos de estructuras sin esperar el descriptor de longitud
de dos bytes. El número de bytes leídos es igual al número de caracteres existentes en la cadena.
Nota de seguridad
La lectura de un archivo con la función FileGet requiere acceso de tipo Read desde la enumeración
FileIOPermissionAccess.

Notas para desarrolladores de dispositivos inteligentes


Esta función no está admitida.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: FileSystem
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
FileOpen (Función)
FilePut (Función)
Seek (Función)
FileGetObject (Función)
Otros recursos
Leer archivos en Visual Basic
Escribir en archivos en Visual Basic
Referencia del lenguaje Visual Basic

FileGetObject (Función)
Lee datos de un archivo de disco abierto y los coloca en una variable.
La característica My proporciona mayor productividad y rendimiento en las operaciones de E/S de archivo que si se utiliza
FileGetObject. Para obtener más información, vea My.Computer.FileSystem (Objeto).

Public Sub FileGetObject( _


ByVal FileNumber As Integer, _
ByRef Value As Object, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FileGetObject( _
ByVal FileNumber As Integer, _
ByRef Value As Short, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FileGetObject( _
ByVal FileNumber As Integer, _
ByRef Value As Integer, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FileGetObject( _
ByVal FileNumber As Integer, _
ByRef Value As Single, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FileGetObject( _
ByVal FileNumber As Integer, _
ByRef Value As Double, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FileGetObject( _
ByVal FileNumber As Integer, _
ByRef Value As Decimal, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FileGetObject( _
ByVal FileNumber As Integer, _
ByRef Value As Byte, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FileGetObject( _
ByVal FileNumber As Integer, _
ByRef Value As Boolean, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FileGetObject( _
ByVal FileNumber As Integer, _
ByRef Value As Date, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FileGetObject( _
ByVal FileNumber As Integer, _
ByRef Value As System.Array, _
Optional RecordNumber As Integer = -1, _
Optional ArrayIsDynamic As Boolean = False _
)
' -or-
Overloads Public Sub FileGetObject( _
ByVal FileNumber As Integer, _
ByRef Value As String, _
Optional RecordNumber As Integer = -1, _
Optional StringIsFixedLength As Boolean = False _
)

Parámetros
FileNumber
Obligatorio. Cualquier número de archivo válido.
Value
Obligatorio. Nombre de variable válido en el que se leen los datos.
RecordNumber
Opcional. Número de registro (archivos en modo Random) o número de byte (archivos en modo Binary) desde el que
comienza la lectura.
ArrayIsDynamic
Opcional. Sólo se aplica cuando se escribe una matriz. Especifica si se ha de tratar a la matriz como dinámica y si se ha de
escribir un descriptor de matriz para el tamaño y los límites de la matriz.
StringIsFixedLength
Opcional. Sólo se aplica cuando se escribe una cadena. Especifica si se escribe un descriptor de dos bytes para la cadena que
describe la longitud. El valor predeterminado es False.
Comentarios
La función FileGetObject se utiliza en lugar de FileGet para evitar ambigüedades en tiempo de compilación si se pasa el tipo
Object en vez de otro tipo, como Integer, Long, Short, etc.
Si desea escribir el tipo Variant, se requiere FileGetObject. En caso de duda, si utiliza un objeto para el segundo parámetro, se
recomienda siempre que utilice FilePutObject y FileGetObject.
FileGetObject sólo es válido en los modos Random y Binary.
Los datos leídos con FileGetObject normalmente se escriben con FilePutObject.
El primer registro o byte de un archivo se encuentra en la posición 1, el segundo en la posición 2 y así sucesivamente. Si omite
RecordNumber, FileGetObject lee el registro o byte que siga inmediatamente después de la última función FileGetObject o
FilePutObject (o al que señale la última función Seek).
Modo aleatorio
Con los archivos abiertos en modo Random, se aplican las siguientes reglas:
Si la longitud de los datos que se estén leyendo es menor que la especificada en la cláusula RecordLength de la función
FileOpen, FileGetObject leerá los registros posteriores en los límites de longitud de registro. El espacio comprendido
entre el final de un registro y el principio del siguiente se rellena con el contenido existente del búfer del archivo. Como
no se puede determinar con exactitud la cantidad de datos de relleno, se recomienda que la longitud del registro coincida
con la de los datos que se estén leyendo.
Si la variable que se está leyendo es una cadena, FileGetObject de forma predeterminada, leerá primero un descriptor
de dos bytes con la longitud de la cadena y, a continuación, la información destinada a la variable. Por tanto, la longitud
de registro especificada por la cláusula RecordLength de la función FileOpen ha de ser, como mínimo, dos bytes mayor
que la longitud real de la cadena. Visual Basic 6.0 y otras versiones anteriores admiten cadenas de longitud fija; cuando
se lee un archivo, no se escribe el descriptor de longitud. Si desea leer una cadena sin el descriptor, debería pasar True al
parámetro StringIsFixedLength y la cadena que lea debería tener la longitud correcta.
Si la variable que se esté leyendo es una matriz, puede elegir leer un descriptor con el tamaño y dimensiones de la
matriz. Para leerlo, establezca el parámetro ArrayIsDynamic en True. Al leer la matriz, deberá hacer que coincida con la
forma en que se escribió la matriz. Si fue escrita con el descriptor, deberá leer el descriptor. Si no se utiliza el descriptor,
se utilizan el tamaño y los límites de la matriz pasados a FileGetObject para determinar qué es lo que se debe leer.
El descriptor especifica tanto el rango de la matriz, como el tamaño y los límites inferiores de cada rango. Su longitud es
igual a 2 más 8 veces el número de dimensiones: 2 + 8 * NumberOfDimensions. La longitud de registro especificada por
el parámetro RecordLength de la función FileOpen debe ser mayor o igual que la suma de todos los bytes necesarios
para escribir los datos y el descriptor de la matriz. Por ejemplo, la siguiente declaración de matriz requiere 118 bytes
cuando la matriz se escribe en disco:
VB
Dim MyArray(4,9) As Integer

Los 118 bytes se distribuyen de la siguiente forma: 18 bytes para el descriptor (2 + 8 * 2) y 100 bytes para los datos (5 *
10 * 2).
FileGetObject lee elementos de estructuras como si cada uno de ellos se estuviera leyendo por separado, con la
excepción de que no existe relleno entre ellos. En disco, las matrices dinámicas de tipos definidos por el usuario (escritas
con FilePutObject) vienen prefijadas con un descriptor cuya longitud es igual a 2 más 8 veces el número de
dimensiones: 2 + 8 * NumberOfDimensions. La longitud del registro especificada por la cláusula RecordLength de la
función FileOpen debe ser mayor o igual que la suma de todos los bytes necesarios para leer de forma individual cada
uno de los elementos, incluidas las matrices y sus descriptores. VBFixedStringAttribute (Clase) puede aplicarse a campos
de cadena de las estructuras para indicar el tamaño de la cadena cuando se escribe en disco.
Modo binario
Para los archivos abiertos en modo Binary, se aplican todas las reglas del modo Random, con estas excepciones.
La cláusula RecordLength de la función FileOpen no tiene ningún efecto. FileGetObject lee todas las variables desde el
disco de forma contigua, es decir, sin relleno entre los registros.
En el caso de matrices no asociadas a estructuras, FileGetObject leerá únicamente los datos. No se leerá ningún
descriptor.
FileGetObject lee las cadenas de longitud variable que no sean elementos de estructuras sin esperar el descriptor de longitud
de dos bytes. El número de bytes leídos es igual al número de caracteres existentes en la cadena.
Nota de seguridad
Cuando se leen archivos, no deben tomarse decisiones acerca del contenido de un archivo basándose en la extensión del no
mbre de archivo. Por ejemplo, un archivo denominado Form1.vb puede no ser un archivo de código fuente de Visual Basic.

Ejemplo
En el ejemplo siguiente, se lee un registro en un archivo de prueba y después se recupera.
VB
Dim c As Object = "test"
FileSystem.FileOpen(1, "test.dat", OpenMode.Binary)
FileSystem.FilePutObject(1, "ABCDEF")
FileSystem.Seek(1, 1)
FileSystem.FileGetObject(1, c)
MsgBox(c)
FileSystem.FileClose(1)

Notas para desarrolladores de dispositivos inteligentes


Esta función no está admitida.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: FileSystem
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
FilePut (Función)
FileOpen (Función)
Seek (Función)
FileGet (Función)
Otros recursos
Leer archivos en Visual Basic
Escribir en archivos en Visual Basic
Referencia del lenguaje Visual Basic

FileLen (Función)
Devuelve un valor Long que especifica la longitud, en bytes, de un archivo.
La característica My proporciona mayor productividad y rendimiento en las operaciones de E/S del archivo que si se utiliza
FileLen. Para obtener más información, vea My.Computer.FileSystem.GetFileInfo (Método).

Public Function FileLen(ByVal PathName As String) As Long

Parámetros
PathName
Requerido. Expresión de tipo String que especifica un archivo. PathName puede incluir el directorio o la carpeta y la unidad.
Excepciones
Tipo de excepción Número de error Condición
FileNotFoundException 57ADDB16-6F9A-444D-8AF8-DDA52431DACA El archivo no existe.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
Si el archivo especificado está abierto cuando se llama a la función FileLen, el valor devuelto representa el tamaño del archivo
en el momento en que se abrió.
Nota
Para obtener la longitud actual de un archivo abierto, utilice la función LOF.

Ejemplo
En este ejemplo se utiliza la función FileLen para devolver la longitud de un archivo en bytes. Para el propósito de este
ejemplo, TestFile es un archivo que contiene datos.
VB
Dim MySize As Long
' Returns file length (bytes).
MySize = FileLen("TESTFILE")

Notas para desarrolladores de dispositivos inteligentes


Esta función no es compatible.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: FileSystem
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
FileDateTime (Función)
GetAttr (Función)
LOF (Función)
FileNotFoundException Class
Otros recursos
Propiedades de archivos, directorios y unidades en Visual Basic
Referencia del lenguaje Visual Basic

FileOpen (Función)
Abre un archivo para entrada o salida.
La característica My proporciona mayor productividad y rendimiento en las operaciones de E/S de archivo que si se utiliza
FileOpen. Para obtener más información, vea My.Computer.FileSystem (Objeto).

Public Sub FileOpen( _


ByVal FileNumber As Integer, _
ByVal FileName As String, _
ByVal Mode As OpenMode, _
Optional ByVal Access As OpenAccess = OpenAccess.Default, _
Optional ByVal Share As OpenShare = OpenShare.Default, _
Optional ByVal RecordLength As Integer = -1 _
)

Parámetros
FileNumber
Obligatorio. Cualquier número de archivo válido. La función FreeFile se utiliza para obtener el siguiente número de archivo
disponible.
FileName
Obligatorio. Expresión de tipo String que especifica un nombre de archivo (puede incluir el directorio o la carpeta y la
unidad).
Mode
Obligatorio. Enumeración que especifica el modo de archivo: Append, Binary, Input, Output o Random. (Para obtener más
información, vea OpenMode (Enumeración)).
Access
Opcional. Enumeración que especifica las operaciones permitidas en el archivo abierto: Read, Write o ReadWrite. El valor
predeterminado es ReadWrite. (Para obtener más información, vea OpenAccess (Enumeración)).
Share
Opcional. Enumeración que especifica las operaciones no permitidas en el archivo abierto por otros procesos: Shared, Lock
Read, Lock Write y Lock Read Write. El valor predeterminado es Lock Read Write. (Para obtener más información, vea
OpenShare (Enumeración)).
RecordLength
Opcional. Número menor o igual a 32.767 bytes. En archivos abiertos para acceso aleatorio, este valor será la longitud de
registro. En archivos secuenciales, este valor indicará el número de caracteres almacenados en el búfer.
Excepciones
Tipo de excepción Número de error Condición
ArgumentException 5 Access, Share o Mode no válido

ArgumentException 5 Hay un archivo WriteOnly abierto para Input.

ArgumentException 5 Hay un archivo ReadOnly abierto para Output.

ArgumentException 5 Hay un archivo ReadOnly abierto para Append.

ArgumentException 5 La longitud del registro es negativa (y no es igual a ‑1).

IOException 52 FileNumber no es válido (<-1 o >255) o FileNumber ya está en uso.


IOException 55 FileName ya está abierto o FileName no es válido.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
La función FileOpen se proporciona por razones de compatibilidad con versiones anteriores y puede afectar al rendimiento.
En el caso de aplicaciones no heredadas, el objeto My.Computer.FileSystem proporciona un rendimiento superior. Para
obtener más información, vea Acceso a archivos con Visual Basic.
Debe abrir un archivo antes de poder realizar cualquier operación de E/S con él. FileOpen asigna un búfer para la E/S del
archivo y determina el modo de acceso que se utiliza con el búfer.
Nota de seguridad
Al escribir en un archivo, es posible que una aplicación necesite crear un archivo, si el archivo en el que está intentando escri
bir no existe. Para ello, se necesita permiso para el directorio en el que se creará el archivo. Sin embargo, si el archivo especifi
cado por FileName ya existe, la aplicación necesita permiso Write para ese archivo concreto. Siempre que sea posible y con
el fin de mejorar la seguridad, cree el archivo durante la implementación y conceda permiso Write únicamente a dicho archi
vo, en lugar de hacerlo al directorio completo. Para ayudar a mejorar la seguridad, escriba los datos en los directorios de usu
ario en lugar de en el directorio raíz o el directorio Archivos de programa.

El canal que se debe abrir puede encontrarse utilizando la función FreeFile().


Nota de seguridad
La función FileOpen requiere acceso Read de la enumeración FileIOPermissionAccess, lo que puede afectar a su ejecución
en situaciones de confianza parcial. Para obtener más información, vea la enumeración FileIOPermissionAccess y
Solicitar permisos.

Ejemplo
En este ejemplo se muestran varios usos de la función FileOpen para habilitar operaciones de entrada y salida en un archivo.
El siguiente código abre el archivo TestFile en modo Input.
VB
FileOpen(1, "TESTFILE", OpenMode.Input)
' Close before reopening in another mode.
FileClose(1)

En este ejemplo, se abre el archivo en modo Binary sólo para operaciones de escritura.
VB
FileOpen(1, "TESTFILE", OpenMode.Binary,OpenAccess.Write)
' Close before reopening in another mode.
FileClose(1)

En el siguiente ejemplo, se abre el archivo en modo Random. El archivo contiene registros de la estructura Person.
VB
Structure Person
<VBFixedString(30)> Dim Name As String
Dim ID As Integer
End Structure
Public Sub ExampleMethod()
' Count 30 for the string, plus 4 for the integer.
FileOpen(1, "TESTFILE", OpenMode.Random, , , 34)
' Close before reopening in another mode.
FileClose(1)
End Sub

Con este código de ejemplo, el archivo se abre en modo Output: cualquier proceso puede leer o escribir en él.
VB
FileOpen(1, "TESTFILE", OpenMode.Output, OpenAccess.Default, OpenShare.Shared)
' Close before reopening in another mode.
FileClose(1)

Con este código de ejemplo, el archivo se abre en modo Binary para lectura: ningún otro proceso podrá leerlo.
VB
FileOpen(1, "TESTFILE", OpenMode.Binary, OpenAccess.Read, _
OpenShare.LockRead)

Notas para desarrolladores de dispositivos inteligentes


Esta función no está admitida.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: FileSystem
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
FileClose (Función)
FreeFile (Función)
Otros recursos
Leer archivos en Visual Basic
Escribir en archivos en Visual Basic
Referencia del lenguaje Visual Basic

FilePut (Función)
Escribe datos de una variable en un archivo de disco.
La característica My proporciona mayor productividad y rendimiento en las operaciones de E/S del archivo que si se utiliza
FilePut. Para obtener más información, vea My.Computer.FileSystem (Objeto).

Public Overloads Sub FilePut( _


FileNumber As Integer, _
Value As Short, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FilePut( _
FileNumber As Integer, _
Value As Integer, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FilePut( _
FileNumber As Integer, _
Value As Single, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FilePut( _
FileNumber As Integer, _
Value As Double, _
RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FilePut( _
FileNumber As Integer, _
Value As Decimal, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FilePut( _
FileNumber As Integer, _
Value As Byte, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FilePut( _
FileNumber As Integer, _
Value As Boolean, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FilePut( _
FileNumber As Integer, _
Value As Date, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FilePut( _
FileNumber As Integer, _
Value As System.Array, _
Optional RecordNumber As Integer = -1, _
Optional ArrayIsDynamic As Boolean = False _
)
' -or-
Public Overloads Sub FilePut (
FileNumber As Integer,
Value As String, _
Optional RecordNumber As Integer = -1,
Optional StringIsFixedLength As Boolean = False
)

Parámetros
FileNumber
Obligatorio. Cualquier número de archivo válido.
Value
Obligatorio. Nombre válido de variable que contiene los datos escritos en disco.
RecordNumber
Opcional. Número de registro (archivos en modo Random) o número de byte (archivos en modo Binary) en el que se
comienza a escribir.
ArrayIsDynamic
Opcional. Sólo se aplica cuando se escribe una matriz. Especifica si se ha de tratar a la matriz como dinámica y si se ha de
escribir un descriptor de matriz para la cadena que detalla la longitud.
StringIsFixedLength
Opcional. Sólo se aplica cuando se escribe una cadena. Especifica si se escribe en el archivo un descriptor de longitud de
cadena de dos bytes para la cadena. El valor predeterminado es False.
Excepciones
Tipo de excepción Número de error Condición
ArgumentException 63 RecordNumber < 1 y distinto de -1.

IOExceptio 52 FileNumber no existe.

IOException 54 El modo de archivo no es válido.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, debe considerarse la posibilidad de sustituir dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
FilePut sólo es válido en los modos Random y Binary.
Los datos escritos con FilePut normalmente se leen desde un archivo con FileGet.
El primer registro o byte de un archivo se encuentra en la posición 1, el segundo en la posición 2 y así sucesivamente. Si se
omite RecordNumber, se escribe el registro o byte que sigue a la última función FileGet o FilePut, o al que señale la última
función Seek.
El argumento StringIsFixedLength controla si la función interpreta las cadenas como cadenas de longitud fija o variable.
FilePut no escribe el descriptor de longitud cuando el argumento es True. Si se utiliza StringIsFixedLength = True con FilePut,
deberá hacer lo mismo con FileGet y deberá comprobar también que la cadena se inicializa con la longitud esperada.
Modo Random
Con los archivos abiertos en modo Random, se aplican las siguientes reglas:
Si la longitud de los datos que se estén escribiendo es menor que la especificada en la cláusula RecordLength de la
función FileOpen, FilePut escribirá los registros posteriores en los límites de longitud de registro. El espacio
comprendido entre el final de un registro y el principio del siguiente se rellena con el contenido existente del búfer del
archivo. Como no se puede determinar con seguridad la cantidad de datos de relleno, suele ser una buena idea hacer que
la longitud del registro coincida con la de los datos que se estén escribiendo. Si la longitud de los datos que se escriben
es mayor que la especificada en la cláusula RecordLength de la función FileOpen, se producirá una excepción.
Si la variable que se está escribiendo es una cadena, FilePut escribirá un descriptor de 2 bytes con la longitud de la
cadena y, a continuación, escribirá los datos de la variable. Por tanto, la longitud de registro especificada por la cláusula
RecordLength en la función FileOpen debe ser, como mínimo, 2 bytes mayor que la longitud real de la cadena.
Si la variable que se está escribiendo es un objeto que contiene un tipo numérico, FilePut escribirá dos bytes para
identificar el VarType del objeto y, a continuación, escribirá la variable. Por ejemplo, al escribir un objeto con un entero,
FilePut escribe seis bytes: dos bytes identifican el objeto como VarType(3) (Integer) y los otros cuatro bytes contienen
los datos. La longitud de registro especificada por el parámetro RecordLength en la función FileOpen debe ser, como
mínimo, 2 bytes mayor que el número real de bytes necesario para almacenar la variable.
Si la variable que se está escribiendo es un objeto que contiene una cadena, FilePut escribirá un descriptor de dos bytes
para identificar el VarType(8) del objeto, un descriptor de dos bytes para indicar la longitud de la cadena y, por último,
escribirá los datos de la cadena. La longitud de registro especificada por el parámetro RecordLength en la función
FileOpen debe ser, como mínimo, cuatro bytes mayor que la longitud real de la cadena. Si desea escribir una cadena sin
el descriptor, debe pasar un valor True al parámetro StringIsFixedLength y la cadena que lea debe tener la longitud
correcta.
Si la variable que se esté escribiendo es una matriz, podrá elegir si desea escribir o no un descriptor con el tamaño y
dimensiones de la matriz. Visual Basic 6.0 y otras versiones anteriores escribían el descriptor de archivos de las matrices
dinámicas, pero no el de las matrices de tamaño fijo. De manera predeterminada, Visual Basic 2005 no escribe el
descriptor. Para escribirlo, establezca el parámetro ArrayIsDynamic en True. Al escribir la matriz, deberá detallar la forma
en que se efectuará su lectura: si va a leerse con el descriptor, entonces deberá escribirlo. El descriptor especifica tanto el
rango de la matriz, como el tamaño y los límites inferiores de cada rango. Su longitud es igual a 2 más 8 veces el número
de dimensiones: (2 + 8 * NumberOfDimensions). La longitud de registro especificada por la cláusula RecordLength en la
función FileOpen debe ser mayor o igual que la suma de todos los bytes necesarios para escribir los datos y el
descriptor de la matriz. Por ejemplo, la siguiente declaración de matriz requiere 118 bytes cuando la matriz se escribe en
disco:
VB
Dim MyArray(4,9) As Integer

Si la variable que se esté escribiendo es de cualquier otro tipo (no una cadena de longitud variable ni un objeto), FilePut
sólo escribirá los datos de la variable. La longitud de registro especificada por la cláusula RecordLength en la función
FileOpen debe ser mayor o igual que la longitud de los datos que se estén escribiendo.
FilePut escribe elementos de estructuras como si cada uno de ellos estuviese escrito por separado, con la excepción de
que no existe relleno entre ellos. El atributo VBFixedString puede aplicarse a campos de cadena de las estructuras para
indicar el tamaño de la cadena cuando se escribe en disco.
Nota
Los campos de cadena que tienen más bytes de lo especificado por el atributo VBFixedString se trunca cuando se escr
ibe en el disco.

Modo Binary
La mayor parte de las reglas de modo Random se aplican a los archivos abiertos en modo Binary, con contadas excepciones.
Las reglas siguientes para los archivos abiertos en modo Binary difieren de las reglas de modo Random :
La cláusula RecordLength de la función FileOpen no tiene ningún efecto. FilePut escribe todas las variables en el disco
una detrás de otra, es decir, sin dejar relleno entre los registros.
En el caso de matrices no asociadas a estructuras, FilePut escribirá únicamente los datos. No se escribirá ningún
descriptor.
FilePut escribe las cadenas de longitud variable que no sean elementos de estructuras sin el descriptor de longitud de
dos bytes. El número de bytes escrito es igual al número de caracteres de la cadena. Por ejemplo, en las siguientes
instrucciones se escribe 11 bytes en el archivo número 1:
VB
Dim hellow As String = "Hello World"
FilePut(1,hellow)
Para escribir en un archivo con la función FilePut, es necesario tener acceso de tipo Write desde la enumeración
FileIOPermissionAccess.
Ejemplo
En este ejemplo se utiliza la función FilePut para escribir datos en un archivo. En el archivo se escriben cinco registros de la
estructura Person.
VB
Structure Person
Public ID As Integer
Public Name As String
End Structure

Sub WriteData()
Dim PatientRecord As Person
Dim recordNumber As Integer
' Open file for random access.
FileOpen(1, "C:\TESTFILE.txt", OpenMode.Binary)
' Loop 5 times.
For recordNumber = 1 To 5
' Define ID.
PatientRecord.ID = recordNumber
' Create a string.
PatientRecord.Name = "Name " & recordNumber
' Write record to file.
FilePut(1, PatientRecord)
Next recordNumber
FileClose(1)
End Sub

Notas para desarrolladores de dispositivos inteligentes


Esta función no es compatible.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: FileSystem
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
FileGet (Función)
FileOpen (Función)
Seek (Función)
FileGetObject (Función)
VBFixedStringAttribute (Clase)
Len (Función, Visual Basic)
ArgumentException
IOException
Otros recursos
Escribir en archivos en Visual Basic
Referencia del lenguaje Visual Basic

FilePutObject (Función)
Escribe datos de una variable en un archivo de disco.
La característica My proporciona mayor productividad y rendimiento en las operaciones de E/S del archivo que si se utiliza
FilePutObject. Para obtener más información, vea My.Computer.FileSystem (Objeto).

Public Sub FilePutObject( _


FileNumber As Integer, _
Value As Object, _
RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FilePutObject( _
FileNumber As Integer, _
Value As Short, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FilePutObject( _
FileNumber As Integer, _
Value As Integer, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FilePutObject( _
FileNumber As Integer, _
Value As Single, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FilePutObject( _
FileNumber As Integer, _
Value As Double, _
RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FilePutObject( _
FileNumber As Integer, _
Value As Decimal, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FilePutObject( _
FileNumber As Integer, _
Value As Byte, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FilePutObject( _
FileNumber As Integer, _
Value As Boolean, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FilePutObject( _
FileNumber As Integer, _
Value As Date, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FilePutObject( _
FileNumber As Integer, _
Value As System.Array, _
Optional RecordNumber As Integer = -1, _
Optional ArrayIsDynamic As Boolean = False _
)
' -or-
Overloads Public Sub FilePutObject( _
FileNumber As Integer, _
Value As String, _
Optional RecordNumber As Integer = -1, _
Optional StringIsFixedLength As Boolean = False _
)

Parámetros
FileNumber
Obligatorio. Cualquier número de archivo válido.
Value
Obligatorio. Nombre válido de variable que contiene los datos escritos en disco.
RecordNumber
Opcional. Número de registro (archivos en modo Random) o número de byte (archivos en modo Binary) en el que se
comienza a escribir.
ArrayIsDynamic
Opcional. Sólo se aplica cuando se escribe una matriz. Especifica si se ha de tratar a la matriz como dinámica y si se ha de
escribir un descriptor de matriz para la cadena que detalla la longitud.
StringIsFixedLength
Opcional. Sólo se aplica cuando se escribe una cadena. Especifica si se escribe un descriptor para la cadena que describe la
longitud. El valor predeterminado es False.
Comentarios
La función FilePutObject se utiliza en lugar de FilePut para evitar ambigüedades en tiempo de compilación si se pasa el tipo
Object en vez de otro tipo, como Integer, Long, Short, etc.
FilePutObject escribe y lee descriptores que describen el objeto. Si desea escribir el tipo Variant, se requiere FilePutObject.
Si tiene dudas y está utilizando un objeto para el segundo parámetro, conviene utilizar siempre FilePutObject y
FileGetObject.
FilePutObject sólo es válido en los modos Random y Binary.
Los datos escritos con FilePutObject normalmente se leen desde un archivo con FileGetObject.
El primer registro o byte de un archivo se encuentra en la posición 1, el segundo en la posición 2 y así sucesivamente. Si se
omite RecordNumber, FilePutObject escribe el siguiente registro o byte después de la última función FileGetObject o
FilePutObject (o el registro o byte al que señale la última función Seek).
El argumento StringIsFixedLength controla si la función interpreta las cadenas como cadenas de longitud fija o variable.
FilePutObject no escribe el descriptor de longitud cuando el argumento es True. Si se utiliza StringIsFixedLength = True con
FilePutObject, deberá hacer lo mismo con FileGetObject y deberá comprobar también que la cadena se inicializa con la
longitud esperada.
Modo Random
Con los archivos abiertos en modo Random, se aplican las siguientes reglas:
Si la longitud de los datos que se estén escribiendo es menor que la especificada en la cláusula RecordLength de la
función FileOpen, FilePutObject escribirá los registros posteriores en los límites de longitud de registro. El espacio
comprendido entre el final de un registro y el principio del siguiente se rellena con el contenido existente del búfer del
archivo. Como no se puede determinar con exactitud la cantidad de datos de relleno, suele ser una buena idea hacer que
la longitud del registro coincida con la de los datos que se estén escribiendo. Si la longitud de los datos que se escriben
es mayor que la especificada en la cláusula RecordLength de la función FileOpen, se producirá una excepción.
Si la variable que se está escribiendo es un objeto que contiene un tipo numérico, FilePutObject escribirá dos bytes para
identificar el VarType del objeto y, a continuación, escribirá la variable. Por ejemplo, al escribir un objeto con un entero,
FilePutObject escribe seis bytes: dos bytes identifican el objeto como VarType(3) (Integer) y los otros cuatro bytes
contienen los datos. La longitud de registro especificada por el parámetro RecordLength en la función FileOpen debe
ser, como mínimo, 2 bytes mayor que el número real de bytes necesario para almacenar la variable.
Si la variable que se está escribiendo es un objeto que contiene una cadena, FilePutObject escribirá un descriptor de
dos bytes para identificar el VarType(8) del objeto, un descriptor de dos bytes para indicar la longitud de la cadena y,
por último, escribirá los datos de la cadena. La longitud de registro especificada por el parámetro RecordLength en la
función FileOpen debe ser, como mínimo, cuatro bytes mayor que la longitud real de la cadena. Si desea escribir una
cadena sin el descriptor, debe pasar un valor True al parámetro StringIsFixedLength y la cadena que lea debe tener la
longitud correcta.
Si la variable que se esté escribiendo es una matriz, puede elegir escribir un descriptor con el tamaño y dimensiones de
la matriz. Visual Basic 6.0 y otras versiones anteriores escribían el descriptor de archivo de las matrices dinámicas, pero
no el de las matrices de tamaño fijo; de manera predeterminada, Visual Basic no escribe el descriptor. Para escribirlo,
establezca el parámetro ArrayIsDynamic en True. Al escribir la matriz, deberá detallar la forma en que se efectúa la
lectura: si se lee con el descriptor, deberá escribirlo. El descriptor especifica tanto el rango de la matriz, como el tamaño y
los límites inferiores de cada rango. Su longitud es igual a 2 más 8 veces el número de dimensiones: (2 + 8 *
NumberOfDimensions). La longitud de registro especificada por la cláusula RecordLength en la función FileOpen debe
ser mayor o igual que la suma de todos los bytes necesarios para escribir los datos y el descriptor de la matriz.
Modo Binary
En los archivos abiertos en modo Binary, se aplicarán todas las reglas del modo Random excepto:
La cláusula RecordLength de la función FileOpen no tiene ningún efecto. FilePutObject escribe todas las variables en el
disco una detrás de otra, es decir, sin dejar relleno entre los registros.
Ejemplo
En este ejemplo se utiliza la función FilePutObject para escribir una cadena en un archivo.
VB
Sub WriteData()
Dim text As String = "test"
FileOpen(1, "test.bin", OpenMode.Binary)
FilePutObject(1, text)
FileClose(1)
End Sub

Notas para desarrolladores de dispositivos inteligentes


Esta función no es compatible.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: FileSystem
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
FileGet (Función)
FileOpen (Función)
Seek (Función)
FilePut (Función)
My.Computer.FileSystem (Objeto)
Otros recursos
Escribir en archivos en Visual Basic
Referencia del lenguaje Visual Basic

FileWidth (Función)
Asigna un ancho de línea de salida a un archivo abierto con la función FileOpen.

Public Sub FileWidth( _


FileNumber As Integer, _
RecordWidth As Integer _
)

Parámetros
FileNumber
Requerido. Cualquier número de archivo válido.
RecordWidth
Requerido. Expresión numérica entre 0 y 255, ambos inclusive, que indica cuántos caracteres aparecen en una línea antes del
comienzo de otra línea nueva. Si RecordWidth es igual a 0, la longitud de la línea no tendrá límite. El valor predeterminado
para RecordWidth es 0.
Excepciones
Tipo de excepción Número de error Condición
IOException D0E96AEA-7621-48F6-A78B-5D37D18AAA4E FileNumber no existe.

IOException 74891E96-884B-4C8D-872D-CD11AE272372 El modo de archivo no es válido.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
Esta función asigna un ancho de línea de salida a un archivo abierto con la función FileOpen.
Ejemplo
En este ejemplo se utiliza la función FileWidth para definir el ancho de la línea de salida de un archivo.
VB
Dim i As Integer
FileOpen(1, "TESTFILE", OpenMode.Output) ' Open file for output.
FileWidth(1, 5) ' Set output line width to 5.
For i = 0 To 9 ' Loop 10 times.
Print(1, Chr(48 + I)) ' Prints five characters per line.
Next
FileClose(1) ' Close file.

Notas para desarrolladores de dispositivos inteligentes


Esta función no es compatible.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: FileSystem
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
FileOpen (Función)
Print, PrintLine (Funciones)
IOException Class
Otros recursos
Propiedades de archivos, directorios y unidades en Visual Basic
Referencia del lenguaje Visual Basic

Filter (Función, Visual Basic)


Devuelve una matriz basada en cero que contiene un subconjunto de una matriz String basada en criterios de filtro
especificados.

Function Filter(
ByVal Source() As { Object | String },
ByVal Match As String,
Optional ByVal Include As Boolean = True,
Optional ByVal Compare As CompareMethod = CompareMethod.Binary
) As String()

Parámetros
Source
Requerido. Matriz unidimensional de cadenas en la que se realizará la búsqueda.
Match
Requerido. Cadena que se va a buscar.
Include
Opcional. Valor Boolean que indica si se han de devolver las subcadenas que incluyan o excluyan Match. Si Include tiene el
valor True, la función Filter devuelve el subconjunto de la matriz que contiene Match como una subcadena. Si Include tiene
el valor False, la función Filter devuelve el subconjunto de la matriz que no contiene Match como una subcadena.
Compare
Opcional. Valor numérico que indica el tipo de comparación de cadenas que se ha de utilizar. Vea la sección "Valores" para
conocer los valores utilizados.
Valores
El argumento Compare puede tener los siguientes valores:
Constante Descripción
CompareMethod.Binary Realiza una comparación binaria

CompareMethod.Text Realiza una comparación textual


Excepciones
Tipo de excepción Número de error Condición
ArgumentException 9 Source es Nothing o no es una matriz unidimensional.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
Si no se encuentra ninguna coincidencia de Match en Source, la función Filter devuelve una matriz vacía. Si Source se establece
en Nothing o no es una matriz unidimensional, se producirá un error.
La matriz devuelta por la función Filter sólo dispone de los elementos justos para contener el número de elementos
coincidentes.
Ejemplo
En este ejemplo se muestra el uso de la función Filter.
VB
Dim TestStrings(2) As String
TestStrings(0) = "This"
TestStrings(1) = "Is"
TestStrings(2) = "It"
Dim subStrings() As String
' Returns ["This", "Is"].
subStrings = Filter(TestStrings, "is", True, CompareMethod.Text)
' Returns ["This"].
subStrings = Filter(TestStrings, "is", True, CompareMethod.Binary)
' Returns ["Is", "It"].
subStrings = Filter(TestStrings, "is", False, CompareMethod.Binary)

Requisitos
Espacio de nombres:Microsoft.VisualBasic
Módulo: Strings
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Resumen de manipulación de cadenas
Replace (Función, Visual Basic)
ArgumentException
Referencia del lenguaje Visual Basic

Int, Fix (Funciones, Visual Basic)


Devuelven la parte entera de un número.

Public Shared Function Int( _


ByVal Number As { Double | Integer | Long | Object | Short | Single | Decimal }) _
As { Double | Integer | Long | Object | Short | Single | Decimal }
Public Shared Function Fix( _
ByVal Number As { Double | Integer | Long | Object | Short | Single | Decimal }) _
As { Double | Integer | Long | Object | Short | Single | Decimal }

Parámetros
Number
Requerido. Un número de tipo Double o cualquier expresión numérica válida. Si Number contiene Nothing, se devolverá
Nothing.
Excepciones
Tipo de excepción Número de error Condición
ArgumentNullException 9B07D280-66C6-4EA5-A8ED-5DDB0036F877 No se ha especificado Number.

ArgumentException 9B07D280-66C6-4EA5-A8ED-5DDB0036F877 Number no es un tipo numérico.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
Las funciones Int y Fix quitan la parte fraccionaria de Number y devuelven el valor entero resultante.
La diferencia entre las funciones Int y Fix es que si el valor Number es negativo, Int devuelve el primer entero negativo menor
o igual que Number, mientras que Fix devuelve el primer entero negativo mayor o igual que Number. Por ejemplo, Int
convierte -8,4 en -9 y Fix convierte -8,4 en -8.
Fix(number)equivale aSign(number) * Int(Abs(number)).

Ejemplo
En este ejemplo se muestra cómo las funciones Int y Fix devuelven las partes enteras de los números. En el caso de un
argumento de número negativo, la función Int devuelve el primer entero negativo igual o menor que el número, y la función
Fix devuelve el primer entero negativo igual o mayor que el número. En el siguiente ejemplo se requiere especificar Option
Strict Off porque no se permiten las conversiones implícitas de tipo Double a tipo Integer en Option Strict On:
VB
' This code requires Option Strict Off
Dim MyNumber As Integer
MyNumber = Int(99.8) ' Returns 99.
MyNumber = Fix(99.8) ' Returns 99.

MyNumber = Int(-99.8) ' Returns -100.


MyNumber = Fix(-99.8) ' Returns -99.
MyNumber = Int(-99.2) ' Returns -100.
MyNumber = Fix(-99.2) ' Returns -99.

Puede utilizar la función CInt para convertir explícitamente otros tipos de datos al tipo Integer con Option Strict Off. Sin
embargo, CInt se redondea al entero más próximo en lugar de truncar la parte fraccionaria de los números. Por ejemplo:
VB
MyNumber = CInt(99.8) ' Returns 100.
MyNumber = CInt(-99.8) ' Returns -100.
MyNumber = CInt(-99.2) ' Returns -99.

Puede utilizar la función CInt en el resultado de una llamada a Fix o Int para realizar la conversión explícita al valor entero sin
redondear. Por ejemplo:
VB
MyNumber = CInt(Fix(99.8)) ' Returns 99.
MyNumber = CInt(Int(99.8)) ' Returns 99.

Para obtener más información sobre CInt, vea Funciones de conversión de tipos.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Conversion
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Funciones de conversión de tipos
Integer (Tipo de datos, Visual Basic)
Resumen de funciones matemáticas
Funciones matemáticas (Visual Basic)
Resumen de conversión
ArgumentNullException
Referencia del lenguaje Visual Basic

Format (Función)
Devuelve una cadena con el formato que especifiquen las instrucciones contenidas en una expresión String de formato.

Public Shared Function Format( _


ByVal Expression As Object, _
Optional ByVal Style As String = "" _
) As String

Parámetros
Expression
Requerido. Cualquier expresión válida.
Style
Opcional. Expresión String de formato con nombre o definido por el usuario que es válido.
Valores
Para obtener información sobre cómo crear el argumento Style, vea el tema correspondiente en la siguiente lista:
Para dar formato Haga lo siguiente
Números Utilice formatos numéricos predefinidos o cree formatos numéricos definidos por el usuario.

Fechas y horas Utilice formatos de fecha y hora predefinidos o cree


formatos de fecha y hora definidos por el usuario.

Números de serie de fecha y h Usar formatos de fecha y hora o numéricos.


ora.

Si intenta aplicar formato a un número sin especificar Style, la función Format ofrecerá una funcionalidad similar a la función
Str, a pesar de admitir configuraciones internacionales. No obstante, los números positivos a los que se les da formato de
cadena mediante la función Format no incluyen ningún espacio inicial reservado para el signo del valor; los que se convierten
mediante la función Str sí conservan este espacio inicial.
Comentarios
Si da formato a una cadena numérica no localizada, debería utilizar un formato numérico definido por el usuario para
asegurarse de lograr la presentación deseada.
El método System.String.Format también proporciona una funcionalidad similar.
Ejemplo
En este ejemplo se muestran los diversos usos de la función Format para dar formato a valores tanto con formatos String
como otros definidos por el usuario. Para el separador de fecha (/), hora (:) e indicadores de a.m./p.m. (t y tt), el formato de
salida que muestre su sistema dependerá de la configuración regional que use el código. Cuando las horas y fechas se
muestren en el entorno de desarrollo, se utilizará el formato de fecha y hora corta de la configuración regional del código.
Nota
Para configuraciones regionales que utilizan un reloj de 24 horas, los indicadores de a.m./p.m. (t y tt) no muestran nada.

VB
Dim TestDateTime As Date = #1/27/2001 5:04:23 PM#
Dim TestStr As String
' Returns current system time in the system-defined long time format.
TestStr = Format(Now(), "Long Time")
' Returns current system date in the system-defined long date format.
TestStr = Format(Now(), "Long Date")
' Also returns current system date in the system-defined long date
' format, using the single letter code for the format.
TestStr = Format(Now(), "D")

' Returns the value of TestDateTime in user-defined date/time formats.


' Returns "5:4:23".
TestStr = Format(TestDateTime, "h:m:s")
' Returns "05:04:23 PM".
TestStr = Format(TestDateTime, "hh:mm:ss tt")
' Returns "Saturday, Jan 27 2001".
TestStr = Format(TestDateTime, "dddd, MMM d yyyy")
' Returns "17:04:23".
TestStr = Format(TestDateTime, "HH:mm:ss")
' Returns "23".
TestStr = Format(23)

' User-defined numeric formats.


' Returns "5,459.40".
TestStr = Format(5459.4, "##,##0.00")
' Returns "334.90".
TestStr = Format(334.9, "###0.00")
' Returns "500.00%".
TestStr = Format(5, "0.00%")

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Strings
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Resumen de manipulación de cadenas
Diferentes formatos para diferentes valores numéricos (Función Format)
Formatos de fecha y hora predefinidos (Función Format)
Formatos numéricos predefinidos (Función Format)
Str (Función)
Funciones de conversión de tipos
Formatos de fecha y hora definidos por el usuario (Función Format)
Formatos numéricos definidos por el usuario (Función Format)
Format
Referencia del lenguaje Visual Basic

Diferentes formatos para diferentes valores numéricos (Función


Format)
Expresión de formato definida por el usuario y correspondiente a números que pueden contener entre una y tres secciones
separadas por signos de punto y coma. Si el argumento Style de la función Format contiene uno de los formatos numéricos
predefinidos, sólo se permite una sección.
Si usa El resultado será
Sólo una secció La expresión de formato se aplica a todos los valores.
n

Dos secciones La primera sección se aplica a valores positivos y ceros; la segunda, sólo a valores negativos.

Tres secciones. La primera sección se aplica a valores positivos y ceros; la segunda, sólo a valores negativos; la tercera, a cero
s.

El siguiente ejemplo contiene dos secciones: la primera define el formato para valores positivos y ceros; la segunda define el
formato para valores negativos. Como el argumento Style de la función Format utiliza una cadena, ésta aparece entre comillas.
VB
Dim Style1 As String = "$#,##0;($#,##0)"

Si incluye signos de punto y coma sin nada entre ellos, la sección ausente se imprimirá usando el formato del valor positivo.
Por ejemplo, el siguiente formato mostrará valores positivos y negativos usando el formato de la primera sección; y mostrará
Zero si el valor es cero.

VB
Dim Style2 As String = "$#,##0;;\Z\e\r\o"

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Strings
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Formatos numéricos predefinidos (Función Format)
Format (Función)
Resumen de manipulación de cadenas
Referencia del lenguaje Visual Basic

Formatos numéricos predefinidos (Función Format)


La tabla siguiente muestra los nombres de formato numérico predefinidos. Éstos pueden usarse por nombre como argumento
de estilo para la función Format:
Nombre de Descripción
formato
General Nu Muestra el número sin separadores de miles.
mber, G o g

Currency, C Muestra el número con separadores de miles, en su caso; también muestra dos dígitos a la derecha del separado
oc r de decimales. El formato de salida dependerá de la configuración regional.

Fixed, F o f Muestra al menos un dígito a la izquierda y dos a la derecha del separador de decimales.

Standard, N Muestra el número con separador de miles, al menos un dígito a la izquierda y dos a la derecha del separador de
on decimales.

Percent Muestra el número multiplicado por 100 con un signo de porcentaje (%) a la derecha; siempre muestra dos dígit
os a la derecha del separador de decimales.

Po bien p Muestra el número con separador de miles multiplicado por 100 con un signo de porcentaje (%) a la derecha y s
eparado por un solo espacio; siempre muestra dos dígitos a la derecha del separador de decimales.

Scientific Utiliza notación científica estándar y proporciona dos dígitos significativos.

Eo bien e Utiliza notación científica estándar y proporciona seis dígitos significativos.

Do bien d Muestra el número como una cadena que contiene el valor del número en formato Decimal (base 10). Esta opció
n sólo se admite para tipos integrales (Byte, Short, Integer, Long).

Xo bien x Muestra el número como una cadena que contiene el valor del número en formato Hexadecimal (base 16). Esta o
pción sólo se admite para tipos integrales (Byte, Short, Integer, Long).

Yes/No Muestra No si el número es 0; de lo contrario, muestra Yes.

True/False Muestra False si el número es 0; de lo contrario, muestra True.

On/Off Muestra Off si el número es 0; de lo contrario, muestra On.


Notas para desarrolladores de dispositivos inteligentes
No se admiten los formatos Yes/No, True/False y On/Off.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Module:Strings
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Resumen de manipulación de cadenas
Resumen de conversión
Format (Función)
Formatos de fecha y hora predefinidos (Función Format)
Formatos numéricos definidos por el usuario (Función Format)
Referencia del lenguaje Visual Basic

Formatos de fecha y hora predefinidos (Función Format)


La tabla siguiente identifica los nombres de formatos de fecha y hora predefinidos. Éstos pueden usarse por nombre como
argumento de estilo para la función Format:
Nombre de format Descripción
o
General Dateo bien Muestra una fecha o una hora. Por ejemplo, 4/3/93 05:34 PM. El formato de fecha depende del valor de
G la referencia cultural actual de la aplicación.

Long Date, Medium Muestra una fecha de acuerdo con el formato de fecha larga vigente en la referencia cultural actual.
Date o D

Short Dateo bien d Muestra una fecha de acuerdo con el formato de fecha corta vigente en la referencia cultural actual.

Long Time, Medium Muestra una hora de acuerdo con el formato de hora larga vigente en la referencia cultural actual; e incl
Time o T uye normalmente horas, minutos y segundos.

Short Timeo bien t Muestra una hora de acuerdo con el formato de hora corta vigente en la referencia cultural actual.

f Muestra la fecha larga y la hora corta de acuerdo con el formato vigente en la referencia cultural actual.

F Muestra la fecha larga y la hora larga de acuerdo con el formato vigente en la referencia cultural actual.

g Muestra la fecha corta y la hora corta de acuerdo con el formato vigente en la referencia cultural actual.

M, m Muestra el mes y el día de una fecha dada.

R, r Da formato a la fecha y la hora como Hora media de Greenwich (GMT).

s Da formato a la fecha y la hora como un índice ordenable.

u Da formato a la fecha y la hora como un índice GMT ordenable.

U Da formato como GMT a la fecha larga y la hora larga.

Y, y Da formato a la fecha especificando el año y el mes.

Para obtener más información sobre la información de la referencia cultural actual de la aplicación, vea
Cómo afecta la referencia cultural a las cadenas en Visual Basic.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Strings
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Resumen de manipulación de cadenas
Resumen de conversión
Format (Función)
Formatos numéricos predefinidos (Función Format)
Formatos de fecha y hora definidos por el usuario (Función Format)
Referencia del lenguaje Visual Basic

Formatos de fecha y hora definidos por el usuario (Función


Format)
En la siguiente tabla se muestran los caracteres que se pueden utilizar para crear formatos de fecha y hora definidos por el
usuario. A diferencia de versiones anteriores de Visual Basic, estos caracteres de formato distinguen mayúsculas de
minúsculas.
C Descripción
ar
ác
te
r
(:) Separador de hora. En ciertas configuraciones regionales, pueden usarse otros caracteres para representar el separador de
hora. Este separador horario separa horas, minutos y segundos cuando se da formato a valores horarios. El carácter real uti
lizado como separador de hora en los resultados con formato viene determinado por el valor de referencia cultural actual d
e la aplicación.

(/) Separador de fecha. En ciertas configuraciones regionales, pueden usarse otros caracteres para representar el separador de
fecha. Este separador separa el día, mes y año cuando se da formato a los valores de fecha. El carácter real utilizado como s
eparador de fecha en los resultados con formato viene determinado por la referencia cultural actual de la aplicación.

( Se utiliza para indicar que el carácter siguiente debe leerse como formato de una sola letra sin tener en cuenta las posibles l
% etras finales. También se emplea para indicar que un formato de una sola letra se lea como formato definido por el usuario.
) Para obtener información más detallada, consulte la explicación siguiente.

d Muestra el día como un número sin cero a la izquierda (por ejemplo, 1). Utilice %d si es el único carácter en el formato num
érico definido por el usuario.

d Muestra el día como un número con cero a la izquierda (por ejemplo, 01).
d

d Muestra el día de forma abreviada (por ejemplo, Sun).


d
d

d Muestra el día de forma completa (por ejemplo, Sunday).


d
d
d

M Muestra el mes como un número sin cero a la izquierda (por ejemplo, enero se representa como 1). Utilice %M si es el únic
o carácter en el formato numérico definido por el usuario.

M Muestra el mes como un número con cero a la izquierda (por ejemplo, 01/12/01), doce de enero de 2001.
M

M Muestra el mes en forma abreviada (por ejemplo, Jan).


M
M

M Muestra el mes en forma completa (por ejemplo, January).


M
M
M
g Especifica la era histórica (por ejemplo, A.D.)
g

h Muestra la hora como un número sin ceros a la izquierda y en formato de doce horas (por ejemplo, 1:15:15 PM). Utilice %h
si es el único carácter en el formato numérico definido por el usuario.

h Muestra la hora como un número con ceros a la izquierda y en formato de doce horas (por ejemplo, 01:15:15 PM).
h

H Muestra la hora como un número sin ceros a la izquierda y en formato de doce horas (por ejemplo, 1:15:15). Utilice %H si
es el único carácter en el formato numérico definido por el usuario.

H Muestra la hora como un número con ceros a la izquierda y en formato de doce horas (por ejemplo, 01:15:15).
H

m Muestra los minutos como un número sin ceros a la izquierda (por ejemplo, 12:1:15). Utilice %m si es el único carácter en
el formato numérico definido por el usuario.

m Muestra los minutos como un número con ceros a la izquierda (por ejemplo, 12:01:15).
m

s Muestra los segundos como un número sin ceros a la izquierda (por ejemplo, 12:15:5). Utilice %s si es el único carácter en
el formato numérico definido por el usuario.

ss Muestra los segundos como un número con ceros a la izquierda (por ejemplo, 12:15:05).

f Muestra fracciones de segundos. Por ejemplo, ff muestra centésimas de segundo, mientras que ffff muestra diez milésima
s de segundo. Puede utilizar hasta siete símbolos f en el formato definido por el usuario. Utilice %f si es el único carácter en
el formato numérico definido por el usuario.

t Usa el reloj de doce horas; muestra una A mayúscula para cualquier hora entre medianoche y mediodía, y una P mayúscula
para cualquier hora entre mediodía y medianoche. Utilice %t si éste es el único carácter del formato numérico definido por
el usuario.

tt Para las configuraciones regionales que utilizan el reloj de doce horas, muestra la leyenda AM en mayúsculas para cualquier
hora entre medianoche y mediodía; y PM en mayúsculas para cualquier hora entre mediodía y medianoche.
Para las configuraciones regionales que utilizan el reloj de 24 horas, no muestra nada.

y Muestra el año sin cero inicial. Utilice %y si es el único carácter en el formato numérico definido por el usuario.

yy Muestra el año en formato numérico de dos dígitos sin cero inicial, si procede.

yy Muestra el año en formato numérico de cuatro dígitos.


y

yy Muestra el año en formato numérico de cuatro dígitos.


yy

z Muestra el desplazamiento de zona horaria sin cero a la izquierda (por ejemplo, -8). Utilice %z si es el único carácter en el f
ormato numérico definido por el usuario.

zz Muestra el desplazamiento de zona horaria con un cero a la izquierda (por ejemplo, -08).

zz Muestra el desplazamiento completo de zona horaria (por ejemplo, -08:00).


z
Para obtener más información sobre la información de la referencia cultural actual de la aplicación, vea
Cómo afecta la referencia cultural a las cadenas en Visual Basic.
Ejemplo
A continuación se muestran algunos ejemplos de formatos de hora y fecha definidos por el usuario y correspondientes al 7 de
diciembre de 1958, a las ocho horas, cincuenta minutos y treinta y cinco segundos de la tarde (December 7, 1958, 8:50 PM,
35 seconds):

Formato Muestra
M/d/yy 12/7/58

d-MMM 7-Dec

d-MMMM-yy 7-December-58

d MMMM 7 December

MMMM yy December 58

hh:mm tt 08:50 PM

h:mm:ss t 8:50:35 P

H:mm 20:50

H:mm:ss 20:50:35

M/d/yyyy H:mm 12/7/1958 20:50

Notas para desarrolladores de dispositivos inteligentes


El fabricante de cada dispositivo es el que determina la resolución de tiempo mínima. Si la resolución de tiempo del dispositivo
es lo bastante amplia, el carácter de formato f devuelve 0 cuando se ejecuta en ese dispositivo.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Strings
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Resumen de manipulación de cadenas
Resumen de conversión
Format (Función)
Formatos de fecha y hora predefinidos (Función Format)
Formatos numéricos definidos por el usuario (Función Format)
Referencia del lenguaje Visual Basic

Formatos numéricos definidos por el usuario (Función Format)


La siguiente tabla identifica caracteres que puede usar para crear formatos de número definidos por el usuario. Éstos pueden
usarse para generar el argumento Style correspondiente a la función Format:
C Descripción
a
r
á
ct
e
r
N Muestra el número sin formato alguno.
in
g
u
n
a

(0 Marcador de posición de dígito. Muestra un dígito o un cero. Si la expresión tiene un dígito en la posición donde aparece el
) cero en la cadena de formato, éste se mostrará así; de lo contrario, aparecerá un cero en esa posición.
Si el número tiene menos dígitos que ceros (a cualquier lado del separador decimal) en la expresión de formato, se mostrar
án ceros iniciales o finales. Si el número tiene más dígitos a la derecha del separador decimal que ceros en la expresión de f
ormato, se redondeará el número a tantos decimales como ceros haya. Si el número tiene más dígitos a la derecha del sepa
rador decimal que ceros en la expresión de formato, se redondeará el número a tantos decimales como ceros haya.

(# Marcador de posición de dígito. Muestra un dígito o nada. Si la expresión tiene un dígito en la posición donde aparece el car
) ácter # en la cadena de formato, se muestra; de lo contrario, no aparece nada en esa posición.
Este símbolo funciona como el marcador de posición de dígito 0, salvo que los ceros iniciales y finales no se mostrarán si el
número contiene menos dígitos que caracteres # a cualquiera de los lados del separador decimal en la expresión de format
o.

(.) Marcador de posición decimal. El marcador de posición decimal determina cuántos dígitos se mostrarán a la izquierda y der
echa del separador decimal. Si la expresión de formato sólo contiene caracteres # a la izquierda de este símbolo, los número
s inferiores a 1 empezarán con un separador decimal. Par mostrar un cero inicial con números fraccionarios, use el cero co
mo el primer marcador de posición digital a la izquierda del separador decimal. El uso del punto o la coma como separador
decimal depende de la configuración regional en cada caso. El mismo carácter utilizado como marcador decimal en virtud d
el formato de salida dependerá del formato de número reconocido por su sistema. Por tanto, deberá usar el punto como m
arcador decimal en sus formatos, incluso aunque su configuración regional utilice la coma como separador decimal. La cade
na con formato se mostrará con el formato correcto para la configuración regional correspondiente.

( Marcador de posición de porcentaje. Multiplica la expresión por 100. El carácter de porcentaje (%) se inserta en la misma po
% sición en la que aparece en la cadena de formato.
)
(,) Separador de miles. El separador de miles separa las unidades de millar de las centenas con un número que presente cuatro
o más dígitos a la izquierda del separador decimal. Se especificará un uso estándar del separador de miles si el formato con
tiene un separador de miles rodeado de marcadores de posición de dígito (0 o #).
Un separador de miles situado inmediatamente a la izquierda del separador decimal (se especificará si se trata de un decim
al o no) o como el carácter más a la derecha de la cadena significa "reducir el número dividiéndolo por 1000 y redondeándo
lo en caso necesario". Los números menores que 1,000 pero mayores o iguales que 500 se muestran como 1; los números
menores que 500 se muestran como 0. Dos separadores de miles adyacentes en esta posición se reducen por un factor de 1
millón, más otro factor adicional de 1000 por cada separador adicional.
En el caso de los separadores múltiples en cualquier posición que no sea inmediatamente a la izquierda del separador deci
mal o la posición más a la derecha de la cadena, se interpretará que simplemente especifican el uso de un separador de mil
es. El uso del punto o la coma como separador de miles depende de la configuración regional en cada caso. El mismo caráct
er utilizado como separador de miles en virtud del formato de salida dependerá del formato de número reconocido por su s
istema. Por tanto, deberá usar la coma como marcador de miles en sus formatos, incluso aunque su configuración regional
utilice el punto como marcador de miles. La cadena con formato se mostrará con el formato correcto para la configuración r
egional correspondiente.
Por ejemplo, considere las tres cadenas de formato siguientes:
"#,0.", que utiliza el separador de miles para dar formato al número 100 millones como la cadena "100,000,000".

"#0,.", que ajusta la escala en un factor de mil para dar formato al número 100 millones como la cadena "100000".

"#,0,.", que utiliza el separador de miles y el ajuste de la escala en un factor de mil para dar formato al número 100
millones como la cadena "100,000".

(:) Separador de hora. En ciertas configuraciones regionales, pueden usarse otros caracteres para representar el separador de
hora. Este separador horario separa horas, minutos y segundos cuando se da formato a valores horarios. El carácter real util
izado es el especificado como separador de hora en la configuración de su sistema.

(/ Separador de fecha. En ciertas configuraciones regionales, pueden usarse otros caracteres para representar el separador de
) fecha. Este separador separa el día, mes y año cuando se da formato a los valores de fecha. El carácter real utilizado es el es
pecificado como separador de fecha en la configuración de su sistema.

(E Formato científico. Si la expresión de formato contiene al menos un marcador de posición de dígito (0 o #) a la izquierda de
- E-, E+, e- o e+, el número se muestra en formato científico, y se inserta E o e entre el número y su exponente. El número de
E marcadores de posición digitales a la izquierda determina el número de dígitos en el exponente. Use E- o e- para colocar un
+ signo menos junto a los exponentes negativos. Utilice E+ o e+ para colocar un signo menos junto a los exponentes negativ
e os y un signo más junto a los positivos. También deberá incluir marcadores de posición digitales a la derecha de este símbol
- o para obtener un formato correcto.
e
+
)

- Caracteres literales. Estos caracteres se mostrarán exactamente como se escriben en la cadena de formato. Para mostrar un
+ carácter distinto de los listados, se hace preceder de una barra invertida (\) o se escribe entre comillas (" ").
$
()

(\ Muestra el siguiente carácter de una cadena de formato. Para mostrar un carácter dotado de un significado especial como c
) arácter literal, éste debe ir precedido de una barra invertida (\). La barra invertida en sí no aparecerá. El uso de una barra inv
ertida equivale a incluir el siguiente carácter entre comillas. Para mostrar una barra invertida, se utilizan dos (\\).
Ejemplos de caracteres que no se pueden mostrar cuando los caracteres literales son caracteres de formato de fecha y de fo
rmato de hora (a, c, d, h, m, n, p, q, s, t, w, y, / y :), caracteres de formato numérico (#, 0, %, E, e, coma y punto) y caracteres
de formato de cadenas (@, &, <, > y !).
(" Muestra la cadena entre comillas (" "). Si se desea insertar una cadena en el argumento de estilo desde el código, debe usar
A Chr(34) para incluir el texto (34 es el código de caracteres correspondiente a las comillas dobles (")).
B
C
")
Ejemplo
La tabla siguiente contiene algunas muestras de expresiones de formato correspondientes a números. En estos ejemplos se
presupone que la configuración regional del sistema es Inglés (Estados Unidos). La primera columna contiene las cadenas de
formato correspondientes al argumento Style de la función Format; las otras columnas contienen el formato de salida
resultante si los datos con formato contienen el valor asignado en los encabezados de columna.
Formato (Style) "5" con formato como "-5" con formato como "0.5" con formato como
Zero-length string ("") 5 -5 0.5

0 5 -5 1

0.00 5.00 -5.00 0.50

#,##0 5 -5 1

$#,##0;($#,##0) $5 ($5) $1

$#,##0.00;($#,##0.00) $5.00 ($5.00) $0.50

0% 500% -500% 50%

0.00% 500.00% -500.00% 50.00%

0.00E+00 5.00E+00 -5.00E+00 5.00E-01

0.00E-00 5.00E00 -5.00E00 5.00E-01

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Strings
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Resumen de manipulación de cadenas
Resumen de conversión
Diferentes formatos para diferentes valores numéricos (Función Format)
Format (Función)
Formatos numéricos predefinidos (Función Format)
Formatos de fecha y hora definidos por el usuario (Función Format)
Referencia del lenguaje Visual Basic

FormatCurrency (Función, Visual Basic)


Devuelve una expresión con formato de moneda en la que se utilizará el símbolo de moneda que se haya definido en el panel
de control del sistema.

Function FormatCurrency(
ByVal Expression As Object,
Optional ByVal NumDigitsAfterDecimal As Integer = -1,
Optional ByVal IncludeLeadingDigit As TriState = TriState.UseDefault,
Optional ByVal UseParensForNegativeNumbers As TriState = TriState.UseDefault,
Optional ByVal GroupDigits As TriState = TriState.UseDefault
) As String

Parámetros
Expression
Requerido. Expresión a la que se va a dar formato.
NumDigitsAfterDecimal
Opcional. Valor numérico que indica cuántos lugares a la derecha del signo decimal se van a mostrar. El valor
predeterminado es –1, que indica que se utilizará la configuración regional del equipo.
IncludeLeadingDigit
Opcional. Enumeración de triple estado que indica si los valores fraccionarios han de llevar cero inicial o no. Vea la sección
"Valores" para conocer los valores utilizados.
UseParensForNegativeNumbers
Opcional. Enumeración de triple estado que indica si los valores negativos han de situarse entre paréntesis o no. Vea la
sección "Valores" para conocer los valores utilizados.
GroupDigits
Opcional. Enumeración de triple estado que indica si los números se han de agrupar utilizando el delimitador de grupos
especificado en la configuración regional del equipo. Vea la sección "Valores" para conocer los valores utilizados.
Valores
Los argumentos IncludeLeadingDigit, UseParensForNegativeNumbers y GroupDigits toman los siguientes valores de
enumeración de triple estado.
Valor Descripción
TriState.True True

TriState.False False

TriState.UseDefault Configuración regional del equipo


Excepciones
Tipo de excepción Número de error Condición
ArgumentException 9B07D280-66C6-4EA5-A8ED-5DDB0036F877 El número de dígitos situados a continuación del signo de
cimal es mayor que 99.

InvalidCastException F72E9E21-F475-43F2-9464-29C8AD27B6C2 El tipo no es numérico.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
Cada vez que se omita algún argumento opcional, el equipo lo reemplazará por el valor que se ajuste a su configuración
regional.
La configuración regional del sistema determinará la posición del símbolo de moneda con respecto al valor moneda.
Nota
Toda la información de configuración provendrá de la configuración regional de la aplicación. De manera predeterminada, la
configuración regional será la establecida en el panel de control. Sin embargo, a excepción del cero inicial, que procede de la
ficha Number, la configuración regional podrá cambiarse mediante programación en .NET Framework.

Ejemplo
En el siguiente ejemplo se muestra el uso de la función FormatCurrency.
VB
Dim TestDebt As Double = -4456.43
Dim TestString As String
' Returns "($4,456.43)".
TestString = FormatCurrency(TestDebt, , , TriState.True, TriState.True)

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Strings
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Resumen de manipulación de cadenas
FormatDateTime (Función, Visual Basic)
FormatNumber (Función, Visual Basic)
FormatPercent (Función, Visual Basic)
TriState (Enumeración)
ArgumentException
InvalidCastException
Referencia del lenguaje Visual Basic

FormatDateTime (Función, Visual Basic)


Devuelve una expresión de cadena que representa un valor de fecha u hora.

Function FormatDateTime(
ByVal Expression As DateTime,
Optional ByVal NamedFormat As DateFormat = DateFormat.GeneralDate
) As String

Parámetros
Expression
Requerido. Expresión de tipo Date a la que se va a dar formato.
NamedFormat
Opcional. Valor numérico que indica el formato de fecha u hora utilizado. Si se omite, se utiliza DateFormat.GeneralDate.
Valores
El argumento NamedFormat tiene los siguientes valores.
Constante Descripción
DateFormat.G Muestra una fecha o una hora. Muestra una parte de la fecha como una fecha corta. Si hay una parte con hora,
eneralDate ésta se mostrará como hora larga. De estar presentes, se mostrarán ambas partes.

DateFormat.L Muestra una fecha con el formato de fecha larga especificado en la configuración regional del equipo.
ongDate

DateFormat.S Muestra una fecha con el formato de fecha corta especificado en la configuración regional del equipo.
hortDate

DateFormat.L Muestra una hora con el formato de hora especificado en la configuración regional del equipo.
ongTime

DateFormat.S Muestra una hora con el formato de 24 horas (hh:mm).


hortTime
Excepciones
Tipo de excepción Número de error Condición
ArgumentException 9B07D280-66C6-4EA5-A8ED-5DDB0036F877 El valor de NamedFormat no es válido.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
El tipo de datos Date siempre contiene información de fecha y hora. Para la conversión de tipos, Visual Basic considera 1/1/1
(1 de enero del año 1) un valor neutral de fecha y 00:00:00 (medianoche) un valor neutral de hora.Si a un valor Date se le
asigna el formato de cadena de fecha u hora, FormatDateTime no incluye valores neutrales en la cadena resultante. Por
ejemplo, si se convierte #1/1/0001 9:30:00# en una cadena, el resultado sería "9:30:00 AM", ya que la información de fecha se
omite.No obstante, la información de fecha sigue estando presente en el valor Date original y se puede recuperar mediante
funciones como DatePart.
Nota
Si transfiere el argumento Expression como un literal String, FormatDateTime lo interpreta según la configuración de
CurrentCulture de su aplicación. Sin embargo, si lo transfiere como un literal Date, debería utilizar el formato #mm/dd/aaaa
#, porque FormatDateTime siempre interpreta un literal Date de acuerdo con la referencia cultural de inglés (EE.UU.). Esto e
s necesario porque, si una aplicación se desarrolla y codifica utilizando literales Date de una referencia cultural pero se ejecu
ta en una plataforma de otra referencia cultural diferente, los literales Date podrían analizarse de forma incorrecta.

Ejemplo
En este ejemplo se muestra el uso de la función FormatDateTime.
VB
' English (US) format.
Dim TestDate As DateTime = #3/12/1999#

' FormatDateTime returns "Friday, March 12, 1999".


' The time information is neutral (00:00:00) and therefore suppressed.
Dim TestString As String = FormatDateTime(TestDate, DateFormat.LongDate)

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Strings
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
FormatCurrency (Función, Visual Basic)
FormatNumber (Función, Visual Basic)
FormatPercent (Función, Visual Basic)
DatePart (Función, Visual Basic)
Resumen de manipulación de cadenas
ArgumentException
Referencia del lenguaje Visual Basic

FormatNumber (Función, Visual Basic)


Devuelve una expresión con formato de número.

Function FormatNumber(
ByVal Expression As Object,
Optional ByVal NumDigitsAfterDecimal As Integer = -1,
Optional ByVal IncludeLeadingDigit As TriState = TriState.UseDefault,
Optional ByVal UseParensForNegativeNumbers As TriState = TriState.UseDefault,
Optional ByVal GroupDigits As TriState = TriState.UseDefault
) As String

Parámetros
Expression
Requerido. Expresión a la que se va a dar formato.
NumDigitsAfterDecimal
Opcional. Valor numérico que indica cuántos lugares a la derecha del signo decimal se van a mostrar. El valor
predeterminado es –1, que indica que se utilizará la configuración regional del equipo.
IncludeLeadingDigit
Opcional. Constante de triple estado que indica si los valores fraccionarios han de llevar cero inicial. Vea la sección "Valores"
para conocer los valores utilizados.
UseParensForNegativeNumbers
Opcional. Constante de triple estado que indica si los valores negativos han de situarse entre paréntesis. Vea la sección
"Valores" para conocer los valores utilizados.
GroupDigits
Opcional. Constante de triple estado que indica si los números se han de agrupar utilizando el delimitador de grupos
especificado en la configuración regional del equipo. Vea la sección "Valores" para conocer los valores utilizados.
Valores
Los argumentos IncludeLeadingDigit, UseParensForNegativeNumbers y GroupDigits tienen los siguientes valores.
Constante Descripción
TriState.True True

TriState.False False

TriState.UseDefault Configuración regional del equipo


Excepciones
Tipo de excepción Número de error Condición
InvalidCastException F72E9E21-F475-43F2-9464-29C8AD27B6C2 El tipo no es numérico.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
Cuando se omitan uno o más argumentos opcionales, la configuración regional del equipo proporcionará los valores
correspondientes.
Nota
Toda la información de configuración provendrá de la configuración regional de la aplicación. De manera predeterminada, la
configuración regional será la establecida en el panel de control. No obstante, la configuración regional podrá cambiarse me
diante programación en .NET Framework.

Ejemplo
En este ejemplo se muestra el uso de la función FormatNumber.
VB
Dim TestNumber As Integer = 45600
' Returns "45,600.00".
Dim TestString As String = FormatNumber(TestNumber, 2, , , TriState.True)

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Strings
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Resumen de manipulación de cadenas
FormatCurrency (Función, Visual Basic)
FormatDateTime (Función, Visual Basic)
FormatPercent (Función, Visual Basic)
TriState (Enumeración)
InvalidCastException
Referencia del lenguaje Visual Basic

FormatPercent (Función, Visual Basic)


Devuelve una expresión con formato de porcentaje (multiplicada por 100), acompañada del carácter final %.

Function FormatPercent(
ByVal Expression As Object,
Optional ByVal NumDigitsAfterDecimal As Integer = -1,
Optional ByVal IncludeLeadingDigit As TriState = TriState.UseDefault,
Optional ByVal UseParensForNegativeNumbers As TriState = TriState.UseDefault,
Optional ByVal GroupDigits As TriState = TriState.UseDefault
) As String

Parámetros
Expression
Requerido. Expresión a la que se va a dar formato.
NumDigitsAfterDecimal
Opcional. Valor numérico que indica cuántos lugares a la derecha del signo decimal se van a mostrar. El valor
predeterminado es –1, que indica que se utilizará la configuración regional.
IncludeLeadingDigit
Opcional. Constante TriState que indica si los valores fraccionarios han de llevar o no cero inicial. Vea la sección "Valores"
para conocer los valores utilizados.
UseParensForNegativeNumbers
Opcional. Constante TriState que indica si los valores negativos han de situarse entre paréntesis o no. Vea la sección
"Valores" para conocer los valores utilizados.
GroupDigits
Opcional. Constante TriState que indica si los números se han de agrupar o no utilizando el delimitador de grupos
especificado en la configuración regional del equipo. Vea la sección "Valores" para conocer los valores utilizados.
Valores
Los argumentos IncludeLeadingDigit, UseParensForNegativeNumbers y GroupDigits tienen los siguientes valores.
Constante Descripción
TriState.True True

TriState.False False

TriState.Default Configuración regional del equipo


Excepciones
Tipo de excepción Número de error Condición
InvalidCastException F72E9E21-F475-43F2-9464-29C8AD27B6C2 El tipo no es numérico.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
Cuando se omitan uno o más argumentos opcionales, la configuración regional del equipo proporcionará los valores
correspondientes.
Nota
Toda la información de configuración provendrá de la configuración regional de la aplicación. De manera predeterminada, la
configuración regional será la establecida en el panel de control. No obstante, la configuración regional podrá cambiarse me
diante programación en .NET Framework.

Ejemplo
Este ejemplo muestra el uso de la función FormatPercent.
VB
Dim TestNumber As Single = 0.76
' Returns "76.00%".
Dim TestString As String = FormatPercent(TestNumber)

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Strings
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Resumen de manipulación de cadenas
FormatCurrency (Función, Visual Basic)
FormatDateTime (Función, Visual Basic)
FormatNumber (Función, Visual Basic)
TriState (Enumeración)
InvalidCastException
Referencia del lenguaje Visual Basic

FreeFile (Función)
Devuelve un valor Integer que representa el siguiente número de archivo disponible para ser utilizado por la función
FileOpen.

Public Function FreeFile() As Integer

Excepciones
Tipo de excepción Número de error Condición
IOException 2FF203E2-BBA6-43AE-B72F-8E92A881C98F Hay más de 255 archivos en uso.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
FreeFile se utiliza para proporcionar un número de archivo que ya no esté en uso.
Ejemplo
En este ejemplo se utiliza la función FreeFile para devolver el siguiente número de archivo disponible. Se abren en el bucle
cinco archivos para salida y se escriben en cada uno de ellos algunos datos de ejemplo.
VB
Dim count As Integer
Dim fileNumber As Integer
For count = 1 To 5
fileNumber = FreeFile()
FileOpen(fileNumber, "TEST" & count & ".TXT", OpenMode.Output)
PrintLine(fileNumber, "This is a sample.")
FileClose(fileNumber)
Next

Notas para desarrolladores de dispositivos inteligentes


Esta función no es compatible.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: FileSystem
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
FileOpen (Función)
IOException Class
Otros recursos
Escribir en archivos en Visual Basic
Referencia del lenguaje Visual Basic

FV (Función)
Devuelve un valor de tipo Double que indica el valor futuro de una anualidad con pagos fijos periódicos, y un tipo de interés
fijo.

Function FV( _
ByVal Rate As Double, _
ByVal NPer As Double, _
ByVal Pmt As Double, _
Optional ByVal PV As Double = 0, _
Optional ByVal Due As DueDate = DueDate.EndOfPeriod _
) As Double

Parámetros
Rate
Requerido. Double que indica el tipo de interés por período. Por ejemplo, si obtiene un crédito para comprar un automóvil a
una tasa porcentual anual (TAE) del 10 por ciento, y realiza pagos mensuales, el tipo por período será 0,1/12 ó 0,0083.
NPer
Requerido. Double que indica el número total de períodos de pago (plazos) de la anualidad. Por ejemplo, si realiza pagos
mensuales correspondientes a un crédito para adquirir un automóvil a cuatro años, el crédito tendrá un total de 4 x 12 (ó 48)
períodos de pago.
Pmt
Requerido. Valor de tipo Double que indica el pago que se va a realizar cada período. Normalmente, los pagos contienen un
capital principal y un interés que no varía a lo largo de la duración de la anualidad.
PV
Opcional. Valor de tipo Double que indica el valor actual (valor total) de una serie de pagos que se realizarán en el futuro.
Por ejemplo, en el momento de obtener un crédito para comprar un automóvil, el importe del mismo es el valor actual para
el prestamista de los pagos mensuales que se realizarán. Si se omite, se supone que es 0.
Due
Opcional. Objeto de tipo DueDate (Enumeración) que indica cuándo vencen los pagos. Este argumento debe ser
DueDate.EndOfPeriod si los pagos vencen al final del período o DueDate.BegOfPeriod si los pagos vencen al principio
del mismo. Si se omite, se supone que es DueDate.EndOfPeriod.
Comentarios
Una anualidad es una serie de pagos fijos en efectivo realizados a lo largo de un período de tiempo. Puede ser un préstamo
(como la hipoteca de un inmueble, por ejemplo) o una inversión (como un plan de ahorro mensual).
Los argumentos Rate y NPer deben calcularse utilizando períodos de pago expresados en las mismas unidades. Por ejemplo, si
Rate se calcula en meses, NPer deberá calcularse del mismo modo.
Para todos los argumentos, el efectivo abonado (como depósitos de ahorro) se representa con números negativos; y el
recibido (como cheques de dividendos), con números positivos.
Ejemplo
En este ejemplo, se utiliza la función FV para devolver el valor futuro de una inversión, dados la tasa porcentual acumulada por
período (APR / 12), el número total de pagos (TotPmts), el pago (Payment), el valor actual de la inversión (PVal) y un número
que indica si el pago se realiza al principio o al final del período de pago (PayType). Observe que, como Payment representa el
efectivo abonado, es un número negativo.
VB
Sub TestFV()
Dim TotPmts As Integer
Dim Payment, APR, PVal, Fval As Double
Dim PayType As DueDate
Dim Response As MsgBoxResult
' Define money format.
Dim Fmt As String = "###,###,##0.00"
Payment = CDbl(InputBox("How much do you plan to save each month?"))
APR = CDbl(InputBox("Enter the expected interest annual percentage rate."))
' Ensure proper form.
If APR > 1 Then APR = APR / 100
TotPmts = CInt(InputBox("For how many months do you expect to save?"))
Response = MsgBox("Do you make payments at the end of month?", MsgBoxStyle.YesNo)
If Response = MsgBoxResult.No Then
PayType = DueDate.BegOfPeriod
Else
PayType = DueDate.EndOfPeriod
End If
PVal = CDbl(InputBox("How much is in this savings account now?"))
Fval = FV(APR / 12, TotPmts, -Payment, -PVal, PayType)
MsgBox("Your savings will be worth " & Format(Fval, Fmt) & ".")
End Sub

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Financial
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Resumen financiero
Referencia del lenguaje Visual Basic

GetAllSettings (Función)
Devuelve una lista de claves y sus respectivos valores (originalmente creados con SaveSetting) a partir de la entrada de una
aplicación en el Registro de Windows.
La característica My proporciona mayor productividad y rendimiento en las operaciones del Registro que si se utiliza
GetAllSettings. Para obtener más información, vea My.Computer.Registry (Objeto).

Public Function GetAllSettings( _


ByVal AppName As String, _
ByVal Section As String _
) As String(,)

Parámetros
AppName
Requerido. Expresión de tipo String que contiene el nombre de la aplicación o el proyecto cuyas claves se solicitan.
Section
Requerido. Expresión de tipo String que contiene el nombre de la sección cuyas claves se solicitan. GetAllSettings devuelve
un objeto que contiene una matriz bidimensional de cadenas. Las cadenas contienen todas las claves de la sección
especificada y sus valores correspondientes.
Excepciones
Tipo de excepción Número de error Condición
ArgumentException 9B07D280-66C6-4EA5-A8ED-5DDB0036F877 El usuario no ha iniciado la sesión.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
GetAllSettings devuelve Object no inicializado si AppName o Section no existen.
GetAllSettings requiere que un usuario se conecte, ya que funciona bajo la clave de Registro HKEY_LOCAL_USER, que no se
activa hasta que un usuario inicia la sesión de forma interactiva.
Los valores de configuración del Registro a los que se va a tener acceso mediante un proceso no interactivo (como Mtx.exe)
deben almacenarse bajo las claves del Registro HKEY_LOCAL_MACHINE\Software\ o HKEY_USER\DEFAULT\Software.
Ejemplo
En el siguiente ejemplo se utiliza en primer lugar la función SaveSetting para crear entradas en el Registro de Windows para
la aplicación especificada como AppName y, a continuación, se usa la función GetAllSettings para mostrar los valores.
Observe que los nombres de aplicación y nombres de Section no se pueden recuperar con GetAllSettings. Por último, la
función DeleteSetting quita las entradas de la aplicación.
VB
' Object to hold 2-dimensional array returned by GetAllSettings.
' Integer to hold counter.
Dim MySettings(,) As String
Dim intSettings As Integer
' Place some settings in the registry.
SaveSetting("MyApp", "Startup", "Top", "75")
SaveSetting("MyApp", "Startup", "Left", "50")
' Retrieve the settings.
MySettings = GetAllSettings("MyApp", "Startup")
For intSettings = LBound(MySettings, 1) To UBound(MySettings, 1)
WriteLine(1, MySettings(intSettings, 0))
WriteLine(1, MySettings(intSettings, 1))
Next intSettings
DeleteSetting("MyApp")

Notas para desarrolladores de dispositivos inteligentes


Esta función no es compatible.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Interaction
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
DeleteSetting (Función)
GetSetting (Función)
SaveSetting (Función)
ArgumentException Class
Conceptos
Tareas habituales del Registro
Referencia del lenguaje Visual Basic

GetAttr (Función)
Devuelve un valor FileAttribute que representa los atributos de un archivo, directorio o carpeta.
La característica My proporciona mayor productividad y rendimiento en las operaciones de E/S del archivo que si se utiliza
FileAttribute. Para obtener más información, vea My.Computer.FileSystem (Objeto).

Public Function GetAttr(ByVal PathName As String) As FileAttribute

Parámetros
PathName
Requerido. Expresión String que especifica un archivo, directorio o nombre de carpeta. PathName puede incluir el directorio
o carpeta y la unidad.
Valor devuelto
El valor devuelto por GetAttr es la suma de los siguientes valores de enumeración:
Valor Constante Descripción
Normal vbNormal Normal.

ReadOnly vbReadOnly Sólo lectura.

Hidden vbHidden Oculto.

System vbSystem Archivo de sistema.

Directory vbDirectory Directorio o carpeta.

Archive vbArchive El archivo ha cambiado desde la última copia de seguridad.

Alias vbAlias El archivo tiene un nombre diferente.


Nota
El lenguaje de Visual Basic especifica estas enumeraciones. Se pueden utilizar los nombres en cualquier lugar del código en v
ez de los valores reales.

Excepciones
Tipo de excepción Número de error Condición
IOException D0E96AEA-7621-48F6-A78B-5D37D18AAA4E Pathname no es válido o contiene caracteres comodín.

FileNotFoundException 57ADDB16-6F9A-444D-8AF8-DDA52431DACA El archivo de destino no existe.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
A fin de determinar qué atributos se establecen, utilice el operador And para realizar una comparación bit a bit del valor que
devuelve la función GetAttr y el valor del atributo del archivo concreto que desee. Si el resultado no es cero, se establece ese
atributo para el archivo nombrado. Por ejemplo, el valor devuelto de la siguiente expresión And es cero si el atributo Archive
no se ha establecido:

Result = GetAttr(FName) And vbArchive


Se devuelve un valor distinto de cero si se ha establecido el atributo Archive.
Ejemplo
En este ejemplo se utiliza la función GetAttr para determinar los atributos de un archivo, directorio o carpeta.
VB
Dim MyAttr As FileAttribute
' Assume file TESTFILE is normal and readonly.
MyAttr = GetAttr("C:\TESTFILE.txt") ' Returns vbNormal.
' Test for normal.
If (MyAttr And FileAttribute.Normal) = FileAttribute.Normal Then
MsgBox("This file is normal.")
End If
' Test for normal and readonly.
Dim normalReadonly As FileAttribute
normalReadonly = FileAttribute.Normal Or FileAttribute.ReadOnly
If (MyAttr And normalReadonly) = normalReadonly Then
MsgBox("This file is normal and readonly.")
End If

' Assume MYDIR is a directory or folder.


MyAttr = GetAttr("C:\MYDIR")
If (MyAttr And FileAttribute.Directory) = FileAttribute.Directory Then
MsgBox("MYDIR is a directory")
End If

Notas para desarrolladores de dispositivos inteligentes


Esta función no es compatible.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: FileSystem
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
And (Operador, Visual Basic)
FileAttr (Función)
SetAttr (Función)
IOException Class
FileNotFoundException Class
FileAttribute (Enumeración)
Otros recursos
Propiedades de archivos, directorios y unidades en Visual Basic
Referencia del lenguaje Visual Basic

GetChar (Función)
Devuelve un valor Char que representa el carácter que se encuentra en el índice especificado de la cadena suministrada.

Public Shared Function GetChar( _


ByVal str As String, _
ByVal Index As Integer _
) As Char

Parámetros
str
Requerido. Cualquier expresión String válida.
Index
Requerido. Expresión Integer. Índice (de base 1) del carácter en str que se va a devolver.
Excepciones
Tipo de excepció Número de error Condición
n
ArgumentException 9B07D280-66C6-4EA5-A8ED-5DDB0036F877 str es Nothing, Index < 1 o Index es mayor que el índice de
l último carácter de str.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
Si Index es menor que 1 o mayor que el índice del último carácter de str, se produce ArgumentException.
Ejemplo
En este ejemplo se muestra cómo usar la función GetChar para devolver un carácter que se encuentra en un índice
especificado de una String.
VB
Dim TestString As String = "ABCDE"
Dim TestChar As Char
' Returns "D"
TestChar = GetChar(TestString, 4)

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Strings
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Resumen de manipulación de cadenas
Mid (Función, Visual Basic)
ArgumentException
Referencia del lenguaje Visual Basic

GetException (Función)
Devuelve la excepción que representa el error que se ha producido.

Overridable Public Function GetException() As Exception

Comentarios
La función GetException solo está disponible desde la clase de objeto Err. Funciona con la propiedad Exception del objeto
Err para mostrar el error que se ha producido.
Ejemplo
El código siguiente muestra el mensaje asignado a la excepción en el objeto Err:
VB
On Error Resume Next
Dim myError As System.Exception
' Generate an overflow exception.
Err.Raise(6)
' Assigns the exception from the Err object to myError.
myError = Err.GetException()
' Displays the message associated with the exception.
MsgBox(myError.Message)

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Clase: Err Object
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Tareas
Cómo: Recuperar información de un objeto de error
Referencia
Err (Objeto, Visual Basic)
Conceptos
Información general sobre el control estructurado de excepciones de Visual Basic
Información general sobre el control no estructurado de excepciones
Referencia del lenguaje Visual Basic

GetObject (Función, Visual Basic)


Devuelve una referencia a un objeto proporcionado por un componente COM.

Public Function GetObject( _


Optional ByVal PathName As String = Nothing, _
Optional ByVal [Class] As String = Nothing _
) As Object

Parámetros
Parám Descripción
etro
PathN Opcional. String. Ruta de acceso completa y nombre del archivo que contiene el objeto que se va a recuperar. Si Path
ame Name se omite o es una cadena de longitud cero (""), se requiere Class.

Class Obligatorio si no se proporciona PathName. String. Cadena que representa la clase del objeto. El argumento Class tien
e la siguiente sintaxis y partes:
appname . objecttype
Parámetro Descripción
appname Obligatorio. String. Nombre de la aplicación que proporciona el objeto.

objecttype Obligatorio. String. Tipo o clase del objeto que se va a crear.


Excepciones
Tipo de excepción Número de error Condición
Exception 429 No existe ningún objeto del tipo de clase especificado.

FileNotFoundException 432 No existe ningún objeto con la ruta de acceso y el nombre de archivo especificados.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
Utilice la función GetObject para cargar una instancia de un componente COM desde un archivo. Esto se ilustra en el siguiente
ejemplo:

Dim CADObject As Object


CADObject = GetObject("C:\CAD\schema.cad")

Cuando se ejecuta este código, la aplicación asociada con el argumento PathName especificado se inicia y se activa el objeto
en el archivo especificado.
Casos predeterminados
Si PathName es una cadena de longitud cero (""), GetObject devuelve una nueva instancia de objeto del tipo de clase
especificado. Si se omite el argumento PathName, GetObject devuelve un objeto actualmente activo del tipo de clase
especificado en Class. Si no existe ningún objeto del tipo especificado, se produce un error.
Acceso a un subobjeto
Algunas aplicaciones permiten activar un subobjeto asociado a un archivo. Para ello, agregue un signo de exclamación (!) al
final del nombre de archivo, seguido de una cadena que especifique la parte del archivo que desea activar. Para obtener
información sobre cómo crear esta cadena, consulte la documentación de la aplicación que ha creado el objeto.
Por ejemplo, en una aplicación de dibujo, quizá tenga muchas capas para un dibujo almacenado en un archivo. Puede utilizar el
código siguiente para activar una capa dentro de un dibujo denominado schema.cad.

layerObject = GetObject("C:\CAD\schema.cad!Layer3")

Especificar un clase
Si no especifica la Class del objeto, la automatización determina la aplicación que se va a iniciar y el objeto que se va a activar,
basándose en el nombre de archivo que se proporcione. Sin embargo, algunos archivos pueden admitir más de una clase de
objeto. Por ejemplo, un dibujo puede ser compatible con tres tipos diferentes de objetos: un objeto Application, un objeto
Drawing y un objeto Toolbar, que forman parte todos ellos del mismo archivo. Para especificar el objeto que desea activar en
un archivo, utilice el argumento opcional Class. Esto se ilustra en el siguiente ejemplo:

Dim drawObj As Object


drawObj = GetObject("C:\Drawings\sample.drw", "Figment.Drawing")

En el ejemplo anterior, Figment es el nombre de una aplicación de dibujo y Drawing es uno de los tipos de objeto que admite.
Utilizar el objeto
Una vez que se activa un objeto, se hace referencia a él en el código mediante la variable de objeto que haya declarado. En el
ejemplo anterior, se tiene acceso a las propiedades y métodos del nuevo objeto mediante la variable de objeto drawObj. Esto se
ilustra en el siguiente ejemplo:

drawObj.Line(9, 90)
drawObj.InsertText(9, 100, "Hello, world.")
drawObj.SaveAs("C:\Drawings\sample.drw")

Nota
Utilice la función GetObject cuando exista una instancia actual del objeto o cuando desee crear el objeto con un archivo carg
ado. Si no existe ninguna instancia actual y no desea que se inicie el objeto con un archivo cargado, utilice
CreateObject (Función, Visual Basic).
Si se ha registrado un objeto como objeto Active-X de una instancia, sólo se crea una instancia del objeto, independientemen
te del número de veces que se llame a CreateObject. Con un objeto de una sola instancia, la función GetObject devuelve si
empre la misma instancia cuando se llama con sintaxis de cadena de longitud cero (""), y origina un error si se omite el argu
mento PathName. No se puede utilizar GetObject para obtener una referencia a una clase creada con Visual Basic.

Nota de seguridad
La función GetObject requiere un permiso de código no administrado que puede afectar a su ejecución en situaciones de co
nfianza parcial. Para obtener más información, vea SecurityPermission y Permisos de acceso a código.

Al terminar de utilizar el objeto, establezca todas las referencias al objeto en Nothing. Esto permite al motor en tiempo de
ejecución eliminar el componente COM.
Ejemplo
En el ejemplo siguiente se utiliza la función GetObject para determinar si Excel está ejecutándose.
VB
' Test to see if a copy of Excel is already running.
Private Sub testExcelRunning()
On Error Resume Next
' GetObject called without the first argument returns a
' reference to an instance of the application. If the
' application is not already running, an error occurs.
Dim excelObj As Object = GetObject(, "Excel.Application")
If Err.Number = 0 Then
MsgBox("Excel is running")
Else
MsgBox("Excel is not running")
End If
Err.Clear()
excelObj = Nothing
End Sub

En este ejemplo se utiliza la función GetObject para obtener una referencia a una hoja de cálculo de Microsoft Excel
(excelObj) específica. La llamada a GetObject devuelve una referencia a la hoja de cálculo representada por el archivo
especificado, test.xls. A continuación, el código de ejemplo hace que aparezcan Excel y la ventana que contiene la hoja de
cálculo especificada.
En este ejemplo se requiere Option Strict Off porque utiliza enlace en tiempo de ejecución, en el que los objetos se asignan a
variables de tipo Object. Puede especificar Option Strict On y puede declarar objetos de tipos de objeto concretos si agrega
una referencia de proyecto a la biblioteca de tipos de Excel. Para ello, abra el cuadro de diálogo Agregar referencia en el
menú Proyecto de Visual Studio y seleccione la biblioteca de tipos de Excel en la ficha COM.
VB
' Add Option Strict Off to the top of your program.
Option Strict Off

VB
Private Sub getExcel()
Dim fileName As String = "c:\vb\test.xls"

If Not My.Computer.FileSystem.FileExists(fileName) Then


MsgBox(fileName & " does not exist")
Exit Sub
End If

' Set the object variable to refer to the file you want to use.
Dim excelObj As Object = GetObject(fileName)
' Show Excel through its Application property.
excelObj.Application.Visible = True
' Show the window containing the file.
Dim winCount As Integer = excelObj.Parent.Windows.Count()
excelObj.Parent.Windows(winCount).Visible = True

' Insert additional code to manipulate the test.xls file here.


' ...

excelObj = Nothing
End Sub

Notas para desarrolladores de dispositivos inteligentes


Esta función no está admitida.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Interaction
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
CreateObject (Función, Visual Basic)
Declare (Instrucción)
Option Strict (Instrucción)
Exception
FileNotFoundException
Referencia del lenguaje Visual Basic

GetSetting (Función)
Devuelve el valor de una clave correspondiente a la entrada de una aplicación en el Registro de Windows.
La característica My proporciona mayor productividad y rendimiento en las operaciones del Registro que si se utiliza
GetAllSettings. Para obtener más información, vea My.Computer.Registry (Objeto).

Public Function GetSetting( _


ByVal AppName As String, _
ByVal Section As String, _
ByVal Key As String, _
Optional ByVal Default As String = "" _
) As String

Parámetros
AppName
Requerido. Expresión de tipo String que contiene el nombre de la aplicación o proyecto cuya clave se solicita.
Section
Requerido. Expresión de tipo String que contiene el nombre de la sección donde se encuentra la clave.
Key
Requerido. Expresión de tipo String que contiene el nombre de la clave que se va a devolver.
Default
Opcional. Expresión que contiene el valor que se va a devolver si no se especifica ningún valor en Key. Si se omite, se asume
que Default es una cadena de longitud cero ("").
Excepciones
Tipo de excepció Número de error Condición
n
ArgumentException 9B07D280-66C6-4EA5-A8ED-5DDB0036F877 Uno o más argumentos no son expresiones String o el usu
ario no ha iniciado la sesión.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
Si alguno de los elementos indicados como argumentos de GetSetting no existe, GetSetting devolverá un valor de Default.
GetSetting requiere que un usuario se conecte, ya que funciona bajo la clave de Registro HKEY_LOCAL_USER, que no se
activa hasta que un usuario inicia la sesión de forma interactiva.
Los valores de configuración del Registro a los que se va a tener acceso mediante un proceso no interactivo (como Mtx.exe)
deben almacenarse bajo las claves del Registro HKEY_LOCAL_MACHINE\Software\ o HKEY_USER\DEFAULT\Software.
GetSetting requiere un Permiso del Registro de tipo Read.
Ejemplo
En este ejemplo se utiliza en primer lugar la función SaveSetting para crear entradas en el Registro de Windows para la
aplicación especificada como AppName y, a continuación, se usa la función GetSetting para mostrar uno de los valores.
Debido a que se ha especificado el argumento Default, es seguro que se devolverá algún valor. Recuerde que los nombres de
Section no se pueden recuperar con GetSetting. Por último, la función DeleteSetting quita todas las entradas de la
aplicación.
VB
' Place some settings in the registry.
SaveSetting("MyApp", "Startup", "Top", "75")
SaveSetting("MyApp", "Startup", "Left", "50")
Console.WriteLine(GetSetting("MyApp", "Startup", "Left", "25"))
DeleteSetting("MyApp")

Notas para desarrolladores de dispositivos inteligentes


Esta función no es compatible.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Interaction
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
DeleteSetting (Función)
GetAllSettings (Función)
SaveSetting (Función)
ArgumentException Class
RegistryPermission Class
Conceptos
Tareas habituales del Registro
Referencia del lenguaje Visual Basic

Funciones H-L
La siguiente tabla contiene una lista de funciones miembro en tiempo de ejecución de Visual Basic.

Hex Hour IIf Input

InputBox InputString InStr InStrRev

Int IPmt IRR IsArray

IsDate IsDBNull IsError IsNothing

IsNumeric IsReference Join Kill

LBound LCase Left Len

LineInput Loc Lock LOF

LSet LTrim

La función matemática Log que estaba disponible como una función miembro en tiempo de ejecución de Visual Basic en la
versión 6.0 y anteriores, ha sido reemplazada por un método (Log) en la clase Math de la biblioteca de clases .NET Framework.
Para obtener más información, vea Funciones matemáticas (Visual Basic).
Notas para desarrolladores de dispositivos inteligentes
Los siguientes elementos no se admiten en las aplicaciones de dispositivos inteligentes: Input, InputString, Kill, LineInput,
Loc, Lock y LOF.
Vea también
Referencia
Funciones A-C
Funciones D-G
Funciones M-R
Funciones S-Z
Otros recursos
Referencia de Visual Basic
Referencia del lenguaje Visual Basic

Hex (Función, Visual Basic)


Devuelve una cadena que representa el valor hexadecimal de un número.

Public Shared Function Hex( _


ByVal Number As { Byte | SByte | Short | UShort |
Integer | UInteger | Long | ULong | Object } _
) As String

Parámetros
Number
Requerido. Cualquier expresión numérica o expresión String válida.
Excepciones
Tipo de excepción Número de error Condición
ArgumentNullException 9B07D280-66C6-4EA5-A8ED-5DDB0036F877 No se ha especificado Number.

ArgumentException 9B07D280-66C6-4EA5-A8ED-5DDB0036F877 Number no es un tipo numérico.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
Si Number ya no es un número entero, se redondea al número entero más próximo antes de ser evaluado.
Si Number es: Hex devuelve
Vacío Cero (0)

Cualquier valor numérico. Hasta dieciséis caracteres hexadecimales.

Puede representar números hexadecimales directamente anteponiendo números en el intervalo correcto con &H. Por ejemplo,
&H10 representa el decimal 16 en notación hexadecimal.

Ejemplo
En este ejemplo se utiliza la función Hex para devolver el valor hexadecimal de un número.
VB
Dim TestHex As String
' Returns 5.
TestHex = Hex(5)
' Returns A.
TestHex = Hex(10)
' Returns 1CB.
TestHex = Hex(459)

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Conversion
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Tareas
Cómo: Convertir cadenas hexadecimales en números
Referencia
Oct (Función)
Funciones de conversión de tipos
ArgumentNullException
Referencia del lenguaje Visual Basic

Hour (Función, Visual Basic)


Devuelve un valor Integer entre 0 y 23 que representa la hora del día.

Public Function Hour(ByVal TimeValue As DateTime) As Integer

Parámetros
TimeValue
Requerido. Valor Date del cual se desea extraer la hora.
Comentarios
También se puede obtener la hora del día llamando a DatePart y especificando DateInterval.Hour para el argumento
Interval.
Ejemplo
En este ejemplo se utiliza la función Hour para obtener la hora de una hora especificada. En el entorno de desarrollo, el literal
de hora se muestra en formato de hora corto con los valores de configuración regional del código correspondiente.
VB
Dim someTime As Date
Dim someHour As Integer
someTime = #4:35:17 PM#
someHour = Hour(someTime)
' someHour now contains 16.

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: DateAndTime
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Day (Función, Visual Basic)
Minute (Función)
Now (Propiedad)
Second (Función, Visual Basic)
TimeOfDay (Propiedad)
DatePart (Función, Visual Basic)
System
DateTime
ArgumentException
ArgumentOutOfRangeException
Referencia del lenguaje Visual Basic

IIf (Función)
Devuelve uno de dos objetos, dependiendo de la evaluación de una expresión.

Public Function IIf( _


ByVal Expression As Boolean, _
ByVal TruePart As Object, _
ByVal FalsePart As Object _
) As Object

Parámetros
Expression
Requerido. Boolean. Expresión que se desea evaluar.
TruePart
Requerido. Object. Se devuelve si Expression se evalúa como True.
FalsePart
Requerido. Object. Se devuelve si Expression se evalúa como False.
Comentarios
La función IIf proporciona un homólogo para el Conditional Operator: ? : ternario en Visual C++.
Ejemplo
En este ejemplo se utiliza la función IIf para evaluar el parámetro testMe del procedimiento checkIt y devuelve la palabra
"Large" si la cantidad es mayor que 1000; de lo contrario, devuelve la palabra "Small".
VB
Function checkIt(ByVal testMe As Integer) As String
Return CStr(IIf(testMe > 1000, "Large", "Small"))
End Function

Tenga en cuenta que si Option Strict tiene el valor On, debe utilizar la palabra clave CStr para convertir explícitamente el
resultado de Object en String.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Interaction
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Option Strict (Instrucción)
Funciones de conversión de tipos
Choose (Función)
Instrucción If...Then...Else (Visual Basic)
Instrucción Select...Case (Visual Basic)
Switch (Función)
Referencia del lenguaje Visual Basic

Input (Función)
Lee datos de un archivo secuencial abierto y los asigna a variables.

Public Sub Input( _


FileNumber As Integer, _
ByRef Value As Object _
)

Parámetros
FileNumber
Requerido. Cualquier número de archivo válido.
Value
Requerido. Variable a la que se le asignan los valores leídos del archivo (no puede ser ni una matriz ni una variable de
objeto).
Excepciones
Tipo de excepción Número de error Condición
IOException D0E96AEA-7621-48F6-A78B-5D37D18AAA4E FileNumber no existe.

IOException 74891E96-884B-4C8D-872D-CD11AE272372 El modo de archivo no es válido.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
La función Input se suministra a efectos de compatibilidad con versiones anteriores y puede tener un impacto en el
rendimiento. En el caso de aplicaciones no heredadas, el objeto My.Computer.FileSystem proporciona un rendimiento
superior. Para obtener más información, vea Acceso a archivos con Visual Basic.
Los datos leídos con Input se escriben normalmente en un archivo con Write. Utilice esta función sólo con archivos abiertos
en modo Input o Binary.
Nota de seguridad
Cuando se lee de archivos, no deben tomarse decisiones acerca del contenido del archivo basándose en la extensión del nom
bre de archivo. Por ejemplo, un archivo denominado Form1.vb puede no ser un archivo de código fuente de Visual Basic 200
5.

Una vez leídos, las cadenas estándar y los datos numéricos se asignan sin modificaciones a las variables. La siguiente tabla
muestra el tratamiento que reciben otros tipos de datos de entrada.
Datos Valor asignado a la variable
Coma o línea en blanco de delimitación Vacío

#NULL# DBNull

#TRUE# o #FALSE# TrueoFalse

yyyy-mm-dd hh:mm:ss El día o la hora representados por la expresión

#ERROR errornumber# errornumber (la variable es un objeto etiquetado como error)


Si se llega al final del archivo mientras se está introduciendo un elemento de datos, la entrada se dará por terminada y se
producirá un error.
Nota
La función Input no se localiza. Por ejemplo, en la versión de alemán, si se escribe 3,14159, sólo se devuelve 3, ya que la co
ma se trata como separador de variables en lugar de separación decimal.

Nota de seguridad
La lectura de un archivo con la función Input requiere acceso de tipo Read desde la enumeración FileIOPermissionAccess.
Para obtener más información, vea FileIOPermissionAccess (Enumeración).

Ejemplo
En este ejemplo se utiliza la función Input para leer datos de un archivo en dos variables. En este ejemplo se supone que
TestFile es un archivo con unas líneas de datos escritas en él mediante el uso de la función Write; cada línea contiene una
cadena entrecomillada y un número separados por una coma, por ejemplo ("Hello", 234).
VB
FileOpen(1, "TESTFILE", OpenMode.Output)
Write(1, "hello")
Write(1, 14)
FileClose(1)
Dim s As String = "teststring"
Dim i As Integer
FileOpen(1, "TESTFILE", OpenMode.Input)
Input(1, s)
MsgBox(s)
Input(1, i)
MsgBox(i)
FileClose(1)

Notas para desarrolladores de dispositivos inteligentes


Esta función no es compatible.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: FileSystem
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Tareas
Cómo: Escribir texto en archivos en Visual Basic
Cómo: Escribir texto en archivos con un objeto StreamWriter en Visual Basic
Referencia
InputString (Función)
FileOpen (Función)
Print, PrintLine (Funciones)
Write, WriteLine (Funciones)
Otros recursos
Acceso a archivos con Visual Basic
Referencia del lenguaje Visual Basic

InputBox (Función, Visual Basic)


Muestra un mensaje en un cuadro de diálogo, espera a que el usuario escriba un texto o haga clic en un botón y devuelve una
cadena con el contenido del cuadro de texto.

Public Function InputBox( _


ByVal Prompt As String, _
Optional ByVal Title As String = "", _
Optional ByVal DefaultResponse As String = "", _
Optional ByVal Xpos As Integer = -1, _
Optional ByVal YPos As Integer = -1 _
) As String

Parámetros
Prompt
Requerido. Expresión de tipo String que se muestra como mensaje en el cuadro de diálogo. La longitud máxima de Prompt
es de aproximadamente 1024 caracteres, según el ancho de los caracteres utilizados. Si Prompt incluye más de una línea,
puede separar las líneas mediante un carácter de retorno de carro (Chr(13)), un carácter de salto de línea (Chr(10)) o una
combinación de retorno de carro y salto de línea (Chr(13) & Chr(10)) que inserta entre cada línea.
Title
Opcional. Expresión de tipo String que se muestra en la barra de título del cuadro de diálogo. Si se omite Title, en la barra de
título aparecerá el nombre de la aplicación.
DefaultResponse
Opcional. Expresión de tipo String que se muestra en el cuadro de texto como respuesta predeterminada en caso de que no
se suministre otra entrada. Si se omite DefaultResponse, el cuadro de texto se mostrará vacío.
XPos
Opcional. Expresión numérica que especifica, en píxeles, la distancia entre el borde izquierdo del cuadro de diálogo y el borde
izquierdo de la pantalla. Si omite XPos y YPos, el cuadro de diálogo se centra en la pantalla.
YPos
Opcional. Expresión numérica que especifica, en píxeles, la distancia entre el borde superior del cuadro de diálogo y el borde
superior de la pantalla. Si omite XPos y YPos, el cuadro de diálogo se centra en la pantalla.
Comentarios
Si el usuario hace clic en Cancelar, se devolverá una cadena de longitud cero.
Si desea especificar más que el primer argumento, deberá utilizar la función InputBox en una expresión. Si omite alguno de
los argumentos de posición, deberá conservar el correspondiente delimitador de coma.
Nota
La función InputBox requiere un permiso UIPermission del nivel SafeTopLevelWindows que podría afectar a su ejecución e
n situaciones de confianza parcial. Para obtener más información, vea Solicitar permisos y UIPermission (Clase).

Ejemplo
En este ejemplo se muestran distintas formas de utilizar la función InputBox para pedir al usuario que especifique un valor. Si
se omiten las posiciones x e y, el cuadro de diálogo quedará centrado automáticamente respecto a ambos ejes. La variable
MyValue contiene el valor especificado por el usuario al hacer clic en Aceptar o presionar la tecla ENTRAR.

VB
Dim message, title, defaultValue As String
Dim myValue As Object
' Set prompt.
message = "Enter a value between 1 and 3"
' Set title.
title = "InputBox Demo"
defaultValue = "1" ' Set default value.

' Display message, title, and default value.


myValue = InputBox(message, title, defaultValue)
' If user has clicked Cancel, set myValue to defaultValue
If myValue Is "" Then myValue = defaultValue

' Display dialog box at position 100, 100.


myValue = InputBox(message, title, defaultValue, 100, 100)
' If user has clicked Cancel, set myValue to defaultValue
If myValue Is "" Then myValue = defaultValue

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Interaction
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
MsgBox (Función, Visual Basic)
Chr, ChrW (Funciones)
Referencia del lenguaje Visual Basic

InputString (Función)
Devuelve un valor String que contiene caracteres de un archivo abierto en modo Input o Binary.
La característica My proporciona mayor productividad y rendimiento en las operaciones de E/S del archivo que si se utiliza
InputString. Para obtener más información, vea My.Computer.FileSystem (Objeto).

InputString(_
ByVal FileNumber As Integer, _
ByVal CharCount As Integer _
) As String

Parámetros
FileNumber
Requerido. Cualquier número de archivo válido.
CharCount
Requerido. Cualquier expresión numérica válida que especifique el número de caracteres que se han de leer.
Excepciones
Tipo de excepción Número de error Condición
IOException D0E96AEA-7621-48F6-A78B-5D37D18AAA4E FileNumber no existe.

ArgumentException 9B07D280-66C6-4EA5-A8ED-5DDB0036F877 CharCount < 0 ó > 214.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
La función InputString se suministra a efectos de compatibilidad con versiones anteriores y puede tener un impacto en el
rendimiento. En el caso de aplicaciones no heredadas, el objeto My.Computer.FileSystem proporciona un rendimiento
superior. Para obtener más información, vea Acceso a archivos con Visual Basic.
Los datos leídos con la función InputString normalmente se escriben en un archivo con Print o FilePut. Utilice esta función
sólo con archivos abiertos en modo Input o Binary.
A diferencia de la función Input, la función InputString devuelve todos los caracteres que lee, incluidos comas, retornos de
carro, avances de línea, comillas y espacios iniciales.
En los archivos abiertos para acceso Binary, se genera un error al intentar leer el archivo mediante la función InputString
hasta que EOF devuelve True. Utilice las funciones LOF y Loc en lugar de EOF cuando se lean archivos binarios con
InputString o utilice FileGet cuando se utilice la función EOF.
Nota de seguridad
Cuando se lee de archivos, no deben tomarse decisiones acerca del contenido del archivo basándose en la extensión del nom
bre de archivo. Por ejemplo, un archivo denominado Form1.vb puede no ser un archivo de código fuente de Visual Basic.

Ejemplo
En este ejemplo se utiliza la función InputString para leer los caracteres de un archivo de uno en uno e imprimirlos en la
ventana Output. En este ejemplo se supone que MyFile es un archivo de texto con unas pocas líneas de datos de ejemplo.
VB
Dim oneChar As String
' Open file.
FileOpen(1, "MYFILE.TXT", OpenMode.Input)
' Loop until end of file.
While Not EOF(1)
' Get one character.
oneChar = (InputString(1, 1))
' Print to the output window.
System.Console.Out.WriteLine(oneChar)
End While
FileClose(1)

Notas para desarrolladores de dispositivos inteligentes


Esta función no es compatible.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: FileSystem
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Tareas
Cómo: Escribir texto en archivos con un objeto StreamWriter en Visual Basic
Cómo: Escribir texto en archivos en Visual Basic
Referencia
Input (Función)
Otros recursos
Acceso a archivos con Visual Basic
Referencia del lenguaje Visual Basic

InStr (Función, Visual Basic)


Devuelve un entero que especifica la posición inicial de la primera aparición de una cadena dentro de otra.

Public Shared Function InStr(_


ByVal String1 As String, _
ByVal String2 As String, _
Optional ByVal Compare As CompareMethod _
) As Integer
' -or-
Public Shared Function InStr(_
ByVal Start As Integer, _
ByVal String1 As String, _
ByVal String2 As String, _
Optional ByVal Compare As Microsoft.VisualBasic.CompareMethod _
) As Integer

Parámetros
Start
Opcional. Expresión numérica que establece la posición inicial para cada búsqueda. Si se omite, la búsqueda comienza en la
primera posición del carácter. El índice de inicio está basado en 1.
String1
Requerido. Expresión String en la que se busca.
String2
Requerido. Expresión String que se busca.
Compare
Opcional. Especifica el tipo de comparación entre cadenas. Si se omite Compare, el valor Option Compare determinará el
tipo de comparación.
Valores
Los valores del argumento Compare son:
Constante Valor Descripción
Binary 0 Realiza una comparación binaria

Text 1 Realiza una comparación de texto


Valor devuelto
Si InStr devuelve
String1 es de longitud cero o Nothing 0

String2 es de longitud cero o Nothing start

No se ha encontrado String2 0

String2 se encuentra dentro de String1 Posición donde empieza la coincidencia

Start > String2 0


Excepciones
Tipo de excepción Número de error Condición
ArgumentException 5 Start < 1.
Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
Generalmente, cuando se analizan cadenas se utiliza la función InStr.
Nota
La función InStrB de versiones anteriores de Visual Basic devuelve un número de bytes, en lugar de la posición de un carácte
r. Se utiliza principalmente para convertir cadenas en aplicaciones de juegos de caracteres de doble byte (DBCS). En Visual Ba
sic 2005, todas las cadenas están en Unicode y ya no se admite InStrB.

Ejemplo
En este ejemplo se usa la función InStr para devolver la posición de la primera aparición de una cadena dentro de otra.
VB
' String to search in.
Dim SearchString As String = "XXpXXpXXPXXP"
' Search for "P".
Dim SearchChar As String = "P"

Dim TestPos As Integer


' A textual comparison starting at position 4. Returns 6.
TestPos = InStr(4, SearchString, SearchChar, CompareMethod.Text)

' A binary comparison starting at position 1. Returns 9.


TestPos = InStr(1, SearchString, SearchChar, CompareMethod.Binary)

' If Option Compare is not set, or set to Binary, return 9.


' If Option Compare is set to Text, returns 3.
TestPos = InStr(SearchString, SearchChar)

' Returns 0.
TestPos = InStr(1, SearchString, "W")

Requisitos
Espacio de nombres:Microsoft.VisualBasic
Módulo: Strings
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
InStrRev (Función, Visual Basic)
Option Compare (Instrucción)
StrComp (Función, Visual Basic)
ArgumentException
Conceptos
Resumen de cambios de los elementos de programación ofrecidos
Otros recursos
Cadenas en Visual Basic
Introducción a las cadenas en Visual Basic
Referencia del lenguaje Visual Basic

InStrRev (Función, Visual Basic)


Devuelve la posición de la primera aparición de una cadena dentro de otra, comenzando por el extremo derecho de la cadena.

Public Function InStrRev(


ByVal StringCheck As String,
ByVal StringMatch As String,
Optional ByVal Start As Integer = -1,
Optional ByVal Compare As CompareMethod = CompareMethod.Binary
) As Integer

Parámetros
StringCheck
Requerido. Expresión de cadena en la que se busca.
StringMatch
Requerido. Expresión de cadena que se busca.
Start
Opcional. Expresión numérica que establece la posición de inicio (basada en uno y comenzando por el extremo izquierdo de
la cadena) de cada búsqueda. Si Start se omite, se utiliza -1, que indica que la búsqueda comienza en la última posición de
carácter. La búsqueda, por tanto, se realizará de derecha a izquierda.
Compare
Opcional. Valor numérico que indica el tipo de comparación que se va a utilizar en la evaluación de subcadenas. Si se omite,
se realizará una comparación binaria. Vea la sección Configuración para conocer los valores utilizados.
Valores
El argumento Compare puede tener los siguientes valores:
Constante Descripción
Binary Realiza una comparación binaria.

Text Realiza una comparación textual.


Valor devuelto
InStrRev devuelve los siguientes valores.
Si InStrRev devolverá:
StringCheck tiene longitud cero 0

StringMatch tiene longitud cero Start

No se ha encontrado StringMatch 0

StringMatch se encuentra dentro de Str La posición en la que se localice la primera coincidencia, comenzando por el extremo d
ingCheck erecho de la cadena

Start es mayor que la longitud de Strin 0


gMatch
Excepciones
Tipo de excepción Número de error Condición
ArgumentException 5 Start = 0 ó Start <-1.
Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
Observe que la sintaxis de la función InStrRev no es la misma que la de la función InStr.
Ejemplo
En este ejemplo se muestra el uso de la función InStrRev.
VB
Dim TestString As String = "the quick brown fox jumps over the lazy dog"
Dim TestNumber As Integer
' Returns 32.
TestNumber = InStrRev(TestString, "the")
' Returns 1.
TestNumber = InStrRev(TestString, "the", 16)

Requisitos
Espacio de nombres:Microsoft.VisualBasic
Módulo: Strings
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
InStr (Función, Visual Basic)
Otros recursos
Cadenas en Visual Basic
Introducción a las cadenas en Visual Basic
Referencia del lenguaje Visual Basic

Int, Fix (Funciones, Visual Basic)


Devuelven la parte entera de un número.

Public Shared Function Int( _


ByVal Number As { Double | Integer | Long | Object | Short | Single | Decimal }) _
As { Double | Integer | Long | Object | Short | Single | Decimal }
Public Shared Function Fix( _
ByVal Number As { Double | Integer | Long | Object | Short | Single | Decimal }) _
As { Double | Integer | Long | Object | Short | Single | Decimal }

Parámetros
Number
Requerido. Un número de tipo Double o cualquier expresión numérica válida. Si Number contiene Nothing, se devolverá
Nothing.
Excepciones
Tipo de excepción Número de error Condición
ArgumentNullException 9B07D280-66C6-4EA5-A8ED-5DDB0036F877 No se ha especificado Number.

ArgumentException 9B07D280-66C6-4EA5-A8ED-5DDB0036F877 Number no es un tipo numérico.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
Las funciones Int y Fix quitan la parte fraccionaria de Number y devuelven el valor entero resultante.
La diferencia entre las funciones Int y Fix es que si el valor Number es negativo, Int devuelve el primer entero negativo menor
o igual que Number, mientras que Fix devuelve el primer entero negativo mayor o igual que Number. Por ejemplo, Int
convierte -8,4 en -9 y Fix convierte -8,4 en -8.
Fix(number)equivale aSign(number) * Int(Abs(number)).

Ejemplo
En este ejemplo se muestra cómo las funciones Int y Fix devuelven las partes enteras de los números. En el caso de un
argumento de número negativo, la función Int devuelve el primer entero negativo igual o menor que el número, y la función
Fix devuelve el primer entero negativo igual o mayor que el número. En el siguiente ejemplo se requiere especificar Option
Strict Off porque no se permiten las conversiones implícitas de tipo Double a tipo Integer en Option Strict On:
VB
' This code requires Option Strict Off
Dim MyNumber As Integer
MyNumber = Int(99.8) ' Returns 99.
MyNumber = Fix(99.8) ' Returns 99.

MyNumber = Int(-99.8) ' Returns -100.


MyNumber = Fix(-99.8) ' Returns -99.
MyNumber = Int(-99.2) ' Returns -100.
MyNumber = Fix(-99.2) ' Returns -99.

Puede utilizar la función CInt para convertir explícitamente otros tipos de datos al tipo Integer con Option Strict Off. Sin
embargo, CInt se redondea al entero más próximo en lugar de truncar la parte fraccionaria de los números. Por ejemplo:
VB
MyNumber = CInt(99.8) ' Returns 100.
MyNumber = CInt(-99.8) ' Returns -100.
MyNumber = CInt(-99.2) ' Returns -99.

Puede utilizar la función CInt en el resultado de una llamada a Fix o Int para realizar la conversión explícita al valor entero sin
redondear. Por ejemplo:
VB
MyNumber = CInt(Fix(99.8)) ' Returns 99.
MyNumber = CInt(Int(99.8)) ' Returns 99.

Para obtener más información sobre CInt, vea Funciones de conversión de tipos.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Conversion
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Funciones de conversión de tipos
Integer (Tipo de datos, Visual Basic)
Resumen de funciones matemáticas
Funciones matemáticas (Visual Basic)
Resumen de conversión
ArgumentNullException
Referencia del lenguaje Visual Basic

IPmt (Función)
Devuelve un valor de tipo Double que indica el pago de intereses durante un período determinado de una anualidad basada
en pagos fijos periódicos y un tipo de interés fijo.

Function IPmt( _
ByVal Rate As Double, _
ByVal Per As Double, _
ByVal NPer As Double, _
ByVal PV As Double, _
Optional ByVal FV As Double = 0, _
Optional ByVal Due As DueDate = DueDate.EndOfPeriod _
) As Double

Parámetros
Rate
Requerido. Double que indica el tipo de interés por período. Por ejemplo, si obtiene un crédito para comprar un automóvil a
una tasa porcentual anual (TAE) del 10 por ciento, y realiza pagos mensuales, el tipo por período será 0,1/12 ó 0,0083.
Per
Requerido. Valor de tipo Double que especifica el período de pago en el intervalo de 1 a NPer.
NPer
Requerido. Double que indica el número total de períodos de pago (plazos) de la anualidad. Por ejemplo, si realiza pagos
mensuales correspondientes a un crédito para adquirir un automóvil a cuatro años, el crédito tendrá un total de 4 x 12 (ó 48)
períodos de pago.
PV
Requerido. Valor de tipo Double que indica el valor actual, o valor a día de hoy, de una serie de pagos o cobros futuros. Por
ejemplo, en el momento de obtener un crédito para comprar un automóvil, el importe del mismo es el valor actual para el
prestamista de los pagos mensuales que se realizarán.
FV
Opcional. Double que indica el valor futuro o el saldo en efectivo que se desea tener una vez realizado el pago final. Por
ejemplo, el valor futuro de un crédito es 0, puesto que ése es su valor después del pago final. Sin embargo, si desea ahorrar
50.000 dólares durante 18 años para la educación de su hijo, el valor futuro será 50.000 dólares. Si se omite, se supone que
es 0.
Due
Opcional. Objeto de tipo DueDate (Enumeración) que indica cuándo vencen los pagos. Este argumento debe ser
DueDate.EndOfPeriod si los pagos vencen al final del período o DueDate.BegOfPeriod si los pagos vencen al principio del
mismo. Si se omite, se supone que es DueDate.EndOfPeriod.
Excepciones
Tipo de excepción Número de error Condición
ArgumentException 9B07D280-66C6-4EA5-A8ED-5DDB0036F877 Per <= 0 o Per > NPer.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
Una anualidad es una serie de pagos fijos en efectivo realizados a lo largo de un período de tiempo. Puede ser un préstamo
(como la hipoteca de un inmueble, por ejemplo) o una inversión (como un plan de ahorro mensual).
Los argumentos Rate y NPer deben calcularse utilizando períodos de pago expresados en las mismas unidades. Por ejemplo, si
Rate se calcula en meses, NPer deberá calcularse del mismo modo.
Para todos los argumentos, el efectivo abonado (como depósitos de ahorro) se representa con números negativos; y el
recibido (como cheques de dividendos), con números positivos.
Ejemplo
En este ejemplo, se utiliza la función IPmt para calcular qué cantidad del pago representan los intereses cuando todos los
pagos tienen el mismo valor. Se proporcionan el tipo de interés porcentual por período (APR / 12), el período de pago para el
que se desea la parte de intereses (Period), el número total de pagos (TotPmts), el valor actual o principal del préstamo (PVal),
el valor futuro del préstamo (FVal) y un número que indica si el pago vence al principio o al final del período de pago
(PayType).
VB
Sub TestIPMT()
Dim APR, PVal, Period, IntPmt, TotInt, TotPmts As Double
Dim PayType As DueDate
Dim Response As MsgBoxResult
' Usually 0 for a loan.
Dim Fval As Double = 0
' Define money format.
Dim Fmt As String = "###,###,##0.00"
PVal = CDbl(InputBox("How much do you want to borrow?"))
APR = CDbl(InputBox("What is the annual percentage rate of your loan?"))
If APR > 1 Then APR = APR / 100 ' Ensure proper form.
TotPmts = CInt(InputBox("How many monthly payments?"))
Response = MsgBox("Do you make payments at end of the month?", MsgBoxStyle.YesNo)
If Response = MsgBoxResult.No Then
PayType = DueDate.BegOfPeriod
Else
PayType = DueDate.EndOfPeriod
End If
For Period = 1 To TotPmts ' Total all interest.
IntPmt = IPmt(APR / 12, Period, TotPmts, -PVal, Fval, PayType)
TotInt = TotInt + IntPmt
Next Period

' Display results.


MsgBox("You will pay a total of " & Format(TotInt, Fmt) & _
" in interest for this loan.")
End Sub

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Financial
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Resumen financiero
ArgumentException
Referencia del lenguaje Visual Basic

IRR (Función)
Devuelve un valor de tipo Double que indica la tasa interna devuelta para una serie de flujos de caja periódicos (pagos y
cobros).

Function IRR( _
ByRef ValueArray() As Double, _
Optional ByVal Guess As Double = 0.1 _
) As Double

Parámetros
ValueArray
Requerido. Matriz de tipo Double que especifica valores de flujo de caja. La matriz debe contener al menos un valor
negativo (un pago) y un valor positivo (un cobro).
Guess
Opcional. Un objeto que indica un valor estimado para IRR. Si se omite, Guess será 0,1 (10 por ciento).
Excepciones
Tipo de excepció Número de error Condición
n
ArgumentException 9B07D280-66C6-4EA5-A8ED-5DDB0036F877 Los valores de los argumentos de la matriz no son válidos
o Guess <= -1.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
La tasa interna de retorno es el tipo de interés recibido por una inversión consistente en pagos y cobros que se producen a
intervalos regulares.
La función IRR utiliza el orden de los valores de la matriz para interpretar el orden de los pagos y cobros. Asegúrese de indicar
los valores de los pagos y cobros siguiendo la secuencia correcta. No es necesario que el flujo de caja en cada período sea fijo,
como sería en el caso de una anualidad.
IRR se calcula por iteración. Comenzando con el valor de Guess, IRR, realiza un cálculo cíclico hasta que el resultado tiene una
precisión del 0,00001 por ciento. Si IRR no puede encontrar un resultado después de 20 intentos, se produce un error.
Ejemplo
En este ejemplo, la función IRR devuelve la tasa de interés de retorno para una serie de cinco flujos de efectivo contenidos en
la matriz Values(). El primer elemento de la matriz es un flujo de efectivo negativo que representa los costos iniciales de la
actividad. Los cuatro flujos de efectivo restantes representan flujos de efectivo positivos para los siguientes cuatro años. Guess
es la tasa interna estimada de retorno.
VB
' Define money format.
Dim MoneyFmt As String = "###,##0.00"
' Define percentage format.
Dim PercentFmt As String = "#0.00"

Dim values(4) As Double


' Business start-up costs.
values(0) = -70000
' Positive cash flows reflecting income for four successive years.
values(1) = 22000
values(2) = 25000
values(3) = 28000
values(4) = 31000
' Use the IRR function to calculate the rate of return.
' Guess starts at 10 percent.
Dim Guess As Double = 0.1
' Calculate internal rate.
Dim CalcRetRate As Double = IRR(values, Guess) * 100
' Display internal return rate.
MsgBox("The internal rate of return for these cash flows is " & _
Format(CalcRetRate, CStr(PercentFmt)) & " percent.")

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Financial
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
NPV (Función)
MIRR (Función)
Resumen financiero
ArgumentException
Referencia del lenguaje Visual Basic

IsArray (Función, Visual Basic)


Devuelve un valor de tipo Boolean que indica si una variable apunta a una matriz.

Public Function IsArray(ByVal VarName As Object) As Boolean

Parámetros
VarName
Requerido. Variable Object.
Comentarios
IsArray devuelve True si la variable indica una matriz; de lo contrario, devuelve False. IsArray es especialmente útil con
objetos que podrían contener matrices.
Ejemplo
En este ejemplo se utiliza la función IsArray para comprobar si varias variables hacen referencia a una matriz.
VB
Dim firstArray(4), secondArray(3) As Integer
Dim thisString As String = "Test"
Dim arrayCheck As Boolean
arrayCheck = IsArray(firstArray)
arrayCheck = IsArray(secondArray)
arrayCheck = IsArray(thisString)
' The first two calls to IsArray return True; the third returns False.

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Information
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Tareas
Cómo: Declarar una variable de matriz
Referencia
IsDate (Función, Visual Basic)
IsDBNull (Función)
IsError (Función)
IsNothing (Función)
IsNumeric (Función, Visual Basic)
IsReference (Función)
Object (Tipo de datos)
TypeName (Función, Visual Basic)
Referencia del lenguaje Visual Basic

IsDate (Función, Visual Basic)


Devuelve un valor Boolean que indica si una expresión representa un valor Date válido.

Public Function IsDate(ByVal Expression As Object) As Boolean

Parámetros
Expression
Requerido. Expresión Object.
Comentarios
IsDate devuelve True si Expression es Date (Tipo de datos) o se puede convertir en Date; de lo contrario, devuelve False.
El tipo de datos Date incluye un valor de fecha y un valor de hora. IsDate devuelve True si Expression representa una fecha
válida, una hora válida o una fecha y hora válidas.
Ejemplo
El ejemplo siguiente utiliza la función IsDate para determinar si varias variables representan los valores Date válidos.
VB
Dim firstDate, secondDate As Date
Dim timeOnly, dateAndTime, noDate As String
Dim dateCheck As Boolean
firstDate = CDate("February 12, 1969")
secondDate = #2/12/1969#
timeOnly = "3:45 PM"
dateAndTime = "March 15, 1981 10:22 AM"
noDate = "Hello"
dateCheck = IsDate(firstDate)
dateCheck = IsDate(secondDate)
dateCheck = IsDate(timeOnly)
dateCheck = IsDate(dateAndTime)
dateCheck = IsDate(noDate)

En el ejemplo anterior, IsDate devuelve True en las cuatro primeras llamadas y False en la última.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Information
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
IsArray (Función, Visual Basic)
IsDBNull (Función)
IsError (Función)
IsNothing (Función)
IsNumeric (Función, Visual Basic)
IsReference (Función)
Object (Tipo de datos)
Date (Tipo de datos, Visual Basic)
TypeName (Función, Visual Basic)
Referencia del lenguaje Visual Basic

IsDBNull (Función)
Devuelve un valor de tipo Boolean que indica si una expresión produce como resultado la clase System.DBNull.

Public Function IsDBNull(ByVal Expression As Object) As Boolean

Parámetros
Expression
Requerido. Expresión Object.
Comentarios
IsDBNull devuelve True si el tipo de datos de Expression se evalúa como el tipo DBNull; de lo contrario, IsDBNull devuelve
False.
El valor de System.DBNull indica que Object representa datos que faltan o no existen. DBNull no es igual que Nothing, que
indica que una variable todavía no se ha inicializado. DBNull tampoco es igual que una cadena de longitud cero (""), que en
ocasiones se denomina cadena nula.
Ejemplo
En este ejemplo se utiliza la función IsDBNull para determinar si una variable se evalúa como DBNull.
VB
Dim testVar As Object
Dim nullCheck As Boolean
nullCheck = IsDBNull(testVar)
testVar = ""
nullCheck = IsDBNull(testVar)
testVar = System.DBNull.Value
nullCheck = IsDBNull(testVar)
' The first two calls to IsDBNull return False; the third returns True.

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Information
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
IsArray (Función, Visual Basic)
IsDate (Función, Visual Basic)
IsError (Función)
IsNothing (Función)
IsNumeric (Función, Visual Basic)
IsReference (Función)
Object (Tipo de datos)
TypeName (Función, Visual Basic)
DBNull
Referencia del lenguaje Visual Basic

IsError (Función)
Devuelve un valor de tipo Boolean que indica si una expresión es un tipo de excepción.

Public Function IsError(ByVal Expression As Object) As Boolean

Parámetros
Expression
Requerido. Expresión Object.
Comentarios
IsError devuelve True si la expresión representa una variable Object que deriva de la clase Exception en el espacio de
nombres System.
Una excepción que deriva de System.Exception puede capturarse con las instrucciones Try...Catch...Finally.
Ejemplo
En el ejemplo siguiente se utiliza la función IsError para comprobar si una expresión representa una excepción del sistema.
VB
Sub demonstrateIsError(ByVal firstArg As Integer)
Dim returnVal As New Object
Dim badArg As String = "Bad argument value"
Dim errorCheck As Boolean
If firstArg > 10000 Then
returnVal = New System.ArgumentOutOfRangeException(badArg)
End If
errorCheck = IsError(returnVal)
End Sub

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Information
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
IsArray (Función, Visual Basic)
IsDate (Función, Visual Basic)
IsDBNull (Función)
IsNothing (Función)
IsNumeric (Función, Visual Basic)
IsReference (Función)
Object (Tipo de datos)
TypeName (Función, Visual Basic)
Referencia del lenguaje Visual Basic

IsNothing (Función)
Devuelve un valor de tipo Boolean que indica si una expresión no tiene ningún objeto asignado.

Public Function IsNothing(ByVal Expression As Object) As Boolean

Parámetros
Expression
Requerido. Expresión Object.
Comentarios
IsNothing devuelve True si la expresión representa una variable de objeto que no tiene actualmente ningún objeto asignado;
en caso contrario, devuelve False.
IsNothing está diseñada para trabajar con tipos de referencia. Un tipo de valor no puede contener un valor de Nothing; si se
asigna Nothing, recupera su valor predeterminado. Si proporciona un tipo de valor en Expression, IsNothing siempre
devuelve False.
Ejemplo
En el ejemplo siguiente se utiliza la función IsNothing para determinar si una variable de objeto está asociada a alguna
instancia de objeto.
VB
Dim testVar As Object
' No instance has been assigned to variable testVar yet.
Dim testCheck As Boolean
' The following call returns True.
testCheck = IsNothing(testVar)
' Assign a string instance to variable testVar.
testVar = "ABCDEF"
' The following call returns False.
testCheck = IsNothing(testVar)
' Disassociate variable testVar from any instance.
testVar = Nothing
' The following call returns True.
testCheck = IsNothing(testVar)

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Information
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
IsArray (Función, Visual Basic)
IsDate (Función, Visual Basic)
IsDBNull (Función)
IsError (Función)
IsNumeric (Función, Visual Basic)
IsReference (Función)
Object (Tipo de datos)
TypeName (Función, Visual Basic)
Conceptos
Tipos de valores y tipos de referencia
Referencia del lenguaje Visual Basic

IsNumeric (Función, Visual Basic)


Devuelve un valor Boolean que indica si una expresión puede evaluarse como un número.

Public Function IsNumeric(ByVal Expression As Object) As Boolean

Parámetros
Expression
Requerido. Expresión Object.
Comentarios
IsNumeric devuelve True si el tipo de datos de Expression es Boolean, Byte, Decimal, Double, Integer, Long, SByte, Short,
Single, UInteger, ULong o UShort o un Object que contiene uno de esos tipos numéricos. También devuelve True si
Expression es Char o String, que puede convertir correctamente a un número.
IsNumeric devuelve False si Expression es un dato de tipo Date o un dato de tipo Object y no contiene ningún tipo numérico.
IsNumeric devuelve False si Expression es Char o String que no se puede convertir en un número.
Ejemplo
En el ejemplo siguiente se utiliza la función IsNumeric para determinar si el contenido de una variable puede evaluarse como
un número.
VB
Dim testVar As Object
Dim numericCheck As Boolean
testVar = "53"
' The following call to IsNumeric returns True.
numericCheck = IsNumeric(testVar)
testVar = "459.95"
' The following call to IsNumeric returns True.
numericCheck = IsNumeric(testVar)
testVar = "45 Help"
' The following call to IsNumeric returns False.
numericCheck = IsNumeric(testVar)

Requisitos
Espacio de nombres:Microsoft.VisualBasic
Módulo:Information
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
IsArray (Función, Visual Basic)
IsDate (Función, Visual Basic)
IsDBNull (Función)
IsError (Función)
IsNothing (Función)
IsReference (Función)
Object (Tipo de datos)
TypeName (Función, Visual Basic)
Referencia del lenguaje Visual Basic

IsReference (Función)
Devuelve un valor de tipo Boolean que indica si una expresión es un tipo de referencia.

Public Function IsReference(ByVal Expression As Object) As Boolean

Parámetros
Expression
Requerido. Expresión Object.
Comentarios
IsReference devuelve True si Expression representa un tipo de referencia, como una instancia de clase, un tipo String o una
matriz de cualquier tipo; en caso contrario, devuelve False.
Un tipo de referencia contiene un puntero a datos almacenados en otra parte de la memoria. Un tipo de valor contiene sus
propios datos.
Ejemplo
En este ejemplo se utiliza la función IsReference para comprobar si un grupo de variables hacen referencia a tipos de
referencia.
VB
Dim testArray(3) As Boolean
Dim testString As String = "Test string"
Dim testObject As Object = New Object()
Dim testNumber As Integer = 12
testArray(0) = IsReference(testArray)
testArray(1) = IsReference(testString)
testArray(2) = IsReference(testObject)
testArray(3) = IsReference(testNumber)

En el ejemplo anterior, las tres primeras llamadas a IsReference devuelven True. La última llamada devuelve False, ya que
Integer es un tipo de valor, no un tipo de referencia.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Information
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
IsArray (Función, Visual Basic)
IsDate (Función, Visual Basic)
IsDBNull (Función)
IsError (Función)
IsNothing (Función)
IsNumeric (Función, Visual Basic)
Object (Tipo de datos)
TypeName (Función, Visual Basic)
Conceptos
Tipos de valores y tipos de referencia
Referencia del lenguaje Visual Basic

Join (Función, Visual Basic)


Devuelve una cadena creada a partir de la combinación de varias subcadenas contenidas en una matriz.

Function Join(
ByVal SourceArray() As { Object | String },
Optional ByVal Delimiter As String = " "
) As String

Parámetros
SourceArray
Obligatorio. Matriz unidimensional que contiene las subcadenas que se van a combinar.
Delimiter
Opcional. Cualquier cadena utilizada para separar las subcadenas de la cadena devuelta. Si se omite, se utilizará el carácter
de espacio (" "). Si Delimiter es una cadena de longitud cero ("") o Nothing, todos los elementos de la lista se concatenarán
sin delimitadores.
Excepciones
Tipo de excepción Número de error Condición
ArgumentException 5 SourceArray no es unidimensional.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
Existe una paridad entre las funciones Join y Split. La función Join toma una matriz de cadenas y las une utilizando una
cadena de delimitación para devolver una cadena única. La función Split toma una cadena y la separa en el delimitador para
devolver una matriz de cadenas. Sin embargo, una diferencia fundamental es que Join puede concatenar cadenas con
cualquier cadena de delimitación, Split puede separar sólo cadenas mediante un delimitador de carácter único.
Ejemplo
El ejemplo siguiente muestra cómo se utiliza la función Join para crear una lista a partir de varias cadenas.
VB
Dim TestItem() As String = {"Pickle", "Pineapple", "Papaya"}
' Returns "Pickle, Pineapple, Papaya"
Dim TestShoppingList As String = Join(TestItem, ", ")

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Strings
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Resumen de manipulación de cadenas
Split (Función, Visual Basic)
ArgumentException
Referencia del lenguaje Visual Basic

Kill (Función)
Elimina archivos desde un disco.
La característica My proporciona mayor productividad y rendimiento en las operaciones de E/S del archivo que si se utiliza
Kill. Para obtener más información, vea My.Computer.FileSystem (Objeto).

Public Sub Kill(ByVal PathName As String)

Parámetros
PathName
Requerido. Expresión String que especifica un o más nombres de archivo que se van a eliminar. PathName puede incluir el
directorio o la carpeta y la unidad.
Excepciones
Tipo de excepción Número de error Condición
IOException D674A0FB-EF16-4CC2-9DA7-709A8A07DBEA El archivo o los archivos de destino están abiertos.

FileNotFoundException 57ADDB16-6F9A-444D-8AF8-DDA52431DACA No se encuentra el archivo o los archivos de destino.

SecurityException Permiso denegado (Visual Basic) Permiso denegado.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
Kill admite el uso de caracteres comodín de carácter múltiple (*) y de carácter único (?) para especificar varios archivos.
Nota de seguridad Para ejecutarse, la función Kill requiere que se concedan al código de ejecución los indicadores Read y
PathDiscovery de FileIOPermission. Para obtener más información, vea SecurityException y Permisos de acceso a código.
Ejemplo
En este ejemplo, se utiliza la función Kill para eliminar un archivo de un disco.
VB
' Assume TESTFILE is a file containing some data.
Kill("TestFile") ' Delete file.
' Delete all *.TXT files in current directory.
Kill("*.TXT")

Notas para desarrolladores de dispositivos inteligentes


Esta función no es compatible.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: FileSystem
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
RmDir (Función)
IOException Class
FileNotFoundException Class
Referencia del lenguaje Visual Basic

LBound (Función, Visual Basic)


Devuelve el menor subíndice disponible para la dimensión indicada de una matriz.

Public Function LBound( _


ByVal Array As System.Array, _
Optional ByVal Rank As Integer = 1 _
) As Integer

Parámetros
Array
Requerido. Matriz de cualquier tipo de datos. La matriz en la que desea buscar el menor subíndice posible de una dimensión.
Rank
Opcional. Integer. Dimensión para la que se va a devolver el menor subíndice posible. Utilice 1 para la primera dimensión, 2
para la segunda y así sucesivamente. Si se omite Rank, se supone 1.
Valor devuelto
Integer. El valor más bajo del subíndice que puede contener la dimensión especificada. LBound siempre devuelve 0, en tanto
que Array se haya inicializado y aunque no tenga elementos, por ejemplo si se trata de una cadena de longitud cero. Si Array
es Nothing, LBound produce ArgumentNullException.
Excepciones
Tipo de excepción Número de error Condición
ArgumentNullException D0344A65-EC02-4CAF-8D3C-9977392CA353 Array es Nothing.

RankException D0344A65-EC02-4CAF-8D3C-9977392CA353 Rank < 1 o Rank es mayor que el rango de Array.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
Puesto que los subíndices de matriz empiezan en 0, el menor índice disponible para cada dimensión es siempre 0.
Para una matriz con las siguientes dimensiones, LBound devuelve los valores de la siguiente tabla:

Dim a(100, 5, 4) As Byte

Llamada a LBound Valor devuelto


LBound(a, 1)

LBound(a, 2)

LBound(a, 3)

Ejemplo
En el ejemplo siguiente se utiliza la función LBound para determinar el menor subíndice disponible para la dimensión indicada
de una matriz.
VB
Dim lowest, bigArray(10, 15, 20), littleArray(6) As Integer
lowest = LBound(bigArray, 1)
lowest = LBound(bigArray, 3)
lowest = LBound(littleArray)
' All three calls to LBound return 0.

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Information
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
UBound (Función, Visual Basic)
Instrucción Dim (Visual Basic)
Instrucción ReDim (Visual Basic)
ArgumentException
RankException
Referencia del lenguaje Visual Basic

LCase (Función, Visual Basic)


Devuelve una cadena o un carácter convertidos en minúscula.

Public Shared Function LCase(ByVal Value As Char) As Char


' -or-
Public Shared Function LCase(ByVal Value As String) As String

Parámetros
Value
Requerido. Cualquier expresión String o Char válida.
Comentarios
Sólo las letras mayúsculas se convierten a minúsculas; todas las letras minúsculas y los caracteres no alfabéticos
permanecerán inalterados.
Esta función utiliza la información de referencia cultural de la aplicación al manipular la cadena para que los cambios de
mayúsculas y minúsculas sean los adecuados para la configuración regional en la que se usa la aplicación.
Nota de seguridad
Si la aplicación toma decisiones sobre la seguridad basándose en el resultado de una comparación o de una operación de ca
mbio de mayúsculas y minúsculas, la operación debe utilizar el método
System.String.Compare(System.String,System.String,System.StringComparison) y pasar Ordinal o OrdinalIgnoreCase al argu
mento comparisonType. Para obtener más información, vea Cómo afecta la referencia cultural a las cadenas en Visual Basic.

Ejemplo
En el siguiente ejemplo se utiliza la función LCase para devolver la versión de una cadena en minúscula:
VB
' String to convert.
Dim UpperCase As String = "Hello World 1234"
' Returns "hello world 1234".
Dim LowerCase As String = LCase(UpperCase)

Requisitos
Espacio de nombres:Microsoft.VisualBasic
Módulo: Strings
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
UCase (Función, Visual Basic)
Otros recursos
Cadenas en Visual Basic
Introducción a las cadenas en Visual Basic
Referencia del lenguaje Visual Basic

Left (Función, Visual Basic)


Devuelve una cadena que contiene un número especificado de caracteres desde el lado izquierdo de una cadena.

Public Shared Function Left( _


ByVal str As String, _
ByVal Length As Integer _
) As String

Parámetros
str
Requerido. Expresión String de la que se devuelven los caracteres que están más a la izquierda.
Length
Requerido. Expresión Integer. Expresión numérica que indica cuántos caracteres se van a devolver. Si es 0, se devuelve una
cadena de longitud cero (""). Si es mayor o igual que el número de caracteres en str, se devuelve toda la cadena.
Excepciones
Tipo de excepción Número de error Condición
ArgumentException 9B07D280-66C6-4EA5-A8ED-5DDB0036F877 Length

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
Para determinar el número de caracteres de str, utilice la función Len. Si se utiliza en una aplicación de Windows Forms o en
cualquier otra clase que tiene una propiedad Left, debe calificar totalmente la función con Microsoft.VisualBasic.Left.
Nota
La función LeftB de versiones anteriores de Visual Basic devuelve una cadena en bytes, en lugar de caracteres. Se utiliza prin
cipalmente para convertir cadenas en aplicaciones de juegos de caracteres de doble byte (DBCS). Todas las cadenas actuales
de Visual Basic están en Unicode y ya no se admite LeftB.

Ejemplo
En este ejemplo se muestra el uso de la función Left para devolver una subcadena de una String dada. En una clase que tenga
una propiedad Left, podría ser necesario calificar la función Left plenamente.
VB
Dim TestString As String = "Hello World!"
' Returns "Hello".
Dim subString As String = Microsoft.VisualBasic.Left(TestString, 5)

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Strings
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Resumen de manipulación de cadenas
Right (Función, Visual Basic)
Len (Función, Visual Basic)
Mid (Función, Visual Basic)
ArgumentException
Conceptos
Resumen de cambios de los elementos de programación ofrecidos
Referencia del lenguaje Visual Basic

Len (Función, Visual Basic)


Devuelve un entero que contiene el número de caracteres de una cadena, o bien el número nominal de bytes necesarios para
almacenar una variable.

Public Shared Function Len( _


ByVal Expression As { Boolean | Byte | SByte | Char | Double |
Integer | UInteger | Long | ULong | Object | Short | UShort |
Single | String | DateTime | Decimal } _
) As Integer

Parámetros
Expression
Cualquier expresión String o nombre de variable válidos. Si Expression es del tipo Object, la función Len devuelve el
tamaño en el que la función FilePut escribirá en el archivo.
Comentarios
En el caso de tipos definidos por el usuario y variables Object, la función Len devuelve el tamaño en el que la función FilePut
escribirá en el archivo. Si un Object contiene una String, devolverá la longitud de la cadena. Si Object contiene otro tipo,
devolverá el tamaño del objeto en el que la función FilePut escribirá en el archivo.
El atributo VBFixedString se puede aplicar a campos de cadena de los objetos para indicar el tamaño de la cadena, en bytes,
cuando se escribe en el disco. La función Len utiliza el atributo VBFixedString, si está disponible, al determinar el tamaño de
las variables de Object.
Nota
El posible que la función Len no pueda determinar el número real de bytes de almacenamiento requerido cuando se utiliza c
on cadenas de longitud variable en tipos de datos definidos por el usuario.

Nota
La función LenB de versiones anteriores de Visual Basic devuelve el número de bytes, en lugar de caracteres. Se utiliza princi
palmente para convertir cadenas en aplicaciones de juegos de caracteres de doble byte (DBCS). Todas las cadenas actuales d
e Visual Basic están en Unicode y ya no se admite LenB.

Ejemplo
En este ejemplo se utiliza Len para devolver el número de caracteres de una cadena:
VB
' Initializes variable.
Dim TestString As String = "Hello World"
' Returns 11.
Dim TestLen As Integer = Len(TestString)

Notas para desarrolladores de dispositivos inteligentes


La función Len sólo acepta como parámetros las variables String y Object. Si Objectcontiene una expresión String, devolverá
la longitud de String. Si un parámetro es una referencia a un Object NULL, la función devolverá cero. Si Object contiene
algún otro tipo, se producirá una excepción.
Requisitos
Espacio de nombres:Microsoft.VisualBasic
Módulo: Strings
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Resumen de tipos de datos (Visual Basic)
FilePut (Función)
VBFixedStringAttribute (Clase)
Resumen de manipulación de cadenas
Resumen de tipos de datos (Visual Basic)
InStr (Función, Visual Basic)
Conceptos
Resumen de cambios de los elementos de programación ofrecidos
Referencia del lenguaje Visual Basic

LineInput (Función)
Lee una sola línea de un archivo secuencial abierto y la asigna a una variable String.

Public Function LineInput(ByVal FileNumber As Integer) As String

Parámetros
FileNumber
Requerido. Cualquier número de archivo válido.
Excepciones
Tipo de excepción Número de error Condición
EndOfStreamException 65292704-6E7D-4622-9F50-EB655A59B016 Se ha llegado al final del archivo.

IOException D0E96AEA-7621-48F6-A78B-5D37D18AAA4E FileNumber no existe.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
La función LineInput se suministra a efectos de compatibilidad con versiones anteriores y puede tener un impacto en el
rendimiento. En el caso de aplicaciones no heredadas, el objeto My.Computer.FileSystem proporciona un rendimiento
superior. Para obtener más información, vea Acceso a archivos con Visual Basic.
Los datos leídos con LineInput se escriben normalmente en un archivo con Print.
Nota de seguridad
Cuando se lee de archivos, no deben tomarse decisiones acerca del contenido de un archivo basándose en la extensión del n
ombre de archivo. Por ejemplo, un archivo denominado Form1.vb puede no ser un archivo de código fuente de Visual Basic.

La función LineInput lee un carácter a la vez de un archivo hasta que encuentra un retorno de carro (Chr(13)) o una secuencia
de retorno de carro y avance de línea (Chr(13) + Chr(10)). En vez de anexarse a las cadenas de caracteres, las secuencias
retorno de carro-avance de línea se omiten.
Nota de seguridad
La lectura de un archivo con la función LineInput requiere acceso de tipo Read desde la enumeración
FileIOPermissionAccess.

Ejemplo
En este ejemplo se utiliza la función LineInput para leer una línea de un archivo secuencial y asignársela a una variable. En
este ejemplo se supone que TestFile es un archivo de texto con unas pocas líneas de datos de ejemplo.
VB
Dim TextLine As String
' Open file.
FileOpen(1, "TESTFILE", OpenMode.Input)
' Loop until end of file.
While Not EOF(1)
' Read line into variable.
TextLine = LineInput(1)
' Print to the console.
WriteLine(1, TextLine)
End While
FileClose(1)

Notas para desarrolladores de dispositivos inteligentes


Esta función no es compatible.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: FileSystem
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Tareas
Cómo: Escribir texto en archivos con un objeto StreamWriter en Visual Basic
Cómo: Escribir texto en archivos en Visual Basic
Referencia
Chr, ChrW (Funciones)
Input (Función)
Otros recursos
Acceso a archivos con Visual Basic
Referencia del lenguaje Visual Basic

Loc (Función)
Devuelve un valor Long que especifica la posición actual de lectura o escritura en un archivo abierto.

Public Function Loc(ByVal FileNumber As Integer) As Long

Parámetros
FileNumber
Requerido. Cualquier número de archivo Integer válido.
Excepciones
Tipo de excepción Número de error Condición
IOException D0E96AEA-7621-48F6-A78B-5D37D18AAA4E FileNumber no existe.

IOException 74891E96-884B-4C8D-872D-CD11AE272372 El modo de archivo no es válido.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
La función Loc se basa en cero; si se utiliza para obtener el primer byte de un archivo, devuelve 0.
La función Loc se suministra a efectos de compatibilidad con versiones anteriores y puede tener un impacto en el rendimiento.
En el caso de aplicaciones no heredadas, el objeto My.Computer.FileSystem proporciona un rendimiento superior. Para
obtener más información, vea Acceso a archivos con Visual Basic.
En la siguiente tabla se describe el valor devuelto para cada modo de acceso a archivos:
Modo Valor devuelto
Rando Número del último registro leído o escrito en el archivo.
m

Sequen Posición de byte actual en el archivo dividida por 128. Sin embargo, la información que devuelve Loc para los archiv
tial os secuenciales no se utiliza ni se necesita.

Binary Posición del último byte leído o escrito.


Ejemplo
En este ejemplo se utiliza la función Loc para devolver la posición actual de lectura o escritura en un archivo abierto. En este
ejemplo se supone que MyFile es un archivo de texto con unas pocas líneas de datos de ejemplo.
VB
Dim location As Long
Dim oneChar As Char
FileOpen(1, "C:\TESTFILE.TXT", OpenMode.Binary)
While location < LOF(1)
Input(1, oneChar)
location = Loc(1)
WriteLine(1, location & ControlChars.CrLf)
End While
FileClose(1)

Notas para desarrolladores de dispositivos inteligentes


Esta función no es compatible.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: FileSystem
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
EOF (Función)
LOF (Función)
Seek (Función)
IOException
Referencia del lenguaje Visual Basic

Lock, Unlock (Funciones)


Controla el acceso de otros procesos a la totalidad o una parte de un archivo abierto utilizando la función Open.
La característica My proporciona mayor productividad y rendimiento en las operaciones de E/S del archivo que si se utiliza
Lock y Unlock. Para obtener más información, vea My.Computer.FileSystem (Objeto).

Public Overloads Sub Lock(ByVal FileNumber As Integer)


' -or-
Public Overloads Sub Unlock(ByVal FileNumber As Integer)
' -or-
Public Overloads Sub Lock(_
ByVal FileNumber As Integer, _
ByVal Record As Long _
)
' -or-
Public Overloads Sub Unlock( _
ByVal FileNumber As Integer, _
ByVal Record As Long _
)
' -or-
Public Overloads Sub Lock( _
ByVal FileNumber As Integer, _
ByVal FromRecord As Long, _
ByVal ToRecord As Long _
)
' -or-
Public Overloads Sub Unlock( _
ByVal FileNumber As Integer, _
ByVal FromRecord As Long, _
ByVal ToRecord As Long _
)

Parámetros
FileNumber
Requerido. Cualquier número de archivo válido.
Record
Opcional. Número del único registro o byte que se deba bloquear o desbloquear.
FromRecord
Opcional. Número del primer registro o byte que se deba bloquear o desbloquear.
ToRecord
Opcional. Número del último registro o byte que se deba bloquear o desbloquear.
Excepciones
Tipo de excepción Número de error Condición
IOException D0E96AEA-7621-48F6-A78B-5D37D18AAA4E FileNumber no existe.

IOException 74891E96-884B-4C8D-872D-CD11AE272372 El modo de archivo no es válido.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
Las funciones Lock y Unlock se utilizan en entornos donde pueda ser necesario que varios procesos tengan acceso a un
mismo archivo.
Las funciones Lock y Unlock se utilizan siempre por parejas. Los argumentos de Lock y Unlock deben coincidir exactamente.
Si no se proporcionan Record, o FromRecord y ToRecord, el bloqueo afectará al archivo completo. Si se especifica un solo
Record, el registro único se bloqueará/desbloqueará.
Si el archivo se ha abierto para entradas o salidas secuenciales, Lock y Unlock afectan al archivo completo,
independientemente del intervalo especificado por FromRecord y ToRecord.
Ejemplo
En este ejemplo se muestra el uso de las funciones Lock y Unlock. Se supone que People.txt es un archivo que contiene
registros de la estructura Person.
VB
Structure Person
Dim Name As String
Dim ID As Integer
End Structure

Sub PutInLockedFile(ByVal index As Integer, ByVal onePerson As Person)


Try
FileOpen(1, "c:\people.txt", OpenMode.Binary)
Lock(1)
FilePut(index, onePerson)
Unlock(1)
FileClose(1)
Catch
' Error recovery code here.
End Try
End Sub

Notas para desarrolladores de dispositivos inteligentes


Esta función no es compatible.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: FileSystem
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
FileOpen (Función)
IOException Class
Otros recursos
Acceso a archivos con Visual Basic
Referencia del lenguaje Visual Basic

LOF (Función)
Devuelve un valor Long que representa el tamaño, en bytes, de un archivo abierto mediante la función FileOpen.
La característica My proporciona mayor productividad y rendimiento en las operaciones de E/S del archivo que si se utiliza
LOF. Para obtener más información, vea My.Computer.FileSystem (Objeto).

Public Function LOF(ByVal FileNumber As Integer) As Long

Parámetros
FileNumber
Requerido. Integer que contiene un número de archivo válido.
Excepciones
Tipo de excepción Número de error Condición
IOException D0E96AEA-7621-48F6-A78B-5D37D18AAA4E FileNumber no existe.

IOException 74891E96-884B-4C8D-872D-CD11AE272372 El modo de archivo no es válido.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
La función FileLen se utiliza para obtener la longitud de un archivo que no esté abierto.
Ejemplo
En este ejemplo se utiliza la función LOF para determinar el tamaño de un archivo abierto. Se supone que TestFile es un
archivo de texto que contiene datos de ejemplo.
VB
Dim length As Long
FileOpen(1, "C:\TESTFILE.TXT", OpenMode.Input) ' Open file.
length = LOF(1) ' Get length of file.
MsgBox(length)
FileClose(1) ' Close file.

Notas para desarrolladores de dispositivos inteligentes


Esta función no es compatible.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: FileSystem
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
EOF (Función)
FileLen (Función)
Loc (Función)
FileOpen (Función)
IOException Class
Otros recursos
Leer archivos en Visual Basic
Escribir en archivos en Visual Basic
Referencia del lenguaje Visual Basic

LSet (Función)
Devuelve una cadena alineada a la izquierda que contiene la cadena especificada y con la longitud determinada.

Public Shared Function LSet( _


ByVal Source As String, _
ByVal Length As Integer _
) As String

Parámetros
Source
Requerido. Expresión String. Variable de cadena que se va a ajustar.
Length
Requerido. Expresión Integer. Longitud de la cadena devuelta.
Comentarios
Si Source tiene mayor longitud que el valor de Length, LSet devuelve sólo los caracteres situados más a la derecha hasta
alcanzar la longitud especificada por Length. Si Source tiene menor longitud que Length, LSet agrega espacios al extremo
derecho de la cadena hasta alcanzar la longitud adecuada.
Ejemplo
En este ejemplo se muestra el uso de la función LSet.
VB
Dim TestString As String = "Left"
Dim lString As String
' Returns "Left "
lString = LSet(TestString, 10)
' Returns "Le"
lString = LSet(TestString, 2)
' Returns "Left"
lString = LSet(TestString, 4)

Requisitos
Espacio de nombres:Microsoft.VisualBasic
Módulo: Strings
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Resumen de manipulación de cadenas
Resumen de tipos de datos (Visual Basic)
RSet (Función)
Conceptos
Uso eficiente de tipos de datos
Referencia del lenguaje Visual Basic

Funciones M-R
La siguiente tabla contiene una lista de funciones miembro en tiempo de ejecución de Visual Basic.

Mid Minute MIRR MkDir

Month MonthName MsgBox NPer

NPV Oct Partition Pmt

PPmt Print PrintLine PV

QBColor Randomize Rate Rename

Replace Reset RGB Right

RmDir Rnd RSet RTrim

La función matemática Round que estaba disponible como una función miembro en tiempo de ejecución de Visual Basic en la
versión 6.0 y anteriores, ha sido reemplazada por un método (Round) en la clase Math de la biblioteca de clases .NET
Framework. Para obtener más información, vea Funciones matemáticas (Visual Basic).
Notas para desarrolladores de dispositivos inteligentes
Los siguientes elementos no se admiten en las aplicaciones de dispositivos inteligentes: MkDir, Print, PrintLine, Rename,
Reset y RmDir.
Vea también
Referencia
Funciones A-C
Funciones D-G
Funciones H-L
Funciones S-Z
Otros recursos
Referencia de Visual Basic
Referencia del lenguaje Visual Basic

Mid (Función, Visual Basic)


Devuelve una cadena que a su vez contiene un número especificado de caracteres de una cadena.

Public Shared Function Mid( _


ByVal str As String, _
ByVal Start As Integer, _
Optional ByVal Length As Integer _
) As String

Parámetros
str
Requerido. Expresión de tipo String de la que se devuelven caracteres.
Start
Requerido. Expresión Integer. La posición inicial de los caracteres que se devuelven. Si Start es mayor que el número de
caracteres de str, la función Mid devuelve una cadena de longitud cero (""). Start está basado en uno.
Length
Opcional. Expresión Integer. Número de caracteres que se va a devolver. Si se omite o si existen menos caracteres del
número especificado por Length en el texto (incluido el carácter en la posición Start), se devuelven todos los caracteres desde
la posición de inicio hasta el final de la cadena.
Excepciones
Tipo de excepción Número de error Condición
ArgumentException 5 Start <= 0 ó Length <0.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
Para determinar el número de caracteres de str, utilice la función Len.
Visual Basic tiene una función Mid y una instrucción Mid. Ambos elementos actúan en un número especificado de caracteres
de una cadena, pero la función Mid devuelve los caracteres, en tanto que la instrucción Mid los reemplaza. Para obtener más
información, vea Mid (Instrucción).
Nota
La función MidB de versiones anteriores de Visual Basic devuelve una cadena en bytes, en lugar de caracteres. Se utiliza prin
cipalmente para convertir cadenas en aplicaciones de juegos de caracteres de doble byte (DBCS). Todas las cadenas de Visual
Basic están en Unicode y ya no se admite MidB.

Ejemplo
En este ejemplo se utiliza la función Mid para devolver un número de caracteres especificado de una cadena.
VB
' Creates text string.
Dim TestString As String = "Mid Function Demo"
' Returns "Mid".
Dim FirstWord As String = Mid(TestString, 1, 3)
' Returns "Demo".
Dim LastWord As String = Mid(TestString, 14, 4)
' Returns "Function Demo".
Dim MidWords As String = Mid(TestString, 5)
Requisitos
Espacio de nombres:Microsoft.VisualBasic
Módulo: Strings
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Resumen de manipulación de cadenas
Left (Función, Visual Basic)
Len (Función, Visual Basic)
Trim, LTrim y RTrim (Funciones)
Mid (Instrucción)
Right (Función, Visual Basic)
ArgumentException
Conceptos
Resumen de cambios de los elementos de programación ofrecidos
Otros recursos
Cadenas en Visual Basic
Introducción a las cadenas en Visual Basic
Referencia del lenguaje Visual Basic

Minute (Función)
Devuelve un valor Integer entre 0 y 59 que representa el minuto de la hora.

Public Function Minute(ByVal TimeValue As DateTime) As Integer

Parámetros
TimeValue
Requerido. Valor Date del cual se desea extraer el minuto.
Comentarios
También se puede obtener el minuto de la hora llamando a DatePart y especificando DateInterval.Minute para el
argumento Interval.
Ejemplo
En este ejemplo se utiliza la función Minute para obtener el minuto de una hora especificada. En el entorno de desarrollo, el
literal de hora se muestra en formato de hora corto con los valores de configuración regional del código correspondiente.
VB
Dim thisTime As Date
Dim thisMinute As Integer
thisTime = #4:35:17 PM#
thisMinute = Minute(thisTime)
' thisMinute now contains 35.

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: DateAndTime
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Day (Función, Visual Basic)
Hour (Función, Visual Basic)
Now (Propiedad)
Second (Función, Visual Basic)
TimeOfDay (Propiedad)
DatePart (Función, Visual Basic)
System
DateTime
ArgumentException
ArgumentOutOfRangeException
Referencia del lenguaje Visual Basic

MIRR (Función)
Devuelve un valor de tipo Double que indica la tasa interna devuelta modificada para una serie de flujos de caja periódicos
(pagos y cobros).

Function MIRR( _
ByRef ValueArray() As Double, _
ByVal FinanceRate As Double, _
ByVal ReinvestRate As Double _
) As Double

Parámetros
ValueArray
Requerido. Matriz de tipo Double que especifica valores de flujo de caja. La matriz debe contener al menos un valor
negativo (un pago) y un valor positivo (un cobro).
FinanceRate
Requerido. Valor de tipo Double que indica el tipo de interés pagado como costo de financiación.
ReinvestRate
Requerido. Valor de tipo Double que indica el tipo de interés recibido por la reinversión de los beneficios en efectivo.
Excepciones
Tipo de excepción Número de error Condición
ArgumentException 9B07D280-66C6-4EA5-A8ED-5DDB0036F877 El rango de ValueArray no es igual a 1, FinanceRate = -
1 o ReinvestRate = -1

DivideByZeroException 7DC22E29-8BAA-4D82-A1A6-2DE64BA9B25D Se ha producido una división entre cero.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
La tasa interna de retorno modificada es la tasa interna de retorno cuando los pagos y los cobros tienen distintos tipos de
financiación. La función MIRR tiene en cuenta el costo de la inversión (FinanceRate) y el tipo de interés recibido por la
reinversión de efectivo (ReinvestRate).
FinanceRate y ReinvestRatearguments son porcentajes expresados como valores decimales. Por ejemplo, 12 por ciento se
expresa como 0,12.
La función MIRR utiliza el orden de los valores de la matriz para interpretar el orden de los pagos y cobros. Asegúrese de
indicar los valores de los pagos y cobros siguiendo la secuencia correcta.
Ejemplo
En este ejemplo se utiliza la función MIRR para obtener la tasa interna de retorno modificada de una serie de efectivos
incluidos en la matriz Values(). LoanAPR representa el interés financiero y InvAPR el tipo de interés recibido por inversión.
VB
' Define money format.
Dim MoneyFmt As String = "###,##0.00"
' Define percentage format.
Dim PercentFmt As String = "#0.00"

Dim values(4) As Double


' Business start-up costs.
values(0) = -70000
' Positive cash flows reflecting income for four successive years.
values(1) = 22000
values(2) = 25000
values(3) = 28000
values(4) = 31000
' Use the MIRR function to calculate the internal return rate.
' Set the loan rate.
Dim LoanAPR As Double = 0.1
' Set the reinvestment rate.
Dim InvAPR As Double = 0.12
' Calculate internal rate.
Dim RetRate As Double = MIRR(values, LoanAPR, InvAPR)
' Display internal return rate.
MsgBox("The modified internal rate of return for these cash flows is " & _
Format(Math.Abs(RetRate) * 100, CStr(PercentFmt)) & "%.")

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Financial
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
IRR (Función)
NPV (Función)
Resumen financiero
ArgumentException
DivideByZeroException
Referencia del lenguaje Visual Basic

MkDir (Función)
Crea un nuevo directorio.
La característica My proporciona mayor productividad y rendimiento en las operaciones de E/S del archivo que si se utiliza
MkDir. Para obtener más información, vea My.Computer.FileSystem.CreateDirectory (Método).

Public Sub MkDir(ByVal Path As String)

Parámetros
Path
Requerido. Expresión String que identifica el directorio que se va a crear. Path puede incluir la unidad. Si no se especifica
ninguna unidad, MkDir crear el nuevo directorio en la unidad actual.
Excepciones
Tipo de excepción Número de error Condición
ArgumentException 52 Path no se ha especificado o está vacío.

SecurityException 70 Permiso denegado.

IOException 75 El directorio ya existe.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Nota de seguridad
Para crear un directorio o carpeta son necesarios los permisos de E/S de lectura y escritura. Para obtener más información, v
ea FileIOPermission y Permisos de acceso a código.

Comentarios
Esta función crea los nuevos directorios especificados en Path, a menos que ya existan o si alguna parte de Path no es válida. El
parámetro Path debe especificar una ruta de acceso a directorio, no una ruta de acceso a archivo.
Ejemplo
En este ejemplo se utiliza la función MkDir para crear un directorio. Si no se especifica la unidad, el nuevo directorio se crea en
la unidad actual.
VB
' Make new directory.
MkDir("C:\TESTDIR")

Notas para desarrolladores de dispositivos inteligentes


Esta función no es compatible.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: FileSystem
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Tareas
Cómo: Crear un directorio en Visual Basic
Referencia
ChDir (Función)
CurDir (Función)
RmDir (Función)
ArgumentException Class
IOException Class
Referencia del lenguaje Visual Basic

Month (Función, Visual Basic)


Devuelve un valor Integer entre 1 y 12 que representa el mes del año.

Public Function Month(ByVal DateValue As DateTime) As Integer

Parámetros
DateValue
Requerido. Valor Date del cual se desea extraer el mes.
Comentarios
También se puede obtener el mes del año llamando a DatePart y especificando DateInterval.Month para el argumento
Interval.
Ejemplo
En este ejemplo se utiliza la función Month para obtener el mes de una fecha especificada. En el entorno de desarrollo, el
literal de fecha se muestra en formato corto de fecha con los valores de configuración regional del código correspondiente.
VB
Dim thisDate As Date
Dim thisMonth As Integer
thisDate = #2/12/1969#
thisMonth = Month(thisDate)
' thisMonth now contains 2.

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: DateAndTime
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Day (Función, Visual Basic)
Now (Propiedad)
Weekday (Función, Visual Basic)
Year (Función, Visual Basic)
DatePart (Función, Visual Basic)
System
DateTime
ArgumentException
ArgumentOutOfRangeException
Referencia del lenguaje Visual Basic

MonthName (Función, Visual Basic)


Devuelve un valor String que contiene el nombre del mes especificado.

Public Function MonthName( _


ByVal Month As Integer, _
Optional ByVal Abbreviate As Boolean = False _
) As String

Parámetros
Month
Requerido. Integer. Designación numérica del mes, entre 1 y 13; 1 indica el mes de enero y 12 indica el mes de diciembre.
Se puede utilizar el valor 13 con un calendario de 13 meses. Si el sistema utiliza un calendario de 12 meses y Month es 13,
MonthName devuelve una cadena vacía.
Abbreviate
Opcional. Valor Boolean que indica si se va a abreviar el nombre del mes. Si se omite, el valor predeterminado es False, que
significa que el nombre del mes no se abrevia.
Excepciones
Tipo de excepción Número de error Condición
ArgumentException 9B07D280-66C6-4EA5-A8ED-5DDB0036F877 Month es menor que 1 o mayor que 13.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
La cadena devuelta por MonthName no depende únicamente de los argumentos de entrada, sino también de los valores de la
Configuración regional especificados en el Panel de control de Windows.
Nota
MonthName utiliza la configuración de calendario actual de la propiedad CurrentCulture de la clase CultureInfo en el espaci
o de nombres System.Globalization. Los valores de CurrentCulture predeterminados están determinados por la configuraci
ón del Panel de control.

Ejemplo
En este ejemplo se utiliza la función MonthName para determinar el nombre del mes, a partir del entero dado. El valor
Boolean determinará si se muestra el nombre completo (False) o el nombre abreviado (True).
VB
Dim thisMonth As Integer
Dim name As String
thisMonth = 4
' Set Abbreviate to True to return an abbreviated name.
name = MonthName(thisMonth, True)
' name now contains "Apr".

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: DateAndTime
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
WeekdayName (Función, Visual Basic)
System
System.Globalization
DateTime
ArgumentException
CultureInfo
Referencia del lenguaje Visual Basic

MsgBox (Función, Visual Basic)


Muestra un mensaje en un cuadro de diálogo, espera a que el usuario haga clic en un botón y devuelve un entero que indica el
botón utilizado.

Public Function MsgBox( _


ByVal Prompt As Object, _
Optional ByVal Buttons As MsgBoxStyle = MsgBoxStyle.OKOnly, _
Optional ByVal Title As Object = Nothing _
) As MsgBoxResult

Parámetros
Prompt
Obligatorio. Expresión de tipo String que se muestra como mensaje en el cuadro de diálogo. La longitud máxima de Prompt
es de aproximadamente 1024 caracteres, según el ancho de los caracteres utilizados. Si Prompt consta de más de una línea,
puede separar las líneas mediante un carácter de retorno de carro (Chr(13)), un carácter de avance de línea (Chr(10)) o una
combinación de caracteres de retorno de carro/avance de línea (Chr(13) y Chr(10)) entre cada línea.
Buttons
Opcional. Expresión numérica que corresponde a la suma de los valores que especifican el número y tipo de botones que se
han de mostrar, el estilo de icono que se va a usar, la identificación del botón predeterminado y la modalidad del cuadro de
mensaje. Si se omite Buttons, el valor predeterminado será cero.
Title
Opcional. Expresión de tipo String que se muestra en la barra de título del cuadro de diálogo. Si se omite Title, en la barra de
título aparecerá el nombre de la aplicación.
Valores
En la siguiente tabla se incluyen los valores de enumeración de MsgBoxStyle:
Miembro Valor Descripción
OKOnly 0 Muestra sólo el botón Aceptar.

OKCancel 1 Muestra los botones Aceptar y Cancelar.

AbortRetryIgnore 2 Muestra los botones Anular, Reintentar y Omitir.

YesNoCancel 3 Muestra los botones Sí, No y Cancelar.

YesNo 4 Muestra los botones Sí y No.

RetryCancel 5 Muestra los botones Reintentar y Cancelar.

Critical 16 Muestra el icono Mensaje crítico.

Question 32 Muestra el icono Consulta de advertencia.

Exclamation 48 Muestra el icono Mensaje de advertencia.

Information 64 Muestra el icono Mensaje de información.

DefaultButton1 0 El primer botón es el predeterminado.

DefaultButton2 256 El segundo botón es el predeterminado.


DefaultButton3 512 El tercer botón es el predeterminado.

ApplicationModal 0 Aplicación modal: el usuario debe responder al cuadro de mensaje antes de continuar trabajando
en la aplicación actual.

SystemModal 4096 Sistema modal: se suspenden todas las aplicaciones hasta que el usuario responda al cuadro de
mensaje.

MsgBoxSetForegr 65536 Especifica la ventana del cuadro de mensaje como ventana de primer plano.
ound

MsgBoxRight 52428 Texto alineado a la derecha.


8

MsgBoxRtlReadin 10485 Especifica que el texto debe aparecer para ser leído de derecha a izquierda en los sistemas árabe y
g 76 hebreo.

El primer grupo de valores (0-5) describe el número y tipo de botones mostrados en el cuadro de diálogo. El segundo grupo
(16, 32, 48, 64) describe el estilo de icono. El tercer grupo (0, 256, 512) determina qué botón es el valor predeterminado. El
cuarto grupo (0, 4096) determina la modalidad del cuadro de mensaje y el quinto grupo especifica si el cuadro de mensaje es
la ventana de primer plano, junto con la alineación y la dirección del texto. A la hora de sumar números para crear el valor final
del argumento Buttons, se deberá utilizar únicamente un número de cada grupo.
Valor devuelto
Constante Valor
OK 1

Cancel 2

Abort 3

Retry 4

Ignore 5

Yes 6

No 7
Excepciones
Tipo de excepción Número de er Condición
ror
ArgumentException 5 Prompt no es una expresión String o Title no es válido.

InvalidOperationException 5 El proceso no se está ejecutando en modo interactivo de usuario.

InvalidEnumArgumentException 5 Uno o más parámetros no son miembros de la enumeración MsgBoxResult


o MsgBoxStyle.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
Si el cuadro de diálogo muestra un botón Cancelar, presionar la tecla ESC tendrá el mismo efecto que hacer clic en Cancelar.
Si el cuadro de diálogo contiene un botón Ayuda, existe ayuda contextual para ese cuadro de diálogo en concreto. Sin
embargo, no se devolverá ningún valor hasta que se haga clic en uno de estos botones.
Nota
Si desea especificar más que el primer argumento, deberá utilizar la función MsgBox en una expresión. Si omite alguno de l
os argumentos de posición, deberá conservar el correspondiente delimitador de coma.

Nota
La función MsgBox requiere UIPermission en el nivel SafeTopLevelWindows, lo que puede afectar a su ejecución en situaci
ones de confianza parcial. Para obtener más información, vea Solicitar permisos y UIPermission.

Ejemplo
En este ejemplo se utiliza la función MsgBox para mostrar un mensaje de error crítico en un cuadro de diálogo con botones Sí
y No. El botón No se considera la respuesta predeterminada. Todo ello se consigue combinando los valores de constante de
MsgBox en una expresión numérica. En este caso, si se agrega 4 (la combinación de botones Sí/No) y 16 (la ventana Mensaje
crítico) y 256 (el segundo botón como botón predeterminado) se obtiene un total de 276. El valor que devuelve la función
MsgBox depende del botón que elija el usuario: Sí devuelve un valor 6; No un valor 7.
VB
Dim msg As String
Dim title As String
Dim style As MsgBoxStyle
Dim response As MsgBoxResult
msg = "Do you want to continue?" ' Define message.
style = MsgBoxStyle.DefaultButton2 Or _
MsgBoxStyle.Critical Or MsgBoxStyle.YesNo
title = "MsgBox Demonstration" ' Define title.
' Display message.
response = MsgBox(msg, style, title)
If response = MsgBoxResult.Yes Then ' User chose Yes.
' Perform some action.
Else
' Perform some other action.
End If

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Interaction
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
InputBox (Función, Visual Basic)
Referencia del lenguaje Visual Basic

NPer (Función)
Devuelve un valor de tipo Double que indica el número de períodos de una anualidad para pagos fijos periódicos con un tipo
de interés fijo.

Function NPer( _
ByVal Rate As Double, _
ByVal Pmt As Double, _
ByVal PV As Double, _
Optional ByVal FV As Double = 0, _
Optional ByVal Due As DueDate = DueDate.EndOfPeriod _
) As Double

Parámetros
Rate
Requerido. Double que indica el tipo de interés por período. Por ejemplo, si obtiene un crédito para comprar un automóvil a
una tasa porcentual anual (TAE) del 10 por ciento, y realiza pagos mensuales, el tipo por período será 0,1/12 ó 0,0083.
Pmt
Requerido. Valor de tipo Double que indica el pago que se va a realizar cada período. Normalmente, los pagos contienen un
capital principal y un interés que no varía a lo largo de la duración de la anualidad.
PV
Requerido. Valor de tipo Double que indica el valor actual, o valor a día de hoy, de una serie de pagos o cobros futuros. Por
ejemplo, en el momento de obtener un crédito para comprar un automóvil, el importe del mismo es el valor actual para el
prestamista de los pagos mensuales que se realizarán.
FV
Opcional. Double especifica el valor futuro o el saldo en efectivo que se desea tener una vez realizado el pago final. Por
ejemplo, el valor futuro de un crédito es 0 $, puesto que ése es su valor después del pago final. Sin embargo, si desea
ahorrar 50.000 dólares durante 18 años para la educación de su hijo, el valor futuro será 50.000 dólares. Si se omite, se
supone que es 0.
Due
Opcional. Objeto de tipo DueDate (Enumeración) que indica cuándo vencen los pagos. Este argumento debe ser
DueDate.EndOfPeriod si los pagos vencen al final del período o DueDate.BegOfPeriod si los pagos vencen al principio del
mismo. Si se omite, se supone que es DueDate.EndOfPeriod.
Excepciones
Tipo de excepción Número de error Condición
ArgumentException 9B07D280-66C6-4EA5-A8ED-5DDB0036F877 Rate

ArgumentException 9B07D280-66C6-4EA5-A8ED-5DDB0036F877 Rate = 0 y Pmt = 0

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
Una anualidad es una serie de pagos fijos en efectivo realizados a lo largo de un período de tiempo. Puede ser un préstamo
(como la hipoteca de un inmueble, por ejemplo) o una inversión (como un plan de ahorro mensual).
Para todos los argumentos, el efectivo abonado (como depósitos de ahorro) se representa con números negativos; y el
recibido (como cheques de dividendos), con números positivos.
Ejemplo
En este ejemplo se utiliza la función NPer para devolver el número de períodos durante los cuales se deben realizar pagos
para amortizar un préstamo cuyo valor se incluye en PVal. También se proporcionan el tipo de interés porcentual por período
(APR / 12), el pago (Payment), el valor futuro del préstamo (FVal) y un número que indica si el pago vence al principio o al final
del período de pago (PayType).
VB
Sub TestNPer()
Dim TotPmts As Double
Dim PVal, APR, Payment As Double
Dim PayType As DueDate
Dim Response As MsgBoxResult

' Usually 0 for a loan.


Dim Fval As Double = 0
PVal = CDbl(InputBox("How much do you want to borrow?"))
APR = CDbl(InputBox("What is the annual percentage rate of your loan?"))
' Usually 0 for a loan.
If APR > 1 Then APR = APR / 100
Payment = CDbl(InputBox("How much do you want to pay each month?"))
Response = MsgBox("Do you make payments at the end of month?", MsgBoxStyle.YesNo)
If Response = MsgBoxResult.No Then
PayType = DueDate.BegOfPeriod
Else
PayType = DueDate.EndOfPeriod
End If
TotPmts = NPer(APR / 12, -Payment, PVal, FVal, PayType)
If Int(TotPmts) <> TotPmts Then TotPmts = Int(TotPmts) + 1
MsgBox("It will take you " & TotPmts & " months to pay off your loan.")
End Sub

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Financial
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Resumen financiero
ArgumentException
Referencia del lenguaje Visual Basic

NPV (Función)
Devuelve un valor de tipo Double que indica el valor actual neto de una inversión basada en una serie de flujos de caja
periódicos (pagos y cobros) y un tipo de descuento.

Function NPV( _
ByVal Rate As Double, _
ByRef ValueArray() As Double _
) As Double

Parámetros
Rate
Requerido. Valor de tipo Double que indica el tipo de descuento a lo largo del período, expresado como un valor decimal.
ValueArray
Requerido. Matriz de tipo Double que especifica valores de flujo de caja. La matriz debe contener al menos un valor
negativo (un pago) y un valor positivo (un cobro).
Excepciones
Tipo de excepció Número de error Condición
n
ArgumentException 9B07D280-66C6-4EA5-A8ED-5DDB0036F877 ValueArray es Nothing, categoría de ValueArray <> 1, o R
ate = -1

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
El valor actual neto de una inversión es el valor actual de una serie de pagos y cobros futuros.
La función NPV utiliza el orden de los valores de la matriz para interpretar el orden de los pagos y cobros. Asegúrese de
indicar los valores de los pagos y cobros siguiendo la secuencia correcta.
La inversión de NPV comienza un período antes de la fecha del primer flujo de caja y termina con el último flujo de caja de la
matriz.
El cálculo del valor actual neto se basa en flujos de caja futuros. Si el primer flujo de efectivo se produce al principio del primer
período, el primer valor debe agregarse al que devuelva NPV y no debe incluirse en los valores de flujo de efectivo de
ValueArray.
La función NPV es similar a PV (valor actual), excepto en que PV permite que los flujos de caja comiencen al principio o al final
de un período. A diferencia de los valores de flujo de caja variables de NPV, los de PV deben ser fijos a lo largo de toda la
inversión.
Ejemplo
En este ejemplo se utiliza la función NPV para devolver el valor actual neto de una serie de flujos de efectivo contenidos en la
matriz values(). El valor devuelto, almacenado en FixedRetRate, representa la tasa interna fija que se devuelve.
VB
' Define money format.
Dim MoneyFmt As String = "###,##0.00"
' Define percentage format.
Dim PercentFmt As String = "#0.00"
Dim values(4) As Double
' Business start-up costs.
values(0) = -70000
' Positive cash flows reflecting income for four successive years.
values(1) = 22000
values(2) = 25000
values(3) = 28000
values(4) = 31000
' Use the NPV function to calculate the net present value.
' Set fixed internal rate.
Dim FixedRetRate As Double = 0.0625
' Calculate net present value.
Dim NetPVal As Double = NPV(FixedRetRate, values)
' Display net present value.
MsgBox("The net present value of these cash flows is " & _
Format(NetPVal, MoneyFmt) & ".")

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Financial
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
IRR (Función)
MIRR (Función)
Resumen financiero
ArgumentException
Referencia del lenguaje Visual Basic

Oct (Función)
Devuelve una cadena que representa el valor octal de un número.

Public Shared Function Oct( _


ByVal Number As { Byte | SByte | Short | UShort | _
Integer | UInteger | Long | ULong | Object } _
) As String

Parámetros
Number
Requerido. Cualquier expresión numérica o expresión String válida.
Excepciones
Tipo de excepción Número de error Condición
ArgumentNullException 9B07D280-66C6-4EA5-A8ED-5DDB0036F877 No se ha especificado Number.

ArgumentException 9B07D280-66C6-4EA5-A8ED-5DDB0036F877 Number no es un tipo numérico.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
Si Number ya no es un número entero, se redondea al número entero más próximo antes de ser evaluado.
Si Number es Oct devuelve
Vacío Cero (0)

Cualquier otro número Hasta 22 caracteres octales

Puede representar números octales directamente anteponiendo números en el intervalo correcto con &O. Por ejemplo, &O10
es la notación octal para el valor decimal 8.
Ejemplo
En este ejemplo se utiliza la función Oct para devolver el valor octal de un número.
VB
Dim TestOct As String
' Returns "4".
TestOct = Oct(4)
' Returns "10".
TestOct = Oct(8)
' Returns "713".
TestOct = Oct(459)

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Conversion
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Resumen de conversión
Hex (Función, Visual Basic)
Funciones de conversión de tipos
ArgumentNullException
Referencia del lenguaje Visual Basic

Partition (Función)
Devuelve una cadena que representa el intervalo calculado que contiene un número.

Public Function Partition( _


ByVal Number As Long, _
ByVal Start As Long, _
ByVal Stop As Long, _
ByVal Interval As Long _
) As String

Parámetros
Number
Obligatorio. Long. Número entero que se desea ubicar en uno de los intervalos calculados.
Start
Obligatorio. Long. Número entero que indica el inicio del conjunto de intervalos calculados. Start no puede ser menor que 0.
Stop
Obligatorio. Long. Número entero que indica el final del conjunto de intervalos calculados. Stop no puede ser menor o igual
que Start.
Interval
Obligatorio. Long. Número entero que indica el tamaño de cada intervalo calculado entre Start y Stop. Interval no puede ser
menor que 1.
Excepciones
Tipo de excepción Número de error Condición
ArgumentException 5 Start < 0, Stop <= Start o Interval < 1.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, debe considerarse la posibilidad de sustituir dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
La función Partition calcula un conjunto de intervalos numéricos, cada uno de los cuales contiene el número de valores
especificado por Interval. El primer intervalo comienza en Start y el último intervalo finaliza en Stop. A continuación, la función
Partition identifica el intervalo que contiene Number y devuelve una cadena que describe ese intervalo. El intervalo se
representa en la cadena como "valorInferior:valorSuperior", donde el extremo inicial del intervalo (valorInferior) está separado
del extremo final (valorSuperior) por dos puntos (:).
Si es necesario, la función Partition inserta espacios iniciales antes de valorInferior y valorSuperior para que ambos tengan el
mismo número de caracteres que la representación de cadena del valor (Stop + 1). Así se asegura de que si se utiliza el
resultado de la función Partition con diferentes valores de Number, el texto resultante se controlará correctamente en
cualquier operación de ordenación posterior.
En la tabla siguiente se muestran algunas cadenas de ejemplo para los intervalos calculados con tres conjuntos de Start, Stop e
Interval. En las columnas "Primer intervalo" y "Último intervalo" se muestran los intervalos más bajos y más altos posibles de
acuerdo con los valores de Start y Stop. En las columnas "Antes del primer intervalo" y "Después del último intervalo" se
muestran las cadenas devueltas para los valores de Number menores que Start y mayores que Stop, respectivamente.
Start Stop Interval Antes del primer intervalo Primer intervalo Último intervalo Después del último intervalo
0 99 5 " : -1" " 0: 4" " 95: 99" "100: "

20 199 10 " : 19" " 20: 29" "190:199" "200: "


100 1010 20 " : 99" " 100: 119" "1000:1010" "1011: "

En la tabla anterior, la tercera línea muestra el resultado cuando Start y Stop definen un conjunto de números que no se
pueden dividir exactamente por Interval. El último intervalo finaliza en Stop, con lo cual su longitud es de sólo 11 números,
aunque Interval sea 20.
Si Interval es 1, el intervalo es "Number:Number", independientemente de los argumentos Start y Stop. Por ejemplo, si
Number es 267, Stop es 1000 e Interval es 1, Partition devuelve " 267: 267".
La función Partition puede resultar útil cuando se crean consultas de base de datos. Puede crear una consulta SELECT que
muestre cuántos pedidos se producen en distintos intervalos de valores, por ejemplo con valores de facturas de 1 a 1000, de
1001 a 2000, etc.
Ejemplo
En el siguiente ejemplo se ha definido una serie de intervalos para las décadas comprendidas entre 1950 y 2049. El valor de
year se localiza en el intervalo adecuado y se devuelve un valor String que muestra el intervalo. Si el valor de year es, por
ejemplo, 1984, Partition devuelve "1980:1989".
VB
Dim year As Long = 1984
' Assume the value of year is provided by data or by user input.
Dim decade As String
decade = Partition(year, 1950, 2049, 10)
MsgBox("Year " & CStr(year) & " is in decade " & decade & ".")

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Interaction
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Otros recursos
Cómo (SQL Server)
Referencia del lenguaje Visual Basic

Pmt (Función)
Devuelve un valor de tipo Double que indica el importe de una anualidad basada en pagos fijos periódicos con un tipo de
interés fijo.

Function Pmt( _
ByVal Rate As Double, _
ByVal NPer As Double, _
ByVal PV As Double, _
Optional ByVal FV As Double = 0, _
Optional ByVal Due As DueDate = DueDate.EndOfPeriod _
) As Double

Parámetros
Rate
Requerido. Double especifica el tipo de interés por período. Por ejemplo, si obtiene un crédito para comprar un automóvil a
una tasa porcentual anual (TAE) del 10 por ciento, y realiza pagos mensuales, el tipo por período será 0,1/12 ó 0,0083.
NPer
Requerido. Double especifica el número total de períodos de pago (plazos) de la anualidad. Por ejemplo, si realiza pagos
mensuales correspondientes a un crédito para adquirir un automóvil a cuatro años, el crédito tendrá un total de 4 x 12 (ó 48)
períodos de pago.
PV
Requerido. Double indica el valor actual (valor total) de una serie de pagos que se realizarán en el futuro. Por ejemplo, en el
momento de obtener un crédito para comprar un automóvil, el importe del mismo es el valor actual para el prestamista de
los pagos mensuales que se realizarán.
FV
Opcional. Double especifica el valor futuro o el saldo en efectivo que se desea tener una vez realizado el pago final. Por
ejemplo, el valor futuro de un crédito es 0 $, puesto que ése es su valor después del pago final. Sin embargo, si desea
ahorrar 50.000 dólares durante 18 años para la educación de su hijo, el valor futuro será 50.000 dólares. Si se omite, se
supone que es 0.
Due
Opcional. Objeto de tipo DueDate (Enumeración) que indica cuándo vencen los pagos. Este argumento debe ser
DueDate.EndOfPeriod si los pagos vencen al final del período o DueDate.BegOfPeriod si los pagos vencen al principio del
mismo. Si se omite, se supone que es DueDate.EndOfPeriod.
Excepciones
Tipo de excepción Número de error Condición
ArgumentException 9B07D280-66C6-4EA5-A8ED-5DDB0036F877 NPer

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
Una anualidad es una serie de pagos fijos en efectivo realizados a lo largo de un período de tiempo. Puede ser un préstamo
(como la hipoteca de un inmueble, por ejemplo) o una inversión (como un plan de ahorro mensual).
Los argumentos Rate y NPer deben calcularse utilizando períodos de pago expresados en las mismas unidades. Por ejemplo, si
Rate se calcula en meses, NPer deberá calcularse del mismo modo.
Para todos los argumentos, el efectivo abonado (como depósitos de ahorro) se representa con números negativos; y el
recibido (como cheques de dividendos), con números positivos.
Ejemplo
En este ejemplo se utiliza la función Pmt para devolver el pago mensual de un préstamo en un período establecido. Se
proporcionan el tipo de interés porcentual por período (APR / 12), el número total de pagos (TotPmts), el valor actual o
principal del préstamo (PVal), el valor futuro del préstamo (FVal) y un número que indica si el pago vence al principio o al final
del período de pago (PayType).
VB
Sub TestPMT()
Dim PVal, APR, Payment, TotPmts As Double
Dim PayType As DueDate
Dim Response As MsgBoxResult

' Define money format.


Dim Fmt As String = "###,###,##0.00"
' Usually 0 for a loan.
Dim FVal As Double = 0
PVal = CDbl(InputBox("How much do you want to borrow?"))
APR = CDbl(InputBox("What is the annual percentage rate of your loan?"))
If APR > 1 Then APR = APR / 100 ' Ensure proper form.
TotPmts = CDbl(InputBox("How many monthly payments will you make?"))
Response = MsgBox("Do you make payments at the end of month?", MsgBoxStyle.YesNo)
If Response = MsgBoxResult.No Then
PayType = DueDate.BegOfPeriod
Else
PayType = DueDate.EndOfPeriod
End If
Payment = Pmt(APR / 12, TotPmts, -PVal, FVal, PayType)

MsgBox("Your payment will be " & Format(Payment, Fmt) & " per month.")
End Sub

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Financial
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Resumen financiero
ArgumentException
Referencia del lenguaje Visual Basic

PPmt (Función)
Devuelve un valor de tipo Double que indica el pago de capital principal para un período determinado de una anualidad con
pagos fijos periódicos y un tipo de interés fijo.

Function PPmt( _
ByVal Rate As Double, _
ByVal Per As Double, _
ByVal NPer As Double, _
ByVal PV As Double, _
Optional ByVal FV As Double = 0, _
Optional ByVal Due As DueDate = DueDate.EndOfPeriod _
) As Double

Parámetros
Rate
Requerido. Double especifica el tipo de interés por período. Por ejemplo, si obtiene un crédito para comprar un automóvil a
una tasa porcentual anual (TAE) del 10 por ciento, y realiza pagos mensuales, el tipo por período será 0,1/12 ó 0,0083.
Per
Requerido. Double especifica el período de pago en el intervalo de 1 a NPer.
NPer
Requerido. Double especifica el número total de períodos de pago (plazos) de la anualidad. Por ejemplo, si realiza pagos
mensuales correspondientes a un crédito para adquirir un automóvil a cuatro años, el crédito tendrá un total de 4 x 12 (ó 48)
períodos de pago.
PV
Requerido. Double especifica el valor actual de una serie de pagos o ingresos futuros. Por ejemplo, en el momento de
obtener un crédito para comprar un automóvil, el importe del mismo es el valor actual para el prestamista de los pagos
mensuales que se realizarán.
FV
Opcional. Double especifica el valor futuro o el saldo en efectivo que se desea tener una vez realizado el pago final. Por
ejemplo, el valor futuro de un crédito es 0 $, puesto que ése es su valor después del pago final. Sin embargo, si desea
ahorrar 50.000 dólares durante 18 años para la educación de su hijo, el valor futuro será 50.000 dólares. Si se omite, se
supone que es 0.
Due
Opcional. Objeto de tipo DueDate (Enumeración) que indica cuándo vencen los pagos. Este argumento debe ser
DueDate.EndOfPeriod si los pagos vencen al final del período o DueDate.BegOfPeriod si los pagos vencen al principio del
mismo. Si se omite, se supone que es DueDate.EndOfPeriod.
Excepciones
Tipo de excepción Número de error Condición
ArgumentException 9B07D280-66C6-4EA5-A8ED-5DDB0036F877 Per <= 0 o Per > NPer.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
Una anualidad es una serie de pagos fijos en efectivo realizados a lo largo de un período de tiempo. Puede ser un préstamo
(como la hipoteca de un inmueble, por ejemplo) o una inversión (como un plan de ahorro mensual).
Los argumentos Rate y NPer deben calcularse utilizando períodos de pago expresados en las mismas unidades. Por ejemplo, si
Rate se calcula en meses, NPer deberá calcularse del mismo modo.
Para todos los argumentos, el efectivo abonado (como depósitos de ahorro) se representa con números negativos; y el
recibido (como cheques de dividendos), con números positivos.
Ejemplo
En este ejemplo se utiliza la función PPmt para calcular qué cantidad de un pago para un período especificado es el capital
principal cuando todos los pagos tienen el mismo valor. Se proporcionan el tipo de interés porcentual por período (APR / 12),
el período de pago para el que se desea la parte de capital principal (Period), el número total de pagos (TotPmts), el valor
actual o principal del préstamo (PVal), el valor futuro del préstamo (FVal) y un número que indica si el pago vence al principio
o al final del período de pago (PayType).
VB
Sub TestPPMT()
Dim PVal, APR, TotPmts, Payment, Period, P, I As Double
Dim PayType As DueDate
Dim Msg As String
Dim Response As MsgBoxResult

' Define money format.


Dim Fmt As String = "###,###,##0.00"
' Usually 0 for a loan.
Dim Fval As Double = 0
PVal = CDbl(InputBox("How much do you want to borrow?"))
APR = CDbl(InputBox("What is the annual percentage rate of your loan?"))
' Ensure proper form.
If APR > 1 Then APR = APR / 100
TotPmts = CDbl(InputBox("How many monthly payments do you have to make?"))
Response = MsgBox("Do you make payments at the end of month?", MsgBoxStyle.YesNo)
If Response = MsgBoxResult.No Then
PayType = DueDate.BegOfPeriod
Else
PayType = DueDate.EndOfPeriod
End If
Payment = Math.Abs(-Pmt(APR / 12, TotPmts, PVal, FVal, PayType))
Msg = "Your monthly payment is " & Format(Payment, Fmt) & ". "
Msg = Msg & "Would you like a breakdown of your principal and "
Msg = Msg & "interest per period?"
' See if chart is desired.
Response = MsgBox(Msg, MsgBoxStyle.YesNo)
If Response <> MsgBoxResult.No Then
If TotPmts > 12 Then MsgBox("Only first year will be shown.")
Msg = "Month Payment Principal Interest" & vbNewLine
For Period = 1 To TotPmts
' Show only first 12.
If Period > 12 Then Exit For
P = PPmt(APR / 12, Period, TotPmts, -PVal, FVal, PayType)
' Round principal.
P = (Int((P + 0.005) * 100) / 100)
I = Payment - P
' Round interest.
I = (Int((I + 0.005) * 100) / 100)
Msg = Msg & Period & vbTab & Format(Payment, Fmt)
Msg = Msg & vbTab & Format(P, Fmt) & vbTab & Format(I, Fmt) & vbNewLine
Next Period
' Display amortization table.
MsgBox(Msg)
End If
End Sub

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Financial
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Resumen financiero
ArgumentException
Referencia del lenguaje Visual Basic

Print, PrintLine (Funciones)


Escribe datos con formato de presentación en un archivo secuencial.

Public Sub Print( _


ByVal FileNumber As Integer, _
ByVal ParamArray Output() As Object _
)
' -or-
Public Sub PrintLine( _
ByVal FileNumber As Integer, _
ByVal ParamArray Output() As Object _
)

Parámetros
FileNumber
Obligatorio. Cualquier número de archivo válido.
Output
Opcional. Cero o más expresiones delimitadas por comas para escribir en un archivo.
Los valores del argumento Output son:
Valo Descripción
r
SPC( Se utiliza para insertar caracteres de espacio en la salida, donde n indica el número de caracteres de espacio que se van a
n ) insertar.

TAB( Se utiliza para situar el punto de inserción en un número de columna absoluto, donde n es el número de columna. Utilice
n ) TAB sin ningún argumento para situar el punto de inserción al comienzo de la siguiente zona de impresión.

expr Expresiones numéricas o de cadena que se deban imprimir.


essio
n
Excepciones
Tipo de excepción Número de error Condición
IOException 54 El modo de archivo no es válido.

IOException 52 FileNumber no existe.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, debe considerarse la posibilidad de sustituir dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
Las funciones Print y PrintLine se suministran a efectos de compatibilidad con versiones anteriores y pueden afectar al
rendimiento. En el caso de aplicaciones no heredadas, el objeto My.Computer.FileSystem proporciona un rendimiento
superior. Para obtener más información, vea Acceso a archivos con Visual Basic.
Print no incluye un avance de línea al final de una línea; en cambio PrintLine sí lo incluye.
Los datos escritos con Print normalmente se leen desde un archivo con LineInput o Input.
Si omite Output en PrintLine, en el archivo se imprime una línea en blanco. En Print, sin embargo, no se producirá resultado
alguno. En los límites de tabulación se alinearán varias expresiones separadas mediante comas, pero, si se mezclan comas y
TAB, los resultados pueden ser incoherentes.
Con datos de tipo Boolean, se imprime True o False. Las palabras clave True y False no se traducen, independientemente de
la configuración regional.
Los datos de fecha se escribirán en el archivo según el formato estándar de fecha corta reconocido por el sistema. Cuando
alguno de los componentes de fecha u hora falte o sea igual a cero, tan sólo se escribirá en el archivo la parte proporcionada.
Si los datos de Output están vacíos, no se escribirá nada en el archivo. Sin embargo, si los datos de lista de Output son de tipo
DBNull, en el archivo se escribe Null.
Con datos de tipo Error, el resultado aparece como Error errorcode. La palabra clave Error no se traduce,
independientemente de la configuración regional.
Todos los datos que se escriban en el archivo utilizando Print serán compatibles internacionalmente, es decir, tendrán el
formato correcto con el separador decimal adecuado. Si el usuario desea mostrar los datos de salida en varias configuraciones
regionales, debe utilizar Write.
Para escribir en un archivo con las funciones Print o PrintLine, es necesario tener acceso de tipo Write desde la enumeración
FileIOPermissionAccess. Para obtener más información, vea FileIOPermissionAccess (Enumeración).
Ejemplo
En este ejemplo se utilizan las funciones Print y PrintLine para escribir datos en un archivo.
VB
FileOpen(1, "c:\trash.txt", OpenMode.Output) ' Open file for output.
Print(1, "This is a test.") ' Print text to file.
PrintLine(1) ' Print blank line to file.
PrintLine(1, "Zone 1", TAB(), "Zone 2") ' Print in two print zones.
PrintLine(1, "Hello", "World") ' Separate strings with a tab.
PrintLine(1, SPC(5), "5 leading spaces ") ' Print five leading spaces.
PrintLine(1, TAB(10), "Hello") ' Print word at column 10.
' Assign Boolean, Date, and Error values.
Dim aBool As Boolean
Dim aDate As DateTime
aBool = False
aDate = DateTime.Parse("February 12, 1969")

' Dates and booleans are translated using locale settings of your system.
PrintLine(1, aBool, " is a Boolean value")
PrintLine(1, aDate, " is a date")
FileClose(1) ' Close file.

Notas para desarrolladores de dispositivos inteligentes


Esta función no es compatible.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: FileSystem
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Tareas
Cómo: Escribir texto en archivos en Visual Basic
Cómo: Escribir texto en archivos con un objeto StreamWriter en Visual Basic
Referencia
FileOpen (Función)
SPC (Función)
TAB (Función)
Write, WriteLine (Funciones)
Otros recursos
Acceso a archivos con Visual Basic
Referencia del lenguaje Visual Basic

PV (Función)
Devuelve un valor de tipo Double que indica el valor actual de una anualidad basada en pagos fijos periódicos que se van a
realizar en el futuro, con un tipo de interés fijo.

Function PV( _
ByVal Rate As Double, _
ByVal NPer As Double, _
ByVal Pmt As Double, _
Optional ByVal FV As Double = 0, _
Optional ByVal Due As DueDate = DueDate.EndOfPeriod _
) As Double

Parámetros
Rate
Requerido. Double especifica el tipo de interés por período. Por ejemplo, si obtiene un crédito para comprar un automóvil a
una tasa porcentual anual (TAE) del 10 por ciento, y realiza pagos mensuales, el tipo por período será 0,1/12 ó 0,0083.
NPer
Requerido. Double especifica el número total de períodos de pago (plazos) de la anualidad. Por ejemplo, si realiza pagos
mensuales correspondientes a un crédito para adquirir un automóvil a cuatro años, el crédito tendrá 4 x 12 (ó 48) períodos
de pago.
Pmt
Requerido. Double indica el pago que se va a realizar cada período. Normalmente, los pagos contienen un capital principal y
un interés que no varía a lo largo de la duración de la anualidad.
FV
Opcional. Double indica el valor futuro o saldo en efectivo que se desea tener una vez realizado el pago final. Por ejemplo, el
valor futuro de un crédito es 0 $, puesto que ése es su valor después del pago final. Sin embargo, si desea ahorrar 50.000
dólares durante 18 años para la educación de su hijo, el valor futuro será 50.000 dólares. Si se omite, se supone que es 0.
Due
Opcional. Objeto de tipo DueDate (Enumeración) que indica cuándo vencen los pagos. Este argumento debe ser
DueDate.EndOfPeriod si los pagos vencen al final del período o DueDate.BegOfPeriod si los pagos vencen al principio del
mismo. Si se omite, se supone que es DueDate.EndOfPeriod.
Comentarios
Una anualidad es una serie de pagos fijos en efectivo realizados a lo largo de un período de tiempo. Puede ser un préstamo
(como la hipoteca de un inmueble, por ejemplo) o una inversión (como un plan de ahorro mensual).
Los argumentos Rate y NPer deben calcularse utilizando períodos de pago expresados en las mismas unidades. Por ejemplo, si
Rate se calcula en meses, NPer deberá calcularse del mismo modo.
Para todos los argumentos, el efectivo abonado (como depósitos de ahorro) se representa con números negativos; y el
recibido (como cheques de dividendos), con números positivos.
Ejemplo
En este ejemplo, la función PV devuelve el valor actual de una anualidad de 1,000.000 de dólares que proporcionará 50.000
dólares al año durante los próximos 20 años. Se proporcionan la tasa porcentual anual prevista (APR), el número total de pagos
(TotPmts), el importe de cada pago (YrIncome), el valor futuro total de la inversión (FVal) y un número que indica si cada pago
se realiza al principio o al final del período de pago (PayType). Tenga en cuenta que YrIncome es un número negativo, porque
representa el efectivo de la anualidad que se abona cada año.
VB
Sub TestPV()
' Define money format.
Dim Fmt As String = "###,##0.00"
' Annual percentage rate.
Dim APR As Double = 0.0825
' Total number of payments.
Dim TotPmts As Double = 20
' Yearly income.
Dim YrIncome As Double = 50000
' Future value.
Dim FVal As Double = 1000000
' Payment at beginning of month.
Dim PayType As DueDate = DueDate.BegOfPeriod
Dim PVal As Double = PV(APR, TotPmts, -YrIncome, FVal, PayType)
MsgBox("The present value is " & Format(PVal, Fmt) & ".")
End Sub

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Financial
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Resumen financiero
Referencia del lenguaje Visual Basic

QBColor (Función)
Devuelve un valor Integer que representa el código de color RGB que corresponde al número de color especificado.

QBColor(Color)

Parámetros
Color
Requerido. Un número entero entre 0 y 15.
Valores
El argumento Color puede tener estos valores.
Número Color Número Color
Negro Gris

Azul Azul claro

Verde Verde claro

Cián Cián claro

Rojo Rojo claro

Magenta Magenta claro

Amarillo Amarillo claro

Blanco Blanco brillante


Excepciones
Tipo de excepción Número de error Condición
ArgumentException 9B07D280-66C6-4EA5-A8ED-5DDB0036F877 Color está fuera del intervalo del 0 al 15, ambos inclusive.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
Comenzando con el byte menos significativo, el valor devuelto especifica los valores de rojo, verde y azul que se utilizan para
establecer el color apropiado en el sistema RGB que utiliza el lenguaje Visual Basic.
Ejemplo
Este ejemplo utiliza la función QBColor para cambiar al color indicado mediante colorInteger. QBColor acepta valores
enteros entre 0 y 15.
VB
Dim colorInteger As Integer
' Use 4 for red.
colorInteger = QBColor(4)

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Information
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
RGB (Función, Visual Basic)
ArgumentException Class
Referencia del lenguaje Visual Basic

Randomize (Función, Visual Basic)


Inicializa el generador de números aleatorios.

Public Shared Sub Randomize ([ Number ])

Parámetros
Number
Opcional. Object o cualquier expresión numérica válida.
Comentarios
La instrucción Randomize utiliza Number para inicializar el generador de números aleatorios de la función Rnd asignándole
un nuevo valor de inicialización. Si se omite Number, el valor devuelto por el temporizador del sistema se utilizará como nuevo
valor de inicialización.
Si no se emplea Randomize, la función Rnd (sin argumentos) utilizará el mismo número como valor de inicialización la
primera vez que se le llame y más adelante utilizará como valor de inicialización el último número generado.
Nota
Para repetir secuencias de números aleatorios, llame a la función Rnd con un argumento negativo justo antes de utilizar Ran
domize con un argumento numérico. Si utiliza Randomize con el mismo valor que Number, no se repetirá la secuencia ant
erior.

Nota de seguridad
Debido a que la instrucción Random y la función Rnd comienzan con un valor de inicialización y generan números que que
dan dentro de un intervalo finito, otra persona que conozca el algoritmo utilizado para generar los resultados puede predecir
los. Por tanto, la instrucción Random y la función Rnd no se deben utilizar para generar números aleatorios utilizados en cri
ptografía. Para obtener más información, vea RandomNumberGenerator.

Ejemplo
En este ejemplo se utiliza la instrucción Randomize para inicializar el generador de números aleatorios. Al haberse omitido el
argumento de número, Randomize utiliza el valor devuelto por la función Timer como nuevo valor de inicialización.
VB
' Initialize the random-number generator.
Randomize()
' Generate random value between 1 and 6.
Dim value As Integer = CInt(Int((6 * Rnd()) + 1))

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: VBMath
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Resumen de funciones matemáticas
Rnd (Función, Visual Basic)
Referencia del lenguaje Visual Basic

Rate (Función)
Devuelve un valor de tipo Double que indica el tipo de interés por período de una anualidad.

Function Rate( _
ByVal NPer As Double, _
ByVal Pmt As Double, _
ByVal PV As Double, _
Optional ByVal FV As Double = 0, _
Optional ByVal Due As DueDate = DueDate.EndOfPeriod, _
Optional ByVal Guess As Double = 0.1 _
) As Double

Parámetros
NPer
Requerido. Double especifica el número total de períodos de pago (plazos) de la anualidad. Por ejemplo, si realiza pagos
mensuales correspondientes a un crédito para adquirir un automóvil a cuatro años, el crédito tendrá un total de 4 * 12 (ó 48)
períodos de pago.
Pmt
Requerido. Double indica el pago que se va a realizar cada período. Normalmente, los pagos contienen un capital principal y
un interés que no varía a lo largo de la duración de la anualidad.
PV
Requerido. Double indica el valor actual, o valor a día de hoy, de una serie de pagos o cobros futuros. Por ejemplo, en el
momento de obtener un crédito para comprar un automóvil, el importe del mismo es el valor actual para el prestamista de
los pagos mensuales que se realizarán.
FV
Opcional. Double indica el valor futuro o saldo en efectivo que se desea tener una vez realizado el pago final. Por ejemplo, el
valor futuro de un crédito es 0 $, puesto que ése es su valor después del pago final. Sin embargo, si desea ahorrar 50.000
dólares durante 18 años para la educación de su hijo, el valor futuro será 50.000 dólares. Si se omite, se supone que es 0.
Due
Opcional. Objeto de tipo DueDate (Enumeración) que indica cuándo vencen los pagos. Este argumento debe ser
DueDate.EndOfPeriod si los pagos vencen al final del período o DueDate.BegOfPeriod si los pagos vencen al principio del
mismo. Si se omite, se supone que es DueDate.EndOfPeriod.
Guess
Opcional. Rate devuelve Double, que especifica el valor calculado. Si se omite, Guess será 0,1 (10 por ciento).
Excepciones
Tipo de excepción Número de error Condición
ArgumentException 9B07D280-66C6-4EA5-A8ED-5DDB0036F877 NPer

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
Una anualidad es una serie de pagos fijos en efectivo realizados a lo largo de un período de tiempo. Puede ser un préstamo
(como la hipoteca de un inmueble, por ejemplo) o una inversión (como un plan de ahorro mensual).
Para todos los argumentos, el efectivo abonado (como depósitos de ahorro) se representa con números negativos; y el
recibido (como cheques de dividendos), con números positivos.
Rate se calcula por iteración. Comenzando con el valor de Guess, Rate, realiza un cálculo cíclico hasta que el resultado tiene
una precisión del 0,00001 por ciento. Si Rate no puede encontrar un resultado después de 20 intentos, se produce un error. Si
se comienza por el 10 por ciento y Rate produce un error, pruebe con un valor distinto para Guess.
Ejemplo
En este ejemplo, se utiliza la función Rate para calcular el tipo de interés de un préstamo, dados el número total de pagos
(TotPmts), la cantidad del pago del préstamo (Payment), el valor actual o principal del préstamo (PVal), el valor futuro del
préstamo (FVal), un número que indica si el pago vence al principio o al final del período de pago (PayType) y una
aproximación del tipo de interés previsto (Guess).
VB
Sub TestRate()
Dim PVal, Payment, TotPmts, APR As Double
Dim PayType As DueDate

' Define percentage format.


Dim Fmt As String = "##0.00"
Dim Response As MsgBoxResult
' Usually 0 for a loan.
Dim FVal As Double = 0
' Guess of 10 percent.
Dim Guess As Double = 0.1
PVal = CDbl(InputBox("How much did you borrow?"))
Payment = CDbl(InputBox("What's your monthly payment?"))
TotPmts = CDbl(InputBox("How many monthly payments do you have to make?"))
Response = MsgBox("Do you make payments at the end of the month?", MsgBoxStyle.YesNo)
If Response = MsgBoxResult.No Then
PayType = DueDate.BegOfPeriod
Else
PayType = DueDate.EndOfPeriod
End If
APR = (Rate(TotPmts, -Payment, PVal, FVal, PayType, Guess) * 12) * 100

MsgBox("Your interest rate is " & Format(CInt(APR), Fmt) & " percent.")
End Sub

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Financial
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Resumen financiero
ArgumentException
Referencia del lenguaje Visual Basic

Rename (Función)
Cambia el nombre de un archivo de disco o directorio.
La característica My proporciona mayor productividad y rendimiento en las operaciones de E/S de archivo que si se utiliza
Rename. Para obtener más información, vea My.Computer.FileSystem (Objeto).

Public Sub Rename( _


ByVal OldPath As String, _
ByVal NewPath As String _
)

Parámetros
OldPath
Obligatorio. Expresión String que especifica el nombre del archivo existente y su ubicación. OldPath puede incluir el
directorio y la unidad del archivo.
NewPath
Obligatorio. Expresión String que especifica el nuevo nombre del archivo y su ubicación. NewPath puede incluir el directorio
y la unidad de la ubicación de destino. El nombre de archivo especificado por NewPath no puede existir.
Excepciones
Tipo de excepción Número de error Condición
ArgumentException 5 La ruta de acceso no es válida.

FileNotFoundException 53 El archivo OldPath no existe.

IOException 58 El archivo NewPathya existe.

IOException 75 El acceso no es válido.

IOException 74 No se puede cambiar el nombre en un dispositivo diferente.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
La función Rename cambia el nombre de un archivo y lo traslada a un directorio diferente, si es necesario. La función Rename
puede mover un archivo entre unidades pero sólo puede cambiar el nombre de un directorio existente cuando NewPath y
OldPath se encuentran en la misma unidad. Rename no puede crear un nuevo archivo o directorio.
Si se utiliza la función Rename en un archivo abierto, se genera un error. Debe cerrar un archivo abierto antes de cambiarle el
nombre. Los argumentos Rename no pueden incluir comodines de varios caracteres (*) y de un único carácter (?).
Nota de seguridad
Al utilizar Rename para copiar un archivo desde una ubicación no protegida a una ubicación protegida, el archivo conserva l
os derechos menos restrictivos. Compruebe que no está provocando un riesgo para la seguridad.

Ejemplo
En este ejemplo se utiliza la función Rename para cambiar el nombre de un archivo. Para este ejemplo, se supone que ya
existen los directorios que se especifican.
VB
Dim OldName, NewName As String
OldName = "OLDFILE"
' Define file names.
NewName = "NEWFILE"
' Rename file.
Rename(OldName, NewName)
OldName = "C:\OLDDIR\OLDFILE"
NewName = "C:\NEWDIR\NEWFILE"
' Move and rename file.
Rename(OldName, NewName)

Notas para desarrolladores de dispositivos inteligentes


Esta función no está admitida.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: FileSystem
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Tareas
Cómo: Cambiar el nombre de un archivo en Visual Basic
Cómo: Cambiar el nombre de un directorio en Visual Basic
Referencia
Kill (Función)
ArgumentException Class
FileNotFoundException Class
IOException Class
Referencia del lenguaje Visual Basic

Replace (Función, Visual Basic)


Devuelve una cadena en la que la subcadena especificada se reemplaza determinado número de veces por otra subcadena.

Public Function Replace(


ByVal Expression As String,
ByVal Find As String,
ByVal Replacement As String,
Optional ByVal Start As Integer = 1,
Optional ByVal Count As Integer = -1,
Optional ByVal Compare As CompareMethod = CompareMethod.Binary
) As String

Parámetros
Expression
Requerido. Expresión de cadena que contiene la subcadena que se va a reemplazar.
Find
Requerido. Subcadena que se busca.
Replacement
Requerido. Subcadena de reemplazo.
Start
Opcional. Posición, dentro de Expression, donde debe empezar la búsqueda de la subcadena. Si se omite, se supone que es 1.
Count
Opcional. Número de sustituciones de subcadenas que se deben realizar. Si se omite, el valor predeterminado será –1, con lo
que se harán todas las sustituciones posibles.
Compare
Opcional. Valor numérico que indica el tipo de comparación que se va a utilizar en la evaluación de subcadenas. Vea la
sección Configuración para conocer los valores utilizados.
Valores
El argumento Compare puede tener los siguientes valores:
Constante Descripción
Binary Realiza una comparación binaria

Text Realiza una comparación textual


Valor devuelto
Replace devuelve los siguientes valores.
Si Replace devolverá:
Findes de longitud cero oNothing Una copia de Expression

Replace tiene longitud cero Una copia de Expression sin apariciones d


e Find

Expression es de longitud cero o Nothing, o bien Start es mayor que la longitud de Nothing
Expression

Count es igual a 0, Una copia de Expression


Excepciones
Tipo de excepción Número de error Condición
ArgumentException 9B07D280-66C6-4EA5-A8ED-5DDB0036F877 Count < -1 ó Start <= 0.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
El valor que devuelve la función Replace es una cadena que comienza en la posición especificada por Start y concluye al final
de la cadena Expression, con las sustituciones efectuadas según especifican los valores de Find y Replace.
Ejemplo
En este ejemplo se muestra el uso de la función Replace.

Dim TestString As String = "Shopping List"


' Returns "Shipping List".
Dim aString As String = Replace(TestString, "o", "i")

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Strings
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Resumen de manipulación de cadenas
Filter (Función, Visual Basic)
ArgumentException
Referencia del lenguaje Visual Basic

Reset (Función)
Cierra todos los archivos de disco abiertos con la función FileOpen.
La característica My proporciona mayor productividad y rendimiento en las operaciones de E/S del archivo que si se utiliza
Reset. Para obtener más información, vea My.Computer.FileSystem (Objeto).

Public Sub Reset()

Comentarios
La función Reset cierra todos los archivos activos abiertos con la función FileOpen y proporciona el mismo resultado que
FileClose() sin parámetros.
Ejemplo
En este ejemplo se utiliza la función Reset para cerrar todos los archivos abiertos y escribir en el disco el contenido de todos
los búferes de archivo. Observe el uso de la variable ObjectFileNumber como cadena y número.
VB
' Open 5 files named TEST1, TEST2, etc.
Dim fileNumber As Integer
' Open 5 files.
For fileNumber = 1 To 5
FileOpen(fileNumber, "TEST" & fileNumber, OpenMode.Output)
PrintLine(fileNumber, "Hello World")
Next fileNumber
' Close files and write contents to disk.
Reset()

Notas para desarrolladores de dispositivos inteligentes


Esta función no es compatible.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: FileSystem
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
FileClose (Función)
End (Instrucción)
FileOpen (Función)
Referencia del lenguaje Visual Basic

RGB (Función, Visual Basic)


Devuelve un valor Integer que representa un valor de color RGB de un conjunto de componentes de color rojo, verde y azul.

RGB( _
Red As Integer, _
Green As Integer, _
Blue As Integer _
)

Parámetros
Red
Requerido. Integer en el intervalo comprendido entre 0 y 255, ambos inclusive, que representa la intensidad del
componente rojo del color.
Green
Requerido. Integer en el intervalo comprendido entre 0 y 255, ambos inclusive, que representa la intensidad del
componente verde del color.
Blue
Requerido. Integer en el intervalo comprendido entre 0 y 255, ambos inclusive, que representa la intensidad del
componente azul del color.
Excepciones
Tipo de excepció Número de error Condición
n
ArgumentException 9B07D280-66C6-4EA5-A8ED-5DDB0036F877 Green, Blue o Red está fuera del intervalo del 0 al 255 (amb
os inclusive).

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
Los métodos y propiedades de aplicación que aceptan una especificación de color esperan que dicha especificación sea un
número que representa un valor de color RGB. Un valor de color RGB especifica la intensidad relativa de rojo, verde y azul para
hacer que se muestre un color específico.
Si el valor de cualquier argumento de RGB es mayor que 255, se utiliza 255.
En la siguiente tabla se enumeran algunos colores estándar y los valores de rojo, verde y azul que incluyen.
Color Valor de rojo Valor de verde Valor de azul
Black

Blue

Green

Cyan

Red

Magenta
Yellow

White
Ejemplo
En este ejemplo se muestra cómo se utiliza la función RGB para devolver un número entero que representa un valor de color
RGB.
VB
Dim red, rgbValue As Integer
Dim i As Integer = 75
' Return the value for red.
red = RGB(255, 0, 0)
' Same as RGB(75, 139, 203).
rgbValue = RGB(i, 64 + i, 128 + i)

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Information
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
QBColor (Función)
ArgumentException Class
Referencia del lenguaje Visual Basic

Right (Función, Visual Basic)


Devuelve una cadena que contiene un número especificado de caracteres desde el lado derecho de una cadena.

Public Shared Function Right( _


ByVal str As String, _
ByVal Length As Integer _
) As String

Parámetros
str
Requerido. Expresión String de la que se devuelven los caracteres que están más a la derecha.
Length
Requerido. Integer. Expresión numérica que indica cuántos caracteres se van a devolver. Si es 0, se devuelve una cadena de
longitud cero (""). Si es mayor o igual que el número de caracteres en str, se devuelve toda la cadena.
Excepciones
Tipo de excepción Número de error Condición
ArgumentException 9B07D280-66C6-4EA5-A8ED-5DDB0036F877 Length

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
Para determinar el número de caracteres de str, utilice la función Len. Si se utiliza en un formulario Windows Forms o en
cualquier otra clase que tiene una propiedad Right, debe calificar totalmente la función con Microsoft.VisualBasic.Right.
Nota
La función RightB de versiones anteriores de Visual Basic devuelve una cadena en bytes, en lugar de caracteres. Se utiliza pri
ncipalmente para convertir cadenas en aplicaciones de juegos de caracteres de doble byte (DBCS). Todas las cadenas actuale
s de Visual Basic están en Unicode y ya no se admite RightB.

Ejemplo
En este ejemplo se muestra el uso de la función Right para devolver una subcadena de una String dada. En una clase que
tenga una propiedad Right, podría ser necesario calificar la función Right plenamente.
VB
Dim TestString As String = "Hello World!"
' Returns "World!".
Dim subString As String = Microsoft.VisualBasic.Right(TestString, 6)

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Strings
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Resumen de manipulación de cadenas
Left (Función, Visual Basic)
Len (Función, Visual Basic)
Mid (Función, Visual Basic)
ArgumentException
Conceptos
Resumen de cambios de los elementos de programación ofrecidos
Referencia del lenguaje Visual Basic

RmDir (Función)
Quita un directorio existente.
La característica My proporciona mayor productividad y rendimiento en las operaciones de E/S del archivo que si se utiliza
RmDir. Para obtener más información, vea My.Computer.FileSystem.DeleteDirectory (Método).

Public Sub RmDir(ByVal Path As String)

Parámetros
Path
Requerido. Expresión String que identifica el directorio o carpeta que se va a quitar. Path puede incluir la unidad. Si no se
especifica ninguna unidad, RmDir quita el directorio de la unidad actual.
Excepciones
Tipo de excepción Número de error Condición
ArgumentException D0E96AEA-7621-48F6-A78B-5D37D18AAA4E Path no se ha especificado o está vacío.

IOException 6CE3A161-7316-46BD-A785-0D50E5414020 El directorio de destino contiene archivos.

FileNotFoundException 644C45D5-4FFA-47E2-96DB-6C4D2D5AE815 El directorio no existe.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
Si intenta utilizar RmDir en un directorio que contiene archivos, se producirá un error. Utilice la función Kill para eliminar
todos los archivos antes de intentar quitar un directorio.
Ejemplo
En este ejemplo se utiliza la función RmDir para quitar un directorio existente.
VB
' Assume that MYDIR is an empty directory.
' Remove MYDIR.
RmDir("MYDIR")

Notas para desarrolladores de dispositivos inteligentes


Esta función no es compatible.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: FileSystem
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Tareas
Cómo: Eliminar un directorio en Visual Basic
Referencia
ChDir (Función)
CurDir (Función)
Kill (Función)
MkDir (Función)
ArgumentException Class
IOException Class
FileNotFoundException Class
Referencia del lenguaje Visual Basic

Rnd (Función, Visual Basic)


Devuelve un número aleatorio de tipo Single.

Public Shared Function Rnd[(Number)] As Single

Parámetros
Number
Opcional. Cualquier valor Single o expresión Single válida.
Valor devuelto
Si Number es Rnd genera
Menor que cero Siempre el mismo número, utilizando Number como valor de inicialización.

Mayor que cero El siguiente número aleatorio en la secuencia.

Igual a cero El número generado por última vez.

Omitido El siguiente número aleatorio en la secuencia.


Comentarios
La función Rnd devuelve un valor menor que 1, pero mayor o igual a cero.
El valor de Number determina la forma en que Rnd genera un número aleatorio.
Para cualquier valor de inicialización dado, se genera la misma secuencia de números ya que cada llamada sucesiva que se
hace a la función Rnd utiliza el número anteriormente generado como inicialización para el siguiente número de la secuencia.
Antes de llamar a la función Rnd, utilice la instrucción Randomize sin argumento para inicializar el generador de números
aleatorios con un valor de inicialización basado en el temporizador del sistema.
Para producir enteros aleatorios en un intervalo dado, utilice la siguiente fórmula.
VB
randomvalue = CInt(Int((upperbound - lowerbound + 1) * Rnd() + lowerbound))

Aquí, upperbound es el número mayor en el intervalo y lowerbound es el número menor.


Nota
Para repetir secuencias de números aleatorios, llame a la función Rnd con un argumento negativo justo antes de utilizar Ran
domize con un argumento numérico. Si utiliza Randomize con el mismo valor que Number, no se repetirá la secuencia ant
erior.

Nota de seguridad
Debido a que la instrucción Random y la función Rnd comienzan con un valor de inicialización y generan números que que
dan dentro de un intervalo finito, otra persona que conozca el algoritmo utilizado para generar los resultados puede predecir
los. Por tanto, la instrucción Random y la función Rnd no se deben utilizar para generar números aleatorios utilizados en cri
ptografía.

Ejemplo
En el siguiente ejemplo se utiliza la función Rnd para generar un valor entero aleatorio en el intervalo entre 1 y 6.
VB
' Initialize the random-number generator.
Randomize()
' Generate random value between 1 and 6.
Dim value As Integer = CInt(Int((6 * Rnd()) + 1))

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: VBMath
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Randomize (Función, Visual Basic)
Resumen de funciones matemáticas
Randomize (Función, Visual Basic)
Referencia del lenguaje Visual Basic

RSet (Función)
Devuelve una cadena alineada a la derecha que contiene la cadena especificada y con la longitud especificada.

Public Shared Function RSet( _


ByVal Source As String, _
ByVal Length As Integer _
) As String

Parámetros
Source
Requerido. Expresión String. Cadena que se va a ajustar.
Length
Requerido. Expresión Integer. Longitud de la cadena devuelta.
Comentarios
Si Source tiene mayor longitud que el valor de Length, RSet devuelve sólo los caracteres situados más a la izquierda hasta
alcanzar la longitud especificada por Length. Si Source tiene menor longitud que Length, RSet agrega espacios al extremo
izquierdo de la cadena hasta alcanzar la longitud adecuada.
Ejemplo
En este ejemplo se muestra el uso de la función RSet.
VB
Dim TestString As String = "Right"
' Returns " Right"
Dim rString As String = RSet(TestString, 11)

Requisitos
Espacio de nombres:Microsoft.VisualBasic
Módulo: Strings
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Resumen de manipulación de cadenas
Resumen de tipos de datos (Visual Basic)
LSet (Función)
Conceptos
Uso eficiente de tipos de datos
Referencia del lenguaje Visual Basic

Trim, LTrim y RTrim (Funciones)


Devuelve una cadena que contiene una copia de una cadena dada sin espacios iniciales (LTrim), sin espacios finales (RTrim) o
sin espacios iniciales ni finales (Trim).

Public Shared Function LTrim(ByVal str As String) As String


Public Shared Function RTrim(ByVal str As String) As String
Public Shared Function Trim(ByVal str As String) As String

Parámetros
str
Requerido. Cualquier expresión String válida.
Comentarios
Las funciones LTrim, RTrim y Trim quitan los espacios de los finales de las cadenas. Para quitar otras formas de espacio en
blanco, como caracteres de tabulación, use el método System.String.Trim.
Ejemplo
En este ejemplo se utiliza la función LTrim para suprimir los espacios iniciales y la función RTrim para suprimir los espacios
finales en una variable de cadena. Se utiliza la función Trim para suprimir ambos tipos de espacios.
VB
' Initializes string.
Dim TestString As String = " <-Trim-> "
Dim TrimString As String
' Returns "<-Trim-> ".
TrimString = LTrim(TestString)
' Returns " <-Trim->".
TrimString = RTrim(TestString)
' Returns "<-Trim->".
TrimString = LTrim(RTrim(TestString))
' Using the Trim function alone achieves the same result.
' Returns "<-Trim->".
TrimString = Trim(TestString)

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Strings
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Resumen de manipulación de cadenas
Left (Función, Visual Basic)
Right (Función, Visual Basic)
Trim
Referencia del lenguaje Visual Basic

Funciones S-Z
La siguiente tabla contiene una lista de funciones miembro en tiempo de ejecución de Visual Basic.

SaveSetting Second Seek SetAttr

Shell SLN Space SPC

Split Str StrComp StrConv

StrDup StrReverse Switch SYD

SystemTypeName TAB TimeSerial TimeValue

Trim TypeName UBound UCase

Unlock Val VarType VbTypeName

Weekday WeekdayName Write WriteLine

Year

Las funciones matemáticas Sgn, Sin, Sqr y Tan que estaban disponibles como funciones miembro en tiempo de ejecución de
Visual Basic en la versión 6.0 y anteriores, han sido reemplazadas por los métodos (Sign, Sin, Sqrt y Tan) en la clase Math de la
biblioteca de clases de .NET Framework. Para obtener más información, vea Funciones matemáticas (Visual Basic).
Notas para desarrolladores de dispositivos inteligentes
Los siguientes elementos no se admiten en las aplicaciones de dispositivos inteligentes: SaveSetting, Seek, SetAttr, Shell,
SPC, StrConv, TAB, Unlock, VarType, Write y WriteLine.
Vea también
Referencia
Funciones A-C
Funciones D-G
Funciones H-L
Funciones M-R
Otros recursos
Referencia de Visual Basic
Referencia del lenguaje Visual Basic

SaveSetting (Función)
Guarda o crea una entrada para una aplicación en el Registro de Windows.
La característica My proporciona mayor productividad y rendimiento en las operaciones del Registro que si se utiliza
SaveSetting. Para obtener más información, vea My.Computer.Registry (Objeto).

Public Sub SaveSetting( _


ByVal AppName As String, _
ByVal Section As String, _
ByVal Key As String, _
ByVal Setting As String _
)

Parámetros
AppName
Requerido. Expresión de tipo String que contiene el nombre de la aplicación o proyecto al que corresponde el valor.
Section
Requerido. Expresión de tipo String que contiene el nombre de la sección donde se va a guardar la clave.
Key
Requerido. Expresión de tipo String que contiene el nombre de la clave que se va a guardar.
Setting
Requerido. Expresión que contiene el valor que se va a asignar a Key.
Excepciones
Tipo de excepción Número de error Condición
ArgumentException 5 No se puede crear el Registro de clave o el usuario no ha iniciado la sesión.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
La función SaveSetting agrega la clave a HKEY_CURRENT_USER\Software\VB and VBA Program Settings.
Si por algún motivo no se puede guardar el valor de la clave, se produce un error
SaveSetting requiere que un usuario se conecte ya que funciona bajo la clave de Registro HKEY_LOCAL_USER, que no se
activa hasta que un inicia la sesión de forma interactiva.
Los valores de configuración del Registro a los que se va a tener acceso mediante un proceso no interactivo (como Mtx.exe)
deben almacenarse bajo las claves del Registro HKEY_LOCAL_MACHINE\Software\ o HKEY_USER\DEFAULT\Software.
SaveSetting requiere un Permiso de Registro de Write y Create.
Ejemplo
En el siguiente ejemplo primero se utiliza la función SaveSetting para crear entradas en el Registro de Windows para la
aplicación MyApp y, a continuación, se utiliza la función DeleteSetting para quitarlas.
VB
' Place some settings in the registry.
SaveSetting("MyApp", "Startup", "Top", "75")
SaveSetting("MyApp","Startup", "Left", "50")
' Remove Startup section and all its settings from registry.
DeleteSetting ("MyApp", "Startup")
' Remove MyApp from the registry.
DeleteSetting ("MyApp")

Notas para desarrolladores de dispositivos inteligentes


Esta función no es compatible.
Requisitos
Espacio de nombres:Microsoft.VisualBasic
Módulo: Interaction
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
DeleteSetting (Función)
GetAllSettings (Función)
GetSetting (Función)
RegistryPermission Class
Conceptos
Tareas habituales del Registro
Referencia del lenguaje Visual Basic

Second (Función, Visual Basic)


Devuelve un valor Integer entre 0 y 59 que representa el segundo del minuto.

Public Function Second(ByVal TimeValue As DateTime) As Integer

Parámetros
TimeValue
Requerido. Valor Date del cual se desea extraer el segundo.
Comentarios
También se puede obtener el segundo del minuto llamando a DatePart y especificando DateInterval.Second para el
argumento Interval.
Ejemplo
En el ejemplo siguiente se utiliza la función Second para obtener el segundo del minuto de una hora especificada. En el
entorno de desarrollo, el literal de hora se muestra en formato de hora corto con los valores de configuración regional del
código correspondiente.
VB
Dim thisTime As Date
Dim thisSecond As Integer
thisTime = #4:35:17 PM#
thisSecond = Second(thisTime)
' thisSecond now contains 17.

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: DateAndTime
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Day (Función, Visual Basic)
Hour (Función, Visual Basic)
Minute (Función)
Now (Propiedad)
TimeOfDay (Propiedad)
DatePart (Función, Visual Basic)
System
DateTime
ArgumentException
ArgumentOutOfRangeException
Referencia del lenguaje Visual Basic

Seek (Función)
Devuelve un valor Long que especifica la posición actual de lectura o escritura en un archivo abierto con la función FileOpen
o bien establece la posición de la siguiente operación de lectura o escritura en un archivo abierto con la función FileOpen.
La característica My proporciona mayor productividad y rendimiento en las operaciones de E/S del archivo que si se utiliza
Seek. Para obtener más información, vea My.Computer.FileSystem (Objeto).

Public Overloads Function Seek( _


ByVal FileNumber As Integer _
) As Long
' -or-
Public Overloads Sub Seek( _
ByVal FileNumber As Integer, _
ByVal Position As Long _
)

Parámetros
FileNumber
Requerido. Integer que contiene un número de archivo válido.
Position
Requerido. Número comprendido entre 1 y 2.147.483.647, ambos inclusive, que indica el lugar en que debería llevarse a
cabo la próxima operación de lectura o escritura.
Excepciones
Tipo de excepción Número de error Condición
IOException D0E96AEA-7621-48F6-A78B-5D37D18AAA4E FileNumber no existe.

IOException 74891E96-884B-4C8D-872D-CD11AE272372 El modo de archivo no es válido.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
Seek devuelve un valor comprendido entre 1 y 2.147.483.647 (equivalente a 2^31 – 1), ambos inclusive.
En la siguiente tabla se describe el valor devuelto en cada modo de acceso a archivos:
Modo Valor devuelto
Random Número del siguiente registro que se lee o escribe.

Binary Input Outp Posición de byte en la que se llevará a cabo la siguiente operación. El primer byte de un archivo tiene la po
ut Append sición 1, el segundo byte, la posición 2 y así sucesivamente.
Ejemplo
En este ejemplo se utiliza la función Seek para devolver la posición de archivo actual. Se supone que TestFile es un archivo
con registros de la estructura Record.
VB
Structure Record ' Define user-defined type.
Dim ID As Integer
Dim Name As String
End Structure
Con archivos abiertos en modo Random, Seek devuelve el número del siguiente registro.
VB
FileOpen(1, "TESTFILE", OpenMode.Random)
Do While Not EOF(1)
WriteLine(1,Seek(1)) ' Write record number.
FileGet(1, MyRecord, -1) ' Read next record.
Loop
FileClose(1)

Con archivos abiertos en modos distintos de Random, Seek devuelve la posición de byte en la que se lleva a cabo la siguiente
operación. Se supone que TestFile es un archivo con unas pocas líneas de texto.
VB
' Report character position at beginning of each line.
Dim TextLine As String
FileOpen(1, "TESTFILE", OpenMode.Input) ' Open file for reading.
While Not EOF(1)
' Read next line.
TextLine = LineInput(1)
' Position of next line.
MsgBox(Seek(1))
End While
FileClose(1)

En este ejemplo se utiliza la función Seek para establecer la posición de la siguiente operación de lectura o escritura que se
producirá en un archivo. Se supone que People.txt es un archivo con registros de la estructura Record.
VB
Structure TestRecord
Dim Name As String
Dim ID As Integer
End Structure

Con archivos abiertos en modos distintos de Random, Seek establece la posición de byte en la que se lleva a cabo la siguiente
operación. Se supone que TestFile es un archivo con unas pocas líneas de texto.
VB
Dim someText As String = "This is a test string."
' Open file for output.
FileOpen(1, "TESTFILE", OpenMode.Input)
' Move to the third character.
Seek(1, 3)
Input(1, someText)
Console.WriteLine(someText)
FileClose(1)

Notas para desarrolladores de dispositivos inteligentes


Esta función no es compatible.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: FileSystem
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
FileGet (Función)
Loc (Función)
FileOpen (Función)
FilePut (Función)
IOException Class
Otros recursos
Leer archivos en Visual Basic
Escribir en archivos en Visual Basic
Referencia del lenguaje Visual Basic

SetAttr (Función)
Establece la información de atributos para un archivo.
La característica My proporciona mayor productividad y rendimiento en las operaciones de E/S del archivo que si se utiliza
SetAttr. Para obtener más información, vea My.Computer.FileSystem (Objeto).

Public Sub SetAttr( _


ByVal
PathName
As String, _
ByVal
Attributes
As FileAttribute _
)

Parámetros
PathName
Requerido. Expresión de tipo String que especifica un nombre de archivo. PathName puede incluir el directorio o la carpeta
y la unidad.
Attributes
Requerido. Constante o expresión numérica cuyo valor especifica los atributos de archivo.
Valores
Los valores de enumeración del argumento Attributes son:
Valor Constante Descripción
Normal vbNormal Normal (predeterminado).

ReadOnly vbReadOnly Sólo lectura.

Hidden vbHidden Oculto.

System vbSystem Archivo de sistema.

Volume vbVolume Etiqueta de volumen

Directory vbDirectory Directorio o carpeta.

Archive vbArchive El archivo ha cambiado desde la última copia de seguridad.

Alias vbAlias El archivo tiene un nombre diferente.


Nota
El lenguaje de Visual Basic especifica estas enumeraciones. Se pueden utilizar los nombres en cualquier lugar del código en v
ez de los valores reales.

Excepciones
Tipo de excepción Número de error Condición
ArgumentException D0E96AEA-7621-48F6-A78B-5D37D18AAA4E PathName no es válido o no existe.

ArgumentException 9B07D280-66C6-4EA5-A8ED-5DDB0036F877 El tipo de Attribute no es válido.


Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
Si intenta asignar los atributos de un archivo abierto, se producirá un error en tiempo de ejecución.
Ejemplo
En este ejemplo, se utiliza la función SetAttr para establecer los atributos de un archivo.
VB
' Set hidden attribute.
SetAttr("TESTFILE", vbHidden)
' Set hidden and read-only attributes.
SetAttr("TESTFILE", vbHidden Or vbReadOnly)

Notas para desarrolladores de dispositivos inteligentes


Esta función no es compatible.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: FileSystem
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
FileAttr (Función)
GetAttr (Función)
ArgumentException Class
FileAttribute (Enumeración)
My.Computer.FileSystem (Objeto)
Referencia del lenguaje Visual Basic

Shell (Función)
Inicia un programa ejecutable y devuelve un entero que contiene el identificador de proceso del programa si aún se encuentra
en ejecución.

Public Function Shell( _


ByVal PathName As String, _
Optional ByVal Style As AppWinStyle = AppWinStyle.MinimizedFocus, _
Optional ByVal Wait As Boolean = False, _
Optional ByVal Timeout As Integer = -1 _
) As Integer

Parámetros
PathName
Obligatorio. String. Nombre del programa que se va a ejecutar junto con cualquier argumento necesario y cualquier
modificador de línea de comandos. PathName puede incluir también la unidad y la carpeta o la ruta de acceso del directorio.
Si no sabe cuál es la ruta de acceso al programa, puede utilizar el método My.Computer.FileSystem.GetFiles (Método) para
buscarlo. Por ejemplo, puede llamar a My.Computer.FileSystem.GetFiles("C:\", True, "testFile.txt"), que devuelve la
ruta de acceso completa de todos los archivos con el nombre testFile.txt situados en cualquier ubicación de la unidad C:\.
Style
Opcional. AppWinStyle. Valor elegido en la enumeración AppWinStyle (Enumeración) que especifica el estilo de la ventana
en la que se va a ejecutar el programa. Si se omite Style, Shell utiliza AppWinStyle.MinimizedFocus, que inicia el
programa minimizado y con foco.
Wait
Opcional. Boolean. Valor que indica si la función Shell debe esperar a que finalice el programa. Si se omite Wait, Shell
utiliza False.
Timeout
Opcional. Integer. Número de milisegundos de espera para la finalización cuando Wait es True. Si se omite Timeout, Shell
utiliza -1, lo que significa que no hay ningún tiempo de espera y que Shell no retorna hasta que el programa finaliza. Por
consiguiente, si omite Timeout o lo establece en -1, es posible que Shell nunca pueda devolver el control al programa.
Excepciones
Tipo de excepción Número de error Condición
ArgumentException 5 Style está fuera del intervalo comprendido entre 0 y 9, ambos inclusive.

FileNotFoundException 53 Shell no puede encontrar el archivo PathName.

NullReferenceException 91 PathName es Nothing.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, debe considerarse la posibilidad de sustituir dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
El valor devuelto de la función Shell depende de si el programa especificado en PathName aún se está ejecutando cuando
Shell devuelve un valor. Si establece Wait en True y el programa finaliza antes de que el tiempo de espera caduque, Shell
devuelve cero. Si vence el tiempo de espera, o si se omite Wait o se establece en False, Shell devuelve el identificador de
proceso del programa. El identificador de proceso es un número único que identifica el programa en ejecución.
Error al iniciar
Si la función Shell no puede iniciar el programa especificado, se produce un error FileNotFoundException. Esto puede
ocurrir, por ejemplo, cuando intenta ejecutar un programa de 16 bits, como command.com, desde una aplicación utilizando
System.Windows.Forms. Como solución, puede ejecutar un programa de 32 bits que llame al programa de 16 bits deseado. En
el caso de command.com, puede ejecutar cmd.exe como alternativa.
Esperar a que finalice la ejecución
De manera predeterminada, la función Shell ejecuta el programa de forma asincrónica. Esto significa que es posible que la
ejecución de un programa iniciado con la función Shell no termine hasta que se ejecuten las instrucciones que siguen a la
función Shell. Si desea esperar a que finalice el programa antes de continuar, establezca Wait en True.
Determinar el código de salida
Un proceso puede devolver un código de salida cuando finaliza. Sin embargo, no se puede utilizar Shell para recuperar este
código de salida porque Shell devuelve cero si espera a que finalice la ejecución y además porque el proceso se ejecuta en un
objeto diferente de Shell.
Para recuperar el código de salida de un proceso, debe escribir su propio código para iniciar el proceso y esperar a que finalice.
En el ejemplo siguiente se muestra cómo iniciar un proceso, esperar a que finalice y recuperar su código de salida.

Dim procID As Integer


Dim newProc As Diagnostics.Process
newProc = Diagnostics.Process.Start("C:\WINDOWS\NOTEPAD.EXE")
procID = newProc.Id
newProc.WaitForExit()
Dim procEC As Integer = -1
If newProc.HasExited Then
procEC = newProc.ExitCode
End If
MsgBox("Process with ID " & CStr(ProcID) & _
" terminated with exit code " & CStr(procEC))

Proteger la especificación del archivo


Siempre debe entrecomillarse la ruta de acceso completa y la especificación del archivo, tal y como se muestra en el siguiente
ejemplo:

ID = Shell("""C:\Program Files\display.exe"" -a -q", , True, 100000)

Cada par de comillas dobles adyacentes (" ") situado dentro del carácter literal de cadena se interpreta como un carácter de
comillas dobles en la cadena. Por tanto, en el ejemplo anterior se presenta la siguiente cadena para la función Shell:

"C:\Program Files\display.exe" -a -q

Si la ruta de acceso no estuviera encerrada entre comillas, Windows buscaría un archivo denominado Program.exe en el
directorio C:\, en lugar de buscar display.exe en el directorio C:\Program Files.
Nota de seguridad
Si no encierra entre comillas la ruta de acceso y la especificación de archivo, la seguridad puede verse comprometida si el no
mbre del archivo o un nodo de la ruta contienen espacios. En el ejemplo anterior, el nodo de la ruta de acceso \Program File
s incluye un espacio. Si la especificación no se encontrase entrecomillada y se hubiese instalado en C:\ un programa denomi
nado Program.exe, por ejemplo de forma ilegal, Windows lo ejecutaría en lugar de display.exe.

Nota de seguridad
La función Shell requiere un permiso de código no administrado que puede afectar a su ejecución en situaciones de confian
za parcial. Para obtener más información, vea SecurityPermission y Permisos de acceso a código.

Ejemplo
En este ejemplo se utiliza la función Shell para ejecutar una aplicación especificada por el usuario. La especificación
Microsoft.VisualBasic.AppWinStyle.NormalFocus como segundo argumento abre la aplicación en tamaño normal y le
proporciona el foco.
VB
Dim procID As Integer
' Run calculator.
procID = Shell("C:\Windows\system32\calc.exe", AppWinStyle.NormalFocus)
' The preceding path is for Windows XP.
' The Windows 2000 path is C:\WINNT\system32\calc.exe.

Notas para desarrolladores de dispositivos inteligentes


Esta función no es compatible.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Interaction
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
AppWinStyle (Enumeración)
My.Computer.FileSystem.GetFiles (Método)
AppActivate (Función)
ArgumentException
FileNotFoundException
NullReferenceException
Referencia del lenguaje Visual Basic

SLN (Función)
Devuelve un valor de tipo Double que indica la amortización lineal de un activo durante un único período.

Function SLN( _
ByVal Cost As Double, _
ByVal Salvage As Double, _
ByVal Life As Double _
) As Double

Parámetros
Cost
Requerido. Valor de tipo Double que indica el costo inicial del activo.
Salvage
Requerido. Valor de tipo Double que indica el valor del activo al término de su vida útil.
Life
Requerido. Valor de tipo Double que indica la duración de la vida útil del activo.
Excepciones
Tipo de excepción Número de error Condición
ArgumentException 9B07D280-66C6-4EA5-A8ED-5DDB0036F877 Life

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
El período de amortización se debe expresar en las mismas unidades que el argumento Life. Todos los argumentos deben ser
números positivos.
Ejemplo
En este ejemplo se utiliza la función SLN para devolver la amortización lineal de un activo en un solo período, dados el costo
inicial del activo (InitCost), el valor de rescate al final de la vida útil del activo (SalvageVal) y la duración total del activo en
años (LifeTime).
VB
Dim InitCost, SalvageVal, LifeTime, DepYear As Double
Dim Fmt As String = "###,##0.00"

InitCost = CDbl(InputBox("What's the initial cost of the asset?"))


SalvageVal = CDbl(InputBox("Enter the asset's value at end of its life."))
LifeTime = CDbl(InputBox("What's the asset's useful life in years?"))

' Use the SLN function to calculate the deprecation per year.
Dim SlnDepr As Double = SLN(InitCost, SalvageVal, LifeTime)
Dim msg As String = "The depreciation per year: " & Format(SlnDepr, Fmt)
msg &= vbCrLf & "Year" & vbTab & "Linear" & vbTab & "Doubling" & vbCrLf

' Use the SYD and DDB functions to calculate the deprecation for each year.
For DepYear = 1 To LifeTime
msg &= DepYear & vbTab & _
Format(SYD(InitCost, SalvageVal, LifeTime, DepYear), Fmt) & vbTab & _
Format(DDB(InitCost, SalvageVal, LifeTime, DepYear), Fmt) & vbCrLf
Next
MsgBox(msg)
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Financial
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
SYD (Función)
DDB (Función)
Resumen financiero
ArgumentException
Referencia del lenguaje Visual Basic

Space (Función, Visual Basic)


Devuelve una cadena que consta del número especificado de espacios.

Public Shared Function Space(ByVal Number As Integer) As String

Parámetros
Number
Requerido. Expresión Integer. Número de espacios que desea que tenga la cadena.
Excepciones
Tipo de excepción Número de error Condición
ArgumentException 9B07D280-66C6-4EA5-A8ED-5DDB0036F877 Number

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
La función Space es útil para dar formato a datos de salida y descartar información en cadenas de longitud fija.
Ejemplo
En este ejemplo se utiliza la función Space para devolver una cadena formada por un número de espacios especificado.
VB
Dim TestString As String
' Returns a string with 10 spaces.
TestString = Space(10)
' Inserts 10 spaces between two strings.
TestString = "Hello" & Space(10) & "World"

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Strings
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Resumen de manipulación de cadenas
SPC (Función)
ArgumentException
Referencia del lenguaje Visual Basic

SPC (Función)
Se utiliza con la función Print o PrintLine para ubicar los resultados.

Public Function SPC(ByVal Count As Short) As SPCInfo

Parámetros
Count
Requerido. Número de espacios que se han de insertar antes de mostrar o imprimir la próxima expresión en una lista.
Comentarios
Si Count es menor que el ancho de la línea de salida, la próxima posición de impresión seguirá inmediatamente al número de
espacios impresos. Si Count es mayor que el ancho de la línea de salida, SPC calcula la próxima posición de impresión
mediante la fórmula:
currentprintposition Count Mod width
Por ejemplo, si la posición de impresión actual es 24, el ancho de la línea de salida es 80 y especifica SPC(90), la próxima
impresión comenzará en la posición 34 (posición de impresión actual + el resultado de 90/80). Si la diferencia entre la posición
de impresión actual y el ancho de la línea de salida es menor que Count (o CountModwidth), la función SPC saltará al principio
de la próxima línea y generará un número de espacios igual a Count – (width – currentprintposition).
Nota
Asegúrese de que las columnas tabulares sean lo suficientemente amplias como para dar cabida a letras anchas.

Ejemplo
En este ejemplo se utiliza la función SPC para ubicar el resultado en un archivo y en la ventana Resultados.
VB
' The SPC function can be used with the Print function.
FileOpen(1, "TESTFILE", OpenMode.Output) ' Open file for output.
Print(1, "10 spaces between here", SPC(10), "and here.")
FileClose(1) ' Close file.

Notas para desarrolladores de dispositivos inteligentes


Esta función no es compatible.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: FileSystem
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Mod (Operador, Visual Basic)
Print, PrintLine (Funciones)
Space (Función, Visual Basic)
TAB (Función)
FileWidth (Función)
Referencia del lenguaje Visual Basic

Split (Función, Visual Basic)


Devuelve una matriz unidimensional basada en cero que contiene un número especificado de subcadenas.

Function Split(
ByVal Expression As String,
Optional ByVal Delimiter As String = " ",
Optional ByVal Limit As Integer = -1,
Optional ByVal Compare As CompareMethod = CompareMethod.Binary
) As String()

Parámetros
Expression
Obligatoria. Expresión de tipo String que contiene subcadenas y delimitadores.
Delimiter
Opcional. Carácter único que se utiliza para identificar los límites de las subcadenas. Si se omite Delimiter, el carácter de
espacio (" ") se considera un delimitador.
Limit
Opcional. Número máximo de subcadenas en las que debería dividirse la cadena de entrada. El valor predeterminado, -1,
indica que la cadena de entrada debe dividirse en cada aparición de la cadena Delimiter.
Compare
Opcional. Valor numérico que indica el tipo de comparación que se va a utilizar en la evaluación de subcadenas. Vea la
sección "Configuración" para conocer los valores utilizados.
Resultados
Matriz String. Si Expression es una cadena de longitud cero (""), Split devuelve una matriz de un solo elemento que contiene
una cadena de longitud cero. Si Delimiter es una cadena de longitud cero o si no aparece en ningún punto de Expression, Split
devuelve una matriz de un solo elemento que contiene la cadena Expression completa.
Configuración
El argumento Compare puede tener los siguientes valores:
Constante Descripción Valor
CompareMethod.Binary Realiza una comparación binaria 0

CompareMethod.Text Realiza una comparación textual 1


Comentarios
De manera predeterminada, o cuando Limit es igual a -1, la función Split divide la cadena de entrada en cada aparición de la
cadena de delimitación, y devuelve las subcadenas en una matriz. Cuando el parámetro Limit es mayor que cero, la función
Split divide la cadena en las primeras apariciones en las que el valor de Limit es -1 y devuelve una matriz con las subcadenas
resultantes. Por ejemplo, Split("a:b:c", ":") devuelve la matriz {"a", "b", "c"}, mientras que Split("a:b:c", ":", 2)
devuelve la matriz {"a", "b:c"}.
Cuando la función Split encuentra dos delimitadores seguidos o un delimitador al principio o al final de la cadena, interpreta
que estos delimitadores encierran una cadena vacía (""). Por ejemplo, Split("xx", "x") devuelve la matriz que contiene tres
cadenas vacías: una cadena que va desde el comienzo de la cadena hasta la primera "x", otra cadena que abarca el espacio
comprendido entre las dos "x" y una última que va desde la última "x" hasta el final de la cadena.
En esta tabla se muestra cómo los parámetros opcionales Delimiter, Limit y Compare pueden cambiar el comportamiento de la
función Split.
Dividir llamada Valor devuelto
Split("42, 12, 19") {"42," , "12," , "19"}

Split("42, 12, 19", ", ") {"42", "12", "19"}


Split("42, 12, 19", ", ", 2) {"42", "12, 19"}

Split("192.168.0.1", ".") {"192", "168", "0", "1"}

Split("Alice and Bob", " AND ") {"Alice and Bob"}

Split("Alice and Bob", " AND ", ,CompareMethod.Text) {"Alice", "Bob"}

Split("someone@example.com", "@",1) {"someone@example.com"}

Split("someone@example.com", "@",2) {"someone", "example.com"}


Ejemplo
En el ejemplo siguiente se muestra cómo se divide una cadena en los espacios que contiene.
VB
Dim TestString As String = "Look at these!"
' Returns an array containing "Look", "at", and "these!".
Dim TestArray() As String = Split(TestString)

En el ejemplo siguiente se muestra cómo se dividen cadenas con varios delimitadores seguidos y cómo se filtran las cadenas
vacías.
VB
Dim TestString As String = "apple pear banana "
Dim TestArray() As String = Split(TestString)
' TestArray holds {"apple", "", "", "", "pear", "banana", "", ""}
Dim LastNonEmpty As Integer = -1
For i As Integer = 0 To TestArray.Length - 1
If TestArray(i) <> "" Then
LastNonEmpty += 1
TestArray(LastNonEmpty) = TestArray(i)
End If
Next
ReDim Preserve TestArray(LastNonEmpty)
' TestArray now holds {"apple", "pear", "banana"}

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Strings
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Resumen de manipulación de cadenas
Join (Función, Visual Basic)
CompareMethod (Enumeración)
Referencia del lenguaje Visual Basic

Str (Función)
Devuelve la representación String de un número.

Public Shared Function Str(ByVal Number As Object) As String

Parámetros
Number
Obligatorio. Object que contiene cualquier expresión numérica válida.
Excepciones
Tipo de excepción Número de error Condición
ArgumentNullException 5 Number no se especifica.

InvalidCastException 5 Number no es un tipo numérico.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
Cuando los números se conviertan a cadenas, siempre se reservará un espacio inicial para el signo de Number. Si Number es
positivo, la cadena devuelta contiene un espacio inicial y el signo más se da por supuesto. Un número negativo incluirá el signo
menos (-) y ningún espacio inicial.
Use la función Format para convertir valores numéricos a los que desee aplicar formato de fecha, hora o moneda, u otros
formatos definidos por el usuario. Al contrario de lo que ocurre con la función Str, la función Format no incluye ningún
espacio inicial para el signo de Number.
Nota
La función Str sólo reconoce el punto (.) como separador decimal válido. Si se utilizan separadores decimales diferentes, com
o sucede en aplicaciones internacionales, debe utilizar las funciones CStr o Format para convertir un número en una cadena.
Para obtener la representación de cadena de un número en una referencia cultural determinada, utilice el método ToString(
IFormatProvider) del número. Por ejemplo, utilice ToString al convertir un valor de tipo Double en una cadena.

Ejemplo
En este ejemplo se utiliza la función Str para devolver una representación String de un número. Cuando los números positivos
se conviertan a cadenas, siempre se reservará un espacio inicial para su signo.
VB
Dim TestString As String
' Returns " 459".
TestString = Str(459)
' Returns "-459.65".
TestString = Str(-459.65)
' Returns " 459.001".
TestString = Str(459.001)

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Conversion
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Resumen de conversión
Format (Función)
Funciones de conversión de tipos
Format (Función)
Val (Función)
ArgumentNullException
InvalidCastException
Referencia del lenguaje Visual Basic

StrComp (Función, Visual Basic)


Devuelve un valor, -1, 0 ó 1, que indica el resultado de una comparación de cadena.

Public Shared Function StrComp( _


ByVal String1 As String, _
ByVal String2 As String, _
<Microsoft.VisualBasic.OptionCompareAttribute> _
Optional ByVal Compare As Microsoft.VisualBasic.CompareMethod _
) As Integer

Parámetros
String1
Obligatorio. Cualquier expresión String válida.
String2
Obligatorio. Cualquier expresión String válida.
Compare
Opcional. Especifica el tipo de comparación entre cadenas. Si se omite Compare, el valor Option Compare determinará el
tipo de comparación.
Valores
Los valores del argumento Compare son:
Cons Descripción
tante
Binar Realiza una comparación binaria basada en un tipo de ordenación que se deriva de las representaciones binarias intern
y as de los caracteres.

Text Realiza una comparación de texto basada en una ordenación de texto donde no se distingue entre mayúsculas y minúsc
ulas, y que viene determinada por la información de referencia cultural actual de la aplicación.
Valor devuelto
La función StrComp devuelve los siguientes valores.
Si StrComp devuelve
String1 se ordena delante de String2 -1

String1 es igual a String2 0

String1 se ordena después de String2 1


Excepciones
Tipo de excepción Número de error Condición
ArgumentException 5 El valor de Compare no es válido.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
Las cadenas se comparan por valores alfanuméricos ordenados comenzando por el primer carácter. Para obtener más
información sobre comparaciones binarias y textuales, así como criterios de ordenación, vea Option Compare (Instrucción).
Nota de seguridad
Si la aplicación toma decisiones sobre la seguridad basándose en el resultado de una comparación o de una operación de ca
mbio de mayúsculas y minúsculas, la operación debe utilizar el método
System.String.Compare(System.String,System.String,System.StringComparison) y pasar Ordinal o OrdinalIgnoreCase al argu
mento comparisonType. Para obtener más información, vea Cómo afecta la referencia cultural a las cadenas en Visual Basic.

Ejemplo
En este ejemplo se utiliza la función StrComp para devolver los resultados de una comparación de cadena. Si se omite el tercer
argumento, se ejecutará el tipo de comparación definido en la instrucción Option Compare o en los valores predeterminados
del proyecto.
VB
' Defines variables.
Dim TestStr1 As String = "ABCD"
Dim TestStr2 As String = "abcd"
Dim TestComp As Integer
' The two strings sort equally. Returns 0.
TestComp = StrComp(TestStr1, TestStr2, CompareMethod.Text)
' TestStr1 sorts after TestStr2. Returns -1.
TestComp = StrComp(TestStr1, TestStr2, CompareMethod.Binary)
' TestStr2 sorts before TestStr1. Returns 1.
TestComp = StrComp(TestStr2, TestStr1)

Requisitos
Espacio de nombres:Microsoft.VisualBasic
Módulo: Strings
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Resumen de manipulación de cadenas
InStr (Función, Visual Basic)
ArgumentException
Otros recursos
Cadenas en Visual Basic
Introducción a las cadenas en Visual Basic
Referencia del lenguaje Visual Basic

StrConv (Función)
Devuelve una cadena convertida según se ha especificado.

Public Shared Function StrConv( _


ByVal str As String, _
ByVal Conversion As Microsoft.VisualBasic.VbStrConv, _
Optional ByVal LocaleID As Integer,
) As String

Parámetros
str
Obligatorio. Expresión String que se va a convertir.
Conversion
Obligatorio. Miembro VbStrConv (Enumeración). Valor de enumeración que especifica el tipo de conversión que realizar.
LocaleID
Opcional. Valor LocaleID, si es diferente del valor de la referencia cultural actual de la aplicación. Para obtener más
información acerca de los identificadores y la referencia cultural, vea CultureInfo. (El valor de referencia cultural actual de la
aplicación es el valor predeterminado.)
Valores
Los valores del argumento Conversion son:
Miembro de la e Descripción
numeración
VbStrConv.None No se realiza ninguna conversión

VbStrConv.Lingu Usa mayúsculas o minúsculas con arreglo a criterios lingüísticos, más que los del sistema de archivos (pred
isticCasing eterminado). Válido con VbStrConv.UpperCase y VbStrConv.LowerCase solamente.

VbStrConv.Uppe Convierte la cadena a mayúsculas.


rCase

VbStrConv.Lowe Convierte la cadena a minúsculas.


rCase

VbStrConv.Prope Pone en mayúscula la primera letra de cada palabra de la cadena.


rCase

VbStrConv.Wide Convierte los caracteres estrechos (ancho medio) de la cadena en caracteres anchos (ancho completo).
*

VbStrConv.Narro Convierte los caracteres anchos (ancho completo) de la cadena en caracteres estrechos (ancho medio).
w*

VbStrConv.Katak Convierte los caracteres Hiragana de la cadena en caracteres Katakana.


ana **

VbStrConv.Hirag Convierte los caracteres Katakana de la cadena en caracteres Hiragana.


ana **
VbStrConv.Simpl Convierte los caracteres de chino tradicional a chino simplificado.
ifiedChinese *

VbStrConv.Tradit Convierte los caracteres de chino simplificado en chino tradicional.


ionalChinese *

* Se aplica a configuraciones regionales asiáticas.


** Sólo se aplica a Japón.
Nota
Estas constantes se especifican en Common Language Runtime de .NET Framework. Por tanto, pueden utilizarse en cualquier
lugar del código en vez de sus valores reales. La mayoría de ellas pueden combinarse (por ejemplo, UpperCase + Wide) exce
pto cuando se excluyan mutuamente (por ejemplo, VbStrConv.Wide + VbStrConv.Narrow).

Los siguientes separadores son separadores de palabra válidos para una presentación correcta: Null (Chr$(0)), tabulación
horizontal (Chr$(9)), avance de línea (Chr$(10)), tabulación vertical (Chr$(11)), salto de página (Chr$(12)), retorno de carro
(Chr$(13)), espacio (juego de caracteres de un solo byte) (Chr$(32)). En Asia oriental, el valor real de un espacio, que puede ser
de uno o dos bytes, varía en función del país o región.
Excepciones
Tipo de excepció Número de Condición
n error
ArgumentException 5 LocaleID no admitido, Conversion < 0 o > 2048, o conversión no admitida para la configura
ción regional especificada.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
Las constantes VbStrConv.Wide, VbStrConv.Narrow, VbStrConv.SimplifiedChinese, VbStrConv.TraditionalChinese,
VbStrConv.Katakana y VbStrConv.Hiragana pueden provocar errores en tiempo de ejecución cuando se utilizan en
configuraciones regionales en las que no se aplican pero no siempre: las constantes VbStrConv.Katakana y
VbStrConv.Hiragana se pueden utilizar en sistemas no japoneses con un paquete de japonés instalado. Además, se admite el
uso de las constantes VbStrConv.Wide y VbStrConv.Narrow en cualquier sistema que tenga instalado un idioma de Asia
oriental.
Esta función utiliza la información de referencia cultural de la aplicación al manipular la cadena para que los cambios de
mayúsculas y minúsculas sean los adecuados para la configuración regional en la que se usa la aplicación.
Nota de seguridad
Si la aplicación toma decisiones sobre la seguridad basándose en el resultado de una comparación o de una operación de ca
mbio de mayúsculas y minúsculas, la operación debe utilizar el método
System.String.Compare(System.String,System.String,System.StringComparison) y pasar Ordinal o OrdinalIgnoreCase al argu
mento comparisonType. Para obtener más información, vea Cómo afecta la referencia cultural a las cadenas en Visual Basic.

Ejemplo
En este ejemplo se pone un texto todo en minúsculas.
VB
Dim sText As String = "Hello World"
' Returns "hello world".
Dim sNewText As String = StrConv(sText, VbStrConv.LowerCase)
Notas para desarrolladores de dispositivos inteligentes
Esta función no está admitida.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Strings
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Resumen de manipulación de cadenas
Chr, ChrW (Funciones)
String (Tipo de datos, Visual Basic)
Funciones de conversión de tipos
ArgumentException
Referencia del lenguaje Visual Basic

StrDup (Función)
Devuelve una cadena o un objeto que se compone del carácter especificado repetido el número de veces especificado.

Public Shared Function StrDup( _


ByVal Number As Integer, _
ByVal Character As { Char | String } _
) As String
' -or-
Public Shared Function StrDup( _
ByVal Number As Integer, _
ByVal Character As Object _
) As Object

Parámetros
Number
Requerido. Expresión Integer. Longitud de la cadena que devolver.
Character
Requerido. Cualquier expresión Char, String u Object válida. Se utilizará sólo el primer carácter de la expresión. Si Character
es de tipo Object, debe contener un valor Char o String .
Excepciones
Tipo de excepción Número de error Condición
ArgumentException 9B07D280-66C6-4EA5-A8ED-5DDB0036F877 Number es menor que 0 o el tipo Character no es válid
o.

ArgumentNullException 9B07D280-66C6-4EA5-A8ED-5DDB0036F877 Character es Nothing.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
Esta función devuelve una String compuesta de caracteres repetidos. El carácter que conforma la cadena es el primer carácter
del argumento Character y se duplica tantas veces como indique Number.
Ejemplo
En este ejemplo se utiliza la función StrDup para devolver una cadena de caracteres duplicados.
VB
Dim aString As String = "Wow! What a string!"
Dim aObject As New Object
Dim TestString As String
aObject = "This is a String contained within an Object"
' Returns "PPPPP"
TestString = StrDup(5, "P")
' Returns "WWWWWWWWWW"
TestString = StrDup(10, aString)
' Returns "TTTTTT"
TestString = CStr(StrDup(6, aObject))

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Strings
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Resumen de manipulación de cadenas
SPC (Función)
ArgumentException
ArgumentNullException
Referencia del lenguaje Visual Basic

StrReverse (Función, Visual Basic)


Devuelve una cadena en la que se invierte el orden de los caracteres de la cadena especificada.

Public Function StrReverse(ByVal Expression As String) As String

Parámetros
Expression
Requerido. Expresión de cadena cuyos caracteres se desea invertir. Si Expression es una cadena de longitud cero (""), se
devolverá una cadena de longitud cero.
Comentarios
La función StrReverse devuelve una cadena que contiene los mismos caracteres que Expression, pero en el orden contrario.
Ejemplo
VB
Dim TestString As String = "ABCDEFG"
' Returns "GFEDCBA".
Dim revString As String = StrReverse(TestString)

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Strings
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Resumen de manipulación de cadenas
InStrRev (Función, Visual Basic)
Referencia del lenguaje Visual Basic

Switch (Función)
Evalúa una lista de expresiones y devuelve un valor de Object que se corresponde con la primera expresión de la lista que es
True.

Public Function Switch( _


ByVal ParamArray VarExpr() As Object _
) As Object

Parámetros
VarExpr
Obligatorio. Matriz de parámetros Object. Debe tener un número par de elementos. Puede proporcionar una lista de
variables o expresiones Object separadas por comas, o una matriz unidimensional de elementos Object.
Excepciones
Tipo de excepción Número de error Condición
ArgumentException 5 El número de argumentos es impar.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, debe considerarse la posibilidad de sustituir dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
El argumento proporcionado para VarExpr está compuesto de valores y expresiones emparejadas. La función Switch evalúa
las expresiones numeradas impares desde el índice más bajo al más alto en VarExpr, y devuelve el valor numérico par
asociado a la primera expresión que se evalúa como True. Por ejemplo, si VarExpr(0) es True, Switch devuelve VarExpr(1) y si
VarExpr(0) es False pero VarExpr(2) es True, Switch devuelve VarExpr(3), etc.
Si no se proporciona el argumento VarExpr, Switch devuelve Nothing.
Nota
Las expresiones de la lista de argumentos pueden incluir llamadas a funciones. Mientras prepara la lista de argumentos para
llamar a la función Switch, el compilador de Visual Basic llama a cada una de las funciones de todas las expresiones. Esto sig
nifica que no puede confiar en que no se esté llamando a una función determinada si una expresión anterior de la lista de ar
gumentos es True.

Ejemplo
En el ejemplo siguiente se utiliza la función Switch para devolver el nombre de un idioma que coincide con el nombre de una
ciudad. Requiere que Option Strict sea Off.
VB
Function matchLanguage(ByVal cityName As String) As String
Return CStr(Microsoft.VisualBasic.Switch( _
cityName = "London", "English", _
cityName = "Rome", "Italian", _
cityName = "Paris", "French"))
End Function

Dado que el espacio de nombres System.Diagnostics contiene también una clase denominada Switch, las llamadas a la función
Switch deben calificarse con el espacio de nombres Microsoft.VisualBasic.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Interaction
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Choose (Función)
IIf (Función)
Instrucción Select...Case (Visual Basic)
Conceptos
Matrices de parámetros
Referencia del lenguaje Visual Basic

SYD (Función)
Devuelve un valor de tipo Double que indica la amortización de un activo, durante un período especificado, según el método
de la suma de los dígitos de los años.

Function SYD( _
ByVal Cost As Double, _
ByVal Salvage As Double, _
ByVal Life As Double, _
ByVal Period As Double _
) As Double

Parámetros
Cost
Requerido. Valor de tipo Double que indica el costo inicial del activo.
Salvage
Requerido. Valor de tipo Double que indica el valor del activo al término de su vida útil.
Life
Requerido. Valor de tipo Double que indica la duración de la vida útil del activo.
Period
Requerido. Valor de tipo Double que indica el período para el que se calcula la amortización del activo.
Excepciones
Tipo de excepción Número de error Condición
ArgumentException 9B07D280-66C6-4EA5-A8ED-5DDB0036F877 Salvage < 0, Period > Life o Period <=0.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
Los argumentos Life y Period deben expresarse en las mismas unidades. Por ejemplo, si Life se indica en meses, Period
también se debe indicar en meses. Todos los argumentos deben ser números positivos.
Ejemplo
En este ejemplo se utiliza la función SYD para devolver la amortización de un activo en un período especificado, dados el costo
inicial del activo (InitCost), el valor de rescate al final de la vida útil del activo (SalvageVal) y la duración total del activo en
años (LifeTime).
VB
Dim InitCost, SalvageVal, LifeTime, DepYear As Double
Dim Fmt As String = "###,##0.00"
InitCost = CDbl(InputBox("What's the initial cost of the asset?"))
SalvageVal = CDbl(InputBox("Enter the asset's value at end of its life."))
LifeTime = CDbl(InputBox("What's the asset's useful life in years?"))
' Use the SLN function to calculate the deprecation per year.
Dim SlnDepr As Double = SLN(InitCost, SalvageVal, LifeTime)
Dim msg As String = "The depreciation per year: " & Format(SlnDepr, Fmt)
msg &= vbCrLf & "Year" & vbTab & "Linear" & vbTab & "Doubling" & vbCrLf
' Use the SYD and DDB functions to calculate the deprecation for each year.
For DepYear = 1 To LifeTime
msg &= DepYear & vbTab & _
Format(SYD(InitCost, SalvageVal, LifeTime, DepYear), Fmt) & vbTab & _
Format(DDB(InitCost, SalvageVal, LifeTime, DepYear), Fmt) & vbCrLf
Next
MsgBox(msg)

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Financial
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
DDB (Función)
SLN (Función)
Resumen financiero
ArgumentException
Referencia del lenguaje Visual Basic

SystemTypeName (Función)
Devuelve un valor String que contiene el nombre del tipo de datos del sistema de una variable.

Public Function SystemTypeName(ByVal VbName As String) As String

Parámetros
VbName
Requerido. Una variable String que contiene un nombre de tipo Visual Basic.
Comentarios
SystemTypeName devuelve el nombre de tipo de Common Language Runtime (CLR) completo correspondiente al nombre
de tipo de Visual Basic. Por ejemplo, si VbName contiene "Date", SystemTypeName devuelve "System.DateTime". Si
SystemTypeName no reconoce el valor de VbName, devuelve Nothing (no la cadena "Nothing").
Ejemplo
En el ejemplo siguiente se utiliza la función SystemTypeName para devolver nombres de tipos de datos de varias variables.
VB
Dim vbLongName As String = "Long"
Dim vbDateName As String = "Date"
Dim vbBadName As String = "Number"
Dim testSysName As String
testSysName = SystemTypeName(vbLongName)
' The preceding call returns "System.Int64".
testSysName = SystemTypeName(vbDateName)
' The preceding call returns "System.DateTime".
testSysName = SystemTypeName(vbBadName)
' The preceding call returns Nothing.

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Information
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Resumen de tipos de datos (Visual Basic)
String (Tipo de datos, Visual Basic)
VbTypeName (Función)
Referencia del lenguaje Visual Basic

TAB (Función)
Se utiliza con la función Print o PrintLine para ubicar los resultados.

Public Overloads Function TAB() As TABInfo


' -or-
Public Overloads Function TAB(ByVal Column As Short) As TABInfo

Parámetros
Column
Opcional. Número de columnas desplazadas antes de mostrar o imprimir la próxima expresión de una lista. Si se omite, TAB
desplazará el punto de inserción al principio de la siguiente zona de impresión.
Comentarios
Si la posición actual de impresión en la línea actual es mayor que Column, TAB saltará al valor de columna que sea igual a
Column en la siguiente línea de salida. Si Column es menor que 1, TAB cambia la posición de impresión a la columna 1. Si
Column es mayor que el ancho de la línea de salida, TAB calcula la siguiente posición de impresión mediante la fórmula:
Column Mod width
Por ejemplo, si width es 80 y se especifica TAB(90), la próxima impresión comenzará en la columna 10 (resto de 90/80). Si
Column es menor que la posición de impresión actual, la impresión comenzará en la línea siguiente, en la posición de
impresión calculada. Si la posición de impresión calculada es mayor que la posición de impresión actual, la impresión
comenzará en la posición de impresión calculada en la misma línea.
La posición de impresión más a la izquierda de una línea de salida es siempre 1. Cuando se utiliza la función Print o PrintLine
para imprimir en archivos, la posición de impresión más a la derecha será el ancho actual del archivo de salida, que puede
definirse mediante la función FileWidth.
La función TAB también puede utilizarse con la función WriteLine. No se puede utilizar con
System.Diagnostics.Debug.WriteLine ni System.Console.WriteLine.
Nota
Asegúrese de que las columnas tabulares sean lo suficientemente amplias como para dar cabida a letras anchas.

Ejemplo
En este ejemplo se utiliza la función TAB para ubicar el resultado en un archivo y en la ventana Resultados.
VB
FileOpen(1, "TESTFILE", OpenMode.Output) ' Open file for output.
' The second word prints at column 20.
Print(1, "Hello", TAB(20), "World.")
' If the argument is omitted, cursor is moved to the next print zone.
Print(1, "Hello", TAB(), "World")
FileClose(1)

Notas para desarrolladores de dispositivos inteligentes


Esta función no es compatible.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: FileSystem
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Mod (Operador, Visual Basic)
Print, PrintLine (Funciones)
Space (Función, Visual Basic)
SPC (Función)
FileWidth (Función)
Referencia del lenguaje Visual Basic

TimeSerial (Función, Visual Basic)


Devuelve un valor Date que representa una hora, minuto y segundo especificados, con la información de la fecha establecida
en el día 1 de enero del año 1.

Public Function TimeSerial( _


ByVal Hour As Integer, _
ByVal Minute As Integer, _
ByVal Second As Integer _
) As DateTime

Parámetros
Hour
Obligatorio. Expresión Integer comprendida entre 0 y 23. No obstante, también se aceptan valores que estén fuera de este
intervalo.
Minute
Obligatorio. Expresión Integer comprendida entre 0 y 59. No obstante, también se aceptan valores que estén fuera de este
intervalo. El valor de Minute se suma a la hora calculada, por lo que un valor negativo especifica unos minutos antes de dicha
hora.
Second
Obligatorio. Expresión Integer comprendida entre 0 y 59. No obstante, también se aceptan valores que estén fuera de este
intervalo. El valor de Second se suma al minuto calculado, por lo que un valor negativo especifica unos segundos antes de
dicho minuto.
Excepciones
Tipo de excepción Número de error Condición
ArgumentException 5 El argumento queda fuera del intervalo –2.147.483.648 a 2.147.483.647

ArgumentOutOfRangeException 9 La hora calculada es menos de 24 horas negativas.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, debe considerarse la posibilidad de sustituir dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
El siguiente ejemplo muestra valores de argumento negativo, cero y positivo. La función TimeSerial devuelve una hora que
representa 15 minutos antes de tres horas antes del mediodía, o 08:45:00 a.m.

Dim alarmTime As Date = TimeSerial(12 - 3, -15, 0)

Si Minute o Second excede su intervalo normal, se aplica a la siguiente unidad mayor, según corresponda. Por ejemplo, si se
especifican 75 minutos, se evalúa como una hora y 15 minutos.
TimeSerial reduce el módulo total de segundos 86.400, que es el número de segundos que tiene un día. Por ello, el valor
devuelto siempre está entre 00:00:00 y 23:59:59.
El tipo de datos Date incluye componentes de fecha. TimeSerial los establece todos en 1, de tal forma que el valor devuelto
representa el primer día del año 1. Sin embargo, si los valores de los argumentos hacen que el tiempo calculado supere las 24
horas, el día se incrementa según sea necesario. En el ejemplo siguiente, los valores de Hour y Minute dan como resultado una
hora combinada de más de 24 horas.

MsgBox(TimeSerial(23, 75, 0))


' The preceding statement displays "1/2/0001 12:15:00 AM".
Si los valores de los argumentos tienen como consecuencia una hora calculada negativa, la información de fecha se establece
en 1/1/0001 y la información de hora se ajusta a un valor entre 00:00:00 y 23:59:59. Sin embargo, si la hora calculada es
menor de 24 horas negativas, se produce un error ArgumentOutOfRangeException.
Dado que todos los valores Date se basan en una estructura System.DateTime, sus métodos proporcionan opciones
adicionales para ensamblar un valor Date. Por ejemplo, puede emplear uno de los constructores DateTime sobrecargados
para rellenar una variable Date que utilice la combinación deseada de componentes. El ejemplo siguiente establece
newDateTime en 6 de mayo de 1978, una décima de segundo antes de las 8:30 de la mañana:

Dim newDateTime As Date = New Date(1978, 5, 6, 8, 29, 59, 900)

Ejemplo
En este ejemplo se utiliza la función TimeSerial para devolver un valor de tiempo para la hora, minuto y segundo
especificados.
VB
Dim thisTime As Date
thisTime = TimeSerial(16, 35, 17)

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: DateAndTime
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
DateSerial (Función, Visual Basic)
DateValue (Función, Visual Basic)
Hour (Función, Visual Basic)
Minute (Función)
Now (Propiedad)
Second (Función, Visual Basic)
TimeValue (Función, Visual Basic)
Referencia del lenguaje Visual Basic

TimeValue (Función, Visual Basic)


Devuelve un valor Date que contiene información sobre la hora representada por una cadena, con la información sobre la
fecha establecida en el 1 de enero del año 1.

Public Function TimeValue(ByVal StringTime As String) As DateTime

Parámetros
StringTime
Requerido. Expresión de tipo String que representa un valor de fecha u hora desde las 00:00:00 del 1 de enero del año 1
hasta las 23:59:59 del 31 de diciembre de 9999.
Excepciones
Tipo de excepción Número de error Condición
InvalidCastException F72E9E21-F475-43F2-9464-29C8AD27B6C2 StringTime incluye información de fecha no válida.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
Se pueden introducir horas válidas utilizando un reloj de 12 horas o de 24 horas. Por ejemplo, "2:24 P.M." y "14:24" son
argumentos StringTime válidos.
Si el argumento StringTime incluye información de fecha, TimeValue no la incluye en el valor devuelto. Sin embargo, si
StringTime incluye información de fecha no válida, por ejemplo el "32 de enero", se produce un error de
InvalidCastException.
Ejemplo
El ejemplo siguiente utiliza la función TimeValue para convertir una cadena en una hora. También se pueden utilizar literales
de fecha para asignar directamente una hora a una variable Date.
VB
Dim thisTime As Date
thisTime = TimeValue("4:35:17 PM")

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: DateAndTime
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
DateSerial (Función, Visual Basic)
DateValue (Función, Visual Basic)
Hour (Función, Visual Basic)
Minute (Función)
Now (Propiedad)
Second (Función, Visual Basic)
TimeSerial (Función, Visual Basic)
DateTime
Referencia del lenguaje Visual Basic

Trim, LTrim y RTrim (Funciones)


Devuelve una cadena que contiene una copia de una cadena dada sin espacios iniciales (LTrim), sin espacios finales (RTrim) o
sin espacios iniciales ni finales (Trim).

Public Shared Function LTrim(ByVal str As String) As String


Public Shared Function RTrim(ByVal str As String) As String
Public Shared Function Trim(ByVal str As String) As String

Parámetros
str
Requerido. Cualquier expresión String válida.
Comentarios
Las funciones LTrim, RTrim y Trim quitan los espacios de los finales de las cadenas. Para quitar otras formas de espacio en
blanco, como caracteres de tabulación, use el método System.String.Trim.
Ejemplo
En este ejemplo se utiliza la función LTrim para suprimir los espacios iniciales y la función RTrim para suprimir los espacios
finales en una variable de cadena. Se utiliza la función Trim para suprimir ambos tipos de espacios.
VB
' Initializes string.
Dim TestString As String = " <-Trim-> "
Dim TrimString As String
' Returns "<-Trim-> ".
TrimString = LTrim(TestString)
' Returns " <-Trim->".
TrimString = RTrim(TestString)
' Returns "<-Trim->".
TrimString = LTrim(RTrim(TestString))
' Using the Trim function alone achieves the same result.
' Returns "<-Trim->".
TrimString = Trim(TestString)

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Strings
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Resumen de manipulación de cadenas
Left (Función, Visual Basic)
Right (Función, Visual Basic)
Trim
Referencia del lenguaje Visual Basic

TypeName (Función, Visual Basic)


Devuelve un valor String que contiene información del tipo de datos de una variable.

Public Function TypeName(ByVal VarName As Object) As String

Parámetros
VarName
Obligatorio. Variable Object. Si Option Strict es Off, puede pasar una variable de cualquier tipo de datos excepto una
estructura.
Comentarios
En la siguiente tabla se muestran los valores String devueltos por TypeName para el contenido distinto de VarName.
Contenido de VarName Cadena devuelta
Valor True o False de 16 bits "Boolean"

Valor binario de 8 bits "Byte"

Carácter de 16 bits "Char"

Valor de fecha y hora de 64 bits "Date"

Tipo de referencia que indica que los datos faltan o no existen "DBNull"

Valor numérico de punto fijo de 128 bits "Decimal"

Valor numérico de punto flotante de 64 bits "Double"

Valor entero de 32 bits "Integer"

Referencia que apunta a un objeto no especializado "Object"

Referencia que apunta a un objeto especializado creado a partir de la clase objectclass "objectclass"

Valor entero de 64 bits "Long"

Tipo de referencia sin ningún objeto actualmente asignado "Nothing"

Valor entero con signo de 8 bits "SByte"

Valor entero de 16 bits "Short"

Valor numérico de punto flotante de 32 bits "Single"

Referencia que apunta a una cadena de caracteres de 16 bits "String"

Valor entero sin signo de 32 bits "UInteger"

Valor entero sin signo de 64 bits "ULong"


Valor entero sin signo de 16 bits "UShort"

Si VarName es una matriz, la cadena devuelta puede ser cualquiera de las cadenas de la tabla anterior seguida de paréntesis
vacíos. Por ejemplo, si VarName apunta a una matriz de enteros, TypeName devuelve "Integer()".
Cuando TypeName devuelve el nombre de un tipo de referencia, tal como una clase, sólo devuelve el nombre en sí, no el
nombre completo. Por ejemplo, si VarName apunta a un objeto de clase System.Drawing.Printing.PaperSource, TypeName
devuelve "PaperSource". Observe que si la variable está declarada como cierto tipo de clase pero no tiene un objeto asignado a
ella, TypeName devuelve "Nothing".
Ejemplo
En este ejemplo se utiliza la función TypeName para devolver información del tipo de datos de varias variables.
VB
Dim testType As String
Dim strVar As String = "String for testing"
Dim decVar As Decimal
Dim intVar, arrayVar(5) As Integer
testType = TypeName(strVar)
' The preceding call returns "String".
testType = TypeName(decVar)
' The preceding call returns "Decimal".
testType = TypeName(intVar)
' The preceding call returns "Integer".
testType = TypeName(arrayVar)
' The preceding call returns "Integer()".

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Information
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Resumen de tipos de datos (Visual Basic)
IsArray (Función, Visual Basic)
IsDate (Función, Visual Basic)
IsDBNull (Función)
IsError (Función)
IsNothing (Función)
IsNumeric (Función, Visual Basic)
IsReference (Función)
Referencia del lenguaje Visual Basic

UBound (Función, Visual Basic)


Devuelve el mayor subíndice disponible para la dimensión indicada de una matriz.

Public Function UBound( _


ByVal Array As System.Array, _
Optional ByVal Rank As Integer = 1 _
) As Integer

Parámetros
Array
Requerido. Matriz de cualquier tipo de datos. La matriz en la que desea buscar el mayor subíndice posible de una dimensión.
Rank
Opcional. Integer. Dimensión para la que se va a devolver el mayor subíndice posible. Utilice 1 para la primera dimensión, 2
para la segunda y así sucesivamente. Si se omite Rank, se supone 1.
Valor devuelto
Integer. El valor máximo que puede contener el subíndice de la dimensión especificada. Si Array sólo incluye un elemento,
UBound devuelve 0. Si Array no incluye ningún elemento, por ejemplo si es una cadena de longitud cero, UBound devuelve -
1.
Excepciones
Tipo de excepción Número de error Condición
ArgumentNullException D0344A65-EC02-4CAF-8D3C-9977392CA353 ArrayesNothing

RankException D0344A65-EC02-4CAF-8D3C-9977392CA353 Rank es menor que 1 o Rank es mayor que el rango de


Array.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
Puesto que los subíndices de matriz empiezan en 0, la longitud de una dimensión es mayor en una unidad que el mayor índice
disponible para esa dimensión.
Para una matriz con las siguientes dimensiones, UBound devuelve los valores de la siguiente tabla:

Dim a(100, 5, 4) As Byte

Llamada a UBound Valor devuelto


UBound(a, 1)

UBound(a, 2)

UBound(a, 3)

Se puede utilizar UBound para determinar el número total de elementos de una matriz, aunque se debe ajustar el valor
devuelto puesto que el subíndice empieza en 0. En el ejemplo siguiente se calcula el tamaño total de la matriz a del ejemplo
anterior:

Dim total As Integer


total = (UBound(A, 1) + 1) * (UBound(A, 2) + 1) * (UBound(A, 3) + 1)
El valor calculado para total es 3030, que es 101 * 6 * 5.
Ejemplo
En el ejemplo siguiente se utiliza la función UBound para determinar el mayor subíndice disponible para la dimensión
indicada de una matriz.
VB
Dim highest, bigArray(10, 15, 20), littleArray(6) As Integer
highest = UBound(bigArray, 1)
highest = UBound(bigArray, 3)
highest = UBound(littleArray)
' The three calls to UBound return 10, 20, and 6 respectively.

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Information
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
LBound (Función, Visual Basic)
Instrucción Dim (Visual Basic)
Instrucción ReDim (Visual Basic)
ArgumentException
RankException
Referencia del lenguaje Visual Basic

UCase (Función, Visual Basic)


Devuelve una cadena o un carácter que contiene la cadena especificada convertida en mayúsculas.

Public Shared Function UCase(ByVal Value As Char) As Char


' -or-
Public Shared Function UCase(ByVal Value As String) As String

Parámetros
Value
Requerido. Cualquier expresión String o Char válida.
Comentarios
Sólo las letras minúsculas se convierten en mayúsculas; todas la letras mayúsculas y caracteres sin letra permanecen
inalterados.
Esta función utiliza la información de referencia cultural de la aplicación al manipular la cadena para que los cambios de
mayúsculas y minúsculas sean los adecuados para la configuración regional en la que se usa la aplicación.
Nota de seguridad
Si la aplicación toma decisiones sobre la seguridad basándose en el resultado de una comparación o de una operación de ca
mbio de mayúsculas y minúsculas, la operación debe utilizar el método
System.String.Compare(System.String,System.String,System.StringComparison) y pasar Ordinal o OrdinalIgnoreCase al argu
mento comparisonType. Para obtener más información, vea Cómo afecta la referencia cultural a las cadenas en Visual Basic.

Ejemplo
En este ejemplo se utiliza la función UCase para devolver la versión en mayúsculas de una cadena.
VB
' String to convert.
Dim LowerCase As String = "Hello World 1234"
' Returns "HELLO WORLD 1234".
Dim UpperCase As String = UCase(LowerCase)

Requisitos
Espacio de nombres:Microsoft.VisualBasic
Módulo: Strings
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Resumen de manipulación de cadenas
LCase (Función, Visual Basic)
Otros recursos
Cadenas en Visual Basic
Introducción a las cadenas en Visual Basic
Referencia del lenguaje Visual Basic

Val (Función)
Devuelve los números contenidos en una cadena como un valor numérico del tipo adecuado.

Public Overloads Function Val(ByVal InputStr As String) As Double


' -or-
Public Overloads Function Val(ByVal Expression As Object) As Double
' -or-
Public Overloads Function Val(ByVal Expression As Char) As Integer

Parámetros
Expression, InputStr
Obligatorio. Cualquier expresión String, variable Object o valor Char válidos. Si Expression es del tipo Object, su valor debe
poder convertirse a String o se producirá un error ArgumentException.
Excepciones
Tipo de excepción Número de error Condición
OverflowException 6 InputStr es demasiado grande.

InvalidCastException 13 Número mal formado.

ArgumentException 438 Expresión de tipo Object no convertible a String.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, debe considerarse la posibilidad de sustituir dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
La función Val deja de leer la cadena en el primer carácter que no puede reconocer como parte de un número. Los símbolos y
caracteres que se suelen considerar parte de valores numéricos, como signos de moneda y comas, no se reconocen. Sin
embargo, la función reconoce los prefijos de base &O (para octal) y &H (para hexadecimal). Los espacios en blanco, los
tabuladores y los avances de línea se eliminan del argumento.
La siguiente llamada devuelve el valor 1615198:

Val(" 1615 198th Street N.E.")

La siguiente llamada devuelve el valor decimal -1:

Val("&HFFFF")

Nota
La función Val sólo reconoce el punto (.) como separador decimal válido. Si se utilizan otros separadores decimales, por eje
mplo en aplicaciones internacionales, debe utilizar CDbl o CInt para convertir una cadena en un número. Para convertir la re
presentación de cadena de un número de una referencia cultural determinada en un valor numérico, utilice el método Parse
(String, IFormatProvider) de tipo numérico. Por ejemplo, utilice
System.Double.Parse(System.String,System.IFormatProvider) al convertir una cadena en Double.

Ejemplo
En el ejemplo siguiente se utiliza la función Val para devolver los números incluidos en cada cadena. Val detiene la conversión
en el primer carácter que no puede interpretar como un dígito numérico, modificador numérico, puntuación numérica o
espacio en blanco.
VB
Dim valResult As Double
' The following line of code sets valResult to 2457.
valResult = Val("2457")
' The following line of code sets valResult to 2457.
valResult = Val(" 2 45 7")
' The following line of code sets valResult to 24.
valResult = Val("24 and 57")

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Conversion
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Str (Función)
Funciones de conversión de tipos
OverflowException
InvalidCastException
ArgumentException
Referencia del lenguaje Visual Basic

VarType (Función, Visual Basic)


Devuelve un valor Integer que contiene la clasificación del tipo de datos de una variable.

Public Function VarType(ByVal VarName As Object) As VariantType

Parámetros
VarName
Requerido. Variable Object. Si Option Strict tiene el valor Off, puede pasar una variable de cualquier tipo de datos excepto
una estructura.
Comentarios
El valor entero devuelto por VarType es un miembro de VariantType (Enumeración).
En la siguiente tabla se muestran los valores devueltos por VarType para casos especiales de VarName.
Tipo de datos representado por VarN Valor devuelto por VarType
ame
Nothing (Visual Basic) VariantType.Object

DBNull VariantType.Null

Enumeración Tipo de datos subyacente (SByte, Byte, Short, UShort, Integer, UInteger, Long o
ULong)

Matriz OR bit a bit de tipo de elemento de matriz y VariantType.Array

Matriz de matrices OR bit a bit O de VariantType.Object y VariantType.Array

Estructura (System.ValueType) VariantType.UserDefinedType

Exception VariantType.Error

Desconocido VariantType.Object
Ejemplo
En el ejemplo siguiente se utiliza la función VarType para devolver información acerca de la clasificación del tipo de datos de
varias variables.
VB
Dim testString As String = "String for testing"
Dim testObject As New Object
Dim testNumber, testArray(5) As Integer
Dim testVarType As VariantType
testVarType = VarType(testVarType)
' Returns VariantType.Integer.
testVarType = VarType(testString)
' Returns VariantType.String.
testVarType = VarType(testObject)
' Returns VariantType.Object.
testVarType = VarType(testNumber)
' Returns VariantType.Integer.
testVarType = VarType(testArray)
' Returns the bitwise OR of VariantType.Array and VariantType.Integer.
Notas para desarrolladores de dispositivos inteligentes
Esta función no es compatible.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Information
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Resumen de tipos de datos (Visual Basic)
Object (Tipo de datos)
VariantType (Enumeración)
Referencia del lenguaje Visual Basic

VbTypeName (Función)
Devuelve un valor String que contiene el nombre del tipo de datos de Visual Basic de una variable.

Public Function VbTypeName(ByVal UrtName As String) As String

Parámetros
UrtName
Requerido. Variable de tipo String que contiene un nombre de tipo utilizado por Common Language Runtime.
Comentarios
VbTypeName devuelve el nombre de tipo Visual Basic correspondiente al nombre de tipo Common Language Runtime. Por
ejemplo, si UrtName contiene "Int32" o "System.Int32", VbTypeName devuelve "Integer". Si VbTypeName no reconoce el
valor de UrtName, devuelve Nothing (no la cadena "Nothing").
El nombre de tipo en UrtName se puede obtener desde diversos orígenes, por ejemplo, desde la propiedad Name de la matriz
MemberInfo de la clase Type.
Ejemplo
En el ejemplo siguiente se utiliza la función VbTypeName para devolver nombres de tipos de datos de varias variables.
VB
Dim sysDateName As String = "System.DateTime"
Dim sysShortName As String = "Int16"
Dim sysBadName As String = "Nonsense"
Dim testVbName As String
testVbName = VbTypeName(sysDateName)
' Returns "Date".
testVbName = VbTypeName(sysShortName)
' Returns "Short".
testVbName = VbTypeName(sysBadName)
' Returns Nothing.

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Information
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Resumen de tipos de datos (Visual Basic)
String (Tipo de datos, Visual Basic)
SystemTypeName (Función)
Referencia del lenguaje Visual Basic

Weekday (Función, Visual Basic)


Devuelve un valor Integer que contiene un número que representa el día de la semana.

Public Function Weekday( _


ByVal DateValue As DateTime, _
Optional ByVal DayOfWeek As FirstDayOfWeek = FirstDayOfWeek.Sunday _
) As Integer

Parámetros
DateValue
Requerido. Valor Date del cual se desea determinar el día de la semana.
DayOfWeek
Opcional. Un valor elegido de la enumeración FirstDayOfWeek que especifica el primer día de la semana. Si no se
especifica, se utiliza FirstDayOfWeek.Sunday.
Valores
El argumento DayOfWeek puede tener uno de los siguientes valores:
Valor de enumeración Valor Descripción
FirstDayOfWeek.System 0 Primer día de la semana especificado en la configuración del sistema

FirstDayOfWeek.Sunday 1 Domingo (predeterminado)

FirstDayOfWeek.Monday 2 Lunes (de acuerdo con la norma ISO 8601, sección 3.17)

FirstDayOfWeek.Tuesday 3 Martes

FirstDayOfWeek.Wednesday 4 Miércoles

FirstDayOfWeek.Thursday 5 Jueves

FirstDayOfWeek.Friday 6 Viernes

FirstDayOfWeek.Saturday 7 Sábado
Excepciones
Tipo de excepción Número de error Condición
ArgumentException 5 DayOfWeek es menor que 0 o mayor que 7.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
El valor devuelto por la función Weekday es el día de la semana al que corresponde DateValue, relativo al primer día de la
semana definido por el valor DayOfWeek. Por ejemplo, si la fecha hace referencia a un miércoles y el primer día de la semana
se especifica como lunes, la acción devuelve 3.
Nota
Weekday utiliza la configuración de calendario actual de la propiedad CurrentCulture de la clase CultureInfo en el espacio d
e nombres System.Globalization. Los valores de CurrentCulture predeterminados están determinados por la configuración
del Panel de control.

Ejemplo
En el ejemplo siguiente se utiliza la función Weekday para obtener el día de la semana de una fecha especificada.
VB
Dim oldDate As Date
Dim oldWeekDay As Integer
oldDate = #2/12/1969#
oldWeekDay = Weekday(oldDate)
' oldWeekDay now contains 4 because thisDate represents a Wednesday.

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: DateAndTime
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Day (Función, Visual Basic)
Month (Función, Visual Basic)
Now (Propiedad)
WeekdayName (Función, Visual Basic)
Year (Función, Visual Basic)
DatePart (Función, Visual Basic)
DateTime
Referencia del lenguaje Visual Basic

WeekdayName (Función, Visual Basic)


Devuelve un valor String que contiene el nombre del día de la semana especificado.

Public Function WeekdayName( _


ByVal Weekday As Integer, _
Optional ByVal Abbreviate As Boolean = False, _
Optional ByVal FirstDayOfWeekValue As FirstDayOfWeek = FirstDayOfWeek.System _
) As String

Parámetros
Weekday
Obligatorio. Obligatorio. Integer. Designación numérica del día de la semana, entre 1 y 7; 1 indica el primer día de la semana
y 7 indica el último día de la semana. Las identidades del primer y último día dependen de la configuración de
FirstDayOfWeekValue.
Abbreviate
Opcional. Valor Boolean que indica si se abrevia el nombre del día de la semana. Si se omite, el valor predeterminado es
False, que significa que el nombre del día de la semana no se abrevia.
FirstDayOfWeekValue
Opcional. Un valor elegido de la enumeración FirstDayOfWeek que especifica el primer día de la semana. Si no se
especifica, se utiliza FirstDayOfWeek.System.
Valores
El argumento FirstDayOfWeekValue puede tener uno de los siguientes valores:
Valor de enumeración Valo Descripción
r
FirstDayOfWeek.System 0 Primer día de la semana especificado en la configuración del sistema (valor predetermina
do)

FirstDayOfWeek.Sunday 1 Domingo

FirstDayOfWeek.Monday 2 Lunes (de acuerdo con la norma ISO 8601, sección 3.17)

FirstDayOfWeek.Tuesday 3 Martes

FirstDayOfWeek.Wednesda 4 Miércoles
y

FirstDayOfWeek.Thursday 5 Jueves

FirstDayOfWeek.Friday 6 Viernes

FirstDayOfWeek.Saturday 7 Sábado
Excepciones
Tipo de excepció Número de err Condición
n or
ArgumentException 5 Weekday es menor que 1 o mayor que 7, o FirstDayOfWeekValue es menor que 0 o may
or que 7.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
La cadena devuelta por WeekdayName no depende únicamente de los argumentos de entrada, sino también de los valores
de la Configuración regional especificados en el Panel de control de Windows.
Nota
WeekdayName utiliza la configuración de calendario actual de la propiedad CurrentCulture de la clase CultureInfo en el esp
acio de nombres System.Globalization. Los valores de CurrentCulture predeterminados están determinados por la configur
ación del Panel de control.

Ejemplo
En el ejemplo siguiente se utiliza la función Weekday para obtener el día de la semana a partir de una fecha especificada y la
función WeekDayName para obtener el nombre del día de la semana a partir de su número.
VB
Dim oldDate As Date
Dim oldWeekDayName As String
oldDate = #2/12/1969#
oldWeekDayName = WeekdayName(Weekday(oldDate))
' oldWeekDayName now contains "Wednesday".

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: DateAndTime
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Day (Función, Visual Basic)
Month (Función, Visual Basic)
Now (Propiedad)
Weekday (Función, Visual Basic)
MonthName (Función, Visual Basic)
Year (Función, Visual Basic)
DatePart (Función, Visual Basic)
DateTime
Referencia del lenguaje Visual Basic

Write, WriteLine (Funciones)


Escriben datos en un archivo secuencial. Los datos escritos con Write normalmente se leen desde un archivo con Input.

Public Sub Write( _


ByVal FileNumber As Integer, _
ByVal ParamArray Output As Object _
)
' -or-
Public Sub WriteLine( _
ByVal FileNumber As Integer, _
ByVal ParamArray Output() As Object _
)

Parámetros
FileNumber
Obligatorio. Expresión Integer que contiene cualquier número de archivo válido.
Output
Opcional. Una o varias expresiones delimitadas por coma para escribir en un archivo.
Excepciones
Tipo de excepción Número de error Condición
IOException 52 FileNumber no existe.

IOException 54 El modo de archivo no es válido.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, debe considerarse la posibilidad de sustituir dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
Las funciones Write y WriteLine se suministran a efectos de compatibilidad con versiones anteriores y pueden afectar al
rendimiento. En el caso de aplicaciones no heredadas, el objeto My.Computer.FileSystem proporciona un rendimiento
superior. Para obtener más información, vea Acceso a archivos con Visual Basic.
Si se omite Output, se escribirá una línea en blanco en el archivo. Las expresiones múltiples pueden separarse con comas.
A diferencia de la función Print, la función Write inserta comas entre los elementos y comillas a ambos extremos de las
cadenas a medida que se van escribiendo en el archivo. No es necesario colocar delimitadores explícitos en la lista. Cuando
Write se utiliza para escribir datos en un archivo, sólo son compatibles los formatos de datos numéricos, Boolean, date, null y
Error. A continuación se incluyen algunas convenciones universales que se asumen para que los datos pueden siempre leerse
e interpretarse correctamente mediante Input, con independencia de la configuración regional:
Los datos numéricos siempre se escribirán utilizando la coma como separador decimal.
Con datos de tipo Boolean, se imprime #TRUE# o #FALSE#. Las palabras clave True y False no se traducen,
independientemente de la configuración regional.
Los datos de fecha se escribirán en el archivo según el formato de fecha universal. Cuando alguno de los componentes
de fecha y hora falte o sea igual a cero, tan sólo se escribirá en el archivo la parte proporcionada.
Si los datos de Output están vacíos, no se escribirá nada en el archivo. Sin embargo, en el caso de datos nulos, se
escribirá #NULL#.
Con datos de tipo Error, el resultado aparece como #ERROR errorcode#. Independientemente de la configuración
regional, la palabra clave Error no se traducirá.
WriteLine inserta un carácter de nueva línea (es decir, un retorno de carro o avance de línea, o Chr(13) + Chr(10)) una vez
que ha se escrito el último carácter de Output en el archivo.
Se pueden incrustar comillas en una cadena utilizando comillas dobles o "". Por ejemplo,
VB
Dim x As String = "Double quotation marks aren't ""difficult"" to handle."

devuelve una cadena con el valor Double quotation marks aren't "difficult" to handle.

Para escribir en un archivo con las funciones Write o WriteLine, es necesario tener acceso de tipo Append desde la
enumeración FileIOPermissionAccess. Para obtener más información, vea FileIOPermissionAccess (Enumeración).
Ejemplo
En este ejemplo se utiliza la función Write para escribir datos sin formato en un archivo secuencial.
VB
FileOpen(1, "TESTFILE", OpenMode.Output) ' Open file for output.
Write(1, "This is a test.") ' Print text to file.
WriteLine(1) ' Print blank line to file.
WriteLine(1, "Zone 1", TAB(), "Zone 2") ' Print in two print zones.
WriteLine(1, "Hello", " ", "World") ' Separate strings with space.
WriteLine(1, SPC(5), "5 leading spaces ") ' Print five leading spaces.
WriteLine(1, TAB(10), "Hello") ' Print word at column 10.

' Assign Boolean, Date, and Error values.


Dim aBool As Boolean
Dim aDate As DateTime
aBool = False
aDate = DateTime.Parse("February 12, 1969")

' Dates and Booleans are translated using locale settings of


' your system.
WriteLine(1, aBool, " is a Boolean value")
WriteLine(1, aDate, " is a date")
FileClose(1) ' Close file.

Notas para desarrolladores de dispositivos inteligentes


Esta función no es compatible.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: FileSystem
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Tareas
Cómo: Escribir texto en archivos en Visual Basic
Cómo: Escribir texto en archivos con un objeto StreamWriter en Visual Basic
Referencia
Input (Función)
FileOpen (Función)
Print, PrintLine (Funciones)
Otros recursos
Acceso a archivos con Visual Basic
Referencia del lenguaje Visual Basic

Year (Función, Visual Basic)


Devuelve un valor Integer entre 1 y 9999 que representa el año.

Public Function Year(ByVal DateValue As DateTime) As Integer

Parámetros
DateValue
Requerido. Valor Date del cual se desea extraer el año.
Comentarios
También se puede obtener el año llamando a DatePart y especificando DateInterval.Year para el argumento Interval.
Ejemplo
En el ejemplo siguiente se utiliza la función Year para obtener el año de una fecha especificada. En el entorno de desarrollo, el
literal de fecha se muestra en formato corto de fecha con los valores de configuración regional del código correspondiente.
VB
Dim thisDate As Date
Dim thisYear As Integer
thisDate = #2/12/1969#
thisYear = Year(thisDate)
' thisYear now contains 1969.

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: DateAndTime
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Day (Función, Visual Basic)
Month (Función, Visual Basic)
Now (Propiedad)
Weekday (Función, Visual Basic)
DatePart (Función, Visual Basic)
DateTime
ArgumentOutOfRangeException
Referencia del lenguaje Visual Basic

Palabras clave (Visual Basic)


Los temas de esta sección contienen las tablas de las palabras clave del lenguaje Visual Basic, tanto las reservadas como las
que no lo son.
En esta sección
Palabras clave A-E
Palabras clave F-O
Palabras clave P-Z
Secciones relacionadas
Referencia de Visual Basic
Visual Basic
Referencia del lenguaje Visual Basic

Palabras clave A-E


La tabla siguiente contiene una lista de las palabras clave del lenguaje Visual Basic.

Alias Addhandler Ansi As

Assembly Auto Binary ByRef

ByVal Case Catch Clase

Personalizar Default DirectCast Each

Else ElseIf End Error


Notas para desarrolladores de dispositivos inteligentes
Los siguientes elementos no se admiten en las aplicaciones de dispositivos inteligentes: Ansi, Auto y End.
Vea también
Referencia
Palabras clave F-O
Palabras clave P-Z
Otros recursos
Referencia de Visual Basic
Referencia del lenguaje Visual Basic

Alias
Indica que un procedimiento externo tiene un nombre diferente en su archivo DLL.
Comentarios
La palabra clave Alias se puede utilizar en este contexto:
Declare (Instrucción)
Vea también
Referencia
Palabras clave del lenguaje Visual Basic
Referencia del lenguaje Visual Basic

Addhandler
AddHandler asocia en tiempo de ejecución un evento a un controlador de eventos o declara lo que el código ejecuta cuando
se agrega un controlador de eventos.
Comentarios
La palabra clave AddHandler se utiliza en estos contextos:
Event (Instrucción)
La palabra clave AddHandler declara un descriptor de acceso AddHandler personalizado.
AddHandler (Instrucción)
La palabra clave AddHandler asocia un evento a un controlador de eventos.
Vea también
Tareas
Cómo: Declarar eventos que evitan bloqueos
Cómo: Declarar eventos que evitan que se pierda memoria
Referencia del lenguaje Visual Basic

Ansi
Especifica que Visual Basic debe convertir las referencias de todas las cadenas a valores ANSI (American National Standards
Institute), independientemente del nombre del procedimiento externo que se declara.
Cuando se llama a un procedimiento definido fuera del proyecto, el compilador de Visual Basic no tiene acceso a la
información que necesita para llamarlo correctamente. Esta información incluye la ubicación del procedimiento, la forma de
identificación, su secuencia de llamada y tipo de valor devuelto y el juego de caracteres de cadena que utiliza.
Declare (Instrucción) crea una referencia a un procedimiento externo y proporciona esta información necesaria.
La parte de charsetmodifier en la instrucción Declare proporciona la información del juego de caracteres para calcular las
referencias de las cadenas durante una llamada al procedimiento externo. También afecta a la forma en que Visual Basic busca
el nombre de procedimiento externo en el archivo externo. El modificador Ansi especifica que Visual Basic debe convertir las
referencias de todas las cadenas a valores ANSI y debe localizar el procedimiento sin modificar su nombre durante la
búsqueda.
Si no se especifica un modificador de juego de caracteres, Ansi es el valor predeterminado.
Comentarios
El modificador Ansi se puede utilizar en este contexto:
Declare (Instrucción)
Notas para desarrolladores de dispositivos inteligentes
No se admite esta palabra clave.
Vea también
Referencia
Auto
Unicode (Visual Basic)
Palabras clave del lenguaje Visual Basic
Referencia del lenguaje Visual Basic

As (Visual Basic)
Introduce una cláusula As, que identifica un tipo de datos en una instrucción de declaración o una lista de restricciones en un
parámetro de tipo genérico.
Comentarios
La palabra clave As se puede utilizar en estos contextos:
Class (Instrucción)
Const (Instrucción)
Declare (Instrucción)
Delegate (Instrucción)
Dim (Instrucción)
Enum (Instrucción)
Event (Instrucción)
For...Next (Instrucciones)
For Each...Next (Instrucciones)
Function (Instrucción)
Interface (Instrucción)
Operator (Instrucción)
Property (Instrucción)
Structure (Instrucción)
Sub (Instrucción)
Try...Catch...Finally (Instrucciones)
Vea también
Tareas
Cómo: Crear una variable nueva
Referencia
Lista de tipos
Palabras clave del lenguaje Visual Basic
Conceptos
Tipos de datos en Visual Basic
Declaración de variable en Visual Basic
Tipos genéricos en Visual Basic
Referencia del lenguaje Visual Basic

Assembly
Especifica que un atributo situado al comienzo de un archivo de código fuente se aplica a todo el ensamblado.
Comentarios
Muchos atributos pertenecen a un elemento de programación individual, como una clase o una propiedad. Para aplicar un
atributo de este tipo, adjunte directamente el bloque de atributos entre corchetes angulares (< >) a la instrucción de
declaración.
Si un atributo no pertenece únicamente al elemento que le sigue sino a todo el ensamblado completo, sitúe el bloque de
atributos al principio del archivo de código fuente e identifique el atributo con la palabra clave Assembly. Si se aplica al
módulo de ensamblado actual, utilice la palabra clave Module.
También puede aplicar un atributo a un ensamblado en el archivo AssemblyInfo.vb, en cuyo caso no es necesario que utilice un
bloque de atributos en el archivo de código fuente principal.
Vea también
Referencia
Module (Visual Basic)
Conceptos
Aplicación de los atributos
Referencia del lenguaje Visual Basic

Auto
Especifica que Visual Basic debe calcular las referencias a las cadenas según reglas de .NET Framework basadas en el nombre
externo del procedimiento externo que se declara.
Cuando se llama a un procedimiento definido fuera del proyecto, el compilador de Visual Basic no tiene acceso a la
información que necesita para llamarlo correctamente. Esta información incluye la ubicación del procedimiento, la forma de
identificación, su secuencia de llamada y tipo de valor devuelto y el juego de caracteres de cadena que utiliza.
Declare (Instrucción) crea una referencia a un procedimiento externo y proporciona esta información necesaria.
La parte de charsetmodifier en la instrucción Declare proporciona la información del juego de caracteres para calcular las
referencias de las cadenas durante una llamada al procedimiento externo. También afecta a la forma en que Visual Basic busca
el nombre de procedimiento externo en el archivo externo. El modificador Auto especifica que Visual Basic debe calcular las
referencias a las cadenas según las reglas de .NET Framework y que debe determinar el juego de caracteres base de la
plataforma en tiempo de ejecución y, posiblemente, modificar el nombre del procedimiento externo si no tiene éxito la
búsqueda inicial. Para obtener más información, vea "Juegos de caracteres" en Declare (Instrucción).
Si no se especifica un modificador de juego de caracteres, Ansi es el valor predeterminado.
Comentarios
El modificador Auto se puede utilizar en este contexto:
Declare (Instrucción)
Notas para desarrolladores de dispositivos inteligentes
No se admite esta palabra clave.
Vea también
Referencia
Ansi
Unicode (Visual Basic)
Palabras clave del lenguaje Visual Basic
Referencia del lenguaje Visual Basic

Binary
Establece el método de comparación de cadenas en un criterio de ordenación binario estricto.
Comentarios
La instrucción Option Compare debe aparecer en un archivo de código fuente antes que cualquier otra instrucción. Afecta a la
comparación de cadenas de todo el código generado por dicho archivo de código fuente.
Cuándo se utiliza Binary
Es posible que necesite comparar elementos de cadena basados en su valor binario real, especialmente si las cadenas pueden
contener caracteres que no se van a interpretar como texto. En este caso, no desea afectar a las comparaciones con
equivalencias alfabéticas como la distinción entre mayúsculas y minúsculas. Para especificar una comparación binaria pura,
establezca Option Compare en Binary.
La palabra clave Binary se puede utilizar en este contexto:
Option Compare (Instrucción)
Vea también
Referencia
Text
Palabras clave del lenguaje Visual Basic
Referencia del lenguaje Visual Basic

ByRef
Indica que un argumento se pasa de tal forma que el procedimiento al que se ha llamado puede cambiar el valor de una
variable subyacente al argumento en el código que realiza la llamada.
Comentarios
El modificador ByRef se puede utilizar en estos contextos:
Declare (Instrucción)
Function (Instrucción)
Sub (Instrucción)
Vea también
Referencia
Palabras clave del lenguaje Visual Basic
Conceptos
Pasar argumentos por valor y por referencia
Referencia del lenguaje Visual Basic

ByVal
Indica que un argumento se pasa de tal forma que el procedimiento o la propiedad a la que se ha llamado no puede cambiar el
valor de una variable subyacente al argumento en el código que realiza la llamada.
Comentarios
El modificador ByVal se puede utilizar en estos contextos:
Declare (Instrucción)
Instrucción Function (Visual Basic)
Operator (Instrucción)
Property (Instrucción)
Instrucción Sub (Visual Basic)
Vea también
Referencia
Palabras clave del lenguaje Visual Basic
Conceptos
Pasar argumentos por valor y por referencia
Referencia del lenguaje Visual Basic

Case (Visual Basic)


Define un valor o un conjunto de valores con el que se prueba el valor de una expresión.
Comentarios
La palabra clave Case se puede utilizar en este contexto:
Select...Case (Instrucción)
Vea también
Referencia
Palabras clave del lenguaje Visual Basic
Referencia del lenguaje Visual Basic

Catch (Visual Basic)


Introduce un bloque de instrucciones para que se ejecute si se produce una excepción determinada en un bloque Try.
Comentarios
Cada estructura Try debe incluir un bloque Finally o, al menos, un bloque Catch.
Cuándo se utiliza Catch
Si piensa que se puede producir una excepción determinada en una sección concreta del código, incluya éste en un bloque Try
y utilice un bloque Catch para conservar el control y tratar la excepción que se produce. Puede utilizar tantos bloques Catch
diferentes como sea necesario en una estructura Try.
La palabra clave Catch se puede utilizar en este contexto:
Instrucción Try...Catch...Finally (Visual Basic)
Vea también
Referencia
Finally (Visual Basic)
Palabras clave del lenguaje Visual Basic
Referencia del lenguaje Visual Basic

Class (Visual Basic)


Obliga a un parámetro de tipo genérico a exigir que cualquier argumento de tipo que le pasen sea un tipo de referencia o
introduce una Instrucción Class (Visual Basic).
Comentarios
Cuando declara un parámetro de tipo para un tipo genérico, puede imponer una restricción, una serie de uno o varios
requisitos que limitan el argumento de tipo que se puede pasar a este parámetro de tipo. Para obtener más información, vea
"Restricciones" en Tipos genéricos en Visual Basic.
Entre los posibles requisitos de una restricción se incluye el hecho de que el argumento de tipo debe ser un tipo de referencia,
por ejemplo, una String, matriz o delegado, o un objeto creado a partir de una clase. Esto se especifica incluyendo la palabra
clave Class en la restricción.
Otro posible requisito es que el argumento de tipo debe ser un tipo de valor, por ejemplo, una estructura, enumeración o tipo
de datos básico. Se especifica un requisito de tipo de valor incluyendo la palabra clave Structure (Visual Basic) en la restricción.
No tiene que especificar Class o Structure en una restricción. No puede especificar ambos en la misma restricción.
La restricción Class no es lo mismo que Instrucción Class (Visual Basic).
Vea también
Referencia
Structure (Visual Basic)
Instrucción Class (Visual Basic)
Conceptos
Tipos genéricos en Visual Basic
Tipos de valores y tipos de referencia
Referencia del lenguaje Visual Basic

Custom
Especifica que un evento tiene código adicional especializado para agregar controladores, quitar controladores y provocar
eventos.
Comentarios
La palabra clave Custom se puede utilizar en este contexto:
Event (Instrucción)
Vea también
Referencia
Palabras clave del lenguaje Visual Basic
Referencia del lenguaje Visual Basic

Default (Visual Basic)


Identifica una propiedad como la propiedad predeterminada de su clase, estructura o interfaz.
Comentarios
Una clase, estructura o interfaz puede designar sólo una de sus propiedades como propiedad predeterminada, siempre que
esa propiedad acepte al menos un parámetro. Si el código hace referencia a una clase o estructura sin especificar un miembro,
Visual Basic resuelve esta referencia como propiedad predeterminada.
Las propiedades predeterminadas pueden producir una pequeña reducción en los caracteres del código fuente pero pueden
dificultar la lectura del código. Si el código de llamada no está familiarizado con su clase o estructura, cuando hace referencia al
nombre de éstas, no puede estar seguro de si esta referencia tiene acceso a la clase o estructura en sí, o a una propiedad
predeterminada. Esto puede conducir a errores del compilador o a ligeros errores lógicos en tiempo de ejecución.
Puede reducir levemente las posibilidades de errores de propiedades predeterminadas utilizando siempre
Option Strict (Instrucción) para establecer la comprobación de tipos del compilador en On.
Si está pensando en utilizar una clase o estructura en el código, debe determinar si tiene una propiedad predeterminada, y si es
así, cómo se llama.
Debido a estas desventajas, debería considerar no definir propiedades predeterminadas. Para una mejor lectura del código,
debería considerar asimismo hacer siempre una referencia explícita a todas las propiedades, incluso a las propiedades
predeterminadas.
El modificador Default se puede utilizar en este contexto:
Property (Instrucción)
Vea también
Tareas
Cómo: Declarar y llamar a una propiedad predeterminada en Visual Basic
Referencia
Palabras clave del lenguaje Visual Basic
Conceptos
Propiedades predeterminadas
Referencia del lenguaje Visual Basic

DirectCast
Introduce una operación de conversión de tipos basada en la herencia o la implementación.
Comentarios
DirectCast no utiliza rutinas auxiliares para conversión de Visual Basic en tiempo de ejecución, por lo que puede proporcionar
un mejor rendimiento que CType para convertir al tipos de datos Object y desde él.
Se utiliza la palabra clave DirectCast de la misma manera que se utiliza la palabra clave CType (Función) y TryCast. Se
proporciona una expresión como primer argumento y un tipo para convertir como segundo argumento. DirectCast requiere
una relación de herencia o de implementación entre los tipos de datos de los dos argumentos. Esto significa que un tipo debe
heredar de otro o implementar otro.
Errores y problemas
DirectCast genera un error del compilador si detecta que no existe ninguna relación herencia o de implementación. No
obstante, la falta de errores del compilador no garantiza una conversión correcta. Si se restringe la conversión deseada, se
podría producir un error en tiempo de ejecución. Si es así, el tiempo de ejecución produce un error InvalidCastException.
Palabras clave para conversiones
A continuación se muestra una comparación de las palabras clave de conversión de tipos.
Palabra clave Tipos de datos Relación de argumento Error en tiempo de ej
ecución
CType (Función) Cualquier tipo de La conversión de ampliación o de restricción se debe definir entre Produce InvalidCastEx
datos los dos tipos de datos ception

DirectCast Cualquier tipo de Un tipo debe heredar de otro tipo o implementarlo Produce InvalidCastEx
datos ception

TryCast Sólo tipos de refe Un tipo debe heredar de otro tipo o implementarlo Devuelve
rencia Nothing (Visual Basic)
Ejemplo
El ejemplo siguiente muestra dos usos de DirectCast, uno con un resultado satisfactorio en tiempo de ejecución y otro que no
lo tiene.
VB
Dim q As Object = 2.37
Dim i As Integer = CType(q, Integer)
' The following conversion fails at run time
Dim j As Integer = DirectCast(q, Integer)
Dim f As New System.Windows.Forms.Form
Dim c As System.Windows.Forms.Control
' The following conversion succeeds.
c = DirectCast(f, System.Windows.Forms.Control)

En el ejemplo anterior, el tipo en tiempo de ejecución de q es Double. CType tiene un resultado satisfactorio porque Double
se puede convertir en Integer. No obstante, el primer DirectCast no tiene un resultado satisfactorio porque el tipo en tiempo
de ejecución de Double no tiene relación de herencia con Integer, aunque existe una conversión. El segundo DirectCast tiene
un resultado satisfactorio porque convierte del tipo Form al tipo Control del que Form hereda.
Vea también
Conceptos
Conversiones de ampliación y de restricción
Conversiones implícitas y explícitas
Referencia del lenguaje Visual Basic

Each
Especifica la variable de bucle que se va a utilizar en un bucle For Each.
Comentarios
La palabra clave Each se utiliza en este contexto:
For Each...Next (Instrucción)
Vea también
Referencia
Palabras clave del lenguaje Visual Basic
Referencia del lenguaje Visual Basic

Else (Visual Basic)


Presenta un grupo de instrucciones que se ejecutarán o compilarán si no se ha ejecutado ningún otro grupo condicional de
instrucciones.
Comentarios
La palabra clave Else se puede utilizar en estos contextos:
If...Then...Else (Instrucción)
Select...Case (Instrucción)
#If...Then...#Else (Directiva)
Vea también
Referencia
Palabras clave del lenguaje Visual Basic
Referencia del lenguaje Visual Basic

ElseIf (Visual Basic)


Incluye una condición que se prueba si la prueba condicional anterior ha fallado.
Comentarios
La palabra clave ElseIf se puede utilizar en estos contextos:
If...Then...Else (Instrucción)
#If...Then...#Else (Directiva)
Vea también
Referencia
Palabras clave del lenguaje Visual Basic
Referencia del lenguaje Visual Basic

End (Visual Basic)


Cuando está seguido de una palabra clave adicional, finaliza la definición del bloque de instrucciones introducida por esa
palabra clave.

End AddHandler
End Class
End Enum
End Event
End Function
End Get
End If
End Interface
End Module
End Namespace
End Operator
End Property
End RaiseEvent
End RemoveHandler
End Select
End Set
End Structure
End Sub
End SyncLock
End Try
End While
End With

Partes
End
Obligatorio. Finaliza la definición del elemento de programación.
AddHandler
Es obligatorio para finalizar un descriptor de acceso AddHandler que comienza por una instrucción AddHandler
correspondiente en un Event (Instrucción) personalizado.
Class
Es obligatorio para terminar una definición de clase que comienza por una Instrucción Class (Visual Basic) correspondiente.
Enum
Es obligatorio para terminar una definición de enumeración que comienza por una Instrucción Enum (Visual Basic)
correspondiente.
Event
Es obligatorio para terminar una definición de evento Custom que comienza por un Event (Instrucción) correspondiente.
Function
Es obligatorio para terminar una definición de procedimiento Function que comienza por una
Instrucción Function (Visual Basic) correspondiente. Si en la ejecución se encuentra una instrucción End Function, el control
vuelve al código de llamada.
Get
Es obligatorio para terminar una definición de procedimiento Property que comienza por un Get (Instrucción)
correspondiente. Si en la ejecución se encuentra una instrucción End Get, el control vuelve a la instrucción que solicita el
valor de la propiedad.
If
Es obligatorio para terminar una definición de bloque If...Then...Else que comienza por una instrucción If correspondiente.
Vea Instrucción If...Then...Else (Visual Basic).
Interface
Es obligatorio para terminar una definición de interfaz que comienza por una Instrucción Interface (Visual Basic)
correspondiente.
Module
Es obligatorio para terminar una definición de módulo que comienza por un Module (Instrucción) correspondiente.
Namespace
Es obligatorio para terminar una definición de espacio de nombres que comienza por un Namespace (Instrucción)
correspondiente.
Operator
Es obligatorio para terminar una definición de operador que comienza por una Operator (Instrucción) correspondiente.
Property
Es obligatorio para terminar una definición de propiedad que comienza por una Property (Instrucción) correspondiente.
RaiseEvent
Es obligatorio para finalizar un descriptor de acceso RaiseEvent que comienza por una instrucción RaiseEvent
correspondiente en un Event (Instrucción) personalizado.
RemoveHandler
Es obligatorio para finalizar un descriptor de acceso RemoveHandler que comienza por una instrucción RemoveHandler
correspondiente en un Event (Instrucción) personalizado.
Select
Es obligatorio para terminar una definición de bloque Select...Case que comienza por una instrucción Select
correspondiente. Vea Instrucción Select...Case (Visual Basic).
Set
Es obligatorio para terminar una definición de procedimiento Property que comienza por un Instrucción Set (Visual Basic)
correspondiente. Si en la ejecución se encuentra una instrucción End Set, el control vuelve a la instrucción que establece el
valor de la propiedad.
Structure
Es obligatorio para terminar una definición de estructura que comienza por una Structure (Instrucción) correspondiente.
Sub
Es obligatorio para terminar una definición de procedimiento Sub que comienza por un Instrucción Sub (Visual Basic)
correspondiente. Si en la ejecución se encuentra una instrucción End Sub, el control vuelve al código de llamada.
SyncLock
Es obligatorio para terminar una definición de bloque SyncLock que comienza por una instrucción SyncLock
correspondiente. Vea SyncLock (Instrucción).
Try
Es obligatorio para terminar una definición de bloque Try...Catch...Finally que comienza por una instrucción Try
correspondiente. Vea Instrucción Try...Catch...Finally (Visual Basic).
While
Es obligatorio para terminar una definición de bucle While que comienza por una instrucción While correspondiente. Vea
Instrucción While...End While (Visual Basic).
With
Es obligatorio para terminar una definición de bloque With que comienza por una instrucción With correspondiente. Vea
Instrucción With...End With (Visual Basic).
Comentarios
End (Instrucción), sin una palabra clave adicional, termina la ejecución inmediatamente.
Cuando le precede un signo de número (#), la palabra clave End finaliza un bloque de preprocesamiento introducido por la
directiva correspondiente.
#End
Obligatorio. Termina la definición del bloque de preprocesamiento.
#ExternalSource
Es obligatorio para terminar un bloque de origen externo que comienza por un #ExternalSource (Directiva) correspondiente.
#If
Es obligatorio para terminar un bloque de compilación condicional que comienza por una directiva #If correspondiente. Vea
#If...Then...#Else (Directivas).
#Region
Es obligatorio para terminar un bloque de área de origen que comienza por un #Region (Directiva) correspondiente.
Notas para desarrolladores de dispositivos inteligentes
No se admite la instrucción End si no va acompañada de una palabra clave adicional.
Vea también
Referencia
End (Instrucción)
Referencia del lenguaje Visual Basic

Error (Visual Basic)


Simula o responde a un error en tiempo de ejecución.
Comentarios
La palabra clave Error se puede utilizar en estos contextos:
Error (Instrucción)
On Error (Instrucción)
Vea también
Referencia
Palabras clave del lenguaje Visual Basic
Otros recursos
Control de excepciones y errores en Visual Basic
Referencia del lenguaje Visual Basic

Palabras clave F-O


La tabla siguiente contiene una lista de palabras claves del lenguaje Visual Basic.

False Finally For Friend

Global Handles Implements In

Is Lib Loop Me

Module MustInherit MustOverride MyBase

MyClass Narrowing New Next

Nothing NotInheritable NotOverridable Of

Off On Option Optional

Overloads Overridable Overrides


Vea también
Referencia
Palabras clave A-E
Palabras clave P-Z
Otros recursos
Referencia de Visual Basic
Referencia del lenguaje Visual Basic

False (Visual Basic)


Representa un valor de tipo Boolean que falla una comprobación condicional.
Comentarios
Los valores Boolean (Tipo de datos, Visual Basic) no se almacenan como números y los valores almacenados no se consideran
equivalentes a números. No debe escribir código que se base en los valores numéricos equivalentes de True y False. Siempre
que sea posible, debe restringir el uso de variables Boolean a los valores lógicos para los que se han diseñado. Si fuera
necesario mezclar valores de tipo Boolean y numéricos, asegúrese de entender el método de conversión elegido. Para obtener
más información, vea la sección sobre cómo el tipo Boolean no se convierte al tipo numérico correctamente en
Solucionar problemas de tipos de datos.
Vea también
Tareas
Solucionar problemas de tipos de datos
Referencia
Boolean (Tipo de datos, Visual Basic)
True (Visual Basic)
Referencia del lenguaje Visual Basic

Finally (Visual Basic)


Introduce un bloque de instrucciones que se ejecuta antes de salir de una estructura Try.
Comentarios
Cada estructura Try debe incluir un bloque Finally o, al menos, un bloque Catch.
Nota
El control no pasa de un bloque Try o Catch al bloque Finally correspondiente en los casos siguientes:

Se encuentra End (Instrucción) dentro del bloque Try o Catch.


Se produce StackOverflowException desde el bloque Try o Catch.
Cuándo se utiliza Finally
Si tiene una o más instrucciones que se deben ejecutar antes de salir de la estructura Try, utilice un bloque Finally. El control
pasa al bloque Finally justo antes de salir de la estructura Try. Esto se produce incluso si aparece una excepción dentro de la
estructura Try.
La palabra clave Finally se puede utilizar en este contexto:
Instrucción Try...Catch...Finally (Visual Basic)
Vea también
Referencia
Catch (Visual Basic)
Palabras clave del lenguaje Visual Basic
Referencia del lenguaje Visual Basic

For (Visual Basic)


Introduce un bucle recorrido en iteración con diferentes valores de una variable de bucle.
Comentarios
La palabra clave For se utiliza en estos contextos:
For...Next (Instrucción)
For Each...Next (Instrucción)
Vea también
Referencia
Palabras clave del lenguaje Visual Basic
Referencia del lenguaje Visual Basic

Friend (Visual Basic)


Especifica que sólo se puede tener acceso a uno o varios elementos de programación declarados desde el ensamblado que
contiene su declaración.
Comentarios
Reglas
Contexto de declaración. Sólo puede utilizar Friend en el nivel de módulo, interfaz o espacio de nombres. Esto
significa que el contexto de declaración de un elemento Friend debe ser un archivo de código fuente, un espacio de
nombres, una interfaz, un módulo, una clase o una estructura, y no un procedimiento.
Modificadores combinados. Puede utilizar el modificador Friend junto con el modificador Protected (Visual Basic) en
la misma declaración. Esta combinación proporciona acceso de tipo amigo y acceso protegido a los elementos
declarados para que sean accesibles desde cualquier punto del mismo ensamblado, desde su propia clase y desde
cualquier clase derivada. Sólo puede especificar Protected Friend en miembros de clases.
Comportamiento
Nivel de acceso. Todo el código de un contexto de declaración puede tener acceso a sus elementos. El código de otras
clases, estructuras y módulos que se compilan en el mismo ensamblado puede tener acceso a todos los elementos
Friend de dicho ensamblado.
El acceso de tipo amigo no es un supraconjunto ni un subconjunto del acceso protegido.
Modificadores de acceso. Las palabras clave que especifican el nivel de acceso se denominan access modifiers.
Encontrará una comparación de los modificadores de acceso en Niveles de acceso en Visual Basic.
Cuándo se utiliza Friend
En numerosas ocasiones deseará que elementos de programación como clases y estructuras se utilicen en todo el ensamblado
y no sólo en el componente en que se declaran. Sin embargo, posiblemente no desee que código ajeno al ensamblado tenga
acceso a estos elementos, por ejemplo si se trata de una aplicación propia. Si desea limitar el acceso a un elemento de este
modo, puede declararlo con Friend.
El acceso de tipo amigo suele ser el nivel preferido de los elementos de programación de una aplicación. Tenga en cuenta que
el nivel de acceso de una interfaz, módulo, clase o estructura es Friend de manera predeterminada, si no se declara lo
contrario.
El modificador Friend se puede utilizar en estos contextos:
Class (Instrucción)
Const (Instrucción)
Declare (Instrucción)
Delegate (Instrucción)
Dim (Instrucción)
Enum (Instrucción)
Event (Instrucción)
Function (Instrucción)
Interface (Instrucción)
Module (Instrucción)
Property (Instrucción)
Structure (Instrucción)
Sub (Instrucción)
Vea también
Referencia
Public (Visual Basic)
Protected (Visual Basic)
Private (Visual Basic)
Conceptos
Niveles de acceso en Visual Basic
Procedimientos en Visual Basic
Otros recursos
Estructuras: tipos de datos propios
Descripción de las clases
Referencia del lenguaje Visual Basic

Global
Permite tener acceso a un elemento de programación de .NET Framework cuando se ha bloqueado con la estructura del
espacio de nombres.
Comentarios
Si ha definido una jerarquía anidada de espacios de nombres, el código dentro de esta jerarquía puede tener el acceso
bloqueado al espacio de nombres System de .NET Framework. En el ejemplo siguiente se ilustra una jerarquía en la que el
espacio de nombres SpecialSpace.System bloquea el acceso a System.

Namespace SpecialSpace
Namespace System
Class abc
Function getValue() As System.Int32
Dim n As System.Int32
Return n
End Function
End Class
End Namespace
End Namespace

En consecuencia, el compilador de Visual Basic no puede resolver correctamente la referencia a System.Int32 porque
SpecialSpace.System no define Int32. Puede utilizar la palabra clave Global para iniciar la cadena de calificación en el nivel
más externo de la biblioteca de clases de .NET Framework. Esto permite especificar el espacio de nombres System o cualquier
otro espacio de nombres en la biblioteca de clases. Esto se ilustra en el siguiente ejemplo:

Namespace SpecialSpace
Namespace System
Class abc
Function getValue() As Global.System.Int32
Dim n As Global.System.Int32
Return n
End Function
End Class
End Namespace
End Namespace

Puede utilizar Global para tener acceso a otros espacios de nombres de nivel de raíz, como Microsoft.VisualBasic, y a cualquier
espacio de nombres asociado a su proyecto.
La palabra clave Global se puede utilizar en estos contextos:
Instrucción Class (Visual Basic)
Instrucción Const (Visual Basic)
Declare (Instrucción)
Delegate (Instrucción)
Instrucción Dim (Visual Basic)
Instrucción Enum (Visual Basic)
Event (Instrucción)
Instrucción For...Next (Visual Basic)
Instrucción For Each...Next (Visual Basic)
Instrucción Function (Visual Basic)
Instrucción Interface (Visual Basic)
Operator (Instrucción)
Property (Instrucción)
Structure (Instrucción)
Instrucción Sub (Visual Basic)
Instrucción Try...Catch...Finally (Visual Basic)
Instrucción Using (Visual Basic)
Vea también
Referencia
Namespace (Instrucción)
Referencia de la biblioteca de clases de .NET Framework
System
Microsoft.VisualBasic
Referencia del lenguaje Visual Basic

Handles
Declara que un procedimiento controla un evento especificado.

proceduredeclaration Handles eventlist

Partes
proceduredeclaration
La declaración del procedimiento Sub del procedimiento que controlará el evento.
eventlist
La lista de los eventos para proceduredeclaration que se deben controlar. Los eventos los debe provocar la clase base de la
clase actual o un objeto declarado mediante la palabra clave WithEvents.
Comentarios
Use la palabra clave Handles al final de una declaración de procedimiento para hacer que controle eventos provocados por
una variable de objeto declarada con la palabra clave WithEvents. La palabra clave Handles también puede utilizarse en una
clase derivada para controlar eventos de una clase base.
La firma del procedimiento debe coincidir con las firmas de cada evento contenido en eventlist.
Tanto la palabra clave Handles como la instrucción AddHandler permiten especificar que determinados procedimientos
controlan eventos concretos, pero hay diferencias. Utilice la palabra clave Handles al definir un procedimiento para especificar
que controla un determinado evento. La instrucción AddHandler conecta en tiempo de ejecución los procedimientos a los
eventos. Para obtener más información, vea AddHandler (Instrucción).
Para los eventos personalizados, la aplicación invoca el descriptor de acceso AddHandler del evento cuando agrega el
procedimiento como un controlador de eventos. Para obtener más información sobre eventos personalizados, vea
Event (Instrucción).
Ejemplo
VB
Public Class ContainerClass
' Module or class level declaration.
WithEvents Obj As New Class1

Public Class Class1


' Declare an event.
Public Event Ev_Event()
Sub CauseSomeEvent()
' Raise an event.
RaiseEvent Ev_Event()
End Sub
End Class
Sub EventHandler() Handles Obj.Ev_Event
' Handle the event.
MsgBox("EventHandler caught event.")
End Sub

' Call the TestEvents procedure from an instance of the ContainerClass


' class to test the Ev_Event event and the event handler.
Public Sub TestEvents()
Obj.CauseSomeEvent()
End Sub
End Class

En el siguiente ejemplo se muestra cómo una clase derivada puede utilizar la instrucción Handles para controlar un evento
desde una clase base.
VB
Public Class BaseClass
' Declare an event.
Event Ev1()
End Class
Class DerivedClass
Inherits BaseClass
Sub TestEvents() Handles MyBase.Ev1
' Add code to handle this event.
End Sub
End Class

Vea también
Referencia
WithEvents
AddHandler (Instrucción)
RemoveHandler (Instrucción)
Event (Instrucción)
RaiseEvent (Instrucción)
Conceptos
Eventos y controladores de eventos
Referencia del lenguaje Visual Basic

Implements (Visual Basic)


Indica que un miembro de clase o de estructura proporciona la implementación para un miembro definido en una interfaz.
Comentarios
La palabra clave Implements no es lo mismo que Implements (Instrucción). Se utiliza la instrucción Implements para
especificar que una clase o estructura implementa una o varias interfaces y luego, para cada miembro, se utiliza la palabra
clave Implements para especificar las interfaces y los miembros que implementa.
Si una clase o estructura implementa una interfaz, debe incluir la instrucción Implements inmediatamente después de
Instrucción Class (Visual Basic) o Structure (Instrucción) y debe implementar todos los miembros definidos por la interfaz.
Reimplementación
En una clase derivada, puede reimplementar un miembro de interfaz que la clase base ya ha implementado. Esto es diferente
de reemplazar el miembro de clase base en los aspectos siguientes:
El miembro de clase base no necesita ser Overridable para ser reimplementado.
Puede reimplementar el miembro con un nombre diferente.
La palabra clave Implements se puede utilizar en estos contextos:
Event (Instrucción)
Instrucción Function (Visual Basic)
Property (Instrucción)
Instrucción Sub (Visual Basic)
Vea también
Referencia
Implements (Instrucción)
Instrucción Interface (Visual Basic)
Instrucción Class (Visual Basic)
Structure (Instrucción)
Conceptos
Palabra clave Implements e instrucción Implements
Referencia del lenguaje Visual Basic

In (Visual Basic)
Especifica el grupo que recorre la variable de bucle en un bucle For Each.
Comentarios
La palabra clave In se puede utilizar en este contexto:
For Each...Next (Instrucción)
Vea también
Referencia
Palabras clave del lenguaje Visual Basic
Referencia del lenguaje Visual Basic

Is (Visual Basic)
Presenta una cláusula Is que realiza una comparación.
Comentarios
La palabra clave Is se utiliza con la palabra clave TypeOf en una expresión TypeOf...Is para comprobar si el tipo en tiempo de
ejecución de una variable es compatible con un tipo determinado.
La palabra clave Is se puede utilizar en estos contextos:
Is (Operador)
Select...Case (Instrucción)
Vea también
Referencia
TypeOf (Operador, Visual Basic)
Palabras clave del lenguaje Visual Basic
Referencia del lenguaje Visual Basic

Lib
Introduce una cláusula Lib que identifica el archivo externo (archivo DLL o recurso de código) que contiene un procedimiento
externo.
Comentarios
La palabra clave Lib se puede utilizar en este contexto:
Declare (Instrucción)
Vea también
Referencia
Palabras clave del lenguaje Visual Basic
Referencia del lenguaje Visual Basic

Loop
Finaliza un bucle presentado con una instrucción Do.
Comentarios
La palabra clave Loop se puede utilizar en este contexto:
Do...Loop (Instrucciones)
Vea también
Referencia
Palabras clave del lenguaje Visual Basic
Referencia del lenguaje Visual Basic

Me
Proporciona una forma de hacer referencia a la instancia específica de una clase o estructura donde se está ejecutando el
código actualmente.
Comentarios
La palabra clave Me se comporta como una variable de objeto o de estructura que hace referencia a la instancia actual. El uso
de la palabra clave Me es especialmente útil para transferir información acerca de la instancia de una clase o estructura que se
está ejecutando actualmente a un procedimiento de otro módulo, estructura o clase. Por ejemplo, suponga que dispone del
siguiente procedimiento en un módulo.

Sub ChangeFormColor(FormName As Form)


Randomize()
FormName.BackColor = Color.FromArgb(Rnd() * 256, Rnd() * 256, Rnd() * 256)
End Sub

Puede llamar a este procedimiento y pasar la instancia actual de la clase Form como un argumento mediante la siguiente
instrucción.

ChangeFormColor(Me)

La palabra clave Me se puede utilizar en estos contextos:


Class (Instrucción)
Structure (Instrucción)
Vea también
Referencia
MyBase
MyClass
Conceptos
Asignación de variables de objeto
Referencia del lenguaje Visual Basic

Module (Visual Basic)


Especifica que un atributo situado al principio de un archivo de código fuente se aplica al módulo de ensamblado actual.
Comentarios
Muchos atributos se aplican a un elemento de programación individual, como una clase o propiedad. Para incluir estos
atributos, se adjunta el bloque de atributos, entre corchetes angulares (< >), directamente a la instrucción de declaración.
Si un atributo no sólo se aplica al siguiente elemento sino al módulo de ensamblado actual, el bloque de atributos se sitúa al
principio del archivo de código fuente y el atributo se identifica con la palabra clave Module. Si se aplica al ensamblado
completo, utiliza la palabra clave Assembly.
La palabra clave Module no es lo mismo que Module (Instrucción).
Vea también
Referencia
Assembly
Module (Instrucción)
Conceptos
Aplicación de los atributos
Referencia del lenguaje Visual Basic

MustInherit
Especifica que una clase sólo se puede utilizar como una clase base y que no se puede crear directamente un objeto a partir de
ella.
Comentarios
La finalidad de una clase base (también conocida como clase abstracta) es definir la funcionalidad común a todas las clases
que se derivan de ésta. La clase base evita que las clases derivadas tengan que redefinir los elementos comunes. En algunos
casos, esta funcionalidad común no es lo suficientemente completa para que se pueda utilizar un objeto y cada clase derivada
define la funcionalidad que falta. En estos casos, deseará utilizar el código para crear objetos únicamente a partir de las clases
derivadas. Para ello, puede utilizar MustInherit en la clase base.
Otro utilidad de una clase MustInherit es restringir una variable a un conjunto de clases relacionadas. Puede definir una clase
base y derivar todos estas clases relacionadas a partir de ella. La clase base no necesita proporcionar una funcionalidad común
a todas las clases derivadas, aunque se puede utilizar como filtro en la asignación de valores a las variables. Si el código
utilizado declara una variable como clase base, Visual Basic permite asignar únicamente un objeto desde una de las clases
derivadas a dicha variable.
.NET Framework define varias clases MustInherit, entre las que se incluyen Array, Enum y ValueType. ValueType es un
ejemplo de una clase base que restringe una variable. Todos los tipos de valor se derivan de ValueType. Si declara una
variable como ValueType, puede asignar sólo tipos de valor a esa variable.
Reglas
Contexto de declaración. Sólo puede utilizar MustInherit en una instrucción Class.
Modificadores combinados. No se puede especificar MustInherit junto con NotInheritable en la misma declaración.
Ejemplo
En el ejemplo siguiente se ilustra la herencia forzada y el reemplazo forzado. La clase base shape define una variable
acrossLine. Las clases circle y square se derivan de shape. Heredan la definición de acrossLine, pero deben definir la
función area porque ese cálculo es diferente en cada tipo de forma.
VB
Public MustInherit Class shape
Public acrossLine As Double
Public MustOverride Function area() As Double
End Class
Public Class circle : Inherits shape
Public Overrides Function area() As Double
Return Math.PI * acrossLine
End Function
End Class
Public Class square : Inherits shape
Public Overrides Function area() As Double
Return acrossLine * acrossLine
End Function
End Class
Public Class consumeShapes
Public Sub makeShapes()
Dim shape1, shape2 As shape
shape1 = New circle
shape2 = New square
End Sub
End Class

Puede declarar shape1 y shape2 para que sean del tipo shape. Sin embargo, no puede crear un objeto a partir de shape porque
carece de la funcionalidad de area y se ha marcado como MustInherit.
Dado que se declaran como shape, las variables shape1 y shape2 se restringen a los objetos procedentes de las clases
derivadas circle y square. Visual Basic no permite asignar ningún otro objeto a estas variables, lo que proporciona un elevado
nivel de seguridad de tipos.
Uso
El modificador MustInherit se puede utilizar en este contexto:
Class (Instrucción)
Vea también
Referencia
Inherits (Instrucción)
NotInheritable
Palabras clave del lenguaje Visual Basic
Otros recursos
Herencia en Visual Basic
Referencia del lenguaje Visual Basic

MustOverride
Especifica que una propiedad o procedimiento no se implementa en esta clase y debe reemplazarse en una clase derivada para
poder utilizarse.
Comentarios
Sólo se pude utilizar MustOverride en una instrucción de declaración de procedimiento o propiedad. La propiedad o el
procedimiento que especifica MustOverride debe ser un miembro de una clase y ésta se debe marcar como MustInherit.
Reglas
Declaración incompleta. Si especifica MustOverride, no proporciona líneas adicionales de código para la propiedad o
el procedimiento, ni siquiera las instrucciones End Function, End Property o End Sub.
Modificadores combinados. No se puede especificar MustOverride junto con NotOverridable, Overridable o
Shared en la misma declaración.
Sombreado y reemplazo. El sombreado y el reemplazo definen de nuevo un elemento heredado, pero hay diferencias
significativas entre los dos enfoques. Para obtener más información, vea Sombrear en Visual Basic.
Términos alternativos. Un elemento que no se puede utilizar excepto en reemplazos se denomina en ocasiones
elemento virtual puro.
El modificador MustOverride se puede utilizar en estos contextos:
Instrucción Function (Visual Basic)
Property (Instrucción)
Instrucción Sub (Visual Basic)
Vea también
Referencia
NotOverridable
Overridable
Overrides
MustInherit
Palabras clave del lenguaje Visual Basic
Conceptos
Sombrear en Visual Basic
Referencia del lenguaje Visual Basic

MyBase
Proporciona una manera de hacer referencia a la clase base de la instancia de clase actual.
Comentarios
La palabra clave MyBase actúa como una variable de objeto que hace referencia a la clase base de la instancia actual de una
clase. Generalmente, MyBase se utiliza para tener acceso a miembros de la clase base que se reemplazan o sombrean en una
clase derivada. En particular, MyBase.New se utiliza para llamar explícitamente a un constructor de una clase base desde un
constructor de una clase derivada.
No se permite utilizar MyBase para llamar a métodos base MustOverride.
Para obtener más información y un ejemplo, vea Cómo: Obtener acceso a una variable que oculta una clase derivada.
Vea también
Referencia
Me
MyClass
New (Visual Basic)
Conceptos
Fundamentos de la herencia
Referencia del lenguaje Visual Basic

MyClass
Proporciona una manera de hacer referencia a los miembros de la instancia de clase actual sin que se reemplacen con clases
derivadas.
Comentarios
La palabra clave MyClass actúa como una variable de objeto que hace referencia a la instancia actual de una clase tal como se
implementó originalmente. MyClass es similar a Me, pero cada llamada a un método y propiedad de MyClass se trata como si
el método o propiedad fuesen NotOverridable. Por lo tanto, el método o propiedad no se ve afectado por el reemplazo de una
clase derivada. En el siguiente ejemplo se comparan Me y MyClass.

Class baseClass
Public Overridable Sub testMethod()
MsgBox("Base class string")
End Sub
Public Sub useMe()
' The following call uses the calling class's version, even if
' that version is an override.
Me.testMethod()
End Sub
Public Sub useMyClass()
' The following call uses this version and not any override.
MyClass.testMethod()
End Sub
End Class
Class derivedClass : Inherits baseClass
Public Overrides Sub testMethod()
MsgBox("Derived class string")
End Sub
End Class
Class testClasses
Sub startHere()
Dim testObj As derivedClass = New derivedClass()
' The following call displays "Derived class string".
testObj.useMe()
' The following call displays "Base class string".
testObj.useMyClass()
End Sub
End Class

Aunque derivedClass reemplaza a testMethod, la palabra clave MyClass en useMyClass anula el efecto del reemplazo y el
compilador resuelve la llamada a la versión de la clase base de testMethod.
MyClass no se puede utilizar dentro de un método Shared (Visual Basic), pero puede utilizarse en un método de instancia para
obtener acceso a un miembro compartido de una clase.
Vea también
Referencia
Me
MyBase
Conceptos
Fundamentos de la herencia
Referencia del lenguaje Visual Basic

Narrowing
Indica que un operador de conversión (CType) convierte una clase o una estructura en un tipo que quizá no pueda incluir
algunos de los valores posibles de la clase o la estructura original.
Convertir con la palabra clave Narrowing
El procedimiento de conversión debe especificar Public Shared además de Narrowing.
Las conversiones de restricción no son siempre satisfactorias en tiempo de ejecución y pueden generar errores o provocar
pérdida de datos. Ejemplos son Long a Integer, String a Date y un tipo base a un tipo derivado. Esta última conversión es de
restricción, ya que es posible que el tipo base no contenga todos los miembros del tipo derivado y no es, por tanto, una
instancia del tipo derivado.
Si Option Strict tiene el valor On, el código que lo utiliza debe emplear CType para todas las conversiones de restricción.
La palabra clave Narrowing se puede utilizar en este contexto:
Operator (Instrucción)
Vea también
Tareas
Cómo: Definir un operador
Referencia
Operator (Instrucción)
Widening
CType (Función)
Option Strict (Instrucción)
Conceptos
Conversiones de ampliación y de restricción
Referencia del lenguaje Visual Basic

New (Visual Basic)


Introduce una cláusula New para crear una nueva instancia de objeto o especifica una restricción de constructor en un
parámetro de tipo.
Comentarios
En una lista de parámetros de tipo, una restricción New especifica que el tipo proporcionado debe exponer un constructor sin
parámetros al que el código pueda tener acceso. Para obtener más información sobre los parámetros de tipo y las
restricciones, vea Lista de tipos.
En una declaración o instrucción de asignación, una cláusula New debe especificar una clase definida a partir de la que se
pueda crear la instancia. Esto significa que la clase debe exponer un constructor al que el código de llamada pueda tener
acceso.
Puede utilizar una cláusula New en una instrucción de declaración o en una instrucción de asignación. Cuando se ejecuta la
instrucción, ésta llama al constructor de la clase especificada y le pasa los argumentos que se le hayan proporcionado. En el
siguiente ejemplo se muestra esta operación.

Dim someObj As Object


someObj = New someClass("String required by constructor")
Dim nextLabel As New Label()

Dado que las matrices son clases, New puede crear una nueva instancia de la matriz, como se muestra en el ejemplo siguiente.

Dim intArray As Integer()


intArray = New Integer() {0, 1, 2, 3}

Common Language Runtime (CLR) produce un error OutOfMemoryException si no hay memoria suficiente para crear la nueva
instancia.
La palabra clave New se puede utilizar en estos contextos:
Instrucción Dim (Visual Basic)
Of
Vea también
Referencia
Palabras clave del lenguaje Visual Basic
Lista de tipos
Utilizar constructores y destructores
OutOfMemoryException
Conceptos
Tipos genéricos en Visual Basic
Duración de los objetos: cómo se crean y destruyen
Referencia del lenguaje Visual Basic

Next (Palabra clave)


Termina un bucle que se repite con diferentes valores de una variable de bucle o especifica que la ejecución debe continuar
con la instrucción que sigue a la instrucción que generó un error.
Comentarios
La palabra clave Next se puede utilizar en estos contextos:
For...Next (Instrucción)
For Each...Next (Instrucción)
On Error (Instrucción)
Resume (Instrucción)
Vea también
Referencia
Palabras clave del lenguaje Visual Basic
Referencia del lenguaje Visual Basic

Nothing (Visual Basic)


Representa el valor predeterminado de cualquier tipo de datos.
Comentarios
Al asignar Nothing a una variable, se establece el valor predeterminado de su tipo declarado. Si ese tipo contiene miembros
de variables, se establecen los valores predeterminados de todos ellos. Esto se ilustra en el siguiente ejemplo:

Public Structure testStruct


Public name As String
Public number As Short
End Structure
Dim ts As testStruct, i As Integer, b As Boolean
ts = Nothing
' The preceding statement sets ts.name to "" and ts.number to 0.
i = Nothing
b = Nothing
' The preceding statements set i to 0 and b to False.

Si la variable es de un tipo de referencia, es decir, una variable de objeto; Nothing significa que la variable no está asociada a
ningún objeto. En el siguiente ejemplo se muestra cómo.

Dim testObject As Object


testObject = Nothing
' The preceding statement sets testObject to not refer to any instance.

Cuando se asigna Nothing a una variable de objeto, ya no hace referencia a una instancia de objeto. Si la variable
anteriormente hacía referencia a una instancia, establecer dicha instancia en Nothing no causará la finalización de la misma.
Sólo después de que el recolector de elementos no utilizados (GC) detecte que ya no hay referencias activas, la instancia
finalizará, y la memoria y los recursos del sistema asociados con ella quedarán liberados.
Vea también
Referencia
Instrucción Dim (Visual Basic)
Conceptos
Duración de los objetos: cómo se crean y destruyen
Período de duración en Visual Basic
Referencia del lenguaje Visual Basic

NotInheritable
Especifica que una clase que no se puede utilizar como clase base.
Comentarios
Términos alternativos. Una clase que no se puede heredar se denomina en ocasiones clase sellada.
El modificador NotInheritable se puede utilizar en este contexto:
Instrucción Class (Visual Basic)
Vea también
Referencia
Inherits (Instrucción)
MustInherit
Palabras clave del lenguaje Visual Basic
Referencia del lenguaje Visual Basic

NotOverridable
Especifica que una propiedad o un procedimiento no se puede reemplazar en una clase derivada.
Comentarios
NotOverridable es el valor predeterminado de un procedimiento o propiedad que no reemplaza por sí mismo a un
procedimiento o propiedad de clase base.
Un elemento que no se puede reemplazar se denomina en ocasiones elemento sellado.
Reglas
Contexto de la declaración. Sólo puede utilizarse NotOverridable en una propiedad o instrucción de declaración de
procedimiento. Sólo puede especificar NotOverridable en una propiedad o procedimiento que reemplaza otra
propiedad o procedimiento, es decir, sólo en combinación con Overrides.
Modificadores combinados. No se puede especificar NotOverridable junto con MustOverride, Overridable o
Shared en la misma declaración.
El modificador NotOverridable se puede utilizar en estos contextos:
Instrucción Function (Visual Basic)
Property (Instrucción)
Instrucción Sub (Visual Basic)
Vea también
Referencia
MustOverride
Overridable
Overrides
Palabras clave del lenguaje Visual Basic
Conceptos
Sombrear en Visual Basic
Referencia del lenguaje Visual Basic

Of
Introduce una cláusula Of que identifica un parámetro de tipo en una clase, estructura, interfaz, delegado o procedimiento
genéricos. Para obtener información sobre tipos genéricos, vea Tipos genéricos en Visual Basic.
Utilizar la palabra clave Of
El ejemplo de código siguiente utiliza la palabra clave Of para definir el contorno de una clase que acepta dos parámetros de
tipo. Restringe el parámetro keyType mediante la interfaz IComparable, lo que significa que el código utilizado debe
proporcionar un argumento de tipo que implemente IComparable. Esto es necesario para que el procedimiento add pueda
llamar al método System.IComparable.CompareTo(System.Object). Para obtener más información sobre restricciones, vea
Lista de tipos.

Public Class Dictionary(Of entryType, keyType As IComparable)


Public Sub add(ByVal e As entryType, ByVal k As keyType)
Dim dk As keyType
If k.CompareTo(dk) = 0 Then
End If
End Sub
Public Function find(ByVal k As keyType) As entryType
End Function
End Class

Si finaliza la definición de la clase anterior, puede construir una variedad de clases dictionary a partir de ella. Los tipos que
proporciona a entryType y keyType determinan qué tipo de entrada contiene la clase y qué tipo de clave asocia con cada
entrada. Debido a la restricción, debe proporcionar a keyType un tipo que implemente IComparable.
El ejemplo de código siguiente crea un objeto que contiene entradas String y asocia una clave Integer a cada una de ellas.
Integer implementa IComparable y satisface de este modo la restricción de keyType.

Dim d As New dictionary(Of String, Integer)

La palabra clave Of se puede utilizar en estos contextos:


Class (Instrucción)
Delegate (Instrucción)
Function (Instrucción)
Interface (Instrucción)
Structure (Instrucción)
Sub (Instrucción)
Vea también
Referencia
Lista de tipos
IComparable
Conceptos
Tipos genéricos en Visual Basic
Referencia del lenguaje Visual Basic

Off
Desactiva una opción del compilador.
Comentarios
La palabra clave Off se puede utilizar en estos contextos:
Option Explicit (Instrucción)
Option Strict (Instrucción)
Vea también
Referencia
Palabras clave del lenguaje Visual Basic
Referencia del lenguaje Visual Basic

On
Presenta una respuesta a un error en tiempo de ejecución o activa una opción del compilador.
Comentarios
La palabra clave On se utiliza en estos contextos:
On Error (Instrucción)
Option Explicit (Instrucción)
Option Strict (Instrucción)
Vea también
Referencia
Palabras clave del lenguaje Visual Basic
Referencia del lenguaje Visual Basic

Option (Visual Basic)


Presenta una instrucción que especifica una opción del compilador que se aplica al archivo de código fuente completo.
Comentarios
Las opciones del compilador pueden controlar si deben declararse de forma explícita todas las variables, si las conversiones de
ampliación de tipos deben ser explícitas o si las cadenas deben compararse como texto o como cantidades binarias.
La palabra clave Option se puede utilizar en estos contextos:
Option Compare (Instrucción)
Instrucción Option Explicit (Visual Basic)
Option Strict (Instrucción)
Vea también
Referencia
Palabras clave del lenguaje Visual Basic
Referencia del lenguaje Visual Basic

Optional (Visual Basic)


Especifique que se puede omitir un argumento de procedimiento cuando se llama al procedimiento.
Comentarios
El modificador Optional se puede utilizar en estos contextos:
Declare (Instrucción)
Function (Instrucción)
Property (Instrucción)
Sub (Instrucción)
Vea también
Referencia
Palabras clave del lenguaje Visual Basic
Referencia del lenguaje Visual Basic

Overloads
Especifica que una propiedad o procedimiento vuelve a declarar una o varias propiedades o procedimientos existentes con el
mismo nombre.
Comentarios
Sobrecarga es la práctica de proporcionar más de una definición para una propiedad o nombre de procedimiento
determinados en el mismo ámbito. La nueva declaración de una propiedad o un procedimiento con una firma diferente se
llama a veces ocultación por firma.
Reglas
Contexto de la declaración. Sólo puede utilizarse Overloads en una propiedad o instrucción de declaración de
procedimiento.
Modificadores combinados. No se puede especificar Overloads junto con Shadows en la misma declaración de
procedimiento.
Diferencias requeridas. La firma en esta declaración debe ser diferente de la firma de cada propiedad o procedimiento
que sobrecarga. La firma comprende la propiedad o el nombre de procedimiento junto con lo siguiente:
el número de parámetros
el orden de los parámetros
los tipos de datos de los parámetros
el número de parámetros de tipo (para un procedimiento genérico)
el tipo de valor devuelto (sólo para un procedimiento de operador de conversión)
Todas las sobrecargas deben tener el mismo nombre pero cada una debe diferir de todas las demás en una o varias de
las consideraciones anteriores. Esto permite al compilador distinguir qué versión debe utilizar cuando el código llama a
la propiedad o al procedimiento.
Diferencias no permitidas. No está permitido cambiar uno o varios de los siguientes elementos para sobrecargar una
propiedad o un procedimiento, porque no forman parte de la firma:
si devuelve o no un valor (para un procedimiento)
el tipo de datos del valor devuelto (excepto para un operador de conversión)
los nombres de los parámetros o parámetros de tipo
las restricciones de los parámetros de tipo (para un procedimiento genérico)
las palabras clave de modificadores de parámetros (como ByRef o Optional)
las palabras clave de modificadores de propiedades o procedimientos (como Public o Shared)
Modificador opcional. No es necesario utilizar el modificador Overloads cuando se definen varias propiedades o
procedimientos sobrecargados en la misma clase. Sin embargo, si utiliza Overloads en una de las declaraciones, debe
utilizarlo en todas ellas.
Sombreado y sobrecarga. Overloads también se puede utilizar para sombrear un miembro existente o un conjunto de
miembros sobrecargados, en una clase base. Cuando se utiliza Overloads de esta forma, se declara la propiedad o el
método con el mismo nombre y la misma lista de parámetros que el miembro de clase base, y no se proporciona la
palabra clave Shadows.
El modificador Overloads se puede utilizar en estos contextos:
Function (Instrucción)
Operator (Instrucción)
Property (Instrucción)
Sub (Instrucción)
Vea también
Tareas
Cómo: Definir un operador de conversión
Referencia
Shadows
Conceptos
Sobrecarga de procedimientos
Tipos genéricos en Visual Basic
Procedimientos de operador
Referencia del lenguaje Visual Basic

Overridable
Especifica que una propiedad o procedimiento se puede reemplazar por una propiedad o procedimiento con nombre idéntico
de una clase derivada.
Comentarios
Overridable es el valor predeterminado de un procedimiento o propiedad que reemplaza a un procedimiento o propiedad de
clase base.
El sombreado y el reemplazo definen de nuevo un elemento heredado, pero hay diferencias significativas entre los dos
enfoques. Para obtener más información, vea Sombrear en Visual Basic.
Un elemento que se puede reemplazar se denomina en ocasiones elemento virtual. Si se puede reemplazar, pero no tiene que
reemplazarse, en ocasiones también se denomina elemento concreto.
Reglas
Contexto de la declaración. Sólo puede utilizarse Overridable en una propiedad o instrucción de declaración de
procedimiento.
Modificadores combinados. No se puede especificar Overridable junto con MustOverride, NotOverridable o
Shared en la misma declaración. Dado que un elemento de reemplazo es implícitamente reemplazable, no puede
combinar Overridable con Overrides.
El modificador Overridable se puede utilizar en estos contextos:
Instrucción Function (Visual Basic)
Property (Instrucción)
Instrucción Sub (Visual Basic)
Vea también
Referencia
MustOverride
NotOverridable
Overrides
Palabras clave del lenguaje Visual Basic
Conceptos
Sombrear en Visual Basic
Referencia del lenguaje Visual Basic

Overrides
Establece que una propiedad o procedimiento reemplaza una propiedad o un procedimiento específicos heredados de una
clase base.
Comentarios
Reglas
Contexto de declaración. Sólo pude utilizarse Overrides en una instrucción de declaración de procedimiento o
propiedad.
Modificadores combinados. No se puede especificar Overrides junto con Shadows o Shared en la misma
declaración. Dado que un elemento de reemplazo es reemplazable de forma implícita, no se puede combinar
Overridable con Overrides.
Coincidencia de firmas. La firma de esta declaración debe coincidir exactamente con la firma de la propiedad o
procedimiento que reemplaza. Esto significa que las listas de parámetros deben tener el mismo número de parámetros,
en el mismo orden, con los mismos tipos de datos.
Además de la firma, la declaración de reemplazo también debe coincidir exactamente con los siguientes elementos:
El nivel de acceso
El tipo de valor devuelto, si lo hubiese
Firmas genéricas. En un procedimiento genérico, la firma incluye el número de parámetros de tipo. Por tanto, la
declaración de reemplazo debe coincidir también en esto con la versión de la clase base.
Coincidencia adicional. Además de coincidir con la firma de la versión de la clase base, esta declaración debe coincidir
también en lo siguiente:
Modificador de nivel de acceso (como Public (Visual Basic))
Mecanismo para pasar argumentos de cada parámetro (ByVal o ByRef)
Listas de restricciones de cada parámetro de tipo de un procedimiento genérico
Sombreado y reemplazo. El sombreado y el reemplazo definen de nuevo un elemento heredado, pero existen
diferencias significativas entre los dos enfoques. Para obtener más información, vea Sombrear en Visual Basic.
El modificador Overrides se puede utilizar en estos contextos:
Function (Instrucción)
Property (Instrucción)
Sub (Instrucción)
Vea también
Referencia
MustOverride
NotOverridable
Overridable
Palabras clave del lenguaje Visual Basic
Lista de tipos
Conceptos
Sombrear en Visual Basic
Tipos genéricos en Visual Basic
Referencia del lenguaje Visual Basic

Palabras clave P-Z


La tabla siguiente contiene una lista de las palabras clave del lenguaje Visual Basic.

ParamArray Partial Preserve Private

Protected Public RaiseEvent ReadOnly

Resume Shadows Shared Static

Step Structure Text Then

To True TryCast Unicode

Until When While Widening

WithEvents WriteOnly
Notas para desarrolladores de dispositivos inteligentes
El siguiente elemento no se admite en las aplicaciones de dispositivos inteligentes: Unicode.
Vea también
Referencia
Palabras clave A-E
Palabras clave F-O
Otros recursos
Referencia de Visual Basic
Referencia del lenguaje Visual Basic

ParamArray
Especifica que el parámetro de un procedimiento toma una matriz opcional de elementos del tipo especificado. ParamArray
sólo se puede utilizar como el último parámetro de una lista de parámetros.
Comentarios
ParamArray permite pasar al procedimiento un número arbitrario de argumentos. Un parámetro ParamArray siempre se
declara mediante ByVal.
Puede proporcionar uno o más argumentos en un parámetro ParamArray pasando una matriz del tipo de datos adecuado,
una lista de valores separados por comas o nada en absoluto. Para obtener más detalles, vea "Llamar a un lista de parámetros"
en Matrices de parámetros.
Nota de seguridad
Si se trabaja con matrices cuyo tamaño es excesivamente grande, existe el riesgo de sobrecargar alguna capacidad interna de
la aplicación. Si acepta una matriz de parámetro del código de llamada, debe comprobar su longitud y llevar a cabo los pasos
necesarios si es demasiado grande para la aplicación.

El modificador ParamArray se puede utilizar en estos contextos:


Declare (Instrucción)
Instrucción Function (Visual Basic)
Property (Instrucción)
Instrucción Sub (Visual Basic)
Vea también
Tareas
Cómo: Definir un procedimiento con un número indefinido de parámetros
Cómo: Llamar a un procedimiento que toma un número indefinido de parámetros
Referencia
Palabras clave del lenguaje Visual Basic
Conceptos
Matrices de parámetros
Referencia del lenguaje Visual Basic

Partial (Visual Basic)


Indica que la declaración de una clase o una estructura es una definición parcial de dicha clase o estructura.

[ <attrlist> ] [ accessmodifier ] [ Shadows ] [ MustInherit | NotInheritable ] _


Partial { Class | Structure } name [ (Of typelist) ]
[ Inherits classname ]
[ Implements interfacenames ]
[ variabledeclarations ]
[ proceduredeclarations ]
{ End Class | End Structure }

Partes
attrlist
Opcional. Lista de atributos que se aplica a esta clase o estructura. Debe incluir la Lista de atributos entre corchetes angulares
(< >).
accessmodifier
Opcional. Especifica qué código puede tener acceso a esta clase o estructura. Vea Niveles de acceso en Visual Basic.
Shadows
Opcional. Vea Shadows.
MustInherit
Opcional. Vea MustInherit.
NotInheritable
Opcional. Vea NotInheritable.
name
Obligatoria. Nombre de esta clase o estructura. Debe coincidir con el nombre definido en todas las demás declaraciones
parciales de la misma clase o estructura.
Of
Opcional. Especifica que se trata de una estructura o clase genérica. Vea Tipos genéricos en Visual Basic.
typelist
Es obligatoria si se utiliza Of. Vea Lista de tipos.
Inherits
Opcional. Vea Inherits (Instrucción).
classname
Es obligatoria si se utiliza Inherits. Nombre de la clase o interfaz de la que se deriva esta clase.
Implements
Opcional. Vea Implements (Instrucción).
interfacenames
Es obligatoria si se utiliza Implements. Nombres de las interfaces implementadas por esta clase o estructura.
variabledeclarations
Opcional. Instrucciones que declaran eventos y variables adicionales para la clase o estructura.
proceduredeclarations
Opcional. Instrucciones que declaran y definen procedimientos adicionales para la clase o estructura.
End Class o End Structure
Finaliza esta definición parcial de Class o Structure.
Comentarios
Puede dividir la definición de una clase o estructura en varias declaraciones con la palabra clave Partial. Puede utilizar tantas
declaraciones parciales como desee en tantos archivos de código fuente diferentes como sea necesario. Sin embargo, todas las
declaraciones deben estar en el mismo ensamblado y el mismo espacio de nombres.
Nota
Visual Basic utiliza definiciones de clase parciales para separar el código generado del código creado por el usuario en archiv
os de código fuente distintos. Por ejemplo, el Diseñador de Windows Forms define clases parciales para los controles, com
o Form. No debería modificar el código generado de estos controles.

En circunstancias normales, no debería dividir el desarrollo de una única clase o estructura en dos o más declaraciones. Por
tanto, en la mayoría de los casos no necesitará la palabra clave Partial.
Todas las reglas de creación de clases y estructuras, como por ejemplo las reglas de herencia y utilización de modificadores, se
aplican cuando se crea una clase o una estructura parcial.
Procedimientos recomendados
Utilización de palabras clave. Por motivos de legibilidad, cada declaración parcial de una clase o estructura debería
incluir la palabra clave Partial. El compilador únicamente permite que se omita la palabra clave en una sola declaración
parcial; si se omite en dos o más declaraciones parciales, el compilador indicará un error.
Comportamiento
Unión de declaraciones. El compilador trata la clase o estructura como la unión de todas sus declaraciones parciales.
Todos los modificadores de cada definición parcial se aplican a toda la clase o estructura, y todos los miembros de cada
definición parcial están disponibles en toda la clase o estructura.
La promoción de tipos no está permitida para tipos parciales en módulos. Si una definición parcial está dentro de
un módulo, la promoción de tipos de esa clase o estructura se rechaza automáticamente. En este caso, un conjunto de
definiciones parciales puede producir resultados inesperados e incluso errores del compilador. Para obtener más
información, vea Promoción de tipos.
El compilador sólo combina las definiciones parciales cuando sus rutas válidas son idénticas.
La palabra clave Partial se puede utilizar en estos contextos:
Class (Instrucción)
Structure (Instrucción)
Ejemplo
En el ejemplo siguiente se divide la definición de la clase sampleClass en dos declaraciones, cada una de las cuales define un
procedimiento Sub diferente.
VB
Partial Public Class sampleClass
Public Sub sub1()
End Sub
End Class
Partial Public Class sampleClass
Public Sub sub2()
End Sub
End Class

Las dos definiciones parciales del ejemplo anterior podrían estar en el mismo archivo de código fuente o en dos archivos de
código fuente diferentes.
Vea también
Referencia
Instrucción Class (Visual Basic)
Structure (Instrucción)
Shadows
Conceptos
Promoción de tipos
Tipos genéricos en Visual Basic
Referencia del lenguaje Visual Basic

Preserve
Impide que se borre el contenido de una matriz cuando se cambian las dimensiones de la misma.
Comentarios
La palabra clave Preserve se puede utilizar en este contexto:
Instrucción ReDim (Visual Basic)
Vea también
Referencia
Palabras clave del lenguaje Visual Basic
Referencia del lenguaje Visual Basic

Private (Visual Basic)


Especifica que sólo se puede tener acceso a uno o varios elementos de programación declarados desde el contexto de la
declaración, incluidos todos los tipos que contiene.
Comentarios
Si un elemento de programación representa la funcionalidad de propiedad o contiene datos confidenciales, por lo general
deseará limitar el acceso a este elemento con toda la rigurosidad que sea posible. Para alcanzar la limitación máxima, permita
únicamente que el módulo, la clase o la estructura que define el elemento tenga acceso a este elemento. Para limitar el acceso
a un elemento de este modo, puede declararlo con Private.
Reglas
Contexto de declaración. Sólo puede utilizar Private en el nivel de módulo. Esto significa que el contexto de la
declaración de un elemento Private debe ser un módulo, una clase o una estructura, y no un archivo de código fuente,
un espacio de nombres, una interfaz o un procedimiento.
Comportamiento
Nivel de acceso. Todo el código de un contexto de declaración puede tener acceso a sus elementos Private. Esto
incluye el código del tipo contenido, por ejemplo una clase anidada o una expresión de asignación de una enumeración.
Ningún código fuera del contexto de declaración puede tener acceso a sus elementos Private.
Modificadores de acceso. Las palabras clave que especifican el nivel de acceso se denominan modificadores de acceso.
Encontrará una comparación de los modificadores de acceso en Niveles de acceso en Visual Basic.
El modificador Private se puede utilizar en estos contextos:
Class (Instrucción)
Const (Instrucción)
Declare (Instrucción)
Delegate (Instrucción)
Dim (Instrucción)
Enum (Instrucción)
Event (Instrucción)
Function (Instrucción)
Interface (Instrucción)
Property (Instrucción)
Structure (Instrucción)
Sub (Instrucción)
Vea también
Referencia
Public (Visual Basic)
Protected (Visual Basic)
Friend (Visual Basic)
Conceptos
Niveles de acceso en Visual Basic
Procedimientos en Visual Basic
Otros recursos
Estructuras: tipos de datos propios
Descripción de las clases
Referencia del lenguaje Visual Basic

Protected (Visual Basic)


Especifica que sólo se puede obtener acceso a uno o varios elementos de programación declarados desde su propia clase o
desde una clase derivada.
Comentarios
A veces un elemento de programación declarado en una clase contiene datos confidenciales o código restringido, por lo que
conviene limitar el acceso a dicho elemento. Sin embargo, si la clase se puede heredar y se prevé una jerarquía de clases
derivadas, quizás sea necesario que estas clases derivadas tengan acceso a los datos y al código. En este caso, deseará que se
pueda tener acceso al elemento desde la clase base y desde todas las clases derivadas. Para limitar el acceso a un elemento de
este modo, puede declararlo con Protected.
Reglas
Contexto de la declaración. Sólo puede utilizar Protected en el nivel de clase. Esto significa que el contexto de la
declaración de un elemento Protected debe ser una clase, y no un archivo de código fuente, un espacio de nombres, una
interfaz, un módulo, una estructura ni un procedimiento.
Modificadores combinados. Puede utilizar el modificador Protected junto con el modificador Friend (Visual Basic) en
la misma declaración. Esta combinación hace que se pueda obtener acceso a los elementos declarados desde cualquier
punto del mismo ensamblado, desde su propia clase y desde las clases derivadas. Sólo puede especificar Protected
Friend en miembros de clases.
Comportamiento
Nivel de acceso. Todo el código de una clase puede obtener acceso a sus elementos. El código de cualquier clase que se
derive de una clase base puede tener acceso a todos los elementos Protected de la clase base. Esto se aplica en todos los
niveles de derivación, lo que significa que una clase puede tener acceso a los elementos Protected de la clase base de la
clase base, etc.
El acceso protegido no es un supraconjunto ni un subconjunto del acceso de tipo amigo.
Modificadores de acceso. Las palabras clave que especifican el nivel de acceso se denominan modificadores de acceso.
Encontrará una comparación de los modificadores de acceso en Niveles de acceso en Visual Basic.
El modificador Protected se puede utilizar en estos contextos:
Class (Instrucción)
Const (Instrucción)
Declare (Instrucción)
Delegate (Instrucción)
Dim (Instrucción)
Enum (Instrucción)
Event (Instrucción)
Function (Instrucción)
Interface (Instrucción)
Property (Instrucción)
Structure (Instrucción)
Sub (Instrucción)
Vea también
Referencia
Public (Visual Basic)
Friend (Visual Basic)
Private (Visual Basic)
Conceptos
Niveles de acceso en Visual Basic
Procedimientos en Visual Basic
Otros recursos
Estructuras: tipos de datos propios
Descripción de las clases
Referencia del lenguaje Visual Basic

Public (Visual Basic)


Especifica que uno o varios elementos de programación declarados no tienen ninguna restricción de acceso.
Comentarios
Si publica un componente o conjunto de componentes, como una biblioteca de clases, deseará que los elementos de
programación sean accesibles para todos los códigos que interactúan con su ensamblado. Para otorgar este acceso ilimitado
en un elemento, puede declararlo con Public.
El acceso público es el nivel normal para un elemento de programación cuando no necesita limitar su acceso. Tenga en cuenta
que el nivel de acceso de un elemento declarado dentro de una interfaz, módulo, clase o estructura es de forma
predeterminada Public si no lo declara de otra forma.
Reglas
Contexto de la declaración. Puede utilizar Public solamente en el nivel de módulo, interfaz o espacio de nombres.
Esto significa que el contexto de la declaración para un elemento Public debe ser un archivo de código fuente, espacio
de nombres, interfaz, módulo, clase o estructura y no puede ser un procedimiento.
Comportamiento
Nivel de acceso. Todos los códigos que pueden tener acceso a un módulo, clase o estructura pueden tener acceso a sus
elementos Public.
Acceso predeterminado. Las variables locales dentro de un procedimiento tienen un valor predeterminado de acceso
público y no puede utilizar ningún modificador de acceso en ellos.
Modificadores de acceso. Las palabras clave que especifican el nivel de acceso se llaman modificadores de acceso.
Para consultar una comparación de los modificadores de acceso, vea Niveles de acceso en Visual Basic.
El modificador Public se puede utilizar en estos contextos:
Class (Instrucción)
Const (Instrucción)
Declare (Instrucción)
Delegate (Instrucción)
Dim (Instrucción)
Enum (Instrucción)
Event (Instrucción)
Function (Instrucción)
Interface (Instrucción)
Module (Instrucción)
Operator (Instrucción)
Property (Instrucción)
Structure (Instrucción)
Sub (Instrucción)
Vea también
Referencia
Protected (Visual Basic)
Friend (Visual Basic)
Private (Visual Basic)
Conceptos
Niveles de acceso en Visual Basic
Procedimientos en Visual Basic
Otros recursos
Estructuras: tipos de datos propios
Descripción de las clases
Referencia del lenguaje Visual Basic

RaiseEvent
Inicia un evento en tiempo de ejecución o declara el código que se debe ejecutar al iniciar un evento.
Comentarios
La palabra clave RaiseEvent se puede utilizar en estos contextos:
Event (Instrucción)
La palabra clave RaiseEvent declara un descriptor de acceso RaiseEvent personalizado.
RaiseEvent (Instrucción)
La palabra clave RaiseEvent provoca un evento.
Vea también
Tareas
Cómo: Provocar un evento (Visual Basic)
Cómo: Declarar eventos que evitan bloqueos
Cómo: Declarar eventos que evitan que se pierda memoria
Referencia del lenguaje Visual Basic

ReadOnly (Visual Basic)


Especifica que una variable o una propiedad se puede leer, pero no se puede modificar.
Comentarios
Reglas
Contexto de declaración. Sólo puede utilizar ReadOnly en el nivel de módulo. Esto significa que el contexto de
declaración de un elemento ReadOnly debe ser una clase, una estructura o un módulo, y no un archivo de código
fuente, un espacio de nombres o un procedimiento.
Modificadores combinados. No se puede especificar ReadOnly junto con Static en la misma declaración.
Asignar un valor. El código que utiliza una propiedad ReadOnly no puede establecer su valor. Pero el código que tiene
acceso al almacenamiento subyacente puede asignar o modificar el valor en cualquier momento.
Sólo puede asignar un valor a una variable ReadOnly en su declaración o en el constructor de una clase o estructura en
la que está definida.
Cuándo utilizar una variable de sólo lectura
Hay situaciones en las que no puede utilizar Instrucción Const (Visual Basic) para declarar y asignar un valor constante. Por
ejemplo, podría ocurrir que la instrucción Const no aceptara el tipo de datos que desea asignar o que no pueda calcular el
valor en tiempo de compilación con una expresión constante. Es posible incluso que no conozca el valor en tiempo de
compilación. En estos casos, puede utilizar una variable ReadOnly para albergar un valor constante.
Nota de seguridad
Si el tipo de datos de la variable es un tipo de referencia, como una matriz o una instancia de clase, sus miembros se pueden
modificar aunque la propia variable sea ReadOnly. Esto se ilustra en el siguiente ejemplo:

ReadOnly characterArray() As Char = {"x"c, "y"c, "z"c}


Sub changeArrayElement()
characterArray(1) = "M"c
End Sub

Cuando se inicializa, la matriz señalada por characterArray() alberga "x", "y" y "z". Como la variable characterArray es
ReadOnly, no es posible modificar su valor una vez que se ha inicializado; es decir, no se le puede asignar una nueva matriz.
Sin embargo, puede cambiar los valores de uno o varios miembros de la matriz. Después de que se produzca una llamada al
procedimiento changeArrayElement, la matriz señalada por characterArray() alberga "x", "M" y "z".
Observe que esta operación es equivalente a declarar un parámetro de procedimiento que sea ByVal, lo que impide que el
procedimiento pueda modificar el argumento de llamada, aunque puede modificar sus miembros.
Ejemplo
En el ejemplo siguiente se define una propiedad ReadOnly para la fecha en la que se contrató a un empleado. La clase
almacena el valor de la propiedad internamente como una variable Private y únicamente el código incluido en la clase puede
cambiar ese valor. Sin embargo, la propiedad es Public y cualquier código que pueda tener acceso a la clase podrá leer la
propiedad.
VB
Class employee
' Only code inside class employee can change the value of hireDateValue.
Private hireDateValue As Date
' Any code that can access class employee can read property dateHired.
Public ReadOnly Property dateHired() As Date
Get
Return hireDateValue
End Get
End Property
End Class
El modificador ReadOnly se puede utilizar en estos contextos:
Dim (Instrucción)
Property (Instrucción)
Vea también
Referencia
WriteOnly
Palabras clave del lenguaje Visual Basic
Referencia del lenguaje Visual Basic

RemoveHandler
Quita la asociación entre un evento y un controlador de eventos o declara qué código se debe ejecutar al agregar un
controlador de eventos.
Comentarios
La palabra clave RemoveHandler se puede utilizar en estos contextos:
Event (Instrucción)
La palabra clave RemoveHandler declara un descriptor de acceso RemoveHandler personalizado.
RemoveHandler (Instrucción)
La palabra clave RemoveHandler quita la asociación entre un evento y un controlador de eventos.
Vea también
Tareas
Cómo: Declarar eventos que evitan bloqueos
Cómo: Declarar eventos que evitan que se pierda memoria
Referencia del lenguaje Visual Basic

Resume
Especifica dónde debe continuar la ejecución después de controlar un error.
Comentarios
La palabra clave Resume se puede utilizar en estos contextos:
Instrucción On Error (Visual Basic)
Resume (Instrucción)
Vea también
Referencia
Palabras clave del lenguaje Visual Basic
Otros recursos
Control de excepciones y errores en Visual Basic
Referencia del lenguaje Visual Basic

Shadows
Especifica que un elemento de programación declarado vuelve a declarar y oculta un elemento denominado de forma idéntica
o un conjunto de elementos sobrecargados, en una clase base.
Comentarios
El propósito principal del sombreado (que también se conoce como ocultar por nombre) es conservar la definición de los
miembros de clase. La clase base puede sufrir un cambio que cree un elemento con el mismo nombre que otro ya definido. Si
sucede esto, el modificador Shadows fuerza a las referencias mediante la clase para que se resuelvan en el miembro definido
en lugar de hacerlo en el nuevo elemento de la clase base.
El sombreado y el reemplazo definen de nuevo un elemento heredado, pero hay diferencias significativas entre los dos
enfoques. Para obtener más información, vea Sombrear en Visual Basic.
Reglas
Contexto de la declaración. Sólo puede utilizarse Shadows en el nivel de clase. Esto significa que el contexto de la
declaración para un elemento Shadows debe ser una clase, y no puede ser un archivo de código fuente, espacio de
nombres, interfaz, módulo, estructura o procedimiento.
Se puede declarar sólo un elemento de sombreado en una única instrucción de declaración.
Modificadores combinados. No se puede especificar Shadows junto con Overloads, Overrides o Static en la misma
declaración.
Tipos de elementos. Puede hacer que cualquier tipo de elemento declarado prevalezca sobre cualquier otro tipo. Si
sombrea una propiedad o procedimiento con otra propiedad o procedimiento, los parámetros y el tipo de valor devuelto
no tienen que coincidir con los de la propiedad o procedimiento de la clase base.
Acceso. El elemento sombreado en la clase base no está disponible normalmente desde la clase derivada que lo
sombrea. No obstante, se aplican las siguientes consideraciones.
Si el elemento de sombreado no es accesible desde el código que hace referencia a él, la referencia se resuelve
como el elemento sombreado. Por ejemplo, si un elemento Private sombrea un elemento de clase base, en su
lugar, el código que no tiene permiso para obtener acceso al elemento Private obtiene acceso al elemento de
clase base.
Si se sombrea un elemento, aún se podrá tener acceso al mismo mediante un objeto declarado con el tipo de la
clase base. También puede tener acceso a él a través de MyBase.
El modificador Shadows se puede utilizar en estos contextos:
Class (Instrucción)
Const (Instrucción)
Declare (Instrucción)
Delegate (Instrucción)
Dim (Instrucción)
Enum (Instrucción)
Event (Instrucción)
Function (Instrucción)
Interface (Instrucción)
Property (Instrucción)
Structure (Instrucción)
Sub (Instrucción)
Vea también
Referencia
Shared (Visual Basic)
Static (Visual Basic)
Private (Visual Basic)
MyBase
MustOverride
NotOverridable
Overloads
Overridable
Overrides
Conceptos
Sombrear en Visual Basic
Referencia del lenguaje Visual Basic

Shared (Visual Basic)


Especifica que uno o varios elementos de programación declarados están asociados a una clase o estructura en general y no a
una instancia específica de la clase o estructura.
Comentarios
Cuándo se utiliza Shared
Al compartir un miembro de una clase o estructura, éste está disponible para cada instancia; en cambio, si es no compartido,
cada instancia mantiene su propia copia. Por ejemplo, esto es útil si el valor de una variable se aplica a toda la aplicación. Si
declara esta variable Shared, todas las instancias tendrán acceso a la misma ubicación de almacenamiento y si una instancia
cambia el valor de la variable, todas las instancias tendrán acceso al valor actualizado.
El uso compartido no modifica el nivel de acceso de un miembro. Por ejemplo, un miembro de clase puede ser compartido y
privado (accesible sólo desde dentro la clase), o no compartido y público. Para obtener más información, vea
Niveles de acceso en Visual Basic.
Reglas
Contexto de la declaración. Sólo puede utilizarse Shared en el nivel de módulo. Esto significa que el contexto de
declaración de un elemento Shared debe ser una clase o estructura, y no un archivo de código fuente, un espacio de
nombres o un procedimiento.
Modificadores combinados. No se puede especificar Shared junto con Overrides, Overridable, NotOverridable,
MustOverride o Static (Visual Basic) en la misma declaración.
Acceso. Se tiene acceso a un elemento compartido calificándolo con su nombre de clase o de estructura, y no con el
nombre de variable de una instancia específica de su clase o estructura. Ni siquiera tiene que crear una instancia de una
clase o estructura para tener acceso a sus miembros compartidos.
El ejemplo siguiente llama al procedimiento compartido IsNaN expuesto por la estructura Double.
If Double.IsNaN(result) Then MsgBox("Result is mathematically undefined.")

Uso compartido implícito. No se puede utilizar el modificador Shared en Instrucción Const (Visual Basic), pero las
constantes se comparten de forma implícita. De igual manera, no se puede declarar un miembro de un módulo o una
interfaz Shared pero se comparte implícitamente.
Comportamiento
Almacenamiento. Una variable o evento compartido se almacena en la memoria sólo una vez, independientemente del
número de instancias que se hayan creado de su clase o estructura. De igual manera, una propiedad o procedimiento
compartido contiene sólo un conjunto de variables locales.
Acceso mediante una variable de instancia. Es posible tener acceso a un elemento compartido calificándolo con el
nombre de una variable que contiene una instancia específica de su clase o estructura. Aunque esto suele funcionar del
modo previsto, el compilador genera un mensaje de advertencia y obtiene acceso mediante el nombre de clase o
estructura en lugar de la variable.
Acceso mediante una expresión de instancia. Si tiene acceso a un elemento compartido mediante una expresión que
devuelve una instancia de su clase o estructura, el compilador obtiene acceso mediante el nombre de clase o estructura
en lugar de evaluar la expresión. Esto genera unos resultados inesperados si había previsto que la expresión realizara
otras acciones además de devolver la instancia. Esto se ilustra en el siguiente ejemplo:

Sub main()
shareTotal.total = 10
' The preceding line is the preferred way to access total.
Dim instanceVar As New shareTotal
instanceVar.total += 100
' The preceding line generates a compiler warning message and
' accesses total through class shareTotal instead of through
' the variable instanceVar. This works as expected and adds
' 100 to total.
returnClass().total += 1000
' The preceding line generates a compiler warning message and
' accesses total through class shareTotal instead of calling
' returnClass(). This adds 1000 to total but does not work as
' expected, because the MsgBox in returnClass() does not run.
MsgBox("Value of total is " & CStr(shareTotal.total))
End Sub
Public Function returnClass() As shareTotal
MsgBox("Function returnClass() called")
Return New shareTotal
End Function
Public Class shareTotal
Public Shared total As Integer
End Class

En el ejemplo anterior, el compilador genera un mensaje de advertencia las dos veces que el código tiene acceso a la
variable compartida total mediante una instancia. En cada caso, obtiene acceso directamente mediante la clase
shareTotal y no utiliza ninguna instancia. En el caso de una llamada prevista al procedimiento returnClass, significa que
ni tan siquiera genera una llamada a returnClass, por lo que no se realiza la acción adicional de mostrar "Function
returnClass() called".
El modificador Shared se puede utilizar en estos contextos:
Dim (Instrucción)
Event (Instrucción)
Function (Instrucción)
Operator (Instrucción)
Property (Instrucción)
Sub (Instrucción)
Vea también
Referencia
Shadows
Static (Visual Basic)
Conceptos
Período de duración en Visual Basic
Procedimientos en Visual Basic
Miembros compartidos en Visual Basic
Otros recursos
Estructuras: tipos de datos propios
Descripción de las clases
Referencia del lenguaje Visual Basic

Static (Visual Basic)


Especifica si una o varias variables locales declaradas deben seguir existiendo y conservar sus últimos valores tras la
finalización del procedimiento en el que se han declarado.
Comentarios
Normalmente, una variable local de un procedimiento deja de existir en cuanto finaliza el procedimiento. Una variable estática
sigue existiendo y conserva su valor más reciente. La próxima vez que su código llame al procedimiento, no se reinicializa la
variable y sigue conservando el último valor asignado. Una variable estática sigue existiendo durante el período de la clase o
módulo para el que está definida.
Reglas
Contexto de la declaración. Sólo puede utilizar Static en variables local. Esto significa que el contexto de la
declaración para una variable Static debe ser un procedimiento o un bloque dentro de un procedimiento y no puede ser
un archivo de código fuente, un espacio de nombres, una clase, una estructura o un módulo.
No puede utilizar Static dentro de un procedimiento de estructura.
Modificadores combinados. No se puede especificar Static junto con ReadOnly, Shadows o Shared en la misma
declaración.
Comportamiento
El comportamiento de cualquier variable local depende de si se declara en un procedimiento Shared. Si el procedimiento es
Shared, todas sus variables locales se comparten automáticamente, incluso las variables Static. Sólo existe una copia de este
tipo de variable para toda la aplicación. Llama a un procedimiento Shared utilizando el nombre de clase y no una variable que
señala a una instancia de la clase.
Si el procedimiento no es Shared, sus variables locales son variables de instancia, incluso las variables Static. Existe una copia
independiente de cada variable en todas las instancias de la clase. Llama a un procedimiento no compartido utilizando una
variable que señala a una instancia concreta de la clase. Cualquier variable de esa instancia es independiente de una variable
con el mismo nombre de otra instancia. Por consiguiente, pueden contener valores diferentes.
Ejemplo
El siguiente ejemplo muestra el uso de Static.
VB
Function updateSales(ByVal thisSale As Decimal) As Decimal
Static totalSales As Decimal = 0
totalSales += thisSale
Return totalSales
End Function

El valor totalSales de la variable Static sólo se inicializa a 0 una vez. Cada vez que escribe updateSales, totalSales sigue
teniendo el valor calculado más reciente.
El modificador Static se puede utilizar en este contexto:
Instrucción Dim (Visual Basic)
Vea también
Referencia
Shadows
Shared (Visual Basic)
Conceptos
Período de duración en Visual Basic
Declaración de variable en Visual Basic
Otros recursos
Estructuras: tipos de datos propios
Descripción de las clases
Referencia del lenguaje Visual Basic

Step
Especifica un valor de incremento para un contador de bucle.
Comentarios
La palabra clave Step se puede utilizar en este contexto:
Instrucción For...Next (Visual Basic)
Vea también
Referencia
Palabras clave del lenguaje Visual Basic
Referencia del lenguaje Visual Basic

Structure (Visual Basic)


Restringe un parámetro de tipo genérico de forma que cualquier argumento de tipo que reciba sea un tipo de valor o
introduce una Structure (Instrucción).
Comentarios
Cuando declara un parámetro de tipo en un tipo genérico, puede imponer una restricción, un conjunto de una o varias
condiciones que limitan el argumento de tipo que se puede enviar a dicho parámetro de tipo. Para obtener más información,
vea "Restricciones" en Tipos genéricos en Visual Basic.
Entre los posibles requisitos de una restricción se puede indicar que el argumento de tipo debe ser un tipo de valor, por
ejemplo una estructura, enumeración o tipo de datos básico. Esto se especifica mediante la incorporación de la palabra clave
Structure en la restricción.
Otro requisito posible es que el argumento de tipo debe ser un tipo de referencia, por ejemplo, String, matriz o delegado, o
bien un objeto creado a partir de una clase. Para especificar un requisito de tipo de referencia, se incluye la palabra clave
Class (Visual Basic) en la restricción.
No tiene que especificar Class o Structure en una restricción. No puede especificar ambas en la misma restricción.
La restricción Structure no es igual que Structure (Instrucción).
Vea también
Referencia
Class (Visual Basic)
Structure (Instrucción)
Conceptos
Tipos genéricos en Visual Basic
Tipos de valores y tipos de referencia
Referencia del lenguaje Visual Basic

Text
Establece el método de comparación de cadenas para ordenar caracteres de texto equivalentes como iguales.
Comentarios
La instrucción Option Compare debe aparecer en un archivo de código fuente antes que cualquier otra instrucción. Afecta a la
comparación de cadenas de todo el código generado por dicho archivo de código fuente.
Cuándo se utiliza Text
Si las cadenas contienen todos los caracteres de texto, a menudo desea compararlas teniendo en cuenta las equivalencias
alfabéticas como la no distinción entre mayúsculas y minúsculas y las letras estrechamente relacionadas. Por ejemplo, podría
considerar A y a como iguales y Ä y ä como anteriores a B y b. Para especificar una comparación de texto, establezca Option
Compare en Text.
La palabra clave Text se puede utilizar en este contexto:
Option Compare (Instrucción)
Vea también
Referencia
Binary
Palabras clave del lenguaje Visual Basic
Referencia del lenguaje Visual Basic

Then
Precede a un bloque de instrucciones que se compila o se ejecuta si una condición probada es verdadera.
Comentarios
La palabra clave Then se puede utilizar en estos contextos:
#If...Then...#Else (Directiva)
If...Then...Else (Instrucción)
Vea también
Referencia
Palabras clave del lenguaje Visual Basic
Referencia del lenguaje Visual Basic

To
Separa los valores inicial y final de un contador de bucle o de un intervalo de coincidencia de valores.
Comentarios
La palabra clave To se puede utilizar en estos contextos:
For...Next (Instrucción)
Select...Case (Instrucción)
Vea también
Referencia
Palabras clave del lenguaje Visual Basic
Referencia del lenguaje Visual Basic

True (Visual Basic)


Representa un valor de tipo Boolean que aprueba una comprobación condicional.
Comentarios
Los valores Boolean (Tipo de datos, Visual Basic) no se almacenan como números y los valores almacenados no se consideran
equivalentes a números. No debe escribir código que se base en los valores numéricos equivalentes de True y False. Siempre
que sea posible, debe restringir el uso de variables Boolean a los valores lógicos para los que se han diseñado. Si fuera
necesario mezclar valores de tipo Boolean y numéricos, asegúrese de entender el método de conversión elegido. Para obtener
más información, vea la sección sobre cómo el tipo Boolean no se convierte al tipo numérico correctamente en
Solucionar problemas de tipos de datos.
Vea también
Tareas
Solucionar problemas de tipos de datos
Referencia
Boolean (Tipo de datos, Visual Basic)
False (Visual Basic)
Referencia del lenguaje Visual Basic

TryCast
Introduce una operación de conversión de tipos que no produce una excepción.
Comentarios
Si se produce un error al intentar llevar a cabo una conversión, CType y DirectCast producen un error InvalidCastException.
Esto puede afectar negativamente al rendimiento de la aplicación. TryCast devuelve Nothing (Visual Basic), de modo que en
lugar de controlar una posible excepción, sólo debe comprobar el resultado devuelto con Nothing.
Utilice la palabra clave TryCast del mismo modo que utiliza las palabras clave CType (Función) y DirectCast. Proporcione una
expresión como primer argumento y el tipo al que se va a convertir como segundo argumento. TryCast sólo funciona en tipos
de referencia, como clases e interfaces. Requiere que exista una relación de herencia o implementación entre los dos tipos. Esto
significa que un tipo debe heredarse del otro o implementar al otro.
Errores
TryCast genera un error del compilador si detecta que no existe ninguna relación de herencia o implementación. Sin embargo,
la ausencia de un compilador no garantiza el éxito de la conversión. Si la conversión deseada es de restricción, puede
producirse un error en tiempo de ejecución. Si esto ocurre, TryCast devuelve Nothing (Visual Basic).
Palabras clave para conversiones
A continuación se incluye una comparación de las palabras clave de conversión de tipos.
Palabra clave Tipos de datos Relación de argumentos Error en tiempo de ejec
ución
CType (Función) Cualquier tipo de La conversión de ampliación o restricción debe definirse entre d Produce InvalidCastExc
datos os tipos de datos eption

DirectCast Cualquier tipo de Un tipo debe heredarse del otro tipo o implementarlo Produce InvalidCastExc
datos eption

TryCast Sólo tipos de refer Un tipo debe heredarse del otro tipo o implementarlo Devuelve
encia Nothing (Visual Basic)
Ejemplo
En el ejemplo siguiente se muestra cómo utilizar TryCast.
VB
Function PrintTypeCode(ByVal obj As Object) As String
Dim objAsConvertible As IConvertible = TryCast(obj, IConvertible)
If objAsConvertible Is Nothing Then
Return obj.ToString() & " does not implement IConvertible"
Else
Return "Type code is " & objAsConvertible.GetTypeCode()
End If
End Function

Vea también
Conceptos
Conversiones de ampliación y de restricción
Conversiones implícitas y explícitas
Referencia del lenguaje Visual Basic

Unicode (Visual Basic)


Especifica que Visual Basic debería calcular las referencias de todas las cadenas con valores de Unicode sin tener en cuenta el
nombre del procedimiento externo que se está declarando.
Cuando se llama a un procedimiento definido fuera del proyecto, el compilador de Visual Basic no tiene acceso a la
información que necesita para llamar correctamente al procedimiento. Esta información incluye información sobre dónde se
encuentra el procedimiento, cómo se identifica, la secuencia de llamada y el tipo de valor devuelto, y el juego de caracteres de
cadena que utiliza. Declare (Instrucción) crea una referencia a un procedimiento externo y proporciona esta información
necesaria.
La parte charsetmodifier de la instrucción Declare proporciona información sobre el juego de caracteres por calcular las
referencias de cadenas durante una llamada al procedimiento externo. También afecta al modo en el que Visual Basic busca el
nombre del procedimiento externo en el archivo externo. El modificador Unicode especifica que Visual Basic debe calcular las
referencias de todas las cadenas con valores Unicode y buscar el procedimiento sin modificar su nombre durante la búsqueda.
Si no se especifica un modificador de juego de caracteres, Ansi es el valor predeterminado.
Comentarios
El modificador Unicode se puede utilizar en este contexto:
Declare (Instrucción)
Notas para desarrolladores de dispositivos inteligentes
No se admite esta palabra clave.
Vea también
Referencia
Ansi
Auto
Palabras clave del lenguaje Visual Basic
Referencia del lenguaje Visual Basic

Until
Especifica una condición que finaliza la ejecución de un bucle Do.
Comentarios
La palabra clave Until se puede utilizar en este contexto:
Do...Loop (Instrucciones)
Vea también
Referencia
Palabras clave del lenguaje Visual Basic
Referencia del lenguaje Visual Basic

When
Agrega una comprobación condicional a una instrucción Catch.
Comentarios
La palabra clave When se puede utilizar en este contexto:
Try...Catch...Finally (Instrucciones)
Vea también
Referencia
Palabras clave del lenguaje Visual Basic
Referencia del lenguaje Visual Basic

While (Visual Basic)


Especifica una condición que permite continuar la ejecución de un bucle Do.
Comentarios
La palabra clave While no es igual que la instrucción de apertura del bloque While...End While
La palabra clave While se puede utilizar en este contexto:
Do...Loop (Instrucciones)
Vea también
Referencia
Instrucción While...End While (Visual Basic)
Referencia del lenguaje Visual Basic

Widening
Indica que un operador de conversión (CType) convierte una clase o una estructura en un tipo que puede incluir todos los
valores posibles de la clase o la estructura original.
Convertir con la palabra clave Widening
El procedimiento de conversión debe especificar Public Shared además de Widening.
Las conversiones de ampliación son siempre satisfactorias en tiempo de ejecución y no provocan nunca pérdida de datos.
Ejemplos son Single a Double, Char a String y un tipo derivado a su tipo base. Esta última conversión es de ampliación ya
que el tipo derivado contiene todos los miembros del tipo base y es, por tanto, una instancia del tipo base.
El código que la utiliza no tiene que emplear CType para las conversiones de ampliación, aun cuando Option Strict tenga el
valor On.
La palabra clave Widening se puede utilizar en este contexto:
Operator (Instrucción)
Vea también
Tareas
Cómo: Definir un operador
Referencia
Operator (Instrucción)
Narrowing
CType (Función)
Option Strict (Instrucción)
Conceptos
Conversiones de ampliación y de restricción
Referencia del lenguaje Visual Basic

WithEvents
Especifica que una o más variable miembro
 declaradas hacen referencia a una instancia de una clase que puede provocar
eventos.
Comentarios
Cuando una variable se define utilizando WithEvents, puede especificar mediante declaración que un método controla los
eventos de la variable mediante la palabra clave Handles.
Sólo puede utilizar WithEvents en el nivel de clase o de módulo. Esto significa que el contexto de declaración de una variable
WithEvents debe ser una clase o un módulo, y no un archivo de código fuente, un espacio de nombres o un procedimiento.
No puede utilizar WithEvents dentro de un miembro de estructura.
Con WithEvents sólo se pueden declarar variables individuales (no matrices).
Reglas
Tipos de elementos. Debe declarar las variables WithEvents para que sean variables de objeto y que puedan aceptar
instancias de clase. Sin embargo, no puede declararlas como Object. Debe declararlas como la clase específica que
puede provocar los eventos.
El modificador WithEvents se puede utilizar en este contexto: Instrucción Dim (Visual Basic)
Vea también
Referencia
Handles
Palabras clave del lenguaje Visual Basic
Conceptos
WithEvents y la cláusula Handles
Otros recursos
Eventos en Visual Basic
Referencia del lenguaje Visual Basic

WriteOnly
Especifica que se puede escribir pero no leer una propiedad.
Comentarios
Reglas
Contexto de la declaración. Sólo puede utilizarse WriteOnly en el nivel de módulo. Esto significa que el contexto de la
declaración para una propiedad WriteOnly debe ser una clase, estructura o módulo y no puede ser un archivo de código
fuente, espacio de nombres o procedimiento.
Puede declarar una propiedad como WriteOnly, pero no una variable.
Cuándo se utiliza WriteOnly
A veces desea que el código utilizado pueda establecer un valor pero sin descubrir lo que es. Por ejemplo, se deben proteger
los datos sensibles, como números de registro social o contraseñas, para que no obtenga acceso a ellos ningún componente
que no lo haya establecido. En estos casos, puede utilizar una propiedad WriteOnly para establecer el valor.
Nota de seguridad
Cuando define y utiliza una propiedad WriteOnly, tenga en cuenta las medidas de protección adicionales siguientes:

Reemplazo. Si la propiedad es un miembro de una clase, permita que tenga un valor predeterminado NotOverridable y
no la declare Overridable ni MustOverride. Esto evita que una clase derivada tenga un acceso no deseado mediante un
reemplazo.
Nivel de acceso. Si tiene datos sensibles de una propiedad en una o más variables, declárelas Private (Visual Basic) para
que ningún otro código pueda tener acceso a ellas.
Cifrado. Almacene todos los datos sensibles en un formulario cifrado en lugar de en texto sin formato. Si un código
malintencionado obtiene acceso de algún modo a esa área de memoria, resulta más difícil utilizar los datos. El cifrado
también es útil si es necesario serializar los datos sensibles.
Restablecimiento. Cuando se termina la clase, estructura o módulo que define la propiedad, restablezca los datos
sensibles a los valores predeterminados o a otros valores sin significado. Esto proporciona una protección adicional
cuando esa área de memoria se libera para el acceso general.
Persistencia. No conserve ningún dato sensible, por ejemplo en disco, si puede evitarlo. Tampoco escriba ningún dato
sensible en el Portapapeles.
El modificador WriteOnly se puede utilizar en este contexto:
Property (Instrucción)
Vea también
Referencia
ReadOnly (Visual Basic)
Private (Visual Basic)
Palabras clave del lenguaje Visual Basic
Referencia del lenguaje Visual Basic

Módulos (Visual Basic)


Los temas de esta sección documentan los módulos en tiempo de ejecución de Visual Basic y contienen las tablas de los
procedimientos de miembros, las propiedades, constantes y enumeraciones.
En esta sección
Módulo Constants (Visual Basic)
Módulo ControlChars (Visual Basic)
Módulo Conversion (Visual Basic)
Módulo DateAndTime (Visual Basic)
Módulo ErrObject (Visual Basic)
Módulo FileSystem (Visual Basic)
Módulo Financial (Visual Basic)
Módulo Globals (Visual Basic)
Módulo Information (Visual Basic)
Módulo Interaction (Visual Basic)
Módulo Strings (Visual Basic)
Módulo VbMath (Visual Basic)
Secciones relacionadas
Referencia de Visual Basic
Visual Basic
Referencia del lenguaje Visual Basic

Módulo Constants (Visual Basic)


El módulo Constants contiene un conjunto variado de constantes. Estas constantes pueden utilizarse en cualquier parte del
código.
Comentarios
Este módulo admite las constantes del lenguaje Visual Basic que corresponden a los miembros de muchas enumeraciones de
Visual Basic:
Miembros
vbAbort vbAbortRetryIgnore vbApplicationModal vbArchive

vbArray vbBack vbBinaryCompare vbBoolean

vbByte vbCancel vbCr vbCritical

vbCrLf vbCurrency vbDate vbDecimal

vbDefaultButton1 vbDefaultButton2 vbDefaultButton3 vbDirectory

vbDouble vbEmpty vbExclamation vbFalse

vbFirstFourDays vbFirstFullWeek vbFirstJan1 vbFormFeed

vbFriday vbGeneralDate vbGet vbHidden

vbHide vbHiragana vbIgnore vbInformation

vbInteger vbKatakana vbLet vbLf

vbLinguisticCasing vbLong vbLongDate vbLongTime

vbLowerCase vbMaximizedFocus vbMethod vbMinimizedFocus

vbMinimizedNoFocus vbMonday vbMsgBoxHelp vbMsgBoxRight

vbMsgBoxRtlReading vbMsgBoxSetForeground vbNarrow vbNewLine

vbNo vbNormal vbNormalFocus vbNormalNoFocus

vbNull vbNullChar vbNullString vbObject

vbObjectError vbOK vbOKCancel vbOKOnly

vbProperCase vbQuestion vbReadOnly vbRetry

vbRetryCancel vbSaturday vbSet vbShortDate

vbShortTime vbSimplifiedChinese vbSingle vbString

vbSunday vbSystem vbSystemModal vbTab

vbTextCompare vbThursday vbTraditionalChinese vbTrue


vbTuesday vbUpperCase vbUseDefault vbUserDefinedType

vbUseSystem vbUseSystemDayOfWeek vbVariant vbVerticalTab

vbVolume vbWednesday vbWide vbYes

vbYesNo vbYesNoCancel
Vea también
Referencia
AppWinStyle (Enumeración)
BuiltInRole (Enumeración)
CallType (Enumeración)
CompareMethod (Enumeración)
DateFormat (Enumeración)
DateInterval (Enumeración)
DueDate (Enumeración)
FileAttribute (Enumeración)
FirstDayOfWeek (Enumeración)
FirstWeekOfYear (Enumeración)
MsgBoxResult (Enumeración)
MsgBoxStyle (Enumeración)
OpenAccess (Enumeración)
OpenMode (Enumeración)
OpenShare (Enumeración)
Constantes de impresión y presentación
TriState (Enumeración)
VariantType (Enumeración)
VbStrConv (Enumeración)
Palabras clave y miembros por tareas
Palabras clave del lenguaje Visual Basic
Miembros de la biblioteca en tiempo de ejecución de Visual Basic
Palabras clave comparadas en diferentes lenguajes
Referencia del lenguaje Visual Basic

Módulo ControlChars (Visual Basic)


El módulo ControlChars contiene constantes empleadas como caracteres de control. Estas constantes pueden utilizarse en
cualquier parte del código.
Comentarios
Este módulo admite las palabras clave y los miembros de biblioteca en tiempo de ejecución del lenguaje Visual Basic que
proporcionan los caracteres de control constantes para imprimir y mostrar texto. Para obtener más información, vea
Constantes de impresión y presentación.
Members
Back Cr CrLf FormFeed

Lf NewLine NullChar Quote

Tab VerticalTab
Vea también
Referencia
Constantes de impresión y presentación
Palabras clave y miembros por tareas
Palabras clave del lenguaje Visual Basic
Miembros de la biblioteca en tiempo de ejecución de Visual Basic
Palabras clave comparadas en diferentes lenguajes
Referencia del lenguaje Visual Basic

Módulo Conversion (Visual Basic)


El módulo Conversion contiene los procedimientos empleados para realizar distintas operaciones de conversión.
Comentarios
Este módulo admite las palabras clave del lenguaje Visual Basic y los miembros de la biblioteca en tiempo de ejecución que
convierten números decimales a otras bases, números a cadenas, cadenas a números y un tipo de datos a otro.
Miembros
ErrorToString Fix Hex Int

Oct Str Val


Ejemplo
En este ejemplo se utiliza la función Hex para devolver el valor hexadecimal de un número.
VB
Dim TestHex As String
' Returns 5.
TestHex = Hex(5)
' Returns A.
TestHex = Hex(10)
' Returns 1CB.
TestHex = Hex(459)

Vea también
Referencia
Resumen de conversión
Palabras clave y miembros por tareas
Palabras clave del lenguaje Visual Basic
Miembros de la biblioteca en tiempo de ejecución de Visual Basic
Palabras clave comparadas en diferentes lenguajes
Referencia del lenguaje Visual Basic

Módulo DateAndTime (Visual Basic)


El módulo DateAndTime contiene los procedimientos y propiedades empleados en las operaciones de fecha y hora.
Comentarios
Este módulo es compatible con las palabras clave del lenguaje Visual Basic y los miembros de la biblioteca en tiempo de
ejecución que obtienen la fecha u hora actuales, realizan cálculos de fecha, devuelven una fecha o una hora o calculan la
duración de un proceso.
Miembros
DateAdd DateDiff DatePart DateSerial

DateString DateValue Day Hour

Minute Month MonthName Now

Second TimeOfDay Timer TimeSerial

TimeString TimeValue Today WeekDay

WeekDayName Year
Ejemplo
En este ejemplo se utiliza la propiedad Today para devolver la fecha de sistema actual.

Dim thisDate As Date


thisDate = Today

Vea también
Referencia
Resumen de fechas y horas
Palabras clave y miembros por tareas
Palabras clave del lenguaje Visual Basic
Miembros de la biblioteca en tiempo de ejecución de Visual Basic
Palabras clave comparadas en diferentes lenguajes
Referencia del lenguaje Visual Basic

Módulo ErrObject (Visual Basic)


El módulo ErrObject contiene propiedades y procedimientos empleados para identificar y controlar errores en tiempo de
ejecución mediante el objeto Err.
Comentarios
El módulo ErrObject admite el objeto Err. Para obtener más información, vea Err (Objeto, Visual Basic).
Miembros
Clear Description Erl GetException

HelpContext HelpFile LastDLLError Number

Raise Source
Ejemplo
En este ejemplo se utilizan las propiedades del objeto Err para construir un cuadro de diálogo de mensajes de error. Tenga
presente lo que sucede si utiliza primero el método Clear: cuando genere un error de Visual Basic con el método Raise, los
valores predeterminados de Visual Basic pasarán a ser las propiedades del objeto Err.

Dim Msg As String


' If an error occurs, construct an error message.
On Error Resume Next ' Defer error handling.
Err.Clear
Err.Raise(6) ' Generate an "Overflow" error.
' Check for error, then show message.
If Err.Number <> 0 Then
Msg = "Error # " & Str(Err.Number) & " was generated by " _
& Err.Source & ControlChars.CrLf & Err.Description
MsgBox(Msg, MsgBoxStyle.Information, "Error")
End If

Vea también
Referencia
Err (Objeto, Visual Basic)
Resumen de conversión
Palabras clave y miembros por tareas
Palabras clave del lenguaje Visual Basic
Miembros de la biblioteca en tiempo de ejecución de Visual Basic
Palabras clave comparadas en diferentes lenguajes
Referencia del lenguaje Visual Basic

Módulo FileSystem (Visual Basic)


El módulo FileSystem contiene los procedimientos empleados para realizar operaciones de archivo, de directorio o carpeta y
de sistema.
La característica My proporciona mayor productividad y rendimiento en las operaciones de E/S de archivo que si se utiliza el
módulo FileSystem. Para obtener más información, vea My.Computer.FileSystem (Objeto).
Comentarios
Este módulo admite las palabras claves del lenguaje Visual Basic y los miembros de biblioteca en tiempo de ejecución que
tienen acceso a archivos y carpetas.
Miembros
ChDir ChDrive CurDir Dir

EOF FileAttr FileClose FileCopy

FileDateTime FileGet FileGetObject FileLen

FileOpen FilePut FilePutObject FileWidth

FreeFile GetAttr Input InputString

Kill LineInput Loc Lock

LOF MkDir Print PrintLine

Rename Reset RmDir Seek

SetAttr SPC TAB Unlock

Write WriteLine
Ejemplo
En este ejemplo se utiliza la función GetAttr para determinar los atributos de un archivo, directorio o carpeta.
VB
Dim MyAttr As FileAttribute
' Assume file TESTFILE is normal and readonly.
MyAttr = GetAttr("C:\TESTFILE.txt") ' Returns vbNormal.

' Test for normal.


If (MyAttr And FileAttribute.Normal) = FileAttribute.Normal Then
MsgBox("This file is normal.")
End If
' Test for normal and readonly.
Dim normalReadonly As FileAttribute
normalReadonly = FileAttribute.Normal Or FileAttribute.ReadOnly
If (MyAttr And normalReadonly) = normalReadonly Then
MsgBox("This file is normal and readonly.")
End If

' Assume MYDIR is a directory or folder.


MyAttr = GetAttr("C:\MYDIR")
If (MyAttr And FileAttribute.Directory) = FileAttribute.Directory Then
MsgBox("MYDIR is a directory")
End If
Vea también
Referencia
Resumen de archivos y directorios
Resumen de entrada y salida
Palabras clave y miembros por tareas
Palabras clave del lenguaje Visual Basic
Miembros de la biblioteca en tiempo de ejecución de Visual Basic
Palabras clave comparadas en diferentes lenguajes
Referencia del lenguaje Visual Basic

Módulo Financial (Visual Basic)


El módulo Financial contiene procedimientos empleados para realizar operaciones financieras.
Comentarios
Este módulo admite los miembros de biblioteca en tiempo de ejecución de Visual Basic que realizan cálculos financieros como
depreciación, valores presentes y futuros, tipos de interés, tasas de devolución y pagos.
Miembros
DDB FV IPmt IRR

MIRR NPer NPV Pmt

PPmt PV Rate SLN

SYD
Ejemplo
En este ejemplo, se utiliza la función Rate para calcular el tipo de interés de un préstamo, dados el número total de pagos
(TotPmts), la cantidad del pago del préstamo (Payment), el valor actual o principal del préstamo (PVal), el valor futuro del
préstamo (FVal), un número que indica si el pago vence al principio o al final del período de pago (PayType) y una
aproximación del tipo de interés previsto (Guess).
VB
Sub TestRate()
Dim PVal, Payment, TotPmts, APR As Double
Dim PayType As DueDate

' Define percentage format.


Dim Fmt As String = "##0.00"
Dim Response As MsgBoxResult
' Usually 0 for a loan.
Dim FVal As Double = 0
' Guess of 10 percent.
Dim Guess As Double = 0.1
PVal = CDbl(InputBox("How much did you borrow?"))
Payment = CDbl(InputBox("What's your monthly payment?"))
TotPmts = CDbl(InputBox("How many monthly payments do you have to make?"))
Response = MsgBox("Do you make payments at the end of the month?", MsgBoxStyle.YesNo)
If Response = MsgBoxResult.No Then
PayType = DueDate.BegOfPeriod
Else
PayType = DueDate.EndOfPeriod
End If
APR = (Rate(TotPmts, -Payment, PVal, FVal, PayType, Guess) * 12) * 100

MsgBox("Your interest rate is " & Format(CInt(APR), Fmt) & " percent.")
End Sub

Vea también
Referencia
Resumen financiero
Palabras clave y miembros por tareas
Palabras clave del lenguaje Visual Basic
Miembros de la biblioteca en tiempo de ejecución de Visual Basic
Palabras clave comparadas en diferentes lenguajes
Referencia del lenguaje Visual Basic

Módulo Globals (Visual Basic)


El módulo Globals contiene funciones del motor de secuencias de comandos.
Comentarios
Este módulo admite las palabras clave del lenguaje Visual Basic y los miembros de biblioteca en tiempo de ejecución que
proporcionan información sobre el tiempo de ejecución que está en uso en actualmente.
Miembros
ScriptEngine ScriptEngineBuildVersion ScriptEngineMajorVersion ScriptEngineMinorVersion
Ejemplo
El siguiente ejemplo utiliza la propiedad ScriptEngineMajorVersion y otras propiedades relacionadas para devolver una
cadena que describe la información actual en tiempo de ejecución:

Function getRuntimeInfo() As String


Dim runtime As String = ScriptEngine & " Version "
runtime &= CStr(ScriptEngineMajorVersion) & "."
runtime &= CStr(ScriptEngineMinorVersion) & "."
runtime &= CStr(ScriptEngineBuildVersion)
' Return the current runtime information.
Return runtime
End Function

Vea también
Referencia
ScriptEngine (Propiedad)
ScriptEngineBuildVersion (Propiedad)
ScriptEngineMajorVersion (Propiedad)
ScriptEngineMinorVersion (Propiedad)
Palabras clave y miembros por tareas
Palabras clave del lenguaje Visual Basic
Miembros de la biblioteca en tiempo de ejecución de Visual Basic
Palabras clave comparadas en diferentes lenguajes
Referencia del lenguaje Visual Basic

Módulo Information (Visual Basic)


El módulo Information contiene los procedimientos empleados para devolver o comprobar información o realizar pruebas en
ella.
Comentarios
Este módulo admite las palabras clave del lenguaje Visual Basic y los miembros de la biblioteca en tiempo de ejecución que
proporcionan información sobre errores, validan datos, determinan los límites de las matrices y recuperan tipos de datos e
información de color.
Miembros
Err IsArray IsDate IsDBNull

IsError IsNothing IsNumeric IsReference

LBound QBColor RGB SystemTypeName

TypeName UBound VarType VbTypeName


Ejemplo
En el ejemplo siguiente se utiliza la función VbTypeName para devolver nombres de tipos de datos de diversas variables.

Dim sysDateName As String = "System.DateTime"


Dim sysShortName As String = "Int16"
Dim sysBadName As String = "Nonsense"
Dim testVbName As String
testVbName = VbTypeName(sysDateName)
' Returns "Date".
testVbName = VbTypeName(sysShortName)
' Returns "Short".
testVbName = VbTypeName(sysBadName)
' Returns Nothing.

Vea también
Referencia
Resumen de información e interacción
Resumen de tipos de datos
Resumen de constantes y declaraciones
Palabras clave y miembros por tareas
Palabras clave del lenguaje Visual Basic
Miembros de la biblioteca en tiempo de ejecución de Visual Basic
Palabras clave comparadas en diferentes lenguajes
Referencia del lenguaje Visual Basic

Módulo Interaction (Visual Basic)


El módulo Interaction contiene procedimientos empleados para interactuar con objetos, aplicaciones y sistemas.
Comentarios
Este módulo admite las palabras clave y los miembros de bibliotecas en tiempo de ejecución de Visual Basic que ejecutan otros
programas, llaman a un método o propiedad, emiten un pitido en el equipo, proporcionan una cadena de línea de comandos,
manipulan objetos COM y controlan cuadros de diálogo.
Miembros
AppActivate Beep CallByName Elija

Command CreateObject DeleteSetting Environ

GetAllSettings GetObject GetSetting IIf

InputBox MsgBox Partition SaveSetting

Shell Modificador
Ejemplo
En este ejemplo se utiliza la función Shell para ejecutar una aplicación especificada por el usuario. La especificación
Microsoft.VisualBasic.AppWinStyle.NormalFocus como segundo argumento abre la aplicación en tamaño normal y le
proporciona el foco.

Dim procID As Integer


' Run calculator.
procID = Shell("C:\Windows\system32\calc.exe", AppWinStyle.NormalFocus)
' The preceding path is for Windows XP.
' The Windows 2000 path is C:\WINNT\system32\calc.exe.

Vea también
Referencia
Resumen de información e interacción
Palabras clave y miembros por tareas
Palabras clave del lenguaje Visual Basic
Miembros de la biblioteca en tiempo de ejecución de Visual Basic
Palabras clave comparadas en diferentes lenguajes
Referencia del lenguaje Visual Basic

Módulo Strings (Visual Basic)


El módulo Strings contiene procedimientos empleados para realizar operaciones de cadenas.
Comentarios
Este módulo admite las palabras clave y los miembros de biblioteca en tiempo de ejecución del lenguaje Visual Basic que
manipulan las cadenas.
Miembros
Asc AscW Chr ChrW

Filter Format FormatCurrency FormatDateTime

FormatNumber FormatPercent GetChar InStr

InStrRev Join LCase Left

Len LSet LTrim Mid

Replace Right RSet RTrim

Espacio Split StrComp StrConv

StrDup StrReverse Trim UCase


Ejemplo
En el ejemplo siguiente se muestra cómo se divide una cadena en los espacios que contiene.
VB
Dim TestString As String = "Look at these!"
' Returns an array containing "Look", "at", and "these!".
Dim TestArray() As String = Split(TestString)

Vea también
Referencia
Resumen de manipulación de cadenas
Palabras clave y miembros por tareas
Palabras clave del lenguaje Visual Basic
Miembros de la biblioteca en tiempo de ejecución de Visual Basic
Palabras clave comparadas en diferentes lenguajes
Referencia del lenguaje Visual Basic

Módulo VbMath (Visual Basic)


El módulo VbMath contiene procedimientos empleados para realizar operaciones matemáticas.
Comentarios
Este módulo admite las palabras claves del lenguaje Visual Basic y los miembros de biblioteca en tiempo de ejecución para
generar números aleatorios.
Miembros
Randomize Rnd
Ejemplo
En el siguiente ejemplo se utiliza la función Rnd para generar un valor entero aleatorio en el intervalo entre 1 y 6.
VB
' Initialize the random-number generator.
Randomize()
' Generate random value between 1 and 6.
Dim value As Integer = CInt(Int((6 * Rnd()) + 1))

Vea también
Referencia
Resumen de funciones matemáticas
Funciones matemáticas derivadas (Visual Basic)
Palabras clave y miembros por tareas
Palabras clave del lenguaje Visual Basic
Miembros de la biblioteca en tiempo de ejecución de Visual Basic
Palabras clave comparadas en diferentes lenguajes
Referencia del lenguaje Visual Basic

Objetos (Visual Basic)


Los temas de esta sección documentan los objetos en tiempo de ejecución de Visual Basic y contienen las tablas de los
procedimientos de miembros, las propiedades y los eventos.
En esta sección
Collection (Objeto, Visual Basic)
Collection (Miembros del objeto)
Err (Objeto, Visual Basic)
Err (Miembros del objeto)
Secciones relacionadas
Referencia de Visual Basic
Visual Basic
Referencia del lenguaje Visual Basic

Collection (Objeto, Visual Basic)


Un objeto Collection de Visual Basic es un conjunto ordenado de elementos a los que se puede hacer referencia como unidad.
Comentarios
Con el objeto Collection de Visual Basic se puede hacer referencia de manera sencilla a un grupo relacionado de elementos
como si se tratase de un solo objeto. Los elementos de una colección sólo necesitan estar relacionados por el hecho de existir
en la colección. Los elementos de una colección no tienen que compartir el mismo tipo de datos.
Puede crear una colección de la misma manera que crea otros objetos, como se ilustra el ejemplo siguiente.

Dim coll As New Microsoft.VisualBasic.Collection()

Una vez que se ha creado una colección, puede llevar a cabo las operaciones siguientes:
Agregar un elemento con el método Add.
Quitar un elemento con el método Remove.
Quitar todos los elementos con el método Clear.
Averiguar cuántos elementos contiene la colección con la propiedad Count.
Comprobar si un determinado elemento está presente con el método Contains.
Devolver un determinado elemento de la colección con la propiedad Item.
Recorrer en iteración toda la colección con Instrucción For Each...Next (Visual Basic).
Nota
Aunque el objeto Collection de Visual Basic tiene una funcionalidad idéntica al objeto Collection de Visual Basic 6.0, e
stos objetos no pueden interoperar en un entorno COM.

Precaución
Recorrer en iteración un objeto Collection de Visual Basic no es un procedimiento seguro para subprocesos. Aunque l
a colección se encuentre sincronizada, otros subprocesos aún pueden modificar la colección y hacer que el enumerado
r produzca una excepción. Para garantizar la seguridad de subprocesos durante la enumeración, se debe bloquear la co
lección o detectar las excepciones resultantes de los cambios realizados por otros subprocesos. Para obtener más infor
mación sobre cómo bloquear un elemento de programación, vea SyncLock (Instrucción).

Ejemplo
En el ejemplo siguiente se crea el objeto Collection names y un cuadro de diálogo con el que un usuario puede agregar los
objetos (nombres) a la colección. A continuación, se muestran los nombres de la colección y, por último, se vacía la colección
sin desechar el propio objeto Collection.
Para ver cómo funciona, elija el comando Agregar clase del menú Proyecto y declare una variable pública denominada
instanceName en el nivel de módulo de nameClass (escriba Public instanceName) para almacenar los nombres de cada
instancia. Mantenga el nombre predeterminado nameClass. Copie y pegue el código siguiente en la sección General de otro
módulo y, a continuación, inícielo con la instrucción classNamer en otro procedimiento. (Este ejemplo sólo funciona con
aplicaciones host que admitan clases).
VB
Public Class nameClass
Public instanceName As String
End Class
Sub classNamer()
' Create a Visual Basic Collection object.
Dim names As New Microsoft.VisualBasic.Collection()
Dim key As Integer
Dim msg As String
Dim name As String
Dim nameList As String = ""
' 1. Get names from the user to add to the collection.
Do
Dim inst As New nameClass()
key += 1
msg = "Please enter a name for this object." & vbCrLf _
& "Press Cancel to see names in collection."
name = InputBox(msg, "Name the Collection items")
inst.instanceName = name
' If user entered a name, add it to the collection.
If inst.instanceName <> "" Then
names.Add(inst, CStr(key))
End If
Loop Until name = ""
' 2. Create and display a list of names from the collection.
For Each oneInst As nameClass In names
nameList &= oneInst.instanceName & vbCrLf
Next oneInst
MsgBox(nameList, , "Instance Names in names Collection")
' 3. Remove elements from the collection without disposing of the collection.
For count As Integer = 1 To names.Count
names.Remove(1)
' Since Visual Basic collections are reindexed automatically,
' remove the first member on each iteration.
Next count
End Sub

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Collection (Miembros del objeto)
GetEnumerator (Método, objeto Collection)
Referencia del lenguaje Visual Basic

Collection (Miembros del objeto)


Un objeto Collection de Visual Basic expone los miembros siguientes:
Propiedades
Propiedad Descripción
Count (Propiedad) Sólo lectura. Devuelve un valor Integer que contiene el número de elementos en una colección de Visual B
asic.

Item (Propiedad) Sólo lectura. Devuelve un elemento concreto de un objeto Collection de Visual Basic por posición o por cla
ve.
Métodos
Método Descripción
Add (Método) Agrega un elemento a un objeto Collection de Visual Basic.

Clear (Método) Quita todos los elementos de un objeto Collection de Visual Basic.

Contains (Método, objeto Collection) Devuelve un valor Boolean que indica si un objeto Collection de Visual Basic contiene u
n elemento con una clave concreta.

GetEnumerator (Método) Devuelve un objeto de enumerador para recorrer en iteración la colección.

Remove (Método) Quita un elemento de un objeto Collection de Visual Basic.


Vea también
Referencia
Collection (Objeto, Visual Basic)
Referencia del lenguaje Visual Basic

Add (Método, objeto Collection)


Agrega un elemento a un objeto Collection.

Public Sub Add( _


ByVal Item As Object, _
Optional ByVal Key As String, _
Optional ByVal { Before | After } As Object = Nothing _
)

Parámetros
Item
Obligatorio. Objeto de cualquier tipo que especifica el elemento que se va a agregar a la colección.
Key
Opcional. Expresión String única que especifica una cadena clave que se puede utilizar, en lugar de un índice posicional, para
tener acceso a este nuevo elemento de la colección.
Before
Opcional. Expresión que especifica una posición relativa dentro de la colección. El elemento que se va a agregar se situará en
la colección antes del miembro identificado por el argumento Before. Si Before es una expresión numérica, debe ser un
número comprendido entre 1 y el valor de la propiedad Count (Propiedad, objeto Collection) de la colección. Si Before es una
expresión String, deberá corresponderse con la cadena clave que se especificó cuando se agregó a la colección el elemento
al que se hace referencia. No puede especificar Before y After.
After
Opcional. Expresión que especifica una posición relativa dentro de la colección. El elemento que se va a agregar se situará en
la colección después del miembro identificado por el argumento After. Si After es una expresión numérica, debe ser un
número comprendido entre 1 y el valor de la propiedad Count de la colección. Si After es una expresión String, deberá
corresponderse con la cadena clave que se especificó cuando se agregó a la colección el elemento al que se hace referencia.
No puede especificar Before y After.
Excepciones/Códigos de error
Tipo de excepció Número de err Condición
n or
ArgumentException 5 Se ha especificado Before y After a la vez.
El argumento Before o After no hace referencia a un elemento existente de la colec
ción.
El objeto Key especificado ya existe.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, debe considerarse la posibilidad de sustituir dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
El argumento Before o After debe hacer referencia a un elemento existente de la colección; de lo contrario, se producirá un
error.
También se producirá un error en caso de que el valor Key especificado coincida con la clave de un elemento existente en la
colección.
Ejemplo
En el ejemplo siguiente se utiliza el método Add para agregar objetos child (instancias de una clase denominada child que
contiene una propiedad Public name) a una colección denominada family. Para ver cómo funciona, cree un control Form con
dos controles Button y establezca sus propiedades Text en Agregar y Enumerar. Agregue al código del formulario la
definición de clase child y la declaración de family. Modifique los controladores de eventos _Click para los botones Agregar
y Enumerar. El botón Agregar le permitirá agregar elementos secundarios. El botón Enumerar muestra los nombres de
todos los elementos secundarios.
VB
Public Class child
Public name As String
Sub New(ByVal newName As String)
name = newName
End Sub
End Class
' Create a Collection object.
Private family As New Collection()
Private Sub addChild_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
Dim newName As String
newName = InputBox("Name of new family member: ")
If newName <> "" Then
family.Add(New child(newName), newName)
End If
End Sub
Private Sub listChild_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button2.Click
For Each aChild As child In family
MsgBox(aChild.name)
Next
End Sub

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Collection
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Collection (Objeto, Visual Basic)
Item (Propiedad, objeto Collection)
Remove (Método, objeto Collection)
Referencia del lenguaje Visual Basic

Clear (Método, objeto Collection)


Elimina todos los elementos de un objeto Collection de Visual Basic.

Public Sub Clear()

Comentarios
El método Clear vacía la colección y restablece su propiedad Count en 0.
Ejemplo
VB
Dim customers As New Microsoft.VisualBasic.Collection()
' Insert code that adds customers to collection.
customers.Clear()

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Collection
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Collection (Objeto, Visual Basic)
Item (Propiedad, objeto Collection)
Count (Propiedad, objeto Collection)
Contains (Método, objeto Collection)
Add (Método, objeto Collection)
Remove (Método, objeto Collection)
Referencia del lenguaje Visual Basic

Contains (Método, objeto Collection)


Devuelve un valor Boolean que indica si un objeto Collection de Visual Basic contiene un elemento con una clave concreta.

Public Function Contains( _


ByVal Key As String _
) As Boolean

Parámetros
Key
Requerido. Una expresión de tipo String que especifica la clave para la que se buscan los elementos de la colección.
Excepciones/Códigos de error
Tipo de excepción Número de error Condición
ArgumentException 9B07D280-66C6-4EA5-A8ED-5DDB0036F877 El parámetro Key especificado es Nothing.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
Contains devuelve True si la colección contiene un elemento con una clave que coincide exactamente con Key. De lo contrario,
Contains devuelve False.
Un objeto Collection de Visual Basic puede contener algunos elementos que tienen claves y otros elementos sin claves. Esto
depende de si la llamada a Add (Método, objeto Collection) proporciona un argumento al parámetro Key opcional.
Ejemplo
VB
Dim customers As New Microsoft.VisualBasic.Collection()
Dim accountNumber As String = "1234"
' Insert code that obtains new customer objects.
' Use the new customer's account number as the key.
customers.Add(newCustomer, accountNumber)
' The preceding statements can be repeated for several customers.
Dim searchNumber As String = "1234"
' Insert code to obtain an account number to search for.
If customers.Contains(searchNumber) Then
MsgBox("The desired customer is in the collection.")
Else
MsgBox("The desired customer is not in the collection.")
End If

Si piensa buscar en la colección elementos mediante sus claves, no olvide incluir el argumento Key cada vez que llame al
método Add.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Collection
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Collection (Objeto, Visual Basic)
Item (Propiedad, objeto Collection)
Count (Propiedad, objeto Collection)
Add (Método, objeto Collection)
Remove (Método, objeto Collection)
Clear (Método, objeto Collection)
Referencia del lenguaje Visual Basic

Count (Propiedad, objeto Collection)


Devuelve un valor de tipo Integer que contiene el número de elementos de una colección. Sólo lectura.

Public ReadOnly Property Count() As Integer

Comentarios
Utilice la propiedad Count para determinar el número de elementos de un objeto Collection.
Ejemplo
Este ejemplo ilustra el uso de la propiedad Count para mostrar el número de elementos de Collection (Objeto, Visual Basic) en
la variable birthdays.
VB
Dim birthdays As New Collection()
birthdays.Add(New DateTime(2001, 1, 12), "Bill")
birthdays.Add(New DateTime(2001, 1, 13), "Joe")
birthdays.Add(New DateTime(2001, 1, 14), "Mike")
birthdays.Add(New DateTime(2001, 1, 15), "Pete")
... MsgBox("Number of birthdays in collection: " & CStr(birthdays.Count))

El objeto Collection se basa en uno, es decir, los valores de índice de los elementos se sitúan entre 1 y el valor de la propiedad
Count.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Clase: Collection
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Collection (Objeto, Visual Basic)
Add (Método, objeto Collection)
Item (Propiedad, objeto Collection)
Remove (Método, objeto Collection)
Referencia del lenguaje Visual Basic

GetEnumerator (Método, objeto Collection)


Devuelve una referencia a un objeto enumerador que se utiliza para recorrer en iteración un objeto
Collection (Objeto, Visual Basic).

Public Function GetEnumerator() As IEnumerator

Comentarios
La instrucción Instrucción For Each...Next (Visual Basic) llama al método GetEnumerator para obtener un objeto enumerador
que admita la iteración en los elementos de una colección. Normalmente, se utiliza un bucle For Each...Next para recorrer una
colección o una matriz, y no es necesario llamar explícitamente a GetEnumerator.
Si necesita tener mayor control sobre la iteración del que proporcionan las instrucciones For Each...Next, puede utilizar el
método GetEnumerator para llevar a cabo un recorrido personalizado. A continuación se incluyen algunos casos en los que
esta operación podría ser necesaria.
Si desea volver al principio de la colección e iniciar de nuevo la iteración antes de que finalice.
Si desea omitir uno o varios elementos por distintos motivos.
Si necesita cambiar los elementos de la colección en mitad de un recorrido. En este caso, debe obtener un nuevo objeto
enumerador, ya que se invalida el anterior.
Ejemplo
En el ejemplo siguiente se muestra cómo se utiliza GetEnumerator para recuperar todos los elementos de un objeto
Collection.
VB
Dim customers As New Collection
' Insert code to add elements to the customers collection.
Dim custEnum As IEnumerator = customers.GetEnumerator()
custEnum.Reset()
Dim thisCustomer As Object
While custEnum.MoveNext()
thisCustomer = custEnum.Current()
' Insert code to process this element of the collection.
End While

GetEnumerator crea y devuelve un objeto enumerador que implementa la interfaz IEnumerator del espacio de nombres
System.Collections. El objeto enumerador expone la propiedad Current y los métodos MoveNext y Reset. Para obtener más
información, vea Instrucción For Each...Next (Visual Basic).
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Collection
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Collection (Objeto, Visual Basic)
Referencia del lenguaje Visual Basic

Item (Propiedad, objeto Collection)


Devuelve un elemento concreto de un objeto Collection por posición o por clave. Sólo lectura.

Default Public ReadOnly Property Item( _


ByVal { Key As String | Index As Integer | Index As Object } _
) As Object

Parámetros
Key
Expresión única String que especifica una cadena de clave que se puede utilizar, en lugar de un índice posicional, para tener
acceso a un miembro de la colección. Key debe corresponder al argumento Key especificado cuando se agregó el elemento a
la colección.
Index
(A) Expresión numérica que especifica la posición de un elemento de la colección. Index debe ser un número de 1 hasta el
valor de Count (Propiedad, objeto Collection) de la colección. O (B) Expresión Object que especifica la posición o la cadena
clave de un elemento de la colección.
Excepciones
Tipo de excepción Número de erro Condición
r
ArgumentException 5 Key no es válido o no coincide con ningún elemento existente de la colecci
ón.
Index no se puede interpretar como carácter o dato numérico.

IndexOutOfRangeException 9 Key es Nothing.


Index no coincide con ningún elemento existente de la colección.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
Si Index es de tipo Object, la propiedad Item intenta tratarlo como matriz String, Char, Char o valor entero. Si Item no puede
convertir Index en String o Integer, produce una excepción ArgumentException.
La propiedad Item es la propiedad predeterminada para una colección. Por tanto, las siguientes líneas de código son
equivalentes.

MsgBox(CStr(customers.Item(1)))
MsgBox(CStr(customers(1)))

Ejemplo
En el ejemplo siguiente se utiliza la propiedad Item para recuperar una referencia a un objeto de una colección. Crea
birthdays como un objeto Collection y recupera después el objeto que representa el cumpleaños de Bill mediante la clave
"Bill" como argumento Index.

VB
Dim birthdays As New Collection()
birthdays.Add(New DateTime(2001, 1, 12), "Bill")
birthdays.Add(New DateTime(2001, 1, 13), "Joe")
birthdays.Add(New DateTime(2001, 1, 14), "Mike")
birthdays.Add(New DateTime(2001, 1, 15), "Pete")
... Dim aBirthday As DateTime
aBirthday = birthdays.Item("Bill")
MsgBox(CStr(aBirthday))
aBirthday = birthdays("Bill")
MsgBox(CStr(aBirthday))

Observe que la primera llamada especifica explícitamente la propiedad Item, pero no así la segunda. Ambas llamadas
funcionan porque Item es la propiedad predeterminada de un objeto Collection.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Collection
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Collection (Objeto, Visual Basic)
Add (Método, objeto Collection)
Count (Propiedad, objeto Collection)
Remove (Método, objeto Collection)
Referencia del lenguaje Visual Basic

Remove (Método, objeto Collection)


Elimina un elemento de un objeto Collection.

Public Overloads Sub Remove(_


ByVal { Key As String | Index As Integer } _
)

Parámetros
Key
Expresión única String que especifica una cadena de clave que se puede utilizar, en lugar de un índice posicional, para tener
acceso a un miembro de la colección. Key debe corresponder al argumento Key especificado cuando se agregó el elemento a
la colección.
Index
Expresión numérica que especifica la posición de un elemento de la colección. Index debe ser un número de 1 hasta el valor
de Count (Propiedad, objeto Collection) de la colección.
Excepciones
Tipo de excepción Número de error Condición
ArgumentException 5 Key no es válido o no se especifica.

IndexOutOfRangeException 9 Index no coincide con ningún elemento existente de la colección.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, se debe considerar la sustitución de dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
Cuando Remove elimina un elemento de una colección, disminuye el valor Count (Propiedad, objeto Collection) de la
colección en uno. También disminuye el valor Index de cada elemento que seguía antes al elemento eliminado en la colección.
Si se agregara un elemento a la colección sin Key, se debe utilizar su Index para eliminarlo.
Ejemplo
En este ejemplo se ilustra el uso del método Remove para eliminar objetos de una Collection (Objeto, Visual Basic) en la
variable birthdays.
VB
Dim birthdays As New Collection()
birthdays.Add(New DateTime(2001, 1, 12), "Bill")
birthdays.Add(New DateTime(2001, 1, 13), "Joe")
birthdays.Add(New DateTime(2001, 1, 14), "Mike")
birthdays.Add(New DateTime(2001, 1, 15), "Pete")
... birthdays.Remove(1)
birthdays.Remove("Mike")

Tras la cuarta llamada al método Add, la propiedad Count contiene 4, el elemento "Bill" tiene un valor de índice de 1 y el
elemento "Pete", un valor de índice de 4.
Tras la primera llamada a Remove, Count tiene 3, el elemento "Bill" se elimina y el elemento "Pete" tiene un valor de índice
de 3.
Tras la segunda llamada a Remove, Count tiene 2, el elemento "Mike" se elimina y el elemento "Pete" tiene un valor de
índice de 2.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: Collection
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Collection (Objeto, Visual Basic)
Add (Método, objeto Collection)
Referencia del lenguaje Visual Basic

Err (Objeto, Visual Basic)


Contiene información acerca de los errores en tiempo de ejecución.
Comentarios
Las propiedades del objeto Err las establece el generador de un error (Visual Basic, un objeto o el programador).
Cuando se produce un error en tiempo de ejecución, las propiedades del objeto Err se llenan con información que identifica el
error de forma única y que se puede utilizar para controlar el error. Para generar un error en tiempo de ejecución en el código,
utilice el método Raise.
Las propiedades del objeto Err se restablecen en valores cero o en cadenas de longitud cero ("") después de una instrucción
Exit Sub, Exit Function, Exit Property o Resume Next situada dentro de una rutina de control de errores. Si se utiliza
cualquier forma de la instrucción Resume fuera de una rutina de control de errores, no se restablecerán las propiedades del
objeto Err. Para restablecer Err explícitamente, se puede utilizar el método Clear.
Utilice el método Raise, en vez de la instrucción Error, para generar errores en tiempo de ejecución para errores del sistema y
módulos de clase. La decisión de utilizar el método Raise en otro tipo de código depende de la riqueza de información que
desee devolver.
El objeto Err es un objeto intrínseco con ámbito global. Por lo tanto, no es necesario crear una instancia suya en el código.
Ejemplo
En este ejemplo se utilizan las propiedades del objeto Err para construir un cuadro de diálogo de mensajes de error. Tenga
presente que si utiliza primero el método Clear, cuando genere un error de Visual Basic con el método Raise, los valores
predeterminados de Visual Basic pasarán a ser las propiedades del objeto Err.
VB
Dim Msg As String
' If an error occurs, construct an error message.
On Error Resume Next ' Defer error handling.
Err.Clear()
Err.Raise(6) ' Generate an "Overflow" error.
' Check for error, then show message.
If Err.Number <> 0 Then
Msg = "Error # " & Str(Err.Number) & " was generated by " _
& Err.Source & ControlChars.CrLf & Err.Description
MsgBox(Msg, MsgBoxStyle.Information, "Error")
End If

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Tareas
Cómo: Obtener información sobre los errores en tiempo de ejecución en Visual Basic
Cómo: Recuperar información de un objeto de error
Referencia
Err (Miembros del objeto)
Error (Instrucción)
Instrucción On Error (Visual Basic)
Instrucción Exit (Visual Basic)
Resume (Instrucción)
Referencia del lenguaje Visual Basic

Err (Miembros del objeto)


Este objeto Err contiene propiedades cuyos valores vienen determinados por el error que acaba de producirse. La propiedad
Number contiene la causa del error y la propiedad Description contiene un mensaje de texto que describe el error en detalle.
Helpfile y HelpContext le permiten mostrar un archivo de ayuda relacionado cuando un usuario presiona el botón de Help o
la tecla F1. LastDLLError muestra el último archivo DLL llamado y si la llamada tuvo éxito o no. Source especifica una
expresión de cadena que representa el objeto o aplicación que generó el error.
Propiedades
Description (Propiedad) Lectura y escritura. Devuelve o establece una cadena descriptiva asociada a un error.

Erl (Propiedad) Sólo lectura. Devuelve un entero que indica el número de línea de la última instrucción ejecutada.

HelpContext (Propiedad) Lectura y escritura. Devuelve o establece un Integer que contiene el identificador de contexto de un
tema de un archivo de Ayuda.

HelpFile (Propiedad) Lectura y escritura. Devuelve o establece una expresión String que contiene la ruta de acceso compl
eta a un archivo de Ayuda.

LastDLLError (Propiedad) Sólo lectura. Devuelve un código de error proveniente del sistema y producido por una llamada a la
biblioteca de enlaces dinámicos (DLL).

Number (Propiedad) Lectura y escritura. Devuelve o establece un valor numérico que especifica un error.

Source (Propiedad) Lectura y escritura. Devuelve o establece una expresión String que especifica el nombre del objeto o
de la aplicación que generó originalmente el error.
Métodos
Clear (Método) Borra todos los valores de las propiedades del objeto Err.

Raise (Método) Genera un error en tiempo de ejecución. Se puede utilizar en lugar de la instrucción Error.
Vea también
Tareas
Cómo: Recuperar información de un objeto de error
Referencia
Err (Objeto, Visual Basic)
Referencia del lenguaje Visual Basic

Clear (Método, objeto Err)


Borra todos los valores de las propiedades del objeto Err.

object.Clear

Parámetros
object
Siempre el objeto Err.
Comentarios
Clear se utiliza para borrar explícitamente el objeto Err una vez que se ha controlado un error, como ocurre cuando se usa el
control diferido de errores con On Error Resume Next. Se llama al método Clear automáticamente siempre que se ejecuta
alguna de las siguientes instrucciones:
Cualquier tipo de instrucción Resume
Exit Sub, Exit Function o Exit Property
Cualquier instrucción On Error
Cualquier instrucción Try...Catch...Finally
Nota
La construcción On Error Resume Next puede ser preferible a On Error GoTo cuando se controlan errores generados
durante el acceso a otros objetos. La comprobación del objeto Err después de cada interacción con un objeto elimina la
ambigüedad acerca de cuál fue el objeto al que obtuvo acceso el código: se puede conocer con seguridad qué objeto co
locó el código de error en Err.Number, así como qué objeto generó originalmente el error (el objeto especificado en E
rr.Source).

Ejemplo
En este ejemplo se utiliza el método Clear del objeto Err para restablecer las propiedades numéricas del objeto Err a cero y sus
propiedades de cadena a cadenas de longitud cero. En caso de que no se llamara a Clear, la segunda llamada a MsgBox
mostraría el mismo mensaje de error.
VB
Sub ClearErr()
' Produce overflow error
On Error Resume Next
Dim zero As Integer = 0
Dim result As Integer = 8 / zero
MsgBox(Err.Description)
Err.Clear()
MsgBox(Err.Description)
End Sub

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: ErrObject
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Tareas
Cómo: Recuperar información de un objeto de error
Referencia
Err (Objeto, Visual Basic)
Description (Propiedad, objeto Err)
HelpContext (Propiedad, objeto Err)
HelpFile (Propiedad, objeto Err)
LastDllError (Propiedad, objeto Err)
Number (Propiedad, objeto Err)
Instrucción On Error (Visual Basic)
Raise (Método, objeto Err)
Source (Propiedad, objeto Err)
Referencia del lenguaje Visual Basic

Description (Propiedad, objeto Err)


Devuelve o establece una expresión String que contiene una cadena descriptiva asociada a un error. Lectura y escritura.

Public Property Description() As String

Comentarios
El valor de la propiedad Description cuenta con una breve descripción del error. Utilice esta propiedad para avisar al usuario
de un error que no puede o no desea controlar. Al generar un error definido por el usuario, asigne una breve descripción de su
error a la propiedad Description. Si la propiedad Description no está completa y el valor de Number (Propiedad)
corresponde a un error en tiempo de ejecución de Visual Basic, la cadena devuelta por ErrorToString (Función) se establecerá
en la propiedad Description cuando se genere el error.
Ejemplo
En este ejemplo se asigna un mensaje definido por el usuario a la propiedad Description del objeto Err.
VB
On Error Resume Next
Err.Raise(60000)
Err.Description = "Your Widget needs a new Frob!"
MsgBox(Err.Description)

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: ErrObject
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Err (Objeto, Visual Basic)
ErrorToString (Función)
HelpContext (Propiedad, objeto Err)
HelpFile (Propiedad, objeto Err)
LastDllError (Propiedad, objeto Err)
Number (Propiedad, objeto Err)
Source (Propiedad, objeto Err)
Referencia del lenguaje Visual Basic

Erl (Propiedad, objeto Err)


Devuelve un entero que indica el número de línea de la última instrucción ejecutada. Sólo lectura.

Public ReadOnly Property Erl() As Integer

Comentarios
Si Visual Basic no encuentra ningún número de línea, devuelve 0.
Ejemplo
En este ejemplo se usa la propiedad Erl para indicar el número de línea.
VB
10: On Error Resume Next
20: Err.Raise(60000)
' Returns 20.
30: MsgBox(Erl())

Notas para desarrolladores de dispositivos inteligentes


Esta propiedad no es compatible.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: ErrObject
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Err (Objeto, Visual Basic)
ErrorToString (Función)
Referencia del lenguaje Visual Basic

HelpContext (Propiedad, objeto Err)


Devuelve o establece un Integer que contiene el identificador de contexto de un tema de un archivo de Ayuda. Lectura y
escritura.

Public Property HelpContext() As Integer

Comentarios
La propiedad HelpContext se utiliza para mostrar Ayuda sensible al contexto para una aplicación. Si se especifica un archivo
de Ayuda en HelpFile, la propiedad HelpContext se utiliza para mostrar automáticamente el archivo de Ayuda identificado. Si
las propiedades HelpFile y HelpContext están vacías, se comprueba el valor de Number (Propiedad). Si el valor de la
propiedad Number corresponde a un valor de error en tiempo de ejecución de Visual Basic, se utiliza el identificador de
contexto de Ayuda de Visual Basic para el error. Si el valor de la propiedad Number no corresponde a un error de Visual Basic,
se muestra la pantalla de contenido del archivo de Ayuda de Visual Basic.
Nota
Se recomienda escribir en la aplicación rutinas para resolver los errores más frecuentes. Cuando programe con un objeto, po
drá utilizar el archivo de ayuda de ese objeto a fin de mejorar el tratamiento de sus errores; o bien para mostrar un mensaje
significativo para el usuario cuando el error sea irrecuperable.

Ejemplo
En este ejemplo se usa la propiedad HelpContext del objeto Err para mostrar el tema de Ayuda de Visual Basic
correspondiente al error Overflow.
VB
Dim Msg As String
Err.Clear()
On Error Resume Next ' Suppress errors for demonstration purposes.
Err.Raise(6) ' Generate "Overflow" error.
If Err.Number <> 0 Then
Msg = "Press F1 or HELP to see " & Err.HelpFile & " topic for" & _
" the following HelpContext: " & Err.HelpContext
MsgBox(Msg, , "Error:")
End If

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: ErrObject
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Err (Objeto, Visual Basic)
Description (Propiedad, objeto Err)
ErrorToString (Función)
HelpFile (Propiedad, objeto Err)
LastDllError (Propiedad, objeto Err)
Number (Propiedad, objeto Err)
Source (Propiedad, objeto Err)
Referencia del lenguaje Visual Basic

HelpFile (Propiedad, objeto Err)


Devuelve o establece una expresión String que contiene la ruta de acceso completa a un archivo de Ayuda. Lectura y escritura.

Public Property HelpFile() As String

Comentarios
Si se especifica un archivo de Ayuda mediante la propiedad HelpFile, se le llama automáticamente cuando un usuario hace clic
en el botón de Ayuda (o presiona la tecla F1) en el cuadro de diálogo del mensaje de error. Si la propiedad HelpContext
contiene un Id. de contexto válido para el archivo especificado, dicho tema se muestra automáticamente. Si no se especifica
HelpFile, se muestra el archivo de Ayuda de Visual Basic.
Nota
Se recomienda escribir en la aplicación rutinas para resolver los errores más frecuentes. Cuando programe con un objeto, po
drá utilizar el archivo de ayuda de ese objeto a fin de mejorar el tratamiento de sus errores; o bien para mostrar un mensaje
significativo para el usuario cuando el error sea irrecuperable.

Ejemplo
En este ejemplo se utiliza la propiedad HelpFile del objeto Err para iniciar el sistema de Ayuda. De manera predeterminada, la
propiedad HelpFile contiene el nombre del archivo de Ayuda de Visual Basic.
VB
Dim Msg As String
Err.Clear()
On Error Resume Next ' Suppress errors for demonstration purposes.
Err.Raise(6) ' Generate "Overflow" error.
If Err.Number <> 0 Then
Msg = "Press F1 or HELP to see " & Err.HelpFile & " topic for" & _
" the following HelpContext: " & Err.HelpContext
MsgBox(Msg, , "Error:")
End If

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: ErrObject
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Err (Objeto, Visual Basic)
Description (Propiedad, objeto Err)
HelpContext (Propiedad, objeto Err)
LastDllError (Propiedad, objeto Err)
Number (Propiedad, objeto Err)
Source (Propiedad, objeto Err)
Referencia del lenguaje Visual Basic

LastDllError (Propiedad, objeto Err)


Devuelve un código de error proveniente del sistema y producido por una llamada a la biblioteca de enlaces dinámicos (DLL).
Sólo lectura.

ReadOnly Property LastDllError() As Integer

Comentarios
La propiedad LastDllError sólo se aplica a llamadas a DLL provenientes de código Visual Basic. Cuando se realiza una de estas
llamadas, la función invocada normalmente devolverá un código que indica si se ha realizado correctamente o no; y se llenará
la propiedad LastDllError. Compruebe la documentación correspondiente a las funciones de los archivos DLL a fin de
determinar los valores devueltos que indican éxito o fracaso. Cada vez que se devuelva el código de error, la aplicación de
Visual Basic debería comprobar la propiedad LastDllError inmediatamente. No se genera ninguna excepción cuando se
establece la propiedad LastDllError.
Nota
La propiedad LastDllError requiere un permiso de código no administrado que puede afectar a su ejecución en situaciones
de confianza parcial. Para obtener más información, vea SecurityPermission y Permisos de acceso a código.

Ejemplo
El ejemplo siguiente muestra cómo puede utilizar la propiedad LastDllError después de llamar a una función en la API de
Windows. El procedimiento PrintWindowCoordinates identifica una ventana y llama a la función GetWindowRect.
GetWindowRect rellena la estructura de datos RECT con las longitudes de los lados del rectángulo que conforma la ventana.
Si pasa un identificador no válido, se produce un error; el número de error está disponible en la propiedad LastDllError.
VB
Declare Function GetWindowRect Lib "user32" _
(ByVal hwnd As Integer, ByRef lpRect As RECT) As Integer
...
Public Structure RECT
Public Left As Integer
Public Top As Integer
Public Right As Integer
Public Bottom As Integer
End Structure
...
Const ERROR_INVALID_WINDOW_HANDLE As Long = 1400
Const ERROR_INVALID_WINDOW_HANDLE_DESCR As String = _
"Invalid window handle."

VB
Private Sub PrintWindowCoordinates(ByVal hwnd As Integer)
' Prints left, right, top, and bottom positions
' of a window in pixels.

Dim rectWindow As RECT


' Pass in window handle and empty the data structure.
' If function returns 0, an error occurred.
If GetWindowRect(hwnd, rectWindow) = 0 Then
' Check LastDllError and display a dialog box if the error
' occurred because an invalid handle was passed.
If Err.LastDllError = ERROR_INVALID_WINDOW_HANDLE Then
MsgBox(ERROR_INVALID_WINDOW_HANDLE_DESCR, Title:="Error!")
End If
Else
Debug.Print(rectWindow.Bottom)
Debug.Print(rectWindow.Left)
Debug.Print(rectWindow.Right)
Debug.Print(rectWindow.Top)
End If
End Sub

Notas para desarrolladores de dispositivos inteligentes


Esta propiedad siempre devuelve cero.
Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: ErrObject
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Err (Objeto, Visual Basic)
Declare (Instrucción)
Description (Propiedad, objeto Err)
ErrorToString (Función)
HelpContext (Propiedad, objeto Err)
HelpFile (Propiedad, objeto Err)
Number (Propiedad, objeto Err)
Source (Propiedad, objeto Err)
Referencia del lenguaje Visual Basic

Number (Propiedad, objeto Err)


Devuelve o establece un valor numérico que especifica un error. Lectura y escritura.

Public Property Number() As Integer

Comentarios
Cuando se devuelva un error definido por el usuario desde un objeto, se debe establecer Err.Number y agregar, para ello, el
número seleccionado como código de error a la constante VbObjectError. Por ejemplo, cuando use el siguiente código para
devolver el número 1051 a modo de código de error:
VB
Err.Raise(Number:=vbObjectError + 1051, Source:="SomeClass")

Ejemplo
En este ejemplo se muestra un uso típico de la propiedad Number en una rutina de control de errores.
VB
' Typical use of Number property.
Sub test()
On Error GoTo out

Dim x, y As Integer
x = 1 / y ' Create division by zero error.
Exit Sub
out:
MsgBox(Err.Number)
MsgBox(Err.Description)
' Check for division by zero error.
If Err.Number = 11 Then
y = y + 1
End If
Resume Next
End Sub

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: ErrObject
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Err (Objeto, Visual Basic)
Description (Propiedad, objeto Err)
ErrorToString (Función)
HelpContext (Propiedad, objeto Err)
HelpFile (Propiedad, objeto Err)
LastDllError (Propiedad, objeto Err)
Source (Propiedad, objeto Err)
Referencia del lenguaje Visual Basic

Raise (Método, objeto Err)


Genera un error en tiempo de ejecución. Se puede utilizar en lugar de la instrucción Error.

Public Sub Raise( _


ByVal Number As Integer, _
Optional ByVal Source As Object = Nothing, _
Optional ByVal Description As Object = Nothing, _
Optional ByVal HelpFile As Object = Nothing, _
Optional ByVal HelpContext As Object = Nothing _
)

Parámetros
Number
Obligatorio. Entero de tipo Long que identifica la naturaleza del error. Los errores de Visual Basic se encuentran en el
intervalo 0–65535; el intervalo 0–512 se reserva a los errores del sistema y el intervalo 513–65535 está disponible para los
errores definidos por el usuario. Al establecer la propiedad Number en un código de error propio en un módulo de clase,
debe agregar el número del código de error a la constante vbObjectError. Por ejemplo, para generar el número de error
513, deberá asignarse vbObjectError + 513 a la propiedad Number.
Source
Opcional. Expresión de tipo String que da nombre al objeto o aplicación que generó el error. Cuando defina esta propiedad
para un objeto, utilice el formulario project.class. Si no se especifica Source, se utiliza el Id. de proceso del proyecto de Visual
Basic que se está utilizando en la actualidad.
Description
Opcional. Expresión de tipo String que describe el error. Si no se especifica, se examinará el valor de la propiedad Number.
En caso de que se pueda asignar a un código de error en tiempo de ejecución de Visual Basic, se utilizará como propiedad
Description la cadena devuelta por la función Error. En caso de que no haya un error de Visual Basic que se corresponda
con la propiedad Number, se utilizará el mensaje "Error definido por la aplicación o por el objeto".
HelpFile
Opcional. Ruta de acceso completa al archivo de Ayuda en el que se encuentra la ayuda para el error. De no especificarse,
Visual Basic utilizará el nombre completo con unidad, ruta de acceso y nombre de archivo del archivo de Ayuda de Visual
Basic.
HelpContext
Opcional. Identificador de contexto que localiza un tema en HelpFile en el que se proporciona ayuda para el error. Si se
omite, se utilizará, si existe, el identificador de contexto del archivo de Ayuda de Visual Basic del error correspondiente a la
propiedad Number.
Excepciones
Tipo de excepción Número de error Condición
ArgumentException 5 Number es mayor que 65535.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores
no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo,
siempre que sea posible, debe considerarse la posibilidad de sustituir dicho control de errores por
Información general sobre el control estructurado de excepciones de Visual Basic.
Comentarios
Todos los argumentos de Raise excepto Number son opcionales. Si se omiten los argumentos opcionales y la configuración de
la propiedad del objeto Err contiene valores que no se han borrado, éstos últimos se utilizarán como los valores del error.
Como el objeto Err proporciona información más completa que cuando los errores se generan con la instrucción Error, Raise
resulta útil para generar errores cuando se escriben módulos de clases. Por ejemplo, con el método Raise, puede especificarse
el origen del error en la propiedad Source, puede hacerse una referencia al error en la ayuda en pantalla, etc.
Ejemplo
En este ejemplo se utiliza el método Err del objeto Raise para generar un error en una función escrita en Visual Basic. La
función de llamada puede capturar el error y notificárselo al usuario mediante un cuadro de mensaje.
VB
Const WidthError As Integer = 1
Const WidthHelp As Object = 101
Sub TestWidth(ByVal width As Integer)
If width > 1000 Then
Err.Raise(vbObjectError + 512 + WidthError, "TestWidth", _
"Width must be less than 1000.", "HelpFile.hlp", WidthHelp)
End If
End Sub

Sub CallingProcedure()
Try
TestWidth(2000)
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: ErrObject
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Err (Objeto, Visual Basic)
Clear (Método, objeto Err)
Description (Propiedad, objeto Err)
Error (Instrucción)
HelpContext (Propiedad, objeto Err)
HelpFile (Propiedad, objeto Err)
LastDllError (Propiedad, objeto Err)
Number (Propiedad, objeto Err)
Instrucción On Error (Visual Basic)
Source (Propiedad, objeto Err)
ArgumentException Class
Referencia del lenguaje Visual Basic

Source (Propiedad, objeto Err)


Devuelve o establece una expresión String que especifica el nombre del objeto o de la aplicación que generó originalmente el
error. Lectura y escritura.

Public Property Source() As String

Comentarios
La propiedad Source especifica una expresión String que representa el objeto que ha generado el error; la expresión suele ser
el nombre de clase o el identificador de proceso del objeto. Utilice la propiedad Source para proporcionar información cuando
el código no pueda controlar un error generado en un objeto al que se ha tenido acceso. Por ejemplo, si obtiene acceso a
Microsoft Excel y se genera un error Division by zero, Microsoft Excel establece Err.Number en el código de ese error y
establece Source en "Excel.Application".
Cuando la aplicación genera un error de código, Source es el identificador de programación de la aplicación. En una clase,
Source debería contener un nombre con el formato project.class. Cuando se produce un error inesperado en el código, la
propiedad Source se establece automáticamente. En los errores que se producen en un módulo, Source contiene el nombre
del proyecto.
Ejemplo
En este ejemplo se muestra el uso de la propiedad Source en una rutina de control de errores habitual. Cuando se produce un
error en Class1, la cadena "Class1" se asigna a la propiedad Source del objeto Err. Esta cadena aparecerá en un mensaje
informativo que indique el origen y el número del error.
VB
Public Class Class1
Public Sub MySub()
On Error Resume Next
Err.Raise(60000, "Class1")
MsgBox(Err.Source & " caused an error of type " & Err.Number)
End Sub
End Class

Requisitos
Espacio de nombres: Microsoft.VisualBasic
Módulo: ErrObject
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
Err (Objeto, Visual Basic)
Description (Propiedad, objeto Err)
ErrorToString (Función)
GetObject (Función, Visual Basic)
HelpContext (Propiedad, objeto Err)
HelpContext (Propiedad, objeto Err)
HelpFile (Propiedad, objeto Err)
LastDllError (Propiedad, objeto Err)
Number (Propiedad, objeto Err)
Instrucción On Error (Visual Basic)
Referencia del lenguaje Visual Basic

My.Application (Objeto)
Proporciona propiedades, métodos y eventos relacionados con la aplicación actual.
Comentarios
Las propiedades expuestas por los datos devueltos del objeto My.Application que sólo se asocian con la aplicación o archivo
DLL actual. No se puede modificar ninguna información de nivel de sistema con My.Application.
Algunos miembros sólo están disponibles para formularios Windows Forms o aplicaciones de consola.
Ejemplo
En este ejemplo se utiliza la propiedad My.Application.CommandLineArgs para examinar los argumentos de línea de
comandos de la aplicación. Si se encuentra un argumento que comienza con /input=, se muestra el resto de dicho argumento.
VB
Private Sub ParseCommandLineArgs()
Dim inputArgument As String = "/input="
Dim inputName As String = ""

For Each s As String In My.Application.CommandLineArgs


If s.ToLower.StartsWith(inputArgument) Then
inputName = s.Remove(0, inputArgument.Length)
End If
Next

If inputName = "" Then


MsgBox("No input name")
Else
MsgBox("Input name: " & inputName)
End If
End Sub

Requisitos
Espacio de nombres: Microsoft.VisualBasic.ApplicationServices
Clase: WindowsFormsApplicationBase (la clase base ConsoleApplicationBase proporciona miembros disponibles en
aplicaciones de consola y su clase base ApplicationBase proporciona los miembros disponibles en todos los proyectos)
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Vea también
Referencia
My.Application (Miembros del objeto)
My.Application.ApplicationContext (Propiedad)
My.Application.Info (Objeto)
My.Application.Log (Objeto)
Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase
Microsoft.VisualBasic.ApplicationServices.ApplicationBase
Referencia del lenguaje Visual Basic

My.Application (Miembros del objeto)


My.Application (Objeto) proporciona propiedades, métodos y eventos relacionados con la aplicación actual.
Propiedades
Propiedad Descripción
ApplicationContext Obtiene el objeto ApplicationContext para el subproceso actual de una aplicación de Wind
ows Forms.
Esta propiedad sólo está disponible para aplicaciones de Windows Forms.

CommandLineArgs Obtiene una colección que contiene los argumentos de la línea de comandos como caden
as para la aplicación actual.

Culture Obtiene la referencia cultural que utiliza el subproceso actual para la manipulación y el for
mato de las cadenas.

Implementación Obtiene el objeto de implementación ClickOnce de la aplicación actual, que proporciona la


compatibilidad para actualizar mediante programación la implementación actual y la desc
arga de archivos a petición.

Info Devuelve My.Application.Info (Objeto), que proporciona las propiedades para obtener la in
formación sobre el ensamblado de la aplicación, como el número de versión, la descripció
n, etc.

IsNetworkDeployed Obtiene Boolean, que representa si la aplicación se ha implementado en red.

Log Devuelve My.Application.Log (Objeto), que proporciona una propiedad y métodos para es
cribir información de eventos y excepciones en los agentes de escucha del registro de eve
ntos de la aplicación.

MinimumSplashScreenDisplayTime Obtiene o establece la longitud mínima de tiempo, en milisegundos, que se muestra la pa


ntalla de inicio.

OpenForms Obtiene una colección de los formularios abiertos de toda la aplicación.


Esta propiedad sólo está disponible para aplicaciones de Windows Forms.

SaveMySettingsOnExit Determina si la aplicación guarda la configuración del usuario al salir.


Esta propiedad sólo está disponible para aplicaciones de Windows Forms y aplicaciones d
e consola.

SplashScreen Obtiene o establece la pantalla de inicio de esta aplicación.


Esta propiedad sólo está disponible para aplicaciones de Windows Forms.

UICulture Obtiene la referencia cultural que utiliza el subproceso actual para recuperar los recursos
específicos de la referencia cultural.
Métodos
Método Descripción
ChangeCulture Cambia la referencia cultural que utiliza el subproceso actual para la manipulación y el formato de las
cadenas.

ChangeUICulture Cambia la referencia cultural que utiliza el subproceso actual para recuperar los recursos específicos
de la referencia cultural.
DoEvents Procesa todos los mensajes de Windows que se encuentran en la cola de mensajes.
Este método sólo está disponible para aplicaciones de Windows Forms.

GetEnvironmentVariable Devuelve el valor de la variable de entorno especificada.

Run Configura e inicia el modelo de aplicación Visual Basic.


Este método sólo está disponible para aplicaciones de Windows Forms.
Eventos
Evento Descripción
NetworkAvailabilityChanged Se produce cuando cambia la disponibilidad en red.
Este evento está disponible sólo para las aplicaciones de Windows Forms.

Apagar Se produce cuando se cierra la aplicación.


Este evento está disponible sólo para las aplicaciones de Windows Forms.

Startup Se produce cuando se inicia la aplicación.


Este evento está disponible sólo para las aplicaciones de Windows Forms.

StartupNextInstance Se produce al intentar iniciar una aplicación de instancia única cuando ya está activa.
Este evento está disponible sólo para las aplicaciones de Windows Forms.

UnhandledException Se produce cuando la aplicación encuentra una excepción no controlada.


Este evento está disponible sólo para las aplicaciones de Windows Forms.
Vea también
Referencia
My.Application (Objeto)
Referencia del lenguaje Visual Basic

My.Application.ApplicationContext (Propiedad)
Obtiene el objeto ApplicationContext para el subproceso actual de una aplicación de Windows Forms.

' Usage
Dim value As System.Windows.Forms.ApplicationContext = My.Application.ApplicationContext
' Declaration
Public ReadOnly Property ApplicationContext As System.Windows.Forms.ApplicationContext

Valor devuelto
Esta propiedad devuelve el objeto ApplicationContext para el subproceso actual. Ese objeto contiene información contextual
acerca del subproceso.
Comentarios
Éste es un miembro avanzado; no aparece en IntelliSense a menos que seleccione la ficha Todas.
Requisitos
Espacio de nombres: Microsoft.VisualBasic.ApplicationServices
Clase: WindowsFormsApplicationBase
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases No

Aplicación de consola No

Biblioteca de controles de Windows No

Biblioteca de controles Web No

Servicio de Windows No

Sitio Web No
Permisos
No se requiere ningún permiso.
Vea también
Referencia
My.Application (Objeto)
System.Windows.Forms.ApplicationContext
Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.ApplicationContext
Referencia del lenguaje Visual Basic

My.Application.ChangeCulture (Método)
Cambia la referencia cultural utilizada por el subproceso actual para la manipulación de cadenas de caracteres y para el
formato de las cadenas.

' Usage
My.Application.ChangeCulture(cultureName)
' Declaration
Public Sub ChangeCulture( _
ByVal cultureName As String _
)

Parámetros
cultureName
String. Nombre de la referencia cultural como una cadena. Para obtener una lista de los posibles nombres, vea CultureInfo.
Excepciones
Las circunstancias siguientes pueden provocar una excepción:
El argumento cultureName es Nothing (ArgumentNullException).
El argumento cultureName no es un nombre de referencia cultural válido (ArgumentException).
Comentarios
El método My.Application.ChangeCulture cambia la propiedad CurrentCulture actual del subproceso. CurrentCulture
determina los formatos predeterminados de fecha, hora, moneda, número, ordenación del texto, comparaciones de cadenas y
formato de mayúsculas y minúsculas de todos los cálculos de ese subproceso.
Para recuperar la referencia cultural actual, puede utilizar las propiedades My.Application.Culture (Propiedad) o
CurrentCulture.
La configuración de CurrentCulture es diferente de la configuración de idioma. Sólo contiene datos relacionados con la
configuración estándar para una región geográfica. Por lo tanto, la propiedad CurrentCulture únicamente se puede establecer
en una referencia cultural específica o en InvariantCulture.
Utilice el método My.Application.ChangeUICulture para cambiar la referencia cultural que utiliza el subproceso actual para
recuperar los recursos específicos de la referencia cultural.
Nota de seguridad
El método My.Application.ChangeCulture requiere un permiso SecurityPermission con el conjunto ControlThread estable
cido. Es peligroso manipular subprocesos por el estado de seguridad asociado a los mismos. Por consiguiente, este permiso
sólo se debería dar como obligatorio al código de confianza. No se puede cambiar la referencia cultural de un subproceso en
un código de confianza parcial.

Ejemplo
Este ejemplo muestra cómo al cambiar la referencia cultural también cambia la representación de las cadenas de fecha.
VB
Private Sub TestChangeCulture()
' Store the current culture.
Dim currentculture As String = My.Application.Culture.Name
MsgBox("Current culture is " & currentculture)

Dim jan1 As New Date(2005, 1, 1, 15, 15, 15)


My.Application.ChangeCulture("en-US")
MsgBox("Date represented in en-US culture: " & jan1)
' 1/1/2005 3:15:15 PM
My.Application.ChangeCulture("")
MsgBox("Date represented in invariant culture" & jan1)
' 01/01/2005 15:15:15

' Restore the culture.


My.Application.ChangeCulture(currentculture)
End Sub

Requisitos
Espacio de nombres: Microsoft.VisualBasic.ApplicationServices
Clase: WindowsFormsApplicationBase, ApplicationBase
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web No
Permisos
El permiso siguiente puede ser necesario:
Permiso Descripción
SecurityPermissio Describe un conjunto de permisos de seguridad aplicados al código. Enumeración asociada: ControlThre
n ad.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Referencia
My.Application (Objeto)
My.Application.Culture (Propiedad)
My.Application.ChangeUICulture (Método)
Microsoft.VisualBasic.ApplicationServices.ApplicationBase.ChangeCulture(System.String)
CurrentCulture
Referencia del lenguaje Visual Basic

My.Application.ChangeUICulture (Método)
Cambia la referencia cultural que el subproceso actual utiliza para recuperar los recursos específicos de la referencia cultural.

' Usage
My.Application.ChangeUICulture(cultureName)
' Declaration
Public Sub ChangeUICulture( _
ByVal cultureName As String _
)

Parámetros
cultureName
String. Nombre de la referencia cultural como cadena. Para obtener una lista de los nombres posibles, vea CultureInfo.
Excepciones
Las circunstancias siguientes pueden provocar una excepción:
El argumento cultureName es Nothing (ArgumentNullException).
El argumento cultureName no es un nombre de la referencia cultural válido (ArgumentException).
Comentarios
El método My.Application.ChangeUICulture cambia la propiedad CurrentUICulture del subproceso actual. La propiedad
CurrentUICulture determina la referencia cultural que utilizan el Administrador de recursos y el objeto My.Resources; esta
información se utiliza para buscar recursos específicos de la referencia cultural en tiempo de ejecución.
Para recuperar la referencia cultural de la interfaz de usuario actual, puede utilizar las propiedades
My.Application.UICulture (Propiedad) o CurrentUICulture.
Utilice el método My.Application.ChangeCulture para cambiar la referencia cultural que el subproceso actual utiliza para la
manipulación de cadenas de caracteres y el formato de la cadena.
Ejemplo
En este ejemplo se utiliza el método My.Application.ChangeUICulture a fin de establecer la referencia cultural que
My.Resources (Objeto) utiliza para recuperar los recursos.
VB
Sub ShowLocalizedMessage()
Dim culture As String = My.Application.UICulture.Name
My.Application.ChangeUICulture("fr-FR")
MsgBox(My.Resources.Message)
My.Application.ChangeUICulture(culture)
End Sub

Para que este ejemplo funcione, la aplicación debe tener una cadena denominada Message en el archivo de recursos de la
aplicación y ésta debe tener la versión de la referencia cultural francesa de ese archivo de recursos, Resources.fr-FR.resx.
Para obtener más información, vea Cómo: Agregar o quitar recursos.
Si la aplicación no tiene la versión de la referencia cultural francesa de ese archivo de recursos, el objeto My.Resource
recupera el recurso del archivo de recursos de la referencia cultural predeterminada.
Requisitos
Espacio de nombres: Microsoft.VisualBasic.ApplicationServices
Clase: WindowsFormsApplicationBase, ApplicationBase
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web No
Permisos
No se requiere ningún permiso.
Vea también
Tareas
Cómo: Recuperar recursos localizados en Visual Basic
Referencia
My.Application (Objeto)
My.Application.ChangeCulture (Método)
My.Resources (Objeto)
Microsoft.VisualBasic.ApplicationServices.ApplicationBase.ChangeUICulture(System.String)
Referencia del lenguaje Visual Basic

My.Application.Culture (Propiedad)
Obtiene la referencia cultural que utiliza el subproceso actual para manipular cadenas de caracteres y darles formato.

' Usage
Dim value As System.Globalization.CultureInfo = My.Application.Culture
' Declaration
Public ReadOnly Property Culture As System.Globalization.CultureInfo

Valor devuelto
Devuelve un objeto CultureInfo que representa la referencia cultural que utiliza el subproceso actual para manipular cadenas y
darles formato.
Comentarios
La propiedad My.Application.CurrentCulture obtiene el objeto CultureInfo que utiliza el subproceso actual para manipular
cadenas y darles formato. Este objeto es idéntico al devuelto por la propiedad CurrentCulture, que controla muchos de los
cálculos de ese subproceso relacionados con cadenas. La propiedad CurrentCulture determina los formatos predeterminados
de fecha, hora, moneda y número. También determina cómo ordenar, comparar y poner en mayúsculas las cadenas.
Para cambiar la referencia cultural, puede utilizar el My.Application.ChangeCulture (Método) o asignar un objeto CultureInfo
diferente a la propiedad CurrentCulture.
La configuración de CurrentCulture es diferente de la configuración de idioma. Sólo contiene datos relacionados con la
configuración estándar para una región geográfica.
Utilice la propiedad My.Application.CurrentUICulture para obtener la referencia cultural que utiliza el subproceso actual
para recuperar los recursos específicos de la referencia cultural.
Ejemplo
Este ejemplo muestra cómo afecta la referencia cultural a la representación de cadenas de fecha.
VB
Private Sub TestChangeCulture()
' Store the current culture.
Dim currentculture As String = My.Application.Culture.Name
MsgBox("Current culture is " & currentculture)

Dim jan1 As New Date(2005, 1, 1, 15, 15, 15)


My.Application.ChangeCulture("en-US")
MsgBox("Date represented in en-US culture: " & jan1)
' 1/1/2005 3:15:15 PM
My.Application.ChangeCulture("")
MsgBox("Date represented in invariant culture" & jan1)
' 01/01/2005 15:15:15
' Restore the culture.
My.Application.ChangeCulture(currentculture)
End Sub

Requisitos
Espacio de nombres: Microsoft.VisualBasic.ApplicationServices
Clase: WindowsFormsApplicationBase, ApplicationBase
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web No
Permisos
No se requiere ningún permiso.
Vea también
Referencia
My.Application (Objeto)
My.Application.ChangeCulture (Método)
My.Application.UICulture (Propiedad)
System.Globalization.CultureInfo
CurrentCulture
Microsoft.VisualBasic.ApplicationServices.ApplicationBase.Culture
Referencia del lenguaje Visual Basic

My.Application.CommandLineArgs (Propiedad)
Obtiene una colección que contiene los argumentos de la línea de comandos como cadenas para la aplicación actual.

' Usage
Dim value As System.Collections.ObjectModel.ReadOnlyCollection(Of String) = My.Application.
CommandLineArgs
' Declaration
Public ReadOnly Property CommandLineArgs As System.Collections.ObjectModel.ReadOnlyCollecti
on(Of String)

Valor devuelto
Una colección ReadOnlyCollection de String que contiene los argumentos de la línea de comandos como cadenas para la
aplicación actual.
Comentarios
La propiedad My.Application.CommandLineArgs proporciona acceso de sólo lectura a los argumentos de línea de
comandos de la aplicación actual en las aplicaciones que no se implementan con ClickOnce.
En una aplicación de instancia única, la propiedad My.Application.CommandLineArgs devuelve los argumentos de línea de
comandos de la primera instancia de una aplicación. Para tener acceso a los argumentos de intentos posteriores de iniciar una
aplicación de instancia única, debe controlar My.Application.StartupNextInstance (Evento) y examinar la propiedad
CommandLine del argumento StartupEventArgs.
Nota
La propiedad My.Application.CommandLineArgs devuelve sólo los argumentos de línea de comandos. Esto es diferente d
el comportamiento de la propiedad CommandLine, que devuelve el nombre de aplicación además de los argumentos.

Nota
En una aplicación que se implementa con ClickOnce, utilice la propiedad ActivationUri del objeto My.Application.Deploym
ent para obtener los argumentos de la línea de comandos. Para obtener más información, vea
My.Application.Deployment (Propiedad).

Tareas
La tabla siguiente muestra una lista de ejemplos de tareas en las que está implicada la propiedad
My.Application.CommandLineArgs.
Para Vea
Comprobar si la aplicac Cómo: Habilitar un modo de procesamiento por lotes para aplicaciones de formularios Window Forms
ión se ha iniciado con l
a cadena /batch como
un argumento

Comprobar los argume My.Application.StartupNextInstance (Evento)


ntos de línea de coman
dos de intentos siguien
tes de iniciar una aplica
ción de instancia única
Ejemplo
En este ejemplo se utiliza la propiedad My.Application.CommandLineArgs para examinar los argumentos de línea de
comandos de la aplicación. Si se encuentra un argumento que comienza con /input=, se muestra el resto de dicho argumento.
VB
Private Sub ParseCommandLineArgs()
Dim inputArgument As String = "/input="
Dim inputName As String = ""

For Each s As String In My.Application.CommandLineArgs


If s.ToLower.StartsWith(inputArgument) Then
inputName = s.Remove(0, inputArgument.Length)
End If
Next
If inputName = "" Then
MsgBox("No input name")
Else
MsgBox("Input name: " & inputName)
End If
End Sub

Requisitos
Espacio de nombres: Microsoft.VisualBasic.ApplicationServices
Clase: ConsoleApplicationBase
Ensamblado:Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases No

Aplicación de consola Sí

Biblioteca de controles de Windows No

Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web No
Permisos
El permiso siguiente puede ser necesario:
Permiso Descripción
EnvironmentPermission Controla la capacidad para tener acceso a la variable de entorno PATH. Enumeración asociada: Read.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Referencia
My.Application (Objeto)
My.Application.StartupNextInstance (Evento)
ReadOnlyCollection
Microsoft.VisualBasic.ApplicationServices.ConsoleApplicationBase.CommandLineArgs
StartupEventArgs
CommandLine
Referencia del lenguaje Visual Basic

My.Application.Deployment (Propiedad)
Obtiene el objeto de implementación ClickOnce de la aplicación actual, que proporciona compatibilidad con la actualización de
la implementación actual mediante programación y con la descarga de archivos a petición.

' Usage
Dim value As System.Deployment.Application.ApplicationDeployment = My.Application.Deploymen
t
' Declaration
Public ReadOnly Property Deployment As System.Deployment.Application.ApplicationDeployment

Valor devuelto
Devuelve el objeto ApplicationDeployment para la implementación ClickOnce de la aplicación.
Excepciones
La siguiente condición puede provocar una excepción:
La aplicación no se implementa como una aplicación ClickOnce (InvalidDeploymentException).
Comentarios
La propiedad My.Application.Deployment devuelve el objeto ApplicationDeployment al ClickOnce de la aplicación. El
objeto ApplicationDeployment proporciona compatibilidad con la actualización de la implementación actual mediante
programación y con la descarga de archivos a petición. Para obtener más información sobre las aplicaciones ClickOnce y cómo
implementarlas, vea Implementación ClickOnce y Publicar aplicaciones ClickOnce.
Compruebe la propiedad My.Application.IsNetworkDeployed (Propiedad) antes de tener acceso a la propiedad
My.Application.Deployment. De lo contrario, si la aplicación no se ha implementado utilizando ClickOnce, al leer la
propiedad My.Application.Deployment se produce una excepción InvalidDeploymentException. Para obtener más
información sobre cómo implementar una aplicación ClickOnce, vea Cómo: Publicar aplicaciones ClickOnce.
Para obtener más información sobre cómo utilizar la propiedad My.Application.Deployment, vea
Información general sobre el modelo de aplicaciones de Visual Basic.
Tareas
En la tabla siguiente se muestran ejemplos de tareas en las que interviene la propiedad My.Application.Deployment.
Para Vea
Comprobar una actualización de la aplicación Cómo: Buscar actualizaciones de la aplicación ClickOnce

Descargar una actualización de la aplicación Cómo: Descargar actualizaciones de la aplicación ClickOnce


Ejemplo
En este ejemplo se descarga e instala la actualización después de comprobar que la aplicación es implementada por red. El
método Update no actualiza la aplicación a menos que esté anticuada. La aplicación tiene que reiniciarse para utilizar la
actualización. Para obtener más información, vea Cómo: Descargar actualizaciones de la aplicación ClickOnce.
VB
Sub UpdateApplication()
If My.Application.IsNetworkDeployed Then
My.Application.Deployment.Update()
End If
End Sub

Sólo las aplicaciones implementadas con ClickOnce se pueden actualizar mediante el objeto My.Application.Deployment.
Para obtener más información sobre cómo implementar una aplicación ClickOnce, vea Cómo: Publicar aplicaciones ClickOnce.
Requisitos
Espacio de nombres: Microsoft.VisualBasic.ApplicationServices
Clase: ConsoleApplicationBase
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases No

Aplicación de consola Sí

Biblioteca de controles de Windows No

Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web No
Permisos
El permiso siguiente puede ser necesario:
Permiso Descripción
FileIOPermission Controla la capacidad de tener acceso a archivos y carpetas. Enumeración asociada: Unrestricted.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Tareas
Cómo: Buscar actualizaciones de la aplicación ClickOnce
Cómo: Descargar actualizaciones de la aplicación ClickOnce
Cómo: Publicar aplicaciones ClickOnce
Referencia
My.Application (Objeto)
My.Application.IsNetworkDeployed (Propiedad)
System.Deployment.Application.ApplicationDeployment
Microsoft.VisualBasic.ApplicationServices.ConsoleApplicationBase.Deployment
Conceptos
Información general sobre el modelo de aplicaciones de Visual Basic
Otros recursos
Publicar aplicaciones ClickOnce
Referencia del lenguaje Visual Basic

My.Application.DoEvents (Método)
Procesa todos los mensajes de Windows incluidos en ese momento en la cola de mensajes.

' Usage
My.Application.DoEvents()
' Declaration
Public Sub DoEvents()

Comentarios
El método My.Application.DoEvents permite a su aplicación controlar otros eventos que se podrían provocar mientras se
ejecuta el código. El método My.Application.DoEvents tiene el mismo comportamiento que el método DoEvents.
Cuando se ejecuta una aplicación de Windows Forms, ésta crea un nuevo formulario que, a continuación, espera eventos que
se deben controlar. Cada vez el formulario controla un evento, como un clic de un botón, procesa todo el código asociado a ese
evento. Todos los demás eventos esperan en la cola. Aunque su código controle el evento, su aplicación no responde. Por
ejemplo, la ventana no vuelve a dibujarse si se arrastra otra ventana encima de ella.
Si llama a My.Application.DoEvents en su código, su aplicación puede controlar los demás eventos. Por ejemplo, si su
código agrega datos a un control ListBox en un bucle y después de cada paso del bucle llama a My.Application.DoEvents, su
formulario se vuelve a dibujar cuando se arrastra otra ventana sobre ésta. Si quita My.Application.DoEvents del código, el
formulario no se volverá a dibujar hasta que el controlador de eventos del clic del botón termine de ejecutarse.
Normalmente, este método se utiliza en un bucle para procesar los mensajes.
Nota
El método My.Application.DoEvents no procesa los eventos exactamente de la misma manera que como lo hace el formul
ario. Utilice el subprocesamiento múltiple para que hacer que el formulario controle directamente los eventos. Para obtener
más información, vea Subprocesamiento múltiple en Visual Basic.

Precaución
Si un método que controla un evento de interfaz de usuario llama al método My.Application.DoEvents, se podría entrar de
nuevo en el método antes de finalizar. Esto puede pasar porque el método My.Application.DoEvents procesa los mensajes
de Windows, y los mensajes de Windows pueden provocar eventos.

Tareas
En la tabla siguiente se incluye un ejemplo de una tarea en la que interviene el método My.Application.DoEvents.
Para Vea
Permitir a un formulario responder a las entradas de interfaz de usuario mientras está ocupado Tutorial: Controlar eventos
Ejemplo
Este ejemplo utiliza el método My.Application.DoEvents para permitir a la interfaz de usuario actualizar TextBox1.
VB
Private Sub TestDoEvents()
For i As Integer = 0 To 10000
TextBox1.Text = i.ToString
My.Application.DoEvents()
Next
End Sub

Este código debería estar en un formulario que tiene un componente TextBox1 con una propiedad Text.
Requisitos
Espacio de nombres: Microsoft.VisualBasic.ApplicationServices
Clase: WindowsFormsApplicationBase
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases No

Aplicación de consola No

Biblioteca de controles de Windows No

Biblioteca de controles Web No

Servicio de Windows No

Sitio Web No
Permisos
Los permisos siguientes pueden ser necesarios:
Permiso Descripción
FileIOPermission Controla la capacidad de tener acceso a archivos y carpetas. Enumeración asociada: Unrestricted.

UIPermission Controla los permisos relacionados con interfaces de usuario y el Portapapeles. Enumeración asociada:
AllWindows.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Referencia
My.Application (Objeto)
Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoEvents
DoEvents
Referencia del lenguaje Visual Basic

My.Application.GetEnvironmentVariable (Método)
Devuelve el valor del campo especificado como variable de entorno.

' Usage
Dim value As String = My.Application.GetEnvironmentVariable(name)
' Declaration
Public Function GetEnvironmentVariable( _
ByVal name As String _
) As String

Parámetros
name
String que contiene el nombre de la variable de entorno.
Valor devuelto
String que contiene el valor de la variable de entorno con el nombre name.
Excepciones
Las circunstancias siguientes pueden provocar una excepción:
El argumento name es Nothing (ArgumentNullException).
La variable de entorno especificada por name no existe (ArgumentException).
El código de llamada no tiene permisos EnvironmentPermission con acceso Read (SecurityException).
Comentarios
El método My.Application.GetEnvironmentVariable devuelve la variable de entorno con el nombre name. Este método es
similar a System.Environment.GetEnvironmentVariable(System.String), excepto en que este método produce una excepción si
la variable de entorno especificada por name no existe.
Ejemplo
Este ejemplo utiliza el método My.Application.GetEnvironmentVariable para obtener y mostrar el valor de la variable de
entorno PATH, si está disponible. De lo contrario, muestra un mensaje que indica que la variable de entorno PATH no existe.
VB
Private Sub TestGetEnvironmentVariable()
Try
MsgBox("PATH = " & My.Application.GetEnvironmentVariable("PATH"))
Catch ex As System.ArgumentException
MsgBox("Environment variable 'PATH' does not exist.")
End Try
End Sub

Requisitos
Espacio de nombres: Microsoft.VisualBasic.ApplicationServices
Clase: WindowsFormsApplicationBase, ApplicationBase
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí
Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web No
Permisos
No se requiere ningún permiso.
Vea también
Referencia
My.Application (Objeto)
GetEnvironmentVariable
GetEnvironmentVariable
Referencia del lenguaje Visual Basic

My.Application.Info (Propiedad)
Obtiene un objeto que proporciona las propiedades para obtener información sobre el ensamblado de la aplicación, como el
número de versión, la descripción, etc.

' Usage
Dim value As Microsoft.VisualBasic.ApplicationServices.AssemblyInfo = My.Application.Info
' Declaration
Public ReadOnly Property Info As AssemblyInfo

Valor devuelto
Esta propiedad devuelve el objeto My.Application.Info para la aplicación actual.
Comentarios
Esta propiedad proporciona acceso sencillo a My.Application.Info. Para obtener más información, vea
My.Application.Info (Objeto).
Ejemplo
Este ejemplo utiliza la propiedad My.Application.Info.Version para mostrar la versión de la aplicación.
VB
MsgBox("Application version: " & My.Application.Info.Version.ToString)

Requisitos
Espacio de nombres: Microsoft.VisualBasic.ApplicationServices
Clase: ApplicationBase
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web No
Permisos
No se requiere ningún permiso.
Vea también
Referencia
My.Application (Objeto)
My.Application.Info (Objeto)
Referencia del lenguaje Visual Basic

My.Application.IsNetworkDeployed (Propiedad)
Obtiene un valor Boolean que representa si la aplicación se implementó desde una red utilizando ClickOnce.

' Usage
Dim value As Boolean = My.Application.IsNetworkDeployed
' Declaration
Public ReadOnly Property IsNetworkDeployed As Boolean

Valor devuelto
Valor Boolean que representa si la aplicación se implementó desde una red. El valor es True si la aplicación actual se
implementó desde una red; de lo contrario, el valor es False.
Comentarios
La propiedad My.Application.IsNetworkDeployed indica si la aplicación se implementó desde una red utilizando ClickOnce.
Para obtener más información sobre las aplicaciones ClickOnce, vea Implementación ClickOnce.
Se debe comprobar que esta propiedad es True antes de tener acceso a My.Application.Deployment (Propiedad). De lo
contrario, si la aplicación no se ha implementado desde una red utilizando ClickOnce, al leer la propiedad
My.Application.Deployment se produce una excepción InvalidDeploymentException.
Para obtener más información sobre la configuración de ClickOnce, vea Publicar aplicaciones ClickOnce. Para obtener más
información sobre cómo implementar una aplicación ClickOnce, vea Cómo: Publicar aplicaciones ClickOnce.
Para obtener más información sobre cómo utilizar la propiedad My.Application.IsNetworkDeployed, vea
Información general sobre el modelo de aplicaciones de Visual Basic.
Tareas
En la tabla siguiente se muestran ejemplos de tareas en las que interviene la propiedad
My.Application.IsNetworkDeployed.
Para Vea
Comprobar una actualización de la aplicación. Cómo: Buscar actualizaciones de la aplicación ClickOnce

Descargar una actualización de la aplicación. Cómo: Descargar actualizaciones de la aplicación ClickOnce


Ejemplo
Este ejemplo descarga e instala la actualización después de comprobar que la aplicación se ha implementado desde una red. El
método Update no actualiza la aplicación a menos que esté anticuada. La aplicación tiene que reiniciarse para utilizar la
actualización. Para obtener más información, vea Cómo: Descargar actualizaciones de la aplicación ClickOnce.
VB
Sub UpdateApplication()
If My.Application.IsNetworkDeployed Then
My.Application.Deployment.Update()
End If
End Sub

Sólo las aplicaciones implementadas con ClickOnce se pueden actualizar mediante el objeto My.Application.Deployment.
Para obtener más información sobre cómo implementar una aplicación ClickOnce, vea Cómo: Publicar aplicaciones ClickOnce.
Requisitos
Espacio de nombres: Microsoft.VisualBasic.ApplicationServices
Clase: ConsoleApplicationBase
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases No

Aplicación de consola Sí

Biblioteca de controles de Windows No

Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web No
Permisos
El permiso siguiente puede ser necesario:
Permiso Descripción
FileIOPermission Controla la capacidad de tener acceso a archivos y carpetas. Enumeración asociada: Unrestricted.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Tareas
Cómo: Buscar actualizaciones de la aplicación ClickOnce
Cómo: Descargar actualizaciones de la aplicación ClickOnce
Cómo: Publicar aplicaciones ClickOnce
Referencia
My.Application (Objeto)
My.Application.Deployment (Propiedad)
IsNetworkDeployed
Conceptos
Información general sobre el modelo de aplicaciones de Visual Basic
Referencia del lenguaje Visual Basic

My.Application.Log (Propiedad)
Obtiene un objeto que proporciona propiedades y métodos para escribir información de eventos y excepciones en los agentes
de escucha de registro de la aplicación.

' Usage
Dim value As Microsoft.VisualBasic.Logging.Log = My.Application.Log
' Declaration
Public ReadOnly Property Log As MyLog

Valor devuelto
Esta propiedad devuelve el objeto My.Application.Log para la aplicación actual.
Comentarios
Esta propiedad proporciona un fácil acceso al objeto My.Application.Log. Para obtener más información, vea
My.Application.Log (Objeto).
Ejemplo
Este ejemplo muestra cómo utilizar el método My.Application.Log.WriteEntry para registrar información de seguimiento.
Para obtener más información, vea Cómo: Escribir mensajes de registro.
VB
Public Sub TracingTest(ByVal fileName As String)
My.Application.Log.WriteEntry( _
"Entering TracingTest with argument " & _
fileName & ".")
' Code to trace goes here.
My.Application.Log.WriteEntry( _
"Exiting TracingTest with argument " & _
fileName & ".")
End Sub

Requisitos
Espacio de nombres: Microsoft.VisualBasic.ApplicationServices
Clase: ApplicationBase
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web No
Permisos
El permiso siguiente puede ser necesario:
Permiso Descripción
FileIOPermission Controla la capacidad de tener acceso a archivos y carpetas. Enumeración asociada: Unrestricted.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Referencia
My.Application (Objeto)
My.Application.Log (Objeto)
Referencia del lenguaje Visual Basic

My.Application.MinimumSplashScreenDisplayTime
(Propiedad)
Determina el tiempo mínimo, en milisegundos, durante el que se muestra la pantalla de inicio.

' Usage
Dim value As Integer = My.Application.MinimumSplashScreenDisplayTime
' Declaration
Public Property MinimumSplashScreenDisplayTime As Integer

Valor devuelto
Integer. Tiempo mínimo, en milisegundos, durante el que se muestra la pantalla de inicio.
Comentarios
La propiedad My.Application.MinimumSplashScreenDisplayTime le permite especificar el tiempo mínimo durante el que
desea que se muestre la pantalla de inicio de la aplicación. Si el formulario principal termina de inicializarse en menos tiempo
que el especificado por esta propiedad, la pantalla de inicio sigue estando visible hasta que transcurre el tiempo especificado,
momento en el que se muestra el formulario principal. Si su aplicación tarda más tiempo en iniciarse, la pantalla de inicio se
cierra una vez que se activa el formulario principal.
Cuando agregue una pantalla de inicio a su aplicación usando el Diseñador de proyectos, establezca la propiedad
My.Application.MinimumSplashScreenDisplayTime en 2000, dando así un tiempo mínimo de presentación de dos
segundos.
Esta propiedad admite el modelo de aplicaciones de Visual Basic. Para obtener más información, vea
Información general sobre el modelo de aplicaciones de Visual Basic.
Debe establecer el valor de la propiedad My.Application.MinimumSplashScreenDisplayTime en el método que reemplaza
el método OnInitialize o OnCreateSplashScreen. El código que reemplaza los métodos de la clase
WindowsFormsApplicationBase se debe especificar en el archivo ApplicationEvents.vb, que está oculto de forma
predeterminada.
Para tener acceso a la ventana del Editor de código para los miembros de reemplazo
1. Con un proyecto seleccionado en el Explorador de soluciones, en el menú Proyecto haga clic en Propiedades.
2. Haga clic en la ficha Aplicación.
3. Haga clic en el botón Ver eventos de aplicaciones para abrir el editor de código.
Para obtener más información, vea Cómo: Controlar eventos de aplicaciones (Visual Basic).
Ejemplo
En este ejemplo se muestra cómo establecer la propiedad My.Application.MinimumSplashScreenDisplayTime mediante
el reemplazo de la propiedad OnInitialize.
VB
Protected Overrides Function OnInitialize( _
ByVal commandLineArgs As _
System.Collections.ObjectModel.ReadOnlyCollection(Of String) _
) As Boolean
' Set the display time to 5000 milliseconds (5 seconds).
Me.MinimumSplashScreenDisplayTime = 5000
Return MyBase.OnInitialize(commandLineArgs)
End Function

Este ejemplo requiere que el proyecto tenga una pantalla de inicio.


Debe escribir este código en la ventana del Editor de código para los eventos de aplicaciones. Para obtener más información,
vea Cómo: Controlar eventos de aplicaciones (Visual Basic).
Permisos
No se requiere ningún permiso.
Requisitos
Espacio de nombres: Microsoft.VisualBasic.ApplicationServices
Clase: WindowsFormsApplicationBase
Ensamblado:Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases No

Aplicación de consola No

Biblioteca de controles de Windows No

Biblioteca de controles Web No

Servicio de Windows No

Sitio Web No
Vea también
Referencia
My.Application (Objeto)
My.Application.SplashScreen (Propiedad)
Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.MinimumSplashScreenDisplayTime
OnInitialize
OnCreateSplashScreen
WindowsFormsApplicationBase
Conceptos
Ampliar el modelo de la aplicación de Visual Basic
Referencia del lenguaje Visual Basic

My.Application.NetworkAvailabilityChanged (Evento)
Se produce cuando cambia la disponibilidad de la red.

' Usage
Public Sub Me_NetworkAvailabilityChanged( _
ByVal sender As Object, _
ByVal e As NetworkAvailableEventArgs _
) Handles Me.NetworkAvailabilityChanged
End Sub
' Declaration
Public Event NetworkAvailabilityChanged( _
ByVal sender As Object, _
ByVal e As NetworkAvailableEventArgs _
)

Parámetros
sender
Obligatorio. El Object que provocó el evento.
e
Obligatorio. Un objeto NetworkAvailableEventArgs que contiene información sobre la disponibilidad de la red.
Comentarios
Una aplicación provoca el evento NetworkAvailabilityChanged cada vez que cambia la disponibilidad de la red. Puede
utilizar la propiedad IsNetworkAvailable del parámetro e para obtener el nuevo estado de la conexión de red. Para obtener el
estado actual de la conexión de red, utilice My.Computer.Network.IsAvailable (Propiedad).
Este evento se inicia en el subproceso principal de la aplicación con los otros eventos de interfaz del usuario. Esto permite al
controlador de eventos tener acceso directamente a la interfaz de usuario de la aplicación. Sin embargo, si la aplicación está
ocupada controlando otro evento de interfaz de usuario cuando se inicia este evento, éste no se puede procesar hasta que
termina el otro controlador de evento o llama al My.Application.DoEvents (Método).
El My.Computer.Network.NetworkAvailabilityChanged (Evento) proporciona la misma funcionalidad que este evento pero está
disponible para todos los tipos de aplicación.
El código de este controlador de eventos NetworkAvailabilityChanged se almacena en el archivo ApplicationEvents.vb, que
está oculto de manera predeterminada.
Para tener acceso a la ventana del Editor de código para los eventos de aplicación
1. Tenga seleccionado un proyecto en el Explorador de soluciones. En el menú Proyecto, haga clic en Propiedades.
2. Haga clic en la ficha Aplicación.
3. Haga clic en el botón Ver eventos de aplicaciones para abrir el Editor de código.
Para obtener más información, vea Cómo: Controlar eventos de aplicaciones (Visual Basic).
Nota
Muchos concentradores de red proporcionan una conexión de red aun cuando el concentrador se desconecta de una red ma
yor. Por consiguiente, para las conexiones cableadas, este evento indica un cambio en la conexión entre el equipo y un conce
ntrador.

Nota
El evento NetworkAvailabilityChanged no lo producen las aplicaciones cuando se ejecutan en Windows 95 y Windows 98
, o cuando las ejecuta en Windows 2000 un usuario que no es administrador. Si su aplicación podría ejecutarse en esas plataf
ormas, utilice la My.Computer.Network.IsAvailable (Propiedad) para comprobar la disponibilidad de la red.
Ejemplo
Este ejemplo llama al método SetConnectionStatus de la clase predeterminada Form1 cuando cambia la disponibilidad de la
red.
Debe escribir el código en la ventana del Editor de código para los eventos de aplicaciones. Para tener acceso a esta ventana,
siga las instrucciones de la sección Comentarios de este tema.
VB
Private Sub MyApplication_NetworkAvailabilityChanged( _
ByVal sender As Object, _
ByVal e As Microsoft.VisualBasic.Devices.NetworkAvailableEventArgs _
) Handles Me.NetworkAvailabilityChanged
My.Forms.Form1.SetConnectionStatus(e.IsNetworkAvailable)
End Sub

Compilar el código
El proyecto debería tener un formulario denominado Form1. Debe incluir un método denominado SetConnectionStatus que
toma un parámetro Boolean.
Requisitos
Espacio de nombres: Microsoft.VisualBasic.ApplicationServices
Clase: WindowsFormsApplicationBase
Ensamblado:Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases No

Aplicación de consola No

Biblioteca de controles de Windows No

Biblioteca de controles Web No

Servicio de Windows No

Sitio Web No
Permisos
No se requiere ningún permiso.
Vea también
Referencia
My.Application (Objeto)
My.Forms (Objeto)
My.Computer.Network.NetworkAvailabilityChanged (Evento)
Microsoft.VisualBasic.Devices.NetworkAvailableEventArgs
Referencia del lenguaje Visual Basic

My.Application.OpenForms (Propiedad)
Obtiene una colección de los formularios abiertos de toda la aplicación.

' Usage
Dim value As System.Windows.Forms.FormCollection = My.Application.OpenForms
' Declaration
Public ReadOnly Property OpenForms As System.Windows.Forms.FormCollection

Valor devuelto
Objeto FormCollection que contiene los formularios abiertos de toda la aplicación.
Comentarios
La propiedad My.Application.OpenForms obtiene una colección de los formularios abiertos de toda la aplicación. El
comportamiento es idéntico al de la propiedad System.Windows.Forms.Application.OpenForms.
Nota
La propiedad My.Application.OpenForms devuelve todos los formularios abiertos, sin tener en cuenta qué subproceso los
abrió. Debería comprobar la propiedad InvokeRequired de cada formulario antes de tener acceso a él; de lo contrario, podría
producir una excepción InvalidOperationException. Para obtener más información, vea
Cómo: Obtener acceso a todos los formularios abiertos de una aplicación.

Tareas
En la tabla siguiente se muestran ejemplos de tareas en las que interviene la propiedad My.Application.OpenForms.
Para Vea
Mostrar los títulos de los formularios abiertos de tod Cómo: Obtener acceso a todos los formularios abiertos de una aplicación
a la aplicación
Ejemplo
Este ejemplo itera sobre los formularios abiertos de la aplicación, selecciona aquellos a los que el subproceso actual tiene
acceso directamente y muestra sus títulos en un control ListBox. Para tener acceso a los formularios abiertos, vea
Cómo: Obtener acceso a todos los formularios abiertos de una aplicación.
VB
Private Sub GetOpenFormTitles()
Dim formTitles As New Collection
Try
For Each f As Form In My.Application.OpenForms
If Not f.InvokeRequired Then
' Can access the form directly.
formTitles.Add(f.Text)
End If
Next
Catch ex As Exception
formTitles.Add("Error: " & ex.Message)
End Try

Form1.ListBox1.DataSource = formTitles
End Sub

Este ejemplo requiere que la aplicación de Windows Forms tenga un formulario denominado Form1 con un cuadro de lista
denominado ListBox1.
Requisitos
Espacio de nombres: Microsoft.VisualBasic.ApplicationServices
Clase: WindowsFormsApplicationBase
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases No

Aplicación de consola No

Biblioteca de controles de Windows No

Biblioteca de controles Web No

Servicio de Windows No

Sitio Web No
Permisos
El permiso siguiente puede ser necesario:
Permiso Descripción
UIPermission Controla los permisos relacionados con las interfaces de usuario y el Portapapeles. Enumeración asociada:
AllWindows.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Referencia
My.Application (Objeto)
System.Windows.Forms.FormCollection
Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OpenForms
System.Windows.Forms.Application.OpenForms
Referencia del lenguaje Visual Basic

My.Application.Run (Método)
Configura e inicia el modelo de aplicaciones de Visual Basic.

' Usage
My.Application.Run(commandLine)
' Declaration
Public Sub Run( _
ByVal commandLine As String() _
)

Parámetros
commandLine
Matriz de tipo String. Línea de comando desde Sub Main.
Comentarios
El método My.Application.Run proporciona la compatibilidad para el modelo de aplicaciones de Visual Basic. Sólo se debe
llamar a este método desde la sección Sub Main de la aplicación. De manera predeterminada, la sección Sub Main de una
aplicación de Windows Forms llama a este método. Para obtener más información, vea
Información general sobre el modelo de aplicaciones de Visual Basic.
Requisitos
Espacio de nombres: Microsoft.VisualBasic.ApplicationServices
Clase: WindowsFormsApplicationBase
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases No

Aplicación de consola No

Biblioteca de controles de Windows No

Biblioteca de controles Web No

Servicio de Windows No

Sitio Web No
Permisos
Los permisos siguientes pueden ser necesarios:
Permiso Descripción
EnvironmentPermission Controla la capacidad de tener acceso a todas las variables de entorno. Enumeración asociada
: Unrestricted.

FileIOPermission Controla la capacidad de tener acceso a archivos y carpetas. Enumeración asociada: Unrestric
ted.
RegistryPermission Controla la capacidad de tener acceso a las variables del Registro. Enumeración asociada: Unr
estricted.

UIPermission Controla los permisos relacionados con interfaces de usuario y el Portapapeles. Enumeración
asociada: AllWindows.

WebPermission Controla los derechos para obtener acceso a los recursos de Internet HTTP. Enumeración asoc
iada: Unrestricted.

SocketPermission Controla los derechos para realizar o aceptar conexiones en una dirección de transporte. Enu
meración asociada: Unrestricted.

PerformanceCounterPermission Controla el acceso a un componente de contador de rendimiento de Windows NT. Enumeraci


ón asociada: Unrestricted.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Referencia
My.Application (Objeto)
Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(System.String[])
Conceptos
Información general sobre el modelo de aplicaciones de Visual Basic
Referencia del lenguaje Visual Basic

My.Application.SaveMySettingsOnExit (Propiedad)
Determina si la aplicación guarda la configuración del usuario al salir.

' Usage
Dim value As Boolean = My.Application.SaveMySettingsOnExit
' Declaration
Public Property SaveMySettingsOnExit As Boolean

Valor devuelto
Boolean. True indica que la aplicación guarda la configuración del usuario al salir. De lo contrario, la configuración no se
guarda implícitamente.
Comentarios
La propiedad SaveMySettingsOnExit permite al usuario cambiar la forma en que la aplicación guarda la configuración, en
tiempo de ejecución. Puede guardar explícitamente los cambios de la configuración utilizando el método Save del objeto
My.Settings. Para obtener más información sobre cómo cambiar y guardar la configuración, vea My.Settings (Objeto).
Los cambios efectuados en esta propiedad no se conservan cuando se cierra la aplicación. Para cambiar permanentemente la
propiedad SaveMySettingsOnExit, debe cambiar la configuración en el Diseñador de proyectos:
Para cambiar la configuración en el Diseñador de proyectos
1. Tenga seleccionado un proyecto en el Explorador de soluciones. En el menú Proyecto, haga clic en Propiedades.
2. Haga clic en la ficha Aplicación.
3. Seleccione Guardar My.Settings al cerrar.
Para obtener más información, vea Administrar las propiedades de la aplicación.
Ejemplo
Este ejemplo tiene dos partes:
La subrutina InitializeSaveMySettingsOnExit, que inicializa el estado de activación de un control CheckBox al valor
actual de la propiedad SaveMySettingsOnExit.
La subrutina SaveMySettingsOnExit_CheckedChanged, que controla los cambios efectuados en un control CheckBox
para actualizar la propiedad My.Application.SaveMySettingsOnExit.
VB
Private Sub InitializeSaveMySettingsOnExit()
SaveMySettingsOnExit.Checked = _
My.Application.SaveMySettingsOnExit
End Sub
Private Sub SaveMySettingsOnExit_CheckedChanged( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs _
) Handles SaveMySettingsOnExit.CheckedChanged
My.Application.SaveMySettingsOnExit = _
SaveMySettingsOnExit.Checked
End Sub

Para que funcione este ejemplo, su aplicación debe tener un control CheckBox denominado SaveMySettingsOnExit.
Requisitos
Espacio de nombres: Microsoft.VisualBasic.ApplicationServices
Clase: WindowsFormsApplicationBase
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases No

Aplicación de consola No

Biblioteca de controles de Windows No

Biblioteca de controles Web No

Servicio de Windows No

Sitio Web No
Permisos
No se requiere ningún permiso.
Vea también
Referencia
My.Application (Objeto)
My.Settings (Objeto)
Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.SaveMySettingsOnExit
Save
Referencia del lenguaje Visual Basic

My.Application.Shutdown (Evento)
Se produce cuando se cierra la aplicación.

' Usage
Public Sub Me_Shutdown( _
ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles Me.Shutdown
End Sub
' Declaration
Public Event Shutdown( _
ByVal sender As Object, _
ByVal e As System.EventArgs _
)

Parámetros
sender
El Object que provocó el evento.
e
Un objeto EventArgs que contiene Empty.
Comentarios
Una aplicación provoca el evento Shutdown antes de salir. Esto le permite controlar cómo cierra la aplicación sus recursos.
Este evento forma parte del modelo de aplicaciones de Visual Basic. Para obtener más información, vea
Información general sobre el modelo de aplicaciones de Visual Basic.
El código de este controlador de eventos Shutdown se almacena en el archivo ApplicationEvents.vb, que está oculto de
manera predeterminada.
Para tener acceso a la ventana del Editor de código para los eventos de aplicación
1. Con un proyecto seleccionado en el Explorador de soluciones, en el menú Proyecto haga clic en Propiedades.
2. Haga clic en la ficha Aplicación.
3. Haga clic en el botón Ver eventos de aplicaciones para abrir el Editor de código.
Para obtener más información, vea Cómo: Controlar eventos de aplicaciones (Visual Basic).
Tareas
La tabla siguiente muestra ejemplos de tareas que implican al evento My.Application.Shutdown.
Para Vea
Utilizar los eventos proporcionados por el modelo de aplic Cómo: Ejecutar código cuando se inicia o se cierra la aplicación
aciones de Visual Basic para ejecutar código

Registrar un mensaje cuando se cierra la aplicación Cómo: Registrar mensajes cuando se inicia o se cierra la aplicación
Ejemplo
Este ejemplo registra los mensajes cuando se cierra la aplicación.
VB
Private Sub MyApplication_Shutdown( _
ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles Me.Shutdown
My.Application.Log.WriteEntry("Application Shut Down.")
End Sub

Debe escribir el código en la ventana del Editor de código para los eventos de aplicaciones. Para tener acceso a esta ventana,
siga las instrucciones de la sección Comentarios de este tema. Para obtener más información, vea
Cómo: Registrar mensajes cuando se inicia o se cierra la aplicación.
Requisitos
Espacio de nombres: Microsoft.VisualBasic.ApplicationServices
Clase: WindowsFormsApplicationBase
Ensamblado:Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases No

Aplicación de consola No

Biblioteca de controles de Windows No

Biblioteca de controles Web No

Servicio de Windows No

Sitio Web No
Permisos
No se requiere ningún permiso.
Vea también
Tareas
Cómo: Registrar mensajes cuando se inicia o se cierra la aplicación
Cómo: Controlar eventos de aplicaciones (Visual Basic)
Referencia
My.Application (Objeto)
System.EventArgs
Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Shutdown
Conceptos
Información general sobre el modelo de aplicaciones de Visual Basic
Referencia del lenguaje Visual Basic

My.Application.SplashScreen (Propiedad)
Obtiene o establece la pantalla de inicio de esta aplicación.

' Usage
Dim value As System.Windows.Forms.Form = My.Application.SplashScreen
' Declaration
Public Property SplashScreen As System.Windows.Forms.Form

Valor devuelto
Un objeto Form que utiliza la aplicación como pantalla de inicio.
Excepciones
La siguiente condición puede provocar una excepción:
Se ha asignado el mismo valor a esta propiedad y a la propiedad My.Application.MainForm (ArgumentNullException).
Comentarios
La propiedad My.Application.SplashScreen le permite obtener o establecer el objeto Form que utiliza la aplicación como
pantalla de inicio, la primera forma gráfica que aparece mientras se inicia una aplicación.
Esta propiedad admite el modelo de aplicaciones de Visual Basic. Para obtener más información, vea
Información general sobre el modelo de aplicaciones de Visual Basic.
Los cambios efectuados en esta propiedad no se conservan cuando se cierra la aplicación. Para cambiar permanentemente la
pantalla de inicio, debe cambiar el ajuste en el Diseñador de proyectos. Para obtener más información, vea
Cómo: Especificar una pantalla de bienvenida para una aplicación (Visual Basic).
Ejemplo
Este ejemplo utiliza la propiedad My.Application.SplashScreen y el evento My.Application.Startup para actualizar la
pantalla de inicio con información de estado mientras se inicia la aplicación.
VB
Private Sub MyApplication_Startup( _
ByVal sender As Object, _
ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupEventArgs _
) Handles Me.Startup
' Get the splash screen.
Dim splash As SplashScreen1 = CType(My.Application.SplashScreen, SplashScreen1)
' Display current status information.
splash.Status = "Current user: " & My.User.Name
End Sub

Este ejemplo requiere que el proyecto tenga una pantalla de inicio denominada SplashScreen1. La pantalla de inicio debe tener
una propiedad denominada Status que actualiza su interfaz de usuario.
Debe escribir este código en la ventana del Editor de código para los eventos de aplicaciones. Para obtener más información,
vea Cómo: Controlar eventos de aplicaciones (Visual Basic).
Requisitos
Espacio de nombres: Microsoft.VisualBasic.ApplicationServices
Clase: WindowsFormsApplicationBase
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases No

Aplicación de consola No

Biblioteca de controles de Windows No

Biblioteca de controles Web No

Servicio de Windows No

Sitio Web No
Permisos
No se requiere ningún permiso.
Vea también
Referencia
My.Application (Objeto)
My.Application.MinimumSplashScreenDisplayTime (Propiedad)
System.Windows.Forms.Form
Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.SplashScreen
Referencia del lenguaje Visual Basic

My.Application.Startup (Evento)
Se produce cuando se inicia la aplicación.

' Usage
Public Sub Me_Startup( _
ByVal sender As Object, _
ByVal e As StartupEventArgs _
) Handles Me.Startup
End Sub
' Declaration
Public Event Startup( _
ByVal sender As Object, _
ByVal e As StartupEventArgs _
)

Parámetros
sender
El Object que provocó el evento.
e
Un objeto StartupEventArgs que contiene los argumentos de la línea de comandos de la aplicación.
Comentarios
Una aplicación normal (de instancia no única) provoca el evento Startup cada vez se inicia. Una aplicación de instancia única
provoca el evento Startup cuando sólo se inicia si la aplicación aún no está activa; de lo contrario, provoca el evento
StartupNextInstance. Para obtener más información, vea My.Application.StartupNextInstance (Evento) y
Cómo: Especificar el comportamiento de las instancias para una aplicación.
Este evento forma parte del modelo de aplicaciones de Visual Basic. Para obtener más información, vea
Información general sobre el modelo de aplicaciones de Visual Basic.
Puede utilizar la propiedad Cancel del parámetro e para controlar la carga del formulario de inicio de una aplicación. Cuando la
propiedad Cancel está establecida en True, el formulario de inicio no se inicia. En ese caso, su código debería llamar a una ruta
de acceso del código de inicio alternativa. Por ejemplo, vea
Cómo: Habilitar un modo de procesamiento por lotes para aplicaciones de formularios Window Forms.
Puede utilizar la propiedad CommandLine del parámetro e o la My.Application.CommandLineArgs (Propiedad) para tener
acceso a los argumentos de la línea de comandos de la aplicación.
El código de este controlador de eventos Startup se almacena en el archivo ApplicationEvents.vb, que está oculto de manera
predeterminada.
Para tener acceso a la ventana del Editor de código para los eventos de aplicación
1. Con un proyecto seleccionado en el Explorador de soluciones, en el menú Proyecto haga clic en Propiedades.
2. Haga clic en la ficha Aplicación.
3. Haga clic en el botón Ver eventos de aplicaciones para abrir el Editor de código.
Para obtener más información, vea Cómo: Controlar eventos de aplicaciones (Visual Basic).
Tareas
La tabla siguiente muestra ejemplos de tareas que implican al evento My.Application.Startup.
Para Vea
Utilizar los eventos pro Cómo: Ejecutar código cuando se inicia o se cierra la aplicación
porcionados por el mo
delo de aplicaciones de
Visual Basic para ejecut
ar código

Compruebe si la aplica Cómo: Habilitar un modo de procesamiento por lotes para aplicaciones de formularios Window Forms
ción se inició con cade
na /batch como un arg
umento
Ejemplo
Este ejemplo utiliza la propiedad My.Application.SplashScreen y el evento My.Application.Startup para actualizar la
pantalla de inicio con información de estado mientras se inicia la aplicación.
VB
Private Sub MyApplication_Startup( _
ByVal sender As Object, _
ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupEventArgs _
) Handles Me.Startup
' Get the splash screen.
Dim splash As SplashScreen1 = CType(My.Application.SplashScreen, SplashScreen1)
' Display current status information.
splash.Status = "Current user: " & My.User.Name
End Sub

Este ejemplo requiere que el proyecto tenga una pantalla de inicio denominada SplashScreen1. La pantalla de inicio debe tener
una propiedad denominada Status que actualiza su interfaz de usuario.
Debe escribir el código en la ventana del Editor de código para los eventos de aplicaciones. Para tener acceso a esta ventana,
siga las instrucciones de la sección Comentarios de este tema. Para obtener más información, vea
Cómo: Controlar eventos de aplicaciones (Visual Basic).
Requisitos
Espacio de nombres: Microsoft.VisualBasic.ApplicationServices
Clase: WindowsFormsApplicationBase
Ensamblado:Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases No

Aplicación de consola No

Biblioteca de controles de Windows No

Biblioteca de controles Web No

Servicio de Windows No

Sitio Web No
Permisos
Los permisos siguientes pueden ser necesarios:
Permiso Descripción
SecurityPermission Controla la capacidad de agregar un controlador de eventos para este evento. Enumeración asociada:
System.Security.Permissions.SecurityPermissionFlag.ControlAppDomain.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Tareas
Cómo: Habilitar un modo de procesamiento por lotes para aplicaciones de formularios Window Forms
Cómo: Controlar eventos de aplicaciones (Visual Basic)
Cómo: Especificar el comportamiento de las instancias para una aplicación
Referencia
My.Application (Objeto)
My.Application.StartupNextInstance (Evento)
My.Application.CommandLineArgs (Propiedad)
Microsoft.VisualBasic.ApplicationServices.StartupEventArgs
Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Startup
Conceptos
Información general sobre el modelo de aplicaciones de Visual Basic
Referencia del lenguaje Visual Basic

My.Application.StartupNextInstance (Evento)
Se produce al intentar iniciar una aplicación de instancia única cuando ya está activa.

' Usage
Public Sub Me_StartupNextInstance( _
ByVal sender As Object, _
ByVal e As StartupNextInstanceEventArgs _
) Handles Me.StartupNextInstance
End Sub
' Declaration
Public Event StartupNextInstance( _
ByVal sender As Object, _
ByVal e As StartupNextInstanceEventArgs _
)

Parámetros
sender
Object que provocó el evento.
e
Objeto StartupEventArgs que contiene los argumentos de la línea de comandos de la aplicación.
Comentarios
Una aplicación de instancia única provoca el evento StartupNextInstance cuando se intenta reiniciar una aplicación que ya está
activa. Cuando una aplicación de instancia única se inicia por primera vez, provoca el evento Startup. Para obtener más
información, vea My.Application.Startup (Evento) y Cómo: Especificar el comportamiento de las instancias para una aplicación.
Este evento forma parte del modelo de la aplicación de Visual Basic. Para obtener más información, vea
Información general sobre el modelo de aplicaciones de Visual Basic.
Este evento se produce en el subproceso principal de la aplicación junto con los otros eventos de la interfaz de usuario. Esto
permite al controlador de eventos tener acceso directamente a la interfaz de usuario de la aplicación. Sin embargo, si la
aplicación está ocupada con otro evento de la interfaz de usuario al provocar el evento, éste no se puede procesar hasta que el
otro controlador de eventos finalice o llame al método My.Application.DoEvents (Método).
Nota
El evento StartupNextInstance sólo se provoca en aplicaciones de instancia única. Para habilitar el comportamiento de inst
ancia única en una aplicación, debe activar la casilla de verificación Convertir aplicación de instancia única en el Diseñad
or de proyectos. Para obtener más información, vea
Cómo: Especificar el comportamiento de las instancias para una aplicación.

Debe utilizar la propiedad CommandLine del parámetro e para tener acceso a los argumentos en los intentos siguientes de
iniciar una aplicación de instancia única. My.Application.CommandLineArgs (Propiedad) proporciona los argumentos que se
utilizan para iniciar la primera instancia de una aplicación de instancia única.
El código del controlador de eventos StartupNextInstance se almacena en el archivo ApplicationEvents.vb, que está oculto de
manera predeterminada.
Para tener acceso a la ventana del editor de código para los eventos de aplicación
1. Con un proyecto seleccionado en el Explorador de soluciones, en el menú Proyecto haga clic en Propiedades.
2. Haga clic en la ficha Aplicación.
3. Haga clic en el botón Ver eventos de aplicaciones para abrir el editor de código.
Para obtener más información, vea Cómo: Controlar eventos de aplicaciones (Visual Basic).
Tareas
En la tabla siguiente se muestran ejemplos de tareas en las que interviene el evento My.Application.StartupNextInstance.
Para Vea
Utilizar los eventos proporcionados por el modelo de la aplicac Cómo: Ejecutar código cuando se inicia o se cierra la aplicación
ión de Visual Basic para ejecutar código

Comprobar los argumentos de la línea de comandos de la pri My.Application.CommandLineArgs (Propiedad)


mera instancia de la aplicación
Ejemplo
Este ejemplo utiliza el parámetro e del controlador de eventos StartupNextInstance para examinar los argumentos de la
línea de comandos de la aplicación. Si se encuentra un argumento que comienza con /input=, se muestra el resto de ese
argumento.
VB
Private Sub MyApplication_StartupNextInstance( _
ByVal sender As Object, _
ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupNextInstanceEventArgs _
) Handles Me.StartupNextInstance
Dim inputArgument As String = "/input="
Dim inputName As String = ""

For Each s As String In e.CommandLine


If s.ToLower.StartsWith(inputArgument) Then
inputName = s.Remove(0, inputArgument.Length)
End If
Next

If inputName = "" Then


MsgBox("No input name")
Else
MsgBox("Input name: " & inputName)
End If
End Sub

Debe escribir el código para los eventos de aplicaciones en la ventana del editor de código. Para tener acceso a esta ventana,
siga las instrucciones de la sección Comentarios de este tema. Para obtener más información, vea
Cómo: Controlar eventos de aplicaciones (Visual Basic).
Requisitos
Espacio de nombres: Microsoft.VisualBasic.ApplicationServices
Clase: WindowsFormsApplicationBase
Ensamblado:Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases No

Aplicación de consola No

Biblioteca de controles de Windows No

Biblioteca de controles Web No

Servicio de Windows No
Sitio Web No
Permisos
No se requiere ningún permiso.
Vea también
Tareas
Cómo: Controlar eventos de aplicaciones (Visual Basic)
Cómo: Especificar el comportamiento de las instancias para una aplicación
Cómo: Especificar el comportamiento de las instancias para una aplicación
Referencia
My.Application (Objeto)
My.Application.Startup (Evento)
My.Application.CommandLineArgs (Propiedad)
StartupEventArgs
CommandLine
Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.StartupNextInstance
Conceptos
Información general sobre el modelo de aplicaciones de Visual Basic
Referencia del lenguaje Visual Basic

My.Application.UICulture (Propiedad)
Obtiene la referencia cultural que utiliza el subproceso actual para recuperar los recursos específicos de la referencia cultural.

' Usage
Dim value As System.Globalization.CultureInfo = My.Application.UICulture
' Declaration
Public ReadOnly Property UICulture As System.Globalization.CultureInfo

Valor devuelto
Devuelve un objeto CultureInfo que representa la referencia cultural que utiliza el subproceso actual para recuperar los
recursos específicos de la referencia cultural.
Comentarios
La propiedad My.Application.CurrentUICulture obtiene el objeto CultureInfo que utiliza el subproceso actual para
recuperar los recursos específicos de la referencia cultural. Este objeto es idéntico al devuelto por la propiedad
CurrentUICulture. La propiedad CurrentUICulture determina la referencia cultural utilizada por el Administrador de recursos
y el objeto My.Resources, información necesaria para buscar recursos específicos de la referencia cultural en tiempo de
ejecución.
Para cambiar la referencia cultural, puede utilizar el My.Application.ChangeUICulture (Método) o asignar un objeto
CultureInfo diferente a la propiedad CurrentUICulture.
La configuración de CurrentCulture es diferente de la configuración de idioma. Sólo contiene datos relacionados con la
configuración estándar para una región geográfica.
Utilice la propiedad My.Application.CurrentCulture para obtener la referencia cultural utilizada por el subproceso actual
para manipular cadenas de caracteres y aplicar formato a las cadenas.
Ejemplo
Este ejemplo utiliza la propiedad My.Application.CurrentCulture para almacenar en memoria caché la referencia cultural
actual, antes de cambiarla con el My.Application.ChangeUICulture (Método). El método My.Application.ChangeUICulture
establece la referencia cultural que utiliza el My.Resources (Objeto) para recuperar los recursos.
VB
Sub ShowLocalizedMessage()
Dim culture As String = My.Application.UICulture.Name
My.Application.ChangeUICulture("fr-FR")
MsgBox(My.Resources.Message)
My.Application.ChangeUICulture(culture)
End Sub

Para que funcione este ejemplo, su aplicación debe tener una cadena llamada Message en su archivo de recursos, y la
aplicación debería tener la versión de referencia cultural francesa de ese archivo de recursos, Resources.fr-FR.resx. Para
obtener más información, vea Cómo: Agregar o quitar recursos.
Si la aplicación no tiene la versión de referencia cultural francesa de ese archivo de recursos, el objeto My.Resource recupera
el recurso del archivo de recursos de referencia cultural predeterminada.
Requisitos
Espacio de nombres: Microsoft.VisualBasic.ApplicationServices
Clase: WindowsFormsApplicationBase, ApplicationBase
Ensamblado:Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí
Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web No
Permisos
No se requiere ningún permiso.
Vea también
Tareas
Cómo: Recuperar recursos localizados en Visual Basic
Referencia
My.Application (Objeto)
My.Application.ChangeUICulture (Método)
My.Application.Culture (Propiedad)
System.Globalization.CultureInfo
CurrentUICulture
Microsoft.VisualBasic.ApplicationServices.ApplicationBase.UICulture
Referencia del lenguaje Visual Basic

My.Application.UnhandledException (Evento)
Aparece cuando la aplicación encuentra una excepción no controlada.

' Usage
Public Sub Me_UnhandledException( _
ByVal sender As Object, _
ByVal e As UnhandledExceptionEventArgs _
) Handles Me.UnhandledException
End Sub
' Declaration
Public Event UnhandledException( _
ByVal sender As Object, _
ByVal e As UnhandledExceptionEventArgs _
)

Parámetros
sender
El Object que provocó el evento.
e
Un objeto UnhandledExceptionEventArgs que contiene la excepción no controlada y la información adicional.
Comentarios
Una aplicación provoca el evento UnhandledException cuando encuentra una excepción no controlada. Este evento forma
parte del modelo de aplicaciones de Visual Basic. Para obtener más información, vea
Información general sobre el modelo de aplicaciones de Visual Basic.
Puede utilizar la propiedad Exception del parámetro e para tener acceso a la excepción no controlada que produjo este evento.
Puede utilizar la propiedad ExitApplication del parámetro e para controlar si sale la aplicación. De manera predeterminada,
ExitApplication es True, por lo que la aplicación sale después de finalizar el controlador de eventos UnhandledException.
Puede establecer el valor en True del evento UnhandledException para mantener la aplicación en ejecución y hacerla volver
a un estado de espera.
El código de este controlador de eventos UnhandledException se almacena en el archivo ApplicationEvents.vb, que está
oculto de manera predeterminada.
Para tener acceso a la ventana del Editor de código para los eventos de aplicación:
1. Con un proyecto seleccionado en el Explorador de soluciones, en el menú Proyecto haga clic en Propiedades.
2. Haga clic en la ficha Aplicación.
3. Haga clic en el botón Ver eventos de aplicaciones para abrir el Editor de código.
Para obtener más información, vea Cómo: Controlar eventos de aplicaciones (Visual Basic).
Nota
El compilador de Visual Basic impide que las aplicaciones generadas para depuración provoquen este evento, con el fin de pe
rmitir que el depurador controle las excepciones no controladas. Esto significa que, si está probando su aplicación ejecutándo
la en el depurador del entorno de desarrollo integrado (IDE) de Visual Studio, no se llamará a su controlador de eventos Unh
andledException. Para obtener más información sobre cómo generar aplicaciones para depuración, vea
/debug (Visual Basic).

Tareas
La tabla siguiente muestra ejemplos de tareas que implican al evento My.Application.UnhandledException.
Para Vea
Utilizar los eventos proporcionados por el Modelo de aplicacio Cómo: Ejecutar código cuando se inicia o se cierra la aplicación
nes de Visual Basic para ejecutar código

Registrar las excepciones no controladas Cómo: Registrar excepciones en Visual Basic


Ejemplo
Este ejemplo utiliza el evento My.Application.UnhandledException para registrar cualquier excepción no controlada.
VB
Private Sub MyApplication_UnhandledException( _
ByVal sender As Object, _
ByVal e As Microsoft.VisualBasic.ApplicationServices.UnhandledExceptionEventArgs _
) Handles Me.UnhandledException
My.Application.Log.WriteException(e.Exception, _
TraceEventType.Critical, _
"Unhandled Exception.")
End Sub

Debe escribir el código en la ventana del Editor de código para los eventos de aplicaciones. Para tener acceso a esta ventana,
siga las instrucciones de la sección Comentarios de este tema. Para obtener más información, vea
Cómo: Controlar eventos de aplicaciones (Visual Basic).
Puesto que el evento UnhandledException no se produce cuando se asocia un depurador a la aplicación, es necesario
ejecutar este ejemplo fuera del Entorno de desarrollo integrado (IDE) de Visual Studio.
Requisitos
Espacio de nombres: Microsoft.VisualBasic.ApplicationServices
Clase: WindowsFormsApplicationBase
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases No

Aplicación de consola No

Biblioteca de controles de Windows No

Biblioteca de controles Web No

Servicio de Windows No

Sitio Web No
Permisos
Los permisos siguientes pueden ser necesarios:
Permiso Descripción
SecurityPermission Controla la capacidad de agregar un controlador de eventos para este evento. Enumeración asociada:
System.Security.Permissions.SecurityPermissionFlag.ControlAppDomain.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Referencia
My.Application (Objeto)
Microsoft.VisualBasic.ApplicationServices.UnhandledExceptionEventArgs
Conceptos
Información general sobre el modelo de aplicaciones de Visual Basic
Referencia del lenguaje Visual Basic

My.Application.Info (Objeto)
Proporciona propiedades para obtener información sobre la aplicación, como el número de versión, descripción, ensamblados
cargados, etc.
Comentarios
Algunas de las propiedades expuestas por el objeto My.Application.Info devuelven la información de ensamblado de la
aplicación. Para establecer la información en el ensamblado de la aplicación, debe utilizar el cuadro de diálogo Información
de ensamblado, al que se puede tener acceso desde el panel Aplicación del Diseñador de proyectos. Para obtener más
información, vea Cómo: Especificar información de ensamblado.
El objeto My.Application.Info proporciona una funcionalidad similar a la de la clase FileVersionInfo pero se incluye en el
ámbito para dar acceso rápido a las propiedades más comunes.
Otras propiedades, como LoadedAssemblies, proporcionan acceso al estado actual de la aplicación.
Ejemplo
Este ejemplo utiliza la propiedad My.Application.Info.Version para mostrar la versión de la aplicación.
VB
MsgBox("Application version: " & My.Application.Info.Version.ToString)

Requisitos
Espacio de nombres: Microsoft.VisualBasic.ApplicationServices
Clase: AssemblyInfo
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Vea también
Referencia
My.Application.Info (Miembros del objeto)
My.Application (Objeto)
Microsoft.VisualBasic.ApplicationServices.AssemblyInfo
FileVersionInfo
Referencia del lenguaje Visual Basic

My.Application.Info (Miembros del objeto)


El objeto My.Application.Info (Objeto) proporciona propiedades para obtener información sobre la aplicación, como el número
de versión, descripción, ensamblados cargados, etc.
Propiedades
Propiedad Descripción
AssemblyName Obtiene el nombre, sin la extensión, del archivo de ensamblado para la aplicación.

CompanyName Obtiene el nombre de compañía asociado a la aplicación.

Copyright Obtiene el aviso de copyright asociado a la aplicación.

Description Obtiene la descripción asociada a la aplicación.

DirectoryPath Obtiene el directorio donde está almacenada la aplicación.

LoadedAssemblies Obtiene una colección de todos los ensamblados cargados por la aplicación.

ProductName Obtiene el nombre de producto asociado a la aplicación.

StackTrace Obtiene la información del seguimiento de la pila actual.

Title Obtiene el título asociado a la aplicación.

Trademark Obtiene el aviso de marca comercial asociado a la aplicación.

Version Obtiene el número de versión de la aplicación.

WorkingSet Obtiene la cantidad de memoria física asignada al contexto de proceso.


Vea también
Referencia
My.Application.Info (Objeto)
Referencia del lenguaje Visual Basic

My.Application.Info.AssemblyName (Propiedad)
Obtiene el nombre, sin la extensión, del archivo de ensamblado para la aplicación.

' Usage
Dim value As String = My.Application.Info.AssemblyName
' Declaration
Public ReadOnly Property AssemblyName As String

Valor devuelto
Objeto String que contiene el nombre de archivo.
Comentarios
La propiedad My.Application.Info.AssemblyName obtiene el nombre del archivo que contiene el manifiesto.
Ejemplo
En este ejemplo se utiliza la propiedad My.Application.Info.AssemblyName para mostrar el nombre de la aplicación.
VB
MsgBox("Application assembly name: " & My.Application.Info.AssemblyName)

Requisitos
Espacio de nombres: Microsoft.VisualBasic.ApplicationServices
Clase: AssemblyInfo
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web No
Permisos
El permiso siguiente puede ser necesario:
Permiso Descripción
FileIOPermission Controla la capacidad de tener acceso a archivos y carpetas. Enumeración asociada: Unrestricted.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Referencia
My.Application.Info (Objeto)
AssemblyName
Referencia del lenguaje Visual Basic

My.Application.Info.CompanyName (Propiedad)
Obtiene el nombre de compañía asociado a la aplicación.

' Usage
Dim value As String = My.Application.Info.CompanyName
' Declaration
Public ReadOnly Property CompanyName As String

Valor devuelto
String que contiene el nombre de la compañía asociado a la aplicación.
Excepciones
La siguiente condición puede provocar una excepción:
El ensamblado no tiene AssemblyCompanyAttribute (InvalidOperationException).
Comentarios
La propiedad My.Application.Info.CompanyName obtiene el nombre de compañía asociado a la aplicación.
Puede cambiar el nombre de compañía cambiando el valor de Compañía en el cuadro de diálogo Información de
ensamblado, al que se tiene acceso desde el panel Aplicación del Diseñador de proyectos. Para obtener más información,
vea Cómo: Especificar información de ensamblado.
Ejemplo
Este ejemplo utiliza la propiedad My.Application.Info.CompanyName para mostrar el nombre de compañía asociado a la
aplicación.
VB
MsgBox("Application created by: " & My.Application.Info.CompanyName)

Requisitos
Espacio de nombres: Microsoft.VisualBasic.ApplicationServices
Clase: AssemblyInfo
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web No
Permisos
No se requiere ningún permiso.
Vea también
Tareas
Cómo: Especificar información de ensamblado
Referencia
My.Application.Info (Objeto)
Microsoft.VisualBasic.ApplicationServices.AssemblyInfo.CompanyName
Referencia del lenguaje Visual Basic

My.Application.Info.Copyright (Propiedad)
Obtiene el aviso de derechos de autor asociado a la aplicación.

' Usage
Dim value As String = My.Application.Info.Copyright
' Declaration
Public ReadOnly Property Copyright As String

Valor devuelto
Objeto String que contiene el aviso de derechos de autor asociado a la aplicación.
Excepciones
La siguiente condición puede provocar una excepción:
El ensamblado no tiene un atributo AssemblyCopyrightAttribute (InvalidOperationException).
Comentarios
La propiedad My.Application.Info.CompanyName obtiene el aviso de derechos de autor asociado a la aplicación.
El aviso de derechos de autor se puede modificar cambiando el valor de Copyright en el cuadro de diálogo Información de
ensamblado, al que se tiene acceso desde el panel Aplicación del Diseñador de proyectos. Para obtener más información,
vea Cómo: Especificar información de ensamblado.
Ejemplo
En este ejemplo se utiliza la propiedad My.Application.Info.CompanyName para mostrar el nombre de la compañía
asociado a la aplicación.
VB
MsgBox("Application copyright: " & My.Application.Info.Copyright)

Requisitos
Espacio de nombres: Microsoft.VisualBasic.ApplicationServices
Clase: AssemblyInfo
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web No
Permisos
No se requiere ningún permiso.
Vea también
Tareas
Cómo: Especificar información de ensamblado
Referencia
My.Application.Info (Objeto)
Microsoft.VisualBasic.ApplicationServices.AssemblyInfo.Copyright
Referencia del lenguaje Visual Basic

My.Application.Info.Description (Propiedad)
Obtiene la descripción asociada a la aplicación.

' Usage
Dim value As String = My.Application.Info.Description
' Declaration
Public ReadOnly Property Description As String

Valor devuelto
String que contiene la descripción asociada a la aplicación.
Excepciones
La siguiente condición puede provocar una excepción:
El ensamblado no tiene AssemblyDescriptionAttribute (InvalidOperationException).
Comentarios
La propiedad My.Application.Info.Description obtiene la descripción asociada a la aplicación.
Puede cambiar la descripción cambiando el valor de Descripción en el cuadro de diálogo Información de ensamblado, al
que se tiene acceso desde el panel Aplicación del Diseñador de proyectos. Para obtener más información, vea
Cómo: Especificar información de ensamblado.
Ejemplo
Este ejemplo utiliza la propiedad My.Application.Info.Description para mostrar la descripción asociada a la aplicación.
VB
MsgBox("Application description: " & My.Application.Info.Description)

Requisitos
Espacio de nombres: Microsoft.VisualBasic.ApplicationServices
Clase: AssemblyInfo
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web No
Permisos
No se requiere ningún permiso.
Vea también
Tareas
Cómo: Especificar información de ensamblado
Referencia
My.Application.Info (Objeto)
Microsoft.VisualBasic.ApplicationServices.AssemblyInfo.Description
Referencia del lenguaje Visual Basic

My.Application.Info.DirectoryPath (Propiedad)
Obtiene el directorio donde está almacenada la aplicación.

' Usage
Dim value As String = My.Application.Info.DirectoryPath
' Declaration
Public ReadOnly Property DirectoryPath As String

Valor devuelto
String que contiene el directorio donde está almacenada la aplicación.
Comentarios
La propiedad My.Application.Info.DirectoryPath obtiene el directorio donde está almacenada la aplicación.
Ejemplo
Este ejemplo utiliza la propiedad My.Application.Info.DirectoryPath para mostrar la ruta de acceso del directorio donde
está almacenada la aplicación.
VB
MsgBox("Application directory path: " & My.Application.Info.DirectoryPath)

Requisitos
Espacio de nombres: Microsoft.VisualBasic.ApplicationServices
Clase: AssemblyInfo
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web No
Permisos
El permiso siguiente puede ser necesario:
Permiso Descripción
FileIOPermission Controla la capacidad de tener acceso a archivos y carpetas. Enumeración asociada: Unrestricted.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Referencia
My.Application.Info (Objeto)
Microsoft.VisualBasic.ApplicationServices.AssemblyInfo.DirectoryPath
Referencia del lenguaje Visual Basic

My.Application.Info.LoadedAssemblies (Propiedad)
Obtiene una colección de todos los ensamblados cargados por la aplicación.

' Usage
Dim value As System.Collections.ObjectModel.ReadOnlyCollection(Of System.Reflection.Assembl
y) = My.Application.Info.LoadedAssemblies
' Declaration
Public ReadOnly Property LoadedAssemblies As System.Collections.ObjectModel.ReadOnlyCollect
ion(Of System.Reflection.Assembly)

Valor devuelto
Una colección ReadOnlyCollection de Assembly que contiene todos los ensamblados cargados por la aplicación.
Excepciones
La siguiente condición puede provocar una excepción:
El dominio de aplicación no está cargado (AppDomainUnloadedException).
Comentarios
La propiedad My.Application.Info.LoadedAssemblies es similar al método GetAssemblies.
Ejemplo
Este ejemplo utiliza la propiedad My.Application.Info.LoadedAssemblies para mostrar los ensamblados cargados por la
aplicación.
VB
ListBox1.DataSource = My.Application.Info.LoadedAssemblies

Este ejemplo requiere que su aplicación de Windows Forms tenga un control ListBox denominado ListBox1.
Requisitos
Espacio de nombres: Microsoft.VisualBasic.ApplicationServices
Clase: AssemblyInfo
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web No
Permisos
No se requiere ningún permiso.
Vea también
Referencia
My.Application.Info (Objeto)
ReadOnlyCollection
System.Reflection.Assembly
Microsoft.VisualBasic.ApplicationServices.AssemblyInfo.LoadedAssemblies
Referencia del lenguaje Visual Basic

My.Application.Info.ProductName (Propiedad)
Obtiene el nombre de producto asociado a la aplicación.

' Usage
Dim value As String = My.Application.Info.ProductName
' Declaration
Public ReadOnly Property ProductName As String

Valor devuelto
Objeto String que contiene el nombre de producto asociado a la aplicación.
Excepciones
La siguiente condición puede provocar una excepción:
El ensamblado no tiene un atributo AssemblyProductAttribute (InvalidOperationException).
Comentarios
La propiedad My.Application.Info.ProductName obtiene el nombre de producto asociado a la aplicación.
El nombre de producto se puede modificar cambiando el valor de la opción Producto del cuadro de diálogo Información de
ensamblado, al que se tiene acceso desde el panel Aplicación del Diseñador de proyectos. Para obtener más información,
vea Cómo: Especificar información de ensamblado.
Ejemplo
En este ejemplo se utiliza la propiedad My.Application.Info.ProductName para mostrar el nombre de producto asociado a
la aplicación.
VB
MsgBox("Application product name: " & My.Application.Info.ProductName)

Requisitos
Espacio de nombres: Microsoft.VisualBasic.ApplicationServices
Clase: AssemblyInfo
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web No
Permisos
No se requiere ningún permiso.
Vea también
Tareas
Cómo: Especificar información de ensamblado
Referencia
My.Application.Info (Objeto)
Microsoft.VisualBasic.ApplicationServices.AssemblyInfo.ProductName
Referencia del lenguaje Visual Basic

My.Application.Info.StackTrace (Propiedad)
Obtiene la información del seguimiento de la pila actual.

' Usage
Dim value As String = My.Application.Info.StackTrace
' Declaration
Public ReadOnly Property StackTrace As String

Valor devuelto
String que contiene la información de seguimiento de la pila actual. El valor devuelto puede ser Empty.
Excepciones
La siguiente condición puede provocar una excepción:
La información solicitada de seguimiento de la pila está fuera del intervalo (ArgumentOutOfRangeException).
Comentarios
La propiedad My.Application.Info.StackTrace enumera llamadas a métodos en orden cronológico inverso, es decir, describe
primero la llamada a método más reciente e incluye en una línea independiente de la lista cada llamada a método de la pila.
Sin embargo, la propiedad My.Application.Info.StackTrace podría no informar de tantas llamadas a método como se
espera, debido a transformaciones del código que se producen durante la optimización.
Normalmente, la información de seguimiento de la pila se utiliza para depurar aplicaciones.
La información de seguimiento de la pila de cada llamada a método tiene el formato siguiente:
"en FullClassName.MethodName(MethodParams) en FileName: línea LineNumber "
El literal "en" va precedido de tres espacios y, si los símbolos de depuración no están disponibles, se omiten los literales "en" y
":línea". Los marcadores de posición FullClassName, MethodName, MethodParams, FileName y LineNumber se reemplazan
con valores reales, como se explica a continuación:
Parte Descripción
FullClas Nombre completo de la clase, incluido el espacio de nombres.
sName

Method Nombre del método.


Name

Method Lista de pares de tipo de parámetro/nombre. Cada par se separa con una coma (,). Esta información se omite si Metho
Params dName toma cero parámetros.

FileNa El nombre del archivo de código fuente donde se declara el método MethodName. Esta información se omite si los sí
me mbolos de depuración no están disponibles.

LineNu Número de la línea de FileName que contiene el código fuente de MethodName para la instrucción que está en la pil
mber a de llamadas. Esta información se omite si los símbolos de depuración no están disponibles.

La propiedad My.Applicaiton.Info.StackTrace ofrece una funcionalidad similar a la de la propiedad StackTrace.


Ejemplo
Este ejemplo utiliza la propiedad My.Application.Info.StackTrace para mostrar el seguimiento de la pila de la aplicación del
punto en el que se está ejecutando el código.
VB
MsgBox("Stack trace: " & My.Application.Info.StackTrace)
Requisitos
Espacio de nombres: Microsoft.VisualBasic.ApplicationServices
Clase: AssemblyInfo
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web No
Permisos
El permiso siguiente puede ser necesario:
Permiso Descripción
FileIOPermission Controla la capacidad de tener acceso a la información contenida en las rutas de acceso de archivo. Enumera
ción asociada: PathDiscovery.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Referencia
My.Application.Info (Objeto)
StackTrace
Microsoft.VisualBasic.ApplicationServices.AssemblyInfo.StackTrace
Referencia del lenguaje Visual Basic

My.Application.Info.Title (Propiedad)
Obtiene el título asociado a la aplicación.

' Usage
Dim value As String = My.Application.Info.Title
' Declaration
Public ReadOnly Property Title As String

Valor devuelto
String que contiene el AssemblyTitleAttribute asociado a la aplicación.
Excepciones
La siguiente condición puede provocar una excepción:
El ensamblado no tiene AssemblyTitleAttribute (InvalidOperationException).
Comentarios
La propiedad My.Application.Info.Title obtiene el título asociado con la aplicación.
Puede cambiar el título cambiando el valor de Título en el cuadro de diálogo Información de ensamblado, al que se tiene
acceso desde el panel Aplicación del Diseñador de proyectos. Para obtener más información, vea
Cómo: Especificar información de ensamblado.
Ejemplo
Este ejemplo utiliza la propiedad My.Application.Info.Title para mostrar el título asociado a la aplicación.
VB
MsgBox("Application title: " & My.Application.Info.Title)

Requisitos
Espacio de nombres: Microsoft.VisualBasic.ApplicationServices
Clase: AssemblyInfo
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web No
Permisos
No se requiere ningún permiso.
Vea también
Tareas
Cómo: Especificar información de ensamblado
Referencia
My.Application.Info (Objeto)
Microsoft.VisualBasic.ApplicationServices.AssemblyInfo.Title
Referencia del lenguaje Visual Basic

My.Application.Info.Trademark (Propiedad)
Obtiene el aviso de marca comercial asociado a la aplicación.

' Usage
Dim value As String = My.Application.Info.Trademark
' Declaration
Public ReadOnly Property Trademark As String

Valor devuelto
String que contiene el aviso de marca comercial asociado a la aplicación.
Excepciones
La siguiente condición puede provocar una excepción:
El ensamblado no tiene AssemblyTrademarkAttribute (InvalidOperationException).
Comentarios
La propiedad My.Application.Info.Trademark obtiene el aviso de marca comercial asociado a la aplicación.
Puede cambiar el aviso de marca comercial cambiando el valor de Trademark en el cuadro de diálogo Información de
ensamblado, al que se tiene acceso desde el panel Aplicación del Diseñador de proyectos. Para obtener más información,
vea Cómo: Especificar información de ensamblado.
Ejemplo
Este ejemplo utiliza la propiedad My.Application.Info.Trademark para mostrar la información de marca comercial asociada
a la aplicación.
VB
MsgBox("Application trademark: " & My.Application.Info.Trademark)

Requisitos
Espacio de nombres: Microsoft.VisualBasic.ApplicationServices
Clase: AssemblyInfo
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web No
Permisos
No se requiere ningún permiso.
Vea también
Tareas
Cómo: Especificar información de ensamblado
Referencia
My.Application.Info (Objeto)
Microsoft.VisualBasic.ApplicationServices.AssemblyInfo.Trademark
Referencia del lenguaje Visual Basic

My.Application.Info.Version (Propiedad)
Obtiene el número de versión de la aplicación.

' Usage
Dim value As System.Version = My.Application.Info.Version
' Declaration
Public ReadOnly Property Version As System.Version

Valor devuelto
Objeto Version que contiene el número de versión de la aplicación.
Excepciones
La siguiente condición puede provocar una excepción:
La aplicación no tiene los permisos suficientes para obtener acceso a la versión de ensamblado (SecurityException).
Comentarios
La propiedad My.Application.Info.Version obtiene un objeto Version que contiene el número de versión de la aplicación.
Puede utilizar las propiedades Major, Minor, Build y Revision del objeto Version para tener acceso a información de versión
concreta sobre la aplicación.
Las aplicaciones implementadas con ClickOnce deberían utilizar la propiedad CurrentVersion de
My.Application.Deployment (Propiedad).
Ejemplo
En este ejemplo se utiliza la propiedad My.Application.Info.Version para mostrar la versión de la aplicación.
VB
MsgBox("Application version: " & My.Application.Info.Version.ToString)

Requisitos
Espacio de nombres: Microsoft.VisualBasic.ApplicationServices
Clase: AssemblyInfo
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web No
Permisos
El permiso siguiente puede ser necesario:
Permiso Descripción
FileIOPermission Controla la capacidad de tener acceso a archivos y carpetas. Enumeración asociada: Unrestricted.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Referencia
My.Application.Info (Objeto)
My.Application.Deployment (Propiedad)
CurrentVersion
System.Version
Microsoft.VisualBasic.ApplicationServices.AssemblyInfo.Version
Referencia del lenguaje Visual Basic

My.Application.Info.WorkingSet (Propiedad)
Obtiene la cantidad de memoria física asignada al contexto de proceso.

' Usage
Dim value As Long = My.Application.Info.WorkingSet
' Declaration
Public ReadOnly Property WorkingSet As Long

Valor devuelto
Valor Long que contiene el número de bytes de memoria física asignada al contexto de proceso.
Excepciones
La siguiente condición puede provocar una excepción:
Hay una situación de confianza parcial en la que el usuario no dispone de los permisos necesarios (SecurityException).
Comentarios
La propiedad My.Application.Info.WorkingSet tiene el mismo comportamiento que la propiedad WorkingSet.
Nota
Esta propiedad siempre devuelve cero para Windows 98 y Windows Millennium Edition.

Ejemplo
Este ejemplo utiliza la propiedad My.Application.Info.WorkingSet para mostrar el número de bytes de memoria física
asignados a la aplicación.
VB
MsgBox("Application working set: " & My.Application.Info.WorkingSet)

Requisitos
Espacio de nombres: Microsoft.VisualBasic.ApplicationServices
Clase: AssemblyInfo
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web No
Permisos
El permiso siguiente puede ser necesario:
Permiso Descripción
EnvironmentPermission Controla la capacidad de tener acceso a todas las variables de entorno. Enumeración asociada:
Unrestricted.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Referencia
My.Application.Info (Objeto)
WorkingSet
Microsoft.VisualBasic.ApplicationServices.AssemblyInfo.WorkingSet
Referencia del lenguaje Visual Basic

My.Application.Log (Objeto)
Proporciona una propiedad y métodos para escribir información de eventos y de excepciones en los agentes de escucha de
registro de la aplicación.
Comentarios
El objeto My.Application.Log proporciona un punto de entrada sencillo desde el que obtener acceso a los servicios de
registro de .NET Framework. Los métodos WriteEntry y WriteException escriben mensajes en los agentes de escucha de
registro de la aplicación. El archivo de configuración de la aplicación se puede utilizar para configurar los agentes de escucha.
Para obtener más información, vea Tutorial: Cambiar el lugar donde My.Application.Log escribe información y
Trabajar con registros de aplicación en Visual Basic.
El objeto My.Application.Log sólo está disponible para las aplicaciones cliente. Para las aplicaciones Web, utilice My.Log.
Para obtener más información, vea My.Log (Objeto).
Tareas
La tabla siguiente muestra ejemplos de tareas que implican al objeto My.Application.Log.
Para Vea
Escribir información de eventos en los agente Cómo: Escribir mensajes de registro
s de escucha del registro de la aplicación.

Escribir información de excepciones en los ag Cómo: Registrar excepciones en Visual Basic


entes de escucha del registro de la aplicación.

Determinar dónde escribe la información My Tutorial: Determinar el lugar en el que My.Application.Log escribe la información
.Application.Log.
Ejemplo
Este ejemplo muestra cómo utilizar el método My.Application.Log.WriteEntry para registrar información de seguimiento.
Para obtener más información, vea Cómo: Escribir mensajes de registro.
VB
Public Sub TracingTest(ByVal fileName As String)
My.Application.Log.WriteEntry( _
"Entering TracingTest with argument " & _
fileName & ".")
' Code to trace goes here.
My.Application.Log.WriteEntry( _
"Exiting TracingTest with argument " & _
fileName & ".")
End Sub

Requisitos
Espacio de nombres: Microsoft.VisualBasic.Logging
Clase: Log
Ensamblado:Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí
Biblioteca de controles de Windows Sí

Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web No
Vea también
Referencia
My.Application.Log (Miembros del objeto)
My.Application (Objeto)
Referencia del lenguaje Visual Basic

My.Application.Log (Miembros del objeto)


My.Application.Log (Objeto) proporciona una propiedad y métodos para escribir información de eventos y de excepciones en
los agentes de escucha de registro de la aplicación.
Propiedades
Propiedad Descripción
TraceSource Llega al objeto TraceSource subyacente al objeto My.Application.Log.
Éste es un miembro avanzado; no aparece en IntelliSense a menos que seleccione la ficha Todas.
Métodos
Método Descripción
WriteEntry Escribe un mensaje en los agentes de escucha del registro de la aplicación.

WriteException Escribe información de excepción en los agentes de escucha del registro de la aplicación.
Vea también
Referencia
My.Application.Log (Objeto)
Referencia del lenguaje Visual Basic

DefaultFileLogWriter (Propiedad, My.Application.Log y


My.Log)
Obtiene el objeto FileLogTraceListener que utiliza el objeto Log.

' Usage
Dim value As Logging.FileLogTraceListener = My.Application.Log.DefaultFileLogWriter
' Web usage
Dim value As Logging.FileLogTraceListener = My.Log.DefaultFileLogWriter
' Declaration
Public ReadOnly Property DefaultFileLogWriter As Logging.FileLogTraceListener

Valor devuelto
Devuelve el objeto FileLogTraceListener que utiliza el objeto Log.
Comentarios
Puede utilizar esta propiedad para determinar la configuración actual del objeto FileLogTraceListener del objeto Log.
En las aplicaciones cliente, el objeto Log está disponible a través del objeto My.Application.Log. En las aplicaciones Web, el
objeto Log está disponible a través del objeto My.Log.
Requisitos
Espacio de nombres: Microsoft.VisualBasic.Logging
Clase: Log
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Permisos
El permiso siguiente puede ser necesario:
Permiso Descripción
FileIOPermission Controla la capacidad de obtener acceso a archivos y carpetas. Enumeración asociada: Unrestricted.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Tareas
Solución de problemas: Agentes de escucha de registro
Referencia
My.Application.Log (Objeto)
My.Log (Objeto)
FileLogTraceListener
Referencia del lenguaje Visual Basic

TraceSource (Propiedad, My.Application.Log y My.Log)


Llega al objeto TraceSource subyacente al objeto Log.

' Usage
Dim value As System.Diagnostics.TraceSource = My.Application.Log.TraceSource
' Web usage
Dim value As System.Diagnostics.TraceSource = My.Log.TraceSource
' Declaration
Public ReadOnly Property TraceSource As System.Diagnostics.TraceSource

Valor devuelto
Devuelve el objeto TraceSource subyacente al objeto Log.
Comentarios
Puede utilizar esta propiedad para determinar la configuración actual del objeto Log.
En aplicaciones cliente, el objeto Log está disponible a través del objeto My.Application.Log. En aplicaciones Web, el objeto
Log está disponible a través del objeto My.Log.
Éste es un miembro avanzado; no aparece en IntelliSense a menos que seleccione la ficha Todas.
Tareas
En la tabla siguiente se enumera un ejemplo de una tarea en la que interviene la propiedad TraceSource.
Para Vea
Obtener información de cada uno de los agentes de escucha de registr Solución de problemas: Agentes de escucha de registro
o del objeto Log.
Requisitos
Espacio de nombres: Microsoft.VisualBasic.Logging
Clase: Log
Ensamblado:Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web Sí
Permisos
No se requiere ningún permiso.
Vea también
Tareas
Solución de problemas: Agentes de escucha de registro
Referencia
My.Application.Log (Objeto)
My.Log (Objeto)
System.Diagnostics.TraceSource
Microsoft.VisualBasic.Logging.Log.TraceSource
Referencia del lenguaje Visual Basic

WriteEntry (Método, My.Application.Log y My.Log)


Escribe un mensaje a los agentes de escucha del registro de la aplicación.

' Usage
My.Application.Log.WriteEntry(message)
My.Application.Log.WriteEntry(message ,severity)
My.Application.Log.WriteEntry(message ,severity ,id)
' Web usage
My.Log.WriteEntry(message)
My.Log.WriteEntry(message ,severity)
My.Log.WriteEntry(message ,severity ,id)
' Declaration
Public Sub WriteEntry( _
ByVal message As String _
)
' -or-
Public Sub WriteEntry( _
ByVal message As String, _
ByVal severity As System.Diagnostics.TraceEventType _
)
' -or-
Public Sub WriteEntry( _
ByVal message As String, _
ByVal severity As System.Diagnostics.TraceEventType, _
ByVal id As Integer _
)

Parámetros
message
Obligatorio. Mensaje que se va a registrar. Si message es igual a Nothing, se utiliza una cadena vacía.
severity
Tipo de mensaje. De forma predeterminada, TraceEventType.Information.
id
Identificador del mensaje, normalmente utilizado para la correlación. De manera predeterminada, está relacionado con
entryType, como se describe en la tabla.
Excepciones
Las siguientes condiciones provocan una excepción:
La excepción o el tipo de mensaje es Nothing (ArgumentNullException).
El tipo de mensaje no se corresponde con ninguno de los valores de la enumeración TraceEventType.
(InvalidEnumArgumentException).
Un código con confianza parcial llama al método, pero escribe en un agente de escucha del registro de eventos que
requiere plena confianza (SecurityException).
Comentarios
El método WriteEntry escribe un mensaje a los agentes de escucha del registro de eventos de la aplicación.
En aplicaciones cliente, el objeto Log está disponible a través del objeto My.Application.Log. En aplicaciones Web, el objeto
Log está disponible a través del objeto My.Log.
Para conocer qué agentes de escucha de registro reciben los mensajes del método WriteEntry, vea
Tutorial: Determinar el lugar en el que My.Application.Log escribe la información. Puede cambiar los agentes de escucha del
registro predeterminados. Para obtener más información, vea Trabajar con registros de aplicación en Visual Basic.
Para sobrecargas que no toman el argumento id, la tabla siguiente define el valor id que se escribe en el registro.
severity Valor id predeterminado
Information 0

Warning 1

Error 2

Critical 3

Start 4

Stop 5

Suspend 6

Resume 7

Verbose 8

Transfer 9
Tareas
La tabla siguiente muestra una lista de ejemplos de tareas en las que está implicado el método WriteEntry.
Para Vea
Escribir información de eventos en los agente Cómo: Escribir mensajes de registro
s de escucha del registro de la aplicación

Determinar dónde escribe Log la informació Tutorial: Determinar el lugar en el que My.Application.Log escribe la información
n
Ejemplo
Este ejemplo muestra cómo utilizar el método My.Application.Log.WriteEntry para registrar información de traza. Para
obtener más información, vea Cómo: Escribir mensajes de registro.
VB
Public Sub TracingTest(ByVal fileName As String)
My.Application.Log.WriteEntry( _
"Entering TracingTest with argument " & _
fileName & ".")
' Code to trace goes here.
My.Application.Log.WriteEntry( _
"Exiting TracingTest with argument " & _
fileName & ".")
End Sub

Este ejemplo de código sólo se puede ejecutar en una aplicación cliente. Cambie My.Application.Log.WriteEntry a
My.Log.WriteEntry para aplicaciones Web.
Requisitos
Espacio de nombres: Microsoft.VisualBasic.Logging
Clase: Log
Ensamblado:Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí
Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web Sí
Permisos
El permiso siguiente puede ser necesario:
Permiso Descripción
FileIOPermission Controla la capacidad de tener acceso a archivos y carpetas. Enumeración asociada: Unrestricted.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Tareas
Cómo: Escribir mensajes de registro
Tutorial: Determinar el lugar en el que My.Application.Log escribe la información
Referencia
My.Application.Log (Objeto)
My.Log (Objeto)
System.Diagnostics.TraceEventType
Microsoft.VisualBasic.Logging.Log.WriteEntry(System.String)
Conceptos
Trabajar con registros de aplicación en Visual Basic
Referencia del lenguaje Visual Basic

WriteException (Método, My.Application.Log y My.Log)


Escribe información de excepción en los agentes de escucha del registro de la aplicación.

' Usage
My.Application.Log.WriteException(ex)
My.Application.Log.WriteException(ex ,severity ,additionalInfo)
My.Application.Log.WriteException(ex ,severity ,additionalInfo ,id)
' Web usage
My.Log.WriteException(ex)
My.Log.WriteException(ex ,severity ,additionalInfo)
My.Log.WriteException(ex ,severity ,additionalInfo ,id)
' Declaration
Public Sub WriteException( _
ByVal ex As System.Exception _
)
' -or-
Public Sub WriteException( _
ByVal ex As System.Exception, _
ByVal severity As System.Diagnostics.TraceEventType, _
ByVal additionalInfo As String _
)
' -or-
Public Sub WriteException( _
ByVal ex As System.Exception, _
ByVal severity As System.Diagnostics.TraceEventType, _
ByVal additionalInfo As String, _
ByVal id As Integer _
)

Parámetros
ex
Obligatorio. Excepción que se va a registrar.
severity
Tipo de mensaje. De forma predeterminada, es Error.
additionalInfo
Cadena que se anexa al mensaje. De manera predeterminada, es una cadena vacía.
id
Identificador del mensaje que normalmente se utiliza para la correlación. De manera predeterminada, es relativo a entryType,
tal como se describe en la tabla de la sección Comentarios.
Excepciones
Las condiciones siguientes provocarán una excepción:
La excepción o el tipo de mensaje es Nothing (ArgumentNullException).
El tipo de mensaje no se corresponde con ninguno de los valores de la enumeración TraceEventType
(InvalidEnumArgumentException).
Código con confianza parcial que llama al método, pero escribe en un agente de escucha del registro de eventos que
requiere plena confianza (SecurityException).
Comentarios
El método WriteException escribe la información contenida en una excepción en los agentes de escucha del registro de
eventos de la aplicación.
En las aplicaciones cliente, el objeto Log está disponible a través del objeto My.Application.Log. En las aplicaciones Web, el
objeto Log está disponible a través del objeto My.Log.
Para saber qué agentes de escucha de registro reciben los mensajes del método WriteException, vea
Tutorial: Determinar el lugar en el que My.Application.Log escribe la información. Puede cambiar los agentes de escucha del
registro predeterminados. Para obtener más información, vea Trabajar con registros de aplicación en Visual Basic.
Para las sobrecargas que no toman el argumento id, en la tabla siguiente se define el identificador escrito en el registro.
severity id predeterminado
Information 0

Warning 1

Error 2

Critical 3

Start 4

Stop 5

Suspend 6

Resume 7

Verbose 8

Transfer 9
Tareas
En la tabla siguiente se muestran ejemplos de tareas en las que interviene el método WriteException.
Para Vea
Escribir información de excepción en los age Cómo: Registrar excepciones en Visual Basic
ntes de escucha del registro de eventos de la
aplicación.

Determinar dónde Log escribe información. Tutorial: Determinar el lugar en el que My.Application.Log escribe la información
Ejemplo
En este ejemplo se muestra cómo utilizar el método My.Application.Log.WriteException para registrar excepciones. Quite
los comentarios de las líneas Dim y MsgBox para producir una excepción NullReferenceException. Para obtener más
información, vea Cómo: Registrar excepciones en Visual Basic.
VB
Public Sub ExceptionLogTest(ByVal fileName As String)
Try
' Code that might generate an exception goes here.
' For example:
' Dim x As Object
' MsgBox(x.ToString)
Catch ex As Exception
My.Application.Log.WriteException(ex, _
TraceEventType.Error, _
"Exception in ExceptionLogTest " & _
"with argument " & fileName & ".")
End Try
End Sub
Este ejemplo de código sólo se puede ejecutar en una aplicación de cliente. Cambie My.Application.Log.WriteException a
My.Log.WriteException para las aplicaciones Web.
Requisitos
Espacio de nombres: Microsoft.VisualBasic.Logging
Clase: Log
Ensamblado:Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web Sí
Permisos
El permiso siguiente puede ser necesario:
Permiso Descripción
FileIOPermission Controla la capacidad de tener acceso a archivos y carpetas. Enumeración asociada: Unrestricted.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Tareas
Cómo: Registrar excepciones en Visual Basic
Tutorial: Determinar el lugar en el que My.Application.Log escribe la información
Referencia
My.Application.Log (Objeto)
My.Log (Objeto)
System.Exception
System.Diagnostics.TraceEventType
Microsoft.VisualBasic.Logging.Log.WriteException(System.Exception)
Conceptos
Trabajar con registros de aplicación en Visual Basic
Referencia del lenguaje Visual Basic

My.Computer (Objeto)
Suministra propiedades para manipular componentes de un equipo, como el sonido, el reloj, el teclado y el sistema de
archivos.
Comentarios
Las propiedades expuestas por el objeto My.Computer devuelven información sobre el equipo en el que se implementa la
aplicación, como se determine en tiempo de ejecución. Normalmente, estos datos son distintos de los que estaban disponibles
en el equipo de desarrollo.
Algunos miembros, como el objeto My.Computer.Audio, sólo están disponibles para aplicaciones que no son de servidor.
Tareas
En la tabla siguiente se muestran ejemplos de tareas en las que interviene el objeto My.Computer.
Para Vea
Comprobar el estado de la conexión Cómo: Comprobar el estado de conexión en Visual Basic

Determinar si un equipo remoto está di Cómo: Determinar si un equipo remoto está disponible en Visual Basic
sponible

Descargar un archivo Cómo: Descargar un archivo en Visual Basic

Cargar un archivo Cómo: Cargar un archivo en Visual Basic

Crear una clave del Registro Cómo: Crear una clave del Registro y establecer sus valores en Visual Basic

Borrar el Portapapeles Cómo: Vaciar el Portapapeles en Visual Basic

Leer en el Portapapeles Cómo: Leer el Portapapeles en Visual Basic

Determinar el contenido almacenado en Cómo: Determinar qué tipo de archivo se almacena en el Portapapeles en Visual Basic
el Portapapeles

Guardar audio en el Portapapeles Cómo: Guardar una secuencia de audio en el Portapapeles en Visual Basic

Obtener una imagen del Portapapeles Cómo: Recuperar una imagen del Portapapeles en Visual Basic
Ejemplo
En este ejemplo se utiliza la propiedad My.Computer.Name para mostrar el nombre del equipo en el que se ejecuta el
código.
VB
MsgBox("Computer name: " & My.Computer.Name)

Requisitos
Espacio de nombres: Microsoft.VisualBasic.Devices
Clase: Computer (la clase base ServerComputer proporciona los miembros que están disponibles en todos los proyectos)
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Vea también
Referencia
My.Computer (Miembros del objeto)
My.Computer.Audio (Objeto)
My.Computer.Clipboard (Objeto)
My.Computer.Clock (Objeto)
My.Computer.FileSystem (Objeto)
My.Computer.Info (Objeto)
My.Computer.Keyboard (Objeto)
My.Computer.Mouse (Objeto)
My.Computer.Network (Objeto)
My.Computer.Ports (Objeto)
My.Computer.Registry (Objeto)
Microsoft.VisualBasic.Devices.Computer
Microsoft.VisualBasic.Devices.ServerComputer
Referencia del lenguaje Visual Basic

My.Computer (Miembros del objeto)


La clase My.Computer (Objeto) suministra propiedades para manipular componentes de un equipo, como el sonido, el reloj, el
teclado y el sistema de archivos.
Propiedades
Propieda Descripción
d
Audio Devuelve el objeto My.Computer.Audio (Objeto), que proporciona acceso al sistema de sonido del equipo y métod
os para reproducir archivos .wav.
Este objeto sólo está disponible para las aplicaciones que no pertenecen al servidor.

Clipboard Devuelve el objeto My.Computer.Clipboard (Objeto), que proporciona métodos para manipular el Portapapeles.
Este objeto sólo está disponible para las aplicaciones que no pertenecen al servidor.

Clock Devuelve el objeto My.Computer.Clock (Objeto), que suministra propiedades para tener acceso a la hora local actu
al y la hora universal coordinada (UTC), equivalente a la hora del meridiano de Greenwich, del reloj del sistema.

FileSystem Devuelve el objeto My.Computer.FileSystem (Objeto), que proporciona métodos y propiedades para trabajar con u
nidades, archivos y directorios.

Info Devuelve el objeto My.Computer.Info (Objeto), que suministra propiedades para obtener información sobre la me
moria, los ensamblados cargados, el nombre y el sistema operativo del equipo.

Keyboard Devuelve el objeto My.Computer.Keyboard (Objeto), que suministra propiedades para tener acceso al estado actual
del teclado, como las teclas que se han presionado, y proporciona un método para enviar pulsaciones de teclas a la
ventana activa.
Este objeto sólo está disponible para las aplicaciones que no pertenecen al servidor.

Mouse Devuelve el objeto My.Computer.Mouse (Objeto), que suministra las propiedades para obtener información sobre
el formato y configuración del mouse (ratón) instalado en el equipo local.
Este objeto sólo está disponible para las aplicaciones que no pertenecen al servidor.

Name Obtiene el nombre del equipo.

Network Devuelve el objeto My.Computer.Network (Objeto), que se puede utilizar para tener acceso a los tipos y eventos de
red.

Ports Devuelve el objeto My.Computer.Ports (Objeto), que suministra una propiedad y un método para tener acceso a lo
s puertos serie del equipo.
Este objeto sólo está disponible para las aplicaciones que no pertenecen al servidor.

Registry Devuelve el objeto My.Computer.Registry (Objeto), que se puede utilizar para leer y escribir en el Registro.

Screen Obtiene el objeto Screen que representa la pantalla primaria del equipo.
Esta propiedad sólo está disponible para aplicaciones que no son de servidor.
Vea también
Referencia
My.Computer (Objeto)
Referencia del lenguaje Visual Basic

My.Computer.Audio (Propiedad)
Obtiene un objeto que proporciona propiedades de métodos que reproducen sonidos.

' Usage
Dim value As Microsoft.VisualBasic.Devices.Audio = My.Computer.Audio
' Declaration
Public ReadOnly Property Audio As MyAudio

Valor devuelto
Esta propiedad devuelve el objeto My.Computer.Audio para el equipo.
Comentarios
Esta propiedad proporciona un fácil acceso al objeto My.Computer.Audio. Para obtener más información, vea
My.Computer.Audio (Objeto).
Ejemplo
El método My.Computer.Audio.Play reproduce el sonido especificado en segundo plano cuando se especifica
AudioPlayMode.Background.
VB
Sub PlayBackgroundSoundFile()
My.Computer.Audio.Play("C:\Waterfall.wav", _
AudioPlayMode.Background)
End Sub

Este código sólo se puede ejecutar en una aplicación de Windows Forms.


El nombre de archivo debe hacer referencia a un archivo de sonido .wav del sistema.
Para simplificar la administración de sus archivos de sonido, considere almacenar los archivos como recursos de aplicación.
Puede tener acceso a los archivos mediante My.Resources (Objeto).
Requisitos
Espacio de nombres: Microsoft.VisualBasic.Devices
Clase: Computer
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web No
Permisos
No se requiere ningún permiso.
Vea también
Referencia
My.Computer (Objeto)
My.Computer.Audio (Objeto)
Referencia del lenguaje Visual Basic

My.Computer.Clipboard (Propiedad)
Obtiene un objeto que proporciona métodos para manipular el Portapapeles.

' Usage
Dim value As Microsoft.VisualBasic.MyServices.ClipboardProxy = My.Computer.Clipboard
' Declaration
Public ReadOnly Property Clipboard As ClipboardProxy

Valor devuelto
Esta propiedad devuelve el My.Computer.Clipboard (Objeto) para el equipo.
Comentarios
Esta propiedad proporciona acceso sencillo a My.Computer.Clipboard (Objeto).
Esta propiedad sólo está disponible para aplicaciones que no son de servidor.
Ejemplo
En este ejemplo se lee el texto del Portapapeles en la cadena textOnClipboard.
VB
Dim textOnClipboard As String = My.Computer.Clipboard.GetText()

En este ejemplo se produce un error si no hay texto en el Portapapeles.


Requisitos
Espacio de nombres: Microsoft.VisualBasic.Devices
Clase: Computer
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web No
Permisos
No se requiere ningún permiso.
Vea también
Referencia
My.Computer (Objeto)
My.Computer.Clipboard (Objeto)
Otros recursos
Almacenar y leer datos en el Portapapeles
Referencia del lenguaje Visual Basic

My.Computer.Clock (Propiedad)
Obtiene un objeto que proporciona propiedades para tener acceso a la hora local actual y hora universal coordinada (UTC)
(equivalente a la hora del meridiano de Greenwich) del reloj del sistema.

' Usage
Dim value As Microsoft.VisualBasic.Devices.Clock = My.Computer.Clock
' Declaration
Public ReadOnly Property Clock As MyClock

Valor devuelto
Esta propiedad devuelve el objeto My.Computer.Clock para el equipo.
Comentarios
Esta propiedad proporciona un fácil acceso al objeto My.Computer.Clock. Para obtener más información, vea
My.Computer.Clock (Objeto).
Ejemplo
El método My.Computer.Audio.Play reproduce el sonido especificado en segundo plano cuando se especifica
AudioPlayMode.Background.
VB
Sub PlayBackgroundSoundFile()
My.Computer.Audio.Play("C:\Waterfall.wav", _
AudioPlayMode.Background)
End Sub

Este código sólo se puede ejecutar en una aplicación de Windows Forms.


El nombre de archivo debe hacer referencia a un archivo de sonido .wav almacenado en el sistema.
Para simplificar la administración de sus archivos de sonido, considere almacenar los archivos como recursos de aplicación. Así
se puede tener acceso a los archivos a través de My.Resources (Objeto).
Requisitos
Espacio de nombres: Microsoft.VisualBasic.Devices
Clase: Computer, ServerComputer
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web Sí

Servicio de Windows Sí
Sitio Web Sí
Permisos
No se requiere ningún permiso.
Vea también
Referencia
My.Computer (Objeto)
My.Computer.Clock (Objeto)
Referencia del lenguaje Visual Basic

My.Computer.FileSystem (Propiedad)
Obtiene un objeto que proporciona propiedades y métodos para trabajar con unidades, archivos y directorios.

' Usage
Dim value As Microsoft.VisualBasic.MyServices.FileSystemProxy = My.Computer.FileSystem
' Declaration
Public ReadOnly Property FileSystem As FileSystemProxy

Valor devuelto
Esta propiedad devuelve el My.Computer.FileSystem (Objeto) del equipo.
Comentarios
Esta propiedad proporciona acceso sencillo a My.Computer.FileSystem (Objeto).
Ejemplo
Este ejemplo realiza una comprobación para determinar si existe la carpeta C:\backup\logs y revisa sus propiedades.
VB
Dim logInfo As System.IO.DirectoryInfo
If My.Computer.FileSystem.DirectoryExists("C:\backup\logs") Then
logInfo = My.Computer.FileSystem.GetDirectoryInfo _
("C:\backup\logs")
End If

Requisitos
Espacio de nombres: Microsoft.VisualBasic.Devices
Clase: Computer, ServerComputer
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web Sí

Servicio de Windows Sí

Sitio Web Sí
Permisos
No se requiere ningún permiso.
Vea también
Referencia
My.Computer (Objeto)
My.Computer.FileSystem (Objeto)
Otros recursos
Leer archivos en Visual Basic
Escribir en archivos en Visual Basic
Crear, eliminar y mover archivos y directorios en Visual Basic
Propiedades de archivos, directorios y unidades en Visual Basic
Referencia del lenguaje Visual Basic

My.Computer.Info (Propiedad)
Obtiene un objeto que suministra propiedades para obtener información sobre la memoria, los ensamblados cargados, el
nombre y el sistema operativo del equipo.

' Usage
Dim value As Microsoft.VisualBasic.Devices.ComputerInfo = My.Computer.Info
' Declaration
Public ReadOnly Property Info As MyComputerInfo

Valor devuelto
Esta propiedad devuelve el objeto My.Computer.Info para el equipo.
Comentarios
Esta propiedad proporciona un fácil acceso al objeto My.Computer.Info. Para obtener más información, vea
My.Computer.Info (Objeto).
Ejemplo
En este ejemplo se utiliza la propiedad My.Computer.Info.AvailablePhysicalMemory para mostrar la cantidad de memoria
física disponible para el equipo en el que se ejecuta el código.
VB
MsgBox("Computer's available physical memory: " & _
My.Computer.Info.AvailablePhysicalMemory)

Requisitos
Espacio de nombres: Microsoft.VisualBasic.Devices
Clase: Computer, ServerComputer
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web Sí

Servicio de Windows Sí

Sitio Web Sí
Permisos
No se requiere ningún permiso.
Vea también
Referencia
My.Computer (Objeto)
My.Computer.Info (Objeto)
Referencia del lenguaje Visual Basic

My.Computer.Keyboard (Propiedad)
Obtiene un objeto que proporciona propiedades para tener acceso al estado actual del teclado, como las teclas que se han
presionado, y proporciona un método para enviar pulsaciones de teclas a la ventana activa.

' Usage
Dim value As Microsoft.VisualBasic.Devices.Keyboard = My.Computer.Keyboard
' Declaration
Public ReadOnly Property Keyboard As Microsoft.VisualBasic.Devices.Keyboard

Valor devuelto
Esta propiedad devuelve el objeto My.Computer.Keyboard para el equipo.
Comentarios
Esta propiedad proporciona un fácil acceso al objeto My.Computer.Keyboard. Para obtener más información, vea
My.Computer.Keyboard (Objeto).
Ejemplo
Este ejemplo utiliza la propiedad My.Computer.Keyboard.CtrlKeyDown para determinar si la tecla CTRL del equipo está
presionada.
VB
If My.Computer.Keyboard.CtrlKeyDown Then
MsgBox("CTRL key down")
Else
MsgBox("CTRL key up")
End If

Requisitos
Espacio de nombres: Microsoft.VisualBasic.Devices
Clase: Computer
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web No
Permisos
No se requiere ningún permiso.
Vea también
Referencia
My.Computer (Objeto)
My.Computer.Keyboard (Objeto)
Referencia del lenguaje Visual Basic

My.Computer.Mouse (Propiedad)
Obtiene un objeto que suministra las propiedades necesarias para obtener información sobre el formato y configuración del
mouse (ratón) instalado en el equipo local.

' Usage
Dim value As Microsoft.VisualBasic.Devices.Mouse = My.Computer.Mouse
' Declaration
Public ReadOnly Property Mouse As Microsoft.VisualBasic.Devices.Mouse

Valor devuelto
Esta propiedad devuelve el objeto My.Computer.Mouse para el equipo.
Comentarios
Esta propiedad proporciona un fácil acceso al objeto My.Computer.Mouse. Para obtener más información, vea
My.Computer.Mouse (Objeto).
Esta propiedad sólo está disponible para aplicaciones que no son de servidor.
Ejemplo
En este ejemplo se utilizan las propiedades My.Computer.Mouse.WheelExists y My.Computer.Mouse.WheelScrollLines
para determinar si el mouse tiene una rueda de desplazamiento y cuánto se desplaza al girar.
VB
If My.Computer.Mouse.WheelExists Then
Dim lines As Integer = My.Computer.Mouse.WheelScrollLines
If lines > 0 Then
MsgBox("Application scrolls " & _
lines & " line(s) for each wheel turn.")
Else
MsgBox("Application scrolls " & _
(-lines) & " page(s) for each wheel turn.")
End If
Else
MsgBox("Mouse has no scroll wheel.")
End If

Requisitos
Espacio de nombres: Microsoft.VisualBasic.Devices
Clase: Computer
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No


Servicio de Windows Sí

Sitio Web No
Permisos
No se requiere ningún permiso.
Vea también
Referencia
My.Computer (Objeto)
My.Computer.Mouse (Objeto)
Referencia del lenguaje Visual Basic

My.Computer.Name (Propiedad)
Obtiene el nombre del equipo.

' Usage
Dim value As String = My.Computer.Name
' Declaration
Public ReadOnly Property Name As String

Valor devuelto
String que contiene el nombre del equipo.
Comentarios
La propiedad My.Computer.Name ofrece una funcionalidad similar a la de la propiedad MachineName.
Ejemplo
En este ejemplo se utiliza la propiedad My.Computer.Name para mostrar el nombre del equipo donde se ejecuta el código.
VB
MsgBox("Computer name: " & My.Computer.Name)

Requisitos
Espacio de nombres: Microsoft.VisualBasic.Devices
Clase: Computer, ServerComputer
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web Sí

Servicio de Windows Sí

Sitio Web Sí
Permisos
No se requiere ningún permiso.
Vea también
Referencia
My.Computer (Objeto)
MachineName
Microsoft.VisualBasic.Devices.ServerComputer.Name
Referencia del lenguaje Visual Basic

My.Computer.Network (Propiedad)
Obtiene un objeto que suministra una propiedad y métodos por interactuar con la red a la que está conectado el equipo.

' Usage
Dim value As Microsoft.VisualBasic.Devices.Network = My.Computer.Network
' Declaration
Public ReadOnly Property Network As MyNetwork

Valor devuelto
Esta propiedad devuelve My.Computer.Network (Objeto) para el equipo.
Comentarios
Esta propiedad proporciona acceso sencillo a My.Computer.Network (Objeto).
Ejemplo
Este ejemplo carga el archivo Order.txt a http://www.cohowinery.com/uploads.
VB
My.Computer.Network.UploadFile ( _
"C:\My Documents\Order.txt", _
"http://www.cohowinery.com/uploads.aspx")

Requisitos
Espacio de nombres: Microsoft.VisualBasic.Devices
Clase: Computer, ServerComputer
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web Sí

Servicio de Windows Sí

Sitio Web Sí
Permisos
No se requiere ningún permiso.
Vea también
Referencia
My.Computer (Objeto)
My.Computer.Network (Objeto)
Otros recursos
Realizar operaciones de red
Referencia del lenguaje Visual Basic

My.Computer.Ports (Propiedad)
Obtiene un objeto que proporciona una propiedad y un método para tener acceso a los puertos serie del equipo.

' Usage
Dim value As Microsoft.VisualBasic.Devices.Ports = My.Computer.Ports
' Declaration
Public ReadOnly Property Ports As MyPorts

Valor devuelto
Esta propiedad devuelve el objeto My.Computer.Ports.
Comentarios
Esta propiedad proporciona un fácil acceso al objeto My.Computer.Ports. Para obtener más información, vea
My.Computer.Ports (Objeto).
Ejemplo
En este ejemplo se describe cómo se envían cadenas al puerto serie COM1 del equipo.
El bloque Using permite a la aplicación cerrar el puerto serie aun cuando se genere una excepción. Todo el código que utiliza
el puerto serie debe aparecer dentro de este bloque o dentro de un bloque Try...Catch...Finally con una llamada al método
Close.
El método WriteLine envía los datos al puerto serie.
VB
Sub SendSerialData(ByVal data As String)
' Send strings to a serial port.
Using com1 As IO.Ports.SerialPort = _
My.Computer.Ports.OpenSerialPort("COM1")
com1.WriteLine(data)
End Using
End Sub

Para obtener más información, vea Cómo: Enviar cadenas a puertos serie en Visual Basic.
Requisitos
Espacio de nombres: Microsoft.VisualBasic.Devices
Clase: Computer
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No

Servicio de Windows Sí
Sitio Web No

Permisos
No se requiere ningún permiso.
Vea también
Referencia
My.Computer (Objeto)
My.Computer.Ports (Objeto)
Referencia del lenguaje Visual Basic

My.Computer.Registry (Propiedad)
Obtiene un objeto que proporciona propiedades y métodos para manipular el Registro.

' Usage
Dim value As Microsoft.VisualBasic.MyServices.RegistryProxy = My.Computer.Registry
' Declaration
Public ReadOnly Property Registry As RegistryProxy

Valor devuelto
Esta propiedad devuelve My.Computer.Registry (Objeto) para el equipo.
Comentarios
Esta propiedad proporciona acceso sencillo a My.Computer.Registry (Objeto).
Ejemplo
En este ejemplo se lee el valor Name de HKEY_CURRENT_USER\Software\MyApp y se presenta en un cuadro de mensaje.
VB
Dim readValue As Object
readValue = My.Computer.Registry.GetValue _
("HKEY_CURRENT_USER\Software\MyApp", "Name", Nothing)
MsgBox("The value is " & CStr(readValue))

Requisitos
Espacio de nombres: Microsoft.VisualBasic.Devices
Clase: Computer, ServerComputer
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Permisos
No se requiere ningún permiso.
Vea también
Referencia
My.Computer (Objeto)
My.Computer.Registry (Objeto)
Conceptos
Tareas habituales del Registro
Referencia del lenguaje Visual Basic

My.Computer.Screen (Propiedad)
Obtiene el objeto Screen que representa la pantalla primaria del equipo.

' Usage
Dim value As System.Windows.Forms.Screen = My.Computer.Screen
' Declaration
Public ReadOnly Property Screen As System.Windows.Forms.Screen

Valor devuelto
Objeto Screen que representa la pantalla primaria del equipo.
Comentarios
La propiedad My.Computer.Screen ofrece una funcionalidad similar a la de la propiedad PrimaryScreen.
Ejemplo
En este ejemplo se utiliza la propiedad WorkingArea de la propiedad My.Computer.Screen para determinar el área de trabajo
de la pantalla primaria del equipo y se cambia el tamaño del formulario para llenar el área de trabajo.
VB
Private Sub EnlargeForm()
Me.Size = My.Computer.Screen.WorkingArea.Size
Me.Location = New System.Drawing.Point(0, 0)
End Sub

Este ejemplo se tiene que ejecutar en una aplicación de Windows Forms.


Requisitos
Espacio de nombres: Microsoft.VisualBasic.Devices
Clase: Computer
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web No
Permisos
El permiso siguiente puede ser necesario:
Permiso Descripción
FileIOPermission Controla la capacidad de tener acceso a archivos y carpetas. Enumeración asociada: Unrestricted.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Referencia
My.Computer (Objeto)
System.Windows.Forms.Screen
PrimaryScreen
Microsoft.VisualBasic.Devices.Computer.Screen
Referencia del lenguaje Visual Basic

My.Computer.Audio (Objeto)
Proporciona métodos para reproducir sonidos.
Comentarios
Puede utilizar los métodos My.Computer.Audio.Play y My.Computer.Audio.PlaySystemSound para reproducir archivos
de sonido .wav y sonidos de sistema.
Tareas
La tabla siguiente muestra ejemplos de tareas que implican al objeto My.Computer.Audio.
Para Vea
Reproducir un sonido en segundo plano. Cómo: Reproducir sonidos en Visual Basic

Reproducir un sonido una vez y esperar que final Cómo: Reproducir sonidos y esperar a que finalicen en Visual Basic
ice.

Reproducir un sonido varias veces. Cómo: Reproducir sonidos en bucle en Visual Basic

Detener la reproducción de un sonido en segund Cómo: Detener la reproducción de sonidos en segundo plano en Visual Basic
o plano.
Ejemplo
El método My.Computer.Audio.Play reproduce el sonido especificado en segundo plano cuando se especifica
AudioPlayMode.Background.
VB
Sub PlayBackgroundSoundFile()
My.Computer.Audio.Play("C:\Waterfall.wav", _
AudioPlayMode.Background)
End Sub

Este código sólo se puede ejecutar en una aplicación de Windows Forms.


El nombre de archivo debe hacer referencia a un archivo de sonido .wav del sistema.
Para simplificar la administración de sus archivos de sonido, considere almacenar los archivos como recursos de aplicación.
Puede tener acceso a los archivos mediante My.Resources (Objeto).
Requisitos
Espacio de nombres: Microsoft.VisualBasic.Devices
Clase: Audio
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí


Biblioteca de controles Web No

Servicio de Windows Sí
Sitio Web No
Vea también
Referencia
My.Computer.Audio (Miembros del objeto)
My.Computer (Objeto)
Referencia del lenguaje Visual Basic

My.Computer.Audio (Miembros del objeto)


El objeto My.Computer.Audio (Objeto) proporciona métodos para reproducir sonidos.
Métodos
Play Reproduce un archivo de sonido .wav.
Este método sólo está disponible para las aplicaciones que no son de servidor.

PlaySystemSound Reproduce un sonido del sistema.


Este método sólo está disponible para las aplicaciones que no son de servidor.

Stop Detiene la reproducción de un sonido en segundo plano.


Este método sólo está disponible para las aplicaciones que no son de servidor.
Vea también
Referencia
My.Computer.Audio (Objeto)
Referencia del lenguaje Visual Basic

My.Computer.Audio.Play (Método)
Reproduce un archivo de sonido .wav.

' Usage
My.Computer.Audio.Play(location)
My.Computer.Audio.Play(location ,playMode)
My.Computer.Audio.Play(data ,playMode)
My.Computer.Audio.Play(stream ,playMode)
' Declaration
Public Sub Play( _
ByVal location As String _
)
' -or-
Public Sub Play( _
ByVal location As String, _
ByVal playMode As AudioPlayMode _
)
' -or-
Public Sub Play( _
ByVal data As Byte(), _
ByVal playMode As AudioPlayMode _
)
' -or-
Public Sub Play( _
ByVal stream As System.IO.Stream, _
ByVal playMode As AudioPlayMode _
)

Parámetros
location
String que contiene el nombre del archivo de sonido
data
Matriz Byte que representa el archivo de sonido.
stream
Stream que representa el archivo de sonido.
playMode
Modo AudioPlayMode (Enumeración) de reproducción del sonido. De forma predeterminada, es
AudioPlayMode.Background.
Excepciones
Las circunstancias siguientes pueden provocar una excepción:
data o stream es Nothing, o location es una cadena vacía (ArgumentNullException).
El argumento playMode no es ninguno de los valores de AudioPlayMode (Enumeración)
(InvalidEnumArgumentException).
El usuario no tiene permisos suficientes para el acceso al archivo cuyo nombre va especificado por location
(IOException).
La ruta de acceso del archivo es incorrecta en location (DirectoryNotFoundException)
El nombre de la ruta de acceso de location es demasiado largo (PathTooLongException)
Hay una situación de confianza parcial en la que el usuario no dispone de los permisos necesarios (SecurityException).
Comentarios
El método Play reproduce el archivo de sonido .wav almacenado como un archivo en la ubicación location, como una matriz
de bytes en data, o como secuencia en stream.
Si se utiliza la sobrecarga que toma sólo el parámetro location, el método Play reproduce el sonido en segundo plano. De lo
contrario, el parámetro playMode determina cómo se reproducirá el sonido.
playMode Descripción
AudioPlayMode.Backgr Reproduce el sonido en segundo plano. El código de llamada continúa ejecutándose.
ound

AudioPlayMode.Backgr Reproduce el sonido en segundo plano hasta que se llame a My.Computer.Audio.Stop (Método). El
oundLoop código de llamada continúa ejecutándose.

AudioPlayMode.WaitT Reproduce el sonido y espera hasta que finalice antes de continuar el código de llamada.
oComplete

La reproducción en segundo plano permite que la aplicación ejecute otro código mientras se reproduce el sonido. Para obtener
más información, vea Cómo: Reproducir sonidos en bucle en Visual Basic y Cómo: Reproducir sonidos en Visual Basic.
Tareas
La tabla siguiente muestra una lista de ejemplos de tareas en las que está implicado el método My.Computer.Audio.Play.
Para Vea
Reproducir un sonido una vez Cómo: Reproducir sonidos y esperar a que finalicen en Visual Basic

Reproducir un sonido muchas veces Cómo: Reproducir sonidos en bucle en Visual Basic

Reproducir un sonido en segundo plano Cómo: Reproducir sonidos en Visual Basic


Ejemplo
El método My.Computer.Audio.Play reproduce el sonido especificado en segundo plano cuando se especifica
PlayMode.Background.
VB
Sub PlayBackgroundSoundFile()
My.Computer.Audio.Play("C:\Waterfall.wav", _
AudioPlayMode.Background)
End Sub

Este ejemplo de código sólo se puede ejecutar en una aplicación de Windows Forms.
El nombre de archivo debe hacer referencia a un archivo de sonido .wav almacenado en el sistema.
Para simplificar la administración de sus archivos de sonido, considere almacenar los archivos como recursos de aplicación. Así
se puede tener acceso a ellos a través de My.Resources (Objeto).
Requisitos
Espacio de nombres: Microsoft.VisualBasic.Devices
Clase: Audio
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí
Aplicación de consola Sí

Biblioteca de controles de Windows Sí


Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web No
Permisos
Los permisos siguientes pueden ser necesarios:
Permiso Descripción
FileIOPermission Controla la capacidad de tener acceso a archivos y carpetas. Enumeración asociada: Unrestricted.

SecurityPermission Describe un conjunto de permisos de seguridad aplicados al código. Enumeración asociada: ControlThread
.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Tareas
Cómo: Reproducir sonidos y esperar a que finalicen en Visual Basic
Cómo: Reproducir sonidos en bucle en Visual Basic
Cómo: Reproducir sonidos en Visual Basic
Referencia
My.Computer.Audio (Objeto)
My.Computer.Audio.Stop (Método)
AudioPlayMode (Enumeración)
System.IO.Stream
Microsoft.VisualBasic.Devices.Audio.Play(System.String)
Referencia del lenguaje Visual Basic

My.Computer.Audio.PlaySystemSound (Método)
Reproduce un sonido del sistema.

' Usage
My.Computer.Audio.PlaySystemSound(systemSound)
' Declaration
Public Sub PlaySystemSound( _
ByVal systemSound As System.Media.SystemSound _
)

Parámetros
systemSound
Objeto SystemSound que representa el sonido de sistema que se debe reproducir.
Excepciones
La siguiente condición puede provocar una excepción:
systemSound es Nothing (ArgumentNullException).
Comentarios
El método PlaySystemSound reproduce el sonido de sistema indicado por systemSound; el sonido se reproduce una vez, en
segundo plano.
El valor de systemSound debe ser uno de los miembros compartidos de la clase SystemSounds:
Asterisk
Beep
Exclamation
Hand
Question
Tareas
En la tabla siguiente se incluye un ejemplo de una tarea en la que interviene el método
My.Computer.Audio.PlaySystemSound.
Para Vea
Reproducir un sonido del sistema Cómo: Reproducir sonidos del sistema en Visual Basic
Ejemplo
Este ejemplo utiliza el método My.Computer.Audio.PlaySystemSound para reproducir un sonido del sistema.
VB
Sub PlaySystemSound()
My.Computer.Audio.PlaySystemSound( _
System.Media.SystemSounds.Asterisk)
End Sub

Este ejemplo de código sólo se puede ejecutar en una aplicación de Windows Forms.
Requisitos
Espacio de nombres: Microsoft.VisualBasic.Devices
Clase: Audio
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web No
Permisos
No se requiere ningún permiso.
Vea también
Tareas
Cómo: Reproducir sonidos del sistema en Visual Basic
Referencia
My.Computer.Audio (Objeto)
System.Media.SystemSound
SystemSounds
Microsoft.VisualBasic.Devices.Audio.PlaySystemSound(System.Media.SystemSound)
Referencia del lenguaje Visual Basic

My.Computer.Audio.Stop (Método)
Detiene la reproducción de sonido en segundo plano.

' Usage
My.Computer.Audio.Stop()
' Declaration
Public Sub Stop()

Comentarios
El método My.Computer.Audio.Stop detiene la reproducción de un sonido en segundo plano que inició el método
My.Computer.Audio.Play.
La reproducción en segundo plano permite que la aplicación ejecute otro código mientras se reproduce el sonido. Para obtener
más información, vea Cómo: Reproducir sonidos en bucle en Visual Basic y Cómo: Reproducir sonidos en Visual Basic.
En general, cuando una aplicación reproduce un sonido en bucle de repetición, debería detener el sonido en algún momento
dado.
Tareas
En la tabla siguiente se incluye un ejemplo de una tarea en la que interviene el método My.Computer.Audio.Stop.
Para Vea
Detener la reproducción de sonido en segundo p Cómo: Detener la reproducción de sonidos en segundo plano en Visual Basic
lano.
Ejemplo
Este ejemplo utiliza el método My.Computer.Audio.Stop para detener la aplicación que está reproduciendo actualmente en
segundo plano o en bucle de repetición y utiliza el método My.Computer.Audio.Play para reproducir en segundo plano un
sonido en bucle de repetición.
VB
Sub PlayLoopingBackgroundSoundFile()
My.Computer.Audio.Play("C:\Waterfall.wav", _
AudioPlayMode.BackgroundLoop)
End Sub
Sub StopBackgroundSound()
My.Computer.Audio.Stop()
End Sub

Este ejemplo de código sólo se puede ejecutar en una aplicación de Windows Forms.
El nombre de archivo debe hacer referencia a un archivo de sonido .wav almacenado en el sistema.
Para simplificar la administración de sus archivos de sonido, considere almacenar los archivos como recursos de aplicación. Así
se puede tener acceso a estos archivos a través de My.Resources (Objeto).
Requisitos
Espacio de nombres: Microsoft.VisualBasic.Devices
Clase: Audio
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí
Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web No
Permisos
No se requiere ningún permiso.
Vea también
Tareas
Cómo: Detener la reproducción de sonidos en segundo plano en Visual Basic
Referencia
My.Computer.Audio (Objeto)
Microsoft.VisualBasic.Devices.Audio.Stop
Referencia del lenguaje Visual Basic

My.Computer.Clipboard (Objeto)
Proporciona métodos para manipular el Portapapeles.
Comentarios
Los elementos desplazados o copiados al Portapapeles se conservan incluso después de que se cierre la aplicación.
Los datos en el Portapapeles pueden estar en cualquier formato de datos, también llamado formato del Portapapeles. Para
obtener una lista de formatos predefinidos que se puedan utilizar con el Portapapeles, vea DataFormats. Cuando se desplaza o
se copia un elemento en el Portapapeles, se borran elementos en otros formatos. Para conservar otros formatos, utilice
DataObject que copia todo lo que existe en el Portapapeles actual, incluso elementos pegados de otras aplicaciones. Coloque
datos en el Portapapeles en varios formatos para aumentar al máximo las posibilidades de que una aplicación de destino,
cuyos requisitos de formato desconozca, pueda recuperar datos correctamente.
Como todas las aplicaciones para Windows comparten el Portapapeles del sistema, el contenido puede cambiar al cambiar a
otra aplicación.
Una clase debe ser serializable para que se pueda colocar en el Portapapeles. Vea Serialización para obtener más información.
Al tener acceso al Portapapeles de forma remota, se produce ThreadStateException a menos que el subproceso de acceso
funcione en modo STA (single-threaded apartment). Para resolver este problema, establezca ThreadApartmentState en STA.
Para obtener más información, vea STAThreadAttribute.
Tareas
La tabla siguiente muestra ejemplos de tareas que implican al objeto My.Computer.Clipboard.
Para Vea
Borrar el Portapapeles Cómo: Vaciar el Portapapeles en Visual Basic

Leer en el Portapapeles. Cómo: Leer el Portapapeles en Visual Basic

Buscar lo que se ha guardado en el Port Cómo: Determinar qué tipo de archivo se almacena en el Portapapeles en Visual Basic
apapeles

Guardar audio en el Portapapeles Cómo: Guardar una secuencia de audio en el Portapapeles en Visual Basic

Recibir una imagen del Portapapeles Cómo: Recuperar una imagen del Portapapeles en Visual Basic

Guardar datos en el Portapapeles Cómo: Escribir en el Portapapeles en Visual Basic


Ejemplo
En este ejemplo se lee texto del Portapapeles en la cadena textOnClipboard.
VB
Dim textOnClipboard As String = My.Computer.Clipboard.GetText()

En este ejemplo se producirá un error si no hay ningún texto en el Portapapeles.


Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: ClipboardProxy (proporciona acceso a Clipboard)
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web No
Vea también
Referencia
My.Computer.Clipboard (Miembros del objeto)
My.Computer (Objeto)
System.Windows.Forms.Clipboard
Referencia del lenguaje Visual Basic

My.Computer.Clipboard (Miembros del objeto)


My.Computer.Clipboard (Objeto) proporciona métodos para trabajar con el portapapeles.
Métodos
Método Descripción
Clear Borra el portapapeles.
Este método sólo está disponible en las aplicaciones que no son de servidor.

ContainsAudio Determina si el portapapeles contiene datos de audio.


Este método sólo está disponible en las aplicaciones que no son de servidor.

ContainsData Determina si el portapapeles contiene datos en el formato personalizado especificado.


Este método sólo está disponible en las aplicaciones que no son de servidor.

ContainsFileDropList Determina si el portapapeles contiene un objeto FileDropList.


Este método sólo está disponible en las aplicaciones que no son de servidor.

ContainsImage Determina si el portapapeles contiene una imagen.


Este método sólo está disponible en las aplicaciones que no son de servidor.

ContainsText Determina si el portapapeles contiene texto.


Este método sólo está disponible en las aplicaciones que no son de servidor.

GetAudioStream Recupera una secuencia de audio del portapapeles.


Este método sólo está disponible en las aplicaciones que no son de servidor.

GetData Recupera datos del portapapeles.


Este método sólo está disponible en las aplicaciones que no son de servidor.

GetDataObject Recupera un objeto de datos del portapapeles. Este método sólo está disponible en las aplicaciones que
no son de servidor.

GetFileDropList Recupera un objeto FileDropList del portapapeles.


Este método sólo está disponible en las aplicaciones que no son de servidor.

GetImage Recupera una imagen del portapapeles.


Este método sólo está disponible en las aplicaciones que no son de servidor.

GetText Recupera texto del portapapeles.


Este método sólo está disponible en las aplicaciones que no son de servidor.

SetAudio Escribe datos de audio en el portapapeles.


Este método sólo está disponible en las aplicaciones que no son de servidor.

SetData Escribe datos en el formato personalizado especificado en el portapapeles.


Este método sólo está disponible en las aplicaciones que no son de servidor.
SetDataObject Escribe un objeto de datos en el portapapeles.
Este método sólo está disponible en las aplicaciones que no son de servidor.

SetFileDropList Escribe un objeto FileDropList en el portapapeles.


Este método sólo está disponible en las aplicaciones que no son de servidor.

SetImage Escribe una imagen en el portapapeles.


Este método sólo está disponible en las aplicaciones que no son de servidor.

SetText Escribe texto en el portapapeles.


Este método sólo está disponible en las aplicaciones que no son de servidor.
Vea también
Tareas
Cómo: Vaciar el Portapapeles en Visual Basic
Cómo: Leer el Portapapeles en Visual Basic
Cómo: Determinar qué tipo de archivo se almacena en el Portapapeles en Visual Basic
Cómo: Escribir en el Portapapeles en Visual Basic
Cómo: Recuperar una imagen del Portapapeles en Visual Basic
Cómo: Guardar una secuencia de audio en el Portapapeles en Visual Basic
Referencia
My.Computer.Clipboard (Objeto)
Referencia del lenguaje Visual Basic

My.Computer.Clipboard.Clear (Método)
Borra el Portapapeles.

' Usage
My.Computer.Clipboard.Clear()
' Declaration
Public Sub Clear()

Comentarios
La clase UIPermission controla el acceso al Portapapeles y el valor de enumeración UIPermissionClipboard asociado indica el
nivel de acceso. Para obtener más información, vea Consideraciones de seguridad adicionales en formularios Windows Forms.
Tareas
En la tabla siguiente se muestra un ejemplo de una tarea en la que interviene el método My.Computer.Clipboard.Clear.
Para Vea
Borrar el Portapapeles Cómo: Vaciar el Portapapeles en Visual Basic
Ejemplo
Este ejemplo borra el Portapapeles.

My.Computer.Clipboard.Clear()

Esta operación quita todos los datos del Portapapeles.


Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: ClipboardProxy (proporciona acceso a Clipboard)
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web No
Permisos
No se requiere ningún permiso.
Vea también
Tareas
Cómo: Vaciar el Portapapeles en Visual Basic
Referencia
My.Computer.Clipboard (Objeto)
My.Computer.Clipboard (Miembros del objeto)
System.Windows.Forms.Clipboard.Clear
Referencia del lenguaje Visual Basic

My.Computer.Clipboard.ContainsAudio (Método)
Indica si el Portapapeles contiene datos de sonido.

' Usage
Dim value As Boolean = My.Computer.Clipboard.ContainsAudio()
' Declaration
Public Function ContainsAudio() As Boolean

Valor devuelto
True si hay datos de sonido almacenados en el Portapapeles; de lo contrario False.
Comentarios
Tareas
La tabla siguiente muestra una lista de ejemplos de tareas en las que está implicado el método
My.Computer.Clipboard.ContainsAudio.
Para Vea
Determinar qué tipo de datos está alma Cómo: Determinar qué tipo de archivo se almacena en el Portapapeles en Visual Basic
cenado en el Portapapeles
Ejemplo
Este ejemplo determina si el Portapapeles contiene datos de sonido y muestra el resultado.
VB
If My.Computer.Clipboard.ContainsAudio() Then
MsgBox("The clipboard contains audio data.")
Else
MsgBox("The clipboard does not contain audio data.")
End If

Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: ClipboardProxy (proporciona acceso a Clipboard)
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web No
Permisos
No se requiere ningún permiso.
Vea también
Tareas
Cómo: Determinar qué tipo de archivo se almacena en el Portapapeles en Visual Basic
Referencia
My.Computer.Clipboard (Objeto)
My.Computer.Clipboard.GetAudioStream (Método)
My.Computer.Clipboard.SetAudio (Método)
System.Windows.Forms.Clipboard.ContainsAudio
Otros recursos
Reproducir sonidos
Referencia del lenguaje Visual Basic

My.Computer.Clipboard.ContainsData (Método)
Indica si el Portapapeles contiene datos en el formato personalizado especificado.

' Usage
Dim value As Boolean = My.Computer.Clipboard.ContainsData(format)
' Declaration
Public Function ContainsData( _
ByVal format As String _
) As Boolean

Parámetros
format
String. Nombre del formato personalizado que se va a comprobar. Requerido.
Valor devuelto
True si en el Portapapeles se han almacenado datos en el formato personalizado especificado; de lo contrario False.
Excepciones
Este método no produce excepciones.
Comentarios
Si ha colocado datos con formato personalizado en el Portapapeles, este método permite comprobar en el Portapapeles los
datos en ese formato.
Tareas
La tabla siguiente muestra una lista de ejemplos de tareas en las que está implicado el método
My.Computer.Clipboard.ContainsData.
Para Vea
Determinar qué tipo de datos está alma Cómo: Determinar qué tipo de archivo se almacena en el Portapapeles en Visual Basic
cenado en el Portapapeles
Ejemplo
Este ejemplo comprueba los datos en el formato personalizado specialFormat.
VB
If My.Computer.Clipboard.ContainsData("specialFormat") Then
MsgBox("Data found.")
End If

Reemplace specialFormat con el nombre del formato personalizado que desea comprobar.
Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: ClipboardProxy (proporciona acceso a Clipboard)
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí
Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web No
Permisos
No se requiere ningún permiso.
Vea también
Referencia
My.Computer.Clipboard (Objeto)
My.Computer.Clipboard.GetData (Método)
My.Computer.Clipboard.GetDataObject (Método)
My.Computer.Clipboard.SetData (Método)
My.Computer.Clipboard.SetDataObject (Método)
ContainsData
Otros recursos
Almacenar y leer datos en el Portapapeles
Referencia del lenguaje Visual Basic

My.Computer.Clipboard.ContainsFileDropList (Método)
Devuelve un valor de tipo Boolean que indica si el Portapapeles contiene una lista de colocación de archivos.

' Usage
Dim value As Boolean = My.Computer.Clipboard.ContainsFileDropList()
' Declaration
Public Function ContainsFileDropList() As Boolean

Valor devuelto
True si hay una lista de colocación de archivos en el Portapapeles; de lo contrario False.
Comentarios
Una lista de colocación de archivos es una colección de cadenas que contienen información sobre la ruta de acceso de los
archivos.
Ejemplo
Este ejemplo determina si existe una lista de colocación de archivos en el Portapapeles y la agrega a ListBox lstFiles, si
existen.
VB
If My.Computer.Clipboard.ContainsFileDropList Then
Dim filelist As System.Collections.Specialized.StringCollection
filelist = My.Computer.Clipboard.GetFileDropList()
For Each filePath As String In filelist
lstFiles.Items.Add(filePath)
Next
End If

Este código creará una excepción si hay ningún objeto ListBox denominado lstFiles.
Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: ClipboardProxy (proporciona acceso a Clipboard)
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web No
Permisos
No se requiere ningún permiso.
Vea también
Referencia
My.Computer.Clipboard (Objeto)
My.Computer.Clipboard.GetFileDropList (Método)
My.Computer.Clipboard.SetFileDropList (Método)
System.Windows.Forms.Clipboard.ContainsFileDropList
Otros recursos
Almacenar y leer datos en el Portapapeles
Referencia del lenguaje Visual Basic

My.Computer.Clipboard.ContainsImage (Método)
Devuelve un valor Boolean que indica si está almacenada una imagen en el Portapapeles.

' Usage
Dim value As Boolean = My.Computer.Clipboard.ContainsImage()
' Declaration
Public Function ContainsImage() As Boolean

Valor devuelto
True si hay una imagen almacenada en el Portapapeles; de lo contrario False.
Excepciones
Este método no produce excepciones.
Comentarios
El método requiere AllClipboard.
Tareas
La tabla siguiente muestra una lista de ejemplos de tareas en las que está implicado el método
My.Computer.Clipboard.ContainsImage.
Para Vea
Determinar si el Portapapeles contiene una imagen Cómo: Recuperar una imagen del Portapapeles en Visual Basic
Ejemplo
Este ejemplo comprueba si hay una imagen en el Portapapeles y, en ese caso, obtiene la imagen y la agrega a PictureBox1.
VB
If My.Computer.Clipboard.ContainsImage() Then
Dim grabpicture As System.Drawing.Image
grabpicture = My.Computer.Clipboard.GetImage()
PictureBox1.Image = grabpicture
End If

Este ejemplo depende de la existencia de un objeto PictureBox denominado PictureBox1.


Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: ClipboardProxy (proporciona acceso a Clipboard)
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí


Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web No
Permisos
No se requiere ningún permiso.
Vea también
Referencia
My.Computer.Clipboard (Objeto)
My.Computer.Clipboard.GetImage (Método)
My.Computer.Clipboard.SetImage (Método)
System.Windows.Forms.Clipboard.ContainsImage
Otros recursos
Almacenar y leer datos en el Portapapeles
Referencia del lenguaje Visual Basic

My.Computer.Clipboard.ContainsText (Método)
Determina si hay texto en el Portapapeles.

' Usage
Dim value As Boolean = My.Computer.Clipboard.ContainsText()
Dim value As Boolean = My.Computer.Clipboard.ContainsText(format)
' Declaration
Public Function ContainsText() As Boolean
' -or-
Public Function ContainsText( _
ByVal format As System.Windows.Forms.TextDataFormat _
) As Boolean

Parámetros
format
TextDataFormat. Si se especifica, identifica el formato de texto que se debe comprobar. Requerido.
Valor devuelto
True si el Portapapeles contiene texto; en caso contrario False.
Comentarios
Los formatos posibles son CommaSeparatedValue, Html, Rtf y UnicodeText.
El método requiere AllClipboard.
Tareas
La tabla siguiente muestra una lista de ejemplos de tareas en las que está implicado el método
My.Computer.Clipboard.ContainsText.
Para Vea
Determinar si el Portapapeles contiene t Cómo: Determinar qué tipo de archivo se almacena en el Portapapeles en Visual Basic
exto
Ejemplo
Este ejemplo determina si el texto HTLM se almacena en el Portapapeles y, en caso afirmativo, lee en el Portapapeles.
VB
If My.Computer.Clipboard.ContainsText _
(System.Windows.Forms.TextDataFormat.Html) Then
Dim clipText As String = My.Computer.Clipboard.GetText()
End If

Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: ClipboardProxy (proporciona acceso a Clipboard)
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí
Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web No
Permisos
No se requiere ningún permiso.
Vea también
Referencia
My.Computer.Clipboard (Objeto)
My.Computer.Clipboard.GetText (Método)
My.Computer.Clipboard.SetText (Método)
System.Windows.Forms.TextDataFormat
System.Windows.Forms.Clipboard.ContainsText
Otros recursos
Almacenar y leer datos en el Portapapeles
Referencia del lenguaje Visual Basic

My.Computer.Clipboard.GetAudioStream (Método)
Recupera una secuencia de audio del Portapapeles.

' Usage
Dim value As System.IO.Stream = My.Computer.Clipboard.GetAudioStream()
' Declaration
Public Function GetAudioStream() As System.IO.Stream

Valor devuelto
Stream
Comentarios
Ejemplo
Este ejemplo recupera una secuencia audio del Portapapeles y la reproduce.
VB
If My.Computer.Clipboard.ContainsAudio Then
Dim song As System.IO.Stream
song = My.Computer.Clipboard.GetAudioStream
My.Computer.Audio.Play(song, AudioPlayMode.WaitToComplete)
End If

Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: ClipboardProxy (proporciona acceso a Clipboard)
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web No
Permisos
No se requiere ningún permiso.
Vea también
Referencia
My.Computer.Clipboard (Objeto)
My.Computer.Clipboard.ContainsAudio (Método)
My.Computer.Clipboard.SetAudio (Método)
System.IO.Stream
System.Windows.Forms.Clipboard.GetAudioStream
Otros recursos
Almacenar y leer datos en el Portapapeles
Referencia del lenguaje Visual Basic

My.Computer.Clipboard.GetData (Método)
Recupera los datos con un formato personalizado del Portapapeles.

' Usage
Dim value As Object = My.Computer.Clipboard.GetData(format)
' Declaration
Public Function GetData( _
ByVal format As String _
) As Object

Parámetros
format
String. Nombre del formato de datos. Requerido.
Valor devuelto
Objeto.
Comentarios
Ejemplo
Este ejemplo lee datos con el formato specialformat del Portapapeles y los escribe en un archivo.
VB
Dim someData As Object
someData = My.Computer.Clipboard.GetData("specialformat")
My.Computer.FileSystem.WriteAllBytes("C:\\mylogfile", someData, True)

Reemplace specialformat con el formato de datos personalizado que desea recuperar.


Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: ClipboardProxy (proporciona acceso a Clipboard)
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web No
Permisos
No se requiere ningún permiso.
Vea también
Referencia
My.Computer.Clipboard (Objeto)
My.Computer.Clipboard.ContainsData (Método)
My.Computer.Clipboard.GetDataObject (Método)
My.Computer.Clipboard.SetData (Método)
My.Computer.Clipboard.SetDataObject (Método)
GetData
Otros recursos
Almacenar y leer datos en el Portapapeles
Referencia del lenguaje Visual Basic

My.Computer.Clipboard.GetDataObject (Método)
Recupera los datos del Portapapeles como un objeto de datos IDataObject.

' Usage
Dim value As System.Windows.Forms.IDataObject = My.Computer.Clipboard.GetDataObject()
' Declaration
Public Function GetDataObject() As System.Windows.Forms.IDataObject

Valor devuelto
IDataObject
Comentarios
Éste es un miembro avanzado; no aparece en IntelliSense a menos que seleccione la ficha Todas.
Ejemplo
Este ejemplo lee datos del Portapapeles con formato de IDataObject y, a continuación, los escribe en un archivo.
VB
Dim someData As Object
someData = My.Computer.Clipboard.GetDataObject()
My.Computer.FileSystem.WriteAllBytes("C:\mylogfile", someData, True)

Reemplace C:\mylogfile con el nombre del archivo en el que desea escribir.


Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: ClipboardProxy (proporciona acceso a Clipboard)
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web No
Permisos
No se requiere ningún permiso.
Vea también
Referencia
My.Computer.Clipboard (Objeto)
My.Computer.Clipboard.ContainsData (Método)
My.Computer.Clipboard.GetData (Método)
My.Computer.Clipboard.SetData (Método)
My.Computer.Clipboard.SetDataObject (Método)
System.Windows.Forms.IDataObject
System.Windows.Forms.Clipboard.GetDataObject
Otros recursos
Almacenar y leer datos en el Portapapeles
Referencia del lenguaje Visual Basic

My.Computer.Clipboard.GetFileDropList (Método)
Recupera del Portapapeles una colección de cadenas que representan nombres de archivo.

' Usage
Dim value As System.Collections.Specialized.StringCollection = My.Computer.Clipboard.GetFil
eDropList()
' Declaration
Public Function GetFileDropList() As System.Collections.Specialized.StringCollection

Valor devuelto
StringCollection
Comentarios
Este método sólo está disponible para las aplicaciones que no son de servidor.
Una lista de colocación de archivos es una colección de cadenas que contienen información sobre la ruta de acceso de los
archivos.
Ejemplo
Este ejemplo determina si existe una lista de colocación de archivos en el Portapapeles y la agrega a ListBox lstFiles, si
existen.
VB
If My.Computer.Clipboard.ContainsFileDropList Then
Dim filelist As System.Collections.Specialized.StringCollection
filelist = My.Computer.Clipboard.GetFileDropList()
For Each filePath As String In filelist
lstFiles.Items.Add(filePath)
Next
End If

Este código crea una excepción si hay ningún objeto ListBox denominado lstFiles.
Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: ClipboardProxy (proporciona acceso a Clipboard)
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No

Servicio de Windows Sí
Sitio Web No
Permisos
No se requiere ningún permiso.
Vea también
Referencia
My.Computer.Clipboard (Objeto)
My.Computer.Clipboard.ContainsFileDropList (Método)
My.Computer.Clipboard.SetFileDropList (Método)
System.Collections.Specialized.StringCollection
System.Windows.Forms.Clipboard.GetFileDropList
Otros recursos
Almacenar y leer datos en el Portapapeles
Referencia del lenguaje Visual Basic

My.Computer.Clipboard.GetImage (Método)
Recupera una imagen del Portapapeles.

' Usage
Dim value As System.Drawing.Image = My.Computer.Clipboard.GetImage()
' Declaration
Public Function GetImage() As System.Drawing.Image

Valor devuelto
Image
Comentarios
El método GetImage devolverá Nothing si no hay datos en el Portapapeles que sean una imagen.
El método requiere AllClipboard.
Tareas
La tabla siguiente muestra una lista de ejemplos de tareas en las que está implicado el método
My.Computer.Clipboard.GetImage.
Para Vea
Recuperar una imagen del Portapapeles Cómo: Recuperar una imagen del Portapapeles en Visual Basic
Ejemplo
Este ejemplo comprueba si existe una imagen en el Portapapeles antes de recuperarla y asignarla a PictureBox1.
VB
If My.Computer.Clipboard.ContainsImage() Then
Dim grabpicture As System.Drawing.Image
grabpicture = My.Computer.Clipboard.GetImage()
PictureBox1.Image = grabpicture
End If

Para que este ejemplo funcione correctamente, debe haber un objeto PictureBox denominado PictureBox1 en su formulario.
Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: ClipboardProxy (proporciona acceso a Clipboard)
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No


Servicio de Windows Sí

Sitio Web No
Permisos
No se requiere ningún permiso.
Vea también
Tareas
Cómo: Determinar qué tipo de archivo se almacena en el Portapapeles en Visual Basic
Referencia
My.Computer.Clipboard (Objeto)
My.Computer.Clipboard.ContainsImage (Método)
My.Computer.Clipboard.SetImage (Método)
System.Drawing.Image
System.Windows.Forms.Clipboard.GetImage
Referencia del lenguaje Visual Basic

My.Computer.Clipboard.GetText (Método)
Recupera texto del Portapapeles.

' Usage
Dim value As String = My.Computer.Clipboard.GetText()
Dim value As String = My.Computer.Clipboard.GetText(format)
' Declaration
Public Function GetText() As String
' -or-
Public Function GetText( _
ByVal format As System.Windows.Forms.TextDataFormat _
) As String

Parámetros
format
TextDataFormat. Si se especifica, identifica el formato de texto que se debería recuperar. El valor predeterminado es
CommaSeparatedValue. Requerido.
Valor devuelto
String.
Excepciones
Este método no produce excepciones.
Comentarios
Los formatos posibles son CommaSeparatedValue, Html, Rtf y UnicodeText.
El método requiere AllClipboard.
Este método devuelve una cadena vacía si no hay datos en el Portapapeles que coincidan con el formato especificado.
Tareas
La tabla siguiente muestra una lista de ejemplos de tareas en las que está implicado el método
My.Computer.Clipboard.GetText.
Para Vea
Leer texto del Portapapeles Cómo: Leer el Portapapeles en Visual Basic
Ejemplo
En este ejemplo se lee el texto del Portapapeles en la cadena textOnClipboard.
VB
Dim textOnClipboard As String = My.Computer.Clipboard.GetText()

En este ejemplo se produce un error si no hay texto en el Portapapeles.


Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: ClipboardProxy (proporciona acceso a Clipboard)
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí
Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web No
Permisos
No se requiere ningún permiso.
Vea también
Tareas
Cómo: Leer el Portapapeles en Visual Basic
Referencia
My.Computer.Clipboard (Objeto)
My.Computer.Clipboard.ContainsText (Método)
My.Computer.Clipboard.SetText (Método)
System.Windows.Forms.TextDataFormat
System.Windows.Forms.Clipboard.GetText
Referencia del lenguaje Visual Basic

My.Computer.Clipboard.SetAudio (Método)
Escribe datos de sonido en el Portapapeles.

' Usage
My.Computer.Clipboard.SetAudio(audioBytes)
My.Computer.Clipboard.SetAudio(audioStream)
' Declaration
Public Sub SetAudio( _
ByVal audioBytes As Byte() _
)
' -or-
Public Sub SetAudio( _
ByVal audioStream As System.IO.Stream _
)

Parámetros
audioBytes
Matriz de tipo Byte. Datos de sonido que se escriben en el Portapapeles. Requerido.
audioStream
Stream. Datos de sonido que se escriben en el Portapapeles. Requerido.
Excepciones
Este método no produce ninguna excepción.
Comentarios
Este método se puede utilizar para escribir los datos de sonido como una matriz de bytes o una secuencia de audio.
Nota de seguridad
Como otros usuarios pueden tener acceso al Portapapeles, no se debe utilizar para almacenar información confidencial, com
o contraseñas o datos reservados.

Tareas
La tabla siguiente muestra una lista de ejemplos de tareas en las que está implicado el método
My.Computer.Clipboard.SetAudio.
Para Vea
Escribir datos de sonido en el Portapapeles Cómo: Guardar una secuencia de audio en el Portapapeles en Visual Basic
Ejemplo
En este ejemplo se crea la matriz de bytes musicReader, se lee en ella el archivo cool.wav y, a continuación, se escribe en el
Portapapeles.
VB
Dim musicReader As Byte()
musicReader = My.Computer.FileSystem.ReadAllBytes("cool.wav")
My.Computer.Clipboard.SetAudio(musicReader)

Reemplace cool.wav con el nombre y la ruta de acceso del archivo que desea leer.
Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: ClipboardProxy (proporciona acceso a Clipboard)
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web No
Permisos
No se requiere ningún permiso.
Vea también
Referencia
My.Computer.Clipboard (Objeto)
My.Computer.Clipboard.ContainsAudio (Método)
My.Computer.Clipboard.GetAudioStream (Método)
System.IO.Stream
System.Windows.Forms.Clipboard.SetAudio
Otros recursos
Almacenar y leer datos en el Portapapeles
Referencia del lenguaje Visual Basic

My.Computer.Clipboard.SetData (Método)
Escribe datos con un formato personalizado en el Portapapeles.

' Usage
My.Computer.Clipboard.SetData(format ,data)
' Declaration
Public Sub SetData( _
ByVal format As String, _
ByVal data As Object _
)

Parámetros
format
String. Formato de datos. Requerido.
data
Object. Objeto de datos que se escribe en el Portapapeles. Requerido.
Excepciones
Este método no produce excepciones.
Comentarios
Nota de seguridad
Como otros usuarios pueden tener acceso al Portapapeles, no se debe utilizar para almacenar información confidencial, com
o contraseñas o datos reservados.

Ejemplo
En este ejemplo se escribe DataObject dataChunk en el Portapapeles en el formato specialFormat personalizado.
VB
My.Computer.Clipboard.SetData("specialFormat", dataChunk)

Este ejemplo depende de la existencia del formato de datos personalizado specialFormat.


Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: ClipboardProxy (proporciona acceso a Clipboard)
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No


Servicio de Windows Sí

Sitio Web No
Permisos
No se requiere ningún permiso.
Vea también
Referencia
My.Computer.Clipboard (Objeto)
My.Computer.Clipboard.ContainsData (Método)
My.Computer.Clipboard.GetData (Método)
My.Computer.Clipboard.GetDataObject (Método)
My.Computer.Clipboard.SetDataObject (Método)
SetData
Otros recursos
Almacenar y leer datos en el Portapapeles
Referencia del lenguaje Visual Basic

My.Computer.Clipboard.SetDataObject (Método)
Escribe un objeto DataObject en el Portapapeles.

' Usage
My.Computer.Clipboard.SetDataObject(data)
' Declaration
Public Sub SetDataObject( _
ByVal data As System.Windows.Forms.DataObject _
)

Parámetros
data
DataObject. Objeto de datos que se escribe en el Portapapeles. Requerido.
Comentarios
Éste es un miembro avanzado; no aparece en IntelliSense a menos que seleccione la ficha Todas.
Nota de seguridad
Como otros usuarios pueden tener acceso al Portapapeles, no se debe utilizar para almacenar información confidencial, com
o contraseñas o datos reservados.

Ejemplo
Este ejemplo escribe el objeto de datos dataChunk en el Portapapeles.
VB
My.Computer.Clipboard.SetDataObject(dataChunk)

Este ejemplo depende de la existencia del objeto de datos dataChunk.


Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: ClipboardProxy (proporciona acceso a Clipboard)
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web No
Permisos
No se requiere ningún permiso.
Vea también
Referencia
My.Computer.Clipboard (Objeto)
My.Computer.Clipboard.ContainsData (Método)
My.Computer.Clipboard.GetData (Método)
My.Computer.Clipboard.GetDataObject (Método)
My.Computer.Clipboard.SetData (Método)
SetDataObject
Otros recursos
Almacenar y leer datos en el Portapapeles
Referencia del lenguaje Visual Basic

My.Computer.Clipboard.SetFileDropList (Método)
Escribe una colección de cadenas que representan rutas de acceso del archivo al Portapapeles.

' Usage
My.Computer.Clipboard.SetFileDropList(filePaths)
' Declaration
Public Sub SetFileDropList( _
ByVal filePaths As System.Collections.Specialized.StringCollection _
)

Parámetros
filePaths
StringCollection. Lista de nombres de archivo. Requerido.
Comentarios
Una lista de colocación de archivos es una colección de cadenas que representan nombres de archivo.
Nota de seguridad
Como otros usuarios pueden tener acceso al Portapapeles, no se debe utilizar para almacenar información confidencial, com
o contraseñas o datos reservados.

Ejemplo
Este ejemplo obtiene la colección de nombres de archivo de MyDocuments, la convierte en una lista de colocación de
archivos y la escribe en el Portapapeles.
VB
Dim list As System.Collections.ObjectModel.ReadOnlyCollection(Of String)
list = My.Computer.FileSystem.GetFiles _
(My.Computer.FileSystem.SpecialDirectories.MyDocuments)
Dim listReader As New System.Collections.Specialized.StringCollection
For Each item As String In list
listReader.Add(item)
Next
My.Computer.Clipboard.SetFileDropList(listReader)

Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: ClipboardProxy (proporciona acceso a Clipboard)
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No


Servicio de Windows Sí

Sitio Web No
Permisos
No se requiere ningún permiso.
Vea también
Referencia
My.Computer.Clipboard (Objeto)
My.Computer.Clipboard.ContainsFileDropList (Método)
My.Computer.Clipboard.GetFileDropList (Método)
System.Collections.Specialized.StringCollection
SetFileDropList
Otros recursos
Almacenar y leer datos en el Portapapeles
Referencia del lenguaje Visual Basic

My.Computer.Clipboard.SetImage (Método)
Escribe una imagen en el Portapapeles.

' Usage
My.Computer.Clipboard.SetImage(image)
' Declaration
Public Sub SetImage( _
ByVal image As System.Drawing.Image _
)

Parámetros
image
Image. Imagen que se va a escribir. Requerido.
Comentarios
Nota de seguridad
Como otros usuarios pueden tener acceso al Portapapeles, no se debe utilizar para almacenar información confidencial, com
o contraseñas o datos reservados.

Ejemplo
Este ejemplo escribe la imagen coolPicture en el Portapapeles.
VB
My.Computer.Clipboard.SetImage(coolPicture)

Este ejemplo depende de la existencia de la imagen coolPicture.


Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: ClipboardProxy (proporciona acceso a Clipboard)
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web No
Permisos
No se requiere ningún permiso.
Vea también
Tareas
Cómo: Recuperar una imagen del Portapapeles en Visual Basic
Referencia
My.Computer.Clipboard (Objeto)
My.Computer.Clipboard.ContainsImage (Método)
My.Computer.Clipboard.GetImage (Método)
System.Drawing.Image
System.Windows.Forms.Clipboard.SetImage(System.Drawing.Image)
Otros recursos
Almacenar y leer datos en el Portapapeles
Referencia del lenguaje Visual Basic

My.Computer.Clipboard.SetText (Método)
Escribe texto en el Portapapeles.

' Usage
My.Computer.Clipboard.SetText(text)
My.Computer.Clipboard.SetText(text ,format)
' Declaration
Public Sub SetText( _
ByVal text As String _
)
' -or-
Public Sub SetText( _
ByVal text As String, _
ByVal format As System.Windows.Forms.TextDataFormat _
)

Parámetros
text
String. Texto que se va a escribir. Requerido.
format
TextDataFormat. Formato que se va a utilizar al escribir texto. El valor predeterminado es UnicodeText. Requerido.
Excepciones
Las condiciones siguientes pueden producir una excepción:
text es una cadena vacía (ArgumentException).
text es Nothing (ArgumentNullException).
Comentarios
Los formatos posibles son CommaSeparatedValue, Html, Rtf y UnicodeText.
El método requiere AllClipboard.
No se conservan formatos anteriores del Portapapeles.
Nota de seguridad
Como otros usuarios pueden tener acceso al Portapapeles, no se debe utilizar para almacenar información confidencial, com
o contraseñas o datos reservados.

Tareas
La tabla siguiente muestra una lista de ejemplos de tareas en las que está implicado el método
My.Computer.Clipboard.SetText.
Para Vea
Escribir texto en el Portapapeles Cómo: Escribir en el Portapapeles en Visual Basic
Ejemplo
Este ejemplo escribe la cadena This is a test string. en el Portapapeles.

VB
My.Computer.Clipboard.SetText("This is a test string.")

Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: ClipboardProxy (proporciona acceso a Clipboard)
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web No
Permisos
No se requiere ningún permiso.
Vea también
Referencia
My.Computer.Clipboard (Objeto)
My.Computer.Clipboard.ContainsText (Método)
My.Computer.Clipboard.GetText (Método)
System.Windows.Forms.TextDataFormat
System.Windows.Forms.Clipboard.SetText
Otros recursos
Almacenar y leer datos en el Portapapeles
Referencia del lenguaje Visual Basic

My.Computer.Clock (Objeto)
Proporciona propiedades para tener acceso a la hora local actual y hora universal coordinada (UTC) (equivalente a la hora del
meridiano de Greenwich) del reloj del sistema.
Comentarios
El objeto My.Computer.Clock proporciona las propiedades para conocer la hora local actual para el equipo y la hora UTC.
También expone el recuento al milisegundo del sincronizador del sistema del equipo.
Ejemplo
En este ejemplo se utiliza la propiedad My.Computer.Clock.LocalTime para mostrar la hora local del equipo donde se
ejecuta el código.
VB
MsgBox("Current local time: " & My.Computer.Clock.LocalTime)

Requisitos
Espacio de nombres: Microsoft.VisualBasic.Devices
Clase: Clock
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Vea también
Referencia
My.Computer.Clock (Miembros del objeto)
My.Computer (Objeto)
Microsoft.VisualBasic.Devices.Clock
Referencia del lenguaje Visual Basic

My.Computer.Clock (Miembros del objeto)


El My.Computer.Clock (Objeto) proporciona propiedades para tener acceso a la hora local actual y la hora universal coordinada
(UTC) (equivalente a la hora del meridiano de Greenwich) del reloj del sistema.
Propiedades
Propieda Descripción
d
GmtTime Obtiene un objeto Date que contiene la fecha y hora locales actuales de este equipo, expresadas como hora UTC (
GMT).

LocalTime Obtiene un objeto Date que contiene la fecha y hora local actual de este equipo.

TickCount Obtiene el recuento de milisegundos del temporizador del sistema del equipo.
Vea también
Referencia
My.Computer.Clock (Objeto)
Referencia del lenguaje Visual Basic

My.Computer.Clock.GmtTime (Propiedad)
Obtiene un objeto Date que contiene la fecha y hora locales actuales del equipo, expresadas como hora UTC (GMT).

' Usage
Dim value As Date = My.Computer.Clock.GmtTime
' Declaration
Public ReadOnly Property GmtTime As Date

Valor devuelto
Un objeto Date que contiene la fecha y la hora actuales expresadas como hora UTC (GMT).
Comentarios
La propiedad My.Computer.Clock.GmtTime tiene el mismo comportamiento que la propiedad System.DateTime.UtcNow.
Ejemplo
Este ejemplo utiliza la propiedad My.Computer.Clock.GmtTime para mostrar la hora GMT del equipo en que se ejecuta el
código.
VB
MsgBox("Current GMT time: " & My.Computer.Clock.GmtTime)

Requisitos
Espacio de nombres: Microsoft.VisualBasic.Devices
Clase: Clock
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web Sí

Servicio de Windows Sí

Sitio Web Sí
Permisos
No se requiere ningún permiso.
Vea también
Referencia
My.Computer.Clock (Objeto)
My.Computer.Clock.LocalTime (Propiedad)
System.DateTime.UtcNow
Microsoft.VisualBasic.Devices.Clock.GmtTime
Referencia del lenguaje Visual Basic

My.Computer.Clock.LocalTime (Propiedad)
Obtiene un objeto Date que contiene la fecha y hora local actual de este equipo.

' Usage
Dim value As Date = My.Computer.Clock.LocalTime
' Declaration
Public ReadOnly Property LocalTime As Date

Valor devuelto
Un objeto Date que contiene la fecha y hora local actual.
Comentarios
La propiedad My.Computer.Clock.LocalTime tiene el mismo comportamiento que la propiedad System.DateTime.Now.
Ejemplo
Este ejemplo utiliza la propiedad My.Computer.Clock.LocalTime para mostrar la hora local del equipo en que se ejecuta el
código.
VB
MsgBox("Current local time: " & My.Computer.Clock.LocalTime)

Requisitos
Espacio de nombres: Microsoft.VisualBasic.Devices
Clase: Clock
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web Sí

Servicio de Windows Sí

Sitio Web Sí
Permisos
No se requiere ningún permiso.
Vea también
Referencia
My.Computer.Clock (Objeto)
My.Computer.Clock.GmtTime (Propiedad)
System.DateTime.Now
Microsoft.VisualBasic.Devices.Clock.LocalTime
Referencia del lenguaje Visual Basic

My.Computer.Clock.TickCount (Propiedad)
Obtiene el recuento de milisegundos del temporizador del sistema del equipo.

' Usage
Dim value As Integer = My.Computer.Clock.TickCount
' Declaration
Public ReadOnly Property TickCount As Integer

Valor devuelto
Integer que contiene el recuento de milisegundos del temporizador del sistema del equipo.
Comentarios
La propiedad TickCount proporciona acceso al temporizador del sistema del equipo, que se ejecuta cuando el equipo está
activo. La resolución del temporizador no es menor de 500 milisegundos.
Puede utilizar esta propiedad para hacer que el comportamiento de su aplicación dependa del tiempo que lleva en ejecución, o
puede usarla para etiquetar eventos, siendo ambas actividades independientes del reloj del equipo.
Precaución
Cuando el valor de la propiedad TickCount alcanza el valor entero máximo (MaxValue), pasa al valor entero mínimo
(MinValue), un número negativo, y continúa incrementándose.

Si el equipo se ejecuta continuamente, TickCount se incrementa desde el cero al valor entero máximo en aproximadamente
24,9 días.
La propiedad TickCount sólo se incrementa cuando el sistema operativo está en ejecución; efectúa una pausa cuando el
equipo entra en determinados modos de ahorro de energía, como suspensión o hibernación. La propiedad TickCount no está
relacionada con la configuración del reloj del equipo.
Utilice la My.Computer.Clock.LocalTime (Propiedad) o la My.Computer.Clock.GmtTime (Propiedad) para obtener la fecha y hora
locales actuales de este equipo.
La propiedad My.Computer.Clock.TickCount tiene el mismo comportamiento que la propiedad
System.Environment.TickCount.
Ejemplo
El ejemplo siguiente utiliza la propiedad My.Computer.Clock.TickCount para ejecutar una tarea en un bucle durante un
número determinado de segundos, incluso si cambia la hora del sistema del equipo mientras se ejecuta.
VB
Public Sub LoopTask(ByVal secondsToRun As Integer)
Dim startTicks As Integer = My.Computer.Clock.TickCount
Do While IsTimeUp(startTicks, secondsToRun)
' Code to run for at least secondsToRun seconds goes here.
Loop
End Sub

Private Function IsTimeUp( _


ByVal startTicks As Integer, _
ByVal seconds As Integer _
) As Boolean
' This function throws an overflow exception if the
' tick count difference is greater than 2,147,483,647,
' about 24 days for My.Computer.Clock.TickCount.

' Use UInteger to simplify the code for roll over.


Dim uStart As UInteger = _
CUInt(CLng(startTicks) - Integer.MinValue)
Dim uCurrent As UInteger = _
CUInt(CLng(My.Computer.Clock.TickCount) - Integer.MinValue)
' Calculate the tick count difference.
Dim tickCountDifference As UInteger
If uStart <= uCurrent Then
tickCountDifference = uCurrent - uStart
Else
' Tick count rolled over.
tickCountDifference = UInteger.MaxValue - (uStart - uCurrent)
End If

' Convert seconds to milliseconds and compare.


Return CInt(tickCountDifference) < (seconds * 1000)
End Function

Requisitos
Espacio de nombres: Microsoft.VisualBasic.Devices
Clase: Clock
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web Sí

Servicio de Windows Sí

Sitio Web Sí
Permisos
No se requiere ningún permiso.
Vea también
Referencia
My.Computer.Clock (Objeto)
System.Environment.TickCount
Microsoft.VisualBasic.Devices.Clock.TickCount
Referencia del lenguaje Visual Basic

My.Computer.FileSystem (Objeto)
Proporciona propiedades y métodos para trabajar con unidades, archivos y directorios.
Tareas
La tabla siguiente muestra ejemplos de tareas que implican al objeto My.Computer.FileSystem.
Para Vea
Leer de un archivo de texto Cómo: Leer archivos de texto en Visual Basic

Leer un archivo de texto delimitado Cómo: Leer archivos de texto delimitado por comas en Visual Basic

Leer un archivo de texto de ancho fijo Cómo: Leer archivos de texto de ancho fijo en Visual Basic

Leer un archivo de texto con varios formatos Cómo: Leer archivos de texto con varios formatos en Visual Basic

Leer de un archivo binario. Cómo: Leer archivos binarios en Visual Basic

Leer de archivos de texto en el directorio My Cómo: Leer archivos de texto existentes en Mis documentos (Visual Basic)
Documents

Leer de un archivo de texto con un Cómo: Leer texto de archivos con Streamreader (Visual Basic)
StreamReader

Escribir en un archivo de texto Cómo: Escribir texto en archivos en Visual Basic

Anexar a un archivo de texto Cómo: Anexar a archivos de texto en Visual Basic

Escribir en un archivo binario Cómo: Escribir en archivos binarios en Visual Basic

Escribir en los archivos de texto situados en e Cómo: Escribir texto en archivos del directorio Mis documentos en Visual Basic
l directorio MyDocuments

Escribir en un archivo de texto con un Strea Cómo: Escribir texto en archivos con un objeto StreamWriter en Visual Basic
mWriter

Copiar los archivos con un modelo concreto Cómo: Copiar archivos con un modelo específico en un directorio en Visual Basic

Copiar un archivo en el mismo directorio Cómo: Crear una copia de un archivo en el mismo directorio en Visual Basic

Copiar un archivo en un directorio diferente Cómo: Crear una copia de un archivo en un directorio diferente en Visual Basic

Crear un archivo Cómo: Crear un archivo en Visual Basic

Eliminar un archivo Cómo: Eliminar un archivo en Visual Basic

Eliminar todos los archivos de un directorio Cómo: Eliminar todos los archivos de un directorio en Visual Basic

Buscar archivos con un modelo concreto Cómo: Buscar archivos con un modelo específico en Visual Basic

Mover un archivo Cómo: Mover un archivo en Visual Basic

Mover una colección de archivos Cómo: Mover una colección de archivos en Visual Basic
Cambiar el nombre de un archivo Cómo: Cambiar el nombre de un archivo en Visual Basic

Cambiar el nombre de un directorio Cómo: Cambiar el nombre de un directorio en Visual Basic

Copiar un directorio en otro directorio Cómo: Copiar un directorio en otro directorio en Visual Basic

Crear un directorio Cómo: Crear un directorio en Visual Basic

Eliminar un directorio Cómo: Eliminar un directorio en Visual Basic

Buscar subdirectorios que tengan un modelo Cómo: Buscar subdirectorios con un modelo específico en Visual Basic
concreto

Obtener la colección de archivos contenidos Cómo: Obtener la colección de archivos de un directorio en Visual Basic
en un directorio

Determinar cuántos archivos hay en un direc Cómo: Determinar el número de archivos de un directorio en Visual Basic
torio

Mover un directorio Cómo: Mover un directorio en Visual Basic

Mover el contenido de un directorio Cómo: Mover el contenido de un directorio en Visual Basic

Leer del directorio MyDocuments Cómo: Recuperar el contenido del directorio Mis documentos en Visual Basic

Analizar una ruta de acceso a archivo Cómo: Analizar rutas de acceso a archivos en Visual Basic
Ejemplo
Este ejemplo realiza una comprobación para determinar si existe la carpeta C:\backup\logs y revisa sus propiedades.
VB
Dim logInfo As System.IO.DirectoryInfo
If My.Computer.FileSystem.DirectoryExists("C:\backup\logs") Then
logInfo = My.Computer.FileSystem.GetDirectoryInfo _
("C:\backup\logs")
End If

Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: FileSystemProxy (proporciona acceso a FileSystem)
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Vea también
Referencia
My.Computer.FileSystem (Miembros del objeto)
My.Computer.FileSystem.SpecialDirectories (Objeto)
My.Computer (Objeto)
Microsoft.VisualBasic.FileIO.FileSystem
Referencia del lenguaje Visual Basic

My.Computer.FileSystem (Miembros del objeto)


My.Computer.FileSystem (Objeto) proporciona propiedades y métodos para trabajar con unidades, archivos y directorios.
Propiedades
Propiedad Descripción
CurrentDirectory Obtiene el directorio actual.

Drives Obtiene información sobre las unidades.

SpecialDirectories Devuelve My.Computer.FileSystem.SpecialDirectories (Objeto), que se puede utilizar para tener acceso a los
directorios especiales, como Temp o MyDocuments.
Métodos
Método Descripción
CombinePath Devuelve una ruta de acceso combinada con formato correcto como un objeto
String.

CopyDirectory Copia un directorio.

CopyFile Copia un archivo.

CreateDirectory Crea un directorio.

DeleteDirectory Elimina un directorio.

DeleteFile Elimina un archivo.

DirectoryExists Devuelve un valor de tipo Boolean que indica si un directorio existe.

FileExists Devuelve un valor de tipo Boolean que indica si un archivo existe.

My.Computer.FileSystem.FindInFiles (Método) Devuelve una colección de cadenas de sólo lectura que representa los nombres
de los archivos que contienen el texto especificado.

GetDirectories Devuelve una colección de objetos String que representa los nombres de las ru
tas de acceso de los subdirectorios de un directorio.

GetDirectoryInfo Devuelve un objeto DirectoryInfo correspondiente a la ruta de acceso especifica


da.

GetDriveInfo Devuelve un objeto DriveInfo correspondiente a la ruta de acceso especificada.

GetFileInfo Devuelve un objeto FileInfo correspondiente a la ruta de acceso especificada.

GetFiles Devuelve una colección de objetos String de sólo lectura que representa los no
mbres de los archivos de un directorio.

GetParentPath Devuelve un objeto String que representa la ruta de acceso absoluta del eleme
nto primario de la ruta de acceso proporcionada.

MoveDirectory Mueve un directorio.


MoveFile Mueve un archivo.

OpenTextFieldParser Abre TextFieldParser.


OpenTextFileReader Abre TextReader.

OpenTextFileWriter Abre TextWriter.

ReadAllBytes Lee de un archivo binario.

ReadAllText Lee de un archivo de texto.

RenameDirectory Cambia el nombre de un directorio.

RenameFile Cambia el nombre de un archivo.

WriteAllBytes Escribe en un archivo binario.

WriteAllText Escribe en un archivo de texto.


Vea también
Tareas
Tutorial: Manipular archivos y directorios en Visual Basic
Referencia
My.Computer.FileSystem (Objeto)
Conceptos
Analizar archivos de texto con el objeto TextFieldParser
Otros recursos
Leer archivos en Visual Basic
Escribir en archivos en Visual Basic
Crear, eliminar y mover archivos y directorios en Visual Basic
Propiedades de archivos, directorios y unidades en Visual Basic
Referencia del lenguaje Visual Basic

My.Computer.FileSystem.CombinePath (Método)
Combina dos rutas de acceso y devuelve una ruta de acceso con formato correcto.

' Usage
Dim value As String = My.Computer.FileSystem.CombinePath(baseDirectory ,relativePath)
' Declaration
Public Function CombinePath( _
ByVal baseDirectory As String, _
ByVal relativePath As String _
) As String

Parámetros
baseDirectory
String. Primera ruta de acceso que combinar. Obligatorio.
relativePath
String. Segunda ruta de acceso que combinar. Obligatorio.
Valor devuelto
String.
Excepciones
La siguiente condición puede crear una excepción:
La ruta de acceso es incorrecta (ArgumentException).
Comentarios
Este método recorta el exceso de caracteres de barra diagonal para crear una ruta de acceso con formato correcto.
Tareas
La tabla siguiente muestra una lista de ejemplos de tareas en las que está implicado el método
My.Computer.FileSystem.CombinePath.
Para Vea
Combinar una ruta de acceso de directorio y un nombre de archivo Cómo: Analizar rutas de acceso a archivos en Visual Basic
Ejemplo
Este ejemplo combina una ruta de acceso de directorio y un nombre de archivo para crear una ruta de acceso con el formato
correcto.
VB
Dim fullPath As String
fullPath = My.Computer.FileSystem.CombinePath _
("C:\Documents and Settings\All Users\Documents\My Pictures", "picture.jpg")

Este ejemplo combina dos rutas de acceso para crear una ruta de acceso con formato correcto.
VB
Dim fullPath As String
fullPath = My.Computer.FileSystem.CombinePath _
("C:\Dir1\Dir2\Dir3", "..\Dir4\Dir5\File.txt")

Este ejemplo devuelve C:\Dir1\Dir2\Dir4\Dir5\File.txt.


Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: FileSystemProxy (proporciona acceso a FileSystem)
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web Sí

Servicio de Windows Sí

Sitio Web Sí
Permisos
El permiso siguiente puede ser necesario:
Permiso Descripción
FileIOPermission Controla la capacidad de tener acceso a archivos y carpetas. Enumeración asociada: Unrestricted.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Referencia
My.Computer.FileSystem (Objeto)
My.Computer.FileSystem.GetParentPath (Método)
CombinePath
Referencia del lenguaje Visual Basic

My.Computer.FileSystem.CopyDirectory (Método)
Copia un directorio en otro directorio.

' Usage
My.Computer.FileSystem.CopyDirectory(sourceDirectoryName ,destinationDirectoryName)
My.Computer.FileSystem.CopyDirectory(sourceDirectoryName ,destinationDirectoryName ,overwri
te)
My.Computer.FileSystem.CopyDirectory(sourceDirectoryName ,destinationDirectoryName ,showUI)
My.Computer.FileSystem.CopyDirectory(sourceDirectoryName ,destinationDirectoryName ,showUI
,onUserCancel)
' Declaration
Public Sub CopyDirectory( _
ByVal sourceDirectoryName As String, _
ByVal destinationDirectoryName As String _
)
' -or-
Public Sub CopyDirectory( _
ByVal sourceDirectoryName As String, _
ByVal destinationDirectoryName As String, _
ByVal overwrite As Boolean _
)
' -or-
Public Sub CopyDirectory( _
ByVal sourceDirectoryName As String, _
ByVal destinationDirectoryName As String, _
ByVal showUI As UIOption _
)
' -or-
Public Sub CopyDirectory( _
ByVal sourceDirectoryName As String, _
ByVal destinationDirectoryName As String, _
ByVal showUI As UIOption, _
ByVal onUserCancel As UICancelOption _
)

Parámetros
sourceDirectoryName
String. Directorio que se va a copiar. Obligatorio.
destinationDirectoryName
String. Ubicación donde se debe copiar el directorio. Obligatorio.
overwrite
Boolean. Si deben sobrescribirse o no los archivos existentes. El valor predeterminado es False. Obligatorio.
showUI
UIOption. Indica si se debe hacer un seguimiento visual del progreso de la operación. El valor predeterminado es
UIOption.OnlyErrorDialogs. Obligatorio.
onUserCancel
UICancelOption. Especifica qué se debe hacer si el usuario hace clic en Cancelar durante la operación. El valor
predeterminado es ThrowException. Obligatorio.
Excepciones
Las condiciones siguientes pueden producir una excepción:
El nuevo nombre especificado para el directorio contiene dos puntos (:) o una barra diagonal (\ o /) (ArgumentException).
La ruta de acceso no es válida por una de las razones siguientes: es una cadena de longitud cero; sólo contiene un
espacio en blanco; contiene caracteres no válidos o es una ruta de acceso de dispositivo (empieza por \\.\)
(ArgumentException).
La ruta de acceso no es válida porque es Nothing (ArgumentNullException).
destinationDirectoryName es Nothing o una cadena vacía (ArgumentNullException).
El directorio de origen no existe (DirectoryNotFoundException).
El directorio de origen es un directorio raíz (IOException).
Los puntos de la ruta de acceso señalan a un archivo existente (IOException).
La ruta de acceso de origen y la ruta de acceso de destino son la misma (IOException).
ShowUI se establece en UIOption.AllDialogs y el usuario cancela la operación o no se pueden copiar uno o más
archivos en el directorio (OperationCanceledException).
La operación es cíclica (InvalidOperationException).
La ruta de acceso contiene dos puntos (:) (NotSupportedException).
La ruta supera la longitud máxima definida por el sistema (PathTooLongException).
Un nombre de archivo o de carpeta en la ruta de acceso contiene dos puntos (:) o está en un formato no válido
(NotSupportedException).
El usuario no tiene los permisos necesarios para ver la ruta de acceso (SecurityException).
Existe un archivo de destino pero no se puede obtener acceso a él (UnauthorizedAccessException).
Comentarios
Este método copia el contenido del directorio así como el propio directorio. Si el directorio de destino no existe, se crea. Si
existe un directorio con el mismo nombre en la ubicación de destino, se combina el contenido de los dos directorios. Puede
especificar un nuevo nombre para el directorio durante la operación.
Cuando se copian archivos dentro de un directorio, se pueden producir excepciones producidas por un archivo concreto, como
un archivo que existe durante una combinación mientras se establece overwrite en False. Cuando se producen dichas
excepciones, se consolidan en una excepción única cuya propiedad Data contiene entradas en forma de IDictionary, donde la
ruta de acceso del archivo o del directorio es la clave y el mensaje de excepción concreto está contenido en el valor
correspondiente. Utilice For…Each para enumerar mediante las entradas.
Tareas
La tabla siguiente muestra una lista de ejemplos de tareas en las que está implicado el método
My.Computer.FileSystem.CopyDirectory.
Para Vea
Copiar un directorio. Cómo: Copiar un directorio en otro directorio en Visual Basic
Ejemplo
En el siguiente ejemplo se copia el directorio TestDirectory1 en TestDirectory2, sobrescribiendo los archivos existentes.
VB
My.Computer.FileSystem.CopyDirectory("C:\TestDirectory1", "C:\TestDirectory2", True)

Reemplace C:\TestDirectory1 y C:\TestDirectory2 con la ruta de acceso y el nombre del directorio que desea copiar y la
ubicación donde desea copiarlo.
Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: FileSystemProxy (proporciona acceso a FileSystem)
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí
Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web Sí

Servicio de Windows Sí

Sitio Web Sí
Permisos
Los permisos siguientes pueden ser necesarios:
Permiso Descripción
FileIOPermission Controla la capacidad de tener acceso a archivos y carpetas. Enumeración asociada: Unrestricted.

UIPermission Controla los permisos relacionados con interfaces de usuario y el Portapapeles. Enumeración asociada:
SafeSubWindows.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Tareas
Cómo: Obtener la colección de archivos de un directorio en Visual Basic
Cómo: Mover un directorio en Visual Basic
Cómo: Mover el contenido de un directorio en Visual Basic
Cómo: Analizar rutas de acceso a archivos en Visual Basic
Cómo: Determinar la ruta de acceso absoluta de un archivo en Visual Basic
Cómo: Determinar si existe un directorio en Visual Basic
Referencia
My.Computer.FileSystem (Objeto)
UICancelOption (Enumeración)
Referencia del lenguaje Visual Basic

My.Computer.FileSystem.CopyFile (Método)
Copia un archivo en una nueva ubicación.

' Usage
My.Computer.FileSystem.CopyFile(sourceFileName ,destinationFileName)
My.Computer.FileSystem.CopyFile(sourceFileName ,destinationFileName ,overwrite)
My.Computer.FileSystem.CopyFile(sourceFileName ,destinationFileName ,showUI)
My.Computer.FileSystem.CopyFile(sourceFileName ,destinationFileName ,showUI ,onUserCancel)
' Declaration
Public Sub CopyFile( _
ByVal sourceFileName As String, _
ByVal destinationFileName As String _
)
' -or-
Public Sub CopyFile( _
ByVal sourceFileName As String, _
ByVal destinationFileName As String, _
ByVal overwrite As Boolean _
)
' -or-
Public Sub CopyFile( _
ByVal sourceFileName As String, _
ByVal destinationFileName As String, _
ByVal showUI As UIOption _
)
' -or-
Public Sub CopyFile( _
ByVal sourceFileName As String, _
ByVal destinationFileName As String, _
ByVal showUI As UIOption, _
ByVal onUserCancel As UICancelOption _
)

Parámetros
sourceFileName
String. Archivo que se va a copiar. Requerido.
destinationFileName
String. Ubicación donde debe copiarse el archivo. Requerido.
overwrite
Boolean. Indica si se deben sobrescribir los archivos existentes. El valor predeterminado es False. Obligatorio.
showUI
UIOption. Indica si se debe hacer un seguimiento visual del progreso de la operación. El valor predeterminado es
UIOption.OnlyErrorDialogs. Obligatorio.
onUserCancel
UICancelOption. Especifica qué se debe hacer si el usuario hace clic en Cancelar durante la operación. El valor
predeterminado es ThrowException. Obligatorio.
Excepciones
Las condiciones siguientes pueden hacer que se produzca una excepción:
La ruta de acceso no es válida por una de las razones siguientes: es una cadena de longitud cero; sólo contiene un
espacio en blanco; contiene caracteres no válidos o es una ruta de acceso de dispositivo (empieza por \\.\)
(ArgumentException).
El sistema no pudo recuperar la ruta de acceso absoluta (ArgumentException).
destinationFileName contiene información de la ruta de acceso (ArgumentException).
La ruta de acceso no es válida porque es Nothing (ArgumentNullException).
destinationFileName es Nothing o una cadena vacía (ArgumentNullException).
El archivo de código fuente no es válido o no existe (FileNotFoundException).
La ruta de acceso combinada apunta a un directorio existente (IOException).
El archivo de destino existe y overwrite está establecido en False (IOException).
El usuario no tiene permisos suficientes para el acceso al archivo (IOException).
Hay un archivo en uso con el mismo nombre en el directorio de destino (IOException).
Un nombre de archivo o de directorio de la ruta de acceso contiene un signo de dos puntos (:) o tiene un formato no
válido (NotSupportedException).
UICancelOption está establecido en ThrowException y el usuario ha cancelado la operación
(OperationCanceledException).
UICancelOption está establecido en ThrowException y se produce un error de E/S no especificado
(OperationCanceledException).
La ruta supera la longitud máxima definida por el sistema (PathTooLongException).
El usuario no tiene los permisos requeridos (UnauthorizedAccessException).
El usuario no tiene los permisos necesarios para ver la ruta de acceso (SecurityException).
Comentarios
CopyFile no conserva las entradas ACE (entradas de control de acceso). El archivo creado hereda las entradas ACE
predeterminadas del directorio donde se crea.
Tareas
La tabla siguiente muestra una lista de ejemplos de tareas en las que está implicado el método
My.Computer.FileSystem.CopyFile.
Para Vea
Copiar un archivo en el mismo directorio. Cómo: Crear una copia de un archivo en el mismo directorio en Visual Basic

Copiar un archivo en un directorio diferente. Cómo: Crear una copia de un archivo en un directorio diferente en Visual Basic
Ejemplo
En este ejemplo se copia el archivo Test.txt en el directorio TestFiles2 sin sobrescribir los archivos existentes.
VB
My.Computer.FileSystem.CopyFile _
("C:\UserFiles\TestFiles\test.txt", _
"C:\UserFiles\TestFiles2")

Reemplace las rutas de acceso del archivo con las rutas de acceso que desea utilizar en el código.
En este ejemplo se copia el archivo Test.txt en el directorio TestFiles2 y se le denomina NewFile.txt.
VB
My.Computer.FileSystem.CopyFile _
("C:\UserFiles\TestFiles\test.txt", _
"C:\UserFiles\TestFiles2", "NewFile.txt", FileIO.UICancelOption.DoNothing)

Reemplace las rutas de acceso del archivo con las rutas de acceso que desea utilizar en el código.
Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: FileSystemProxy (proporciona acceso a FileSystem)
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web Sí

Servicio de Windows Sí

Sitio Web Sí
Permisos
Los permisos siguientes pueden ser necesarios:
Permiso Descripción
EnvironmentPermission Controla la capacidad para tener acceso a todas las variables de entorno. Enumeración asociada:
Unrestricted.

FileIOPermission Controla la capacidad de tener acceso a archivos y carpetas. Enumeración asociada: Unrestricted.

RegistryPermission Controla la capacidad para tener acceso a las variables de Registro. Enumeración asociada: Unrestrict
ed.

UIPermission Controla los permisos relacionados con interfaces de usuario y el Portapapeles. Enumeración asociad
a: SafeSubWindows.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Tareas
Cómo: Copiar archivos con un modelo específico en un directorio en Visual Basic
Cómo: Crear una copia de un archivo en el mismo directorio en Visual Basic
Cómo: Copiar un directorio en otro directorio en Visual Basic
Cómo: Cambiar el nombre de un archivo en Visual Basic
Referencia
My.Computer.FileSystem (Objeto)
UICancelOption (Enumeración)
Referencia del lenguaje Visual Basic

My.Computer.FileSystem.CreateDirectory (Método)
Crea un directorio.

' Usage
My.Computer.FileSystem.CreateDirectory(directory)
' Declaration
Public Sub CreateDirectory( _
ByVal directory As String _
)

Parámetros
directory
String. Nombre y ubicación del directorio. Obligatorio.
Excepciones
Las condiciones siguientes pueden producir una excepción:
El nombre de directorio es incorrecto. Por ejemplo, contiene caracteres no válidos o está compuesto sólo por espacios en
blanco (ArgumentException (Clase)).
El directorio principal del directorio que se va a crear es de sólo lectura (IOException (Clase)).
El nombre del directorio es Nothing (ArgumentNullException (Clase)).
El nombre del directorio es demasiado largo (PathTooLongException (Clase)).
El nombre de directorio consta sólo de dos puntos (:). (NotSupportedException (Clase)).
El usuario no tiene permiso para crear el directorio (UnauthorizedAccessException).
Existe una situación de confianza parcial en la que el usuario no tiene los permisos necesarios (SecurityException).
Comentarios
Si el directorio ya existe, no se produce ninguna excepción.
Tareas
La tabla siguiente muestra una lista de ejemplos de tareas en las que está implicado el método
My.Computer.FileSystem.CreateDirectory.
Para Vea
Crear un directorio Cómo: Crear un directorio en Visual Basic
Ejemplo
Este ejemplo crea el directorio NewDirectory en C:\Documents and Settings\All Users\Documents.

VB
My.Computer.FileSystem.CreateDirectory _
("C:\Documents and Settings\All Users\Documents\NewDirectory")

Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: FileSystemProxy (proporciona acceso a FileSystem)
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web Sí

Servicio de Windows Sí

Sitio Web Sí
Permisos
El permiso siguiente puede ser necesario:
Permiso Descripción
FileIOPermission Controla la capacidad de tener acceso a archivos y carpetas. Enumeración asociada: Unrestricted.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Tareas
Cómo: Determinar si existe un directorio en Visual Basic
Referencia
My.Computer.FileSystem (Objeto)
CreateDirectory
Referencia del lenguaje Visual Basic

My.Computer.FileSystem.CurrentDirectory (Propiedad)
Obtiene o establece el directorio actual.

' Usage
Dim value As String = My.Computer.FileSystem.CurrentDirectory
' Declaration
Public Property CurrentDirectory As String

Valor devuelto
String.
Excepciones
Las condiciones siguientes pueden producir una excepción:
La ruta de acceso no es válida (DirectoryNotFoundException).
El usuario no tiene los permisos necesarios (UnauthorizedAccessException).
Comentarios
CurrentDirectory es una variable de entorno para todo el sistema.
Ejemplo
Este ejemplo devuelve el directorio actual y lo muestra en un cuadro de mensaje.
VB
MsgBox(My.Computer.FileSystem.CurrentDirectory)

Este ejemplo establece el directorio actual en C:\TestDirectory.


VB
My.Computer.FileSystem.CurrentDirectory = "C:\TestDirectory"

Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: FileSystemProxy (proporciona acceso a FileSystem)
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web Sí

Servicio de Windows Sí
Sitio Web Sí
Permisos
Puede que no sea necesario disponer de permisos para establecer CurrentDirectory.
El permiso siguiente puede ser necesario para leer CurrentDirectory:
Permiso Descripción
FileIOPermission Controla la capacidad de tener acceso a archivos y carpetas. Enumeración asociada: Unrestricted.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Referencia
My.Computer.FileSystem (Objeto)
Microsoft.VisualBasic.FileIO.FileSystem.CurrentDirectory
Otros recursos
Propiedades de archivos, directorios y unidades en Visual Basic
Referencia del lenguaje Visual Basic

My.Computer.FileSystem.DeleteDirectory (Método)
Elimina un directorio.

' Usage
My.Computer.FileSystem.DeleteDirectory(directory ,onDirectoryNotEmpty)
My.Computer.FileSystem.DeleteDirectory(directory ,showUI ,recycle)
My.Computer.FileSystem.DeleteDirectory(directory ,showUI ,recycle ,onUserCancel)
' Declaration
Public Sub DeleteDirectory( _
ByVal directory As String, _
ByVal onDirectoryNotEmpty As DeleteDirectoryOption _
)
' -or-
Public Sub DeleteDirectory( _
ByVal directory As String, _
ByVal showUI As UIOption, _
ByVal recycle As RecycleOption _
)
' -or-
Public Sub DeleteDirectory( _
ByVal directory As String, _
ByVal showUI As UIOption, _
ByVal recycle As RecycleOption, _
ByVal onUserCancel As UICancelOption _
)

Parámetros
directory
String. Directorio que se va a eliminar. Obligatorio.
onDirectoryNotEmpty
DeleteDirectoryOption (Enumeración) Especifica qué se debe hacer cuando un directorio que se va a borrar contiene
archivos o directorios. El valor predeterminado es DeleteDirectoryOption.DeleteAllContents.
showUI
UIOption (Enumeración). Indica si se debe hacer un seguimiento visual del progreso de la operación. El valor predeterminado
es UIOption.OnlyErrorDialogs. Obligatorio.
recycle
RecycleOption (Enumeración). Especifica si el archivo debe enviarse o no a la Papelera de reciclaje. El valor
predeterminado es RecycleOption.DeletePermanently.
onUserCancel
UICancelOption (Enumeración). Especifica si debe producirse una excepción si el usuario hace clic en Cancelar. Obligatorio.
Excepciones
Las condiciones siguientes pueden producir una excepción:
La ruta de acceso es una cadena de longitud cero, es incorrecta, contiene sólo espacios en blanco o contiene caracteres
no válidos (incluidos los caracteres comodín) (ArgumentException).
La ruta de acceso es una ruta de acceso de dispositivo (comienza con \\. \) (ArgumentException).
La ruta de acceso es Nothing (ArgumentNullException).
El directorio no existe o es un archivo (DirectoryNotFoundException).
El directorio no está vacío y el parámetro onDirectoryNotEmpty está establecido en ThrowIfDirectoryNonEmpty
(IOException).
El usuario no tiene permiso para eliminar el directorio o subdirectorio (IOException).
Un archivo del directorio o subdirectorio está en uso (IOException).
Un nombre de archivo o directorio contiene dos puntos (:) (NotSupportedException).
El usuario cancela la operación o no se puede eliminar el directorio (OperationCanceledException).
La ruta supera la longitud máxima definida por el sistema (PathTooLongException).
El usuario no ha necesitado permisos (SecurityException).
Comentarios
Los parámetros showUI, recycle y onUserCancel no se admiten en aplicaciones que no interactúan con el usuario, como
Servicios de Windows.
Tareas
En la tabla siguiente se muestra un ejemplo de una tarea en la que interviene el método
My.Computer.FileSystem.DeleteDirectory.
Para Vea
Eliminar un directorio Cómo: Eliminar un directorio en Visual Basic
Ejemplo
En el ejemplo sólo se elimina el directorio OldDirectory si está vacío.
VB
My.Computer.FileSystem.DeleteDirectory _
("C:\OldDirectory", FileIO.DeleteDirectoryOption.ThrowIfDirectoryNonEmpty)

Este ejemplo elimina el directorio OldDirectory y todo su contenido.


VB
My.Computer.FileSystem.DeleteDirectory _
("C:\OldDirectory", FileIO.DeleteDirectoryOption.DeleteAllContents)

Este ejemplo elimina el directorio OldDirectory y todo su contenido, y pide al usuario que confirme la eliminación, pero no
envía el contenido a la Papelera de reciclaje.
VB
My.Computer.FileSystem.DeleteDirectory _
("C:\OldDirectory", FileIO.UIOption.AllDialogs, FileIO.RecycleOption.DeletePermanently, Fil
eIO.UICancelOption.ThrowException)

Este ejemplo elimina el directorio OldDirectory y todo su contenido, y los envía a la Papelera de reciclaje, pero no muestra
el progreso de la operación.
VB
My.Computer.FileSystem.DeleteDirectory("C:\OldDirectory", _
FileIO.UIOption.AllDialogs, FileIO.RecycleOption.SendToRecycleBin, FileIO.UICancelOption.T
hrowException)

Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: FileSystemProxy (proporciona acceso a FileSystem)
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web Sí

Servicio de Windows Sí

Sitio Web Sí
Permisos
Los permisos siguientes pueden ser necesarios:
Permiso Descripción
FileIOPermission Controla la capacidad de tener acceso a archivos y carpetas. Enumeración asociada: Unrestricted.

UIPermission Controla los permisos relacionados con las interfaces de usuario y el Portapapeles. Enumeración asociada:
SafeSubWindows.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Tareas
Cómo: Eliminar un archivo en Visual Basic
Cómo: Eliminar un directorio en Visual Basic
Referencia
My.Computer.FileSystem (Objeto)
UICancelOption (Enumeración)
RecycleOption (Enumeración)
DeleteDirectoryOption (Enumeración)
UICancelOption (Enumeración)
UIOption (Enumeración)
Microsoft.VisualBasic.FileIO.FileSystem.DeleteDirectory
UICancelOption
Referencia del lenguaje Visual Basic

My.Computer.FileSystem.DeleteFile (Método)
Elimina un archivo.

' Usage
My.Computer.FileSystem.DeleteFile(file)
My.Computer.FileSystem.DeleteFile(file ,showUI ,recycle)
My.Computer.FileSystem.DeleteFile(file ,showUI ,recycle ,onUserCancel)
' Declaration
Public Sub DeleteFile( _
ByVal file As String _
)
' -or-
Public Sub DeleteFile( _
ByVal file As String, _
ByVal showUI As UIOption, _
ByVal recycle As RecycleOption _
)
' -or-
Public Sub DeleteFile( _
ByVal file As String, _
ByVal showUI As UIOption, _
ByVal recycle As RecycleOption, _
ByVal onUserCancel As UICancelOption _
)

Parámetros
file
String. Nombre y ruta de acceso del archivo que se va a eliminar. Obligatorio.
showUI
UIOption. Indica si se debe hacer un seguimiento visual del progreso de la operación. El valor predeterminado es
UIOption.OnlyErrorDialogs. Obligatorio.
recycle
RecycleOption. Especifica si se debe enviar o no el archivo eliminado a la Papelera de reciclaje. El valor predeterminado
es RecycleOption.DeletePermanently. Obligatorio.
onUserCancel
UICancelOption. Especifica si se produce o no una excepción cuando el usuario cancela la operación. El valor
predeterminado es UICancelOption.ThrowException. Obligatorio.
Excepciones
Las condiciones siguientes pueden producir una excepción:
La ruta de acceso no es válida por una de las razones siguientes: es una cadena de longitud cero; sólo contiene un
espacio en blanco; contiene caracteres no válidos; tiene una barra oblicua final a partir de la cual se debe especificar un
archivo; o es una ruta de acceso de dispositivo (empieza por \\.\) (ArgumentException).
La ruta de acceso no es válida porque es Nothing (ArgumentNullException).
La ruta supera la longitud máxima definida por el sistema (PathTooLongException).
Un nombre de archivo o de directorio de la ruta de acceso contiene un signo de dos puntos (:) o tiene un formato no
válido (NotSupportedException).
El archivo está en uso (IOException).
El usuario no tiene los permisos necesarios para ver la ruta de acceso (SecurityException).
El archivo no existe (FileNotFoundException).
El usuario no tiene el permiso para eliminar el archivo o el archivo es de sólo lectura (UnauthorizedAccessException).
Una situación de confianza parcial en la que el usuario no tiene los permisos necesarios (SecurityException).
El usuario canceló la operación y el parámetro onUserCancel está establecido en
Microsoft.VisualBasic.FileIO.UICancelOption.ThrowException (OperationCanceledException).
Comentarios
Los parámetros showUI, recycle y onUserCancel no se admiten en aplicaciones que no ofrecen interactividad para el usuario,
como los Servicios de Windows.
Tareas
La tabla siguiente muestra una lista de ejemplos de tareas en las que está implicado el método
My.Computer.FileSystem.DeleteFile.
Para Vea
Para eliminar un archivo Cómo: Eliminar un archivo en Visual Basic

Para eliminar todos los archivos de un directorio Cómo: Eliminar todos los archivos de un directorio en Visual Basic
Ejemplo
En este ejemplo se elimina el archivo Test.txt.
VB
My.Computer.FileSystem.DeleteFile("C:\test.txt")

Este ejemplo elimina el archivo Test.txt y permite al usuario confirmar la eliminación del archivo.
VB
My.Computer.FileSystem.DeleteFile _
("C:\test.txt", FileIO.UIOption.AllDialogs, FileIO.RecycleOption.SendToRecycleBin, FileIO.U
ICancelOption.ThrowException)

Este ejemplo elimina el archivo Test.txt y lo envía a la Papelera de reciclaje.


VB
My.Computer.FileSystem.DeleteFile _
("C:\test.txt", FileIO.UIOption.OnlyErrorDialogs, FileIO.RecycleOption.SendToRecycleBin, Fi
leIO.UICancelOption.ThrowException)

Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: FileSystemProxy (proporciona acceso a FileSystem)
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí


Biblioteca de controles Web Sí
Servicio de Windows Sí

Sitio Web Sí
Permisos
Los permisos siguientes pueden ser necesarios:
Permiso Descripción
FileIOPermission Controla la capacidad de tener acceso a archivos y carpetas. Enumeración asociada: Unrestricted.

UIPermission Controla los permisos relacionados con interfaces de usuario y el Portapapeles. Enumeración asociada:
SafeSubWindows.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Tareas
Cómo: Eliminar un directorio en Visual Basic
Referencia
My.Computer.FileSystem (Objeto)
UIOption (Enumeración)
RecycleOption (Enumeración)
UICancelOption (Enumeración)
My.Computer.FileSystem (Objeto)
Microsoft.VisualBasic.FileIO.FileSystem.DeleteFile
Referencia del lenguaje Visual Basic

My.Computer.FileSystem.DirectoryExists (Método)
Devuelve un valor Boolean que indica si existe el directorio especificado.

' Usage
Dim value As Boolean = My.Computer.FileSystem.DirectoryExists(directory)
' Declaration
Public Function DirectoryExists( _
ByVal directory As String _
) As Boolean

Parámetros
directory
String. Ruta de acceso del directorio. Obligatoria.
Valor devuelto
True si el directorio existe; de lo contrario, es False.
Excepciones
Este método no produce excepciones.
Comentarios
La llamada a DirectoryExists requiere FileIOPermission.
Tareas
La tabla siguiente muestra una lista de ejemplos de tareas en las que está implicado el método
My.Computer.FileSystem.DirectoryExists.
Para Vea
Determinar si existe un directorio Cómo: Determinar si existe un directorio en Visual Basic
Ejemplo
Este ejemplo determina si existe el directorio C:\backup\logs y comprueba sus propiedades.
VB
If My.Computer.FileSystem.DirectoryExists("C:\backup\logs") Then
Dim logInfo As System.IO.DirectoryInfo
logInfo = My.Computer.FileSystem.GetDirectoryInfo _
("C:\backup\logs")
End If

Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: FileSystemProxy (proporciona acceso a FileSystem)
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí
Biblioteca de controles de Windows Sí

Biblioteca de controles Web Sí

Servicio de Windows Sí

Sitio Web Sí
Permisos
El permiso siguiente puede ser necesario:
Permiso Descripción
FileIOPermission Controla la capacidad de tener acceso a archivos y carpetas. Enumeración asociada: Unrestricted.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Tareas
Cómo: Determinar si existe un archivo en Visual Basic
Tutorial: Manipular archivos y directorios en Visual Basic
Referencia
My.Computer.FileSystem (Objeto)
DirectoryExists
Otros recursos
Crear, eliminar y mover archivos y directorios en Visual Basic
Referencia del lenguaje Visual Basic

My.Computer.FileSystem.Drives (Propiedad)
Devuelve una colección de sólo lectura de todos los nombres de la unidad de disco disponibles.

' Usage
Dim value As System.Collections.ObjectModel.ReadOnlyCollection(Of System.IO.DriveInfo) = My
.Computer.FileSystem.Drives
' Declaration
Public ReadOnly Property Drives As System.Collections.ObjectModel.ReadOnlyCollection(Of Sys
tem.IO.DriveInfo)

Valor devuelto
System.Collections.ObjectModel.ReadOnlyCollection (de System.IO.DriveInfo)
Excepciones
Esta propiedad no produce excepciones.
Comentarios
Esta propiedad devuelve todas las unidades lógicas.
Tareas
En la tabla siguiente se muestran ejemplos de tareas en las que interviene la propiedad My.Computer.FileSystem.Drives.
Para Vea
Determinar la etiqueta del volumen de una unidad Cómo: Determinar la etiqueta de volumen de una unidad en Visual Basic

Determinar el formato de una unidad Cómo: Determinar el formato de una unidad en Visual Basic

Determinar el tipo de una unidad Cómo: Determinar el tipo de una unidad en Visual Basic

Determinar el espacio total de una unidad Cómo: Determinar el espacio total de una unidad en Visual Basic

Determinar el espacio libre de una unidad Cómo: Determinar el espacio físico libre de una unidad en Visual Basic

Determinar el directorio raíz de una unidad Cómo: Determinar el directorio raíz de una unidad en Visual Basic
Ejemplo
En este ejemplo se muestran los nombres de las unidades de disco disponibles en un cuadro de mensaje.
VB
Dim getInfo As System.IO.DriveInfo()
getInfo = System.IO.DriveInfo.GetDrives
For Each info As System.IO.DriveInfo In getInfo
MsgBox(info.name)
Next

Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: FileSystemProxy (proporciona acceso a FileSystem)
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web Sí

Servicio de Windows Sí

Sitio Web Sí
Permisos
El permiso siguiente puede ser necesario:
Permiso Descripción
FileIOPermission Controla la capacidad de tener acceso a archivos y carpetas. Enumeración asociada: Unrestricted.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Referencia
My.Computer.FileSystem (Objeto)
System.Collections.ObjectModel.ReadOnlyCollection
System.IO.DriveInfo
Microsoft.VisualBasic.FileIO.FileSystem.Drives
Otros recursos
Propiedades de archivos, directorios y unidades en Visual Basic
Referencia del lenguaje Visual Basic

My.Computer.FileSystem.FileExists (Método)
Devuelve un valor Boolean que indica si el archivo especificado existe.

' Usage
Dim value As Boolean = My.Computer.FileSystem.FileExists(file)
' Declaration
Public Function FileExists( _
ByVal file As String _
) As Boolean

Parámetros
file
String. Nombre y ruta de acceso del archivo. Obligatorio.
Valor devuelto
Devuelve True si el archivo existe; de lo contrario, este método devuelve False.
Excepciones
La condición siguiente puede crear una excepción:
El nombre del archivo finaliza con una barra diagonal inversa (\) (ArgumentException).
Comentarios
Si la aplicación no tiene permisos suficientes para leer el archivo especificado, el método FileExists devuelve False exista o no
una ruta de acceso, pero no producirá una excepción.
Tareas
En la tabla siguiente se muestra un ejemplo de una tarea en la que interviene el método My.Computer.FileSystem.FileExists.
Para Vea
Determinar si existe un archivo. Cómo: Determinar si existe un archivo en Visual Basic
Ejemplo
Este ejemplo comprueba si el archivo Check.txt existe o no, y proporciona la información en un cuadro de mensaje.
VB
If My.Computer.FileSystem.FileExists("c://Check.txt") Then
MsgBox("File found.")
Else
MsgBox("File not found.")
End If

Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: FileSystemProxy (proporciona acceso a FileSystem)
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí
Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web Sí

Servicio de Windows Sí

Sitio Web Sí
Permisos
El permiso siguiente puede ser necesario:
Permiso Descripción
FileIOPermission Controla la capacidad de tener acceso a archivos y carpetas. Enumeración asociada: Unrestricted.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Tareas
Cómo: Determinar si existe un directorio en Visual Basic
Tutorial: Manipular archivos y directorios en Visual Basic
Referencia
My.Computer.FileSystem (Objeto)
FileExists
Otros recursos
Crear, eliminar y mover archivos y directorios en Visual Basic
Referencia del lenguaje Visual Basic

My.Computer.FileSystem.FindInFiles (Método)
Devuelve una colección de cadenas de sólo lectura que representa los nombres de los archivos que contienen el texto
especificado.

' Usage
Dim value As System.Collections.ObjectModel.ReadOnlyCollection(Of String) = My.Computer.Fil
eSystem.FindInFiles(directory ,containsText ,ignoreCase ,searchType)
Dim value As System.Collections.ObjectModel.ReadOnlyCollection(Of String) = My.Computer.Fil
eSystem.FindInFiles(directory ,containsText ,ignoreCase ,searchType ,fileWildcards)
' Declaration
Public Function FindInFiles( _
ByVal directory As String, _
ByVal containsText As String, _
ByVal ignoreCase As Boolean, _
ByVal searchType As SearchOption _
) As System.Collections.ObjectModel.ReadOnlyCollection(Of String)
' -or-
Public Function FindInFiles( _
ByVal directory As String, _
ByVal containsText As String, _
ByVal ignoreCase As Boolean, _
ByVal searchType As SearchOption, _
ByVal fileWildcards As String() _
) As System.Collections.ObjectModel.ReadOnlyCollection(Of String)

Parámetros
directory
String. Directorio en el que se va a buscar. Obligatorio.
containsText
String. Texto de la búsqueda. Obligatorio.
ignoreCase
Boolean. Especifica si la búsqueda debe distinguir entre mayúsculas y minúsculas. El valor predeterminado es True.
Obligatorio.
searchType
SearchOption (Enumeración). Si se han de incluir las subcarpetas. El valor predeterminado es
SearchOption.SearchTopLevelOnly. Obligatorio.
fileWildcards
Matriz de tipo String. Modelo con el que debe coincidir. Obligatorio.
Valor devuelto
Colección de sólo lectura de tipoString.
Excepciones
Las condiciones siguientes pueden producir una excepción:
La ruta de acceso no es válida por una de las razones siguientes: es una cadena de longitud cero; sólo contiene un
espacio en blanco; contiene caracteres no válidos o es una ruta de acceso de dispositivo (empieza por \\.\)
(ArgumentException).
La ruta de acceso no es válida porque es Nothing (ArgumentNullException).
directory no existe (DirectoryNotFoundException).
directory señala a un archivo existente (IOException).
La ruta supera la longitud máxima definida por el sistema (PathTooLongException).
Un nombre de archivo o de directorio de la ruta de acceso contiene un signo de dos puntos (:) o tiene un formato no
válido (NotSupportedException).
El usuario no tiene los permisos necesarios para ver la ruta de acceso (SecurityException).
El usuario no tiene los permisos necesarios (UnauthorizedAccessException).
Comentarios
Se devuelve una colección vacía si no se encuentra ningún archivo que coincida con el modelo especificado.
Tareas
La tabla siguiente muestra una lista de ejemplos de tareas en las que está implicado el método
My.Computer.FileSystem.FindInFiles.
Para Vea
Buscar en un directorio archivos que contienen una cadena concreta Tutorial: Manipular archivos y directorios en Visual Basic
Ejemplo
Este ejemplo busca en el directorio C:\TestDir cualquier archivo que contiene la cadena "sample string" y muestra los
resultados en un control ListBox1.
VB
Dim list As System.Collections.ObjectModel.ReadOnlyCollection _
(Of String)
list = My.Computer.FileSystem.FindInFiles("C:\TestDir", _
"sample string", True, FileIO.SearchOption.SearchTopLevelOnly)
For Each name As String In list
ListBox1.Items.Add(name)
Next

Para que funcione, el proyecto debe contener un control ListBox denominado ListBox1.
Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: FileSystemProxy (proporciona acceso a FileSystem)
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web Sí

Servicio de Windows Sí

Sitio Web Sí
Permisos
El permiso siguiente puede ser necesario:
Permiso Descripción
FileIOPermission Controla la capacidad de tener acceso a archivos y carpetas. Enumeración asociada: Unrestricted.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Tareas
Tutorial: Manipular archivos y directorios en Visual Basic
Referencia
My.Computer.FileSystem (Objeto)
SearchOption (Enumeración)
System.Collections.ObjectModel.ReadOnlyCollection
Microsoft.VisualBasic.FileIO.FileSystem.FindInFiles
Referencia del lenguaje Visual Basic

My.Computer.FileSystem.GetDirectories (Método)
Devuelve una colección de cadenas que representa los nombres de las rutas de acceso de los subdirectorios de un directorio.

' Usage
Dim value As System.Collections.ObjectModel.ReadOnlyCollection(Of String) = My.Computer.Fil
eSystem.GetDirectories(directory)
Dim value As System.Collections.ObjectModel.ReadOnlyCollection(Of String) = My.Computer.Fil
eSystem.GetDirectories(directory ,searchType ,wildcards)
' Declaration
Public Function GetDirectories( _
ByVal directory As String _
) As System.Collections.ObjectModel.ReadOnlyCollection(Of String)
' -or-
Public Function GetDirectories( _
ByVal directory As String, _
ByVal searchType As SearchOption, _
ByVal wildcards As String() _
) As System.Collections.ObjectModel.ReadOnlyCollection(Of String)

Parámetros
directory
String. Nombre y ruta de acceso de directorio. Obligatorio.
searchType
SearchOption (Enumeración). Si se han de incluir las subcarpetas. El valor predeterminado es
SearchOption.SearchTopLevelOnly. Obligatorio.
wildcards
String. Modelo con el que hacer coincidir los nombres. Obligatorio.
Valor devuelto
Colección de sólo lectura de String.
Excepciones
Las condiciones siguientes pueden provocar una excepción:
La ruta de acceso no es válida por una de las razones siguientes: es una cadena de longitud cero; sólo contiene un
espacio en blanco; contiene caracteres no válidos; o es una ruta de acceso de dispositivo (empieza por \\.\)
(ArgumentException).
La ruta de acceso no es válida porque es Nothing (ArgumentNullException).
Uno o más de los caracteres comodín especificados es Nothing, una cadena vacía, o contiene sólo espacios
(ArgumentNullException).
directory no existe (DirectoryNotFoundException).
directory señala a un archivo existente (IOException).
La ruta supera la longitud máxima definida por el sistema (PathTooLongException).
Un nombre de archivo o de directorio de la ruta de acceso contiene un signo de dos puntos (:) o tiene un formato no
válido (NotSupportedException).
El usuario no tiene los permisos necesarios para ver la ruta de acceso (SecurityException).
El usuario no tiene los permisos necesarios (UnauthorizedAccessException).
Comentarios
Puede utilizar el parámetro wildcards para especificar un modelo concreto. Si desea incluir el contenido de subdirectorios en la
búsqueda, establezca el parámetro searchType en SearchAllSubDirectories.
Si no se encuentra ningún directorio que coincida con el modelo especificado, se devuelve una colección vacía.
Tareas
La tabla siguiente muestra una lista de ejemplos de tareas en las que está implicado el método
My.Computer.FileSystem.GetDirectories.
Para Vea
Mostrar los subdirectorios que siguen un modelo concr Cómo: Buscar subdirectorios con un modelo específico en Visual Basic
eto
Ejemplo
El ejemplo siguiente devuelve todos los directorios de la estructura de directorios que contienen la palabra Logs en sus
nombres y los agrega a ListBox1.
VB
For Each foundDirectory As String In _
My.Computer.FileSystem.GetDirectories _
(My.Computer.FileSystem.SpecialDirectories.MyDocuments, _
True, "*Logs*")
ListBox1.Items.Add(foundDirectory)
Next

Este ejemplo requiere que se tenga un control ListBox denominado ListBox1 en el formulario.
Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: FileSystemProxy (proporciona acceso a FileSystem)
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web Sí

Servicio de Windows Sí

Sitio Web Sí
Permisos
El permiso siguiente puede ser necesario:
Permiso Descripción
FileIOPermission Controla la capacidad de tener acceso a archivos y carpetas. Enumeración asociada: Unrestricted.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Referencia
My.Computer.FileSystem (Objeto)
SearchOption (Enumeración)
System.Collections.ObjectModel.ReadOnlyCollection
Microsoft.VisualBasic.FileIO.FileSystem.GetDirectories
Referencia del lenguaje Visual Basic

My.Computer.FileSystem.GetDirectoryInfo (Método)
Devuelve un objeto DirectoryInfo correspondiente a la ruta de acceso especificada.

' Usage
Dim value As System.IO.DirectoryInfo = My.Computer.FileSystem.GetDirectoryInfo(directory)
' Declaration
Public Function GetDirectoryInfo( _
ByVal directory As String _
) As System.IO.DirectoryInfo

Parámetros
directory
String. Ruta de acceso del directorio. Obligatoria.
Valor devuelto
DirectoryInfo
Excepciones
Las condiciones siguientes pueden producir una excepción:
La ruta de acceso al directorio no es válida por una de las razones siguientes: es una cadena de longitud cero; sólo
contiene un espacio en blanco; contiene caracteres no válidos; o es una ruta de acceso de dispositivo (empieza por \\.\)
(ArgumentException).
La ruta de acceso al directorio no es válida porque es Nothing (ArgumentNullException).
La ruta de acceso al directorio supera la longitud máxima definida por el sistema (PathTooLongException).
Un nombre de archivo o de directorio de la ruta de acceso al directorio contiene un signo de dos puntos (:) o tiene un
formato no válido (NotSupportedException).
El usuario no tiene los permisos necesarios para ver la ruta de acceso al directorio (SecurityException).
Comentarios
Si el directorio no existe, no se produce ninguna excepción hasta la primera vez que se tiene acceso a una propiedad del objeto
DirectoryInfo.
Tareas
La tabla siguiente muestra una lista de ejemplos de tareas en las que está implicado el método
My.Computer.FileSystem.GetDirectoryInfo.
Para Vea
Determinar cuándo se creó un directorio Cómo: Determinar cuándo se creó un directorio en Visual Basic

Determine si un directorio es de sólo lectura Cómo: Determinar si un directorio es de sólo lectura en Visual Basic
Ejemplo
Este ejemplo obtiene un objeto DirectoryInfo para el directorio C:\Documents and Settings y muestra la hora de creación
del directorio, la última vez en que se tuvo acceso a él y la fecha y hora de última escritura.
VB
Dim getInfo As System.IO.DirectoryInfo
getInfo = My.Computer.FileSystem.GetDirectoryInfo _
(My.Computer.FileSystem.SpecialDirectories.MyDocuments)
MsgBox("The directory was created at " & getInfo.CreationTime)
MsgBox("The directory was last accessed at " & getInfo.LastAccessTime)
MsgBox("The directory was last written to at " & getInfo.LastWriteTime)
Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: FileSystemProxy (proporciona acceso a FileSystem)
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web Sí

Servicio de Windows Sí

Sitio Web Sí
Permisos
El permiso siguiente puede ser necesario:
Permiso Descripción
FileIOPermission Controla la capacidad de tener acceso a archivos y carpetas. Enumeración asociada: Unrestricted.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Referencia
My.Computer.FileSystem (Objeto)
System.IO.DirectoryInfo
GetDirectoryInfo
Otros recursos
Propiedades de archivos, directorios y unidades en Visual Basic
Referencia del lenguaje Visual Basic

My.Computer.FileSystem.GetDriveInfo (Método)
Devuelve un objeto DriveInfo para la unidad especificada.

' Usage
Dim value As System.IO.DriveInfo = My.Computer.FileSystem.GetDriveInfo(drive)
' Declaration
Public Function GetDriveInfo( _
ByVal drive As String _
) As System.IO.DriveInfo

Parámetros
drive
String. Archivo que se debe examinar. Obligatorio.
Valor devuelto
DriveInfo
Excepciones
Las condiciones siguientes pueden producir una excepción:
La ruta de acceso no es válida por una de las razones siguientes: es una cadena de longitud cero; sólo contiene un
espacio en blanco; contiene caracteres no válidos; o es una ruta de acceso de dispositivo (empieza por \\.\)
(ArgumentException).
La ruta de acceso no es válida porque es Nothing (ArgumentNullException).
La ruta supera la longitud máxima definida por el sistema (PathTooLongException).
Un nombre de archivo o de carpeta en la ruta de acceso contiene dos puntos (:) o está en un formato no válido
(NotSupportedException).
El usuario no tiene los permisos necesarios para ver la ruta de acceso (SecurityException).
Comentarios
La clase DriveInfo modela una unidad y proporciona métodos y propiedades para consultar información de la unidad. Utilice
DriveInfo para determinar qué unidades están disponibles y qué tipo de unidades son. También puede consultar la propiedad
para determinar la capacidad de la unidad espacio libre disponible en ella.
Tareas
La tabla siguiente muestra una lista de ejemplos de tareas en las que está implicado el método
My.Computer.FileSystem.GetDriveInfo.
Para Vea
Determinar la etiqueta de volumen de una unidad Cómo: Determinar la etiqueta de volumen de una unidad en Visual Basic

Determinar el tipo de una unidad Cómo: Determinar el tipo de una unidad en Visual Basic

Determinar el espacio total de una unidad Cómo: Determinar el espacio total de una unidad en Visual Basic

Determinar el espacio físico disponible en una unidad Cómo: Determinar el espacio físico libre de una unidad en Visual Basic

Determinar la carpeta raíz de una unidad Cómo: Determinar el directorio raíz de una unidad en Visual Basic
Ejemplo
Este ejemplo obtiene un objeto DriveInfo para la unidad C y lo utiliza para mostrar información sobre ella.
VB
Dim getInfo As System.IO.DriveInfo
getInfo = My.Computer.FileSystem.GetDriveInfo("C:\")
MsgBox("The drive's type is " & getInfo.DriveType)
MsgBox("The drive has " & getInfo.TotalFreeSpace & " bytes free.")

Para obtener información sobre los distintos tipos de unidad, vea DriveType.
Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: FileSystemProxy (proporciona acceso a FileSystem)
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web Sí

Servicio de Windows Sí

Sitio Web Sí
Permisos
El permiso siguiente puede ser necesario:
Permiso Descripción
FileIOPermission Controla la capacidad de tener acceso a archivos y carpetas. Enumeración asociada: Unrestricted.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Referencia
My.Computer.FileSystem (Objeto)
System.IO.DriveInfo
GetDriveInfo
DriveType
Otros recursos
Propiedades de archivos, directorios y unidades en Visual Basic
Referencia del lenguaje Visual Basic

My.Computer.FileSystem.GetFileInfo (Método)
Devuelve un objeto FileInfo para el archivo especificado.

' Usage
Dim value As System.IO.FileInfo = My.Computer.FileSystem.GetFileInfo(file)
' Declaration
Public Function GetFileInfo( _
ByVal file As String _
) As System.IO.FileInfo

Parámetros
file
String. Nombre y ruta de acceso del archivo. Obligatorio.
Valor devuelto
FileInfo
Excepciones
Las condiciones siguientes pueden producir una excepción:
El nombre de la ruta de acceso está mal formado. Por ejemplo, contiene caracteres no válidos o está compuesto sólo por
espacios en blanco (ArgumentException).
El nombre de archivo tiene una marca de barra oblicua final (ArgumentException).
El archivo no existe o es Nothing (ArgumentNullException).
La ruta de acceso contiene un dos puntos en medio de la cadena (NotSupportedException).
La ruta de acceso es demasiado larga (PathTooLongException).
El usuario no tiene los permisos necesarios (SecurityException).
El usuario no tiene acceso ACL (lista de control de acceso) al archivo (UnauthorizedAccessException).
Comentarios
Si el archivo no existe, no se produce ninguna excepción, sino que se producirá la primera vez que se tenga acceso a las
propiedades del objeto.
Tareas
La tabla siguiente muestra una lista de ejemplos de tareas en las que está implicado el método
My.Computer.FileSystem.GetFileInfo.
Para Vea
Obtener información acerca de un archivo Cómo: Obtener información acerca de un archivo en Visual Basic

Determinar el nombre y la ruta de acceso de un archivo Cómo: Analizar rutas de acceso a archivos en Visual Basic
Ejemplo
Este ejemplo recupera un objeto System.IO.FileInfo para el archivo MyLogFile.log y lo utiliza para informar del nombre
completo del archivo, la fecha y hora de último acceso, y su tamaño.
VB
Dim information As System.IO.FileInfo
information = My.Computer.FileSystem.GetFileInfo("C:\MyLogFile.log")
MsgBox("The file's full name is " & information.FullName & ".")
MsgBox("Last access time is " & information.LastAccessTime & ".")
MsgBox("The length is " & information.Length & ".")
Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: FileSystemProxy (proporciona acceso a FileSystem)
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web Sí

Servicio de Windows Sí

Sitio Web Sí
Permisos
El permiso siguiente puede ser necesario:
Permiso Descripción
FileIOPermission Controla la capacidad de tener acceso a archivos y carpetas. Enumeración asociada: Unrestricted.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Tareas
Tutorial: Manipular archivos y directorios en Visual Basic
Referencia
My.Computer.FileSystem (Objeto)
System.IO.FileInfo
Microsoft.VisualBasic.FileIO.FileSystem.GetFileInfo(System.String)
Otros recursos
Propiedades de archivos, directorios y unidades en Visual Basic
Referencia del lenguaje Visual Basic

My.Computer.FileSystem.GetFiles (Método)
Devuelve una colección de cadenas de sólo lectura que representa los nombres de los archivos de un directorio.

' Usage
Dim value As System.Collections.ObjectModel.ReadOnlyCollection(Of String) = My.Computer.Fil
eSystem.GetFiles(directory)
Dim value As System.Collections.ObjectModel.ReadOnlyCollection(Of String) = My.Computer.Fil
eSystem.GetFiles(directory ,searchType ,wildcards)
' Declaration
Public Function GetFiles( _
ByVal directory As String _
) As System.Collections.ObjectModel.ReadOnlyCollection(Of String)
' -or-
Public Function GetFiles( _
ByVal directory As String, _
ByVal searchType As SearchOption, _
ByVal wildcards As String() _
) As System.Collections.ObjectModel.ReadOnlyCollection(Of String)

Parámetros
directory
String. Directorio en el que se va a buscar. Obligatorio.
searchType
SearchOption (Enumeración). Si se han de incluir las subcarpetas. El valor predeterminado es
SearchOption.SearchTopLevelOnly. Obligatorio.
wildcards
String. Modelo que hacer coincidir. Obligatorio.
Valor devuelto
Colección de sólo lectura de cadenas.
Excepciones
Las condiciones siguientes pueden producir una excepción:
La ruta de acceso no es válida por una de las razones siguientes: es una cadena de longitud cero; sólo contiene un
espacio en blanco; contiene caracteres no válidos; o es una ruta de acceso de dispositivo (empieza por \\.\)
(ArgumentException).
La ruta de acceso no es válida porque es Nothing (ArgumentNullException).
directory no existe (DirectoryNotFoundException).
directory señala a un archivo existente (IOException).
La ruta supera la longitud máxima definida por el sistema (PathTooLongException).
Un nombre de archivo o de directorio de la ruta de acceso contiene un signo de dos puntos (:) o tiene un formato no
válido (NotSupportedException).
El usuario no tiene los permisos necesarios para ver la ruta de acceso (SecurityException).
El usuario no tiene los permisos necesarios (UnauthorizedAccessException).
Comentarios
Se devuelve una colección vacía si no se encuentra ningún archivo que coincida con el modelo especificado.
Tareas
La tabla siguiente muestra una lista de ejemplos de tareas en las que está implicado el método
My.Computer.FileSystem.GetFiles.
Para Vea
Obtener la colección de archivos contenidos en un dir Cómo: Obtener la colección de archivos de un directorio en Visual Basic
ectorio

Buscar archivos con un modelo concreto en un directo Cómo: Buscar archivos con un modelo específico en Visual Basic
rio
Ejemplo
El ejemplo siguiente devuelve todos los archivos contenidos en el directorio y los agrega a ListBox1.
VB
For Each foundFile As String In My.Computer.FileSystem.GetFiles _
(My.Computer.FileSystem.SpecialDirectories.MyDocuments)
ListBox1.Items.Add(foundFile)
Next

Este ejemplo requiere que se tenga un control ListBox denominado ListBox1 en el formulario.
Este ejemplo devuelve todos los archivos situados en el directorio que tienen la extensión .dll y los agrega a ListBox1.
VB
For Each foundFile As String In My.Computer.FileSystem.GetFiles _
(My.Computer.FileSystem.SpecialDirectories.MyDocuments, True, "*.dll")
ListBox1.Items.Add(foundFile)
Next

Este ejemplo requiere que se tenga un control ListBox denominado ListBox1 en el formulario.
Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: FileSystemProxy (proporciona acceso a FileSystem)
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web Sí

Servicio de Windows Sí

Sitio Web Sí
Permisos
El permiso siguiente puede ser necesario:
Permiso Descripción
FileIOPermission Controla la capacidad de tener acceso a archivos y carpetas. Enumeración asociada: Unrestricted.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Tareas
Cómo: Buscar archivos con un modelo específico en Visual Basic
Cómo: Obtener la colección de archivos de un directorio en Visual Basic
Referencia
My.Computer.FileSystem (Objeto)
SearchOption (Enumeración)
System.Collections.ObjectModel.ReadOnlyCollection
Microsoft.VisualBasic.FileIO.FileSystem.GetFiles
Referencia del lenguaje Visual Basic

My.Computer.FileSystem.GetName (Método)
Extrae el nombre de archivo analizando la ruta de acceso proporcionada.

' Usage
Dim value As String = My.Computer.FileSystem.GetFileName(path)
' Declaration
Public Function GetFileName( _
ByVal path As String _
) As String

Parámetros
path
Obligatorio. Ruta de acceso que se va a analizar. String.
Valor devuelto
String.
Excepciones
Este método no produce excepciones.
Comentarios
Ésta es una operación de cadena; no se examina FileSystem.
El método GetName omite una marca de barra diagonal que aparece al final de la ruta de acceso.
Tareas
La tabla siguiente muestra una lista de ejemplos de tareas en las que está implicado el método
My.Computer.FileSystem.GetFileName.
Para Vea
Analizar una ruta de acceso al archivo Cómo: Analizar rutas de acceso a archivos en Visual Basic
Ejemplo
El ejemplo siguiente analiza una ruta de acceso a archivo y devuelve el nombre del archivo.
VB
MsgBox("The filename is: " & _
My.Computer.FileSystem.GetName("C:\testdirectory\testfile"))

Reemplace la ruta de acceso C:\Testdirectory\Testfile con la ruta de acceso que desea analizar.
Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: FileSystemProxy (proporciona acceso a FileSystem)
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí
Aplicación de consola Sí

Biblioteca de controles de Windows Sí


Biblioteca de controles Web Sí

Servicio de Windows Sí

Sitio Web Sí
Permisos
No se requiere ningún permiso.
Vea también
Referencia
My.Computer.FileSystem (Objeto)
GetFileName
Otros recursos
Propiedades de archivos, directorios y unidades en Visual Basic
Referencia del lenguaje Visual Basic

My.Computer.FileSystem.GetParentPath (Método)
Devuelve la ruta de acceso primaria de la ruta de acceso proporcionada.

' Usage
Dim value As String = My.Computer.FileSystem.GetParentPath(path)
' Declaration
Public Function GetParentPath( _
ByVal path As String _
) As String

Parámetros
path
String. Ruta de acceso que se va a examinar. Obligatorio.
Valor devuelto
String.
Excepciones
Las condiciones siguientes pueden hacer que se produzca una excepción:
La ruta de acceso no es válida por una de las razones siguientes: es una cadena de longitud cero; sólo contiene un
espacio en blanco; contiene caracteres no válidos o es una ruta de acceso de dispositivo (empieza por \\.\)
(ArgumentException).
La ruta de acceso no tiene una ruta de acceso primaria porque es una ruta de acceso raíz (ArgumentException).
La ruta de acceso no es válida porque es Nothing (ArgumentNullException).
La ruta supera la longitud máxima definida por el sistema (PathTooLongException).
Un nombre de archivo o de directorio de la ruta de acceso contiene un signo de dos puntos (:) o tiene un formato no
válido (NotSupportedException).
El usuario no tiene los permisos necesarios para ver la ruta de acceso (SecurityException).
Comentarios
Ésta es una operación de cadena; no se examina el sistema de archivos.
Ejemplo
Este ejemplo obtiene la ruta de acceso primaria de C:\Backups\Tmp\Test.
VB
Dim strPath As String
strPath = My.Computer.FileSystem.GetParentPath("C:\backups\tmp\test")
MsgBox(strPath)

Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: FileSystemProxy (proporciona acceso a FileSystem)
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí
Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web Sí

Servicio de Windows Sí

Sitio Web Sí
Permisos
El permiso siguiente puede ser necesario:
Permiso Descripción
FileIOPermission Controla la capacidad de tener acceso a archivos y carpetas. Enumeración asociada: Unrestricted.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Tareas
Cómo: Analizar rutas de acceso a archivos en Visual Basic
Referencia
My.Computer.FileSystem (Objeto)
GetParentPath
Otros recursos
Propiedades de archivos, directorios y unidades en Visual Basic
Referencia del lenguaje Visual Basic

My.Computer.FileSystem.GetTempFileName (Método)
Crea en disco un archivo temporal de cero bytes con nombre único y devuelve la ruta de acceso completa de ese archivo.

' Usage
Dim value As String = My.Computer.FileSystem.GetTempFileName()
' Declaration
Public Function GetTempFileName() As String

Valor devuelto
String que contiene la ruta de acceso completa del archivo temporal.
Comentarios
Este método se puede utilizar para crear un archivo temporal.
Ejemplo
Este ejemplo crea un archivo temporal y devuelve su ruta de acceso.
VB
MsgBox("The file is located at " & _
My.Computer.FileSystem.GetTempFileName)

Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: FileSystemProxy (proporciona acceso a FileSystem)
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web Sí

Servicio de Windows Sí

Sitio Web Sí
Permisos
El permiso siguiente puede ser necesario:
Permiso Descripción
FileIOPermission Controla la capacidad de tener acceso a archivos y carpetas. Enumeración asociada: Unrestricted.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Referencia
My.Computer.FileSystem (Objeto)
Microsoft.VisualBasic.FileIO.FileSystem.GetTempFileName
Otros recursos
Crear, eliminar y mover archivos y directorios en Visual Basic
Referencia del lenguaje Visual Basic

My.Computer.FileSystem.MoveDirectory (Método)
Mueve un directorio de una ubicación a otra.

' Usage
My.Computer.FileSystem.MoveDirectory(sourceDirectoryName ,destinationDirectoryName)
My.Computer.FileSystem.MoveDirectory(sourceDirectoryName ,destinationDirectoryName ,overwri
te)
My.Computer.FileSystem.MoveDirectory(sourceDirectoryName ,destinationDirectoryName ,showUI)
My.Computer.FileSystem.MoveDirectory(sourceDirectoryName ,destinationDirectoryName ,showUI
,onUserCancel)

' Declaration
Public Sub MoveDirectory( _
ByVal sourceDirectoryName As String, _
ByVal destinationDirectoryName As String _
)
' -or-
Public Sub MoveDirectory( _
ByVal sourceDirectoryName As String, _
ByVal destinationDirectoryName As String, _
ByVal overwrite As Boolean _
)
' -or-
Public Sub MoveDirectory( _
ByVal sourceDirectoryName As String, _
ByVal destinationDirectoryName As String, _
ByVal showUI As UIOption _
)
' -or-
Public Sub MoveDirectory( _
ByVal sourceDirectoryName As String, _
ByVal destinationDirectoryName As String, _
ByVal showUI As UIOption, _
ByVal onUserCancel As UICancelOption _
)

Parámetros
sourceDirectoryName
String. Ruta de acceso del directorio que se va a mover. Obligatorio.
destinationDirectoryName
String. Ruta de acceso del directorio al que se mueve el directorio de origen. Obligatorio.
overwrite
Boolean. Especifica si deben sobrescribirse los directorios existentes. El valor predeterminado es False. Obligatorio.
showUI
UIOption. Indica si se debe hacer un seguimiento visual del progreso de la operación. El valor predeterminado es
UIOption.OnlyErrorDialogs. Obligatorio.
onUserCancel
UICancelOption (Enumeración). Especifica si se produce o no una excepción cuando el usuario cancela la operación. El valor
predeterminado es UICancelOption.ThrowException. Obligatorio.
Excepciones
Las condiciones siguientes pueden producir una excepción:
La ruta de acceso es una cadena de longitud cero, contiene sólo espacios en blanco, contiene los caracteres no válidos o
es una ruta de acceso del dispositivo (se inicia con \\. \) (ArgumentException).
La ruta de acceso es Nothing (ArgumentNullException).
La ruta de acceso no es válida (DirectoryNotFoundException).
El origen es un directorio raíz (IOException).
La ruta de acceso combinada apunta a un archivo existente (IOException).
La ruta de acceso de origen y destino son la misma (IOException).
El archivo de destino ya existe y overwrite está establecido en False (IOException).
El parámetro onUserCancel está establecido en ThrowException y un subdirectorio del archivo no se puede copiar
(IOException).
La operación es cíclica (InvalidOperationException).
Un nombre de archivo o directorio de la ruta de acceso contiene dos puntos (:) (NotSupportedException).
La enumeración UICancelOption está establecida en ThrowException y el usuario cancela la operación o ésta no se
puede finalizar (OperationCanceledException).
La ruta supera la longitud máxima definida por el sistema (PathTooLongException).
La enumeración UICancelOption está establecida en ThrowException y el usuario carece de los permisos necesarios
(SecurityException).
El usuario no tiene permiso para modificar el archivo (UnauthorizedAccessException).
Comentarios
Si se intenta mover un directorio dentro de otro directorio que no existe, se creará la estructura de destino.
Tareas
En la tabla siguiente se muestra un ejemplo de una tarea en la que interviene el método
My.Computer.FileSystem.MoveDirectory.
Para Vea
Mover un directorio Cómo: Mover un directorio en Visual Basic
Ejemplo
En este ejemplo se mueve Directory1 dentro de Directory2.

VB
My.Computer.FileSystem.MoveDirectory("C:\Directory1", "C:\Directory2")

En este ejemplo se mueve Directory1 dentro de Directory2 y sobrescribe el directorio si ya existe.

VB
My.Computer.FileSystem.MoveDirectory("C:\Directory1", "C:\Directory2", _
True)

Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: FileSystemProxy (proporciona acceso a FileSystem)
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí
Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web Sí

Servicio de Windows Sí

Sitio Web Sí
Permisos
Los permisos siguientes pueden ser necesarios:
Permiso Descripción
FileIOPermission Controla la capacidad de tener acceso a archivos y carpetas. Enumeración asociada: Unrestricted.

UIPermission Controla los permisos relacionados con las interfaces de usuario y el Portapapeles. Enumeración asociada:
SafeSubWindows.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Referencia
My.Computer.FileSystem (Objeto)
UIOption (Enumeración)
UICancelOption (Enumeración)
My.Computer.FileSystem.MoveFile (Método)
My.Computer.FileSystem.CopyDirectory (Método)
Otros recursos
Crear, eliminar y mover archivos y directorios en Visual Basic
Referencia del lenguaje Visual Basic

My.Computer.FileSystem.MoveFile (Método)
Mueve un archivo a una nueva ubicación.

' Usage
My.Computer.FileSystem.MoveFile(sourceFileName ,destinationFileName)
My.Computer.FileSystem.MoveFile(sourceFileName ,destinationFileName ,overwrite)
My.Computer.FileSystem.MoveFile(sourceFileName ,destinationFileName ,showUI)
My.Computer.FileSystem.MoveFile(sourceFileName ,destinationFileName ,showUI ,onUserCancel)
' Declaration
Public Sub MoveFile( _
ByVal sourceFileName As String, _
ByVal destinationFileName As String _
)
' -or-
Public Sub MoveFile( _
ByVal sourceFileName As String, _
ByVal destinationFileName As String, _
ByVal overwrite As Boolean _
)
' -or-
Public Sub MoveFile( _
ByVal sourceFileName As String, _
ByVal destinationFileName As String, _
ByVal showUI As UIOption _
)
' -or-
Public Sub MoveFile( _
ByVal sourceFileName As String, _
ByVal destinationFileName As String, _
ByVal showUI As UIOption, _
ByVal onUserCancel As UICancelOption _
)

Parámetros
sourceFileName
String. Ruta de acceso del archivo que se va a mover. Obligatorio.
destinationFileName
String. Ruta de acceso del directorio al que se debe mover el archivo. Obligatorio.
overwrite
Boolean. Especifica si se van a sobrescribir los archivos existentes. El valor predeterminado es False. Obligatorio.
showUI
UIOption (Enumeración). Indica si se debe hacer un seguimiento visual del progreso de la operación. El valor predeterminado
es UIOption.OnlyErrorDialogs. Obligatorio.
onUserCancel
UICancelOption (Enumeración). Especifica si se produce o no una excepción cuando el usuario cancela la operación. El valor
predeterminado es UICancelOption.ThrowException. Obligatorio.
Excepciones
Las condiciones siguientes pueden producir una excepción:
La ruta de acceso no es válida por una de las razones siguientes: es una cadena de longitud cero; sólo contiene un
espacio en blanco; contiene caracteres no válidos; o es una ruta de acceso de dispositivo (empieza por \\.\)
(ArgumentException).
El nombre de archivo finaliza con una barra diagonal inversa (\) (ArgumentException).
La ruta de acceso no es válida porque es Nothing (ArgumentNullException).
destinationFileName es Nothing o una cadena vacía (ArgumentNullException).
El archivo de código fuente no es válido o no existe (FileNotFoundException).
La ruta de acceso combinada apunta a un directorio existente, el archivo de destino existe y overwrite está establecido en
False, un archivo del directorio de destino que tiene el mismo nombre está en uso o el usuario no tiene permisos
suficientes para tener acceso al archivo (IOException).
Un nombre de archivo o de directorio de la ruta de acceso contiene un signo de dos puntos (:) o tiene un formato no
válido (NotSupportedException).
El parámetro onUserCancel está establecido en ThrowException y el usuario ha cancelado la operación o se ha
producido un error de E/S no especificado (OperationCanceledException).
La ruta de acceso supera la longitud máxima definida por el sistema (PathTooLongException).
El usuario no tiene los permisos necesarios para ver la ruta de acceso (SecurityException).
El usuario no ha necesitado permiso (UnauthorizedAccessException).
Comentarios
Si la estructura de destino no existe, se crea.
El método MoveFile sólo conserva las entradas de control de acceso (ACE) cuando el archivo se mueve dentro del mismo
volumen. Esto incluye ACE heredadas, que se convierten en ACE directas cuando se mueven (las ACE directas tienen prioridad
sobre las ACE heredadas). Si un archivo se mueve entre volúmenes, no se copiarán las ACE.
Tareas
En la tabla siguiente se muestran ejemplos de tareas en las que interviene el método My.Computer.FileSystem.MoveFile.
Para Vea
Mover un archivo Cómo: Mover un archivo en Visual Basic

Mover una colección de archivos Cómo: Mover una colección de archivos en Visual Basic

Mover el contenido de un directorio Cómo: Mover el contenido de un directorio en Visual Basic


Ejemplo
En este ejemplo se mueve el archivo Test.txt de TestDir1 a TestDir2.

VB
My.Computer.FileSystem.MoveFile("C:\TestDir1\test.txt", "C:\TestDir2\test.txt")

En este ejemplo se mueve el archivo Test.txt de TestDir1 a TestDir2 y se cambia su nombre a Test2.txt.

VB
My.Computer.FileSystem.MoveFile("C:\TestDir1\test.txt", "C:\TestDir2\test2.txt")

Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: FileSystemProxy (proporciona acceso a FileSystem)
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí
Biblioteca de clases Sí
Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web Sí

Servicio de Windows Sí

Sitio Web Sí
Permisos
Los permisos siguientes pueden ser necesarios:
Permiso Descripción
EnvironmentPermission Controla la capacidad para tener acceso a todas las variables de entorno. Enumeración asociada:
Unrestricted.

FileIOPermission Controla la capacidad de tener acceso a archivos y carpetas. Enumeración asociada: Unrestricted.

RegistryPermission Controla la capacidad de tener acceso a variables del Registro. Enumeración asociada: Unrestricted.

UIPermission Controla los permisos relacionados con las interfaces de usuario y el Portapapeles. Enumeración asoci
ada: SafeSubWindows.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Referencia
My.Computer.FileSystem (Objeto)
UIOption (Enumeración)
UICancelOption (Enumeración)
Otros recursos
Crear, eliminar y mover archivos y directorios en Visual Basic
Referencia del lenguaje Visual Basic

My.Computer.FileSystem.OpenTextFieldParser (Método)
El método OpenTextFieldParser permite crear un objeto TextFieldParser (Objeto), con el que se consigue un procedimiento
sencillo y eficaz para analizar archivos de texto estructurados, como, por ejemplo, registros. El objeto TextFieldParser puede
utilizarse para leer archivos de ancho fijo y delimitado.

' Usage
Dim value As TextFieldParser = My.Computer.FileSystem.OpenTextFieldParser(file)
Dim value As TextFieldParser = My.Computer.FileSystem.OpenTextFieldParser(file ,delimiters)
Dim value As TextFieldParser = My.Computer.FileSystem.OpenTextFieldParser(file ,fieldWidths
)
' Declaration
Public Function OpenTextFieldParser( _
ByVal file As String _
) As TextFieldParser
' -or-
Public Function OpenTextFieldParser( _
ByVal file As String, _
ByVal delimiters As String() _
) As TextFieldParser
' -or-
Public Function OpenTextFieldParser( _
ByVal file As String, _
ByVal fieldWidths As Integer() _
) As TextFieldParser

Parámetros
file
String. Archivo que se va a abrir con TextFieldParser. Obligatorio.
delimiters
String(). Delimitadores para los campos. Obligatorio.
fieldWidths
Integer(). Ancho de los campos. Obligatorio.
Valor devuelto
TextFieldParser
Excepciones
Las condiciones siguientes pueden producir una excepción:
La ruta de acceso no es válida por una de las razones siguientes: es una cadena de longitud cero; sólo contiene un
espacio en blanco; contiene caracteres no válidos; o es una ruta de acceso de dispositivo (empieza por \\.\)
(ArgumentException).
El nombre de archivo finaliza con una barra diagonal (ArgumentException).
La ruta de acceso no es válida porque es Nothing (ArgumentNullException).
El archivo especificado no existe (FileNotFoundException).
El archivo especificado está en uso (IOException).
La ruta de acceso supera la longitud máxima definida por el sistema (PathTooLongException).
Un nombre de archivo o de directorio de la ruta de acceso contiene un signo de dos puntos (:) o tiene un formato no
válido (NotSupportedException).
El usuario no tiene los permisos necesarios para ver la ruta de acceso (SecurityException).
Una fila no se puede analizar utilizando el formato especificado (MalformedLineException). El mensaje de excepción
especifica la línea que produce la excepción, mientras que el texto contenido en la línea se asigna a
TextFieldParser.ErrorLine (Propiedad).
El usuario no tiene permisos suficientes para el acceso al archivo (UnauthorizedAccessException).
Tareas
En la tabla siguiente se muestran ejemplos de tareas en las que interviene el método
My.Computer.FileSystem.OpenTextFieldParser.
Para Vea
Leer un archivo de texto delimitado Cómo: Leer archivos de texto delimitado por comas en Visual Basic

Leer un archivo de texto de ancho fijo Cómo: Leer archivos de texto de ancho fijo en Visual Basic

Leer un archivo de texto con varios formatos Cómo: Leer archivos de texto con varios formatos en Visual Basic
Ejemplo
En este ejemplo se abre TextFieldParser reader, que se utiliza para leer C:\TestFolder1\Test1.txt.
VB
Dim reader As Microsoft.VisualBasic.FileIO.TextFieldParser
reader = My.Computer.FileSystem.OpenTextFieldParser _
("C:\TestFolder1\test1.txt")
reader.TextFieldType = Microsoft.VisualBasic.FileIO.FieldType.Delimited
reader.delimiters = New String() {","}
Dim currentRow As String()
While Not reader.EndOfData
Try
currentRow = reader.ReadFields()
Dim currentField As String
For Each currentField In currentRow
MsgBox(currentField)
Next
Catch ex As Microsoft.VisualBasic.FileIO.MalformedLineException
MsgBox("Line " & ex.Message & _
"is not valid and will be skipped.")
End Try
End While

Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: FileSystemProxy (proporciona acceso a FileSystem)
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web Sí

Servicio de Windows Sí
Sitio Web Sí

Permisos
Los permisos siguientes pueden ser necesarios:
Permiso Descripción
FileIOPermission Controla la capacidad de tener acceso a archivos y carpetas. Enumeración asociada: Unrestricted.

SecurityPermission Describe un conjunto de permisos de seguridad aplicados al código. Enumeración asociada:


ControlEvidence.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Tareas
Cómo: Leer archivos de texto en Visual Basic
Cómo: Leer archivos de texto delimitado por comas en Visual Basic
Cómo: Leer archivos de texto con varios formatos en Visual Basic
Referencia
My.Computer.FileSystem (Objeto)
TextFieldParser (Objeto)
OpenTextFieldParser
Conceptos
Analizar archivos de texto con el objeto TextFieldParser
Otros recursos
Leer archivos en Visual Basic
Referencia del lenguaje Visual Basic

My.Computer.FileSystem.OpenTextFileReader (Método)
Abre StreamReader.

' Usage
Dim value As System.IO.StreamReader = My.Computer.FileSystem.OpenTextFileReader(file)
Dim value As System.IO.StreamReader = My.Computer.FileSystem.OpenTextFileReader(file ,encod
ing)
' Declaration
Public Function OpenTextFileReader( _
ByVal file As String _
) As System.IO.StreamReader
' -or-
Public Function OpenTextFileReader( _
ByVal file As String, _
ByVal encoding As System.Text.Encoding _
) As System.IO.StreamReader

Parámetros
file
String. Archivo que se va a leer. Obligatorio.
encoding
Encoding. El valor predeterminado es UTF8. Es obligatorio.
Valor devuelto
StreamReader
Excepciones
Las condiciones siguientes pueden crear una excepción:
El nombre de archivo finaliza con una barra diagonal inversa (\) (ArgumentException).
No se encuentra el archivo especificado (FileNotFoundException).
El usuario no tiene los permisos necesarios para ver leer del archivo (SecurityException).
Comentarios
Con un StreamReader sólo se pueden leer archivos de texto.
Tareas
La tabla siguiente muestra una lista de ejemplos de tareas en las que está implicado el método
My.Computer.FileSystem.OpenTextFileReader.
Para Vea
Abrir un archivo con un StreamReader Cómo: Leer texto de archivos con Streamreader (Visual Basic)
Ejemplo
Este ejemplo abre el archivo Testfile.txt, lee una línea del mismo y la muestra en un MessageBox.
VB
Dim fileReader As System.IO.StreamReader
fileReader = _
My.Computer.FileSystem.OpenTextFileReader("C:\\testfile.txt")
Dim stringReader As String
stringReader = fileReader.ReadLine()
MsgBox("The first line of the file is " & stringReader)
Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: FileSystemProxy (proporciona acceso a FileSystem)
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web Sí

Servicio de Windows Sí

Sitio Web Sí
Permisos
El permiso siguiente puede ser necesario:
Permiso Descripción
FileIOPermission Controla la capacidad de tener acceso a archivos y carpetas. Enumeración asociada: Unrestricted.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Tareas
Cómo: Leer texto de archivos con Streamreader (Visual Basic)
Referencia
My.Computer.FileSystem (Objeto)
System.Text.Encoding
System.IO.StreamReader
Microsoft.VisualBasic.FileIO.FileSystem.OpenTextFileReader
Otros recursos
Leer archivos en Visual Basic
Referencia del lenguaje Visual Basic

My.Computer.FileSystem.OpenTextFileWriter (Método)
Abre StreamWriter.

' Usage
Dim value As System.IO.StreamWriter = My.Computer.FileSystem.OpenTextFileWriter(file ,appen
d)
Dim value As System.IO.StreamWriter = My.Computer.FileSystem.OpenTextFileWriter(file ,appen
d ,encoding)
' Declaration
Public Function OpenTextFileWriter( _
ByVal file As String, _
ByVal append As Boolean _
) As System.IO.StreamWriter
' -or-
Public Function OpenTextFileWriter( _
ByVal file As String, _
ByVal append As Boolean, _
ByVal encoding As System.Text.Encoding _
) As System.IO.StreamWriter

Parámetros
file
String. Archivo en el que se va a escribir. Obligatorio.
append
Boolean. Especifica si en el archivo la información se anexa o se sobrescribe. El valor predeterminado es False. Obligatorio.
encoding
Encoding. Codificación que se va a utilizar para escribir en el archivo. El valor predeterminado es UTF8. Es obligatorio.
Valor devuelto
StreamWriter
Excepciones
La condición siguiente puede hacer que se produzca una excepción:
El nombre de archivo finaliza con una barra oblicua final (ArgumentException).
Tareas
En la tabla siguiente se enumera un ejemplo de una tarea en la que interviene el método
My.Computer.FileSystem.OpenTextFileWriter.
Para Vea
Escribir texto en un archivo con StreamWriter Cómo: Escribir texto en archivos con un objeto StreamWriter en Visual Basic
Ejemplo
Este ejemplo abre StreamWriter con el método My.Computer.FileSystem.OpenTextFileWriter y lo utiliza para escribir una
cadena en un archivo de texto con el método WriteLine de la clase StreamWriter.
VB
Dim file As System.IO.StreamWriter
file = My.Computer.FileSystem.OpenTextFileWriter("c:\test.txt", True)
file.WriteLine("Here is the first string.")
file.Close()

Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: FileSystemProxy (proporciona acceso a FileSystem)
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web Sí

Servicio de Windows Sí

Sitio Web Sí
Permisos
El permiso siguiente puede ser necesario:
Permiso Descripción
FileIOPermission Controla la capacidad de tener acceso a archivos y carpetas. Enumeración asociada: Unrestricted.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Tareas
Cómo: Escribir texto en archivos con un objeto StreamWriter en Visual Basic
Referencia
My.Computer.FileSystem (Objeto)
System.Text.Encoding
System.IO.StreamWriter
Microsoft.VisualBasic.FileIO.FileSystem.OpenTextFileWriter
Referencia del lenguaje Visual Basic

My.Computer.FileSystem.ReadAllBytes (Método)
Devuelve el contenido de un archivo como una matriz de bytes.

' Usage
Dim value As Byte() = My.Computer.FileSystem.ReadAllBytes(file)
' Declaration
Public Function ReadAllBytes( _
ByVal file As String _
) As Byte()

Parámetros
file
String. Archivo que se va a leer. Obligatorio.
Valor devuelto
Byte, matriz que incluye el contenido del archivo.
Excepciones
Las condiciones siguientes pueden hacer que se produzca una excepción:
La ruta de acceso no es válida por una de las razones siguientes: es una cadena de longitud cero; sólo contiene un
espacio en blanco; contiene caracteres no válidos; o es una ruta de acceso de dispositivo (empieza por \\.\)
(ArgumentException).
El nombre de archivo finaliza con una barra oblicua final (ArgumentException).
La ruta de acceso no es válida porque es Nothing (ArgumentNullException).
El archivo no existe (FileNotFoundException).
El archivo está en uso por otro proceso o hay un error de E/S (IOException).
La ruta supera la longitud máxima definida por el sistema (PathTooLongException).
Un nombre de archivo o de directorio de la ruta de acceso contiene un signo de dos puntos (:) o tiene un formato no
válido (NotSupportedException).
No hay suficiente memoria para escribir la cadena en el búfer (OutOfMemoryException).
El usuario no tiene los permisos necesarios para ver la ruta de acceso (SecurityException).
Comentarios
El método ReadAllBytes del objeto My.Computer.FileSystem permite leer de un archivo binario. El contenido del archivo se
devuelve como una matriz de bytes.
No tome ninguna decisión sobre el contenido del archivo basándose en su nombre. Por ejemplo, es posible que el archivo
Form1.vb no sea un archivo de código fuente de Visual Basic. Compruebe todas las entradas antes de utilizar los datos en la
aplicación.
Tareas
La tabla siguiente muestra una lista de ejemplos de tareas en las que está implicado el método
My.Computer.FileSystem.ReadAllBytes.
Para Vea
Leer de un archivo binario. Cómo: Leer archivos binarios en Visual Basic
Ejemplo
Este ejemplo lee del archivo C:/Documents and Settings/selfportrait.jpg.

VB
My.Computer.FileSystem.ReadAllBytes _
("C:/Documents and Settings/selfportrait.jpg")

Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: FileSystemProxy (proporciona acceso a FileSystem)
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web Sí

Servicio de Windows Sí

Sitio Web Sí
Permisos
El permiso siguiente puede ser necesario:
Permiso Descripción
FileIOPermission Controla la capacidad de tener acceso a archivos y carpetas. Enumeración asociada: Unrestricted.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Referencia
My.Computer.FileSystem (Objeto)
ReadAllBytes
Otros recursos
Leer archivos en Visual Basic
Referencia del lenguaje Visual Basic

My.Computer.FileSystem.ReadAllText (Método)
Devuelve el contenido de un archivo de texto como un objeto String.

' Usage
Dim value As String = My.Computer.FileSystem.ReadAllText(file)
Dim value As String = My.Computer.FileSystem.ReadAllText(file ,encoding)
' Declaration
Public Function ReadAllText( _
ByVal file As String _
) As String
' -or-
Public Function ReadAllText( _
ByVal file As String, _
ByVal encoding As System.Text.Encoding _
) As String

Parámetros
file
String. Nombre y ruta de acceso del archivo que se debe leer. Obligatorio.
encoding
System.Text.Encoding. Codificación de caracteres que utilizar al leer el archivo. Obligatorio. El valor predeterminado es UTF-8.
Valor devuelto
String que incluye el contenido del archivo.
Excepciones
Puede que el contenido del archivo no sea el esperado y que los métodos que leen el archivo produzcan un error.
Las condiciones siguientes pueden producir una excepción:
La ruta de acceso no es válida por una de las razones siguientes: es una cadena de longitud cero; sólo contiene un
espacio en blanco; contiene caracteres no válidos; o es una ruta de acceso de dispositivo (empieza por \\.\)
(ArgumentException).
El nombre de archivo finaliza con una barra oblicua final (ArgumentException).
La ruta de acceso no es válida porque es Nothing (ArgumentNullException).
El archivo no existe (FileNotFoundException).
El archivo está en uso por otro proceso o hay un error de E/S (IOException).
La ruta supera la longitud máxima definida por el sistema (PathTooLongException).
Un nombre de archivo o de directorio de la ruta de acceso contiene un signo de dos puntos (:) o tiene un formato no
válido (NotSupportedException).
No hay suficiente memoria para escribir la cadena en el búfer (OutOfMemoryException).
El usuario no tiene los permisos necesarios para ver la ruta de acceso (SecurityException).
Comentarios
El método ReadAllText del objeto My.Computer.FileSystem permite leer de un archivo de texto. El contenido del archivo se
devuelve como una cadena.
Se puede especificar la codificación del archivo si el contenido de éste está en una codificación como ASCII o UTF-8. Si lee de
un archivo con caracteres extendidos, tendrá que especificar la codificación del archivo.
No tome ninguna decisión sobre el contenido del archivo basándose en su nombre. Por ejemplo, es posible que el archivo
Form1.vb no sea un archivo de código fuente de Visual Basic. Compruebe todas las entradas antes de utilizar los datos en la
aplicación.
Tareas
La tabla siguiente muestra una lista de ejemplos de tareas en las que está implicado el método
My.Computer.FileSystem.ReadAllText.
Para Vea
Leer de un archivo de texto Cómo: Leer archivos de texto en Visual Basic
Ejemplo
Este ejemplo lee el contenido del archivo Test.txt , lo coloca en una cadena y, a continuación, lo muestra en un cuadro de
mensaje.
VB
Dim reader As String
reader = My.Computer.FileSystem.ReadAllText("C:\test.txt")
MsgBox(reader)

Este ejemplo lee el contenido del archivo ASCII Test.txt , lo coloca en una cadena y, a continuación, lo muestra en un cuadro
de mensaje.
VB
Dim reader As String
reader = My.Computer.FileSystem.ReadAllText("C:\test.txt", _
System.Text.Encoding.ASCII)
MsgBox(reader)

Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: FileSystemProxy (proporciona acceso a FileSystem)
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web Sí

Servicio de Windows Sí

Sitio Web Sí
Permisos
El permiso siguiente puede ser necesario:
Permiso Descripción
FileIOPermission Controla la capacidad de tener acceso a archivos y carpetas. Enumeración asociada: Unrestricted.
Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Tareas
Cómo: Leer texto de archivos con Streamreader (Visual Basic)
Solución de problemas: Leer y escribir en archivos de texto
Tutorial: Manipular archivos y directorios en Visual Basic
Referencia
My.Computer.FileSystem (Objeto)
System.Text.Encoding
Microsoft.VisualBasic.FileIO.FileSystem.ReadAllText
StreamReader
Conceptos
Codificaciones de archivos
Otros recursos
Leer archivos en Visual Basic
Referencia del lenguaje Visual Basic

My.Computer.FileSystem.RenameDirectory (Método)
Cambia el nombre de un directorio.

' Usage
My.Computer.FileSystem.RenameDirectory(directory ,newName)
' Declaration
Public Sub RenameDirectory( _
ByVal directory As String, _
ByVal newName As String _
)

Parámetros
directory
String. Ruta de acceso y nombre de directorio al que se va a cambiar el nombre. Obligatorio.
newName
String. Nuevo nombre para el directorio. Obligatorio.
Excepciones
Las condiciones siguientes pueden producir una excepción:
La ruta de acceso no es válida por una de las razones siguientes: es una cadena de longitud cero; sólo contiene un
espacio en blanco; contiene caracteres no válidos; o es una ruta de acceso de dispositivo (empieza por \\.\)
(ArgumentException).
El parámetro newName contiene información de la ruta de acceso (ArgumentException).
La ruta de acceso no es válida porque es Nothing (ArgumentNullException).
El parámetro newName es Nothing o una cadena vacía (ArgumentNullException).
El directorio de origen no es válido o no existe (DirectoryNotFoundException).
Ya hay un archivo o directorio con el nombre especificado en newName (IOException).
El directorio es un directorio raíz (IOException).
La ruta de acceso tiene más de 248 caracteres (PathTooLongException).
Un nombre de archivo o de directorio de la ruta de acceso contiene un signo de dos puntos (:) o tiene un formato no
válido (NotSupportedException).
El usuario no tiene los permisos necesarios para ver la ruta de acceso (SecurityException).
El usuario no tiene los permisos requeridos (UnauthorizedAccessException).
Comentarios
Este método no se puede utilizar para mover un directorio; utilice el método MoveDirectory para mover el directorio y
cambiarle el nombre.
Tareas
En la tabla siguiente se incluye un ejemplo de una tarea en la que interviene el método
My.Computer.FileSystem.RenameDirectory.
Para Vea
Cambiar el nombre de un directorio Cómo: Cambiar el nombre de un directorio en Visual Basic
Ejemplo
Este ejemplo cambia el nombre del directorio Test a SecondTest.
VB
My.Computer.FileSystem.RenameDirectory("C:MyDocuments\Test", "SecondTest")

Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: FileSystemProxy (proporciona acceso a FileSystem)
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web Sí

Servicio de Windows Sí

Sitio Web Sí
Permisos
El permiso siguiente puede ser necesario:
Permiso Descripción
FileIOPermission Controla la capacidad de tener acceso a archivos y carpetas. Enumeración asociada: Unrestricted.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Tareas
Cómo: Analizar rutas de acceso a archivos en Visual Basic
Referencia
My.Computer.FileSystem (Objeto)
My.Computer.FileSystem.MoveDirectory (Método)
RenameDirectory
Otros recursos
Crear, eliminar y mover archivos y directorios en Visual Basic
Referencia del lenguaje Visual Basic

My.Computer.FileSystem.RenameFile (Método)
Cambia el nombre de un archivo.

' Usage
My.Computer.FileSystem.RenameFile(file ,newName)
' Declaration
Public Sub RenameFile( _
ByVal file As String, _
ByVal newName As String _
)

Parámetros
file
String. Archivo al que se va a cambiar el nombre. Obligatorio.
newName
String. Nuevo nombre del archivo. Obligatorio.
Excepciones
Las condiciones siguientes pueden producir una excepción:
La ruta de acceso no es válida por una de las razones siguientes: es una cadena de longitud cero; sólo contiene un
espacio en blanco; contiene caracteres no válidos; o es una ruta de acceso de dispositivo (empieza por \\.\)
(ArgumentException).
El parámetro newName contiene información de la ruta de acceso o termina con una barra diagonal inversa (\)
(ArgumentException).
La ruta de acceso no es válida porque es Nothing (ArgumentNullException).
El parámetro newName es Nothing o una cadena vacía (ArgumentNullException).
El archivo de código fuente no es válido o no existe (FileNotFoundException).
Ya hay un archivo o directorio con el nombre especificado en newName (IOException).
La ruta supera la longitud máxima definida por el sistema (PathTooLongException).
Un nombre de archivo o de directorio de la ruta de acceso contiene un signo de dos puntos (:) o tiene un formato no
válido (NotSupportedException).
El usuario no tiene los permisos necesarios para ver la ruta de acceso (SecurityException).
El usuario no tiene los permisos requeridos (UnauthorizedAccessException).
Comentarios
Este método no se puede utilizar para mover un archivo; utilice My.Computer.FileSystem.MoveFile (Método) para mover el
archivo y cambiarle el nombre.
Tareas
En la tabla siguiente se incluye un ejemplo de una tarea en la que interviene el método
My.Computer.FileSystem.RenameFile.
Para Vea
Cambiar el nombre de un archivo Cómo: Cambiar el nombre de un archivo en Visual Basic
Ejemplo
En este ejemplo se cambia el nombre del archivo Test.txt por SecondTest.txt.
VB
My.Computer.FileSystem.RenameFile("C:\Test.txt", "SecondTest.txt")

Cambie "C:\Test.txt" por la ruta de acceso y nombre de archivo del archivo al que desea cambiarle el nombre.
Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: FileSystemProxy (proporciona acceso a FileSystem)
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web Sí

Servicio de Windows Sí

Sitio Web Sí
Permisos
El permiso siguiente puede ser necesario:
Permiso Descripción
FileIOPermission Controla la capacidad de tener acceso a archivos y carpetas. Enumeración asociada: Unrestricted.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Referencia
My.Computer.FileSystem (Objeto)
Microsoft.VisualBasic.FileIO.FileSystem.RenameFile(System.String,System.String)
Otros recursos
Crear, eliminar y mover archivos y directorios en Visual Basic
Referencia del lenguaje Visual Basic

My.Computer.FileSystem.SpecialDirectories (Propiedad)
Obtiene un objeto que proporciona las propiedades para tener acceso a los directorios a los que se hace referencia más
frecuentemente.

' Usage
Dim value As Microsoft.VisualBasic.MyServices.SpecialDirectoriesProxy = My.Computer.FileSys
tem.SpecialDirectories
' Declaration
Public ReadOnly Property SpecialDirectories As MyServices.SpecialDirectoriesProxy

Valor devuelto
Esta propiedad devuelve el My.Computer.FileSystem.SpecialDirectories (Objeto) para el equipo.
Comentarios
Esta propiedad proporciona acceso sencillo a My.Computer.FileSystem.SpecialDirectories (Objeto).
Ejemplo
Este ejemplo devuelve el valor de ruta de acceso al archivo para el directorio Desktop del usuario y lo muestra.
VB
Dim filePath As String
filePath = My.Computer.FileSystem.SpecialDirectories.Desktop
MsgBox(filePath)

Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: FileSystemProxy (proporciona acceso a FileSystem)
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web Sí

Servicio de Windows Sí

Sitio Web Sí
Permisos
No se requiere ningún permiso.
Vea también
Referencia
My.Computer.FileSystem (Objeto)
My.Computer.FileSystem.SpecialDirectories (Objeto)
Referencia del lenguaje Visual Basic

My.Computer.FileSystem.WriteAllBytes (Método)
Escribe datos en un archivo binario.

' Usage
My.Computer.FileSystem.WriteAllBytes(file ,data ,append)
' Declaration
Public Sub WriteAllBytes( _
ByVal file As String, _
ByVal data As Byte(), _
ByVal append As Boolean _
)

Parámetros
file
String. Nombre y ruta de acceso del archivo donde se va a escribir. Obligatorio.
data
Byte. Datos que se escriben en el archivo. Obligatorio.
append
Boolean. Si se anexan o sobrescriben los datos. El valor predeterminado es False. Obligatorio.
Excepciones
Las condiciones siguientes pueden crear una excepción:
La ruta de acceso no es válida por una de las razones siguientes: es una cadena de longitud cero; sólo contiene un
espacio en blanco; contiene caracteres no válidos o es una ruta de acceso de dispositivo (empieza por \\.\)
(ArgumentException).
La ruta de acceso no es válida porque es Nothing o finaliza con una barra inversa (ArgumentNullException).
El parámetro file señala una ruta de acceso que no existe (FileNotFoundException o DirectoryNotFoundException).
El archivo está en uso por otro proceso o hay un error de E/S (IOException).
La ruta supera la longitud máxima definida por el sistema (PathTooLongException).
Un nombre de archivo o de directorio de la ruta de acceso contiene un signo de dos puntos (:) o tiene un formato no
válido (NotSupportedException).
El usuario no tiene los permisos necesarios para ver la ruta de acceso (SecurityException).
Comentarios
Si el parámetro append es True, anexa los datos al archivo; de lo contrario se sobrescriben los datos del archivo.
Si la ruta de acceso especificada, excepto el nombre de archivo, no es válida, se producirá una excepción
DirectoryNotFoundException. Si la ruta de acceso es válida pero el archivo no existe, se crea el archivo.
Tareas
En la tabla siguiente se enumera un ejemplo de una tarea en la que interviene el método
My.Computer.FileSystem.WriteAllBytes.
Para Vea
Escribir en un archivo binario. Cómo: Escribir en archivos binarios en Visual Basic
Ejemplo
Este ejemplo anexa la matriz de datos CustomerData al archivo de CollectedData.
VB
My.Computer.FileSystem.WriteAllBytes _
("C:\MyDocuments\CustomerData", CustomerData, True)

Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: FileSystemProxy (proporciona acceso a FileSystem)
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web Sí

Servicio de Windows Sí

Sitio Web Sí
Permisos
El permiso siguiente puede ser necesario:
Permiso Descripción
FileIOPermission Controla la capacidad de tener acceso a archivos y carpetas. Enumeración asociada: Unrestricted.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Tareas
Cómo: Escribir en archivos binarios en Visual Basic
Referencia
My.Computer.FileSystem (Objeto)
WriteAllBytes
Otros recursos
Escribir en archivos en Visual Basic
Referencia del lenguaje Visual Basic

My.Computer.FileSystem.WriteAllText (Método)
Escribe texto en un archivo.

' Usage
My.Computer.FileSystem.WriteAllText(file ,text ,append)
My.Computer.FileSystem.WriteAllText(file ,text ,append ,encoding)
' Declaration
Public Sub WriteAllText( _
ByVal file As String, _
ByVal text As String, _
ByVal append As Boolean _
)
' -or-
Public Sub WriteAllText( _
ByVal file As String, _
ByVal text As String, _
ByVal append As Boolean, _
ByVal encoding As System.Text.Encoding _
)

Parámetros
file
String. Archivo en el que se va a escribir. Obligatorio.
text
String. Texto que se va a escribir en el archivo. Obligatorio.
append
Boolean. Si el texto se va a anexar o sobrescribir en el texto existente. El valor predeterminado es False. Obligatorio.
encoding
Encoding. Qué codificación se utiliza al escribir en un archivo. Obligatorio. El valor predeterminado es UTF-8.
Excepciones
Las condiciones siguientes pueden producir una excepción:
La ruta de acceso no es válida por una de las razones siguientes: es una cadena de longitud cero; sólo contiene un
espacio en blanco; contiene caracteres no válidos; termina con una barra diagonal; o es una ruta de acceso de dispositivo
(empieza por \\.\) (ArgumentException).
La ruta de acceso no es válida porque es Nothing (ArgumentNullException).
file señala a una ruta de acceso que no existe (FileNotFoundException o DirectoryNotFoundException).
El archivo está en uso por otro proceso o hay un error de E/S (IOException).
La ruta de acceso supera la longitud máxima definida por el sistema (PathTooLongException).
Un nombre de archivo o de directorio de la ruta de acceso contiene un signo de dos puntos (:) o tiene un formato no
válido (NotSupportedException).
El usuario no tiene los permisos necesarios para ver la ruta de acceso (SecurityException).
Si realiza una ejecución en un contexto de confianza parcial, el código podría producir una excepción por falta de privilegios.
Para obtener más información, vea Conceptos básicos sobre la seguridad de acceso a código.
Comentarios
Cuando no se especifica ninguna codificación, se utiliza UTF-8. La marca de orden de bytes (BOM) para la codificación se
escribe en el archivo, a menos que se especifique System.Text.Encoding.Default, que utiliza la actual página de códigos ANSI
del sistema.
Si el archivo especificado no existe, se crea.
Si append se establece en False, se sobrescribe el texto existente en el archivo.
Si la codificación especificada no coincide con la codificación existente del archivo, se omite la codificación especificada.
Tareas
En la tabla siguiente se muestran ejemplos de tareas en las que interviene el método
My.Computer.FileSystem.WriteAllText.
Para Vea
Escribir texto en un archivo Cómo: Escribir texto en archivos en Visual Basic

Anexar texto a un archivo Cómo: Anexar a archivos de texto en Visual Basic


Ejemplo
Este ejemplo escribe la línea "This is new text to be added." en el archivo Test.txt y sobrescribe el texto existente en el
archivo.
VB
My.Computer.FileSystem.WriteAllText("C:\TestFolder1\test.txt", _
"This is new text to be added.", False)

Este ejemplo escribe los nombres de los archivos de la carpeta Documents and Settings en FileList.txt e inserta un
retorno de carro entre cada uno para mejor legibilidad.
VB
For Each foundFile As String In _
My.Computer.FileSystem.GetFiles("C:\Documents and Settings")
foundFile = foundFile & vbCrLf
My.Computer.FileSystem.WriteAllText _
("C:\Documents and Settings\FileList.txt", foundFile, True)
Next

Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: FileSystemProxy (proporciona acceso a FileSystem)
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web Sí

Servicio de Windows Sí

Sitio Web Sí
Permisos
El permiso siguiente puede ser necesario:
Permiso Descripción
FileIOPermission Controla la capacidad de tener acceso a archivos y carpetas. Enumeración asociada: Unrestricted.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Referencia
My.Computer.FileSystem (Objeto)
System.Text.Encoding
Microsoft.VisualBasic.FileIO.FileSystem.WriteAllText
Otros recursos
Escribir en archivos en Visual Basic
Referencia del lenguaje Visual Basic

My.Computer.FileSystem.SpecialDirectories (Objeto)
Proporciona las propiedades para tener acceso a los directorios a los que se hace referencia habitualmente.
Comentarios
Si la ruta de acceso al directorio al que se hace referencia está vacía, debido generalmente a que el sistema operativo no
admite el directorio, se produce una excepción DirectoryNotFoundException.
No aparece ninguna barra diagonal inversa (\) al final de la ruta de acceso.
Tareas
La tabla siguiente muestra ejemplos de tareas que implican al objeto My.Computer.FileSystem.SpecialDirectories.
Para Vea
Leer del directorio MyDocuments Cómo: Recuperar el contenido del directorio Mis documentos en Visual Basic
Ejemplo
Este ejemplo devuelve el valor de filePath para el directorio Desktop del usuario y lo muestra.
VB
Dim filePath As String
filePath = My.Computer.FileSystem.SpecialDirectories.Desktop
MsgBox(filePath)

Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: SpecialDirectoriesProxy (proporciona acceso a SpecialDirectories)
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Referencia
My.Computer.FileSystem.SpecialDirectories (Miembros del objeto)
My.Computer.FileSystem.SpecialDirectories.AllUsersApplicationData (Propiedad)
My.Computer.FileSystem.SpecialDirectories.CurrentUserApplicationData (Propiedad)
My.Computer.FileSystem.SpecialDirectories.Desktop (Propiedad)
My.Computer.FileSystem.SpecialDirectories.MyDocuments (Propiedad)
My.Computer.FileSystem.SpecialDirectories.MyMusic (Propiedad)
My.Computer.FileSystem.SpecialDirectories.MyPictures (Propiedad)
My.Computer.FileSystem.SpecialDirectories.Programs (Propiedad)
My.Computer.FileSystem.SpecialDirectories.Temp (Propiedad)
My.Computer.FileSystem (Objeto)
Microsoft.VisualBasic.FileIO.SpecialDirectories
Referencia del lenguaje Visual Basic

My.Computer.FileSystem.SpecialDirectories (Miembros del


objeto)
El objeto My.Computer.FileSystem.SpecialDirectories (Propiedad) proporciona propiedades para obtener acceso a los
directorios a los que se hace referencia normalmente.
Propiedades
AllUsersApplicationData String de sólo lectura que representa el nombre de la ruta de acceso que señala al directorio Tod
os los datos de aplicación de los usuarios.

CurrentUserApplicationData String de sólo lectura que representa el nombre de la ruta de acceso que señala al directorio Dat
os de programa del usuario actual.

Escritorio String de sólo lectura que representa el nombre de la ruta de acceso que señala al directorio Escr
itorio del usuario.

MyDocuments String de sólo lectura que representa el nombre de la ruta de acceso que señala al directorio Mis
documentos del usuario.

MyMusic String de sólo lectura que representa el nombre de la ruta de acceso que señala al directorio Mi
música del usuario.

MyPictures String de sólo lectura que representa el nombre de la ruta de acceso que señala al directorio Mis
imágenes del usuario.

Programas String de sólo lectura que representa el nombre de la ruta de acceso que señala al directorio Pro
gramas del usuario.

Temp String de sólo lectura que representa el nombre de la ruta de acceso que señala al directorio tem
poral del usuario.
Vea también
Referencia
My.Computer.FileSystem.SpecialDirectories (Objeto)
Referencia del lenguaje Visual Basic

My.Computer.FileSystem.SpecialDirectories.AllUsersApplicationData
(Propiedad)
Obtiene una ruta de acceso para almacenar datos de la aplicación que se comparten entre todos los usuarios en el equipo.

' Usage
Dim value As String = My.Computer.FileSystem.SpecialDirectories.AllUsersApplicationData
' Declaration
Public ReadOnly Property AllUsersApplicationData As String

Valor devuelto
String.
Excepciones
La condición siguiente puede provocar una excepción:
La ruta de acceso está vacía, habitualmente porque el sistema operativo no admite el directorio (DirectoryNotFoundException).
Comentarios
My.Computer.FileSystem.SpecialDirectories (Objeto) contiene rutas de acceso a directorios a los que se hace referencia normalmente.
Si la ruta de acceso no existe, se crea con el formato siguiente: BasePath\CompanyName\ProductName\Version
Una BasePath típica en Windows XP es C:\Documents and Settings\All Users\Application Data. CompanyName, ProductName y Version
se pueden obtener de las propiedadesMy.Application.Info.CompanyName, My.Application.Info.ProductName y
My.Application.Info.Version.
Nota
Si los nombres Company y Product no se especifican en el cuadro de diálogo Información de ensamblado, el CompanyName\Pro
ductName de la ruta de acceso se reemplazan con el nombre del ensamblado. Para obtener más información sobre cómo establecer lo
s nombres de información de ensamblado, vea Cómo: Especificar información de ensamblado.

Ejemplo
En este ejemplo se muestra la ruta para los datos de aplicación compartidos en un MessageBox.
VB
MsgBox _
(My.Computer.FileSystem.SpecialDirectories.AllUsersApplicationData)

Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: SpecialDirectoriesProxy (proporciona acceso a SpecialDirectories)
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web Sí


Servicio de Windows Sí
Sitio Web Sí
Permisos
El permiso siguiente puede ser necesario:
Permiso Descripción
FileIOPermission Controla la capacidad de tener acceso a archivos y carpetas. Enumeración asociada: Unrestricted.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Referencia
My.Computer.FileSystem.SpecialDirectories (Objeto)
Microsoft.VisualBasic.FileIO.SpecialDirectories.AllUsersApplicationData
Referencia del lenguaje Visual Basic

My.Computer.FileSystem.SpecialDirectories.CurrentUserApplicationData
(Propiedad)
Obtiene una ruta de acceso para almacenar los datos de la aplicación del usuario actual.

' Usage
Dim value As String = My.Computer.FileSystem.SpecialDirectories.CurrentUserApplicationData
' Declaration
Public ReadOnly Property CurrentUserApplicationData As String

Valor devuelto
String.
Excepciones
La condición siguiente puede provocar una excepción:
La ruta de acceso está vacía, habitualmente porque el sistema operativo no admite el directorio (DirectoryNotFoundException).
Comentarios
My.Computer.FileSystem.SpecialDirectories (Objeto) contiene rutas de acceso a directorios a los que se hace referencia normalmente.
Si la ruta de acceso no existe, se crea con el formato siguiente: BasePath\CompanyName\ProductName\Version
Una BasePath típica en Windows XP es C:\Documents and Settings\username\Application Data. CompanyName, ProductName y Version se
pueden obtener de las propiedadesMy.Application.Info.CompanyName, My.Application.Info.ProductName y My.Application.Info.Version.
Nota
Si los nombres Company y Product no se especifican en el cuadro de diálogo Información de ensamblado, el CompanyName\ProductNa
me de la ruta de acceso se reemplazan con el nombre del ensamblado. Para obtener más información sobre cómo establecer los nombres de i
nformación de ensamblado, vea Cómo: Especificar información de ensamblado.

Los datos almacenados en esta ruta de acceso forman parte de un perfil de usuario habilitado para itinerancia. Un usuario móvil trabaja en más
de un equipo en una red. El perfil de usuario para un usuario móvil se mantiene en un servidor en la red y se carga en un sistema cuando el
usuario inicia sesión. Para que un perfil de usuario sea elegible para itinerancia, el sistema operativo debe permitir perfiles de itinerancia y se
debe habilitar la característica.
Ejemplo
En este ejemplo se muestra la ruta de acceso para almacenar los datos de la aplicación del usuario actual en MessageBox.
VB
MsgBox(My.Computer.FileSystem.SpecialDirectories.CurrentUserApplicationData)

Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: SpecialDirectoriesProxy (proporciona acceso a SpecialDirectories)
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web Sí


Servicio de Windows Sí

Sitio Web Sí
Permisos
Se requiere el siguiente permiso:
Permiso Descripción
FileIOPermission Controla la capacidad de tener acceso a archivos y carpetas. Enumeración asociada: Unrestricted.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Referencia
My.Computer.FileSystem.SpecialDirectories (Objeto)
Microsoft.VisualBasic.FileIO.SpecialDirectories.CurrentUserApplicationData
Referencia del lenguaje Visual Basic

My.Computer.FileSystem.SpecialDirectories.Desktop
(Propiedad)
Obtiene un nombre de ruta de acceso que apunta al directorio Desktop.

' Usage
Dim value As String = My.Computer.FileSystem.SpecialDirectories.Desktop
' Declaration
Public ReadOnly Property Desktop As String

Valor devuelto
String
Excepciones
La condición siguiente puede provocar una excepción:
La ruta de acceso está vacía, habitualmente porque el sistema operativo no admite el directorio
(DirectoryNotFoundException).
Comentarios
My.Computer.FileSystem.SpecialDirectories (Objeto) contiene rutas de acceso a directorios a los que se hace referencia
normalmente.
Ejemplo
En este ejemplo se muestra la ruta para el directorio Desktop en un MessageBox.
VB
MsgBox(My.Computer.FileSystem.SpecialDirectories.Desktop)

Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: SpecialDirectoriesProxy (proporciona acceso a SpecialDirectories)
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Permisos
Se requiere el siguiente permiso:
Permiso Descripción
FileIOPermission Controla la capacidad de tener acceso a archivos y carpetas. Enumeración asociada: Unrestricted.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Referencia
My.Computer.FileSystem.SpecialDirectories (Objeto)
Microsoft.VisualBasic.FileIO.SpecialDirectories.Desktop
Referencia del lenguaje Visual Basic

My.Computer.FileSystem.SpecialDirectories.MyDocuments
(Propiedad)
Obtiene un nombre de ruta de acceso que apunta al directorio My Documents.

' Usage
Dim value As String = My.Computer.FileSystem.SpecialDirectories.MyDocuments
' Declaration
Public ReadOnly Property MyDocuments As String

Valor devuelto
String.
Excepciones
La condición siguiente puede provocar una excepción:
La ruta de acceso está vacía, habitualmente porque el sistema operativo no admite el directorio
(DirectoryNotFoundException).
Comentarios
My.Computer.FileSystem.SpecialDirectories (Objeto) contiene rutas de acceso a directorios a los que se hace referencia
normalmente.
Ejemplo
En este ejemplo se muestra la ruta de acceso para el directorio My Documents en un MessageBox.
VB
MsgBox(My.Computer.FileSystem.SpecialDirectories.MyDocuments)

Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: SpecialDirectoriesProxy (proporciona acceso a SpecialDirectories)
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Permisos
Se requiere el siguiente permiso:
Permiso Descripción
FileIOPermission Controla la capacidad de tener acceso a archivos y carpetas. Enumeración asociada: Unrestricted.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Referencia
My.Computer.FileSystem.SpecialDirectories (Objeto)
Microsoft.VisualBasic.FileIO.SpecialDirectories.MyDocuments
Referencia del lenguaje Visual Basic

My.Computer.FileSystem.SpecialDirectories.MyMusic
(Propiedad)
Obtiene un nombre de ruta de acceso que apunta al directorio My Music.

' Usage
Dim value As String = My.Computer.FileSystem.SpecialDirectories.MyMusic
' Declaration
Public ReadOnly Property MyMusic As String

Valor devuelto
String.
Excepciones
La condición siguiente puede provocar una excepción:
La ruta de acceso está vacía, habitualmente porque el sistema operativo no admite el directorio
(DirectoryNotFoundException).
Comentarios
My.Computer.FileSystem.SpecialDirectories (Objeto) contiene rutas de acceso a directorios a los que se hace referencia
normalmente.
Ejemplo
En este ejemplo se muestra la ruta de acceso para el directorio My Music en un MessageBox.
VB
MsgBox(My.Computer.FileSystem.SpecialDirectories.MyMusic)

Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: SpecialDirectoriesProxy (proporciona acceso a SpecialDirectories)
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Permisos
Se requiere el siguiente permiso:
Permiso Descripción
FileIOPermission Controla la capacidad de tener acceso a archivos y carpetas. Enumeración asociada: Unrestricted.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Referencia
My.Computer.FileSystem.SpecialDirectories (Objeto)
Microsoft.VisualBasic.FileIO.SpecialDirectories.MyMusic
Referencia del lenguaje Visual Basic

My.Computer.FileSystem.SpecialDirectories.MyPictures
(Propiedad)
Obtiene un nombre de ruta de acceso que apunta al directorio My Pictures.

' Usage
Dim value As String = My.Computer.FileSystem.SpecialDirectories.MyPictures
' Declaration
Public ReadOnly Property MyPictures As String

Valor devuelto
String.
Excepciones
La condición siguiente puede provocar una excepción:
La ruta de acceso está vacía, habitualmente porque el sistema operativo no admite el directorio
(DirectoryNotFoundException).
Comentarios
La clase My.Computer.FileSystem.SpecialDirectories (Objeto) contiene rutas de acceso a directorios a los que se hace referencia
normalmente.
Ejemplo
En este ejemplo se muestra la ruta de acceso para el directorio My Pictures en un MessageBox.
VB
MsgBox(My.Computer.FileSystem.SpecialDirectories.MyPictures)

Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: SpecialDirectoriesProxy (proporciona acceso a SpecialDirectories)
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Permisos
Se requiere el siguiente permiso:
Permiso Descripción
FileIOPermission Controla la capacidad de tener acceso a archivos y carpetas. Enumeración asociada: Unrestricted.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Referencia
My.Computer.FileSystem.SpecialDirectories (Objeto)
Microsoft.VisualBasic.FileIO.SpecialDirectories.MyPictures
Referencia del lenguaje Visual Basic

My.Computer.FileSystem.SpecialDirectories.ProgramFiles
(Propiedad)
Obtiene una ruta de acceso que apunta al directorio Archivos de programa.

' Usage
Dim value As String = My.Computer.FileSystem.SpecialDirectories.ProgramFiles
' Declaration
Public ReadOnly Property Programs As String

Valor devuelto
String.
Excepciones
La condición siguiente puede provocar una excepción:
La ruta de acceso está vacía, habitualmente porque el sistema operativo no admite el directorio
(DirectoryNotFoundException).
Comentarios
My.Computer.FileSystem.SpecialDirectories (Objeto) contiene rutas de acceso a directorios a los que se hace referencia
normalmente. El directorio Archivos de programa contiene archivos de los programas del equipo.
Ejemplo
En este ejemplo se muestra la ruta para el directorio Archivos de programa en un control MessageBox.
VB
MsgBox(My.Computer.FileSystem.SpecialDirectories.ProgramFiles)

Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: SpecialDirectoriesProxy (proporciona acceso a SpecialDirectories)
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Permisos
El permiso siguiente puede ser necesario:
Permiso Descripción
FileIOPermission Controla la capacidad de obtener acceso a archivos y carpetas. Enumeración asociada: Unrestricted.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Referencia
My.Computer.FileSystem.SpecialDirectories (Objeto)
Microsoft.VisualBasic.FileIO.SpecialDirectories.ProgramFiles
Referencia del lenguaje Visual Basic

My.Computer.FileSystem.SpecialDirectories.Programs
(Propiedad)
Obtiene un nombre de ruta de acceso que apunta al directorio Programs.

' Usage
Dim value As String = My.Computer.FileSystem.SpecialDirectories.Programs
' Declaration
Public ReadOnly Property Programs As String

Valor devuelto
String.
Excepciones
Las condiciones siguientes pueden producir una excepción:
La ruta de acceso está vacía, habitualmente porque el sistema operativo no admite el directorio
(DirectoryNotFoundException).
Comentarios
My.Computer.FileSystem.SpecialDirectories (Objeto) contiene rutas de acceso a directorios a los que se hace referencia
normalmente. El directorio Programs contiene los grupos de programas del usuario.
Ejemplo
En este ejemplo se muestra la ruta de acceso para el directorio Programs en un MessageBox.
VB
MsgBox(My.Computer.FileSystem.SpecialDirectories.Programs)

Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: SpecialDirectoriesProxy (proporciona acceso a SpecialDirectories)
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Permisos
Se requiere el siguiente permiso:
Permiso Descripción
FileIOPermission Controla la capacidad de tener acceso a archivos y carpetas. Enumeración asociada: Unrestricted.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Referencia
My.Computer.FileSystem.SpecialDirectories (Objeto)
Microsoft.VisualBasic.FileIO.SpecialDirectories.Programs
Referencia del lenguaje Visual Basic

My.Computer.FileSystem.SpecialDirectories.Temp (Propiedad)
Obtiene un nombre de ruta de acceso que señala al directorio temporal actual del sistema.

' Usage
Dim value As String = My.Computer.FileSystem.SpecialDirectories.Temp
' Declaration
Public ReadOnly Property Temp As String

Valor devuelto
String.
Excepciones
La condición siguiente puede provocar una excepción:
La ruta de acceso está vacía, habitualmente porque el sistema operativo no admite el directorio
(DirectoryNotFoundException).
Comentarios
My.Computer.FileSystem.SpecialDirectories (Objeto) contiene rutas de acceso a directorios a los que se hace referencia
normalmente.
Ejemplo
En este ejemplo se muestra la ruta de acceso para el directorio temporal actual del sistema en MessageBox.
VB
MsgBox(My.Computer.FileSystem.SpecialDirectories.Temp)

Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: SpecialDirectoriesProxy (proporciona acceso a SpecialDirectories)
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Permisos
Se requieren los siguientes permisos:
Permiso Descripción
EnvironmentPermission Controla el acceso a las variables de entorno del sistema y del usuario. Enumeración asociada:
Unrestricted.

FileIOPermission Controla la capacidad de tener acceso a archivos y carpetas. Enumeración asociada: Unrestricted.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Referencia
My.Computer.FileSystem.SpecialDirectories (Objeto)
Microsoft.VisualBasic.FileIO.SpecialDirectories.Temp
Referencia del lenguaje Visual Basic

My.Computer.Info (Objeto)
Proporciona propiedades para obtener información sobre la memoria, los ensamblados cargados, el nombre y el sistema
operativo del equipo.
Comentarios
Las propiedades expuestas por el objetoMy.Computer.Info devuelven información sobre el equipo desde el que se
implementa la aplicación, según se determina en tiempo de ejecución. Normalmente, este datos difieren de los que se
obtuvieron en el equipo de desarrollo.
Ejemplo
Este ejemplo utiliza la propiedad My.Computer.Info.AvailablePhysicalMemory para mostrar la cantidad de memoria física
disponible en el equipo en el que se ejecuta código.
VB
MsgBox("Computer's available physical memory: " & _
My.Computer.Info.AvailablePhysicalMemory)

Requisitos
Espacio de nombres: Microsoft.VisualBasic.Devices
Clase: ComputerInfo
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Vea también
Referencia
My.Computer.Info (Miembros del objeto)
Referencia del lenguaje Visual Basic

My.Computer.Info (Miembros del objeto)


El objeto My.Computer.Info (Objeto) proporciona propiedades para obtener información sobre la memoria, los ensamblados
cargados, el nombre y el sistema operativo del equipo.
Propiedades
AvailablePhysicalMemory Obtiene la cantidad total de memoria física libre del equipo.

AvailableVirtualMemory Obtiene la cantidad total de espacio de direcciones virtual libre disponible para el equipo.

InstalledUICulture Obtiene la referencia cultural de la interfaz de usuario actual instalada con el sistema operativo.

OSFullName Obtiene el nombre completo del sistema operativo.

OSPlatform Obtiene el identificador de plataforma del sistema operativo del equipo.

OSVersion Obtiene la versión del sistema operativo del equipo.

TotalPhysicalMemory Obtiene la cantidad total de memoria física del equipo.

TotalVirtualMemory Obtiene la cantidad total de espacio de direcciones virtual libre disponible para el equipo.
Vea también
Referencia
My.Computer.Info (Objeto)
Referencia del lenguaje Visual Basic

My.Computer.Info.AvailablePhysicalMemory (Propiedad)
Obtiene la cantidad total de memoria física libre para el equipo.

' Usage
Dim value As ULong = My.Computer.Info.AvailablePhysicalMemory
' Declaration
Public ReadOnly Property AvailablePhysicalMemory As ULong

Valor devuelto
Tipo ULong que contiene el número de bytes de memoria física libre para el equipo.
Excepciones
La siguiente condición puede provocar una excepción:
La aplicación no puede obtener el estado de la memoria (Win32Exception).
Comentarios
La propiedad My.Computer.Info.AvailablePhysicalMemory requiere Windows XP, Windows 2000 Professional, Windows
Server 2003 o Windows 2000 Server.
Ejemplo
En este ejemplo se utiliza la propiedad My.Computer.Info.AvailablePhysicalMemory para mostrar la cantidad de memoria
física disponible para el equipo en el que se ejecuta el código.
VB
MsgBox("Computer's available physical memory: " & _
My.Computer.Info.AvailablePhysicalMemory)

Requisitos
Espacio de nombres: Microsoft.VisualBasic.Devices
Clase: ComputerInfo
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web Sí

Servicio de Windows Sí

Sitio Web Sí
Permisos
No se requiere ningún permiso.
Vea también
Referencia
My.Computer.Info (Objeto)
My.Computer.Info.TotalPhysicalMemory (Propiedad)
My.Computer.Info.AvailableVirtualMemory (Propiedad)
Microsoft.VisualBasic.Devices.ComputerInfo.AvailablePhysicalMemory
Referencia del lenguaje Visual Basic

My.Computer.Info.AvailableVirtualMemory (Propiedad)
Obtiene la cantidad total de espacio libre de dirección virtual del equipo.

' Usage
Dim value As ULong = My.Computer.Info.AvailableVirtualMemory
' Declaration
Public ReadOnly Property AvailableVirtualMemory As ULong

Valor devuelto
ULong que contiene el número de bytes de espacio libre de dirección virtual del equipo.
Excepciones
La siguiente condición puede provocar una excepción:
La aplicación no puede obtener el estado de la memoria (Win32Exception).
Comentarios
La propiedad My.Computer.Info.AvailableVirtualMemory requiere Windows XP, Windows 2000 Professional, Windows
Server 2003 o Windows 2000 Server.
Ejemplo
Este ejemplo utiliza la propiedad My.Computer.Info.AvailableVirtualMemory para mostrar la cantidad de memoria virtual
disponible en el equipo en el que se ejecuta código.
VB
MsgBox("Computer's available virtual memory: " & _
My.Computer.Info.AvailableVirtualMemory)

Requisitos
Espacio de nombres: Microsoft.VisualBasic.Devices
Clase: ComputerInfo
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web Sí

Servicio de Windows Sí

Sitio Web Sí
Permisos
No se requiere ningún permiso.
Vea también
Referencia
My.Computer.Info (Objeto)
My.Computer.Info.TotalVirtualMemory (Propiedad)
My.Computer.Info.AvailablePhysicalMemory (Propiedad)
Microsoft.VisualBasic.Devices.ComputerInfo.AvailableVirtualMemory
Referencia del lenguaje Visual Basic

My.Computer.Info.InstalledUICulture (Propiedad)
Obtiene la referencia cultural de la interfaz de usuario actual instalada con el sistema operativo.

' Usage
Dim value As System.Globalization.CultureInfo = My.Computer.Info.InstalledUICulture
' Declaration
Public ReadOnly Property InstalledUICulture As System.Globalization.CultureInfo

Valor devuelto
Un objeto CultureInfo representa la referencia cultural de la interfaz de usuario instalada en el equipo.
Comentarios
La propiedad My.Computer.Info.InstalledUICulture tiene el mismo comportamiento que la propiedad InstalledUICulture.
En un sistema operativo localizado, como Windows 2000 Professional en japonés, esta propiedad devuelve la referencia
cultural del sistema operativo.
Ejemplo
Este ejemplo utiliza la propiedad My.Computer.Info.InstalledUICulture para mostrar el nombre de la referencia cultural de
la interfaz de usuario del sistema operativo.
VB
MsgBox("Computer's UI culture name: " & _
My.Computer.Info.InstalledUICulture.DisplayName)

Requisitos
Espacio de nombres: Microsoft.VisualBasic.Devices
Clase: ComputerInfo
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web Sí

Servicio de Windows Sí

Sitio Web Sí
Permisos
No se requiere ningún permiso.
Vea también
Referencia
My.Computer.Info (Objeto)
System.Globalization.CultureInfo
Microsoft.VisualBasic.Devices.ComputerInfo.InstalledUICulture
Referencia del lenguaje Visual Basic

My.Computer.Info.OSFullName (Propiedad)
Obtiene el nombre completo del sistema operativo.

' Usage
Dim value As String = My.Computer.Info.OSFullName
' Declaration
Public ReadOnly Property OSFullName As String

Valor devuelto
String que contiene el nombre del sistema operativo.
Excepciones
La siguiente condición puede provocar una excepción:
El código de llamada no tiene plena confianza (SecurityException).
Comentarios
Esta propiedad devuelve información detallada sobre el nombre del sistema operativo si Instrumental de administración de
Windows (WMI) está instalado en el equipo. De lo contrario, esta propiedad devuelve la misma cadena que la propiedad
My.Computer.Info.OSPlatform, que proporciona menos información detallada que WMI.
Ejemplo
Este ejemplo utiliza la propiedad My.Computer.Info.OSFullName para mostrar el nombre del sistema operativo del equipo.
VB
MsgBox("Computer's operating system name: " & _
My.Computer.Info.OSFullName)

Requisitos
Espacio de nombres: Microsoft.VisualBasic.Devices
Clase: ComputerInfo
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web Sí

Servicio de Windows Sí

Sitio Web Sí
Permisos
El permiso siguiente puede ser necesario:
Permiso Descripción
FileIOPermission Controla la capacidad de tener acceso a archivos y carpetas. Enumeración asociada: Unrestricted.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Referencia
My.Computer.Info (Objeto)
My.Computer.Info.OSPlatform (Propiedad)
Microsoft.VisualBasic.Devices.ComputerInfo.OSFullName
Referencia del lenguaje Visual Basic

My.Computer.Info.OSPlatform (Propiedad)
Obtiene el identificador de plataforma del sistema operativo del equipo.

' Usage
Dim value As String = My.Computer.Info.OSPlatform
' Declaration
Public ReadOnly Property OSPlatform As String

Valor devuelto
String que contiene el identificador de la plataforma del sistema operativo del equipo, elegido entre los nombres de miembro
de la enumeración PlatformID.
Excepciones
La siguiente condición puede provocar una excepción:
La aplicación no puede obtener la información de la plataforma del sistema operativo (ExecutionEngineException).
Comentarios
La propiedad My.Computer.Info.OSPlatform proporciona la funcionalidad similar a la de la propiedad Platform del objeto
devuelto por la propiedad OSVersion.
Ejemplo
Este ejemplo utiliza la propiedad My.Computer.Info.OSPlatform para mostrar la plataforma del sistema operativo del
equipo.
VB
MsgBox("Computer's operating system platform: " & _
My.Computer.Info.OSPlatform)

Requisitos
Espacio de nombres: Microsoft.VisualBasic.Devices
Clase: ComputerInfo
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web Sí

Servicio de Windows Sí

Sitio Web Sí
Permisos
No se requiere ningún permiso.
Vea también
Referencia
My.Computer.Info (Objeto)
Platform
OSVersion
Microsoft.VisualBasic.Devices.ComputerInfo.OSPlatform
Referencia del lenguaje Visual Basic

My.Computer.Info.OSVersion (Propiedad)
Obtiene la versión del sistema operativo del equipo.

' Usage
Dim value As String = My.Computer.Info.OSVersion
' Declaration
Public ReadOnly Property OSVersion As String

Valor devuelto
String que contiene el número de versión actual del sistema operativo.
Excepciones
La siguiente condición puede provocar una excepción:
La aplicación no puede obtener la información de versión del sistema operativo (ExecutionEngineException).
Comentarios
La propiedad My.Computer.Info.OSVersion da el formato "principal.secundaria.compilación.revisión" a la versión.
La propiedad My.Computer.Info.OSVersion proporciona funcionalidad similar a la propiedad Version del objeto devuelta
por la propiedad OSVersion.
Ejemplo
Este ejemplo utiliza la propiedad My.Computer.Info.OSVersion para mostrar la versión del sistema operativo del equipo.
VB
MsgBox("Computer's operating system version: " & _
My.Computer.Info.OSVersion)

Requisitos
Espacio de nombres: Microsoft.VisualBasic.Devices
Clase: ComputerInfo
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web Sí

Servicio de Windows Sí

Sitio Web Sí
Permisos
No se requiere ningún permiso.
Vea también
Referencia
My.Computer.Info (Objeto)
Microsoft.VisualBasic.Devices.ComputerInfo.OSVersion
Referencia del lenguaje Visual Basic

My.Computer.Info.TotalPhysicalMemory (Propiedad)
Obtiene la cantidad total de memoria física del equipo.

' Usage
Dim value As ULong = My.Computer.Info.TotalPhysicalMemory
' Declaration
Public ReadOnly Property TotalPhysicalMemory As ULong

Valor devuelto
ULong que contiene el número de bytes de memoria física del equipo.
Excepciones
La siguiente condición puede provocar una excepción:
La aplicación no puede obtener el estado de la memoria (Win32Exception).
Comentarios
La propiedad My.Computer.Info.TotalPhysicalMemory requiere Windows XP, Windows 2000 Professional, Windows
Server 2003 o Windows 2000 Server.
Ejemplo
Este ejemplo utiliza la propiedad My.Computer.Info.TotalPhysicalMemory para mostrar la cantidad total de memoria física
del equipo en el que se ejecuta el código.
VB
MsgBox("Computer's available physical memory: " & _
My.Computer.Info.TotalPhysicalMemory)

Requisitos
Espacio de nombres: Microsoft.VisualBasic.Devices
Clase: ComputerInfo
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web Sí

Servicio de Windows Sí

Sitio Web Sí
Permisos
No se requiere ningún permiso.
Vea también
Referencia
My.Computer.Info (Objeto)
My.Computer.Info.AvailablePhysicalMemory (Propiedad)
My.Computer.Info.TotalVirtualMemory (Propiedad)
Microsoft.VisualBasic.Devices.ComputerInfo.TotalPhysicalMemory
Referencia del lenguaje Visual Basic

My.Computer.Info.TotalVirtualMemory (Propiedad)
Obtiene la cantidad total de espacio de la dirección virtual disponible para el equipo.

' Usage
Dim value As ULong = My.Computer.Info.TotalVirtualMemory
' Declaration
Public ReadOnly Property TotalVirtualMemory As ULong

Valor devuelto
ULong que contiene el número de bytes de espacio de la dirección virtual disponible para el equipo.
Excepciones
La siguiente condición puede provocar una excepción:
La aplicación no puede obtener el estado de la memoria (Win32Exception).
Comentarios
La propiedad My.Computer.Info.TotalVirtualMemory requiere Windows XP, Windows 2000 Professional, Windows Server
2003 o Windows 2000 Server.
Ejemplo
En este ejemplo se utiliza la propiedad My.Computer.Info.TotalVirtualMemory para mostrar la cantidad total de memoria
virtual disponible para el equipo en el que se ejecuta el código.
VB
MsgBox("Computer's available virtual memory: " & _
My.Computer.Info.TotalVirtualMemory)

Requisitos
Espacio de nombres: Microsoft.VisualBasic.Devices
Clase: ComputerInfo
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web Sí

Servicio de Windows Sí

Sitio Web Sí
Permisos
No se requiere ningún permiso.
Vea también
Referencia
My.Computer.Info (Objeto)
My.Computer.Info.AvailableVirtualMemory (Propiedad)
My.Computer.Info.TotalPhysicalMemory (Propiedad)
Microsoft.VisualBasic.Devices.ComputerInfo.TotalVirtualMemory
Referencia del lenguaje Visual Basic

My.Computer.Keyboard (Objeto)
Proporciona propiedades para tener acceso al estado actual del teclado, como las teclas que están presionadas, y ofrece un
método para enviar pulsaciones de teclas a la ventana activa.
Comentarios
El objeto My.Computer.Keyboard proporciona una interfaz para el teclado del equipo. Las propiedades de
My.Computer.Keyboard proporcionan información sobre el estado de varias teclas especiales. El método
My.Computer.Keyboard.SendKeys le permite enviar pulsaciones de teclas a la ventana activa como si se hubieran efectuado
en el teclado.
Tarea
La tabla siguiente muestra ejemplos de tareas que implican al objeto My.Computer.Keyboard.
Para Vea
Comprobar si la tecla BLOQ MAYÚS está presionad Cómo: Determinar si CapsLock está activado en Visual Basic
a

Enviar pulsaciones de teclas a una aplicación Cómo: Iniciar una aplicación y enviarle pulsaciones de teclas (Visual Basic)
Ejemplo
Este ejemplo utiliza la propiedad My.Computer.Keyboard.CtrlKeyDown para determinar si está presionada la tecla CTRL del
equipo.
VB
If My.Computer.Keyboard.CtrlKeyDown Then
MsgBox("CTRL key down")
Else
MsgBox("CTRL key up")
End If

Requisitos
Espacio de nombres: Microsoft.VisualBasic.Devices
Clase: Keyboard
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web No
Vea también
Referencia
My.Computer.Keyboard (Miembros del objeto)
My.Computer (Objeto)
Microsoft.VisualBasic.Devices.Keyboard
Conceptos
Acceso al teclado
Referencia del lenguaje Visual Basic

My.Computer.Keyboard (Miembros del objeto)


My.Computer.Keyboard (Objeto) proporciona propiedades para tener acceso al estado actual del teclado, como las teclas que
se han presionado, y proporciona un método para enviar pulsaciones de teclas a la ventana activa.
Propiedades
AltKeyDown Obtiene un valor de tipo Boolean que indica si la tecla ALT está presionada.
Esta propiedad sólo está disponible para aplicaciones que no son de servidor.

CapsLock Obtiene un valor Boolean que indica si está activado BLOQ MAYÚS.
Esta propiedad sólo está disponible para aplicaciones que no son de servidor.

CtrlKeyDown Obtiene un valor de tipo Boolean que indica si la tecla CTRL está presionada.
Esta propiedad sólo está disponible para aplicaciones que no son de servidor.

NumLock Obtiene un valor Boolean que indica si está activado BLOQ NUM.
Esta propiedad sólo está disponible para aplicaciones que no son de servidor.

ScrollLock Obtiene un valor Boolean que indica si está activado BLOQ DESPL.
Esta propiedad sólo está disponible para aplicaciones que no son de servidor.

ShiftKeyDown Obtiene un valor de tipo Boolean que indica si la tecla MAYÚS está presionada.
Esta propiedad sólo está disponible para aplicaciones que no son de servidor.
Métodos
SendKeys Envía una o más pulsaciones de tecla a la ventana activa, como si se presionasen en el teclado.
Este método sólo está disponible para las aplicaciones que no son de servidor.
Vea también
Referencia
My.Computer.Keyboard (Objeto)
Referencia del lenguaje Visual Basic

My.Computer.Keyboard.AltKeyDown (Propiedad)
Obtiene un valor Boolean que indica si la tecla ALT está presionada.

' Usage
Dim value As Boolean = My.Computer.Keyboard.AltKeyDown
' Declaration
Public ReadOnly Property AltKeyDown As Boolean

Valor devuelto
Un valor Boolean: True si la tecla ALT está presionada; de lo contrario False.
Comentarios
La propiedad My.Computer.Keyboard.AltKeyDown ofrece una funcionalidad similar a la de la propiedad ModifierKeys.
Ejemplo
Este ejemplo utiliza la propiedad My.Computer.Keyboard.AltKeyDown para determinar si está presionada la tecla ALT del
equipo.
VB
If My.Computer.Keyboard.AltKeyDown Then
MsgBox("ALT key down")
Else
MsgBox("ALT key up")
End If

Requisitos
Espacio de nombres: Microsoft.VisualBasic.Devices
Clase: Keyboard
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web No
Permisos
No se requiere ningún permiso.
Vea también
Referencia
My.Computer.Keyboard (Objeto)
ModifierKeys
Microsoft.VisualBasic.Devices.Keyboard.AltKeyDown
Referencia del lenguaje Visual Basic

My.Computer.Keyboard.CapsLock (Propiedad)
Obtiene un valor Boolean que indica si BLOQ MAYÚS está activado.

' Usage
Dim value As Boolean = My.Computer.Keyboard.CapsLock
' Declaration
Public ReadOnly Property CapsLock As Boolean

Valor devuelto
Valor Boolean: True si BLOQ MAYÚS está activado, False si no lo está.
Comentarios
Se devuelve sólo el estado de BLOQ MAYÚS.
Ejemplo
En este ejemplo se utiliza la propiedad My.Computer.Keyboard.CapsLock para determinar si BLOQ MAYÚS está activado en
el equipo.
VB
If My.Computer.Keyboard.CapsLock Then
MsgBox("CAPS LOCK on")
Else
MsgBox("CAPS LOCK off")
End If

Requisitos
Espacio de nombres: Microsoft.VisualBasic.Devices
Clase: Keyboard
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web No
Permisos
No se requiere ningún permiso.
Vea también
Referencia
My.Computer.Keyboard (Objeto)
Microsoft.VisualBasic.Devices.Keyboard.CapsLock
Referencia del lenguaje Visual Basic

My.Computer.Keyboard.CtrlKeyDown (Propiedad)
Obtiene un valor Boolean que indica si está presionada una tecla CTRL.

' Usage
Dim value As Boolean = My.Computer.Keyboard.CtrlKeyDown
' Declaration
Public ReadOnly Property CtrlKeyDown As Boolean

Valor devuelto
Un valor Boolean: True si la tecla CTRL está presionada; de lo contrario, False.
Comentarios
La propiedad My.Computer.Keyboard.CtrlKeyDown ofrece una funcionalidad similar a la de la propiedad ModifierKeys.
Ejemplo
Este ejemplo utiliza la propiedad My.Computer.Keyboard.CtrlKeyDown para determinar si está presionada la tecla CTRL del
equipo.
VB
If My.Computer.Keyboard.CtrlKeyDown Then
MsgBox("CTRL key down")
Else
MsgBox("CTRL key up")
End If

Requisitos
Espacio de nombres: Microsoft.VisualBasic.Devices
Clase: Keyboard
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web No
Permisos
No se requiere ningún permiso.
Vea también
Referencia
My.Computer.Keyboard (Objeto)
ModifierKeys
Microsoft.VisualBasic.Devices.Keyboard.CtrlKeyDown
Referencia del lenguaje Visual Basic

My.Computer.Keyboard.NumLock (Propiedad)
Obtiene un valor Boolean que indica si está activada la tecla BLOQ NUM.

' Usage
Dim value As Boolean = My.Computer.Keyboard.NumLock
' Declaration
Public ReadOnly Property NumLock As Boolean

Valor devuelto
Valor Boolean. True si BLOQ NUM está activado, False si no lo está.
Comentarios
Sólo se devuelve el estado de la tecla BLOQ NUM.
Ejemplo
Este ejemplo utiliza la propiedad My.Computer.Keyboard.NumLock para determinar si la tecla BLOQ NUM del equipo está
activada.
VB
If My.Computer.Keyboard.NumLock Then
MsgBox("NUM LOCK on")
Else
MsgBox("NUM LOCK off")
End If

Requisitos
Espacio de nombres: Microsoft.VisualBasic.Devices
Clase: Keyboard
Ensamblado:Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web No
Permisos
No se requiere ningún permiso.
Vea también
Referencia
My.Computer.Keyboard (Objeto)
Microsoft.VisualBasic.Devices.Keyboard.NumLock
Referencia del lenguaje Visual Basic

My.Computer.Keyboard.ScrollLock (Propiedad)
Obtiene un valor Boolean que indica si la tecla BLOQ DESPL está activada.

' Usage
Dim value As Boolean = My.Computer.Keyboard.ScrollLock
' Declaration
Public ReadOnly Property ScrollLock As Boolean

Valor devuelto
Un valor Boolean. True si BLOQ MAYÚS está activado, False si no lo está.
Comentarios
Sólo se devuelve el estado de la tecla BLOQ DESPL.
Ejemplo
Este ejemplo utiliza la propiedad My.Computer.Keyboard.ScrollLock para determinar si está activada la tecla BLOQ DESPL.
VB
If My.Computer.Keyboard.ScrollLock Then
MsgBox("SCROLL LOCK on")
Else
MsgBox("SCROLL LOCK off")
End If

Requisitos
Espacio de nombres: Microsoft.VisualBasic.Devices
Clase: Keyboard
Ensamblado:Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web No
Permisos
No se requiere ningún permiso.
Vea también
Referencia
My.Computer.Keyboard (Objeto)
Microsoft.VisualBasic.Devices.Keyboard.ScrollLock
Referencia del lenguaje Visual Basic

My.Computer.Keyboard.SendKeys (Método)
Envía una o más pulsaciones de tecla a la ventana activa, como si se realizaran en el teclado.

' Usage
My.Computer.Keyboard.SendKeys(keys)
My.Computer.Keyboard.SendKeys(keys ,wait)
' Declaration
Public Sub SendKeys( _
ByVal keys As String _
)
' -or-
Public Sub SendKeys( _
ByVal keys As String, _
ByVal wait As Boolean _
)

Parámetros
keys
String que define las teclas que enviar.
wait
Opcional. Boolean que especifica si se debe o no esperar a que se procesen las pulsaciones de tecla antes de que continúe la
aplicación. El valor predeterminado es True.
Excepciones
La siguiente condición puede provocar una excepción:
Hay una situación de confianza parcial en la que el usuario no dispone de los permisos necesarios (SecurityException).
Comentarios
El método My.Computer.Keyboard.SendKeys proporciona la funcionalidad similar a la de los métodos Send y SendWait.
El argumento wait es útil si la otra aplicación debe finalizar para que pueda continuar su aplicación.
Nota
Puesto que no hay ningún método administrado para activar otra aplicación, puede usar esta clase dentro de la aplicación ac
tual, seleccionar manualmente la ventana a la que enviar las teclas, o usar métodos de la interfaz API de Windows, como Fin
dWindow y SetForegroundWindow, para forzar el paso del foco a otras aplicaciones. Para obtener más información, vea
Tutorial: Llamar a las API de Windows.

El argumento keys puede especificar cualquier tecla única o cualquier combinación de teclas con ALT, CTRL o MAYÚS (o
cualquier combinación de esas teclas). Cada tecla se representa mediante uno o más caracteres, como a para el carácter "a" o
{ENTER} para la tecla ENTRAR.

Para combinar una tecla con MAYÚS, coloque + (signo más) antes del código de la tecla. Para combinar una tecla con CTRL,
coloque ^ (símbolo de intercalación) antes del código de la tecla. Para combinar una tecla con ALT, coloque % (signo de
porcentaje) antes del código de la tecla. Para especificar las teclas repetidas, utilice el formato {key number}. Debe colocar un
espacio entre key y number. Por ejemplo, {LEFT 42} significa "presione la tecla FLECHA IZQUIERDA 42 veces"; {h 10} significa
"presione 'h' 10 veces".
La tabla siguiente enumera los códigos que se pueden utilizar para especificar los caracteres que no aparecen al presionar la
tecla correspondiente (como por ejemplo ENTRAR o TAB).
Tecla Código
RETROCESO {BACKSPACE} o {BS}
INTER {BREAK}

BLOQ MAYÚS {CAPSLOCK}


SUPR {CLEAR}

SUPRIMIR {DELETE} o {DEL}

FLECHA ABAJO {DOWN}

FIN {END}

ENTRAR (teclado numérico) {ENTER}

ENTRAR ~

ESC {ESCAPE} o {ESC}

AYUDA {HELP}

INICIO {HOME}

INSERTAR {INSERT}

FLECHA IZQUIERDA {LEFT}

BLOQ NUM {NUMLOCK}

AV PÁG {PGDN}

RE PÁG {PGUP}

RETORNO {RETURN}

FLECHA DERECHA {RIGHT}

BLOQ DESPL {SCROLLLOCK}

TAB {TAB}

FLECHA ARRIBA {UP}

F1 a F15 {F1} a {F15}


Ejemplo
Este ejemplo utiliza el método My.Computer.Keyboard.SendKeys para enviar las pulsaciones de tecla a una aplicación
externa, la aplicación Calculadora, iniciada por la función Shell.
VB
Dim ProcID As Integer
' Start the Calculator application, and store the process id.
ProcID = Shell("CALC.EXE", AppWinStyle.NormalFocus)
' Activate the Calculator application.
AppActivate(ProcID)
' Send the keystrokes to the Calculator application.
My.Computer.Keyboard.SendKeys("22", True)
My.Computer.Keyboard.SendKeys("*", True)
My.Computer.Keyboard.SendKeys("44", True)
My.Computer.Keyboard.SendKeys("=", True)
' The result is 22 * 44 = 968.

Se produce una excepción ArgumentException si no se puede encontrar una aplicación con el identificador de proceso
solicitado.
La llamada a la función Shell requiere plena confianza (clase SecurityException).
Requisitos
Espacio de nombres: Microsoft.VisualBasic.Devices
Clase: Keyboard
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web No
Permisos
Los permisos siguientes pueden ser necesarios:
Permiso Descripción
FileIOPermission Controla la capacidad de tener acceso a archivos y carpetas. Enumeración asociada: Unrestricted.

UIPermission Controla los permisos relacionados con interfaces de usuario y el Portapapeles. Enumeración asociada:
AllWindows.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Tareas
Tutorial: Llamar a las API de Windows
Referencia
My.Computer.Keyboard (Objeto)
Send
SendWait
Microsoft.VisualBasic.Devices.Keyboard.SendKeys(System.String,System.Boolean)
Referencia del lenguaje Visual Basic

My.Computer.Keyboard.ShiftKeyDown (Propiedad)
Obtiene un valor de tipo Boolean que indica si la tecla MAYÚS está presionada.

' Usage
Dim value As Boolean = My.Computer.Keyboard.ShiftKeyDown
' Declaration
Public ReadOnly Property ShiftKeyDown As Boolean

Valor devuelto
Un valor de tipo Boolean. True si la tecla MAYÚS está presionada; de lo contrario False.
Comentarios
La propiedad My.Computer.Keyboard.ShiftKeyDown ofrece una funcionalidad similar a la de la propiedad ModifierKeys.
Ejemplo
Este ejemplo utiliza la propiedad My.Computer.Keyboard.ShiftKeyDown para determinar si una de las teclas MAYÚS del
equipo está presionada.
VB
If My.Computer.Keyboard.ShiftKeyDown Then
MsgBox("SHIFT key down")
Else
MsgBox("SHIFT key up")
End If

Requisitos
Espacio de nombres: Microsoft.VisualBasic.Devices
Clase: Keyboard
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web No
Permisos
No se requiere ningún permiso.
Vea también
Referencia
My.Computer.Keyboard (Objeto)
ModifierKeys
Microsoft.VisualBasic.Devices.Keyboard.ShiftKeyDown
Referencia del lenguaje Visual Basic

My.Computer.Mouse (Objeto)
Suministra las propiedades para obtener información sobre el formato y configuración del mouse (ratón) instalado en el
equipo local.
Comentarios
El objeto My.Computer.Mouse proporciona una manera de buscar información sobre el mouse del equipo: si se han
cambiado las funciones de los botones y datos sobre la rueda del mouse.
Ejemplo
En este ejemplo se utilizan las propiedades My.Computer.Mouse.WheelExists y My.Computer.Mouse.WheelScrollLines
para determinar si el mouse tiene una rueda de desplazamiento y cuánto se desplaza al girar.
VB
If My.Computer.Mouse.WheelExists Then
Dim lines As Integer = My.Computer.Mouse.WheelScrollLines
If lines > 0 Then
MsgBox("Application scrolls " & _
lines & " line(s) for each wheel turn.")
Else
MsgBox("Application scrolls " & _
(-lines) & " page(s) for each wheel turn.")
End If
Else
MsgBox("Mouse has no scroll wheel.")
End If

Requisitos
Espacio de nombres: Microsoft.VisualBasic.Devices
Clase: Mouse
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web No
Vea también
Referencia
My.Computer.Mouse (Miembros del objeto)
My.Computer (Objeto)
Microsoft.VisualBasic.Devices.Mouse
Referencia del lenguaje Visual Basic

My.Computer.Mouse (Miembros del objeto)


My.Computer.Mouse (Objeto) proporciona las propiedades para obtener información sobre el formato y la configuración del
mouse instalado en el equipo local.
Propiedades
Propiedad Descripción
ButtonsSwapped Obtiene un valor Boolean que indica si se han intercambiado las funciones de los botones del mouse.
Esta propiedad sólo está disponible para aplicaciones que no son de servidor.

WheelExists Obtiene un valor Boolean que indica si el mouse tiene una rueda de desplazamiento.
Esta propiedad sólo está disponible para aplicaciones que no son de servidor.

WheelScrollLines Obtiene un número que indica la magnitud del desplazamiento cuando se gira un punto la rueda del mouse.
Esta propiedad sólo está disponible para aplicaciones que no son de servidor.
Vea también
Referencia
My.Computer.Mouse (Objeto)
Referencia del lenguaje Visual Basic

My.Computer.Mouse.ButtonsSwapped (Propiedad)
Obtiene un valor Boolean que indica si se han intercambiado las funciones de los botones del mouse.

' Usage
Dim value As Boolean = My.Computer.Mouse.ButtonsSwapped
' Declaration
Public ReadOnly Property ButtonsSwapped As Boolean

Valor devuelto
Boolean con un valor True si se ha intercambiado la funcionalidad de los botones principal y secundario del mouse; de lo
contrario, es False.
Excepciones
La siguiente condición puede provocar una excepción:
El equipo no tiene instalado un mouse (InvalidOperationException).
Comentarios
La propiedad My.Computer.Mouse.ButtonsSwapped:
Proporciona una funcionalidad parecida a la de la propiedad MouseButtonsSwapped.
Proporciona información acerca del equipo en el que se ejecuta el código.
Ejemplo
Este ejemplo utiliza la propiedad My.Computer.Mouse.ButtonsSwapped para determinar si se ha intercambiado la
funcionalidad de los botones principal y secundario.
VB
If My.Computer.Mouse.ButtonsSwapped Then
MsgBox("Functionality of the mouse buttons is swapped.")
Else
MsgBox("Default functionality of the mouse buttons.")
End If

Requisitos
Espacio de nombres: Microsoft.VisualBasic.Devices
Clase: Mouse
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No


Servicio de Windows Sí

Sitio Web No
Permisos
No se requiere ningún permiso.
Vea también
Referencia
My.Computer.Mouse (Objeto)
Microsoft.VisualBasic.Devices.Mouse.ButtonsSwapped
Referencia del lenguaje Visual Basic

My.Computer.Mouse.WheelExists (Propiedad)
Obtiene un valor Boolean que indica si el mouse tiene una rueda de desplazamiento.

' Usage
Dim value As Boolean = My.Computer.Mouse.WheelExists
' Declaration
Public ReadOnly Property WheelExists As Boolean

Valor devuelto
Un valor booleano True si el mouse tiene rueda de desplazamiento; de lo contrario, devuelve False.
Excepciones
La siguiente condición puede provocar una excepción:
El equipo no tiene instalado un mouse (InvalidOperationException).
Comentarios
La propiedad My.Computer.Mouse.WheelExists ofrece una funcionalidad similar a la de la propiedad MouseWheelPresent.
Debería comprobar el valor de la propiedad My.Computer.Mouse.WheelExists antes de intentar obtener acceso a la
My.Computer.Mouse.WheelScrollLines (Propiedad), que produce una excepción si el mouse no tiene rueda de desplazamiento.
La propiedad My.Computer.Mouse.WheelExists proporciona información sobre el equipo donde se ejecuta el código.
Ejemplo
Este ejemplo utiliza la propiedad My.Computer.Mouse.WheelExists para determinar si el mouse tiene rueda de
desplazamiento y la magnitud del desplazamiento cuando se gira la rueda del mouse.
VB
If My.Computer.Mouse.WheelExists Then
Dim lines As Integer = My.Computer.Mouse.WheelScrollLines
If lines > 0 Then
MsgBox("Application scrolls " & _
lines & " line(s) for each wheel turn.")
Else
MsgBox("Application scrolls " & _
(-lines) & " page(s) for each wheel turn.")
End If
Else
MsgBox("Mouse has no scroll wheel.")
End If

Requisitos
Espacio de nombres: Microsoft.VisualBasic.Devices
Clase: Mouse
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí
Biblioteca de controles de Windows Sí

Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web No
Permisos
No se requiere ningún permiso.
Vea también
Referencia
My.Computer.Mouse (Objeto)
My.Computer.Mouse.WheelScrollLines (Propiedad)
Microsoft.VisualBasic.Devices.Mouse.WheelExists
Referencia del lenguaje Visual Basic

My.Computer.Mouse.WheelScrollLines (Propiedad)
Obtiene un número que indica la magnitud del desplazamiento cuando se gira un punto la rueda del mouse.

' Usage
Dim value As Integer = My.Computer.Mouse.WheelScrollLines
' Declaration
Public ReadOnly Property WheelScrollLines As Integer

Valor devuelto
Valor Integer que indica la magnitud del desplazamiento cuando se gira un punto la rueda del mouse. Un valor positivo indica
un desplazamiento de ese número de líneas, mientras que un valor negativo indica un desplazamiento pantalla a pantalla.
Excepciones
Las circunstancias siguientes pueden provocar una excepción:
El equipo no tiene instalado un mouse (InvalidOperationException).
El mouse no tiene rueda de desplazamiento (InvalidOperationException).
Comentarios
Puede utilizar esta propiedad para determinar el número de líneas de desplazamiento ascendente o descendente en un control
de varias líneas que tenga una barra de desplazamiento.
La propiedad My.Computer.Mouse.WheelScrollLines ofrece una funcionalidad similar a la de la propiedad
MouseWheelScrollLines.
Puesto que esta propiedad produce una excepción si el mouse no tiene rueda de desplazamiento, debe asegurarse de que el
mouse tiene rueda de desplazamiento comprobando la propiedad My.Computer.Mouse.WheelExists.
Esta propiedad proporciona información acerca del equipo en el que se ejecuta el código.
Ejemplo
Este ejemplo determina si el mouse tiene rueda de desplazamiento y utiliza la propiedad My.Computer.Mouse.WheelExists
para determinar la magnitud del desplazamiento cuando se gira la rueda del mouse.
VB
If My.Computer.Mouse.WheelExists Then
Dim lines As Integer = My.Computer.Mouse.WheelScrollLines
If lines > 0 Then
MsgBox("Application scrolls " & _
lines & " line(s) for each wheel turn.")
Else
MsgBox("Application scrolls " & _
(-lines) & " page(s) for each wheel turn.")
End If
Else
MsgBox("Mouse has no scroll wheel.")
End If

Requisitos
Espacio de nombres: Microsoft.VisualBasic.Devices
Clase: Mouse
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web No
Permisos
No se requiere ningún permiso.
Vea también
Referencia
My.Computer.Mouse (Objeto)
My.Computer.Mouse.WheelExists (Propiedad)
Microsoft.VisualBasic.Devices.Mouse.WheelScrollLines
Referencia del lenguaje Visual Basic

My.Computer.Network (Objeto)
Proporciona una propiedad, evento y métodos para interactuar con la red a la que está conectado el equipo.
Tareas
La tabla siguiente muestra ejemplos de tareas que implican al objeto My.Computer.Network.
Para Vea
Cargar un archivo Cómo: Cargar un archivo en Visual Basic

Descargar un archivo Cómo: Descargar un archivo en Visual Basic

Comprobar el estado de la conexión Cómo: Comprobar el estado de conexión en Visual Basic

Determinar si un equipo remoto está disponible Cómo: Determinar si un equipo remoto está disponible en Visual Basic
Ejemplo
Este ejemplo carga el archivo Order.txt en http://www.cohowinery.com/uploads.
VB
My.Computer.Network.UploadFile ( _
"C:\My Documents\Order.txt", _
"http://www.cohowinery.com/uploads.aspx")

Requisitos
Espacio de nombres: Microsoft.VisualBasic.Devices
Clase: Network
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Vea también
Referencia
My.Computer.Network (Miembros del objeto)
My.Computer (Objeto)
My.Computer.Network.NetworkAvailabilityChanged (Evento)
Microsoft.VisualBasic.Devices.Network
Referencia del lenguaje Visual Basic

My.Computer.Network (Miembros del objeto)


Proporciona una propiedad, un evento y métodos para obtener información sobre la red así como sobre la carga y descarga de
archivos.
Propiedades
Propiedad Descripción
IsAvailable Indica si la red está disponible.
Métodos
Método Descripción
DownloadFile Descarga un archivo desde una ubicación remota.

Ping Hace ping un equipo remoto.

UploadFile Carga un archivo en una ubicación remota.


Eventos
Evento Descripción
Evento NetworkAvailabilityChanged Indica cuándo cambia el estado de la conexión de red.
Vea también
Referencia
My.Computer.Network (Objeto)
Otros recursos
Realizar operaciones de red
Referencia del lenguaje Visual Basic

My.Computer.Network.DownloadFile (Método)
Descarga el archivo remoto especificado y lo guarda en la ubicación especificada.

' Usage
My.Computer.Network.DownloadFile(address ,destinationFileName)
My.Computer.Network.DownloadFile(address ,destinationFileName)
My.Computer.Network.DownloadFile(address ,destinationFileName ,userName ,password)
My.Computer.Network.DownloadFile(address ,destinationFileName ,userName ,password)
My.Computer.Network.DownloadFile(address ,destinationFileName ,userName ,password ,showUI ,
connectionTimeout ,overwrite)
My.Computer.Network.DownloadFile(address ,destinationFileName ,userName ,password ,showUI ,
connectionTimeout ,overwrite ,onUserCancel)
My.Computer.Network.DownloadFile(address ,destinationFileName ,userName ,password ,showUI ,
connectionTimeout ,overwrite)
My.Computer.Network.DownloadFile(address ,destinationFileName ,userName ,password ,showUI ,
connectionTimeout ,overwrite ,onUserCancel)
My.Computer.Network.DownloadFile(address ,destinationFileName ,networkCredentials ,showUI ,
connectionTimeout ,overwrite)
My.Computer.Network.DownloadFile(address ,destinationFileName ,networkCredentials ,showUI ,
connectionTimeout ,overwrite ,onUserCancel)
' Declaration
Public Sub DownloadFile( _
ByVal address As String, _
ByVal destinationFileName As String _
)
' -or-
Public Sub DownloadFile( _
ByVal address As System.Uri, _
ByVal destinationFileName As String _
)
' -or-
Public Sub DownloadFile( _
ByVal address As String, _
ByVal destinationFileName As String, _
ByVal userName As String, _
ByVal password As String _
)
' -or-
Public Sub DownloadFile( _
ByVal address As System.Uri, _
ByVal destinationFileName As String, _
ByVal userName As String, _
ByVal password As String _
)
' -or-
Public Sub DownloadFile( _
ByVal address As String, _
ByVal destinationFileName As String, _
ByVal userName As String, _
ByVal password As String, _
ByVal showUI As Boolean, _
ByVal connectionTimeout As Integer, _
ByVal overwrite As Boolean _
)
' -or-
Public Sub DownloadFile( _
ByVal address As String, _
ByVal destinationFileName As String, _
ByVal userName As String, _
ByVal password As String, _
ByVal showUI As Boolean, _
ByVal connectionTimeout As Integer, _
ByVal overwrite As Boolean, _
ByVal onUserCancel As UICancelOption _
)
' -or-
Public Sub DownloadFile( _
ByVal address As System.Uri, _
ByVal destinationFileName As String, _
ByVal userName As String, _
ByVal password As String, _
ByVal showUI As Boolean, _
ByVal connectionTimeout As Integer, _
ByVal overwrite As Boolean _
)
' -or-
Public Sub DownloadFile( _
ByVal address As System.Uri, _
ByVal destinationFileName As String, _
ByVal userName As String, _
ByVal password As String, _
ByVal showUI As Boolean, _
ByVal connectionTimeout As Integer, _
ByVal overwrite As Boolean, _
ByVal onUserCancel As UICancelOption _
)
' -or-
Public Sub DownloadFile( _
ByVal address As System.Uri, _
ByVal destinationFileName As String, _
ByVal networkCredentials As System.Net.ICredentials, _
ByVal showUI As Boolean, _
ByVal connectionTimeout As Integer, _
ByVal overwrite As Boolean _
)
' -or-
Public Sub DownloadFile( _
ByVal address As System.Uri, _
ByVal destinationFileName As String, _
ByVal networkCredentials As System.Net.ICredentials, _
ByVal showUI As Boolean, _
ByVal connectionTimeout As Integer, _
ByVal overwrite As Boolean, _
ByVal onUserCancel As UICancelOption _
)

Parámetros
address
String o Uri Ruta de acceso del archivo que se va a descargar, incluidos el nombre de archivo y la dirección del host.
Obligatorio.
destinationFileName
String. Nombre de archivo y ruta de acceso del archivo descargado. Obligatorio.
userName
String. Nombre de usuario que se va a autenticar. El valor predeterminado es una cadena vacía, "".
password
String.Contraseña que se va a autenticar. El valor predeterminado es una cadena vacía, "".
showUI
Boolean. Especifica si se va a mostrar el progreso de la operación. El valor predeterminado es False.
connectionTimeout
Int32. Intervalo de tiempo de espera en milisegundos. El valor predeterminado es 100 segundos.
overwrite
Boolean. Especifica si se van a sobrescribir los archivos existentes. El valor predeterminado es False.
onUserCancel
UICancelOption. Especifica el comportamiento cuando el usuario hace clic en Cancelar o en No en el cuadro de diálogo
mostrado como resultado de ShowUI establecido en True. El valor predeterminado es ThrowException.
networkCredentials
ICredentials. Credenciales que se van a proporcionar.
Excepciones
Las condiciones siguientes pueden provocar que se produzca una excepción:
El nombre de la unidad no es válido (ArgumentException).
destinationFileName finaliza con una barra oblicua final (ArgumentException).
overwrite está establecido en False y el archivo de destino existe (IOException).
El servidor no responde dentro del valor de connectionTimeout especificado (TimeoutException).
Se produce un error en la autenticación (SecurityException).
El usuario no tiene los permisos necesarios (SecurityException).
El sitio Web deniega la solicitud (WebException).
Comentarios
Si showUI se establece en True, aparece un cuadro de diálogo que muestra el progreso de la operación; en él se incluye un
botón Cancelar que se puede utilizar para cancelar la operación. El cuadro de diálogo no es modal y por tanto no bloquea la
entrada del usuario en otras ventanas del programa.
Si el servidor no responde dentro del intervalo especificado en connectionTimeout, se cancela la operación y se produce una
excepción.
DownloadFile envía la información de traza al habilitar el seguimiento de la red en su aplicación. Para obtener más
información, vea Habilitar el seguimiento de la red.
Nota
El método DownloadFile no envía encabezados HTTP opcionales. Algunos servidores pueden devolver 500 (Error interno d
el servidor) si se produce un error en el encabezado de agente de usuario opcional. Para enviar encabezados opcionales, deb
e crear una solicitud mediante la clase WebClient. Para obtener más información, vea
Operaciones de red en .NET Framework con Visual Basic.

Nota de seguridad
El protocolo FTP envía información, incluidas las contraseñas, en texto sin formato y no se debe utilizar para transmitir infor
mación confidencial.

Tareas
En la tabla siguiente se enumera un ejemplo de una tarea en la que interviene el método
My.Computer.Network.DownloadFile.
Para Vea
Descargar un archivo Cómo: Descargar un archivo en Visual Basic
Ejemplo
En este ejemplo se descarga el archivo WineList.txt desde http://www.cohowinery.com/downloads y se guarda en
C:\Documents and Settings\All Users\Documents.

VB
My.Computer.Network.DownloadFile _
("http://www.cohowinery.com/downloads/WineList.txt", _
"C:\Documents and Settings\All Users\Documents\WineList.txt")

Este ejemplo descarga el archivo WineList.txt de http://www.cohowinery.com/downloads y lo guarda en C:\Documents and


Settings\All Users\Documents, especificando un intervalo de tiempo de espera de 500 milisegundos.

VB
My.Computer.Network.DownloadFile _
("http://www.cohowinery.com/downloads/", _
"C:\Documents and Settings\All Users\Documents\WineList.txt", _
"", "", False, 500, True)

Requisitos
Espacio de nombres: Microsoft.VisualBasic.Devices
Clase: Network
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web Sí

Servicio de Windows Sí

Sitio Web Sí
Permisos
Los permisos siguientes pueden ser necesarios:
Permiso Descripción
FileIOPermission Controla la capacidad de tener acceso a archivos y carpetas. Enumeración asociada: Unrestricted.

UIPermission Controla los permisos relacionados con interfaces de usuario y el Portapapeles. Enumeración asociada:
AllWindows.

WebPermission Controla los derechos para obtener acceso a los recursos de Internet HTTP. Enumeración asociada: Unrestric
ted.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Tareas
Cómo: Descargar un archivo en Visual Basic
Cómo: Determinar si un equipo remoto está disponible en Visual Basic
Cómo: Analizar rutas de acceso a archivos en Visual Basic
Referencia
My.Computer.Network (Objeto)
System.Uri
System.Net.ICredentials
Microsoft.VisualBasic.Devices.Network.DownloadFile
Referencia del lenguaje Visual Basic

My.Computer.Network.IsAvailable (Propiedad)
Indica si un equipo está conectado a una red.

' Usage
Dim value As Boolean = My.Computer.Network.IsAvailable
' Declaration
Public ReadOnly Property IsAvailable As Boolean

Valor devuelto
Boolean.
Comentarios
IsAvailable siempre devuelve False cuando se llama desde una aplicación Click Once o si el usuario no tiene permisos
NetworkInformationPermission.
Tareas
La tabla siguiente muestra una lista de ejemplos de tareas en las que está implicada la propiedad
My.Computer.Network.IsAvailable.
Para Vea
Comprobar si un equipo está conectado a una red. Cómo: Comprobar el estado de conexión en Visual Basic
Ejemplo
Este ejemplo comprueba el estado de la propiedad e informa del mismo.
VB
If My.Computer.Network.IsAvailable = True Then
MsgBox("Computer is connected.")
Else
MsgBox("Computer is not connected.")
End If

Requisitos
Espacio de nombres: Microsoft.VisualBasic.Devices
Clase: Network
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web Sí

Servicio de Windows Sí
Sitio Web Sí
Permisos
Los permisos siguientes pueden ser necesarios:
Permiso Descripción
FileIOPermission Controla la capacidad de tener acceso a archivos y carpetas. Enumeración asociada: Unrestricted.

WebPermission Controla los derechos para obtener acceso a los recursos de Internet HTTP. Enumeración asociada: Unrestric
ted.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Tareas
Cómo: Determinar si un equipo remoto está disponible en Visual Basic
Referencia
My.Computer.Network (Objeto)
Microsoft.VisualBasic.Devices.Network.IsAvailable
Referencia del lenguaje Visual Basic

My.Computer.Network.Ping (Método)
Hace ping en el servidor especificado.

' Usage
Dim value As Boolean = My.Computer.Network.Ping(hostNameOrAddress)
Dim value As Boolean = My.Computer.Network.Ping(address)
Dim value As Boolean = My.Computer.Network.Ping(hostNameOrAddress ,timeout)
Dim value As Boolean = My.Computer.Network.Ping(address ,timeout)
' Declaration
Public Function Ping( _
ByVal hostNameOrAddress As String _
) As Boolean
' -or-
Public Function Ping( _
ByVal address As System.Uri _
) As Boolean
' -or-
Public Function Ping( _
ByVal hostNameOrAddress As String, _
ByVal timeout As Integer _
) As Boolean
' -or-
Public Function Ping( _
ByVal address As System.Uri, _
ByVal timeout As Integer _
) As Boolean

Parámetros
hostNameOrAddress
String. La dirección URL, nombre de equipo o número IP del servidor en el que hacer ping. Obligatorio.
address
Uri. El identificador uniforme de recursos (URI) del servidor en el que hacer ping. Obligatorio.
timeout
Int32. Umbral de tiempo, en milisegundos, para establecer contacto con el destino. El valor predeterminado es 500.
Obligatorio.
Valor devuelto
Boolean que indica si la operación se realizó correctamente.
Excepciones
Las condiciones siguientes pueden hacer que se produzca una excepción:
No hay ninguna conexión de red disponible (InvalidOperationException).
La dirección URL no era válida (PingException).
Comentarios
El método Ping no es un método con seguridad para determinar la disponibilidad de un equipo remoto: el puerto ping del
equipo de destino puede estar desactivado, o la solicitud de ping puede resultar bloqueada por un firewall o un enrutador.
La dirección pasada al método Ping debe poder resolverse por DNS y no puede ir precedida por "http://".
Tareas
La tabla siguiente muestra una lista de ejemplos de tareas en las que está implicado el método My.Computer.Network.Ping.
Para Vea
Determinar si está disponible un equipo remoto u host. Cómo: Determinar si un equipo remoto está disponible en Visual Basic
Ejemplo
Este ejemplo informa de si se puede hacer ping en el servidor determinando si el método Ping devuelve True.
VB
If My.Computer.Network.Ping("198.01.01.01") Then
MsgBox("Server pinged successfully.")
Else
MsgBox("Ping request timed out.")
End If

Reemplace "198.01.01.01" con la dirección IP, la dirección URL o el nombre de equipo del servidor en el que hacer ping.
Este ejemplo informa de si se puede hacer ping en el servidor determinando si el método Ping devolvió True y especifica un
tiempo de espera de 1000 milisegundos.
VB
If My.Computer.Network.Ping("www.cohowinery.com",1000) Then
MsgBox("Server pinged successfully.")
Else
MsgBox("Ping request timed out.")
End If

Reemplace "www.cohowinery.com" con la dirección IP, la dirección URL o el nombre de equipo del servidor en el que hacer
ping.
Requisitos
Espacio de nombres: Microsoft.VisualBasic.Devices
Clase: Network
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web Sí

Servicio de Windows Sí

Sitio Web Sí
Permisos
Los permisos siguientes pueden ser necesarios:
Permiso Descripción
FileIOPermission Controla la capacidad de tener acceso a archivos y carpetas. Enumeración asociada:
Unrestricted.
SecurityPermission Describe un conjunto de permisos de seguridad aplicados al código. Enumeración asociada:
ControlPrincipal.

WebPermission Controla los derechos para obtener acceso a los recursos de Internet HTTP. Enumeración asoc
iada: Unrestricted.

SocketPermission Controla los derechos para realizar o aceptar conexiones en una dirección de transporte. Enu
meración asociada: Unrestricted.

PerformanceCounterPermission Controla el acceso a un componente de contador de rendimiento de Windows NT. Enumeraci


ón asociada: Unrestricted.

NetworkInformationPermission Controla el acceso a información de la red y estadísticas del tráfico para el equipo local. Enum
eración asociada: Ping.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Referencia
My.Computer.Network (Objeto)
System.Uri
Microsoft.VisualBasic.Devices.Network.Ping
Referencia del lenguaje Visual Basic

My.Computer.Network.NetworkAvailabilityChanged (Evento)
Se produce cuando cambia la disponibilidad en red.

' Usage
Public Sub MyComputerNetwork_NetworkAvailabilityChanged( _
ByVal sender As Object, _
ByVal e As Devices.NetworkAvailableEventArgs _
)
End Sub
Sub Handle_NetworkAvailabilityChanged()
AddHandler My.Computer.Network.NetworkAvailabilityChanged, _
AddressOf MyComputerNetwork_NetworkAvailabilityChanged
End Sub
' Declaration
Public Event NetworkAvailabilityChanged( _
ByVal sender As Object, _
ByVal e As Devices.NetworkAvailableEventArgs _
)

Parámetros
sender
Obligatorio. Object que provocó el evento.
e
Obligatorio. Un objeto NetworkAvailableEventArgs que contiene información sobre la disponibilidad de la red.
Comentarios
Una aplicación provoca el evento NetworkAvailabilityChanged cada vez que cambia la disponibilidad de la red. Puede
utilizar la propiedad IsNetworkAvailable del parámetro e para obtener el nuevo estado de la conexión de red. Para obtener el
estado actual de la conexión de red, utilice My.Computer.Network.IsAvailable (Propiedad).
En una aplicación de Windows Forms, este evento se inicia en el subproceso principal de la aplicación con los demás eventos
de interfaz del usuario. De este modo, el controlador de eventos puede obtener acceso directo a la interfaz de usuario de la
aplicación. Sin embargo, si la aplicación está ocupada con otro evento de la interfaz de usuario al provocarse este evento, éste
no se puede procesar hasta que el otro controlador de eventos finalice o llame al método My.Application.DoEvents (Método).
No puede utilizar la instrucción Handles para controlar el evento NetworkAvailabilityChanged; debe utilizar la instrucción
AddHandler.
En las aplicaciones de Windows Forms, el objeto My.Application expone un evento NetworkAvailabilityChanged que
proporciona las mismas funciones que este evento, pero se puede controlar con la instrucción Handles. Para obtener más
información, vea My.Application.NetworkAvailabilityChanged (Evento).
Nota
Muchos concentradores de red proporcionan una conexión de red, aun cuando el concentrador esté desconectado de una re
d mayor. Por tanto, en las conexiones por cable, este evento indica un cambio en la conexión entre el equipo y un concentrad
or.

Nota
El evento NetworkAvailabilityChanged no se inicia en aplicaciones que se ejecutan en Windows 95 y Windows 98 ni en a
plicaciones que ejecuta un usuario no administrador en Windows 2000. Si la aplicación se ejecuta en estas plataformas, utilic
e My.Computer.Network.IsAvailable (Propiedad) para comprobar la disponibilidad de la red.

Ejemplo
Este ejemplo utiliza el evento My.Computer.Network.NetworkAvailabilityChanged para actualizar la interfaz de usuario
de un formulario o control.
VB
Private Sub DisplayAvailability(ByVal available As Boolean)
Label1.Text = available.ToString
End Sub
Private Sub MyComputerNetwork_NetworkAvailabilityChanged( _
ByVal sender As Object, _
ByVal e As Devices.NetworkAvailableEventArgs)
DisplayAvailability(e.IsNetworkAvailable)
End Sub

Private Sub Handle_NetworkAvailabilityChanged()


AddHandler My.Computer.Network.NetworkAvailabilityChanged, _
AddressOf MyComputerNetwork_NetworkAvailabilityChanged
DisplayAvailability(My.Computer.Network.IsAvailable)
End Sub

Este código debe estar incluido en un formulario o un control con un objeto Label denominado Label1. Debe llamar al método
Handle_NetworkAvailabilityChanged para inicializar la etiqueta y enlazar el controlador de eventos.

Requisitos
Espacio de nombres: Microsoft.VisualBasic.Devices
Clase: Network
Ensamblado:Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web Sí

Servicio de Windows Sí

Sitio Web Sí
Permisos
No se requiere ningún permiso.
Vea también
Referencia
My.Computer.Network (Objeto)
My.Application.NetworkAvailabilityChanged (Evento)
Microsoft.VisualBasic.Devices.NetworkAvailableEventArgs
Referencia del lenguaje Visual Basic

My.Computer.Network.UploadFile (Método)
Envía el archivo especificado a la dirección del host especificada.

' Usage
My.Computer.Network.UploadFile(sourceFileName ,address)
My.Computer.Network.UploadFile(sourceFileName ,address)
My.Computer.Network.UploadFile(sourceFileName ,address ,userName ,password)
My.Computer.Network.UploadFile(sourceFileName ,address ,userName ,password)
My.Computer.Network.UploadFile(sourceFileName ,address ,userName ,password ,showUI ,connect
ionTimeout)
My.Computer.Network.UploadFile(sourceFileName ,address ,userName ,password ,showUI ,connect
ionTimeout ,onUserCancel)
My.Computer.Network.UploadFile(sourceFileName ,address ,userName ,password ,showUI ,connect
ionTimeout)
My.Computer.Network.UploadFile(sourceFileName ,address ,userName ,password ,showUI ,connect
ionTimeout ,onUserCancel)
My.Computer.Network.UploadFile(sourceFileName ,address ,networkCredentials ,showUI ,connect
ionTimeout)
My.Computer.Network.UploadFile(sourceFileName ,address ,networkCredentials ,showUI ,connect
ionTimeout ,onUserCancel)
' Declaration
Public Sub UploadFile( _
ByVal sourceFileName As String, _
ByVal address As String _
)
' -or-
Public Sub UploadFile( _
ByVal sourceFileName As String, _
ByVal address As System.Uri _
)
' -or-
Public Sub UploadFile( _
ByVal sourceFileName As String, _
ByVal address As String, _
ByVal userName As String, _
ByVal password As String _
)
' -or-
Public Sub UploadFile( _
ByVal sourceFileName As String, _
ByVal address As System.Uri, _
ByVal userName As String, _
ByVal password As String _
)
' -or-
Public Sub UploadFile( _
ByVal sourceFileName As String, _
ByVal address As String, _
ByVal userName As String, _
ByVal password As String, _
ByVal showUI As Boolean, _
ByVal connectionTimeout As Integer _
)
' -or-
Public Sub UploadFile( _
ByVal sourceFileName As String, _
ByVal address As String, _
ByVal userName As String, _
ByVal password As String, _
ByVal showUI As Boolean, _
ByVal connectionTimeout As Integer, _
ByVal onUserCancel As UICancelOption _
)
' -or-
Public Sub UploadFile( _
ByVal sourceFileName As String, _
ByVal address As System.Uri, _
ByVal userName As String, _
ByVal password As String, _
ByVal showUI As Boolean, _
ByVal connectionTimeout As Integer _
)
' -or-
Public Sub UploadFile( _
ByVal sourceFileName As String, _
ByVal address As System.Uri, _
ByVal userName As String, _
ByVal password As String, _
ByVal showUI As Boolean, _
ByVal connectionTimeout As Integer, _
ByVal onUserCancel As UICancelOption _
)
' -or-
Public Sub UploadFile( _
ByVal sourceFileName As String, _
ByVal address As System.Uri, _
ByVal networkCredentials As System.Net.ICredentials, _
ByVal showUI As Boolean, _
ByVal connectionTimeout As Integer _
)
' -or-
Public Sub UploadFile( _
ByVal sourceFileName As String, _
ByVal address As System.Uri, _
ByVal networkCredentials As System.Net.ICredentials, _
ByVal showUI As Boolean, _
ByVal connectionTimeout As Integer, _
ByVal onUserCancel As UICancelOption _
)

Parámetros
sourceFileName
String. Ruta de acceso y nombre del archivo que se va a cargar. Obligatorio.
address
String o Uri Dirección URL, dirección IP o identificador URI del servidor de destino. Obligatorio.
userName
String. Nombre de usuario que se va a autenticar. El valor predeterminado es una cadena vacía: "".
password
String. Contraseña que se va a autenticar. El valor predeterminado es una cadena vacía: "".
showUI
Boolean. Si se va a mostrar el progreso de la operación. El valor predeterminado es False.
connectionTimeout
Int32. Intervalo de tiempo de espera en milisegundos. El valor predeterminado es 100 segundos.
onUserCancel
UICancelOption. Acción que se debe realizar cuando el usuario hace clic en Cancelar. El valor predeterminado es
ThrowException.
networkCredentials
ICredentials. Credenciales de autenticación.
Excepciones
Las condiciones siguientes pueden producir una excepción:
La ruta de acceso local no es válida (ArgumentException).
connectionTimeout es menor o igual que cero (ArgumentException).
address no incluye un nombre de archivo (InvalidOperationException).
Se produjo un error en la autenticación (SecurityException).
El usuario no tiene los permisos necesarios (SecurityException).
Se ha agotado el tiempo de espera de conexión (TimeoutException).
El sitio Web deniega la solicitud (WebException).
Comentarios
Si showUI está establecido en True, un cuadro de diálogo mostrará el progreso de la operación; en él se incluye un botón
Cancelar en el que puede hacer clic el usuario para cancelar la operación. Dado que el cuadro de diálogo no es modal, no
bloquea los datos proporcionados por el usuario a las otras ventanas del programa.
Si el servidor no responde dentro del intervalo especificado en connectionTimeout, se cancelará la operación y se producirá
una excepción.
My.Computer.Network.UploadFile genera información de seguimiento al habilitar el seguimiento de la red en su aplicación.
Para obtener más información, vea Habilitar el seguimiento de la red.
Nota de seguridad
El protocolo FTP envía información, incluidas las contraseñas, en texto sin formato y no se debería utilizar para transmitir inf
ormación confidencial.

Tareas
En la tabla siguiente se incluye un ejemplo de una tarea en la que interviene el método My.Computer.Network.UploadFile.
Para Vea
Cargar un archivo Cómo: Cargar un archivo en Visual Basic
Ejemplo
En este ejemplo se carga el archivo Order.txt en http://www.cohowinery.com/uploads.
VB
My.Computer.Network.UploadFile ( "C:\My Documents\Order.txt", _
"http://www.cohowinery.com/upload.aspx")

Este ejemplo carga el archivo Order.txt en http://www.cohowinery.com/uploads sin proporcionar ningún nombre de usuario
ni contraseña, muestra el progreso de la carga y tiene un tiempo de espera de 500 milisegundos.
VB
My.Computer.Network.UploadFile ("C:\My Documents\Order.txt", _
"http://www.cohowinery.com/upload.aspx","","",True,500)

Requisitos
Espacio de nombres: Microsoft.VisualBasic.Devices
Clase: Network
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web Sí

Servicio de Windows Sí

Sitio Web Sí
Permisos
Los permisos siguientes pueden ser necesarios:
Permiso Descripción
FileIOPermission Controla la capacidad de tener acceso a archivos y carpetas. Enumeración asociada: Unrestricted.

UIPermission Controla los permisos relacionados con interfaces de usuario y el Portapapeles. Enumeración asociada:
AllWindows.

WebPermission Controla los derechos para obtener acceso a los recursos de Internet HTTP. Enumeración asociada: Unrestric
ted.

Para obtener más información, vea Seguridad de acceso a código y Solicitar permisos.
Vea también
Tareas
Cómo: Descargar un archivo en Visual Basic
Cómo: Analizar rutas de acceso a archivos en Visual Basic
Referencia
My.Computer.Network (Objeto)
System.Uri
System.Net.ICredentials
Microsoft.VisualBasic.FileIO.UICancelOption
Microsoft.VisualBasic.Devices.Network.UploadFile
Referencia del lenguaje Visual Basic

My.Computer.Ports (Objeto)
Proporciona una propiedad y un método para tener acceso a los puertos serie del equipo.
Comentarios
El objeto My.Computer.Ports proporciona un punto de entrada sencillo para tener acceso a la clase de puerto serie de .NET
Framework, SerialPort.
Tareas
La tabla siguiente muestra ejemplos de tareas que implican al objeto My.Computer.Ports.
Para Vea
Marcar en un módem conectado a un puerto se Cómo: Marcar a través de módems conectados a puertos serie en Visual Basic
rie

Enviar una cadena a un puerto serie Cómo: Enviar cadenas a puertos serie en Visual Basic

Recibir cadenas de un puerto serie Cómo: Recibir cadenas de puertos serie en Visual Basic

Mostrar los puertos serie disponibles Cómo: Mostrar los puertos serie disponibles en Visual Basic
Ejemplo
En este ejemplo se explica cómo enviar cadenas al puerto serie COM1 del equipo.
El bloque Using permite a la aplicación cerrar el puerto serie aun cuando se genere una excepción. Todo el código que
manipula el puerto serie debe aparecer dentro de este bloque, o bien en un bloque Try...Catch...Finally con una llamada para
utilizar el método Close.
El método WriteLine envía los datos al puerto serie.
VB
Sub SendSerialData(ByVal data As String)
' Send strings to a serial port.
Using com1 As IO.Ports.SerialPort = _
My.Computer.Ports.OpenSerialPort("COM1")
com1.WriteLine(data)
End Using
End Sub

Para obtener más información, vea Cómo: Enviar cadenas a puertos serie en Visual Basic.
Requisitos
Espacio de nombres: Microsoft.VisualBasic.Devices
Clase: Ports
Ensamblado:Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí


Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web No
Vea también
Tareas
Cómo: Marcar a través de módems conectados a puertos serie en Visual Basic
Cómo: Enviar cadenas a puertos serie en Visual Basic
Cómo: Recibir cadenas de puertos serie en Visual Basic
Cómo: Mostrar los puertos serie disponibles en Visual Basic
Referencia
My.Computer.Ports (Miembros del objeto)
My.Computer (Objeto)
Microsoft.VisualBasic.Devices.Ports
Referencia del lenguaje Visual Basic

My.Computer.Ports (Miembros del objeto)


El objeto My.Computer.Ports (Objeto) suministra una propiedad y un método para tener acceso a los puertos serie del equipo.
Propiedades
SerialPortNames Obtiene una colección de nombres de los puertos serie en el equipo.
Esta propiedad no está disponible para aplicaciones Web.
Métodos
OpenSerialPort Crea y abre un objeto SerialPort.
Este método no está disponible para aplicaciones Web.
Vea también
Referencia
My.Computer.Ports (Objeto)
Referencia del lenguaje Visual Basic

My.Computer.Ports.OpenSerialPort (Método)
Crea y abre un objeto SerialPort.

' Usage
Dim value As System.IO.Ports.SerialPort = My.Computer.Ports.OpenSerialPort(portName)
Dim value As System.IO.Ports.SerialPort = My.Computer.Ports.OpenSerialPort(portName ,baudRa
te)
Dim value As System.IO.Ports.SerialPort = My.Computer.Ports.OpenSerialPort(portName ,baudRa
te ,parity)
Dim value As System.IO.Ports.SerialPort = My.Computer.Ports.OpenSerialPort(portName ,baudRa
te ,parity ,dataBits)
Dim value As System.IO.Ports.SerialPort = My.Computer.Ports.OpenSerialPort(portName ,baudRa
te ,parity ,dataBits ,stopBits)
' Declaration
Public Function OpenSerialPort( _
ByVal portName As String _
) As System.IO.Ports.SerialPort
' -or-
Public Function OpenSerialPort( _
ByVal portName As String, _
ByVal baudRate As Integer _
) As System.IO.Ports.SerialPort
' -or-
Public Function OpenSerialPort( _
ByVal portName As String, _
ByVal baudRate As Integer, _
ByVal parity As System.IO.Ports.Parity _
) As System.IO.Ports.SerialPort
' -or-
Public Function OpenSerialPort( _
ByVal portName As String, _
ByVal baudRate As Integer, _
ByVal parity As System.IO.Ports.Parity, _
ByVal dataBits As Integer _
) As System.IO.Ports.SerialPort
' -or-
Public Function OpenSerialPort( _
ByVal portName As String, _
ByVal baudRate As Integer, _
ByVal parity As System.IO.Ports.Parity, _
ByVal dataBits As Integer, _
ByVal stopBits As System.IO.Ports.StopBits _
) As System.IO.Ports.SerialPort

Parámetros
portName
String. Requerido. Nombre del puerto que se va a abrir.
baudRate
Integer. Velocidad en baudios del puerto.
parity
Parity. Paridad del puerto.
dataBits
Integer. Configuración de bit de datos del puerto.
stopBits
StopBits. Configuración de bit de parada del puerto.
Valor devuelto
Objeto SerialPort abierto, configurado con los argumentos proporcionados.
Excepciones
Las condiciones siguientes pueden provocar una excepción:
El argumento portName es Nothing o una cadena vacía (ArgumentNullException).
El argumento baudRate o dataBits es cero o negativo (ArgumentException).
El tipo del argumento parity no se corresponde con ninguno de los valores de la enumeración Parity
(InvalidEnumArgumentException).
El tipo del argumento stopBits no se corresponde con ninguno de los valores de la enumeración StopBits
(InvalidEnumArgumentException).
Comentarios
El método My.Computer.Ports.OpenSerialPort crea y abre un objeto SerialPort. Los argumentos para el método
OpenSerialPort determinan la configuración del objeto SerialPort.
El código debería cerrar el objeto SerialPort cuando se termina de utilizar el objeto. Puede utilizar el método Close para cerrar
explícitamente el objeto o la instrucción Using para cerrarlo implícitamente. Vea el ejemplo en este tema para obtener más
información.
Tareas
En la tabla siguiente se muestran ejemplos de tareas en las que interviene el método My.Computer.Ports.OpenSerialPort.
Para Vea
Marcar un módem asociado a un puerto serie Cómo: Marcar a través de módems conectados a puertos serie en Visual Basic

Enviar una cadena al puerto serie Cómo: Enviar cadenas a puertos serie en Visual Basic

Recibir las cadenas de un puerto serie Cómo: Recibir cadenas de puertos serie en Visual Basic
Ejemplo
En este ejemplo se describe cómo enviar cadenas al puerto serie COM1 del equipo.
El bloque Using permite a la aplicación cerrar el puerto serie aun cuando se genere una excepción. Todo el código que utiliza
el puerto serie debe aparecer dentro de este bloque o dentro de un bloque Try...Catch...Finally con una llamada para utilizar
el método Close.
El método WriteLine envía los datos al puerto serie.
VB
Sub SendSerialData(ByVal data As String)
' Send strings to a serial port.
Using com1 As IO.Ports.SerialPort = _
My.Computer.Ports.OpenSerialPort("COM1")
com1.WriteLine(data)
End Using
End Sub

Para obtener más información, vea Cómo: Enviar cadenas a puertos serie en Visual Basic.
Requisitos
Espacio de nombres: Microsoft.VisualBasic.Devices
Clase: Ports
Ensamblado: biblioteca en tiempo de ejecución de Visual Basic (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web No
Permisos
No se requiere ningún permiso.
Vea también
Tareas
Cómo: Marcar a través de módems conectados a puertos serie en Visual Basic
Cómo: Enviar cadenas a puertos serie en Visual Basic
Cómo: Recibir cadenas de puertos serie en Visual Basic
Referencia
My.Computer.Ports (Objeto)
My.Computer.Ports.SerialPortNames (Propiedad)
Instrucción Using (Visual Basic)
System.IO.Ports.Parity
System.IO.Ports.StopBits
System.IO.Ports.SerialPort
Microsoft.VisualBasic.Devices.Ports.OpenSerialPort(System.String)
Referencia del lenguaje Visual Basic

My.Computer.Ports.SerialPortNames (Propiedad)
Obtiene una colección de los nombres de los puertos serie del equipo.

' Usage
Dim value As System.Collections.Generic.ReadOnlyCollection`1(Of String) = My.Computer.Ports
.SerialPortNames
' Declaration
Public ReadOnly Property SerialPortNames As System.Collections.Generic.ReadOnlyCollection`1
(Of String)

Valor devuelto
Una colección de los nombres de los puertos serie del equipo.
Comentarios
La propiedad My.Computer.Ports.SerialPortNames obtiene una colección de los nombres de los puertos serie del equipo.
Nota
Los nombres de los puertos devueltos por My.Computer.Ports.SerialPortNames pueden ser incorrectos cuando se ejecut
e la aplicación en Windows 98. Para evitar que se produzcan errores en la aplicación, utilice un control de excepciones, como
la instrucción Try...Catch...Finally o la instrucción Using al utilizar nombres de puertos para los puertos abiertos.

Tareas
En la tabla siguiente se incluye un ejemplo de una tarea en la que interviene la propiedad
My.Computer.Ports.SerialPortNames.
Para Vea
Mostrar los puertos serie disponibles Cómo: Mostrar los puertos serie disponibles en Visual Basic
Ejemplo
Este ejemplo recorre en iteración todas las cadenas devueltas por la propiedad My.Computer.Ports.SerialPortNames. Estas
cadenas son los nombres de los puertos serie disponibles del equipo.
Normalmente, un usuario selecciona en la lista de puertos disponibles el puerto serie que debería utilizar la aplicación. En este
ejemplo, los nombres del puerto serie se almacenan en un control ListBox. Para obtener más información, vea
ListBox (Control, formularios Windows Forms).
VB
Sub GetSerialPortNames()
' Show all available COM ports.
For Each sp As String In My.Computer.Ports.SerialPortNames
ListBox1.Items.Add(sp)
Next
End Sub

Para este ejemplo se necesita:


Una referencia al espacio de nombres System.
Que su formulario tenga un control ListBox denominado ListBox1.
Para obtener más información, vea Cómo: Mostrar los puertos serie disponibles en Visual Basic.
Requisitos
Espacio de nombres: Microsoft.VisualBasic.Devices
Clase: Ports
Ensamblado:Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Disponibilidad por tipo de proyecto
Tipo de proyecto Disponible
Aplicación para Windows Sí

Biblioteca de clases Sí

Aplicación de consola Sí

Biblioteca de controles de Windows Sí

Biblioteca de controles Web No

Servicio de Windows Sí

Sitio Web No
Permisos
No se requiere ningún permiso.
Vea también
Tareas
Cómo: Mostrar los puertos serie disponibles en Visual Basic
Referencia
My.Computer.Ports (Objeto)
My.Computer.Ports.OpenSerialPort (Método)
Instrucción Try...Catch...Finally (Visual Basic)
Instrucción Using (Visual Basic)
ReadOnlyCollection
Microsoft.VisualBasic.Devices.Ports.SerialPortNames
Referencia del lenguaje Visual Basic

My.Computer.Registry (Objeto)
Proporciona propiedades y métodos para manipular el Registro.
Comentarios
Para utilizar estas propiedades, necesitará permiso de lectura y de escritura de RegistryPermissionAccess (Enumeración).
Cualquier código que se ejecute con confianza plena (bajo la directiva de seguridad predeterminada, cualquier código
instalado en la unidad de disco duro local del usuario) tiene los permisos necesarios para tener acceso al Registro. Para
obtener más información, vea RegistryPermission (Clase).
Tareas
La tabla siguiente muestra ejemplos de tareas que implican al objeto My.Computer.Registry.
Para Vea
Crear una clave del Registro Cómo: Crear una clave del Registro y establecer sus valores en Visual Basic

Determinar si existe un valor en una clave del Re Cómo: Determinar si existe un valor en una clave del Registro en Visual Basic
gistro

Escribir datos en una clave del Registro Cómo: Establecer los valores de las claves del Registro en Visual Basic

Eliminar una clave del Registro Cómo: Eliminar una clave del Registro de Visual Basic

Leer datos del Registro Cómo: Leer un valor a partir de una clave del Registro en Visual Basic
Ejemplo
En este ejemplo se lee el valor Name de HKEY_CURRENT_USER\Software\MyApp y se presenta en un cuadro de mensaje.
VB
Dim readValue As Object
readValue = My.Computer.Registry.GetValue _
("HKEY_CURRENT_USER\Software\MyApp", "Name", Nothing)
MsgBox("The value is " & CStr(readValue))

Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: RegistryProxy (proporciona acceso a Registry)
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Vea también
Tareas
Tutorial: Crear una clave del Registro y cambiar sus valores
Solución de problemas: Manipulación del Registro
Referencia
My.Computer.Registry (Miembros del objeto)
My.Computer.Registry.ClassesRoot (Propiedad)
My.Computer.Registry.CurrentConfig (Propiedad)
My.Computer.Registry.CurrentUser (Propiedad)
My.Computer.Registry.DynData (Propiedad)
My.Computer.Registry.LocalMachine (Propiedad)
My.Computer.Registry.PerformanceData (Propiedad)
My.Computer.Registry.Users (Propiedad)
My.Computer.Registry.GetValue (Método)
My.Computer.Registry.SetValue (Método)
My.Computer (Objeto)
Microsoft.Win32.Registry
Conceptos
Tareas habituales del Registro
Referencia del lenguaje Visual Basic

My.Computer.Registry (Miembros del objeto)


El objeto My.Computer.Registry proporciona métodos y propiedades para trabajar con las claves del Registro.
Propiedades
ClassesRoot Corresponde a HKEY_CLASSES_ROOT.

CurrentConfig Corresponde a HKEY_CURRENT_CONFIG.

CurrentUser Corresponde a HKEY_CURRENT_USER.

DynData Corresponde a HKEY_DYNAMIC_DATA.

LocalMachine Corresponde a HKEY_LOCAL_MACHINE.

PerformanceData Corresponde a HKEY_PERFORMANCE_DATA.

Users Corresponde a HKEY_USERS.


Métodos
GetValue Obtiene un valor de una clave del Registro.

SetValue Establece un valor en una clave del Registro.


Vea también
Tareas
Tutorial: Crear una clave del Registro y cambiar sus valores
Referencia
My.Computer.Registry (Objeto)
Conceptos
Tareas habituales del Registro
Referencia del lenguaje Visual Basic

My.Computer.Registry.ClassesRoot (Propiedad)
Devuelve un tipo RegistryKey que proporciona acceso a HKEY_CLASSES_ROOT.

' Usage
Dim value As Microsoft.Win32.RegistryKey = My.Computer.Registry.ClassesRoot
' Declaration
Public ReadOnly Property ClassesRoot As Microsoft.Win32.RegistryKey

Valor devuelto
RegistryKey
Comentarios
El objeto My.Computer.Registry proporciona métodos y propiedades por trabajar con las claves del Registro. Vea
My.Computer.Registry (Objeto) para obtener más información.
HKEY_CLASSES_ROOT se utiliza principalmente para almacenar información sobre las asociaciones de archivos en Windows.
La clase RegistryPermission que está en el espacio de nombres System.Security.Permissions controla el acceso a las variables
de Registro. No deben almacenarse variables de Registro en ubicaciones de memoria donde pueda obtener acceso el código
sin RegistryPermission. Igualmente, al conceder permisos, conceda sólo los privilegios necesarios para realizar el trabajo.
La enumeración RegistryPermissionAccess define los valores de acceso de permiso del Registro. La siguiente tabla
proporciona detalles de sus miembros.
Valor Descripción
AllAccess Acceso de creación, lectura y escritura para las variables del Registro.

Create Acceso de creación para las variables del Registro.

NoAccess No se dispone de acceso para las variables del Registro.

Read Acceso de lectura para las variables del Registro.

Write Acceso de escritura para las variables del Registro.


Tareas
La tabla siguiente muestra ejemplos de tareas que implican al objeto My.Computer.Registry.
Para Vea
Crear una clave del Registro Cómo: Crear una clave del Registro y establecer sus valores en Visual Basic

Eliminar una clave del Registro Cómo: Eliminar una clave del Registro de Visual Basic

Determinar si un valor existe en una clave del Re Cómo: Determinar si existe un valor en una clave del Registro en Visual Basic
gistro

Leer un valor de una clave del Registro Cómo: Leer un valor a partir de una clave del Registro en Visual Basic

Establecer un valor en una clave del Registro Cómo: Establecer los valores de las claves del Registro en Visual Basic
Ejemplo
Este ejemplo obtiene los nombres de las subclaves de la clave del Registro ClassesRoot y los agrega a ListBox1.
VB
Dim keyList As System.Collections.IEnumerable
keyList = My.Computer.Registry.ClassesRoot.GetSubKeyNames()
For Each keyName As String In keyList
ListBox1.Items.Add(keyName)
Next

Este ejemplo requiere que se tenga un objeto ListBox denominado ListBox1 en el proyecto.
Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: RegistryProxy (proporciona acceso a Registry)
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Permisos
No se requiere ningún permiso.
Vea también
Tareas
Solución de problemas: Manipulación del Registro
Referencia
My.Computer.Registry (Objeto)
Microsoft.Win32.RegistryKey
Microsoft.Win32.Registry.ClassesRoot
Conceptos
Tareas habituales del Registro
Seguridad y Registro
Leer y escribir en el Registro con Mi
Referencia del lenguaje Visual Basic

My.Computer.Registry.CurrentConfig (Propiedad)
Devuelve un tipo RegistryKey que proporciona acceso a HKEY_CURRENT_CONFIG.

' Usage
Dim value As Microsoft.Win32.RegistryKey = My.Computer.Registry.CurrentConfig
' Declaration
Public ReadOnly Property CurrentConfig As Microsoft.Win32.RegistryKey

Valor devuelto
RegistryKey
Comentarios
El objeto My.Computer.Registry proporciona métodos y propiedades por trabajar con las claves del Registro. Vea
My.Computer.Registry (Objeto) para obtener más información.
HKEY_CURRENT_CONFIG se utiliza principalmente para almacenar la configuración de dispositivos del equipo.
La clase RegistryPermission que está en el espacio de nombres System.Security.Permissions controla el acceso a las variables
de Registro. No deben almacenarse variables de Registro en ubicaciones de memoria donde pueda obtener acceso el código
sin RegistryPermission. Igualmente, al conceder permisos, conceda sólo los privilegios necesarios para realizar el trabajo.
La enumeración RegistryPermissionAccess define los valores de acceso de permiso del Registro. La siguiente tabla
proporciona detalles de sus miembros.
Valor Descripción
AllAccess Acceso de creación, lectura y escritura para las variables del Registro.

Crear Acceso de creación para las variables del Registro.

NoAccess No se dispone de acceso para las variables del Registro.

Lectura Acceso de lectura para las variables del Registro.

Write Acceso de escritura para las variables del Registro.


Tareas
La tabla siguiente muestra ejemplos de tareas que implican al objeto My.Computer.Registry.
Para Vea
Crear una clave del Registro Cómo: Crear una clave del Registro y establecer sus valores en Visual Basic

Eliminar una clave del Registro Cómo: Eliminar una clave del Registro de Visual Basic

Determinar si un valor existe en una clave del Re Cómo: Determinar si existe un valor en una clave del Registro en Visual Basic
gistro

Leer un valor de una clave del Registro Cómo: Leer un valor a partir de una clave del Registro en Visual Basic

Establecer un valor en una clave del Registro Cómo: Establecer los valores de las claves del Registro en Visual Basic
Ejemplo
Este ejemplo crea la subclave MyDeviceSettings.
VB
My.Computer.Registry.CurrentConfig.CreateSubKey("MyDeviceSettings")

Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: RegistryProxy (proporciona acceso a Registry)
Ensamblado: Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)
Permisos
No se requiere ningún permiso.
Vea también
Tareas
Solución de problemas: Manipulación del Registro
Referencia
My.Computer.Registry (Objeto)
Microsoft.Win32.RegistryKey
Microsoft.Win32.Registry.CurrentConfig
Conceptos
Tareas habituales del Registro
Seguridad y Registro
Leer y escribir en el Registro con Mi
Referencia del lenguaje Visual Basic

My.Computer.Registry.CurrentUser (Propiedad)
Devuelve un tipo RegistryKey que proporciona acceso a HKEY_CURRENT_USER.

' Usage
Dim value As Microsoft.Win32.RegistryKey = My.Computer.Registry.CurrentUser
' Declaration
Public ReadOnly Property CurrentUser As Microsoft.Win32.RegistryKey

Valor devuelto
RegistryKey
Comentarios
El objeto My.Computer.Registry proporciona métodos y propiedades por trabajar con las claves del Registro. Vea
My.Computer.Registry (Objeto) para obtener más información.
HKEY_CURRENT_USER se utiliza principalmente para almacenar la configuración por usuario, como colores y fuentes, en
Windows. La clave varía según el usuario.
La clase RegistryPermission que está en el espacio de nombres System.Security.Permissions controla el acceso a las variables
de Registro. No deben almacenarse variables de Registro en ubicaciones de memoria donde pueda obtener acceso el código
sin RegistryPermission. Asimismo, cuando se conceden permisos, se conceden los privilegios mínimos necesarios para
realizar el trabajo.
La enumeración RegistryPermissionAccess define los valores de acceso de permiso del Registro. La siguiente tabla
proporciona detalles de sus miembros.
Valor Descripción
AllAccess Acceso de creación, lectura y escritura para las variables del Registro.

Create Acceso de creación para las variables del Registro.

NoAccess No se dispone de acceso para las variables del Registro.

Read Acceso de lectura para las variables del Registro.

Write Acceso de escritura para las variables del Registro.


Tareas
La tabla siguiente muestra ejemplos de tareas que implican al objeto My.Computer.Registry.
Para Vea
Crear una clave del Registro Cómo: Crear una clave del Registro y establecer sus valores en Visual Basic

Eliminar una clave del Registro Cómo: Eliminar una clave del Registro de Visual Basic

Determinar si un valor existe en una clave del Re Cómo: Determinar si existe un valor en una clave del Registro en Visual Basic
gistro

Leer un valor de una clave del Registro Cómo: Leer un valor a partir de una clave del Registro en Visual Basic

Establecer un valor en una clave del Registro Cómo: Establecer los valores de las claves del Registro en Visual Basic
Ejemplo
Este ejemplo elimina la subclave Software\MyCompany\Preferences\UserData.
VB
My.Computer.Registry.CurrentUser.DeleteSubKey _
("Software\MyCompany\Preferences\UserData")

Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: RegistryProxy (proporciona acceso a Registry)
Ensamblado: Visual Ba

Vous aimerez peut-être aussi