Enciclopedia de Microsoft®

Visual Basic 
Interfaces gráficas y aplicaciones para Internet
con Windows Forms y ASP.NET
3.ª edición
Fco. Javier Ceballos Sierra
Profesor titular de la
Escuela Politécnica Superior
Universidad de Alcalá

www.fjceballos.es
Enciclopedia de Microsoft Visual Basic
Interfaces gráficas y aplicaciones para Internet con Windows Forms y ASP.NET
3.ª edición.
© Fco. Javier Ceballos Sierra
© De la edición: RA-MA 2013

MARCAS COMERCIALES: las marcas de los productos citados en el contenido de este libro
(sean o no marcas registradas) pertenecen a sus respectivos propietarios. RA-MA no está
asociada a ningún producto o fabricante mencionado en la obra, los datos y los ejemplos
utilizados son ficticios salvo que se indique lo contrario.

RA-MA es una marca comercial registrada.

Se ha puesto el máximo empeño en ofrecer al lector una información completa y precisa.
Sin embargo, RA-MA Editorial no asume ninguna responsabilidad derivada de su uso,
ni tampoco por cualquier violación de patentes ni otros derechos de terceras partes que pudieran
ocurrir. Esta publicación tiene por objeto proporcionar unos conocimientos precisos y acreditados
sobre el tema tratado. Su venta no supone para el editor ninguna forma de asistencia legal,
administrativa ni de ningún otro tipo. En caso de precisarse asesoría legal u otra forma de ayuda
experta, deben buscarse los servicios de un profesional competente.

Reservados todos los derechos de publicación en cualquier idioma.

Según lo dispuesto en el Código Penal vigente ninguna parte de este libro puede ser
reproducida, grabada en sistema de almacenamiento o transmitida en forma alguna ni
por cualquier procedimiento, ya sea electrónico, mecánico, reprográfico, magnético o
cualquier otro, sin autorización previa y por escrito de RA-MA; su contenido está protegido
por la Ley vigente que establece penas de prisión y/o multas a quienes intencionadamente,
reprodujeren o plagiaren, en todo o en parte, una obra literaria, artística o científica.

Editado por:
RA-MA Editorial
C/ Jarama, 3A, Polígono industrial Igarsa
28860 PARACUELLOS DEL JARAMA, Madrid
Teléfono: 91 658 42 80
Telefax: 91 662 81 39
Correo electrónico: editorial@ra-ma.com
Internet: www.ra-ma.es y www.ra-ma.com
ISBN: 978-84-9964-265-9
Depósito Legal: M-xxxxx-2013
Autoedición: Fco. Javier Ceballos
Filmación e impresión: Closas-Orcoyen, S.L.
Impreso en España
Primera impresión: octubre 2013
Si no puedo dibujarlo es que no lo entiendo.
(Einstein)

Dedico esta obra
a María del Carmen, mi esposa,
y a mis hijos Francisco y Javier.
CONTENIDO
PRÓLOGO.......................................................................................................... XXIII

PARTE 1. INTRODUCCIÓN................................................... 1
CAPÍTULO 1. INTRODUCCIÓN A MICROSOFT .NET ................................ 3 

PLATAFORMA .NET ........................................................................................ 4 
.NET Framework................................................................................................. 5 
Aplicaciones de cliente .................................................................................. 7 
Aplicaciones web ........................................................................................... 7 
ADO.NET ...................................................................................................... 9 
Biblioteca de clases base ................................................................................ 9 
Entorno de ejecución común de los lenguajes ............................................... 9 
.NET Framework y COM+ ............................................................................ 12 
Visual Studio .................................................................................................. 13

CAPÍTULO 2. MI PRIMERA APLICACIÓN .................................................... 15 

MICROSOFT VISUAL STUDIO ....................................................................... 15 
Crear un nuevo proyecto ................................................................................ 17 
El formulario .................................................................................................. 21 
Dibujar los controles ...................................................................................... 22 
Borrar un control ............................................................................................ 27 
Propiedades de los objetos ............................................................................. 27 
Bloquear la posición de todos los controles ................................................... 29 
Icono de la aplicación .................................................................................... 29 
Escribir los controladores de eventos ............................................................. 30 
VIII ENCICLOPEDIA DE MICROSOFT VISUAL BASIC

Guardar la aplicación ..................................................................................... 33 
Verificar la aplicación .................................................................................... 33 
Propiedades del proyecto ............................................................................... 35 
Crear soluciones de varios proyectos ............................................................. 36 
Opciones del EDI ........................................................................................... 37 
Personalizar el EDI ........................................................................................ 37 
WPF .................................................................................................................... 38

PARTE 2. INTERFACES GRÁFICAS ................................... 41
CAPÍTULO 3. APLICACIÓN WINDOWS FORMS ......................................... 43 

PROGRAMANDO EN WINDOWS................................................................... 45 
ESTRUCTURA DE UNA APLICACIÓN.......................................................... 47 
Compilar y ejecutar la aplicación ................................................................... 51 
DISEÑO DE LA INTERFAZ GRÁFICA ........................................................... 53 
Crear un componente ..................................................................................... 53 
Controles más comunes ............................................................................ 53 
Añadir una etiqueta y editar sus propiedades............................................ 54 
Añadir un botón de pulsación y editar sus propiedades ............................ 56 
Añadir una descripción abreviada a un componente................................. 57 
CONTROL DE EVENTOS ................................................................................ 58 
Asignar controladores de eventos a un objeto................................................ 61 
CICLO DE VIDA DE UN FORMULARIO ....................................................... 62 
PROPIEDADES BÁSICAS DE UN FORMULARIO........................................ 64 
Administración de la duración ....................................................................... 64 
Administración de formularios ...................................................................... 65 
Apariencia y comportamiento ........................................................................ 65 
CONFIGURACIÓN DE UNA APLICACIÓN ................................................... 66 
RECURSOS DE UNA APLICACIÓN ............................................................... 68 
ATRIBUTOS GLOBALES DE UNA APLICACIÓN........................................ 70 
CICLO DE VIDA DE UNA APLICACIÓN....................................................... 71 
Permitir una sola instancia de la aplicación ................................................... 74 
Argumentos en la línea de órdenes ................................................................ 75 
Pantalla de presentación ................................................................................. 76

CAPÍTULO 4. INTRODUCCIÓN A WINDOWS FORMS ............................... 79 

BIBLIOTECA DE CLASES DE WINDOWS FORMS ..................................... 79 
CAJAS DE TEXTO, ETIQUETAS Y BOTONES ............................................. 82 
Desarrollo de la aplicación ............................................................................. 82 
CONTENIDO IX

Objetos ...................................................................................................... 83 
Eventos...................................................................................................... 83 
Pasos a seguir durante el desarrollo .......................................................... 83 
El formulario, los controles y sus propiedades ......................................... 84 
Tecla de acceso ......................................................................................... 85 
Botón predeterminado ............................................................................... 85 
Responder a los eventos ............................................................................ 85 
Enfocar un objeto ........................................................................................... 89 
Seleccionar el texto de una caja de texto ....................................................... 90 
INTERCEPTAR LA TECLA PULSADA .......................................................... 91 
VALIDACIÓN DE UN CAMPO DE TEXTO ................................................... 93 
Eventos Validating y Validated ..................................................................... 96 
Expresiones regulares .................................................................................... 99 
Ejemplos de expresiones regulares ........................................................... 99 
El motor de expresiones regulares ............................................................ 102 
MaskedTextBox ............................................................................................. 104 
EJERCICIOS RESUELTOS ............................................................................... 105 
Diseño de una calculadora ............................................................................. 106 
Objetos ...................................................................................................... 106 
Eventos...................................................................................................... 106 
Pasos a seguir durante el desarrollo .......................................................... 106 
Diseño de la ventana y de los controles ......................................................... 107 
Establecer una fuente ..................................................................................... 109 
Color .............................................................................................................. 109 
Escribir el código ........................................................................................... 110 
EJERCICIOS PROPUESTOS............................................................................. 119

CAPÍTULO 5. MENÚS Y BARRAS DE HERRAMIENTAS ............................ 121 

ARQUITECTURA .............................................................................................. 121 
MENÚS ............................................................................................................... 123 
DISEÑO DE UNA BARRA DE MENÚS .......................................................... 124 
Crear un menú mediante programación ......................................................... 125 
Controlador de un elemento de un menú ....................................................... 128 
Aceleradores y nemónicos ............................................................................. 129 
IMÁGENES EN CONTROLES ......................................................................... 130 
Recursos de una aplicación ............................................................................ 130 
LISTA DE TAREAS........................................................................................... 133 
BARRA DE HERRAMIENTAS......................................................................... 134 
Diseño de una barra de herramientas ............................................................. 134 
BARRA DE ESTADO ........................................................................................ 136 
Diseño de una barra de estado ........................................................................ 137 
X ENCICLOPEDIA DE MICROSOFT VISUAL BASIC

DESARROLLO DE UN EDITOR DE TEXTOS ............................................... 138 
Caja de texto multilínea ................................................................................. 139 
Diseño del editor ............................................................................................ 140 
El portapapeles ............................................................................................... 142 
Objeto My.Computer.Clipboard ............................................................... 142 
Trabajar con texto seleccionado ..................................................................... 143 
Diseño de la barra de menús .......................................................................... 144 
Diseño de la barra de herramientas ................................................................ 146 
Asociar un método con un elemento de un menú .......................................... 147 
Archivo - Salir........................................................................................... 148 
Edición - Cortar......................................................................................... 148 
Edición - Copiar ........................................................................................ 149 
Edición - Pegar.......................................................................................... 149 
Opciones - Fuente ..................................................................................... 149 
Opciones - Tamaño ................................................................................... 151 
Habilitar o inhabilitar los elementos de un menú...................................... 152 
Marcar el elemento seleccionado de un menú .......................................... 153 
Deshacer ......................................................................................................... 154 
Recordar las ediciones reversibles ............................................................ 154 
Añadir a la interfaz la orden Deshacer ...................................................... 154 
Listas desplegables en menús......................................................................... 155 
MENÚS CONTEXTUALES .............................................................................. 159 
MENÚS DINÁMICOS ....................................................................................... 161 
EJERCICIOS PROPUESTOS............................................................................. 164

CAPÍTULO 6. CONTROLES Y CAJAS DE DIÁLOGO .................................. 169 

CAJAS DE DIÁLOGO MODALES Y NO MODALES .................................... 170 
CAJAS DE MENSAJE ....................................................................................... 170 
Requerir datos con InputBox ......................................................................... 174 
Cómo se utilizan estas cajas de diálogo ......................................................... 175 
CAJAS DE DIÁLOGO PERSONALIZADAS ................................................... 176 
Crear una caja de diálogo ............................................................................... 177 
Mostrar una caja de diálogo ........................................................................... 178 
Introducción de datos y recuperación de los mismos ..................................... 179 
DIÁLOGO ACERCA DE ................................................................................... 181 
FORMULARIO PROPIETARIO........................................................................ 182 
OTROS CONTROLES WINDOWS FORMS .................................................... 183 
Casillas de verificación .................................................................................. 184 
Botones de opción .......................................................................................... 188 
Listas simples ................................................................................................. 193 
Diseñar la lista........................................................................................... 194 
CONTENIDO XI

Iniciar la lista............................................................................................. 196 
Acceder a los elementos seleccionados..................................................... 196 
Colección de elementos de una lista ......................................................... 197 
Clase CheckedListBox .............................................................................. 198 
Listas desplegables ......................................................................................... 198 
Diseñar la lista........................................................................................... 200 
Iniciar la lista............................................................................................. 201 
Acceder al elemento seleccionado ............................................................ 201 
Colección de elementos de una lista desplegable ..................................... 202 
Controles de rango definido ........................................................................... 203 
ScrollBar ................................................................................................... 203 
TrackBar ................................................................................................... 207 
ProgressBar ............................................................................................... 208 
Control con pestañas ...................................................................................... 210 
Gestión de fechas ........................................................................................... 211 
FlowLayoutPanel y TableLayoutPanel .......................................................... 213 
CAJAS DE DIÁLOGO ESTÁNDAR ................................................................. 216 
Cajas de diálogo Abrir y Guardar .................................................................. 217 
Caja de diálogo Color .................................................................................... 220 
Caja de diálogo Fuente ................................................................................... 221 
REDIMENSIONAR UN COMPONENTE ......................................................... 222 
TEMPORIZADORES ......................................................................................... 223 
EJERCICIOS RESUELTOS ............................................................................... 227 
EJERCICIOS PROPUESTOS............................................................................. 238

CAPÍTULO 7. TABLAS Y ÁRBOLES ................................................................ 241 

TABLAS ............................................................................................................. 241 
Arquitectura de un control DataGridView ..................................................... 243 
Construir una tabla ......................................................................................... 244 
Añadir las columnas a la tabla ....................................................................... 245 
Iniciar la tabla................................................................................................. 246 
Tamaño de las celdas ..................................................................................... 252 
Acceder al valor de la celda seleccionada ...................................................... 253 
ÁRBOLES........................................................................................................... 254 
Arquitectura de un árbol ................................................................................ 255 
Construir un árbol .......................................................................................... 255 
Añadir nodos a un árbol ................................................................................. 256 
Imágenes para los nodos del árbol ................................................................. 257 
Iniciar el árbol ................................................................................................ 258 
Acceder al nodo seleccionado ........................................................................ 260 
Recorrer todos los nodos del árbol ................................................................. 264 
XII ENCICLOPEDIA DE MICROSOFT VISUAL BASIC

Añadir y borrar nodos .................................................................................... 264 
Añadir un nodo ......................................................................................... 265 
Borrar el nodo seleccionado...................................................................... 268 
Borrar todos los nodos excepto la raíz ...................................................... 268 
Personalizar el aspecto de un árbol ................................................................ 269 
VISTAS DE UNA LISTA................................................................................... 269 
Personalizar el aspecto de una vista ............................................................... 270 
La colección Columns .................................................................................... 271 
Elemento de la lista ........................................................................................ 272 
La colección Items ......................................................................................... 273 
Un ejemplo con ListView, TreeView y SplitContainer ................................. 273 
EJERCICIOS RESUELTOS ............................................................................... 276 
EJERCICIOS PROPUESTOS............................................................................. 292

CAPÍTULO 8. DIBUJAR Y PINTAR .................................................................. 293 

SERVICIOS DE GDI+........................................................................................ 295 
OBJETOS DE DIBUJO BÁSICOS .................................................................... 296 
Objeto Graphics ............................................................................................. 298 
Objeto Color................................................................................................... 299 
Objeto Pen ...................................................................................................... 300 
Objeto Brush .................................................................................................. 301 
Objeto Point ................................................................................................... 302 
Objeto Rectangle ............................................................................................ 302 
Objeto Font .................................................................................................... 303 
Objeto GraphicsPath ...................................................................................... 304 
MÉTODOS DE DIBUJO .................................................................................... 304 
Líneas y rectángulos....................................................................................... 304 
Elipses y arcos ................................................................................................ 305 
Tartas.............................................................................................................. 306 
Polígonos........................................................................................................ 306 
Curvas flexibles.............................................................................................. 307 
Trazados ......................................................................................................... 308 
Regiones ......................................................................................................... 308 
GRÁFICOS PERSISTENTES ............................................................................ 311 
SISTEMAS DE COORDENADAS Y TRANSFORMACIONES ...................... 313 
Tipos de sistemas de coordenadas.................................................................. 317 
Transformaciones de color ............................................................................. 318 
MOSTRAR IMÁGENES .................................................................................... 320 
Mapas de bits ................................................................................................. 320 
Cargar y mostrar un mapa de bits .................................................................. 322 
Intercambiar imágenes a través del portapapeles ........................................... 327 
CONTENIDO XIII

CAMBIAR LA FORMA DEL PUNTERO DEL RATÓN ................................. 329 
EJERCICIOS RESUELTOS ............................................................................... 330 
EJERCICIOS PROPUESTOS............................................................................. 340

CAPÍTULO 9. INTERFAZ PARA MÚLTIPLES DOCUMENTOS ................. 343 

CREACIÓN DE UNA APLICACIÓN MDI....................................................... 344 
Organizar los formularios hijo ....................................................................... 347 
EDITOR DE TEXTO MDI ................................................................................. 348 
Formulario padre ............................................................................................ 348 
Formulario hijo .............................................................................................. 350 
Vincular código con los controles .................................................................. 352 
Iniciar y finalizar la aplicación.................................................................. 353 
Nuevo documento ..................................................................................... 353 
Abrir un documento .................................................................................. 354 
Guardar un documento .............................................................................. 355 
Guardar como............................................................................................ 356 
Imprimir un documento ............................................................................ 357 
Cortar, copiar y pegar ............................................................................... 359 
Recordar las ediciones reversibles ............................................................ 360 
Barras de herramientas y de estado ........................................................... 361 
Menú Ventana ........................................................................................... 362 
Selección actual del texto.......................................................................... 363 
El documento ha cambiado ....................................................................... 365 
Operaciones de arrastrar y soltar ............................................................... 366 
EJERCICIOS RESUELTOS ............................................................................... 366 
EJERCICIOS PROPUESTOS............................................................................. 371

CAPÍTULO 10. CONSTRUCCIÓN DE CONTROLES ......................................... 373 

REUTILIZACIÓN DE CONTROLES EXISTENTES ....................................... 373 
Control TextBox extendido ............................................................................ 374 
Clasificación de las propiedades de un control .............................................. 379 
CONTROLES DE USUARIO ............................................................................ 379 
Construir el control de usuario ....................................................................... 380 
Añadir propiedades ................................................................................... 381 
Añadir métodos ......................................................................................... 382 
Añadir eventos .......................................................................................... 383 
Opciones fecha-hora alarma o actual ........................................................ 383 
Verificar el control de usuario........................................................................ 384 
EJERCICIOS RESUELTOS ............................................................................... 386 
EJERCICIOS PROPUESTOS............................................................................. 389
XIV ENCICLOPEDIA DE MICROSOFT VISUAL BASIC

CAPÍTULO 11. PROGRAMACIÓN CON HILOS ............................................ 391 

ESPACIO DE NOMBRES System.Threading ................................................... 392 
Clase Thread .................................................................................................. 395 
Resumen de los métodos y propiedades de Thread........................................ 398 
Estados de un hilo .......................................................................................... 398 
ACCESO A CONTROLES DESDE HILOS ...................................................... 399 
Delegados ....................................................................................................... 399 
Componente BackgroundWorker................................................................... 404 
Ejecutar una tarea de forma asíncrona ...................................................... 405 
Notificar el progreso a la interfaz gráfica del usuario ............................... 406 
Recuperar el estado después de la finalización de la tarea ........................ 407 
Cancelación anticipada ............................................................................. 407 
MECANISMOS DE SINCRONIZACIÓN ......................................................... 408 
Objetos de sincronización .............................................................................. 409 
Secciones críticas ...................................................................................... 410 
Controladores de espera ............................................................................ 412 
DETENER UN HILO DE FORMA CONTROLADA ....................................... 414 
EJERCICIOS RESUELTOS ............................................................................... 417 
EJERCICIOS PROPUESTOS............................................................................. 420

PARTE 3. ACCESO A DATOS ............................................... 421
CAPÍTULO 12. ENLACE DE DATOS EN WINDOWS FORMS ..................... 423 

ASPECTOS BÁSICOS ....................................................................................... 423 
Enlace de datos manual .................................................................................. 423 
Notificar cuándo cambia una propiedad ........................................................ 427 
Enlace de datos con las clases de .NET ......................................................... 430 
La clase Binding ....................................................................................... 431 
Tipos de enlace ......................................................................................... 432 
Componente BindingSource ..................................................................... 432 
Notificación de cambios en un enlace de Windows Forms ...................... 433 
Crear un enlace ......................................................................................... 433 
Enlaces con otros controles.................................................................. 435 
Aplicar conversiones............................................................................ 435 
ORÍGENES DE DATOS COMPATIBLES CON WINDOWS FORMS ........... 439 
Enlace a colecciones de objetos ..................................................................... 442 
List ............................................................................................................ 442 
BindingList ............................................................................................... 447 
BindingSource .......................................................................................... 451 
ACCEDIENDO A LOS DATOS ........................................................................ 454 
CONTENIDO XV

Ventana de orígenes de datos ......................................................................... 457 
Vinculación maestro-detalle........................................................................... 461 
Operaciones con los datos .............................................................................. 465 
Elemento actual ......................................................................................... 465 
Navegar ..................................................................................................... 466 
Ordenación, filtrado y búsqueda ............................................................... 469 
BindingListView ............................................................................................ 471 
Elemento actual de la vista........................................................................ 472 
Ordenar ..................................................................................................... 473 
Filtrar ........................................................................................................ 474 
Buscar ....................................................................................................... 474 
Datos introducidos por el usuario .................................................................. 475 
Error en los datos ...................................................................................... 477 
Validación ................................................................................................. 478 
Datos que no necesitan validación ............................................................ 479

CAPÍTULO 13. ACCESO A UNA BASE DE DATOS ....................................... 487 

SQL ..................................................................................................................... 488 
Crear una base de datos .................................................................................. 488 
Crear una tabla ............................................................................................... 488 
Escribir datos en la tabla ................................................................................ 490 
Modificar datos de una tabla .......................................................................... 490 
Borrar registros de una tabla .......................................................................... 491 
Seleccionar datos de una tabla ....................................................................... 491 
Crear una base de datos .................................................................................. 493 
Base de datos Microsoft Access................................................................ 493 
Base de datos Microsoft SQL Server ........................................................ 495 
ADO.NET ........................................................................................................... 496 
Componentes de ADO.NET........................................................................... 497 
Conjunto de datos........................................................................................... 498 
Proveedor de datos ......................................................................................... 500 
Objeto conexión ........................................................................................ 501 
Objeto orden ............................................................................................. 503 
Objeto lector de datos ............................................................................... 503 
Adaptador de datos ................................................................................... 504 
Modos de conexión ........................................................................................ 506 
Probando una conexión .................................................................................. 508 
ACCESO CONECTADO A UNA BASE DE DATOS ...................................... 509 
ATAQUES DE INYECCIÓN DE CÓDIGO SQL .............................................. 512 
Órdenes parametrizadas ................................................................................. 516 
Procedimientos almacenados ......................................................................... 517 
XVI ENCICLOPEDIA DE MICROSOFT VISUAL BASIC

TRANSACCIONES ............................................................................................ 518 
Transacción implícita TransactionScope ....................................................... 519 
Transacciones explícitas................................................................................. 523 
ESCRIBIR CÓDIGO INDEPENDIENTE DEL PROVEEDOR ........................ 525 
CONSTRUIR COMPONENTES DE ACCESO A DATOS............................... 531 
Capa de presentación ..................................................................................... 533 
Operaciones contra la base de datos............................................................... 533 
Objetos de negocio ......................................................................................... 535 
Capa de acceso a datos ................................................................................... 537 
Capa de lógica de negocio ............................................................................. 541 
Diseño de la capa de presentación ................................................................. 542 
Lógica de interacción con la capa de presentación ........................................ 544 
Desacoplar la IU del resto de la aplicación .................................................... 547 
Adaptar la colección de objetos ................................................................ 548 
Capa de lógica de negocio ........................................................................ 551 
Lógica de interacción con la capa de presentación ................................... 554 
Validación ...................................................................................................... 555 
ACCESO DESCONECTADO A UNA BASE DE DATOS ............................... 555 
ASISTENTES DE VISUAL STUDIO ................................................................ 559 
Crear la infraestructura para el acceso a la base de datos .............................. 561 
Crear el conjunto de datos .............................................................................. 566 
Agregar un control rejilla al formulario ......................................................... 567 
Código subyacente ......................................................................................... 568 
Asistente para configurar orígenes de datos................................................... 570 
VISTA EN DETALLE DEL CONJUNTO DE DATOS .................................... 574 
Diseño del formulario .................................................................................... 576 
Vincular las cajas de texto con el conjunto de datos ...................................... 577 
Controles de navegación ................................................................................ 579 
Añadir, borrar y buscar datos ......................................................................... 582 
CONTROL BindingNavigator ............................................................................ 586 
DISEÑO MAESTRO-DETALLE ....................................................................... 587 
EJERCICIOS RESUELTOS ............................................................................... 596 
EJERCICIOS PROPUESTOS............................................................................. 616

CAPÍTULO 14. LINQ ............................................................................................ 619 

RECURSOS DEL LENGUAJE COMPATIBLES CON LINQ.......................... 619 
Declaración implícita de variables locales ..................................................... 620 
Matrices de tipos definidos de forma implícita .............................................. 620 
Tipos anónimos .............................................................................................. 620 
Propiedades autoimplementadas .................................................................... 621 
Iniciadores de objetos y colecciones .............................................................. 621 
CONTENIDO XVII

Métodos extensores ........................................................................................ 622 
Expresiones lambda ....................................................................................... 623 
El delegado Func(Of T, TResu)...................................................................... 625 
Operadores de consulta .................................................................................. 626 
Árboles de expresiones lambda ...................................................................... 629 
EXPRESIONES DE CONSULTA...................................................................... 632 
Compilación de una expresión de consulta .................................................... 635 
Sintaxis de las expresiones de consulta .......................................................... 637 
Cláusula Group ......................................................................................... 637 
Productos cartesianos ................................................................................ 638 
Cláusula Join ............................................................................................. 638 
Cláusula Into ............................................................................................. 639 
Cláusula Let .............................................................................................. 640 
PROVEEDORES DE LINQ ............................................................................... 641 
ENTITY FRAMEWORK ................................................................................... 642 
MARCO DE ENTIDADES DE ADO.NET ........................................................ 643 
Consultar un modelo de objetos ..................................................................... 647 
ACCESO A UNA BASE DE DATOS ................................................................ 651 
Conectarse a la base de datos ......................................................................... 652 
Generar el modelo de entidades ..................................................................... 652 
Las clases de entidad y el contexto de objetos ............................................... 661 
Propiedades de navegación ............................................................................ 664 
Mostrar datos en una interfaz gráfica ............................................................. 666 
Una aplicación con interfaz gráfica................................................................ 667 
Vincular controles con el origen de datos ...................................................... 668 
Proveedor de datos ......................................................................................... 669 
Filtros ............................................................................................................. 673 
Contextos de corta duración ........................................................................... 675 
REALIZAR CAMBIOS EN LOS DATOS ......................................................... 675 
Modificar filas en la base de datos ................................................................. 680 
Insertar filas en la base de datos ..................................................................... 682 
Borrar filas en la base de datos ...................................................................... 685 
Problemas de concurrencia ............................................................................ 689 
El seguimiento de cambios............................................................................. 695 
CODE FIRST: UN NUEVO MODELO DE TRABAJO .................................... 700 
Aplicando Code First ..................................................................................... 702 
Definir el modelo de entidades ................................................................. 702 
Definir el contexto de objetos ................................................................... 703 
Anotaciones en datos y convenciones predeterminadas ........................... 704 
Cadena de conexión .................................................................................. 705 
Generar la base de datos............................................................................ 707 
Validación de entidades ................................................................................. 710 
Atributos de anotación de datos ................................................................ 710 
XVIII ENCICLOPEDIA DE MICROSOFT VISUAL BASIC

Interfaz fluida ............................................................................................ 712 
Code First desde una base de datos existente................................................. 713 
Cadena de conexión .................................................................................. 715 
Contexto de objetos................................................................................... 715 
El modelo de entidades ............................................................................. 716 
Acceder a los datos ................................................................................... 717 
EJERCICIOS RESUELTOS ............................................................................... 718 
EJERCICIOS PROPUESTOS............................................................................. 720

PARTE 4. APLICACIONES PARA INTERNET .................. 721
CAPÍTULO 15. ASP.NET ..................................................................................... 723 

ASP.NET ............................................................................................................. 725 
Conceptos básicos de ASP.NET .................................................................... 726 
Páginas web ASP.NET .................................................................................. 727 
Controles HTML ............................................................................................ 728 
Controles de servidor web.............................................................................. 729 
Presentación del texto ............................................................................... 730 
Controles de entrada ................................................................................. 730 
Envío y devolución ................................................................................... 732 
Exploración ............................................................................................... 733 
Controles de diseño ................................................................................... 733 
Selección de fechas ................................................................................... 733 
Controles con enlaces a datos ................................................................... 734 
Controles de validación............................................................................. 734 
Un ejemplo de diseño de una página web ASP.NET ..................................... 735 
Software para el desarrollo de aplicaciones ASP.NET .................................. 737 
Componentes de una página web ASP.NET .................................................. 739 
¿Cómo se publica una aplicación web? ......................................................... 741 
Crear un directorio virtual ......................................................................... 742 
Convertir la aplicación en una aplicación web de IIS ............................... 744 
Seguridad asociada con una carpeta.......................................................... 746 
Modelo de ejecución de una página web ASP.NET ...................................... 747 
Lógica de negocio .......................................................................................... 749 
Enlaces de datos en ASP.NET ....................................................................... 753 
Expresiones de enlace de datos ................................................................. 753 
Controles de lista enlazados a datos .......................................................... 754 
Modelo de enlace de ASP.NET ................................................................ 757 
GridView ............................................................................................. 759 
Seleccionar datos ................................................................................. 761 
Actualizar y eliminar datos .................................................................. 762 
CONTENIDO XIX

Insertar datos (FormView) ................................................................... 765 
Estado del modelo y validación ........................................................... 767 
Asistente para publicar un proyecto web ASP.NET ...................................... 768

CAPÍTULO 16. FORMULARIOS WEB ............................................................. 773 

APLICACIÓN WEB ASP.NET .......................................................................... 774 
Crear la capa de acceso a datos ...................................................................... 778 
Añadir un nuevo formulario web ................................................................... 780 
Descripción de un formulario web ASP.NET ........................................... 781 
Agregar controles y texto a la página ............................................................. 782 
Ciclo de vida de una página ........................................................................... 784 
Modelo de eventos de ASP.NET ................................................................... 787 
Añadir los controladores de eventos .............................................................. 787 
Obtener acceso a la base de datos .................................................................. 790 
CONTROLES DE VALIDACIÓN ..................................................................... 792 
HERRAMIENTA DE PRECOMPILACIÓN ASP.NET .................................... 796 
PROCESAMIENTO DE FORMULARIOS ....................................................... 798 
Formato de la petición HTTP ......................................................................... 798 
Petición HTTP get..................................................................................... 799 
Petición HTTP post ................................................................................... 800 
Respuestas en el protocolo HTTP .................................................................. 801 
Contexto de un formulario web...................................................................... 801 
Redireccionar una solicitud a otra URL ......................................................... 803 
ESTADO DE UNA PÁGINA ASP.NET ............................................................ 803 
Administración de estado en el cliente........................................................... 804 
Cookies ..................................................................................................... 804 
Cadenas de consulta .................................................................................. 806 
Campos de formulario ocultos .................................................................. 807 
Estado de vista .......................................................................................... 807 
Administración de estado en el servidor ........................................................ 809 
Estado de aplicación ................................................................................. 810 
Estado de sesión ........................................................................................ 810 
Bases de datos ........................................................................................... 811 
MEJORANDO EL RENDIMIENTO EN EL SERVIDOR................................. 812 
Almacenamiento en la caché de resultados .................................................... 812 
Configurar el almacenamiento en caché a nivel de página ....................... 813 
Actualización dinámica de fragmentos de una página en caché ............... 814 
Configurar el almacenamiento en caché por programación ...................... 815 
Almacenamiento en caché de datos procedentes de SQL Server ................ 816 
Reducir la información hacia y desde el servidor .......................................... 817 
CONTROLES DE SERVIDOR COMO ORIGEN DE DATOS......................... 819 
XX ENCICLOPEDIA DE MICROSOFT VISUAL BASIC

SQL y desarrollo web .................................................................................... 820 
Control SqlDataSource ............................................................................. 822 
Responder a los eventos ............................................................................ 826 
LINQ y desarrollo web .................................................................................. 828 
Control EntityDataSource ......................................................................... 829 
Responder a los eventos ............................................................................ 835 
Generar la consulta Select mediante código ............................................. 836 
Realizar cambios en los datos ................................................................... 838 
Actualizar y eliminar filas en la base de datos ..................................... 839 
Controlar los errores en una página ASP.NET .................................... 841 
Insertar filas en la base de datos .......................................................... 841 
MODELO DE ENLACE DE ASP.NET ............................................................. 847 
Realizar cambios en los datos ................................................................... 852 
Actualizar y eliminar filas en la base de datos ..................................... 852 
Controlar los errores en una página ASP.NET .................................... 855 
Insertar filas en la base de datos .......................................................... 855 
Capa de la lógica de negocio.......................................................................... 860 
Paginación, ordenación y filtrado .................................................................. 863 
EJERCICIOS PROPUESTOS............................................................................. 869

CAPÍTULO 17. SERVICIOS WEB ...................................................................... 871 

Integrar un servicio web en una aplicación .................................................... 872 
SERVICIOS WCF .............................................................................................. 873 
MODELO DE PROGRAMACIÓN DE WCF .................................................... 874 
Implementar un servicio WCF ....................................................................... 875 
Definir un contrato .................................................................................... 876 
Configuración del servicio WCF .............................................................. 882 
Implementar un cliente WCF ......................................................................... 884 
Configuración del cliente WCF ................................................................ 888 
Obtener acceso al servicio web ................................................................. 888 
Ejecución asíncrona .................................................................................. 890 
Seguridad en WCF ......................................................................................... 893 
SERVICIOS WEB Y LINQ ................................................................................ 894 
Arquitectura de N capas lógicas y N niveles físicos ...................................... 895 
Crear la base de datos..................................................................................... 896 
Crear el servicio WCF.................................................................................... 897 
Cliente WCF .................................................................................................. 904 
Llenar la lista............................................................................................. 907 
Mostrar datos ............................................................................................ 908 
Actualizar datos ........................................................................................ 909 
Cambiar foto ............................................................................................. 909 
CONTENIDO XXI

Agregar datos ............................................................................................ 910 
Borrar datos............................................................................................... 911 
Errores inesperados ................................................................................... 911 
EJERCICIOS PROPUESTOS............................................................................. 912

CAPÍTULO 18. SEGURIDAD DE APLICACIONES ASP.NET ...................... 919 

ARQUITECTURA ASP.NET ............................................................................. 920 
CICLO DE VIDA DE UNA APLICACIÓN ASP.NET ..................................... 921 
GRUPOS DE APLICACIONES EN IIS ............................................................. 922 
AUTENTICACIÓN DE WINDOWS ................................................................. 923 
AUTORIZACIÓN ............................................................................................... 930 
SUPLANTACIÓN DE IDENTIDAD ................................................................. 932 
AUTENTICACIÓN MEDIANTE FORMULARIOS ......................................... 933 
CONTROLES PARA INICIO DE SESIÓN ....................................................... 938 
SERVICIO DE SUSCRIPCIONES..................................................................... 951 
SEGURIDAD EN LA TRANSMISIÓN DE DATOS ........................................ 958 
Criptografía simétrica..................................................................................... 959 
Criptografía asimétrica ................................................................................... 959 
AUTENTICACIÓN USANDO CERTIFICADOS ............................................. 961 
Instalar un certificado SSL en IIS 7.0 o superior ........................................... 963 
Certificado de cliente rechazado .................................................................... 968

CAPÍTULO 19. PÁGINAS MAESTRAS ............................................................. 969 

ESTRUCTURA DE UNA PÁGINA MAESTRA ............................................... 969 
Controles de usuario web ............................................................................... 974 
Mejorar el aspecto de la interfaz .................................................................... 979 
Temas y máscaras en ASP.NET ..................................................................... 980 
Perfiles ........................................................................................................... 983 
EJERCICIOS RESUELTOS ............................................................................... 987 
Base de datos .................................................................................................. 988 
Cliente web .................................................................................................... 992

CAPÍTULO 20. AJAX ........................................................................................... 1001 

FUNDAMENTOS DE AJAX ............................................................................. 1003 
XMLHttpRequest ........................................................................................... 1004 
AJAX con ASP.NET...................................................................................... 1012 
GENERACIÓN DE CÓDIGO JAVASCRIPT ................................................... 1014 
Fichero JavaScript .......................................................................................... 1015 
XXII ENCICLOPEDIA DE MICROSOFT VISUAL BASIC

Vincular un evento con una función JavaScript ............................................. 1015 
Inyectar código JavaScript desde el lado del servidor ................................... 1017 
ASP.NET AJAX ................................................................................................. 1018 
Crear un sitio web ASP.NET AJAX ................................................................... 1019 
Clase ScriptManager ...................................................................................... 1020 
Clases ScriptManager y ScriptManagerProxy ............................................... 1028 
Clase UpdatePanel ......................................................................................... 1028 
Clase AsyncPostBackTrigger......................................................................... 1030 
Clase UpdateProgress..................................................................................... 1031 
Cancelar una llamada asíncrona ..................................................................... 1033 
Clase Timer .................................................................................................... 1034 
Servicios web ................................................................................................. 1034 
Métodos de página ......................................................................................... 1038 
EJERCICIOS RESUELTOS ............................................................................... 1040

PARTE 5. ACERCA DEL MATERIAL ADICIONAL

Y DE LOS APÉNDICES ........................................................ 1043

HERRAMIENTAS DE DESARROLLO.............................................................. 1045 
PÁGINAS WEB ...................................................................................................... 1061 
INTERNACIONALIZACIÓN .............................................................................. 1093 
.NET PARA LINUX ............................................................................................... 1103 
ÍNDICE ................................................................................................................... 1105
PRÓLOGO
Visual Basic es hoy el lenguaje de programación más popular del mundo. Desde
que Microsoft liberó Visual Basic 1.0 en 1991 han tenido lugar muchos cambios.
Visual Basic 1.0 revolucionó la forma de desarrollar software para Windows;
desmitificó el proceso de desarrollo de aplicaciones con interfaz gráfica de usua-
rio y abrió este tipo de programación a las masas. En sus posteriores versiones,
Visual Basic ha continuado proporcionando nuevas características que facilitaron
la creación de aplicaciones para Windows cada vez más potentes; por ejemplo, la
versión 3.0 introdujo el control de datos para facilitar el acceso a bases de datos, y
la versión 4.0 mejoró y potenció este acceso con los objetos DAO. Con la apari-
ción de Windows 95, Microsoft liberó Visual Basic 4.0 que abrió la puerta al
desarrollo de aplicaciones de 32 bits y a la creación de DLL. La versión 5.0 mejo-
ró la productividad con la incorporación de la ayuda inteligente y la introducción
de los controles ActiveX. Posteriormente la versión 6.0 nos introdujo en la pro-
gramación de Internet con las aplicaciones DHTML y el objeto WebClass. Des-
pués dispusimos de Visual Basic .NET que vino a revolucionar el mundo de las
comunicaciones permitiendo escribir aplicaciones escalables para Internet. Siguie-
ron Visual Basic 2005, 2008, 2010 y ahora Visual Basic 2012, una evolución del
lenguaje Visual Basic, que se diseñó para generar aplicaciones con seguridad de
tipos y orientadas a objetos de manera productiva. Esta generación de Visual Ba-
sic continúa la tradición de ofrecer una manera rápida y fácil de crear aplicaciones
basadas en .NET Framework.

Visual Basic .NET, después Visual Basic 2005, 2008, 2010 y ahora Visual
Basic 2012, cambian la idea de programar de las versiones iniciales. Ahora se re-
quiere una programación orientada a objetos, lo que obligará al desarrollador a
programar de forma ordenada, con unas reglas metodológicas de programación
análogas a las de otros lenguajes de programación orientados a objetos como C++,
C# o Java por citar algunos de los más utilizados.
XXIV ENCICLOPEDIA DE MICROSOFT VISUAL BASIC

La palabra “Visual” hace referencia, desde el lado del diseño, al método que
se utiliza para crear la interfaz gráfica de usuario si se dispone de la herramienta
adecuada (con Microsoft Visual Studio se utiliza el ratón para arrastrar y colocar
los objetos prefabricados en el lugar deseado dentro de un formulario) y desde el
lado de la ejecución, al aspecto gráfico que toman los objetos cuando se ejecuta el
código que los crea, objetos que formarán la interfaz gráfica que el usuario de la
aplicación utiliza para acceder a los servicios que ésta ofrece. La palabra “Basic”
hace referencia al lenguaje BASIC (Beginners All-Purpose Symbolic Instruction
Code), un lenguaje utilizado por más programadores que ningún otro lenguaje en
la historia de la informática. Visual Basic ha evolucionado a partir del lenguaje
BASIC original y ahora está soportado por una biblioteca orientada a objetos di-
rectamente relacionada con la interfaz gráfica de Windows. Y “NET” hace refe-
rencia al ámbito donde operarán nuestras aplicaciones web (Network - red).

Resumiendo, Visual Basic es un lenguaje orientado a objetos seguro y ele-
gante que permite a los desarrolladores construir un amplio rango de aplicaciones
seguras y robustas que se ejecutan sobre .NET Framework. .NET Framework (que
incluye entre otras cosas la biblioteca básica de .NET y el compilador Visual Ba-
sic) junto con otros componentes de desarrollo, como ASP.NET (formularios web
y servicios web) y ADO.NET, forman un paquete de desarrollo denominado Mi-
crosoft Visual Studio que podemos utilizar para crear aplicaciones Windows tra-
dicionales (aplicaciones de escritorio que muestren una interfaz gráfica al usuario)
y aplicaciones para la Web. Para ello, este paquete proporciona un editor de códi-
go avanzado, diseñadores de interfaces de usuario apropiados, depurador integra-
do y muchas otras utilidades para facilitar un desarrollo rápido de aplicaciones.

Para quién es este libro
Este libro está pensado para aquellas personas que quieran aprender a desarrollar
aplicaciones que muestren una interfaz gráfica al usuario, aplicaciones para acce-
so a bases de datos y para Internet (páginas web). Para ello, ¿qué debe hacer el
lector? Pues simplemente leer ordenadamente los capítulos del libro, resolviendo
cada uno de los ejemplos que en ellos se detallan.

Evidentemente, no vamos a enseñar a programar aquí, por eso es necesario
tener algún tipo de experiencia con un lenguaje de programación orientado a obje-
tos (Visual Basic, C#, Java, etc., son lenguajes orientados a objetos). Haber pro-
gramado en .NET y con Visual Basic sería lo ideal, así como tener conocimientos
de HTML y XML. Estos requisitos son materia de mis otros libros Microsoft Vi-
sual Basic - Lenguaje y aplicaciones y Microsoft Visual Basic - Curso de pro-
gramación, ambos editados también por RA-MA y Alfaomega Grupo Editor.
PRÓLOGO XXV

Microsoft Visual Basic - Lenguaje y aplicaciones se centra en la programa-
ción básica: tipos, sentencias, matrices, métodos, ficheros, etc., y hace una intro-
ducción a las interfaces gráficas, a las bases de datos y a las aplicaciones para
Internet, y Microsoft Visual Basic - Curso de programación cubre la programa-
ción básica (expuesta en menor medida en el libro anterior) y la programación
orientada a objetos (POO) en detalle: clases, clases derivadas, interfaces, espacios
de nombres, excepciones, etc.; después, utilizando la POO, añade otros temas co-
mo estructuras dinámicas de datos, algoritmos de uso común, hilos (programación
concurrente), etc. Éste sí que es un libro de programación con Visual Basic en to-
da su extensión. Puede ver más detalles de cada uno de ellos en mi web:
www.fjceballos.es.

Cómo está organizado el libro
El libro se ha estructurado en 20 capítulos más algunos apéndices que a continua-
ción se relacionan. Los capítulos 1 y 2 nos introducen en .NET y en el desarrollo
de aplicaciones de escritorio. Los capítulos 3 al 11 nos enseñan a desarrollar apli-
caciones de escritorio que muestran una interfaz de ventanas al usuario. Los capí-
tulos 12 al 14 cubren el enlace a datos, el acceso a bases de datos (ADO.NET), el
lenguaje de consultas integrado (LINQ) y el acceso a bases de datos con Entity
Framework. Y los capítulos 15 al 20 nos enseñan cómo desarrollar aplicaciones
para Internet (ASP.NET) a base de formularios web, servicios web WCF y AJAX.

CAPÍTULO 1. INTRODUCCIÓN A MICROSOFT .NET
CAPÍTULO 2. MI PRIMERA APLICACIÓN
CAPÍTULO 3. APLICACIÓN WINDOWS FORMS
CAPÍTULO 4. INTRODUCCIÓN A WINDOWS FORMS
CAPÍTULO 5. MENÚS Y BARRAS DE HERRAMIENTAS
CAPÍTULO 6. CONTROLES Y CAJAS DE DIÁLOGO
CAPÍTULO 7. TABLAS Y ÁRBOLES
CAPÍTULO 8. DIBUJAR Y PINTAR
CAPÍTULO 9. INTERFAZ PARA MÚLTIPLES DOCUMENTOS
CAPÍTULO 10. CONSTRUCCIÓN DE CONTROLES
CAPÍTULO 11. PROGRAMACIÓN CON HILOS
CAPÍTULO 12. ENLACE DE DATOS EN WINDOWS FORMS
CAPÍTULO 13. ACCESO A UNA BASE DE DATOS
CAPÍTULO 14. LINQ
CAPÍTULO 15. ASP.NET
CAPÍTULO 16. FORMULARIOS WEB
CAPÍTULO 17. SERVICIOS WEB
CAPÍTULO 18. SEGURIDAD DE APLICACIONES ASP.NET
CAPÍTULO 19. PÁGINAS MAESTRAS
CAPÍTULO 20. AJAX
APÉNDICE A. HERRAMIENTAS DE DESARROLLO
APÉNDICE B. PÁGINAS WEB
APÉNDICE C. INTERNACIONALIZACIÓN
APÉNDICE D. .NET PARA LINUX
XXVI ENCICLOPEDIA DE MICROSOFT VISUAL BASIC

Qué se necesita para utilizar este libro
Este libro ha sido escrito utilizando el paquete Microsoft .NET Framework Softwa-
re Development Kit (SDK) versión 4.5 que forma parte del entorno de desarrollo
Microsoft Visual Studio 2012 que incluye todo lo necesario para escribir, construir,
verificar y ejecutar aplicaciones .NET. Por lo tanto, basta con que instale en su má-
quina Microsoft Visual Studio 2012, o superior, en cualquiera de sus versiones o,
como alternativa, descargue desde http://www.microsoft.com/express/ los paquetes
Visual Studio Express 2012 for Windows Desktop y for Web e instálelos (opcio-
nalmente puede instalar también SQL Server 2012 Express, caso del autor).

Nota: para probar las aplicaciones web se recomienda instalar el servidor de
aplicaciones IIS (Internet Information Services) que incluye Windows (Inicio >
Panel de control > Agregar y quitar programas > Windows). Esto tiene que ha-
cerlo antes de instalar Microsoft Visual Studio 2012 o Visual Studio Express 2012
for Web.

Sobre los ejemplos del libro
El código fuente de todos los ejemplos del libro podrá descargarse, según se indi-
ca en los apéndices, de la web www.ra-ma.es desde la página web correspondiente
al libro.

Agradecimientos
He recibido ayuda de algunas personas durante la preparación de este libro y, por
ello, les estoy francamente agradecido. También deseo expresar mi agradecimien-
to a Microsoft Ibérica por poner a mi disposición, en particular, y de todos los lec-
tores, en general, el software que el estudio de esta obra requiere.

Francisco Javier Ceballos Sierra
http://www.fjceballos.es/
PARTE



 



Introducción
 Introducción a Microsoft .NET
 Mi primera aplicación
PARTE



 



Interfaces gráficas
 Aplicación Windows Forms
 Introducción a Windows Forms
 Menús y barras de herramientas
 Controles y cajas de diálogo
 Tablas y árboles
 Dibujar y pintar
 Interfaz para múltiples documentos
 Construcción de controles
 Programación con hilos
PARTE



 



Acceso a datos
 Enlace de datos en Windows Forms
 Acceso a una base de datos
 LINQ
PARTE



 



Aplicaciones para Internet
 ASP.NET
 Formularios web
 Servicios web
 Seguridad de aplicaciones ASP.NET
 Páginas maestras
 AJAX
PARTE



 



Acerca del material adicional
y de los apéndices
 Herramientas de desarrollo
 Páginas web
 Internacionalización
 .NET para Linux
 Índice
APÉNDICE A
 F.J.Ceballos/RA-MA

HERRAMIENTAS DE DESARROLLO
Cuando se utiliza un entorno de desarrollo integrado (EDI), lo primero que hay
que hacer una vez instalado es asegurarse de que las rutas donde se localizan las
herramientas, las bibliotecas, la documentación y los ficheros fuente hayan sido
establecidos; algunos EDI sólo requieren la ruta donde se instaló el compilador.
Este proceso normalmente se ejecuta automáticamente durante el proceso de ins-
talación de dicho entorno. Si no es así, el entorno proporcionará algún menú con
las órdenes apropiadas para realizar dicho proceso. Por ejemplo, en los EDI que se
presentan a continuación las rutas a las que nos referimos quedan establecidas du-
rante la instalación de los mismos.

VISUAL STUDIO
Visual Studio proporciona una variedad de herramientas tanto para desarrollado-
res individuales como para equipos de desarrollo.

http://www.microsoft.com/express/

Ediciones Visual Studio Express
Es la nueva línea de productos que expanden Visual Studio ofreciendo herramien-
tas ligeras y sencillas de aprender y de usar para aficionados, entusiastas y apren-
dices que quieren crear sitios Web y aplicaciones para Windows. Su descarga es
gratuita y dependiendo del tipo de aplicación a desarrollar optaremos por una u
otra herramienta de desarrollo de las siguientes:

 Visual Studio Express for Web.
 Visual Studio Express for Windows 8.
1046 ENCICLOPEDIA DE MICROSOFT VISUAL BASIC

 Visual Studio Express for Windows Desktop.
 Visual Studio Express for Windows Phone.
 Visual Studio Team Foundation Server Express.

Ediciones de Visual Studio para profesionales
Visual Studio en sus versiones professional, premium y ultimate, ofrece una fle-
xible herramienta de desarrollo para desarrolladores de aplicaciones de línea de
negocio o programadores ocasionales que estén construyendo aplicaciones móvi-
les, basadas en Windows o para la Web, soluciones sobre Microsoft Office Sys-
tem utilizando Excel, Word e InfoPath, y con herramientas de software de ciclo de
vida productivas, integradas y extensibles que permiten a las empresas reducir la
complejidad en la creación de soluciones orientadas a servicios. La utilización de
estas versiones requiere comprar una licencia.

APLICACIÓN DE CONSOLA
En el capítulo 2 vimos una introducción al desarrollo de aplicaciones con interfaz
gráfica de usuario, pero no abordamos el desarrollo de aplicaciones de consola
que en ocasiones puede ser útil. Veamos un ejemplo a continuación utilizando
cualquiera de las ediciones de Visual Studio.

Para editar y ejecutar el programa HolaMundo utilizando cualquiera de las
ediciones de Visual Studio, los pasos a seguir son los siguientes:

1. Partiendo de la página de inicio de MS Visual Visual Basic Express, hacemos
clic en Nuevo proyecto... para crear un proyecto nuevo, o bien ejecutamos la
orden Archivo > Nuevo proyecto. Esta acción hará que se visualice una ven-
tana que mostrará los tipos de plantillas que puede utilizar; la elección de una
u otra dependerá del tipo de aplicación que deseemos construir. La figura si-
guiente muestra esta ventana:
APÉNDICE A: ENTORNOS DE DESARROLLO 1047

Para que la ventana anterior muestre la lista Ubicación y la caja Nombre de la
solución tiene que habilitar, si no lo está, la opción “Guardar nuevos proyec-
tos al crearlos”. Para ello, ejecute la orden Herramientas > Opciones > Pro-
yectos y soluciones y seleccione esta opción en la ventana que se visualiza:

Para nuestro ejemplo, elegimos la plantilla “Aplicación de consola”. Después,
especificamos el nombre del proyecto y su ubicación; observe que el proyecto
será creado en una carpeta con el mismo nombre. A continuación pulsamos el
botón Aceptar y obtendremos el esqueleto del proyecto de acuerdo con la
plantilla seleccionada. Para cambiar el nombre asignado al fichero .vb, hace-
mos clic sobre Module1.vb y utilizando el botón derecho del ratón, seleccio-
1048 ENCICLOPEDIA DE MICROSOFT VISUAL BASIC

namos del menú contextual que se visualiza la orden Cambiar nombre; tam-
bién podemos hacer este cambio a través de la ventana de propiedades.

Si necesitáramos añadir un fichero nuevo a este proyecto, haríamos clic con el
botón derecho del ratón sobre el nombre del proyecto y seleccionaríamos
Agregar > Nuevo elemento. Después, elegiríamos el tipo de elemento que
deseamos añadir y, finalmente, haríamos clic en el botón Agregar.

2. A continuación editamos el código que compone el programa. Después, antes
de compilar la aplicación, podemos verificar que se trata de una aplicación de
consola: Proyecto > Propiedades de HolaMundo > Aplicación > Tipo de re-
sultado > Aplicación de consola.
APÉNDICE A: ENTORNOS DE DESARROLLO 1049

3. Para compilar el programa, ejecutamos la orden Generar HolaMundo del me-
nú Generar. Finalmente, para ejecutar el programa seleccionamos la orden
Iniciar sin depurar del menú Depurar, o bien pulsamos las teclas Ctrl+F5.
También puede ejecutar el programa seleccionando la orden Iniciar depura-
ción del menú Depurar, o bien pulsando la tecla F5. Los resultados de la
compilación se muestran en la ventana Resultados. La acción de ejecutar el
programa acarrea también su compilación si fuera necesario.

DEPURAR UNA APLICACIÓN
¿Por qué se depura una aplicación? Porque los resultados que estamos obteniendo
con la misma no son correctos y no sabemos por qué. El proceso de depuración
consiste en ejecutar la aplicación paso a paso, indistintamente por sentencias o por
métodos, con el fin de observar el flujo seguido durante su ejecución, así como los
resultados intermedios que se van sucediendo, con la finalidad de detectar las
anomalías que producen un resultado final erróneo.

Por ejemplo, para depurar una aplicación utilizando el depurador del entorno
de desarrollo de Visual Studio, ejecute la orden Depurar > Paso por instrucciones
y utilice las órdenes del menú Depurar o los botones correspondientes de la barra
de herramientas (para saber el significado de cada botón, ponga el puntero del ra-
tón sobre cada uno de ellos).
1050 ENCICLOPEDIA DE MICROSOFT VISUAL BASIC

De forma resumida, las órdenes disponibles para depurar una aplicación son
las siguientes:

 Iniciar o F5. Inicia la ejecución de la aplicación en modo depuración hasta
encontrar un punto de parada o hasta el final si no hay puntos de parada.
 Alternar puntos de interrupción o F9. Pone o quita un punto de parada en la
línea sobre la que está el punto de inserción.
 Detener depuración o Mayús+F5. Detiene el proceso de depuración.
 Paso a paso por instrucciones o F11. Ejecuta la aplicación paso a paso. Si la
línea a ejecutar coincide con una llamada a un método definido por el usuario,
dicho método también se ejecutará paso a paso.
 Paso a paso por procedimientos o F10. Ejecuta la aplicación paso a paso. Si
la línea a ejecutar coincide con una llamada a un método definido por el usua-
rio, dicho método no se ejecutará paso a paso, sino de una sola vez.
 Paso a paso para salir o Mayús+F11. Cuando un método definido por el
usuario ha sido invocado para ejecutarse paso a paso, utilizando esta orden se
puede finalizar su ejecución en un solo paso.
 Ejecutar hasta el cursor o Ctrl+F10. Ejecuta el código que hay entre la últi-
ma línea ejecutada y la línea donde se encuentra el punto de inserción.
 Inspección rápida o Ctrl+Alt+Q. Visualiza el valor de la variable que está ba-
jo el punto de inserción o el valor de la expresión seleccionada (sombreada).

Para ejecutar la aplicación en un solo paso, seleccione la orden Iniciar sin de-
purar (Ctrl+F5) del menú Depurar.

Además de la barra de herramientas Depurar, dispone también de la barra de
herramientas Generar reducida que se muestra en la figura siguiente:

Esta barra de herramientas pone a su disposición las órdenes siguientes:

 Generar aplicación. Compila la aplicación y genera el fichero ejecutable co-
rrespondiente.
APÉNDICE A: ENTORNOS DE DESARROLLO 1051

 Generar solución. Compila y genera todos los proyectos que componen la so-
lución.
 Cancelar. Detiene el proceso de compilación o de generación del fichero eje-
cutable.

ARGUMENTOS EN LA LÍNEA DE ÓRDENES
Si ejecuta una aplicación desde el EDI que requiere argumentos en la línea de ór-
denes, ¿dónde se introducen estos argumentos? Haga clic sobre el nombre del
proyecto con el botón derecho del ratón y seleccione la orden Propiedades. Des-
pués, en la ventana que se visualiza, seleccione el panel Depurar y escriba los ar-
gumentos según puede observar en la figura:

CONECTAR A LOCALDB O A SQLEXPRESS
El servidor de base de datos que se instala con Visual Studio es diferente depen-
diendo de la versión de Visual Studio que haya instalado:

 Si se utiliza Visual Studio 2010 se creará una base de datos SQL Express.

 Si se utiliza Visual Studio 2012 se creará una base de datos LocalDB. Esto no
significa que no pueda utilizar una base de datos SQL Express.

SQL Server Express
SQL Server 2012 Express es el motor de base de datos gratuito, potente, pero sen-
cillo, que se integra perfectamente con el resto de productos Express. Se trata de
1052 ENCICLOPEDIA DE MICROSOFT VISUAL BASIC

una versión aligerada de la nueva generación de SQL Server que puede descargar
gratuitamente del sitio web de Microsoft.

Este producto tiene el mismo motor de base de datos que toda la familia SQL
Server y utiliza el mismo lenguaje SQL. Otra característica interesante es la movi-
lidad de las bases de datos de un servidor a otro con XCOPY. Con esta utilidad
podemos mover un fichero MDF de una máquina a otra a cualquier ubicación
dentro de su sistema de ficheros, quedando la base de datos movida lista para tra-
bajar. Para utilizar esta base de datos deberemos hacer uso de la opción Attach-
DBFilename en la cadena de conexión, según se muestra a continuación:

connectionString="Data Source=.\sqlexpress;Initial Catalog=;
Integrated Security=True;AttachDBFileName=C:\bd\bd_editorial.mdf"

La entrada Data Source especifica el servidor de base de datos que vamos a
utilizar y AttachDBFilename, la localización del fichero de base de datos. Ob-
sérvese que la entrada Initial Catalog está vacía.

Para crear una base de datos utilizando SQL Server Express tiene que hacerlo
desde la línea de órdenes (véase también el capítulo titulado Acceso a una base de
datos). Para iniciar la consola que le permita trabajar contra el motor de base de
datos SQL Server, localice en su instalación el fichero SQLCMD.EXE, cambie a
ese directorio y ejecute la orden:

SQLCMD -S nombre-del-ordenador\SqlExpress

Una vez iniciada la consola, puede escribir órdenes SQL a continuación del
símbolo “>”. Para ejecutar un bloque de sentencias escriba GO. Para salir, escriba
QUIT. Por ejemplo, el guión que muestra la figura siguiente crea la base de datos
APÉNDICE A: ENTORNOS DE DESARROLLO 1053

tfnos con una tabla telefonos, añade tres filas a la tabla y, finalmente, selecciona
todas las filas de la tabla con todas sus columnas:

Para ver la relación de órdenes que puede utilizar a través de la aplicación
SQLCMD ejecute la orden help como se muestra en la figura siguiente. Obsérvese
que cada orden va precedida por dos puntos (:).
1054 ENCICLOPEDIA DE MICROSOFT VISUAL BASIC

SQL Server 2012 Express LocalDB
Microsoft SQL Server 2012 Express LocalDB es un modo de ejecución de SQL
Server Express destinado a los desarrolladores de programas con el fin de sustituir
la característica de instancias de usuario de SQL Server Express, que ha quedado
obsoleta. La instalación de LocalDB copia un conjunto de archivos mínimo nece-
sario para iniciar el motor de base de datos de SQL Server. Una instancia de SQL
Server Express LocalDB se puede administrar con la herramienta de línea de ór-
denes SqlLocalDB.exe.

SQL SERVER MANAGEMENT STUDIO EXPRESS
Si instaló SQL Server, habrá comprobado que no dispone de una herramienta de
administración de bases de datos. Por tal motivo, Microsoft también ha desarro-
llado una nueva aplicación para gestionar bases de datos que puede obtener de
forma gratuita de Internet en la dirección especificada a continuación:

http://www.microsoft.com/es-es/downloads

Esta aplicación presenta una interfaz gráfica, muy sencilla de utilizar, para
realizar tareas típicas como crear bases de datos, gestionar las tablas de la base,
los procedimientos almacenados, crear usuarios, etc.

Cuando inicie SQL Server Management Studio Express, le serán solicitados el
nombre del servidor de bases de datos, el tipo de autenticación, y el usuario y la
contraseña sólo si eligió autenticación SQL Server:

Una vez realizada la conexión con el gestor de bases de datos, le será mostra-
da la ventana de la figura siguiente. Seleccione en la lista del panel de la izquierda
la base de datos con la que desea trabajar, haga clic en el botón Nueva consulta de
APÉNDICE A: ENTORNOS DE DESARROLLO 1055

la barra de herramientas y, después, escriba en el mismo las sentencias SQL que
desee ejecutar. Para ejecutar una sentencia SQL haga clic en el botón Ejecutar de
la barra de herramientas.

CREAR UNA BASES DE DATOS
Si no instaló SQL Server 2012 Express puede crear una nueva base de datos local
al proyecto siguiendo los pasos especificados a continuación. Haga clic con el bo-
tón secundario del ratón sobre el nombre del proyecto para agregar un nuevo ele-
mento y seleccione Base de datos basada en servicio. A continuación se abrirá el
asistente para la configuración de orígenes de datos y, como no hay ningún objeto
de base de datos disponible porque la base de datos es nueva, haga clic en Cance-
lar para crear y agregar la base de datos vacía al proyecto. A continuación puede
continuar añadiendo las tablas, los datos de las tablas, las relaciones entre las ta-
blas, etc. Puede ver un ejemplo en el apartado Ejercicios resueltos del capítulo
Acceso a una base de datos.

Si instaló SQL Server 2012 Express (nombre predeterminado del servidor:
sqlexpress), entonces es posible añadir al proyecto elementos nuevos de tipo base
1056 ENCICLOPEDIA DE MICROSOFT VISUAL BASIC

de datos utilizando el explorador de bases de datos. Para ello, abra el Explorador
de bases de datos (Ver > Otras ventanas > Explorador de bases de datos). Haga
clic con el botón secundario del ratón sobre el nodo Conexiones de datos y selec-
cione Agregar conexión. Elija como origen de datos Microsoft SQL Server. Se vi-
sualizará la ventana siguiente:

Escriba el nombre de la base de datos y haga clic en Aceptar. Se visualizará el
mensaje La base de datos ‘bd_telefonos’ no existe. ¿Desea intentar crearla?:

Haga clic en Sí. Observará en el explorador de bases de datos que
bd_telefonos ha sido creada.
APÉNDICE A: ENTORNOS DE DESARROLLO 1057

El paso siguiente es añadir las tablas. Despliegue el árbol correspondiente a la
nueva conexión, haga clic con el botón secundario del ratón sobre el nodo Tablas
y agregue una nueva tabla. Después complete el proceso de creación de la misma.

Puede ver un ejemplo de este proceso en el apartado Ejercicios resueltos del
capítulo Acceso a una base de datos.

INSTALACIÓN DE ASP.NET EN WINDOWS
ASP.NET queda instalado automáticamente cuando instaló Visual Studio o, en su
defecto, Visual Studio Express for Web. Ahora bien, para crear y ejecutar aplica-
ciones para Internet necesitará un servidor de aplicaciones, en el caso de la plata-
forma Windows éste es IIS (Internet Information Server). La instalación de IIS
debe ser anterior a la de .NET Framework. Si no se hizo así, ASP.NET no estará
habilitado en IIS y no podremos realizar aplicaciones ASP.NET. En este caso, la
solución es registrar manualmente ASP.NET en IIS.

Registro manual de ASP.NET en IIS
Para registrar manualmente ASP.NET en IIS, abra una ventana de consola, sitúese
en la carpeta C:\WINDOWS\Microsoft.NET\Framework\vx.x.xxxxx y ejecute:

aspnet_regiis.exe -i -enable

Esto habilitará IIS para la ejecución de ASP.NET, registrará las extensiones
de ASP.NET (aspx, amsx, asax, etc.) y ya podremos empezar a trabajar con
ASP.NET.

Si echa una ojeada a todas las opciones disponibles (aspnet_regiis.exe -help)
podrá observar algunas muy interesantes, como -c, que instala las secuencias de
órdenes del cliente de esta versión en el subdirectorio aspnet_client de todos los
directorios de sitios IIS.
1058 ENCICLOPEDIA DE MICROSOFT VISUAL BASIC

Si la operación anterior no solucionó el problema, pruebe a reparar la instala-
ción actual a partir del material adicional del producto. Si esto tampoco soluciona-
ra el problema, sólo queda desinstalar el producto y volverlo a instalar.

DEPURAR CÓDIGO JAVASCRIPT
En una aplicación ASP.NET que incluya código JavaScript (véase el capítulo 20)
es posible utilizar el depurador de Visual Studio o de Visual Web Developer para
depurar ese código.

Para poder depurar código JavaScript, el primer paso es habilitar esta opción
en el navegador. En el caso de Internet Explorer, seleccione Herramientas > Op-
ciones de Internet > Opciones avanzadas y asegúrese de que no esté seleccionada
la opción “Deshabilitar la depuración de scripts”:

Cumplido el requisito anterior, sólo queda poner en el código JavaScript a de-
purar la sentencia debugger. De esta forma, cuando inicie la depuración de la
aplicación y el flujo de ejecución pase por esta sentencia, la ejecución se detendrá
y podrá continuarla paso a paso.

function CargarTabla(resultado, contexto)
{
debugger;
var elementos =
APÉNDICE A: ENTORNOS DE DESARROLLO 1059

LoadXmlFromString(resultado).getElementsByTagName("string");
TablaResultados = document.getElementById("TablaDeResultados");
if (TablaResultados != null)
{
// ...

DESARROLLO
Para el desarrollo de una aplicación, lo habitual es crear un modelo de clases si-
guiendo algún patrón, por ejemplo el patrón de arquitectura de software Model-
View-ViewModel (MVVM) utilizado por WPF y Silverlight, que es un sucesor del
ampliamente conocido Model-View-Controller (MVC) utilizado por ASP.NET
MVC, nacido del entorno Smalltalk a finales de los años 70.

En MVC la aplicación se compone de tres tipos de objetos que tienen respon-
sabilidades distintas con el objetivo de separar la capa visual de su correspondien-
te programación y acceso a datos:

 El modelo. Es el responsable de los datos y de la lógica de negocio de la apli-
cación.
 La vista. Es el responsable de mostrar los datos al usuario y de permitir su ma-
nipulación desde y hacia el modelo.
 El controlador. Es el responsable de implementar las respuestas a los eventos
o acciones de los usuarios e invocar peticiones al modelo y probablemente a la
vista.

Con el modelo MVC cada tipo de objeto es responsable de una cosa, lo que
simplifica el desarrollo, comprensión y la realización de pruebas del código fuen-
te. Además, es fácil remplazar las vistas, o tener más de una actuando sobre los
mismos datos.

En el caso de las aplicaciones Silverlight, el .NET Framework dispone de la
capacidad de usar enlaces (bindings) para transferir directamente datos desde el
controlador hacia la vista, por lo que el controlador solo es responsable de imple-
1060 ENCICLOPEDIA DE MICROSOFT VISUAL BASIC

mentar el comportamiento de esta. En este caso, el controlador se denomina mo-
delo de vista (view model), dando origen al patrón MVVM donde:

 El modelo. Representa los datos o información con la que se trabaja y en la
mayoría de los casos la lógica de negocio asociada. Debe encontrarse comple-
tamente aislado de la interfaz de usuario.
 La vista. Representa la información en la interfaz de usuario y es capaz de
aceptar la entrada de datos del usuario a través de controles, teclado, ratón u
otros elementos en forma de controles desde la interfaz gráfica.
 El modelo-vista. Objeto que separa y aísla completamente a la vista del mode-
lo, se puede pensar en este tipo de objetos como una abstracción de la vista,
que además hace las funciones de intermediario, transformando los datos reci-
bidos del modelo en datos aptos para la vista y viceversa.

Por lo tanto MVVM comparte todos los beneficios de MVC, pero con una
ventaja adicional: la simplificación que resulta de usar enlaces declarativos para
transferir los datos desde y hacia el modelo a la vista.
APÉNDICE B
 F.J.Ceballos/RA-MA

PÁGINAS WEB
¿Quién no ha oído hablar de Internet? La respuesta es evidente, porque donde
quiera que esté oirá hablar de Internet. ¿Por qué? Porque hoy en día forma parte
del mundo de los negocios y del comercio, aunque en sus inicios no fue ésta la in-
tención. Hay muchas empresas que le proporcionan conexión las 24 horas del día
por un precio asequible. Pero, ¿qué es Internet?, ¿qué servicios ofrece?

¿QUÉ ES INTERNET?
Internet, es decir, inter-red, es una red de redes informáticas distribuidas por todo
el mundo que intercambian información entre sí mediante la familia de protocolos
TCP/IP. Puede imaginarse Internet como una gran nube con ordenadores conecta-
dos:

Cliente

Servidor

Cliente

Internet surgió de un programa de investigación realizado por la Agencia de
Proyectos de Investigación Avanzados de Defensa (DARPA) de los Estados Uni-
dos sobre la conexión de redes informáticas. El resultado fue ARPANet (1969).
Esta red crece y a principios de los años 80 se conecta con CSNet y MILNet, dos
redes independientes, lo que se considera como el nacimiento de Internet (Inter-
1062 ENCICLOPEDIA DE MICROSOFT VISUAL BASIC

national Network of computers). También forman parte de esta red NSI (NASA
Science Internet) y NSFNet (National Science Foundation Net).

Durante muchos años Internet ha servido para que muchos departamentos de
investigación de distintas universidades distribuidas por todo el mundo pudieran
colaborar e intercambiar información. Sólo recientemente ha comenzado a formar
parte de los negocios y de nuestra vida cotidiana.

Internet ha hecho que el mundo empresarial se haya replanteado sus sistemas
de comunicación internos y externos y en la mayoría de los casos los haya encau-
zado vía Internet. Esto ha dado lugar a dos subpoblaciones dentro de Internet: in-
tranets y extranets.

Intranet
Una intranet no es más que una red local que utiliza los mismos protocolos que
Internet, independientemente de que esté o no conectada a Internet. ¿Qué ventajas
tiene una intranet? Fundamentalmente dos: independencia de los proveedores ha-
bituales de soluciones y una única forma de trabajar que evita tener que aprender
sistemas nuevos, lo que redunda en un ahorro de formación. Por otra parte, una
intranet suele estar dotada de una velocidad bastante mayor que la habitual en In-
ternet, lo que posibilita una comunicación muy fluida, incluso, cuando se trata de
flujos de información multimedia.

Terminología Internet
Desde el punto de vista físico, Internet no es una simple red, sino miles de redes
informáticas que trabajan conjuntamente bajo los protocolos TCP/IP (Transmision
Control Protocol/Internet Protocol - Protocolo de Control de Transmisiones/Pro-
tocolo Internet), entendiendo por protocolo un conjunto de normas que regulan la
comunicación entre los distintos dispositivos de una red. Desde el punto de vista
del usuario, Internet es una red pública que interconecta universidades, centros de
investigación, servicios gubernamentales y empresas.

El conjunto de protocolos de Internet está compuesto por muchos protocolos
relacionados con la asociación formada por TCP e IP y relacionados con las dife-
rentes capas de servicios de la red; esto es, las funciones de una red se pueden
agrupar en capas de servicios de la red. Imagínese las capas como distintas esta-
ciones por las que debe pasar un paquete de información cuando realiza la ruta de
un ordenador a otro conectados a diferentes puntos dentro de Internet. Por ejem-
plo, el protocolo TCP/IP visto desde este punto de vista puede imaginárselo de
forma resumida así:
APÉNDICE B: PÁGINAS WEB 1063

Aplicación
(FTP, Telnet, Gopher, Word Wide Web)
API de Windows Sockets
Transporte
(TCP y UDP)
Red
(IP)
Enlace
(controlador de dispositivo, tarjeta de red, protocolos de control de la línea)

Entre dos capas puede haber una interfaz de programación (API) para inter-
pretar los mensajes o paquetes a medida que van pasando.

Utilizar una interfaz de programación, como la API de Windows Sockets, li-
bera al programador de tratar con detalles de cómo se pasan los paquetes de in-
formación entre las capas inferiores.

Las capas de enlace y de red se encargan de empaquetar la información y de
llevar los paquetes de un lugar a otro de la red. ¿Cómo se identifican estos luga-
res? La respuesta es con direcciones de Internet que permitan identificar tanto el
ordenador como el usuario, ya que un mismo ordenador puede tener dados de alta
diferentes usuarios. Estas direcciones son especificadas según un convenio de sis-
tema de nombres de dominio (DNS).

Un DNS tiene el formato siguiente:

[subdominio].[subdominio].[...].dominio

Por ejemplo:

uni.alcala.es

En este ejemplo, es es el dominio, alcala es un subdominio de es, y uni un
subdominio de alcala. Algunos dominios de nivel superior son:

Dominio Cobertura
com organizaciones comerciales
edu instituciones educativas
net suministradores de servicios de red
us Estados Unidos
de Alemania
es España
1064 ENCICLOPEDIA DE MICROSOFT VISUAL BASIC

Cada nombre de dominio se corresponde con una única dirección de Internet
o dirección IP. Una dirección IP es un valor de 32 bits dividida en cuatro campos
de 8 bits. Por ejemplo:
130.206.82.7

Para referirse a un usuario perteneciente a un determinado dominio, la sintaxis
empleada es:

usuario@[subdominio].[subdominio].[...].dominio

Los programas que gestionan los nombres de dominio se denominan servido-
res de nombres. Cada servidor de nombres posee información completa de una
determinada zona (subconjunto de un dominio) y de otros servidores de nombres
responsables de otras zonas. De esta forma, cuando llega una solicitud de infor-
mación sobre la zona de la que es responsable un determinado servidor, éste sen-
cillamente proporciona la información. Sin embargo, cuando llega una solicitud
de información para una zona diferente, el servidor de nombres se pone en contac-
to con el servidor de esa zona. Los servidores DNS constituyen la base de datos
distribuida de nombres de Internet.

La capa de transporte es responsable de la entrega fiable de los datos. En esta
capa se emplean dos protocolos diferentes: TCP y UDP. TCP toma mensajes de
usuario de longitud variable y los pasa al nivel de red, solicitando acuse de recibo;
y UDP es similar, salvo en que no solicita acuse de recibo de los datos.

La capa de aplicación proporciona una interfaz a la aplicación que ejecuta un
usuario. Dicho de otra forma, proporciona el conjunto de órdenes que el usuario
utiliza para comunicarse con otros ordenadores de la red.

Existen muchos protocolos en TCP/IP. A continuación, se indican algunos
bastante conocidos:

 FTP (File Transfer Protocol - Protocolo de transferencia de ficheros). Copia
ficheros de una máquina a otra.

 Gopher. Protocolo que permite buscar y recuperar documentos mediante un
sistema de menús.

 POP 3 (Post Office Protocol - Protocolo de oficina de correos). Protocolo pa-
ra gestionar el correo electrónico, en base a su recepción y envío posterior,
entre el usuario y su servidor de correo. Con este fin son empleados también
los protocolos IMAP (Internet Message Access Protocol) y HTTP (correo
web).
APÉNDICE B: PÁGINAS WEB 1065

 SMTP (Simple Mail Transfer Protocol - Protocolo de transferencia de correo).
Protocolo para controlar el intercambio de correo electrónico entre dos servi-
dores de correo en Internet.

 Telnet (Telecomunications NetWork Protocol - Protocolo de telecomunica-
ciones de red). Protocolo utilizado para establecer conexiones entre terminales
remotos. Permite establecer conexiones entre máquinas con diferentes siste-
mas operativos.

 USENet. Nombre con el que se denomina al conjunto de los grupos de discu-
sión y noticias, establecidos en Internet. La idea de USENet es servir como
tablón electrónico de anuncios.

 HTTP (HyperText Transfer Protocol). Protocolo de transferencia de hipertex-
to utilizado por WWW (World Wide Web - La telaraña mundial). Se trata de
un sistema avanzado para la búsqueda de información en Internet basado en
hipertexto y multimedia. El software utilizado consiste en exploradores
(browsers), también llamados navegadores, con una interfaz gráfica.

SERVICIOS EN INTERNET
Los servicios más comunes son el correo electrónico, la conexión remota, transfe-
rencia de ficheros, grupos de noticias y la WWW. Programas que facilitan estos
servicios hay muchos, y su manejo, además de sencillo, es similar. Por eso, inde-
pendientemente de los que se utilicen en los ejemplos, usted puede emplear los
suyos de forma análoga.

En cualquier caso, tenga presente que sólo podrá acceder a Internet si además
de un ordenador y un módem (un módem es un dispositivo que conecta un orde-
nador a una línea telefónica), ha contratado dicho servicio con un proveedor de
Internet, o bien si su ordenador forma parte de una red que le ofrece acceso a In-
ternet.

El correo electrónico (correo-e o e-mail) es uno de los servicios más utiliza-
dos en todo el mundo. Como su nombre indica, tiene como finalidad permitir en-
viar y recibir mensajes. Un ejemplo de aplicación que proporciona este servicio es
Microsoft Outlook Express.

La orden telnet (de Windows, Unix, etc.) proporciona la capacidad de mante-
ner sesiones como un terminal del ordenador remoto, lo que le permite ejecutar
órdenes como si estuviera conectado localmente.
1066 ENCICLOPEDIA DE MICROSOFT VISUAL BASIC

El protocolo de transferencia de ficheros (ftp) es un método sencillo y efecti-
vo de transferir ficheros ASCII y binarios entre ordenadores conectados a una red
TCP/IP. Las órdenes ftp utilizadas con mayor frecuencia son las siguientes:

Orden ftp Significado
ascii Establece el modo ASCII para la transferencia de ficheros.
binary Establece el modo binario para la transferencia de ficheros.
bye Finaliza la sesión ftp y sale.
cd Cambia de directorio de trabajo en el ordenador remoto.
close Finaliza la sesión ftp.
ftp Inicia una sesión ftp.
get Obtiene un fichero del ordenador remoto.
help Proporciona las órdenes ftp disponibles o información relativa a la
orden especificada.
lcd Cambia al directorio local de trabajo. Suele utilizarse para seleccio-
nar los directorios a los que irán a parar los ficheros transferidos.
ls Lista el contenido de un directorio remoto.
mget Obtiene un grupo de ficheros que pueden haberse especificado uti-
lizando algún comodín.
mput Envía un grupo de ficheros que pueden haberse especificado utili-
zando algún comodín.
open Inicia una conexión ftp con el ordenador remoto especificado.
put Envía un fichero al ordenador remoto.

Una interfaz de línea de órdenes proporciona un acceso pleno a las facilidades
de ftp, pero el riesgo de cometer errores es alto, ya que es fácil equivocarse al es-
cribir la orden. Afortunadamente existen varias interfaces gráficas de usuario que
eliminan la posibilidad de error a la que hacíamos mención anteriormente.

Los grupos de noticias, noticias USENET, netnews o simplemente news, son
foros de discusión en línea. Los artículos de noticias de USENET se clasifican en
grupos de noticias por temas (ordenadores, aplicaciones, alpinismo, etc.).

La World Wide Web, también conocida por WWW o simplemente Web, es uno
de los logros más interesantes en Internet. La Web es un sistema hipermedia inter-
activo que permite conectarse a grandes cantidades de información en Internet. Un
sistema hipermedia está compuesto por páginas que contienen texto cuidadosa-
mente formateado, imágenes llenas de color, sonido, vídeo y enlaces a otras pági-
nas distribuidas por todo el mundo. Puede acceder a esas otras páginas
APÉNDICE B: PÁGINAS WEB 1067

simplemente seleccionando uno de los enlaces. La información se recupera auto-
máticamente sin necesidad de saber dónde está.

El proyecto Web, que fue iniciado en el Centro Europeo de Investigación Nu-
clear (European Center for Nuclear Research), ha crecido a una velocidad impre-
sionante. Esto se debe fundamentalmente a que soporta información de todo tipo:
texto, sonido y gráficos.

La forma de establecer una conexión es muy sencilla. Suponiendo que física-
mente está conectado a Internet, inicie uno de los programas de los muchos que
hay para navegar por este sistema de información, y automáticamente le mostrará
una pantalla de información que le conducirá a muchas otras. Por ejemplo, si ini-
cia la aplicación Microsoft Internet Explorer, se visualizará una ventana similar a
la siguiente:

La ventana del explorador (también llamado navegador) tiene una barra de
menús donde están todas las órdenes que puede utilizar y una barra de herramien-
tas correspondientes a las órdenes más utilizadas para navegar por la Web.

Los botones Atrás y Adelante le permiten moverse a través de las páginas que
usted ya ha visitado.

El botón Detener detiene una página que se está cargando actualmente, quizás
porque usted ha cambiado de opinión una vez que ha visto parte de la página.
1068 ENCICLOPEDIA DE MICROSOFT VISUAL BASIC

El botón Actualizar vuelve a cargar la página que se esté visualizando en ese
momento. A veces, esto es necesario debido a fallos en la red.

El botón Inicio le permite volver a la página de inicio. Para cambiar su página
de inicio, vaya a la página que desea que aparezca cuando arranque por primera
vez el explorador, ejecute la orden Opciones de Internet del menú Herramientas,
haga clic en la pestaña General y después en Usar actual.

Cuando hace clic en el botón Búsqueda de la barra de herramientas, aparece el
panel de búsqueda del navegador a la izquierda de la ventana. Este panel le pro-
porciona acceso a diversos servicios de búsqueda que ofrecen diferentes clases de
capacidades de búsqueda. Pruebe los distintos servicios de búsqueda para ver las
clases de información que proporcionan.

Si desea buscar información adicional rápidamente, puede escribir go, find o
? seguido de una palabra o una frase, en la barra de direcciones (espacio en el que
puede escribir y mostrar la dirección de una página web). Internet Explorer inicia-
rá inmediatamente una búsqueda mediante el servicio de búsqueda predetermina-
do. También puede utilizar buscadores como Google, por ejemplo.

Una vez que esté en una página web, puede buscar un texto específico en di-
cha página. Para iniciar la búsqueda, haga clic en Buscar en esta página del menú
Edición.

PÁGINAS WEB
Anteriormente ha aprendido cómo acceder a la Web; si ya lo ha hecho, habrá visto
muchas páginas con magníficos gráficos, listas, formularios y otros elementos
muy atractivos. Pero, ¿cómo se puede crear una página web de estas característi-
cas a la que otros usuarios puedan acceder? Hay muchas herramientas que le per-
mitirán realizarlo. Para ello, antes debe conocer básicamente lo que es HTML
(HyperText Markup Language - Lenguaje para hipertexto), el lenguaje utilizado
para construir páginas web.

Qué es HTML
HTML es un lenguaje utilizado para desarrollar páginas y documentos web. A di-
ferencia de los lenguajes convencionales, HTML utiliza una serie de etiquetas es-
peciales intercaladas en un documento de texto sin formato. Dichas etiquetas
serán posteriormente interpretadas por los exploradores encargados de visualizar
la página o el documento web con el fin de establecer el formato.
APÉNDICE B: PÁGINAS WEB 1069

Para editar una página HTML y posteriormente visualizarla, todo lo que nece-
sita es un editor de texto sin formato y un explorador web. Para ver una página
HTML no necesita una conexión a la red; cualquier explorador web debe permi-
tirle hacerlo trabajando en local. No obstante, existen otras herramientas como
FrontPage que facilitan la generación de páginas HTML.

Posteriormente, las páginas deben ser colocadas en un servidor web para que
otros usuarios puedan acceder a ellas.

Etiquetas básicas HTML
Las etiquetas indican a los exploradores web cómo tienen que mostrar el texto y
los gráficos. Normalmente se escriben entre los símbolos < y >, y suele haber una
etiqueta de comienzo (<texto etiqueta>) y otra de fin (</texto etiqueta>) para en-
marcar el texto que va a ser formateado por ellas. Muchas etiquetas incluyen dis-
tintos atributos que detallan la forma de mostrar el texto que aparece entre ellas.
HTML no es sensible a las minúsculas y mayúsculas. Por ejemplo, la siguiente lí-
nea de código muestra cómo utilizar atributos y valores con la etiqueta font. La
etiqueta de apertura incluye el atributo size (tamaño) al que se asigna el valor 10;
después aparece el texto que se desea mostrar con el tamaño especificado, y a
continuación la etiqueta de cierre.

<font size="10">Usuario:</font>

Todas las etiquetas de una página web se colocan dentro de la etiqueta html,
la cual define dos secciones: head (cabecera) y body (cuerpo). La etiqueta head
contiene etiquetas que afectan a la página web completa, por ejemplo title (título),
y la etiqueta body contiene el resto de las etiquetas que definen el contenido de la
página web. Según lo expuesto, el esqueleto de una página web puede ser el si-
guiente:

<html>
<head>
<title>Título del documento</title>
</head>
<body>
Cuerpo del documento: texto, imágenes, sonido y órdenes HTML
</body>
</html>

Guarde ahora estas líneas en un fichero de texto ASCII con el nombre esque-
leto.html. A continuación, diríjase a la carpeta donde lo ha guardado y haga doble
clic sobre el nombre del fichero. El resultado será el siguiente:
1070 ENCICLOPEDIA DE MICROSOFT VISUAL BASIC

Etiquetas de formato de texto
Igual que en un documento Word, las páginas HTML pueden tener cabeceras. Las
cabeceras son insertadas con la etiqueta hn; donde n es un valor de 1 a 6. El ta-
maño del texto es mayor cuanto mayor es el nivel (el nivel más alto es el 1). Los
niveles no tienen por qué emplearse consecutivamente.

Si desea insertar algún tipo de separador, por ejemplo, una raya horizontal,
puede hacerlo con la etiqueta hr (horizontal rule - raya horizontal).

Para introducir un párrafo, utilice la etiqueta p o nada. Un párrafo va precedi-
do automáticamente por una línea en blanco. Los retornos de carro en el texto son
ignorados; por lo tanto, cuando quiera introducir uno utilice la etiqueta br.

El siguiente ejemplo clarifica lo expuesto hasta ahora (está localizado en el fi-
chero Cap15\HTML\texto.html):

<html>
<head>
<title>Título del documento</title>
</head>
<body>
<h1>Ejemplo de un documento HTML</h1>
<hr>
<h3>El cuerpo del documento puede contener:</h3>
<h4>Texto, imágenes, sonido y órdenes HTML</h4>
<p>
HTML es un lenguaje utilizado para desarrollar páginas y
documentos web.
<p>
A diferencia de los lenguajes convencionales, HTML utiliza
una serie de etiquetas especiales intercaladas en un
documento de texto sin formato.
APÉNDICE B: PÁGINAS WEB 1071

<br>
Dichas etiquetas serán
posteriormente interpretadas por los exploradores
encargados de visualizar la página o el documento web, con
el fin de establecer el formato.
</p><hr>
</body>
</html>

Observe la colocación de las etiquetas. A HTML no le importa que las etique-
tas estén al final de la línea o en cualquier otra parte. También hay etiquetas que
no requieren poner la etiqueta final; por ejemplo hr, p o br.

Los exploradores web ignoran dónde terminan las líneas de texto. El texto se
ajustará en todo momento al tamaño de la ventana.

El resultado del código HTML anterior es el siguiente:

HTML también proporciona un número de etiquetas para dar formato a las
palabras y a los caracteres. Por ejemplo, la etiqueta b indica negrita y la i itálica.
La etiqueta code visualiza un texto monoespaciado. La etiqueta font permite es-
pecificar el nombre, el tamaño y el color del tipo de letra a utilizar. Por ejemplo:

<font size=2 face="Arial">
Tipo de fuente Arial, tamaño 2; <b>negrita</b> y <i>cursiva</i>
</font>
1072 ENCICLOPEDIA DE MICROSOFT VISUAL BASIC

La información también se puede organizar en listas empleando la etiqueta li.
Por ejemplo, si en la página anterior introduce la siguiente modificación, obtendrá
esta información en forma de lista en lugar de en línea.

<li>Texto <li>Imágenes <li>Sonido <li>Órdenes HTML

La lista puede numerarse utilizando la etiqueta ol. Por ejemplo, con la si-
guiente línea, la lista anterior se presentaría numerada.

<ol><li>Texto <li>Imágenes <li>Sonido <li>Órdenes HTML</ol>

El resultado será (ejemplo localizado en el fichero Cap15\HTML\listas.html):

URL
A los recursos de la Web se accede por medio de una dirección descriptiva cono-
cida como URL (Uniform Resource Locator - Localizador uniforme de recursos).
Todo aquello a lo que se puede acceder en la Web tiene un URL.

Los URL son básicamente una extensión de la ruta que define a un fichero
(path). Un URL añade, además, un prefijo que identifica el método de recupera-
ción de la información que ha de emplearse (http, ftp, gopher, telnet, news, etc.),
así como un nombre de dominio o dirección IP que indica el servidor que almace-
na la información. Finalmente aparece la ruta de acceso al fichero. Por ejemplo:

http://msdn.microsoft.com/library/spa/default.asp
APÉNDICE B: PÁGINAS WEB 1073

Enlaces entre páginas
Hemos dicho que la World Wide Web es un servicio de información basado en hi-
pertexto. Se denomina hipertexto a la capacidad de asociar a una palabra o imagen
de un documento un código oculto, de forma que cuando un usuario haga clic en
esa palabra o imagen, el sistema lo transporta desde el lugar actual a otro lugar del
mismo o de otro documento. Estos códigos especiales se denominan enlaces, fo-
cos, saltos o accesos directos.

Para definir un enlace, se utiliza la etiqueta a (anchor o ancla). Esta etiqueta
delimita el texto que se quiere utilizar para enlazar con otra página. Este texto
aparecerá subrayado para el usuario.

Para indicar al explorador la página que tiene que recuperar cuando el usuario
haga clic en un enlace, incluya en la etiqueta de apertura a el atributo href y es-
criba a continuación el URL de la página que se quiere recuperar.

También, en documentos largos, se puede utilizar el atributo name para asig-
nar un nombre a un enlace y después utilizar href en otro lugar dentro de la mis-
ma página para saltar a ese enlace. Por ejemplo, el siguiente código implementa
estas dos facilidades (ejemplo localizado en Cap15/HTML/enlaces.html):

<html>
<head>
<title>
Título del documento
</title>
</head>
<body>
<h1>Ejemplo de un documento HTML</h1>
<hr>
<h3>El cuerpo del documento puede contener:</h3>
<h4>
<ol><li>Texto <li>Imágenes <li>Sonido <li>Órdenes HTML</ol>
</h4>
<p>
<a name="Definición">HTML</a> es un lenguaje utilizado para
desarrollar páginas y documentos web.
<p>
A diferencia de los lenguajes convencionales, HTML utiliza
una serie de etiquetas ASCII especiales intercaladas en un
documento escrito en ASCII.
<br>
Dichas etiquetas serán posteriormente interpretadas por los
exploradores encargados de visualizar la página o el
documento web, con el fin de establecer el formato.
<p>
1074 ENCICLOPEDIA DE MICROSOFT VISUAL BASIC

Para editar una página <a href="#Definición">HTML</a> y
posteriormente visualizarla, todo lo que necesita es un
editor de texto ASCII y un explorador web.
<hr>
Haga clic <a href="http://www.sitio_web/ini/inicio.html">
aquí</a> para ir a la página de inicio
</body>
</html>

El resultado puede verlo en la figura siguiente:

Gráficos
Una forma de insertar imágenes en un documento HTML es utilizando la etiqueta
img y sus atributos src, que permite especificar el nombre del fichero que contie-
ne la imagen (habitualmente .gif o .jpeg), y align, que permite indicar cómo el ex-
plorador debe alinear la imagen con cualquier texto que esté cerca de ella (top,
middle o bottom).

Cuando diseñe una página web, piense que puede haber exploradores que no
soportan gráficos. Para contemplar esta posibilidad, utilizaremos el atributo alt
que permite especificar un texto en el lugar de la imagen cuando el explorador no
pueda mostrarla. Por ejemplo:

<html>
...
<hr>
<center>
El profesor Ceballos resolviendo dudas a sus alumnos.
<img src="ceballos.jpeg" align=bottom
alt=" [Foto del profesor Ceballos]">
</center>
<hr>
Haga clic <a href="http://www.sitio_web/ini/inicio.html">
APÉNDICE B: PÁGINAS WEB 1075

aquí</a> para ir a la página de inicio
</body>
</html>

La etiqueta center centra la imagen y el título de la imagen.

También desde un documento puede saltar a otro. Por ejemplo:

Haga clic <a href="ceballos.html">
aquí</a> para ir a la biografía de Ceballos.

El ejemplo anterior indica que cuando el usuario haga clic en la palabra
“aquí”, se cargará un nuevo documento HTML guardado como ceballos.html.

Igual que utilizamos una palabra para enlazar con otro lugar, podemos utilizar
una imagen; esto es, un clic sobre una imagen gráfica le puede conducir a otro lu-
gar. Por ejemplo:

<center>
<a href="enlaces.html">
<img src="ceballos.jpg" align=bottom
alt="Foto del profesor Ceballos">
</a>
</center>

El código anterior realizará un salto a la página enlaces.html cuando el usua-
rio haga clic sobre la imagen ceballos.jpg. Cuando ejecute este código, observe
que al pasar el ratón por encima de la imagen, el cursor se transforma en una
mano y aparece una etiqueta que visualiza “Foto del profesor Ceballos”.

Marcos
Las páginas HTML que hemos escrito en los apartados anteriores ocupan toda la
ventana del explorador. Sin embargo, utilizando marcos es posible visualizar múl-
tiples documentos en una misma página.

Una forma de insertar un marco flotante en una página es utilizando la etique-
ta iframe con los atributos src, width y height. El atributo src especifica el URL
del documento que se quiere visualizar, y width y height indican la anchura y la
altura del marco. Por ejemplo:

<center>
El autor:<br>
<iframe src="ceballos.html" width=650 height=300></iframe>
</center>
1076 ENCICLOPEDIA DE MICROSOFT VISUAL BASIC

El código anterior crea un marco para visualizar el documento ceballos.html.

Al atributo src se le puede asignar también una dirección URL de cualquier
página de cualquier servidor. Esto es,

<iframe src="http://www.microsoft.com" width=650 height=300></iframe>

La figura siguiente muestra un marco dentro de una página. El código puede
verlo en el fichero marco.html de la carpeta Cap15\HTML del material adicional.

Formularios
Los formularios permiten crear interfaces gráficas de usuario en el seno de una
página web. Los componentes de estas interfaces, denominados también contro-
les, serán cajas de texto, cajas para clave de acceso, botones de pulsación, botones
de opción, casillas de verificación, menús, tablas, listas desplegables, etc.

Para crear un formulario, se utiliza la etiqueta form. Por ejemplo, el segmento
de código siguiente muestra cómo es el esqueleto de un formulario HTML:

<form method={get|post} action="fichero para procesar los datos">
Controles que forman el formulario
</form>
APÉNDICE B: PÁGINAS WEB 1077

El atributo method es opcional y su valor por omisión es get indicando así al
navegador que debe agregar los nombres de los campos del formulario y sus datos
al URL especificado por action (acción a tomar cuando se pulse el botón enviar).
La cantidad de datos que se puede concatenar al URL está limitada, truncándose
la información en exceso. Esto no ocurre si el valor para este atributo es post; en
este caso, se transmite un fichero con los datos del formulario que será recibido en
el servidor en la entrada estándar del componente de procesamiento.

Los controles que forman parte del formulario se definen dentro de la etiqueta
form. En los siguientes apartados se indica cómo crear cada uno de estos contro-
les. En general, por cada control se envía al servidor su nombre y su contenido o
valor especificado (si no se especifica un valor, se envía uno por omisión).

Entrada básica de datos

Existe una amplia variedad de controles de entrada de datos. Para crearlos, se uti-
liza la etiqueta input y los atributos type y name:

<input
type = {text|password|checkbox|radio|hidden|image|submit|reset}
name = "Variable que toma el valor"
>

El valor del atributo type especifica el tipo de control que se creará, y el del
atributo name el nombre de la variable que almacenará el dato.

Caja de texto

Una caja de texto es un control de entrada de tipo text. Se utiliza para solicitar
a un usuario que introduzca un dato. Por ejemplo, la siguiente línea de código
muestra una caja de texto para solicitar un nombre. El tamaño de la caja es 35 y el
valor será almacenado en la variable nombre:

Nombre: <input type="text" name="nombre" size="35">

El valor del atributo size especifica el tamaño de la caja. Otros atributos que
se pueden utilizar son value para especificar un valor inicial, readonly (que no
lleva asociado ningún valor) para indicar que la caja es de sólo lectura y maxlen-
gth para especificar el número máximo de caracteres que un usuario puede escri-
bir.
1078 ENCICLOPEDIA DE MICROSOFT VISUAL BASIC

Caja de clave de acceso

Una caja de clave de acceso es un control de entrada de tipo password. Se trata
de una caja de texto en la que los caracteres escritos son reemplazados por asteris-
cos. Por ejemplo, la siguiente línea de código muestra una caja de texto para soli-
citar una clave de acceso. El tamaño de caja es 25, el valor será almacenado en la
variable clave y el número máximo de caracteres que admite es 20:

Clave de acceso: <input type="password" name="clave"
size="25" maxlength="20">

Casilla de verificación

Una casilla de verificación es un control de entrada de tipo checkbox. Se trata
de un botón que puede presentar dos estados: seleccionado y no seleccionado. Se
utilizan para mostrar y registrar opciones que un usuario puede elegir; puede se-
leccionar varias de un grupo de ellas. Por ejemplo, las siguientes líneas de código
muestran tres casillas de verificación. La primera se mostrará seleccionada:

<input type="checkbox" name="cv1" value="1" checked> Opción 1 <br>
<input type="checkbox" name="cv2" value="2"> Opción 2 <br>
<input type="checkbox" name="cv3" value="3"> Opción 3 <br>

Se debe especificar el atributo name (como caso especial, se puede especificar
el mismo nombre para todas). El atributo checked permite iniciar el estado de una
casilla a seleccionado. Dicho estado, on u off, es almacenado por el atributo
name. Cuando se envíen los datos del formulario, se enviarán el nombre de la va-
riable y el valor que indique su estado. También será enviado el valor indicado
por value o nulo si no se especificó.

Botón de opción

Un botón de opción es un control de entrada de tipo radio. Igual que ocurre
con la casilla de verificación, puede presentar dos estados: seleccionado y no se-
leccionado. Se utilizan para mostrar y registrar una opción que un usuario puede
elegir entre varias; cuando selecciona una, la que estaba seleccionada dejará de es-
tarlo. Por ejemplo, las siguientes líneas de código muestran tres botones de op-
ción. El segundo se mostrará seleccionado:

<input type="radio" name="opcion" value="1"> Opción 1 <br>
<input type="radio" name="opcion" value="2" checked> Opción 2 <br>
<input type="radio" name="opcion" value="3"> Opción 3 <br>

Para el comportamiento descrito, todos los botones de opción tendrán el mis-
mo atributo name y con un valor distinto del atributo value. El valor enviado será
APÉNDICE B: PÁGINAS WEB 1079

el correspondiente al botón seleccionado. El atributo checked permitirá seleccio-
nar por omisión uno de los botones de un grupo.

Parámetros ocultos

Un parámetro oculto es un control de entrada de tipo hidden. En este caso no
se muestra ningún campo de entrada de datos al usuario, pero el par variable valor
especificado es enviado junto con el formulario.

<input type="hidden" name="variable" value="valor">

Se suelen utilizar para mantener datos durante una sesión.

Enviar datos

Un botón enviar es un control de entrada de tipo submit. Se utiliza para enviar
los datos del formulario, pasando el control al programa indicado por el atributo
action del formulario. Todo formulario debe tener un botón submit, a menos que
incluya una caja de texto.

<input type="submit" value="Enviar datos">

El atributo value especifica una etiqueta no editable que se mostrará como títu-
lo del botón. Lo normal es que este control no envíe datos, pero si se incluye el
atributo name con un nombre de variable, será enviada la variable con el valor de
value. Esto puede ser útil para distinguir cuál fue el botón pulsado cuando se in-
cluyan varios.

<input type="submit" name="enviar" value="Enviar">
<input type="submit" name="buscar" value="Buscar">

Borrar los datos de un formulario

Un botón borrar es un control de entrada de tipo reset. Se utiliza para restable-
cer los valores iniciales de los controles del formulario.

<input type="reset" value="Borrar datos">

Imágenes

Una imagen es un control de entrada de tipo image. Su finalidad es análoga al
botón submit, pero en este caso se presenta una imagen en lugar de un botón. Los
datos del formulario se enviarán al hacer clic sobre la imagen .jpg o .gif.

<input type="image" src="fichero.jpg">
1080 ENCICLOPEDIA DE MICROSOFT VISUAL BASIC

Orden de tabulación

Para trasladarse de un control a otro del formulario, el usuario puede utilizar la te-
cla tab. En este caso, el orden en el que los controles serán recorridos queda de-
terminado por su orden de aparición en el formulario, o bien por el atributo
tabindex. Por ejemplo:

<input type="text" name="nombre" size="30" tabindex="1">

El valor de tabindex es un número (1, 2, 3...) que corresponde al orden en el
que se seleccionará un control cuando el usuario pulse la tecla tab. El control que
se seleccionará en primer lugar es el 1.

Caja de texto multilínea

En ocasiones es necesario permitir al usuario escribir varias líneas de texto libre;
por ejemplo, un mensaje. Para esto se utiliza un control denominado área de texto
(textarea) que incluye una barra de desplazamiento vertical:

Mensaje: <br><textarea name="mensaje"
rows="5" cols="20" wrap>
</textarea>

El valor del atributo rows especifica el número de filas que visualizará el área
de texto a la vez y cols el número de caracteres por fila. El atributo wrap, que no
lleva asociado ningún valor, indica que se saltará automáticamente a la línea si-
guiente cuando se complete la línea en la que se escribe.

Listas desplegables

Una lista desplegable permite seleccionar una opción entre varias. Es la mejor al-
ternativa para añadir menús a una interfaz gráfica. La etiqueta que permite crear
un control de este tipo es select. Las opciones de la lista se especifican utilizando
la etiqueta option. Por ejemplo, el siguiente código mostrará una lista desplegable
con tres opciones, de las cuales aparecerá seleccionada inicialmente la segunda:

<select name="opcion">
<option value="1"> Opción 1
<option selected value="2"> Opción 2
<option value="3"> Opción 3
</select>
APÉNDICE B: PÁGINAS WEB 1081

El atributo value de option indica el valor asociado con la opción especifica-
da; si se omite este atributo, el valor que se toma es el texto especificado para la
opción. La etiqueta option que contenga el atributo selected será considerada la
opción por omisión; en caso de que no se especifique ninguna se considerará la
primera de las opciones. Se puede también especificar el atributo size para indicar
el número de opciones que la lista visualizará a la vez.

Para permitir realizar selecciones múltiples utilizando las teclas Ctrl o Alt, hay
que añadir el atributo multiple; en este caso se mostrará una lista desplegada. Por
ejemplo:

<select name="opcion" multiple>
<option value="1"> Opción 1
<option selected value="2"> Opción 2
<option value="3"> Opción 3
</select>

Utilizando la etiqueta optgroup, se pueden agrupar las opciones (como si de
un submenú se tratara); cada grupo será identificado con una etiqueta especificada
por el atributo label. Por ejemplo:

<select name="opcion">
<optgroup label="grupo 1">
<option value="1"> Opción 1
<option value="2"> Opción 2
<option value="3"> Opción 3
</optgroup>
<optgroup label="grupo 2">
<option value="4"> Opción 4
<option value="5"> Opción 5
</optgroup>
</select>

Aplicando la teoría expuesta hasta ahora, vamos a diseñar un formulario, co-
mo el que muestra la figura siguiente, que permita a un alumno concertar una tu-
toría con su profesor.
1082 ENCICLOPEDIA DE MICROSOFT VISUAL BASIC

El código HTML que da lugar a este formulario puede ser el siguiente (la ex-
presión &nbsp indica un espacio en blanco). El código puede obtenerlo del fiche-
ro Cap15\HTML\tutorias.html del material adicional.

<html>
<head>
<title>Concertar una tutoría</title>
</head>
<body>
<h1 align="center">CONCERTAR UNA TUTORÍA</h1>
<form action="http:\\localhost:8080/miap/tutorias"
method=post>
Alumno:<br><input type="text" name="alumno" size="60">
<br><br>Con el profesor:
<br><input type="text" name="profesor" size="60">
<br><br>Día:<br>
<select name="día">
<option>lunes <option>miércoles <option>jueves
</select>
<br><br>Hora:
&nbsp;&nbsp;&nbsp;10<input type="radio" name="hora" value="10"
checked>
&nbsp;&nbsp;&nbsp;12<input type="radio" name="hora" value="12">
&nbsp;&nbsp;&nbsp;16<input type="radio" name="hora" value="16">
&nbsp;&nbsp;&nbsp;18<input type="radio" name="hora" value="18">
APÉNDICE B: PÁGINAS WEB 1083

<br><br>Asunto:<br><textarea name="asunto"
rows="5" cols="40" wrap></textarea>
<br><br><input type="submit" value="Enviar datos">
&nbsp;&nbsp;<input type="reset">
</form>
</body>
</html>

Tablas

Para crear una tabla, se utilizan las etiquetas table, tr, th y td. La etiqueta table
define el cuerpo de la tabla; tr define una fila de la tabla; th define una celda de
cabecera y td define una celda de datos. Por ejemplo:

<table border="1">
<tr>
<th>Nombre</th>
<th>Nota</th>
</tr>
<tr>
<td width=200>Javier Ceballos Fernández</td>
<td width=30 align=right>10.00</td>
</tr>
<tr>
<td width=200>Elena Ortiz Fuentes</td>
<td width=30 align=right>7.50</td>
</tr>
</table>

El atributo border de table permite añadir un borde a la tabla de ancho igual
al valor especificado en píxeles. Los atributos width y align de td (o de th) per-
miten definir, respectivamente, el ancho de la celda y el tipo de ajuste del dato en
la celda.

Otras operaciones que se pueden hacer a la hora de diseñar una tabla son:

 Extender una celda en múltiples columnas:
<th colspan=2> cabecera 1</th>

 Extender una celda en múltiples filas:
<th rowspan=2> cabecera 1</th>

 Modificar el ancho y el alto de la tabla en valor absoluto o respecto al tamaño
de la ventana del navegador:
<table width=60% height=80%>
1084 ENCICLOPEDIA DE MICROSOFT VISUAL BASIC

 Modificar el tamaño de una celda:
<td width=200 height=50>

 Alinear el contenido de una celda:
<td valign=top align=left>

 Modificar el color de fondo de una celda:
<td bgcolor="green">

 Modificar el espacio y el margen de las celdas:
<table border cellspacing="8" cellpadding="8">

 Controlar los saltos de línea en una celda:
<td nowrap>

HOJAS DE ESTILO
Es evidente que el lenguaje HTML está limitado a la hora de organizar la presen-
tación de los elementos de una página web. Pues bien, para cubrir esta deficiencia
surgen las hojas de estilo (Cascade Style Sheets - CSS). Éstas no sólo permiten
organizar la presentación de una página, sino que además, intentan separar el con-
tenido de la forma de presentarlo.

Por ejemplo, para introducir un nuevo párrafo en una página web, utilizamos la
etiqueta <p>. Pues bien, con las hojas de estilo también podremos indicar que su
texto sea azul, que tenga un margen izquierdo de 20 píxeles y que tenga un borde
de ancho 2. Esto se codificaría de la forma siguiente:

<style type="text/css">
p {color: blue; margin-left: 20; border: solid; border-width: 2}
</style>

En este ejemplo se puede observar que la declaración de los atributos que defi-
nen un determinado elemento de la página queda limitada por la etiqueta style.
Esta etiqueta sólo puede utilizarse en la cabecera de la página, o bien dentro de la
etiqueta de cabecera del elemento, y su parámetro type indica la sintaxis utilizada
para definir esos atributos. En el caso de las hojas de estilo en cascada, el tipo de-
berá ser “text/css”. También observamos que los atributos se especifican a conti-
nuación del elemento HTML que se quiere personalizar, encerrados entre llaves.
En el ejemplo, son cuatro: el color (en el formato habitual), el margen izquierdo
en píxeles y el tipo y el ancho del borde. Tenga presente que CSS es sensible a las
mayúsculas y minúsculas. Puede ver un resumen de los atributos CSS en la carpe-
ta docs del material adicional que acompaña al libro.
APÉNDICE B: PÁGINAS WEB 1085

El siguiente ejemplo muestra una página HTML con estilo:

<html>
<head>
<title>Título del documento</title>
<style type="text/css">
p {color: blue; margin-left: 20; border: solid; border-width: 2}
</style>
</head>
<body>
<h1>Ejemplo de un documento HTML</h1>
<hr>
<h3>El cuerpo del documento puede contener:</h3>
<h4>Texto, imágenes, sonido y órdenes HTML</h4>
<p>
HTML es un lenguaje utilizado para desarrollar páginas y
documentos web.
<p>
A diferencia de los lenguajes convencionales, HTML utiliza
una serie de etiquetas especiales intercaladas en un
documento de texto sin formato.
<br>
Dichas etiquetas serán
posteriormente interpretadas por los exploradores
encargados de visualizar la página o el documento web, con
el fin de establecer el formato.
<hr>
</body>
</html>

Cuando se muestre la página anterior, los dos párrafos, <p>, serán visualiza-
dos con los atributos definidos. Ahora bien, en este ejemplo, el contenido no está
separado de la forma de presentarlo. Para separarlo, podemos colocar la hoja de
estilo en un fichero (sólo los estilos, sin style), por ejemplo, en estilo.css:

/* estilo.css */
p {color: blue; margin-left: 20; border: solid; border-width: 2}

Una vez definida una hoja de estilos, podemos incorporarla a una página
HTML utilizando la etiqueta link que tiene la siguiente sintaxis:

<link rel="stylesheet" href="estilo.css" type="text/css">

Según lo explicado, el ejemplo anterior quedaría como se indica a continua-
ción. Observe que la etiqueta link está incluida dentro de la cabecera:

<html>
<head>
1086 ENCICLOPEDIA DE MICROSOFT VISUAL BASIC

<title>Título del documento</title>
<link rel="stylesheet" href="estilo.css" type="text/css">
</head>
<body>
...
</body>
</html>

Clases
Cuando se muestre la página anterior, todos sus párrafos, <p>, serán visualizados
con los atributos definidos. Pero supongamos que sólo queremos personalizar al-
gunos de ellos. ¿Cómo lo hacemos? Pues, definiendo distintas clases, en nuestro
caso, distintas clases de párrafos, para lo cual utilizaremos el atributo class. Por
ejemplo, la siguiente hoja de estilos permite personalizar un párrafo de dos for-
mas, las cuales difieren en el color: azul con borde y ajustado a la izquierda, o
bien verde sin borde y centrado:

/* estilo.css */
p.azul {color: blue; margin-left: 20; border: solid; border-width: 2}
p.verde {color: green; margin-left: 20; text-align: center}

Este código define dos clases de párrafos: el párrafo azul (p.azul) y el verde
(p.verde).

Cuando apliquemos estos estilos a una página, los párrafos definidos con la
cabecera <p class="azul"> serán azules y los definidos como <p class="verde">
serán verdes. Por ejemplo:

<html>
<head>
<title>Título del documento</title>
<link rel="stylesheet" href="estilo.css" type="text/css">
</head>
<body>
<h1>Ejemplo de un documento HTML</h1>
<hr>
<h3>El cuerpo del documento puede contener:</h3>
<h4>Texto, imágenes, sonido y órdenes HTML</h4>
<p class="verde">
HTML es un lenguaje utilizado para desarrollar páginas y
documentos web.
<p class="azul">
A diferencia de los lenguajes convencionales, HTML utiliza
una serie de etiquetas especiales intercaladas en un
documento de texto sin formato.
<br>
APÉNDICE B: PÁGINAS WEB 1087

Dichas etiquetas serán
posteriormente interpretadas por los exploradores
encargados de visualizar la página o el documento web, con
el fin de establecer el formato.
<hr>
</body>
</html>

Otro caso puede ser que queramos que la mayoría de todos los párrafos sean
azules y unos pocos verdes, pero con el resto de las características iguales. En este
caso, también podríamos definir dos clases distintas, pero hay una forma mejor:
usar el parámetro id. Por ejemplo:

/* estilo.css */
p {color: blue; margin-left: 20; border: solid; border-width: 2}
#verde {color: green}

Cuando apliquemos estos estilos a una página, los párrafos definidos con la
cabecera <p> serán azules y los definidos como <p id="verde"> serán verdes.

Los exploradores agregan también varias clases, conocidas como pseudocla-
ses, que definen varios usos para un mismo elemento. Por ejemplo, podemos apli-
car estilo a los enlaces para que muestren colores diferentes en función de que aún
no hayan sido visitados o sí lo hayan sido. Para ello, CSS define las pseudoclases:

 Enlaces normales: a:link {atributos}
 Enlaces visitados: a:visited {atributos}
 Enlaces activos: a:active {atributos}

Por ejemplo, el siguiente código utiliza las pseudoclases link y visited con el
elemento <a> para definir el color azul para el enlace normal y el color magenta
para el enlace visitado. Observe la sintaxis; al contrario que con las clases reales,
ahora se utilizan dos puntos (:).

a:link {color: blue}
a:visited {color: magenta}

Etiquetas <span> y <div>
Puede que, a veces, no queramos modificar el comportamiento de un elemento,
sino aplicar un estilo completo a una determinada sección de una página. Esto po-
dremos hacerlo utilizando las etiquetas <span> y <div>.
1088 ENCICLOPEDIA DE MICROSOFT VISUAL BASIC

Para definir estilos en secciones reducidas de una página se utiliza la etiqueta
span. Admite los atributos style, id y class. Lo vemos con un ejemplo. El siguien-
te párrafo visualizará determinadas palabras en color azul y en cursiva:

<p>
A diferencia de los lenguajes convencionales,
<span style="color:blue; font-style:italic">
HTML utiliza una serie de etiquetas especiales intercaladas
en un documento de texto sin formato.
</span>
</p>

La etiqueta div es similar a span, con la diferencia de que div define un ele-
mento a nivel de bloque; esto es, una sección de una página que, a su vez, puede
contener cabeceras, párrafos, tablas, e incluso otras divisiones, lo que hace a esta
etiqueta ideal para definir distintas secciones en un documento (capítulo, resumen,
notas, etc.). Por ejemplo:

<div class=notas>
<h1>Divisiones</h1>
<p>El elemento div permite utilizar los atributos align, class,
style, id y otros muchos.</p>
<p>Definir un bloque, es útil para construir diferentes secciones
en un documento.</p>
<p>Es necesario especificar la etiqueta de cierre</p>
</div>

La etiqueta div es ideal también para definir capas, entendiendo por capa una
sección de un documento para la que se ha definido un comportamiento indepen-
diente. Algunos atributos típicos utilizables con capas son: position, posición ab-
soluta en la página, left y top, distancia desde los bordes izquierdo y superior de
la página, width y height, anchura y altura de la capa, z-index, para indicar qué
capas se ven encima de qué otras, clip, para recortar una capa y hacer que no sean
visibles partes de ella, o visibility, para indicar si la capa se puede ver en la pági-
na o permanece oculta al usuario.

A continuación mostramos un ejemplo sencillo: poner un título con el efecto
de sombra. Este ejemplo se ha construido en base a dos bloques con el mismo
contenido: uno para visualizar el título en color azul y otro para visualizar la som-
bra en color negro (se trata del mismo título, pero desplazado un píxel respecto
del anterior).
APÉNDICE B: PÁGINAS WEB 1089

El fichero de estilos que vamos a utilizar incluye dos clases, título y sombra.
Obsérvese que delante del nombre de la clase ponemos solamente un punto, ya
que en este caso no se trata de una clase definida para un determinado elemento:

/* estilos.css */
.titulo {color: blue; position:absolute; margin-left: 20;
margin-top: 20; font-size: 32; font-weight: bolder}

.sombra {color: black; position:absolute; margin-left: 21;
margin-top: 21; font-size: 32; font-weight: bolder}

Y una página ejemplo que utilice este fichero de estilos puede ser la siguiente:

<html>
<head>
<title>Capas</title>
<link rel="stylesheet" href="estilos.css" type="text/css">
</head>
<body>
<div class="sombra">
TÍTULO DE LA PÁGINA
</div>
<div class="titulo">
TÍTULO DE LA PÁGINA
</div>
</body>
</html>

XML
XML (Extensible Markup Language - lenguaje extensible para análisis de docu-
mentos) está convirtiéndose rápidamente en el estándar para el intercambio de da-
tos en la Web. Como en el caso de HTML, los datos se identifican utilizando
etiquetas, y a diferencia de HTML las etiquetas indican lo que los datos significan
en lugar de cómo visualizar los datos. Por ejemplo, la fecha de nacimiento de una
persona se puede colocar en un párrafo HTML así:

<p>01/01/2004</p>

Sin embargo, la etiqueta de párrafo no describe que el dato es la fecha de na-
cimiento. Simplemente indica al navegador que el texto que aparece entre las eti-
quetas se debe mostrar en un párrafo. En cambio, el dato sí queda descrito en una
línea como la siguiente:

<FechaNacimiento>01/01/2004</FechaNacimiento>
1090 ENCICLOPEDIA DE MICROSOFT VISUAL BASIC

El lenguaje XML es un lenguaje que se utiliza para crear otros lenguajes que
definen los componentes de un documento. Por ejemplo, podríamos utilizar XML
para describir una persona: fecha de nacimiento, sexo, color, altura, peso, etc.

La creación de un documento XML tiene dos partes: crear un esquema XML
y crear el documento utilizando los elementos definidos en el esquema.

El esquema se puede considerar como un diccionario que define las etiquetas
que se utilizan para describir los elementos de un documento. Estas etiquetas son
similares a las etiquetas HTML, pero con la diferencia de que quien crea el es-
quema crea los nombres y los atributos de las etiquetas. Por ejemplo:

<foto origen="ceballos.jpg">Profesor Ceballos</foto>

La realidad es que un navegador no puede leer y mostrar un documento XML.
Pero sí puede convertir un documento XML en un documento HTML mediante
una hoja de estilos XSTL (Extensible Stylesheet Language Transformation). Una
hoja de estilos se compone de una o más definiciones de plantillas que procesa un
procesador XSLT cuando la etiqueta de la plantilla corresponde a un componente
del documento XML.

XHTML
XHTML (Extensible HyperText Markup Language - lenguaje mejorado para la
escritura de páginas web) es la siguiente generación de HTML que incorpora mu-
chas de las características de XML. Utiliza prácticamente todos los elementos de
HTML, pero impone nuevas reglas; por ejemplo, es sensible a mayúsculas y mi-
núsculas, toda etiqueta de apertura tiene que tener una etiqueta de cierre, etc.

PÁGINAS WEB DINÁMICAS
El lenguaje HTML que hemos visto en los apartados anteriores es suficiente para
visualizar documentos, imágenes, sonidos y otros elementos multimedia; pero el
resultado es siempre una página estática.

Entonces, ¿qué podemos hacer para construir una página dinámica?, enten-
diendo por página dinámica una página que actualiza su contenido mientras se vi-
sualiza.

Haciendo un poco de historia, una de las primeras formas que se encontraron
para dar dinamismo a las páginas HTML fue la CGI (Common Gateway Interfa-
ce). Esta interfaz permite escribir pequeños programas que se ejecutan en el servi-
dor para aportar un contenido dinámico. El resultado es un código HTML, que se
APÉNDICE B: PÁGINAS WEB 1091

incluye en la página web justo antes de ser enviada al cliente. Pese a que la CGI
es fácil de utilizar, en general, no es un buen sistema porque cada vez que un
cliente solicita una página con algún programa basado en esa interfaz, el programa
tiene que ser cargado en memoria para ser ejecutado, lo que ocasiona un tiempo de
espera elevado. Además, si el número de usuarios es elevado, los requerimientos de
memoria también serán elevados, ya que todos los procesos se deben poder cargar
en memoria y ejecutar.

Una alternativa a la CGI fue ISAPI (Internet Server Application Program-
ming Interface). Esta API proporciona la funcionalidad necesaria para construir
una aplicación servidora de Internet. A diferencia de CGI que trabaja sobre ejecu-
tables, ISAPI trabaja sobre DLL. Esta diferencia hace que ISAPI sea un sistema
más rápido, ya que por tratarse de una biblioteca dinámica sólo será cargada una
vez y podrá ser compartida por múltiples procesos, lo que supone pocos requeri-
mientos de memoria.

Posteriormente, las técnicas anteriores fueron sustituidas por la incorporación
de secuencias de órdenes (scripts) ejecutadas directamente en el interior de la pá-
gina HTML. Esto es, en lugar de consultar al servidor acerca de un ejecutable, el
explorador puede ahora procesar las secuencias de órdenes a medida que carga la
página HTML. El tratamiento de estas secuencias de órdenes puede hacerse tanto
en el servidor web como en el cliente. Los lenguajes más comunes para la escritu-
ra de secuencias de órdenes son JavaScript y VBScript.

Apoyándose en la técnica anterior y en un intento de potenciar la inclusión de
contenido dinámico en páginas web, Microsoft lanza una nueva tecnología, las
páginas ASP (Active Server Page - Página activa del servidor o activada en el ser-
vidor). Una página ASP, dicho de una forma sencilla, es un fichero .asp que pue-
de contener: texto, código HTML, secuencias de órdenes y componentes ActiveX.
Con tal combinación se pueden conseguir de una forma muy sencilla páginas di-
námicas y aplicaciones para la Web muy potentes. Un inconveniente de esta tec-
nología es que su propietaria es Microsoft y solamente está disponible para el
servidor IIS (Internet Information Server) que se ejecuta sobre plataformas Win-
dows. También es cierto que hay herramientas que permiten utilizar ASP sobre un
servidor Apache en plataformas Unix, pero, hoy por hoy, los componentes Acti-
veX no están disponibles para plataformas que no sean Microsoft Windows.

Cuando un cliente solicita una ASP, el servidor la intenta localizar dentro del
directorio solicitado, igual que sucede con las páginas HTML. Si la encuentra,
ejecutará las rutinas VBScript o JScript que contenga. Cuando el servidor ejecuta
estas rutinas, genera un resultado consistente en código HTML estándar que susti-
tuirá a las rutinas VBScript o JScript correspondientes de la página ASP. Una vez
procesada la página, el servidor envía al cliente el contenido de la misma en
HTML estándar, siendo así accesible desde cualquier navegador.
1092 ENCICLOPEDIA DE MICROSOFT VISUAL BASIC

También, cuando Sun Microsystems presentó Java, uno de los aspectos que
más llamó la atención fueron los applets: pequeños programas interactivos que
son ejecutados por un navegador. Esto supuso una alternativa más para crear pá-
ginas web dinámicas, ya que esta tecnología permite vincular código estándar Ja-
va con las páginas HTML que luego utilizaremos como interfaz de usuario,
dotándolas de contenido dinámico e interactivo. Posteriormente, Sun Microsys-
tems introdujo los servlets. Mientras que los applets incorporaron funcionalidad
interactiva a los navegadores, los servlets la incorporaron a los servidores. Los
servlets es la alternativa de Sun Microsystems para sustituir a la programación
CGI.

Si comparamos la tecnología ASP o los servlets con la CGI o con la ISAPI,
llegaremos a la conclusión de que es bastante más sencilla y más potente.

Actualmente, la tecnología ASP ha sido sustituida por ASP.NET, que es parte
integrante de Microsoft .NET Framework. ASP.NET es algo más que una nueva
versión de ASP; es una plataforma de programación web unificada que propor-
ciona todo lo necesario para que podamos crear aplicaciones web. Al crear una
aplicación web, podemos elegir entre formularios web y servicios web XML, o
bien combinarlas. Todo esto lo estudiaremos en los próximos capítulos.

Los formularios web permiten crear páginas web basadas en formularios. Por
lo tanto, este tipo de aplicaciones son una alternativa más para crear páginas web
dinámicas.

Los servicios web XML proporcionan acceso al servidor de manera remota,
permitiendo el intercambio de datos en escenarios cliente-servidor utilizando es-
tándares como HTTP y XML.

Las aplicaciones web se ejecutan en un servidor web configurado con los ser-
vicios de Internet Information Server (IIS). Sin embargo, para probar una aplica-
ción web, no es necesario trabajar directamente con IIS, sino que se puede hacer a
través del servidor web integrado en Visual Studio. No obstante, si para probar
sus aplicaciones prefiere utilizar IIS, asegúrese de que lo tiene instalado. Para ello,
abra el panel de control, seleccione “agregar o quitar programas”, haga clic en
“agregar o quitar componentes Windows” y si no tiene instalado el componente
Servicios de Internet Information Server, instálelo. IIS debe instalarse antes de
Microsoft .NET Framework SDK.
APÉNDICE C
 F.J.Ceballos/RA-MA

INTERNACIONALIZACIÓN
Si pensamos distribuir nuestra aplicación a un público internacional, deberemos
tener en cuenta una serie de puntos durante las fases de diseño y desarrollo. Los
servicios integrados en .NET Framework facilitan el desarrollo de aplicaciones
que se adaptan a distintas configuraciones de idioma.

Preparar una aplicación para su uso mundial tiene dos partes: diseñar la apli-
cación para que pueda adaptarse a distintas referencias culturales (globalización)
y traducir los recursos para una referencia cultural específica (localización).

GLOBALIZACIÓN
La globalización es el proceso de diseño y desarrollo de una aplicación que per-
mite el uso de interfaces de usuario en distintos idiomas.

El espacio de nombres System.Globalization contiene clases que definen in-
formación relativa a la referencia cultural, incluido el idioma, el país o región, los
calendarios utilizados, los modelos de formato de fecha, moneda y números, y el
criterio de ordenación de las cadenas. Concretamente, la clase CultureInfo repre-
senta una referencia cultural específica.

LOCALIZACIÓN
Los recursos de la aplicación que requieren una localización tienen que ser inde-
pendientes del resto del código de la aplicación. Para ello, el código ejecutable se
ubicará en el ensamblado principal de la aplicación, mientras que en los ficheros
de recursos sólo se ubicarán los recursos: cadenas, mensajes de error, cuadros de
1094 ENCICLOPEDIA DE MICROSOFT VISUAL BASIC

diálogo, menús o recursos de objetos incrustados, entre otros. Finalmente, se tra-
duce la interfaz de usuario a los idiomas de destino.

.NET Framework SDK proporciona la herramienta winres.exe (editor de re-
cursos de formularios Windows), que permite localizar rápidamente formularios
Windows para las referencias culturales de destino.

CLASE CultureInfo
La clase CultureInfo especifica un nombre único para cada referencia cultural
como una combinación de un código de referencia cultural (dos letras en minús-
culas asociado con un idioma), y un código de referencia cultural secundaria (dos
letras en mayúsculas asociado con un país o región) separados por un guión (-).
Por ejemplo, “en-US” para el inglés de EEUU y “es-ES” para el español de Espa-
ña. Por ejemplo, el siguiente código muestra todas las referencias culturales por
medio del método GetCultures de CultureInfo:

Imports System
Imports System.Globalization

Public Class CInfoCultura
Public Shared Sub Main()
Dim info As CultureInfo
For Each info In CultureIn-
fo.GetCultures(CultureTypes.AllCultures)
' Mostrar todas las referencias culturales
Console.WriteLine("{0,-12} {1}", info, info.DisplayName)
Next info
End Sub
End Class

Siguiendo con el ejemplo anterior, vamos a añadir a la clase CInfoCultura un
método Cultura que muestre información de una cultura específica.

Public Shared Sub Cultura(ByVal sInfo As String)
Dim info As CultureInfo = New CultureInfo(sInfo)
Console.WriteLine("{0,-12} {1}", info, info.DisplayName)
Console.WriteLine("Formato de fecha: {0}", _
DateTime.Now.ToString(info.DateTimeFormat.ShortDatePattern))
Console.WriteLine("Separador de decimales: {0}", _
info.NumberFormat.CurrencyDecimalSeparator)
Console.WriteLine()
End Sub

Para invocar al método anterior, añada al método Main sentencias análogas a
las siguientes:
APÉNDICE C: INTERNACIONALIZACIÓN 1095

Cultura("en-US")
Cultura("es-ES")

Propiedad CurrentUICulture
La propiedad CurrentUICulture de CultureInfo devuelve la referencia cultural
de la interfaz de usuario actual. Por ejemplo:

Public Shared Sub CulturaActual()
Dim info As CultureInfo = Nothing
info = CultureInfo.CurrentUICulture

Console.Write("Cultura actual: ")
Console.WriteLine("{0, -12} {1}", info, info.DisplayName)
End Sub

También puede utilizar la propiedad CurrentUICulture de Thread.Cu-
rrentThread. Por ejemplo:

info = System.Threading.Thread.CurrentThread.CurrentUICulture

La clase ResourceManager utiliza esta propiedad para buscar recursos espe-
cíficos de la referencia cultural durante la ejecución.

Para configurar la propiedad CurrentUICulture, se puede utilizar una refe-
rencia cultural neutra (por ejemplo, “en”) o específica (por ejemplo, “en-US”), o
la propiedad InvariantCulture. Por ejemplo, la siguiente línea establece la refe-
rencia cultural neutra “en” (inglés). Las referencias culturales neutras se asocian a
idiomas pero no a regiones.

Thread.CurrentThread.CurrentUICulture = New CultureInfo("en")

Y esta otra línea establece la referencia cultural específica “en-US” (inglés de
Estados Unidos):

Thread.CurrentThread.CurrentUICulture = New CultureInfo("en-US")

Propiedad CurrentCulture
La propiedad CurrentCulture de CultureInfo no es una configuración de idio-
ma, sino que determina los formatos predeterminados para la fecha, hora, moneda
y números, el criterio de ordenación de texto, las comparaciones de cadenas y la
distinción entre mayúsculas y minúsculas. Sólo se puede establecer para una refe-
1096 ENCICLOPEDIA DE MICROSOFT VISUAL BASIC

rencia cultural específica o para InvariantCulture. Para establecer el valor de es-
ta propiedad puede utilizar la propiedad Thread.CurrentThread. Por ejemplo:

Thread.CurrentThread.CurrentCulture = New CultureInfo("en-US")

Propiedad InvariantCulture
La propiedad InvariantCulture de CultureInfo no es una referencia cultural
neutra ni específica. Es un tercer tipo que no tiene en cuenta la referencia cultural.
Se encuentra asociada al idioma inglés pero a ningún país o región. Se puede uti-
lizar InvariantCulture en cualquier método que requiera una referencia cultural.
No obstante, deberá utilizarla únicamente para los procesos que requieran resulta-
dos independientes de la referencia cultural.

APLICACIÓN EJEMPLO
Vamos a realizar un ejemplo sencillo que nos enseñe a internacionalizar una apli-
cación. Como podremos comprobar, será el propio Visual Studio el que se encar-
gue de adaptar cada elemento de la interfaz a cada idioma.

Nuestra aplicación utilizará como idioma predeterminado el español y, ade-
más, el idioma inglés. La interfaz gráfica de la misma constará de dos formula-
rios: el formulario principal y el formulario “Acerca de”. El formulario principal
incluirá una barra de menús, con los menús “Archivo”, “Opciones” y “Ayuda”,
una caja de texto, un botón y una barra de estado. El menú “Archivo” incluirá una
orden “Salir”, “Opciones” contendrá un submenú “Idioma” con las órdenes “Es-
pañol” e “Inglés”, y el menú “Ayuda” la orden “Acerca de...”.

Generar ficheros de recursos automáticamente
Para empezar crearemos una nueva aplicación Windows. Se mostrará el formula-
rio Form1.

A continuación, asignamos a la propiedad Localizable de Form1 el valor
True. De esta forma, todas las propiedades persistirán en el fichero de recursos,
con la ventaja de que este fichero se puede traducir sin modificar el código.

La propiedad Language asume un valor que hace referencia al lenguaje pre-
determinado (Default), en nuestro caso al español. Por lo tanto, en principio, no
modificaremos el valor de esta propiedad.
APÉNDICE C: INTERNACIONALIZACIÓN 1097

Añadimos al formulario todos los recursos enumerados anteriormente. Estos
recursos se almacenarán en el fichero Form1.resx.

Para realizar el diseño en otro idioma, asignamos a la propiedad Language
dicho idioma; en nuestro caso, le asignamos el valor English. El diseñador mos-
trará en la pestaña “Form1.vb[Diseñar – Inglés]”. A continuación, modificaremos
todos los elementos que deben mostrar su contenido en inglés (menús, acelerado-
res, botones, etc.). Obsérvese que podemos cambiar el valor, no sólo de la propie-
dad Text, sino de otras muchas propiedades (ShortcutKeys, Size, Location, etc.).

Cuando finalicemos este proceso, podremos observar en el explorador de so-
luciones que se ha añadido un nuevo fichero de recursos, Form1.en.resx, que con-
tiene los recursos en inglés.
1098 ENCICLOPEDIA DE MICROSOFT VISUAL BASIC

En este instante (propiedad Language con valor English) estamos visualizan-
do el formulario en la versión inglés. Si cambiamos el valor de la propiedad Lan-
guage a “Predeterminado - Default”, volveremos a la versión en español.

Una vez finalizado el diseño del formulario principal en sus distintos idiomas,
haremos lo mismo con el resto de los formularios de la aplicación; en nuestro ca-
so, con el formulario “Acerca de”:

Los controladores para las órdenes “Salir” y “Acerca de” serán los siguientes:

Private Sub ArchivoSalir_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles ArchivoSalir.Click
Close()
End Sub

Private Sub AyudaAcercaDe_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles AyudaAcercaDe.Click
Dim dlg As AcercaDe = New AcercaDe()
dlg.Show()
End Sub
APÉNDICE C: INTERNACIONALIZACIÓN 1099

Mostrar recursos específicos
Para mostrar los recursos de la aplicación bajo una referencia cultural determinada
utilizaremos el siguiente código:

Imports System.Globalization
Imports System.Threading
' ...
Thread.CurrentThread.CurrentCulture = New CultureInfo("en-US")
Thread.CurrentThread.CurrentUICulture = New CultureInfo("en-US")

La asignación del objeto CultureInfo deberá hacerse antes de invocar al mé-
todo InitializeComponent, ya que el gestor de recursos ResourceManager de-
terminará qué recursos recuperar en función de la propiedad CultureIn-
fo.CurrentUICulture del subproceso actual. La clase ResourceManager pro-
porciona acceso a recursos específicos de la referencia cultural en tiempo de eje-
cución.

En nuestro ejemplo, este proceso tendremos que ejecutarlo desde las órdenes
“Español” e “Inglés” del menú “Opciones”:

Private Sub OpcionesIdiomaEspañol_Click( _
ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles OpcionesIdiomaEspañol.Click
Thread.CurrentThread.CurrentCulture = New CultureInfo("es-ES")
Thread.CurrentThread.CurrentUICulture = New CultureInfo("es-ES")
Me.Controls.Clear()
Me.InitializeComponent()
End Sub

Private Sub OpcionesIdiomaInglés_Click( _
ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles OpcionesIdiomaInglés.Click
Thread.CurrentThread.CurrentCulture = New CultureInfo("en-US")
Thread.CurrentThread.CurrentUICulture = New CultureInfo("en-US")
Me.Controls.Clear()
Me.InitializeComponent()
End Sub

Obsérvese que antes de invocar al método InitializeComponent eliminamos
los controles actuales del formulario (colección Controls), porque si no, al crear-
los de nuevo, se duplicarían.
1100 ENCICLOPEDIA DE MICROSOFT VISUAL BASIC

Agregar ficheros de recursos de forma manual
Ficheros análogos a Form1.en.resx pueden ser también añadidos y editados ma-
nualmente. Para ello, simplemente hay que hacer clic con el botón secundario del
ratón en el nombre del proyecto y seleccionar Agregar nuevo elemento del menú
contextual. Seleccionar en el diálogo que se visualiza la plantilla Archivo de re-
cursos y escribir un nombre para el fichero .resx. Finalizar haciendo clic en el bo-
tón Aceptar. El nombre del fichero tendrá la sintaxis siguiente:

RaízDelNombre.idioma-region.resx

El fichero se agregará al proyecto en el Explorador de soluciones y se abrirá
automáticamente el diseñador que le permitirá editar el fichero. Se obtendrá acce-
so a estos recursos cada vez que la aplicación no pueda encontrar recursos más
adecuados para la referencia cultural de la interfaz de usuario.

En cualquier instante durante el diseño, podemos abrir y editar un fichero
.resx haciendo clic con el botón secundario del ratón en el nombre del mismo y
seleccionando Ver diseñador en el menú contextual.

Como ejemplo, vamos a añadir los ficheros .resx con los recursos especifica-
dos a continuación:

Nombre del fichero .resx Nombre del recurso Valor
Form1.es-ES.resx cad01 Hola
Form1.en-US.resx cad01 Hello

La cadena de caracteres nombrada cad01 será mostrada en la caja de texto de
Form1 cuando el usuario haga clic en el botón Aceptar.

El fichero Form1.es-ES.resx contendrá recursos que son específicos del espa-
ñol hablado en España, y el fichero Form1.en-US.resx contendrá recursos que son
específicos del inglés hablado en EEUU.

Para acceder a estos recursos, añada a Form1 el controlador del evento Click
del botón y edítelo como se indica a continuación:

Imports System.Resources
' ...

Private Sub btAceptar_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btAceptar.Click
Dim rm As Resources.ResourceManager = _
New Resources.ResourceManager("InfoCulturaWin.Form1", _
GetType(Form1).Assembly)
APÉNDICE C: INTERNACIONALIZACIÓN 1101

Me.TextBox1.Text = rm.GetString("cad01")
End Sub

El constructor de ResourceManager toma dos argumentos: raíz del nombre
de los recursos, es decir, el nombre del fichero de recursos sin la referencia cultu-
ral ni la extensión .resx, y el ensamblado principal. Obsérvese que para el nombre
del fichero se ha especificado el espacio de nombres.

Para acceder al recurso String cad01 especificado en la referencia cultural ac-
tual, se invoca al método GetString de ResourceManager.

De forma predeterminada, el objeto ResourceManager distingue entre ma-
yúsculas y minúsculas. Si no se desea hacer esta distinción, hay que asignar true a
la propiedad IgnoreCase de ResourceManager.

Si ahora compila y ejecuta la aplicación y hace clic en el botón Aceptar de
Form1, observará que la caja de texto mostrará el recurso cad01 correspondiente
al idioma elegido.

¿Por qué no hemos añadido estos recursos a los ficheros .resx generados au-
tomáticamente cuando diseñamos la aplicación? Porque al ser administrados por
el diseñador de formularios, los recursos que introduzcamos serán eliminados la
próxima vez que el diseñador modifique esos ficheros.

Como alternativa, podríamos añadir estos recursos al fichero Resources.resx
del proyecto, pero entonces tendríamos que especificarlos de forma análoga a co-
mo se indica a continuación:

Nombre del fichero .resx Nombre del recurso Valor
Resources.resx cad01_es Hola
Resources.resx cad01_en Hello

Ahora, para acceder a estos recursos, tendríamos que escribir el controlador
del evento Click así:

Imports System.Resources

' ...
1102 ENCICLOPEDIA DE MICROSOFT VISUAL BASIC

Private Sub btAceptar_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btAceptar.Click
Dim rm As Resources.ResourceManager = _
New Resources.ResourceManager("InfoCulturaWin.Resources", _
GetType(Form1).Assembly)
If (CultureInfo.CurrentUICulture.Name = "es-ES") Then
Me.TextBox1.Text = rm.GetString("cad01_es")
Else
Me.TextBox1.Text = rm.GetString("cad01_en")
End If
End Sub
APÉNDICE D
 F.J.Ceballos/RA-MA

.NET PARA LINUX
Los desarrolladores sobre GNU/Linux pueden ahora también desarrollar aplica-
ciones multiplataforma basadas en .NET gracias al proyecto Mono.

¿Qué es Mono? Es un proyecto para construir una plataforma de desarrollo li-
bre, basada en Linux, compatible con Microsoft .NET. Durante su desarrollo, ha
contado con el apoyo de algunos pesos pesados de la industria informática, sobre
todo del mundo Linux. Es el caso de Ximian, empresa dirigida por el mejicano
Miguel de Icaza, que se mostró interesada en colaborar con el desarrollo de este
entorno de programación desde el principio. Más tarde, la compañía norteameri-
cana Novell adquirió esta empresa y se constituyó en uno de sus principales pa-
trocinadores.

Mono en su versión 3.x, incluye un compilador para C# y bibliotecas de eje-
cución (runtimes) para Java y Visual Basic, así como otras herramientas de ayuda
al desarrollo de aplicaciones multiplataforma (cross-platform; para varias compu-
tadoras/sistemas operativos).

Mono 3.x se encuentra disponible para Linux, Mac OS X y Windows. Para
más detalles sobre el futuro de este proyecto visite la página Web
http://www.mono-project.com. En esta página encontrará también un enlace,
Downloads, desde el cual podrá descargarse el software correspondiente a Mono
para las distintas plataformas anteriormente comentadas, así como instrucciones
para su utilización.

Si está interesado en desarrollar sobre una máquina Linux utilizando Mono,
puede encontrar información precisa y ejemplos en mi libro Aplicaciones .NET
multiplataforma (proyecto Mono); este libro, aunque esté escrito en C#, no es más
que una extensión a esta enciclopedia para que vea cómo puede aplicar todo lo
aprendido en la misma, sobre una máquina Linux con Mono.
ÍNDICE
acoplar un control a su contenedor, 223 
.  action, 1077, 1079 
Activate, 63, 64 
.NET, 4, 8  Activated, 63 
.NET Framework, 5  ActiveForm, 63 
ActiveMdiChild, 346 
actualizar las filas, 680 
@  actualizar y eliminar filas, EntityDataSource, 839 
@ Page, 781, 971  actualizar y eliminar filas, modelo de enlace, 852 
@ Register, 977  adaptador, 504 
Add, 55, 126, 231, 583 
Add, colección, 162 
A  Added, 499 
a, etiqueta HTML, 1073  AddHandler, 61 
abort, 1004  AddNew, 483 
Abort, 398  AddRange, 127 
abrir documento, 354  address, 882 
acceder a un nodo, 260  administración de sitios web, 941 
AcceptButton, 83, 85, 178, 368  ADO.NET, 9, 496 
AcceptsReturn, 140  AfterSelect, 263 
AcceptsTab, 140  agregar datos, 910 
acceso a datos desde un formulario web, 819  AJAX, 1001, 1028 
acceso a datos utilizando componentes, 560  Ajax Control Toolkit, 979 
acceso anónimo, 924  AJAX, envío de datos utilizando el método POST, 
acceso anónimo, deshabilitar, 926  1011 
acceso conectado a bases de datos, 509  AJAX, llamadas fuera de dominio, 1010 
acceso desconectado a bases de datos, 555, 559  AJAX, llamadas que producen errores o que no 
accesos directos, 1073  retornan, 1010 
Access, 502  align, 1074 
aceleradores, 129  alineación del texto, 54, 364 
Acerca de, 181, 328  alisado, 302 
acoplar control, 140  AllowFullOpen, 221 
1106 ENCICLOPEDIA DE MICROSOFT VISUAL BASIC

AllowMerge, 345  archivo de aplicación de ASP.NET, 796 
AllowsTransparency, 65  área cliente, 64 
alt, 1074  área de texto, 1080 
ámbito de aplicación, 810  argumentos en la línea de órdenes, 75, 1051 
ámbito de sesión, 811  arrastrar y soltar, 366 
Anchor, 223, 367  ArrayList, 442 
animación, 336  asincrónico, modelo, 893 
añadir menú, 128  asociación, 657 
añadir texto a una caja de texto, 91  ASP, 1091 
añadir un botón a la barra de h., 135  ASP.NET, 725, 1092 
añadir un control a la barra de estado, 137  ASP.NET AJAX, 1018 
añadir un nuevo registro, 582  ASP.NET, acceso a los recursos, 790 
añadir un usuario que tenga una función, 954  ASP.NET, arquitectura, 920 
añadir una nueva fila a una rejilla, 482  ASP.NET, carpetas, 778 
aplicación ASP.NET cliente de un servicio web,  ASP.NET, instalación, 1057 
992  aspnet_compiler, 797 
aplicación web, 1092  aspnet_regiis, 1057 
aplicación web de IIS, 744  assembly, 11 
aplicación, ciclo de vida, 71  Assembly, 70 
aplicación, crear, 16  AsyncPostBackErrorMessage, 1021 
aplicación, depurar, 33  AsyncPostBackTimeout, 1021 
aplicación, desarrollo, 82  AsyncPostBackTrigger, 1030 
aplicación, instanciar sólo una vez, 75  ataques de inyección SQL, 513 
aplicaciones de consola, 1046  atributos de anotación de datos, 704, 710 
aplicaciones web, 774  atributos globales de una aplicación, 70 
App.config, 67  atributos proveedores de valores, 848 
App_Browsers, 778  Attach, 683, 903 
App_Code, 749, 778  AttachDBFilename, 1052 
App_Data, 778  autenticación ASP.NET, 927 
App_GlobalResource, 778  autenticación básica con conexión SSL, 962 
App_LocalResources, 778  autenticación de IIS, 927 
App_Themes, 778, 980  autenticación mediante formularios, 934 
App_WebReferences, 778  autenticación Windows, 926 
Appearance, 185, 189  authentication, 927 
AppendText, 144  authorization, 927, 930, 956 
applets, 1092  AutoEventWireup, 751, 785 
Application, 50, 63, 71, 803  AutoPostBack, 786, 787, 1024 
Application_Error, 841  AutoResetEvent, 410, 414 
ApplicationExit, 72  autoridad de certificación, 962 
árbol, 254  autorización, 930 
árbol, acceder a un nodo, 260  AutoValidate, 96 
árbol, añadir imágenes para los nodos, 257  ayuda dinámica, 18 
árbol, añadir nodos, 256 
árbol, añadir y borrar un nodo, 264 
árbol, arquitectura, 255 

árbol, iniciar, 258  BackColor, 109 
árbol, nodos, 255  BackgroundWorker, 404 
árbol, personalizar, 269  barra de desplazamiento, 25, 44, 203 
árbol, recorrer, 264  barra de desplazamiento, eventos, 206 
árboles de expresiones, 629  barra de direcciones, 1068 
ÍNDICE 1107

barra de estado, 136  borrar un control, 27 
barra de herramientas, 134  borrar un registro, 584 
barra de herramientas y de estado, 361  botón borrar, 1079 
barra de menús, 24, 43, 124  botón de opción, 24, 188, 1078 
barra de menús, crear, 126  botón de pulsación, 23, 56, 82 
barra de progreso, 208  botón enviar, 1079 
Barra de título, 44  botón predeterminado, 83, 85, 178 
barras de desplazamiento, 323  br, 1070 
barras de herramientas, fusionar, 351, 371  Brush, 301 
barras, añadir, 322  bucle de mensajes, 46 
base de datos, 487  buscar en una lista, 194 
base de datos accedida desde un servicio web,  buscar un registro, 584 
991  Button, 53, 81, 82 
base de datos basada en servicio, 597  ButtonBase, 81 
base de datos local, 597 
base de datos SQL Server, crear, 588 
base de datos, añadir las tablas, 589, 598 

base de datos, crear, 597, 1052  CA, 962 
base de datos, diagrama visual, 600, 601  Cache, 816 
base de datos, navegar, 579  caché, 812 
bases de datos, mover, 1052  caché con SQL Server, 816 
BeginEdit, 548  cadena de consulta, 806 
BeginInvoke, 400  caja de clave de acceso, 1078 
BeginUpdate, 157, 194  caja de diálogo Abrir, 217 
biblioteca de clases, 9  caja de diálogo Color, 220 
Bin, 778  caja de diálogo de entrada, 174 
binary, 897  caja de diálogo Fuente, 221 
BinaryExpression, 632  caja de diálogo Guardar, 219 
Bind, 756  caja de diálogo modal o no modal, 170 
binding, 882  caja de diálogo modal, cerrar, 180 
Binding, 431  caja de diálogo no modal, cerrar, 236 
BindingComplete, 438  caja de diálogo para mostrar un mensaje, 170 
BindingContext, 441  caja de diálogo, crear, 177 
BindingList, 440  caja de diálogo, mostrar, 178 
BindingList, propiedades, 552  caja de diálogo, recuperar datos, 179 
BindingListView, 471, 673  caja de herramientas, 22 
BindingManagerBase, 441  caja de imagen, 24, 320 
BindingNavigator, 586  caja de imagen, Image, 324, 325 
BindingSource, 432, 434, 440, 451, 453, 460,  caja de texto, 24, 82, 1077 
463, 544, 578, 581, 612  caja de texto multilínea, 139 
BindItem, 756  caja de texto, seleccionar el contenido, 90 
Bitmap, 296, 322  cajas de diálogo estándar, 216 
bloquear los controles, 29  cajas de diálogo personalizadas, 176 
BMP, 321  calculadora, 105 
body, 1069  calendario, 25 
Bold, 364  callback, 1004 
border, 1083  cambios en los datos, 675 
borrar datos, 911  cambios en los datos, notificar, 433 
borrar registros en una tabla, 491  cambios, seguimiento, 695 
borrar tabla de la base de datos, 491  campos, 487 
1108 ENCICLOPEDIA DE MICROSOFT VISUAL BASIC

Cancel, 96  ciclo de vida de una aplicación, 71 
cancelar una llamada asíncrona, 1033  ciclo de vida de una página web, 784 
CancelAsync, 407  clase, 57 
CancelButton, 178, 368  clase Application, 50 
CancelEdit, 548  clase Binding, 431 
CancelEventArgs, 96  clase Bitmap, 296, 322 
CancellationPending, 407  clase Button, 53 
CanRedo, 360  clase Cache, 816 
CanUndo, 143, 154, 360  clase CheckBox, 53, 184 
capa de acceso a datos, 537  clase CheckedListBox, 198 
capa de lógica de negocio, 541  clase Clipboard, 142 
capa de presentación, 533  clase Color, 109 
capa de presentación, desacoplar, 547  clase ColorDialog, 220 
capa de presentación, lógica, 544  clase ColorMatrix, 318 
capas de servicios de la red, 1062  clase ComboBox, 54, 198 
cargar imagen, 324  clase ConfigurationManager, 827 
carpeta virtual, 741  clase Control, 82 
carpetas ASP.NET, 778  clase Convert, 192 
cascada, 362  clase ConvertEventArgs, 437 
cascada, operaciones en, 687  clase CultureInfo, 1094 
casilla de verificación, 24, 184, 1078  clase Cursor, 329 
Category, 379  clase Cursors, 329 
CellBeginEdit, 547  clase DataGridView, 242 
CellClick, 253  clase DataGridViewColumn, 243 
CellDoubleClick, 482  clase DataGridViewRow, 243 
CellEnter, 467  clase DataRow, 499 
CellFormatting, 247  clase DataTable, 499 
Cells, 244  clase DbContext, 662 
CellValidated, 478  clase de entidad, 661, 700 
CellValidating, 478  clase Debug, 129 
center, 1075  clase EventWaitHandle, 413 
CenterParent, 177  clase FontDialog, 222 
centrar ventana, 283  clase Form, 48 
cerrar, 44  clase Graphics, 296 
cerrar formulario, 129  clase GroupBox, 188 
certificado de cliente, 963, 966  clase Image, 322 
certificado de cliente es rechazado, 968  clase Label, 53 
certificado de servidor, 961, 964  clase ListBox, 54, 193 
certificados, generar o solicitar, 963  clase ListView, 269 
CGI, 1090  clase Membership, 953 
ChangePassword, control, 951  clase MembershipUser, 953 
ChangeTracker, 678, 696  clase MenuStrip, 126 
chat, 915  clase Metafile, 322 
CheckBox, 53, 81, 184  clase OpenFileDialog, 217 
Checked, 153, 185, 189  clase Page, 784 
CheckedChanged, 187, 192  clase Panel, 188 
CheckedListBox, 198  clase Point, 55 
CheckOnClick, 153  clase ProgressBar, 208 
CheckState, 185  clase RadioButton, 54, 188 
CheckStateChanged, 188  clase Regex, 102, 438 
ÍNDICE 1109

clase ResourceManager, 132  código no administrado, 11 
clase ScrollBar, 54, 203  colección, 162 
clase seriable, 229  colección como origen de datos, 440 
clase Size, 50, 55  colección ConstraintCollection, 499 
clase TextBox, 53, 141  colección ControlBindingsCollection, 579 
clase TextBoxBase, 143  colección DataColumnCollection, 499 
clase Thread, 395  colección DataRelationCollection, 499 
clase Timer, 224  colección DataRowCollection, 499, 583 
clase TimeSpam, 226  colección DataTableCollection, 499 
clase ToolStrip, 121  colección de elementos, 24 
clase ToolStripButton, 135  colección jerárquica, 25 
clase ToolStripItem, 121  colección, añadir, 197 
clase ToolStripItemCollection, 127  colección, borrar, 197 
clase ToolStripMenuItem, 126  colección, borrar todo, 197 
clase ToolStripSeparator, 128  colección, insertar, 197 
clase TrackBar, 207  colocar el control, 29 
clase TreeNode, 255  Color, 109, 220, 299 
clase TreeView, 254  color, establecer, 109 
clase Type, 263  Color, propiedad, 221, 222 
clase UserControl, 375, 976  ColorDialog, 217, 220 
clase WaitHandle, 412  ColorMatrix, 318 
clase, definición parcial, 86  columnas, 487 
clases, 9  ColumnCount, 254 
clases POCO, 701  Columns, 243 
clave de un nodo, 255  Columns de ListView, 272 
clave pública, 959  COM, 12 
Clear, 144, 197  COM+, 13 
ClearError, 841  combinar menús, 345 
clearTimeout, 1011  ComboBox, 54, 81, 198 
clic en un botón, 469  Command, 500, 503 
clic en un botón, simular, 117, 583  CommandBuilder, 529 
clic sobre un botón, 583  CommandField, 866 
Click, 46, 87  CommandName, 765 
Client certificate revoked, 968  CommonDialog, 216 
cliente servidor, 723  compilador JIT, 11 
cliente WCF, 884  Complete, 613 
ClientScript, 1017  Component, 80 
ClientSize, 50  componente, 80 
ClientWins, 693  componentes de acceso a datos, 531 
clipboard, 327  concurrencia, 556, 689, 895 
Clipboard, 142  ConcurrencyCheck, 691 
Close, 65, 129, 180, 183, 504  ConcurrencyMode, 689 
CLR, 9  conexión abierta/cerrada, 663 
CLS, 6  conexión, probar, 508 
code, 1071  configuración de la aplicación, 67 
Code First, 700  configuración, fichero, 528, 927 
Code First, convenciones, 704  configurar el almacenamiento en caché, 813 
CodeFile, 781  configurar IIS, 928 
código administrado, 11  Configuration, 697, 927 
código intermedio, 9  ConfigurationManager, 528, 827 
1110 ENCICLOPEDIA DE MICROSOFT VISUAL BASIC

confirmar, 173  control Substitution, 814 
conjunto de datos, 498  control Table, 733 
conjunto de datos, crear, 566, 590  control TextBox, 730 
Connection, 500  control web para acceso a datos, 820 
ConnectionStrings, 528, 827  Control, atributo proveedor de valor, 848 
ConstantExpression, 632  control, borrar, 27 
Constraint, 499  control, mover, 27 
ConstraintCollection, 499  Control.DataBind, 752 
construir controles, 373  controlador de eventos, 30, 59 
consultas parametrizadas, 838  controlador para un evento, 61 
contenedor, 24  controladores de espera, 412 
contenedor UpdatePanel, 1028  controladores de eventos, asignar, 61 
contenedor UpdateProgress, 1032  ControlBox, 177 
Content, 917, 972, 1024  controles, 45, 1077 
ContentAlignment, 54  controles con enlaces a datos, 734 
ContentPlaceHolder, 971, 1024  controles de rango definido, 203 
ContextMenuStrip, 159, 480  controles de servidor HTML, 727 
contexto de objetos, 661, 662  controles de servidor web, 727 
contextos de corta duración, 675  controles de usuario, 728 
contract, 882  controles de usuario web, 974 
contrato, 875  controles de validación, 727, 734, 792, 793 
contrato de datos, 880  controles HTML, 728 
contrato de servicio, 876  controles para inicio de sesión, 938 
Control, 80, 81, 183  controles Strip, 323 
control Button, 732  controles web, 729 
control Calendar, 733  controles, construir, 373 
control ChangePassword, 951  controles, enlazar o vincular con BD, 577 
control CheckBox, 730  Controls, 55 
control CheckBoxList, 730  ControlUpdateMode, propiedad, 431 
control CreateUserWizard, 947  conversión de datos, 114 
control DataGridView, 567, 573  conversiones en enlaces, 435 
control DetailsView, 1026  Convert, 88, 192 
control DropDownList, 732  ConvertEventArgs, 437 
control GridView, 953, 1025  ConvertEventHandler, 436 
control HyperLink, 733  convertir un Date en un String y viceversa, 385 
control Label, 730  convertir un entero en base 10, 8 o 16, en una 
control LinkButton, 732  cadena de caracteres, 193 
control ListBox, 731  convertir una cadena de caracteres a un entero 
control Literal, 976  en base 10, 8 o 16, 192 
control Login, 938  cookies, 804 
control LoginName, 951  coordenadas, 313 
control LoginStatus, 939  coordenadas universales, 332 
control LoginView, 939  coordenadas, tipos, 317 
control Panel, 733  coordinador de transacciones distribuidas, 614 
control PasswordRecovery, 950  Copy, 144 
control RadioButton, 731  correo electrónico, 1065 
control RadioButtonList, 731  cortar, copiar y pegar, 359 
control RichTextBox, 352  Count, 442, 581, 627 
control ScriptManagerProxy, 1028  crear un adaptador, 561 
control SqlDataSource, 1024  crear un enlace, 433, 443 
ÍNDICE 1111

crear una aplicación, 16  Database, 705 
crear una aplicación MDI, 344  Database First, 652, 700 
crear una base de datos, 488, 493, 495  DataBind, 752, 753 
crear una caja de diálogo, 177  DataBinder, 755 
crear una conexión, 565  DataBindings, 432, 577 
crear una imagen a partir de un fichero, 260  DataColumn, 499, 575 
crear una tabla, 488  DataColumnCollection, 499 
CREATE DATABASE, 488  DataContract, 880 
CREATE TABLE, 488  DataError, 477 
CreateDatabaseIfNotExists, 708  DataGridView, 81, 242, 456, 460, 533, 544, 567, 
CreateGraphics, 298  573 
CreateUser, 953  DataGridView, arquitectura, 243 
CreateUserWizard, control, 947  DataGridView, construir, 244 
credentials, 935  DataGridView, control de errores, 476 
criptografía asimétrica, 959  DataGridView, iniciar, 246 
criptografía simétrica, 959  DataGridView, n.º de filas y columnas, 254 
CRL, 968  DataGridView, origen de datos, 249 
CRUD, 704  DataGridView, tamaño de las celdas, 252 
CSDL, 644  DataGridView, validar, 555 
CSS, 973, 1001, 1023, 1084  DataGridView, valor de la celda, 253 
CSS, atributos, 1084  DataGridViewColumn, 243 
CSS, class, 1086  DataGridViewRow, 243 
CSS, div, 1088  DataMember, 463, 567, 751, 880 
CSS, id, 1087  DataReader, 500, 504 
CSS, link, 1085  DataRelationCollection, 499 
CSS, pseudoclases, 1087  DataRow, 499 
CSS, span, 1088  DataRowCollection, 499, 583 
CSS, style, 1084  DataRowView, 431, 584 
cuadro combinado, 198  DataSet, 431, 555, 575 
cultura, 1094  DataSet, métodos, 556 
CultureInfo, 1094  DataSource, 442, 445, 460, 521, 558, 567, 751 
CurrencyManager, 441, 453  DataSource de DataGridView, 250 
Current, 442, 584  DataSourceID, 751 
CurrentCell, 253  DataSourceObject, 751 
CurrentCulture, 1095  DataSourceUpdateMode, propiedad, 431 
CurrentItem, 465, 472  DataTable, 431, 499, 575 
CurrentUICulture, 1095  DataTableCollection, 499 
CurrentValues, 698  DataTextField, 751 
Cursor, 329  DataTextFormatString, 751 
cursor del ratón, cambiar, 329  DataValueField, 752 
Cursors, 329  DataView, 431, 471 
curvas cardinales y de Bézier, 307  DataViewManager, 431, 575 
Cut, 144  Date, 381, 385 
DateTime, 381 
D  DateTimeFormatInfo, 385 
DateTimePicker, 212 
Data Mapper, 649  DbCommand, 526 
Data Transfer Object, 532  DbCommandBuilder, 529 
DataAdapter, 500, 569  DBConcurrencyException, 564 
DataAdapter, métodos, 556  DbConnection, 526 
1112 ENCICLOPEDIA DE MICROSOFT VISUAL BASIC

DbContext, 650, 659, 700  Dispose, 50, 180, 183, 511 
DbDataAdapter, 526  dispositivos 
DbEntityEntry, 678, 683, 697, 764, 853  matriciales y vectoriales, 294 
DbProviderFactories, 526  DNS, 1063 
DbProviderFactory, 501, 526  doble búfer, 339 
DbQuery, 650  Dock, 140, 223 
DbSet, 650, 659  documento XML, 1009 
DbSet (Of TEntity), 650  DoEvents, 414 
DbSet(Of ), 663  DOM, 1002 
DbUpdateConcurrencyException, 689  dominio, 1063 
DCOM, 13  DoubleBuffered, 339 
Deactivate, 63  DoWork, 404 
Debug, 129  DrawArc, 306 
debugger, 1058  DrawBezier, 307 
defaultRedirect, 841  DrawCurve, 307 
delegado, 59  DrawEllipse, 305 
delegado Func, 625  DrawLine, 304 
delegados, 399, 623  DrawPie, 306 
Delete, 584, 823  DrawPolygon, 306 
DELETE, 491  DrawRectangle, 304 
DeleteCommand, 505  DROP TABLE, 491 
Deleted, 499  DropCreateDatabase..., 708 
DeleteMethod, 762  DropDown, 161 
depuración, 129  DropDownItems, 162 
depurar, 1049  DropDownList, 751 
depurar una aplicación, 33  DropDownOpening, evento, 152 
descripción abreviada, 56, 57  DropDownStyle, 199 
Description, 379  DTC, 614 
deshacer, 144, 154, 352, 360 
deslizador, 207 
Detach, 896 

DetailsView, 836, 851, 869, 1026  editar un recurso, 69, 130 
DHTML, 1002  editor de menús, 124 
diálogo Acerca de, 181  editor de texto MDI, 348 
diálogo modal, cerrar, 180  editor de textos, 138 
diálogo no modal, 233  ejecución asíncrona de servicios web, 890 
diálogo no modal, cerrar, 235, 236  ejecutar, 22 
diálogo, ¿está visible?, 237  Elapsed, 226 
diálogo, ocultar, 236  Elapsed, evento, 225 
DialogResult, propiedad de un botón, 179  elemento actual, 465, 472 
DialogResult, propiedad de un formulario, 179  elemento de un menú, marcar, 154 
DialogResult, valor retornado..., 172  eliminar filas, 685 
dibujar formas, 341  eliminar un recurso, 131 
dirección, 875  e‐mail, 1065 
dirección de Internet, 1064  Email, 957 
dirección IP, 1064  EnableAutoDragDrop, 366 
directorio virtual, 741  Enabled, 153 
dirigirse a otra URL, 938  EnablePageMethods, 1039 
diseño de tipo maestro‐detalle, 461, 587  EnablePartialRendering, 1021 
DisplayMember, 445, 521, 558  EndEdit, 548 
ÍNDICE 1113

EndInvoke, 400  evento, 46 
endpoint, 882  evento ‐ método, 61 
EndUpdate, 157, 194  evento ApplicationExit, 72 
enfocar un componente, 89  evento CellBeginEdit, 547 
enlace a colecciones, 442  evento CellFormatting, 247 
enlace a datos, 753  evento Click, 87 
enlace con otros controles, 435  evento Enter, 90 
enlace de datos, 423, 574  evento FormClosing, 365, 569 
enlace de datos .NET, 430  evento Idle, 72 
enlaces, 875, 883, 1073  evento KeyPress, 87 
Enter, 90  evento Load, 89, 568 
entidad, 656  evento MouseClick, 90 
Entity Client, 645  evento Paint, 294 
Entity Framework, 643  evento PreInit, 982 
Entity SQL, 645  evento PrintPage, 358 
EntityCollection, 664  evento PropertyChanged, 427 
EntityDataSource, 829  evento Selecting, 838 
EntityDataSourceView, 843  evento SelectionChange, 363 
EntityKey, 695  evento Shown, 89 
EntitySet, 695  evento Shutdown, 73 
entorno de desarrollo integrado, 1045  evento Startup, 73 
entorno de ejecución, 9  evento StartupNextInstance, 73 
entrada de datos, 1077  evento TextChanged, 87, 426 
Entries, 693  evento ThreadException, 72 
Entry, 678, 697, 764, 853  evento ThreadExit, 72 
Enum, 111  evento UnhandledException, 73 
enumeración ContentAlignment, 54  evento UserDeletingRow, 546 
enumeración Keys, 130  evento Validated, 98 
error, notificar, 97  evento Validating, 96 
errores en una página ASP.NET, controlar, 841,  evento, suscribir, 30 
855  eventos, 30, 58 
errores, control en DataGridView, 476  eventos del ratón, 334 
ErrorProvider, 97  eventos del teclado, 86 
ErrorText, 479  eventos KeyDown y KeyUp, 94 
escribir datos en una tabla, 490  eventos KeyDown y KeyUp y KeyPress, 94 
espacios de nombres, 32  eventos más comunes, 59 
especificación de lenguaje común, 6  eventos, lista, 30 
eSQL, 645  eventos, responder, 86 
esquinas redondeadas, 979  EVENTVALIDATION, 809 
estado de aplicación, 810  EventWaitHandle, 410, 413 
estado de sesión, 810  ExecuteNonQuery, 503 
estado de una página, 803  ExecuteReader, 503 
estado de vista, 807  EXIF, 321 
estado del modelo, 767  Exit, 51 
estilo del texto, 364  explorador de bases de datos, 495 
estructura de una aplicación gráfica, 48  expresión de consulta, 628 
etiqueta, 23, 54, 82  expresión de consulta, compilación, 635 
etiquetas HTML, 1069  expresiones de consulta, 632 
Eval, 755  expresiones de enlace de datos, 753 
EventHandler, 59, 403  expresiones lambda, 623 
1114 ENCICLOPEDIA DE MICROSOFT VISUAL BASIC

expresiones regulares, 99, 438  FormClosed, 64 
Expression, 629, 632  FormClosing, 64, 365, 569 
Extension, 622, 636  FormClosing, evento, 180 
extremo, 875  FormsAuthentication, 938 
formulario Acerca De, 329 
F  formulario activo, 63, 346 
formulario cargar, 568 
factoría, 526  formulario cerrar, 569 
fecha y hora, 25  formulario hijo, 350 
fecha y hora, formato, 381  formulario MDI, 348, 603 
fechas, 211  formulario modal, 63 
fichero de configuración, 527, 528, 827, 927  formulario no modal, 63 
fichero de recursos, 132, 1096  formulario propietario, 182 
fila añadir, 583  formulario web, diseño, 735 
fila nueva, 583  formulario, BackgroundImage, 324 
filas, 487  formulario, cerrar, 365 
FileDialog, 217  formulario, posición inicial, 63 
FileName, 219  formularios, 45, 1076 
FileUpload, 897  formularios hijo, 346 
Fill, 506, 568  formularios hijo abiertos, 345, 362 
Filter, 219  formularios web, 773, 798 
FilterIndex, 219  formularios, colección, 63 
filtrado, 863  formularios, comunicación entre, 234 
filtro de nombres de fichero, 219  FormView, 765, 858 
finalizar la ejecución, 22  From, 626, 635 
Finally, 509  FromArgb, 109 
Find, 255, 352, 584  FromFile, 324 
FindString, 157, 194  FromImage, 312 
firma digital, 960  ftp, 1064, 1066 
FixedDialog, 177  fuente, establecer, 109 
FlatStyle, 185, 189  FullPath, 255 
flow layout, 782  Func, 625 
FlowLayoutPanel, 213  funciones, representar, 330 
Fluent API, 712  fusionar barras de herramientas, 371 
foco, 89, 229, 583 
Focus, 89, 193, 583 
FolderBrowserDialog, 217 

font, 1069  GDI+, 293 
Font, 54, 109, 303  GDI+, servicios, 295 
FontDialog, 217, 222  generador de código nativo, 12 
For Each, 231  generar código JavaScript, 1014 
ForeColor, 109  gestión de datos, 723 
form, 798, 1076  gestor de recursos, 1099 
Form, 48, 81  get, 798 
Format, 88  GetAllUsers, 956 
Format de String, 381  GetCurrent, 925 
Format, evento, 432, 435  GetCustomAttributes, 70 
FormatException, 88  GetDatabaseValues, 698 
formatos de fechas y horas, 381  getElementsByTagName, 1009 
FormBorderStyle, 66, 177  GetExecutingAssembly, 70 
ÍNDICE 1115

GetObject, 68, 132  hn, 1070 
getSelectedColumn, 253  hojas de estilo, 973, 1023, 1084 
GetString, 68, 132, 1101  hr, 1070 
GetType, 263, 544  href, 1073 
GetView, 843  HScrollBar, 81, 204 
GIF, 321  html, 8, 1068, 1069 
Global.asax, 796  HTML, controles, 727, 728 
globalización, 1093  HtmlInputHidden, 807 
Gopher, 1064  HTTP, 8, 803, 1064 
GotFocus, 229  HTTP 403.13, 968 
gráficos, 293  HTTP get, 799 
gráficos en un documento HTML, 1074  HTTP post, 800 
gráficos vectoriales, 295  HttpClientCertificate, 963 
Graphics, 298, 341  HttpContext, 802, 925 
GraphicsPath, 304, 308  HttpCookie, 804 
grid layout, 782  http‐equiv, 917 
GridView, 759, 864, 1025  HTTPS, 962, 966 
GridView, AllowSorting, 863  HttpServerUtility, 802 
GridView, SelectedValue, 866  HyperLink, 840, 854 
Group, 637 
Group … By, 627 
GroupBox, 81, 188, 191 

grupo de aplicaciones, 745, 922  IBindingList, 431, 433, 440, 447, 469 
grupos de noticias, 1066  IBindingListView, 470 
guardar documento, 355  Icon, 29, 65 
guardar una aplicación, 33  icono de la aplicación, 29 
guardar una imagen, 325  IDatabaseInitializer, 708 
Identity, 707, 897, 924 
H  IDictionary, 844 
idioma, 1094 
habilitar o inhabilitar los elementos de un menú,  IDisposable, 511 
152  Idle, 72 
Handled, 87  IEditableObject, 548 
Handles, 46, 61  IEnumerable, 440, 627, 641 
HashSet, 703, 716  iframe, 1075 
HasMorePages, 359  IgnoreCase, 1101 
head, 1069  IIS, 742, 919 
height, 1075  IIS 7.0, certificados, 963 
herramientas, caja, 22  IIS, instalar, 1092 
hidden, 807  IList, 431, 440 
Hide, 65, 236  Image, 322 
hilos, 391  Image, propiedad, 133 
hilos accediendo a controles de los formularios,  ImageIndex, 257, 258 
399  ImageList, 257 
hilos secundarios, detener de forma controlada,  imagen, 325, 1079 
414  imagen en un botón, 130 
hilos, cancelar, 407  imagen, cargar, 324 
hilos, estados, 398  imágen, FromFile, 260 
hilos, mecanismos de sincronización, 408  imagen, guardar, 325 
hipertexto, 1073  imágenes, 296 
1116 ENCICLOPEDIA DE MICROSOFT VISUAL BASIC

imágenes en un documento HTML, 1074  IPrincipal, 924 
imágenes, lista de, 257  IQueryable, 627, 641, 680 
Images, 257  IRC, 915 
ImageStream, 258  IsAlive, 398 
ImageTransparentColor, 133  ISAPI, 1091 
IMAP, 1064  IsBackground, 398, 419 
img, 1074  IsCallback, 1016 
imprimir documento, 357  IsClientScriptBlockRegistered, 1017 
incoherencia de accesibilidad, 231  IsDispose, 236 
Increment, 209  IsDisposed, 183 
Inherits, 781  IsInAsyncPostBack, 1021 
iniciadores de colecciones, 622  IsMatch, 102, 438 
iniciadores de objetos, 621  IsMDIContainer, 344 
iniciar una lista desplegable, 281  IsOnline, 957 
inicio de sesión, 936  IsPostBack, 759, 785 
Init, 785  IsStartupScriptRegistered, 1017 
InitialDirectory, 219  IsValid, 785 
Initialize, 710  it, 648, 835 
innerHTML, 1010  Italic, 364 
INotifyPropertyChanged, 427, 448  Item, 231, 756 
input, 1077  ItemClicked, 481 
InputBox, 174  Items, propiedad, 156, 194 
Insert, 197, 823, 843  ItemType, 756 
INSERT, 490 
insertar filas, 682 
insertar filas, EntityDataSource, 841 

insertar filas, modelo de enlace, 855  JavaScript, 1001 
InsertCommand, 505  JavaScript, depurar código, 1058 
Inserting, 845  JavaScript, eventos, 1015 
InsertItemTemplate, 859  JavaScript, fichero .js, 1015 
InsertMethod, 766  JavaScript, generar código, 1014 
interceptar la tecla pulsada, 91  JIT, 11 
Interface, 371  Join, 398, 627, 638 
interfaces gráficas, 7, 38  JPEG, 321 
interfaz, 45  jQuery, 795, 943 
interfaz de múltiples documentos, 343  JSON, 1007 
interfaz fluida, 712 
interfaz IEditableObject, 548 
Interlocked, 410 

internacionalización, 1093  Key, 231 
Internet, 1061  KeyChar, 87, 92 
Internet Explorer, 1067  KeyDown, 86, 94 
Into, 639  KeyPress, 86, 92, 187 
intranet, 1062  KeyPressEventArgs, 87 
introducir datos, 475  Keys, 94, 130 
Invalidate, 295  KeyUp, 86, 94 
InvariantCulture, 1096  KeyValuePair, 231 
Invoke, 400, 402 
InvokeRequired, 401, 402 
inyección de código SQL, 513 
ÍNDICE 1117

L  llamada asíncrona, 400 
llamada síncrona, 400 
label, 1081  Load, 89, 568, 751, 785 
Label, 53, 81, 82  LoadFile, 352 
LabelEdit, 255, 268  LocalDB, 1054 
Language, 782, 1096  localhost, 800 
LargeChange, 204  Localizable, 1096 
LastActivityDate, 957  localización, 1093 
LayoutMdi, 347, 362  Location, 55, 126, 222 
LayoutMode, 29  LocationChanged, 65, 223 
Lazy Loading, 649  lock, 410 
lector de datos, 504  lógica de negocio, 723 
Left, 65  Login, control, 938 
Let, 640  LoginName, 978, 985 
li, 1072  LoginName, control, 951 
Like, 584  LoginStatus, 978, 985 
líneas de ayuda, 29  LoginStatus, control, 939 
LINQ, 619  LoginView, 977 
LINQ to Entities, 644  LoginView, control, 939 
Linux, 1103  logo, 367 
List, 442 
lista, 24, 193 
lista de formularios abiertos, 362 

lista de los eventos, 30  maestro‐detalle, 461, 587 
lista de tareas, 133  maestro‐detalle, aplicación web, 868 
lista desplegable, 24, 198, 1080  mail, 1065 
lista desplegable, añadir elemento, 202  Main, 49, 51 
lista desplegable, borrar elemento, 202  MainMenuStrip, 126, 344 
lista desplegable, diseñar, 200  manifiesto, 11 
lista desplegable, estilo, 199  ManualResetEvent, 410 
lista desplegable, iniciar, 201  mapa de bits, 320 
lista, acceder a sus elementos, 196  MapPath, 802 
lista, borrar elemento, 198  máquina virtual, 11 
lista, colección de elementos, 197  marcador de posición de contenido, 971, 977, 
lista, columnas, 193  987 
lista, diseño, 194  marcas de tiempo, 896 
lista, elemento seleccionado, 194  marco, 24 
lista, iniciar, 196  marco con título, 281 
lista, ordenar, 194  marcos en páginas HTML, 1075 
lista, selección múltiple, 196  máscaras, 980 
listas desplegables en menús, 155  MaskedTextBox, 81, 104 
listas HTML, 1072  MasterPage, 1023 
ListBox, 54, 81, 193, 445  MasterPageFile, 971 
ListBox, vincular con DataSet, 521, 558  Match, 102 
ListChanged, 552  Matches, 103 
ListControl, 81  Matrix, 315 
ListView, 269, 859  Max, 627 
ListView, ejemplo, 273  MaxDropDownItems, 199 
ListViewItem, 273  maximizar, 44 
Literal, 976  Maximum, 203 
1118 ENCICLOPEDIA DE MICROSOFT VISUAL BASIC

MDI, 343, 366  método Select, 89, 584 
MdiChildren, 346  método SetToolTip, 57 
MdiLayout, 347  método Update, 569 
MdiWindowListItem, 345  métodos de página, 1038 
MemberExpression, 632  Métodos del generador de consultas, 645 
Membership, 951, 956  métodos extensores, 622 
MembershipUser, 956  Microsoft .NET, 4 
mensaje, mostrar, 129  Microsoft Access, 502 
mensajes, 13  Microsoft.ACE.OLEDB, 503 
menú, 123  Microsoft.Jet.OLEDB, 503 
menú contextual, 159, 480  MiddleCenter, 54 
Menú de control, 43  miembro protegido, 50 
menú dinámico, 161  Min, 627 
menú Ventana, 345, 347, 362  minimizar, 44 
menú, añadir, 126  Minimum, 203 
menú, controlador de eventos, 128, 147  modal o no modal, 170 
menú, elementos, 127  Model First, 653, 700 
menú, señalar elemento, 153  ModelMethodContext, 862 
menú, separador, 128  modelo de datos, 454, 457 
menús, 121  modelo de enlace de ASP.NET, 757, 847 
menús en páginas web, 974, 996  modelo de entidades, 644 
menús, combinar, 345  ModelState, 767 
menús, diseño, 124  Model‐View‐Controller, 1059 
menús, líneas de separación, 125  Model‐View‐ViewModel (MVVM), 1059 
MenuStrip, 126, 323  módem, 1065 
Merge, 351  modificadores de tamaño, 27 
MergeAction, 345, 351  modificar datos, 675 
MergeIndex, 345, 351  modificar datos en una tabla, 490 
MessageBox, 170  modificar una base de datos, 582 
MessageBox.Show, 425  Modified, 354, 365, 499 
meta, 917  ModifierKeys, 94 
Metafile, 322  Modifiers, 369 
metarchivo, 296  Monitor, 409, 412 
method, 798, 1077  Mono, 1103 
MethodCallExpression, 632  MonthCalendar, 212 
MethodInvoker, 403  mosaico, 362 
método ‐ evento, 61  mostrar un mensaje, 129 
método Add, 55, 583  MouseClick, 90 
método conducido por un evento, 86  MouseDown, 334 
método DataBind, 753  MouseMove, 334 
método Delete, 584  MouseUp, 334 
método Dispose, 50  mover el control, 27 
método Exit, 51  MsgBox, 129 
método Fill, 568  MSIL, 9 
método Find, 584  MSL, 644 
método Focus, 583  MultiLine, 139 
método Insert, 843  multiple, 1081 
método NewRow, 583  Mutex, 409 
método PerformClick, 583  My, 327 
método Print, 358  My.Computer, 327 
ÍNDICE 1119

My.Computer.Audio, 339  OpenForms, 63 
My.Computer.Clipboard, 142  operadores de consulta, 626 
OperationContract, 876 
optgroup, 1081 
N  OptimisticConcurrencyException, 689 
name, 1073, 1077  option, 1080 
Name, 50, 126, 398  Option Explicit, 36 
navegar por los elementos de una lista, 466  Option Strict, 36 
nemónico, 85, 129  OracleConnection, 501 
NetworkService, 746, 771  OracleDataAdapter, 505 
NewRow, 583  orden, 505 
news, 1066  orden de tabulación, 1080 
ngen.exe, 12  orden parametrizada, 516 
N‐Layer architecture, 895  orden SQL, escribir una nueva, 610 
Node, 263  orden Tab, 55, 90, 281 
Nodes, 255  ordenación, 863 
nodo seleccionado, 265  Order By, 627, 635 
nodo, añadir, 265  organizar iconos, 362 
nodo, borrar, 268  Orientation, 207 
nodos, borrar todos, 268  origen de datos, 440, 457 
NT AUTHORITY\Servicio de Red, 790  orígenes de datos ADO.NET, 440, 575 
N‐Tier architecture, 895  orígenes de datos, ventana, 457 
nuevo documento, 353  OriginalValues, 698 
NuGet, 701  ORM, 643, 701 
Nullable(Of Integer), 848  OutputCache, 813 
Overrides, 50 
OwnedForms, 183 
O  OwnedWindows, 65 
Object, 80  Owner, 65, 183, 234 
ObjectCollection, 197 
ObjectContext, 653  P 
ObjectDataSource, 904, 905 
ObjectQuery, 645  p, 1070 
ObjectStateEntry, 676, 695  Padding, 126 
ObjectStateManager, 676, 695  padre‐hija, tablas, 587 
objeto de negocio, 905  Page, 784, 924, 1017 
objeto Response, 999  Page.DataBind, 752 
objetos como orígenes de datos, 454  Page_Error, 841 
objetos de negocio, 535  Page_evento, 751, 785 
objetos de sincronización, 409  PageMethods, 1038 
OdbcConnection, 501  PageRequestManager, 1033 
OdbcDataAdapter, 505  PageSetupDialog, 217 
ol, 1072  página de contenido, 969 
OleDbConnection, 501  página de inicio de sesión, 936 
OleDbDataAdapter, 505  página maestra, 969 
OleDbDataReader, 504  página principal, 969 
onchange, evento, 1008  página web, 781, 1068 
onreadystatechange, 1005  página web ASP.NET, 739 
OpenFile, 219, 220  página web dinámica, 1090 
OpenFileDialog, 217, 220  página web, modelo de ejecución, 747 
1120 ENCICLOPEDIA DE MICROSOFT VISUAL BASIC

paginación, 863  PrintDialog, 217 
páginas ASP, 1091  PrintPage, 358 
páginas web, publicar, 741  Priority, 398 
Paint, 294, 298, 299  problemas de concurrencia, 556 
Panel, 24, 188, 323, 367  procedimientos almacenados, 517, 533 
panel de dibujo, 340  producto cartesiano, 638 
pantalla de presentación, 76  Profile, 983 
ParameterExpression, 632  ProgressBar, 81, 208 
Parameters, 516  ProgressChanged, 406 
parámetro oculto, 807, 1079  ProgressPercentage, 406 
parámetros en órdenes SQL, 516  PropertyChanged, 427 
Parse, 114  PropertyManager, 441 
Parse, evento, 432, 435  propiedad, 656 
Partial, 86  propiedad autoimplementada, 621 
pasos, 239  propiedad cambió, notificar, 427 
passport, 927  propiedad Cancel, 96 
PasswordChar, 176  propiedad ClientSize, 50 
PasswordRecovery, control, 950  propiedad Controls, 55 
Paste, 144  propiedad Count, 581 
patrón de diseño Factory, 526  propiedad Cursor, 329 
patrones de diseño, 649  propiedad DataBindings, 577 
Pen, 300  propiedad DataMember, 567 
perfiles, 983  propiedad DataSource, 567 
PerformClick, 117, 469, 583  propiedad Font, 54 
PerformStep, 209  propiedad Icon, 29 
permanente, 312  propiedad Location, 55 
PictureBox, 81, 323  propiedad Modified, 354, 365 
plantilla, 755, 760  propiedad Name, 50 
plantilla de formularios, 366  propiedad Position, 581 
Play, 339  propiedad ReadOnly, 108 
PNG, 321  propiedad Size, 50, 55 
POCO, 701  propiedad TabStop, 55 
Point, 55, 302  propiedad TanIndex, 55 
pool de conexiones, 926  propiedad Text, 50, 54 
POP 2 y 3, 1064  propiedad TextAlign, 54, 108 
portapapeles, 142, 327  propiedades, 27 
posición de un componente, modificar, 222  propiedades de navegación, 662 
posición inicial del formulario, 63  propiedades, añadir a un control, 376, 387 
Position, 442, 581  propiedades, atributos, 379 
post, 798  propiedades, clasificación, 379 
postback, 1003, 1029  propiedades, control de usuario, 373, 375, 377, 
postbacks asíncronos, 1021  378, 379, 380, 381, 386, 387, 388 
PostgreSql, 502  propietario de un diálogo, 234 
precompilar la aplicación ASP.NET, 797  Protected, 50 
PreInit, 785, 982  protocolo, 1062 
PreRender, 785  protocolo de transferencia de ficheros, 1066 
presentación, 723  proveedor de datos, 500 
PRIMARY KEY, 489  proveedor de entidades, 645 
principal, 919  proveedores de LINQ, 641 
Print, 358  providers, 951 
ÍNDICE 1121

proyecto, 16  Remove, 197, 231 
publicar páginas web, 741  RemoveAt, 197 
puntero, 22  RemoveAt, colección, 164 
punto de entrada a la aplicación, 51  RemoveHandler, 62 
punto de inserción, 89  rendimiento del servidor, 812 
punto final, 875  repintar una ventana, 295 
Replace, 103 
ReportProgress, 406 
Q  representar funciones, 330 
QueryString, atributo proveedor de valor, 848  Request, 802 
RequiredFieldValidator, 793 
reset, 1079 
R  Reset, 413 
RAD, 781  Resize, 223 
RadioButton, 54, 81, 188  resolución gráfica, 294 
RangeValidator, 793  ResourceManager, 68, 132, 1099, 1101 
raster, dispositivos, 294  Response, 802, 999 
Read, 504  Response.Redirect, 938 
ReaderWriterLock, 410  responseText, 1005 
ReadOnly, 108  responseXML, 1005 
readyState, 1005  RestoreBounds, 66 
recorte, área de, 309  reutilización, 373 
Rectangle, 302  RevertMerge, 351 
recursos, 130, 1096  RGB, 109 
recursos de una aplicación, 68  RichTextBox, 81, 151, 352 
recursos embebidos, 132  Row, 553 
recursos vinculados, 132  RowCount, 254 
recursos, acceder, 1099, 1100  Rows, 243 
Redirect, 803, 999  RTF, 352 
RedirectFromLoginPage, 938  Run, 46 
Redo, 352  RunWorkerAsync, 404 
reescritura de la URL, 806  RunWorkerCompleted, 404, 407 
refactorización, 375  ruta del sitio web, 802 
referencias, 19 
referencias culturales, 1094  S 
reflexión, 70 
Refresh, 447, 691  SaveChanges, 662 
Regex, 102, 438  SaveFile, 352 
región, 308  script callbacks, 1012 
región de recorte, 309  ScriptManager, 1021 
región no válida, 295  ScriptManagerProxy, 1028 
RegisterClientScriptBlock, 1017  ScriptPath, 1021 
RegisterStartupScript, 1017  scripts, 1021, 1091 
registros, 487  ScriptService, 1036 
rehacer, 352, 360  Scroll, 206 
rejilla, 567  ScrollBar, 54, 81, 203 
rejilla de ayuda, 29  ScrollBars, 139 
Reload, 693, 698  sección crítica, 410 
reloj, 223  seguimiento de los cambios, 695 
reloj despertador, 164, 238  seguridad, 958 
1122 ENCICLOPEDIA DE MICROSOFT VISUAL BASIC

seleccionar datos de una tabla, 491  servicios web, ejecución asíncrona, 890 
seleccionar el contenido de una caja de texto, 90  servidor de nombres, 1064 
seleccionar el texto de una caja, 229  servidor SMTP de IIS, 948 
seleccionar un objeto, 28  servidor web, 1092 
select, 1080  servlets, 1092 
Select, 89, 91, 144, 584, 635, 823, 838  Session, 802 
SELECT, 491  Set, 413, 686 
SelectAll, 90, 144, 229  SetCacheability, 815 
SelectCommand, 505  SetClip, 309 
selected, 1081  SetError, 97 
SelectedCells, 244  SetInitializer, 710 
SelectedColumns, 243  setLocationRelativeTo, 283 
SelectedImageIndex, 257, 258  setTimeout, 1011 
SelectedIndex, 157, 194, 199, 752  SetToolTip, 57 
SelectedIndexChanged, 157, 672, 673  ShortcutKeys, 130 
SelectedItem, 157, 194, 199, 201, 752  Show, 65, 170, 177, 183, 234 
SelectedItems, 196  ShowColor, 222 
SelectedNode, 255, 265  ShowDialog, 63, 177, 179, 183, 218 
SelectedRows, 243  ShowHelp, 221 
SelectedRtf, 359  ShowInTaskbar, 64, 65 
SelectedText, 91, 143, 359  Shown, 63, 89 
SelectedValue, 558, 752  ShowNodeToolTips, 269 
Selecting, 838  ShowPlusMinus, 269 
SelectionAlignment, 364  ShowReadOnly, 219 
SelectionChange, 363  ShowRootLines, 269 
SelectionFont, 364  Shutdown, 73 
SelectionLength, 91, 143  simultaneidad, 689, 895 
SelectionStart, 91, 143  simultaneidad optimista, 563 
SelectMethod, 761  sincronización, 917 
Semaphore, 409  sistema de nombres de dominio, 1063 
sentencia Using, 511  sitio web, 741 
señalar un elemento de un menú, 153  sitio web, reglas de acceso, 954 
separadores, 125  sitios web, administración, 941 
seriar/deseriar un árbol, 292  size, 1069 
Server, 802, 841  Size, 50, 55, 222, 303 
ServiceContract, 876  SizeChanged, 223 
Services, 1021, 1036  skins, 980 
servicio, 873  Sleep, 398 
servicio de conexiones, 926  SmallChange, 204 
Servicio de red, 746, 771  SMTP, 948, 1065 
servicio de suscripciones, 951  SOAP, 871 
servicio WCF, 875  SOAP, mensaje, 874 
servicio WCF, configuración, 882  SolidBrush, 301 
servicio web, 8  solución, 16 
servicio web, acceso a BD, 990  sonido en una aplicación, 339 
servicios de IIS, 742  Sort, 194, 200 
servicios de Internet, 1065  SortedList, 229, 230 
Servicios de objetos, 646  SplashScreen, 76 
servicios web con AJAX, 1034  SplitContainer, 273 
servicios web y LINQ, 894  SQL, 488 
ÍNDICE 1123

SQL Server, 502, 509, 790  T 
SQL Server 2012 Express, 1051 
SQL Server Management Studio Express, 1054  Tab, 55 
SqlCacheDependency, 817  TabControl, 210 
SQLCMD, 1052  tabindex, 1080 
SqlCommand, 503  TabIndex, 55, 89, 126 
SqlCommandBuilder, 563  tabla, 24, 241, 487, 1083 
SqlConnection, 501  tabla con cabecera de filas, 281 
SqlDataAdapter, 505  tabla, construir, 244 
SqlDataReader, 504  tabla, iniciar, 246 
SqlDataSource, 820, 1024  table, 1083 
src, 1074, 1076  table dinámico, 1005 
SSDL, 644  TableAdapterManager, 574 
SSL, 930, 961, 967  TableLayoutPanel, 213 
Start, 396, 398  tablero de dibujo, 340 
StartPosition, 63  TabStop, 55 
Startup, 73  Tag, 484 
StartupNextInstance, 73  Take While, 627 
StartupPosition, 66  tamaño de los controles, 27 
State, 698  tamaño de un componente, modificar, 222 
status, 1005  TCP/IP, 1062 
StatusBar, 81  td, 1083 
StatusStrip, 137  tecla de acceso, 56, 85 
statusText, 1005  tecla pulsada, interceptar, 91 
Step, 209  teclas, 94 
StoreWins, 693  teclas Alt, Control o Shift (Mayús), 94 
Strikethru, 364  telnet, 1065 
subdominio, 1063  temas, 980 
submenú‐menú contextual, 161  temporizador, 25, 223, 1011 
submenús, 127  Text, 50, 54, 88, 199 
submit, 1079  TextAlign, 54, 108 
Substitution, 814  textarea, 1080 
Sum, 627  TextBox, 53, 81, 82, 141 
suplantación de identidad, 932  TextBoxBase, 81, 143 
SupportsFiltering, 469  TextChanged, 87, 191, 426 
SupportsSorting, 469  texto seleccionado, 152 
suscribir evento, 30  th, 1083 
SvcUtil.exe, 887  theme, 980 
SyncLock, 410, 419  Thread, 395 
System.ComponentModel, 81  ThreadException, 72 
System.Data.Linq, 619  ThreadExit, 72 
System.Drawing, 50, 54, 82, 296  ThreadStart, 395 
System.Linq, 619  ThreadState, 398 
System.Linq.Expressions, 631  ThreeState, 185 
System.Runtime.CompilerServices, 622, 636  Tick, evento, 225 
System.Threading, 392  TickFrequency, 207 
system.web, 927  ticks, 239 
System.Web, 802  TickStyle, 207 
System.Windows.Forms, 49, 80  TIFF, 321 
System.Windows.Forms.Design, 81  Timer, 224, 410, 1034 
1124 ENCICLOPEDIA DE MICROSOFT VISUAL BASIC

TimeSpam, 226  Underline, 364 
tip, 57  Undo, 144, 154, 352, 360 
tipo anónimo, 620  UnhandledException, 73 
tipo de un objeto, 263  unidad de medida, 299 
tipo enumerado, 111  UNIQUE, 489 
tipo implícito, 620  Unload, 785 
tipografía, 296  Update, 507, 569, 613, 823 
tipos de enlace, 432  UPDATE, 490 
tipos SQL, 489  UpdateCommand, 505 
title, 1069  UpdateMethod, 762 
ToDouble, 88  UpdateMode, 1031 
ToInt32, 192  UpdatePanel, 1028 
ToList, 663  UpdateProgress, 1032 
ToolBar, 81  URL, 725, 1072 
ToolStrip, 121, 134  URL, dirigirse a otra, 938 
ToolStripButton, 135  USENET, 1065, 1066 
ToolStripComboBox, 155  User, 924 
ToolStripItem, 121  UserControl, 375 
ToolStripItemCollection, 127  UserDeletingRow, 546 
ToolStripManager, 351  UserName, 957 
ToolStripMenuItem, 126, 480  Using, 511, 613 
ToolStripSeparator, 128  usuario ASPNET, 926 
ToolTip, 57 
Top, 65 
Topmost, 66 

ToString, 193, 230, 262  validación, 767 
ToUpper, 193  validación de datos, DataGridView, 478 
tr, 1083  validación de los datos, 606 
TrackBar, 81, 207  validación discreta, 794 
transacción, 518, 613  validación personalizada, 104 
transacciones explícitas, 523  validación, controles, 727 
TransactionScope, 519, 613  validar datos, 438 
Transform, 316  validar un campo de texto, 93 
transformación, 314, 331  Validate, 606 
transformación global, 316  Validated, 96 
transformación local, 316  Validating, 96 
transformaciones de color, 318  ValidationAttribute, 711 
trazado, 308  ValidationSummary, 793 
TreeNode, 255  value, 1079 
TreeView, 254  Value, 203, 209, 231, 237 
trigger, 1029  Value Object, 532, 649 
Triggers, 1030  value provider attributes, 848 
TryParse, 114  ValueChanged, 206 
type, 1077  ValueMember, 521, 558 
Type, 263, 460, 544  var, 620 
typeof, 460  varbinary, 897 
variable fuertemente tipada, 756 
U  variable, declaración implícita, 620 
VaryByParam, 813 
Unchanged, 499  ventana, 43, 45 
ÍNDICE 1125

ventana de aplicación, 344  webMethod, 1039 
ventana de documento, 344  WebResource.axd, 1014 
ventana, centrar, 283  Where, 635 
Ventana, menú, 347, 362  WhereParameters, 838 
ViewState, 784, 807, 808  width, 1075 
ViewState, deshabilitar, 818  Windows Forms, 7, 38, 79 
ViewState, mecanismo, 818  WindowsFormsApplicationBase, 76 
vista de colección, 471  WindowsIdentity, 925 
vista del control, 844  WindowState, 66, 344 
vista, buscar sus elementos, 474  WithEvents, 54 
vista, filtrar sus elementos, 474  WordWrap, 139 
vista, ordenar sus elementos, 473  WorkerReportsProgress, 406 
Visual Studio .NET, 13, 15  WorkerSupportsCancellation, 407 
VScrollBar, 81, 204  world wide web, 1066 
WPF, 7, 38, 79 
W  WriteLine, 129 
WSDL, 872 
WaitAll, 413  WWW, 1065, 1066 
WaitAny, 413 
WaitHandle, 410, 412 
WaitOne, 413 

WCF, 873  XCOPY, 1052 
web, 1066  XHTML, 1001, 1090 
web, controles, 727  XML, 7, 1009, 1089 
Web.config, 927  XMLHTTP, 1004 
WebForm_DoCallback, 1013  XMLHttpRequest, 1004 

 
Del mismo autor

● Curso de programación con ISBN: 978-84-86381-36-3
PASCAL 224 págs.
● Curso de programación ISBN: 978-84-86381-87-5
GW BASIC/BASICA 320 págs.
● Manual para TURBO BASIC ISBN: 978-84-86381-43-1
Guía del programador 444 págs.
● Manual para Quick C 2 ISBN: 978-84-86381-65-3
Guía del programador 540 págs.
● Manual para Quick BASIC 4.5 ISBN: 978-84-86381-74-5
Guía del programador 496 págs.
● Curso de programación ISBN: 978-84-7897-001-8
Microsoft COBOL 480 págs.
● Enciclopedia del lenguaje ISBN: 978-84-7897-053-7
C 888 págs.
● Curso de programación ISBN: 978-84-7897-059-9
QBASIC y MS-DOS 5 384 págs.
● Curso de programación ISBN: 978-84-7897-070-4
RM/COBOL-85 396 págs.
● El abecé de ISBN: 978-84-7897-114-5
MS-DOS 6 224 págs.
● Microsoft Visual C ++ (ver. 1.5x de 16 bits) ISBN: 978-84-7897-180-0
Aplicaciones para Windows 846 págs. + 2 disquetes
● Microsoft Visual C ++ ISBN: 978-84-7897-561-7
Aplicaciones para Win32 (2ª edición) 792 págs. + disquete
● Microsoft Visual C ++ ISBN: 978-84-7897-344-6
Programación avanzada en Win32 888 págs. + CD-ROM
● Visual Basic 6 ISBN: 978-84-7897-357-6
Curso de programación (2ª edición) 528 págs. + disquete
● Enciclopedia de Microsoft ISBN: 978-84-7897-386-6
Visual Basic 6 1.072 págs. + CD-ROM
● El lenguaje de programación ISBN: 978-84-7897-485-6
Java 320 págs. + CD-ROM
● El lenguaje de programación ISBN: 978-84-7897-500-6
C# 320 págs. + CD-ROM
Del mismo autor

● El lenguaje de programación ISBN: 978-84-7897-525-9
Visual Basic.NET 464 págs. + CD-ROM
● Java 2 ISBN: 978-84-7897-745-1
Lenguaje y aplicaciones 392 págs. + CD-ROM
● Programación orientada a objetos ISBN: 978-84-7897-761-1
con C ++ (4ª edición) 648 págs. + CD-ROM
● C/C++ ISBN: 978-84-7897-762-8
Curso de programación (3ª edición) 708 págs. + CD-ROM
● Microsoft C# ISBN: 978-84-7897-813-7
Lenguaje y aplicaciones (2ª edición) 520 págs. + CD-ROM
● Java 2. Interfaces gráficas y aplicaciones para ISBN: 978-84-7897-859-5
Internet (3ª edición) 718 págs. + CD-ROM
● Aplicaciones .Net multiplataforma ISBN: 978-84-7897-880-9
(Proyecto Mono) 212 págs. + CD-ROM
● Enciclopedia del lenguaje ISBN: 978-84-7897-915-8
C ++ (2ª edición) 902 págs. + CD-ROM
● Enciclopedia de Microsoft ISBN: 978-84-7897-986-8
Visual C# (3ª edición) 1.110 págs. + CD-ROM
● Enciclopedia de Microsoft ISBN: 978-84-7897-987-5
Visual Basic (2ª edición) 1.090 págs. + CD-ROM
● Microsoft Visual Basic .NET ISBN: 978-84-9964-020-4
Lenguaje y aplicaciones (3ª edición) 520 págs. + CD-ROM
● Java 2 ISBN: 978-84-9964-032-7
Curso de programación (4ª edición) 820 págs. + CD-ROM
● Microsoft C# ISBN: 978-84-9964-068-6
Curso de programación (2ª edición) 850 págs. + CD-ROM
● Visual C#. Interfaces gráficas y aplicaciones ISBN: 978-84-9964-203-1
para Internet con WPF, WCF y Silverlight 956 págs. + CD-ROM
● Visual Basic. Interfaces gráficas y aplicaciones ISBN: 978-84-9964-204-8
para Internet con WPF, WCF y Silverlight 938 págs. + CD-ROM
INSTALACIÓN
Para instalar el kit de desarrollo de Visual Basic y los ejemplos de este libro descargue la plataforma de desarro-
llo de la dirección: http://www.microsoft.com/express/.

PLATAFORMA WINDOWS
Instalación de .NET Framework SDK
Hay que instalar .NET Framework Redistributable Package antes de instalar .NET Framework SDK. El primer
paquete incluye todo lo necesario para ejecutar aplicaciones desarrolladas con .NET Framework. El segundo pa-
quete incorpora todo lo necesario para escribir, construir, verificar y desplegar aplicaciones desarrolladas
con.NET Framework.
Para realizar la instalación, siga las instrucciones mostradas por el asistente de instalación. Esta instalación se
realiza en la carpeta Microsoft.NET de Windows y en la carpeta Microsoft.NET de archivos de programas.

Instalación de Microsoft Visual Studio
La instalación de Visual Studio (el paquete completo o las versiones Express que necesite) no requiere la instala-
ción previa del SDK porque está incluido en éste. Descargue de Internet el paquete Visual Studio Express 2012,
o bien, si tiene acceso a alguna versión profesional de Visual Studio 2012, e instálelo (opcionalmente puede ins-
talar SQL Server Express).

Ejemplos del libro
Los ejemplos del libro puede instalarlos en la carpeta Projects de Visual Studio o los puede recuperar directa-
mente desde el material adicional cuando los quiera consultar.

PLATAFORMA LINUX
Véase el apéndice D.

LICENCIA
Todo el contenido de este material adicional, excepto los ejemplos del libro, es propiedad de las firmas que los
representan (Microsoft, etc.). La inclusión en este libro se debe a su gentileza y es totalmente gratuita y con la
finalidad de apoyar el aprendizaje del software correspondiente. Para obtener más información y actualizaciones -
visite las direcciones indicadas en dicho software:
http://www.microsoft.com/express/

Al realizar el proceso de instalación, haga el favor de consultar el acuerdo de licencia para cada uno de los pro-
ductos.

WEB DEL AUTOR: http://www.fjceballos.es
En esta Web podrá echar una ojeada a mis publicaciones más recientes y acceder a la descarga del software nece-
sario para el estudio de esta obra así como a otros recursos.