Enciclopedia de Microsoft®

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

www.fjceballos.es
Enciclopedia de Microsoft Visual C#
Interfaces gráficas y aplicaciones para Internet con Windows Forms y ASP.NET
4.ª 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-264-2
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 C#

Guardar la aplicación ..................................................................................... 32 
Verificar la aplicación .................................................................................... 33 
Propiedades del proyecto ............................................................................... 35 
Crear soluciones de varios proyectos ............................................................. 35 
Opciones del EDI ........................................................................................... 36 
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 ...................................................................... 64 
Apariencia y comportamiento ........................................................................ 65 
CONFIGURACIÓN DE UNA APLICACIÓN ................................................... 66 
RECURSOS DE UNA APLICACIÓN ............................................................... 68 
ATRIBUTOS GLOBALES DE UNA APLICACIÓN........................................ 69 
CICLO DE VIDA DE UNA APLICACIÓN....................................................... 70 
Permitir una sola instancia de la aplicación ................................................... 72 
Argumentos en la línea de órdenes ................................................................ 73 
Pantalla de presentación ................................................................................. 74

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 .................................................................................... 100 
Ejemplos de expresiones regulares ........................................................... 100 
El motor de expresiones regulares ............................................................ 103 
MaskedTextBox ............................................................................................. 104 
EJERCICIOS RESUELTOS ............................................................................... 106 
Diseño de una calculadora ............................................................................. 106 
Objetos ...................................................................................................... 106 
Eventos...................................................................................................... 107 
Pasos a seguir durante el desarrollo .......................................................... 107 
Diseño de la ventana y de los controles ......................................................... 107 
Establecer una fuente ..................................................................................... 109 
Color .............................................................................................................. 110 
Escribir el código ........................................................................................... 111 
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 C#

DESARROLLO DE UN EDITOR DE TEXTOS ............................................... 138 
Caja de texto multilínea ................................................................................. 139 
Diseño del editor ............................................................................................ 140 
El portapapeles ............................................................................................... 142 
Objeto 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ú .......................................... 148 
Archivo - Salir........................................................................................... 148 
Edición - Cortar......................................................................................... 148 
Edición - Copiar ........................................................................................ 149 
Edición - Pegar.......................................................................................... 149 
Opciones - Fuente ..................................................................................... 150 
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............................................................................. 165

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

CAJAS DE DIÁLOGO MODALES Y NO MODALES .................................... 170 
CAJAS DE MENSAJE ....................................................................................... 170 
CAJAS DE DIÁLOGO PERSONALIZADAS ................................................... 173 
Crear una caja de diálogo ............................................................................... 174 
Mostrar una caja de diálogo ........................................................................... 176 
Introducción de datos y recuperación de los mismos ..................................... 177 
DIÁLOGO ACERCA DE ................................................................................... 179 
FORMULARIO PROPIETARIO........................................................................ 180 
OTROS CONTROLES WINDOWS FORMS .................................................... 181 
Casillas de verificación .................................................................................. 182 
Botones de opción .......................................................................................... 186 
Listas simples ................................................................................................. 191 
Diseñar la lista........................................................................................... 193 
Iniciar la lista............................................................................................. 194 
Acceder a los elementos seleccionados..................................................... 194 
CONTENIDO XI

Colección de elementos de una lista ......................................................... 195 
Clase CheckedListBox .............................................................................. 196 
Listas desplegables ......................................................................................... 197 
Diseñar la lista........................................................................................... 198 
Iniciar la lista............................................................................................. 199 
Acceder al elemento seleccionado ............................................................ 199 
Colección de elementos de una lista desplegable ..................................... 200 
Controles de rango definido ........................................................................... 201 
ScrollBar ................................................................................................... 202 
TrackBar ................................................................................................... 205 
ProgressBar ............................................................................................... 206 
Control con pestañas ...................................................................................... 208 
Gestión de fechas ........................................................................................... 209 
FlowLayoutPanel y TableLayoutPanel .......................................................... 210 
CAJAS DE DIÁLOGO ESTÁNDAR ................................................................. 214 
Cajas de diálogo Abrir y Guardar .................................................................. 215 
Caja de diálogo Color .................................................................................... 218 
Caja de diálogo Fuente ................................................................................... 219 
REDIMENSIONAR UN COMPONENTE ......................................................... 221 
TEMPORIZADORES ......................................................................................... 222 
EJERCICIOS RESUELTOS ............................................................................... 225 
EJERCICIOS PROPUESTOS............................................................................. 236

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

TABLAS ............................................................................................................. 239 
Arquitectura de un control DataGridView ..................................................... 241 
Construir una tabla ......................................................................................... 242 
Añadir las columnas a la tabla ....................................................................... 243 
Iniciar la tabla................................................................................................. 244 
Tamaño de las celdas ..................................................................................... 250 
Acceder al valor de la celda seleccionada ...................................................... 251 
ÁRBOLES........................................................................................................... 252 
Arquitectura de un árbol ................................................................................ 253 
Construir un árbol .......................................................................................... 253 
Añadir nodos a un árbol ................................................................................. 254 
Imágenes para los nodos del árbol ................................................................. 255 
Iniciar el árbol ................................................................................................ 256 
Acceder al nodo seleccionado ........................................................................ 258 
Recorrer todos los nodos del árbol ................................................................. 262 
Añadir y borrar nodos .................................................................................... 262 
Añadir un nodo ......................................................................................... 263 
XII ENCICLOPEDIA DE MICROSOFT VISUAL C#

Borrar el nodo seleccionado...................................................................... 266 
Borrar todos los nodos excepto la raíz ...................................................... 266 
Personalizar el aspecto de un árbol ................................................................ 267 
VISTAS DE UNA LISTA................................................................................... 267 
Personalizar el aspecto de una vista ............................................................... 268 
La colección Columns .................................................................................... 269 
Elemento de la lista ........................................................................................ 270 
La colección Items ......................................................................................... 271 
Un ejemplo con ListView, TreeView y SplitContainer ................................. 271 
EJERCICIOS RESUELTOS ............................................................................... 274 
EJERCICIOS PROPUESTOS............................................................................. 290

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

SERVICIOS DE GDI+........................................................................................ 293 
OBJETOS DE DIBUJO BÁSICOS .................................................................... 294 
Objeto Graphics ............................................................................................. 296 
Objeto Color................................................................................................... 297 
Objeto Pen ...................................................................................................... 298 
Objeto Brush .................................................................................................. 299 
Objeto Point ................................................................................................... 300 
Objeto Rectangle ............................................................................................ 300 
Objeto Font .................................................................................................... 301 
Objeto GraphicsPath ...................................................................................... 302 
MÉTODOS DE DIBUJO .................................................................................... 302 
Líneas y rectángulos....................................................................................... 302 
Elipses y arcos ................................................................................................ 303 
Tartas.............................................................................................................. 304 
Polígonos........................................................................................................ 304 
Curvas flexibles.............................................................................................. 305 
Trazados ......................................................................................................... 306 
Regiones ......................................................................................................... 306 
GRÁFICOS PERSISTENTES ............................................................................ 309 
SISTEMAS DE COORDENADAS Y TRANSFORMACIONES ...................... 311 
Tipos de sistemas de coordenadas.................................................................. 315 
Transformaciones de color ............................................................................. 316 
MOSTRAR IMÁGENES .................................................................................... 318 
Mapas de bits ................................................................................................. 318 
Cargar y mostrar un mapa de bits .................................................................. 320 
Intercambiar imágenes a través del portapapeles ........................................... 326 
CAMBIAR LA FORMA DEL PUNTERO DEL RATÓN ................................. 327 
EJERCICIOS RESUELTOS ............................................................................... 328 
CONTENIDO XIII

EJERCICIOS PROPUESTOS............................................................................. 339

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 ........................................................ 385 
Verificar el control de usuario........................................................................ 386 
EJERCICIOS RESUELTOS ............................................................................... 388 
EJERCICIOS PROPUESTOS............................................................................. 391
XIV ENCICLOPEDIA DE MICROSOFT VISUAL C#

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

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

PARTE 3. ACCESO A DATOS ............................................... 425
CAPÍTULO 12. ENLACE DE DATOS EN WINDOWS FORMS ..................... 427 

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

Ventana de orígenes de datos ......................................................................... 462 
Vinculación maestro-detalle........................................................................... 466 
Operaciones con los datos .............................................................................. 470 
Elemento actual ......................................................................................... 470 
Navegar ..................................................................................................... 471 
Ordenación, filtrado y búsqueda ............................................................... 474 
BindingListView ............................................................................................ 476 
Elemento actual de la vista........................................................................ 478 
Ordenar ..................................................................................................... 478 
Filtrar ........................................................................................................ 479 
Buscar ....................................................................................................... 479 
Datos introducidos por el usuario .................................................................. 480 
Error en los datos ...................................................................................... 482 
Validación ................................................................................................. 483 
Datos que no necesitan validación ............................................................ 485

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

SQL ..................................................................................................................... 494 
Crear una base de datos .................................................................................. 494 
Crear una tabla ............................................................................................... 494 
Escribir datos en la tabla ................................................................................ 496 
Modificar datos de una tabla .......................................................................... 496 
Borrar registros de una tabla .......................................................................... 497 
Seleccionar datos de una tabla ....................................................................... 497 
Crear una base de datos .................................................................................. 499 
Base de datos Microsoft Access................................................................ 499 
Base de datos Microsoft SQL Server ........................................................ 501 
ADO.NET ........................................................................................................... 502 
Componentes de ADO.NET........................................................................... 503 
Conjunto de datos........................................................................................... 504 
Proveedor de datos ......................................................................................... 506 
Objeto conexión ........................................................................................ 507 
Objeto orden ............................................................................................. 509 
Objeto lector de datos ............................................................................... 509 
Adaptador de datos ................................................................................... 510 
Modos de conexión ........................................................................................ 512 
Probando una conexión .................................................................................. 514 
Servicio de conexiones................................................................................... 515 
ACCESO CONECTADO A UNA BASE DE DATOS ...................................... 516 
ATAQUES DE INYECCIÓN DE CÓDIGO SQL .............................................. 519 
Órdenes parametrizadas ................................................................................. 523 
XVI ENCICLOPEDIA DE MICROSOFT VISUAL C#

Procedimientos almacenados ......................................................................... 524 
TRANSACCIONES ............................................................................................ 525 
Transacción implícita TransactionScope ....................................................... 526 
Transacciones explícitas................................................................................. 530 
ESCRIBIR CÓDIGO INDEPENDIENTE DEL PROVEEDOR ........................ 533 
CONSTRUIR COMPONENTES DE ACCESO A DATOS............................... 539 
Capa de presentación ..................................................................................... 540 
Operaciones contra la base de datos............................................................... 541 
Objetos de negocio ......................................................................................... 542 
Capa de acceso a datos ................................................................................... 545 
Capa de lógica de negocio ............................................................................. 550 
Diseño de la capa de presentación ................................................................. 551 
Lógica de interacción con la capa de presentación ........................................ 553 
Desacoplar la IU del resto de la aplicación .................................................... 556 
Adaptar la colección de objetos ................................................................ 557 
Capa de lógica de negocio ........................................................................ 561 
Lógica de interacción con la capa de presentación ................................... 564 
Validación ...................................................................................................... 566 
ACCESO DESCONECTADO A UNA BASE DE DATOS ............................... 566 
ASISTENTES DE VISUAL STUDIO ................................................................ 570 
Crear la infraestructura para el acceso a la base de datos .............................. 572 
Crear el conjunto de datos .............................................................................. 577 
Agregar un control rejilla al formulario ......................................................... 578 
Código subyacente ......................................................................................... 579 
Asistente para configurar orígenes de datos................................................... 581 
VISTA EN DETALLE DEL CONJUNTO DE DATOS .................................... 585 
Diseño del formulario .................................................................................... 587 
Vincular las cajas de texto con el conjunto de datos ...................................... 588 
Controles de navegación ................................................................................ 590 
Añadir, borrar y buscar datos ......................................................................... 593 
CONTROL BindingNavigator ............................................................................ 597 
DISEÑO MAESTRO-DETALLE ....................................................................... 598 
EJERCICIOS RESUELTOS ............................................................................... 608 
EJERCICIOS PROPUESTOS............................................................................. 627

CAPÍTULO 14. LINQ ............................................................................................ 631 

RECURSOS DEL LENGUAJE COMPATIBLES CON LINQ.......................... 631 
Declaración implícita de variables locales ..................................................... 632 
Matrices de tipos definidos de forma implícita .............................................. 632 
Tipos anónimos .............................................................................................. 632 
Propiedades autoimplementadas .................................................................... 633 
CONTENIDO XVII

Iniciadores de objetos y colecciones .............................................................. 633 
Métodos extensores ........................................................................................ 634 
Expresiones lambda ....................................................................................... 635 
El delegado Func<T, TResu> ......................................................................... 637 
Operadores de consulta .................................................................................. 638 
Árboles de expresiones lambda ...................................................................... 640 
EXPRESIONES DE CONSULTA...................................................................... 643 
Compilación de una expresión de consulta .................................................... 647 
Sintaxis de las expresiones de consulta .......................................................... 649 
Cláusula group .......................................................................................... 649 
Productos cartesianos ................................................................................ 650 
Cláusula join ............................................................................................. 650 
Cláusula into ............................................................................................. 651 
Cláusula let................................................................................................ 652 
PROVEEDORES DE LINQ ............................................................................... 653 
ENTITY FRAMEWORK ................................................................................... 654 
MARCO DE ENTIDADES DE ADO.NET ........................................................ 656 
Consultar un modelo de objetos ..................................................................... 659 
ACCESO A UNA BASE DE DATOS ................................................................ 663 
Conectarse a la base de datos ......................................................................... 664 
Generar el modelo de entidades ..................................................................... 664 
Las clases de entidad y el contexto de objetos ............................................... 673 
Propiedades de navegación ............................................................................ 676 
Mostrar datos en una interfaz gráfica ............................................................. 678 
Una aplicación con interfaz gráfica................................................................ 679 
Vincular los controles con sus orígenes de datos ........................................... 680 
Proveedor de datos ......................................................................................... 681 
Filtros ............................................................................................................. 686 
Contextos de corta duración ........................................................................... 687 
REALIZAR CAMBIOS EN LOS DATOS ......................................................... 688 
Modificar filas en la base de datos ................................................................. 693 
Insertar filas en la base de datos ..................................................................... 695 
Borrar filas en la base de datos ...................................................................... 699 
Problemas de concurrencia ............................................................................ 703 
El seguimiento de cambios............................................................................. 710 
CODE FIRST: UN NUEVO MODELO DE TRABAJO .................................... 715 
Aplicando Code First ..................................................................................... 717 
Definir el modelo de entidades ................................................................. 717 
Definir el contexto de objetos ................................................................... 718 
Anotaciones en datos y convenciones predeterminadas ........................... 719 
Cadena de conexión .................................................................................. 720 
Generar la base de datos............................................................................ 722 
Validación de entidades ................................................................................. 726 
XVIII ENCICLOPEDIA DE MICROSOFT VISUAL C#

Atributos de anotación de datos ................................................................ 726 
Interfaz fluida ............................................................................................ 727 
Code First desde una base de datos existente................................................. 729 
Cadena de conexión .................................................................................. 730 
Contexto de objetos................................................................................... 731 
El modelo de entidades ............................................................................. 732 
Acceder a los datos ................................................................................... 733 
EJERCICIOS RESUELTOS ............................................................................... 734 
EJERCICIOS PROPUESTOS............................................................................. 737

PARTE 4. APLICACIONES PARA INTERNET .................. 739
CAPÍTULO 15. ASP.NET ..................................................................................... 741 

ASP.NET ............................................................................................................. 743 
Conceptos básicos de ASP.NET .................................................................... 744 
Páginas web ASP.NET .................................................................................. 745 
Controles HTML ............................................................................................ 746 
Controles de servidor web.............................................................................. 747 
Presentación del texto ............................................................................... 748 
Controles de entrada ................................................................................. 748 
Envío y devolución ................................................................................... 750 
Exploración ............................................................................................... 751 
Controles de diseño ................................................................................... 751 
Selección de fechas ................................................................................... 751 
Controles con enlaces a datos ................................................................... 752 
Controles de validación............................................................................. 752 
Un ejemplo de diseño de una página web ASP.NET ..................................... 753 
Software para el desarrollo de aplicaciones ASP.NET .................................. 755 
Componentes de una página web ASP.NET .................................................. 757 
¿Cómo se publica una aplicación web? ......................................................... 759 
Crear un directorio virtual ......................................................................... 760 
Convertir la aplicación en una aplicación web de IIS ............................... 762 
Seguridad asociada con una carpeta.......................................................... 764 
Modelo de ejecución de una página web ASP.NET ...................................... 765 
Lógica de negocio .......................................................................................... 767 
Enlaces de datos en ASP.NET ....................................................................... 771 
Expresiones de enlace de datos ................................................................. 772 
Controles de lista enlazados a datos .......................................................... 772 
Modelo de enlace de ASP.NET ................................................................ 775 
GridView ............................................................................................. 777 
Seleccionar datos ................................................................................. 779 
CONTENIDO XIX

Actualizar y eliminar datos .................................................................. 780 
Insertar datos (FormView) ................................................................... 783 
Estado del modelo y validación ........................................................... 785 
Asistente para publicar un proyecto web ASP.NET ...................................... 787

CAPÍTULO 16. FORMULARIOS WEB ............................................................. 791 

APLICACIÓN WEB ASP.NET .......................................................................... 792 
Crear la capa de acceso a datos ...................................................................... 796 
Añadir un nuevo formulario web ................................................................... 798 
Descripción de un formulario web ASP.NET ........................................... 799 
Agregar controles y texto a la página ............................................................. 800 
Ciclo de vida de una página ........................................................................... 802 
Modelo de eventos de ASP.NET ................................................................... 805 
Añadir los controladores de eventos .............................................................. 805 
Obtener acceso a la base de datos .................................................................. 808 
CONTROLES DE VALIDACIÓN ..................................................................... 810 
HERRAMIENTA DE PRECOMPILACIÓN ASP.NET .................................... 814 
PROCESAMIENTO DE FORMULARIOS ....................................................... 816 
Formato de la petición HTTP ......................................................................... 816 
Petición HTTP get..................................................................................... 817 
Petición HTTP post ................................................................................... 818 
Respuestas en el protocolo HTTP .................................................................. 819 
Contexto de un formulario web...................................................................... 819 
Redireccionar una solicitud a otra URL ......................................................... 821 
ESTADO DE UNA PÁGINA ASP.NET ............................................................ 821 
Administración de estado en el cliente........................................................... 822 
Cookies ..................................................................................................... 822 
Cadenas de consulta .................................................................................. 824 
Campos de formulario ocultos .................................................................. 825 
Estado de vista .......................................................................................... 825 
Administración de estado en el servidor ........................................................ 828 
Estado de aplicación ................................................................................. 828 
Estado de sesión ........................................................................................ 828 
Bases de datos ........................................................................................... 829 
MEJORANDO EL RENDIMIENTO EN EL SERVIDOR................................. 830 
Almacenamiento en la caché de resultados .................................................... 830 
Configurar el almacenamiento en caché a nivel de página ....................... 831 
Actualización dinámica de fragmentos de una página en caché ............... 832 
Configurar el almacenamiento en caché por programación ...................... 833 
Almacenamiento en caché de datos procedentes de SQL Server ................ 834 
Reducir la información hacia y desde el servidor .......................................... 836 
XX ENCICLOPEDIA DE MICROSOFT VISUAL C#

CONTROLES DE SERVIDOR COMO ORIGEN DE DATOS......................... 837 
SQL y desarrollo web .................................................................................... 839 
Control SqlDataSource ............................................................................. 841 
Responder a los eventos ............................................................................ 844 
LINQ y desarrollo web .................................................................................. 846 
Control EntityDataSource ......................................................................... 847 
Responder a los eventos ............................................................................ 853 
Generar la consulta Select mediante código ............................................. 855 
Realizar cambios en los datos ................................................................... 856 
Actualizar y eliminar filas en la base de datos ..................................... 857 
Controlar los errores en una página ASP.NET .................................... 859 
Insertar filas en la base de datos .......................................................... 859 
MODELO DE ENLACE DE ASP.NET ............................................................. 865 
Realizar cambios en los datos ................................................................... 870 
Actualizar y eliminar filas en la base de datos ..................................... 870 
Controlar los errores en una página ASP.NET .................................... 873 
Insertar filas en la base de datos .......................................................... 873 
Capa de la lógica de negocio.......................................................................... 878 
Paginación, ordenación y filtrado .................................................................. 881 
EJERCICIOS PROPUESTOS............................................................................. 887

CAPÍTULO 17. SERVICIOS WEB ...................................................................... 889 

Integrar un servicio web en una aplicación .................................................... 890 
SERVICIOS WCF .............................................................................................. 891 
MODELO DE PROGRAMACIÓN DE WCF .................................................... 892 
Implementar un servicio WCF ....................................................................... 893 
Definir un contrato .................................................................................... 894 
Configuración del servicio WCF .............................................................. 900 
Implementar un cliente WCF ......................................................................... 902 
Configuración del cliente WCF ................................................................ 906 
Obtener acceso al servicio web ................................................................. 906 
Ejecución asíncrona .................................................................................. 908 
Seguridad en WCF ......................................................................................... 912 
SERVICIOS WEB Y LINQ ................................................................................ 912 
Arquitectura de N capas lógicas y N niveles físicos ...................................... 914 
Crear la base de datos..................................................................................... 915 
Crear el servicio WCF.................................................................................... 916 
Cliente WCF .................................................................................................. 924 
Llenar la lista............................................................................................. 927 
Mostrar datos ............................................................................................ 928 
Actualizar datos ........................................................................................ 928 
CONTENIDO XXI

Cambiar foto ............................................................................................. 929 
Agregar datos ............................................................................................ 929 
Borrar datos............................................................................................... 930 
Errores inesperados ................................................................................... 931 
EJERCICIOS PROPUESTOS............................................................................. 932

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

ARQUITECTURA ASP.NET ............................................................................. 940 
CICLO DE VIDA DE UNA APLICACIÓN ASP.NET ..................................... 941 
GRUPOS DE APLICACIONES EN IIS ............................................................. 942 
AUTENTICACIÓN DE WINDOWS ................................................................. 943 
AUTORIZACIÓN ............................................................................................... 950 
SUPLANTACIÓN DE IDENTIDAD ................................................................. 952 
AUTENTICACIÓN MEDIANTE FORMULARIOS ......................................... 953 
CONTROLES PARA INICIO DE SESIÓN ....................................................... 958 
SERVICIO DE SUSCRIPCIONES..................................................................... 971 
SEGURIDAD EN LA TRANSMISIÓN DE DATOS ........................................ 978 
Criptografía simétrica..................................................................................... 979 
Criptografía asimétrica ................................................................................... 979 
AUTENTICACIÓN USANDO CERTIFICADOS ............................................. 981 
Instalar un certificado SSL en IIS 7.0 o superior ........................................... 983 
Certificado de cliente rechazado .................................................................... 988

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

ESTRUCTURA DE UNA PÁGINA MAESTRA ............................................... 989 
Controles de usuario web ............................................................................... 994 
Mejorar el aspecto de la interfaz .................................................................... 999 
Temas y máscaras en ASP.NET ..................................................................... 1000 
Perfiles ........................................................................................................... 1003 
EJERCICIOS RESUELTOS ............................................................................... 1007 
Base de datos .................................................................................................. 1008 
Cliente web .................................................................................................... 1012

CAPÍTULO 20. AJAX ........................................................................................... 1021 

FUNDAMENTOS DE AJAX ............................................................................. 1023 
XMLHttpRequest ........................................................................................... 1024 
AJAX con ASP.NET...................................................................................... 1032 
GENERACIÓN DE CÓDIGO JAVASCRIPT ................................................... 1034 
XXII ENCICLOPEDIA DE MICROSOFT VISUAL C#

Fichero JavaScript .......................................................................................... 1035 
Vincular un evento con una función JavaScript ............................................. 1035 
Inyectar código JavaScript desde el lado del servidor ................................... 1037 
ASP.NET AJAX ................................................................................................. 1038 
Crear un sitio web ASP.NET AJAX ................................................................... 1039 
Clase ScriptManager ...................................................................................... 1040 
Clases ScriptManager y ScriptManagerProxy ............................................... 1048 
Clase UpdatePanel ......................................................................................... 1048 
Clase AsyncPostBackTrigger......................................................................... 1050 
Clase UpdateProgress..................................................................................... 1051 
Cancelar una llamada asíncrona ..................................................................... 1053 
Clase Timer .................................................................................................... 1054 
Servicios web ................................................................................................. 1054 
Métodos de página ......................................................................................... 1058 
EJERCICIOS RESUELTOS ............................................................................... 1060

PARTE 5. ACERCA DEL CD Y DE LOS APÉNDICES .... 1063
HERRAMIENTAS DE DESARROLLO.............................................................. 1065 
PÁGINAS WEB ...................................................................................................... 1081 
INTERNACIONALIZACIÓN .............................................................................. 1113 
.NET PARA LINUX ............................................................................................... 1123 
ÍNDICE ................................................................................................................... 1125
PRÓLOGO
C#, pronunciado C Sharp, es actualmente, junto con Java, uno de los lenguajes de
programación más populares en Internet. Pero, además, apoyándose en la biblio-
teca .NET, está disponible para el desarrollo de aplicaciones de propósito general,
aplicaciones con interfaz gráfica, aplicaciones para Internet y aplicaciones para
móviles. La idea fundamental de esta obra es dar a conocer estas facetas del len-
guaje C#, profundizando en el alcance que tiene sobre la Web.

En los últimos tiempos C y C++ han sido los lenguajes más utilizados en el
desarrollo de aplicaciones en general. Ambos lenguajes proporcionan al progra-
mador el nivel de abstracción preciso para abordar el desarrollo de cualquier apli-
cación por compleja que sea, así como mecanismos de bajo nivel para utilizar las
características más avanzadas de las plataformas sobre las que se desarrolla; pero,
en general, el tiempo necesario para desarrollar una aplicación resulta largo com-
parado con otros lenguajes como Visual Basic, que ofrecen además de facilidad,
una elevada productividad en el desarrollo de aplicaciones, aunque, eso sí, sacrifi-
cando la flexibilidad que los desarrolladores de C y C++ requieren. La solución
que Microsoft da a este problema es el lenguaje denominado C#. Se trata de un
lenguaje moderno orientado a objetos que permite desarrollar una amplia gama de
aplicaciones para la plataforma Microsoft .NET.

Más que otra cosa, el objetivo de C# es permitir a todos los desarrolladores en
general, y a los de C y C++ en particular, abordar el desarrollo de aplicaciones
complejas con facilidad y rapidez pero sin sacrificar la potencia y el control que
ofrecen C y C++. Es un poco como tomar todas las cosas buenas de Visual Basic
y añadirlas a C++, aunque recortando algunas de las tradiciones más ocultas y di-
fíciles de conocer de C y C++. Esto elimina los errores de programación más co-
munes en C/C++. Por ejemplo:
XXIV ENCICLOPEDIA DE MICROSOFT VISUAL C#

 El recolector de basura libera al programador del peso que conlleva el manejo
manual de la memoria.
 Todos los objetos creados dinámicamente así como las matrices son iniciados
a cero, y aunque C# no inicia automáticamente las variables locales, el compi-
lador avisará siempre que se intente utilizar una antes de iniciarla.
 C# unifica el sistema de tipos permitiendo ver a cada uno de ellos en el len-
guaje como un objeto.

Resumiendo, C# es un lenguaje orientado a objetos seguro y elegante 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 C#) junto con otros
componentes de desarrollo, como ASP.NET (formularios web y servicios web) y
ADO.NET, forman un paquete de desarrollo denominado Microsoft Visual Studio
que podemos utilizar para crear aplicaciones Windows tradicionales (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ódigo avanzado, diseñado-
res de interfaces de usuario apropiados, depurador integrado y muchas otras utili-
dades para facilitar un desarrollo rápido de aplicaciones.

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 esta ofrece. Y “NET” hace refe-
rencia al ámbito donde operarán nuestras aplicaciones web (Network - red).

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 (C#, Visual Basic, Java, etc., son lenguajes orientados a objetos). Haber pro-
gramado en .NET y con C# sería lo ideal, así como tener conocimientos de
HTML y XML. Estos requisitos son materia de mis otros libros Microsoft C# -
PRÓLOGO XXV

Lenguaje y aplicaciones y Microsoft C# - Curso de programación, ambos edita-
dos también por las editoriales RA-MA y Alfaomega Grupo Editor.

Microsoft C# - Lenguaje y aplicaciones se centra en la programación básica:
tipos, sentencias, matrices, métodos, ficheros, etc., y hace una introducción a las
interfaces gráficas, a las bases de datos y a las aplicaciones para Internet, y Micro-
soft C# - Curso de programación cubre la programación básica (expuesta en me-
nor 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 como estructuras dinámicas de
datos, algoritmos de uso común, hilos (programación concurrente), etc. Este sí
que es un libro de programación con C# en toda su extensión. Puede ver más deta-
lles 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
XXVI ENCICLOPEDIA DE MICROSOFT VISUAL C#

APÉNDICE C. INTERNACIONALIZACIÓN
APÉNDICE D. .NET PARA LINUX

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. En especial, quiero expresar mi agradeci-
miento por su participación en las ediciones anteriores a mi excolega Manuel
Peinado Gallego, por sus buenas recomendaciones y aportaciones, y a Francisco
Ceballos Fernández, ingeniero de informática, por la revisión del contenido.
También deseo expresar mi agradecimiento a Microsoft Ibérica por poner a mi
disposición, en particular, y de todos los lectores, 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 CD y de los apéndices
 Entornos 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.
1066 ENCICLOPEDIA DE MICROSOFT VISUAL C#

 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 C# 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 ventana 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 siguiente
muestra esta ventana:
APÉNDICE A: HERRAMIENTAS DE DESARROLLO 1067

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 .cs, hace-
mos clic sobre Program.cs y utilizando el botón derecho del ratón, seleccio-
1068 ENCICLOPEDIA DE MICROSOFT VISUAL C#

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: HERRAMIENTAS DE DESARROLLO 1069

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).
1070 ENCICLOPEDIA DE MICROSOFT VISUAL C#

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: HERRAMIENTAS DE DESARROLLO 1071

 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
1072 ENCICLOPEDIA DE MICROSOFT VISUAL C#

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: HERRAMIENTAS DE DESARROLLO 1073

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 (:).
1074 ENCICLOPEDIA DE MICROSOFT VISUAL C#

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: HERRAMIENTAS DE DESARROLLO 1075

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 BASE 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
1076 ENCICLOPEDIA DE MICROSOFT VISUAL C#

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: HERRAMIENTAS DE DESARROLLO 1077

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.
1078 ENCICLOPEDIA DE MICROSOFT VISUAL C#

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.

Si la operación anterior no solucionó el problema, pruebe a reparar la instala-
ción actual a partir del CD de instalación 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
APÉNDICE A: HERRAMIENTAS DE DESARROLLO 1079

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 =
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-
1080 ENCICLOPEDIA DE MICROSOFT VISUAL C#

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-
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-
1082 ENCICLOPEDIA DE MICROSOFT VISUAL C#

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 1083

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
1084 ENCICLOPEDIA DE MICROSOFT VISUAL C#

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 1085

 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.
1086 ENCICLOPEDIA DE MICROSOFT VISUAL C#

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 1087

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.
1088 ENCICLOPEDIA DE MICROSOFT VISUAL C#

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 1089

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:
1090 ENCICLOPEDIA DE MICROSOFT VISUAL C#

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 1091

<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>
1092 ENCICLOPEDIA DE MICROSOFT VISUAL C#

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 1093

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>
1094 ENCICLOPEDIA DE MICROSOFT VISUAL C#

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 1095

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>
1096 ENCICLOPEDIA DE MICROSOFT VISUAL C#

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 CD.

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 1097

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.
1098 ENCICLOPEDIA DE MICROSOFT VISUAL C#

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 1099

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">
1100 ENCICLOPEDIA DE MICROSOFT VISUAL C#

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 1101

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.
1102 ENCICLOPEDIA DE MICROSOFT VISUAL C#

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 CD.

<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 1103

<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%>
1104 ENCICLOPEDIA DE MICROSOFT VISUAL C#

 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 CD que acompaña al libro.
APÉNDICE B: PÁGINAS WEB 1105

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>
1106 ENCICLOPEDIA DE MICROSOFT VISUAL C#

<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 1107

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>.
1108 ENCICLOPEDIA DE MICROSOFT VISUAL C#

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 1109

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>
1110 ENCICLOPEDIA DE MICROSOFT VISUAL C#

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 1111

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.
1112 ENCICLOPEDIA DE MICROSOFT VISUAL C#

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
1114 ENCICLOPEDIA DE MICROSOFT VISUAL C#

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:

using System;
using System.Globalization;

class CInfoCultura
{
static void Main(string[] args)
{
foreach (CultureInfo info in CultureInfo.GetCultures(
CultureTypes.AllCultures))
// Mostrar todas las referencias culturales
Console.WriteLine("{0,-12} {1}", info, info.DisplayName);
}
}

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 static void Cultura(string sInfo)
{
CultureInfo info = 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();
}
APÉNDICE C: INTERNACIONALIZACIÓN 1115

Para invocar al método anterior, añada al método Main sentencias análogas a
las siguientes:

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 static void CulturaActual()
{
CultureInfo info = null;
info = CultureInfo.CurrentUICulture;
Console.Write("Cultura actual: ");
Console.WriteLine("{0, -12} {1}", info, info.DisplayName);
}

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
1116 ENCICLOPEDIA DE MICROSOFT VISUAL C#

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-
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 1117

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.cs[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.
1118 ENCICLOPEDIA DE MICROSOFT VISUAL C#

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 void ArchivoSalir_Click(object sender, EventArgs e)
{
Close();
}

private void AyudaAcercaDe_Click(object sender, EventArgs e)
{
AcercaDe dlg = new AcercaDe();
dlg.Show();
}
APÉNDICE C: INTERNACIONALIZACIÓN 1119

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

using System.Globalization;
using 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 void OpcionesIdiomaEspañol_Click(object sender, EventArgs e)
{
Thread.CurrentThread.CurrentCulture = new CultureInfo("es-ES");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("es-ES");
this.Controls.Clear();
this.InitializeComponent();
}

private void OpcionesIdiomaInglés_Click(object sender, EventArgs e)
{
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");
this.Controls.Clear();
this.InitializeComponent();
}

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.

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ú
1120 ENCICLOPEDIA DE MICROSOFT VISUAL C#

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:

using System.Resources;
// ...

private void btAceptar_Click(object sender, EventArgs e)
{
ResourceManager rm = new ResourceManager("InfoCulturaWin.Form1",
typeof(Form1).Assembly);
TextBox1.Text = rm.GetString("cad01");
}

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-
APÉNDICE C: INTERNACIONALIZACIÓN 1121

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í:

using System.Resources;
// ...

private void btAceptar_Click(object sender, EventArgs e)
{
System.Resources.ResourceManager rm =
new System.Resources.ResourceManager(
"InfoCulturaWin.Properties.Resources", typeof(Form1).Assembly);
if (CultureInfo.CurrentUICulture.Name == "es-ES")
TextBox1.Text = rm.GetString("cad01_es");
else
TextBox1.Text = rm.GetString("cad01_en");
}
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, multiplataforma, 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 C#, entre otros lenguajes, así como otras herramientas de
ayuda al desarrollo de aplicaciones multiplataforma (cross-platform; para varias
computadoras/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 no es más que una extensión a esta
enciclopedia para que vea cómo puede aplicar lo aprendido en la misma, sobre
una máquina Linux con Mono.
ÍNDICE
acceso desconectado a bases de datos, 570 
.  acceso desconectado a datos, 566 
accesos directos, 1093 
.NET, 4, 8  Access, 508 
.NET Framework, 5  aceleradores, 129 
Acerca de, 179, 326 
acoplar control, 140 
?  acoplar un control a su contenedor, 221 
?, 866  action, 1097, 1099 
Activate, 63, 64 
Activated, 62, 63 
@  ActiveForm, 63 
@, 726  ActiveMdiChild, 346 
@ Page, 799, 991  actualizar las filas, 693 
@ Register, 997  actualizar y eliminar filas, EntityDataSource, 
857 
actualizar y eliminar filas, modelo de enlace, 
A  870 
a, etiqueta HTML, 1093  adaptador, 510 
abort, 1024  Add, 55, 126, 229, 595 
Abort, 400  Add, colección, 162 
abrir documento, 354  Added, 505 
acceder a un nodo, 258  AddNew, 488 
AcceptButton, 83, 85, 175, 368  AddRange, 127 
AcceptsReturn, 140  address, 900 
AcceptsTab, 140  administración de sitios web, 961 
acceso a datos desde un formulario web, 837  ADO.NET, 9, 502 
acceso a datos utilizando componentes, 571  AfterSelect, 261 
acceso anónimo, 944  agregar datos, 929 
acceso anónimo, deshabilitar, 946  AJAX, 1021, 1048 
acceso conectado a bases de datos, 516  Ajax Control Toolkit, 999 
1126 ENCICLOPEDIA DE MICROSOFT VISUAL C#

AJAX, envío de datos utilizando el método  árbol, añadir imágenes para los nodos, 255 
POST, 1031  árbol, añadir nodos, 254 
AJAX, llamadas fuera de dominio, 1030  árbol, añadir y borrar un nodo, 262 
AJAX, llamadas que producen errores o que no  árbol, arquitectura, 253 
retornan, 1030  árbol, iniciar, 256 
align, 1094  árbol, nodos, 253 
alineación del texto, 54, 364  árbol, personalizar, 267 
alisado, 300  árbol, recorrer, 262 
AllowFullOpen, 219  árboles de expresiones, 640 
AllowMerge, 345  archivo de aplicación de ASP.NET, 814 
AllowsTransparency, 65  área cliente, 64 
alt, 1094  área de texto, 1100 
ámbito de aplicación, 828  argumentos en la línea de órdenes, 73, 1071 
ámbito de sesión, 829  arrastrar y soltar, 366 
Anchor, 221, 367  ArrayList, 447 
animación, 334  asincrónico, modelo, 912 
añadir menú, 128  asociación, 669 
añadir texto a una caja de texto, 91  ASP, 1111 
añadir un botón a la barra de h., 135  ASP.NET, 743, 1112 
añadir un control a la barra de estado, 137  ASP.NET AJAX, 1038 
añadir un nuevo registro, 594  ASP.NET, acceso a los recursos, 808 
añadir un usuario que tenga una función, 974  ASP.NET, arquitectura, 940 
añadir una nueva fila a una rejilla, 488  ASP.NET, carpetas, 796 
aplicación ASP.NET cliente de un servicio web,  ASP.NET, instalación, 1077 
1012  aspnet_compiler, 815 
aplicación web, 1112  aspnet_regiis, 1077 
aplicación web de IIS, 762  assembly, 11 
aplicación, ciclo de vida, 70  Assembly, 70 
aplicación, crear, 16  AsyncPostBackErrorMessage, 1041 
aplicación, depurar, 33  AsyncPostBackTimeout, 1041 
aplicación, desarrollo, 82  AsyncPostBackTrigger, 1050 
aplicación, instanciar sólo una vez, 72, 78  ataques de inyección SQL, 519 
aplicaciones de consola, 1066  atributos de anotación de datos, 720, 726 
aplicaciones web, 792  atributos globales de una aplicación, 69 
App.config, 67  atributos proveedores de valores, 866 
App_Browsers, 796  Attach, 696, 922 
App_Code, 767, 796  AttachDBFilename, 1072 
App_Data, 796  autenticación ASP.NET, 947 
App_GlobalResource, 796  autenticación básica con conexión SSL, 982 
App_LocalResources, 796  autenticación de IIS, 947 
App_Themes, 796, 1000  autenticación mediante formularios, 954 
App_WebReferences, 796  autenticación Windows, 946 
Appearance, 183, 187  authentication, 947 
AppendText, 144  authorization, 947, 950, 976 
applets, 1112  AutoEventWireup, 769, 803 
Application, 51, 62, 71, 821  AutoPostBack, 804, 805, 1044 
Application_Error, 859  AutoResetEvent, 412, 416 
ApplicationExit, 71  autoridad de certificación, 982 
árbol, 252  autorización, 950 
árbol, acceder a un nodo, 258  AutoValidate, 96 
ÍNDICE 1127

ayuda dinámica, 18  BindItem, 774 
Bitmap, 294, 320 
B  bloquear los controles, 29 
BMP, 319 
BackColor, 110  body, 1089 
BackgroundWorker, 406  Bold, 364 
barra de desplazamiento, 25, 44, 202  border, 1103 
barra de desplazamiento, eventos, 204  borrar datos, 930 
barra de direcciones, 1088  borrar registros en una tabla, 497 
barra de estado, 136  borrar tabla de la base de datos, 497 
barra de herramientas, 134  borrar un control, 27 
barra de herramientas y de estado, 361  borrar un registro, 595 
barra de menús, 24, 43, 124  botón borrar, 1099 
barra de menús, crear, 126  botón de opción, 24, 186, 1098 
barra de progreso, 206  botón de pulsación, 23, 56, 82 
barra de título, 44  botón enviar, 1099 
barras de desplazamiento, 321  botón predeterminado, 83, 85, 175 
barras de herramientas, fusionar, 351, 371  br, 1090 
barras, añadir, 320  Brush, 299 
base de datos, 493  bucle de mensajes, 47 
base de datos accedida desde un servicio web,  buscar en una lista, 192 
1011  buscar un registro, 595 
base de datos basada en servicio, 608  Button, 53, 81, 82 
base de datos local, 609  ButtonBase, 81 
base de datos SQL Server, crear, 599 
base de datos, añadir las tablas, 600, 610 
base de datos, crear, 608, 1072 

base de datos, diagrama visual, 612  CA, 982 
base de datos, navegar, 590  Cache, 834 
bases de datos, mover, 1072  caché, 830 
Beep, 338  caché con SQL Server, 834 
BeginEdit, 557  cadena de conexión, 720 
BeginInvoke, 402  cadena de consulta, 824 
BeginUpdate, 157, 192  caja de clave de acceso, 1098 
biblioteca de clases, 9  caja de diálogo Abrir, 215 
Bin, 796  caja de diálogo Color, 218 
binary, 916  caja de diálogo Fuente, 219 
BinaryExpression, 643  caja de diálogo Guardar, 217 
Bind, 774  caja de diálogo modal o no modal, 170 
binding, 900  caja de diálogo modal, cerrar, 178 
Binding, 435  caja de diálogo no modal, cerrar, 234 
BindingComplete, 442  caja de diálogo para mostrar un mensaje, 170 
BindingContext, 445  caja de diálogo, crear, 174 
BindingList, 444  caja de diálogo, mostrar, 176 
BindingList, propiedades, 562  caja de diálogo, recuperar datos, 177 
BindingListView, 476, 686  caja de herramientas, 22 
BindingManagerBase, 446  caja de imagen, 24, 318 
BindingNavigator, 597  caja de imagen, Image, 323 
BindingSource, 437, 439, 445, 456, 459, 465,  caja de texto, 24, 82, 1097 
468, 552, 589, 592, 623  caja de texto multilínea, 139 
1128 ENCICLOPEDIA DE MICROSOFT VISUAL C#

caja de texto, seleccionar el contenido, 90  ChangePassword, control, 971 
cajas de diálogo estándar, 214  ChangeTracker, 690, 711 
cajas de diálogo personalizadas, 173  chat, 935 
calculadora, 106  CheckBox, 53, 81, 182 
calendario, 25  Checked, 153, 183, 187, 192 
callback, 1024  CheckedChanged, 185, 191 
cambios en los datos, 688  CheckedListBox, 196 
cambios en los datos, notificar, 437  CheckOnClick, 153 
cambios, seguimiento, 710  CheckState, 183 
campos, 493  CheckStateChanged, 186 
Cancel, 96  ciclo de vida de un formulario, 62 
cancelar una llamada asíncrona, 1053  ciclo de vida de una aplicación, 70 
CancelAsync, 410  ciclo de vida de una página web, 802 
CancelButton, 175, 368  clase, 57 
CancelEdit, 557  clase Application, 51 
CancelEventArgs, 96  clase Binding, 435 
CancellationPending, 410  clase Bitmap, 294, 320 
CanRedo, 361  clase Button, 53 
CanUndo, 144, 154, 361  clase Cache, 834 
capa de acceso a datos, 545  clase CheckBox, 53, 182 
capa de lógica de negocio, 550  clase CheckedListBox, 196 
capa de presentación, 540  clase Clipboard, 142 
capa de presentación, desacoplar, 556  clase Color, 110 
capa de presentación, lógica, 553  clase ColorDialog, 218 
capas de servicios de la red, 1082  clase ColorMatrix, 316 
cargar imagen, 322  clase ComboBox, 54, 197 
carpeta virtual, 759  clase ConfigurationManager, 845 
carpetas ASP.NET, 796  clase Control, 82 
cascada, 362  clase Convert, 190 
cascada, operaciones en, 701  clase ConvertEventArgs, 441 
casilla de verificación, 24, 182, 1098  clase CultureInfo, 1114 
Category, 379  clase Cursor, 327 
CellBeginEdit, 556  clase Cursors, 327 
CellClick, 251  clase DataGridView, 240 
CellDoubleClick, 488  clase DataGridViewColumn, 241 
CellEnter, 472  clase DataGridViewRow, 241 
CellFormatting, 245  clase DataRow, 505 
Cells, 242  clase DataTable, 505 
CellValidated, 483  clase DbContext, 675 
CellValidating, 483  clase de entidad, 673, 715 
center, 1095  clase Debug, 129 
CenterParent, 175  clase EventWaitHandle, 416 
centrar ventana, 281  clase FontDialog, 220 
cerrar, 44  clase Form, 48 
cerrar formulario, 129  clase Graphics, 294 
certificado de cliente, 983, 986  clase GroupBox, 186 
certificado de cliente es rechazado, 988  clase Image, 320 
certificado del servidor, 981, 984  clase Label, 53 
certificados, generar o solicitar, 983  clase ListBox, 54, 191 
CGI, 1110  clase ListView, 267 
ÍNDICE 1129

clase Membership, 973  Close, 64, 129, 178, 181, 510 
clase MembershipUser, 973  CLR, 9 
clase MenuStrip, 126  CLS, 6 
clase Metafile, 320  code, 1091 
clase OpenFileDialog, 215  Code First, 715 
clase Page, 802  ingeniería inversa, 729 
clase Panel, 186  Code First, convenciones, 719 
clase Point, 55  CodeFile, 799 
clase ProgressBar, 206  código administrado, 11 
clase RadioButton, 54, 186  código intermedio, 9 
clase Regex, 103, 442  código no administrado, 11 
clase ResourceManager, 132  colección, 162 
clase ScrollBar, 54, 202  colección como origen de datos, 444 
clase seriable, 228  colección ConstraintCollection, 505 
clase Size, 50, 55  colección ControlBindingsCollection, 590 
clase TextBox, 53, 141  colección DataColumnCollection, 505 
clase TextBoxBase, 143  colección DataRelationCollection, 505 
clase Thread, 398  colección DataRowCollection, 505, 594 
clase Timer, 223  colección DataTableCollection, 505 
clase TimeSpam, 224  colección de elementos, 24 
clase ToolStrip, 121  colección jerárquica, 25 
clase ToolStripButton, 135  colección, añadir, 195 
clase ToolStripItem, 121  colección, borrar, 195 
clase ToolStripItemCollection, 127  colección, borrar todo, 195 
clase ToolStripMenuItem, 126  colección, insertar, 195 
clase ToolStripSeparator, 128  colocar el control, 29 
clase TrackBar, 205  Color, 110, 218, 297 
clase TreeNode, 253  color, establecer, 110 
clase TreeView, 252  Color, propiedad, 219, 220 
clase Type, 261  ColorDialog, 214, 218 
clase UserControl, 375, 996  ColorMatrix, 316 
clase WaitHandle, 415  columnas, 493 
clases, 9  ColumnCount, 252 
clases POCO, 716  Columns, 241 
clave de un nodo, 253  Columns de ListView, 270 
clave pública, 979  COM, 12 
Clear, 144, 195  COM+, 13 
ClearError, 859  combinar menús, 345 
clearTimeout, 1031  ComboBox, 54, 81, 197 
clic en un botón, 474  Command, 506, 509 
clic en un botón, simular, 118, 595  CommandBuilder, 537 
Click, 46, 87  CommandField, 884 
Client certificate revoked, 988  CommandName, 783 
cliente servidor, 741  CommonDialog, 214 
cliente WCF, 902  compilador JIT, 11 
ClientScript, 1037  Complete, 624 
ClientSize, 50  Component, 80 
ClientWins, 708  componente, 80 
clipboard, 326  componentes de acceso a datos, 539 
Clipboard, 142  concurrencia, 566, 703, 914 
1130 ENCICLOPEDIA DE MICROSOFT VISUAL C#

ConcurrencyCheck, 705  control Literal, 996 
ConcurrencyMode, 703  control Login, 958 
conexión abierta/cerrada, 675  control LoginName, 971 
conexión, probar, 514  control LoginStatus, 959 
configuración de la aplicación, 67  control LoginView, 959 
configuración, fichero, 536, 947  control Panel, 751 
configurar el almacenamiento en caché, 831  control PasswordRecovery, 970 
configurar IIS, 948  control RadioButton, 749 
Configuration, 712, 947  control RadioButtonList, 749 
ConfigurationManager, 536, 845  control RichTextBox, 352 
confirmar, 172  control ScriptManagerProxy, 1048 
conjunto de datos, 504  control SqlDataSource, 1044 
conjunto de datos, crear, 577  control Substitution, 832 
Connection, 506  control Table, 751 
ConnectionStrings, 536, 845  control TextBox, 748 
ConstantExpression, 643  control web para acceso a datos, 838 
Constraint, 505  Control, atributo proveedor de valor, 866 
ConstraintCollection, 505  control, borrar, 27 
construir controles, 373  control, mover, 27 
consultas parametrizadas, 856  Control.DataBind, 771 
contenedor, 24  controlador de eventos, 30, 60 
contenedor UpdatePanel, 1048  controladores de espera, 415 
contenedor UpdateProgress, 1052  controladores de eventos, asignar, 61 
Content, 937, 992, 1044  ControlBox, 175 
ContentAlignment, 54  controles, 45, 1097 
ContentPlaceHolder, 991, 1044  controles con enlaces a datos, 752 
ContextMenuStrip, 159, 485  controles de rango definido, 201 
contexto de objetos, 673, 674  controles de servidor HTML, 745 
contextos de corta duración, 687  controles de servidor web, 745 
contract, 900  controles de usuario, 746 
contrato, 893  controles de usuario web, 994 
contrato de datos, 898  controles de validación, 745, 752, 811 
contrato de servicio, 894  controles HTML, 746 
Control, 80, 81, 181  controles para inicio de sesión, 958 
control Button, 750  controles Strip, 321 
control Calendar, 751  controles web, 747 
control ChangePassword, 971  controles, construir, 373 
control CheckBox, 748  controles, enlazar o vincular con BD, 588 
control CheckBoxList, 748  Controls, 55 
control CreateUserWizard, 967  ControlUpdateMode, propiedad, 435 
control DataGridView, 578, 584  conversión de datos, 115 
control de usuario, 379  conversiones en enlaces, 439 
control DetailsView, 1046  Convert, 88, 190 
control DropDownList, 750  ConvertEventArgs, 441 
control GridView, 973, 1045  ConvertEventHandler, 440 
control HyperLink, 751  convertir un DateTime en un String y viceversa, 
control ImageButton, 750  387 
control Label, 748  convertir un entero en base 10, 8 o 16, en una 
control LinkButton, 750  cadena de caracteres, 191 
control ListBox, 749 
ÍNDICE 1131

convertir una cadena de caracteres a un entero  CurrentUICulture, 1115 
en base 10, 8 o 16, 190  CurrentValues, 713 
cookies, 822  Cursor, 328 
coordenadas, 311  cursor del ratón, cambiar, 328 
coordenadas universales, 331  Cursors, 327 
coordenadas, tipos, 315  curvas cardinales y de Bézier, 305 
coordinador de transacciones distribuidas, 625  Cut, 144 
Copy, 144 
correo electrónico, 1085 
cortar, copiar y pegar, 359 

Count, 446, 592, 638  Data Mapper, 661 
crear un adaptador, 572  Data Transfer Object, 540 
crear un enlace, 437, 447  DataAdapter, 506, 580 
crear una aplicación, 16  DataAdapter, métodos, 567 
crear una aplicación MDI, 344  Database, 720 
crear una base de datos, 494, 499, 501  Database First, 664, 715 
crear una caja de diálogo, 174  DataBind, 770, 772 
crear una conexión, 577  DataBinder, 773 
crear una imagen a partir de un fichero, 258  DataBindings, 436, 588 
crear una tabla, 494  DataColumn, 505, 586 
CREATE DATABASE, 494  DataColumnCollection, 505 
CREATE TABLE, 494  DataContract, 898 
CreateDatabaseIfNotExists, 723  DataError, 482 
CreateGraphics, 296  DataGridView, 81, 240, 461, 465, 540, 552, 553, 
CreateUser, 973  578, 584 
CreateUserWizard, control, 967  DataGridView, arquitectura, 241 
credentials, 955  DataGridView, construir, 242 
criptografía asimétrica, 979  DataGridView, control de errores, 481 
criptografía simétrica, 979  DataGridView, iniciar, 244 
CRL, 988  DataGridView, n.º de filas y columnas, 252 
CRUD, 719  DataGridView, origen de datos, 247 
CSDL, 656  DataGridView, tamaño de las celdas, 250 
CSS, 993, 1021, 1043, 1104  DataGridView, validar, 566 
CSS, atributos, 1104  DataGridView, valor de la celda, 251 
CSS, class, 1106  DataGridViewColumn, 241 
CSS, div, 1108  DataGridViewRow, 241 
CSS, id, 1107  DataMember, 468, 578, 769, 898 
CSS, link, 1105  DataReader, 506, 510 
CSS, pseudoclases, 1107  DataRelationCollection, 505 
CSS, span, 1108  DataRow, 505 
CSS, style, 1104  DataRowCollection, 505, 594 
cuadro combinado, 197  DataRowView, 435, 595 
cultura, 1114  DataSet, 435, 566, 586 
CultureInfo, 1114  DataSet, métodos, 567 
CurrencyManager, 446, 459  DataSource, 446, 449, 466, 529, 568, 578, 769 
Current, 446, 595  DataSource de DataGridView, 248 
CurrentCell, 251  DataSourceID, 769 
CurrentCellAddress, 251  DataSourceObject, 769 
CurrentCulture, 1115  DataSourceUpdateMode, propiedad, 435 
CurrentItem, 470, 478  DataTable, 435, 505, 586 
1132 ENCICLOPEDIA DE MICROSOFT VISUAL C#

DataTableCollection, 505  diálogo no modal, cerrar, 234 
DataTextField, 769  diálogo, ¿está visible?, 236 
DataTextFormatString, 770  diálogo, acceso a la ventana padre, 233 
DataValueField, 770  diálogo, ocultar, 234 
DataView, 435, 476  DialogResult, propiedad de un botón, 177 
DataViewManager, 435, 586  DialogResult, propiedad de un formulario, 177 
DateTime, 381, 387  DialogResult, valor retornado..., 172 
DateTimeFormatInfo, 387  dibujar formas, 341 
DateTimePicker, 210  dirección, 893 
DbCommand, 533  dirección de Internet, 1084 
DbCommandBuilder, 537  dirección IP, 1084 
DBConcurrencyException, 575  directorio virtual, 759 
DbConnection, 533  dirigirse a otra URL, 958 
DbContext, 662, 671, 715  diseño de tipo maestro‐detalle, 466, 598 
DbDataAdapter, 533  DisplayMember, 449, 529, 568 
DbEntityEntry, 690, 696, 712, 783, 871  Dispose, 50, 178, 181, 518 
DbProviderFactories, 533  dispositivos matriciales y vectoriales, 292 
DbProviderFactory, 507, 533  DNS, 1083 
DbQuery, 662  doble búfer, 337 
DbSet, 662, 671  Dock, 140, 221 
DbSet< >, 675  documento XML, 1029 
DbSet<TEntity>, 663  DoEvents, 417 
DbUpdateConcurrencyException, 703  DOM, 1022 
DCOM, 13  dominio, 1083 
Deactivate, 63  DoubleBuffered, 337 
Debug, 129  DoWork, 407 
debugger, 1078  DrawArc, 304 
defaultRedirect, 859  DrawBezier, 305 
definición parcial, 86  DrawCurve, 305 
delegado, 60, 383  DrawEllipse, 303 
delegado Func, 637  DrawLine, 302 
delegados, 401, 635  DrawPie, 304 
Delete, 595, 841  DrawPolygon, 304 
DELETE, 497  DrawRectangle, 302 
DeleteCommand, 511  DROP TABLE, 497 
Deleted, 505  DropCreateDatabase..., 723 
DeleteMethod, 780  DropDown, 161 
depuración, 129  DropDownItems, 162 
depurar, 1069  DropDownList, 769 
depurar una aplicación, 33  DropDownOpening, evento, 152 
descripción abreviada, 56, 57  DropDownStyle, 197 
Description, 379  DTC, 625 
deshacer, 144, 154, 352, 360 
deslizador, 205 
Detach, 915 

DetailsView, 854, 869, 887, 1046  editar un recurso, 69, 130 
DHTML, 1022  editor de menús, 124 
diálogo Acerca de, 179  editor de texto MDI, 348 
diálogo modal, cerrar, 178  editor de textos, 138 
diálogo no modal, 232  ejecución asíncrona de servicios web, 908 
ÍNDICE 1133

ejecutar, 22  eSQL, 658 
Elapsed, 224  esquinas redondeadas, 999 
Elapsed, evento, 223  estado de aplicación, 828 
elemento actual, 470, 478  estado de sesión, 828 
elemento de un menú, marcar, 154  estado de un hilo, 399 
eliminar filas, 699  estado de una página, 821 
eliminar un recurso, 131  estado de vista, 825 
EM_FORMATRANGE, 391  estado del modelo, 785 
e‐mail, 1085  estilo del texto, 364 
Email, 977  estructura de una aplicación gráfica, 48 
EnableAutoDragDrop, 366  etiqueta, 23, 54 
Enabled, 153  etiquetas, 82 
EnablePageMethods, 1059  etiquetas HTML, 1089 
EnablePartialRendering, 1041  Eval, 773 
EndEdit, 558  EventArgs, 384 
EndInvoke, 402  EventHandler, 60, 405 
endpoint, 900  evento, 46, 62 
EndUpdate, 157, 192  evento ApplicationExit, 71 
enfocar un componente, 89  evento CellBeginEdit, 556 
enlace a colecciones, 446  evento CellFormatting, 245 
enlace con otros controles, 439  evento Click, 87 
enlace de datos .NET, 427, 434, 585  evento Enter, 90 
enlaces, 893, 901, 1093  evento FormClosing, 365, 580 
enlaces de datos en ASP.NET, 771  evento Idle, 71 
Enter, 90  evento KeyPress, 87 
entidad, 668  evento Load, 89, 579 
Entity Client, 658  evento MouseClick, 91 
Entity Framework, 656  evento Paint, 292 
Entity SQL, 658  evento PreInit, 1002 
EntityCollection, 676  evento PrintPage, 358 
EntityDataSource, 847  evento PropertyChanged, 431 
EntityDataSourceView, 861  evento Selecting, 856 
EntityKey, 710  evento SelectionChange, 363 
EntitySet, 710  evento Shown, 89 
entorno de desarrollo integrado, 1065  evento TextChanged, 87, 430 
entorno de ejecución, 9  evento ThreadException, 71 
entrada de datos, 1097  evento ThreadExit, 71 
Entries, 708  evento UserDeletingRow, 555 
Entry, 690, 712, 783, 871  evento Validated, 98 
enumeración ContentAlignment, 54  evento Validating, 97 
enumeración Keys, 130  evento, suscribir, 30 
error, notificar, 97  eventos, 30, 59, 383 
errores en una página ASP.NET, controlar, 859,  eventos del ratón, 332 
873  eventos del teclado, 86 
errores, control en DataGridView, 481  eventos KeyDown, KeyUp y KeyPress, 94 
ErrorProvider, 97  eventos más comunes, 60 
ErrorText, 484  eventos, implementar, 383 
escribir datos en una tabla, 496  eventos, lista, 30 
espacios de nombres, 32  eventos, responder, 86 
especificación de lenguaje común, 6  EVENTVALIDATION, 827 
1134 ENCICLOPEDIA DE MICROSOFT VISUAL C#

EventWaitHandle, 412, 416  ForeColor, 110 
ExecuteNonQuery, 509  FOREIGN KEY, 585 
ExecuteReader, 509  form, 816, 1096 
EXIF, 319  Form, 48, 81 
Exit, 51  Format, 88 
explorador de bases de datos, 501  Format de String, 381 
expresión de consulta, 640, 644  Format, evento, 436, 439 
expresión de consulta, compilación, 647  FormatException, 88 
expresiones de enlace de datos, 772  formatos de fechas y horas, 381 
expresiones lambda, 635  FormBorderStyle, 66, 175 
expresiones regulares, 100, 442  FormClosed, 63 
Expression, 641, 643  FormClosing, 63, 365, 580 
extremo, 893  FormClosing, evento, 178 
FormsAuthentication, 958 
F  formulario Acerca De, 327 
formulario activo, 62, 346 
factoría, 533  formulario cargar, 579 
fecha y hora, 25  formulario cerrar, 580 
fecha y hora, formato, 381  formulario hijo, 350 
fechas, 209  formulario MDI, 348, 615 
fichero de configuración, 535, 536, 845, 947  formulario modal, 62 
fichero de recursos, 133, 1116  formulario no modal, 62 
fila añadir, 595  formulario propietario, 180 
fila nueva, 594  formulario web, diseño, 753 
filas, 493  formulario, BackgroundImage, 323 
FileDialog, 214  formulario, cerrar, 365 
FileName, 217  formulario, posición inicial, 63 
FileUpload, 916  formularios, 45, 1096 
Fill, 512, 567, 579  formularios hijo, 346 
Filter, 217  formularios hijo abiertos, 345, 362 
FilterIndex, 217  formularios web, 791, 816 
filtrado, 881  formularios, colección, 62 
filtro de nombres de fichero, 217  formularios, comunicación entre, 232 
finalizar la ejecución, 22  FormView, 783, 876 
finally, 515  from, 638, 646 
Find, 253, 352, 595  FromArgb, 110 
FindString, 157, 192  FromFile, 323 
firma digital, 980  FromImage, 310 
FixedDialog, 175  ftp, 1084, 1086 
FlatStyle, 183, 187  fuente, establecer, 109 
flow layout, 800  FullPath, 253 
FlowLayoutPanel, 210, 211  Func, 637 
Fluent API, 727  funciones, representar, 328 
foco, 89, 227, 595  fusionar barras de herramientas, 371 
Focus, 89, 191, 595 
FolderBrowserDialog, 215 
font, 1089 

Font, 54, 109, 301  GDI+, 291 
FontDialog, 215, 220  GDI+, servicios, 293 
foreach, 229  generador de código nativo, 12 
ÍNDICE 1135

generar código JavaScript, 1034  hilos, 393 
gestión de datos, 741  hilos accediendo a controles de los formularios, 
gestor de recursos, 1119  401 
get, 816  hilos secundarios, detener de forma 
GetAllUsers, 976  controlada, 417 
GetCurrent, 945  hilos, cancelar, 410 
GetCustomAttributes, 70  hilos, estados, 400 
GetDatabaseValues, 713  hilos, mecanismos de sincronización, 411 
getElementsByTagName, 1029  hipertexto, 1093 
GetExecutingAssembly, 70  hn, 1090 
GetObject, 68, 132  hoja de estilo, 993, 1043, 1104 
GetString, 68, 132, 1121  hr, 1090 
GetType, 261  href, 1093 
GetView, 862  HScrollBar, 81, 202 
GIF, 319  html, 8, 1088, 1089 
Global.asax, 814  HTML, controles, 745, 746 
globalización, 1113  HtmlInputHidden, 825 
Gopher, 1084  HTTP, 8, 821, 1085 
GotFocus, 227  HTTP 403.13, 988 
gráficos, 291  HTTP get, 817 
gráficos en un documento HTML, 1094  HTTP post, 818 
gráficos vectoriales, 293  HttpClientCertificate, 983 
Graphics, 296, 340  HttpContext, 820, 945 
GraphicsPath, 302, 306  HttpCookie, 822 
grid layout, 800  http‐equiv, 937 
GridView, 777, 882, 1045  HTTPS, 982, 986 
GridView, AllowSorting, 881  HttpServerUtility, 820 
GridView, SelectedValue, 884  HyperLink, 858, 872 
group, 649 
group … by, 638 
GroupBox, 81, 186, 189 

grupo de aplicaciones, 763, 942  IBindingList, 435, 437, 444, 452, 474 
grupos de noticias, 1086  IBindingListView, 475 
guardar documento, 355  Icon, 29, 65 
guardar una aplicación, 32  icono de la aplicación, 29 
guardar una imagen, 324  IDatabaseInitializer, 723 
Identity, 723, 916, 944 
H  IDictionary, 862 
idioma, 1114 
habilitar o inhabilitar los elementos de un  IDisposable, 518 
menú, 152  Idle, 71 
Handled, 87  IEditableObject, 557 
HashSet, 718, 733  IEnumerable, 445, 639, 653 
HasMorePages, 359  iframe, 1095 
head, 1089  IgnoreCase, 1121 
height, 1095  IIS, 760, 939 
herramientas, caja, 22  IIS 7.0, certificados, 983 
hidden, 825  IIS, instalar, 1112 
Hide, 64, 234  IList, 435, 444 
hilo en segundo plano, 400  Image, 320 
1136 ENCICLOPEDIA DE MICROSOFT VISUAL C#

Image, propiedad, 133  Internet Explorer, 1087 
ImageIndex, 255, 256  into, 651 
ImageList, 255  intranet, 1082 
imagen, 324, 1099  introducir datos, 480 
imagen en un botón, 130  Invalidate, 293 
imagen, cargar, 322  InvariantCulture, 1116 
imágen, FromFile, 258  Invoke, 402, 404 
imagen, guardar, 324  InvokeRequired, 403 
imágenes, 294  inyección de código SQL, 519 
imágenes en un documento HTML, 1094  IPrincipal, 944 
imágenes, lista de, 255  IQueryable, 639, 653, 693 
Images, 255  IRC, 935 
ImageStream, 256  IsAlive, 400 
ImageTransparentColor, 133  ISAPI, 1111 
IMAP, 1084  IsBackground, 400 
img, 1094  IsCallback, 1036 
imprimir documento, 357  IsClientScriptBlockRegistered, 1037 
incoherencia de accesibilidad, 230  IsDispose, 234 
Increment, 207  IsDisposed, 181 
Inherits, 799  IsInAsyncPostBack, 1041 
iniciadores de colecciones, 634  IsMatch, 103, 442 
iniciadores de objetos, 633  IsMDIContainer, 344 
iniciar una lista desplegable, 279  IsOnline, 977 
inicio de sesión, 956  IsPostBack, 777, 803 
Init, 803  IsStartupScriptRegistered, 1037 
InitialDirectory, 217  IsValid, 803 
Initialize, 725  it, 661, 853 
innerHTML, 1030  Italic, 364 
INotifyPropertyChanged, 431, 453  Item, 229, 774 
input, 1097  ItemClicked, 486 
Insert, 195, 841, 861  Items, propiedad, 157, 192 
INSERT, 496  ItemType, 774 
insertar filas, 695 
insertar filas, EntityDataSource, 859 
insertar filas, modelo de enlace, 873 

InsertCommand, 511  JavaScript, 1021 
Inserting, 864  JavaScript, depurar código, 1078 
InsertItemTemplate, 877  JavaScript, eventos, 1035 
InsertMethod, 784  JavaScript, fichero .js, 1035 
interceptar la tecla pulsada, 92  JavaScript, generar código, 1034 
interface, 371  JIT, 11 
interfaces gráficas, 7, 38  join, 638, 650 
interfaz, 45  Join, 400 
interfaz de múltiples documentos, 343  JPEG, 319 
interfaz fluida, 727  jQuery, 813, 963 
interfaz IEditableObject, 557  JSON, 1027 
Interlocked, 412 
internacionalización, 1113 
internal, 259 

Internet, 1081  Key, 229 
ÍNDICE 1137

KeyChar, 87  ListBox, 54, 81, 191, 449 
KeyDown, 86, 94  ListBox, vincular con DataSet, 528, 568 
KeyPress, 86, 92, 185  ListChanged, 562 
KeyPressEventArgs, 87  ListControl, 81 
Keys, 94, 130  ListView, 267, 877 
KeyUp, 86, 94  ListView, ejemplo, 271 
KeyValuePair, 229  ListViewItem, 270 
Literal, 996 
L  llamada asíncrona, 402 
llamada síncrona, 402 
label, 1101  Load, 89, 579, 769, 803 
Label, 53, 81, 82  LoadFile, 352 
LabelEdit, 253, 266  LocalDB, 1074 
Language, 800, 1116  localhost, 817 
LargeChange, 202  Localizable, 1116 
LastActivityDate, 977  localización, 1113 
LayoutMdi, 347, 362  Location, 55, 126, 221 
LayoutMode, 29  LocationChanged, 65, 221 
Lazy Loading, 662  lock, 413 
lector de datos, 510  lógica de negocio, 741 
Left, 65  Login, control, 958 
let, 652  LoginName, 998, 1005 
li, 1092  LoginName, control, 971 
Like, 595  LoginStatus, 998, 1005 
líneas de ayuda, 29  LoginStatus, control, 959 
LINQ, 631  LoginView, 997 
LINQ to Entities, 657  LoginView, control, 959 
Linux, 1123  logo, 367 
List, 447 
lista, 24, 191 
lista de formularios abiertos, 362 

lista de los eventos, 30  maestro‐detalle, 466, 598, 599 
lista de tareas, 134  maestro‐detalle, aplicación web, 886 
lista desplegable, 24, 197, 1100  mail, 1085 
lista desplegable, añadir elemento, 200  Main, 49 
lista desplegable, borrar elemento, 200  MainMenuStrip, 126, 344 
lista desplegable, diseñar, 198  manifiesto, 11 
lista desplegable, estilo, 197  ManualResetEvent, 412 
lista desplegable, iniciar, 199  mapa de bits, 318 
lista, acceder a sus elementos, 194  MapPath, 820 
lista, borrar elemento, 196  máquina virtual, 11 
lista, colección de elementos, 195  marcador de posición de contenido, 991, 997, 
lista, columnas, 191  1007 
lista, diseño, 193  marcas de tiempo, 915 
lista, elemento seleccionado, 192  marco, 24 
lista, iniciar, 194  marco con título, 279 
lista, ordenar, 193  marcos en páginas HTML, 1095 
lista, selección múltiple, 195  máscaras, 1000 
listas desplegables en menús, 155  MaskedTextBox, 81, 104, 380 
listas HTML, 1092  MasterPage, 1043 
1138 ENCICLOPEDIA DE MICROSOFT VISUAL C#

MasterPageFile, 991  método Exit, 51 
Match, 103  método Fill, 579 
Matches, 103  método Find, 595 
Matrix, 313  método Focus, 595 
Max, 638  método Insert, 861 
MaxDropDownItems, 197  método NewRow, 594 
maximizar, 44  método PerformClick, 595 
Maximum, 201  método Print, 358 
MDI, 343, 366  método Select, 89, 595 
MdiChildren, 346  método SetToolTip, 57 
MdiLayout, 347  método Update, 580 
MdiWindowListItem, 345  métodos de página, 1058 
Media, 338  Métodos del generador de consultas, 658 
MemberExpression, 643  métodos extensores, 634 
Membership, 971, 976  Microsoft .NET, 4 
MembershipUser, 976  Microsoft Access, 508 
mensaje, mostrar, 129  Microsoft.ACE.OLEDB, 509 
mensajes, 13  Microsoft.Jet.OLEDB, 509 
menú, 123  MiddleCenter, 54 
menú contextual, 159, 485  miembro protegido, 50 
menú de control, 44  Min, 638 
menú dinámico, 161  minimizar, 44 
menú Ventana, 345, 347, 362  Minimum, 201 
menú, añadir, 126  modal o no modal, 170 
menú, controlador de eventos, 128, 148  Model First, 665, 715 
menú, elementos, 127  ModelMethodContext, 880 
menú, señalar elemento, 153  modelo de datos, 459, 462 
menú, separador, 128  modelo de enlace de ASP.NET, 775, 865 
menús, 121  modelo de entidades, 656 
menús en páginas web, 994, 1016  ModelState, 785 
menús, combinar, 345  Model‐View‐Controller, 1079 
menús, diseño, 124  Model‐View‐ViewModel (MVVM), 1079 
menús, líneas de separación, 125  módem, 1085 
MenuStrip, 126, 321  modificadores de tamaño, 27 
Merge, 351  modificar datos, 688 
MergeAction, 345, 351  modificar datos en una tabla, 496 
MergeIndex, 345, 351  modificar una base de datos, 593 
MessageBox, 129, 170  Modified, 354, 365, 505 
MessageBox.Show, 429  ModifierKeys, 94 
meta, 937  Modifiers, 369 
Metafile, 320  Monitor, 411 
metarchivo, 294  Mono, 1123 
method, 816, 1097  MonthCalendar, 209 
MethodCallExpression, 643  mosaico, 362 
MethodInvoker, 405  mostrar un mensaje, 129 
método Add, 55, 595  MouseClick, 91 
método conducido por un evento, 86  MouseDown, 332 
método DataBind, 772  MouseMove, 332 
método Delete, 595  MouseUp, 332 
método Dispose, 50  mover el control, 27 
ÍNDICE 1139

MSIL, 9  OpenFile, 217, 218 
MSL, 657  OpenFileDialog, 215, 218 
MultiLine, 139  OpenForms, 62 
multiple, 1101  operadores de consulta, 638 
Mutex, 72, 412  OperationContract, 894 
optgroup, 1101 
OptimisticConcurrencyException, 703 
N  option, 1100 
name, 1093, 1097  OracleConnection, 507 
Name, 50, 126, 400  OracleDataAdapter, 511 
navegar por los elementos de una lista, 471  orden, 511 
nemónico, 85, 129  orden de tabulación, 1100 
NetworkService, 764, 789  orden parametrizada, 523 
NewRow, 594  orden SQL, escribir una nueva, 621 
news, 1086  orden Tab, 55, 90, 279 
ngen.exe, 12  ordenación, 881 
N‐Layer architecture, 914  orderby, 638, 646 
Node, 261  organizar iconos, 362 
Nodes, 253  Orientation, 205 
nodo seleccionado, 263  origen de datos, 444, 462, 601 
nodo, añadir, 263  orígenes de datos ADO.NET, 445, 586 
nodo, borrar, 266  orígenes de datos, ventana, 462 
nodos, borrar todos, 266  OriginalValues, 713 
NT AUTHORITY\Servicio de Red, 808  ORM, 655, 716 
N‐Tier architecture, 914  out, 73 
nuevo documento, 353  OutputCache, 831 
NuGet, 716  override, 50 
OwnedForms, 181 
OwnedWindows, 64 
O  Owner, 65, 181, 232, 233 
Object, 80 
ObjectCollection, 195  P 
ObjectContext, 665 
ObjectDataSource, 924, 925  p, 1090 
ObjectQuery, 658  padre‐hija, tablas, 599 
ObjectStateEntry, 689, 710  Page, 802, 944, 1037 
ObjectStateManager, 689, 710  Page.DataBind, 771 
objeto de negocio, 925  Page_Error, 859 
objeto Response, 1019  Page_evento, 769, 803 
objetos como orígenes de datos, 459  PageMethods, 1058 
objetos de negocio, 542  PageRequestManager, 1053 
objetos de sincronización, 411  PageSetupDialog, 215, 392 
OdbcConnection, 507  página de contenido, 989 
OdbcDataAdapter, 511  página de inicio de sesión, 956 
ol, 1092  página maestra, 989 
OleDbConnection, 507  página principal, 989 
OleDbDataAdapter, 511  página web, 799, 1088 
OleDbDataReader, 510  página web ASP.NET, 757 
onchange, evento, 1028  página web dinámica, 1110 
onreadystatechange, 1025  página web, modelo de ejecución, 765 
1140 ENCICLOPEDIA DE MICROSOFT VISUAL C#

paginación, 881  principal, 939 
páginas ASP, 1111  Print, 358 
páginas web, publicar, 759  PrintDialog, 215, 392 
Paint, 292, 296, 297  PrintDocument, 357, 392 
Panel, 24, 186, 321, 367  PrintPage, 358 
panel de dibujo, 339  PrintPreviewDialog, 392 
pantalla de presentación, 74  Priority, 400 
ParameterExpression, 643  problemas de concurrencia, 566 
Parameters, 523  procedimiento almacenado, 524, 541 
parámetro oculto, 825, 1099  producto cartesiano, 650 
parámetros en órdenes SQL, 523  Profile, 1003 
parcial definición, 86  ProgressBar, 81, 206 
Parse, 115  ProgressChanged, 409 
Parse, evento, 436, 439  ProgressPercentage, 409 
partial, 86  PropertyChanged, 431 
pasos, 237  PropertyManager, 446 
passport, 947  propiedad, 668 
PasswordChar, 174  propiedad autoimplementada, 633 
PasswordRecovery, control, 970  propiedad cambió, notificar, 431 
Paste, 144  propiedad Cancel, 96 
patrón de diseño Factory, 533  propiedad ClientSize, 50 
patrones de diseño, 661  propiedad Controls, 55 
Pen, 298  propiedad Count, 592 
perfiles, 1003  propiedad Cursor, 328 
PerformClick, 118, 474, 595  propiedad DataBindings, 588 
PerformStep, 207  propiedad DataMember, 578 
PictureBox, 81, 321  propiedad DataSource, 578 
plantilla, 773, 778  propiedad Font, 54 
plantilla de formularios, 366  propiedad Icon, 29 
Play, 338  propiedad Location, 55 
PlaySync, 338  propiedad Modified, 354, 365 
PNG, 319  propiedad Name, 50 
POCO, 716  propiedad Position, 592 
Point, 55, 300  propiedad ReadOnly, 109 
pool de conexiones, 516, 946  propiedad Size, 50, 55 
POP 3, 1084  propiedad TabStop, 55 
portapapeles, 142, 326  propiedad TanIndex, 55 
posición de un componente, modificar, 221  propiedad Text, 50, 54 
posición inicial del formulario, 63  propiedad TextAlign, 54, 109 
posición, conservar, 221  propiedades, 27 
Position, 446, 592  propiedades de navegación, 674 
post, 816  propiedades, añadir a un control, 376, 390 
postback, 1023, 1049  propiedades, atributos, 379 
postbacks asíncronos, 1041  propiedades, clasificación, 379 
PostgreSql, 508  propiedades, control de usuario, 376 
precompilar la aplicación ASP.NET, 815  propietario de un diálogo, 232 
PreInit, 803, 1002  protected, 50 
PreRender, 803  protocolo, 1082 
presentación, 741  protocolo de transferencia de ficheros, 1086 
PRIMARY KEY, 495  proveedor de datos, 506 
ÍNDICE 1141

proveedor de entidades, 658  reloj, 222 
proveedores de LINQ, 653  reloj despertador, 165, 236 
providers, 971  Remove, 195, 229 
proyecto, 16  RemoveAt, 195 
publicar páginas web, 759  RemoveAt, colección, 165 
puntero, 22  rendimiento del servidor, 830 
punto de inserción, 89  repintar una ventana, 293 
punto final, 893  Replace, 103 
ReportProgress, 409 
Q  representar funciones, 328 
Request, 820 
QueryString, atributo proveedor de valor, 866  RequiredFieldValidator, 811 
reset, 1099 
Reset, 416 
R  Resize, 221 
RAD, 799  resolución gráfica, 292 
RadioButton, 54, 81, 186  ResourceManager, 68, 132, 1119, 1120 
RangeValidator, 811  Response, 820, 1019 
raster, dispositivos, 292  Response.Redirect, 958 
Read, 510  responseText, 1025 
ReaderWriterLock, 412  responseXML, 1025 
ReadOnly, 109  RestoreBounds, 65 
readyState, 1025  RestoreDirectory, 217 
recorte, área de, 307  reutilización, 373 
Rectangle, 300  RevertMerge, 351 
recursos, 130, 1116  RGB, 110 
recursos de una aplicación, 68  RichTextBox, 81, 151, 352, 391 
recursos embebidos, 132  Row, 563 
recursos vinculados, 132  RowCount, 252 
recursos, acceder, 1119, 1120  Rows, 241 
Redirect, 821, 1019  RTF, 352 
RedirectFromLoginPage, 958  Run, 47 
Redo, 352  RunWorkerAsync, 407 
reescritura de la URL, 824  RunWorkerCompleted, 407, 409 
refactorización, 375  ruta del sitio web, 820 
referencias, 19 
referencias culturales, 1114  S 
reflexión, 70 
Refresh, 451, 706  SaveChanges, 675 
Regex, 103, 442  SaveFile, 352 
región, 306  script callbacks, 1032 
región de recorte, 307  ScriptManager, 1041 
región no válida, 293  ScriptManagerProxy, 1048 
RegisterClientScriptBlock, 1037  ScriptPath, 1041 
RegisterStartupScript, 1037  scripts, 1041, 1111 
registros, 493  ScriptService, 1056 
rehacer, 352, 360  Scroll, 204 
rejilla, 578  ScrollBar, 54, 81, 202 
rejilla de ayuda, 29  ScrollBars, 139 
Reload, 707, 713  sección crítica, 413 
1142 ENCICLOPEDIA DE MICROSOFT VISUAL C#

seguimiento de los cambios, 710  servicios web con AJAX, 1054 
seguridad, 978  servicios web y LINQ, 912 
seleccionar datos de una tabla, 497  servicios web, ejecución asíncrona, 908 
seleccionar el contenido de una caja de texto,  servidor de nombres, 1084 
90  servidor SMTP de IIS, 968 
seleccionar el texto de una caja, 227  servidor web, 1112 
seleccionar un objeto, 28  servlets, 1112 
select, 638, 646, 1100  Session, 820 
Select, 89, 91, 144, 595, 841, 856  Set, 416, 699 
SELECT, 497  SetCacheability, 833 
SelectAll, 91, 144, 227  SetClip, 307 
SelectCommand, 511  SetError, 98 
selected, 1101  SetInitializer, 725, 731 
SelectedCells, 242  setTimeout, 1031 
SelectedColumns, 241  SetToolTip, 57 
SelectedImageIndex, 255, 256  ShortcutKeys, 130 
SelectedIndex, 157, 192, 193, 198, 770  Show, 64, 170, 173, 181, 232 
SelectedIndexChanged, 157, 684, 685  ShowColor, 220 
SelectedItem, 157, 192, 198, 199, 770  ShowDialog, 62, 173, 177, 181, 215 
SelectedItems, 195  ShowHelp, 219 
SelectedNode, 253, 263  ShowInTaskbar, 63, 65 
SelectedRows, 241  Shown, 63, 89 
SelectedRtf, 359  ShowNodeToolTips, 267 
SelectedText, 91, 143, 359  ShowPlusMinus, 267 
SelectedValue, 569, 770  ShowReadOnly, 217 
Selecting, 856  ShowRootLines, 267 
SelectionAlignment, 364  simultaneidad, 703, 914 
SelectionChange, 363  simultaneidad optimista, 574 
SelectionFont, 364  sincronización, 937 
SelectionLength, 91, 144  sistema de nombres de dominio, 1083 
SelectionStart, 91, 143  sitio web, 759 
SelectMethod, 779  sitio web, reglas de acceso, 974 
Semaphore, 412  sitios web, administración, 961 
sentencia using, 518  size, 1089 
señalar un elemento de un menú, 153  Size, 50, 55, 221, 301 
separadores, 125  SizeChanged, 221 
seriar/deseriar un árbol, 290  skins, 1000 
Server, 820, 859  Sleep, 400 
Services, 1041, 1056  SmallChange, 202 
servicio, 891  SMTP, 968, 1085 
servicio de conexiones, 516, 946  SOAP, 889 
Servicio de red, 764, 789, 946  SOAP, mensaje, 892 
servicio de suscripciones, 971  SolidBrush, 299 
servicio WCF, 893  solución, 16 
servicio WCF, configuración, 900  sonido, 338 
servicio web, 8  Sort, 193, 198 
servicio web, acceso a BD, 1010  SortedList, 227, 229 
servicios de IIS, 760  SoundPlayer, 338 
servicios de Internet, 1085  SplashScreen, 74 
Servicios de objetos, 658  SplitContainer, 271 
ÍNDICE 1143

SQL, 494  SystemSound, 338 
Sql Server, 508, 516  SystemSounds, 338 
SQL Server, 809 
SQL Server 2012 Express, 1071 
SQL Server Management Studio Express, 1074 

SqlCacheDependency, 835  Tab, 55 
SQLCMD, 1072  TabControl, 208 
SqlCommand, 509  tabindex, 1100 
SqlCommandBuilder, 574  TabIndex, 55, 89, 126 
SqlConnection, 507  tabla, 24, 239, 493, 1103 
SqlDataAdapter, 511, 567  tabla con cabecera de filas, 279 
SqlDataReader, 510  tabla, construir, 242 
SqlDataSource, 838, 1044  tabla, iniciar, 244 
src, 1094, 1096  table, 1103 
SSDL, 656  table dinámico, 1025 
SSL, 950, 981, 987  TableAdapterManager, 585 
Start, 398, 400  TableLayoutPanel, 211 
StartPosition, 63  tablero de dibujo, 339 
StartupPosition, 65  TabStop, 55 
State, 713  Tag, 489 
status, 1025  TakeWhile, 639 
StatusBar, 81  tamaño de los controles, 27 
StatusStrip, 137  tamaño de un componente, modificar, 221 
statusText, 1025  TCP/IP, 1082 
Step, 207  td, 1103 
StoreWins, 707  tecla de acceso, 56, 85 
Strikethru, 364  tecla pulsada, interceptar, 92 
subdominio, 1083  teclas, 94 
submenú‐menú contextual, 161  teclas Alt, Control o Shift (Mayús), 94 
submenús, 127  telnet, 1085 
submit, 1099  temas, 1000 
Substitution, 832  temporizador, 25, 222, 1031 
Sum, 639  Text, 50, 54, 88, 198 
superficie de dibujo permanente, 310  TextAlign, 54, 109 
suplantación de identidad, 952  textarea, 1100 
SupportsFiltering, 474  TextBox, 53, 81, 82, 141 
SupportsSorting, 474  TextBoxBase, 81, 143 
suscribir evento, 30  TextBoxEx, 374 
SvcUtil.exe, 905  TextChanged, 87, 189, 430 
System.ComponentModel, 81  texto seleccionado, 152 
System.Data.Linq, 631  th, 1103 
System.Drawing, 50, 54, 82, 294  theme, 1000 
System.Linq, 631  Thread, 398 
System.Linq.Expressions, 642  ThreadException, 71 
System.Media, 338  ThreadExit, 71 
System.Threading, 394  ThreadStart, 398 
system.web, 947  ThreadState, 400 
System.Web, 820  ThreeState, 183 
System.Windows.Forms, 49, 80  Tick, evento, 223 
System.Windows.Forms.Design, 81  TickFrequency, 205 
1144 ENCICLOPEDIA DE MICROSOFT VISUAL C#

ticks, 237  typeof, 465, 552 
TickStyle, 205 
TIFF, 320 
Timer, 223, 412, 1054 

TimeSpam, 224  Unchanged, 505 
tip, 57  Underline, 364 
tipo anónimo, 632  Undo, 144, 154, 352, 361 
tipo de un objeto, 261  unidad de medida, 297 
tipo enumerado, 112  UNIQUE, 495 
tipo implícito, 632  Unload, 803 
tipografía, 294  Update, 513, 580, 624, 841 
tipos de enlace, 436  UPDATE, 496 
tipos SQL, 495  UpdateCommand, 511 
title, 1089  UpdateMethod, 780 
ToDouble, 88  UpdateMode, 1051 
ToInt32, 190  UpdatePanel, 1048 
ToList, 676  UpdateProgress, 1052 
ToolBar, 81  URL, 743, 1092 
ToolStrip, 121, 134  URL, dirigirse a otra, 958 
ToolStripButton, 135  USENET, 1085, 1086 
ToolStripComboBox, 155  User, 944 
ToolStripItem, 121  UserControl, 375 
ToolStripItemCollection, 127  UserDeletingRow, 555 
ToolStripManager, 351  UserName, 977 
ToolStripMenuItem, 126, 486  using, 518, 624 
ToolStripSeparator, 128  usuario ASPNET, 946 
ToolTip, 57  usuario Servicio de red, 946 
Top, 65 
Topmost, 65 
ToString, 191, 228, 260 

ToString de DateTime, 381  validación, 785, 811 
ToUpper, 191  validación de datos, DataGridView, 483 
tr, 1103  validación de los datos, 617 
TrackBar, 81, 205  validación discreta, 813 
transacción, 525, 624  validación personalizada, 104 
transacciones explícitas, 530  validación, controles, 745 
TransactionScope, 526, 624  validar datos, 442 
Transform, 315  validar un campo de texto, 93 
transformación, 312, 329  Validate, 617 
transformación global, 314  Validated, 96 
transformación local, 315  Validating, 96 
transformaciones de color, 316  ValidationAttribute, 726 
trazado, 306  ValidationSummary, 811 
TreeNode, 253  value, 1099 
TreeView, 252  Value, 201, 207, 229, 236 
trigger, 1049  Value Object, 540, 661 
Triggers, 1050  value provider attributes, 866 
TryParse, 115  ValueChanged, 204 
type, 1097  ValueMember, 529, 569 
Type, 261, 465, 552  var, 632 
ÍNDICE 1145

varbinary, 916  WebForm_DoCallback, 1033 
variable fuertemente tipada, 774  webMethod, 1059 
variable, declaración implícita, 632  WebResource.axd, 1034 
VaryByParam, 831  where, 638, 646 
ventana, 43, 45  WhereParameters, 856 
ventana de aplicación, 344  width, 1095 
ventana de documento, 344  Windows Forms, 7, 38, 79 
ventana, centrar, 281  WindowsFormsApplicationBase, 74 
Ventana, menú, 347, 362  WindowsIdentity, 945 
ViewState, 802, 826  WindowState, 66, 344 
ViewState, deshabilitar, 836  WordWrap, 139 
ViewState, mecanismo, 836  WorkerReportsProgress, 409 
vista de colección, 476  WorkerSupportsCancellation, 410 
vista del control, 862  world wide web, 1086 
vista, buscar sus elementos, 479  WPF, 7, 38, 79 
vista, filtrar sus elementos, 479  WriteLine, 129 
vista, ordenar sus elementos, 478  WSDL, 890 
Visual Studio, 15  www, 1086 
Visual Studio .NET, 13 
VScrollBar, 81, 202 

W  XCOPY, 1072 
XHTML, 1021, 1110 
WaitAll, 415  XML, 7, 1029, 1109 
WaitAny, 415  XMLHTTP, 1024 
WaitHandle, 413, 415  XMLHttpRequest, 1024 
WaitOne, 415 
WCF, 891 
web, 1086 

web, controles, 745  yield return, 648 
Web.config, 947 
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 C# y los ejemplos de este libro descargue la plataforma de desarrollo de la di-
recció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.