www.s-ejecutive.com 1 Índice Introducción ........................................................................................... 3 Trabajo con controles ............................................................................ 7 Propiedades de controles ....................................................................... 9 Programación orientada a objetos ...................................................... 12 Escribir código....................................................................................... 14 Manejo de información .......................................................................... 19 Operaciones matematicas..................................................................... 24 Manipulación de cadenas...................................................................... 27 If …. Then ….else .................................................................................. 32 Select case ............................................................................................. 36 Looping (bucles) .................................................................................... 40 Funciones I ............................................................................................. 45 Funciones II ............................................................................................ 49 Funciones III ........................................................................................... 55 Funciones IV .......................................................................................... 60 Funciones V ........................................................................................... 62 Check box .............................................................................................. 64 Radiobutton ........................................................................................... 70 Aplicación Web ...................................................................................... 73 Manejo de Errores ................................................................................ 75 Manejo de gráficos I .............................................................................. 80 Manejo de gráficos II ............................................................................. 82 Manejo de gráficos III ............................................................................ 85 Manejo de gráficos IV ............................................................................ 88 Manejo de gráficos V ............................................................................. 91 Manejo de gráficos VI ............................................................................ 94 Timer ....................................................................................................... 98 Animación ............................................................................................ 102 www.s-ejecutive.com 2 1.-INTRODUCCIÓN Visual Basic 2010 es muy similar a la versión 2008 aunque ha añadido muchas nuevas funciones. Al igual que la versión 2008 , Visual Basic 2010 es un lenguaje de Programación Orientada a Objetos por lo que ha sido incorporado al igual que que otros lenguajes como C++ o Java++ entre otros. De cualquier forma para comenzar a utilizar VB2010 no es necesario contar con conocimientos previos sobre la programación orientada a objetos. Cualquier persona que incluso esté familiarizada con Visual Basic 6 puede aprender muy fácilmente esta versión pues pese a los cambios y evoluciones del lenguaje, la interfaz y sintaxis de éste tienen la misma base. Para descargar la versión express de VB2010 podemos entrar a: http://www.microsoft.com/express/downloads/ El entorno integrado de Desarrollo (IDE)se muestra a continuación con sus principales elementos Nuevo Proyecto Abrir Propyecto que muestra una lista de proyectos recientes que se hayan realizado El panel de Inicio que muestra algunos tips que puedan ayudar rápidamente a desarrollar algunas aplicaciones El panel de Noticias incluye las noticias mas recientes acerca de Visual Basic 2010 Express. Tambien notifica las nuevas actualizaciones y desarrollos. La sección de Propiedades Para iniciar a crear la primera aplicación debemos dar click en Nuevo Proyecto. De manera que se muestre el siguiente cuadro de dialogo. www.s-ejecutive.com 3 El cuadro de dialogo ofrece 5 tipos de proyectos que se pueden crear. Para realizar la primera aplicación seleccionaremos Windows Form Application. En la parte inferior podemos indicar un nuevo nombre al proyecto. Una vez seleccionado y cambiado el nombre damos click en continuar. El entorno de trabajo que se muestra es muy similar al ofrecido en versiones tan antiguas como la versión 6.0. Consiste en mostrar un formulario vacio, el cuadro de herramientas flotante de lado izquierdo y el panel de propiedades de lado derecho. www.s-ejecutive.com 4 Cuadro de herramientas Ahora arrastraremos un control de botón al formulario, y cambiaremos el texto del botón a “ok” en el panel de propiedades, La palabra Ok se mostrará sobre el botón xomo se muestra en el ejemplo Para ingresar el codigo correspondiente daremos doble click sobre el boton y se abrirá la ventana de código en donde pondremos el código siguiente. www.s-ejecutive.com 5 Al ejecutar este código ya sea con el boton ó con la tecla F5 se mostrará el formulario y cuando demos click en el botón se mostrará el siguiente cuadro de dialogo(msgbox) Lista la primer aplicación hecha en Visual Basic. www.s-ejecutive.com 6 2.- TRABAJO CON CONTROLES Los controles en Visual Basic son herramientas que pueden ser ubicadas en el formulario para llevar a cabo muy diversas tareas. Son usadas para crear muchos tipos de aplicaciones en Windows. El diagrama de la derecha es la caja de herramientas en donde se encuentran los controles. Los controles están clasificados en controles comunes, contenedores, Menus, Barras de herramientas, Datos, Componentes, Impresión, cuadros de dialogo. Principalmente usaremos los controles comunes. Para insertar un control en el formulario basta con arrastrarlo desde la caja de herramientas. Una vez ubicado en el formulario podemos reubicarlo o cambiar su tamaño por medio de los nodos a nuestro gusto o necesidad. Al dar click en controles comunes se desplegarán los controles como en la imagen siguiente www.s-ejecutive.com 7 2.1 Control Text Box Ahora crearemos una calulador muy simple en pocos pasos, utilizaremos 2 TextBox para obtener numerous en ellos. 3 etiquetas y un botón. Los 2 textbox son para que el usuario pueda ingresar los números, una etiqueta es para mostrar el operador de suma (+), la otra etiqueta es para mostrar el signo de igual. La ultima etiqueta nos permitirá mostrar el total. El codigo del boton quedará de la siguiente forma Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Han dles Button1.Click Dim num1, num2, product As Single num1 = TextBox1.Text num2 = TextBox2.Text product = num1 + num2 Label1.Text = product End Sub De modo que al ejecutar el programa e ingresemos los numerous al dar click en el botón llevará a cabo la suma de estos. www.s-ejecutive.com 8 3- PROPIEDADES DE LOS CONTROLES Antes de escribir un procedimiento de evento para los controles, debemos establecer ciertas propiedades de los controles para definir la apariencia y como es que trabajará con los eventos. El panel de propiedades (3.2) nos permiten definir estos parámetros en el modo diseño. 3.1 3.2: The Properties Window El titulo de un formulario se define por medio de la propiedad Text del Formulario. Al igual que el titulo el nombre del control puede cambiarse en la propiedad Name teniendo en cuenta que no se deben utilizar espacios en el. En el panel de propiedades, en la parte superior se muestra el nombre del objeto seleccionado. En el resto de las filas se muestran de lado izquierdo los nombres de las propiedades y de lado derecho los valores predeterminados que traen consigo los controles. Tambien podemos cambiar las propiedades en modo de ejecución tales como, cambiar el color, forma, efectos de animación y algunas mas. El siguiente ejemplo cambia el color a amarillo cada vez que el formulario se carga. Visual Basic utiliza RGB para determinar los colores o bien algunos colores prestablecidos con nombre propio. La propiedad BackColor refiere del color de fondo de un objeto, en este caso se cambia el color de fondo del formulario www.s-ejecutive.com 9 La formula para asignar el color RGB al formulario es Color.FormArbg(RGB valores). Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.BackColor = Color.FromArgb(255, 0, 255) End Sub End Class También podemos usar el siguiente procedimiento para cambiar el color en modo de ejecucion. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.BackColor = Color.Magenta End Sub Ambos procedimientos cambiarán el color de fondo del formulario una vez que se ejecute como se muestra en el ejemplo Enseguida se muestran algunos de los colores mas comunes con su código correspondiente. Siempre podemos jugar con varias combinaciones sin olvidar que los valores de los 3 colores RGB van de 0 hasta 255 como maximo. Colo Colo RGB code Color RGB code RGB Code r r 255,0,0 255, 255, 0 255, 165, 0 0,255,0 0, 255, 255 0, 0, 0 0, 0, 255 255, 0, 255 255, 255, 255 www.s-ejecutive.com 10 El siguiente programa nos permite ingresar los valores para cada color en 3 textbox diferentes y al dar click en el boton se cambiará el color de fondo del formulario Codigo Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim rgb1, rgb2, rgb3 As Integer rgb1 = TextBox1.Text rgb2 = TextBox2.Text rgb3 = TextBox3.Text Me.BackColor = Color.FromArgb(rgb1, rgb2, rgb3) End Sub www.s-ejecutive.com 11 4- PROGRAMACION ORIENTADA A OBJETOS En las primeras 3 lecciones hemos aprendido como ingresar codigo y ejecutarlo, sin entender al 100% la logica que se ha llevado a cabo. Ahora aprenderemos algunas reglas básicas que nos permitan entender la lógica con la que se va a programar. Antes que anda debemos entender que un lenguaje de POO debe contar con 3 tecnologias importantes(Encapsulación, Herencia y polimorfismo) mismas que se definen a continuación. ENCAPSULACION.- se refiere a modulos autocontenedores que unen funciones procesadas a los datos. Estos tipos definidos por usuarios son llamados clases. Cada clase cuenta con datos y metodosque manipulan los datos. Los componentes de datos de una clase son llamados variables de instancias y una instancia de clase es un objeto. Por ejemplo, un sistema de librería, una clase podría ser un miembro, Carlos y Adriana serían 2 instancias(Objetos) de una clase de librería. HERENCIA.- Las clases son creadas basadas en jerarquías y las herencias permiten a la estructura y los métodos heredar procesos y datos. Esto significa menos programación en sistemas complejos. Si un paso es agregado al final del código, entonces solo los datos y procesos asociados a este deben agregarse. El resto del paso es heredado. La habilidad de reusar objetos existents es considerada la major ventaja de esta tecnologia. Polimorfismo.- La POO permite procedimientos para la creación de objetos un mismo tipo, que no están definidos hasta el modo de ejecución. Por ejemplo, un cursor en en la pantalla puede cambiar su forma de una flecha a una línea dependiendo del modo de programa. Visual Basic 2010 permite a los usuarios escribir programas que se dividen en módulos. Estos modulos representan en el mundo real objetos y son conocidos como clases o tipos. Un objeto puede ser creado fuera de la clase se denomina instancia de clase. Una clase puede tener subclases. Por ejemplo, arboles de manzana es una subclase de la clase plantas y la manzana es una instancia de la clase de árbol de manzanas. Otro ejemplo es Estudiantes una subclase de la clase humano mientras Un chico llamado Armando es una instancia de la clase estudiante. Una clase consiste en miembros de datos y métodos. La estructura en vb2010 para definir la clase humano podrías escribirse de la siguiente forma. Public Class Human 'Data Members Private Name As String Private Birthdate As String Private Gender As String Private Age As Integer 'Methods Overridable Sub ShowInfo( ) MessageBox.Show(Name) MessageBox.Show(Birthdate) www.s-ejecutive.com 12 MessageBox.Show(Gender) MessageBox.Show(Age) End Sub End Class Despues de haber creado la clase humano, podemos crear una subclase que herede los atributos de datos de la clase humano. Por ejemplo, podríamos crear subclases de la clase humano sin necesidad de redefinir los miembros de datos. After you have created the human class, you can create a subclass that inherits the attributes or data from the human class. For example, you can create a students class that is a subclass of the human class. Under the student class, you don't have to define any data fields that are already defined under the human class, you only have to define the data fields that are different from an instance of the human class. Por ejemplo podriamos incluir el ID de estudiante y la direccion dentro de la subclase estudiante. El código seria como el siguiente. Public Class Students Inherits Human Public StudentID as String Public Address As String Overrides Sub ShowInfo( ) MessageBox.Show(Name) MessageBox.Show(StudentID) MessageBox.Show(Birthdate) MessageBox.Show(Gender) MessageBox.Show(Age) MessageBox.Show(Address) End Sub www.s-ejecutive.com 13 5- ESCRIBIENDO EL CODIGO En los módulos anteriores hemos visto la definición de las tecnologías de la programación orientada a objetos, asi como algunos códigos muy sencillos. 5.1 Procedimientos de evento VB2010 es un lenguaje que aparte de ser POO se basa en programación de eventos. De hecho, todas las aplicaciones de Windows son manejadas por eventos. Manejados por eventos significa que el usuario decide que hacer en el programa. Ya sea dar un click, escribir en un textbox, cerrar un cuadro, etc. Un evento esta relacionado a un objeto, es un incidente que pasa cuando el objeto y el usuario interactúan. Tal como dar click en un botón ó presionar una tecla. Una clase tiene eventos que se crean tanto con instancias de una clase u objetos. Al iniciar una aplicación de Windows vemos como se muestra un formulario vacio en el entorno de VB2010, este es de hecho la primer clase de formulario que hereda todos sus atributos desde la clase form System.Windows.Forms.Form, tal como se muestra en el panel de propiedades del Form1. www.s-ejecutive.com 14 Al dar doble click en algún lugar del formulario, veremos la ventana de código como se ve a continuación. Se muestra el objeto en el que dimos click. En este caso el evento es load form (cargar formulario) mismo que empieza con Private Sub y termina con End sub. Este procedimiento incluye la clase form y el evento Load, y estos están unidos por un guion bajo. Form_load esto no hace otra cosa mas que cargar el formulario. Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load End Sub End Class Existen otros eventos ligados al objeto Form como al dar click, al cambiar el cursor, al dar doble click, al arrastrarlo entre otras. www.s-ejecutive.com 15 5.2 Escribiendo codigo Ahora estamos listos para escribir el codigo para un procedimiento de evento que haga algo ams que solo cargar el formulario vacio. Todo el código debe encontrarse entre Private Sub y End sub. Agreguemos el siguiente código. Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) H andles MyBase.Load Me.Text = "My First VB2010 Program" Me.ForeColor = Color.ForestGreen Me.BackColor = Color.Cyan End Sub End Classs La primera linea de codigo cambia el titulo del formulario La segunda línea cambia el color de fuente a verde bosque Cabe mencionar que utilizar la palabra Se me refiere al formulario mismo por lo que si necesitamos cambiar estas propiedades de otros objetos debemos cambiar Me por el nombre del control www.s-ejecutive.com 16 Aca otro ejemplo Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim name1, name2, name3 As String name1 = "John" name2 = "Georges" name3 = "Ali" MsgBox(" The names are " & name1 & " , " & name2 & " and " & name3) End Sub En este ejemplo insertamos un boton en el formulario y cambiamos su texto a Display hidden names. La palabra clave Dim permite declarar las variables dentro de la rutina con un tipo de datos, por lo que las variables name1, name2 y name3 solo pueden contener texto (string). La función msgbox permite mostrar un cuadr de dialogo emergente con el mensaje entrecomillado unido a los nombres establecidos en las variables. www.s-ejecutive.com 17 www.s-ejecutive.com 18 6-Manejando Datos Existen muchos tipos de datos mismos que manejamos a diario en la vida real. Por ejemplo necesitamos manejar datos como nombres, direcciones, dinero, fechas, cantidades, estadísticas, etc. Al igual que en la vida cotidiana en VB debemos tener el control y orden de estos tipos de datos, algunos pueden ser matematicos, mien tras otros pueden contener textos. VB clasifica los tipos de datos en 2 grandes tipos que son numéricos y no-numéricos. Tipos Numéricos Los tipos numéricos son tipos de datos que consisten en números, mismos que puedan ser computados matemáticamente con varios operadores estándar tales como la suma, resta, división y otras mas. Algunos ejemplos de este tipo de datos pueden ser calificaciones, peso, altura, el numero de estudiantes en una clase, valores compartidos, costo de productos, pagos mensuales y muchos mas.En VB los tipos numéricos están divididos en 7 subtipos, dependiendo del rango de valores se pueden alojar. Hay cálculos que requieren números redondeados o datos sin precisión decimal pueden ser de tipo Integer o Long integer dependiendo de la longitud de valores. Programas que requieren números de alta precisión necesitan declararse como Single y Double, estos también son conocidos como flotantes. Para cálculos de dinero podemos utilizar Currency. Si por otro lado necesitamos aun mayor precisión en tanto a decimales, el tipo correspondiente es Decimal 6.1: Tipos de datos numericos Type Byte Integer Long Storage 1 byte 2 bytes 4 bytes Single 4 bytes Double 8 bytes Currency 8 bytes Decimal 12 bytes Range of Values 0 to 255 -32,768 to 32,767 -2,147,483,648 to 2,147,483,648 -3.402823E+38 to -1.401298E-45 for negative values 1.401298E-45 to 3.402823E+38 for positive values. -1.79769313486232e+308 to -4.94065645841247E-324 for negative values 4.94065645841247E-324 to 1.79769313486232e+308 for positive values. -922,337,203,685,477.5808 to 922,337,203,685,477.5807 +/- 79,228,162,514,264,337,593,543,950,335 if no decimal is use +/- 7.9228162514264337593543950335 (28 decimal places). www.s-ejecutive.com 19 6.1.2 Tipos de datos no-numericos Los tipos de datos no numéricos son datos que no pueden ser manipulados matemáticamente usando operadores aritméticos. Los datos no-numericos comprenden textos o cadenas de caracteres, fechas, booleanos que solo alojan 2 valores (true o false), objetos y variant. 6.2: Nonnumeric Data Types Data Type String(fixed length) String(variable length) Storage Length of string Length + 10 bytes Date 8 bytes Boolean Object Variant(numeric) Variant(text) 2 bytes 4 bytes 16 bytes Length+22 bytes Range 1 to 65,400 characters 0 to 2 billion characters January 1, 100 to December 31, 9999 True or False Any embedded object Any value as large as Double Same as variable-length string 6.1.3 Sufijos para literals Las literales son valores que asignamos a datos. En algunos casos, necesitamos agregar sufijos antes de las literales de modo que VB pueda manejar los cálculos. Por ejemplo podemos usar num=1.3089# para un tipo Double. Estos son algunos de los sufijos 6.3. Table 6.3 Suffix & ! # @ Data Type Long Single Double Currency En adición necesitamos encerrar las de cadenzas con comillas dobles y las literales de fecha y hora con doble signo # . las cadenas pueden contener cualquier carácter, incluyendo números. memberName="Turban, John." TelNumber="1800-900-888-777" LastDay=#31-Dec-00# ExpTime=#12:00 am# www.s-ejecutive.com 20 6.2. Manejo de Variables Las variables son como buzones de correo en la oficina postal. El contenido de variables cambia en todo momento, tal como lo hacen los buzones. Las variables son areas alojadas enla memoria de la computadora para retener información. Tal como los buzones, cada variable debe tener un nombre. Por lo que cada nombre debe respetar las siguientes reglas. 6.2.1 nombres de variables Reglas para nombrar variables Debe tener menos de 255 caracteres No se permiten espacios No pueden empezar con números No se permiten puntos Estos son algunos ejemplos de nombres validos e inválidos Table 6.4 Valid Name My_Car ThisYear Long_Name_Can_beUSE Invalid Name My.Car 1NewBoy He&HisFather *& is not acceptable 6.2.2. Declaración de variables En VB necesitamos declarar las variables antes de usarlas asignándoles simultáneamente un nombre y los tipos de datos. Si fallamos al realizar este procedimiento el programa mostrará un error. Estas son normalmente declaradas en la sección general de códigos utilizando el estado Dim. El formato debe ser el siguiente Dim Variable Name As Data Type Ejemplo 6.1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim password As String Dim yourName As String Dim firstnum As Integer Dim secondnum As Integer Dim total As Integer Dim doDate As Date www.s-ejecutive.com 21 End Sub Podemos tambien combinarlas en una sola linea separándolas por comas Dim password As String, yourName As String, firstnum As Integer,............. Para la declaración de cadenas, hay 2 formatos posibles, uno de ellos para la longitud variable de la variable y la otra para la longitud fija de la variable. Para las cadenas de longitud variable basta con usar el formato del ejemplo 6.1 anterior. Para la longitud fija de las cadenas se debe usar el siguiente formato Dim VariableName as String * n, donde n define el numero de caracteres que la cadena puede alojar. Ejemplo 6.2: Dim yourName as String * 10 yourName no puede alojar mas de 10 caracteres 6.2.3 Asignación de valores a variables Despues de declarar varias variables, podemos asignar valores a todas estas variables. El formato general de asignación es el siguiente: Variable=Expression La variable puede ser una variable declarada o el valor de la propiedad de un control. La expresión puede ser una expresión matematica, un numero, una cadena, un valor booleano, etc. Estos son algunos ejemplos: firstNumber=100 secondNumber=firstNumber-99 userName="John Lyan" userpass.Text = password Label1.Visible = True Command1.Visible = false Label4.Caption = textbox1.Text ThirdNumber = Val(usernum1.Text) total = firstNumber + secondNumber+ThirdNumber www.s-ejecutive.com 22 6.3. Constantes Las constants difieren de las variables en el sentido de que sus valores no cambian mientras se ejecuta el programa. 6.3.1 Declaración de constantes El formato es: Const Constant Name As Data Type = Value Ejemplo 6.3 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Const Pi As Single=3.142 Const Temp As Single=37 Const Score As Single=100 End Sub www.s-ejecutive.com 23 7- Operadores Matematicos La computadora puede realizar cálculos matematicos mucho mas rápido que un ser humano. De cualquier forma la computadora por si sola no es capaz de cálculos matematicos sin recibir instrucciones del usuario.en VB podemos escribir código para instruir a la computadora a que realice cálculos matematicos tales como una suma, resta, multiplicación, división y otro tipo de operaciones aritméticos. Con el fin de realizar cálculos matemáticos debemos involucrar varios operadores aritméticos. Los operadores aritméticos son muy similares a los utilizados en la vida cotidiana con solo algunas variaciones minimas. Los signos de mas y menos son los mismos mientras la multiplicación y la división usan * y / respectivamente. 7.1: Arithmetic Operators Operator Mathematical function Example + Suma 1+2=3 -- Resta 4-1=3 ^ Potencia 2^4=16 * Multiplicacion 4*3=12, (5*6))2=60 / Division 12/4=3 Mod Modulo 15 Mod 4=3 División de enteros 19\4=4 \ 255 mod 10=5 Ejemplo 7.1 En este programa, necesitamos insertar 2 textbox, 4 etiquetas y un botón. Notar como los varios operadores aritméticos son usados dentro del código. Cuando ejecutas el programa, ralizará las 4 operaciones básicas y mostrará los resultados en las etiquetas. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim num1, num2, difference, product, quotient As Single num1 = TextBox1.Text num2 = TextBox2.Text sum=num1+num2 difference=num1-num2 product = num1 * num2 quotient=num1/num2 Label1.Text=sum www.s-ejecutive.com 24 Label2.Text=difference Label3.Text = product Label4.Text = quotient End Sub Ejemplo 7.2 El programa puede usar el teorema de Pitagoras para calcular la longitud de la hipotenusa, indicando la longitud de los lados adyacente (catetos). En caso de haber olvidado la formulad del teorema de Pitagoras se muestra a continuación. c^2=a^2+b^2 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim a, b, c As Single a = TextBox1.Text b = TextBox2.Text c=(a^2+b^2)^(1/2) Label3.Text=c End Sub Ejemplo 7.3 IMC (Indice de masa corporal) Mucha gente esta obesa y podría ver afectada su salud seriamente. La obesidad es uno de los principales factores que brinda muchos problemas médicos según los expertos médicos. Incluyendo muerte por paro cardiaco. Si el IMC es mayor a 30, una persona es considerada obesa. Nos podemos basar en la siguiente tabla para conocer el estado del peso. Underweight = <18.5 Normal weight = 18.5-24.9 Overweight = 25-29.9 Obesity = BMI of 30 or greater Para calular el IMC, no tenemos que consultar al doctor, podemos solo usar un calculador o un programa hecho para computadora, esto precisamente es lo que pretendemos realizar. El calculador IMC es un programa VB que puede calcular el índice de masa corporal. Para calcular el IMC debemos usar la formula peso/(altura)2 , donde el peso es medido en kg y la altura en metros. Si solo sabemos el peso y la altura en libras y pies, entonces tendremos que convertirlos al sistema métrico (podríamos incluir estos cálculos dentro de nuestro sistema) www.s-ejecutive.com 25 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArsgs) Handles Button1.Click Dim height, weight, bmi As Single height = TextBox1.Text weight = TextBox2.Text bmi = (weight) / (height ^ 2) Label4.Text = bmi End Sub La salida es mostrada en el siguiente diagrama. En este ejemplo la altura es de 1.8 mts(alrededor de 5 pies 11 pulgadas). El peso es de 75 kg(alrededor de 168lb), y el IMC es de 23.14815. La lectura sugiere que la persona es saludable Del ejemplo anterior, podemos ver que las operaciones aritmeticas son relativamente faciles. Aquí hay muchos proyectos aritméticos que podemos intentar. Area of a triangle Area of a rectangle Area of a circle Volume of a cylinder Volume of a cone Volume of a sphere Compound interest Future value Mean Variance Sum of angles in polygons Conversion of lb to kg Conversion of Fahrenheit to Celsius www.s-ejecutive.com 26 8- MANIPULACION DE CADENAS La manipulación de cadenas es una parte importante de la programación porque ayuda a procesar datos que vienen en el formulario como nombre, dirección, genero, ciudad, titulo de libro y mas. 8.1. Manipulacion de cadenas usando + y & Las cadenas pueden ser manipuladas usando los signos & y +, ambos llevan a cabo la concatenación que significa combinar 2 o mas cadenas en una sola mas grande. Por ejemplo, podemos unir visual y basic en visualbasic usando “visual” & “basic” o” visual “+ “basic “como se muestra a continuación. Ejemplo 8.1 Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim text1, text2, text3 As String text1 = "Visual" text2 = "Basic" text3 = text1 + text2 Label1.Text = text3 End Sub End Class La linea text3=text1+text2 puede reemplazarse por text3=text1&text2 y produciría el mismo resultado. En caso de que los datos fueran de tipo numérico solo podríamos utilizar el signo & pues generarn diferente resultado. Ejemplo 8.2 Dim text1, text3 as string Dim Text2 As Integer text1 = "Visual" text2=22 text3=text1+text2 Label1.Text = text3 Este codigo produce un error porque los datos no coinciden. En caso de utilizar & en lugar de + estaría bien . Dim text1, text3 as string www.s-ejecutive.com 27 Dim Text2 As Integer text1 = "Visual" text2=22 text3=text1 & text2 Label1.Text = text3 Puedes combinar mas de 2 cadenas como en el ejemplo siguiente Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim text1, text2, text3, text4, text5, text6 As String text1 = "Welcome" text2 = " to" text3 = " Visual" text4 = " Basic" text5 = " 2010" text6 = text1 + text2 + text3+text4+text5 Label1.Text = text6 End Sub End Class 8.2 La function Right La función Right extrae una parte de una cadena desde la derecha, el formato es: Right(“cadena”,n) Donde n corresponde al numero de caracteres que se desean extraer.p.e. Right(“Ciudad de Mexico”,5) Daría como resultado exico. www.s-ejecutive.com 28 Sin embargo la sintaxis del lenguaje nos obliga a escribirlo en el siguiente formato Microsoft.VisualBasic.Right("Phrase",n) Ejemplo 8.3 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim text1 As String text1 = TextBox1.Text Label1.Text = Microsoft.VisualBasic.Right(text1, 4) End Sub El ejemplo anterior da como resultado los cuatro caracteres del contenido del textbox comenzando desde la derecha El motivo por el cual debe usarse la referencia completa es debido a que muchos objetos cuentan con la propiedad Right por lo que el lenguaje no podría indentificar a cual se refiere. 8.2 La función Left Ésta función trabaja de la misma forma que Right pero extrayendo caracteres desde la izquierda Microsoft.VisualBasic.Left("Cadena",n) Considerando el ejemplo anterior la sintaxis funcionaria asi: www.s-ejecutive.com 29 Microsoft.VisualBasic.Left ("Visual Basic", 4) = Visu . 8.2 Manipulación de cadenas usando funciones integradas Una función es similar a un procedimiento normal pero el principal propósito de una función es aceptar ciertas entradas y retornar un valor que se pase al programa principal para terminar la ejecución. 8.2. La función Len La función Length regresa un valor entero mismo que corresponde a la longitud de una cadena o una frase, incluyendo los espacios vacios. El formato es: Len(“Cadena”) Por ejemplo: Len (Visual Basic) = 12 and Len (welcome to VB tutorial) = 22 Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Label1.Text = Len(TextBox1.Text) End Sub End Class www.s-ejecutive.com 30 www.s-ejecutive.com 31 9- USANDO If....Then....Else Hasta ahora hemos aprendido como como programara codigo para aceptar informacion de los usuarios y mostrar un resultado sin controlar el flujo del programa. En este capitulo, aprederemos a escribir código que pueda tomar desiciones al procesar los datos de los usuarios, y y controlar el flujo del programa en el proceso. El proceso de tomar desiciones es una parte importante de la programación porque ayuda a resolver problemas inteligentemente de manera que provea salida de datos útil para el usuario. Por ejemplo podemos escribir un programa que pueda preguntar a la computadors para realizar varias tareas mientras se cumplan las condiciones o un programa que rechace valores no numéricos. En orden de llevar el control del flujo de programación y tomar desiciones, necesitamos usar operadores condicionales y operadores lógicos juntos con la estructura de control If. 9.1 Operadores condicionales Los operadores condicionales con herramientas muy poderosas. Estos operadores permiten a VB programar para comparar valores de datos y después decidir que acciones tomar, tales como ejecutar un programa o incluso finalizarlo entre muchas mas. Estos también son conocidos operadores de comparación numérica. Normalmente son usados para comparar 2 valores para ver si son iguales o si uno es mayor o menor que otro. La comparación retornará true o false según sea el caso. La siguiente tabla muestra los operadores condicionales. Tabla 9.1: Operadores Condicionales Operator Meaning = Igual a > Mayor que < Menor que >= Mayor o igual que <= Menor o igual que <> Diferente a 9.2 Operadores logicos Algunas veces podamos necesitar hacer mas de una comparación de tomar desiciones y realizar acciones. En este caso, usando operadores de comparación numérica solos no es suficiente, necesitamos usa operadores adicionales, y estos son los operadores lógicos. Estos operadores se muestran enseguida. Tabla 9.2 www.s-ejecutive.com 32 Operador And or Xor Not Significado Ambas condiciones deben ser true Al menos una condicion debe ser true Solo una condicion debe ser true Niega el true Normalmente los operadores son utilizados para comparar datos numéricos. De cualquier forma también podemos comparar cadenas de caracteres con estos operadores. La comparar cadenas hay algunas reglas que debemos toamr en cuenta. Las mayusculas con menores que las minúsculas, "A"<"B"<"C"<"D".......<"Z" y los numerosson menores que las letras. 9.3 If con operadores de comparación Para controlar efectivamente el flujo de programación. Debemos usar la estructura de control If junto a operadores lógicos y condicionales. Basicamente hay 3 tipos de estructuras de control If, If…. Then , else y If… then…elseIf. 9.3 El estado If Este es el estado mas simple de la estructura If ya que pide a la computadora que desarrolle ciertas acciones especificadas por expresiones si la condición se cumple. Mientras que si no se cumple la condición ninguna acción se llevará a cabo. El formato general de If es el siguiente If condicion Then Expresion End If Ejemplo 9.1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim myNumber As Integer myNumber = TextBox1.Text If myNumber > 100 Then Label2.Text = " Has ganado el premio mayor " End If End Sub Al ejecutar el programa e ingresar un numero mayor a 100, veremos “Has ganado el premio mayor”. Por otro lado, si el numero es menor o igual a 100 no veremos nada. 9.3 If Then else Al usar If… then en la programación no son muy utiles y no proveen muchas opciones a los usuarios. Para brindar opciones, podemos usar If…Then..else. esta estructura de control pide al computador que realice ciertas acciones especificadas en expresiones si la condicion es verdadera. Si la condición no se cumple, se pueden ejecutar expresiones declaradas en el estado Else. El formato es: www.s-ejecutive.com 33 If condicion Then expresion Else expresion End If Ejemplo 9.2 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim myNumber As Integer myNumber = TextBox1.Text If myNumber > 100 Then Label2.Text = " Felicidades has ganado el premio mayor " Else Label2.Text = " Disculpa, pero no ganaste " End If End Sub Cuando ingresemos un valor mayor de 100 se mostrará la leyenda “Felicidades has ganado el premio mayor” y si no se cumple la condición se mostrará la leyenda “Disculpa, pero no ganaste” ejemplo 9.3 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim myNumber, MyAge As Integer myNumber = TextBox1.Text MyAge = TextBox2.Text If myNumber > 100 And myAge > 60 Then Label2.Text = " Felicidades has ganado el premio mayor " Else Label2.Text = " Disculpa, pero no ganaste " End If End Sub Este programa usa operadores logicos entrre las condiciones. Esto significa que amabs condiciones deben cumplirse para que se cumpla la condición. 9.3 Estado If....Then...ElseIf si hay mas de 2 opciones, podemos usar if…then…elseif… de manera que tengamos mas opciones.el formato es: If condition Then VB expression www.s-ejecutive.com 34 ElseIf condition Then VB expression ElseIf condition Then VB expression . . Else VB expression End If Ejemplo 9.4 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim Mark As Integer Dim Grade as String Mark = TextBox1.Text If myNumber >=80 Then Grade="A" ElseIf Mark>=60 and Mark<80 then Grade="B" ElseIf Mark>=40 and Mark<60 then Grade="C" Else Grade="D" End If End Sub www.s-ejecutive.com 35 10- USANDO SELECT CASE Otra estructura de control es Select case que difiere del If por la manera en que trabaja. La diferencia es que Select case básicamente solo evalua un objeto en una expresión de una dimensión. Mientras que if …. Else if puede manejar multiples condiciones y de varias dimensiones. Select case es utilizado cuando existen multiples condiciones dado que ocupa mucho menos código que If…else if. 10.1 La estructura de Select case El formato de esta estructura es el siguiente.Select Case test expression Case expression list 1 Block of one or more VB statements Case expression list 2 Block of one or more VB Statements Case expression list 3 Block of one or more VB statements Case expression list 4 . Case Else Block of one or more VB Statements End Select 10.1 Uso de Select Case Ejemplo 10.1 ' Examinación de grados Dim grade As String Private Sub Compute_Click( ) grade=txtgrade.Text Select Case grade Case "A" Label1.Text="High Distinction" Case "A-" www.s-ejecutive.com 36 Label1.Text="Distinction" Case "B" Label1.Text="Credit" Case "C" Label1.Text="Pass" Case Else Label1.Text="Fail" End Select Ejemplo 10.2 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 'Examinacion de calificaciones Dim mark As Single mark = mrk.Text Select Case mark Case Is >= 85 Label1.Text= "Excellence" Case Is >= 70 Label2.Text= "Good" Case Is >= 60 Label3.Text = "Above Average" Case Is >= 50 Label4.Text= "Average" Case Else Label5.Text = "Need to work harder" End Select End Sub Ejemplo 10.3 El Ejemplo 10.2 puede reescribirse de la sig. manera: Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 'Examinacion de calificaciones Dim mark As Single www.s-ejecutive.com 37 mark = Textbox1.Text Select Case mark Case 0 to 49 Label1.Text = "Need to work harder" Case 50 to 59 Label1.Text = "Average" s Case 60 to 69 Label1.Text= "Above Average" Case 70 to 84 Label1.Text = "Good" Case 85 to 100 Label1.Text= "Excellence" Case Else Label1.Text= "Wrong entry, please reenter the mark" End Select End Sub Ejemplo 10.4 Los gfrados en preparatoria son presentados usualmente mostradas con la letras en mayúsculas tales como A,B,C,D o E, en el ejemplo podemos ver como seria un código para este proceso. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventA rgs) HandlesButton1.Click 'Examination Marks Dim mark As Single mark = TextBox1.Text Select Case mark Case 0 To 49 Label1.Text = "E" Case 50 To 59 Label1.Text = "D" Case 60 To 69 Label1.Text = "C" Case 70 To 79 Label1.Text = "B" Case 80 To 100 Label1.Text = "A" Case Else Label1.Text = "Error, please reenter the mark" End Select www.s-ejecutive.com 38 End Sub Resultado del Ejemplo 10.4 www.s-ejecutive.com 39 11- LOOPING VB 2010 permite que un proceso sea repetido cuanta veces sea necesario y tanto el procesador como la memoria lo permitan. A este proceso se le llama looping (bucles). El looping se realice cuando necesitamos repetir un proceso varias veces mientras se cumpla una condición. Por ejemplo podemos diseñar un programa que sume una serie de numeros mientras la cantidad no exceda cierta cantidad, o un programa que solicite al usuario que introduzca datos repetidamente hasta que el usuario teclee la palabra finish. En vb2010, tenemos 3 tipos de bucles, son For…Next, Do… y While…End while. 11.1 For….Next La sintaxis es: For contador sentencias = valor inicial to valor final(valor incremento) Next En algunos ocasiones es necesario salir del bucle sin que se cumpla el ciclo completo, el comando para hacerlo es Exit for. Es muy usual agregar Exit for dentro de un If para determinar si es necesario salir del bucle. Ejemplo 11.1 (a) Dim counter as Integer For counter=1 to 10 ListBox1.Items.Add (counter) Next * El programa inserta numerous del 1 al 10 en un listbox. Ejemplo 11.1 (b) Dim counter , sum As Integer For counter=1 to 100 step 10 sum+=counter ListBox1.Items.Add (sum) Next * El programa calcula la suma de los numeros como se muestra enseguida: sum=0+10+20+30+40+...... Ejemplo 11.1(c) www.s-ejecutive.com 40 Dim counter, sum As Integer sum = 1000 For counter = 100 To 5 Step -5 sum - = counter ListBox1.Items.Add(sum) Next *Nota.- El incremento puede ser negative. El programa procesará una resta como la siguiente. 1000-100-95-90-.......... Ejemplo 11.1 (d) Dim n as Integer For n=1 to 10 If n>6 then Exit For End If Else ListBox1.Items.Add ( n) Next End If Next El proceso tarminará cuando n sea mayor que 6 11.2. Do El formato de Do es: a) Do While condición sentencias Loop b) Do www.s-ejecutive.com 41 sentencias Loop While condition c) Do Until condición sentencias Loop d) Do sentencias Loop Until condición * Salir del bucle Al igual que for a veces es necesario salir del bucle de manera anticipada, el comando usado es Exit Do. Ejeplo 11.2(a) Do while counter <=1000 TextBox1.Text=counter counter +=1 Loop * este código incrementará la counter en 1 mientras sea menor de 1000. Otra forma sería como esta: Do TextBox1.Text=counter counter+=1 Loop until counter>1000 Ejemplo 11.2(b) Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim sum, n As Integer www.s-ejecutive.com 42 ListBox1.Items.Add("n" & vbTab & "Sum") ListBox1.Items.Add("----------------------") Do n += 1 sum += n ListBox1.Items.Add(n & vbTab & sum) If n = 100 Then Exit Do End If Loop End Sub En este ejemplo encontramos una suma 1+2+3+4+......+100. En Diseño , necesitamos agregar un listbox al formulario para mostrar la salida. El programa usa el método Add para llenar el listbox.La sentencia ListBox1.Items.Add("n" & vbTab & "sum")mostrará los encabezados en el listbox, donde se utiliza vbTab para poner espacios entre el encabezado n y la suma. ListBox1.Items.Add(n & vbTab & sum) enlistará los numerous n y el valor de la suma. www.s-ejecutive.com 43 11.3 While….End while La estructura While es muy similar a Do… While condición sentencias End white En este caso si la condición se cumple se llevarán a cabo las sentencias designadas, el bucle terminará cuando la condición se cumpla . Ejemplo11.3 Dim sum, n As Integer Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim sum, n As Integer While n <> 100 n += 1 sum = sum + n ListBox1.Items.Add(n & vbTab & sum) End While End Sub www.s-ejecutive.com 44 12- FUNCIONES Una función se similar a un proceso normal pero con el propósito de aceptar ciertos parámetros y regresar un resultado para finalizar la ejecución. Hay 2 tipos de funciones, las incorporadas del lenguaje y las creadas por el programador. El formato general para crear funciones es: FunctionName (parametros) Los parámetros con valores pasados al interior de la función. Podremos ver 2 funciones incorporadas del lenguaje muy utiles, el MSGBOX y el INPUTBOX. 12.1 Msgbox() El objetivo de los msgbox es mostrar un cuadro de dialogo para mostrar al usuario mensajes para que no siga el programa hasta que den click en el botón aceptar. yourMsg=MsgBox(Mensaje, estilo, titulo) El primer argumento Mensaje muestra el mensaje en el centro del cuadro de dialogo. El estilo determina que tipo de botones de comando se muestra el cuadro de dialogo, en la tabla 12.1 se muestran los posibles valores de este parámetro. El titulo muestra el titulo del cuadro. Tabla 12.1 Estilo Named Constant Buttons Displayed 0 vbOkOnly Ok button 1 vbOkCancel Ok and Cancel buttons 2 vbAbortRetryIgnore Abort, Retry and Ignore buttons. 3 vbYesNoCancel Yes, No and Cancel buttons 4 vbYesNo Yes and No buttons 5 vbRetryCancel Retry and Cancel buttons Style Value Podemos usar constante en lugar de enteros para el segundo parámetro, tal como poner vbOkOnly en lugar de 0. Ejemplo.yourMsg=MsgBox( "Click OK to Proceed", 1, "Startup Menu") y yourMsg=Msg("Click OK to Proceed". vbOkCancel,"Startup Menu") son lo mismo www.s-ejecutive.com 45 your Msg es una variable que almacena el resultado de la function Msgbox. El valor depende del tipo de botones usados por los usuarios. Estos tienen que ser declarados como enteros, la tabla 12.2 muestra los valores a las constantes correspondientes. Tabla 12.2 Valores retornados por los botones de comando Named Constant Button Clicked 1 vbOk Ok button 2 vbCancel Cancel button 3 vbAbort Abort button 4 vbRetry Retry button 5 vbIgnore Ignore button 6 vbYes Yes button 7 vbNo No button Value Ejemplo 12.1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim testmsg As Integer testmsg = MsgBox("Click to test", 1, "Test message") If testmsg = 1 Then MessageBox.Show("You have clicked the OK button") Else MessageBox.Show("You have clicked the Cancel button") End If End Sub www.s-ejecutive.com 46 Para mostrar los cuadros de dialogo de manera mas sofisticada, podemos agregar un icono que preceda el mensaje. Existen varios tipos de iconos disponibles como se muestran en la tabla 12.3 Tabla 12.3 Msgbos con iconos Value Named Constant 16 vbCritical 32 vbQuestion 48 vbExclamation 64 vbInformation Icon Ejemplo 12.2 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim testMsg As Integer testMsg = MsgBox("Click to Test", vbYesNoCancel + vbExclamation, "Test Message") If testMsg = 6 Then MessageBox.Show("You have clicked the yes button") ElseIf testMsg = 7 Then MessageBox.Show("You have clicked the NO button") Else MessageBox.Show("You have clicked the Cancel button") End If End Sub El primer argumento , mensaje mostrará el sig. Cuadro.- www.s-ejecutive.com 47 12.2 INPUTBOX Un Inputbox muestra al usuario un cuadro de dialogo en el que el usuario puede introducir datos. myMessage=InputBox(Prompt, Title, default_text, x-position, y-position) myMessage es tipo variant pero tipicamente declarado como string, el cual acepta el mensaje ingresado por el usuario. Enseguida se definen los parámetros: Prompt - El mensaje se mostrará como una pregunta. Title - el titulo del Input Box. default-text - el texto que se muestra de manera predeterminada en el campo de texto x-position y y-position –la posición o las coordenadas del input box. Microsoft.VisualBasic.InputBox(Prompt, Title, default_text, x-position, y-position) Ejemplo 12.3 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim userMsg As String userMsg = Microsoft.VisualBasic.InputBox("What is your message?", "Message Entry Form", "Enter your messge here", 500, 700) If userMsg <> "" Then MessageBox.Show(userMsg) Else MessageBox.Show("No Message") End If End Sub El inputbox aparece como en el siguiente ejemplo www.s-ejecutive.com 48 13- FUNCIONES II En esta lección veremos algunas funciones adicionales a las ya vistas. 13.1 Función Mid La función Mid es usada para extraer parte de una cadena tal como el formato lo indica.Mid(oración,posición,n) Donde: oración es la cadena de la cual se extrae parte del texto. Posición Es la posición inicial del texto que se extraerá de la cadena. n es el numero de caracteres que serán extraidos de la cadenas. Ejemplo 13.1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim myPhrase As String myPhrase = Microsoft.VisualBasic.InputBox("Enter your phrase") Label1.Text = Mid(myPhrase, 2, 6) End Sub En el ejemplo cuando el usuario da click en el boton de commando, se muestra un inputbox pidiendo al usuario que ingrese una frase. Despues de ingresar una frase y se presiona el botón Aceptar, la etiqueta mostrará el texto extraido comenzando en la posición 2 y extrayendo 6 caracteres de modo que de el sig. Resultado. www.s-ejecutive.com 49 13.2 Función Right La función right extrae n numero de caracteres de una cadena tomando como inicio el extremo derecho de la cadena. Microsoft.Visualbasic.Right ("cadena", n) Donde n equivale al numero de caracteres a extraer y cadena la cadena de la cual extraeremos los caracteres. Microsoft.Visualbasic.Right ("Visual Basic", 4) = asic Ejemplo 13.2 el siguiente codigo extrae los ultimos 4 caracteres de cuqluier frase ingresada. Private Sub Button1_Click (ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim myword As String www.s-ejecutive.com 50 myword = TextBox1.Text Label1.Text = Microsoft.VisualBasic.Right (myword, 4) End Sub 13.3 Función Left Al igual que la función Right extrae parte de la cadena solo que en esta ocasión toma como referencia el extremo izquierdo. Microsoft.Visualbasic.Right ("cadena", n) Microsoft.Visualbasic.Left("Visual Basic", 4) = asic Ejemplo 13.3 Private Sub Button1_Click (ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim myword As String myword = TextBox1.Text Label1.Text = Microsoft.VisualBasic.Left (myword, 4) End Sub 13.4 Función Trim La función Trim quita los espacios en blanco al inicio y al final de una cadena Trim("Phrase") www.s-ejecutive.com 51 p.e. Trim (" Visual Basic ") = Visual basic Ejemplo 13.4 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim myPhrase As String myPhrase = Microsoft.VisualBasic.InputBox("Enter your phrase") Label1.Text = Trim(myPhrase) End Sub 13.5 Función Ltrim La function ltrim quita los espacios en blanco al inicio de una cadena Ltrim("Phrase") .p.e. : Ltrim (" Visual Basic")= Visual basic 13.6 Función Rtrim La function ltrim quita los espacios en blanco al final de una cadena Rtrim("Phrase") .p.e. : Rtrim ("Visual Basic ")= Visual basic www.s-ejecutive.com 52 13.7 Función InStr La function InStr busca una subcadena, dentro de otra cadena y devuelve un entero con la posición inicial de la subcadena dentro de la cadena. Instr (n, cadena original,cadena a buscar) Donde n es la posición en donde la función comenzará a buscar, cadena original es la cadena en la que realizará la búsqueda y cadena a buscar es la cadena que buscará. Instr(1, "Visual Basic","Basic")=8 Podemos escribir código como el siguiente: Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Label1.Text = InStr(1, "Visual Basic", "Basic") End Sub 13.8 Funciones UCase y LCase La función Ucase convierte una cadena a mayúsculas mientras LCase la convierte en minúsculas Microsoft.VisualBasic.UCase(cadena) Microsoft.VisualBasic.LCase(cadena) p.e. Microsoft.VisualBasic.Ucase("Visual Basic") =VISUAL BASIC Microsoft.VisualBasic.Lcase("Visual Basic") =visual basic 13.9 funciones Chr y Asc www.s-ejecutive.com 53 La función Chr regresa una cadena que corresponde al código ASCII mientras que la función Asc convierte el carácter ASCII al código ASCII correspondiente Chr(charcode) Y el format para la function Asc es Asc(Character) Ejemplos: Chr(65)=A, Chr(122)=z, Chr(37)=% , Asc("B")=66, Asc("&")=38 www.s-ejecutive.com 54 14-FUNCIONES III (Math) Dentro de los cálculos matemáticos es importante conocer las funciones matematicas que VB nos brinda. 14.1 Función Abs La función Abs regresa el valor absolute de un numero especifico. Sintaxis Math. Abs (numero) * La palabra Mathindica que la función Abs pertenece a la clase Math. 14.2 funcion Exp La function Exp de un numero esel exponent de n a la x potencia. x e . p.e., Exp(1)=e=2.71828182 Sintaxis Math.Exp (numero) Ejemplo: Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim num1, num2 As Single num1 = TextBox1.Text num2 = Math.Exp(num1) Label1.Text = num2 End Sub . www.s-ejecutive.com 55 14.3 Función Fix La function Fix trunca la parte decimal de un numero y regresa el entero inferior siguiente de éste. Cuando el numero es negative, retornará el valor entero más proximo .p.e. , Fix(9.2)=9 Fix(-9.4)=-9 Ejemplo: Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim num1, num2 As Single num1 = TextBox1.Text num2 = Fix(num1) Label1.Text = num2 End Sub 14.4 función Int La función Int convierte a entero cualquier numero cortando los decimales.p.e. Int(2.4)=2, Int(6.9)=6 , Int(-5.7)=-6, Int(-99.8)=-100 14.5 función Log La función Log regresa el logaritmo natural de un numero. P.e. , Log(10)=2.302585 Ejemplo: Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim num1, num2 As Single num1 = TextBox1.Text num2 = Math.Log(num1) Label1.Text = num2 www.s-ejecutive.com 56 End Sub 14.6 Función Rnd( ) La function Rnd es una function muy util cuando necesitamos realizar cambios arbitrarios de valores sin necesidad de llevar un orden. la function Rnd regresa un valor aleatorio entre 0 y 1. Los numero aleatorios no son muy utiles hasta que los convertimos a enteros.p.e. ,si necesitamos obtener la salida aleatoria de 6 numeros enteros con un rango de 1 a 6 , podemos usar una formula que después de obtener valores aleatorios decimales los convierta a aleatorios enteros. Int(Rnd*6)+1. Ejemplo: Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim num as integer Randomize( ) Num=Int(Rnd()*6)+1 Label1.Text=Num End Sub En este ejemplo la function Int(Rnd*6) generará un valor entero entre 0 y 5 debido a que la function Int trunca la parte decimal del numero aleatorio convertido a entero. Despues suma 1, obtendremos un valor aleatorio entre 1 y 6 cada vez que se de click en el botón. P.e. digamos que un nue¿mero aleatorio como .98, despues de multiplicarlo por 6, se convertiría en 5.88, utilizando la función Int(5.88) convertirá el valor a 5 y después al sumar 1 se convertirá en 6. 14.7 función Round La function Round es la function que nos permite redondear un numero a x numero de decimales. El Formato es Round (n, m) el cual redondea el numero n a m numero de decimales. P.e., Math.Round (7.2567, 2) =7.26 www.s-ejecutive.com 57 Ejemplo Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim num1, num2 As Single num1 = TextBox1.Text num2 = Math.Round(num1, 2) Label1.Text = num2 End Sub www.s-ejecutive.com 58 15- FUNCION FORMAT La función format es una función muy poderosas ya que nos permite mostrar valores numéricos en diversas formas. Format (n, "style argument") Donde n es un numero y el segundo argumento determina el estilo, acorde a la siguiente tabla. Tabla 15.1 Lista de parámetros de estilo Style Explicación Ejemplo General Permite mostrar un numero Format(8972.234, "General Number sin separación entre millares Number")=8972.234 Fixed Muestra 2 unidades decimals Format(8972.2, "Fixed")=8972.23 argument y quita los separadores de millares Standard Muestra un numero con Format(6648972.265, "Standard")= separador de millares y 2 6,648,972.27 puestos decimales Currency Muestra el numero con signo Format(6648972.265, "Currency")= de moneda al inicio del $6,648,972.27 numero, muestra separadores de millares y 2 unidades decimales Percent Convierte el numero a forma Format(0.56324, "Percent")=56.32 % porcentual aparte de poner el signo % y redondearlo a 2 decimales. Ejemplo 15.1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button5.Click, Button4.Click, Button3.Click Label1.Text = Format(8972.234, "General Number") Label2.Text = Format(8972.2, "Fixed") www.s-ejecutive.com 59 Label3.Text = Format(6648972.265, "Standard") Label4.Text = Format(6648972.265, "Currency") Label5.Text = Format(0.56324, "Percent") End Sub Resultado: . Format (n, "user's format") Tambien conocida como function definida por el usuario, necesitamos definer algunos estilos de format- en la siguiente lista se enlistan algunos ejemplos. Tabla 15.2: formatos definidos por el usuario Example Explanation Output Format(781234.57,"0") Redondea el numero complete sin 781235 separadores entre millares. Format(781234.57,"0.0") Redondea a un lugar decimal sin 781234.6 separadores de . Format(781234.576,"0.00") Redonde a 2 decimales sin separadores 781234.58 de millares. Format(781234.576,"#,##0.00") Redondea a 2 decimales con www.s-ejecutive.com 781,234.58 60 separadores de . Format(781234.576,"$#,##0.00") Muestra el signo de moneda y redondea $781,234.58 a 2 decimales con separadores de millares. Format(0.576,"0%") Convierte a forma de porcentaje sin 58% decimales. Format(0.5768,"0.00%") Convierte a forma porcentual con 2 57.68% decimales. Ejemplo 15.2 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button5.Click, Button4.Click, Button3.Click Label1.Text = Format(8972.234, "0.0") Label2.Text = Format(8972.2345, "0.00") Label3.Text = Format(6648972.265, "#,##0.00") Label4.Text = Format(6648972.265, "$#,##0.00") Label5.Text = Format(0.56324, "0%") End Sub Resultado: <= www.s-ejecutive.com 61 16- FUNCIONES IV: FORMATO DE FECHA Y HORA Las FECHAS Y HORAS pueden ser formateadas usando formatos predefinidos asi como con formatos definidos por el usuario. Table 16.1 Predefined formats of date and time Format Explanation Format (Now, "General date") Formats the current date and time. Format (Now, "Long Date") Displays the current date in long format. Format (Now, "Short date") Displays current date in short format Format (Now, "Long Time") Display the current time in long format. Format (Now, "Short Time") Display the current time in short format. Ejemplo 16.1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Label1.Text = Format(Now, "General Date") Label2.Text = Format(Now, "Long Date") Label3.Text = Format(Now, "short Date") Label4.Text = Format(Now, "Long Time") Label5.Text = Format(Now, "Short Time") End Sub www.s-ejecutive.com 62 16.2 Formatenado fehcas y horas con formatos definidos por el usuario Format (expresion ,estilo) Table 16.2 Some of the user-defined format functions for date and time Format Definición Format (Now, "M") Muestra el mes y el dia Format (Now, "MM") Muestra el mes actual con 2 digitos Format (Now, "MMM") Muestra el nombre abreviado del mes Format (Now, "MMMM") Muestra el nombre complete del mes Format (Now, "dd/MM/yyyy") Muestra la fecha actualen el formato dia/mes/año. Muestra la fecha en el format Mes, Dia, Año Format (Now, "MMM,d,yyyy") Format (Now, "h:mm:ss tt") Format (Now, "MM/dd/yyyy Muestra la hora actual en hora::minutos:segundos asi como am/pm según corresponda. Muestra la fecha y hora actual en el formato hora:minutos:segundos h:mm:ss") Ejemplo 16.2 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click, Button3.Click Label1.Text = Format(Now, "M") Label2.Text = Format(Now, "MM") Label3.Text = Format(Now, "MMM") Label4.Text = Format(Now, "MMMM") Label5.Text = Format(Now, "dd/MM/yyyy") Label6.Text = Format(Now, "MMM,d,yyyy") Label7.Text = Format(Now, "h:mm:ss tt") Label8.Text = Format(Now, "MM/dd/yyyy h:mm:ss tt") End Sub www.s-ejecutive.com 63 www.s-ejecutive.com 64 17- CHECK BOX Los Check box son controles muy usados. Permiten que el usuario seleccione uno o mas elementos dando click en las casillas. P.e., en el cuadro de dialogo de fuente de cualquier editor de texto de Microsoft tal como FrontPage,hay muchas casillas(checkbox) debajo de efectos tales como los mostrados en el siguiente cuadro. El usuario puede elegir subrayado, subindice, minusculas, superíndice entre muchas mas. En Visual Basic, podriamos crear un carro de compras donde el usuario pueda dar click en las casillas que correspondan a los elementos que quiera comprar,y el total podria procesarse tal como en el ejemplo 17.1 se muestra. Ejemplo 17.1:Shopping CartE www.s-ejecutive.com 65 Codigo del carro de compras: Private Sub BtnCalculate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnCalculate.Click Const LX As Integer = 100 Const BN As Integer = 500 Const SD As Integer = 200 Const HD As Integer = 80 Const HM As Integer = 300 Const AM As Integer = 150 Dim sum As Integer If CheckBox1.Checked = True Then sum += LX End If If CheckBox2.Checked = True Then sum += BN End If If CheckBox3.Checked = True Then sum += SD www.s-ejecutive.com 66 End If If CheckBox4.Checked = True Then sum += HD End If If CheckBox5.Checked = True Then sum += HM End If If CheckBox6.Checked = True Then sum += AM End If Label5.Text = sum.ToString("c") Ejemplo 17.2 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Const large As Integer = 10.0 Const medium As Integer = 8 Const small As Integer = 5 Dim sum As Integer If CheckBox1.Checked = True Then sum += large End If If CheckBox2.Checked = True Then sum += medium End If If CheckBox3.Checked = True Then sum += small End If Label5.Text = sum.ToString("c") www.s-ejecutive.com 67 Ejemplo 17.3 En este ejemplo el usuario puede introducer texto en cuadros de texto y darle formato a la fuente usando 3 casillas que representan bold, italic y underline. Aqui el codigo: Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged If CheckBox1.Checked Then TextBox1.Font = New Font(TextBox1.Font, TextBox1.Font.Style Or FontStyle.Bold) Else TextBox1.Font = New Font(TextBox1.Font, TextBox1.Font.Style And Not FontStyle.Bold) End If End Sub Private Sub CheckBox2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox2.CheckedChanged If CheckBox2.Checked Then TextBox1.Font = New Font(TextBox1.Font, TextBox1.Font.Style Or FontStyle.Italic) Else TextBox1.Font = New Font(TextBox1.Font, TextBox1.Font.Style And Not FontStyle.Italic) End If End Sub Private Sub CheckBox3_CheckedChanged(ByVal sender As System.Object, ByVal e As www.s-ejecutive.com 68 System.EventArgs) Handles CheckBox3.CheckedChanged If CheckBox2.Checked Then TextBox1.Font = New Font(TextBox1.Font, TextBox1.Font.Style Or FontStyle.Underline) Else TextBox1.Font = New Font(TextBox1.Font, TextBox1.Font.Style And Not FontStyle.Underline) End If End Sub TextBox1.Font = New Font(TextBox1.Font, TextBox1.Font.Style Or FontStyle.Italic) Contiene el tipo de fuente original y lo cambia a italic. TextBox1.Font = New Font(TextBox1.Font, TextBox1.Font.Style And Not FontStyle.Italic) Tambien contiene el tipo original de fuente pero lo cambia a regular) www.s-ejecutive.com 69 18- RADIOBUTTON los botones de radio son también muy utiles. A diferencia de los checkbox estos botones solo permiten tener una opción activa, Aquí un ejemplo que permite al usuario seleccionar un color solamente. Ejemplo 18.1 Código: Dim strColor As String Private Sub RadioButton8_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton8.CheckedChanged strColor = "Red" End Sub Private Sub RadioButton7_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton7.CheckedChanged strColor = "Green" End Sub Private Sub RadioYellow_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioYellow.CheckedChanged strColor = "Yellow" End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Label2.Text = strColor End Sub www.s-ejecutive.com 70 Es importante tener en mente que sin importar cuantos radiobutton haya en el formulario solo uno de ellos podrá estar activo, para poder tener varias opciones de diferentes tipos debemos contenerlas dentro de los controles llamados GroupBox tal como se muestra en el siguiente cuadro. Ejemplo 18.2 Código: Dim strColor As String Dim strSize As String Private Sub RadioButton8_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton8.CheckedChanged strColor = "Red" End Sub Private Sub RadioButton7_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton7.CheckedChanged strColor = "Green" End Sub Private Sub RadioYellow_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioYellow.CheckedChanged strColor = "Yellow" End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Label2.Text = strColor Label4.Text = strSize End Sub www.s-ejecutive.com 71 Private Sub RadioXL_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioXL.CheckedChanged strSize = "XL" End Sub Private Sub RadioL_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioL.CheckedChanged strSize = "L" End Sub Private Sub RadioM_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioM.CheckedChanged strSize = "M" End Sub Private Sub RadioS_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioS.CheckedChanged strSize = "S" End Sub www.s-ejecutive.com 72 19- CREACIÓN DE UN NAVEGADOR SENCILLO Basicamente a todos nos gusta navegar en internet utilizando navegadores creados por diferentes compañiastales como el Internet Explorer o Mozilla Firefox o Google Chrome entre otros. De cualquier forma si nos damos a la tarea de crear nuestro propio navegador, lo podemos realziar totalmente a nuestro gusto sin tener que usar un programa creado al gusto de alguien mas. En este capitulo crearemos un navegador sencillo en muy poco tiempoAntes que nada, debemos crear un Nuevo proyecto y lo nombraremos como navegadorpropio, cambiaremos el nombre del formulario a mi navegador y el texto a Mi Navegador, ahora cambiaremos el tamaño a 1024 x 768. Enseguida necesitamos agregar una maquina que permita conectar nuestro navegador a internet, a este control se le conoce como WebBrowser control ubicado en el cuadro de herramientas de la izquierda. Pondremos como tamaño 1000 x 700, ahora arrastraremos un textbox y lo colocaremos en la parte superior del navegador, este funcionará como barra de direcciones de manera que ingresemos ahí la URL del sitio al que queremos navegar. Finalmente ubicaremos un botón y una etiqueta como en el ejemplo tal como se muesra en la sig.imagen. El codigo para el navegador es considerablemente simple, consiste en una sola línea de código. Damos doble click en el boton e ingresamos el siguiente código: www.s-ejecutive.com 73 Public Class Form1 Private Sub Go_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handl es Button1.Click MyWebBrowser.Navigate(TextBox1.Text) End Sub End Class Ahoa corremos el programa, escribimos cualquier dirección y presionamos el boton. www.s-ejecutive.com 74 20-MANEJO DE ERRORES 20.1 INTRODUCCIÓN El manejo de errors es un procedimiento esencial debido a que nos puede ayudar a hacer un programa libre de errores. Un programa libre de errores puede correr eficientemente, y el usuario no tiene porque afrontar errores como que se cierren los programas. Los errores pueden ocurrir cuando el usuario ingrese información. P.e. suele suceder que por equivocación los usuarios llegarán a introducir texto donde el campo solo debe admitir números tales como el peso de una persona, la computadora no será capaz de procesar el calculo matematico por lo que el programa sufrirá un error. Estos errores son conocidos como errores sincronos , Por lo tanto un buen programador debe estar mas alerta de las partes de programación que pudieran repercutir en un error y para eso es necesario que se escriba mas código capaz de preveer este tipo de errores para ayudar al usuario. Contemplar el manejo de errores debe considerarse una buena practica, aun cuando pueda llevarnos mas tiempo al programar. VB ha incorporado manejo de errores. P.e. cuando un usuario intente divider un numero entre cero, vb no mostrará ningún mensaje de error sin embargo muestra como resultado “infinito” aun cuando esto es incorrecto puesto que debería mostrar indefinido. 20.2 Usando On Error GoTo Sinntaxis Visual Basic 2010 soporta la estructura On Error GoTo program_label . On Error GoTo program_label Donde program_label es la sección de codigo que esta diseñada por el programador para el manejo de errors cometidos por el usuario. Una vez que se detecte un error, el programa saltará a la sección de program_label para manejar el error. Ejemplo 20.1: Division entre cero En este ejemplo, trataremos con el error al ingresar un valor no-numérico dentro de un campo de www.s-ejecutive.com 75 texto que se supone solo contendrá valores numericos. El program_label aqui es error_hanldler. Cuando el usuario introduzca un valor no numeric dentro del campo de texto,el mensaje de error mostrará el texto "una de las entradas no es un numero! Intentelo nuevamente!". Is ningun error ocurre, mostrará la respuesta correcta. The Code Public Class Form1 Private Sub CmdCalculate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CmdCalculate.Click Lbl_ErrorMsg.Visible = False Dim firstNum, secondNum As Double On Error GoTo error_handler firstNum = Txt_FirstNumber.Text secondNum = Txt_SecondNumber.Text Lbl_Answer.Text = firstNum / secondNum Exit Sub 'To prevent error handling even the inputs are valid error_handler: Lbl_Answer.Text = "Error" Lbl_ErrorMsg.Visible = True Lbl_ErrorMsg.Text = " Una de las entradas no es un numero! Intentelo nuevamente!". www.s-ejecutive.com 76 End Sub End Class The Output 20.3 Manejo de Errores usando Try.....Catch....End Try La estructura Try...Catch...End Try puede manejar varios tipos de errors.. sintaxis Try sentencias Catch exception_variable as Exception Sentencias a manejar con las excepciones www.s-ejecutive.com 77 End Try Ejemplo 20.2 Esta es una modificacion del ejemplo 20.1. en lugar de usar On Error GoTo, utilizamos el metodo Try...Catch...End Try . En este ejemplo,el estado Catch captara la excepcióncuando el usuario ingrese un valor no numeric y regresará un mensaje de error. Si no hay excepción , no habrá ninguna acción para el estado Catch y el program regresará la respuesta correcta. Codigo Public Class Form1 Private Sub CmdCalculate_Click(ByVal sender As System.Object, ByVal eAs System.EventArgs) Handles CmdCalculate.Click Lbl_ErrorMsg.Visible = False Dim firstNum, secondNum, answer As Double Try firstNum = Txt_FirstNumber.Text secondNum = Txt_SecondNumber.Text answer = firstNum / secondNum Lbl_Answer.Text = answer Catch ex As Exception Lbl_Answer.Text = "Error" Lbl_ErrorMsg.Visible = True Lbl_ErrorMsg.Text = " una de las entradas no es un numero! Intentelo nuevamente!". End Try End Sub www.s-ejecutive.com 78 End Class Resultado he www.s-ejecutive.com 79 21- MANEJO DE GRÁFICOS 1 CONCEPTOS BÁSICOS 21.1 Introducción Desde que Visual Basic evoluciono a visual net , los controles de ofrma ya no se incuyen. Ahora es cuestión de los programadores escribir el código para crear varias formas y dibujos. Aun sin los controles de dibujo, las opciones para el programador son bastantes de manera que pueda crear sus formas totalmente personalizadas. Vb2010 ofrece varias cpacidades graficas que permiten al programador escribir código que pueda dibujar todo tipo de formas incuyendo fuentes. En esta lección aprenderemos a escribir código para dibujar líneas y formas en la interfaz de visual basic. 21.2 Creación de objetos gráficos Antes de poder dibujar cualquier figura, necesitamos crear objetos gráficos. Un objeto gráfico es creado usando el método CreateGraphics(). Podemos crear objetos gráficos que puedan inserter en el formulario controles o a si mismo. P.e. si deseamos dibujar en el formulario podemos usar el sig. Código. Dim myGraphics As Graphics =me.CreateGraphics Siempre debemos usar me en lugar de form1 ya que vb2010 no permite otra forma de llamar al formulario. O si lo que deseamos es dibujar sobre un Picturebox podemos utilizar el sig. código: Dim myGraphics As Graphics = PictureBox1.CreateGraphics Tambien podemos usar un textbox como superficie para dibujar. Dim myGraphics As Graphics = TextBox1.CreateGraphics El objeto gráfico que se crea no dibuja nada en pantalla hasta que llamemos los metodos del objeto. Adicionalmente necesitamos crear un objeto Pen como herramienta de dibujo. 21.3 Creación de un obveto Pen Un objeto Pen(pluma) puede crearse usando este código.myPen = New Pen(Brushes.DarkMagenta, 10) donde myPen es una variable Pen. Podemos usar cualquier nombre de variable como myPen. El primer parámetro define el color de la línea y el segundo indica el grosor de la línea. Podemos crea una pluma también con este código: Dim myPen As Pen www.s-ejecutive.com 80 myPen = New Pen(Drawing.Color.Blue, 5) habiendo creado la pluma y el gráfico, estamos listos para dibujar graficos en pantalla. 21.3 Dibujo de una línea Primero que nada, teniendo un nuevo proyecto nuevo vamos a arrastrar un botón y damos doble click para acceder a su código. Posteriormente escribimos el siguiente código. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim myGraphics As Graphics = me.CreateGraphics Dim myPen As Pen myPen = New Pen(Brushes.DarkMagenta, 10) myGraphics.DrawLine(myPen, 10, 10, 100, 10) End Sub La segunda linea crea un objeto gráfico. La tercera y cuarta línea crean la pluma.La quinta linea de codigo crea una línea en el formulario usando el método DrawLine. El primer parámetro usa la pluma. El segundo parámetro y el tercero definen las coordenadas del punto inicial de la línea. El cuarto y quinto argumento definen las coordenadas del ultimo punto de la línea. object.DrawLine(Pen, x1, y1, x2, y2) Resultado: www.s-ejecutive.com 81 22- MANEJO DE GRÁFICOS – DIBUJO DE RECTANGULOS 22.1. Creación de rectángulos Para dibujar rectángulos en pantalla hay 2 formas de hacerlo: 1.- podemos usar el método DrawRectangle especificando la coordenada de la esquina superior izquierda, su ancho y su altura. También necesitamos crear un objeto gráfico y una pluma. Sintaxis myGrapphics.DrawRectangle(myPen, X, Y, width, height) Donde myPen corresponde al objeto pen que creamos, X y Y son las coordenadas de la esquina superior izquierda, el cuarto parámetro corresponde al ancho y el ultimo parámetro se refiere al alto del rectángulo. The sample code is shown below: Dim myPen As Pen myPen = New Pen(Drawing.Color.Blue, 5) Dim myGraphics As Graphics = Me.CreateGraphics myGraphics.DrawRectangle(myPen, 0, 0, 100, 50) 2.- el otro modo de crear rectángulos es crear objeto rectángulo y posteriormente usarlo dentro de otro método. como en el siguiente código se muestra: myGraphics.DrawRectangle(myPen,myRectangle) where myRectangle is the rectangle object el codigo para crear un objeto rectangulo es como se muestra en este codigo: Dim myRectangle As New Rectangle myRect.X = 10 myRect.Y = 10 myRect.Width = 100 myRect.Height = 50 tambien podemos crear rectángulos usando código de una línea como se muestra enseguida: Dim myRectangle As New Rectangle(X,Y,width, height) www.s-ejecutive.com 82 Y el código para crear el rectángulo anterior es: myGraphics.DrawRectangle(myPen, myRectangle) 22.2 Personalizacion del estilo de línea de un objeto pen La forma que dibujamos es dibujada con una línea solida, podemos personalizar el estilo de línea del objeto pen para que use una línea punteada, o líneas basadas en guiones entre otras. P.e. la sintaxis para dibujar una línea punteada es la siguiente: myPen.DashStyle=Drawing.Drawing2D.DashStyle.Dot donde el ultimo parámetro especifica la línea DashStyle, una línea hecha a base de puntos. El siguiente código dibuja un rectángulo con línea punteada roja. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim myPen As Pen myPen = New Pen(Drawing.Color.Red, 5) Dim myGraphics As Graphics = Me.CreateGraphics myPen.DashStyle = Drawing.Drawing2D.DashStyle.Dot myGraphics.DrawRectangle(myPen, 10, 10, 100, 50) End Sub www.s-ejecutive.com 83 Los posibles valores del tipo de línea de la pluma están listados en la siguiente tabla.- Line Style Line consists of dots Line consists of dashes Line consists of alternating dashes and dots Line consists of alternating dashes and double dots Solid line Custom line style DashStyle Value Dot Dash DashDot DashDotDot Solid Custom Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArg s) Handles Button1.Click Dim myRect As New Rectangle myRect.X = 10 myRect.Y = 10 myRect.Width = 100 myRect.Height = 50 Dim myPen As Pen myPen = New Pen(Drawing.Color.Blue, 5) Dim myGraphics As Graphics = Me.CreateGraphics myGraphics.DrawRectangle(myPen, myRect) End Sub www.s-ejecutive.com 84 23- MANEJO DE GRÁFICOS – DIBUJANDO ELIPSES Y CIRCULOS 23.1 Dibujo de una elipse Antes que nada debemos en tender que una elipse esta basada en una base rectangular tal como la mayoría de las formas. Las elipses son formas ovalados que parten de un rectángulo como se muestra enseguida. Por lo tanto, necesitamos crear un rectángulo antes de crear una elipse. Este rectángulo sirve como cuadro delimitador de la elipse. Por otro lado, podemos crear las elipses haciendo uso del método DrawEllipse sin antes crear el rectángulo.a continuación mostramos los 2 metodos. En el primer método, digamos que hemos creado un objeto rectángulo llamado myRectangle y una pluma como myPen, enseguida dibujamos la elipse usando el sig.codigo. myGraphics.DrawEllipse(myPen, myRectangle) Aquí se muestra el código completo Dim myPen As Pen myPen = New Pen(Drawing.Color.Blue, 5) Dim myGraphics As Graphics = Me.CreateGraphics Dim myRectangle As New Rectangle myRectangle.X = 10 myRectangle.Y = 10 myRectangle.Width = 200 myRectangle.Height = 100 myGraphics.DrawEllipse(myPen, myRectangle) www.s-ejecutive.com 85 El segundo método es usando el método DrawEllipse sin crear un rectángulo, desde luego aun es necesario crear un objeto grafico y una pluma. myGraphics.DrawEllipse(myPen, X,Y,Width, Height) donde X yY son las coordinadas de la esquina superior izquierda el rectangulo delimitador, width es el ancho yy height se refiere a la altura de la elipse. Código completo: Ejemplo 23.1(b) Dim myPen As Pen myPen = New Pen(Drawing.Color.Blue, 5) Dim myGraphics As Graphics = Me.CreateGraphics myGraphics.DrawEllipse(myPen, 10, 10, 200, 100) 23.2 Dibujar un circulo La manera en la que se crean los círculos es idéntica a la de las elipses salvo por el hecho de que en un circulo el ancho y el alto tienen el mismo valor. El siguiente ejemplo dibuja un circulo.Ejemplo 23.2(b) www.s-ejecutive.com 86 Dim myPen As Pen myPen = New Pen(Drawing.Color.Blue, 5) Dim myGraphics As Graphics = Me.CreateGraphics Dim myRectangle As New Rectangle myRectangle.X = 10 myRectangle.Y = 10 myRectangle.Width = 100 myRectangle.Height = 100 myGraphics.DrawEllipse(myPen, myRectangle) Example 23.2(b) Dim myPen As Pen myPen = New Pen(Drawing.Color.Blue, 5) Dim myGraphics As Graphics = Me.CreateGraphics myGraphics.DrawEllipse(myPen, 10, 10, 100, 100) www.s-ejecutive.com 87 24: MANEJO DE GRAFICOS – DIBUJO DE TEXTOS 24.1 Dibujando Textos Con el commando DrawString podemos dibujar textos, el format es el siguiente: myGraphics.DrawString(myText, myFont, mybrush, X , Y) Donde myGraphics es el ob jeto gráfico, myText es el texto que deseamos mostrar en pantalla, myFont es el objeto fuente que creamos, myBrush es el estilo de pincel que hemos creado y X, Y son las coordenadas de la esquina superior izquierda del texto. Podemos crear objetos Font usando el siguiente codigo: myFont = New System.Drawing.Font("Verdana", 20) Donde el primer argumento de la fuente es la fuente, y el segundo argumento es el tamaño de la fuente. Podemos agregar un tercer argumento el estilo de fuente,tales como bold, italic, underline. Ejemplos: myFont = New System.Drawing.Font("Verdana", 20, FontStyle.Bold) myFont = New System.Drawing.Font("Verdana", 20, FontStyle.Underline) myFont = New System.Drawing.Font("Verdana", 20, FontStyle.Italic) myFont = New System.Drawing.Font("Verdana", 20, FontStyle.Regular) Para crear un estilo de pincel podemo usar el siguiente codigo: Dim myBrush As Brush myBrush = New Drawing.SolidBrush(Color.BrushColor) Algunos de los colores de pincel son AliceBlue, AquaMarine Beige, DarkMagenta, DrarkOliveGreen, SkyBlue y mas. No necesitamos recordar los nombres de todos los colores, el sistema intuitivo de VB nos muestra un listado con los colores en donde podemos buscar el color deseado. www.s-ejecutive.com 88 Ahora debemos proceder a dibujar la fuente usando el código siguiente: Ejemplo24.1 Dim myGraphics As Graphics = Me.CreateGraphics Dim myFont As Font Dim myBrush As Brush myBrush = New Drawing.SolidBrush(Color.DarkOrchid) myFont = New System.Drawing.Font("Verdana", 20, FontStyle.Underline) myGraphics.DrawString("Visual Basic 2010", myFont, myBrush, 10, 10) Resultado: El ejemplo anterior puede modificarse si queremos crear los objetos fuente y pincel, podemos usar la fuente de un objeto existente tal como el formulario y el sistema de colores. Reemplazamos la última línea del ejemplo anterior con esta línea (necesitamos borrar las líneas que crean los objetos de fuente y pincel). myGraphics.DrawString("Visual Basic 2010", me.Font, System.Drawing.Brushes.DarkOrchid, 10, 10) Tambien podemos agregar un InputBox que nos permita dejar al usuario ingresar mensajes para www.s-ejecutive.com 89 mostralos en pantalla. Ejemplo 24.2 Dim myGraphics As Graphics = Me.CreateGraphics Dim myFont As Font Dim myBrush As Brush Dim userMsg As String userMsg = InputBox("What is your message?", "Message Entry Form", "Enter your message here", 100, 200) myBrush = New Drawing.SolidBrush(Color.DarkOrchid) myFont = New System.Drawing.Font("Verdana", 20, FontStyle.Underline) myGraphics.DrawString(userMsg, myFont, myBrush, 10, 10) www.s-ejecutive.com 90 25:MANEJO DE GRAFICOS – DIBUJO DE POLIGONOS Y PIE 25.1 Dibujo de polígonos Los polígonos cuentan con más de 3 lados por lo que al crearlos deberemos indicar las coordenadas de cada uno de los lados(también conocidos como vértices) sintaxis Dim A1 As New Point(X1,Y1) Dim A2 As New Point(X2,Y2) Dim A3 As New Point(X3,Y3) Dim A4 As New Point(X4,Y4) Dim An as New Point(Xn,Yn) Después de declarar los puntos, necesitamos definir un punto que agrupe todos los puntos juntos usando la siguiente sintaxis: Dim myPoints As Point() = {A1, A2, A3,....,An} Finalmente, creamos el objeto gráfico y usamos el metodo DrawPolygon para dibujar el poligono usando la siguiente sintaxis: Dim myGraphics As Graphics = Me.CreateGraphics myGraphics.DrawPolygon(myPen, myPoints) Donde myPen es la pluma utilizando la siguiente sintaxis: myPen = New Pen(Drawing.Color.Blue, 5) Ejemplo 25.1 Dibujo de un triangulo Un triangulo es un pligono de 3 vertices. Aquí un código ejemplo www.s-ejecutive.com 91 Dim myPen As Pen Dim A As New Point(10, 10) Dim B As New Point(100, 50) Dim C As New Point(60, 150) Dim myPoints As Point() = {A, B, C} myPen = New Pen(Drawing.Color.Blue, 5) Dim myGraphics As Graphics = Me.CreateGraphics myGraphics.DrawPolygon(myPen, myPoints) 25.2: Dibujando un Pie Contamos con el metodo DrawPie del objeto gráfico.como es usual necesitamos crear los objetos pen y grafico. La sintaxis para crear un pie es: myGraphics.DrawPie(myPen, X, Y, width,height, StartAngle, SweepAngle) Donde X y Y son las coordenadas del rectángulo delimitador, los otros argumentos son auto explicables. StartAngle y SweepAngle son medidas en grados. SweepAngle puede tener valores negativos. Si el valor es positive, barre en sentido del reloj mientras que si es negative lo hará en www.s-ejecutive.com 92 sentido contrario. Ejemplo 25.3: Dibujar un pie que empieza con 0 grados y alcanza los 60 grados.. Dim myPen As Pen myPen = New Pen(Drawing.Color.Blue, 5) Dim myGraphics As Graphics = Me.CreateGraphics myGraphics.DrawPie(myPen, 50,50, 150,150,0,60) Salida: www.s-ejecutive.com 93 26:MANEJO DE GRÁFICOS – FORMAS RELLENAS CON COLOR Hay 4 metodos usados para rellenar objetos que son FillRectangle, FillEllipse , FillPolygon y FillPie. Sintaxis: myBrush = New SolidBrush(Color.myColor) Donde myColor puede ser un color como red, blue y mas. 26.1 Dibujo y relleno de un rectángulo La sintaxis para rellenar un rectángulo con un color es la siguiente: myGraphics.FillRectangle (myBrush, 0, 0, 150, 150) Código completo: Dim myPen As Pen Dim myBrush As Brush Dim myGraphics As Graphics = Me.CreateGraphics myPen = New Pen(Drawing.Color.Blue, 5) myBrush = New SolidBrush(Color.Coral) myGraphics.DrawRectangle(myPen, 0, 0, 150, 150) myGraphics.FillRectangle(myBrush, 0, 0, 150, 150) www.s-ejecutive.com 94 26.2 Dibujo y relleno de una elipse Sintaxis myGraphics.FillEllipse (myBrush, 0, 0, 150, 150) Código completo Ejemplo 26.2 Dim myPen As Pen Dim myBrush As Brush Dim myGraphics As Graphics = Me.CreateGraphics myPen = New Pen(Drawing.Color.Blue, 5) myBrush = New SolidBrush(Color.Coral) myGraphics.DrawEllipse(myPen, 0, 0, 150, 150) myGraphics.Ellipse(myBrush, 0, 0, 150, 150) www.s-ejecutive.com 95 26.3 Dibujo y relleno de polignos Sintaxis myGraphics.FillPolygon(myBrush, myPoints) Código complete: Dim myPen As Pen Dim myBrush As Brush Dim A As New Point(10, 10) Dim B As New Point(100, 50) Dim C As New Point(120, 150) Dim D As New Point(60, 200) Dim myPoints As Point() = {A, B, C, D} myPen = New Pen(Drawing.Color.Blue, 5) myBrush = New SolidBrush(Color.Coral) Dim myGraphics As Graphics = Me.CreateGraphics myGraphics.DrawPolygon(myPen, myPoints) myGraphics.FillPolygon(myBrush, myPoints) www.s-ejecutive.com 96 26.4 Dibujo y relleno de un Pie Sintaxis myGraphics.FillPie(myBrush, X, Y, width, height, StartAngle, SweepAngle) Código completo Dim myPen As Pen Dim myBrush As Brush myPen = New Pen(Drawing.Color.Blue, 5) myBrush = New SolidBrush(Color.Coral) Dim myGraphics As Graphics = Me.CreateGraphics myGraphics.DrawPie(myPen, 30, 40, 150, 150, 0, 60) .myGraphics.FillPie(myBrush, 30, 40, 150, 150, 0, 60) Salida: www.s-ejecutive.com 97 27:USANDO TIMER Timer es un control utilizado para manejar y controlar eventos que estén relacionados con el tiempo. P.e. necesitamos un Timer para crear un reloj, animaciones y mas. 27.1 Creación de Reloj Para crear un reloj debemos usar el control Timer. Este es un control que solo lo usa el programador, es invisible durante el tiempo de ejecución y eso hace que el usuario no interactue con el. 1.-renombremos al proyecto como miReloj al igual que el texto. Ahora agreguemos el control Timer al formulario2.-insertamos una etiqueta. Cambiamos la propiedad textAlign a centro enmedio 3.- Cambiaremos la propiedad Interval a 1000(equivalentes a un segundo = 1000 milisegundos) Ahora estamos listos para el código. Ahora podemos ver la línea siguiente de código misma que será utilizada en nuestro programa. Label1.Text = TimeOfDay Ahora pondremos el siguiente código en el código del control Timer.Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) H andles Timer1.Tick Label1.Text = TimeOfDay End Sub www.s-ejecutive.com 98 27.2 creación de un reloj temporizador Podemos crear un temporizador con el control Timer utilizando 3 botones a los que llamaremos StartBtn, StopBtn y ResetBtn pondremos los textos "Start", "Stop" y "Reset respectivamente Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Ha ndles Timer1.Tick 'To increase one unit per second Label1.Text = Val(Label1.Text) + 1 End Sub Private Sub StopBtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles StopBtn.Click 'To stop the Timer Timer1.Enabled = False End Sub Private Sub StartBtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles StartBtn.Click 'To start the Timer Timer1.Enabled = True End Sub Private Sub ResetBtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ResetBtn.Click 'To reset the Timer to 0 Label1.Text = 0 End Sub www.s-ejecutive.com 99 27.3 Creación de un dado digital Es muy facil crear un dado digital con poco código y el control Timer. Necesitamos generar números aleatorios usando la función Rnd. Rnd genera números entre 0 y 1. n = Int(1 + Rnd() * 6) genera enteros de 1 a 6 En el código, introducimos la variable m para controlar la longitud de tiempo para el proceso. Si m es mas de 1000, entonces el proceso se detendrá para establecer la propiedad enabled a false del Timer. Codigo Public Class Form1 Dim n, m As Integer Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Ha ndles Timer1.Tick m = m + 10 If m < 1000 Then n = Int(1 + Rnd() * 6) LblDice.Text = n www.s-ejecutive.com 100 Else Timer1.Enabled = False m=0 End If End Sub Private Sub RollDiceBtn_Click(ByVal sender As System.Object, ByVal e As System.EventArg s) Handles RollDiceBtn.Click Timer1.Enabled = True End Sub End Class www.s-ejecutive.com 101 28:CREACIÓN DE ANIMACIÓN Aunque vb2010 es generalmente un lenguaje diseñado para realizar aplicaciones de negocios e industrials y no creado para hacer animaciones, puede ser usado para crear alguns animaciones muy sencillas. 28.1 Moviendo un objeto En este caso insertaremos un control PictureBox y en su propiedad imagen importaremos una imagen cualquiera desde el disco local. Enseguida, insertamos 4 botones, cambiamos el texto de estos a Move Up, Move Down, Move Left y Move Right y sus nombres los cambiamos a MoveUpBtn, MoveDowbBtn, MoveLeftBtn y MoveRightBtn respectivamente. Ahora entramos al codigo de los botones tal como el siguiente codigo se muestra: Private Sub MoveDownBtn_Click(ByVal sender As System.Object, ByVal e As System.Event Args) Handles MoveDownBtn.Click PictureBox1.Top = PictureBox1.Top + 10 End Sub Private Sub MoveLeftBtn_Click(ByVal sender As System.Object, ByVal e As System.EventAr gs) Handles MoveLeftBtn.Click PictureBox1.Left = PictureBox1.Left - 10 End Sub Private Sub MoveRightBtn_Click(ByVal sender As System.Object, ByVal e As System.Event Args) Handles MoveRightBtn.Click PictureBox1.Left = PictureBox1.Left + 10 End Sub Explicación: Cada vez que el usuario da click en el boton Move Down, la distancia del PictureBox se incrementa en 10 pixeles desde el margen superior, creando un efecto de desplazamiento. Por el www.s-ejecutive.com 102 otro lado, cada vez que el usuario da click en el Move Up, la distancia del PictureBox disminuye en10 pixeles desde el borde superior. Por tantoal dar click en el Move Left, la distancia del PictureBox disminuye en 10 pixeles desde el borde izquierdo. Finalmente el Move Right,manipula la distancia del PictureBox en 10 pixeles para que este se displace desde el borde izquierdo hacia la derecha. Interfaz del Programa : 28.2 Creando animación usando el Timer También podemos crear animación usando el Timer sin necesidad de manipular manualmente dando click en los botones la distancia del objeto 1.-posicionamos un PictureBox en el formulario. Importamos una imagen dentro del control 2.-insetamos un Timer y establecemos el intervalo en 100 equivalente a 0.1 segundos 3.-finalmente agregamos 2 botones a los que llamamos AnimateBtn y StopBtn, y cambiamos el texto de estos a Animate yStop respectivamente. www.s-ejecutive.com 103 Hacemos uso de la propiedad Left del objeto PictureBox. PictureBox.Left se refiere a la distancia del PictureBox dsde el borde izquierdo del formulario.Ahora damos click en el Timer y escribimos el siguiente codigo: Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Ha ndles Timer1.Tick If PictureBox1.Left < Me.Width Then PictureBox1.Left = PictureBox1.Left + 10 Else PictureBox1.Left = 0 End If End Sub En el código anterior Me.Width representa el ancho del formulario. Si la distancia PictureBox desde el borde izquierdo es menor que el ancho del, se incrementa en 10 la distancia del PictureBox desde el borde izquierdo cada que el Timer avance, o cada 0.1 segundo en este ejemplo.cuando la distancia del PictureBox desde el borde izquierdo es igual al ancho del formulario, la distancia desde el borde izquierdo se establece en,0 lo cual mueve el PictureBox y se mueve nuevamente, de modo que aparente un movimiento de izquierda a derecha. Necesitamos insertar un botón que detenga la animación el código es : Timer1.Enabled = False Para animar el PictureBox,insertamos el boton e insertamos el sig.: Timer1.Enabled = True www.s-ejecutive.com 104 www.s-ejecutive.com 105