Você está na página 1de 65

Introduccin a VisualStudio

Conozca las ventajas del entorno de desarrollo. Comprenda los tipos de objetos, ciclos y sentencias. Aplique los controles comunes para Windows. Aprenda con ejemplos sencillos y prcticos.

Simbologa
Para una lectura amena utilizaremos smbolos dando nfasis a notas especiales.

Tips

Representa algn tip interesante que debemos tener en cuenta

VB C#

VB (90s) comparado con C#.NET


Significa una comparacin entre el antiguo Visualbasic y C#.NET

En Lenguaje Terrcola
Este smbolo aparece cuando explicamos un concepto con lenguaje sencillo o una analoga.

Ancdotas
En estos prrafos narraremos alguna ancdota relacionada con el tema tratado.

Contenido
Introduccin Transicin de Visualbasic (98) a C#.net .............................. 1 Origen de .NET.......................................................................2 Conceptos bsicos de la plataforma y POO ..........................3 Mtodos, Propiedades e interfaz............................................4 Interfaz de desarrollo IDE .....................................................5 Controles estndar y opcionales ...........................................6 El editor de cdigo .................................................................7 Propiedades y eventos en controles .....................................8 Argumentos en controles ......................................................9 Explorador de soluciones ....................................................10 Comentarios, nodos y regiones ...........................................11 El depurador (debugger) ......................................................12 Tipos de dato y sus rangos ..................................................13 Tipo Carcter y string ...........................................................14 Tipo Int, Byte, Bool y Float ...................................................15 Operadores aritmticos y lgicos .........................................17 Operadores bits, asignacin y creadores de objetos............18 Conversin de datos.............................................................19 mbito de variables...............................................................20 Flujo de programa, ciclos y decisiones .................................21 Declaracin de funciones .....................................................22 Sentencia IF...........................................................................25 Sentencia GoTo.....................................................................26 Operador AND y sentencia IF ...............................................30 Operador OR y sentencia IF..................................................31 Ejemplo con "La Prueba de Turing" ......................................27 Sentencia Switch ..................................................................32 Ciclo For ...............................................................................33 Ciclo For Each y While.........................................................35 Ciclo Do While ......................................................................36 Excepciones Try, Catch, Finally ............................................37 Conociendo los controles, el botn........................................39 Control Textbox .....................................................................40 Convencin de nombres para variables y controles ............41 Control Imagelist ...................................................................42 El Textbox y el mtodo replace .............................................44 Control Label y ListBox..........................................................45 Control CheckBox y NumericUpDown ..................................46 Control RadioButton y GroupBox ..........................................47 Control PictureBox.................................................................48 Control ComboBox y Timer....................................................49 Control HScrollBar, VScrollBar y ProgressBar.......................51 Control DataGridView y TabControl ......................................52 Control SerialPort..................................................................53 Mensajes y cuadros de dialogo ............................................54 Ejemplo con un control Timer ...............................................57

IDE

Tipos de datos

mbito Flujo de programa Sentencias

Ciclos

Controles comunes

Ejemplo

Evolucin de lenguajes y antecedentes de .NET De Turbo C, Pascal a C#.NET


Si usted aprendi a programar con lenguajes orientados a procedimientos como Turbo C, Turbo Pascal, Clipper, etc. este libro le ayudar a emigrar a la programacin orientada a objetos de una manera sencilla con ejemplos de aplicaciones prcticas.

De VisualBasic (98) a C#.NET


As que aprendi a programar en VisualBasic, que versin 4, 5, 6?, que tiempos aquellos cuando el compilador nos dejaba jugar a programar sin muchas restricciones y poco nos preocupaba la gestin interna del lenguaje, dado que este libro tiene un enfoque principalmente a ingenieros en electrnica permtame compartir algo En el 95 fue mi primer contacto con Turbo C y debo decir que desde que sent que poda hacer que la maquina pensara no me pude despegar de este mundo tan interesante llamado programacin, crear videojuegos fue la mejor manera de ganar entusiasmo, durante esos das tenamos la limitante de ejecutar en ambiente DOS, agregar mouse y grficos era una tarea laboriosa y casi artesanal, fueron 3 aos de aplicar el lenguaje en diferentes proyectos escolares y salvar mi vida gracias al legendario Turbo C hasta que llego un el da que me presentaron a VisualBasic, al ver la interfaz pens y donde esta el editor?, despus al arrastrar controles y configurar sus grficos sin programar fue un autentico Shock.

VisualBasic(98) Cmo puede ser tan sencillo?.


Cualquier persona que tuvo la experiencia de pasar de lenguajes por procedimientos a un lenguaje como VisualBasic se hace esta pregunta, crear la interfaz sin tener que programar fue un gran avance en el mundo de la programacin y durante el 93 al 2000 fue una poca de rediseo de sistemas muy interesante, la moda era emigrar de ambiente DOS a Windows, tambin tomaron auge otros competidores como Delphi y Java, sin embargo los programadores de automatizacin optaron por VisualBasic y gran cantidad de sistemas de monitoreo comunicados con PLC's estn muy bien implementados con este lenguaje, hago nfasis por que fue muy criticado en ambientes de informtica e ingeniera en sistemas, lo consideraban muy limitado y un lenguaje de juguete, la razn: demasiada sencillez genera malos hbitos de programacin.

Los problemas
Una situacin comn en el rea de sistemas es cuando se tiene que retomar el cdigo fuente de otro programador, como desarrollador me ha pasado en muchas ocasiones, a veces es por que los sistemas no se cotizan bien y el programador cliente entran en conflictos econmicos con su cliente, la verdad es complicado cotizar y poner lmites a un sistema, implementar una propuesta al pie de la letra en tiempo y costo es un verdadero arte. El problema fue que VisualBasic complico esta situacin, retomar un cdigo de otra persona sin tener documentacin o Los Planos de un sistema es realmente catico, y esta variable para que es?, Por qu hizo esto? Era mejor as , Para que tantos timers! No puedo depurar! (solo recuerdos), al final la mayora prefera decir al cliente que tena que reiniciar el sistema con una frase estilo Hollywood ok voy a hacer su sistema pero a mi manera.

Evolucin de lenguajes y antecedentes de .NET


El Fin de VisualBasic (98)
VisualBasic volvi a nacer con la plataforma .NET, muchas son las razones por las que Microsoft decidi crear su nueva generacin de lenguajes y plataforma, personalmente creo que fue una gran herramienta que solo tena el error de consentir demasiado al programador restando crdito a su eficiencia, los sistemas han evolucionado en gran parte por el auge de Internet, los antiguos diagramas de flujo ya no pueden representar la totalidad de la operacin de un sistema, otros estndares como UML (Unified Modeling Language) se han diseado especialmente para la programacin orientada a objetos y las nuevas tendencias, esto fue la razn primordial del gran cambio en Visualbasic y su hermano C#.NET.

Tipos de programacin y la transicin a objetos


Emigrando de VisualBasic (eventos) a C#.NET (objetos): Muy bien, usted esta decidido a evolucionar, cuando se programa por eventos solo se ponen a trabajar los controles disponibles, sin embargo en VB no era comn crear nuestros objetos por que la mayora de los libros no promovan esta tendencia y los programadores podan crear sus sistemas sin necesidad de seguir la filosofa de objetos. Puedo programar en C# sin crear mis Clases (objetos)? La respuesta es Si, pero trataremos de erradicar esa prctica y dejar a un lado los malos hbitos que pudo dejar VB, an en esta nueva plataforma y sus restricciones todava podemos crear un caos de cdigo. Una nueva forma de razonar Ahora con C#.NET conoceremos una forma mas natural de pensar en un sistema de control o monitoreo, tambin cuestiones internas del compilador que no se mostraban en VB y algunos conceptos nuevos como multihilos, herencia, polimorfismo, encapsulamiento, abstraccin, etc. La plataforma .NET La primera versin de toda la gama de lenguajes .NET vio la luz entre el 2000 y 2002, durante esta etapa se puso a prueba su versiones Beta y 1.0, con la moda se dio a conocer una nueva palabra Framework, en Java esto se conoce como Maquina Virtual, sin embargo no solo es un intrprete, permite que gran variedad de lenguajes generen binarios compatibles entre si, de todos ellos el que ha ganado mas popularidad es sin duda C#.NET. De donde surge C#.NET Por el concepto de mquina virtual que comparte con Java para algunas comunidades es una especie de copia, personalmente creo que viene inspirado en Delphi por dos razones: 1.- Mismo arquitecto: Anders Hejlsberg 2.- Delphi incorpor un IDE para formularios Web y de Escritorio antes de la plataforma .NET (1997). Cabe destacar que gran cantidad de programadores de Delphi cambiaron a C# por estas razones.

C# y el Opensource El mundo del OpenSource tambin se sinti atrado por C#, el Mexicano Miguel de Icaza y su proyecto MONO se encuentran actualmente implementando en forma paralela su compilador C# para Linux, otra buena razn para confiar en este lenguaje. Ancdota: En una conferencia le preguntaron a Icaza, un programador puede pasar de .NET a Mono? En ese tiempo Mono no tenia debugger y la dificultad al programar era mayor, su respuesta fue... Depende que tan hombre eres. La Filosofa de .NET Hasta el momento tenemos claro que C#.NET es una evolucin a los entornos de programacin y sigue cobrando fuerza, pero... a que se refiere la plataforma y el tan nombrado framework?. En lenguaje terrcola... Las ventajas primordiales de .NET es que se pueden elegir varios lenguajes y combinar los ejecutables que genera cada uno, es decir una parte de un proyecto puede estar hecho en C#.NET, otra en VisualBasic.NET o Delphi.NET y compartir el cdigo sin problema, esto se debe a que todo se convierte a un lenguaje intermedio (MSIL) que estandariza el cdigo antes de convertirlo en lenguaje mquina. Acerca del Framework Lo que en Java se conoce como mquina virtual en .NET se convierte en el Framework, son simplemente archivos que permiten que se ejecute la plataforma en las PCs con windows, cada cierto tiempo salen nuevas versiones del Framework (1.1, 2.0, 3.5, 4, etc), es necesario tenerlos instalados con sus respectivos parches (SP1, SP2, etc) para que funcionen nuestros proyectos. Programacin Orientada a Objetos en C#.NET La popularidad de la programacin orientada a objetos se debe a los buenos resultados al momento de construir, redisear y dar soporte a un sistema. Un programador que viene de un lenguaje por procedimientos con Turbo C o Ensamblador debe acostumbrarse a nuevos vocablos y una forma diferente de idealizar el proyecto. Consideraciones generales si usted esta acostumbrado a programar por procedimientos... Las libreras reutilizables ahora las llamaremos Clases. Las funciones ahora las llamaremos Mtodos. Las variables que tiene cada Mtodo de una Clase se llaman Propiedades. Que es una Clase? Una clase es la definicin de las caractersticas concretas de un determinado tipo de objetos. Es decir, de cules son los datos y los mtodos de los que van a disponer todos los objetos de ese tipo.

Clases en lenguaje terrcola... Una Clase define el comportamiento y descripcin de cualquier cosa, un objeto material (carro, martillo, mesa), un concepto (cuenta bancaria, deuda, impuestos ) o un ser vivo (humano, perro, delfn). Mtodos de una Clase Los mtodos son las funciones privadas o pblicas que dan vida a nuestro cdigo, es comn que el nombre de estos mtodos sea un verbo como Encender, Apagar, Encontrar, etc. Las Clases pueden tener infinidad de mtodos en los cuales se debe razonar muy bien su labor y como interacta con otros mtodos y propiedades internos. Propiedades de una Clase Las propiedades son todas las variables privadas o pblicas con las que realiza sus operaciones cada Clase, por ejemplo para un Objeto Persona sus propiedades pueden ser: Edad, Peso, Estatura, etc. En el caso de un proceso industrial donde modelamos el comportamiento de un Motor las propiedades pueden ser valores como Corriente, Voltaje, Caballos de Fuerza. etc. Vamos a centrarnos en el tema de Clases una vez que dominemos la programacin estructurada.

Donde obtener C#?


Existen versiones express de VisualStudio que son gratis y las podemos obtener por Internet en el portal de Microsoft, para este libro nos basamos en la versin 8 y el Framework 3.0.

! Iniciemos !
Abrimos VisualStudio y elegimos un proyecto en C# para windows forms.

Visualstudio.NET Visualstudio y su entorno de desarrollo integrado (IDE).


El IDE es nuestro panel de desarrollo donde tenemos todos los componentes necesarios para nuestro sistema: formularios, panel de propiedades y proyectos, editor, depurador, acceso a servidores de datos, componentes, clases, etc. En VisualStudio se facilita mucho el desarrollo por que nos proporciona mensajes al momento de codificar, depurar y configurar. Propiedades

Herramientas

Formularios

Ventana de Proyectos

Es una interfaz muy fcil de personalizar, podemos ajustar tamaos y el acomodo de los paneles, en lo personal recomiendo ajustar la pantalla como se muestra en la imagen: El panel de proyectos y propiedades al lado derecho son los mas importantes para desarrollar fcilmente. 5

Visualstudio.NET
Barra de herramientas En la barra de herramientas tenemos todos nuestros controles comunes y aparte podemos agregar otros mas especializados dando clic derecho sobre la barra y la opcin elegir elementos.

Como ejemplo tenemos el control Shockwave Flash que no viene como parte de los objetos comunes pero ser til en nuestro curso.

Primeros pasos con C#.NET


Antes de empezar a crear nuestras interfaces es importante definir dos conceptos: Tiempo de diseo: Es cuando nos dedicamos a dibujar la interfaz arrastrando y configurando objetos sin ejecutar el programa. Tiempo de ejecucin: Es cuando compilamos con xito y nuestro programa esta ejecutndose. Glosario de palabras comunes Compilar: Proceso de convertir el texto o cdigo de nuestro programa a un lenguaje mquina. Instancias: Son objetos que derivan de una clase. Framework: Es un conjunto de ensamblados que permiten que funcione .NET en una PC. Cast: Es el vocablo utilizado para conversin de datos. El editor de cdigo Visualstudio tiene muchas ventajas, es muy cmodo y fcil de organizar, nos ayuda al momento de programar ya que muestra posibilidades a medida que vamos tecleando, tiene otras bondades como mostrarnos las partes del cdigo que genera, acomodar las llaves, crear regiones y organizar mejor nuestro cdigo. Al momento de aprender a usar VS provoca confusin todo el cdigo extra que nos muestra el editor, en los tiempos de VisualBasic (98) esto no se mostraba al usuario, ahora Microsoft decidi abrir parte de su cdigo y dejarnos ver sus interiores para comprender mejor el lenguaje.

VB C#

Concepto de Propiedad Las propiedades son caractersticas que tienen todos los controles, por ejemplo un Botn (Button) puede ser color rojo, tener una coordenada x=50, y=100 , estas propiedades nos definen la vista grfica del control pero tambin existen otras para dar comportamiento a nuestro control, por ejemplo: Enabled.- nos dice si el control esta habilitado para operar, sus valores son (true, false). Visible.- Permite ocultar el diseo en tiempo de ejecucin, sus valores son (true, false). Autosize.- Permite que el control se ajuste al tamao del texto. Todas estas propiedades se pueden establecer mientras diseamos la pantalla o bien durante la ejecucin. La sintaxis para leer o establecer propiedades por medio de cdigo en C# es la siguiente:

El cono nos permite elegir las propiedades del objeto, mientras que el los eventos posibles en ese control.

nos permite ver

Concepto de Evento
Un evento son las posibles reacciones que tiene un control y permiten ejecutar cdigo, por ejemplo el evento clic de un usuario, arrastrar el mouse sobre un control, etc. Cada control tiene variedad de eventos en comn con otros objetos o especialmente diseados. En el caso de un Botn es sencillo acceder a su evento Click, solo seleccionamos la casilla y hacemos doble Click para entrar al cdigo.

Como podemos ver VS nos escribe parte del cdigo. 8

Vamos a hacer un ligero parntesis comparndolo con la programacin orientada a eventos de VisualBasic 98:

VB C#
Si usted manejo VB recuerda que los botones de llamaban comandos y el cdigo generado por VS en un evento Click solo mostraba el nombre Command1 seguido de _Click(), por alguna razn no era necesario conocer como el compilador trabajaba internamente, tal vez esa fue la clave de la sencillez y xito de VisualBasic, con C# cambia nuestra manera de trabajar con un lenguaje, ahora podemos entender mas a fondo que hace el compilador, para empezar nos muestra dos parmetros extra en el evento Click: ( object sender, EventArgs e) La pregunta es para que nos sirven? object sender: nos permite saber cual objeto esta generando el evento, en este caso el botn. EvenArgs e: Nos permite conocer datos que trae el objeto que nos provoco en evento. Por ejemplo en un textBox los argumentos que manda el evento keypress son los caracteres:

Para probar estos argumentos vamos a utilizar el botn previamente dibujado y en el evento KeyPress del textBox1 escribimos:

Ejecutando nuestro programa con observamos como pasamos el valor de un control a otro.

El IDE tambin genera lneas en la clase del diseador Form1.Designer.cs, el cdigo generado corresponde a la configuracin de propiedades del botn y el evento que tenemos registrado (Click), ahora VisualStudio nos permite ver y modificar su cdigo interno.

VB C#

En Visualbasic el cdigo del diseador era completamente oculto al usuario.

El entorno de desarrollo de Visualstudio: Explorador de Soluciones El explorador de soluciones nos permite acceder a todos nuestros formularios, clases y variedad de elementos para nuestro sistema. Para este ejemplo solo contamos con un formulario (Form1.cs) pero se pueden tener mayor cantidad, inclusive crear una solucin con varios proyectos que a su vez tengan sus propios formularios. La carpeta de Referencias contiene las libreras que ocupa nuestro programa, en adelante vamos a poner nfasis en esta carpeta ya que incorporaremos controles como Flash y componentes para conexin con PLCs.

El Program.cs es como la chispa de encendido de cualquier programa en C#, crea la primera instancia de nuestro formulario de inicio, a su vez se invoca el mtodo que dibuja los grficos iniciales de nuestro programa, es decir ejecuta las lneas de Form1.Designer.cs.

10

Sobre el Editor El editor de VisualStudio posee muchas ventajas para estructurar un programa, le presento 3: Comentarios en C#: Los comentarios es una buena prctica al desarrollar, nos permite explicar el funcionamiento de alguna instruccin o funcin de nuestro programa, en VisualStudio tienen un color verde y para agregarlos tecleamos dos diagonales // , con esto VS pone en color verde el texto y lo deja sin validez para la lgica del compilador. Si deseamos agrupar varias lneas de comentarios agregamos /*al inicio y */ al final, ejemplo:

Uso de nodos: Los nodos son otra caracterstica de VS para hacer mas sencilla la lectura del cdigo, cada vez que se agrupa un evento o funcin por medio de las llaves { } se genera un nodo con el smbolo , si presionamos el cdigo encerrado se reduce a una sola lnea, con esto es ms sencillo encontrar porciones del programa en las que estamos trabajando y dejar en una sola lnea las que ya estn validadas. Ejemplo para un evento Load:

Uso de Regiones: A diferencia de los nodos, las regiones las define el usuario y pueden agrupar secciones de nodos, las sintaxis es: #region nuestro texto #endregion

Al presionar el nodo

nos queda

Como podemos observar toda la regin queda acotada a una sola lnea y conserva el texto que definimos: Funciones de Monitoreo. El uso de regiones es otra buena prctica para organizar nuestro programa, corregir errores y agregar funciones. 11

Iniciando con la consola de C#.NET


Vamos a pausar la explicacin de los formularios de windows para centrarnos en los tipos de datos, sentencias y ciclos al estilo antiguo, con la consola de C#.NET.

Iniciando con la consola de C#.NET


Creamos un nuevo proyecto del tipo Aplicacin de Consola.

Trabajar con la consola de C# es parecido al ambiente MS-DOS antiguo, como se puede observar el proyecto solo se compone de las propiedades, referencias y la clase bsica: Program.cs

Dejamos por un momento este proyecto, ahora vamos a una parte interesante en todos los compiladores: El Depurador.

El Depurador (debugger)
En 1947 la inventora del primer compilador Grace Hooper, se encontraba trabajando en la "supercomputadora" electromecnica Mark II, un da al estar operando se registro un error que impeda el avance de los comandos, los operadores buscaron entre los "pasillos" de la mquina y alguien dijo Es un bicho!, refiriendose a una palomilla atrapada en un relevador, desde entonces se conocen como "bugs" a los errores que impiden que se ejecute un programa y el nombre "debugger" a la herramienta para encontrarlos.

El Depurador se encuentra en el men principal.

El Bicho quedo almacenado para la Historia en el libro de apuntes del sistema. Fuente: U.S. Naval Historical Center Online Library Photograph NH 96566-KN

12

Tipos de datos y prcticas con el depurador


En este captulo estudiaremos conceptos bsicos del lenguaje concentrados en sus tipos de datos, operadores, conversin y consejos sobre la mejor manera de asignar un nombre a los controles. Es muy importante tener bien claro estos conceptos por que sentarn las bases del lenguaje, en C# todas las variables son objetos por lo cual analizaremos mtodos implcitos que nos ahorrarn tiempo de codificacin. Me interesa que a usted le quede muy claro como se va ejecutando cada lnea de cdigo, para esto vamos aplicar el depurador (debugger) de VisualStudio. Detalles a considerar sobre la codificacin en C#: Diferencias con VB (98) El lenguaje si distingue entre maysculas y minsculas En C# no existe el tipo Variant El tipo Float es el equivalente a Single o Double en VisualBasic

VB C#
C# Tipo sbyte short int long byte ushort uint ulong float double decimal char

Tipos de dato en C# El tipo de dato depende de la informacin que vamos a guardar, es importante una buena eleccin para no desperdiciar memoria y hacer lento el sistema. En esta tabla se presentan los tipos de C# y sus rangos posibles de valor. Rango -128 a 127 -32768 a 32767 -2147483648 a 2147483647 -9223372036854775808 a 9223372036854775807 0 a 255 0 a 65535 0 a 4294967295 0 a 18446744073709551615 Aprox. 1.5 x 10-45 a 3.4 x 1038 con 7 decimales Aprox. 5.0 x 10-324 a 1.7 x 10308 con 15 o 16 decimales Aprox. 1.0 x 10-28 a 7.9 x 1028 con 28 o 29 decimales Cualquier carcter unicote, ocupa 16 bit

Qu tipo de dato elegir? Si usted va a guardar informacin de tipo texto el indicado es el String, observe los ejemplos... La sintaxis bsica es: Tipo de dato Nombre de variable

13

Tipo de dato Char (Carcter) Nos permite almacenar un carcter Unicode, por lo regular guardamos letras. Ejemplo: Qu es Unicode? Es una tabla que asigna un cdigo a cada uno de los ms de cincuenta mil smbolos para alfabetos europeos, ideogramas chinos, japoneses, coreanos y muchas otras formas de escritura, aparte tiene mas de mil smbolos especiales. Tipo de dato String (Cadena) Los tipos String nos permiten almacenar cadenas de caracteres donde el tamao depende de la cantidad que ocupe, la sintaxis de declaracin es: String NuestroDato; Algo interesante con C# es que todos los tipos de dato tienen algn mtodo que nos puede ser til, para el tipo String tenemos el substring() que nos permite reemplazar datos de una cadena, ejemplo: En la clase program de nuestro proyecto de consola escriba el siguiente cdigo:

Vamos a practicar con el Depurador. Agregue un punto de interrupcin en el costado izquierdo dando Click y en el men principal elija Depurar/ Paso a paso por procedimientos o bien F10. La depuracin nos permite ver en cmara lenta como funciona nuestro programa. Recuerda en C# todos los datos son objetos, por lo tanto tienen sus mtodos y nos permiten ahorrar mucho tiempo.

Cuando se ejecuta la lnea del punto de interrupcin posicionamos el Mouse en la variable nuevotexto y podemos ver como se reemplazo la palabra VisualStudio por VS.

14

Tipo de Dato Int (Entero) Los datos enteros nos sirven para almacenar nmeros entre -2147483648 y 2147483647, por lo cual son muy utilizados para informacin que no tenga puntos decimales, comnmente se aplica para guardar el ndice en una base de datos, almacenar nmeros de pedidos y cualquier valor que no implique decimales. Ejemplo: Detalle importante: Cuando dividimos un dato entero entre un entero siempre nos regresa un entero, esto puede generar errores difciles de detectar como lo muestra el ejemplo:

Tipo de Dato Byte Los datos tipo Byte tiene un rango de valor entre 0 y 255 con nmeros enteros positivos, es recomendable guardar valores que no excedan ese rango, ejemplos:

Por el enfoque electrnico de este curso la variable tipo Byte la utilizaremos bastante. Tipo de Dato Bool Cuando ocupamos almacenar un valor que solo tiene dos opciones: true/false el tipo Bool es el mas indicado, la sintaxis es la siguiente:

Tipo de Dato Float (Punto flotante) Las variables tipo Float tienen un rango entre 1.5*10-45 a 3.4*1038 con 7 decimales, su utilidad se da con cualquier valor que implique decimales. La sintaxis es la siguiente:

Constantes en C# Cuando ocupamos declarar una constante escribimos const antes de la declaracin del tipo de dato:

15

Operadores
El smbolo de un operador nos permiten manipular datos de 5 maneras distintas, en C# tenemos 5 tipos: Aritmticos Lgicos Nivel de bits Asignacin Condicional Relacional De conversin De creacin de objetos Operadores Aritmticos: Son la suma (+), resta (-), multiplicacin (*), divisin (/) y mdulo (%) Ejemplo: Una sumatoria de nmeros tipo Byte para conformar un dato tipo Int

El mismo operador + nos sirve para concatenar cadenas: Las siguientes lneas son exactamente lo mismo.

Operadores lgicos Permiten realizar las operaciones lgicas tpicas: and (&& y &), or (|| y |), not (!) y xor (^)

Asignando un punto de interrupcin se puede comprobar:

Los operadores lgicos son comnmente utilizados en la sentencia IF donde permiten agrupar condiciones. En el siguiente captulo vamos a crear dos ejemplos.

17

Operadores de nivel de bits En nuestro curso vamos a tener comunicacin con hardware que nos permitir enfocarnos en lgica de bits, para esto utilizaremos los operadores a nivel bit de C#, los mas comunes son: and (&) or (|) not (~) xor (^) desplazamiento a izquierda (<<) desplazamiento a derecha (>>) El operador << desplaza a izquierda rellenando con ceros, mientras que el tipo de relleno realizado por >> depende del tipo de dato sobre el que se aplica: si es un dato con signo mantiene el signo, en caso contrario rellena con ceros. Como es necesario algo de teora sobre nmeros binarios vamos a explicar este operador en un ejemplo posterior. Operadores de asignacin Son los operadores que permiten asignar valores de una variable a otra. Por ejemplo: a = b; //asigna a la variable a el valor de la variable b

Los operadores de asignacin tambin pueden ser compuestos: +=, -=, *=, /=, %=, &=, |=, ^=, <<= y >>=. Ntese que no hay versiones compuestas para los operadores binarios && y ||. Otros dos operadores de asignacin incluidos son los de incremento(++) y decremento (--) Estos operadores permiten, respectivamente, aumentar y disminuir en una unidad el valor de la variable sobre el que se aplican.

Operadores de creacin de objetos El operador ms tpicamente usado para crear objetos es new, que se usa as: new <nombreTipo>(<parametros>)

Por el momento no vamos a entrar en detalles, solo debemos recordar que new es un operador y cuando implementemos nuestros objetos vamos a comprender su utilidad.

18

Cast (conversin de datos)

VB C#

Cuando se trata de convertir datos debemos a acostumbrarnos a que cada variable es un objeto, quiero poner nfasis a este tema por que personalmente me resulto confuso comprenderlo, en los anteriores lenguajes que haba utilizado como Turbo C y VisualBasic (98) las variables simplemente se entendan como un alojamiento de memoria con un tipo de dato, ahora en C# por el hecho de ser objetos tienen mtodos interesantes, tratar de guiarlo en estos nuevos conceptos. Uno de los mtodos bsicos de conversin es .toString(), al principio cuando uno codifica en C# nos parece que ahora tenemos que teclear mas para hacer lo mismo.

Conversin de Datos
Ahora vamos a conocer como podemos cambiar el tipo de dato a diferentes variables. Ejemplo: Recuerda como se converta un dato entero en una cadena con VisualBasic (98)?

VB C#
Sencillo verdad, la misma operacin en C# luce de esta manera:

Se puede observar que la diferencia esta en el mtodo ToString que nos toma un segundo extra teclearlo. En el caso de valores numericos se utiliza el operador de conversin Cast, para usarlo debemos preceder la expresin con un parntesis del tipo al que se desea convertir. Por ejemplo, si valor1 es una variable de tipo long y se desea almacenar su valor dentro de una variable de tipo int llamada valor2, habra que convertir previamente su valor a tipo int as:

19

Se puede usar el Cast para convertir un entero en cadena?

Nos marca error, la forma correcta es utilizando el mtodo toString.

En el caso de datos numricos algunos no ocupan mtodos de conversin, ejemplo:

Lo resolvemos con un Cast:

Como convertimos una cadena en un entero? El Mtodo Parse nos permite hacerlo siempre y cuando la cadena solo contenga nmeros:

Para probar como se puede dar el error agregamos una letra al nmero:

En temas posteriores vamos a crear rutinas para evitar este tipo de problemas o mejor dicho Exceptions.

20

Flujo de programa, ciclos y decisiones


En este captulo estudiaremos las sentencias que permiten que las computadoras razonen, con varios ejemplos vamos a comprender la sentencia If, Switch y GoTo para darle a nuestros programas la habilidad de cuestionarnos y resolver nuestros problemas. Para comprender mejor el uso de las sentencias vamos a olvidarnos un poco de los controles de Windows y regresaremos en el tiempo a las aplicaciones de consola, no se preocupe!, se va a sentir un mejor programador. La mayora de los libros sobre C# comienzan con la consola, decid empezar con un poco de formularios y controles para facilitar su primer contacto con el lenguaje. Las aplicaciones de consola nos permiten evaluar mejor la funcionalidad de nuestros objetos sin distraernos con la parte grfica, el legendario Turbo C operaba de la misma manera y an en ambiente MSDOS le mostrar que puede ser algo interesante y estimulante. Si usted le pregunta a un informtico de los aos 70's u 80's le dir que ya no existen los verdaderos programadores, su argumento es que todo es mas sencillo ahora, no hay que preocuparse tanto por la memoria y velocidad de procesamiento, existen generadores de cdigo, infinidad de libreras, bibliografa en Internet, etc. Sin embargo los sistemas tambin se han complicado, un videojuego como el antiguo Pong comparado a los juegos 3d actuales que poseen inteligencia artificial, simulacin de fsica, multiusuarios y captura de movimiento da crdito a los nuevos programadores. Bien, volviendo a la realidad, iniciamos un nuevo proyecto del tipo consola, vamos nombrarlo EjemplosConsola con el Framework 3.5.

21

Recuerde que en una aplicacin de consola no tenemos ventanas ni controles, por lo tanto el explorador de proyectos solo nos muestra:

Si damos Click en Program.cs nos aparece:

Las funciones se crean a criterio del programador y pueden tener cualquier nombre y estructura, en objetos vamos a llamarlas mtodos, tienen la misma sintaxis que los lenguajes por procedimientos pero su razonamiento es diferente, un mtodo siempre forma parte de una clase y modifica sus propiedades internas. Declaracin de una Funcin Para utilizar funciones debemos hacer una declaracin y escribir nuestro cdigo adentro, para utilizar dicha funcin solo hay que llamarla por el mismo nombre con que fue declarada. La sintaxis bsica para declarar una funcin es: mbito tipo de retorno Nombre (parmetros) { } 22

Declaracin:

La sintaxis para mandarla llamar es: En este caso es una llamada sin parmetros y la funcin regresa sin valor, la manera correcta de utilizar mtodos (funciones) es cuando les asignamos ligeras tareas y operan como una especie de caja negra. Vamos a ver un ejemplo muy sencillo, en la funcinInicio() que acabamos de escribir vamos a mandar llamar otra funcin que va a realizar la tarea de calcular el voltaje con la frmula: Voltaje= Corriente x Resistencia. Por lgica nuestra funcin ocupa dos datos para realizar la frmula (corriente y resistencia) por lo tanto nuestra funcin debe tener dos parmetros, dado que la corriente por lo regular son valores con decimales usaremos un Float y para la resistencia los valores Int, otro detalle es que al multiplicar un flotante por un entero necesitamos el resultado del Voltaje en otro flotante con eso damos a nuestra funcin un valor de retorno.

Es importante que la variable Volt tenga el mismo tipo de dato de la funcin (Float), el comando return permite regresar el valor a otra variable al momento de llamar la funcin. En la funcin Inicio tecleamos la llamada a funcinCalculaVoltaje, note que VisualStudio ya reconoce que existe esa funcin y le muestra los parmetros y el tipo de dato:

Debe quedar de esta manera:

23

Funciones
Al ejecutar puede observar que la funcin hace su tarea y regresa el resultado, en este caso mandamos datos fijos pero si deseamos ingresarlos por consola el cdigo es el siguiente:

Una de las ventajas de la programacin por procedimientos es como va guiando al usuario en el ingreso de los datos, tambin es la mejor manera de aprender a programar y razonar, hago este comentario por que en aplicaciones con formularios se comete mucho el error de sobrecargar de controles una interfaz y no dar al usuario un camino para el flujo de operacin.

Si usted disfruta la programacin sin ocupar formularios o controles permtame decirle, naci para programar.

Bien, ahora que conocemos el manejo de la consola vamos con la neurona bsica que permite pensar a las mquinas, la sentencia If. Sentencia IF ELSE La sentencia If es la forma bsica de establecer una condicin, su sintaxis bsica es: if( condicin ) { instrucciones; } else { instrucciones; } 24

Sentencia IF
La sentencia IF nos permite comparar valores y decidir el camino, es un comando bsico en cualquier lenguaje de programacin. Cuando la condicin que acompaa al If no se cumple el programa salta a la opcin Else. Reutilizando la funcin de inicio tecleamos el siguiente ejemplo:

En la lnea del If tenemos la condicin: Si la variable edad es menor o igual a 17 entra a los corchetes del If, en caso contrario entra al Else. Algunas combinaciones de cmo se pueden combinar los operadores en la sentencia If. Operador == = < <= > >= Significado Es igual a No es igual a Es menor que Es menor o igual que Es mayor que Es mayor o igual que

La sentencia If tiene una extensin para sus opciones denominada Else If, en el siguiente ejemplo vamos a utilizarla con algunos mtodos para cadenas y operadores.

Sentencia GoTo
La sentencia Goto nos permite hacer saltos incondicionales a diferentes regiones del programa.

En los 70s y 80s fue un comando fundamental en el lenguaje QBasic, personalmente no recomiendo su uso, una mala implementacin de esta sentencia puede provocar el famoso cdigo spaghetti. 25

La sintaxis es la siguiente: goto <etiqueta>; etiqueta: //se pone en el lugar donde vamos a saltar Ejemplo: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplicationSentencias { class Program { static void Main(string[] args) { funcionInicio(); } private static void funcionInicio() { repite: Console.WriteLine("Esto no tiene fin, desea continuar? presione una tecla..."); Console.ReadLine(); //detiene la pantalla goto repite; //hace un salto incondicional a la etiqueta "repite" } } Como se puede ver en el ejemplo por ser un salto incondicional es }

riesgoso su uso, cuando un programa mal diseado se cicla es comn que el culpable sea el GoTo.

El operador And y Sentencia IF Escriba el siguiente cdigo en un nuevo proyecto de consola.


using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplicationSentencias { class Program { static void Main(string[] args) { funcionInicio(); } private static void funcionInicio() { //almacenamos valores en nuestros objetos (variables): carrera, edad e idioma. string carrera = "Finanzas"; byte edad = 32; string idioma = "Ingls"; //si todas las comparaciones nos devuelven True entramos a la sentencia If if ((edad <= 35) && (carrera == "Finanzas") && (idioma == "Ingls")) { Console.WriteLine("Muy bien, usted cumple con el perfil del puesto"); } else { Console.WriteLine("Lo sentimos, usted no cumple con el perfil requerido"); } Console.Read(); } } }

26

Al ejecutar

nos muestra:

En este caso cumple con todas las condiciones. Qu pasa si alguna de las tres variables no cumple? Cambiamos la variable edad por 40.

Al depurar paso por paso observamos que la siguiente condicin no se va a cumplir:

Ahora obtenemos:

Como observamos el operador AND nos ayuda a comparar varias condiciones a la vez. El operador || (OR): Este operador nos permite agrupar condiciones y habilitar la entrada al cdigo con el cumplimiento de cualquiera de las comparaciones.
using System; using System.Collections.Generic; using System.Linq; using System.Text; //en este ejemplo utilizamos la sentencia OR combinada con un IF namespace ConsoleApplicationSentencias { class Program { static void Main(string[] args) { funcionInicio(); }

27

private static void funcionInicio() { //declaramos 3 objetos tipo bool con un valor predeterminado bool activacinSensor1 = true; bool activacinSensor2 = true; bool activacinSensor3 = true; //si cualquiera de los 3 sensores se activa se ejecuta el interior del If if ((activacinSensor1 == true) || (activacinSensor2 == true) || (activacinSensor3 == true)) { Console.WriteLine("Se activo la Alarma"); } else { Console.WriteLine("Alarma en espera, sensores inactivos"); } Console.ReadLine(); //detiene la consola esperando un carcter } } }

Al ejecutar nos genera...

Si agregamos un punto de interrupcin se puede observar como se evala cada comparacin.

Por ser un operador OR basta con cualquiera de las tres condiciones que se cumpla para que se active la alarma. Para dejar en claro el ejemplo modificamos los tres valores de sensor1, sensor2 y sensor3 para comprobar que entra a la sentencia ELSE.

28

Sentencia Else If La sentencia If tiene una extensin para sus opciones denominada Else If, su funcin nos permite comparar mayor cantidad de opciones y en caso de no cumplirse ninguna entrar al Else. En el siguiente ejemplo vamos a utilizarla con algunos mtodos para cadenas y operadores. Ejemplo: Para hacer algo ms interesante vamos a hacer un sencillo programa imitando la famosa Prueba de Turing. Un poco de Historia Alan Turing fue un pionero en establecer las bases de la computacin moderna, la Prueba de Turing consiste en chatear con una computadora sin darse cuenta que un programa es el que responde, la hiptesis es que si una mquina se comporta en todos los aspectos como inteligente, entonces debe ser inteligente. Creamos un nuevo proyecto de tipo consola y escribimos el siguiente cdigo.
using System; using System.Collections.Generic; using System.Linq; using System.Text; //un ligero chat imitando "La Prueba de Turing" (funciona con minsculas) namespace EjemplosConsola { class Program { static void Main(string[] args) { funcionInicio(); } private static void funcionInicio() {Console.WriteLine("Simulacin de la Prueba de Turing (use minsculas)"); Console.WriteLine("* * * * * * * * * * * * * * * * * * * * * * * * * * *"); Console.WriteLine("Presione cualquier tecla para continuar"); string r = Console.ReadLine(); //guardamos lo que escribe el usuario en r Console.Clear();//limpia la pantalla Console.WriteLine("Saludos! hay alguien por ahi?, cual es su nombre?"); string nombre = Console.ReadLine();//leemos el valor de consola Console.WriteLine("Que tal " + nombre + " como va con el curso?, le gusta C#?"); string respuesta = Console.ReadLine();//leemos el valor de consola //guardamos la respuesta en otra variable antes de quitar espacios string auxrespuesta = respuesta; //con el replace eliminamos todos los espacios respuesta = respuesta.Replace(" ", ""); respuesta = respuesta.ToLower();//convertimos todo en minsculas //con el mtodo Contains de nuestro objeto respuesta se puede analizar la cadena if (respuesta.Contains("si")) //si en la respuesta viene la palabra "si" o "SI" { Console.WriteLine("que bien!, hace la programacin mas interesante y entretenida"); } else { Console.WriteLine(auxrespuesta + ?? esperaba un sonado SI!, pronto le entender mejor... "); } 29

Console.WriteLine("y que tal el clima por alla? "); // respuesta = Console.ReadLine();//reutilizamos la variable respuesta Console.WriteLine("aqu por ahora esta templado, buen da para pasear a mi perro"); Console.WriteLine("tiene mascota?"); inicio: //sentencia Goto, salta aqu si no coincide una respuesta abajo respuesta = Console.ReadLine();//reutilizamos la variable respuesta respuesta = respuesta.Replace(" ", ""); respuesta = respuesta.ToLower(); //con el mtodo Contains de nuestro objeto respuesta se puede analizar la cadena if (respuesta.Contains("si")) //si en la respuesta viene la palabra "si" o "SI" { Console.WriteLine("como se llama su mascota"); respuesta = Console.ReadLine();//reutilizamos la variable respuesta Console.WriteLine(respuesta + " gracioso nombre, el mo se llama Viejo, es un rottweiler"); } // si responde con la palabras tuve o tena else if (respuesta.Contains("tuve") || respuesta.Contains("tenia")) Console.WriteLine("si? y que paso?"); { //if anidado respuesta = Console.ReadLine();//reutilizamos la variable respuesta respuesta = respuesta.Replace(" ", ""); respuesta = respuesta.ToLower(); if (respuesta.Contains("murio") || respuesta.Contains("enfermo")) { Console.WriteLine("que mal :S "); } else if (respuesta.Contains("robaron") || respuesta.Contains("extravio") || respuesta.Contains("perdio")) { Console.WriteLine("a veces se alejan mucho y se pierden"); } else //en caso de no cumplirse las anteriores { Console.WriteLine("... :S"); } } else if (respuesta.Contains("no")) { Console.WriteLine("no le gustan las mascotas?"); respuesta = Console.ReadLine();//reutilizamos la variable respuesta respuesta = respuesta.Replace(" ", ""); respuesta = respuesta.ToLower(); if (respuesta.Contains("no")) { Console.WriteLine("entiendo, no a todos nos gustan"); } else { Console.WriteLine("aaa ok"); } } else { Console.WriteLine("? no entendi tiene mascota?"); //cuando ninguna coincide, el goto hace que salte al inicio de la pregunta goto inicio; } Console.WriteLine("*******************************************************"); Console.WriteLine("que tal mis respuestas, Si parezco HUMANO?, SALUDOS!!"); respuesta = Console.ReadLine();//pausa al final } } }

30

Al ejecutar sale un mensaje de bienvenida y se espera hasta pulsar una tecla.

Algunas de las posibles salidas de este programa son:

Muy bien, despus de socializar un poco con la mquina vamos con la sentencia switch.

31

Sentencia Switch
Con la sentencia switch es posible elegir diferentes opciones de acuerdo a una variable, en otras palabras solamente una de las condiciones se puede cumplir, cuando el valor de la variable no corresponde con alguno de los casos se elige la opcin default. El comando Break corta el flujo de ejecucin del Switch, en C# siempre debe acompaar el final de cada caso. switch (expresin-control) { case expresion-constante1: //sentencia //se sale del switch break; case expresion-constante2: //sentencia //se sale del switch break; default: //cuando no se cumple ninguno de los otros casos break;//se sale del switch } Los tipos de datos permitidos para la expresin de control son sbyte, byte, short, ushort, uint, long, ulong, char, string o un tipo enumeracin (enumeration). Creamos un nuevo proyecto tipo consola, vamos a programar un test con una pregunta y 4 opciones.
using System; using System.Collections.Generic; using System.Linq; using System.Text; //ejemplo de la sentencia switch namespace EjemplosConsola { class Program { static void Main(string[] args) { funcionInicio(); } private static void funcionInicio() Console.WriteLine(" A quien se le considera el { primer programador(a) de la Historia? "); b) Ada Lovelace Console.WriteLine(" a).- Alan Turing c)Von Neumann d) Grace Murray "); Console.WriteLine("Elija la letra correcta: (a,b,c,d) "); string respuesta = (Console.ReadLine());//leemos el valor de consola switch (respuesta) { case "a": Console.WriteLine("Incorrecto, Turing es uno de los pioneros de la informtica moderna "); break; case "b": Console.WriteLine("Correcto!, Ada Lovelace naci en 1815 y trabajo con la mquina analtica de"); Console.WriteLine("Charles Babbage, es considerada la Madre de los lenguajes de programacin. "); break;

32

case "c": Console.WriteLine("Incorrecto, Von Neumann trabajo en los aos 40's y 50's en la arquitectura "); Console.WriteLine("bsica de las computadoras. "); break; case "d": Console.WriteLine("Incorrecto, Grace Murray fue una gran matemtica que entre los aos 50s y 60s"); Console.WriteLine("programo en la Mark 1 y desarroll el primer compilador de la historia, el A-0."); break; default: Console.WriteLine("Dato incorrecto, no existe tal opcin. "); break; } Console.ReadLine(); //crea una pausa esperando un carcter } } }

Al ejecutar nos puede generar las siguientes salidas: Con la opcin a:

Con la opcin b:

Con una letra diferente a (a,b,c,d):

Como observamos el manejo de sentencias nos permite hacer pensar a la mquina, ahora vamos a conocer los ciclos en C#.NET.

33

El Ciclo For
El ciclo For se utiliza para repetir una secuencia de instrucciones cuando conocemos la cantidad exacta de veces que se recorra cierta regin de cdigo. La sintaxis bsica es: for (inicializacin; condicin; incremento) { instrucciones }

Al ejecutar

obtenemos una cuenta hasta el 100.

Las reglas bsicas para usar este ciclo son: La variable del ciclo debe ser entera. La variable siempre se inicializa adentro del ciclo y puede iniciar con cualquier nmero. No se puede alterar la variable del ciclo mientras se esta ejecutando el For.

34

El Ciclo For
El valor del final del ciclo puede ser otra variable, no tiene que ser constante, ejemplo:

La variable puede incrementarse i++ o decrementarse i --, tambin se pueden fijar los pasos del salto. En este ejemplo empieza en 100 y se va decrementando de 2 en 2 hasta llegar a cero.

Cmo detener un ciclo For? El Break nos permite cortar toda la ejecucin restante del ciclo For, no importa en repeticin. Modificando el ejemplo anterior para contar hasta 10:

Al ejecutar observamos que cuando llega a 5 el break provoca que el ciclo termine.

Ahora modificamos el break por un continue:

Al ejecutar obtenemos que cuando el valor es 5 el continue interrumpe al ciclo.

Bien ahora vamos a conocer otra modalidad del ciclo For.

35

El Ciclo For Each


El ciclo For Each es una variante muy til para recorrer arreglos de variables y objetos, su cualidad primordial es que no es necesario conocer el fin del ciclo ni el incremento. Vamos a declarar un arreglo de valores enteros, en el siguiente captulo los trataremos en detalle. La sintaxis es la siguiente:

Al ejecutar

nos genera:

El Ciclo While
El ciclo While es til cuando el lmite del ciclo puede variar, como la palabra lo dice mientras se cumpla la condicin el ciclo contina. La sintaxis bsica es: while (<condicin>) { <instrucciones> }

Si deseamos crear un ciclo infinito:

36

El ciclo se ejecuta hasta el momento que se presione algo

Como puede observar el ciclo While tiene su lado interesante, es importante cuidar como implementarlo para no generar ciclos infinitos.

El Ciclo Do While
El ciclo Do While tiene una ligera variante al While, primero ejecuta luego pregunta si debe continuar. La sintaxis es: do { <instrucciones> }

En lenguaje terrcola este ciclo es como el viejo dicho, es mejor pedir perdn que permiso, primero ejecuta luego pregunta si puede volverlo a hacer.

En este ejemplo el programa ejecuta la instruccin y despues pregunta si el usuario desea volver a ejecutar.

Con el conocimiento de operadores, sentencias y ciclos tenemos las principales armas de programacin en C#, an nos faltan algunas variantes que aprenderemos cuando se ocupe. 37

Excepciones Try, Catch, Finally Con el conocimiento de ciclos y sentencias tenemos las armas para ejecutar cualquier lgica, sin embargo los errores siempre obedecen a la Ley de Murphy, Cmo encontrarlos?, no siempre se trata de errores humanos, existen errores tcnicos de hardware, conexin, desbordamientos etc. C# nos facilita este trabajo con el manejo de excepciones las cuales son el grito de auxilio del sistema operativo cuando le piden algo imposible. Algunos ejemplos de excepciones son: Divisin sobre cero (error humano) Conversin de un tipo de dato en otro sin operadores (error humano) Abrir archivos corruptos (error de sistema) Desconexin con redes o servidores (error de sistema o red) Try, Catch Son comandos para detectar el error y manejarlo sin provocar una interrupcin al sistema. En lenguaje terrcola el comando Try es el agente 007 para tareas riesgosas en C#, le permite reconocer un error y lidiar con l por medio del Catch. La sintaxis bsica es:

En el argumento del Catch obtenemos el tipo de error, los ms comunes son:


ArgumentException: ArgumentNullException: ArgumentOutOfRangeException: ArrayTypeMistmatchException: COMException: DivideByZeroException: IndexOutOfRangeException: InvalidCastException: InvalidOperationException: InteropException: NullReferenceException: OverflowException: OutOfMemoryException: SEHException: StackOverflowException: TypeInizializationException: Pasado argumento no vlido (base de excepciones de argumentos). Pasado argumento nulo. Pasado argumento fuera de rango. Asignacin a tabla de elemento que no es de su tipo. Excepcin de objeto COM. Divisin por cero. ndice de acceso a elemento de tabla fuera del rango vlido. Conversin explcita entre tipos no vlida. Operacin invlida en estado actual del objeto. Base de excepciones producidas en comunicacin con cdigo inseguro. Acceso a miembro de objeto que vale null. Desbordamiento dentro de contexto al momento de comprobar. Falta de memoria para crear un objeto con new. Excepcin SHE del API Win32 Desbordamiento de la pila, debido a un excesivo nmero de llamadas recurrentes. Excepcin al inicializar los campos estticos o el constructor esttico de un tipo

38

Para ejemplificarlo vamos a hacer sufrir a la mquina Que pasa si escribimos estas lneas?

Para remediarlo :

Ejecutando obtenemos:

Tambin se puede obtener el tipo de error con el argumento ex:

En consola se puede ver el mensaje:

39

El bloque finally siempre se ejecuta no importando el error, es opcional utilizarlo, debe incluirse despus de todos los bloques catch. Ejemplo:

Convencin de nombres y ejemplos de declaraciones


El concepto de convencin de nombres es una manera de estandarizar la manera que se escribe un programa, como primera regla debemos tratar de usar un solo idioma en todo el proyecto, tambin adoptar nombres tcnicos como setPoint, On, Off. Otro detalle importante son los nombres de las variables y controles: Para nombrar una variable vamos a definir las siguientes reglas: Todo en minsculas y si son dos palabras separarlas por una mayscula Usar la menor cantidad de palabras Evitar abreviaciones confusas Ejemplo: Para almacenar temperatura lo mas conveniente es que se defina de esta manera:

En resumen antes de empezar a programar debemos cuidar el nombramiento de nuestras variables, controles y posteriormente clases, mtodos y propiedades. Para nombrar un control es conveniente escribir el tipo de control de una manera abreviada y enseguida al nombre de la variable iniciando con mayscula. Ejemplos: 40

Botn de aceptar:

btnAceptar

CheckBox sobre el tipo de operacin: chkAutomatico ComboBox que despliega Estados: cmbEstados

Label que muestre lectura de corriente: lblCorriente TextBox que reciba nombres: txtNombre HScrollBar para variar un setpoint: hscrollSetPoint

NumericStep para variar la edad: nstepEdad PictureBox con el fondo de pantalla: picFondo La ventaja de nombrar los controles de acuerdo a la funcin o variable permite una mejor comprensin del cdigo.

Muchos controles manejan el evento Click, es importante el prefijo btn para no confundirlo.

Conociendo los controles


Abrimos un nuevo proyecto o retomamos el formulario anterior. El clsico Hello World lo vamos a hacer un poco modificado De la barra de herramientas arrastramos un control Button y un textBox, VS automticamente les da un nombre, button1 y textBox1, mas adelante vamos a cuidar como nombrar nuestros

Vamos a dejar las propiedades como vienen y seleccionando el botn damos click en el icono para ver los eventos posibles, elegimos el evento Click.

41

mbito de variables

VB C#

Haciendo memoria uno de los problemas que se daba con VisualBasic (98) era la falta de disciplina, para un programador sin buena instruccin era comn declarar variables sin pensarlo e innecesarias, en ese sentido VB no era restrictivo y a la hora de buscar errores era un rompecabezas para todo el que tratara de re-internarse en el cdigo, incluyendo el autor.

El buen manejo del mbito divide el sistema en pequeas tareas, cada objeto hace su trabajo cuando se requiere siempre y cuando reciba los parmetros que ocupa. En C# los corchetes { } determinan el mbito donde de la variable conserva su valor, en este ejemplo tenemos 2 eventos (Form1_Load, timer1_Tick) y una funcin (funcionX), cada una tiene sus lmites en base a corchetes, sin embargo la variable contador esta afuera de esos lmites, por lo tanto su mbito es vlido todos los eventos y la funcin, sin embargo no pasa lo mismo para las variables internas ya que estn limitadas por los corchetes.

VisualStudio nos permite localizar estos errores de mbito antes de compilar el programa, observe como la variable contador puede ser manipulada por cualquier funcin o evento del programa, la razn es por que esta declarada en el mbito de la clase Form1. Cuidado! Es muy importante no declarar de variables pblicas innecesarias, si usted tiene esa costumbre vamos a trabajar para dejarla a un lado, para realmente sacarle provecho a C# debemos encapsular las funciones y ver los programas como un conjunto de cajas negras que interactan entre si. 42

Al dar doble click y entrar al editor VS nos muestra este cdigo, observemos que no solo escribe lo referente al evento click, tambin agrega las directivas using, el namespace, la clase parcial del formulario y un mtodo InitializeComponent, todo este cdigo ahora se muestra al usuario para comprender mejor el funcionamiento interno.

Recuerda VB (98)? Para un ejemplo similar solo mostraba este cdigo, en trminos tcnicos es lo mismo, debemos acostumbrarnos a ver solo lo que nos interesa y no confundirnos, con el tiempo toda la sintaxis nos ser familiar.

VB C#
Muy bien, vamos a programar un par de eventos para que ambos controles se enven un saludo: En el evento KeyPress del textBox1 escribimos.

43

Ejecutamos nuestro programa con: Como podemos observar son dos mtodos diferentes, el botn reacciona al evento Click y el textBox reacciona cuando se teclea cualquier cosa. Ahora para tener mas de funcionalidad agregamos otro botn y modificamos sus propiedades: En su propiedad Name: btnSalir (el prefijo btn lo identifica como boton) Propiedad Text: Salir

Ahora seleccionando el elegimos su evento click

y escribimos Close();

Ejecutamos el programa para probar el botn de salida Existe otra alternativa para salir del programa como:

Ahora que conocemos lo bsico de los eventos regresemos a estudiar cada control y sus propiedades.

Los eventos y propiedades del botn nos van a permitir accionar eventos y dar una atractiva interfaz a nuestros proyectos, como costumbre cada vez que nombremos a un control utilizaremos el prefijo btn en minsculas seguido de la funcin, ejemplo: btnEncendido, Para agregar mas realismo a nuestro botn podemos utilizar la propiedad Image, los tipos de archivo que maneja son gif, jpg, bmp, entre otros, en lo personal recomiendo el jpg si va a agregar alguna foto real del proceso, si se trata de grficos sencillos utilizar el .gif, es importante no cargar archivos muy grandes ya que pueden hacer lento el sistema, en el libro referente a interfaces nos centraremos en imgenes vectoriales en Flash para hacer mas ligero y dinmico el monitoreo de nuestro proceso.
Como vamos a generar dos imgenes con extensin .gif en cualquier programa de diseo (recomiendo Coreldraw). Las dos imgenes vamos a incrustarlas en nuestro botn por medio del siguiente control

44

El control ImageList nos permite cargar secuencias de imgenes en nuestros controles, es muy til para representar el estado de nuestras variables de manera grfica, sin embargo no es un control visible en tiempo de ejecucin, solo es una especie de conexin entre los controles visibles y las imgenes. Al arrastrar el control a nuestro formulario podemos comprobar que se incrusta en la parte de abajo. Vamos a nombrarlo imglistOnOff

Ahora nos vamos a la propiedad Images y en la coleccin agregamos nuestras dos imgenes con los como se muestra.

Ahora hacemos un ajuste en la propiedad ImageSize:

Ya podemos referenciar nuestro botn en su propiedad ImageList: Por ser un botn de activacin cada que el usuario lo presione nos aparece en estado Off por defecto y la propiedad ImageIndex del botn es 1.

45

Ahora con nuestro botn configurado vamos a programar un poco Seleccionamos el botn y elegimos el evento MouseDown.

Con doble click accedemos al evento y escribimos:

Al ejecutar observamos que se cambia la imagen al presionar.

Para volver al estado anterior de la imagen, agregamos otro evento MouseUp

46

Ahora ya podemos simular un accionamiento de manera grfica con nuestro botn. El control TextBox ser de gran utilidad para capturar datos de usuario, vamos a sacar provecho a algunos mtodos implcitos que tiene para ahorrarnos tiempo. Veamos algunas propiedades que nos sern tiles: Multiline: Sirve para habilitar varias lneas de texto, en este libro lo aplicaremos en valores de parmetros que se ingresen por el operador o textos para algn reporte, no olvidemos que en sistemas de control el usuario captura muy poco, los valores vienen de dispositivos como sensores y actuadores. Cuando habilitemos Multiline es conveniente utilizar la propiedad ScrollBars, de esa manera podemos escribir mas fcil sin hacer mas grande el textBox.

PasswordChar: Nos permite escribir contraseas sin mostrar el texto escrito, por lo regular se configura con un asterisco *, es til para las contraseas de operador de ciertas partes de un sistema.

Ahora veamos un ejemplo: Imagine que diseo un programa que captura el reporte diario de los operadores del proceso, a usted le interesa conocer si se registro alguna falla, por lo tanto es natural buscar en el texto la palabra falla, esto se puede realizar con un sencillo mtodo del textBox que nos permite buscar y reemplazar palabras con una sola lnea de cdigo.
Incorporamos un botn con el nombre: btnBuscar y a nuestro textBox lo nombramos txtReporte y en la propiedad text escribimos el siguiente texto.

47

En el evento Click del botn escribimos:

Al ejecutar

obtenemos: Existen otros mtodos interesantes en el textBox que conoceremos mas adelante.

El control Label o etiqueta es bsicamente para agregar letreros a nuestro programa, en este curso lo aplicaremos para ttulos y mensajes.

El cuadro de lista tiene varias caractersticas interesantes, puede conectarse directamente a una base de datos y tambin tiene mtodos de bsqueda.

Los datos de un ListBox pueden ser seleccionados pero no alterados mientras se ejecuta el programa, los items (elementos) se pueden agregar en tiempo de diseo mediante una coleccin: Cada elemento debe ocupar una lnea. 48

Los mismos elementos se pueden agregar a la lista mediante cdigo, vamos a nombrarlo listboxUnidadesMedida y escribimos:

Al ejecutar

obtenemos el mismo resultado:

En nuestro curso vamos a utilizar este control para guardar historiales de alarmas y aprovechar sus mtodos de bsqueda.

El control CheckBox o Casilla nos permite activar valores y mantener su estado de una manera sencilla, su propiedad Checked nos permite establecer un valor True o False y mantenerlo en el objeto, por tal motivo es importante asignar un nombre que se convierta en una variable, ejemplo: chkControlAutomatico: Con la propiedad appearance convertimos la casilla en un botn que mantiene su estado presionado y es ms sencillo de accionar. El CheckBox nos ser muy til para variables que definen el estado y tiempo que dura un proceso , por ejemplo si esta activo un control automtico, el muestreo de algn valor etc.

El NumericUpDown es un control muy til para establecer rangos de nmeros sin ocupar que el usuario los teclee, para fines de captura es ms sencillo y nos ahorra tiempo en validaciones, sus propiedades Minimum y Maximun establecen los lmites de valores que puede ofrecer, la propiedad Increment nos permite establecer los pasos de incremento o decremento del Value del control. Su evento ms importante es: ValueChanged que se dispara cada vez que el usuario oprime las flechas En nuestro curso lo aplicaremos para rangos conocidos de parmetros de alguna frmula o configuracin de dispositivos. 49

El RadioButton anteriormente llamado (option), tiene gran funcionalidad al momento de trabajar en grupo con otros de su misma clase, al momento de correr el programa C# se encarga de solo dejar uno de los objetos con un valor en true, para definir los grupos existen dos maneras: Vamos a dibujar tres controles RadioButton arrastrndolos al formulario: Ahora elegimos cualquiera de ellos y cambiamos su propiedad Checked= true. Desde el momento que son arrastrados al formulario se convierten en un grupo dependiente entre s, podemos comprobarlo si cambiamos a otros RadioButton su propiedad Checked=true y el anterior se convertir en False, en resumen solo uno de ellos puede tener el valor true. Que pasa si ocupamos tener 2 o varios grupos? Para resolverlo tenemos el siguiente control:

El GroupBox acta como un contenedor y nos sirve para agrupar controles especialmente el RadioButton.

Para utilizar el GroupBox debemos darle el rea necesaria y arrastrar los controles en su interior. El hecho de estar agrupados hace que solamente uno de ellos pueda tener el valor en verdadero.

El control GroupBox y los RadioButton sern muy tiles en nuestro curso para variables que solo pueden tener un valor, por ejemplo:

50

Cuando se trata de agregar imgenes a nuestra interfaz el control PictureBox es la mejor opcin, acepta formatos .gif .bmp. jpg e inclusive con canal transparente .png.

La propiedad Image nos permite importar el archivo:

Si la imagen tiene una escala mayor o menor podemos ajustar el tamao presionando el triangulo superior derecho y la opcin StrechImage.

Es importante sealar que no es conveniente agregar las imgenes en tiempo de diseo, lo mejor es hacerlo por cdigo al momento de cargar el programa, la razn es por que el archivo ejecutable .exe puede quedar muy grande y no cumplir con su labor de chispa de encendido para el sistema. Para agregar una imagen del disco duro utilizamos:

Es importante agregar la @ antes de la ruta para que funcione y el compilador entienda. Existe un trmino en programacin que debemos evitar HardCode, se refiere a datos fijos que se incrustan directamente en el cdigo y se tiene que adaptar a cada mquina para que funcione, en nuestro ejemplo establecimos una ruta que puede variar dependiendo del sistema, si la PC donde se ejecuta no tiene el nombre unidad C por ejemplo D este cdigo no funcionara, la manera correcta es usar una ruta relativa a el lugar donde corre la aplicacin, esto se logra colocando el archivo fondo.jpg en la carpeta bin\debug\ del nuestro sistema y modificando la instruccin:

Ahora la imagen forma parte de los archivos del sistema sin afectar el tamao del ejecutable ya que carga por medio de cdigo. El control PictureBox tiene otras ventajas para realizar grficos, mas adelante aplicaremos estas funciones. 51

El ComboBox es parecido al RadioButton por contener los posibles valores que puede tener una variable con menos espacio en el formulario, por ejemplo si vamos a seleccionar un Estado de Mxico el ComboBox es ms conveniente que dibujar 32 RadioButton. Su propiedad Items permite cargar la lista de elementos en tiempo de diseo.

Para agregar elementos por cdigo se utilizar el mtodo Items.Add();

El timer nos permite generar eventos peridicos con intervalos que podemos controlar, es control bsico para rutinas de muestreo de datos, es un control que no se puede ver en tiempo de ejecucin. Es importante cuidar el manejo de los timers si estamos buscando errores en nuestro programa, la razn es por que imposibilitan la depuracin paso por paso si se encuentran activos, es recomendable solo utilizar uno y contar con algn control visible que permita deshabilitarlo. Para entenderlo vamos a arrastrar tres elementos al formulario: A cada uno la asignamos la propiedad Name como sigue:

timerMuestras lblNumMuestras chkMuestras

Tambin cambiamos los textos en el CheckBox y Label

Activar Muestras 0

52

En la propiedad Interval del timerMuestras escribimos 1000, con esto forzamos a que cada 1000 milisegundos sea cada segundo se genere un evento Tick en el Timer, aparte ponemos su propiedad Enabled = False para que se encuentre desactivado al iniciar el programa.
Lo que vamos a hacer en este ejemplo es activar un contador de tiempo, para esto ocupamos una variable con un mbito pblico o global, la cual debemos declarar en la base de la clase form como se indica: Public static permite que mantenga su valor en este formulario. int indica que es un tipo de dato entero, entre 0 y 32767. numero es el nombre que elegimos.=0 es el valor inicial para nuestra variable nmero.

IMPORTANTE Las variables pblicas o globales solo deben declararse en casos muy especiales ya que pueden generar malos hbitos de programacin.

Continuemos Ahora damos doble click sobre el control chkMuestras y accedemos a su evento mas comn: CheckedChanged.

Por ltimo damos doble Click en el timer y accedemos a su evento Tick para escribir lo siguiente:

Al ejecutar

obtenemos que el contador se activa mientras la casilla esta verificada: 53

Es importante cuidar el manejo de los timers si estamos buscando errores en nuestro programa, la razn es por que imposibilitan la depuracin paso por paso si se encuentran activos, es recomendable solo utilizar uno y contar con algn control visible que permita deshabilitarlo. El Timer ser un control muy til en nuestro curso, aprenderemos a utilizarlo sin provocar problemas en el depuracin. Los ScrollBar vertical y horizontal tienen las mismas funciones y propiedades, en nuestro curso los vamos a utilizar para establecer puntos de sintona para el control, setpoints, sus propiedades Minimum y Maximun nos dan los rangos de su propiedad Value, a diferencia del NumStep el incremento se establece en la propiedad SmallChange y LargeChange que recomiendo tengan el mismo valor.

El control progressBar es muy til para representar estados de avance en un proceso o el nivel de alguna variable, su propiedad value tiene el valor actual y para los rangos sus valores por defecto son Minimun=0, Maximum=100, los pasos o incrementos se definen por la propiedad Step el cual para este ejemplo vamos a mantener en 1. Para ver su funcionamiento arrastramos a nuestro formulario dos controles: Los valores minimum para ambos son cero y maximum =100. El SmallChange y LargeChange para el HScrollBar debe ser 1. La propiedad Step del ProgressBar tambin debe ser 1.

Ahora dando doble Click sobre el HScrollBar escribimos este cdigo en su evento Scroll.

Al ejecutar comprobamos lo sencillo que es controlar el avance de un ProgressBar.

54

El DataGridView nos permite conectarnos a una base de datos y darle un formato a la tabla sin necesidad de programar, aparte trae otras funciones para hacer consultas y organizar la informacin por fecha, nombre, valor, etc. Al pulsar sobre el triangulo superior derecho accedemos a su panel de configuracin, para esto ocupamos tener la base de datos lista para conectarse a nuestro control. En nuestro curso nos va a servir para mostrar los datos guardados en la tabla de muestras.

El TabControl es una especie de archivero de carpetas tipo contenedor que nos facilita la operacin y diseo de nuestra interfaz, utilizando este control se pueden tener varios formularios incrustados y tener siempre a la mano el ttulo de las secciones del sistema. En la propiedad TabPages agregamos la coleccin de pginas y las propiedades individuales de cada pgina. Los eventos de este control sern tiles para refrescar tablas de datos al momento de cambiar de pgina.

55

El control SerialPort antes llamado MsComm nos permite comunicarnos por el puerto serial RS232, es un protocolo muy popular que naci en los 60's pero an es muy utilizado en gran cantidad de aparatos industriales, mdicos, etc. Su ventaja es la sencillez de codificar el envo y recepcin de informacin, para este curso lo vamos a implementar muestreando datos provenientes de una tarjeta con Microcontrolador y comunicndose con otras computadoras. El puerto serial no viene en todas las tarjetas madre, la solucin es usar un convertidor USB-RS232.

Propiedades focus y tabindex


Cuando un programa esta en ejecucin entran en operacin las propiedades Focus y tabIndex. La propiedad Focus la define el usuario del sistema en el momento de elegir un control, por ejemplo si escribe algo en un textBox le brinda el enfoque a ese control, en resumen solamente un control puede tener el enfoque durante la ejecucin de un programa.

La propiedad TabIndex se controla por la tecla Tab y permite dar una secuencia a la operacin de los controles, cada control tiene un nmero donde se establece su turno con respecto al Tab, en sistemas de captura es muy prctico por que ahorra el uso del mouse para cambiar el Focus a otro control.

Durante este captulo examinamos algunos de los controles mas comunes que no sern tiles en nuestro curso, los ejemplos destacaron las propiedades y eventos que mas nos interesan en cada control, recordemos que todo el libro se enfoca a prototipos prcticos y analogas tiles para sistemas de monitoreo y control electrnico.

56

Mensajes y cuadros de dialogo


En este ejemplo aprenderemos las funcionalidad del MessageBox en su forma simple y como cuadro de dialogo. El control MessageBox se aplica para dar mensajes emergentes al usuario y detener el programa en un lugar donde se requiere una decisin. Su sintaxis es sencilla, damos doble Click en el formulario donde estamos trabajando y en el evento Form_Load escribimos:

Al ejecutar

obtenemos:

Eso no es todo, el control nos ofrece mas mtodos que podemos analizar si dejamos el parntesis abierto como se muestra:

Son 21 mtodos diferentes, si implementamos el 5 se puede agregar ttulo al mensaje y un par de botones.

VB C#

A diferencia de VisualBasic 98 el control MessageBox no permite configurarlo directamente para leer cadenas de texto del usuario, es decir si ocupamos agregar algn TextBox para ingresar un dato debemos implementarlo con un cuadro de dialogo. 57

Cuadros de Dialogo para introducir datos: Nos vamos al explorador de soluciones y en el proyecto que tenemos abierto vamos a agregar otro formulario de Windows.

vamos a nombrarlo frmDialogo:

Ahora nos debe aparecer con nuestro formulario inicial en la ventana de proyectos.

En el frmDialogo agregamos 4 controles con las siguientes propiedades:


text: Nuevo SetPoint name: txtSetPoint name: btnAceptar, text: Aceptar, DialogResult= OK name: btnCancelar, text: Cancelar, DialogResult= Cancel (solo un letrero)

58

Ahora vamos convertir nuestro formulario en un cuadro de dialogo: Seleccionamos el frmDialogo y en su propiedad AcceptButton elegimos nuestro btnAceptar y CancelButton= btnCancelar.

En nuestro Form1.cs ocupamos un botn que nos mande llamar al cuadro de dialogo, arrastramos un y lo nombramos btnCuadroDialogo.

Ahora en el evento Click del btnCuadroDialogo escribimos:

Al ejecutar

obtenemos:

Aun nos falta algo, como obtenemos el valor del cuadro de texto (SetPoint)? Acceso a controles desde otros formularios Para esto damos doble Click sobre el formulario frmDialogo y escribimos una nueva funcin TraeSetPoint. Con esta funcin de acceso pblico y de tipo String es posible tomar la propiedad del cuadro de texto txtSetPoint y retornarlo en la funcin. 59

Ahora modificamos la lnea del primer mensaje y concatenamos las cadenas con la funcin traeSetPoint de nuestro frmDialogo.

Muy bien ya practicamos una manera de utilizar mensajes, funciones pblicas, la sentencia IF y el intercambio de datos entre formularios. Vamos por otro ejemplo con el control timer: En este programa vamos a simular que tenemos dos sensores de color y deseamos que el proceso se detenga cuando ambos colores sean iguales. Creamos un proyecto nuevo del tipo formulario de windows lo nombramos ColoresRandom. En nuestro formulario agregamos 2 label y 1 timer. Asignamos las siguientes propiedades name a los label: lblSensorA, lblSensorB. Para el timer Name: timerMuestra, Interval: 100, Enabled: true

60

Ejemplo con control Timer Para simular los colores aplicaremos la funcin Random de C# en la cual la computadora nos manda nmeros aleatorios de acuerdo a un rango especifico asignado en su propiedad .Next, es importante mencionar que no podemos predecir los valores que nos manda Random, puede tardar segundos o minutos en coincidir.
Otra funcin que vamos a implementar es Color.FromArgb(R,G,B) donde cada valor puede variar de 0 a 255 para formar los colores comunes, para hacer mas rpida la coincidencia solo vamos a controlar la gama del rojo. En el inicio del editor adentro de la clase frmSensorColores creamos una instancia del objeto random con el nombre coloresAleatorios:

En el evento Tick del timer tecleamos:

Bien, ahora ejecutamos

El valor A=255 en la funcin Color.FromArgb se refiere al la propiedad Alpha, en este caso no fue utilizada.

61

Fin de captulo 1
Conceptos de C#.NET Introduccin a VisualStudio Tipos de Datos Ciclos y Sentencias Controles bsicos

62

Você também pode gostar