visual .net.pdf

66
Herramientas Informáticas para el Geoprocesado Geotecnologías Cartográficas en Ingeniería y Arquitectura Escuela Politécnica Superior de Ávila 1 Universidad de Salamanca 1 Entorno de Desarrollo .NET 1.1 Introducción. .Net es un conjunto de bibliotecas que pueden ser utilizadas por aplicaciones para acelerar el desarrollo de programas y optimizar el rendimiento. Visual .Net ofrece un entorno de ejecución de aplicaciones, compiladores, y permite el desarrollo de todo tipo de programas de escritorio, aplicaciones para Internet, para dispositivos móviles, etc. 1.2 Entorno de ejecución CLR Visual .Net proporciona un entorno de ejecución para las aplicaciones el Common Language Runtime (CLR). CLR es la implementación de Microsoft de un estándar llamado Common Language Infrastructure (CLI). El CLR/CLI define un entorno de ejecución virtual independiente en el que trabajan las aplicaciones escritas con cualquier lenguaje .Net(C#, J#, Basic). Este entorno virtual se encarga de aspectos importantes para una aplicación como la gestión de la memoria, la vida de los objetos, la seguridad y la gestión de subprocesos. Todos estos servicios unidos a su independencia respecto a arquitecturas computacionales convierten la CLR en una herramienta muy útil ya que, en teoría, cualquier aplicación escrita para funcionar según la CLI puede ejecutarse en cualquier tipo de arquitectura de hardware. Por ejemplo Microsoft dispone de implementación de .NET para Windows de 32 bits, Windows de 64 bits e incluso para Windows Mobile. 1.3 El lenguaje intermedio (IL, CIL o MSIL) La plataforma .Net no está sujeta a un determinado lenguaje de programación ni favorece a uno concreto frente a otros. Actualmente existen implementaciones para múltiples lenguajes que permiten escribir aplicaciones para .Net. Como Visual Basic .NET, C# o J#, pero existen otros muchos. Nosotros nos centraremos en Visual Basic .Net. Una de las principales ventajas de la forma de trabajar en .Net es que cualquier componente creado en uno de estos lenguajes se puede utilizar desde otro. También es posible ejecutar código .Net en distintas arquitecturas y en diferentes sistemas operativos. Para conseguir esto dentro del CLR existe un Lenguaje intermedio (IL) que está pensado independientemente del microprocesador en el que se ejecute. Cuando compilamos un programa escrito en .Net (independientemente de que lo escribamos en Visual Basic, en C# o en J#, etc.), el compilador nos genera un nuevo código escrito en este lenguaje intermedio. De esta forma cualquiera de los lenguajes de programación que usemos en .Net son un lenguaje de alto nivel para crear ese código intermedio. A este código intermedio se le llama CIL(Common Intermediate Language) y anteriormente se llamó MSIL(Microsoft Intermediate Language). El CLR tiene un compilador JIT(Just in time) que se encarga de compilar el código escrito en el código intermedio(IL) a lenguaje propio del microprocesador físico en el que se va a ejecutar. En última instancia es este lenguaje propio, este código nativo, el que se ejecuta y esto nos proporciona un alto rendimiento.

Upload: will-flores-soto

Post on 25-Nov-2015

90 views

Category:

Documents


2 download

TRANSCRIPT

  • Herramientas Informticas para el Geoprocesado Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    Escuela Politcnica Superior de vila 1 Universidad de Salamanca

    1 Entorno de Desarrollo .NET 1.1 Introduccin.

    .Net es un conjunto de bibliotecas que pueden ser utilizadas por aplicaciones para acelerar el desarrollo de programas y optimizar el rendimiento. Visual .Net ofrece un entorno de ejecucin de aplicaciones, compiladores, y permite el desarrollo de todo tipo de programas de escritorio, aplicaciones para Internet, para dispositivos mviles, etc.

    1.2 Entorno de ejecucin CLR

    Visual .Net proporciona un entorno de ejecucin para las aplicaciones el Common Language Runtime (CLR). CLR es la implementacin de Microsoft de un estndar llamado Common Language Infrastructure (CLI). El CLR/CLI define un entorno de ejecucin virtual independiente en el que trabajan las aplicaciones escritas con cualquier lenguaje .Net(C#, J#, Basic). Este entorno virtual se encarga de aspectos importantes para una aplicacin como la gestin de la memoria, la vida de los objetos, la seguridad y la gestin de subprocesos. Todos estos servicios unidos a su independencia respecto a arquitecturas computacionales convierten la CLR en una herramienta muy til ya que, en teora, cualquier aplicacin escrita para funcionar segn la CLI puede ejecutarse en cualquier tipo de arquitectura de hardware. Por ejemplo Microsoft dispone de implementacin de .NET para Windows de 32 bits, Windows de 64 bits e incluso para Windows Mobile.

    1.3 El lenguaje intermedio (IL, CIL o MSIL) La plataforma .Net no est sujeta a un determinado lenguaje de programacin ni favorece a uno concreto frente a otros. Actualmente existen implementaciones para mltiples lenguajes que permiten escribir aplicaciones para .Net. Como Visual Basic .NET, C# o J#, pero existen otros muchos. Nosotros nos centraremos en Visual Basic .Net. Una de las principales ventajas de la forma de trabajar en .Net es que cualquier componente creado en uno de estos lenguajes se puede utilizar desde otro. Tambin es posible ejecutar cdigo .Net en distintas arquitecturas y en diferentes sistemas operativos. Para conseguir esto dentro del CLR existe un Lenguaje intermedio (IL) que est pensado independientemente del microprocesador en el que se ejecute. Cuando compilamos un programa escrito en .Net (independientemente de que lo escribamos en Visual Basic, en C# o en J#, etc.), el compilador nos genera un nuevo cdigo escrito en este lenguaje intermedio. De esta forma cualquiera de los lenguajes de programacin que usemos en .Net son un lenguaje de alto nivel para crear ese cdigo intermedio. A este cdigo intermedio se le llama CIL(Common Intermediate Language) y anteriormente se llam MSIL(Microsoft Intermediate Language). El CLR tiene un compilador JIT(Just in time) que se encarga de compilar el cdigo escrito en el cdigo intermedio(IL) a lenguaje propio del microprocesador fsico en el que se va a ejecutar. En ltima instancia es este lenguaje propio, este cdigo nativo, el que se ejecuta y esto nos proporciona un alto rendimiento.

  • Herramientas Informticas para el Geoprocesado Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    Escuela Politcnica Superior de vila 2 Universidad de Salamanca

    1.4 La especificacin comn de los lenguajes (CLS).

    Conseguir que se puedan utilizar componentes desarrollados en uno de los lenguajes desde otro, requiere la existencia de unas normas que definen algunas caractersticas que todos los lenguajes necesitarn incorporar. A este grupo de normas se le llama Common Language Specification (CLS). Alguna de las cosas que controla estas normas son los tipos de datos, la forma de declarar objetos, etc. Se definen unos tipos de datos comunes Common Type System (CTS) que indican qu datos podemos usar, como los declaramos, etc. Si nuestras bibliotecas admiten o devuelven datos correspondientes a la CTS podrn ser utilizados sin problemas desde otro lenguaje. Por coherencia con el lenguaje el nombre por el que hacemos referencia a un tipo de datos puede ser distinta

    1.5 Biblioteca de Clases Base en .Net (BCL)

    El entorno .Net nos proporciona gran cantidad de funcionalidades para gestin de entrada/salida, para seguridad, para acceso a datos, etc. Esto se implementa en libreras de enlace dinmico DLL, al conjunto de estas libreras se le llama Base Classes Library (BCL)

    1.6 Arquitectura de desarrollo en .Net En la siguiente figura se aprecia la arquitectura que se utiliza para el desarrollo de aplicaciones en .Net:

    Se proporciona gran cantidad de clases definidas en la Biblioteca de Clases Base. Al comenzar a programar nos centraremos en aprender solo algunas de las ms importantes.

    Lenguaje Comn de Ejecucin (CLR)

    Biblioteca de Clases Base (BCL)

    ADO.NET, XML, Enterprise Services

    ASP.NET: Servicios y Formularios Web

    Windows Forms

    Common Language Specification

    VB C++ C# J#

  • Herramientas Informticas para el Geoprocesado Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    Escuela Politcnica Superior de vila 3 Universidad de Salamanca

    1.7 Esquema de Desarrollo y ejecucin de una Aplicacin .Net 1.8 Los espacios de nombres (NameSpaces) Un Namespace es una forma de agrupar clases, funciones, tipos de datos relacionados, y otros espacios de nombres. Se utiliza una forma jerrquica para crear un esquema que nos permita hacer referencia y organizar las clases de la BCL. Adems las clases irn creciendo porque nos creemos nuestras propias clases o porque consigamos alguna de oros desarrolladores. Una misma clase puede aparecer en varios espacios de nombres.

    Editores y diseadores

    Cdigo fuente

    Compilador

    Cdigo intermdio (CIL o MSIL). Ensamblado

    DESARROLLO VISUAL BASIC

    Verificacin

    Compilacin (JIT)

    Cdigo nativo

    Ejecucin (CLR)

    EJECUCIN (Plataforma .Net)

  • Herramientas Informticas para el Geoprocesado Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    Escuela Politcnica Superior de vila 4 Universidad de Salamanca

    2 Programacin Orientada a Objetos 2.1 Introduccin. La programacin orientada a objetos trata de expresar una aplicacin como un conjunto de objetos que interactan entre ellos para resolver alguna tarea. Se persigue el desarrollo de de programas mediante mdulos que faciliten el mantenimiento y la reutilizacin de cdigo. En Programacin Orientada a Objetos (POO, tambin OOP en las siglas que se usan en ingls) cada objeto contiene una serie de propiedades que lo definen y lo identifican frente a otros y una serie de mtodos que permiten la consulta y modificacin de esas propiedades, as como la realizacin de otras operaciones.

    2.2 Conceptos. En la programacin Orientada a objetos se incorporan nuevos elementos que complementan y amplan los tradicionales fundamentos de la programacin estructurada.

    Clase: Es la definicin de un conjunto de propiedades y mtodos que se corresponde con cada tipo de elemento que vamos a tener en el programa.

    Objeto: Es la instancia de una clase. Formada por un conjunto de atributos y un conjunto de mtodos que permiten operar sobre ellos.

    Mtodo: Es un algoritmo asociado a una clase que realiza alguna operacin modificando alguna de las propiedades del objeto o generando un evento para otro objeto.

    Evento: Es un suceso en el sistema, producido por un usuario (una pulsacin del botn del ratn, pulsar una tecla, etc.) o por otro objeto. El sistema maneja el evento proporcionando la respuesta prevista.

    Atributo o propiedad: Es cada una de las caractersticas asociadas a un objeto.

    2.3 Caractersticas.

    Herencia: A la hora de estructurar el programa, no tenemos clases aisladas, tenemos una jerarqua de clases que dependen unas de otras. Los objetos heredan las propiedades y los mtodos de las clases a las que pertenecen. Esta propiedad nos da la posibilidad de crear objetos que extiendan o personalicen las propiedades de otros objetos existentes sin necesidad de volver a implementarlos.

    Abstraccin: Cada objeto de la aplicacin realiza una tarea y obedece a un comportamiento sin proporcionar un detalle de su funcionamiento interno (Como estn implementadas esas operaciones).

    Encapsulamiento: Reunimos los elementos que pertenecen a una misma entidad al mismo nivel de abstraccin. Con esto se incrementa la cohesin del sistema.

    Polimorfismo: Dada una clase base, se declaran objetos distintos que hereden de la clase base. En estos objetos derivados permite definir comportamientos distintos asociados al mismo nombre. Al invocar al mtodo por su nombre se utilizar el comportamiento que corresponda al objeto que estemos usando.

  • Herramientas Informticas para el Geoprocesado Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    Escuela Politcnica Superior de vila 5 Universidad de Salamanca

    3 Comenzando a programar en Visual .NET 3.1 Introduccin. Vamos a intentar ir adentrndonos en el conocimiento de esta herramienta de desarrollo con un enfoque prctico. Iremos proporcionando los conocimientos de fundamentos de programacin a medida que los vayamos necesitando.

    3.2 Creacin de la primera aplicacin. Para crear un proyecto en Visual .Net iremos al men Archivo/Nuevo Proyecto.

    Al hacerlo nos muestra el dilogo de nuevo proyecto en el que podemos elegir el tipo de elemento que pretendemos crear. En esta ocasin seleccionamos Aplicacin para Windows. En la parte inferior escribimos el nombre Geoprocesado1 y Aceptamos.

  • Herramientas Informticas para el Geoprocesado Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    Escuela Politcnica Superior de vila 6 Universidad de Salamanca

    El aspecto de la ventana de trabajo en Visual Basic Express ser algo as:

    Si pulsamos sobre el cuadro de herramientas en la parte izquierda de la pantalla nos lo despliega, mostrando grupos de controles. Si pulsamos sobre el + de Controles Comunes aparecen los controles habituales que tenemos disponibles para el desarrollo de una aplicacin bsica. Si pulsamos en la chincheta en el ttulo del cuadro de herramientas dejamos el dilogo anclado para que no se esconda automticamente. Ahora vamos a probar a utilizar alguno de estos controles para realizar nuestro primer programa. Vamos a colocar un botn en el formulario Form1 que ser la ventana de nuestra aplicacin. Para hacerlo pulsamos sobre . el puntero del ratn cambia de forma. Hacemos un clic sobre el formulario para indicar la posicin del botn. Despus podremos ajustar grficamente el tamao y la posicin del mismo. Con el botn seleccionado en la parte derecha de la pantalla, en las propiedades podremos personalizar las caractersticas del mismo. Vamos a escribir en la propiedad Text que

    Cuadro de Herramientas Explorador de Soluciones

    Formulario Propiedades del objeto seleccionado

  • Herramientas Informticas para el Geoprocesado Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    Escuela Politcnica Superior de vila 7 Universidad de Salamanca

    tendr el valor Button1 el texto Mensaje. Esa ser la etiqueta que figure en el botn.

    De este modo colocamos controles en el formulario configurando el diseo del mismo. Luego hay que dotar de funcionamiento a esos controles. Para asociar una accin al botn. Vamos a hacer doble-clic sobre l. As pasamos a ver el cdigo asociado al mismo. Al hacer el doble-clic Visual nos asocia un procedimiento que se va a ejecutar cuando se desencadene el evento hacer un clic con el ratn sobre el botn. El cdigo que nos muestra ser:

    Lo primero que vemos es que Visual .Net usa programacin orientada a objetos. El formulario Form1 sera una clase. Nos ha creado el procedimiento Button1_Click que maneja el evento hacer clic. De momento aunque nos suene un poco raro el cdigo vamos a probar a escribir una lnea encima de End Sub que indica el final del procedimiento. Escribimos:

    Esta lnea le indica que muestre el comentario que aparece entrecomillado en un dialogo cuando se pulse el botn. Vamos a probar como funciona el programa que hemos hecho. En la parte superior del rea de trabajo aparecen unas pestaas que me permiten volver al diseo del formulario. Si pulsamos sobre la ficha Form1.vb[Diseo].

    Volvemos al diseo. Tambin haciendo doble-clic sobre el formulario en el Exploracin de Soluciones de la parte derecha de la pantalla. Para ejecutar el programa podemos pulsar el botn iniciar depuracin de la barra de herramientas.

    Tambin podemos hacerlo en el men Depuracin/Iniciar depuracin, o pulsando la tecla F5. Con esto se ejecuta nuestro programa y nos muestra el formulario con el botn en el centro.

    Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click End Sub End Class

    Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click MsgBox("Mensaje desde Visual .NET") End Sub End Class

  • Herramientas Informticas para el Geoprocesado Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    Escuela Politcnica Superior de vila 8 Universidad de Salamanca

    Vemos que el ttulo que muestra para el mensaje es Geoprocesado1 que es el nombre que le dimos al proyecto al comenzar. Si pulsamos a aceptar el dilogo se cierra. El formulario Form1 es similar a cualquier programa de los que estamos acostumbrados a utilizar en Windows. Tiene sus botones de control de ventana. Podemos abandonar el programa pulsando en la X de Salir para cerrar el formulario. Tambin podramos hacerlo en el men Depurar/Detener depuracin o pulsando el botn detener.

    La funcin MSGBOX que hemos usado para mostrar el mensaje permite indicarle el tipo y nmero de botones que quiero mostrar y el ttulo del dilogo en el que aparece el mensaje. Haciendo otra vez doble-clic en el botn Mensaje volvemos al cdigo. Si escribimos una coma al final de la lnea del Msgbox entre las comillas y el parntesis de cierre, nos muestra la ayuda dinmica de Visual. Y os indica que el siguiente parmetro es opcional e indica la configuracin de botones.

    Si ponemos otra coma ms le indicamos que no modificamos la configuracin de botones dejando el de Aceptar que toma por defecto. A continuacin escribimos entre comillas el ttulo para el dilogo, ponemos Herramientas informticas. La lnea quedar:

    Formulario

    Dilogo creado con MSGBOX

  • Herramientas Informticas para el Geoprocesado Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    Escuela Politcnica Superior de vila 9 Universidad de Salamanca

    Si volvemos a ejecutar al pulsar el botn aparece:

    La funcin MSGBOX se usaba tambin en Visual Basic. En Visual .Net con el giro hacia la programacin orientada a objetos, disponemos de una clase para realizar esta tarea. Es la clase MessageBox que tiene un mtodo Show(Mostrar), para visualizar los mensajes. En el mtodo Show cambia el orden de los parmetros, primero el mensaje, luego el ttulo y por ltimo los botones que se quieren que son opcionales. Si cambiamos la linea de antes del MSGBOX por la siguiente, y ejecutamos el programa comprobaremos que se obtiene la misma salida. En .Net seguiremos la nueva forma de utilizar funciones apoyndonos en clases. Si nos fijamos en el ttulo del formulario Form1 comprobamos que es el mismo que su nombre Form1. Volvemos al diseo del formulario pulsando en pestaa de la parte de arriba. Si pulsamos ahora sobre el fondo del formulario en la parte derecha de la pantalla en la Ventana de Propiedades vemos las propiedades del formulario. Localizamos la propiedad Text y reemplazamos Form1 por el texto Master en Geotecnologas. Ejecutamos de nuevo el formulario y observamos el nuevo aspecto.

    Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click MsgBox("Mensaje desde Visual .NET",,"Herramientas Informticas") End Sub End Class

    Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click MessageBox.Show("Mensaje desde Visual .NET","Herramientas Informticas") End Sub End Class

  • Herramientas Informticas para el Geoprocesado Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    Escuela Politcnica Superior de vila 10 Universidad de Salamanca

    Guardamos el proyecto completo en Archivo/Guardar todo. Si no le indicamos lo contrario Visual Basic Express guarda en la carpeta Mis documentos\Visual Studio 20XX\Projects\ y luego el nombre del proyecto. Geoprocesado1. Creamos el ejecutable en el men Generar/Generar Geoprocesado1. Vamos a localizar la carpeta desde el explorador de Windows, y vamos a abrir Geoprocesado1 y luego bin y Release. Ah aparece un ejecutable Geoprocesado1.exe nuestra aplicacin que podramos ejecutar. Si no le indicamos que genere el ejecutable, cada vez que probamos el programa desde el entorno de desarrollo Visual me crea un ejecutable en la carpeta Debug tambin dentro de bin. La ruta del ejecutable y algunos otros detalles del proyecto se los indicamos en el men Proyecto/Propiedades de Geoprocesado1, pero eso lo contaremos en otra ocasin. Cerramos el proyecto en Archivo/Cerrar proyecto.

  • Herramientas Informticas para el Geoprocesado Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    Escuela Politcnica Superior de vila 11 Universidad de Salamanca

    3.3 Controles: Etiquetas(Label), Cuadros de Texto (TextBox). Creamos otro proyecto nuevo en Archivo/Nuevo proyecto, elegimos Aplicacin para Windows, en la parte inferior le ponemos como nombre Euroconversor, y pulsamos Aceptar. Ahora intentamos colocar en el formulario dos etiquetas pulsando en Label en los controles comunes y luego en el formulario, y dos cuadros de texto pulsando en TextBox y luego en el formulario. Tambin pondremos dos botones. Colocamos los controles y cambiamos el tamao si hace falta. El aspecto debera ser:

    Para mover varios controles a la vez, podemos pinchar en un punto vaco del fondo del formulario y arrastrar recuadrando los controles que pretendemos seleccionar. Una vez seleccionados si pulsamos sobre uno de ellos y arrastramos los movemos de sitio. Para alinear varios controles, una vez que los hemos seleccionado nos dirigimos al men Formato/Alinear y elegimos la opcin que se ajuste a lo que necesitamos. Para igualar el tamao de varios controles los seleccionamos igualmente, y luego en el men Formato/Igualar tamao. Ahora vamos a modificar el nombre y el texto de los controles. No es obligatorio cambiar el nombre a los controles, pero se recomienda hacerlo para que en el cdigo tengamos ms claro cual es cada uno. A la hora de poner nombres, vamos a indicar primero una abreviatura del control y luego el nombre. As usaremos lbl para etiquetas(label), txt para cuadros de texto, btn para botones, lst para listas, etc. Vamos a seleccionar la etiqueta Label1 y en la propiedad (Name) pongo lbl_euros, en la propiedad Text pongo Euros. Resaltamos aqu que en el nombre de un control no permite espacios. En el texto s. Para Label2 en el nombre lbl_pesetas y en el texto Pesetas. A TextBox1 le ponemos nombre txt_euros y a TextBox2 txt_pesetas. En el botn 1 pongo nombre btn_apesetas y texto A pesetas y en el 2 nombre btn_aeuros y texto A euros. Al formulario le ponemos en la propiedad Text Euroconversor. Como vemos es un poco laborioso el cambio de nombre. A veces se evita en botones y controles que no guardan o reciben informacin. Pero se recomienda usarlo en los dems. En este ejemplo para los cuadros de texto. El aspecto despus de los cambios sera el de la pgina siguiente:

  • Herramientas Informticas para el Geoprocesado Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    Escuela Politcnica Superior de vila 12 Universidad de Salamanca

    Ahora le intentamos programar las operaciones. Hacemos doble-clic sobre el botn A pesetas y escribimos la siguiente lnea de cdigo. Le indicamos que divida el valor que se escriba en el cuadro de texto txt_euros entre 166.386 y el resultado se lo asigne a la propiedad text de txt_pesetas. Si ejecutamos el programa, escribimos 6 en el cuadro de los euros y pulsamos el botn A pesetas obtenemos:

    Hacemos algo parecido para el botn A euros, doble-clic sobre l y escribimos: Guardamos el proyecto y probamos a generar el ejecutable y a localizarlo como en el caso anterior. Cerramos el proyecto.

    Public Class Form1 Private Sub btn_apesetas_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_apesetas.Click txt_pesetas.Text = txt_euros.Text * 166.386 End Sub End Class

    Public Class Form1 Private Sub btn_apesetas_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_apesetas.Click txt_euros.Text = txt_pesetas.Text / 166.386 End Sub End Class

  • Herramientas Informticas para el Geoprocesado Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    Escuela Politcnica Superior de vila 13 Universidad de Salamanca

    3.4 Variables y constantes. Creamos otro proyecto nuevo en Archivo/Nuevo proyecto, elegimos Aplicacin para Windows, en la parte inferior le ponemos como nombre DistanciaEuclidea, y pulsamos Aceptar. Vamos a intentar crear un programa para el clculo de la distancia entre dos puntos. Dados dos puntos A(x1,y1) y B(x2,y2) se define la distancia d:

    212212 )( yyxxd Creamos el formulario con las etiquetas y los cuadros de texto y botones que se muestran a continuacin. Vamos a utilizar el control GroupBox del grupo contenedores para crear un marco alrededor de los controles del Punto1. Del Punto 2 y del resultado. Creamos primero los cuadros de grupo y despus colocamos dentro lo dems. Para el las etiquetas en la propiedad Font podemos cambiar el tipo de letra, el tamao y el aspecto. A los cuadros de texto del punto 1 les llamamos txt_x1 y txt_y1, a los del 2 txt_x2 y txt_y2, al del resultado txt_distancia. En el cuadro del resultado, en la propiedad Readonly ponemos el valor true, as no se permitir escribir en ese cuadro.

    Declaracin de Variables Vamos a definir variables para recoger el valor de las coordenadas de los puntos. Para hacerlo ponemos Dim nombre as Tipo. Nosotros usamos el tipo Double para reales de doble precisin. Mas adelante ponemos una tabla con los tipos de datos de Visual. En VB 6 la declaracin de variables era opcional salvo que utilizramos la instruccin Option Explicit para obligar a su declaracin. En .Net la opcin est puesta por defecto con lo que la declaracin de variables es obligatoria. En cualquier caso siempre es mejor hacerlo as por lo que si alguien utiliza alguna versin anterior de Visual Basic se recomienda activar esta opcin. Hay otra instruccin Option Strict On que fuerza a que a una variable no le podamos asignar un valor de distinto tipo del que se ha declarado, de este modo evitamos perdida de datos al asignar informacin a variables de menor precisin. Por defecto esta opcin est desactivada (Option Strict Off). Si se quiere activar se indica la instruccin al comienzo del cdigo del programa. Tambin es

  • Herramientas Informticas para el Geoprocesado Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    Escuela Politcnica Superior de vila 14 Universidad de Salamanca

    posible modificar los valores de estas opciones en el entorno de desarrollo de Visual Studio 2005. Para hacerlo nos dirigimos al men Herramientas/Opciones, en la categora Proyectos y soluciones, en el apartado Valores predeterminados de VB, podemos cambiar los valores que se tienen que usar por defecto. La ventana que nos muestra es:

    La otra opcin que aparece le indica si quiero que al comparar cadenas se distingan las maysculas y las minsculas. Con el valor Binary que trae por defecto si se distinguen las maysculas de las minsculas. Con el valor Text no hace distincin. Una vez aclaradas algunas cuestiones previas, volvemos a nuestro ejemplo:

    Como vemos es posible declarar varias variables del mismo tipo en la misma lnea separndolas por comas. Recogemos en las variables el valor que nos pongan en el cuadro de texto. Lo que se escribe en un cuadro de texto es de tipo cadena (String) las variables que hemos creado son de tipo Double. Con la funcin CDBL convertimos lo que nos escriban en el cuadro a doble. Si no se escribe nada en el cuadro producira un error. Luego usamos dos funciones de la clase Math que agrupa funciones matemticas. Sqrt calcula la raz cuadrada, Pow nos sirve para hacer potencias. El primer parmetro es la base y el segundo el exponente.

    Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim x1, y1, x2, y2, distancia As Double x1 = CDbl(txt_x1.Text) y1 = CDbl(txt_y1.Text) x2 = CDbl(txt_x2.Text) y2 = CDbl(txt_y2.Text) distancia = Math.Sqrt(Math.Pow(x2 - x1, 2) + Math.Pow(y2 - y1, 2)) txt_distancia.Text = CStr(distancia) End Sub End Class

    Declaracin de Variables

    Raz Cuadrada

    Potencia

  • Herramientas Informticas para el Geoprocesado Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    Escuela Politcnica Superior de vila 15 Universidad de Salamanca

    Si lo ejecutamos para P1(0,0) y P2(3,4) el resultado ser:

    Si al ejecutarlo no escribimos valores en alguna de las coordenadas de los puntos el error que nos da ser:

    Que quiere decir que no puede convertir una cadena vaca a nmero de tipo Doble. De momento lo dejamos as. Despus probaremos a solucionarlo. Declaracin de Constantes Tambin podemos definir constantes. Para hacerlo escribiramos algo como:

    Const MAXPUNTOS As Integer=100 As estamos creando la constante como entera y le asignamos el valor 100. Tambin es posible asignar un valor inicial a una variable en el momento de la declaracin de la misma. La diferencia es que la constante mantiene el valor fijo durante la ejecucin del programa y a la variable le podemos ir cambiando el valor asignado durante la ejecucin del mismo. Podemos escribir el valor 100 de la constante en las posiciones dnde hacemos referencia a ella? Si. Pero si la constante se utiliza en varios puntos del programa, y en un momento dado necesitamos cambiar su valor (en tiempo de programacin), nos tocar modificarlo en todas las posiciones en que aparezca. Utilizando la constante es suficiente con asignarle el nuevo valor. Para esto se usan.

  • Herramientas Informticas para el Geoprocesado Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    Escuela Politcnica Superior de vila 16 Universidad de Salamanca

    3.5 Tipos de datos en Visual Basic La siguiente tabla muestra los principales tipos de datos que tenemos disponibles e Visual Basic. La tabla est sacada de la Ayuda del programa. Si alguna vez necesitamos informacin sobre algn comando podemos dirigirnos a Ayuda/ndice y localizarlo, o mandrselo buscar en el panel de la izquierda.

    Tipo de Visual Basic

    Estructura de tipo Common

    Language Runtime

    Asignacin de almacenamiento

    nominal Intervalo de valores

    Boolean Boolean En funcin de la plataforma de implementacin

    True o False

    Byte Byte 1 byte 0 a 255 (sin signo)

    Char (carcter individual)

    Char 2 bytes 0 a 65535 (sin signo)

    Date DateTime 8 bytes 0:00:00 (medianoche) del 1 de enero de 0001 a 11:59:59 p.m. del 31 de diciembre de 9999.

    Decimal Decimal 16 bytes 0 a +/-79.228.162.514.264.337.593.543.950.335 (+/-7,9... E+28) sin separador decimal; 0 a +/-7,9228162514264337593543950335 con 28 posiciones a la derecha del decimal; el nmero distinto de cero ms pequeo es +/-0,0000000000000000000000000001 (+/-1E-28)

    Double (punto flotante de precisin doble)

    Double 8 bytes -1,79769313486231570E+308 a -4,94065645841246544E-324 para los valores negativos; 4,94065645841246544E-324 a 1,79769313486231570E+308 para los valores positivos

    Integer Int32 4 bytes -2.147.483.648 a 2.147.483.647 (con signo)

    Long (entero largo)

    Int64 8 bytes -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807 (9,2...E+18 ) (con signo)

    Object Object (clase) 4 bytes en plataforma de 32 bits 8 bytes en plataforma de 64 bits

    Cualquier tipo puede almacenarse en una variable de tipo Object

    SByte SByte 1 byte -128 a 127 (con signo)

  • Herramientas Informticas para el Geoprocesado Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    Escuela Politcnica Superior de vila 17 Universidad de Salamanca

    Short (entero corto)

    Int16 2 bytes -32.768 a 32.767 (con signo)

    Single (punto flotante de precisin simple)

    Single 4 bytes -3,4028235E+38 a -1,401298E-45 para los valores negativos; 1,401298E-45 a 3,4028235E+38 para los valores positivos

    String (longitud variable)

    String (clase) En funcin de la plataforma de implementacin

    0 a 2.000 millones de caracteres Unicode aprox.

    UInteger UInt32 4 bytes 0 a 4.294.967.295 (sin signo)

    ULong UInt64 8 bytes 0 a 18.446.744.073.709.551.615 (1,8...E+19 ) (sin signo)

    User-Defined (estructura)

    (hereda de ValueType)

    En funcin de la plataforma de implementacin

    Cada miembro de la estructura tiene un intervalo de valores determinado por su tipo de datos y es independiente de los intervalos de valores correspondientes a los dems miembros.

    UShort UInt16 2 bytes 0 a 65.535 (sin signo)

    3.5.1 Funciones para la conversin de tipos

    Nombre de la funcin

    Tipo de datos devuelto

    Intervalo de valores del argumento expression

    CBool Boolean (Tipo de datos, Visual Basic)

    Cualquier expresin numrica, Char o String vlida.

    CByte Byte (Tipo de datos, Visual Basic)

    0 a 255 (sin signo); las partes fraccionarias se redondean.

    CChar Char (Tipo de datos, Visual Basic)

    Cualquier expresin Char o String vlida; slo se convierte el primer carcter de String; el valor puede estar comprendido entre 0 y 65535 (sin signo).

    CDate Date (Tipo de datos, Visual Basic)

    Cualquier representacin vlida de fecha y hora.

    CDbl Double (Tipo de datos, Visual Basic)

    de -1,79769313486231570E+308 a -4,94065645841246544E-324 para valores negativos; de 4,94065645841246544E-324 a 1,79769313486231570E+308 para valores positivos.

    CDec Decimal (Tipo de datos, Visual Basic)

    +/-79.228.162.514.264.337.593.543.950.335 para nmeros a partir de cero, es decir, nmeros sin decimales. Para nmeros con 28 posiciones decimales, el intervalo es +/-7,9228162514264337593543950335. El menor nmero posible distinto de cero es 0,0000000000000000000000000001 (+/-1E-28).

  • Herramientas Informticas para el Geoprocesado Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    Escuela Politcnica Superior de vila 18 Universidad de Salamanca

    CInt Integer (Tipo de datos, Visual Basic)

    de -2.147.483.648 a 2.147.483.647; las partes fraccionarias se redondean.

    CLng Long (Tipo de datos, Visual Basic)

    de -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807; las partes fraccionarias se redondean.

    CObj Object (Tipo de datos) Cualquier expresin vlida.

    CSByte SByte (T. datos, VB) de -128 a 127; las partes fraccionarias se redondean.

    CShort Short (Tipo de datos, Visual Basic)

    de -32.768 a 32.767; las partes fraccionarias se redondean.

    CSng String (Tipo de datos, Visual Basic)

    De -3,402823E+38 a 1,401298E-45 para valores negativos; de 1,401298E-45 a 3,402823E+38 para valores positivos.

    CStr String (Tipo de datos, Visual Basic)

    Los valores devueltos para CStr dependen del argumento expression. Vea Valores devueltos para la funcin CStr.

    CUInt UInteger (Tipo de datos)

    de 0 a 4.294.967.295 (sin signo); las partes fraccionarias se redondean.

    CULng ULong (Tipo de datos, Visual Basic)

    de 0 a 18.446.744.073.709.551.615 (sin signo); las partes fraccionarias se redondean.

    CUShort UShort (Tipo de datos, Visual Basic)

    de 0 a 65.535 (sin signo); las partes fraccionarias se redondean.

  • Herramientas Informticas para el Geoprocesado Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    Escuela Politcnica Superior de vila 19 Universidad de Salamanca

    4 Estructuras Condicionales. Control Lista, Forms 4.1 Estructuras de Control. Sentencia condicional IF Cuando la ejecucin de un bloque de cdigo no es lineal, sino que dependiendo de una condicin se tiene que ejecutar un fragmento u otro de cdigo, utilizamos la sentencia de control IF. Su sintaxis es Cuando se desean evaluar varias condiciones se puede hacer as: En la condicin se pueden evaluar expresiones utilizando operadores lgicos y relacionales. Para analizar si se cumplen 2 condiciones a la vez utilizamos el AND (Y), para ver si se cumple cualquiera de las dos el OR (O). Luego usamos:

    MAYOR MENOR MAYOR O IGUAL MENOR O

    IGUAL IGUAL DISTINTO

    > < >=

  • Herramientas Informticas para el Geoprocesado Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    Escuela Politcnica Superior de vila 20 Universidad de Salamanca

    Si hacemos doble-clic sobre evaluar y escribimos lo siguiente: Si queremos que nos distinga entre Notable, Sobresaliente, etc Podemos hacer algo as: Se podran aadir condiciones para analizar los casos fuera de rango. Si no escribimos nada en el cuadro de texto de la nota se produce un error en la conversin a nmero. Para corregirlo aadimos la funcin Length que devuelve la longitud de lo que nos escriban en el cuadro de texto. Si no escriben nada no ser mayor que cero. Quedara:

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim nota As Double nota = CDbl(txt_nota.Text) If nota < 5 Then MessageBox.Show("Suspenso", "Resultado") Else MessageBox.Show("Aprobado", "Resultado") End If End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim nota As Double nota = CDbl(txt_nota.Text) If nota < 5 Then MessageBox.Show("Suspenso", "Resultado") ElseIf nota < 7 Then MessageBox.Show("Aprobado", "Resultado") ElseIf nota < 9 Then MessageBox.Show("Notable", "Resultado") Else MessageBox.Show("Sobresaliente", "Resultado") End If End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim nota As Double If txt_nota.Text.Length > 0 Then nota = CDbl(txt_nota.Text) If nota < 5 Then MessageBox.Show("Suspenso", "Resultado") ElseIf nota < 7 Then MessageBox.Show("Aprobado", "Resultado") ElseIf nota < 9 Then MessageBox.Show("Notable", "Resultado") Else MessageBox.Show("Sobresaliente", "Resultado") End If Else MessageBox.Show("Escriba una nota", "Resultado") End If End Sub

    Compara la longitud de la nota

  • Herramientas Informticas para el Geoprocesado Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    Escuela Politcnica Superior de vila 21 Universidad de Salamanca

    4.2 Estructuras de Control. Seleccin mltiple Select Case Cuando necesitamos distinguir varias condiciones puede que sea ms apropiada esta estructura que el uso de varios IFs. Luego al realizar el programa cada uno tiene que decidir qu estructura encaja mejor para resolver cada problema. La sintaxis es la siguiente: Se pueden utilizar varias expresiones para un mismo caso separndolas por comas. La lnea siguiente sera vlida.

    Case 1 to 3, 5 to 7, 9, 15, Is >=21 Vamos a hacer la prueba. Creamos un proyecto nuevo y le damos nombre DIASSEMANA. Colocamos en el formulario una etiqueta, un cuadro de Texto y un botn dentro de una caja de grupo. Al cuadro de texto le ponemos como nombre txt_dia. Quedar:

    SELECT CASE VARIABLE

    CASE V1 SENTENCIAS A REALIZAR SI LA VARIABLE VALE V1

    CASE V2 TO V3

    SENTENCIAS SI LA VARIABLE VALE ENTRE V2 y V3 AMBOS

    INCLUIDOS CASE V4, V5

    SENTENCIAS SI LA VARIABLE VALE ENTRE V4 o V5

    CASE IS >V6

    SENTENCIAS SI LA VARIABLE ES MAYOR QUE V6

    CASE ELSE

    SENTENCIAS SI LA VARIABLE ES DISTINTA DE LOS

    ANTERIORES END SELECT

  • Herramientas Informticas para el Geoprocesado Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    Escuela Politcnica Superior de vila 22 Universidad de Salamanca

    Ahora asignamos el cdigo al botn Evaluar. Haremos doble-clic sobre l y vamos a escribir lo siguiente: Si observamos el cdigo a parte de comprobar que se haya escrito algo en el cuadro de texto mediante la propiedad Length, usamos otro if para que no nos d error si escribimos en el cuadro de texto una palabra en lugar de un nmero. Guardamos el proyecto y lo cerramos.

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim dia As Integer If txt_dia.Text.Length > 0 Then If IsNumeric(txt_dia.Text) Then dia = CInt(txt_dia.Text) Select Case dia Case 1 MessageBox.Show("Lunes, buen comienzo de semnana", "Hoy es") Case 2 To 5 MessageBox.Show("Martes a Viernes", "Hoy es") Case 6, 7 MessageBox.Show("Sabado o Domingo", "Hoy es") Case Else MessageBox.Show("No es un dia de la Semana", "Hoy es") End Select Else MessageBox.Show("Escribe un nmero del 1 al 7", "No es un numero") End If Else MessageBox.Show("Escribe un nmero del 1 al 7", "No se ha escrito nada") End If End Sub

  • Herramientas Informticas para el Geoprocesado Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    Escuela Politcnica Superior de vila 23 Universidad de Salamanca

    4.3 Mas Controles: Control Lista (ListBox), uso de varios Forms. Si necesitamos mostrar en pantalla un conjunto de valores podemos utilizar el control Lista(ListBox). Vamos a crear un proyecto nuevo con nombre LISTAS para ilustrar el funcionamiento de este control. Colocamos los controles segn esta distribucin:

    Como se ve, hemos usado dos cuadros de Grupo para organizar los controles. El cuadro de texto recibe el nombre de txt_nombre y la lista (ListBox) que colocamos en la parte derecha se llamar lst_listado. Una vez realizado el diseo que quiero que presentos los controles que necesitamos en el Formulario, pasamos a aadir el cdigo. Empezamos con el botn Agregar. Hacemos doble-clic sobre l y escribimos el fragmento de cdigo siguiente: Lo que hacemos es comprobar que nos escriban algo en el cuadro de texto, si no es as mostramos un mensaje advirtindolo. Luego paso el contenido del cuadro a la variable nombre, aado la variable a la lista y pongo en el cuadro de texto el valor , sea la cadena vaca para que borre el nombre del cuadro despus de haberlo aadido. Vamos con el botn Borrar Lista. Le asociamos el siguiente cdigo:

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim nombre As String If txt_nombre.Text.Length > 0 Then nombre = txt_nombre.Text lst_listado.Items.Add(nombre) txt_nombre.Text = "" Else MessageBox.Show("Escriba un nombre antes de dar al botn", "Geoprocesado") End If End Sub

    Aadimos el nombre como elemento de la lista.

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click lst_listado.Items.Clear() End Sub

  • Herramientas Informticas para el Geoprocesado Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    Escuela Politcnica Superior de vila 24 Universidad de Salamanca

    Esa lnea se encarga de borrar el contenido de la lista. Como vemos hay otros mtodos asociados al Listbox y a Items. Se podra intentar completar el programa utilizando alguno ms de ellos. Queremos ahora que si se selecciona un elemento en la lista en la derecha, ese elemento aparezca en el cuadro de texto de la izquierda. Vamos a asociar el cdigo a la lista. Hacemos doble-clic sobre la lista y escribimos lo siguiente: En lo primero que nos fijamos es que el procedimiento que nos crea en la lista maneja el evento SelectedIndexChanged, es decir se asocia a cambiar el elemento seleccionado de la lista, frente al evento hacer clic que nos asociaba para los botones. Lo nico que le indicamos es que coloque en el cuadro de texto el valor del elemento que se seleccione en la lista. Si quisisemos modificar el evento que queremos que nos asocie a un botn o a un control en general, podemos seleccionar el evento que necesitemos en la parte superior de la ventana cuando estamos en una de las lneas del procedimiento al que le quiero asociar el manejador de evento distinto. En la imagen siguiente vemos los eventos que aparecen cuando desplegamos los manejadores disponibles para la lista.

    Para terminar con el ejercicio intentaremos crear un segundo formulario. Aadimos un formulario nuevo al proyecto actual desde el men Proyecto/Agregar Windows Forms.

    Nos aparece un dilogo con algunas plantillas de formularios preparados:

    Private Sub lst_listado_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lst_listado.SelectedIndexChanged txt_nombre.Text = lst_listado.SelectedItem End Sub

  • Herramientas Informticas para el Geoprocesado Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    Escuela Politcnica Superior de vila 25 Universidad de Salamanca

    Seleccionamos Cuadro Acerca de, ponemos como nombre frm_acerca y pulsamos el botn Agregar. Nos aparece el nuevo formulario. Es el formulario habitual de la mayora de aplicaciones en la que nos informa sobre la misma, versin, compaa, etc. Nosotros vamos a cambiar solo el texto que vemos asociado a las etiquetas para que se vea as:

    Ahora queremos utilizar este formulario creando una instancia desde el Formulario principal. Volvemos al formulario Principal haciendo doble-clic sobre la ficha Form1.vb[Diseo] o haciendo doble-clic sobre Form1.vb en el Exploracin de Soluciones. Hacemos doble-clic sobre el botn Acerca de que habamos aadido antes al formulario y escribimos el siguiente cdigo:

  • Herramientas Informticas para el Geoprocesado Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    Escuela Politcnica Superior de vila 26 Universidad de Salamanca

    Hay que destacar que el formulario frm_acerca que hemos creado es una clase. Para crear una instancia de la clase es necesario escribir Dim ayuda As New frm_acerca, a diferencia de la declaracin de las variables de tipos valor. Luego slo llamamos al mtodo Show del formulario. Si ejecutamos el programa comprobamos como al abrir el formulario Acerca lo hace sin crear dependencia del principal. Si pulsamos en el otro formulario nos deja cambiar a l. En las aplicaciones normales, en ocasiones necesitamos utilizar dilogos. Mientras se estn realizando cambios en el dilogo no se permite utilizar las opciones del programa principal. Vamos a cerrar los formularios para volver a seguir probando cosas. Volvemos al cdigo asociado al botn Acerca de, y ahora escribimos: En la lnea en la que antes pona ayuda.Show(). De este modo nos muestra el formulario en formato Modal. Intentamos pulsar en el principal durante la ejecucin despus de mostrar el formulario Acerca. Cerramos el Programa. Si vamos al formulario frm_acerca y pulsamos doble-clic sobre el botn Aceptar vemos el cdigo que ha escrito el programa para ese botn. Me hace referencia al objeto actual, en este caso al formulario frm_acerca, con close() le indicamos que lo cierre. En la parte superior de la ventana del cdigo observamos que hay otra funcin asociada a la carga del formulario Handles MyBase.Load es la que se encarga de actualizar las etiquetas segn los valores que figuran en las propiedades del proyecto. Dejamos para vosotros la opcin de eliminar la funcin y dejar las etiquetas estticas, o modificar esos parmetros. Guardamos el proyecto, y lo cerramos.

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click Dim ayuda As New frm_acerca ayuda.Show() End Sub

    ayuda.ShowDialog()

    Me.Close()

  • Herramientas Informticas para el Geoprocesado Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    Escuela Politcnica Superior de vila 27 Universidad de Salamanca

    5 Estructuras Repetitivas. Mens, DataGridView 5.1 Mens y Bucles For-Next, Do-Loop, While-Wend Vamos a desarrollar un programa para ilustrar el uso de mens. En el programa tendremos 5 formularios. El principal, uno para ilustrar el funcionamiento de cada una de las estructuras repetitivas, y otro ms para la ayuda. Comenzamos creando un proyecto nuevo de tipo Aplicacin para Windows, en la parte inferior le damos nombre en este caso MENUSYBUCLES. Procedemos a cambiar el nombre al formulario, en la parte derecha de la pantalla, en el Explorador de Soluciones, pulsamos con el botn derecho sobre Form1.vb y seleccionamos cambiar nombre le asignamos el nombre frm_principal. Ponemos tambin en la propiedad Text del formulario el ttulo Mens y Bucles.

    5.1.1 Crear el men. Ahora asociamos el men a este formulario, para ello elegimos en el cuadro de herramientas de la izquierda el grupo mens y barras de herramientas, al desplegarlo elegimos MenuStrip y pulsamos sobre el fondo del formulario, nos quedar as:

    Vemos que en la parte superior del Formulario aparece la opcin Escriba aqu y en la zona inferior nos pone MenuStrip1, ah es donde aparecen los controles que no son visibles en una posicin concreta del formulario. Escribimos el siguiente men:

    &Archivo &Repeticiones Ay&uda Salir Bucle For Acerca de - Bucle Do-Loop - Bucle While-EndWhile

    El ampersand (&) delante de una de las letras de la etiqueta del men hace que esa sea la tecla asociada para acceder a l con el teclado y la tecla Alt. El - como etiqueta nos pone un separador en esa posicin. Se ponen al final de un men para indicar que no realizan una operacin directa, sino que muestran un dilogo. El men quedara:

  • Herramientas Informticas para el Geoprocesado Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    Escuela Politcnica Superior de vila 28 Universidad de Salamanca

    Vamos a asociar cdigo al submen Salir dentro de Archivo. Si hacemos doble-clic sobre Salir como si fuera un botn, y le asociamos el cdigo siguiente que ya usamos en el programa anterior. Ejecutamos el programa y probamos a navegar por los mens y a usar la opcin Salir que nos abandonar el programa.

    5.1.2 Agregar formulario existente. En lugar de volver a crear el formulario de Acerca de como hicimos en el proyecto anterior, vamos a aadrselo desde el anterior. Si vamos al men proyecto/Agregar elemento existente.

    Localizamos el proyecto Listas de antes, luego cogemos la carpeta Listas y el formulario frm_acerca.vb. Este formulario se copiar al proyecto actual.

    Private Sub SalirToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SalirToolStripMenuItem.Click Me.Close() End Sub

  • Herramientas Informticas para el Geoprocesado Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    Escuela Politcnica Superior de vila 29 Universidad de Salamanca

    Despus pulsamos Agregar. Ahora vamos asociar al men Acerca de el mismo cdigo que en el programa anterior. Ejecutamos el programa, probamos el funcionamiento de lo realizado hasta ahora.

    5.1.3 Formulario Tabla de Multiplicar bucle FOR-NEXT. Creamos otro formulario nuevo para la parte del programa del Bucle For. En el men Proyecto/Agregar Windows Forms. Elegimos ahora un formulario normal, el primero WindowsForms y le ponemos nombre frm_bucleFor.vb. Creamos una lista, un cuadro de texto y un botn. Los distribuimos as:

    Ponemos como nombre de la lista lst_tabla y al cuadro de texto txt_numero. Al botn cerrar le asociamos Me.Close(), y a Crear Tabla le asociamos lo siguiente:

    Private Sub AcercaDeToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AcercaDeToolStripMenuItem.Click Dim ayuda As New frm_acerca ayuda.ShowDialog() End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim numero, i, res As Integer Dim linea As String If txt_numero.Text.Length > 0 Then If IsNumeric(txt_numero.Text) Then numero = CInt(txt_numero.Text) If lst_tabla.Items.Count > 0 Then lst_tabla.Items.Clear() End If For i = 1 To 10 res = numero * i linea = numero & " por " & i & " es " & res lst_tabla.Items.Add(linea) Next Else MessageBox.Show("El valor introducido no es un nmero", "Tabla Multiplicar") End If Else MessageBox.Show("Escriba un nmero en el cuadro antes de pulsar el botn", "Tabla Multiplicar") End If End Sub

  • Herramientas Informticas para el Geoprocesado Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    Escuela Politcnica Superior de vila 30 Universidad de Salamanca

    Vamos a asociar cdigo al submen Bucle For dentro de Repeticiones. Si hacemos doble-clic sobre Bucle For como si fuera un botn, y le asociamos el cdigo siguiente, para que nos muestre el formulario creado: Ejecutamos el programa, probamos el funcionamiento de lo realizado hasta ahora. La sintaxis del bucle FOR-NEXT es: Se repiten las sentencias de dentro del bucle desde que la variable toma el valor inicial hasta que alcance el valor final con el incremento PASO. Si no se especifica el PASO se interpreta que es 1. El PASO puede ser positivo o negativo. Cuando el PASO es positivo o cero el bucle se ejecuta si la variable es menor o igual que fin. Cuando el PASO es negativo el bucle se ejecuta si la variable es mayor o igual que fin. Con la instruccin EXIT FOR se abandona la ejecucin del bucle sin completar las iteraciones indicadas. Se utiliza para forzar la salida del bucle cuando se da una condicin. Por ejemplo que ya hemos encontrado el valor que buscbamos en una lista y no necesitamos seguir comparando el resto de elementos de la misma. NOTA: Visual Basic evala las iteraciones que se realizan solo una vez al comenzar el bucle si el bloque de sentencias del bucle modificase el valor de FIN o de PASO, esas modificaciones no afectaran a la iteracin del bucle.

    5.1.4 Formulario bucle DO-LOOP.

    Vamos a crear otro formulario nuevo como en el caso anterior. Le llamamos frm_doloop.vb. Creamos un cuadro de grupo, las etiquetas, los botones el cuadro de texto y el cuadro de lista. Al cuadro de texto le llamamos txt_secreto, y a la lista lst_lista.

    FOR variable=inicio TO fin [STEP PASO] Sentencias [EXIT FOR] [SENTENCIAS] NEXT [variable]

    EJEMPLOS: FOR I=1 TO 10 Sentencias NEXT I FOR I=1 TO 10 STEP 2 Sentencias NEXT FOR I=10 TO 1 STEP -1 Sentencias NEXT

    Private Sub BucleForToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BucleForToolStripMenuItem.Click Dim tablamultiplicar As New frm_bucleFor tablamultiplicar.ShowDialog() End Sub

  • Herramientas Informticas para el Geoprocesado Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    Escuela Politcnica Superior de vila 31 Universidad de Salamanca

    Al botn cerrar le asociamos: En el botn comenzar colocamos el siguiente fragmento de cdigo. Las lneas que comienzan con una comilla () aparecen en verde en el compilador y son comentarios. Se utilizan para explicar algunas partes del programa y as que el cdigo resulte ms comprensible.

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim secreto, num As Integer ' Inicializamos el generador de nmeros aleatorios. Randomize() ' Generamos nmero aleatorio entre 1 y 10. secreto = CInt(Int((10 * Rnd()) + 1)) txt_secreto.Text = "" lst_lista.Items.Clear() Do num = InputBox("Dime un numero del 1 al 10", "Adivinar") If secreto > num Then MessageBox.Show("El numero es Mayor", "CASI") lst_lista.Items.Add(num) ElseIf secreto < num Then MessageBox.Show("El numero es Menor", "CASI") lst_lista.Items.Add(num) End If Loop While secreto num 'Loop Until secreto = num MessageBox.Show("Acertaste", "RESULTADO") txt_secreto.Text = secreto End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Me.Close() End Sub

  • Herramientas Informticas para el Geoprocesado Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    Escuela Politcnica Superior de vila 32 Universidad de Salamanca

    El programa genera un nmero aleatorio que ser el secreto. Luego va pidiendo nmeros al usuario. Si el nmero no es el correcto se pone un mensaje con la indicacin y se aade el nmero a la lista. El bucle se repite mientras (While) el nmero sea distinto de secreto. Se producira el mismo resultado con la lnea comentada, repitiendo el bucle hasta (Until) que el nmero y secreto fuesen iguales. Al terminal el bucle cuando se acierte el nmero se muestra un mensaje para indicarlo y se coloca el secreto en el cuadro de texto. La sintaxis del bucle DO-LOOP es: Se repite un bloque de sentencias mientras la condicin se cumpla o hasta que la condicin se cumpla. Si la condicin se coloca al comienzo del bucle, puede que el bucle no se llegue a ejecutar nunca si as se desprende de la evaluacin de la condicin. Si la condicin va al final, las sentencias al menos se ejecutan una vez antes de que se llegue a evaluar la condicin. La instruccin EXIT DO es opcional, si aparece fuerza la salida del bucle. Vamos a asociar cdigo al submen Bucle Do-Loop dentro de Repeticiones. Si hacemos doble-clic sobre l como si fuera un botn, y le asociamos el cdigo siguiente, para que nos muestre el formulario creado: Probamos el funcionamiento del ltimo formulario creado.

    DO { While | Until } condicion [Sentencias] [Exit DO] [Sentencias] LOOP O DO [Sentencias] [Exit DO] [Sentencias] LOOP { While | Until } condicion

    Private Sub BucleDoLoopToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BucleDoLoopToolStripMenuItem.Click Dim adivinar As New frm_doloop adivinar.ShowDialog() End Sub

  • Herramientas Informticas para el Geoprocesado Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    Escuela Politcnica Superior de vila 33 Universidad de Salamanca

    5.1.5 Formulario bucle While-End While, DataGridView.

    Completaremos el ejercicio creando otro formulario nuevo como en el caso anterior. Le llamamos frm_while.vb. Creamos un cuadro de grupo, la etiqueta, los botones, el cuadro de texto y un DataGridView (a continuacin contaremos con detalle como se aade este control nuevo). Al cuadro de texto le llamamos txt_tope y en la propiedad Text le asignamos valor 5. Que quede con este aspecto.

    Para aadir la tabla el control DataGridView seleccionamos el grupo Datos en el cuadro de herramientas de la izquierda, y a continuacin el componente DataGridView.

    Seguidamente hacemos un rectngulo en el formulario del tamao apropiado segn lo reflejado en la imagen de distribucin de controles sobre el formulario anterior. Al hacerlo nos aparece el dilogo de la pgina siguiente. El DataGridView se utiliza habitualmente para visualizar el contenido de bases de datos que enlacemos desde visual. Como nosotros ahora no vamos a enlazar a ninguna base de datos sino que vamos a utilizar la tabla para colocar en ella valores generados por nosotros, en la lnea Elegir origen de datos dejamos (ninguno).

  • Herramientas Informticas para el Geoprocesado Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    Escuela Politcnica Superior de vila 34 Universidad de Salamanca

    Queremos crear 3 columnas en la tabla, en la primera mostraremos un nmero, en la segunda escribiremos el cuadrado del nmero y en la tercera el cubo del nmero que hemos situado en la primera columna. Comenzamos con la primera columna. Pulsamos sobre Agregar columna y nos aparece:

    Escribimos como nombre numero y como texto del encabezado Nmero. Pulsamos Agregar. Repetimos escribiendo nombre cuadrado y encabezado Nmero Cuadrado para la segunda, y ponemos nombre cubo y encabezado Nmero Cubo en la tercera. Despus pulsamos el botn Cerrar. Seleccionando esta tabla buscamos ReadOnly en las propiedades y le asignamos el valor True.

  • Herramientas Informticas para el Geoprocesado Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    Escuela Politcnica Superior de vila 35 Universidad de Salamanca

    Vamos a asignar funcionalidad a los botones. Al de Cerrar le asignamos: Y al de Generar: Como se indica en los comentarios se hacen comprobaciones sobre la validez del dato introducido en el tope. Se borra lo que tuviese previamente la tabla y en el bucle while se repite mientras el contador sea menor o igual que el tope. Para calcular el cubo hacemos uso de la funcin Math.Pow pasndole la base i y el exponente 3. Asociamos cdigo al submen Bucle While-EndWend dentro de Repeticiones. Si hacemos doble-clic sobre l y le asociamos el cdigo siguiente:

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Me.Close() End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim i, tope As Integer If txt_tope.Text.Length > 0 Then ' Comprobamos que se haya escrito algo en el cuadro de texto tope If IsNumeric(txt_tope.Text) Then ' Nos aseguramos que hay un numero en tope tope = CInt(txt_tope.Text) 'Asigno a la variable tope el valor del cuadro de texto dgv_tabla.Rows.Clear() 'Borramos las filas previas si las hubiera i = 1 'Inicializo el contador del bucle While i

  • Herramientas Informticas para el Geoprocesado Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    Escuela Politcnica Superior de vila 36 Universidad de Salamanca

    6 Arrays de una y varias dimensiones. 6.1 Arrays unidimensionales(Vectores) En visual .Net se dispone de estructuras ms avanzadas para almacenar un grupo de valores, como colecciones que veremos ms adelante. Para almacenar una serie de datos del mismo tipo se utilizan tradicionalmente los Arrays. Intentaremos ilustrar el uso de un Array con un ejemplo y luego comentamos las caractersticas para trabajar con ellos en Visual Basic .Net. Creamos un proyecto nuevo de tipo Aplicacin para Windows, en la parte inferior le damos nombre en este caso VECTORES. Procedemos a cambiar el nombre al formulario, en la parte derecha de la pantalla, en el Explorador de Soluciones, pulsamos con el botn derecho sobre Form1.vb y seleccionamos cambiar nombre le asignamos el nombre frm_principal. Ponemos tambin en la propiedad Text del formulario el ttulo Geotecnologas: Calculo de Notas. Queremos disear el formulario para que quede con el aspecto de la imagen:

    Creamos dos cuadros de grupo, las etiquetas que se ven, los botones, los cuadros de texto y la lista. Al cuadro de texto alumno le llamamos txt_alumno, al de nota txt_nota y al de la media txt_media. A la lista le damos el nombre txt_lista. mbito de variables En los programas realizados hasta ahora las variables las crebamos dentro de los procedimientos asociados al evento click de los botones, o a otros controles. En este programa necesitamos que si en la accin asociada a un botn se le asignan unos valores al vector, esos valores se mantengan cuando se realiza una operacin para otro de los botones. Crearemos una variable que ser visible para todos los procedimientos dentro del formulario.

  • Herramientas Informticas para el Geoprocesado Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    Escuela Politcnica Superior de vila 37 Universidad de Salamanca

    Vamos a asociar al botn Salir la operacin de cerrar el formulario: Justo encima de la declaracin del procedimiento declaramos el vector que nos permitir almacenar las notas y mantenerlas o modificarlas desde todos los procedimientos de la clase frm_principal (de las clases hablaremos con ms detalle en futuros ejercicios). Quedar: La lnea Dim Vectornotas(9) As Double crea un vector de 10 elementos, nmeros reales (Double). Nos est creando un vector de 10 elementos, el primero est en la posicin 0, y el ltimo en la 9. En cada posicin almacenaremos una nota. Pos 0 1 2 3 4 5 6 7 8 9 Valor 5.8 8.5 6.5 7.2 9.3 7.4 6.8 5 5.5 6.5 Para asignar un valor al primer elemento del vector podramos poner

    Vectornotas(0)=5.8 La ventaja del uso de vectores frente a las variables normales es que podemos recorrer los elementos del mismo con estructuras repetitivas para agilizar el manejo de grandes cantidades de datos. Seguimos con el ejemplo, luego contamos mas detalles de la declaracin de vectores. En el botn Asignar Nota ponemos:

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click Me.Close() End Sub

    Public Class frm_principal Dim Vectornotas(9) As Double Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click Me.Close() End Sub End Class

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim alumno As Integer Dim nota As Double If txt_alumno.Text.Length > 0 Then 'Comprobamos que hayan escrito algo en alumno If IsNumeric(txt_alumno.Text) Then 'Que hayan escrito un nmero alumno = CInt(txt_alumno.Text) 'Guardamos el valor nmerico escrito en alumno If alumno >= 1 And alumno

  • Herramientas Informticas para el Geoprocesado Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    Escuela Politcnica Superior de vila 38 Universidad de Salamanca

    Asignamos al vector en la posicin indicada en alumno el valor que nos ponen en nota. Luego mostramos en la lista el contenido del vector indicando la posicin y la nota. Queremos que al iniciar el programa se llene la lista con la informacin almacenada en el vector aunque sern todos los valores 0. Para que la ejecucin del cdigo necesario se realice al comenzar el programa, lo vamos a poner asociado al evento Cargar formulario, (Load). Si hacemos doble-clic sobre el fondo del formulario, ya nos aparece el procedimiento asociado a la operacin Cargar. Le escribimos el cdigo siguiente:

    Vectornotas(alumno - 1) = nota 'el ndice del vector empieza en 0 y los alumnos que

    'introduce el usuario empiezan en 1 por eso restamos 1 para que los valores de 1-10 'que introduce el usuario se tomen como valores de 0-9 para el ndice del vector. Else

    MessageBox.Show("El alumno debe ser un nmero del 1 al 10", "Error Nmero fuera de intervalo")

    'Mensaje si el nmero no est entre 1 y 10 End If Else MessageBox.Show("El alumno debe ser un nmero del 1 al 10", "Error de nmero de alumno") 'Mensaje si no es un nmero End If Else MessageBox.Show("Escriba el nmero de alumno", "Error de nmero de alumno") ' Mensaje si no se escribe nada en alumno End If Dim i As Integer Dim linea As String lst_lista.Items.Clear() 'Borramos la lista For i = 0 To 9 linea = "" & i & "==>" & Vectornotas(i) 'formamos una linea con la posicin del vector y su contenido lst_lista.Items.Add(linea) 'agregamos la linea a la lista Next End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim i As Integer Dim linea As String lst_lista.Items.Clear() 'Borramos la lista For i = 0 To 9 linea = "" & i & "==>" & Vectornotas(i) 'Formamos la linea con la posicin y el contenido del vector lst_lista.Items.Add(linea) 'Agregamos la linea a la lista Next End Sub

  • Herramientas Informticas para el Geoprocesado Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    Escuela Politcnica Superior de vila 39 Universidad de Salamanca

    Cuando pulsemos el botn Comprobar nota queremos que nos coloque en el cuadro de texto nota, la nota correspondiente al alumno cuyo nmero escribimos en el cuadro de texto alumno. Para lograr nuestro propsito escribiremos el cdigo: Para terminar el programa realizamos el clculo de la media de las notas introducidas. Al botn Calcular Media le asignamos el cdigo:

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim alumno As Integer If txt_alumno.Text.Length > 0 Then 'Miramos que se escriba algo en alumno If IsNumeric(txt_alumno.Text) Then 'Que lo escrito sea un nmero alumno = CInt(txt_alumno.Text) 'Asignamos a la variable alumno el valor de lo escrito en el cuadro If alumno >= 1 And alumno

  • Herramientas Informticas para el Geoprocesado Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    Escuela Politcnica Superior de vila 40 Universidad de Salamanca

    Con esto terminamos el programa. Podemos probar su funcionamiento. Algunos detalles a tener en cuenta cuando trabajamos con vectores: Intentaremos exponer ahora algn detalle ms de la declaracin y uso de Arrays. En nuestro programa creamos un vector de tipo Double, pero es posible declarar un vector de cualquiera de los tipos disponibles, y tambin de clases que nosotros nos creemos. La frmula utilizada para declarar el vector es la tradicional: Dim Vectornotas(9) As Double Dim Vectornotas() As Double Tambin lo podramos declarar segn la forma nueva para .NET Dim Vectornotas As Double() Si utilizamos la declaracin clsica podemos indicarle en el momento de declarar la variable el nmero de elementos que tendr el vector. Si lo hacemos por el mtodo nuevo no le podemos indicar el nmero de elementos del Array al declararlo, y ser necesario redimensionarlo despus. Para redimensionar el Vector escribimos: ReDim Vectornotas(9) Es posible redimensionar la matriz si se necesitan ms elementos con la clusula Preserve. Por ejemplo: Dim Vectornotas(9) As Double ReDim Preserve Vectornotas(20) ReDim Preserve Vectornotas(15) ReDim Vectornotas(10) En la primera redimensin le damos 20 como tamao del vector y como tiene puesto el Preserve mantiene los elementos que pudiese tener el vector. En la segunda le dejamos en 15 perderamos los 5 ltimos elementos si tuviesen algo, pero los primeros mantendran su contenido. Con la ltima redimensin le dejamos con 10 elementos y al no tener Preserve se quedaran sin el contenido previo asignndole los valores de inicializacin de la variable 0 en nuestro caso. Si necesitamos redimensionar un vector a un tamao variable dependiendo de las circunstancias del programa, lo podremos hacer segn lo indicado antes. Para recorrer un vector de este modo, puede ser interesante utilizar la funcin Length que me indica el nmero de elementos del vector. Quedara: For i = 0 To Vectornotas.Length-1 Se puede ordenar un vector, lo hacemos as: Array.Sort(Vectornotas)

  • Herramientas Informticas para el Geoprocesado Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    Escuela Politcnica Superior de vila 41 Universidad de Salamanca

    6.2 Arrays multidimensionales (Matrices). Podemos utilizar Arrays de varias dimensiones. Por ejemplo para declarar una matriz de 3 filas y 4 columnas de Double escribiramos: Dim Tabla(2,3) As Double Cuando preguntamos por la longitud de un vector de una dimensin con Length nos dice cuantos elementos tiene. Si preguntamos para un vector de varias dimensiones, nos dice cuantos elementos tienen en total, pero no sabemos cuantos hay para cada dimensin. Para saber cuantos hay en cada dimensin podemos poner lo siguiente: Tabla.GetLowerBound(0) Esto nos dira cuantos elementos tiene en la primera dimensin (0). Para la segunda sera igual pero poniendo (1). Si queremos saber cuantas dimensiones tiene un vector pondramos Dim dimensiones As Integer dimensiones = Tabla.Rank Que en este caso seran 2. Se puede usar ReDim para cambiar el nmero de elementos de cada dimensin. Pero no para cambiar el nmero de dimensiones del Array. Podemos usar ReDim con Preserve para cambiar el nmero de elementos de la ltima dimensin sin perder la informacin que tuviese previamente almacenada.

  • Herramientas Informticas para el Geoprocesado Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    Escuela Politcnica Superior de vila 42 Universidad de Salamanca

    7 Definicin de Clases Propias. Como hemos ido viendo todo en .Net gira entorno a las clases, a los objetos. Un formulario es una clase, un botn tambin, etc. Vamos a intentar crear una clase. Comenzamos creando un proyecto nuevo como en ejercicios anteriores. A este le daremos el nombre Puntosyclases.

    7.1 Clase Punto2D. Para crear una clase en el proyecto actual, vamos al men Proyecto/Agregar clase y elegimos como nombre Punto2d.vb en la pantalla que aparece que tendr el aspecto:

    Vamos a crear las siguientes funciones en la clase Punto2d:

    Public Class Punto2d Public x, y As Double 'Variables de la clase Punto2d son pblicas, permitirn acceder a ellas. 'Se podran haber creado como propiedades Sub mostrar() 'Procedimiento mostrar que visualiza en un mensaje los valores de las coordenadas MessageBox.Show("La X del punto es " & x & " y la Y del punto es" & y, "Informacin del Punto") End Sub Sub New() 'Constructor por Defecto. Inicializa las Variables y muestra un mensaje cuando es invocado x = 0 y = 0 MessageBox.Show("Punto creado con el constructor por defecto", "Constructor por Defecto") End Sub

  • Herramientas Informticas para el Geoprocesado Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    Escuela Politcnica Superior de vila 43 Universidad de Salamanca

    Los constructores New son procedimientos especiales que son invocados en el momento de crear un nuevo objeto de tipo nuestra clase. Si nosotros no definimos el constructor el programa se encarga de llamar a uno genrico. En el ejemplo hemos creado tres constructores los tres tienen el mismo nombre con lo que estaran sobrecargados. En el momento de llamar a alguno de ellos, dependiendo de los argumentos que le indiquemos sabe cul tiene que ejecutar. El primero es el constructor por defecto. No recibe ningn argumento. El segundo es el constructor con parmetros, recibe como argumento los valores de las coordenadas, se encarga de asignar los valores recibidos a las variables. El tercero es el constructor de copia, recibe una variable del mismo tipo que la clase que estamos definiendo, se encarga de ir copiando cada valor de la clase que recibe en las variables de la clase que declaramos. Tambin tenemos un procedimiento mostrar para visualizar los valores, y un funcin para calcular la distancia al punto que nos proporcionan como parmetro. En los parmetros que recibimos vemos que aparece ByVal, esto significa que los parmetros se reciben por valor. Es decir se recibe una copia de objeto que nos pasen y el original no se ver afectado por las modificaciones que se realicen en el procedimiento. Si pusisemos ByRef, le estaramos pasando por referencia. Es decir, pasamos la direccin de memoria del objeto original y ste podra verse modificado. Crearemos ahora un aplicacin para ilustrar cmo utilizamos la clase creada. Cambiamos el nombre al formulario Form1.vb y le llamamos frm_principal.vb. El aspecto que debera presentar el formulario sera:

    Sub New(ByVal coord_x As Double, ByVal coord_y As Double) 'Constructor de parmetros x = coord_x y = coord_y MessageBox.Show("Punto creado con el constructor de parametros", "Constructor de Parmetros") End Sub Sub New(ByVal p2 As Punto2d) 'Constructor de copia x = p2.x y = p2.y MessageBox.Show("Punto creado con el constructor de copia", "Constructor de Copia") End Sub Function distanciaA(ByVal p2 As Punto2d) As Double 'Funcin distancia. Calcula la distancia al 'punto que nos pasan como argumento Dim distanciax, distanciay As Double distanciax = p2.x - x distanciay = p2.y - y distanciaA = Math.Sqrt(distanciax * distanciax + distanciay * distanciay) 'Calculamos la distancia y se la asignamos al nombre de la funcin. As devolvemos el valor End Function End Class

  • Herramientas Informticas para el Geoprocesado Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    Escuela Politcnica Superior de vila 44 Universidad de Salamanca

    Al botn de Salir le ponemos el cdigo de cerrar el formulario usado en otras ocasiones. Al botn de crear puntos le asociamos lo siguiente: Podemos probar el funcionamiento de este breve programa.

    7.2 Clase Punto3D. Herencia Creamos una clase nueva llamada Punto3d, siguiendo los pasos indicados para la clase Punto2d. Una vez creada le realizamos las modificaciones que se observan en el cdigo siguiente:

    Public Class frm_principal Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim dista As Double

    Dim p As New Punto2d 'Creamos punto con el constructor por defecto

    p.x = 5 'Asignamos un valor a la variable x del punto p p.y = 8 'Asignamos un valor a la variable y del punto p p.mostrar() 'llamamos al mtodo mostrar de la clase punto2d Dim p2 As New Punto2d(3, 7) 'Creamos otro punto p2 con el constructor por argumentos p2.mostrar() 'Mostramos el punto p2 Dim p3 As New Punto2d(p2) 'Creamos el punto p3 con el constructor de copia a partir del punto p2 p3.mostrar() 'Mostramos p3 que tendr los mismos valores que p2 dista = p3.distanciaA(p) 'Calculamos la distancia del punto p3 al p MessageBox.Show("La distancia es " & Format(dista, "0.0000"), "DISTANCIA ENTRE PUNTOS") 'Mostramos la distancia calculada. Con format podemos indicar los decimales que queremos y en general 'el formato con el que queremos que nos muestre el valor de una variable. End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Me.Close() End Sub End Class

  • Herramientas Informticas para el Geoprocesado Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    Escuela Politcnica Superior de vila 45 Universidad de Salamanca

    Con Inherits Punto2d le indicamos que herede de la clase anterior. Vamos a sobrescribir el procedimiento mostrar para que muestre los datos de 2 y 3 dimensiones. Se lo indicamos con Overrides Sub mostrar(). Para que me permita sobrescribir el procedimiento mostrar en la clase Punto3d le tengo que indicar en la clase Punto2d que el procedimiento es sobreescribible. Se lo indicamos con Overridable Sub mostrar(). Con Mybase podemos llamar a los mtodos de la clase base (Punto2d). As nos ahorramos repetir cdigo. Modificamos el formulario aadiendo otro botn.

    Public Class Punto3d Inherits Punto2d 'As le indicamos que la clase Punto3d hereda sus propiedades de Punto2D Public z As Double ' El punto3D tendr tambin Z Overrides Sub mostrar() ' Declaramos el procedimiento mostrar y le indicamos que sobreescriba 'el mostrar de la clase base. MyBase.mostrar() 'Llamo al mostrar de punto2d para que muestre la X y la Y MessageBox.Show("Y la Z del punto es " & z, "Informacin del Punto") 'Muestro la Z End Sub Sub New() 'Constructor por Defecto. Inicializa las Variables y muestra un mensaje cuando es invocado MyBase.New() 'llamo al constructor por defecto de punto2d z = 0 MessageBox.Show("Punto 3D creado con el constructor por defecto", "Constructor por Defecto") End Sub Sub New(ByVal coord_x As Double, ByVal coord_y As Double, ByVal coord_z As Double) 'Constructor de parmetros MyBase.New(coord_x, coord_y) 'Llamo al constructor con argumentos y le paso la x e y recibidas z = coord_z 'Asigno a la Z el valor recibido MessageBox.Show("Punto 3D creado con el constructor de parametros", "Constructor de Parmetros") End Sub Sub New(ByVal otrop3d As Punto3d) 'Constructor de copia MyBase.New(otrop3d) 'Llamo al constructor de copia pasando el punto recibido. Observar que le paso un 'objeto de tipo punto 3d. Pero un punto3d tambin es Punto2d al ser derivada de ella. z = otrop3d.z 'Asigno la Z MessageBox.Show("Punto 3D creado con el constructor de copia", "Constructor de Copia") End Sub End Class

  • Herramientas Informticas para el Geoprocesado Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    Escuela Politcnica Superior de vila 46 Universidad de Salamanca

    Y le asignamos al botn el cdigo que se indica a continuacin para que nos ilustre el funcionamiento.

    Ejecutamos el programa, guardamos y cerramos el proyecto.

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click Dim unpunto3d As New Punto3d unpunto3d.x = 5 'Asignamos un valor a la variable x del punto p unpunto3d.y = 8 'Asignamos un valor a la variable y del punto p unpunto3d.z = 9 'Asignamos un valor a la variable y del punto p unpunto3d.mostrar() 'llamamos al mtodo mostrar de la clase punto2d Dim p2 As New Punto3d(3, 7, 12) 'Creamos otro punto p2 con el constructor por argumentos p2.mostrar() 'Mostramos el punto p2 Dim p3 As New Punto3d(p2) 'Creamos el punto p3 con el constructor de copia a partir del punto p2 p3.mostrar() 'Mostramos p3 que tendr los mismos valores que p2 End Sub

  • Herramientas Informticas para el Geoprocesado Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    Escuela Politcnica Superior de vila 47 Universidad de Salamanca

    8 Crear y usar Biblioteca de Clases Una de las principales ventajas de la programacin orientada a objetos es la reutilizacin de Cdigo. Vamos a intentar crear una Biblioteca de Clases. Como ejemplo aprovecharemos las clases Punto2D y Punto 3D que utilizamos en el ejercicio anterior, las modificaremos levemente y generaremos la librera DLL.

    Empezamos creando un proyecto como en ejercicios anteriores pero ahora eligiendo el tipo Biblioteca de Clases. En Archivo/Nuevo proyecto, le damos el Nombre Geotecnologas.

    Ahora importamos las clases Punto2D y Punto3D del proyecto realizado anteriormente PuntosyClases. Para ello accedemos al men Proyecto/Agregar elemento existente. Localizamos el proyecto indicado y seleccionamos las clases, pulsamos Agregar.

  • Herramientas Informticas para el Geoprocesado Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    Escuela Politcnica Superior de vila 48 Universidad de Salamanca

    Procedemos a modificar las clases, comenzamos borrando la clase Class1 que nos cre automticamente al comenzar la creacin de la Biblioteca. Para borrarla pulsamos con el botn derecho sobre ella en el Explorador de Soluciones en la Derecha de la pantalla, y a continuacin Eliminar. Haciendo doble-clic sobre la clase Punto2d, vamos a borrar el procedimiento mostrar, y comentamos la instruccin MessageBox de todas las dems rutinas. Cuando queremos reutilizar cdigo, hay que intentar que la entrada y salida de informacin de las clases sea lo ms flexible posible. Como las variables de las coordenadas son pblicas, no necesitamos la funcin mostrar. Podemos mostrar el valor de esas variables en el programa principal en que se usen las clases, y podemos mostrar esos valores en un cuadro de texto, o imprimirlos, sin estar sujetos a que su visualizacin se produzca va un mensaje. Para mejorar la clase podramos haber creado propiedades que se encarguen de recoger o devolver controladamente los valores de las variables en lugar de haberlas dejado pblicas. Guardamos la clase, el cdigo quedar:

    Public Class Punto2d Public x, y As Double 'Variables de la clase Punto2d son pblicas, permitirn acceder a ellas. 'Se podran haber creado como propiedades Sub New() 'Constructor por Defecto. Inicializa las Variables y x = 0 y = 0 'MessageBox.Show("Punto creado con el constructor por defecto", "Constructor por Defecto") End Sub Sub New(ByVal coord_x As Double, ByVal coord_y As Double) 'Constructor de parmetros x = coord_x y = coord_y 'MessageBox.Show("Punto creado con el constructor de parametros", "Constructor de Parmetros") End Sub Sub New(ByVal p2 As Punto2d) 'Constructor de copia x = p2.x y = p2.y 'MessageBox.Show("Punto creado con el constructor de copia", "Constructor de Copia") End Sub Function distanciaA(ByVal p2 As Punto2d) As Double 'Funcin distancia. Calcula la distancia al 'punto que nos pasan como argumento Dim distanciax, distanciay As Double distanciax = p2.x - x distanciay = p2.y - y distanciaA = Math.Sqrt(distanciax * distanciax + distanciay * distanciay) 'Calculamos la distancia y se la asignamos al nombre de la funcin. As devolvemos el valor End Function End Class

  • Herramientas Informticas para el Geoprocesado Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    Escuela Politcnica Superior de vila 49 Universidad de Salamanca

    Hacemos algo parecido para la clase Punto3d. Borramos la funcin mostrar, y comentamos los mensajes. La clase nos queda: Guardamos la clase tambin, le damos a Archivo/Guardar todo y almacenamos el proyecto con nombre Geotecnologias. Generamos la librera Geotecnologas.dll. Para hacerlo damos al men Generar/generar Geotecnologias. Si todo ha ido bien nos habr dejado la librera Geotecnologias.dll en la carpeta del proyecto, subcarpeta bin y luego en Release. Comprobamos que es as y cerramos el proyecto.

    8.1 Utilizar la Biblioteca de clases creada. Creamos un breve proyecto para utilizar la biblioteca creada. El proyecto se llamar UsarBiblio y ser de tipo Aplicacin para windows. Para utilizar una Biblioteca de clases lo haremos desde Proyecto/Agregar referencia. En la pestaa Examinar localizamos Geotecnologias.dll, y pulsamos Aceptar. Aparentemente no pasa nada pero la biblioteca ya esta accesible desde nuestro proyecto.

    Public Class Punto3d Inherits Punto2d 'As le indicamos que la clase Punto3d hereda sus propiedades de Punto2D Public z As Double ' El punto3D tendr tambin Z Sub New() 'Constructor por Defecto. Inicializa las Variables MyBase.New() 'llamo al constructor por defecto de punto2d z = 0 'MessageBox.Show("Punto 3D creado con el constructor por defecto", "Constructor por Defecto") End Sub Sub New(ByVal coord_x As Double, ByVal coord_y As Double, ByVal coord_z As Double) 'Constructor de parmetros MyBase.New(coord_x, coord_y) 'Llamo al constructor con argumentos y le paso la x e y recibidas z = coord_z 'Asigno a la Z el valor recibido 'MessageBox.Show("Punto 3D creado con el constructor de parametros", "Constructor de Parmetros") End Sub Sub New(ByVal otrop3d As Punto3d) 'Constructor de copia MyBase.New(otrop3d) 'Llamo al constructor de copia pasando el punto recibido. Observar que le paso un 'objeto de tipo punto 3d. Pero un punto3d tambin es Punto2d al ser derivada de ella. z = otrop3d.z 'Asigno la Z 'MessageBox.Show("Punto 3D creado con el constructor de copia", "Constructor de Copia") End Sub End Class

  • Herramientas Informticas para el Geoprocesado Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    Escuela Politcnica Superior de vila 50 Universidad de Salamanca

    Creamos una variable de cada tipo y mostramos su resultado en un cuadro de Texto. Colocamos 3 botones un cuadro de texto llamado txt_mensajes al que le cambiamos la propiedad Multiline a True. Presentar el aspecto:

    En el botn Borrar mensajes escribimos el Cdigo: Para tener disponibles las clases sin poner el prefijo del Espacio de nombres al que pertenecen pondremos Imports Geotecnologas al comienzo del cdigo fuera de la clase Form1. Nos saldr al escribir imports nuestra biblioteca.

    txt_mensajes.Clear()

  • Herramientas Informticas para el Geoprocesado Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    Escuela Politcnica Superior de vila 51 Universidad de Salamanca

    De este modo para definir un punto puedo escribir Dim p1 As New Punto2d(2, 3) De no importar el espacio de nombres, habra que escribir: Dim p1 As New Geotecnologas.Punto2d(2, 3) Escribimos en el botn Crear puntos lo siguiente: Probamos su funcionamiento, guardamos y cerramos el proyecto.

    Dim p1 As New Punto2d(2, 3) txt_mensajes.AppendText("Se crea el punto p1 con x=2 e y=3" & vbCrLf) txt_mensajes.AppendText("El punto tiene x=" & p1.x & " e y=" & p1.y & vbCrLf) Dim p2 As New Punto3d(100, 50, 40) txt_mensajes.AppendText("Se crea el punto p2 con x=100,y=50 y z=40" & vbCrLf) txt_mensajes.AppendText("El punto p2 tiene x=" & p2.x & ", y=" & p2.y & "y z=" & p2.z & vbCrLf)

  • Herramientas Informticas para el Geoprocesado Geotecnologas Cartogrficas en Ingeniera y Arquitectura

    Escuela Politcnica Superior de vila 52 Universidad de Salamanca

    9 Lectura y escritura de Ficheros de texto STREAMS. Comenzamos un proyecto nuevo que se llamar LeerFicheros. Vamos a intentar leer ficheros de puntos en coordenadas X;Y;Z, separados por ;. Y vamos a guardar esos puntos con formato texto pero separados por tabulaciones (X Y Z). Creamos el men con el control MenuStrip en el grupo Mens y Barras de Herramientas.

    El formulario presentar el aspecto:

    Las etiquetas que vemos, un cuadro de texto con nombre txt_ruta para ver la ruta del archivo ledo, un cuadro de texto txt_rutaguardar para mostrar la ruta del archivo guardado, un cuadro de texto txt_leidos en el que mostraremos el nmero de puntos que se lean, un cuadro de texto txt_visor en el que pondremos la propiedad Multiline a True, para mostrar las lneas que vamos leyendo del fichero y un DataGridView que encontramos en la categora de Datos y ll