Visual Basic Net

367
Facultad de Ingenieria Industrial y de Sistemas Ing. Alberto Moreno Cueva Página 11 INDICE Introduccion Preambulo Microsoft .Net Semana 1 : Introducción a programación con ventanas. Semana 2 : Uso de Controles Comunes Semana 3 : Contenedores de elementos Semana 4 : Uso de Controles Comunes Semana 5 : Controles contenedores de menus Semana 6 : Uso de Controles Cuadros de dialogo Semana 7 : Uso de dmi Semana 8 : Creacion de Controles Semana 9 : desarrollo de una aplicación Semana 11 : Introduccion a OOP Semana 12 : Constructores Y Sobrecarga Semana 13 : Herencia e Interface Semana 14 : Programacion con Ado .NET Semana 15 : Trabajo con ambiente Conectado Semana 16 : Trabajo en Ambiente Desconectado Semana 17 : Uso de DataTable y DataView Semana 18 : Creacion Y genaracion de Reportes Semana 19 : (Examen Final) Semana 20 : (Examen de Recuperacion)

description

Manual de Visual Net para personas que desean aprender desde el inicio hasta manejar conexiones con bases de datosIng. Alberto MOreno

Transcript of Visual Basic Net

Page 1: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno Cueva

Página 11

INDICEIntroduccion

Preambulo Microsoft .Net

Semana 1 : Introducción a programación con ventanas.

Semana 2 : Uso de Controles Comunes

Semana 3 : Contenedores de elementos

Semana 4 : Uso de Controles Comunes

Semana 5 : Controles contenedores de menus

Semana 6 : Uso de Controles Cuadros de dialogo

Semana 7 : Uso de dmi

Semana 8 : Creacion de Controles

Semana 9 : desarrollo de una aplicación

Semana 11 : Introduccion a OOP

Semana 12 : Constructores Y Sobrecarga

Semana 13 : Herencia e Interface

Semana 14 : Programacion con Ado .NET

Semana 15 : Trabajo con ambiente Conectado

Semana 16 : Trabajo en Ambiente Desconectado

Semana 17 : Uso de DataTable y DataView

Semana 18 : Creacion Y genaracion de Reportes

Semana 19 : (Examen Final)

Semana 20 : (Examen de Recuperacion)

Page 2: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno Cueva

Página 12

Microsoft .NetConsideraciones

La plataforma .NET de Microsoft es un componente de software que puede serañadido al sistema operativo Windows. Provee un extenso conjunto desoluciones predefinidas para necesidades generales de la programación deaplicaciones, y administra la ejecución de los programas escritosespecíficamente con la plataforma. Esta solución es el producto principal en laoferta de Microsoft, y pretende ser utilizada por la mayoría de las aplicacionescreadas para la plataforma Windows.

.NET Framework se incluye en Windows Server 2008 y Windows Vista. Deigual manera, la versión actual de dicho componente puede ser instalada enWindows XP, y en la familia de sistemas operativos Windows Server 2003. Unaversión "reducida" de .NET Framework está disponible para la plataformaWindows Mobile, incluyendo teléfonos inteligentes.

NET es un proyecto de Microsoft para crear una nueva plataforma de desarrollode software con énfasis en transparencia de redes, con independencia deplataforma de hardware y que permita un rápido desarrollo de aplicaciones.Basado en ella, la empresa intenta desarrollar una estrategia horizontal queintegre todos sus productos,

Componentes

Los principales componentes del marco de trabajo son:

• El conjunto de lenguajes de programación• La Biblioteca de Clases Base o BCL• El Entorno Común de Ejecución para Lenguajes o CLR por sus siglas

en inglés.

Debido a la publicación de la norma para la infraestructura común delenguajes (CLI por sus siglas en inglés), el desarrollo de lenguajes se facilita,por lo que el marco de trabajo .NET soporta ya más de 20 lenguajes deprogramación y es posible desarrollar cualquiera de los tipos de aplicacionessoportados en la plataforma con cualquiera de ellos, lo que elimina lasdiferencias que existían entre lo que era posible hacer con uno u otro lenguaje.

Algunos de los lenguajes desarrollados para el marco de trabajo .NET son:C#, Visual Basic, C++, J#, Perl, Python, Fortran, Cobol y PowerBuilder.

Common Language Runtime (CLR)

Page 3: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno Cueva

Página 13

Common Language Runtime

Estructura interna delentorno de ejecución enlenguaje común (CLR

por sus siglas en inglés).

Este es el lenguaje insigniade .NET Framework

(marco de trabajo.NET) y pretende reunir las

ventajas de lenguajescomo C, C++ y Visual Basicen uno solo. El CLR es el

verdadero núcleo delframework de .NET,

entorno de ejecución en el que se cargan las aplicaciones desarrolladas en losdistintos lenguajes, ampliando el conjunto de servicios del sistema operativo(W2k y W2003).

La herramienta de desarrollo compila el código fuente de cualquiera de loslenguajes soportados por .NET en un código intermedio, el MSIL (MicrosoftIntermediate Lenguaje), similar al BYTECODE de Java. Para generarlo, elcompilador se basa en la especificación CLS (Common LanguageSpecification) que determina las reglas necesarias para crear el código MSILcompatible con el CLR.

Características

Es el encargado de proveer lo que se llama código administrado, es decir, unentorno que provee servicios automáticos al código que se ejecuta. Losservicios son variados:

• Cargador de clases: permite cargar en memoria las clases.• Compilador MSIL a nativo: transforma código intermedio de alto nivel

independiente del hardware que lo ejecuta a código de máquina propiodel dispositivo que lo ejecuta.

• Administrador de código:coordina toda la operación delos distintos subsistemas delCommon Language Runtime.

• Recolector de basura: eliminade memoria objetos noutilizados.

• Motor de seguridad: administrala seguridad del código que seejecuta.

Page 4: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno Cueva

Página 14

Biblioteca de Clases Base de .NET

Diagrama básico de la Biblioteca de Clases Base.

La Biblioteca de Clases Base (BCL por sus siglas en inglés) maneja la mayoríade las operaciones básicas que se encuentran involucradas en el desarrollo deaplicaciones, incluyendo entre otras:

• Interacción con los dispositivos periféricos• Manejo de datos (ADO.NET)• Administración de memoria• Cifrado de datos• Transmisión y recepción de datos por distintos medios (XML, TCP/IP)• Administración de componentes Web que corren tanto en el servidor

como en el cliente (ASP.NET)• Manejo y administración de excepciones• Manejo del sistema de ventanas• Herramientas de despliegue de gráficos (GDI+)• Herramientas de seguridad e integración con la seguridad del sistema

operativo• Compilación de código

Esta funcionalidad se encuentra organizada por medio de espacios de nombresjerárquicos.

La Biblioteca de Clases Base se clasifica, en cuatro grupos clave:

• ASP.NET y Servicios Web XML• Windows Forms• ADO.NET• .NET

Ensamblados

Diagrama interno de unEnsamble .NET.

Un ensamblado es un compiladoEXE o DLL que contiene códigoCIL que se genera desde losdiferentes lenguajes .NET, y quees ejecutado por el CLR. Puedecontener una o varias clases al

igual que uno o varios namespaces.

Los ensamblados pueden tener diferentes decoradores que definen el entorno

Page 5: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno Cueva

Página 15

de ejecución de los mismos COM+, DCOM, Remouting, etc.

Semana 1 : Introducción aprogramación con ventanas.Interfaces de ventana. Formularios y controlesEs un hecho palpable el que la programación para Internet, ha ganado en losúltimos tiempos una importante cuota de desarrollo, en detrimento de lasaplicaciones basadas en Windows. Sin embargo, todavía existe un importanteconjunto de programas que deberán seguir funcionando en Windows y quetendrán que migrarse a la plataforma .NET.

.

System.Windows.Forms

Este espacio de nombres contiene todos los tipos del entorno, a través de loscuales podremos desarrollar aplicaciones compuestas por formulariosWindows, junto a los correspondientes controles que permiten al usuario lainteracción con el programa.

La clase Form

Esta clase contiene todos los miembros para la creación y manipulación deformularios.Tras instanciar un objeto de Form, mediante la configuración de las adecuadaspropiedades, podemos crear formularios estándar, de diálogo, de interfazmúltiple o MDI, con diferentes bordes, etc.

Creación de un formulario básico

A pesar de que en los temas iniciales de este texto, se describió el modo decreación de una aplicación basada en formularios Windows, en el presentetema abordaremos la creación y diseño de formularios, desde un mayornúmero de perspectivas, relacionadas con los estilos de formularios, controles,creación desde código, herencia, etc.

Comenzaremos creando una aplicación basada sólo en un formulario, pararepasar el diseñador de formularios del IDE, y algunas de sus propiedades.Iniciaremos por lo tanto Visual Studio .NET, y crearemos un nuevo proyectoVB.NET de tipo aplicación Windows, proceso este, que ya describimos en losmencionados temas iniciales. En este ejemplo dejaremos el nombre deproyecto que nos propone el propio IDE, que será WindowsApplication1, o bienotro número, si ya hemos creado algún proyecto con este nombre.

Page 6: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno Cueva

Página 16

Creación de proyectos Windows Forms

Visual Basic es un sistema que está diseñado para crear programas ya sea tansencillos como los que vamos a ver y tan difíciles (aunque es solo unaexpresión) como lo es con base de datos.

pantalla aparecerá los últimos programas hechos o accedidos con surespectiva fecha, también podrá abrir cualquier solución de visual Studio .Net ocrear una nueva.

Para crear un proyecto haga los siguientes pasos.

Mostrara la siguiente ventana

Page 7: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno Cueva

Página 17

Mostrara la ventana

Nos presentara el siguiente IDE.

Page 8: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno Cueva

Página 18

Entre las partes del nuevo IDE de Visual Studio .NET tenemos:

1. Menu Bar2. ToolBars3. Server Explorer Window (Ctrl + Alt + S)4. ToolBox (Ctrl + Alt + X)5. Output Window (Ctrl + Alt + O)6. Status Bar7. Windows Form Designer8. Solution Explorer Window (Ctrl + R)9. Properties Window (F4)10. Search Window (Ctrl + Alt + F3)11. Dynamic Help Window (Ctrl + F1)

Existen nuevas ventanas en Visual Studio .NET entre las cuales tenemos:

Ø Class View (Ctrl + Shift + C)Ø Resource View (Ctrl + Shift + E)Ø Macro Explorer (Alt + F8)Ø Document Outline (Ctrl Alt + T)Ø Task List (Ctrl + Alt + K)Ø Command Window (Ctrl + Alt + A)Ø Find Symbol Results (Ctrl +Alt + Y)

1

2

3

4

5

6

7

8

9

10

11

Page 9: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno Cueva

Página 19

Si se habrán dado cuenta, siempre se inicia en el visual Basic, y apareceseleccionada la opción Aplicación para Windows, justamente lo que más vamosa utilizar, para programar.

En donde dice nombre, va a ir el nombre de nuestro proyecto, y en donde diceubicación es en donde se va a ubicar nuestro proyecto o mejor dicho en dondelo vamos a guardar.

En el proyecto, se habrá creado un formulario, elcual seguramente te lo mostrará de formaautomática. En el lado derecho de la pantalla, verásque hay un Panel o Ventana en la que se indica elproyecto actual y se muestran es el SolutionExplorer o Explorardorde Soluciones.

Para que se muestre el formulario (Form1), hazdoble clic en dicho Elemento del explorador desoluciones.

Lo que vamos a hacer ahora es cambiar la separación de los puntos que semuestran en el formulario, ese grid o grilla, servirá para ajustar los controles(ya sabrás de qué hablo) que se añadan a dicho formulario.

Por defecto la separación es de 8x8 puntos o pixels... y vamos a ponerlo en4x4.

Selecciona el formulario, simplemente con hacer un clic en él essuficiente.

En el panel de la derecha, debajo del explorador de soluciones, está la ventanade propiedades del elemento que actualmente esté seleccionado, en nuestrocaso son las propiedades del

Form1. Vamos a buscar el elemento GridSize para poder cambiar el tamaño de

Page 10: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina110

separación. Verás que se muestran dos valores separados por punto y coma,pero también hay una cruz a la izquierda de la palabra GridSize, si pulsas enesa cruz, se mostrarán los separados por punto y coma.

Para añadir controles al formulario, hay que usar labarra de herramientas que está situada en la parteizquierda del IDE de Visual Studio .NET, por ejemplopara añadir una etiqueta (Label) y una caja de texto(TextBox), simplemente haz doble clic sobre esoselementos de la barra de herramientas y se añadirán alformulario.

.

Te mostrará esto: (realmente te mostrará más cosas,pero por ahora centrate sólo en este código).

Private Sub Button1_Click(ByVal sender AsSystem.Object, ByVal e As System.EventArgs)

Handles Button1.Click

End Sub

Lo que vamos a hacer ahora, como ya te he dicho, es escribir el código que seejecutará cuando se haga clic en ese botón, lo cual producirá el evento clicasociado con dicho botón, ese evento se producirá si se hace un clicpropiamente dicho, es decir con el ratón, o bien porque se pulse intro o la barraespaciadora cuando el botón tenga el foco.

La nomenclatura, (forma de llamar a las cosas), para los eventos de

Visual Basic siguen el siguiente esquema :

[nombre del control] [guión bajo] [nombre del evento]

Pero esto sólo es una sugerencia que Visual Basic nos hace, en las versionesanteriores no era una sugerencia, era una imposición. Podemos dejar elnombre que Visual Basic nos sugiere o podemos poner la línea de declaración

Page 11: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina111

del procedimiento: Handles Button1.Clic, con esto es con lo que elcompilador/intérprete de Visual Basic sabe que este procedimiento es unevento y que dicho evento es el evento Clic del objeto Button1.

Cuando ese evento se produzca, en este caso vamos a a hacer que semuestre un cuadro de diálogo mostrándonos el nombre que previamentehemos escrito en el cuadro de texto. Escribe lo siguiente en el hueco dejadopor el Visual Basic, la línea que hay entre Private Sub...

y End Sub

MsgBox("Hola..: " & TextBox1.Text)

Ejecutar el proyecto

que se ejecute el código que hemos escrito o pulsa enel botón play

que está en la barra de botones. Escribe algo en la cajade textos, que por defecto tendrá TextBox1 , (que es elvalor que por defecto Visual Basic le asigna a lapropiedad Text de dicho control), pulsa en el botónMostrar y verás que se muestra un cuadro de diálogo diciéndote Hola y a

continuación lo que hayas escrito en el TextBox

Nota: Para que tengas más fácil buscar las propiedades en la ventana depropiedades, puedes hacer que se muestren por orden alfabético,

simplemente pulsando en el botón AZ:

Tipos de datos

Son aquellos que identifican que valores se ingresan a las variables deesta forma se realiza un control. Entre estos tipos de datos tenemos.

Tipo de dato

(Nombre de

Tipo de dato en VB.NET Descripción

Byte Byte Entero sin signo de 8 bit

SByte SByte (tipo de dato nonativo)

Entero sin signo de 8 bit (tipono acorde con el CLS)

Int16 Short Entero con signo de 16 bit

Int32 Integer Entero con signo de 32 bit

Int64 Long Entero con signo de 64 bit

Page 12: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina112

UInt16 UInt16 (tipo de dato nonativo)

Entero sin signo de 16 bit (tipono acorde con el CLS)

UInt32 UInt32 (tipo de dato nonativo)

Entero sin signo de 32 bit (tipono acorde con el CLS)

UInt64 UInt64 (tipo de dato nonativo)

Entero sin signo de 64 bit (tipono acorde con el CLS)

Single SingleNumero con coma flotante deprecisión simple, de 32 bit

Double DoubleNumero con coma flotante deprecisión doble, de 64 bit

Boolean Boolean Valor lógico

Char Char Caracter Unicode de 16 bit

Decimal Decimal Valor decimal de 96 bit

IntPtr IntPtr (tipo de dato nonativo)

Entero con signo con tamaño dependiente de laplataforma: 32 bit en

UIntPtr UIntPtr (tipo de dato nonativo)

Entero sin signo con tamañodependiente de la plataforma:32 bit en plataformas de 32 bity 64 bit en plataformas de 64String String Cadena de caracteres

TIPO DE CONVERSION

Las variables pueden convertirse de un tipo de dato a otro, por ejemplo:Una expresión cadena, convertirla a Numero. Veamos un resumen delas distintas funciones de conversión de tipos y algunos ejemplos: (estosestán tomados de la ayuda de Visual Basic .NET)

Nombre de lafunción

Tipo dedatos quedevuelve

Valores del argumento "expresion"

CBool(expresion) Boolean Cualquier valor de cadena o expresiónnumérica.

CByte(expresion) Byte de 0 a 255; las fracciones se redondean.

CChar(expresion) Char Cualquier expresión de cadena; los valoresdeben ser de 0 a 65535.

CDate(expresion) Date Cualquier representación válida de una fecha ouna hora.

Page 13: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina113

CDbl(expresion) Double Cualquier valor Duoble, ver la tabla anteriorpara los valores posibles.

CDec(expresion) Decimal Cualquier valor Decimal, ver la tabla anteriorpara los valores posibles.

CInt(expresion) Integer Cualquier valor Integer, ver la tabla anterior paralos valores posibles, las fracciones seredondean.

CLng(expresion) Long Cualquier valor Long, ver la tabla anterior paralos valores posibles, las fracciones seredondean.

CObj(expresion) Object Cualquier expresión válida.

CShort(expresion)Short Cualquier valor Short, ver la tabla anterior paralos valores posibles, las fracciones seredondean.

CSng(expresion) Single Cualquier valor Single, ver la tabla anterior paralos valores posibles.

CStr(expresion) String Depende del tipo de datos de la expresión.

-Nota:Todos los objetos de vb.NET tienen unosmétodos para realizar conversiones a otrostipos, al menos de número a cadena, ya quetienen la propiedad .ToString que devuelve unarepresentación en formato cadena del númeroen cuestión (igual que CStr).-

CType(expresion,Tipo)

Elindicadoen elsegundoparámetro

Cualquier tipo de datos

Val(expresion) Double Una cadena de caracteres.

Page 14: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina114

Fix(expresion) Dependedel tipo dedatos delaexpresión

Cualquier tipo de datos

Int(expresion) Dependedel tipo dedatos delaexpresión

Cualquier tipo de datos

Malla de los tipos de datos.

Para asignar a una variable un valor se procede de la siguiente manera:

1. Se declara la variable.

Ejemplo

Dim va As Integer

Y las constantes se declaran como constantes precisamente.

También se pueden declarar varias variables en una misma línea por ejemplo:

Page 15: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina115

Dim a,b,c As Short

En la línea anterior a, b y c serán de tipo Short Lo anterior se pudo haberescrito como:

Dim a As Short

Dim b As Short

Dim c As Short

O bien

Dim a As Short ,b As Short, c As Short

Igualmente

Sólo tendrá un valor de 3

Todas las variables numéricas al no inicializarlas tendrán como valor 0.

Tipo de conversión

Las variables pueden convertirse de un tipo de dato a otro, por ejemplo: unaexpresión cadena, convertirla a número. Veamos un resumen de las distintasfunciones de conversión de tipos y algunos ejemplos:

Tipo de dato conversor

Integer Cint

Long Clng

Double Cdbl

Decimal Cdec

Char Cchar

String Cstr

Page 16: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina116

INSTRUCCIONES CONDICIONALES

Las instrucciones básicas de todo lenguaje comprenden las EstructurasCondiciones y los ciclos o Estructuras Repetitivas. Entre ellas veremos:

Estructura Condicional: If

Esta estructura se usa para evaluar la condición de la Variable

Dim i As Short=5

If i > 0 then

Haga cualquier cosa

End if

Como también se puede evaluar la parte negativa

If i > 0 then

Haga cualquier cosa

else

Tambien haga cualquier cosa

End if

Cómo también se puede evaluar varias alternativas cómo

If i =1 0 then

Muestre el valor

elseif i=2 then

Muestre el valor

else

Tambien haga cualquier otra cosa

Page 17: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina117

End if

También podemos usar la función IIF, que funciona de la siguiente forma

iif(i=1, uno otro ) o iif(i>0, Positivo Negativo ), si tuviéramos el siguiente caso

if B=5 then

A=1

Elseif B<=0 then

A=-1

Else

A=0

End if

Lo llevaríamos a la función iif de la siguiente forma

A=iif(B=5,1,iif(B<=0,-1,iif(B>5,1,0)))

La función Switch

El switch es parecido al iif con la diferencia que se puede poner variascondiciones con un solo switch

A=Switch(B=5,1,B<=0,-1,B>5,1)

Como observará el primer elemento de cada pareja es la expresión a evaluar.

También se puede anidar las instrucciones if. Por ejemplo

If A>0 then

If (A mod 2 )=0 then

Número par

Else

Número impar

End if

Else

Nùmero negativo

End if

Page 18: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina118

ESTRUCTURA SELECTIVA: Select case

Esta instrucción permite evaluar múltiples valores por ejemplo:

Dim B As Short =30

Select case B

Case 5

Si fuera igual a 5

Caso Is < 10

Si fuera menor a 10

Case Is> 20

Si fuera mayor a 20

Case 23 to 25

Si fuera mayor o igual a 23 y menor e igual a 25

Case 1 to 2

Si fuera 1 o 2

Case 26 to 28,31

Si fuera mayor o igual a 26 y menor e igual a 28 o si es 31

Case else

Si no es ninguna de las anteriores

End select

ESTRUCTURAS REPETITIVAS

FOR.(Para Hasta)

Sintaxis:

For var=valorinicial to valorfinal step(incremento)

(programacion)

Next var

El For es una sentencia repetitiva donde var es la variable de control quedara las vueltas.

Page 19: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina119

Ejemplos:

Visualize en el formulario los numeros pares del 100 al 2(100,98,96..)

For i=100 to 2 step 2

Print i

Next I

Genere y visualize numeros del 10 al 90 y al final muestre la suma de ellosDim suma as integer,i as integer

Suma=0

For I=10 to 99

Print I

Suma=Suma + i

Next

Print La suma es & suma

el & concatena

DO WHILE.…LOOP.(Hacer mientras) , DO…. LOOP UNTIL(Hacer Hasta)

Sintaxis:

Do while condicion

(programacion)

Loop

Do

(programacion)

Loop Until Condicion

Genere y visualize numeros del 10 al 90 y al final muestre la suma de ellos

Do whileDim i as integer,suma as integer

Suma=0

i=10

Ejemplo:

Sumar= 3+5+7+...+81

Sm=0

For N=3 to 81 Step 3

Sm=Sm+n

Next

Page 20: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina120

Do while i <= 90

Print I : Suma= Suma + i : i= i +1

Loop

Print La suma es & suma

Do Loop untilDim i as integer,suma as integer

Suma=0

i=10

Do

Print I

Suma= Suma + I

i= i +1

Loop Until i > 90

Print La suma es & suma

WHILE..WEND(Hacer Cuando)

Sintaxis:

While condicion

(Programacion)

wend

Dim i as integer,suma as integer

Suma=0 : i=10

while i <= 90

Print I : Suma= Suma + i : i= i +1

wend

Print La suma es & suma

Con la sentencia while wend, no se podra utilizar la setencia EXIT

Page 21: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina121

FOR EACH

Repite un grupo de instrucciones para cada elemento de una matriz ocolección.

Sintaxis:

FOR EACH elemento IN grupo

(Instrucciones)

NEXT

Ejemplo: Poner a las cajas de texto color de fondo rojo

Private Sub CmdCambiar_Click()

'Se declara una varibale de tipo Object

Dim obj As Object

'Por cada objeto que se encuentre en el formulario actual

'Este for dara vueltas segun la cantidad de objetos que hay en le formulario

For Each obj In Me.Controls

'Pregunta si el objeto es un Textbox si lo es cambia de color de fondo

If TypeOf obj Is TextBox Then

obj.BackColor = vbRed

End If

Next

End Sub

Sentencia EXIT

La sentencia EXIT permitira salir de unbucle,funcion,procedimiento,etc.Dependiendo de donde se quiere salir seaplicará la sentencia:

Exit For .- Sale de un for

Exit Do.- Sale de un Do

Exit Sub.- Sale de un procedimiento

Page 22: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina122

Exit Function.- Sale de una funcion , etc.

Page 23: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina123

Semana 2 : Uso de Controles Comunes

El control Label._

En un control que permite visualizar un título o texto, también permite

Visualizar un resultado.

Este es uno de los controles más utilizado, porque es utilizado paraVisualizar un título a un control; puede mostrar el resultado de unaOperación, etc.

Las propiedades de este control:

Si te habrás dado cuenta a la hora de utilizar la propiedad de TextAlign delcontrol label, este te muestra una imagen en donde hay nuevo opcionesde alienar el texto a comparación de la versión anterior que solo temostraba tres opciones.

Ejemplo 01

Esta aplicación es fácil de hacer, el formulario que vas a crear deberá tener elsiguiente diseño.

Page 24: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina124

El control Textbox._

Es el segundo botón control más utilizado en todas aplicaciones y formularios,porque permite:

Ingresar datos por teclado, visualizar datos o resultados.

Las propiedades de este control:

Page 25: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina125

Ejemplo 02

Esta aplicación es fácil de hacer, el formulario que vas a crear deberá calcularel promedio de dos notas ingresadas, el formulario se llamará frmpromedios.

diseño de código le daremos doble clic en el formulario. Seleccionar el

objeto TXTN1 y su evento KEYPRESS:

Private Sub Txtn1_KeyPress(ByVal sender As Object, ByVal e AsKeyPressEventArgs) Handles Txtn1.KeyPress

Donde escribiremos el siguiente código:

If Asc(e.KeyChar) = 13 Then

txtn2.Focus()

End If

End Sub

-

Private Sub txtn2_KeyPress(ByVal sender As Object, ByVal e As

Page 26: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina126

KeyPressEventArgs)

Handles txtn2.KeyPress

If Asc(e.KeyChar) = 13 Then

txtpromedio.Text =(Val(Txtn1.Text) + Val(txtn2.Text)) / 2

End If

End Sub

Una de las características del Textbox es que permite controlar el ingreso delos datos por el Teclado, a través del Evento KeyPress.

Ejemplo 03

Esta aplicación es fácil de hacer, el formulario que vas a crear deberá visualizarel número invertido del número ingresado, Formulario se llamará frminvertir.

Page 27: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina127

El control Button._

Es el control más por los programadores y utilizado en todas aplicaciones yformularios, porque

Permite:

Ejecutar un conjunto de instrucciones al hacer clic en el control.

Las propiedades de este control:

Page 28: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina128

Ejemplo 04

Reconociendo VB .NET y Trabajando con el Lenguaje

Duración: 20 minutos

Cargue Visual Studio .NET, aparecerá la página de inicio, en ella elegir laopción Get Started y luego elegir Create New Project , observe los diferentestipos de proyectos y sus respectivas plantillas.

Elegir un tipo de proyecto Visual Basic y una plantilla de AplicaciónWindows , seleccionar como ubicación la carpeta C:\VBNET\Labs y comonombre ingrese Lab03_1 .

Observe el IDE de Visual Studio .NET cuando se trata de una aplicación paraWindows. ¿Qué ventanas son nuevas en esta versión?. Luego, pruebe lacaracterística de Auto Ocultar de las ventanas y la ayuda dinámica.

Vamos a empezar a crear una aplicación en la que en un formulario seingresen los datos de unos alumnos, tal como su nombre, notas de susexámenes parcial y final y se calculará el promedio y condición. Además, enotro formulario se mostrará un informe del total de alumnos ingresados,aprobados, desaprobados y el promedio total

Primero en la ventana del Solution Explorer seleccionar el nombre delformulario y en la ventana de propiedades escribir en la propiedad FileNameel nombre frmDatos.vb .

Realizar el diseño del formulario similar al de la figura 1.18, ingresando comoprefijo de la propiedad Name de las etiquetas las iniciales lbl , para los textostxt y para los botones btn , seguido del nombre que generalmente es similar

al contenido de la propiedad Text .

Después de realizar el diseño y configurar las respectivas propiedades de losobjetos, visualice el código del formulario. Observe las nuevas característicasdel Lenguaje y notes la diferencias entre esta versión y la anterior.

Diseño del formulario frmDatos

Page 29: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina129

Para realizar los cálculos de la aplicación vamos a crear variables y funcionespúblicas en un módulo estándar, para lo cual del menú Project elegimos laopción Add Module y luego escribimos en el nombre Modulo.vb

Escribir el siguiente código en el módulo:

Module Modulo

Public NTotal, NAprobados,NDesaprobados As Byte

Public Suma, PromTot As Single

Public FunctionCalcular_Promedio(ByVal Par As Byte, _

ByVal Fin As Byte) As Single

Return ((Convert.ToSingle(Par + 2 * Fin)) / 3)

End Function

Public Function Calcular_Condicion(ByVal Pro As Single) _

As String

NTotal = +1 : Suma = +Pro

If Pro > 10.5 Then

NAprobados = +1 : Return ("Aprobado")

Else

NDesaprobados = +1 : Return ("Desaprobado")

End If

End Function

End Module

Regresar al formulario y proceder a escribir código en los eventos de losbotones, tal como se muestra a continuación:

Protected Sub btnCalcular_Click( )

Dim Par, Fin As Byte : Dim Pro As Single : Par =

Page 30: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina130

Convert.ToByte(txtParcial.Text)

Fin = Convert.ToByte(txtFinal.Text) : Pro = Calcular_Promedio(Par, Fin)

txtPromedio.Text = Format(Pro, "#.00") : txtCondicion.Text =Calcular_Condicion(Pro)

End Sub

Protected Sub btnNuevo_Click(ByVal sender As Object, )

Dim X As Control

For Each X In Me.Controls

If TypeOf X Is TextBox Then X.Text = ""

Next : txtNombre.Focus()

End Sub

Protected Sub btnInforme_Click(ByVal sender As Object, )

Dim X As New frmInforme() : X.ShowDialog()

End Sub

Protected Sub btnSalir_Click(ByVal sender As Object, )

Me.Close

End Sub

Para mostrar el informe de situación de alumnos ir al menú Project y elegir laopción Add Windows Form y en el nombre escribir frmInforme.vb . Luegorealizar el diseño del formulario, tal como semuestra en la figura de abajo.

Diseño del formulario frmInforme

Ingresar al código del formulariofrmInforme y proceder a escribir código en

el evento Load para que se muestre lasestadísticas de los alumnos:

Public Sub frmInforme_Load( )

txtTotal.Text = NTotal.ToString :txtAprobados.Text = NAprobados.ToString

Page 31: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina131

txtDesaprobados.Text = NDesaprobados.ToString

txtPromedioTotal.Text = Format((Suma / NTotal), "#.00")

End Sub

Luego programar en los botones de Aceptar y Cancelar el regreso y lafinalización de la aplicación respectivamente, similar al código mostrado abajo:

Protected Sub btnAceptar_Click(ByVal sender As Object, )

Me.Close()

End Sub

Protected Sub btnCancelar_Click(ByVal sender As Object, )

End

End Sub

Grabar y ejecutar la aplicación; para probar ingresar como mínimo los datos dedos alumnos, mostrar el informe y finalizar.

Diríjase al Explorador de Windows y analice el contenido de la carpetaLab01_1 , observe que existen varios tipos de extensiones, sln para la

solución, vbproj para la aplicación y vb para los formularios y el módulo.

Finalmente, ingrese a la carpeta bin de Lab01_1 y observe dos archivos:uno ejecutable (extensión exe) y otro archivo intermedio (extensión pdb),¿Cuál de estos es conocido como Assemblie?.

Ejemplo 05

Implementando Multi Thread y Control de Excepciones

Duración: 15 minutos

Ingrese a Visual Studio .NET y del menú File elegir New y luego Project osimplemente pulsar [Ctrl] + [N], luego elegir un tipo de proyecto Visual Basic yuna plantilla de Aplicación Windows , seleccionar como ubicación la carpetaC:\VBNET\Labs y como nombre ingresar Lab03_2 .

Se va a crear una aplicación en la que se implemente múltiples threads parainiciar la lectura de un archivo de texto extenso y poder cancelar este procesosi es necesario, además para evitar los errores en tiempo de ejecuciónharemos uso del control estructurado de excepciones visto en este módulo.

Primero en la ventana del Solution Explorer seleccionar el nombre del

Page 32: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina132

formulario y en la ventana de propiedades escribir en la propiedad FileNameel nombre frmArchivo.vb .

Realizar el diseño del formulario similar al presentado aquí abajo:

Diseño del formulario frmArchivo

Declarar una variable llamada Hilo de tipothread y definir una subrutina que lea elarchivo de texto cuya ruta y nombre estáespecificado en el cuadro de texto, estarutina usa Try..Catch..Finally paracontrolar errores en tiempo de ejecución.

Dim Hilo As System.Threading.Thread

Sub LeerArchivo()

Dim Flujo AsSystem.IO.StreamReader : Dim Linea As

String = " "

Try

Flujo = System.IO.File.OpenText(txtNombre.Text)

Do Until IsNothing(Linea)

Linea = Flujo.ReadLine

txtArchivo.Text = txtArchivo.Text + Linea + Chr(13) + Chr(10)

Loop

Catch X As IO.IOException

MsgBox(X.Message, MsgBoxStyle.Information, "No se pudo")

txtNombre.Clear() : Exit Sub

End Try

Flujo.Close() : btnSuspender.Enabled = False : btnContinuar.Enabled =False

btnCancelar.Enabled = False

End Sub

Page 33: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina133

Escribir código en el evento TextChanged de txtNombre y en los eventosClick de los Botones .

Private Sub txtNombre_TextChanged(ByVal sender As ) Handles

btnLeer.Enabled = : txtNombre.Text <> ""

End Sub

Private Sub btnLeer_Click(ByVal sender As ) Handles

Hilo = New System.Threading.Thread(AddressOf LeerArchivo) :Hilo.Start()

btnSuspender.Enabled = True : btnCancelar.Enabled = True

End Sub

Private Sub btnCancelar_Click(ByVal sender As ) Handles

Hilo.Abort() : btnLeer.Enabled = False : btnSuspender.Enabled = False

btnCancelar.Enabled = False

End Sub

Private Sub btnNuevo_Click(ByVal sender As ) Handles

txtNombre.Clear() : txtArchivo.Clear() : txtNombre.Focus()

End Sub

Private Sub btnSuspender_Click(ByVal sender As ) Handles

Hilo.Suspend() : btnLeer.Enabled = False : btnContinuar.Enabled= True

btnCancelar.Enabled = False

End Sub

Private Sub btnContinuar_Click(ByVal sender As ) Handles

Hilo.Resume()

End Sub

Private Sub btnSalir_Click(ByVal sender As ) Handles ...

Me.Close()

Page 34: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina134

End Sub

Finalmente, grabar y ejecutar la aplicación.

Ejemplo 05

Ejercicio Modelo Para Desarrollar en Laboratorio.

1. Crear una Carpeta con el nombre: Visualnet, en la unidad C: o UnidadD:

2. Activar el .Net, seleccionar el botón:3. Se visualiza la siguiente pantalla:

4. Activar el Explorador de soluciones:

• O también pulsando las teclas: Ctrl + Alt + L5. Se visualiza lo siguiente:

6. Cerrar la ventana del Explorador de soluciones y activar la ventana depropiedades (F4)

7. Aplicar las propiedades del formulario:Name frmdemo01

Text Primera Practica Net

Opacity 90%

StartPosition CenterScreen

FormBorderStyle Fixed3D

Renombrar Form1.vb por Demo01.vb

Page 35: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina135

BackgroundImage 1 imagen de Archivo

Cursor Hand

Icon Seleccionar un archivo icono

8. Del Cuadro de Herramientas, insertar al formulario lo siguiente:

El formulario tendrá el siguiente diseño:

9. Propiedades del GroupBox1 (Ventana de Propiedades)

Name gbxcuadros

Text Operaciones Con Cuadros

Font Boldà True

Forecolor 1 Color

BackgroundImage La misma imagen del Formulario

Cursor PanNorth

10. El formulario tendrá el siguiente aspecto:

Componente:

GroupBox

Objeto: GroupBox

Page 36: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina136

11. Del cuadro de Herramientas:

12. El formulario tendrá el siguiente aspecto:

13. Propiedades del Objeto Label

Name Label1

Text Ingrese El Primer Numero :

BorderStyle Fixed3D

Image Insertar un icono de imagen

ImageAlign MiddleRight

TextAlign MiddleLeft

Font Boldà True

Forecolor Un color

Autosize False

BackColor 1 Color

14. El formulario tendrá el siguiente aspecto:

Insertar el Objeto Label dentrodel GroupBox

Objeto Label Insertadodentro del GroupBox

Page 37: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina137

15. Copiar y Pegar (4 Label)à Total de Labels (5 Labels)

16. Modificar los Text de los labels, tal como se visualiza en la siguienteimagen:

17. Del cuadro de herramientas:

18. El formulario tendrá el siguiente aspecto:

19. Propiedades del Textbox1Name txtuno

Text Vacio

Forecolor y Backcolor 1 Color

Font Bold à True

20. Copiar y pegar los cuadros de Textos, el formulario tendrá el siguienteaspecto:

Insertar el cuadro detexto: Textbox, dentro

Cuadro de Texto: Textbox1, insertado en el objetoGroupBox

Page 38: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina138

21. Insertar un segundo GroupBox hacia el formulario, tal como se muestraen la siguiente imagen:

22. El formulario tendrá el siguiente aspecto:

23. Del Cuadro de Herramientas:

24. El formulario tendrá el siguiente aspecto:

Name gbxopciones

Text Opciones de Control

Font Boldà True

Forecolor 1 Color

BackgroundImage

La misma imagen delFormulario

Cursor PanWest

Insertar un botón de comando, Buttonhacia el GroupBox

Name: txtdos

Name: txttres

Name: txtcuatro

Name: txtcinco

Page 39: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina139

25. Propiedades del botón de Comando:Name btnnuevo

Text &Nuevo

BackgroundImage La misma imagen del Formulario

Image Un icono

ImageAlign BottomCenter

TextAlign MiddleCenter

Forecolor 1 Color

Cursor Hand

26. Copiar y pegar 4 botones de comando con el objeto Button, hacia elobjeto GroupBox

27. En el formulario:

Botón de Comando Button1

Name: Name: btnmultiplica Name: btnsalirName: btnprome

Page 40: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina140

28. El formulario tendrá el siguiente aspecto:

29. Pulsar doble clic en el objeto TextBox: txtuno, evento: Keypress

30. Seleccionar el objeto: txtdos, evento: Keypress

Copiar y pegar el ObjetoLabel y el TextBox

Name: Label6 Text: El Resultado Es :

TextAlign: MiddleCenter

Name: txtresultado Text: Vacio

Page 41: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina141

31. Seleccionar el objeto: txttres, evento: keypress

32. Seleccionar el objeto: txtcuatro, evento: Keypress

33. Seleccionar el objeto: txtcinco, evento: Keypress

34. Seleccionar el Objeto: btnnuevo, evento: Click

Page 42: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina142

35. Seleccionar el objeto: btnsuma, evento: Click

36. Seleccionar el objeto: btnmultiplica, evento: Click

37. Seleccionar el objeto: btnprome, evento: Click

38. Seleccionar el objeto: btnsalir, evento: Click

Esta aplicación nos permitir hallar la venta de un productocualquiera,Calculando el Subtotal, IGV y Total de la venta, y a su vez nosmostrara la hora actualizándose cada segundo, mediante un controlTimer.

Grabar y Ejecutar La Aplicación

Page 43: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina143

Primero comencemos con los nombres de cada control, aunque creoqueesto es lo que más me toma tiempo, empecemos, el Label que nosmostrara la fecha se llamara lblFecha, el que nos mostrara se llamara

lblHora, el del subtotalse llamara lblSubTotal,el del total se llamaralblTotal y el del IGV sellamara lblIgv, elTextBox que captura elnombre del producto sellamara txtNombProd,el del precio unitario sellamara txtPrecUnit yel de la cantidad sellamara txtCant, losbotones de Nuevo,Resultados y Salir se

llamaran btnNuevo, btnResultados y btnSalir, respectivamente.

frmAplicacion89 (Evento FormClosing) Dim Resp As MsgBoxResult Resp = MsgBox("¯Desea salir de la Aplicaci¤n?",sgBoxStyle.YesNo,"Cuidado") If Resp = MsgBoxResult.No Then e.Cancel = True End If

frmAplicacion89 (Evento Load)

Me.tmrHora.Enabled = True Me.lblFecha.Text = Format(Now, "dd - MMMM - yyyy") Me.lblHora.Text = Format(Now, "hh:mm:ss tt") Me.Text = Space(40) + "Ventas"tmrHora (Evento Tick)

Me.lblHora.Text = Format(Now, "hh:mm:ss tt")

btnSalir (Evento Click) Me.Close()

Page 44: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina144

btnNuevo (Evento Click)

Me.txtCant.Text = "" Me.txtNombProd.Text = "" Me.txtPrecUnit.Text = "" Me.lblIgv.Text = "" Me.lblSubTotal.Text = "" Me.lblTotal.Text = "" Me.txtNombProd.Focus()

btnResultados (Evento Click) Dim SubTotal, IGV, Total As Single SubTotal = CStr(Val(Me.txtCant.Text) *Val(Me.txtPrecUnit.Text)) IGV = SubTotal * 0.19 Total = IGV + SubTotal Me.lblSubTotal.Text = Format(SubTotal, "###,##0.00") Me.lblIgv.Text = Format(IGV, "###,##0.00") Me.lblTotal.Text = Format(Total, "###,##0.00")

Lo único que deben de saber del control Timer es que cuando unolo crea, se crea desactivado, asà que se tiene que activar el controlpara poder usarlo, esto se hace mediante la propiedad Enabled, enla cual tiene que estar en True, y el intervalo en que el controlse actualizara, por ejemplo, el intervalo de 100 es equivalente aun segundo.

Ejemplo propuesto1. Realizar el siguiente diseño del Formulario

Page 45: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina145

Indicaciones:

Cuando se ejecuta la aplicación deberá realizar lo siguiente:

Respecto a los botones

• El botón Nuevo, nos permite limpiar los cuadros de textos• El botón Calcular nos permite realizar las siguientes operaciones:

Sub Total, Igv y A pagar• El botón: Salir, nos permite salir de la aplicación

Respecto a los GroupBox

• Cuando se selecciona el botón: Nuevo, se activa los Groupbox:Datos del cliente y Compras del cliente, para ingresar los datos

• Se digita los datos de un cliente• Se ingresa un código de un producto• La descripción de un producto• El precio• Cuando se digita la cantidad, debe que visualizarse automáticamente

en la columna total, el producto del precio por la cantidad• Cuando se hay llenado las compras del Cliente• Se pulsa el botón: Calcular, para que halle los resultados

mencionados anteriormenteValidaciones

• En la columna precio y cantidad, solamente acepta valoresnuméricos

• En los Cuadros de textos, se debe que utilizar el evento Keypress

Ejercicios propuestos

• Ingresar tres números y determinar cuál de ellos es el menor.

• Llamar de un formulario a otro usando botones.

• Ingresar dos números realizar la suma de estos, enviar a otro formularioy acumularlos en un label.

• Ingresar un valor inicial y final con la estructura repetitiva for .. to realizarla secuencia para determinar cuántos pares e impares existen así comosu acumulado de cada uno, debe mostrar en un control textbox demúltiples líneas las respuestas de la serie respectiva.

Page 46: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina146

• Mostrar en el formulario la tabla de dividir de un numero ingresado dichatabla solo se mostrar si este número está comprendido entre 1 y 12.

• En un formulario y en 25 botones determinar al azar sin que se repitan laemulación de un bingo.

Semana 3 : Contenedores de elementos

El control combo box._

Un combo tiene muchas cosas en común con una lista (listbox). La diferenciaprincipal es que en un combo tiene una propiedad llamada DropDowStyledistintas formas de presentar una lista:

1. Simple Combo. En este caso el registro seleccionado también es editable, yse muestra una lista no desplegable dotada si es necesario de una scrollbar.

2.- DropDown ._ es el valor más habitual y corresponde a el caso en el quesólo se muestra el registro seleccionado, que es editable por el usuario,permaneciendo el resto oculto hasta que el usuario despliega la lista con elmouse.

3. DropDown List. En este último caso el registro seleccionado no es

editable y la lista es desplegable.

En una caja combinada, al igual que en una caja de texto sencilla, está

permitido escribir con el teclado en tiempo de ejecución, si la propiedad

Enabled vale True. En una lista esto no es posible.

El control list box._

Un ListBox es un control en el que se pueden mostrar varios registros o líneas,teniendo uno o varios de ellos seleccionado(s). Si en la lista hay más registrosde los que se pueden mostrar al mismo tiempo, se añade automáticamente un

Page 47: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina147

scrollBar. Para añadir o eliminar registros de la lista se utilizan la ColecciónÍtems cuyos métodos son Add y Remove respectivamente. Esto sólo puedehacerse en modo de ejecución, y no

en modo de diseño. Se suelen inicializar desde el evento MyBase.Load.

Propiedades

- Ítems. Es una colección de elementos que se almacena en el List-

Box. En dicha colección se utilizan los siguientes métodos:

- Add.- Añadir un Item.

Clear. Limpiar los Ítems de la Lista.

- Remove. Quitar un Item de la Lista.

- Count. Retorna el número de Ítems en la Lista.

- SelectedIndex. Retorna el índice del elemento seleccionado. Hay que tener

en cuenta que los elementos de la lista se empiezan a numerar por cero, y enel caso de no haber ninguno seleccionado esta propiedad vale -1.

- SelectedItem. Retorna el valor del elemento seleccionado, también

se utiliza la propiedad Text.

- SetSelected (pos,valor). Indica si una lista esta seleccionada, esta

si esta en true indica que ese elemento ha sido seleccionado.

- SelectionMode esta es una propiedad que indica si se podra seleccionar

una propiedad neta del ListBox y se dara en tiempo de diseño.

Ejemplo 06

Este Formulario nos permite ingresar un nombre de un trabajador y alseleccionar el tipo de pago deltrabajador, automáticamentenos hallara el pago por hora, ytendremos que ingresar lashoras trabajadas.

Esta aplicación nos permiteingresar un numero enterocualquiera a un ListBox, ydespués podemos ordenarlos

Page 48: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina148

ascendentemente o descendentemente, o eliminar los elementosseleccionados, también podremos hallar la media de los elementos delcontrol, teniendo en cuenta que si el número de elementos de la lista es impar,la media es igual al número colocado en la posicion media de la lista, o si elnúmero de elementos de la lista es par, la media es igual al promedio de losdos valores medios de la lista. NOTA que se debe de tener ordenados loselementos de la lista en forma ascendente para poder hallar la media.

Los controles tendrán su nombre respectivo, con referencia a su función, eltectbox se llama txtNumIng, el botón añadir se llamara btnAñadir, el botóncerrar se llamara btnCerrar, el botón ordenar se llamara btnOrdenar, el botóneliminar se llamara btnEliminar, el botón ejecutar clculo se llamara btnEjecutar,la lista de números (ListBox) se llamar lstNumeros, el radio button ascendentese llamar rdbAscendente y el del descendente se llamara rdbDescendente ypor último el Label que muestra la media de la lista de números se llamaralblCalculo.

Cuando seleccionaremos un elemento o más de uno, se activara el botón de

Eliminar, en caso contrario debe de estar desactivado.

Declaramos variables a Nivel del Formulario

Dim Ordenado As Boolean = False

txtNumIng (Evento TextChanged)

If IsNumeric(Me.txtNumIng.Text) = True Then

Me.btnA adir.Enabled = True

Else

Me.btnA adir.Enabled = False

End If

btnAñadior (Evento Click)

Me.lstNumeros.Items.Add(Me.txtNumIng.Text)

Me.txtNumIng.Text = ""

Me.txtNumIng.Focus()

rdbAscendente (Evento CheckedChanged)

Page 49: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina149

If Me.rdbAscendente.Checked = True Then

Me.btnOrdenar.Enabled = True

Else

Me.btnOrdenar.Enabled = False

End If

rdbDescendente (Evento CheckedChanged)

If Me.rdbDescendente.Checked = True Then

Me.btnOrdenar.Enabled = True

Else

Me.btnOrdenar.Enabled = False

End If

btnOrdenar (Evento Click)

Dim NumItems, J, K, Mayor As Integer

NumItems = Me.lstNumeros.Items.Count - 1

Dim Temp(NumItems) As Integer

'Almacenamos los valores en un array temporal

For J = 0 To NumItems

Temp(J) = CInt(Me.lstNumeros.Items(J))

Next

'M»todo de Ordenaci¤n llamada BURBUJA

For J = 0 To NumItems

For K = 0 To NumItems

If K < NumItems Then

If Temp(K) > Temp(K + 1) Then

Mayor = Temp(K) : Temp(K) = Temp(K + 1) : Temp(K + 1) =Mayor

Page 50: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina150

End If

End If

Next

Next

If Me.rdbAscendente.Checked = True Then

'Limpiar y Llenar el ListBox

Me.lstNumeros.Items.Clear()

For J = 0 To NumItems

Me.lstNumeros.Items.Add(CStr(Temp(J)))

Next

Ordenado = True

ElseIf Me.rdbDescendente.Checked = True Then

'Limpiar y Llenar el ListBox

Me.lstNumeros.Items.Clear()

For J = 0 To NumItems

Me.lstNumeros.Items.Add(CStr(Temp(NumItems - J)))

Next

Ordenado = False

End If

lstNumeros (Evento SelectedIndexChanged)

Me.btnEliminar.Enabled = True

btnEliminar (Evento Click)

Dim i As Integer : Me.btnEliminar.Enabled = False

With Me.lstNumeros

For i = .SelectedItems.Count - 1 To 0 Step -1

.Items.Remove(.SelectedItems.Item(i))

Page 51: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina151

Next

End With

btnEjecutar (Evento Click)

Dim NumItems, Index, Q As Integer : Dim Media As Single

NumItems = Me.lstNumeros.Items.Count

If Ordenado = False Then

MsgBox("Para Hallar la Media, Primero Debe de Ordenar los Elementosen

Forma Ascendente", MsgBoxStyle.Information, "ERROR!")

Exit Sub

End If

Q = NumItems \ 2 : Index = NumItems - (Q * 2)

If Index = 0 Then

Index = CInt(Me.lstNumeros.Items.Count) \ 2

Media = (CSng(CInt(Me.lstNumeros.Items(Index)) +

CInt(Me.lstNumeros.Items(Index - 1)))) / 2

Else

Index = CInt(Me.lstNumeros.Items.Count) \ 2

Media = CSng(CInt(Me.lstNumeros.Items(Index)))

End If

Me.lblCalculo.Text = CStr(Media)

btnOrdenar (Evento Click)

Me.Close()

Page 52: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina152

Empleo de listas

Codificacion

Public Class Form1

Private Const msgbox_Title As String = "Lista de Elementos"

Private Const msgbox_Eliminar As String = "Para eliminar un dato, debeseleccionarlo previamente"

Private Const msgbox_Pasar_Dato As String = "Para pasar un dato, debeseleccionarlo previamente"

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles MyBase.Load

With ListBox1

.Items.Add("Naranja") : .Items.Add("Pera")

.Items.Add("Melocotón") : .Items.Add("Albaricoque")

.Items.Add("Manzana") : .Items.Add("Plátano")

.Items.Add("Melón") : .Items.Add("Mango")

.Items.Add("Uvas") : .Items.Add("Sandía") : .Items.Add("Limón")

.Items.Add("Fresquilla")

End With

Label1.Text = ListBox1.Items.Count & " elemento(s)"

End Sub

Private Sub Button5_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles Button5.Click

Page 53: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina153

'Añadir ListBox1

If TextBox1.Text <> "" Then

ListBox1.Items.Add(TextBox1.Text)

Label1.Text = ListBox1.Items.Count & " elemento(s)"

TextBox1.Text = ""

End If

End Sub

Private Sub Button6_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles Button6.Click

'Eliminar ListBox1

If ListBox1.SelectedIndex <> -1 Then

'Si hay datos seleccionados en el control, eliminamos el datoseleccionado

ListBox1.Items.RemoveAt(ListBox1.SelectedIndex)

Label1.Text = ListBox1.Items.Count & " elemento(s)"

Else

MessageBox.Show(msgbox_Eliminar, msgbox_Title,MessageBoxButtons.OK, MessageBoxIcon.Information)

End If

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles Button1.Click

'Pasa todos los elementos del control ListBox1 al control ListBox2

While ListBox1.Items.Count > 0

ListBox1.SelectedIndex = ListBox1.Items.Count - 1

ListBox2.Items.Add(ListBox1.SelectedItem)

ListBox1.Items.RemoveAt(ListBox1.SelectedIndex)

End While

Page 54: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina154

Label1.Text = ListBox1.Items.Count & " elemento(s)"

Label2.Text = ListBox2.Items.Count & " elemento(s)"

End Sub

Private Sub Button7_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles Button7.Click

ListBox2.Sorted = True : ListBox2.Sorted = False

End Sub

Private Sub Button4_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles Button4.Click

'Pasa todos los elementos del control ListBox2 al control ListBox1

While ListBox2.Items.Count > 0

ListBox2.SelectedIndex = ListBox2.Items.Count - 1

ListBox1.Items.Add(ListBox2.SelectedItem)

ListBox2.Items.RemoveAt(ListBox2.SelectedIndex)

End While

Label1.Text = ListBox1.Items.Count & " elemento(s)"

Label2.Text = ListBox2.Items.Count & " elemento(s)"

End Sub

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

Dim a As Integer = 0

'Pasa un dato seleccionado del control ListBox1 al control ListBox2

If ListBox1.SelectedIndex <> -1 Then

' 'Si hay datos seleccionados en el control,'pasamos el datoseleccionado

While a < ListBox1.Items.Count

' si el elemento esta seleccionado

If ListBox1.GetSelected(a) = True Then

Page 55: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina155

ListBox2.Items.Add(ListBox1.Items.Item(a))

ListBox1.SetSelected(a, False) :ListBox1.Items.RemoveAt(a)

'elimina de la lista el item copiado

End If

a += 1

End While

Label1.Text = ListBox1.Items.Count & " elemento(s)"

Label2.Text = ListBox2.Items.Count & " elemento(s)"

Else

If ListBox1.Items.Count > 0 Then

MessageBox.Show(msgbox_Pasar_Dato, msgbox_Title,MessageBoxButtons.OK, MessageBoxIcon.Information)

End If

End If

End Sub

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

'Pasa un dato seleccionado del control ListBox2 al control ListBox1

If ListBox2.SelectedIndex <> -1 Then

'Si hay datos seleccionados en el control,

'pasamos el dato seleccionado

ListBox1.Items.Add(ListBox2.SelectedItem)

ListBox2.Items.RemoveAt(ListBox2.SelectedIndex)

Label1.Text = ListBox1.Items.Count & " elemento(s)"

Label2.Text = ListBox2.Items.Count & " elemento(s)"

Else

Page 56: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina156

If ListBox2.Items.Count > 0 Then

MessageBox.Show(msgbox_Pasar_Dato, msgbox_Title,MessageBoxButtons.OK, MessageBoxIcon.Information)

End If

End If

End Sub

End Class

Ejemplo 07

: Elegir un nuevo proyecto Visual Basic y una plantilla de AplicaciónWindows , seleccionar en ubicación la carpeta C:\VBNET\Labs y comonombre escribir Lab04_1 .

: Vamos a crear una aplicación de tipo Proforma, que calcule el precio apagar por un Computador eligiendo las partes básicas y opcionalmente susaccesorios; para esto, el nombre del formulario será frmProforma.vb .

: Realizar el diseño del formulario añadiendo un TabControl con 3TabPages y diseñar las fichas, tal como se muestran en la figuras de

abajo:

Page 57: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina157

Diseño de la primera ficha de frmProforma Diseño de la segunda ficha defrmProforma

Nota: Los GroupBox de lectoras y los ListBox están deshabilitados.

: Luego de realizar el diseño y configurar las propiedades de los controles; loprimero que haremos es escribir una rutina que permita llenar el combo y

Page 58: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina158

las listas, de la siguiente forma:

Public Sub Llenar_Listas()

With cboProcesador.Items

.Add("Pentium II 350 Mhz") : .Add("Pentium III 400 Mhz")

.Add("Pentium III 500 Mhz") : .Add("Pentium III 700 Mhz")

End With

With lstMemoria.Items

.Add("32 Mb") : .Add("64 Mb")

.Add("128 Mb")

End With

With lstDisco.Items

.Add("10 Gb") : .Add("20 Gb")

.Add("30 Gb")

End With

With lstImpresora.Items

.Add("Stylus Color 400") : .Add("Stylus Color 500")

.Add("Stylus Color 700")

End With

With lstScanner.Items

.Add("Pequeño") : .Add("Mediano") : .Add("Grande")

End With

End Sub

: A continuación, se debe llamar a la rutina después que se crea elformulario:

Public Sub frmProforma_Load( )

Page 59: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina159

Llenar_Listas()

End Sub

: Se debe programar el combo y las listas de la primera ficha ConfiguraciónBásica para que al elegir un tipo de procesador, memoria o disco duro, semuestre el precio respectivo:

Public Sub cboProcesador_SelectedIndexChanged(ByVal sender As )

Select Case cboProcesador.SelectedIndex

Case 0 : txtPrecioProcesador.Text = "100"

Case 1 : txtPrecioProcesador.Text = "150"

Case 2 : txtPrecioProcesador.Text = "200"

Case 3 : txtPrecioProcesador.Text = "300"

End Select

End Sub

Public Sub lstMemoria_SelectedIndexChanged(ByVal sender As )

Select Case lstMemoria.SelectedIndex

Case 0 : txtPrecioMemoria.Text = "30"

Case 1 : txtPrecioMemoria.Text = "50"

Case 2 : txtPrecioMemoria.Text = "70"

End Select

End Sub

Public Sub lstDisco_SelectedIndexChanged(ByVal sender As )

Select Case lstDisco.SelectedIndex

Case 0 : txtPrecioDisco.Text = "80"

Case 1 : txtPrecioDisco.Text = "100"

Case 2 : txtPrecioDisco.Text = "120"

End Select

Page 60: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina160

End Sub

: También se debe realizar lo mismo al elegir una opción del grupo debotones, tanto del monitor como del teclado:

Public Sub rbnMonitor14_Click(ByVal sender As Object, )

txtPrecioMonitor.Text = "150"

End Sub

Public Sub rbnMonitor15_Click(ByVal sender As Object, )

txtPrecioMonitor.Text = "200"

End Sub

Public Sub rbnTecladoSimple_Click(ByVal sender As Object, )

txtPrecioTeclado.Text = "15"

End Sub

Public Sub rbnTecladoLujo_Click(ByVal sender As Object, )

txtPrecioTeclado.Text = "30"

End Sub

: Programamos la segunda ficha de Accesorios , iniciando por la casilla delectora de disco, para que al elegir este accesorio se habilite sus opciones(ya que las deshabilitamos en diseño) y al elegir un modelo se muestre suprecio:

Public Sub chkLectoraDisco_Click(ByVal sender As Object, )

gbxLectoraDisco.Enabled = chkLectoraDisco.Checked

End Sub

Public Sub rbnLectoraDisco1_Click(ByVal sender As Object, )

txtPrecioLectoraDisco.Text = "20"

End Sub

Public Sub rbnLectoraDisco2_Click(ByVal sender As Object, )

txtPrecioLectoraDisco.Text = "40"

End Sub

Page 61: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina161

Public Sub rbnLectoraDisco3_Click(ByVal sender As Object, )

txtPrecioLectoraDisco.Text = "50"

End Sub

: De manera similar, lo hacemos con la lectora de CD ROM: Public Sub chkLectoraCD_Click(ByVal sender As Object, )

gbxLectoraCD.Enabled = chkLectoraCD.Checked

End Sub

Public Sub rbnLectoraCD40X_Click(ByVal sender As Object, )

txtPrecioLectoraCD.Text = "40"

End Sub

Public Sub rbnLectoraCD60X_Click(ByVal sender As Object, )

txtPrecioLectoraCD.Text = "50"

End Sub

Public Sub rbnLectoraCD80X_Click(ByVal sender As Object, )

txtPrecioLectoraCD.Text = "70"

End Sub

: Para la opción de Impresoras y Scanner se realiza el mismo procedimiento: Public Sub chkImpresora_Click(ByVal sender As Object, )

lstImpresora.Enabled = chkImpresora.Checked

End Sub

Public Sub lstImpresora_SelectedIndexChanged(ByVal sender As )

lstImpresora.SelectedIndexChanged Select Case lstImpresora.SelectedIndex

Case 0 : txtPrecioImpresora.Text = "100"

Case 1 : txtPrecioImpresora.Text = "200"

Case 2 : txtPrecioImpresora.Text = "300"

End Select

Page 62: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina162

End Sub

Public Sub chkScanner_Click(ByVal sender As Object, )

lstScanner.Enabled = chkScanner.Checked

End Sub

Public Sub lstScanner_SelectedIndexChanged(ByVal sender As )

Select Case lstScanner.SelectedIndex

Case 0 : txtPrecioScanner.Text = "100"

Case 1 : txtPrecioScanner.Text = "200"

Case 2 : txtPrecioScanner.Text = "400"

End Select

End Sub

: Finalmente, programamos los botones de la tercera ficha General , quecalculen el precio a pagar, limpie los datos ingresados y finalice laaplicación respectivamente:

Public Sub btnCalcular_Click(ByVal sender As Object, )

Dim PrePro, PreMem, PreDis, PreMon, PreTec As Integer

Dim PreLDi, PreLCD, PreImp, PreSca As Integer

Dim TotBas, TotAcc, TotVen, TotIGV, TotPag As Single

PrePro = txtPrecioProcesador.Text.ToInt16

PreMem = txtPrecioMemoria.Text.ToInt16

PreDis = txtPrecioDisco.Text.ToInt16

PreMon = txtPrecioMonitor.Text.ToInt16

PreTec = txtPrecioTeclado.Text.ToInt16

PreLDi = txtPrecioLectoraDisco.Text.ToInt16

PreLCD = txtPrecioLectoraCD.Text.ToInt16

PreImp = txtPrecioImpresora.Text.ToInt16

PreSca = txtPrecioScanner.Text.ToInt16

Page 63: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina163

TotBas = PrePro + PreMem + PreDis + PreMon + PreTec

TotAcc = PreLDi + PreLCD + PreImp + PreSca

TotVen = TotBas + TotAcc

TotIGV = (0.18 * TotVen).ToSingle

TotPag = TotVen + TotIGV

txtTotalBasico.Text = TotBas.ToString

txtTotalAccesorios.Text = TotAcc.ToString

txtTotalVenta.Text = TotVen.ToString

txtTotalIGV.Text = TotIGV.ToString

txtTotalPagar.Text = TotPag.ToString

End Sub

Public Sub btnNuevo_Click(ByVal sender As Object, )

Dim X As Control

For Each X In Controls

If ((TypeOf X Is TextBox) Or (TypeOf X Is ComboBox)) Then

X.Text = ""

End If

Next

End Sub

Public Sub btnSalir_Click(ByVal sender As Object, )

End

End Sub

Ejercicio Propuesto

Esta aplicación nos permitir realizar una pro forma de venta de una tiendacomercial de computo, consta de dos formularios, uno que es el principalllamado frmAplicacion90 y otro llamado frmInfo, esta aplicación está basada enarreglos y datos almacenados en el programa, con el fin de darnos cuenta quetan importante es tener un diseñador de base de datos, ya que la aplicación sin

Page 64: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina164

base de datos que maneje información se haría engorrosa y los datosno estarían tan seguros, veamos un ejemplo de este tipo de aplicación sin unabase de datos, y como seria su programación, primero veremos por formulario,así que el primero ser el formulario frmInfo.

frmInfo

Este formulario tendrá un GropuBox que conservara su propio nombre y losLabels de este formulario que solo nos mostraran lo que decepcionandel otro formulario, tendrán los siguientes nombres, de acuerdo a suetiqueta de su costado; lblMainboard, lblProcesador, lblDiscoDuro,lblMemoriaRAM, lblTarjVideo,blTarjRed, lblCase.

Y el único que contendrá el formulario va a ser en el control GroupBox1

GroupBox1 (Evento Click)

Me.Close()

frmAplicacion90

Page 65: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina165

Ahora pondremos los nombres respectivos a cada control, en este caso, yosolo daría referencia a que control me refiero y ustedes deben de saberidentificar qué control es. Ok!, por ejemplo en qué forma se está mostrando losButtons, los GroupBox y el PictureBox.

QUE ES LO QUE SE PIDE?

Para este caso se pide que esta aplicación se pueda escoger un articulo y nosmuestre su imagen referencial, la marca y el modelo del artículo, y a su vez nosmuestre el precio unitario y el precio total, existe un caso en quecuando

selecciona un CPU, se nos pueda mostrar su descripción de ella nada mas,también

podremos añadir los artículos seleccionados al carrito, y también eliminar

elementos seleccionados y nos debe de mostrar el total de todos los productos,el

subtotal y el IGV. Y para los que les guste hacerlo ms perfecto, también lepueden

Page 66: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina166

agregar un botón de impresión donde se imprimir el formulario en pantalla.

Una vez ya tenido el diseños del formulario listo y sus descripciones que debetener, procederemos a codificación.

Realizar la siguiente aplicación

Seleccionar elproducto,ingresar lacantidad yalmacenar enuna listasegún comose muestra enla imagen Ud.Debe tener encuenta quecuandoseleccione unítem de lalista se debenseleccionartodos y pulsael botóneliminar osuprimir ese

ítem se eliminara en todas las listas.

Almacenar en una lista solo a los números primos que existen entre el 1 y el 20

Almacenar dentro un combo box el ingreso de un producto y cuando este seaseleccionado de la lista desplegable muestra en un list box la cantidad devocales, consonantes y espacios en blanco que tiene el ítem.

Page 67: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina167

Practica N° 11.- Ingrese por teclado en una caja de texto la hora en formato de 24 horas yen otra caja de texto la cantidad de minutos al hacer clic en un boton deberasalir la hora en formato de 12 horas por ejemplo si se ingresa 23 en una caja yen la otra 12 el resultado seria 11:12:PM

2.- Ingrese la cantidad de minutos hablados por una persona y escoja el tipo dellamada (Local, Nacional, Internacional).Se visualizara el importe de la llamadasabiendo que por los 3 primeros minutos se paga S/ 1.00 y por cada minutoadicional se paga 0.50 en caso sea local si es nacional se incrementa el 25% ysi es internacional se incrementa el 60% a los precios por minuto.

3.- Ingresar el nombre de un trabajador, la cantidad de hijos y su sueldo, si estetiene hijos se le dará una bonificación de S./40.00 por hijo y si no tiene hijos sele dara el 25% de su sueldo se deberá mostrar la bonificación y el sueldo final.

4.- Ingrese por teclado dos números y al escoger un signo de operación sedebera mostrar el resultado de la operación.

5.- Ingrese un numero máximo de 2 cifras si el numero es de una cifra sedeberá mostrar cuanto falta para convertirse en un numero de 2 cifras, y si esde 2 cifras se deberá mostrar cuanto falta para convertirse en un numero de 3cifras.

6.- Ingrese un numero cualquiera y muestre la cantidad de cifras que tienesegún sea el caso.

Ejemplo: 203 = Tiene 3 cifras , 45678 = Tiene 5 cifras tome en cuenta que elnumero máximo a ingresar es un millon..

7.- Ingrese por teclado el nombre, año de nacimiento y sexo de una persona (Mo F),se deberá mostrar uno de los siguientes mensajes.

- Varon mayor de edad

- Varon menor de edad

- Dama mayor de edad

-Dama menor de edad

8.- Ingrese un numero y visualícelo en romano.

Page 68: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina168

9.- Ingrese por teclado el día de nacimiento y el mes de nacimiento de unapersona al hacer clic se deberá mostrar su signo zodiacal así como tambiéndeberá aparecer la imagen del signo Zodiacal en un control PictureBox.

10.- Se deberá desarrollar un algoritmo en el cual se deberá ingresar el nombrede un alumno y se deberá escoger el turno en el que estudia (M , T y N) asicomo tambien el ciclo (I, II, III, IV, V, VI y SIDET) y la carrera (CI, Enfermeria yAdministración) se debera calcular el pago de su pension en base a lossiguientes datos:

el precio por carrera es:

CI = 320.00

Enfermeria = 280.00

Administración = 270.00

Ademas que dependiendo del ciclo en el que estan se pagara un recargo delprecio de 10,20,30,40,50,60 y 70% (para sidet). Asi como tambien si es delturno se debera recargar 10% mas solo si esta en I, II, o III ciclo, si es delturno se recarga el 15 % mas solo si esta en I, o II y por utlimo si es delturno se se la hara un descuento del 15 % solo si esta en SIDET

Al finalizar solo se debe mostrar el monto de la pension.

11.- Realizar el siguiente formulario:

.

Se deberá ingresar el largo y el anchodel terreno y conforme vayandigitándolo deberá salir el total (Largo* ancho)

Se deberá ingresar el precio pormetro y al escoger una categoría elprecio se incrementara en un 10, 20,y 30 % respectivamente según lacategoria, ademas de salir el preciototal que sera el total de area * elprecio y si se escogio en tipo dealquiler Contado se le hara unDescuento de 10% al precio total y sies credito se le hara un recargo de 15%.

Page 69: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina169

Finalmente se deberá escoger si se pagara alumbrado, parques o serenazgosacando los % correspondientes al precio total según indica el fomulario elprecio final debera salir al hacer clic en el boton calcular.

Practica N° 11.- Ingrese un numero y Genere las siguientes series: (el resultado se mostraraen un label o en un text)

• 1,3,5,7,.....• -1,+3,-5,+7...• 1,3,2,5,3,7,4,9,5,11....• 0,1,1,2,3,5,8,13...(Serie Fibonacci)

2.- Genere 100 numeros aleatorios y diga cuantos primos mayores a 50hay,perfectos menores a 10 hay, pares e impares.

3.- Genere 100 numeros aleatorios y al finalizar diga cual es el mayor y elmenor.

4.- Ingrese un numero de cualquier cifra y mostrarlo en forma invertida

5.- Ingrese un numero y conviértalo en base 2

6.- Ingrese una cadena y muestre lo siguiente

• La cadena en forma invertida• Diga cuantas vocales tiene• Diga cuantos espacios en blancos hay

7.- Ingrese una cadena y conviértalo en mayúscula y en minusculas sin utilizarlas funciones ucase y lcase.

8.- Genere 10 numeros aleatorios y si el numero es par se debera incrementarel numero con la suma de su raiz cuadrada,si el numero es impar se deberaincrementar el numero con la suma del seno del numero. AL finalizar se debemostrar la suma de todos los numeros.

9.- Ingrese Una fecha y diga cuantos dias faltan para acabar el año, cuantosdias han pasado desde esa fecha hasta la fecha actual, que dia cae esa fecha(Lunes,martes), y muestre la misma fecha en el siguiente formato: Lunes 15de Abril de 2003 (Por ejemplo)

10.- Ingrese en una caja de texto una cadena y al finalizar diga cuantaspalabras tiene dicha cadena y cual es la cantidad de caracteres que tiene lapalabra con mayor longitud

11.- Ingrese un usuario y un password y si se equivoca tres veces debe salir

Page 70: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina170

de la aplicación

12.- Realice el siguiente formulario:

En este formulario se debera escoger un color y un objeto(checks,text,options)y al hacer clic en fondo o en letra debera cambiar al color que se ecogio ya seael fondo(backcolor o la letra(forecolor)

Luego al hacer clic en cursiva (font.italic) o en negrita (font.bold) o subrayado(font.underline) se debera cambiar la apariencia de los controles que se

escogio

(Checks,

text,Options)

13.-Realice el

siguiente formulario:

Cuando se haga clic en Mostrar Resultado se debe mostrar la edad deltrabajador, el tiempo de servicio y el codigo que se generara de la siguientemanera: el año de ingreso luego la letra o según su sexo , los 2primeros caracteres de su apellido paterno, los 2 primeros caracteres de suapellido materno, el primer carácter de su nombre y un correlativo

Ademas al ingresar sus nombres al perder el enfoque se debera cambiar eltexto por mayúsculas y al entrar al enfoque de algun texto el color de fondodebera cambiar y al salir del enfoque debera regresar al color original que tuvo.

Page 71: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina171

Semana 4 : Uso de Controles ComunesLos controles radio y checkbox

El control RadioButton

Es el control de selección de opciones, el cual permite seleccionar una opcion, de unconjunto de opciones.

Este control se utiliza en forma grupal, agrupados por un control GroupBox.

Las propiedades de este control:

Los eventos que utiliza con mayor frecuencia el Button.

Ejemplo 8

Desarrolle un programa donde al seleccionar un estado civil visualice:Soltero: Sueldo 450, Tiempo de

Servicio 5, No Hijos: 2Casado: Sueldo 250, Tiempo de

Servicio 2, No Hijos: 0

Diseño de controles.

Page 72: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina172

btnsalir (Evento clic)

Me.Close()

rdbsoltero (Evento CheckedChanged)

lblestado.Text = Nº de Hermanos:lblsueldo.Text = 200.00

lbltiempoest.Text = Edad:txttiempest.Focus()

rdbcasado (Evento CheckedChanged)

lblestado.Text = Nº de Hijos :lblsueldo.Text = 250.00

lbltiempoest.Text = Tiempo de Servicio :txttiempest.Focus()

frmaplicacion (Evento load)

Iniciar()

btnnuevo (Evento clic)

Iniciar()

Función Iniciar

Sub Iniciar()

txtnombre.Text = :txttiempest.Text = :txtnumest.Text =

rdbsoltero.Checked = True :lblestado.Text = Nº de Hermanos

lblsueldo.Text = 200.00 :lbltiempoest.Text = Edad

txtnombre.Focus()

End Sub

El control CheckBoxEs el control de selección de opciones, el cual permite seleccionar una opción en elcontrol: marcado o desmarcado.

Este control se utiliza en forma individual, a diferencia del RadioButton. Las propiedades de

Page 73: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina173

este control:

Los eventos que utiliza con mayor frecuencia el Button.

Ejemplo 9

Diseñe un programa para calcular el monto de su remuneración. Ingrese sunombre, seleccione su categoría:

Empleado Sueldo500Obrero Sueldo 550Auxiliar Sueldo 200

Seleccione:

Bonificación: 25% del sueldo y movilidad: 15% del sueldo.

El monto es lasuma de susingresos.

Page 74: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina174

Private bonificacion, movilidad As Single

Private Sub RadioButton1_CheckedChanged() HandlesRadioButton1.CheckedChangedTXTSUELDO.Text = 500End Sub

Private Sub RadioButton2_CheckedChanged() HandlesRadioButton2.CheckedChangedTXTSUELDO.Text = 550End Sub

Private Sub RadioButton3_CheckedChanged() HandlesRadioButton3.CheckedChangedTXTSUELDO.Text = 200End Sub

Private Sub CheckBox1_CheckedChanged() HandlesCheckBox1.CheckedChangedIf CheckBox1.Checked = True Then

bonificacion = 0.25 * Convert.ToSingle(TXTSUELDO.Text)Else: bonificacion = 0End IfTXTMONTO.Text=Convert.ToSingle(TXTSUELDO.Text)+bonificacion +movilidadEnd Sub

Private Sub CheckBox2_CheckedChanged() HandlesCheckBox2.CheckedChangedIf CheckBox1.Checked = True Then

movilidad = 0.15 *Convert.ToSingle(TXTSUELDO.Text) Else: movilidad = 0End IfTXTMONTO.Text = Convert.ToSingle(TXTSUELDO.Text) + bonificacion +movilidadEnd Sub

Page 75: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina175

Private Sub BTNLIMPIAR_Click() Handles BTNLIMPIAR.Click TXTEMPLEADO.Text = TXTSUELDO.Text = TXTMONTO.Text = RadioButton1.Checked = False RadioButton2.Checked = FalseRadioButton3.Checked = False CheckBox1.Checked = FalseCheckBox2.Checked = FalseEnd Sub

El control PictureBoxEste control nos permite mostrar una imagen de una ruta específica.

Comentarios

Se suele utilizar el control PictureBox para mostrar gráficos de un archivo demapa de bits, metarchivo, icono, JPEG, GIF o PNG.

Establezca la propiedad image en el objeto Image que desea mostrar, ya seaen tiempo de diseño o en tiempo de ejecución. Además, puede especificar laimagen estableciendo la propiedad imagelocation y cargar la imagen de formasincrónica utilizando el método Load o de forma asincrónica mediante elmétodo LoadAsing.

Nota:Si desea utilizar la misma imagen en varios controles PictureBox, cree unclon de la imagen para cada control PictureBox. Obtener acceso a la mismaimagen desde varios controles hace que se produzca una excepción.

La propiedad sizemode, establecida en los valores en la enumeraciónPictureBoxSizeMode, controla el recorte y la posición de la imagen en el áreade presentación. Se puede cambiar el tamaño del área de presentación entiempo de ejecución con la propiedad ClientSize.

De forma predeterminada, el control PictureBox se muestra sin bordes. Paraproporcionar un borde estándar o tridimensional, utilice la propiedadBorderStyle con el fin de distinguir el cuadro de imagen del resto del formulario,incluso si no contiene ninguna imagen. El control PictureBox no se puedeseleccionar, lo que significa que no puede recibir el foco de entrada.

Page 76: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina176

Ejemplo 10

En la figura 1 tienes el formulario en tiempo de diseño, que como puedes veres muy simple:Una caja de textos(txtFic) para el nombredel fichero a mostrar, unbotón (btnExaminar)para seleccionar elfichero a mostrar, unPictureBox (pic) paramostrar la imagen, tresRadioButtons(optRotarIzq,optRotarDer yoptRotarLibre) paradiferentes opciones derotación y un botón pararotar la imagen(btnRotar).

Imports Microsoft.VisualBasicImports SystemImports System.Windows.FormsImports System.Drawing

Public Class Form1 Private inicializando As Boolean = True

Private Sub Form1_Load() Handles MyBase.Load pic.SizeMode = PictureBoxSizeMode.StretchImage txtFic.Text = My.Settings.txtPic ' Si existe la imagen, cargarla If System.IO.File.Exists(txtFic.Text) Then pic.Load(txtFic.Text) End If Select Case My.Settings.optRotar Case -1 optRotarIzq.Checked = True optRotarDer.Checked = False optRotarLibre.Checked = False

Page 77: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina177

Case 0 optRotarIzq.Checked = False optRotarDer.Checked = True optRotarLibre.Checked = False Case Else optRotarIzq.Checked = False optRotarDer.Checked = False optRotarLibre.Checked = True End Select inicializando = False End Sub

Private Sub optRotarIzq_CheckedChanged() HandlesoptRotarIzq.CheckedChanged, optRotarDer.CheckedChanged, optRotarLibre.CheckedChanged ' Este evento se produce al asignar el valor inicial ' y si eso ocurre, no vale de nada el valor de Settings If inicializando Then Exit Sub Select Case True Case optRotarIzq.Checked My.Settings.optRotar = -1 Case optRotarDer.Checked My.Settings.optRotar = 0 Case Else My.Settings.optRotar = 1 End Select

End Sub

Private Sub txtFic_KeyUp() Handles txtFic.KeyUp If e.KeyCode = Keys.Return Then e.Handled = True ' Si existe la imagen, cargarla If System.IO.File.Exists(txtFic.Text) Then pic.Load(txtFic.Text) End If End If End Sub

Private Sub btnExaminar_Click( ) Handles btnExaminar.Click Dim ofd As New OpenFileDialog With ofd .FileName = txtFic.Text .Filter = "Imágenes|*.jpg;*.png;*.gif;*.bmp|Todos (*.*)|*.*" If .ShowDialog = DialogResult.OK Then txtFic.Text = .FileName My.Settings.txtPic = txtFic.Text pic.Load(.FileName) End If

Page 78: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina178

End With End Sub

Private Sub btnRotar_Click() Handles btnRotar.Click Dim bmp As Image = pic.Image If optRotarIzq.Checked Then bmp.RotateFlip(RotateFlipType.Rotate90FlipXY) ElseIf optRotarDer.Checked Then bmp.RotateFlip(RotateFlipType.Rotate270FlipXY) Else bmp.RotateFlip(RotateFlipType.Rotate90FlipNone) End If pic.Image = bmp End Sub

El control DateTimePicker

Este control permite la selección e introducción de fechas en una caja de textocon capacidades extendidas, o bien mediante un calendario desplegable que

se mostrará al pulsar el botón de expansión quecontiene.

Ejemplo 11

Private Sub frmDatosPersonal_Load() HandlesMyBase.Load' modificar fecha del DateTimePicker

Me.dtpFNacim.Text = "15/06/2002"

End Sub

Podemos restringir el rango de fechas a mostrar por este control conlas propiedades MinDate y MaxDate. Si queremos, por otra parte, quela fecha se muestre con un formato personalizado, aplicaremos dichoformato mediante la propiedad CustomFormat, teniendo en cuenta que nose hará efectivo hasta que a la propiedad Format no le asignemos el valorCustom.

El botón btnCambiosFecha del formulario realiza algunas modificaciones porcódigo sobre el control DateTimePicker dtpFNacim del formulario

Private Sub btnCambiosFecha_Click(ByVal sender As System.Object, ByVal eAs

System.EventArgs) Handles btnCambiosFecha.Click

' configurar por código el

' control DateTimePicker

Page 79: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina179

Me.dtpFNacim.MinDate = "1/4/2002"

Me.dtpFNacim.MaxDate = "1/10/2002"Me.dtpFNacim.CustomFormat = "d-MMM-yy"

Me.dtpFNacim.Format = DateTimePickerFormat.Custom

End Sub

Ejemplo 12

Determinar cuál es el primer y ultimo día del mes.

Dim ultimoDia As Date

Function PrimerDiaDelMes( ) AsDate PrimerDiaDelMes =DateSerial(Year(dtmFecha),Month(dtmFecha), 1) End Function

Function UltimoDiaDelMes(ByValdtmFecha As Date) As Date UltimoDiaDelMes =DateSerial(Year(dtmFecha),Month(dtmFecha) + 1, 0) End Function

Private Sub Button2_Click( )Handles Button2.Click

MsgBox(PrimerDiaDelMes((DateTimePicker1.Value))) End Sub

Private Sub Button3_Click( ) Handles Button3.Click MsgBox(UltimoDiaDelMes((DateTimePicker1.Value))) End Sub

Funciones de cadenas

Se denomina CADENA a una sucesión de caracteres. Una cadena puedetener uno o varios caracteres alfanuméricos. Una cadena es también unasucesión de números.Ejemplo de cadenas:

STR._ Cuando los números se conviertan a cadenas, siempre se reservará unespacio inicial para el signo de Number. Si Number es positivo, la cadenadevuelta contiene un espacio inicial; y el signo más se da por supuesto. Un

Page 80: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina180

número negativo incluirá el signo menos (-) y ningún espacio inicial.

Dim MyString As StringMyString = Str(459) ' Returns " 459".MyString = Str(-459.65) ' Returns "-459.65".

Left (cadena, n)._ Extrae los n primeros caracteres de una cadena,comenzando por la izquierda.

Si cadena = Curso de Visual Basic (Para todos los ejemplos)

Right (cadena, n)._ Extrae lo n últimos caracteres de la cadena

Para utilizar las dos funciones anteriores que son propias de visual basicemplear

Microsoft.VisualBasic.Funcion

Dim myString As String = "Curso de Visual Net"Dim subString As StringsubString = Microsoft.VisualBasic.Right(myString, 3) ' Retorna "Net"

subString = Microsoft.VisualBasic.Left(myString, 5) ' Returns "Curso"

Mid (cadena, m, n)._Extrae n caracteres de la cadena, siendo el primercarácter extraído el que ocupa el lugar m.

Resultado = Mid (cadena, 3, 10) ----> Resultado = rso de Vis

Segundo formato desde una posición hasta la posición final

Resultado=Mid(cadena,6) à de visual net

LCase (cadena)._ Devuelve otra cadena igual, pero con todos los caracteres en minúsculas.

(LCase = Lower Case)

Resultado = Lcase (cadena) ----> Resultado = curso de visual basic

UCase (cadena)._ Devuelve otra cadena igual, pero con todos loscaracteres enmayúsculas. (UCase = Upper Case)

Resultado = UCase (cadena) ----> Resultado = CURSO DE VISUAL BASIC

Len (cadena)._ Devuelve la longitud de la cadena

Resultado = Len (cadena) ----> Resultado = 21

Space(n)._ Devuelve una cadena formada por n espacios.

Resultado = "A" + Space (6)+ "B" ----> Resultado = A B

Page 81: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina181

LTrim._ Elimina los posibles espacios que tenga una cadena por su izquierda.

Rtrim._ Elimina los posibles espacios que tenga una cadena por su derecha.

Trim._ Elimina los espacios que tenga una cadena, tanto por su izquierda como

por su derecha. (No elimina los espacios centrales de la cadena)

InStr._ (cadena, cadena1) Busca la cadena1 dentro de cadena ydevuelve el número de orden dentro de cadena donde se encuentra la primeraletra de cadena1

Resultado = InStr (cadena, "sua") ----> Resultado = 12

StrConv._ Convierte una cadena de caracteres en otra, según lasinstrucciones que le sigan. Puede sustituir a UCase o LCase si lainstrucción es UpperCase o LowerCase respectivamente, o poner laprimera letra de todas las palabras de la cadena en mayúsculas, si lainstrucción es ProperCase.

Resultado = StrConv (cadena, UpperCase) ----> Resultado = CURSO DEVISUAL BASIC

Resultado = StrConv (cadena, LowerCase) ----> Resultado = curso de visualbasic

Resultado = StrConv (cadena, ProperCase) ----> Resultado = Curso DeVisual Basic

En este ejemplo se pone un texto todo en minúsculas.

Dim sText, sNewText As String

sText = "Hello World"

sNewText = StrConv(sText, VbStrConv.LowerCase)

Debug.WriteLine (sNewText) ' Outputs "hello world".

STRING._ Tipo de dato ,Para obtener una lista de todos los miembros de estetipo,

Obj.Metodo

Metodo.-Remove,Insert,copy, touuper,tolower,indexof,len,substring, etc

5.2.- FUNCIONES CON NUMEROS

Funcion Devuelve

Abs Valor absoluto de un numero real

Int Parte entera de un real

Page 82: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina182

Rnd Un numero al azr entre 0 y 1

Exp Exponecial de un numero real es decir e = 2.71828

El objeto Math.funciones

Math.round(n,d) .- Redondea , con ciertos numeros de decimals

Math.Round(3.45, 1) 'Returns 3.4.Math.Round(3.46, 1) 'Returns 3.5.

Math.PI .- El valor de este campo es 3,14159265358979323846

Math.acos.- Devuelve el ángulo cuyo coseno es el número especificado

Math.ceiling.- Devuelve el número entero más pequeño mayor o igual que elnúmero especificado.

Math.ceiling(3.1) à 4

Math.Floor.- Devuelve el número entero más grande menor o igual que elnúmero especificado

Math.Floor(3.1) à3

Math.sqrt(n).- Devuelve la raíz cuadrada de un número especificado.

Math.pow(n).- Devuelve un número especificado elevado a la potenciaespecificada

Aplicación 1.- Empleando funciones de cadena

º

Codificación:

Public Class FRMCADENA

Private Sub BTNSPLIT_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles BTNSPLIT.Click

Page 83: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina183

Dim CAD As String

Dim VEC() As String

Dim I As Integer

CAD = TXTCAD.Text.Trim

ListBox1.Items.Clear()

VEC = CAD.Split(" ".ToCharArray)

For I = 0 To UBound(VEC)

ListBox1.Items.Add(VEC(I))

Next

End Sub

Private Sub FRMCADENA_Load(ByVal sender As System.Object, ByVal eAs System.EventArgs) Handles MyBase.Load

End Sub

Private Sub FRMCADENA_Activated(ByVal sender As Object, ByVal e AsSystem.EventArgs) Handles MyBase.Activated

TXTCAD.Text = "esto es una prueba"

End Sub

Private Sub HandleCheckedChanged(ByVal sender As System.Object, ByVale As System.EventArgs) Handles rbn1.CheckedChanged,rbn2.CheckedChanged, rbn3.CheckedChanged, rbn4.CheckedChanged,rbn5.CheckedChanged, rbn6.CheckedChanged, rbn7.CheckedChanged

DisplayText(CType(sender, RadioButton))

End Sub

Private Sub DisplayText(ByVal rbtn As RadioButton)

Dim cadr, texto As String

texto = TXTCAD.Text.Trim

If rbtn Is rbn1 Then

cadr = texto.Insert(3, " ojo")

Page 84: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina184

ElseIf rbtn Is rbn2 Then

cadr = texto.Replace("prueba", "practica")

ElseIf rbtn Is rbn3 Then

'extraer apartir de la izquierda

cadr = texto.Substring(0, 3)

ElseIf rbtn Is rbn4 Then

'borrar los carect. desde la posicion 3 cinco caracteres

cadr = texto.Remove(3, 5)

ElseIf rbtn Is rbn5 Then

'extraer apartir de la derecha

cadr = texto.Substring(texto.Length - 3, 3)

ElseIf rbtn Is rbn6 Then

' extraer apartir de una posicion

cadr = texto.Substring(4, 5)

ElseIf rbtn Is rbn7 Then

' extraer apartir de una posicion

cadr = "posicion " & texto.IndexOf("t").ToString

End If

lblres.Text = cadr

End Sub

End Class

Ejemplo 2.-Empleando el Split

Mostrando el formulario principal

Controles: Txtoutput(textbox)

TxtInput

TxtSeparator

Page 85: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina185

Codificación;

Formulario frm3 (codificacion)

Public Class Form3

#Region " Windows Form Designer generated code "

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles Button1.Click

Dim x As New Form1()

x.ShowDialog()

End Sub

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

Dim x As New Form2()

x.ShowDialog()

End Sub

End Class

b) el formulario 1.- Pasando una cadena a un vector

Public Class Form1

Private Sub btnSplit_Click(ByVal sender As System.Object,_

ByVal e As System.EventArgs) Handles btnSplit.Click

Dim TempArray() As String

Page 86: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina186

Dim CurIndex As Integer

lstOutput.Items.Clear()

If txtInput.Text.Length > 0 And _

txtSeparator.Text.Length > 0 Then

TempArray = txtInput.Text.Split(txtSeparator.Text)

For CurIndex = 0 To TempArray.GetUpperBound(0)

lstOutput.Items.Add(TempArray(CurIndex))

Next

End If

End Sub

End Class

-El formulario2 .-(join)

Public class form2

Private Sub btnJoin_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles btnJoin.Click

Dim TempArray() As String

Dim RandomInteger As New System.Random()

Dim CurIndex As Integer

Dim NumElements As Integer = Convert.ToInt32(txtArraySize.Text)

'Generate random numbers, put in TempArray

If NumElements > 0 Then

ReDim TempArray(NumElements)

For CurIndex = 0 To NumElements - 1

TempArray(CurIndex) = RandomInteger.Next(1000).ToString

Next

End If

'Join array elements into a comma-separated string

Page 87: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina187

txtOutput.Text = String.Join(",", TempArray)

End Sub

End Class

Aplicación 3.- Conversión de un numero al sistema binario y hexadecimal

Private Sub Cmdhexa_Click(….)

Dim cad As String , N, R as integerDim n%

n = Val(Text1.text) : cad = ""

Do While n <> 0 Hacer mientras n sea diferente a cero

r = n Mod 16 :n = n \ 16

If r > 9 Then

cad = cad + Chr(55 + r)

Else

cad = cad + Str(r)

End If

Loop

Lbr2 = StrReverse(cad)

End Sub

Aplicación 4.-Ingresando una frase por teclado

invertir las palabras en su misma posición , luego visualizar la misma frase como una

pirámide cuyo vértice es el centro de la frase.

Eventos Desarrollados

Private Sub CmdBin_Click(….)

Dim cad as String

Dim N, r as String

n = Val(TxtNum.text)

cad = ""

Do While n <> 0

r = n Mod 2

Page 88: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina188

Private Sub CmdInvertir_Click( sender as object ,

e as Eventargs)

Dim PA, P, K, M as Integer

Dim Cad, palabra, scad as String

cad = Trim(Text1.text) la Frase ingresada

scad = "" Cadena Vacia Para Formar la frase invertida

PA = 1 es la posición inicial de la palabra

For M = 1 To Len(cad)

Se pregunta si el caracter es un espacio blanco o M es la ultima posicion

If Mid(cad, M, 1) = " " Then

If M = Len(cad) Then P =M Else P = M - 1

PALABRA = "" para formar la palabra invertida

For k = PA To P

PALABRA = Mid(cad, k, 1) + PALABRA

Next

scad = scad + " " + PALABRA

End If

PA = P + 1

Next

Text2.text = scad Muestra cada palabra de forma invertida

End Sub

Private Sub CmdPiramide_Click()

List1.Items.Clear

cad = Trim(Text1.text) Almacena el valor de la Frase

List1.Width = Len(cad) * 100 El ancho queda definido por la frase en centenas

P = Len(cad) \ 2 + 1 Obtiene la posición media de la frase

PL = Len(cad): a = 1: con = 1

CR = 1 Separamos en dos mitades la parte derecha un contador CR

Page 89: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina189

CI = 1 Un contador para la parte Izquierda

cad3 = Space(P) & Mid(cad, P, 1) Coloca en el Vertice la Primera letra con espacios

List1.AddItem cad3

For I = 1 To P

If P - CI < 1 Then Exit For si es un valor menor a uno sale del for

cad1 = Space(P - CI) & Mid(cad, P - CI, CI) Cadena de la Izquierda

cad2 = Mid(cad, P + 1, cr) Cadena de La derecha

cad4 = cad1 & Trim(cad3) & cad2 Unimos las tres Cadenas

List1.AddItem cad4 Lo Colocamos en la lista

CI = CI + 1

cr = cr + 1

Next

End Sub

Ejercicios

Modifique el ejemplo anterior para mostrar en una lista los siguiente:

1) C colocar las palabras de izquierda a derecha

Cr

Cri

Cris

Crist....

2) Colocar las palabras de derecha a Izquierda3) Colocar cada palabra en una linea ,por ejemplo

Cristo Es Nuestra Vida

4) Contabilizar la cantidad de palabras5) que palabra tiene menor longitud6) Mostrar la palabra que tenga mayor longitud

7.-

Page 90: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina190

-

8.-Generación de los carnet de esalud

De la misma forma es para 10 y 11 posición con el materno, claro si la longituddel apellido es menor de cuatro caracteres se cogerá el tercero, la 12 posiciónes el Primer carácter del nombre y los tres últimos un correlativo para este casoasumirlo como un contador de registro.

3.-Verificación de Códigos

El numero de Ruc se genera a partirdel numero de libreta electoral , en eltext1 solo se ingresara números, luegoeste numero se descompone de lasgte manera:

Sm= D1*1 + D2*2 + D3*3 +.....+D8*8

Donde D1, D2 ...son los dígitos

Luego esta suma se divide entre 13, suresiduo se le concatena con elnumero electoral al final.

Los dos primeros dígitos puden ser:

10 = Persona natural

12= Persona Jurídica

E l numero de Carnet es de 15caracteres y se forma de lasiguiente manera:

Ejm:

Nombre Claudia

Ap. Paterno: Moreno

Ap. Materno: Lee

Fecha de Nac. 26/11/80

Sexo : F

Nro: generado

8011260MELEC001

Sexo 0=Femen 1=Masc

8 y 9 Corresponde al Primer ycuarto carac. Del Paterno

Page 91: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina191

Para verificar un código se procede de la siguiente manera:

Suma= D1*6 + D2*5+D3*4+ D4*3 + D5* 2 + D6*1

Esta suma se divide entre 7 y su residuo se le asigna una letracorrespondiente de acuerdo a:

Residuo

residuo 0 1 2 3 4 5 6

Letra A B C D E F G

Si la letra es igual que el ultimo carácter del código entonces mostrar códigocorrecto de lo contrario código incorrecto, pintarlo con azul y rojorespectivamente.

Funciones con fechas.

Las fechas son cadenas especiales. Visual Basic sabe obtener y tratar lainformación relativa a la fecha y la hora. Dispone para ello de una declaraciónde variable: Date. Una variable declarada como date puede contener unafecha, una fecha y una hora o una hora solamente.

Dim MyDate As DateDim MyMonth As IntegerMyDate = #2/12/1969# ' Assign a date.MyMonth = Month(MyDate) ' MyMonth contains 2.Now._Devuelve la fecha y hora actual.

WeekDay._ Devuelve el día de la semana (En número, 1=Domingo,2=Lunes,...)

Dim MyDate As DateDim MyWeekDay As IntegerMyDate = #2/12/1969# ' asigna una fechaMyWeekDay = Weekday(MyDate) ' MyWeekDay contains 4

Day._ Obtiene el día, a partir de una fecha

Dim MyDate As Date

El código ingresado será de7 caracteres los seisprimeros son dígitos y elultimo una letra deverificación:

Page 92: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina192

Dim MyDay As IntegerMyDate = #2/12/1969# .MyDay = Microsoft.VisualBasic.Day(MyDate) ' MyDay contains 12.

Month._ Obtiene el mes a partir de una fecha.

MyMonth = Month(MyDate) ' MyMonth contains 2.

Year._ Obtiene el año a partir de una fecha.

MyYear = Year(MyDate) ' MyYear contains 1969.

Hour._ Obtiene la hora a partir de una hora

Minute._ Obtiene el minuto a partir de una hora.

Second._ Obtiene el segundo a partir de una hora.

DateAdd._ Añade un intervalo de tiempo a una fecha

Interval

Requerido. Valor de enumeración DateInterval o expresión String querepresenta el intervalo de tiempo que se desea agregar.

Number

Requerido. Double. Expresión de punto flotante que representa elnúmero de intervalos que se desea agregar. Number puede ser un valorpositivo (para obtener fechas u horas futuras) o negativo (para obtenerfechas u horas pasadas). Puede contener una parte decimal cuandoInterval especifica horas, minutos o segundos. Para otros valores deInterval, se omite cualquier parte decimal de Number.

DateValue

Requerido. Date. Expresión que representa la fecha y la hora a la quedebe agregarse el intervalo. El propio DateValue no se modifica en elprograma que realiza la llamada.

ValoresEl argumento Interval puede tener uno de los siguientes valores:

Valor de enumeración Cadena Unidad de intervalo de tiempo agregada

DateInterval.Day d Día; truncado al valor integral

DateInterval.DayOfYear y Día; truncado al valor integral

Page 93: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina193

DateInterval.Hour h Hora; redondeada al milisegundo máscercano

DateInterval.Minute n Minuto; redondeado al milisegundo máscercano

DateInterval.Month m Mes; truncado al valor integral

DateInterval.Quarter q Trimestre; truncado al valor integral

DateInterval.Second s Segundo; redondeado al milisegundo máscercano

DateInterval.Weekday w Día; truncado al valor integral

DateInterval.WeekOfYear ww Semana; truncada al valor integral

DateInterval.Year yyyy Año; truncado al valor integral

Dim NextTime As Date = Now ' Current date and time.NextTime = NextTime.AddDays(3.4) ' Increment by 3 2/5 days.

En este ejemplo se toma una fecha y mediante la función DateAdd, se muestrala fecha correspondiente un número especificado de meses en el futuro.

Dim Msg, Number, StartDate As String 'Declare variables.Dim Months As DoubleDim SecondDate As DateDim IntervalType As DateIntervalIntervalType = DateInterval.Month ' Especifica intervalos en meses.StartDate = InputBox("Ingrese fecha ")SecondDate = CDate(StartDate)Number = InputBox("Ingrsa el numero de meses a adicionar")Months = Val(Number)Msg = "New date: " & DateAdd(IntervalType, Months, SecondDate)MsgBox (Msg)

DateDiff._ Obtiene el intervalo de tiempo entre dos fechas

DateDiff(intervalo, fecha1, fecha2[, primerdíasemana[,primerasemanaaño]])

Intervalo Descripción

yyyy Año

Q Trimestre

Page 94: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina194

M Mes

Y Día del año

D Día

W Día de lasemana

Ww Semana

H Hora

N Minuto

S Segundo

Este ejemplo utiliza la función DateDiff para mostrar el número de días entreuna fecha dada y hoy.

Dim DatTim1 As Date = #1/4/2004# ' primera fecha.

Dim DatTim2 As Date = #1/9/2004# ' segunda fecha.

Dim dias As Long = DateDiff("d", DatTim1, DatTim2)

Dim meses As Long = DateDiff("m", DatTim1, DatTim2)

MsgBox(dias) à devuelve 5

Msgbox(meses) à devuelve 0

Ejemplo 2.-Dim FirstDate, Msg As String ' Declare variables.Dim SecondDate As DateFirstDate = InputBox("Ingrese fecha")SecondDate = CDate(FirstDate)Msg = "Dias desde la fecha: " & DateDiff(DateInterval.Day, Now, SecondDate)MsgBox (Msg)

DatePart._ Devuelve una parte de una fecha (semana, trimestre, etc.)

El argumento Interval puede tener uno de los siguientes valores:

Page 95: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina195

Valor de enumeración Cadena Parte del valor de fecha u horadevuelta

DateInterval.Day D Día del mes (del 1 al 31)

DateInterval.DayOfYear Y Día del año (del 1 al 366)

DateInterval.Hour H Hora

DateInterval.Minute N Minuto

DateInterval.Month M Mes

DateInterval.Quarter Q Trimestre

DateInterval.Second S Segundo

DateInterval.Weekday W Día de la semana (del 1 al 7)

DateInterval.WeekOfYear Ww Semana del año (de la 1 a la 53)

DateInterval.Year yyyy Año

Este ejemplo obtiene una fecha y, utilizando la función DatePart, muestra eltrimestre del año que ocurre.

Dim FirstDate, Msg As String 'Declare variables.Dim SecondDate As DateFirstDate = InputBox("Enter a date:")SecondDate = CDate(FirstDate)Msg = "Quarter: " & DatePart(DateInterval.Quarter, SecondDate)MsgBox (Msg)

Datetime._ Representa un instante de tiempo, normalmente expresado enforma de fecha y hora del día. (es propio del framework)

Dim objdate as datetime

Objdate.Metodo.- Lista de metodos

Objdate.day dia del mes

Similares a las funciones anteriores ,DayOfweek (dia de lasemana),Month,Now,Hour,Minute,seconds, etc

Función FORMAT

Esta función permite presentar cadenas de numéricas o fechas de una determinadaforma. Permite establecer el Formato de esa cadena.

FechadeHoy = Format (Now, yyyy-mm-dd )

la variable FechadeHoy tendrá el valor 1998-05-21, que se refiere al día 21 de mayo de

Page 96: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina196

1998, según el formato recomendado por la norma ISO-8601 para la presentación

de fechas. Si hubiésemos puesto la expresión FechadeHoy = Format (Now, dd/mm/yy ) ,

la variable FechadeHoy contendría el valor 21/05/98 referido al día citado.

firstdayofweek. Especifica el primer día de la semana. Puede tomar uno deestos valores o constantes :

Constante Valor Descripción

VbSunday 1 Domingo (valor por defecto)

vbMonday 2 Lunes

vbTuesday 3 Martes

vbWednesday 4 Miércoles

vbThursday 5 Jueves

vbFriday 6 Viernes

vbSaturday 7 Sábado

Observe que usamos la expresión Variable =Format (1234567, Formato ) paratodos los ejemplos de números.

Para poner los números separados por millares :

Variable = Format(1234567, "##,###,###") Variable = 1.234.567

Ejemplos de funciones fecha:

Ingresando una fecha mostrar la edad exacta de cualquier presenta.

Public Class Form1

Private Sub BTnCalculo_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles BtnCalculo.Click

Dim FE, FA, FN As Date

FA = Today : FE = CDate(TXTFE.Text)

Page 97: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina197

Dim DIAS, MES, AA, DA, DN As Integer

AA = Year(FA) - Year(FE)

FN = CDate(FE.Day & "/" & FE.Month & "/" & FA.Year)

DA = FA.DayOfYear : DN = FN.DayOfYear

If DN > DA Then AA = AA 1

FE = FE.AddYears(AA) : MES = DateDiff("M", FE, FA)

FE = FE.AddMonths(MES)

If DN > DA Then

DIAS = DateDiff("D", FA, FE)

Else

DIAS = DateDiff("D", FE, FA)

End If

LBFE.Text = AA : LBDIA.Text = DIAS : LBMES.Text = MES

End Sub

End Class

Ejercicios empleando funciones Fechas.-

1.- Realizar un programa que permita generar los códigos de los empleadosque serán

almacenados en una lista , el código se genera en función del cargo y añode ingreso

según: el código esta compuesto de seisCaracteres.

Apellidos = Laura Lee

Cargo = Docente : fecha = 20/02/2001

Su código será : D01001

Consideración: el Campo apellido y nombre solo debe aceptar letras y espaciosen Blanco, La fecha debe ser correcta.

2.- Aplicando Fechas.- Ingrese como datos Monto de la cuota, fecha de

Page 98: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina198

vencimiento y fecha de pago , calcular los días de mora , pago por mora y elpago total Los pago por Mora es de acuerdo a:

Menor a una semana 1% por cada dia

Entre 2 y 3 semanas 1.5% por dia

Mayor a 3 semanas 2% por dia

3.- Ingrese por teclado cierta cantidad de Bolas de billar , con el cual se deseaformar una pirámide de base cuadrada, cada superficie esta formado por unnumero cuadrado perfecto, calcular el numero de superficies que se forman yel numero de bolas que sobran.

Ejemplo para 20 Bolas serán 3 superficies y sobran 6bolas.

4.- Alquiler de Maquinas

El pago hora es de acuerdo al usuario:

Estudiante S/. 1.50 Publico S/2.00 DocenteS/1.0

5.- Realice una aplicación en donde se ingrese a cuadros detexto el Día(entre 1 y 31), Mes(entre 1 y 12) y Año deNacimiento(4 dígitos) de una persona, luego al pulsar un clic sobre el botónCalcular mostrar su Edad y el signo Zodiacal (control Image) al que

pertenece.

NOTA : Validar que en los cuadros de texto sólo se debe ingresardígitos.

1. ENUNCIADO : diseñe un formulario que simule un cheque bancarioF Se ingresa el Valor del monto del cheque (sólo dígitos entero

positivo de máximo cuatro dígitos).F La cantidad del monto en letras se mostrará automáticamente una

vez ingresado el valor del monto del cheque.

Page 99: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina199

F Al pulsar Enter el enfoque pasará a ingresar el nombre del titular delcheque

F La fecha de mostrará en formato largo.F Mostrar la firma del administrador general del banco

Aplicacion nro 3.- Juego de dados

Codificación

Public Class frmdado

Dim ruta As String = "d:\bakupweb\dibujos\dado"

Private Shared myTimer As New System.Windows.Forms.Timer()

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles Button1.Click

Timer1.Enabled = True

txtvueltas.Text = ""

End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As

Page 100: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina1100

System.EventArgs) Handles Timer1.Tick

Static n As Integer : Dim d1, d2 As Integer

Randomize()

d1 = CInt(Rnd() * 5) + 1 : d2 = CInt(Rnd() * 5) + 1

txtvueltas.Text = (5 - n).ToString : n = n + 1

pic1.Image = Drawing.Image.FromFile(ruta & d1 & ".bmp")

pic2.Image = Drawing.Image.FromFile(ruta & d2 & ".bmp")

If n > 5 Then

Timer1.Enabled = False

If d1 + d2 = 12 Or d1 + d2 = 7 Then

MsgBox("gano")

Else

MsgBox("intente de nuevo")

End If

n = 0

End If

End Sub

End Class

Aplicación empleando funciones y modulos

Page 101: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina1101

Module Module1

Variables Publicas para todos los formularios

Public ntotal, naprobados, ndesaprobados As Byte

Public suma, ptotal As Single

Public Function calcular_promedio(ByVal exp As Byte, ByVal exf As Byte) AsSingle

Return (Convert.ToSingle(exp * 2 + exf) / 3)

End Function

Public Function calcularCondicion(ByVal prom As Single) As String

suma += prom

ntotal += 1

If (prom > 13) Then

naprobados += 1

Return ("aprobado")

Else

ndesaprobados += 1

Return ("desaprobado")

End If

End Function

End Module

Codificación Para el formulario 1.-(frmproceso)

Public Class frmProceso

Private Sub Btnnuevo_Click(ByVal sender As System.Object, ByVal e As

Page 102: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina1102

System.EventArgs) Handles Btnnuevo.Click

Dim x As Control

For Each x In Controls

If TypeOf x Is TextBox Then x.Text = ""

Next

End Sub

Private Sub BtnCalcular_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles BtnCalcular.Click

Dim ep, ef As Byte : Dim pro As Single

ep = Convert.ToByte(txteparcial.Text) : ef =Convert.ToByte(txtefinal.Text)

pro = calcular_promedio(ep, ef) : txtpromedio.Text = Format(pro, "#0.0")

txtcondicion.Text = calcularCondicion(pro)

If pro > 10.5 Then

txtcondicion.ForeColor = System.Drawing.Color.Blue

Else

txtcondicion.ForeColor = System.Drawing.Color.Red

End If

End Sub

Private Sub txtnombre_KeyPress(ByVal sender As Object, ByVal e AsSystem.Windows.Forms.KeyPressEventArgs) Handles txtnombre.KeyPress

'Para enfocar otro objeto

If Asc(e.KeyChar) = 13 Then

txteparcial.Focus()

End If

End Sub

Function SoloNumeros(ByVal Keyascii As Short) As Short

Page 103: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina1103

If InStr("1234567890", Chr(Keyascii)) = 0 Then

SoloNumeros = 0

Else

SoloNumeros = Keyascii

End If

Select Case Keyascii

Case 8 : SoloNumeros = Keyascii

Case 13 : SoloNumeros = Keyascii

End Select

End Function

Private Sub Btninforme_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles Btninforme.Click

Dim miform As New frmInforme() Para llamar al formulario informe

miform.ShowDialog()

End Sub

Private Sub BtnSalir_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles BtnSalir.Click

Me.Close()

End Sub

Private Sub txteparcial_TextChanged(ByVal sender As System.Object, ByVale As System.EventArgs) Handles txteparcial.TextChanged

End Sub

Private Sub txteparcial_KeyPress(ByVal sender As Object, ByVal e AsSystem.Windows.Forms.KeyPressEventArgs) Handles txteparcial.KeyPress

Dim KeyAscii As Short = CShort(Asc(e.KeyChar))

Dim n As Byte

KeyAscii = CShort(SoloNumeros(KeyAscii))

Page 104: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina1104

If KeyAscii = 0 Then

e.Handled = True

ElseIf KeyAscii = 13 Then

n = Convert.ToByte(txteparcial.Text)

If n < 0 Or n > 20 Then

MsgBox("solo un valor de 0 a 20")

End If

End If

End Sub

End Class

Para el formulario Informe.-Public Class frmInforme

Private Sub frmInforme_Load(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles MyBase.Load

txttotAlum.Text = ntotal.ToString : txtNaprob.Text = naprobados.ToString

txtNdes.Text = ndesaprobados.ToString

txtPtotal.Text = Format(suma / ntotal, "#.00")

End Sub

End Class

Page 105: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina1105

Semana 5 : Controles contenedores demenus

Control GroupBox

Nos permite, como indica su nombre, agrupar controles en su interior, tantoRadioButton como de otro tipo, ya que se trata de un control contenedor.

Una vez dibujado un GroupBox sobre un formulario, podemos arrastrar y soltarsobre él, controles ya existentes en el formulario, o crear nuevos controlesdentro de dicho control. De esta forma, podremos ya, en este ejemplo,seleccionar más de un RadioButton del formulario.

Ejemplo 13

El evento CheckedChanged, al igual que ocurría con los controlesCheckBox, será el que tendremos que escribir para ejecutar el código enrespuesta a la pulsación sobre un control RadioButton. El el código quese muestra los eventos correspondientes a los controles de radio de esteejemplo. Para cambiar el tipo de fuente, instanciamos un objeto Font ylo asignamos a la propiedad Font del TextBox; mientras que para cambiarel color, utilizamos la estructura Color y la propiedad BackColor, también delTextBox.

Private Sub rbtTahoma_CheckedChanged(ByVal sender As System.Object,ByVal e As

System.EventArgs) Handles rbtTahoma.CheckedChanged

Me.txtNombre.Font = New Font("Tahoma", 12)

End Sub

Private Sub rbtGaramond_CheckedChanged(ByVal sender As System.Object,ByVal e As

System.EventArgs) Handles rbtGaramond.CheckedChanged

Me.txtNombre.Font = New Font("Garamond", 8)

End Sub

Private Sub rbtComic_CheckedChanged( ) HandlesrbtComic.CheckedChanged

Me.txtNombre.Font = New Font("Comic Sans MS", 15)

End Sub

Page 106: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina1106

Private Sub rbtVerde_CheckedChanged(ByVal sender As System.Object,ByVal e As

System.EventArgs) Handles rbtVerde.CheckedChanged

Me.txtNombre.BackColor = Color.Green

End Sub

Private Sub rbtAzul_CheckedChanged( Handles rbtAzul.CheckedChanged

Me.txtNombre.BackColor = Color.Blue

End Sub

Private Sub rbtAmarillo_CheckedChanged( HandlesrbtAmarillo.CheckedChanged

Me.txtNombre.BackColor = Color.Yellow

End Sub

Para mostrar algunas de lasfuncionalidades de estecontrol, utilizaremos elproyecto de ejemplo ListBoxPruque emplea l istas,groupbox.

El ejemplo, como puedecomprobar el lector, consisteen un formulario que contieneun ListBox principal, con elnombre lstValores, quedispone de una serie devalores asignados en tiempode diseño.

Cada vez que hacemos clic en alguno de los valores, se produce el eventoSelectedIndexChanged, que utilizamos para mostrar en este caso, el nombredel elemento en el título del formulario, la clase frmListas, correspondiente alformulario

' declaramos esta constante a nivel de clase, para poner como título' del formulario junto al elemento seleccionado de la lista

Public Const TITULO As String = "Elemento seleccionado: "

' este evento se produce cada vez que se cambia el

Page 107: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina1107

' índice seleccionado del ListBox

Private Sub lstValores_SelectedIndexChanged( ) HandleslstValores.SelectedIndexChanged

' mostrar en el título del formulario el valor' actualmente seleccionado de la lista

Me.Text = TITULO & Me.lstValores.SelectedItem

End Sub

Private Sub rbtUno_CheckedChanged(..) Handles rbtUno.CheckedChanged' establecer tipo de selección en el ListBox a un elemento

Me.lstValores.SelectionMode = SelectionMode.One

End Sub

Private Sub rbtMultiple_CheckedChanged(..) HandlesrbtMultiple.CheckedChanged

' establecer tipo de selección en el ListBox a un múltiples' elementos

Me.lstValores.SelectionMode = SelectionMode.MultiSimple

End Sub

Private Sub rbtExtendida_CheckedChanged( ) HandlesrbtExtendida.CheckedChanged

' establecer tipo de selección en el ListBox a múltiples

' elementos de modo extendidoMe.lstValores.SelectionMode = SelectionMode.MultiExtended

End Sub

Private Sub chkOrdenar_CheckedChanged(..) HandleschkOrdenar.CheckedChanged

' según el valor del CheckBox, ordenamos o quitamos

' la opción de ordenar del ListBox

Me.lstValores.Sorted = Me.chkOrdenar.Checked

End Sub

Private Sub chkColumnas_CheckedChanged(..) HandleschkColumnas.CheckedChanged

Page 108: Visual Basic Net

Facultad de Ingenieria Industrial y de Sistemas

Ing. Alberto Moreno CuevaPágina1108

' según el valor del CheckBox, mostramos el ListBox

' en varias columnas o en una

Me.lstValores.MultiColumn = Me.chkColumnas.Checked

End Sub

Private Sub btnAgregar_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles btnAgregar.Click

' añadimos el contenido del TextBox como' un elemento a la lista

Me.lstValores.Items.Add(Me.txtValor.Text)

End Sub

Private Sub btnBuscar_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles btnBuscar.Click

Dim iPosicion As Integer' el método FindString() de la lista busca un valor

iPosicion = Me.lstValores.FindString(Me.txtValor.Text)

' el campo NoMatches indica si no existe el valor buscadoIf iPosicion = Me.lstValores.NoMatches Then

MessageBox.Show("No existe el valor")

Page 109: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1109

Else

' si encontramos el valor en la lista, lo seleccionamos por códigoMe.lstValores.SelectedIndex = iPosicion

End If

End Sub

Private Sub btnSelecCod_Click(..) Handles btnSelecCod.Click' para seleccionar elementos de un ListBox por código' podemos utilizar el método SetSelected()

Me.rbtMultiple.Checked = TrueMe.lstValores.SetSelected(1, True)Me.lstValores.SetSelected(3, True)

Me.lstValores.SetSelected(5, True)

End Sub

Private Sub btnTrapasarSelec_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles btnTrapasarSelec.Click

Dim oSeleccion As ListBox.SelectedObjectCollection' obtenemos con SelectedItems los elementos seleccionados' de un ListBox

oSeleccion = Me.lstValores.SelectedItems

' si existen elementos seleccionados,

' los traspasamos a otro ListBox del formulario

If oSeleccion.Count > 0 Then

Dim oEnumerador As IEnumeratoroEnumerador = oSeleccion.GetEnumerator()

While oEnumerador.MoveNext()Me.lstTraspaso.Items.Add(oEnumerador.Current)

End While

End If

End Sub

Private SubbtnLimpiar_Clic

Page 110: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1110

k(..) Handles btnLimpiar.Click' con el método Clear() de la colección de elementos' de un ListBox, borramos los elementos del controls

Me.lstTraspaso.Items.Clear()

End Sub

Control Panel

Utilizado para agrupar colecciones de controles.Espacio de nombres: System.Windows.Forms

Creacion de controles mediante codigo.

Ejemplo 14

Comentarios

Panel es un control que contiene otros controles. Se puede utilizar Panel para agruparcolecciones de controles, como un grupo de controles RadioButton. Al igual que sucede con otroscontroles contenedores, como el control GroupBox, si la propiedad Enabled del control Panel estáestablecida en false, los controles contenidos dentro de Panel también se deshabilitarán.

El control Panel se muestra de forma predeterminada sin bordes. Para proporcionar un bordeestándar o tridimensional, se utiliza la propiedad BorderStyle para distinguir el área del panel deotras áreas del formulario. Debido a que el control Panel deriva de la clase ScrollableControl, sepuede utilizar la propiedad AutoScroll para habilitar barras de desplazamiento en el control Panel.Cuando la propiedad AutoScroll está establecida en true, es posible desplazarse a cualquiercontrol situado dentro de Panel, aunque fuera de su región visible, con las barras dedesplazamiento proporcionadas.

El control Panel no muestra ningún título. Si necesita un control similar a Panel que puede mostrarun título, vea el control GroupBox. En el ejemplo de código siguiente se crea un control Panel, yse agrega Label y TextBox a Panel. El control Panel se muestra con un borde tridimensional paradistinguir dónde está situado el control Panel en relación con otros objetos del formulario. En esteejemplo se requiere que se llame al método definido en este ejemplo desde dentro de unformulario existente y que se haya agregado el espacio de nombres System.Drawing al código

Page 111: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1111

fuente para el formulario.

Visual Basic

Public Sub CreateMyPanel() Dim panel1 As New Panel() : Dim textBox1 As New TextBox() Dim label1 As New Label() : ' Iniciar el Panel de control. panel1.Location = New Point(56, 72) : panel1.Size = New Size(264, 152) ' Establecer la propiedad BorderStyle para el Grupo en tres dimensiones.

panel1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D ' Inicializar la etiqueta y controles TextBox.

label1.Location = New Point(16, 16)

label1.Text = "label1" : label1.Size = New Size(104, 16) textBox1.Location = New Point(16, 32) textBox1.Text = "" : textBox1.Size = New Size(152, 20) ' Añadir el Grupo de control a la forma.

Me.Controls.Add(panel1) ' Añadir la etiqueta y controles TextBox al Grupo.

panel1.Controls.Add(label1) : panel1.Controls.Add(textBox1)End Sub

Control TabControl (Clase)

Administra un conjunto relacionado de páginas de fichas.Espacio de nombres: System.Windows.FormsEnsamblado: System.Windows.Forms (en system.windows.forms.dll)

TabControl contiene páginas de fichas, representadas por objetos TabPage, que se agreganmediante la propiedad TabPages. El orden de las páginas de fichas de esta colección refleja elorden en que las fichas aparecen en el control.

El usuario puede cambiar el objeto TabPage actual haciendo clic en una de las fichas del control.También se puede cambiar mediante programación el objeto TabPage actual utilizando una de las

Page 112: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1112

propiedades de TabControl siguientes:

• SelectedIndex

• SelectedTab

En Microsoft .NET Framework versión 2.0, también puede utilizar uno de los métodos siguientes:

• SelectTab

• DeselectTab

En .NET Framework 2.0, puede responder cuando la ficha actual cambie controlando uno de loseventos siguientes:

• Deselecting

• Deselected

• Selecting

• Selected

Las fichas incluidas en TabControl forman parte de TabControl, pero no forman parte de loscontroles TabPage individuales. Los miembros de la clase TabPage, como la propiedadForeColor, sólo afectan al rectángulo cliente de la página de fichas, pero no a las fichas. Además,el método Hide de TabPage no ocultará la ficha. Para ocultar la ficha, debe quitar el controlTabPage de la colección de TabControl.TabPages.

En .NET Framework 2.0, la ficha se considera parte de la página de fichas para determinar cuándose producen los eventos Enter y Leave de TabPage. En las versiones anteriores de .NETFramework, los eventos Enter y Leave de TabPage no se producen cuando una ficha tiene elfoco o lo pierde, únicamente se producen cuando el rectángulo cliente de la página de fichas tieneel foco o lo pierde.

Los siguientes eventos no se producen para la clase TabControl salvo que haya al menos unobjeto TabPage en la colección de TabControl.TabPages: Control.Click, Control.DoubleClick,Control.MouseDown, Control.MouseUp, Control.MouseHover, Control.MouseEnter,Control.MouseLeave y Control.MouseMove. Si en la colección hay un objeto TabPage, como

mínimo, y el

Page 113: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1113

usuario interactúa con el encabezado del control de ficha (donde aparecen los nombres deTabPage), TabControl provoca el evento apropiado. Sin embargo, si la interacción del usuario seproduce dentro de la propiedad ClientRectangle de la página de fichas, TabPage provoca elevento adecuado.

Los controles incluidos en TabPage no se crean hasta que se muestra la página de fichas;tampoco se activan los enlaces de datos de estos controles hasta que dicha página de fichas semuestra.

Cuando los estilos visuales están habilitados y la propiedad Alignment se establece en un valordistinto de Top, es posible que el contenido de las fichas no se represente correctamente. Paraevitar este problema, puede dibujar el contenido de las fichas utilizando el dibujo del propietario.Cuando la propiedad Alignment se establece en un valor distinto de Top y la propiedadAppearance se establece en un valor distinto de Normal, puede que el contenido de la página defichas no se represente correctamente.

Ejemplo

En el ejemplo de código siguiente se utiliza el Diseñador de Windows Forms de Visual Studio.NET para crear un control TabControl con tres páginas de fichas. Cada página de fichas contienevarios controles.

Visual Basic

Ejemplo 15

Public Class Form1 ' Variable del diseñador requerida

Private components As System.ComponentModel.Container

' Declaracion variables tipo objetos. Private tab3RadioButton2 As System.Windows.Forms.RadioButton Private tab3RadioButton1 As System.Windows.Forms.RadioButton Private tab2CheckBox3 As System.Windows.Forms.CheckBox Private tab2CheckBox2 As System.Windows.Forms.CheckBox Private tab2CheckBox1 As System.Windows.Forms.CheckBox

Page 114: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1114

Private tab1Label1 As System.Windows.Forms.Label Private WithEvents tab1Button1 As System.Windows.Forms.Button Private tabPage3 As System.Windows.Forms.TabPage Private tabPage2 As System.Windows.Forms.TabPage Private tabPage1 As System.Windows.Forms.TabPage Private tabControl1 As System.Windows.Forms.TabControl --------------------------------------------------------------------------------------------------------------- Public Sub New() ' Esta convocatoria es necesaria para el Diseñador de Windows Forms apoyo.

InitializeComponent() End Sub ' Este metodo es Requerido para el diseño. Private Sub InitializeComponent() Me.components = New System.ComponentModel.Container() Me.tabPage1 = New System.Windows.Forms.TabPage() Me.tab2CheckBox3 = New System.Windows.Forms.CheckBox() Me.tab3RadioButton2 = New System.Windows.Forms.RadioButton() Me.tabControl1 = New System.Windows.Forms.TabControl() Me.tab2CheckBox2 = New System.Windows.Forms.CheckBox() Me.tab2CheckBox1 = New System.Windows.Forms.CheckBox() Me.tab3RadioButton1 = New System.Windows.Forms.RadioButton() Me.tab1Label1 = New System.Windows.Forms.Label() Me.tabPage3 = New System.Windows.Forms.TabPage() Me.tabPage2 = New System.Windows.Forms.TabPage() Me.tab1Button1 = New System.Windows.Forms.Button() tabPage1.Text = "tabPage1" tabPage1.Size = New System.Drawing.Size(256, 214) tabPage1.TabIndex = 0 tab2CheckBox3.Location = New System.Drawing.Point(32, 136) tab2CheckBox3.Text = "checkBox3" tab2CheckBox3.Size = New System.Drawing.Size(176, 32) tab2CheckBox3.TabIndex = 2 : tab2CheckBox3.Visible = True tab3RadioButton2.Location = New System.Drawing.Point(40, 72) tab3RadioButton2.Text = "radioButton2"

Page 115: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1115

tab3RadioButton2.Size = New System.Drawing.Size(152, 24) tab3RadioButton2.TabIndex = 1 : tab3RadioButton2.Visible = True tabControl1.Location = New System.Drawing.Point(16, 16) tabControl1.Size = New System.Drawing.Size(264, 240) tabControl1.SelectedIndex = 0 : tabControl1.TabIndex = 0 tab2CheckBox2.Location = New System.Drawing.Point(32, 80) tab2CheckBox2.Text = "checkBox2" tab2CheckBox2.Size = New System.Drawing.Size(176, 32) tab2CheckBox2.TabIndex = 1 : tab2CheckBox2.Visible = True tab2CheckBox1.Location = New System.Drawing.Point(32, 24) tab2CheckBox1.Text = "checkBox1" tab2CheckBox1.Size = New System.Drawing.Size(176, 32) tab2CheckBox1.TabIndex = 0 tab3RadioButton1.Location = New System.Drawing.Point(40, 32) tab3RadioButton1.Text = "radioButton1" tab3RadioButton1.Size = New System.Drawing.Size(152, 24) tab3RadioButton1.TabIndex = 0 tab1Label1.Location = New System.Drawing.Point(16, 24) tab1Label1.Text = "label1" tab1Label1.Size = New System.Drawing.Size(224, 96) tab1Label1.TabIndex = 1 : tabPage3.Text = "tabPage3" tabPage3.Size = New System.Drawing.Size(256, 214) tabPage3.TabIndex = 2 : tabPage2.Text = "tabPage2" tabPage2.Size = New System.Drawing.Size(256, 214) tabPage2.TabIndex = 1 tab1Button1.Location = New System.Drawing.Point(88, 144) tab1Button1.Size = New System.Drawing.Size(80, 40) tab1Button1.TabIndex = 0 : tab1Button1.Text = "button1" Me.Text = "Form1" 'Agrega los controles a la segunda pestañatabPage2.Controls.Add(Me.tab2CheckBox3) tabPage2.Controls.Add(Me.tab2CheckBox2) tabPage2.Controls.Add(Me.tab2CheckBox1) ' Adds controls to the third tab page. tabPage3.Controls.Add(Me.tab3RadioButton2)

Page 116: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1116

tabPage3.Controls.Add(Me.tab3RadioButton1) 'agrega los controles a la pestaña. tabPage1.Controls.Add(Me.tab1Label1) tabPage1.Controls.Add(Me.tab1Button1) 'agregra el tabcontrol al formulario. Me.Controls.Add(tabControl1) ' Añade la página a la ficha TabControltabControl1.Controls.Add(Me.tabPage1) tabControl1.Controls.Add(Me.tabPage2) : tabControl1.Controls.Add(Me.tabPage3) End Sub ------------------------------------------------------------------------------------------------------------------ Private Sub tab1Button1_Click(sender As Object, e As System.EventArgs) _ Handles tab1Button1.Click ' Inserta el código que debe ejecutar cuando se hace clic en el botón

End Sub ------------------------------------------------------------------------------------------------------------------- Public Shared Sub Main() Application.Run(New Form1()) End SubEnd Class

Control MenuStrip (Clase)

Proporciona una estructura de menú para un formulario.

MenuStrip es el contenedor de nivel superior que reemplaza a MainMenu. También proporcionalas características de control de claves y de interfaz de múltiples documentos (MDI).Funcionalmente, ToolStripDropDownItem y ToolStripMenuItem operan junto con MenuStrip,aunque se derivan de ToolStripItem.

Los elementos siguientes están diseñados específicamente para trabajar sin problemas conToolStripSystemRenderer y ToolStripProfessionalRenderer en todas las orientaciones. Estándisponibles de forma predeterminada en tiempo de diseño para el control MenuStrip:

Page 117: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1117

• ToolStripMenuItem

• ToolStripTextBox

• ToolStripComboBox

El control MenuStrip representa el contenedor para la estructura de menú de un formulario.Puede agregar objetos ToolStripMenuItem al objeto MenuStrip, que representan los comandosde menú individuales de la estructura de menú. Cada objeto ToolStripMenuItem puede ser uncomando de la aplicación o un menú primario para otros elementos de submenú.

Aunque el control MenuStrip reemplaza y agrega funcionalidad al control MainMenu de versionesanteriores, se conserva MainMenu a efectos de compatibilidad con versiones anteriores y usofuturo, en su caso.

Ejemplo 16

En el ejemplo de código siguiente se muestra un MenuStrip en un escenario de interfaz demúltiples documentos (MDI).

Visual Basic

' Este ejemplo de código muestra cómo utilizar ToolStripPanel

' los controles con un interfaz de documento múltiple (MDI).

Public Class Form1 Inherits Form Public Sub New() Me.IsMdiContainer = True ' Crear controles ToolStripPanel.

Dim tspTop As New ToolStripPanel() : Dim tspBottom As New ToolStripPanel() Dim tspLeft As New ToolStripPanel() : Dim tspRight As New ToolStripPanel() ' ToolStripPanel los controles portuarios a los bordes de la forma.

tspTop.Dock = DockStyle.Top : tspBottom.Dock = DockStyle.Bottom tspLeft.Dock = DockStyle.Left : tspRight.Dock = DockStyle.Right ' ToolStrip crear controles para desplazarse por los

Page 118: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1118

' ToolStripPanel controles.

' Crear el "Top" ToolStrip control y añadir

Dim tsTop As New ToolStrip() tsTop.Items.Add("Top") tspTop.Join(tsTop) ' Crear el "fondo" y añadir el control ToolStrip

' correspondiente a la ToolStripPanel.

Dim tsBottom As New ToolStrip() tsBottom.Items.Add("Bottom") tspBottom.Join(tsBottom) ' Create the "Right" ToolStrip control and add ' to the corresponding ToolStripPanel. Dim tsRight As New ToolStrip() tsRight.Items.Add("Right") tspRight.Join(tsRight) ' Create the "Left" ToolStrip control and add ' to the corresponding ToolStripPanel. Dim tsLeft As New ToolStrip() tsLeft.Items.Add("Left") tspLeft.Join(tsLeft) ' Create a MenuStrip control with a new window. Dim ms As New MenuStrip() Dim windowMenu As New ToolStripMenuItem("Window") Dim windowNewMenu As New ToolStripMenuItem("New", Nothing, NewEventHandler(AddressOf windowNewMenu_Click)) windowMenu.DropDownItems.Add(windowNewMenu) CType(windowMenu.DropDown, ToolStripDropDownMenu).ShowImageMargin = False CType(windowMenu.DropDown, ToolStripDropDownMenu).ShowCheckMargin = True ' Assign the ToolStripMenuItem that displays ' the list of child forms. ms.MdiWindowListItem = windowMenu

' Add the window ToolStripMenuItem to the MenuStrip.

Page 119: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1119

ms.Items.Add(windowMenu) ' Dock the MenuStrip to the top of the form. ms.Dock = DockStyle.Top ' The Form.MainMenuStrip property determines the merge target. Me.MainMenuStrip = ms ' Add the ToolStripPanels to the form in reverse order. Me.Controls.Add(tspRight) Me.Controls.Add(tspLeft) Me.Controls.Add(tspBottom) Me.Controls.Add(tspTop) ' Add the MenuStrip last. ' This is important for correct placement in the z-order. Me.Controls.Add(ms) End Sub

' This event handler is invoked when ' the "New" ToolStripMenuItem is clicked. ' It creates a new Form and sets its MdiParent ' property to the main form. Private Sub windowNewMenu_Click(ByVal sender As Object, ByVal e As EventArgs) Dim f As New Form() f.MdiParent = Me f.Text = "Form - " + Me.MdiChildren.Length.ToString() f.Show() End SubEnd Class

Aplicacion.- Empleo de Menus , Cuadro de dialogo , statubar , imagelist

Page 120: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1120

Controles empleados en el formulario

Codificación:

Modulo1

Module Module2

Public n As Byte

End Module

Para el primer formulario editor (frmEditor)

Public Class frmeditor

Private Sub MnuArchivo_nuevo_Click(ByVal sender As System.Object, ByVal e AsSystem.EventAr

ColoDialog

OpenFileDailog

FontDialog

Page 121: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1121

gs) Handles MnuArchivo_nuevo.Click

Dim x As New frmdocumento()

x.MdiParent = Me

x.Show()

n += 1

x.Text = " documento " & n.ToString

End Sub

Private Sub frmeditor_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles MyBase.Load

StatusBarPanel3.Text = " 0 documento"

StatusBarPanel3.ToolTipText = "Documentos Abiertos"

StatusBarPanel4.Text = Date.Now.ToLongTimeString

StatusBarPanel4.ToolTipText = Date.Now.Today.ToLongDateString

End Sub

Private Sub MnuArchivo_abrir_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles MnuArchivo_abrir.Click

Dim y As New frmdocumento()

Dim nom As String

With OdgEditor

.Title = "Archivo de texto enrriquecido"

.Filter = "Abrir archivo (*.rtf)|*.rtf"

If (.ShowDialog = DialogResult.OK) And .FileName <> "" Then

y.MdiParent = Me

y.Show() : nom = .FileName

Dim x As RichTextBox = Me.ActiveMdiChild.ActiveControl

x.Text = nom

End If

Page 122: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1122

End With

End Sub

Private Sub MnuFormato_fondo_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles MnuFormato_fondo.Click

With CdgEditor

If (.ShowDialog = DialogResult.OK) Then

Dim x As RichTextBox = Me.ActiveMdiChild.ActiveControl

x.BackColor = .Color

End If

End With

End Sub

Private Sub MnuFormato_fuente_Click( ) Handles MnuFormato_fuente.Click

With FdgEditor

If (.ShowDialog = DialogResult.OK) Then

Dim x As RichTextBox = Me.ActiveMdiChild.ActiveControl

x.ForeColor = .Color

x.Font = .Font

End If

End With

End Sub

Private Sub mnuventana_horizontal_Click( ) Handles mnuventana_horizontal.Click

Me.LayoutMdi(MdiLayout.TileHorizontal)

End Sub

Private Sub mnuVentana_cascada_Click( ) Handles mnuVentana_cascada.Click

Me.LayoutMdi(MdiLayout.Cascade)

End Sub

Page 123: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1123

Private Sub MnuVentana_vertical_Click( ) Handles MnuVentana_vertical.Click

Me.LayoutMdi(MdiLayout.TileVertical)

End Sub

Private Sub tbrmenu_ButtonClick(ByVal sender As System.Object, ByVal e AsSystem.Windows.Forms.ToolBarButtonClickEventArgs) Handles tbrmenu.ButtonClick

Select Case e.Button.ImageIndex

Case 0 : MnuArchivo_nuevo.PerformClick()

Case 1 : MnuArchivo_abrir.PerformClick()

Case 2 : 'MnuArchivo_nuevo.PerformClick()

End Select

End Sub

End Class

Control StatusStrip (Clase)

Representa un control en la barra de estado de Windows.

StatusStrip reemplaza el control StatusBar. Las características especiales de StatusStripincluyen un diseño de tabla personalizada, compatibilidad con los controles de tamaño ymovimiento del formulario y con la propiedad Spring, que permite que ToolStripStatusLabel relleneautomáticamente espacio disponible.

Los elementos siguientes están diseñados específicamente para trabajar sin problemas conToolStripSystemRenderer y ToolStripProfessionalRenderer en todas las orientaciones. Estándisponibles de forma predeterminada en tiempo de diseño para el control StatusStrip:

• ToolStripStatusLabel

• ToolStripDropDownButton

• ToolStripSplitButton

• ToolStripProgressBar

Un control StatusStrip muestra información acerca del objeto que se está mostrando en un Form,los

Page 124: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1124

componentes del objeto o información contextual relativa a la operación de ese objeto en laaplicación. Normalmente, un control StatusStrip está formado por objetos ToolStripStatusLabel,cada uno de los cuales muestra texto, un icono o ambas cosas. StatusStrip también puedecontener controles ToolStripDropDownButton, ToolStripSplitButton y ToolStripProgressBar.

El control StatusStrip predeterminado no tiene paneles. Para agregar paneles a un StatusStrip,utilice el método ToolStripItemCollection.AddRange en tiempo de diseño, o utilice Editor de lacolección de elementos de StatusStrip en tiempo de diseño para agregar, quitar o reorganizarelementos y modificar propiedades. Utilice el Tareas de StatusStrip (Cuadro de diálogo) en tiempode diseño para ejecutar los comandos comunes.

Aunque StatusStrip reemplaza y amplía el control StatusBar de versiones anteriores, seconserva StatusBar a efectos de compatibilidad con versiones anteriores y uso futuro, en su caso.

Ejemplo 17

Imports SystemImports System.TextImports System.Windows.Forms

Public Class Form1 Inherits Form Private statusStrip1 As StatusStrip Private toolStripStatusLabel1 As ToolStripStatusLabel

Public Sub New() InitializeComponent() End Sub

<STAThread()> _ Shared Sub Main() Application.EnableVisualStyles() Application.Run(New Form1()) End Sub

Page 125: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1125

Private Sub InitializeComponent() statusStrip1 = New System.Windows.Forms.StatusStrip() toolStripStatusLabel1 = New System.Windows.Forms.ToolStripStatusLabel() statusStrip1.SuspendLayout() SuspendLayout() ' ' The following code example demonstrates the syntax for setting ' various StatusStrip properties. statusStrip1.Dock = System.Windows.Forms.DockStyle.Top statusStrip1.GripStyle = System.Windows.Forms.ToolStripGripStyle.Visible statusStrip1.Items.AddRange(New System.Windows.Forms.ToolStripItem(){toolStripStatusLabel1}) statusStrip1.LayoutStyle =System.Windows.Forms.ToolStripLayoutStyle.HorizontalStackWithOverflow statusStrip1.Location = New System.Drawing.Point(0, 0) statusStrip1.Name = "statusStrip1" statusStrip1.ShowItemToolTips = True statusStrip1.Size = New System.Drawing.Size(292, 22) statusStrip1.SizingGrip = False statusStrip1.Stretch = False statusStrip1.TabIndex = 0 statusStrip1.Text = "statusStrip1" ' ' toolStripStatusLabel1 toolStripStatusLabel1.Name = "toolStripStatusLabel1" toolStripStatusLabel1.Size = New System.Drawing.Size(109, 17) toolStripStatusLabel1.Text = "toolStripStatusLabel1" ' ' Form1 ' ClientSize = New System.Drawing.Size(292, 273) Controls.Add(statusStrip1) Name = "Form1" statusStrip1.ResumeLayout(False)

Page 126: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1126

statusStrip1.PerformLayout() ResumeLayout(False) PerformLayout() End SubEnd Class

Los ArraysLas variables que hemos estado usando hasta ahora, eran de tipo escalar: sólo pueden

contener un valor a la vez.

Una de las formas en las que podemos agrupar varios datos es mediante los arrays (o

matrices).

Usando un array, podemos acceder a cualquiera de los valores que tenemos almacenado

mediante un índice numérico. Por ejemplo, si tenemos la variable discografía y

queremos acceder al tercer disco, podríamos hacerlo de la siguiente forma:

discografía(3).

Sabiendo esto, podemos comprobar que sería fácil recorrer el contenido de los arrays

mediante un bucle For.

Qué tipos de datos se pueden usar para crear arrays?

Los tipos de datos de las variables usadas como array, pueden ser de cualquier tipo,

dependiendo de lo que queramos guardar. Por ejemplo, si queremos guardar los

nombres de los discos que tenemos, podemos usar un array del tipo String, que lo que

nos interesa es saber el porcentaje de goles por partido de nuestro equipo de fútbol

favorito, el tipo de datos del array podía ser Decimal. Incluso si queremos, también

podemos crear un array de un tipo que nosotros hayamos definido o de cualquier clase

que exista en el .NET Framework.

Vale, muy bien, pero ¿cómo narices le digo al Visual Basic que una variable es un array?

Declarar variables como arrays

Para poderindicarle al VB

Page 127: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1127

que nuestra intención es crear un array podemos hacerlo de

dos formas distintas, para este ejemplo crearemos un array de tipo Integer:

1- La clásica (la usada en versiones anteriores)

Dim a() As Integer

2- La nueva forma introducida en .NET:

Dim a As Integer()

De cualquiera de estas dos formas estaríamos creando un array de tipo Integer llamada

Cuando declaramos una variable de esta forma, sólo le estamos indicando al VB que

nuestra intención es que la variable a sea un array de tipo Integer, pero ese array no

tiene reservado ningún espacio de memoria.

Reservar memoria para un array

Para poder hacerlo tenemos que usar la instrucción ReDim:

ReDim a(5)

Al ejecutarse este código, tendremos un array con capacidad para 6 elementos.

Y son seis y no cinco, (como por lógica habría que esperar), porque en .NET Framework

el índice menor de un array siempre es cero y en Visual Basic, el índice superior es el

indicado entre paréntesis. Por tanto el array a tendrá reservada memoria para 6 valores

de tipo Integer, los índices serían desde 0 hasta 5 ambos inclusive.

Además de usar ReDim, que realmente sirve para "redimensionar" el contenido de un

array, es decir, para volver a dimensionarlo o cambiarlo por un nuevo valor. Si sabemos

con antelación el tamaño que contendrá el array, podemos hacerlo de esta forma:

Dim a(5) As Integer

Con este código estaríamos declarando la variable a como un array de 6 elementos (de 0

a 5) del tipo Integer.

Cuando indicamos la cantidad de elementos que contendrá el array no podemos usar la

segunda formade declaración

Page 128: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1128

que te mostré anteriormente: Dim a As Integer(5) ya que

esto produciría un error sintáctico.

Nota: Aunque este curso es de Visual Basic .NET te diré que en C#, cuando

declaramos un array con el equivalente a Dim a(5) As Integer, que sería algo

como:

int[] a = new int[5], lo que estamos creando es un array de tipo int (el Integer de

C#) con 5 elementos, de 0 a 4.

Asignar valores a un array

Para asignar un valor a un elemento de un array, se hace de la misma forma que con las

variables normales, pero indicando el índice (o posición) en el que guardará el valor.

Por ejemplo, para almacenar el valor 15 en la posición 3 del array a, haríamos lo

siguiente:

a(3) = 15 o tambien puede ser i = b * a(3)

Los límites de los índices de un array

Como ya he comentado antes, el índice inferior de un array, siempre es cero, esto es

invariable, todos los arrays de .NET Framework empiezan a contar por cero.

Pero el índice superior puede ser el que nosotros queramos, aunque sin pasarnos, que la

memoria disponible se puede agotar si pretendemos usar un valor exageradamente alto.

Realmente el índice superior de un array es 2^64 -1 (el valor máximo de un tipo Long)

Longitud de Un array arreglo.length

Esto es útil si queremos acceder mediante un bucle For, en el siguiente código se

mostrarían todos los elementos del array a:

For i = 0 To a.Length - 1

Console.WriteLine(a(i))

Next

Page 129: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1129

Inicializar un array al declararla

Para inicializar un array debemos declarar ese array sin indicar el número de elementos

que contendrá, seguida de un signo igual y a continuación los valores encerrados en

llaves. Veamos un ejemplo:

Dim a() As Integer = {1, 42, 15, 90, 2}

También podemos hacerlo de esta otra forma:

Dim a As Integer() = {1, 42, 15, 90, 2}

Usando cualquiera de estas dos formas mostradas, el número de elementos será 5, por

tanto los índices irán desde 0 hasta 4.

Los arrays pueden ser de cualquier tipo

En todos estos ejemplos estamos usando valores de tipo Integer, pero podríamos hacer

lo mismo si fuesen de tipo String o cualquier otro.

En el caso de que sean datos de tipo String, los valores a asignar deberán estar entre

comillas dobles o ser variables de tipo String. Por ejemplo:

Dim s As String() = {"Hola", "Mundo, ", "te", "saludo"}

s(3) = "saludamos"

Dim i As Integer

For i = 0 To s.Length - 1

Console.WriteLine(s(i))

Next

Usar un bucle For Each para recorrer los elementos de un array

El tipo de bucle For Each es muy útil para recorrer los elementos de un array, además de

ser una de las pocas, por no decir la única, formas de poder acceder a un elemento de un

array sin indicar el índice.

Dim a() As Integer = {1, 42, 15, 90, 2}

Console.WriteLine("Elementos

Page 130: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1130

del array a()= {0}", a.Length)

Dim i As Integer

For Each i In a

Console.WriteLine(i)

Next

Console.WriteLine("Pulsa Intro para finalizar")

Console.ReadLine()

Sort, el cual sirve para clasificar el contenido de un array.

Para clasificar el array a, podemos hacerlo de dos formas:

a.Sort(a)

La variable a es un array, por tanto es del tipo Array y como tal, tiene el método Sort, el

cual se usa pasando como parámetro el array que queremos clasificar.

Pero esto puede parecer una redundancia, así que es preferible, por claridad, usar el

segundo método:

Array.Sort(a)

En el que usamos el método Sort de la clase Array. Este método es lo que se llama un

método "compartido" y por tanto se puede usar directamente.

Veamos ahora un ejemplo completo en el que se crea y asigna un array al declararla, se

muestra el contenido del array usando un bucle For Each, se clasifica y se vuelve a

mostrar usando un bucle For normal.

Sub Main()

Dim a() As Integer = {1, 42, 15, 90, 2}

Console.WriteLine("Elementos del array a(): {0}", a.Length)

Dim i As Integer

For Each i In a

Page 131: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1131

Console.WriteLine(i)

Next

Console.WriteLine()

Array.Sort(a)

For i = 0 To a.Length - 1

Console.WriteLine(a(i))

Next

Console.WriteLine("Pulsa Intro para finalizar")

Console.ReadLine()

End Sub

Copiar los elementos de un array en otro array

La única forma de tener copias independientes de dos arrays que contengan los mismos

elementos es haciendo una copia de un array a otro.

Esto lo podemos hacer mediante el método CopyTo, al cual habrá que indicarle el array

de destino y el índice de inicio a partir del cual se hará la copia.,ejemplo:

Dim a() As Integer = {1, 42, 15, 90, 2}

Dim b(a.Length - 1) As Integer

a.CopyTo(b, 0)

a(3) = 55

99

Dim i As Integer

For i = 0 To a.Length - 1

Console.WriteLine("a(i) = {0}, b(i)= {1}", a(i), b(i))

Next

En esteejemplo,

Page 132: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1132

inicializamos un array, declaramos otro con el mismo número de

elementos, utilizamos el método CopyTo del array con los valores, en el parámetro le

decimos qué array será el que recibirá una copia de esos datos y la posición (o índice) a

partir de la que se copiarán los datos, (indicando cero se copiarán todos los elementos);

después cambiamos el contenido de uno de los elementos del array original y al mostrar

el contenido de ambos arrays, comprobamos que cada uno es independiente del otro.

Cambiar el tamaño de un array y mantener los elementos que tuviera.

Para poder conseguirlo, debemos usar ReDim seguida de la palabra clave Preserve, por

tanto si tenemos la siguiente declaración:

Dim a() As Integer = {1, 2, 3, 4, 5}

Y queremos que en lugar de 5 elementos (de 0 a 4) tenga, por ejemplo 10 y no perder

los otros valores, usaremos la siguiente instrucción:

ReDim Preserve a(10)

A partir de ese momento, el array tendrá 11 elementos (de 0 a 10), los 5 primeros con

los valores que antes tenía y los nuevos elementos tendrán un valor cero, que es el valor

por defecto de los valores numéricos.

Si sólo usamos ReDim a(10), también tendremos once elementos en el array, pero

todos tendrán un valor cero, es decir, si no se usa Preserve, se pierden los valores

contenidos en el array.

Eliminar un array de la memoria. _ Si en algún momento del programa queremos eliminar elcontenido de un array, porejemplo para que no siga ocupando memoria, ya que es posible que nosiga ocupandomemoria, podemos usar Erase seguida del array que queremos "limpiar", porejemplo:

Erase a ._ Esto eliminará el contenido del array a.

Si después de eliminar el contenido de un array queremos volver a usarlo, tendremos

que ReDimensionarlo con el mismo número de dimensiones que tenía, ya que Erase sólo

borra elcontenido, no la

Page 133: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1133

definición del array.

Los formatos a usar con las cadenas de

Console.Write y WriteLine.

Nota: El formato especificado en la cadena usada en los métodos Write y WriteLine será

el mismo que se puede usar con el método Format de la clase String, por tanto, lo aquí

explicado será aplicable a cualquier cadena.

Los marcadores se indican con un número encerrado entre llaves, los números indicarán

el número u orden del parámetro que siga a la cadena en el que está ese marcador.

Como es habitual, el primer parámetro estará representado por el cero y así

sucesivamente.

Por ejemplo, para mostrar los valores de dos parámetros usaremos algo como esto:

Console.WriteLine("{0} {1}", i, j)

En este ejemplo, el {0} se sustituirá por el valor de la variable i, y el {1} por el valor de

la variable j.

Cuando se indican marcadores, estos deben coincidir con el número de parámetros, es

decir, si usamos el marcador {3}, debería existir ese parámetro, en caso de que haya

menos de 4 parámetros (de 0 a 3), se producirá una excepción.

Arreglos de Variables (Vectores y Matrices)

Un array permite referirse a una serie de elementos del mismo tipo con un mismo nombre queestán almacenados de forma contigua en la memoria, y hace referencia un único elemento de laserie utilizando uno o más índices, como un vector o una matriz en Álgebra.

Ejemplos Grafico de un vector:V

Page 134: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1134

El vector se ha declarado de la siguiente manera: Dim V(4) as Integer

Y se ha llenado así:

V(0)=15

V(1)=21

V(2)=7

V(3)=18

V(4)=4

Otra forma de llenar un vector es al momento de declararlo:

Dim V() As Integer = {15, 21, 7, 18, 4}

Ejemplos Grafico de una Matriz:

La matriz se ha declarado de la siguiente manera: Dim M (2,3) as Integer

Y se ha llenado así:

M(0,0)=0

M(0,1)=1

M(0,2)=2

M(0,3)=3

M(1,0)=4

M(1,1)=5

etc.

Nótese que para llenar una matriz se indica en que fila y columna se va a llenar. Por ejemplo

M

Índices deColumna

Índices de Filas

Page 135: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1135

M(1,3) se esta refiriendo a la fila 1 columna 3

Otra forma de llenar una matriz es al momento de declararlo:

Dim M(,) As Integer = {{0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 5, 8}}

Los arrays de variables podemos clasificarlos de la siguiente manera:

Por su ámbito:

Public La declaración de un array público se hace en la sección de declaraciones de unmódulo (esto estará disponible para todo el proyecto)

Dim o Private. La declaración de un array a nivel del módulo o del formulario se hace en lasección de declaraciones del módulo o del formulario utilizando la sentencia

Por su tamaño:

Arrays estáticos, cuya dimensión es siempre la misma.

Ejemplo:

Dim vector (19) As Double

Este ejemplo declara un array de una dimensión, llamado vector, con veinte elementos,

vector(0), vector(1), ... , vector(19), cada uno de los cuales permite almacenar un Double. Salvoque se indique otra cosa, los índices se empiezan a contar en cero.

Dim matriz(3, 5) As Integer

Este ejemplo declara un array de dos dimensiones, llamado matriz, con 4 x 6 elementos,

matriz(0,1), ... matriz(3,6), de tipo entero.

Public cadena(12) As String

El ejemplo anterior declara un array de una dimensión, cadena, con doce elementos,

caract(0), ... , caract(12), cada uno de los cuáles permite almacenar una cadena de caracteres.

Arrays dinámicos, cuya dimensión se puede modificar durante la ejecución del programa.

El espacio necesario para un array estático se asigna al iniciarse el programa y permanece fijodurante su ejecución. El espacio para un array dinámico se asigna durante la ejecución delprograma. Un array dinámico, puede ser redimensionado en cualquier momento de la ejecución.La forma mejor de redimensionar los arrays es mediante variables.

Para crear un array dinámico primero hay que declararlo como si fuera una array estático, pero sindarle

Page 136: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1136

dimensión. Es decir, se deja la lista -entre paréntesis- vacía sin ponerle ningún número. Esto sehace con la sentencia Public si se quiere que sea global, con Dim o Private si se quiere a nivel demódulo o con Static, Dim o Private si se quiere que sea local.

Para asignar el número actual de elementos del array se utiliza la sentencia ReDim. La

sentencia ReDim puede aparecer solamente en un procedimiento y permite cambiar el número deelementos del array y sus límites inferior y superior, pero no el número de dimensiones. Estoquiere decir que, por ejemplo, no se puede trasformar un vector en una matriz.

Ejemplo:

Aquí se declara el arreglo

Dim V() as integer

Aqui se le asigna un tamaño en este caso 4 elementos (del 0 al 3)

Redim Preserve V(3)

A continuación se presenta un ejemplo de cómo se declaran arrays dinámicos. Si se declara elarray Matriz a nivel del formulario,

Dim Matriz( ) As Integer

más tarde, un procedimiento Calculo puede asignar espacio para el array, como se indica a

continuación:

Sub Calculo( )

...

ReDim Matriz(F, C)

...

End Sub

Cada vez que se ejecuta la sentencia ReDim, todos los valores almacenados en el array se

pierden (si son Variant se ponen a Empty; si son numéricos a cero y si son cadenas de caracteresa la cadena vacía). Cuando interese cambiar el tamaño del array conservando los valores delarray, hay que ejecutar ReDim con la palabra clave Preserve.

Propiedades de los Arreglos:

Entre las más importantes tenemos:

Page 137: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1137

Length.- Devuelve la cantidad de elementos que tiene un arreglo

Ejemplo :

Dim v(4) as String

v.length()à esto devolvería 5 , ya que el arreglo tiene 5 elementos (0 al 4)

Sort.- Ordena un arreglo. Se utiliza la clase Array

Ejemplo

Dim V(3) as Integer ={13,7,16}

Array.Sort(V)à aquí la clase Array esta ordenado el Arreglo

CopyTo.- Copia los datos de un arreglo a otro en una posición dada.

Sintaxis: Arreglo1.CopyTo (Arreglo2, Posición)

Ejemplo

Dim V1(3) as Integer ={13,7,16}

Dim V2(3) as Integer

V1.CopyTo(V2,0)à Aquí se esta copiando en el arreglo V2 a partir de la posición 0 los datos quehay en el arreglo V1

GetUpperBound (Indice_Dimension).- Esta función devuelve el índice mayor de un arreglo.

Dim V(3) as Integer

Si nos damos cuenta el arreglo declarado es un arreglo de una dimensión.

Esta dimensión seria la dimensión 0

v.GetUpperBound(0)à esto devolvería 3

Ahora si el arreglo tuviera2 dimensiones Dim M (2,3) as Integer, tendríamos la dimensión 0 (0 al2) y la dimensión 1 (0 al 3)

M.GetUpperBound (0)à esto devuelve 2

M.GetUpperBound (1)à esto devuelve 3

GetLowerBound (Indice_Dimension).- Esta función devuelve el índice menor de un arreglo.

Casi siempre el índice menor será 0 al no ser que el arreglo empiece con otro índice.

EjemplosPrácticos en

Page 138: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1138

Vb Net (Arreglos)

1.- Llene un vector de 5 elementos con números aleatorios y muéstrelos en un listbox

Public Class Form1

Dim vec (4) As Integer Se declara el vector

Private Sub Button2_Click( ) Handles Button2.Click

Dim I As Int16 : Dim N As Int16

Hacemos un for desde 0 hasta el índice mayor del arreglo en este caso 4

For I = 0 To Vec.GetUpperBound(0)

N = CInt (Rnd () * 100) Generamos el numero aleatorio

Vec (I) = N Guardamos el numero en el vector

Agregamos al Listbox el dato del vector que se acaba de llenar

Me.ListBox1.Items.Add(vec(I))

Next

End Sub

End Class

2.- Ingrese un numero en una caja de texto, al hacer click en elbotón Agregar se debe de agregar el numero a un arreglodinámico además de mostrador en un listbox

Public Class Form2

Aquí se declara el arreglo que es dinámico (nótese que no vanada entre los paréntesis)

Dim V () As Int16

Este procedimiento se encarga de llenar el listbox con los datosque tiene el vector

Sub Listar()

Page 139: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1139

Me.ListBox1.Items.Clear()

Dim i As Int16

Me.ListBox1.Items.Clear()

For i = 0 To V.GetUpperBound(0)

Me.ListBox1.Items.Add(V(i))

Next

End Sub

Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)

Aqui se el asigna un elemento al vector (el índice de ese elemento será 0) ni bien carga elformulario

ReDim Preserve V(0)

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

Dim pos As Int16

pos = V.GetUpperBound (0) Capturamos el índice mayor del arreglo

V (pos) = Me.TextBox1.Text Llenamos el vector en la ultima posición el dato ingresado

ReDim Preserve V (pos + 1) Se le agrega un elemento mas al arreglo

End Sub

End Class

3.- Llene un vector de 100 elementos con números aleatorios sin que estos se repitan ymuéstrelos en un listbox

Public Class Form3

Dim Vec (99) As Integer Declaramos el vector

Ahora creamos una función llamada BuscarItem , esta función recibirácomo parámetro un numero y se buscara en todo el vector.

Si ese numero se encuentra la función devuelve True caso contrarioFalse

Page 140: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1140

Function BuscarItem(ByVal N%) As Boolean

Dim Estado As Boolean = False : Dim I As Integer

For I = 0 To Vec.GetUpperBound(0)

If Vec(I) = N Then

Estado = True

Exit For

End If

Next

BuscarItem = Estado

End Function

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

Dim N As Int16 : Dim J As Int16 = 0

Me.ListBox1.Items.Clear()

Do While J <= Vec.GetUpperBound (0) Aquí se inicia el bucle para llenar los datos al vector

N = CInt (Rnd () * 100) Se genera el numero aleatorio

If Not BuscarItem(N) Then Llamamos a la función BuscarItem y le enviamos el numerogenerado si la función devuelve False quiere decir que no lo encontró.

Si no lo encontró lo agrega al vector.

Vec(J) = N

Me.ListBox1.Items.Add (Vec (J)) Ademas de agrega a la lista

J = J + 1 aumentamos el valor de la variable J que es la que esta controlando laposición del vector que se esta llenando

End If

Loop

End Sub

End Class

Page 141: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1141

4.- Llene un vector dinámico con nombres de países.

Al hacer click en el botón Agregar se mostrara un INPUTBOX donde se debe de ingresar elnombre del país, inmediatamente se mostrara un mensaje indicando si se quiere continuar alocual si se responde Si se repetirá el proceso.

El proceso terminara cuando se responda No

Además hay un botón Buscar que mostrar un INPUTBOX donde se ingresara el nombre de unpaís, si ese país existe en el arreglo se seleccionara del Listbox, caso contrario se mostrara unmensaje indicando que No existe

Public Class Form4

Dim V () As String Se declara el arreglo dinámico

Private Sub CmdAgregar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Dim Rpta As Integer, P As String

Dim I As Integer = 0

Do Empieza el proceso hasta cuando en el mensaje se responda No

P = InputBox ("Ingrese País") Se abre un cuadro de dialogo para ingresar un país

ReDim Preserve V (I) Se agrega un elemento al vector

V (I) = P Se agrega el país al vector

Me.ListBox1.Items.Add (UCase (V (I))) Se agrega el valor del vector al Listbox

Se incrementa la variable es la que controla la posición del elemento que se esta llenando en levector

I = I + 1

Page 142: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1142

Aquí se muestra el mensaje y la respuesta se guarda en la variable Rpta (Son 2 posiblesrespuestas Si VbYes y No VbNo)

Rpta = MsgBox ("Desea Continuar...?", MsgBoxStyle.Question + MsgBoxStyle.YesNo,"Confirmar")

Loop Until Rpta = vbNo

End Sub

Private Sub CmdBuscar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

Dim P As String : Dim Estado As Boolean = False

P = InputBox ("Ingrese país a buscar") Se ingresa el país a buscar

Dim I%

For I = 0 To V.GetUpperBound(0)

If UCase (P) = V (I) Then Se busca y si e encuentra se selecciona el listbox

Me.ListBox1.SelectedIndex = I

Estado = True

End If

Next

Al final si Estado es igual False quiere decir que no se encontró

If Not Estado Then

MsgBox("No se encontró el país", MsgBoxStyle.Critical, "Advertencia")

End If

End Sub

End Class

5.- Llene una matriz con números aleatorios ymuéstrelos en un Listview

Public Class Form5

Dim m (4, 4) As Integer Se declara la matriz

Este sub se encarga de llenar los datos de la matriz

Page 143: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1143

al Listview

Sub Llenar ()

Dim F%, C%

For F = 0 To m.GetUpperBound(0)

Me.ListView1.Items.Add(m(F, 0))

For C = 1 To m.GetUpperBound(1)

Me.ListView1.Items(F).SubItems.Add(m(F, C))

Next

Next

End Sub

Private Sub Form5_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)

Dim F%, C%

For F = 0 To m.GetUpperBound(0)

For C = 0 To m.GetUpperBound(1)

m(F, C) = CInt(Rnd() * 100)

Next

Next

Me.ListView1.Columns.Add("1", 40, HorizontalAlignment.Center)

Me.ListView1.Columns.Add("2", 40, HorizontalAlignment.Center)

Me.ListView1.Columns.Add("3", 40, HorizontalAlignment.Center)

Me.ListView1.Columns.Add("4", 40, HorizontalAlignment.Center)

Me.ListView1.Columns.Add("5", 40, HorizontalAlignment.Center)

Me.ListView1.View = View.Details

Call Llenar()

End Sub

End Class

Page 144: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1144

Bueno para este ejercicio 5 tenemos que tener en cuenta algo:

Se esta utilizando un Listview para poder mostrar los datos de la matriz, este control permitetener varias columnas y filas como si se tratase de una tabla

Para agrega una columna se hace lo sgte:

Me.ListView1.Columns.Add("1", 40, HorizontalAlignment.Center)

Aquí se esta agregando una columna llamada que tiene de ancho 40 y su alineación será alcentro

Hay que tener en cuenta también:

Me.ListView1.View = View.Details

Esto hace que se vea las columnas, ya que sin esta propiedad no se podría ver los encabezadosde las columnas ni tampoco todas las filas creadas.

Ahora para llenar algo a un ListView se hace:

Me.ListView1.Items.Add( Peru )

En este ejemplo se esta agregando Perú al listview, cada vez que se agrega un Ítem al Listvieweste toma un índice que empezara de 0

Que pasaría si queremos seguir llenando mas países en la misma fila pero en otras columnas?

La sentencia seria esta

Me.ListView1.Items(0).SubItems.Add( Bolivia )

Notese esto: Items(0).SubItems.Add( Bolivia )

Aquí dice que Bolivia será un SubItem de la fila 0 ósea se mostrara en otra columna que no sea laprincipal (La principal seria la columna 0)

6.- Llene 2 matrices con números aleatorios y en una tercera matriz guarde la suma de las 2anteriores, muestre las matrices en Listview

Public Class Form6

Dim m1(4, 4) As Integer

Page 145: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1145

Dim m2(4, 4) As Integer : Dim m3(4, 4) As Integer

Se crea un procedimiento llamado FormatoLista es te recibe como parámetro el listview y le daráel formato correspondiente

Sub FormatoLista(ByRef Lista As ListView)

Lista.Columns.Add("1", 40, HorizontalAlignment.Center)

Lista.Columns.Add("2", 40, HorizontalAlignment.Center)

Lista.Columns.Add("3", 40, HorizontalAlignment.Center)

Lista.Columns.Add("4", 40, HorizontalAlignment.Center)

Lista.Columns.Add("5", 40, HorizontalAlignment.Center)

Lista.View = View.Details

End Sub

Se crea un procedimiento llamado Llenar este recibe como parámetro el listview y el arreglo alcual llenara el Listview enviado

Sub Llenar(ByRef Lista As ListView, ByVal X(,) As Integer)

Dim F%, C%

For F = 0 To X.GetUpperBound(0)

Lista.Items.Add(X(F, 0))

For C = 1 To X.GetUpperBound(1)

Lista.Items(F).SubItems.Add(X(F, C))

Next

Next

End Sub

Private Sub Form6_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)Randomize()

Dim F%, C%

Aqui se llenan las 3 matrices con números aleatorios

For F = 0To

Page 146: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1146

m1.GetUpperBound(0)

For C = 0 To m1.GetUpperBound(1)

m1(F, C) = CInt(Rnd() * 100)

Next

Next

For F = 0 To m2.GetUpperBound(0)

For C = 0 To m2.GetUpperBound(1)

m2(F, C) = CInt(Rnd() * 100)

Next

Next

For F = 0 To m3.GetUpperBound(0)

For C = 0 To m3.GetUpperBound(1)

m3(F, C) = m1(F, C) + m2(F, C)

Next

Next

Call FormatoLista (Me.ListView1) Se le da formato al ListView1

Call FormatoLista(Me.ListView2)

Call FormatoLista(Me.ListView3)

Call Llenar (Me.ListView1, m1) Aqui se llena el Listview1 con la matriz m1

Call Llenar(Me.ListView2, m2)

Call Llenar(Me.ListView3, m3)

End Sub

End Class

7.- Llene 1 matriz con números aleatorios muestrela en un ListView, Al hacer click en el botónCalcular se debe de mostrar la suma de su diagonal principal y secundaria.

Page 147: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1147

Public Class Form7

Dim m(4, 4) As Integer

Sub Llenar () Este sub llena de la matriz al ListView

Dim F%, C%

For F = 0 To m.GetUpperBound(0)

Me.ListView1.Items.Add(m(F, 0))

For C = 1 To m.GetUpperBound(1)

Me.ListView1.Items(F).SubItems.Add(m(F, C))

Next

Next

End Sub

Private Sub Form7_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)Dim F%, C%

For F = 0 To m.GetUpperBound(0) Aqui se sella la matriz

For C = 0 To m.GetUpperBound(1)

m(F, C) = CInt(Rnd() * 10)

Next

Next

Se le da formato al ListView

Me.ListView1.Columns.Add("1", 40, HorizontalAlignment.Center)

Me.ListView1.Columns.Add("2", 40, HorizontalAlignment.Center)

Me.ListView1.Columns.Add("3", 40, HorizontalAlignment.Center)

Page 148: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1148

Me.ListView1.Columns.Add("4", 40, HorizontalAlignment.Center)

Me.ListView1.Columns.Add("5", 40, HorizontalAlignment.Center)

Me.ListView1.View = View.Details

Call Llenar()

End Sub

Private Sub CmdCalcular_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Dim F%, C%, Suma1%, Suma2%

For F = 0 To m.GetUpperBound(0)

For C = 0 To m.GetUpperBound(1)

If F = C Then

suma1 = suma1 + m(F, C)

End If

If F + C = 4 Then

Suma2 = Suma2 + m(F, C)

End If

Next

Next

Me.lbldiag1.Text = Suma1

Me.lbldiag2.Text = Suma2

End Sub

Ejercicios Propuestos (Arreglos)

1.- Al hacer clic en un botón Agregar se ingresara en un InputBox una cadena, esta cadena seagregara a un vector dinámico y se mostrara en un listbox.

Luego se deberá de ingresar Una letra en una caja de texto, al hacer clic en un botón Buscar sedebe de mostrar la cantidad de veces que se repite esa letra en todo el arreglo dinámico.

2.- Generar 100 números aleatorios y guardarlos en un arreglo.

Al hacer clic en un botón Separar se deberá de recorrer el arreglo anterior y se separaran lospares de los

Page 149: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1149

impares en arreglos diferentes.

Los 3 arreglos se mostraran en un listbox

3.- Llenar una matriz de 5 x 5 con números aleatorios sin que estos se repitan, luego mostrarlos enun ListView

4.- Llenar un vector de 25 elementos con números aleatorios, luego pasarlo a una matriz de 5 x 5

Mostrar el arreglo en un listbox y la matriz en un Listview

5.- Llenar 2 matrices de 5 x 5 con números aleatorios, luego se deberá de escoger entre un grupode opciones (Radiobutton) un signo de operación que podrá ser +, - , *, /.

Al hacer clic en un botón Calcular se deberá de llenar una tercera matriz con la operaciónseleccionado entre la matriz 1 y la matriz 2, es decir si se escoge el signo por ejemplo sedeberá de sumar cada elemento de la matriz 1 con la matriz 2

6. Llenar un vector con números aleatorios.

Luego se debe de ingresar un número, si este existe se debe de eliminar dicho número delarreglo.

Utilice un arreglo dinámico.

7.- Llenar un vector con 100 números aleatorios del 1 al 20.

Luego la hacer clic en un botón Resumen debe de salir en un listbox los números que segeneraron en el arreglo pero sin repetirse.

ARREGLOS DE CONTROLES

EN Vb Net se puede hacer que un evento funcione para varios controles a esto se le denominaArreglo de controles

Por ejemplo

En este formulario tenemos 3 botones queremos que el eventoclick de los 3 botones sea el mismo para todos.

Para eso entramos al evento de cualquier botón por ejemplo elprimero (botón- Nuevo)

Inicialmente el botón estará así:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal eAs System.EventArgs) Handles Button1.Click

End Sub

Page 150: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1150

Lo que se tiene que hacer es agregar los otros controles con su evento click

Al final el botón quedara así:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles Button1.Click, Button2.Click, Button3.Click

End Sub

De esta forma lo que se programe en el boton1_click funcionara para el botn2_click y elboton3_click

Ahora podriamos programar esto:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles Button1.Click, Button2.Click, Button3.Click

Select Case sender.text

Case "Nuevo"

Call limpia()

Case "Calcular"

Call calcular()

Case "Salir"

End

End Select

End Sub

Donde sender.text devuelve el valor de la propiedad Text del botón al cual se hizo click.

Depende de eso se podrá saber que botón se presiono.

Ahora miren loque se

Page 151: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1151

programo en el Textbox1 en le evento keypress

Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e AsSystem.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress, TextBox2.KeyPress,TextBox3.KeyPress, TextBox4.KeyPress

Select Case Asc(e.KeyChar)

Case 48 To 57

Case Else

MsgBox("Error solos e acepta Números")

e.Handled = True

End Select

End Sub

Esta programación sirve para que le texto solo acepte números, pero si nos damos cuenta esteevento también funcionara para el textbox2, textbox3 y textbox4

Bueno aquí encontramos los procedimientos que son llamados cuando se presiona el botónCalcular y Nuevo

Sub limpia()

Dim obj As Object

For Each obj In Me.Controls

If TypeOf obj Is TextBox Then

obj.text = ""

End If

Next

End Sub

Sub calcular()

Dim obj As Object

Dim Suma As Integer = 0

For Each obj In Me.Controls

Page 152: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1152

If TypeOf obj Is TextBox Then

Suma = Suma + Val(obj.text)

End If

Next

MsgBox("La suma de los números es :" & Suma, MsgBoxStyle.Information, "Resultado")

End Sub

Ahora veremos como crear un arreglo de controles en forma dinámica

Public Class Form1

''Aquí se esta creando el evento click para MIBOTON1 (que serán todos los botones)

Private Sub Miboton1_Click(ByVal senderAs Object, ByVal e As System.EventArgs)

MsgBox(sender.tag)

End Sub

Private Sub Form1_Load(ByVal sender AsSystem.Object, ByVal e As System.EventArgs)Handles MyBase.Load

Dim i As Integer

Dim Miboton As Button ''Se declara una variable de tipo button

For i = 1 To 3

Miboton = New Button ''Se crea un nuevo boton

Miboton.Text = "Boton" & i ''Se pone nombre a ese nuevo botón

Miboton.Top = 50 ''Se le da una ubicación de arriba hacia abajo

Miboton.Left = (i * 100) ''Se le da una ubicación de derecha a izquierda al botón

Miboton.Tag = i ''Se le pone un valor a la propiedad TAG para diferenciarlo de los demás

Me.Controls.Add (Miboton) ''Se agrega el botón al formulario

AddHandler

Page 153: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1153

Miboton.Click, AddressOf Miboton1_Click ''Se crea el evento click al botón

''Ojo el evento click se esta creando con el nombre de MIBOTON1

Next

End Sub

Ejemplos Prácticos en Vb Net (Arreglos de Controles)

1.- Diseñar un programa que simule el funcionamiento de una calculadora

Lo primero que debe de hacerse es crear 2 grupos de arreglos decontroles, el primer grupo de arreglos estará conformado por losnúmeros (del 0 al 9) y el otro grupo de arreglo estará conformado porlos signos (+,-,*, /)

Luego en el formulario programamos lo siguiente:

Public Class Form1

Aqui se declaran las variables publicas para el formulario

Dim Signo As String, V1 As Integer, V2 As Integer

Noten que aquí se esta programando en todos los botones de losnúmeros ya que es un arreglo.

Private Sub cmd0_Click (ByVal sender As System.Object, ByVal e As System.EventArgs) Handlescmd0.Click, cmd1.Click, cmd2.Click, cmd3.Click, cmd4.Click, cmd5.Click, cmd6.Click, cmd7.Click,cmd8.Click, cmd9.Click

Me.txtnum.Text = Me.txtnum.Text & sender.text

End Sub

Noten que aquí se esta programando en todos los signos ya que es un arreglo.

Private Sub cmdmas_Click (ByVal sender As System.Object, ByVal e As System.EventArgs)Handles cmdmas.Click, cmdmenos.Click, cmdpor.Click, cmdentre.Click

V1 = Val (txtnum.Text) Aqui guardamos lo que hay en le texto

Signo = sender.text Aqui se guarda el signo seleccionado

txtnum.Text = ""

End Sub

Page 154: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1154

Aquí se calcula la operación dependiendo del signo

Private Sub cmdigual_Click (ByVal sender As System.Object, ByVal e As System.EventArgs)Handles cmdigual.Click

Dim res As Integer : V2 = Val (txtnum.Text)

Select Case Signo

Case "+" : res = V1 + V2

Case "-" : res = V1 - V2

Case "*" : res = V1 * V2

Case "/" : res = V1 / V2

End Select

txtnum.Text = res

End Sub

End Class

2.- Diseñar un programa que simule el juego de un bingo

Este formulario llenara 25 botones con números aleatorios, luegocada segundo se mostrara en un Label y este se buscara en losbotones si se encuentra el botón se desactivara.

Public Class Form2

Dim Bolos (99) As Integer :Dim Cartilla (24) As Integer

Dim Nro%, Cont%

El arreglo bolos tendrá números del 1 al 100 en desorden.

La idea es que vayan saliendo los bolos uno por uno, pero para esoantes en el arreglo ya debe de estar los números generados

El arreglo cartilla tendrá 25 números aleatorios sin que estos se repitan.

La idea es llenar los botones con los números que tendrá este arreglo.

La función Buscar recibe un numero que es el numero que se va a buscar, además recibe otroparámetro (por referencia) este parámetro será el arreglo donde se piensa buscar el numero

Page 155: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1155

Si el numero se encuentra en el arreglo la función devolverá true caso contrario devolveráfalse

Function Buscar (ByVal N%, ByRef V () As Integer) As Boolean

Dim I% : Dim Sw As Boolean : Sw = False

For I = 0 to V.GetUpperBound (0)

If N = V (I) Then

Sw = True

Exit For

End If

Next

Buscar = Sw

End Function

El procedimiento Llenar" se encarga de llenar un arreglo con números aleatorios sin que estos serepitan, recibe un parámetro llamado (por referencia) este parámetro será el arreglo donde sepiensa llenar los números aleatorios

Sub Llenar (ByRef v () As Integer)

Dim I%, N%

Do While I <= v.GetUpperBound (0)

N = CInt (Rnd () * 99) + 1

If Not Buscar (N, v) Then

v(I) = N

I += 1

End If

Loop

End Sub

Page 156: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1156

El procedimiento LlenaCartilla" se encarga de llenar los botones con lo que tiene el arreglo Cartilla

Sub LlenaCartilla ()

Dim Obj as Object : Dim I% : I = 0

For Each Obj In Me.Controls

If TypeOf Obj Is Button And Obj.tag <> "A" Then

Obj.text = Cartilla (I)

I += 1

End If

Next

End Sub

NOTA: Hay que tener en cuenta que al botón Jugar se le debe poner en la propiedad TAG laletra

El procedimiento BuscarEnCartilla" se encarga de buscar el numero que saldrá cada segundo enlos botones si se encuentra se desactivara le botón

Sub BuscarEnCartilla ()

Dim Obj As Object

For Each Obj In Me.Controls

If TypeOf Obj Is Button And Obj.tag <> "A" Then

If Trim (Obj.text) = Trim (Me.LblBolo.Text) Then

Obj.enabled = False

Cont += 1

Exit For

End If

End If

Next

If Cont = 25 Then

Page 157: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1157

Timer1.Enabled = False

MsgBox ("UD ha ganado el juego de bingo")

End If

End Sub

Private Sub cmdJugar_Click (ByVal sender As System.Object, ByVal e As System.EventArgs)Handles cmdJugar.Click

Call Llenar (Bolos) Aquí se llenan los bolos

Call Llenar (Cartilla) Aquí se llenan los números de la cartilla

Call LlenaCartilla ()

Nro = 0

Cont = 0

Me.Timer1.Enabled = True

End Sub

Aqui en el timer sale cada numero que hay en el arreglo Bolo y por cada numero que sale sebuscara en los botones

Private Sub Timer1_Tick (ByVal sender As System.Object, ByVal e As System.EventArgs)Handles Timer1.Tick

Me.LblBolo.Text = Bolos (Nro) : Call BuscarEnCartilla () : Nro += 1

If Nro > Bolos.GetUpperBound (0) Then

Timer1.Enabled = False

End If

End Sub

End Class

ESTRUCTURAS DE DATOS

Las estructuras son parecidas que las enumeraciones pero con muchas ventajas, entre ellas quecada elemento de la estructura puede ser de cualquier tipo integer, double, String o matriz,además, se pueden declaran funciones dentro de la estructura, constructores, ámbito de variables

independientes.Etc.

Nota: El timer1 deberá de estar desactivadoinicialmente

Page 158: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1158

Una declaración de estructuras empieza con la instrucción Structure, y finaliza con la instrucciónEnd Structure. Entre estas dos instrucciones debe declararse por lo menos un miembro.

Si desea mantener un nombre de empleado, su teléfono y su salario juntos en una única variable,puede declarar una estructura para esta información de la siguiente manera:

Structure Empleado

Dim Nombre As String : Dim Telefono As String : Dim Salario As Decimal

End Structure

Ahora si declaramos una variable de ese tipo seria así:

Dim R as Empleado

Parra llenar datos en esa variable seria:

R.nombre= Anastacia : R.telefono= 5682547 : R.salario=1000.00

Ahora si queremos llenar los datos de varios empleados, se tendría que declarar un arreglo eempleados

Dim R(4) as Empleado

Para ingresar datos a la variable seria así:

R(0).nombre= Juan :R(0).telefono= 2457810

R(0).salario=250 :R(1).nombre= Maria

R(1).telefono= 4178920 :R(1).salario=590

R

Page 159: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1159

Y así sucesivamente

Creación de Menús, Toolbar, ImageList y StatusBar

Imagelist

Es un control que va a permitir almacenar imágenes y cada imagen toma un índice empezando de0

Se agrega el ImageListLuego nos vamos a sus propiedades yescogemos la propiedad Images

En la propiedad Images iremos agregando las imágenes con las cuales vamos a trabajar

Toolbar

Page 160: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1160

Es un control que va a permitir insertar un barra de herramientas va de la mano con el controlIMAGELIST para colocar las imágenes por cada botón

Se agrega el toolbar al formularioUna vez agregado nos vamos a sus propiedades y en lapropiedad ImageList se escoge el imagelist del cual sevan a jalar las imágenes.

Luego se escoge la propiedad Buttons

En la propiedad Buttons se podrá agregar botones al Toolbar haciendo click en el botónAgregar .

Una vez agregado el botón cambiamos sus propiedades como Text ponemos el texto que vamostrar, en Tag se le pone un nombre que identificara al botón y en ImageIndex se seleccionael índice de la imagen que se mostrara en ese botón.

Page 161: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1161

Una vez que ya se agregaron los botones se podrá programar en el toolbar

. Private Sub ToolBar1_ButtonClick(ByVal sender As System.Object, ByVal e AsSystem.Windows.Forms.ToolBarButtonClickEventArgs) Handles ToolBar1.ButtonClick

Select Case e.Button.Tag

Case "N" : Call NUEVO()

Case "G" : Call GRABAR()

Case "M" : Call MODIFICAR()

Case "E" : Call ELIMINAR()

Case "S" : Me.Close()

End Select

End Sub

La propiedad e.Button.Tag recupera el valor del Tag que se le dio a cada botón.

Se supone que al botón Nuevo se le puso en la propiedad Tag , al grabar , etc.

Statusbar

Es un control que va a permitir insertar una barra de estado dentro de un formulario.

Se agrega el StatusBar al formulario y hay que cambiarla propiedad ShowPanels y poner el valor de True(Esto permitirá que se muestre los paneles que se van a

Page 162: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1162

crear)

Luego nos vamos a la propiedad Panels y se mostrara la sgte. Ventana:

Aquí agregamos los paneles que tendrá elStatusBar , por cada panel que se agrega

se cambia la propiedad Text ya que aquíse pondrá lo que mostrara el panel.

Si se desea se podrá dejar vació.

Si se quiere llenar un panel de unStatusbar en ejecución se hará lo sgte:

Usu= Juana

Me.StatusBar1.Panels(1).Width = 350

Me.StatusBar1.Panels(1).Text = " Bienvenido Usuario " & usu

Donde Panels (1) es el índice del panel con el cual se va a trabajar

Ejemplo Práctico en Vb Net (Estructuras de Datos)

1.- Realizar un mantenimiento al arreglo Curso que tendrá 3 campos (Codigo, Nombre y Precio)

Primero en un modulo se crea unaestructura

Module Module1

Structure Curso

Dim Cod As String

Dim Nom As String

Page 163: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1163

Dim precio As Double

End Structure

End Module

Ahora en el formulario

Dim Índice%

Private Sub Cursos_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)

Me.ListView1.View = View.Details

Me.ListView1.FullRowSelect = True

Me.ListView1.Columns.Add("Codigo", 50, HorizontalAlignment.Center)

Me.ListView1.Columns.Add("Nombre", 100, HorizontalAlignment.Left)

Me.ListView1.Columns.Add("Precio", 100, HorizontalAlignment.Center)

Call listar()

End Sub

Ir al primer registro del arreglo

Private Sub CmdInicio_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

Indice = 0 : Call Mostrar(Indice)

End Sub

Ir al siguiente registro del arreglo

Private Sub CmdNext_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

If índice >= C.GetUpperBound(0) - 1 Then

MsgBox ("Se ha llegado al fin del archivo")

Else

Indice = Indice + 1 : Call Mostrar(Indice)

End If

End Sub

Page 164: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1164

Ir al anterior registro del arreglo

Private Sub CmdPrevious_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

If índice <= 0 Then

MsgBox("Se ha llegado al inicio del Archivo")

Else

Indice = Indice 1 : Call Mostrar(Indice)

End If

End Sub

Ir al ultimo registro del arreglo

Private Sub CmdUltimo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

Indice = C.GetUpperBound(0) - 1

Call Mostrar(Indice)

End Sub

Depende del botón al cual se le hizo click se llamara a una rutina

Private Sub ToolBar1_ButtonClick(ByVal sender As System.Object, ByVal e AsSystem.Windows.Forms.ToolBarButtonClickEventArgs) Handles ToolBar1.ButtonClick

Select Case e.Button.Tag

Case "N" : Call NUEVO()

Case "G" : Call GRABAR()

Case "M" : Call MODIFICAR()

Case "E" : Call ELIMINAR(Indice)

Case "S" : Me.Close()

End Select

End Sub

Aqui vemos los procedimiento que serán llamados en el ToolBar

Sub listar()

Page 165: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1165

Dim I% : Me.ListView1.Items.Clear()

For I = 0 To C.GetUpperBound(0) - 1

Me.ListView1.Items.Add(C(I).Cod) : Me.ListView1.Items(I).SubItems.Add(C(I).Nom)

Me.ListView1.Items(I).SubItems.Add(C(I).precio)

Next

End Sub

Sub NUEVO()

Dim CODIGO as string, P as integer : P = C.GetUpperBound(0)

If P = 0 Then

txtcod.Text = "C001"

Else

CODIGO = C(P - 1).Cod : txtcod.Text = "C" &Microsoft.VisualBasic.Right(CStr(Val(Microsoft.VisualBasic.Right(CODIGO, 3)) + 1001), 3)

End If

txtprecio.Text = "" : txtnom.Text = ""

txtnom.Focus()

End Sub

Sub GRABAR()

Dim P% : P = C.GetUpperBound(0)

C(P).Cod = txtcod.Text : C(P).Nom = txtnom.Text

C(P).precio = CDbl(txtprecio.Text) : ReDim Preserve C(P + 1)

Call listar()

End Sub

Sub MODIFICAR()

C(índice).Cod = txtcod.Text : C(índice).Nom = txtnom.Text

C(índice).precio

Page 166: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1166

= CDbl(txtprecio.Text) : Call listar()

End Sub

Sub ELIMINAR()

For I = Indice To C.GetUpperBound(0) - 1

C(I) = C(I + 1)

Next

ReDim Preserve C(C.GetUpperBound(0) - 1)

Call listar()

End Sub

2.- Realizar una consulta donde se escoja un Curso de un combo y salgan las notas de ese curso.

Para eso se deberá de crear 2 estructuras una llamad Cursos y otra llamada Notas

Antes que todo debemos de crear unMODULO

En el Modulo se programa esto:

Structure Curso

Dim Cod As String : Dim Nom As String

Dim precio As Double

End Structure

Structure Nota

Dim codcur As String

Dim codalu As String : Dim not1 As Integer

Dim not2 As Integer

End Structure

Se crean las estructuras

Public C(2) As Curso :Public N(3) As Nota

Page 167: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1167

Se declaran la variable que hace referencia a la estructura Curso y la variable que hacereferencia ala estructura Nota

Se debe de crear un procedimiento llamado main en donde se ingresaran datos manualmente alas variables y

Sub Main ()

C(0).Cod = "C001" : C(0).Nom = "Java" : C(0).precio = 250

C(1).Cod = "C002" : C(1).Nom = "SQL" : C(1).precio = 300

C(2).Cod = "C003" : C(2).Nom = "Flash" : C(2).precio = 180

N(0).codcur = "C001" : N(0).codalu = "Javier Santana"

N(0).not1 = 12 : N(0).not2 = 17 : N(1).codcur = "C001"

N(1).codalu = "Frank Rojas" : N(1).not1 = 12

N(1).not2 = 18 : N(2).codcur = "C003"

N(2).codalu = "Mia Solano" : N(2).not1 = 15

N(2).not2 = 12 : N(3).codcur = "C003"

N(3).codalu = "Very Grijalva" : N(3).not1 = 14

N(3).not2 = 16

Se llama al formulario form1

Dim xform as new Form1 : Xform.showdialog()

End Sub

Nota: Cuando se ejecuta el proyecto el objeto inicial debe de ser el Sub Main .

Para eso lo que se debe de hacer es ir al Explorador de Soluciones y escoger en objeto Inicialel Sub Main

Esto hará que el objeto a ejecutarse inicialmente sea el procedimiento creado llamado Main

Ahora en el formulario debemos de hacerlo siguiente:

Public Class Form2

Aqui se llena el combo con lo que tiene el arreglo C

Private SubFrmNotasCurso

Page 168: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1168

_Load( ) Handles MyBase.Load

Dim F%

For F = 0 To C.GetUpperBound(0)

Me.CBOCURSOS.Items.Add(C(F).Nom)

Next

Me.ListView1.View = View.Details

Me.ListView1.Columns.Add("ALUMNO", 100, HorizontalAlignment.Center)

Me.ListView1.Columns.Add("NOTA 1 ", 100, HorizontalAlignment.Center)

Me.ListView1.Columns.Add("NOTA 2 ", 100, HorizontalAlignment.Center)

End Sub

Al escoger un curso deben de salir las notas de ese curso

Private Sub CBOCURSOS_SelectedIndexChanged( ) HandlesCBOCURSOS.SelectedIndexChanged

Dim OP$, Y%, J%, R%

OP = C(Me.CBOCURSOS.SelectedIndex).Cod : Me.ListView1.Items.Clear()

R = 0

For Y = 0 To N.GetUpperBound(0)

If OP = N(Y).CodCur Then

Me.ListView1.Items.Add(N(Y).nom)

Me.ListView1.Items(R).SubItems.Add(N(Y).not1)

Me.ListView1.Items(R).SubItems.Add(N(Y).not2)

R = R + 1

End If

Next

lbltotal.Text = R

End Sub

Page 169: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1169

TREEVIEW Y LISTVIEW

Treeview

El control Treeview de formularios Windows Forms muestra una jerarquía de nodos similar almodo en que se muestran los archivos y las carpetas en el panel izquierdo del Explorador deWindows. Cada nodo puede contener otros nodos, que se denominan nodos secundarios. Losnodos primarios, nodos que contiene nodos secundarios, pueden mostrarse expandidos ocontraídos. Si la propiedad CheckBoxes se establece en true, las vistas de árbol pueden mostrarcasillas de verificación junto a los nodos. Entonces, es posible activar o desactivar nodos medianteprogramación establecimiento la propiedad Checked del nodo en true o false.

APLICACIÓN 1:

En esta aplicación con Treeview, se agregara un nodo raíz y en los nodos secundarios seagregaran los datos.

Código Fuente:

En el boton Add Categorías que tiene comonombre btnCategorias.

Private Sub btnCategorias_Click(ByVal sender AsSystem.Object, ByVal e As System.EventArgs)Handles btnCategorias.Click

TreeView1.Nodes.Clear() ‘Limpiar los nodosdel TreeView1

TreeView1.Nodes.Add("Shapes") ‘Creandonodo raiz

TreeView1.Nodes.Add("Colores") ‘Creando nodo raiz

HabilitarBotones()

End Sub

Sub HabilitarBotones()

btnColores.Enabled = True : btnFormas.Enabled = True

End Sub

Page 170: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1170

En el boton Add Colores => que tendra como nombre btnColores.

Private Sub btnColores_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles btnColores.Click

Dim nodo As TreeNode ‘Representa un nodo del TreeView

La colección de Nodes contiene todos los objetos TreeNode secundarios asignados al actualobjeto TreeNode.

Al agregar, quitar o clonar un objeto TreeNode, se agregan o clonan todos los nodos delarbol secundarios.

nodo = TreeView1.Nodes(1) : nodo.Nodes.Add("Azul")

nodo.Nodes.Add("Rojo") : nodo.Nodes.Add("Verde")

nodo.Expand() ‘Para expandir todos los niveles de nodos de arbol secundarios en lacolección de Nodes.

End Sub

En el boton Add Formas (Shapes) => que tendra como nombre btnFormas.

Private Sub btnFormas_Click( .) Handles btnFormas.Click

Dim nodo As TreeNode : nodo = TreeView1.Nodes(0)

nodo.Nodes.Add("Cuadrado") : nodo.Nodes.Add("Triangulo")

nodo.Nodes.Add("Circulo") : nodo.Expand()

End Sub

En el boton Listar Todos => que tendra como nombre btnListado.

Private Sub btnListado_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles btnListado.Click

TreeView1.Nodes.Clear()

Dim nodo As TreeNode

TreeView1.Nodes.Add("Shapes") : TreeView1.Nodes.Add("Colores")

TreeView1.Nodes.Add("Productos") : nodo = TreeView1.Nodes(0)

nodo.Nodes.Add("Cuadrado") : nodo.Nodes.Add("Triangulo")

nodo.Nodes.Ad

Page 171: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1171

d("Circulo") : nodo.Expand()

nodo = TreeView1.Nodes(1) : nodo.Nodes.Add("Azul")

nodo.Nodes.Add("Rojo") : nodo.Nodes.Add("Verde")

nodo.Expand() : nodo = TreeView1.Nodes(2)

nodo.Nodes.Add("Azucar") : nodo.Nodes.Add("Arroz")

nodo.Nodes.Add("Menestras") : nodo.Expand()

End Sub

En el boton Ordenar Ítems => que tendra como nombre btnOrdenarItems.

Private Sub btnOrdenarItems_Click( ) Handles btnOrdenarItems.Click

‘obtiene o establece un valor que indica si los nodos de arbol de la vista del arbol estanordenados.

‘Es True si los nodos de arbol de la vista de arbol estan ordenados, en caso contrario ,es false.

TreeView1.Sorted = True

End Sub

En el boton Ordenar Listado => que tendra como nombre btnOrdenarListado.

Private Sub btnOrdenarListado_Click( ) Handles btnOrdenarListado.Click

TreeView1.Sorted = True

btnListado_Click(sender, e) ‘Llamando al boton Listar Todos en el evento Clic.

End Sub

En el boton Limpiar Control => que tendra como nombre btnLimpiar.

Private Sub btnLimpiar_Click( ) Handles btnLimpiar.Click

TreeView1.Nodes.Clear() : DeshabilitarBotones()

End Sub

Sub DeshabilitarBotones()

btnColores.Enabled = False : btnFormas.Enabled = False

Page 172: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1172

End Sub

En el boton Mover Arbol => que tendra como nombre btnMoverArbol.

Private Sub btnMoverArbol_Click( ) Handles btnMoverArbol.Click

Try

Dim nodocolor, nodoshape, nodosolidos As TreeNode

nodocolor = TreeView1.Nodes(0) : nodoshape = TreeView1.Nodes(1)

nodosolidos = TreeView1.Nodes(2) : TreeView1.Nodes.Clear()

TreeView1.Nodes.Add("Items movidos")

TreeView1.Nodes(0).Nodes.Add(nodocolor)

TreeView1.Nodes(0).Nodes.Add(nodoshape)

TreeView1.Nodes(0).Nodes.Add(nodosolidos)

Catch ex As Exception

MessageBox.Show(ex.Message)

End Try

End Sub

Mostrar el dato seleccionado en el TreeView usando el evento AfterSelect.

AfterSelect => Se produce después de seleccionarse el nodo de arbol.

Datos del Evento => El controlador de eventos recibe un argumento de tipo TreeViewEventArgsque contiene datos relacionados con este evento. Las siguientes propiedades deTreeViewEventArgs proporcionan información específica para el evento.

Private Sub TreeView1_AfterSelect( ) Handles TreeView1.AfterSelect

'Mostrar el dato del nodo seleccionado

Dim nodo As TreeNode

nodo = TreeView1.SelectedNode

MessageBox.Show(nodo.Text)

End Sub

Listview

Page 173: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1173

APLICACIÓN 2:

Usando el ListView, realizar un ingreso de datos en el ListView1. [FrmListView.vb]

Configurando el ListView

Propiedades:

GridLines= True

View = Details

Name = ListView1

Columns = [Colección] <= le damos un clic enbotón.

Definiendo el diseño de las columnas con surespectivo ancho de cada uno, donde se almacenarancada fila proveniente de los controles del GroupBox1.

Agregaremos 5 Columnas:

Columna 1: ColumnHeader1

Propiedades:

Name= ColumnHeader1

Text = Nombres y Apellidos

Width = 120

Columna 3: ColumnHeader3

Propiedades:

Name = ColumnHeader3

Text = Telefono

Width = 70

Column 4: ColumnHeader4

Propiedades:

Name = ColumnHeader4

Text = Ciudad

Width = 80

Column 5: ColumnHeader5

Propieades:

Name = ColumnHeader5

Text = Sexo

Width = 70

Page 174: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1174

Columna 2: ColumnHeader2

Propiedades:

Name = ColumnHeader2

Text = Direccion

Width = 120

Propiedaes de los controles:

Button 1 :

Name = CmdAdicionar

Text = &Adicionar

Button 2:

Name = CmdNuevo

Text = &Nuevo

Button 3:

Name = CmdLimpiar

Text = Limpiar ListView

Button 4:

Name = CmdSalir

Text = Salir

Código Fuente:

Public Class FrmListView

Private Sub FrmListView_Load( ) Handles MyBase.Load

LimpiarControles() : CmbCiudad.Items.Add("[Seleccione]")

CmbCiudad.Items.Add("Lima") : CmbCiudad.Items.Add("Piura")

CmbCiudad.Ite

Label1:

Name = lbltotal

Text = lbltotal

Label2:

Text = Total de Elementos

GroupBox1:

Text = INGRESO DE DATOS

GroupBox2:

Text = MOSTRAR DATOS

RadioButton1

Name = OptM

Text = Masculino

Page 175: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1175

ms.Add("Ica") : CmbCiudad.Items.Add("Tumbes")

CmbCiudad.Items.Add("Puno") : CmbCiudad.SelectedIndex = 0

End Sub

Sub LimpiarControles()

Dim obj As Object

For Each obj In GroupBox1.Controls

If TypeOf obj Is TextBox Then obj.text = ""

If TypeOf obj Is RadioButton Then obj.checked = False

Next

End Sub

Private Sub CmdSalir_Click() Handles CmdSalir.Click

If MessageBox.Show("Desea Salir", "ListView", 4, 32) = 6 Then

Application.Exit()

End If

End Sub

Private Sub CmdAdicionar_Click( ) Handles CmdAdicionar.Click

'Validando las cajas de texto antes de ingresar el dato al ListView1.

If txtnombres.Text = "" Or txtDireccion.Text = "" Or txtTelefono.Text = "" Or CmbCiudad.Text ="[Seleccione]" Then

MessageBox.Show("Ingrese un Dato", "Validando Datos")

Exit Sub

End If

'Representa un elemento de un control ListView.

Dim Lvitem As ListViewItem

Lvitem = ListView1.Items.Add(txtnombres.Text)

Lvitem.SubItem

Page 176: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1176

s.Add(txtDireccion.Text) : Lvitem.SubItems.Add(txtTelefono.Text)

Lvitem.SubItems.Add(CmbCiudad.Text) : Dim sexo As String

If OptM.Checked Then 'Verificando la selección del Radiobutton

sexo = "Masculino"

Else

sexo = "Femenino"

End If

Lvitem.SubItems.Add(sexo)

lbltotal.Text = ListView1.Items.Count

End Sub

'Validando el ingreso de datos, en las cajas de texto.

Private Sub txtnombres_KeyPress( ) Handles txtnombres.KeyPress

If Not SoloLetras(Asc(e.KeyChar), txtnombres, txtDireccion) Then

e.Handled = True

End If

End Sub

Private Sub txtDireccion_KeyPress( ) Handles txtDireccion.KeyPress

If Not LetrasNumeros(Asc(e.KeyChar), txtDireccion, txtTelefono) Then

e.Handled = True

End If

End Sub

Function LetrasNumeros(ByVal num As Integer, Optional ByVal obj_1 As Object = Nothing,Optional ByVal obj_2 As Object = Nothing) As Boolean

LetrasNumeros = True

Select Case num

Case 8,32, 44, 46

Page 177: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1177

'8=retroceso,32=avance,44=coma(,),46=punto(.)

Case 65 To 90 '65 hasta 90 =(A-Z)

Case 97 To 122 '97 hasta 122 =(a-z)

Case 241, 209 '241=ñ,209=Ñ

Case 48 To 57 '48 hasta 57=(0-9)

Case 13 'Tecla Enter

If obj_1.text = "" Then

MessageBox.Show("No Ingreso el Dato", "Validando Datos")

obj_1.focus()

Exit Function

Else

obj_2.focus()

End If

Case Else

Return False

End Select

End Function

Function SoloLetras(ByVal num As Integer, Optional ByVal objtext_1 As Object = Nothing,Optional ByVal objtext_2 As Object = Nothing) As Boolean

SoloLetras = True

Select Case num

Case 8, 32, 44

Case 65 To 90

Case 97 To 122

Case 241, 209

Case 13

Page 178: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1178

If objtext_1.Text = "" Then

MessageBox.Show("No ingreso el Dato", "Validando Datos")

objtext_1.focus()

Exit Function

Else

objtext_2.Focus()

End If

Case Else

Return False

End Select

End Function

Function SoloNumeros(ByVal num As Integer, Optional ByVal obj_1 As Object = Nothing, OptionalByVal obj_2 As Object = Nothing) As Boolean

SoloNumeros = True

Select Case num

Case 8, 32, 44

Case 48 To 57

Case 13

If obj_1.text = "" Then

MessageBox.Show("No Ingreso el Dato", "Validando Datos")

obj_1.focus()

Exit Function

Else

obj_2.focus()

End If

Case Else

Page 179: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1179

Return False

End Select

End Function

Private Sub txtTelefono_KeyPress( ) Handles txtTelefono.KeyPress

If Not SoloNumeros(Asc(e.KeyChar), txtTelefono, CmbCiudad) Then

e.Handled = True

End If

End Sub

Private Sub CmdNuevo_Click( ) Handles CmdNuevo.Click

Call LimpiarControles()

txtnombres.Focus()

CmbCiudad.SelectedIndex = 0

End Sub

Private Sub CmdLimpiarLV_Click( ) Handles CmdLimpiarLV.Click

'Limpiar ListView1

ListView1.Items.Clear()

txtnombres.Focus()

End Sub

End Class

Ejecutando el Programa:

PROCEDIMIENTOS Y FUNCIONESDEFINIDAS POR EL USUARIOSUB (Instrucción).- Es un conjunto deinstrucciones que el compilador procesa y seutiliza para procesar tareas repetitivas; todoprocedimiento o subrutina tiene que, Declararseel nombre, los argumentos, y el código que

componen el

Page 180: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1180

cuerpo de un procedimiento Sub.( Un procedimiento no devuelve valores)

Sintaxis

[Private | Public | [Static] Sub nombre [(lista_argumentos)][instrucciones][Exit Sub][instrucciones]

End Sub

La sintaxis de la instrucción Sub consta de las siguientes partes:

Parte Descripción

Public Opcional. Indica que el procedimiento Sub es accesible para todos los demás procedimientos de todos losmódulos. Si se usa en un módulo que contiene una instrucción Option Private, el procedimiento no estádisponible fuera del proyecto.

Private Opcional. Indica que el procedimiento Sub es accesible sólo para otros procedimientos del módulo en el quese declara.

Static Opcional. Indica que las variables locales del procedimiento Sub se conservan entre distintas llamadas. Elatributo Static no afecta a las variables que se declaran fuera de Sub, incluso aunque se usen en elprocedimiento.

nombre Requerido. Nombre del procedimiento Sub; sigue las convenciones estándar de nombres de variable.

lista_argumentos

Opcional. Lista de variables que representan los argumentos que se pasan al procedimiento Sub cuando se lellama. Las distintas variables se separan mediante comas.

instrucciones Opcional. Cualquier grupo de instrucciones que se ejecutan dentro del procedimiento Sub.

El argumento lista_argumentos consta de las siguientes partes y sintaxis:

[Optional] [ByVal | ByRef] [ParamArray] nombre_variable[( )] [As tipo] [= valor_predeterminado]

Parte Descripción

Optional Opcional. Palabra clave que indica que no se requiere ningún argumento. Si se usa, todos los argumentossubsiguientes de lista_argumentos también deben ser opcionales y declararse mediante la palabra claveOptional. Optional no se puede utilizar para ningún argumento si se usa ParamArray.

Page 181: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1181

ByVal Opcional. Indica que el argumento se pasa por valor.

ByRef Opcional. Indica que el argumento se pasa por referencia. ByRef es el modo predeterminado en Visual Basic.

ParamArray Opcional. Sólo se utiliza como el último argumento de lista_argumentos para indicar que el argumento final es unamatriz Optional de elementos tipo Variant. La palabra clave ParamArray le permite proporcionar un númeroarbitrario de argumentos. No se puede utilizar con ByVal, ByRef u Optional.

nombre_variable

Requerido. Nombre de la variable que representa el argumento; sigue las convenciones estándar de nombres devariables.

Tipo Opcional. El tipo de datos del argumento que se pasa al procedimiento; puede ser Byte, Boolean, Integer, Long,Currency, Single, Double, Decimal (no admitido actualmente), Date, String (solamente longitud variable), Object,Variant, o un tipo de objeto específico. Si el parámetro no es Optional, se puede especificar también un tipodefinido por el usuario.

valor_predeterminado

Opcional. Cualquier constante o expresión de constante. Sólo es válido para parámetros Optional. Si el tipo esObject, un valor predeterminado explícito sólo puede ser Nothing.

Comentarios

Si no se especifica explícitamente mediante Public, Private o Friend, los procedimientos Sub sonpúblicos de manera predeterminada. Si no se usa Static, el valor de las variables locales no semantiene entre distintas llamadas.

Precaución Los procedimientos Sub pueden ser recursivos; es decir, se pueden llamar a símismos para realizar una tarea determinada. Sin embargo, esto puede llevar al desbordamientode la pila. La palabra clave Static generalmente no se utiliza con procedimientos recursivos Sub.

Las palabras clave Exit Sub causan la inmediata salida de un procedimiento Sub.

Para llamar a un procedimiento Sub, use el nombre del procedimiento seguido de la lista deargumentos.

Ejemplo de la instrucción Sub

En este ejemplo se utiliza la instrucción Sub para declarar el nombre, los argumentos y el códigoque forman el cuerpo del procedimiento Sub.

' Definición del procedimiento Sub.' Procedimiento Sub con dos argumentos.Sub SubAreaPC(Largo, Ancho) Dim Area As Double ' Declara la variable local. If Largo = 0 Or Ancho = 0 Then ' Si cualquier argumento = 0. Exit Sub ' Sale inmediatamente de Sub. End If

Page 182: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1182

Area = Largo * Ancho ' Calcula el área del rectángulo. Debug.Print Area ' Imprime el área en la ventana de depuración.End Sub'Procedimiento que limpia los Cuadros de Texto

Public Sub Limpiar()

Dim X As Object

For Each X In Form1.Controls

If TypeOf X Is TextBox Then

X.Text = ""

End If Next X

End Sub

Function (Instrucción).-Es similar a una subrutina a diferencia que va devolver un valor , de acuerdo al tipo de funcióndeclarada.

Declara el nombre, los argumentos y el código que componen el cuerpo de un procedimientoFunction.

[Public | Private | Friend] [Static] Function nombre [(lista_argumentos)] [As tipo][instrucciones][nombre = expresión][Exit Function][instrucciones][nombre = expresión]

End Function

La sintaxis de la instrucción Function consta de las siguientes partes:

El argumento lista_argumentos tiene la siguiente sintaxis y partes:

[Optional] [ByVal | ByRef] [ParamArray] nombre_variable[( )] [As tipo] [= valor_predeterminado]

Las clausulas de las funciones son similares a los procedimientos.

Precaución Los procedimientos Function pueden ser recursivos; es decir, pueden llamarse a símismos para realizar una tarea determinada. Sin embargo, la recursión puede provocar eldesbordamiento de pila. La palabra clave Static no se suele utilizar con procedimientos Function

recursivos.

Page 183: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1183

La ejecución del programa continúa con la instrucción que sigue a la instrucción que llamó alprocedimiento Function.

Ejemplo de la instrucción Function

En este ejemplo se utiliza la instrucción Function para declarar el nombre, los argumentos y elcódigo que forman el cuerpo de un procedimiento Function. El último ejemplo utiliza argumentosOptional inicializados.

' La siguiente función definida por el usuario devuelve' la raíz cuadrada del argumento que se le pasa.Function CalculaRaizCuadrada(ArgNumerico As Double) As Double If ArgNumerico < 0 Then ' Se evalúa el argumento.

Exit Function ' Salida hacia el procedimiento. Else CalculaRaizCuadrada = Sqr(ArgNumerico) ' Devuelve la raíz cuadrada End IfEnd Function

Function CalcSum(ByVal ParamArray Args() As Double) As Object' The function can be invoked as follows:Dim ReturnedValue As ObjectReturnedValue = CalcSum(4, 3, 2, 1)' Variables locales:' Args(0) = 4, Args(1) = 3, and so on.

El uso de la palabra clave ParamArray permite que una función acepte un número variable deargumentos. En la siguiente definición, PrimerArg se transfiere por valor.

Aplicación.-Empleando Funciones pasando parametros variables

Ejemplo.-

Dim intSum As Integer

Public Function minimo(ByVal ParamArray obj() AsInteger) As Integer

Dim z, con, min As Integer

con = 1

For Each z In obj

If con = 1 Then Min = z

If z < Min Then Min = z

Page 184: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1184

con = con + 1

Next

Return Min

End Function

Sub Sum(ParamArray Nums() as integer)

Dim y,x As Integer

For Each x In Nums

y = y + x

Next x

intSum = y

End Sub

Private Sub Cmdcalculo_Click()

Sum Text2, Text3, Text4

Lbr1.Caption = intSum

Lbr2.Caption = minimo(Textbox1.text, Textbox2.text, Textbox3.text)

Lbr3.Caption = minimo(5,7,3,8)

'la suma de 3 valores

Sum Text1, Text3, Text4

MsgBox "la suma del texto 1,3y 4 " & intSum

End Sub

Ejercicios

1) Escribir una función que dados a y b enteros devuelva ab.

2) Escribir una función que dado un número entero, devuelva una señal que indique si dichonúmero es primo o no.

3) Escribir una función que dados 2 números, calcule el porcentaje que el primero representa

Acepta un arreglo de datos y pueden serde cualquier tipo, nums es una variable cualquiera receptor de datos

Llamado a la funcion yal procedimiento

Page 185: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1185

respecto del segundo.

4) Escribir una función que dados a y b devuelva el cociente de la división entera, sin utilizar eloperador correspondiente del lenguaje. Validar los tipos de datos de entrada.

5) Escribir una función que dados a y b devuelva el resto de la división entera, sin utilizar eloperador correspondiente de lenguaje. Validar los tipos de datos de entrada.

6) Escribir una función que dado un código numérico de m dígitos, separe un sub-códigoconsistente en una cantidad n<m de dígitos a partir del k-ésimo lugar a contar del dígito menossignificativo. Utilizarla en un programa que ingrese un listado de códigos numéricos

junto con sus correspondientes parámetros m,n y k y liste dichos códigos de entrada junto

con el sub-código deseado.

7) Un número entero positivo se dice perfecto si es igual a la suma de todos sus divisores.

excepto el mismo.

Ejemplo: los números 6 (1+2+3), 28 (1+2+4+7+14) y 496 (1+2+4+8+16+31+62+124 +248)

son perfectos.

Se pide:

a) Escribir una función booleana que llamada desde un programa, permita discernir si un

número (único parámetro) es perfecto.

b) Dar un ejemplo de cómo se hace referencia a dicha función desde un programa o desde

otro subprograma.

Nota: no usar variables globales.

8) Dos números se dicen amigos cuando uno de ellos es igual a la suma de todos los divisoresdel otro excepto el mismo.

Ejemplo: los números 220 (1+2+4+5+10+11+20+22+44+55+110=284)

y 284 (1+2+4+71+142=220) son amigos.

Se pide:

a) escribir una función booleana que llamada desde un programa, permita discernir si dos

números (parámetros) son amigos.

b) Usar otrafunción para

Page 186: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1186

calcular la suma de los divisores de un número determinado.

c) Hacer referencia a dichas funciones desde un programa o desde otro subprograma.

Ejercicios propuestos

Desarrollar los siguientes procedimientos cuyos nombres y parámetros por valor se detallan encada procedimiento:

1. Función ACUADRADO pasando como valor un lado devuelva su área. A=L2

2. Función MAYOR pasando como valores dos números devuelva el valor máximo de dichosnúmeros.

3. Función ATRIANGULO pasando como valor tres lados de un triángulo, en caso de que formeun triángulo devuelva su área, de lo contrario devuelva un valor 0.

A = Sp x (Sp-La) x (Sp-Lb) x (Sp – Lc)

4. Subrutina INTERCAMBIO pasando dos parámetros por referencia intercambie el contenidode dicho números.

5. Función MINIMO pasando tres valores numéricos de tipo real devuelva el menor valor.6. Función MCD pasando dos valores numéricos devuelva el Máximo común Divisor de dichos

números.7. Subrutina PROMEDIO el cual pasando dos parámetros por valor y uno por referencia devuelva

el promedio de dichos números.8. Función PRIMO pasando por valor un número entero devuelva True si el número es Primo y

False si el número no es primo.9. Función CUENTAVOCALES el cual pasando como parámetro una frase devuelva la cantidad

de vocales contenidas en dicha frase.Ejemplo CUENTAVOCALES( VISUAL BASIC ) --------à 5

10. Función SEGPALABRA el cual pasando como parámetro una FRASE, devuelva la segundapalabra de dicha frase.

Ejemplo: SEGPALABRA CURSO VISUAL BASIC ) --------à VISUAL

11. Crear una función Recursiva FACTORIAL el cual pasando como parámetro un númerodevuelva el Factorial de dicho número el procedimiento debe se recursivo.

Nota : Las funciones debe tener su respectiva llamada.

PROBLEMAS PROPUESTOS

NOTA : A cada función elaborada debe darle un nombre adecuado , deber ser llamado endiferentes formularios (agregarlo a un módulo).

1. Función pasando como parámetro un número de mes (1 al 12), devuelva la cantidad de díasde 1dicho Mes, considere el presente año.

2. Pasando como parámetro la base y la altura de un triángulo rectángulo devuelva suhipotenusa.

3. Pasando un monto en soles y el tipo de cambio, devuelva el monto convertido a Dólares.

Page 187: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1187

4. Pasando tres números devuelva el Mínimo Común Múltiplo, de dichos números.5. Pasando un número entero de cualquier longitud, devuelva el promedio de dichas cifras.6. Pasando un número entero de cualquier longitud, devuelva el dígito mayor.7. Pasando un número entero de cualquier longitud, devuelva el mismo valor de manera

ordenada.8. Pasando un número de Mes que devuelva dicho Mes en Letras.9. Pasando una subcadena, una cadena y una posición que permita INSERTAR la subcadena en

dicha cadena a partir de una posición especificada.Ejemplo : INSERTAR PROGRAMA VISUAL BASIC , 8) ----à VISUAL PROGRAMA BASIC

10. Pasando una cadena, una posición inicial y el número de caracteres a borrar ELIMINE unasubcadena de dicha cadena a partir de una posición especificada.Ejemplo : DELETEAR VISUAL BASIC , 7, 6) ----à VISUAL

11. Pasando tres números que representan el día, mes y año devuelva una fecha como cadena.Ejemplo: FECHA(02, 12, 03) ----à 02 de Diciembre del 2003

12. Pasando un valor entero de grados centígrados y un carácter ( “R”, “K”, “F”) que representanRanking, Kelvin y Fahrenheit respectivamente, devuelva su valor de conversión al gradoespecificado.

Fecha de presentación :

Grupo máximo : 2 alumnos

Nota : Las funciones serán llamados desde diferentes formularios.

Modo de Presentación : Sólo en Usb.

Control ToolStrip (Clase)

Proporciona un contenedor para los objetos de barra de herramientas de Windows.

ToolStrip es la clase base abstracta para MenuStrip, StatusStrip y ContextMenuStrip.

Utilice ToolStrip y sus clases asociadas en nuevas aplicaciones de Windows Forms para crearbarras de herramientas que pueden tener una apariencia y un comportamiento de Windows XP,Office, Internet Explorer o personalizados, todas ellas con o sin temas, con posibilidad dedesbordamiento y reordenación de elementos en tiempo de ejecución. Los controles ToolStriptambién proporcionan una experiencia completa en tiempo de diseño que incluye la activación yedición en contexto, diseño personalizado, y uso compartido del espacio horizontal o verticaldentro de un ToolStripContainer especificado.

La clase ToolStrip proporciona muchos miembros que administran el dibujo y la entrada de datosmediante mouse (ratón) y teclado, además de la funcionalidad de arrastrar y colocar. Utilice la

clase

Page 188: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1188

ToolStripRenderer con la clase ToolStripManager para tener aún más control y posibilidad depersonalización del estilo de dibujo y de diseño de todos los controles ToolStrip en un formularioWindows Forms.

Los elementos siguientes están diseñados específicamente para trabajar sin problemas conToolStripSystemRenderer y ToolStripProfessionalRenderer en todas las orientaciones. Estándisponibles de forma predeterminada en tiempo de diseño para el control ToolStrip:

• ToolStripButton

• ToolStripSeparator

• ToolStripLabel

• ToolStripDropDownButton

• ToolStripSplitButton

• ToolStripTextBox

• ToolStripComboBox

Puede unir controles ToolStrip en un ToolStripContainer especificado y combinar controlesToolStrip entre sí. Utilice ToolStripPanel en lugar de ToolStripContainer para las aplicaciones deinterfaz de múltiples documentos (MDI). Normalmente, ToolStrip no participa en el orden detabulación a menos que tenga una posición absoluta en lugar de estar acoplado o en unToolStripPanel.

Utilice la clase ToolStripControlHost para alojar cualquier otro control de formularios WindowsForms en ToolStrip.

De forma predeterminada, ToolStrip se almacena en búfer doble, para lo que aprovecha laconfiguración de OptimizedDoubleBuffer.

Aunque el control ToolStrip reemplaza y agrega funcionalidad al control ToolBar de versionesanteriores, se conserva ToolBar a efectos de compatibilidad con versiones anteriores y uso futuro,en su caso.

Ejemplo 18

Page 189: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1189

En el ejemplo de código siguiente se muestra cómo agregar un ToolStripContainer y unToolStrip a un formulario Windows Forms, cómo agregar elementos a ToolStrip y cómo agregarToolStrip al TopToolStripPanel de ToolStripContainer.

Imports SystemImports System.Collections.GenericImports System.ComponentModelImports System.DataImports System.DrawingImports System.TextImports System.Windows.Forms

Public Class Form1 Inherits Form Private toolStripContainer1 As ToolStripContainer Private toolStrip1 As ToolStrip

Public Sub New() InitializeComponent() End Sub 'New <STAThread()> _ Shared Sub Main() Application.EnableVisualStyles() Application.Run(New Form1()) End Sub 'Main

Private Sub InitializeComponent() toolStripContainer1 = New System.Windows.Forms.ToolStripContainer() toolStrip1 = New System.Windows.Forms.ToolStrip() ' Add items to the ToolStrip. toolStrip1.Items.Add("One") : toolStrip1.Items.Add("Two") toolStrip1.Items.Add("Three") ' Add the ToolStrip to the top panel of the ToolStripContainer. toolStripContainer1.TopToolStripPanel.Controls.Add(toolStrip1)

Page 190: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1190

' Add the ToolStripContainer to the form. Controls.Add(toolStripContainer1) End Sub 'InitializeComponentEnd Class 'Form1

Cuadros de Dialogo (MsgBox,Messagebox,InputBox, OpenFileDialog,ColorDialog,FontDialog)

MessageBox .- Muestra un mensaje

MessageBox.Show("texto","titulo",boton,Icono)

Ejemplo: Mostrar el sgte mensaje

Dim Nom As String = "Juana"

MessageBox.Show("Bienvenido " & Nom, "Acceso",MessageBoxButtons.OK, MessageBoxIcon.Information)

Ejemplo: Mostrar un mensaje si se desea salir, si se presiona si se cerrara la aplicación.

Private Sub cmdsalir_Click

If MessageBox.Show("Desea Salir", "Confirmar", MessageBoxButtons.YesNo,MessageBoxIcon.Question) = DialogResult.Yes Then

End

End If

MsgBox .- Muestra un mensajeMsgBox(mensaje,botones,titulo)Msgbox ( Ingrese un precio valido , MsgBoxStyle.Critical, Mensaje )

Boton Salir:

If MsgBox("Desea Salir", MsgBoxStyle.Question + MsgBoxStyle.YesNo, "Confirmar") =MsgBoxResult.Yes Then

End

End If

InputBox. Se utiliza cuando se necesita que el usuario introduzca alguna información. La síntaxiscorrecta es:

Page 191: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1191

InputBox(mensaje,titulo)

Ejemplo:

nom = InputBox("Ingrese nombre", "Artefacto")En este casos e mostrar un mensaje y lo que se ingrese se guardara en la variable nom si se haceclic en Cancelar en nom se guardar NULL

OpenFileDialog

Es un control que muestra una ventana donde se podrá seleccionar un archivo.

ColorDialog

Es un control que muestra la caja de dialogo para seleccionar el color

FontDialog

Es un control que muestra la caja de dialogo para seleccionar el tipo de fuente de una letra

Ejemplo :

Cuando se haga click en el botón Abrir se debe de seleccionar una imagen BMP y ponerla en elpicturebox, el botón pintar deberá de seleccionar un color y un tipo de fuente para el label que dicehola que tal , por ultimo el botón escuchar permitirá seleccionar un archivo mp3 y reproducirlo en

el Windows media player.

Lo primero que debemos de hacer es agregar los controles

Page 192: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1192

Cuando agregamos esos controles no se muestran en el formulario, debemos de poner unnombre adecuado a cada control (openfiledialog op, ColorDialog co, fontDialog-fo)

Boton Abrir

Para que solo se pueda abrir estos tipos de archivos

Op.Filter = "Archivos JPG|*.jpg|Archivos BMP|*.bmp"

Op.FilterIndex = 2 seleccionamos por defecto el filtro 2 que seria BMP (si fuera 1 seria JPG)

If Op.ShowDialog = DialogResult.OK Then Si seleccionamos un archivo

Me.PictureBox1.Image = Image.FromFile(Op.FileName) op.Filename recupera el nombre(con toda su ruta) del archivo seleccionado

End If

Boton Abrir

Page 193: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1193

If Co.ShowDialog = DialogResult.OK Then si seleccionamo ok al momento de abrir la ventana decolor

Label1.ForeColor = Co.Color le ponemos el color seleccionado

End If

If Fo.ShowDialog = DialogResult.OK Then

Label1.Font = Fo.Font

End If

Ojo: aqui se mostraran dos ventanas , primero la del color y luego la del tipo de fuente.

Boton Escuchar

Op.Filter = "Archivos MP3|*.mp3|Archivos MPG|*.mpg"

Op.FilterIndex = 1

If Op.ShowDialog = DialogResult.OK Then

win.URL = Op.FileName

End If

Page 194: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1194

Semana 6 : Uso de Controles

Cuadros de dialogoCasi todas las aplicaciones necesitan preguntar a los usuarios para abrir o grabar un archivo. Usted puedeconstruir su propio form para permitírselo, pero esta posibilidad ya está directamente disponible enWindows, accesible desde un simple control Common Dialog de VB5/6 o a través de controlesespecializados de Visual Studio.Net. Lo mejor de estos controles standard es que los usuarios ya sabencómo usarlos porque son los mismos que se usan en Word, Excel y la gran mayoría de las aplicaciones.

Los cuadros de dialogos estan disponibles en el Framework .NET. Exploraremos los cuadros de dialogoFontDialog, ColorDialog, SaveFileDialog, OpenFileDialog, PrintDialog, PrintDocumet, PageSetupDialog yMainMenu.

Control FontDialog (Clase)

FontDialog => Representa un cuadro de dialogo comun que muestra una lista con las fuentes quenormalmente se instalan en el sistema. Se debe de invocar al miembro heredado ShowDalog para creareste cuadro de dialogo comun especifico.

Control ColorDialog (Clase)ColorDialog => Representa un cuadro de dialogo comun que muestra los colores disponibles, asi como loscontroles que permiten a los usuarios definir colores personalizados.

Control SaveDialog (Clase)

SaveFileDialog => Representa un cuadro de dialogo comun que permite al usuario especificar lasopciones para guardar un archivo. Esta clase no puede heredarse. Esta clase permite abrir y sobrescribirun archivo existente o crear un archivo nuevo.

Control OpenFileDialog (Clase)OpenFileDialog => Representa un cuadro de dialogo comun que muestra el control que permite al usuarioabrir un archivo. Esta clase no puede heredarse. Esta clase permite comprobar si existe un archivo yabrirlo. La propiedad ShowReadOnly determina si aparece una casilla de verificación de solo lectura en elcuadro de dialogo.La propiedad ReadOnlyChecked indica la casilla de verificación de solo lectura estaactivada.

La mayor parte de la funcionalidad de esta clase se encuentra en la clase FileDialog.

Control PrintDialog (Clase)

PrintDialog => Permite a los usuarios seleccionar una impresora y elegir que partes del documento sedeben imprimir.

Page 195: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1195

Cuando se crea una instancia de PrintDialog, se establecen las propiedades de lectura y escritura en susvalores iniciales.

Control PrintDocument (Clase)PrintDocument => Define un objeto reutilizable que envia el resultado a una impresora. Normalmente secrea una nueva instancia de la clase PrintDocument, se establecen las propiedades que describen comoimprimir y se llama al metodo Print para iniciar el proceso de impresión. Para especificar el resultado que seva a imprimir, hay que controlar el evento PrintPage y utilizar Graphics que se incluyen enPrintPageEventArgs.

Control PageSetupDialog (Clase)PageSetupDialog => Representa un cuadro de dialogo que permite a los usuarios manipular laconfiguración de pagina, incluidos los margenes y la orientación del papel.

El cuadro de diálogo PageSetupDialog modifica la información de PageSettings y PrinterSettings para undeterminado Document. El usuario puede habilitar secciones del cuadro de diálogo para manipular laconfiguración de la impresora, los márgenes, la orientación, el tamaño y el origen del papel, así como paramostrar los botones de ayuda y de red. MinMargins define los márgenes mínimos que puede seleccionar unusuario.

Cuando se crea una instancia de PageSetupDialog, se establecen las propiedades de lectura y escrituraen sus valores iniciales. Para obtener una lista de esos valores, vea el constructor PageSetupDialog.

Control RichTextBox => Representa un control Rcihtextbox de Windows.

El control RichTextBox permite al usuario escribir y modificar texto, al tiempo que proporcionacaracterísticas de formato más avanzadas que el control TextBox estándar. El texto se puede asignardirectamente al control o se puede cargar desde un archivo de formato de texto enriquecido (RTF) o detexto sin formato. Al texto del control se le puede asignar formato de carácter y párrafo.

EDITOR DE TEXTO (WORDPAD)

Page 196: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1196

MENU ARCHIVO

MENU EDICION

MENU FORMATO

Configuración del Menú Archivo:

Archivo

Propiedad:

Name = MenuItem1

Nuevo

Name = MnuNuevo

Abrir

Name = MnuAbrir

Guardar

Name = MnuGuarda

Configurar Página

Name = MnuConfigurarPagina

Imprimir

Name = MnuImprimir

Salir

Name = MnuSalir

Configuración del Menú Edicion:

Edicion

Propiedad:

Name = MenuItem8

Deshacer

Name = MnuDeshacer

Rehacer

Name = MnuRehacer

Copiar

Name = MnuCopiar

Cortar

Name = MnuCortar

Pegar

Name = MnuPegar

Seleccionar Todo

Name = MnuSelTodo

Configuración del Menú Formato:

Formato

Propiedad:

Name = MenuItem16

Fuente

Name = MnuFuente

Page 197: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1197

CODIGO FUENTE

Option Strict On

Imports System.io

Imports System.Drawing.Printing

Public Class Form1

Private FuenteImpresion As Font

Private mStoredPageSettings As System.Drawing.Printing.PageSettings

Dim fName As String

Dim streamParaImprimir As StreamReader

Private Sub MnuNuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles MnuNuevo.Click

If DeshacerCambios() Then Me.RichTextBox1.Clear()

End Sub

Function DeshacerCambios() As Boolean

If Me.RichTextBox1.Modified Then

Dim replicar As MsgBoxResult

replicar = MsgBox("Los cambios no se han guardado.Deshacer cambios?",MsgBoxStyle.YesNo)

If replicar = MsgBoxResult.No Then

Return False

Else

Return True

End If

Page 198: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1198

Else

Return True

End If

End Function

Private Sub MnuAbrir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles MnuAbrir.Click

If DeshacerCambios() Then

OpenFileDialog1.Title = "Seleccione el archivo para Abrir"

OpenFileDialog1.Filter = "Text file|*.txt|Rich text file|*.rtf"

OpenFileDialog1.InitialDirectory = "c:\temp"

If OpenFileDialog1.ShowDialog = DialogResult.OK Then

If OpenFileDialog1.FileName <> "" Then

fName = OpenFileDialog1.FileName

Select Case OpenFileDialog1.FilterIndex

Case 1

RichTextBox1.LoadFile(fName, RichTextBoxStreamType.PlainText)

Case 2

RichTextBox1.LoadFile(fName, RichTextBoxStreamType.RichText)

End Select

End If

End If

lblruta.Text = fName

End If

End Sub

Private Sub MnuGuardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles MnuGuardar.Click

Page 199: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1199

SaveFileDialog1.Title = "Guarde su archivo"

SaveFileDialog1.Filter = "Text file (*.txt)|*.txt|Rich text file (*.rtf)|*.rtf"

SaveFileDialog1.InitialDirectory = "c:\temp"

If SaveFileDialog1.ShowDialog = DialogResult.OK Then

If SaveFileDialog1.FileName <> "" Then

Select Case SaveFileDialog1.FilterIndex

Case 1

RichTextBox1.SaveFile(SaveFileDialog1.FileName, _

RichTextBoxStreamType.PlainText)

Case 2

RichTextBox1.SaveFile(SaveFileDialog1.FileName, _

RichTextBoxStreamType.RichText)

End Select

End If

End If

End Sub

Private Sub MnuConfigurarPagina_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles MnuConfigurarPagina.Click

Try

If mStoredPageSettings Is Nothing Then

mStoredPageSettings = New System.Drawing.Printing.PageSettings

End If

PageSetupDialog1.PageSettings = mStoredPageSettings

PageSetupDialog1.ShowDialog()

Catch ex As Exception

MessageBox.Show("Un error a ocurrido - " + ex.Message)

Page 200: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1200

End Try

End Sub

Private Sub MnuImprimir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles MnuImprimir.Click

Try

streamParaImprimir = New StreamReader(fName)

Try

FuenteImpresion = New Font("Tahoma", 10)

AddHandler PrintDocument1.PrintPage, AddressOf pd_ImpresionporPagina

PrintDocument1.DocumentName = fName

PrintDialog1.Document = PrintDocument1

If PrintDialog1.ShowDialog() = DialogResult.Cancel Then

MessageBox.Show("Cancelando la Impresion", "Impresion del Documento")

Else

PrintDocument1.Print()

End If

Finally

streamParaImprimir.Close()

End Try

Catch ex As Exception

MessageBox.Show(ex.Message)

End Try

End Sub

Private Sub pd_ImpresionporPagina(ByVal sender As Object, ByVal ev As PrintPageEventArgs)

Dim lineasporPaginas As Single = 0

Dim yPos As Single = 0

Page 201: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1201

Dim contador As Integer = 0

Dim MargenIzquierdo As Single = ev.MarginBounds.Left

Dim MargenSuperior As Single = ev.MarginBounds.Top

Dim linea As String = Nothing

'Calcular el numero de lineas por pagina.

lineasporPaginas = ev.MarginBounds.Height / FuenteImpresion.GetHeight(ev.Graphics)

'Imprime cada linea del archivo.

While contador < lineasporPaginas

linea = streamParaImprimir.ReadLine()

If linea Is Nothing Then

Exit While

End If

yPos = MargenSuperior + contador * FuenteImpresion.GetHeight(ev.Graphics)

ev.Graphics.DrawString(linea, FuenteImpresion, Brushes.Black, MargenIzquierdo, yPos,New StringFormat)

contador += 1

End While

'si hay mas lineas existente, imprime otra pagina.

If Not (linea Is Nothing) Then

ev.HasMorePages = True

Else

ev.HasMorePages = False

End If

End Sub

Private Sub MnuSalir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles MnuSalir.Click

End

Page 202: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1202

End Sub

Private Sub MnuDeshacer_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles MnuDeshacer.Click

If Me.RichTextBox1.CanUndo Then Me.RichTextBox1.Undo()

End Sub

Private Sub MnuRehacer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles MnuRehacer.Click

If Me.RichTextBox1.CanRedo Then Me.RichTextBox1.Redo()

End Sub

Private Sub MnuCopiar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles MnuCopiar.Click

Me.RichTextBox1.Copy()

End Sub

Private Sub MnuCortar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles MnuCortar.Click

Me.RichTextBox1.Cut()

End Sub

Private Sub MnuPegar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles MnuPegar.Click

Try

Me.RichTextBox1.Paste()

Catch exc As Exception

MsgBox("No se puede pegar el contenido actual en el portapapeles")

End Try

End Sub

Private Sub MnuSelTodo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles MnuSelTodo.Click

Page 203: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1203

Me.RichTextBox1.SelectAll()

End Sub

Private Sub MnuFuente_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles MnuFuente.Click

If Not Me.RichTextBox1.SelectionFont Is Nothing Then

FontDialog1.Font = Me.RichTextBox1.SelectionFont

Else

Me.FontDialog1.Font = Nothing

End If

FontDialog1.ShowApply = True

If FontDialog1.ShowDialog = DialogResult.OK Then

Me.RichTextBox1.SelectionFont = Me.FontDialog1.Font

End If

End Sub

Private Sub MnuColor_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles MnuColor.Click

ColorDialog1.Color = Me.RichTextBox1.ForeColor

ColorDialog1.ShowDialog()

Me.RichTextBox1.SelectionColor = ColorDialog1.Color

ColorDialog1.Dispose()

ColorDialog1 = Nothing

End Sub

End Class

Resultado:

Page 204: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1204

Control FolderBrowserDialog (Clase)

Pide al usuario que seleccione una carpeta. Esta clase no se puede heredar.

Esta clase proporciona un modo de preguntar al usuario si desea examinar, crear y,posteriormente, seleccionar una carpeta. Utilice esta clase si sólo desea que el usuario seleccionecarpetas, pero no archivos. Las carpetas se examinan mediante un control de árbol. Sólo sepueden seleccionar las carpetas del sistema de archivos, las carpetas virtuales no.

Normalmente, después de crear un FolderBrowserDialog nuevo, RootFolder se establece en laubicación desde donde se va a comenzar a examinar. SelectedPath puede establecerse tambiénen una ruta de acceso absoluta a una subcarpeta de RootFolder que se seleccionaráinicialmente. Otra posibilidad es establecer la propiedad Description para proporcionarinstrucciones adicionales al usuario. Por último, se llama al método ShowDialog para que muestreel cuadro de diálogo al usuario. Si se cierra el cuadro de diálogo y el resultado de ShowDialog esDialogResult.OK, SelectedPath será una cadena que contenga la ruta de acceso a la carpetaseleccionada.

Es posible utilizar la propiedad ShowNewFolderButton para controlar si el usuario tiene permisopara crear carpetas nuevas con el botón Nueva carpeta.

FolderBrowserDialog es un cuadro de diálogo modal, por lo tanto, cuando se muestra, bloquea elresto de la aplicación hasta que el usuario elige una carpeta. Cuando un cuadro de diálogo se

muestra en

Page 205: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1205

forma modal, no puede producirse ninguna entrada de datos (mediante teclado o haciendo clic conel mouse), a excepción de los objetos del cuadro de diálogo. El programa debe ocultar o cerrar elcuadro de diálogo (normalmente, como respuesta a alguna acción del usuario) antes de quepueda producirse una entrada de datos en el programa de llamada.

Ejemplo 19

El ejemplo de código siguiente crea una aplicación que le permite al usuario abrir los archivos detexto enriquecido (.rtf) dentro del control RichTextBox.

' The following example displays an application that provides the ability to' open rich text files (rtf) into the RichTextBox. The example demonstrates' using the FolderBrowserDialog to set the default directory for opening files.' The OpenFileDialog class is used to open the file.Imports SystemImports System.DrawingImports System.Windows.FormsImports System.IO

Public Class FolderBrowserDialogExampleForm Inherits Form

Private folderBrowserDialog1 As FolderBrowserDialog Private openFileDialog1 As OpenFileDialog Private richTextBox1 As RichTextBox Private mainMenu1 As MainMenu Private fileMenuItem As MenuItem Private WithEvents folderMenuItem As MenuItem, _ closeMenuItem As MenuItem, _ openMenuItem As MenuItem Private openFileName As String, folderName As String Private fileOpened As Boolean = False

Public Sub New() Me.mainMenu1 = New System.Windows.Forms.MainMenu()

Page 206: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1206

Me.fileMenuItem = New System.Windows.Forms.MenuItem() Me.openMenuItem = New System.Windows.Forms.MenuItem() Me.folderMenuItem = New System.Windows.Forms.MenuItem() Me.closeMenuItem = New System.Windows.Forms.MenuItem() Me.openFileDialog1 = New System.Windows.Forms.OpenFileDialog() Me.folderBrowserDialog1 = New System.Windows.Forms.FolderBrowserDialog() Me.richTextBox1 = New System.Windows.Forms.RichTextBox() Me.mainMenu1.MenuItems.Add(Me.fileMenuItem) Me.fileMenuItem.MenuItems.AddRange( _ New System.Windows.Forms.MenuItem() {Me.openMenuItem, _ Me.closeMenuItem, _ Me.folderMenuItem}) Me.fileMenuItem.Text = "File" : Me.openMenuItem.Text = "Open..." Me.folderMenuItem.Text = "Select Directory..." : Me.closeMenuItem.Text = "Close" Me.closeMenuItem.Enabled = False : Me.openFileDialog1.DefaultExt = "rtf" Me.openFileDialog1.Filter = "rtf files (*.rtf)|*.rtf" ' Set the Help text description for the FolderBrowserDialog. Me.folderBrowserDialog1.Description = _ "Select the directory that you want to use As the default." ' Do not allow the user to create New files via the FolderBrowserDialog. Me.folderBrowserDialog1.ShowNewFolderButton = False ' Default to the My Documents folder. Me.folderBrowserDialog1.RootFolder = Environment.SpecialFolder.Personal Me.richTextBox1.AcceptsTab = True Me.richTextBox1.Location = New System.Drawing.Point(8, 8) Me.richTextBox1.Size = New System.Drawing.Size(280, 344) Me.richTextBox1.Anchor = AnchorStyles.Top Or AnchorStyles.Left Or _ AnchorStyles.Bottom Or AnchorStyles.Right Me.ClientSize = New System.Drawing.Size(296, 360) Me.Controls.Add(Me.richTextBox1) : Me.Menu = Me.mainMenu1 Me.Text = "RTF Document Browser" End Sub

Page 207: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1207

<STAThread()> _ Shared Sub Main() Application.Run(New FolderBrowserDialogExampleForm()) End Sub

' Bring up a dialog to open a file. Private Sub openMenuItem_Click(sender As object, e As System.EventArgs) _ Handles openMenuItem.Click ' If a file is not opened, then set the initial directory to the ' FolderBrowserDialog.SelectedPath value. If (not fileOpened) Then openFileDialog1.InitialDirectory = folderBrowserDialog1.SelectedPath openFileDialog1.FileName = nothing End If ' Display the openFile dialog. Dim result As DialogResult = openFileDialog1.ShowDialog() ' OK button was pressed. If (result = DialogResult.OK) Then openFileName = openFileDialog1.FileName Try ' Output the requested file in richTextBox1. Dim s As Stream = openFileDialog1.OpenFile() richTextBox1.LoadFile(s, RichTextBoxStreamType.RichText) s.Close() fileOpened = True Catch exp As Exception MessageBox.Show("An error occurred while attempting to load the file. The error is:" _ + System.Environment.NewLine + exp.ToString() +System.Environment.NewLine) fileOpened = False End Try Invalidate() closeMenuItem.Enabled = fileOpened ' Cancel button was pressed.

Page 208: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1208

ElseIf (result = DialogResult.Cancel) Then return End If End Sub ' Close the current file. Private Sub closeMenuItem_Click(sender As object, e As System.EventArgs) _ Handles closeMenuItem.Click richTextBox1.Text = "" fileOpened = False closeMenuItem.Enabled = False End Sub

' Bring up a dialog to chose a folder path in which to open or save a file. Private Sub folderMenuItem_Click(sender As object, e As System.EventArgs) _ Handles folderMenuItem.Click ' Show the FolderBrowserDialog. Dim result As DialogResult = folderBrowserDialog1.ShowDialog() If ( result = DialogResult.OK ) Then folderName = folderBrowserDialog1.SelectedPath If (not fileOpened) Then ' No file is opened, bring up openFileDialog in selected path. openFileDialog1.InitialDirectory = folderName openFileDialog1.FileName = nothing openMenuItem.PerformClick() End If End If End SubEnd Class

Explorador de Archivos.

Form1.vb

Propiedades de los controles usados:

Combobox1

Page 209: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1209

Name = CbUnidades

DropDownStyle = DropDownList

ListBox1

Name = lbCarpetas

Listbox2

Name = lbArchivos

Código Fuente:

Imports System.IO

Public Class Form1

' Al abrirse el formulario

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles MyBase.Load

Dim Unidad As String ' para recorrer las unidades

' Añadimos cada una de las unidades lógicas

For Each Unidad In Directory.GetLogicalDrives

cbUnidades.Items.Add(Unidad) ' a la lista combinada

If Unidad = "C:\" Then ' cuando encontremos la unidad C:\

' la establecemos como seleccionada por defecto

cbUnidades.SelectedIndex = cbUnidades.Items.Count - 1

End If

Next

End Sub

' Al seleccionarse una unidad

Private Sub cbUnidades_SelectedIndexChanged(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles cbUnidades.SelectedIndexChanged

Page 210: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1210

Dim Carpeta As String ' para recorrer las carpetas

lbCarpetas.Items.Clear() ' eliminamos la lista actual de carpetas

' por cada carpeta existente

For Each Carpeta In Directory.GetDirectories(cbUnidades.Text)

lbCarpetas.Items.Add(Path.GetFileName(Carpeta)) ' añadimos un elemento a la lista

Next

lbCarpetas.SelectedIndex = 0 ' seleccionamos la primera carpeta

End Sub

' Al seleccionarse una carpeta

Private Sub lbCarpetas_SelectedIndexChanged(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles lbCarpetas.SelectedIndexChanged

Dim Archivo As String ' para recorrer los archivos

lbArchivos.Items.Clear() ' eliminamos la lista actual

' por cada archivo de texto existente

For Each Archivo In Directory.GetFiles(cbUnidades.Text & lbCarpetas.Text, "*.txt")

lbArchivos.Items.Add(Path.GetFileName(Archivo)) ' añadimos un elemento a la lista

Next

If lbArchivos.Items.Count <> 0 Then ' si al menos un archivo

lbArchivos.SelectedIndex = 0 ' lo seleccionamos

Else

tbContenido.Text = "" ' eliminamos el contenido anterior

End If

End Sub

' Al seleccionarse un archivo

Private Sub lbArchivos_SelectedIndexChanged(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles lbArchivos.SelectedIndexChanged

Page 211: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1211

' Componemos el nombre del archivo

Dim NombreArchivo As String = _

cbUnidades.Text & lbCarpetas.Text & _

Path.DirectorySeparatorChar & _

lbArchivos.Text

' y lo abrimos para lectura

Dim SRArchivo As StreamReader = File.OpenText(NombreArchivo)

' lo leemos completo asignando el contenido al TextBox

tbContenido.Text = SRArchivo.ReadToEnd

SRArchivo.Close() ' y finalmente lo cerramos

End Sub

' Al pulsar el botón Guardar

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

' Componemos el nombre del archivo

Dim NombreArchivo As String = _

cbUnidades.Text & lbCarpetas.Text & _

Path.DirectorySeparatorChar & _

lbArchivos.Text

' y lo creamos nuevo

Dim SRArchivo As StreamWriter = File.CreateText(NombreArchivo)

' escribimos el contenido en el archivo

SRArchivo.Write(tbContenido.Text)

SRArchivo.Close() ' y finalmente lo cerramos

End Sub

End Class

Page 212: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1212

Semana 7 : Uso de dmiLas aplicaciones MDI (interfaz de múltiples documentos) permiten mostrar variosdocumentos al mismo tiempo, cada uno de ellos en su propia ventana. Las aplicacionesMDI suelen tener un elemento de menú Ventana con submenús que permiten cambiar entreventanas o documentos.

Simple código fuente de muestra en visual basic.net que usa un formulario MDI para abrir y creararchivos de texto

El mismo consta de un form Mdi principal que tiene la opción para crear un nuevo formulario MdiChild, creando una nueva instancia ( en este caso de formulario frmDoc).

Este form tiene un Richtextbox donde se puede cargar o crear un archivo de texto. Para leer eldocumento se usa el método Loadfile y para guardarlo con saveFile

En el procedimiento siguiente, creará formularios MDI secundarios que muestran un controlRichTextBox, similar a la mayoría de aplicaciones de procesamiento de textos. Si sustituye elcontrol System.Windows.Forms por otros controles, tales como el control DataGridView o unamezcla de controles, podrá crear ventanas secundarias MDI (y, por extensión, aplicaciones MDI)con diversas posibilidades.

NotaLos cuadros de diálogo y comandos de menú que se ven pueden diferir de los descritos en laAyuda, en función de la configuración activa o la edición. Para cambiar la configuración, elija laopción Importar y exportar configuraciones en el menú Herramientas.

Page 213: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1213

Para crear formularios MDI secundarios1. Cree un formulario primario MDI con una estructura de menús que contenga los elementos

de menú Archivo y Ventana de nivel superior y los elementos de menú Nuevo y Cerrar.

2. En la lista desplegable que se encuentra en la parte superior de la ventana Propiedades,seleccione el elemento de menú correspondiente al elemento Ventana y establezca el valorde la propiedad MdiList en true.

Esto habilitará al menú Ventana para que mantenga una lista de ventanas secundarias MDIabiertas, con una marca de verificación junto a la ventana secundaria activa.

3. En el Explorador de soluciones, haga clic con el botón secundario en el proyecto, hagaclic en Agregar y seleccione Agregar nuevo elemento.

Este formulario será la plantilla de los formularios MDI secundarios.

Nota

El formulario secundario MDI que creará en este paso es un formulario Windows Formsestándar. Por tanto, tendrá una propiedad Opacity, que permite controlar la transparencia delformulario. Sin embargo, la propiedad Opacity está diseñada para ventanas de alto nivel. No lautilice con formularios MDI secundarios, porque pueden surgir problemas.

4. En el cuadro de diálogo Agregar nuevo elemento, seleccione Formulario WindowsForms (en Visual Basic o Visual C#) o Aplicación de Windows Forms (.NET) (en VisualC++) desde el panel Plantillas. En el cuadro Nombre, asigne al formulario el nombreForm2. Haga clic en el botón Abrir para agregar el formulario al proyecto.

Se abrirá el Diseñador de Windows Forms, que mostrará el formulario Form2.

5. En el Cuadro de herramientas, arrastre un control RichTextBox al formulario.

6. En la ventana Propiedades, establezca la propiedad Anchor en Top, Left y la propiedadDock en Fill.

Esto hace que el control RichTextBox llene por completo el área del formulario MDI

secundario, aunque se cambie el tamaño del formulario.

7. Cree un controlador de eventos Click para el elemento de menú Nuevo. Para obtenerinformaci

Page 214: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1214

ón sobre cómo crear controladores de eventos.

8. Inserte el código siguiente para crear un nuevo formulario MDI secundario cuando elusuario haga clic en el elemento de menú Nuevo.

NotaEn el ejemplo siguiente, el controlador de eventos controla el evento Click para MenuItem2.Tenga presente que, en función de las características específicas de la arquitectura de laaplicación, podría ser que el elemento de menú Nuevo no fuese MenuItem2.

9. Visual Basic10. Protected Sub MDIChildNew_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles MenuItem2.Click11. Dim NewMDIChild As New Form2()12. 'Set the Parent Form of the Child window.13. NewMDIChild.MdiParent = Me14. 'Display the new form.15. NewMDIChild.Show()16. End Sub

Page 215: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1215

Semana 8 : Creacion de ControlesComponentes en .Net

Cuando se crea un control definido por el usuario (User Controls), la ventaja es el siguiente:

• Contienen sus propias variables, así como la definición de los métodos y propiedades delos controles incluidos en el User Control.

• Estos controles pueden ser utilizados más de una vez sin causar conflictos a laspropiedades y métodos.

• Para crear un User Control, debemos definir el proyecto por medio del icono: Biblioteca deControles (Type Control Library), a partir de allí se puede insertar sobre este componentelos controles así como definir propiedades y eventos a dicho control.

Ejercicios Diversos

• Crear una carpeta cuyo nombre es: Componentes en la unidad C:Ejemplo 01 (Crear un componente que liste la tabla de multiplicar)

1. Activar el Visual Studio .netClic en: Biblioteca de

Nombre del

Seleccionar la carpeta:

Clic en:

Page 216: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1216

2. En el área de trabajo del UserControl:

Nombre del

Nombre de la clase (User

Doble clic y modificamos el UserControl

Nombre: lsttabla

Font / Bold= True

ListboxInsertado en el

UserControl

Page 217: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1217

Codificando en el UserControl

Inherits System.Windows.Forms.UserControl

Private xnumero As Single (Variable que almacena el numero)

Public Property mnumero() As Single

Get

End Get

Set(ByVal Value As Single) (Analizando al Value)

If Value = 0 Then (Si value=0)

lsttabla.Items.Clear() (Se limpia el listbox)

Return (Se Cancela el conjunto de instrucciones)

Else (En caso Contrario)

lsttabla.Items.Clear() (Se Limpia el listbox)

xnumero = Value (Se almacena el valor de value a la variable xmumero)

Call listatabla() (Se invoca al procedimiento listatabla)

End If

End Set

End Property

Creando al procedimiento listatabla

Private Sub listatabla()

Dim n As Single (Variable n para el For)

For n = 1 To 12

lsttabla.Items.Add(xnumero & " * " & n & " = " & xnumero * n)

Next

End Sub

Page 218: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1218

3. Luego grabar por segunda o enésima vez al proyecto4. Clic en el menú: Generar

5. Se Visualiza la siguiente ventana:

6. Activar el .net por segunda vez7. Seleccionar lo siguiente:

Clic en: Generar Solución

Clic en: Aplicación para

Nombre del Archivo:

Page 219: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1219

8. Nombre del Formulario: Frmtabla

9. Text: Tabla de Multiplicar

10. Nombre del Archivo: Tabla01 (Explorador de Soluciones)

11. Diseño del Formulario

12. Insertamos el control en el cuadro de herramientas13. Ubicarse en el cuadro de herramientas, pulsar clic derecho14. Se visualiza lo siguiente:

Name:

Name: btnsalir

Clic en la opción:

Page 220: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1220

15. Se visualiza lo siguiente:

Clic en el botón:

Seleccionar la carpeta:

Clic en el archivo:

ComponentesTablaMultiplicar.dll

Page 221: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1221

16. Se visualiza lo siguiente:

17. En el cuadro de herramientas, se visualiza lo siguiente:

18. Codificando en el formulario

Clic en el botón:

Componente Insertado en lasopciones de lista

Clic en Aceptar

Compone

Page 222: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1222

Variable tablita de tipo componente

Private tablita As New ComponentesTablaMultiplicar.tabla01

Private num As Single (Variable num que almacena el numero)

Creando al handle hnd_numero para el cuadro de texto: txtnumero, evento :KeyPress

Private Sub hnd_numero(ByVal sender As Object, ByVal e AsSystem.Windows.Forms.KeyPressEventArgs) Handles txtnumero.KeyPress

If Asc(e.KeyChar) = 13 Then (Si se pulsa enter)

num = Val(txtnumero.Text) (Se almacena en la variable num)

tablita.mnumero = num (el valor de num se almacena en la propiedad mnumero)

tablita.Top = 35 (el top de tablita es 35)

tablita.Left = 35 (el left de tablita es 35)

Me.Controls.Add(tablita) (se Agrega hacia el formulario)

End If

End Sub

Creando al handle hnd_limpia para el cuadro de texto: txtnumero, evento : TextChanged

Private Sub hnd_limpa(ByVal sender As Object, ByVal e As System.EventArgs) Handlestxtnumero.TextChanged

If Len(txtnumero.Text) = 0 Then (Si la longitud de txtnumero es igual a 0)

num = Val(txtnumero.Text) (El valor 0 lo almacenamos en num)

tablita.mnumero = num (Luego el valor de num que es 0 lo almacenamos en mnumero)

End If

End Sub

Creando al handle hnd_salir para el botón. Btnsalir, evento: Click

Private Sub hnd_salir(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles btnsalir.Click

End

End Sub

Page 223: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1223

19. Grabar y ejecutar la aplicación

Ejemplo02 (Crear un componente que nos permita almacenar notas y calcule su promedio ysu observación)

1. Crear una carpeta cuyo nombre es: Componentes02 en la unidad C:2. Activar el Visual Studio .net3. Seleccionar el siguiente icono: Seleccionar: Biblioteca de controles de

Nombre del Proyecto:

Carpeta: C:\Componentes02

Clic en:

Page 224: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1224

4. En el explorador de soluciones, cambiar el archivo físico por lo siguiente:

5. Seleccionar el área de trabajo del usercontrol, Name: frmcontrolnotas6. Diseño en el Usercontrol

ControlNotas.v

Usercontrol

GroupBox

Name:Name:

Name: Name:

Name: txtpromedioName: txtobservacion

Name: txtnota4

Page 225: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1225

7. Codificando en la clase:Public Class frmcontrolnotas

Inherits System.Windows.Forms.UserControl

Private n1, n2, n3, n4, promedio As Single (Variable para las notas y promedios)

Private obs As String (Variable para la observación)

Propiedad mn1 que almacena la nota1

Public Property mn1() As Single

Get

End Get

Set(ByVal Value As Single)

If (Value = 0) Or (Value <= -1) Or (Value >= 21) Then

Return

Else

n1 = Value

Call calculo_promedio()

obs = calculo_observa(promedio)

End If

End Set

End Property

Propiedad mn2 que almacena la nota2

Public Property mn2() As Single

Get

End Get

Verifica si el value almacena losvalores: 0,-1,21 si es así se cancelacon return

• n1=almacena al value• Se invoca al

procedimiento:Calculo_promedio

• Se invoca a la función:calculo_observa pormedio de la variable obs

Verifica si el value almacena losvalores: 0,-1,21 si es así se cancelacon return

Page 226: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1226

Set(ByVal Value As Single)

If (Value = 0) Or (Value <= -1) Or (Value >= 21) Then

Return

Else

n2 = Value

Call calculo_promedio()

obs = calculo_observa(promedio)

End If

End Set

End Property

Propiedad mn3 que almacena la nota3

Public Property mn3() As Single

Get

End Get

Set(ByVal Value As Single)

If (Value = 0) Or (Value <= -1) Or (Value >= 21) Then

Return

Else

n3 = Value

Call calculo_promedio()

obs = calculo_observa(promedio)

End If

End Set

End Property

• n2=almacena al value• Se invoca al

procedimiento:Calculo_promedio

• Se invoca a la función:calculo_observa pormedio de la variable obs

Verifica si el value almacena losvalores: 0,-1,21 si es así se cancelacon return

• n3=almacena al value• Se invoca al

procedimiento:Calculo_promedio

• Se invoca a la función:calculo_observa pormedio de la variable obs

Page 227: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1227

Propiedad mn4 que almacena la nota4

Public Property mn4() As Single

Get

End Get

Set(ByVal Value As Single)

If (Value = 0) Or (Value <= -1) Or (Value >= 21) Then

Return

Else

n4 = Value

Call calculo_promedio()

obs = calculo_observa(promedio)

End If

End Set

End Property

Creando un sub-procedimiento calculo_promedio (Halla el promedio de las 4 notas)

Private Sub calculo_promedio()

promedio = ((n1 + n2 + n3 + n4) / 4)

txtpromedio.Text = promedio.ToString

End Sub

Creando la function: Calculo_observa, que nos permita hallar la observación de acuerdo alpromedio

Private Function calculo_observa(ByVal prom As Single) As String

Select Case prom

Case 0 To 4 : calculo_observa = "Bruto"

Case 5 To 10 : calculo_observa = "Malo"

Verifica si el value almacena losvalores: 0,-1,21 si es así se cancelacon return

• n4=almacena al value• Se invoca al

procedimiento:Calculo_promedio

• Se invoca a la función:calculo_observa por

• Calculando las 4 notas y se almacena enla variable: promedio

• Se visualiza el valor de la variablepromedio en el cuadro de texto:

Parámetro Prom quealmacena el

• Se Analiza la variable promcon el select case

• Luego se almacena en elcuadro de texto:txtobservacion

Page 228: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1228

Case 11 To 14 : calculo_observa = "Regular"

Case 15 To 18 : calculo_observa = "Bueno"

Case 19 To 20 : calculo_observa = "Excelente"

Case Else : calculo_observa = ""

End Select

txtobservacion.Text = obs

End Function

Creando una propiedad mpromedio donde se almacena el promedio

Public Property mpromedio() As Single

Get

mpromedio = promedio

End Get

Set(ByVal Value As Single)

End Set

End Property

Creando una propiedad mobserva donde se almacena la observación (obsß Variable)

Public Property mobserva() As String

Get

mobserva = obs

End Get

Set(ByVal Value As String)

End Set

End Property

• Almacenando la variablepromedio hacia la propiedadmpromedio

• Almacenando la variable obshacia la propiedad mobserva

Page 229: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1229

Creando una propiedad tmn1 para manipular al cuadro de texto: txtnota1

Public Property tmn1() As String

Get

End Get

Set(ByVal Value As String)

If Value = 0 Then txtnota1.Text = ""

End Set

End Property

Creando una propiedad tmn2 para manipular al cuadro de texto: txtnota2

Public Property tmn2() As String

Get

End Get

Set(ByVal Value As String)

If Value = 0 Then txtnota2.Text = ""

End Set

End Property

Creando una propiedad tmn3 para manipular al cuadro de texto: txtnota3

Public Property tmn3() As String

Get

End Get

Set(ByVal Value As String)

If Value = 0 Then txtnota3.Text = ""

End Set

Si value=0 entonces el valor delcuadro de texto txtnota1 es

Si value=0 entonces el valor delcuadro de texto txtnota2 es

Si value=0 entonces el valor delcuadro de texto txtnota3 es

Page 230: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1230

End Property

Creando una propiedad tmn4 para manipular al cuadro de texto: txtnota4

Public Property tmn4() As String

Get

End Get

Set(ByVal Value As String)

If Value = 0 Then txtnota4.Text = "" : txtpromedio.Text = "" : txtobservacion.Text = ""

End Set

End Property

Trabajando con los eventos de los cuadro de textos

En el objeto: txtnota1, evento: Keypress

Private Sub txtnota1_KeyPress(ByVal sender As System.Object, ByVal e AsSystem.Windows.Forms.KeyPressEventArgs) Handles txtnota1.KeyPress

If Asc(e.KeyChar) = 13 Then

If Len(txtnota1.Text) = 0 Then

txtnota1.Focus()

Else

If (Integer.Parse(txtnota1.Text) >= 0 And Integer.Parse(txtnota1.Text)) <= 20 Then

mn1 = Val(txtnota1.Text)

txtnota2.Focus()

Else

txtnota1.Text = ""

Si value=0 entonces el valor del cuadro de texto txtnota4,txtpromedio, txtobservacion están vacíos

Si la longitud de txtnota1 es = 0, entoncesse toma el enfoque de txtnota1

Si el rango es de 0 a 20, entonces se almacena elvalor de txtnota1 en: mn1

Si el rango no es de 0 a 20 entonces se limpia el cuadrode texto: txtnota1 y se toma el enfoque

Page 231: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1231

txtnota1.Focus()

End If

End If

End If

End Sub

En el objeto: txtnota2, evento: Keypress

Private Sub txtnota2_KeyPress(ByVal sender As System.Object, ByVal e AsSystem.Windows.Forms.KeyPressEventArgs) Handles txtnota2.KeyPress

If Asc(e.KeyChar) = 13 Then

If Len(txtnota2.Text) = 0 Then

txtnota2.Focus()

Else

If (Integer.Parse(txtnota2.Text) >= 0 And Integer.Parse(txtnota2.Text)) <= 20 Then

mn2 = Val(txtnota2.Text)

txtnota3.Focus()

Else

txtnota2.Text = ""

txtnota2.Focus()

End If

End If

End If

End Sub

En el objeto: txtnota3, evento: Keypress

Private Sub txtnota3_KeyPress(ByVal sender As System.Object, ByVal e AsSystem.Windows.Forms.KeyPressEventArgs) Handles txtnota3.KeyPress

Si la longitud de txtnota2 es = 0, entoncesse toma el enfoque de txtnota2

Si el rango es de 0 a 20, entonces se almacena elvalor de txtnota2 en: mn2

Si el rango no es de 0 a 20 entonces se limpia el cuadrode texto: txtnota2 y se toma el enfoque

Page 232: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1232

If Asc(e.KeyChar) = 13 Then

If Len(txtnota3.Text) = 0 Then

txtnota3.Focus()

Else

If (Integer.Parse(txtnota3.Text) >= 0 And Integer.Parse(txtnota3.Text)) <= 20 Then

mn3 = Val(txtnota3.Text)

txtnota4.Focus()

Else

txtnota3.Text = ""

txtnota3.Focus()

End If

End If

End If

End Sub

En el objeto: txtnota4, evento: Keypress

Private Sub txtnota4_KeyPress(ByVal sender As System.Object, ByVal e AsSystem.Windows.Forms.KeyPressEventArgs) Handles txtnota4.KeyPress

If Asc(e.KeyChar) = 13 Then

If Len(txtnota4.Text) = 0 Then

txtnota4.Text = ""

Else

If (Integer.Parse(txtnota4.Text) >= 0 And Integer.Parse(txtnota4.Text)) <= 20 Then

mn4 = Val(txtnota4.Text)

txtobservacion.Focus()

Else

Si la longitud de txtnota3 es = 0, entoncesse toma el enfoque de txtnota3

Si el rango es de 0 a 20, entonces se almacena elvalor de txtnota3 en: mn3

Si el rango no es de 0 a 20 entonces se limpia el cuadrode texto: txtnota3 y se toma el enfoque

Si la longitud de txtnota4 es = 0, entoncesse toma el enfoque de txtnota4

Si el rango es de 0 a 20, entonces se almacena elvalor de txtnota4 en: mn4

Page 233: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1233

txtnota4.Text = ""

txtnota4.Focus()

End If

End If

End If

End Sub

En el objeto: txtnota1, evento: TextChanged

Private Sub txtnota1_TextChanged(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles txtnota1.TextChanged

If Not IsNumeric(txtnota1.Text) Then

txtnota1.Text = ""

txtnota1.Focus()

End If

End Sub

En el objeto: txtnota2, evento: TextChanged

Private Sub txtnota2_TextChanged(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles txtnota2.TextChanged

If Not IsNumeric(txtnota2.Text) Then

txtnota2.Text = ""

txtnota2.Focus()

End If

End Sub

En el objeto: txtnota3, evento: TextChanged

Private Sub txtnota3_TextChanged(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles

Si el rango no es de 0 a 20 entonces se limpia el cuadrode texto: txtnota4 y se toma el enfoque

Si no se digita un numero en el cuadro detexto: txtnota1, entonces se limpia elcuadro y se toma el enfoque

Si no se digita un numero en el cuadro detexto: txtnota2, entonces se limpia elcuadro y se toma el enfoque

Page 234: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1234

txtnota3.TextChanged

If Not IsNumeric(txtnota3.Text) Then

txtnota3.Text = ""

txtnota3.Focus()

End If

End Sub

En el objeto: txtnota4, evento: TextChanged

Private Sub txtnota4_TextChanged(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles txtnota4.TextChanged

If Not IsNumeric(txtnota4.Text) Then

txtnota4.Text = ""

txtnota4.Focus()

End If

End Sub

8. Luego seleccionar la opción: Generar / Generar Solución

Si no se digita un numero en el cuadro detexto: txtnota3, entonces se limpia elcuadro y se toma el enfoque

Si no se digita un numero en el cuadro detexto: txtnota4, entonces se limpia elcuadro y se toma el enfoque

Page 235: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1235

9. Seleccionar: Generar / Generar Componentes2

10. Activar el Visual Studio .net, por segunda vez

Clic en: Aplicación Para

Nombre del Proyecto:

Carpeta: C:\Componentes02

Clic en:

Page 236: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1236

11. Propiedades del Formulario:

12. Diseño del Formulario

13. Del Cuadro de Herramientas, seleccionar:

14. Se visualiza en la parte inferior de la pantalla:

15. Seleccionar el cuadro de texto: txtcodigo y en el cuadro de propiedades

• Name: frmdatos• Text: Ingreso de Datos• StartPosition: Center Screen

Name: gbxdatos / Enabled:Name:

Name:

Name:

Name:

Name: txtcorreo

Herramienta: Tooltip,sirve para crear

mensajes emergentes

Digitar el texto: Ingrese Un

Page 237: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1237

16. Seleccionar el cuadro de texto: txtpaterno y en el cuadro de propiedades

17. Seleccionar el cuadro de texto: txtpaterno y en el cuadro de propiedades

18. Seleccionar el cuadro de texto: txtnombres y en el cuadro de propiedades

19. Seleccionar el cuadro de texto: txtcorreo y en el cuadro de propiedades

20. Codificando en el formularioPublic Class frmdatos

Private xmenu As New MainMenu

Digitar el texto: Ingrese Un Apellido

Digitar el texto: Ingrese Un Apellido Materno

Digitar el texto: Ingrese Un Nombre

Digitar el texto: Ingrese Un

Creando un objeto xmenude tipo Menú Principal

Page 238: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1238

Private WithEvents xprincipal, xnuevo, xcancelar, xraya, xsalir As New MenuItem

Private xprom As New Componentes2.frmcontrolnotas

21. En el Objeto: Form, evento LoadForm Load

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles MyBase.Load

With xprincipal

.Text = "&Opciones Generales"

.Shortcut = Shortcut.CtrlO

.ShowShortcut = True

End With

With xnuevo

.Text = "&Nuevo Registro"

.Shortcut = Shortcut.CtrlN

.ShowShortcut = True

End With

With xcancelar

.Text = "&Cancelar Todo"

.Shortcut = Shortcut.CtrlShiftC

.ShowShortcut = True

End With

Creando las opciones del menú con sus eventoscorrespondientes

Invocando al controlcon el objeto xprom

Creando a la opción: “&OpcionesGenerales”

Creando a la opción: “&Nuevo Registro”

Creando a la opción: “&Cancelar Todo”

Page 239: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1239

With xraya

.Text = "-"

End With

With xsalir

.Text = "&Salir"

.Shortcut = Shortcut.CtrlS

.ShowShortcut = True

End With

With xprincipal.MenuItems

.Add(xnuevo)

.Add(xcancelar)

.Add(xraya)

.Add(xsalir)

End With

xmenu.MenuItems.Add(xprincipal)

Menu = xmenu

End Sub

Creando un handle hnd_nuevo para la opción: xnuevo, evento: Click

Private Sub hnd_nuevo(ByVal sender As Object, ByVal e As System.EventArgs) Handlesxnuevo.Click

gbxdatos.Enabled = True (Se activa el groupbox)

Dim obj1 As Object (Se declara un objeto obj1)

For Each obj1 In Me.gbxdatos.Controls

If TypeOf obj1 Is TextBox Then

CType(obj1, TextBox).Text = ""

Creando a la opción: “-“

Creando a la opción: “&Salir”

Agregando las opciones axprincipal

Agregando xprincipal a xmenu

Se Limpia los cuadros detextos

Page 240: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1240

End If

Next

With xprom (Con el objeto xprom)

.Top = Me.gbxdatos.Height (Se da un valor al top – El alto de gbxdatos)

.Left = gbxdatos.Left (Se da un valor al left – El left de gbxdatos)

End With

xprom.tmn1 = 0

xprom.tmn2 = 0

xprom.tmn3 = 0

xprom.tmn4 = 0

Me.Controls.Add(xprom) (Se agrega el objeto xprom al formulario)

txtcodigo.Focus() (Se toma el enfoque al objeto: txtcodigo)

End Sub

Creando un handle hnd_cancelar, para la opción: xcancelar, evento: Click

Private Sub hnd_cancelar(ByVal sender As Object, ByVal e As System.EventArgs) Handlesxcancelar.Click

Dim obj2 As Object (Se crea el objeto obj2)

For Each obj2 In Me.gbxdatos.Controls

If TypeOf obj2 Is TextBox Then

CType(obj2, TextBox).Text = ""

End If

Next

gbxdatos.Enabled = False - (El groupbox se desactiva)

Me.Controls.Remove(xprom) - (Se elimina el objeto xprom que esta en el Formulario)

End Sub

Creando el handle hnd_salir, para la opción xsalir, evento: Click

Se dan valores de 0 a la propiedades,para que los cuadros de textos se

Se Limpia los cuadros de textos

Page 241: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1241

Private Sub hnd_salir(ByVal sender As Object, ByVal e As System.EventArgs) Handlesxsalir.Click

End

End Sub

Manipulando los eventos de los cuadros de textos

Txtcodigo KeyPress

Private Sub txtcodigo_KeyPress(ByVal sender As Object, ByVal e AsSystem.Windows.Forms.KeyPressEventArgs) Handles txtcodigo.KeyPress

If Asc(e.KeyChar) = 13 Then

If Len(txtcodigo.Text) = 0 Then

MessageBox.Show("Ingrese Un Codigo", "Pulse Clic En Aceptar")

txtcodigo.Focus()

Else

txtpaterno.Focus()

End If

End If

End Sub

Txtpaterno KeyPress

Private Sub txtpaterno_KeyPress(ByVal sender As Object, ByVal e AsSystem.Windows.Forms.KeyPressEventArgs) Handles txtpaterno.KeyPress

If Asc(e.KeyChar) = 13 Then

If Len(txtpaterno.Text) = 0 Then

MessageBox.Show("Ingrese Un Apellido Paterno", "Pulse Clic En Aceptar")

txtpaterno.Focus()

Else

txtmaterno.Focus()

End If

Page 242: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1242

End If

End Sub

Txtpaterno TextChanged

Private Sub txtpaterno_TextChanged(ByVal sender As Object, ByVal e AsSystem.EventArgs) Handles txtpaterno.TextChanged

If IsNumeric(txtpaterno.Text) Then

txtpaterno.Text = ""

txtpaterno.Focus()

End If

End Sub

Txtmaterno KeyPress

Private Sub txtmaterno_KeyPress(ByVal sender As Object, ByVal e AsSystem.Windows.Forms.KeyPressEventArgs) Handles txtmaterno.KeyPress

If Asc(e.KeyChar) = 13 Then

If Len(txtmaterno.Text) = 0 Then

MessageBox.Show("Ingrese Un Apellido Materno", "Pulse Clic En Aceptar")

txtmaterno.Focus()

Else

txtnombres.Focus()

End If

End If

End Sub

Txtmaterno TextChanged

Private Subtxtmaterno_Te

Page 243: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1243

xtChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handlestxtmaterno.TextChanged

If IsNumeric(txtmaterno.Text) Then

txtmaterno.Text = ""

txtmaterno.Focus()

End If

End Sub

Txtnombres KeyPress

Private Sub txtnombres_KeyPress(ByVal sender As Object, ByVal e AsSystem.Windows.Forms.KeyPressEventArgs) Handles txtnombres.KeyPress

If Asc(e.KeyChar) = 13 Then

If Len(txtnombres.Text) = 0 Then

MessageBox.Show("Ingrese Un Nombre", "Pulse Clic En Aceptar")

txtnombres.Focus()

Else

txtcorreo.Focus()

End If

End If

End Sub

Txtnombres TextChanged

Private Sub txtnombres_TextChanged(ByVal sender As Object, ByVal e AsSystem.EventArgs) Handles txtnombres.TextChanged

If IsNumeric(txtnombres.Text) Then

txtnombres.Text = ""

End If

End Sub

Txtcorreo

Page 244: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1244

KeyPress

Private Sub txtcorreo_KeyPress(ByVal sender As Object, ByVal e AsSystem.Windows.Forms.KeyPressEventArgs) Handles txtcorreo.KeyPress

If Asc(e.KeyChar) = 13 Then

If Len(txtcorreo.Text) = 0 Then

MessageBox.Show("Ingrese Un Correo Electrónico", "Pulse Clic En Aceptar")

txtcorreo.Focus()

Else

xprom.Focus()

End If

End If

End Sub

22. Grabar y ejecutar la aplicación

Page 245: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1245

Semana 9 : desarrollo de una aplicación

examen virtualDiseñar una aplicación que me permita simular el examen virtual de operaciones básicas dedel sistema operativo de Windows, este ejemplo es solo para 5 preguntas Ud. Debe depresentarlo de 25 preguntas, lod temas serán dejados por el profesor del curso dediferentes programas de la carrera.

Debe ingresar el nombre del postulante (tenga en cuenta el tiempo aun no se ejecuta)

En total son 50 preguntas que se deben contestar por medio de una opción (trabajodeterminado para los usuarios finales aquí el time ya se toma en cuenta).

Por cada pregunta se debe desplazar hacia la siguiente respuesta teniendo la opción deregresar y corregir la pregunta contestada al final debe mostrarle su nota en un mensaje.

Page 246: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1246

Mostrara como resultado una pequeña estadística de las preguntas correctas, en blanco ylas que contesto en forma incorrecta.

Cuando cierra la ventana notara que hay otro mensaje si ha reprobado su examen.

Como resultado final de la operación se debe generar un archivo de texto en la carpeta binde la aplicación con un resumen de su examen.

Page 247: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1247

Este archivo se generara en esta ruta según mi programaciónc:\gahExamen\gahProExamenNet\bin\Debug

E aquí un demo que le servirá como crear dicha aplicación para que después lo aplique ensu trabajo de medio ciclo correspondiente.

Crear una aplicación teniendo en cuenta los siguientes criterios (las iníciales de losapellidos y nombres).

Crear una solución en blanco con el siguiente nombre.

En el nombre se debe denotar lo siguiente.

Así se presentara la solución.

Luego procederá a agregar un proyecto con el siguiente nombre (siga los padrones que yase le indicaron) en mi caso gahProExamenNet

galopino

alberca

hernan

Nombre de lasolución

Page 248: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1248

Debe mostrar la siguiente ventana

Elimine el formulario que se muestra por defecto.

Agregar un modulo para la declaraciones de los arrays que manejaran las los datos de laaplicación con el siguiente nombre que ya se les indico en mi caso gahModuleExamenNetmostrara la siguiente ventana.

Luego debe crear una carpeta y en ella copiar y pegar lasimágenes que usara en la solución de la aplicación muestra la siguiente ventana.

Agregar los otros formulario a su proyecto mostrando la siguiente ventana.

Page 249: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1249

Programación del Modulo ( )

Page 250: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1250

Programación del formulario

Debe usar los siguientes controles 1 groupbox, 1 textbox, 2 button, 1 picturebox

El size del formulario debe de ser de 357, 159

Page 251: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1251

PROGRAMACION DE LOS BOTONES

'variable nom asume del nombre del usuario 'validarlo para que solo acepte letras y espacios en blanco NOM = txtnom.Text.ToUpper If Trim(txtnom.Text) = "" Or IsNumeric(txtnom.Text) = True Then MessageBox.Show("Olvido escribir su Nombre", "Error", MessageBoxButtons.OK,MessageBoxIcon.Error) txtnom.Text = "" txtnom.Focus() Else Me.Hide() gahfrmpre.ShowDialog() End If

If MessageBox.Show("¿Deseas salir ?", "Cuidado...", MessageBoxButtons.YesNo,MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then Me.Close() Else txtnom.Text = "" txtnom.Focus() End If

Programación del formulario

Page 252: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1252

Controles a usar 3 picturebox, 1 textbox, 11 label, 2 groupbox, 1 button, 4 radio button.

Tenga en cuenta q el tiempo de las preguntas es de 20 seg. Por cada una de no contestarladebe pasar a la siguiente pregunta para no regresar a corregirla si la contesta en formaincorrecta tiene la posibilidad de regresar a corregirla, el botón terminar solo sebe mostrasecuando contesto la última pregunta.

El size del formulario debe ser de 731, 597

Page 253: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1253

Leer(0)Mostrar(L)POS = 1grbNPre.Text = "Pregunta " & POS

S(L) = rbt1.Text 'determina que radio button fue seleccionadoO(L) = "A" ' cuando escojio la respuesta a, seria igual para los otros radio button

S(L) = rbt2.TextO(L) = "B"

S(L) = rbt3.TextO(L) = "C"

S(L) = rbt4.TextO(L) = "D"

Correctas() Dim NA As String Dim x As Int32 For x = 0 To O.GetUpperBound(0) If Convert.ToString(A.GetValue(x)) = Convert.ToString(O.GetValue(x)) AndConvert.ToString(O.GetValue(x)) <> "" Then Correctos += 1

Page 254: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1254

ElseIf Convert.ToString(A.GetValue(x)) <> Convert.ToString(O.GetValue(x)) AndConvert.ToString(O.GetValue(x)) <> "" Then Incorrectos += 1 Else SinLlenar += 1 End If Next MessageBox.Show("Su Nota es :" & Correctos & "", "Fin del Exámen",MessageBoxButtons.OK, MessageBoxIcon.Exclamation) 'determina la ruta para q el archivo tome el nombre del usuario q esta dando elexamen. NA = Application.StartupPath & "\" & NOM & ".txt" 'crea un archivo para escritura FileOpen(1, NA, OpenMode.Binary, OpenAccess.ReadWrite) 'por cada fila del archivo se escribe el contenido de la variables FilePut(1, "Su nombre es : " & NOM & " ") ' la funcion vbcrlf salta una linea a la izquierda FilePut(1, vbCrLf) FilePut(1, vbCrLf) FilePut(1, "Su nota es : " & Correctos & "") FilePut(1, vbCrLf) FilePut(1, vbCrLf) FilePut(1, " Resultados finales en : " & TIEMPO & " min fecha : " & Now.Day & " / " &Now.Month & " / " & Now.Year) FilePut(1, vbCrLf) FilePut(1, "-------------------------------------------------------------") FilePut(1, vbCrLf) FilePut(1, vbCrLf) FilePut(1, " Correctas - Marcadas ") FilePut(1, vbCrLf) FilePut(1, "---------------------------------------") FilePut(1, vbCrLf) 'la funcion getupperbound determina el valor del indice For x = 0 To A.GetUpperBound(0) 'getvalue captura el contenido de la variable 'convert.tostring pasa un valor determinado a una cadena If Convert.ToString(A.GetValue(x)) = Convert.ToString(O.GetValue(x)) AndConvert.ToString(O.GetValue(x)) <> "" Then FilePut(1, "" & x + 1 & ")" & " " & Convert.ToString(A.GetValue(x)) & " "& _ Convert.ToString(O.GetValue(x)) & " CORRECTA") FilePut(1, vbCrLf) ElseIf Convert.ToString(A.GetValue(x)) <> Convert.ToString(O.GetValue(x)) AndConvert.ToString(O.GetValue(x)) <> "" Then FilePut(1, "" & x + 1 & ")" & " " & Convert.ToString(A.GetValue(x)) & " "& _ Convert.ToString(O.GetValue(x)) & " INCORRECTA") FilePut(1, vbCrLf)

Else

Page 255: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1255

FilePut(1, "" & x + 1 & ")" & " " & Convert.ToString(A.GetValue(x)) & " "& _ Convert.ToString(O.GetValue(x)) & " EN BLANCO") FilePut(1, vbCrLf) End If Next 'cierra al archivo de escritura FileClose(1) Me.Hide() FR.ShowDialog()

L -= 1 : POS -= 1PicSig.Enabled = TrueIf L <= 0 Then L = 0 : POS = 1 : PicAnt.Enabled = False PicSig.Enabled = TrueEnd IfMostrar(L)grbNPre.Text = "Pregunta " & POS

rbt1.Checked = Falserbt2.Checked = Falserbt3.Checked = Falserbt4.Checked = FalseL += 1 : POS += 1PicAnt.Enabled = True If L >= 4 Then 'L determina la longitud del array L = 4 : POS = 5 : PicSig.Enabled = False ' Pos determina el indice del array PicAnt.Enabled = True End IfMostrar(L)grbNPre.Text = "Pregunta " & POS

El código que falta debe de determinarlo

'programar para q el titulo del formulario tenga el efecto de mobimiento Me.Text = Mid(Me.Text, 2) + Microsoft.VisualBasic.Left(Me.Text, 1)

El código que falta debe de determinarlo

ss = ss + 1

Page 256: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1256

If ss = 60 Then ss = 0 mm = mm + 1 If mm = 60 Then mm = 0 Timer2.Enabled = False Me.Hide() FR.Show() End IfEnd Iftxttime.Text = Format(mm, "00") + ":" + Format(ss, "00")TIEMPO = txttime.Text

Programación del formulario

Controles a usar 1 listbox,5 label, 1 groupbox, 1 picturebox, 3 textbox, 1 button

El size del formulario es 416, 488

Sub Salir() If Correctos > 10 Then MessageBox.Show("Estas bien , progresando", "Observación") Else MessageBox.Show("Estudie e Intente Otra Vez", "Atención") End If Application.Exit()

End sub

Page 257: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1257

txtCorrecto.Text = CorrectostxtIncorrecto.Text = IncorrectostxtBlanco.Text = SinLlenarIf Correctos = 0 Then lblCorrecto.Visible = FalseIf Incorrectos = 0 Then lblIncorrecto.Visible = FalseIf SinLlenar = 0 Then lblBlanco.Visible = FalselblCorrecto.Location = New Point(96, 352 - Correctos * 16.4)lblIncorrecto.Location = New Point(192, 352 - Incorrectos * 16.4)lblBlanco.Location = New Point(288, 352 - SinLlenar * 16.4)

Salir()

Determinar este codigo como se muestra

Private Sub gahResultadoExamenNet_Closing(ByVal sender As Object, ByVal e AsSystem.ComponentModel.CancelEventArgs) Handles MyBase.Closing Salir()End Sub

Desarrollo de Integraciones Manejo de Ítems

La manipulación de datos se desarrolla con el manejo de una estructura y de dimensiones con el almacenamientosde datos dentro de un archivo el será leído tantas veces como el usuario lo desee.

Planteamiento del problema.

Page 258: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1258

Page 259: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1259

Establecer como formulario de inicio al frmServicio.

Page 260: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1260

Page 261: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1261

Page 262: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1262

Page 263: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1263

Page 264: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1264

Page 265: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1265

Page 266: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1266

Semana 11 : (Programación Orientada a Objetos)La programación orientada a objetos es una evolución de la programación procedural basada enfunciones. La POO nos permite agrupar secciones de código con funcionalidades comunes.Una de las principales desventajas de la programación procedural basada en funciones es suconstrucción, cuando una aplicación bajo este tipo de programación crece, la modificación delcódigo se hace muy trabajosa y difícil debido a que el cambio de una sola línea en una función,puede acarrear la modificación de muchas otras líneas de código pertenecientes a otras funcionesque estén relacionadas.

Con la programación orientada a objetos se pretende agrupar el código encapsulándolo yhaciéndolo independiente, de manera que una modificación debida al crecimiento de la aplicaciónsolo afecte a unas pocas líneas.

Las clases

Definen la estructura que van a tener los objetos que se creen a partir de ella, indicando quepropiedades y métodos tendrán los objetos.Los objetos

Se crean a partir de una serie de especificaciones o normas que definen como va a ser el objeto,esto es lo que en POO se conoce como una clase.

Las propiedades definen los datos o información del objeto, permitiendo modificar o consultar suestado, mientras que los métodos son las rutinas que definen el comportamiento del objeto.

La creación de un objeto a partir de una clase se conoce como instanciación de un objeto.

Para explicar la creación de clases usaremos un ejemplo sencillo basado en una clase principal"bicicleta".

Para crear una clase debemos definir sus propiedades y sus métodos, en este ejemplo se usanlos siguientes términos como propiedades de la clase bicicleta: Modelo, Precio,NumeroDeVelocidades y Velocidad; como métodos de la clase se usan: Acelerar(km) , Frenar() yConsultarVelocidad().

Public Class Bicicleta Public Modelo as String Public Precio as Double Public NumeroDeVelocidades as Integer Private Velocidad as Integer

Public Sub Acelerar() Velocidad = Velocidad + 1

End Sub

Page 267: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1267

Public Sub Frenar() If Velocidad > 0 Then Velocidad = Velocidad -1 End If End Sub

Public Function ConsutarVelocidad() As Integer Return Velocidad End FunctionEnd Class

Nuestra clase bicicleta consta de varias propiedades y métodos, las palabras Private y Publicdefinen la accesibilidad de las propiedades, funciones o subrutinas. La definición de una propiedado método de tipo privado indica que sólo podrá ser usada dentro del código de la misma clase, sicreásemos un objeto de tipo bicicleta, las especificaciones de la clase no nos permitirían accedera la propiedad velocidad para consultarla o modificarla, ya que esta definida como privada. Encambio se pueden usar las subrutinas Acelerar() y Frenar() ya que son de tipo Public, y desdedentro de ellas se interactúa con las propiedades privadas, con esto conseguimos encapsular elcódigo y hacer accesible solo aquello que queramos.

Una vez está construida la clase ya se pueden instanciar objetos de la misma.Dim objBicicleta as New BicicletaDim VelocidadActual as Integer

objBicileta.Modelo = "Montaña"objBicicleta.Precio = 200objBicicleta.NumeroDeVelocidades = 21

objBicicleta.Acelerar()objBicicleta.Frenar()

VelocidadActual = objBicicleta.ConsultarVelocidad

Tras la creación del objeto objBicicleta a partir de la clase, se pueden modificar los valores de laspropiedades de tipo Public, y llamar a los métodos de tipo Public.

En el ejemplo se llama a los métodos Acelerar(5), pasándole el numero de Km. que queremosacelerar a través del parámetro "Km." que está definido en la subrutina.

Luego se llama al método Frenar() que decrementa en una unidad el valor de la propiedadVelocidad.

Por último seusa la función

Page 268: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1268

ConsultarVelocidad(), que retorna el valor de la propiedad Velocidad para introducirlo en lavariable VelocidadActual.

Page 269: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1269

Ejemplo Practico en Vb Net

1.- Crear una clase llamada Operaciones que tenga la propiedad n1 y n2 donde se guardaran 2números.

Debe tener también un método llamado Operar el cual recibirá un signo (+,-,*, /) y según esesigno se hará una operación aritmética

En el modulo

Module Module1

Public Class Operaciones

Public N1 As Integer

Public N2 As Integer

Function Operar(ByVal Signo As String)

Select Case SIgno

Case "+" : Operar = N1 + N2

Case "-" : Operar = N1 - N2

Case "*" : Operar = N1 * N2

Case "/" : Operar = N1 / N2

Case Else : Operar = 0

End Select

End Function

End Class

End Module

En el formulario

Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Dim S As String = InputBox("Ingrese signo a operar (+,-,*,/) ")

Dim X As New Operaciones

Page 270: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1270

X.N1 = Val(Me.TextBox1.Text)

X.N2 = Val(Me.TextBox2.Text)

Me.Lblres.Text = X.Operar(S)

End Sub

End Class

Aquí hay otro ejemplo de una clase Formulario

Public Class Formulario

Public Miform As Form

Public Fuente As Font

Sub ColorFondo(ByVal Fondo As Color)

Miform.BackColor = Fondo

End Sub

Sub FuenteTextos()

Dim Obj As Object

For Each Obj In Miform.Controls

If TypeOf Obj Is TextBox Then

Obj.Font = Fuente

End If

Next

End Sub

End Class

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) HandlesMyBase.Load

Dim x As New Formulario

x.Miform = Me

x.Fuente = New Font("Arial Black", 10, FontStyle.Bold)

Page 271: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1271

x.ColorFondo(Color.Aquamarine)

x.FuenteTextos()

End Sub

Los tres pilares de la Programación Orientada a Objetos

Según se dice por ahí, cualquier lenguaje basado en objetos debe cumplir estos tres requisitos:

1. Herencia2. Encapsulación3. Polimorfismo

Page 272: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1272

Semana 12 : (Constructores y Sobrecarga)Toda clase tiene por lo menos un constructor aun si no es declarado explícitamente javale genera uno por defecto.

El constructor es un método que se ejecuta al inicializar el objeto y su contenido decódigo generalmente inicializa las variables o propiedades de la clase.

El nombre de un método constructor debe ser siempre el nombre de la clase.

Que es sobrecargado de metodos?

La sobrecarga de métodos consiste en poner varios métodos con el mismo nombre en lamisma clase, pero siempre que su lista de argumentos sea distinta. Ojo, repito, siempreque su lista de argumentos sea distinta, es decir, no puede haber dos métodos que sellamen igual con la misma lista de argumentos, aunque devuelvan datos de distinto tipo.El compilador sabría a cuál de todas las sobrecargas nos referimos por los argumentosque se le pasen en la llamada, pero no sería capaz de determinar cuál de ellas debeejecutar si tienen la misma lista de argumentos.

Ejemplo .-Realizar el ingreso de nuevos alumnos y almacenarlos en un listbox , se debe calcularsu promedio para cada uno.

Public Class Form1

Dim ves As estudiante

Private Sub Form1_Load(ByVal sender AsSystem.Object, ByVal e As System.EventArgs)Handles MyBase.Load

End Sub

Private Sub BtnAcepta_Click(ByVal sender AsSystem.Object, ByVal e As System.EventArgs)Handles BtnAcepta.Click

ves = New estudiante

ves.nombre = Me.txtnom.Text

ves.exf = CInt(Me.txtEf.Text)

Page 273: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1273

ves.exp = CInt(Me.txtep.Text)

Me.txtnom.Clear()

txtEf.Clear() : txtep.Clear()

txtnom.Focus()

BtnMuestra_Click(sender, e)

End Sub

Private Sub BtnMuestra_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles BtnMuestra.Click

Dim strfrm As String

strfrm = "{0,-25}{1,15}"

'ListBox1.Items.Clear()

ListBox1.Items.Add(String.Format(strfrm, ves.nombre, ves.obser))

End Sub

End Class

Class estudiante

Private m_nom As String

Private m_exp As Integer

Private m_Exf As Integer

Public Property nombre() As String

Get

Return m_nom

End Get

Set(ByVal value As String)

m_nom = value

End Set

Page 274: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1274

End Property

Public WriteOnly Property exf() As Integer

Set(ByVal value As Integer)

m_Exf = value

End Set

End Property

Public WriteOnly Property exp() As Integer

Set(ByVal value As Integer)

m_exp = value

End Set

End Property

Function obser() As String

Dim pro As Single, obs$

pro = (m_exp + 2 * m_Exf) / 3

obs = ""

Select Case pro

Case 0 To 6 : obs = "deficiente"

Case 7 To 10 : obs = "desparobado"

Case 11 To 15 : obs = "aprobado"

Case 16 To 20 : obs = "excelente"

End Select

Return obs

End Function

End Class

Ejemplo.- Elaborar una calculadora empleando clases.

Page 275: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1275

Public Class Form2

Dim adder As New AddingMachine()

Dim calc As New Calculator()

Private Sub Form2_Load(ByVal sender AsSystem.Object, ByVal e As System.EventArgs) HandlesMyBase.Load

End Sub

Private Sub btnadd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles btnadd.Click

adder.FirstNumber = CDbl(txtn1.Text)

adder.SecondNumber = CDbl(txtn2.Text)

Me.txtres.Text = CStr(adder.Add)

End Sub

Private Sub rdmac_CheckedChanged(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles rdmac.CheckedChanged

btnMul.Visible = False

btndiv.Visible = False

End Sub

Private Sub rdCalcula_CheckedChanged(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles rdCalcula.CheckedChanged

btnMul.Visible = True

btndiv.Visible = True

End Sub

Private Sub btnres_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles btnres.Click

adder.FirstNumber = CDbl(txtn1.Text)

adder.SecondN

Page 276: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1276

umber = CDbl(txtn2.Text)

Me.txtres.Text = CStr(adder.Subtract)

End Sub

Private Sub btnMul_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) HandlesbtnMul.Click

calc.FirstNumber = CDbl(txtn1.Text)

calc.SecondNumber = CDbl(txtn2.Text)

txtres.Text = CStr(calc.Multiply)

End Sub

Private Sub btndiv_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles btndiv.Click

calc.FirstNumber = CDbl(txtn1.Text)

calc.SecondNumber = CDbl(txtn2.Text)

txtres.Text = CStr(calc.Divide)

End Sub

End Class

Class AddingMachine

Private m_num1, m_num2 As Double

Public Property FirstNumber() As Double

Get

Return m_num1

End Get

Set(ByVal value As Double)

m_num1 = value

End Set

End Property

PublicProperty

Page 277: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1277

SecondNumber() As Double

Get

Return m_num2

End Get

Set(ByVal value As Double)

m_num2 = value

End Set

End Property

Function Add() As Double

Return FirstNumber + SecondNumber

End Function

Function Subtract() As Double

Return FirstNumber - SecondNumber

End Function

End Class

Class Calculator

Inherits AddingMachine

'Calculator inherits properties FirstNumber and SecondNumber

'and functions Add() and Subtract().

Function Multiply() As Double

Return FirstNumber * SecondNumber

End Function

Function Divide() As Double

Return FirstNumber / SecondNumber

End Function

End Class

Page 278: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1278

PROBLEMAS PROPUESTOS DE CLASES

1.- Realizar una clase vendedor para llevar el control de sus ventas , cuando se crea la clase todovendedor debe empezar con cierta cantidad ; el precio del producto se asigna inicialmente , sedeben crear los siguientes métodos:

Void vender(int cant) .-, Solo se puede vender si hay una cantidad de disponible y por cadaventa se tiene que disminuir la cantidad inicial y acumular su monto

Para hacer la prueba crear dos objetos vendedores que parten con cierta cantidad que se leasigna , cambiar un nuevo precio del vendedor 2 ingresado por teclado.

-Comprar cantidades del vendedor 1 y 2 ingresando por teclado la cantidad.

- Imprimir su totales ventas por cada vendedor.

2.- Crear la clase Ahorro : String nrocta, String Cliente,double saldo

crear los métodos accesores y constructores para la clase para asignar los datos e imprimirlos.

También deberá crear los métodos Deposito (que acepte un monto e incrementar el saldo) y elmétodo Retiro (que acepte un monto pero solo se podrá retirar si tiene saldo disponible de locontrario muestre un mensaje de error).

Comprobarlo en un programa principal. (6

SuperVendedor

Static doubleprecio=120;

Un constructor (int cantidad) .- debe pasar lacantidad a vender

Void cambiaPrecio( double nuevoPrecio)

Page 279: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1279

Semana 13 : (Herencias e Interfaces)Según la documentación de Visual Studio .NET:

Una relación de herencia es una relación en la que un tipo (el tipo derivado) se deriva de otro (eltipo base), de tal forma que el espacio de declaración del tipo derivado contiene implícitamentetodos los miembros de tipo no constructor del tipo base.

La herencia es la cualidad de crear clases que estén basadas en otras clases. La nueva claseheredará todas las propiedades y métodos de la clase de la que está derivada, además de podermodificar el comportamiento de los procedimientos que ha heredado, así como añadir otrosnuevos.

Supongamos que tenemos una clase Gato que está derivada de la clase Animal.El Gato hereda de Animal todas las características comunes a los animales, además de añadirlealgunas características particulares a su condición felina.Podemos decir que un Gato es un Animal, lo mismo que un Perro es un Animal, ambos estánderivados (han heredado) de la clase Animal, pero cada uno de ellos es diferente, aunque en elfondo los dos son animales.Esto es herencia: usar una clase base (Animal) y poder ampliarla sin perder nada de lo heredado,pudiendo ampliar la clase de la que se ha derivado (o heredado).

Encapsulación

Según la documentación de Visual Studio .NET:

La encapsulación es la capacidad de contener y controlar el acceso a un grupo de elementosasociados. Las clases proporcionan una de las formas más comunes de encapsular elementos.

Cuando usamos las clases, éstas tienen una serie de características (los datos que manipula) asícomo una serie de comportamientos (las acciones a realizar con esos datos). Pues laencapsulación es esa capacidad de la clase de ocultarnos sus interioridades para que sóloveamos lo que tenemos que ver, sin tener que preocuparnos de cómo está codificada para quehaga lo que hace... simplemente nos debe importar que lo haga.

Si tomamos el ejemplo de la clase Gato, sabemos que araña, come, se mueve, etc., pero el cómolo hace no es algo que deba preocuparnos, salvo que se lance sobre nosotros... aunque, en esecaso, lo que deberíamos tener es una clase "espanta-gatos" para quitárnoslo de encima lo antesposible...

Polimorfismo

Page 280: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1280

Según la documentación de Visual Studio .NET:

El polimorfismo se refiere a la posibilidad de definir múltiples clases con funcionalidad diferente,pero con métodos o propiedades denominados de forma idéntica, que pueden utilizarse demanera intercambiable mediante código cliente en tiempo de ejecución.

el Polimorfismo nos permite usar miembros de distintas clases de forma genérica sin tener quepreocuparnos si pertenece a una clase o a otra.Siguiendo con el ejemplo de los animales, si el Gato y el Perro pueden morder podríamos tener un"animal" que muerda sin importarnos que sea el Gato o el Perro, simplemente podríamos usar elmétodo Morder ya que ambos animales tienen esa característica "animal mordedor".

Ejemplo.- Se tiene una clase principal vehiculo que puede ser carro o camion , si es carro paga unpeaje S/3.2 y si es caminon se paga el doble , mostrar en cada instante lo recaudado y cuantosvehiculos se han procesado.

Codificacion

Public Class frmherencia

Dim cls As New vehiculo

Dim tipo As New recauda

Private Sub frmherencia_Load(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles MyBase.Load

End Sub

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

lbnro.Text = cls.cuenta

If Me.rdCamion.Checked Then

Me.lbtot.Text = tipo.camion

Else

Me.lbtot.Text = tipo.carro

End If

End Sub

Page 281: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1281

End Class

Class vehiculo

Private m_can As Integer

Private sm1, sm2 As Single

Sub New()

m_can = 0

sm1 = 0

sm2 = 0

End Sub

Function cuenta() As Integer

m_can = m_can + 1

Return m_can

End Function

End Class

Class recauda

Inherits vehiculo

Private sm1, sm2 As Single

Function carro() As Single

sm1 = sm1 + 3.2

Return sm1

End Function

Function camion() As Single

sm2 = sm2 + 6.4

Return sm2

End Function

End Class

Page 282: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1282

Ejemplo de Polimorfismo y Mybase

La observacion es de acuerdo al puntaje que se obtienecomo promedio , si es un estudiante de primaria osecundaria ; si es de primaria el promedio se le asignauna letra correspondiente, y si es de secundaria elpromedio que le corresponde.

Codificacion

Public Class frmPoliformismo

Dim students(49) As Student 'Stores the class

Dim lastStudentAdded As Integer = -1 'Last student added to students

Private Sub frmPoliformismo_Load( ) Handles MyBase.Load

End Sub

Private Sub BtnAcepta_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles BtnAcepta.Click

Dim pupil As Student

'Create the appropriate object depending upon the radio button.

If Me.RdFail.Checked Then

pupil = New PFStudent()

Else

pupil = New Student()

End If

'Store the values in the text boxes into the object.

Page 283: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1283

pupil.Name = txtnom.Text

pupil.SocSecNum = txtnum.Text

pupil.Midterm = CDbl(txtep.Text)

pupil.Final = CDbl(txtEf.Text)

'Add the student to the array.

lastStudentAdded += 1

students(lastStudentAdded) = pupil

'Clear text boxes and list box.

txtnom.Clear()

txtnum.Clear()

txtep.Clear()

txtEf.Clear()

ListBox1.Items.Add("Student #" & lastStudentAdded + 1 _

& " recorded.")

End Sub

Private Sub BtnMuestra_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles BtnMuestra.Click

'Display the students' information and semester grade.

Dim fmtStr As String = "{0,-20}{1,-15}{2,-4}"

ListBox1.Items.Clear()

'Loop over all available elements of the Student array.

For i As Integer = 0 To lastStudentAdded

ListBox1.Items.Add(String.Format(fmtStr, students(i).Name, _

students(i).SocSecNum, students(i).CalcSemGrade))

Next

Page 284: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1284

End Sub

End Class

Class Student

'Member variables to hold the property values

Private m_name As String

Private m_ssn As String

Private m_midterm As Double

Private m_final As Double

Public Property Name() As String

'The student's name

Get

Return m_name

End Get

Set(ByVal value As String)

m_name = value

End Set

End Property

Public Property SocSecNum() As String

'The student's Social Security Number

Get

Return m_ssn

End Get

Set(ByVal value As String)

m_ssn = value

End Set

End Property

Page 285: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1285

Public WriteOnly Property Midterm() As Double

'The student's score on the midterm exam

Set(ByVal value As Double)

m_midterm = value

End Set

End Property

Public WriteOnly Property Final() As Double

'The student's score on the final exam

Set(ByVal value As Double)

m_final = value

End Set

End Property

Overridable Function CalcSemGrade() As String

'The student's grade for the semester

Dim grade As Double

'The grade is based upon average of the midterm and final exams.

grade = (m_midterm + m_final) / 2

grade = Math.Round(grade) 'Round the grade.

Select Case grade

Case Is >= 90 : Return "A"

Case Is >= 80 : Return "B"

Case Is >= 70 : Return "C"

Case Is >= 60 : Return "D"

Case Else

Return "F"

End Select

Page 286: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1286

End Function

End Class

Class PFStudent

Inherits Student

Overrides Function CalcSemGrade() As String

'The student's grade for the semester

'If MyBase.CalcSemGrade = "F" Then

' Return "Fail"

'Else

' Return "Pass"

'End If

Select Case MyBase.CalcSemGrade

Case "A", "B" : Return "Aprobado"

Case "C", "D", "F" : Return "desaprobado"

End Select

End Function

End Class

Ejercicios Propuestos

OBJETIVO.- que el alumno sea capaz de desarrollar sus programas en bases a clases POO.

1.- Diseñe e implemente en Java una clase para trabajar con triángulos isósceles. Para ello, definalas variables de ejemplar mínimas que requiera, proporcione métodos de consulta, un métodoconstructor e implemente otros métodos para calcular el perímetro y el área de un triángulo.

2.-Implemente una clase llamado banco ,con los atributos nro de cuenta , nombre del cliente ,tipo de ahorro( D=dólar y S=soles) y el saldo; Implemente los métodos para deposito , retiro dedinero. y los métodos constructores respectivos.

Esta aplicación impleméntelo :

a) Primero en modo de consola , empleando un ArrayList para almacenar un conjunto declientes , se debe elaborar un menú que contemple las siguientes opciones:

Page 287: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1287

(1) Nuevos ahorristas(2) Consulta de Saldos(3) Movimiento de Cuentas(4) Listado de Ahorristas(5) Anulación de cuentas(6) SalirEn la opción 2 se realiza la búsqueda por medio de un numero de cuenta

En la opción 3 se realiza el deposito o retiro a través de un numero de cuentaactualizando el saldo respectivo.

La anulación también se realiza por medio del nro de cuenta.

b) Realizar la misma aplicación pero empleando formularios.

Page 288: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1288

Semana 14 : (Programacion Con Ado . Net)ADO .NET es la nueva versión del modelo de objetos ADO (ActiveX Data Object), es decir laestrategia que ofrece Microsoft para el acceso a datos. ADO .NET ha sido ampliado para cubrirtodas las necesidades que ADO no ofrecía, y esta diseñado para trabajar con conjuntos de datosdesconectados, lo que permite reducir el trafico de red. ADO .NET utiliza XML con formatouniversal de transmisión de los datos.

Estructura del modelo de objetos

Ambitos con nombre de ADO .NET

La instalacion por defecto de la plataforma .NET aporta cinco ambitos con nombre namespacesrelacionados con ADO.NET, a los cuales habria que añadir uno o mas por cada proveedoradicional que pudieramos instalar después. Estos cinco ambitos son:

• System.Data: Aloja las clases independientes del origen de datos, asi como las interfaces quedeben implementar las clases dependientes.

• System.Data.Common: Contiene clases que facilitan la implementacion de las interfacesexistentes en System,.Data por parte de los distintos proveedores de datos, asi como otrascompartidas por todos los proveedores.

• System.Data.OleDb : Corresponde al proveedor ADO.NET que permite utilizar cualquiercontrolador OLE DB para conectar con un origen de datos. En el se encuentranimplementaciones especificas de clases para comunicarse mediante OLE DB.

Page 289: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1289

• System.Data.SqlClient : Como el anterior, alberga clases especificas para operar sobre undeterminado origen de datos, en este caso SQL Server.

• System.Data.OracleClient : Correspondiente al proveedor nativo para acceso a datos Oracle.Al igual que System.Data.SqlClient o Sytem.Data.OleDb, contiene implementacionesespecificas de clases que facilitan la conexión y comunicación con este RDBMS (Sistema deadministración de base de datos Relacional).

Proveedores de acceso a datos

Los proveedores de acceso a datos es la capa inferior de la parte correspondiente al acceso dedatos y es la responsable de establecer la comunicación con las fuentes de datos.

En este conjunto de nombres de espacio, encontraremos casi siempre las clases Connection,Command, DataAdapter y DataReader como las clases más generales, las cuales nos permitenestablecer la conexión con la fuente de datos.

Proveedor de acceso a datos de .NET Framework

Dentro del entorno .NET Framework, encontramos un nutrido conjunto de proveedores de accesoa datos.

Estos son los siguientes:

• ODBC .NET Data Provider• OLE DB .NET Data Provider• Oracle Client .NET Data Provider• SQL Server .NET Data Provider

Estos proveedores de acceso a datos incluidos en Microsoft .NET Framework, los podemosencontrar en los nombres de espacio:

• System.Data.Odbc• System.Data.OleDb• System.Data.OracleClient• System.Data.SqlClient

El objeto Connection

Este objeto es el encargado de establecer una conexión física con una base de datosdeterminada.Para establecer la conexión con una determinada fuente de datos, no sólo debemos establecer lacadena de conexión correctamente, sino que además deberemos usar los parámetros de conexióny el proveedor de acceso a datos adecuado.Con este objeto, podremos además abrir y cerrar una conexión.

Page 290: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1290

El objeto Command

Este objeto es el que representa una determinada sentencia SQL o un Stored Procedure.Aunque no es obligatorio su uso, en caso de necesitarlo, lo utilizaremos conjuntamente con elobjeto DataAdapter que es el encargado de ejecutar la instrucción indicada.

El objeto DataAdapter

Este objeto es quizás el objeto más complejo y a la vez complicado de todos los que forman partede un proveedor de acceso a datos en .NET.Cuando deseamos establecer una comunicación entre una fuente de datos y un DataSet,utilizamos como intermediario a un objeto DataAdapter.A su vez, un DataAdapter contiene 4 objetos que debemos conocer:

• SelectCommand es el objeto encargado de realizar los trabajos de selección de datos conuna fuente de datos dada.En sí, es el que se encarga de devolver y rellenar los datos de una fuente de datos a unDataSet.

• DeleteCommand es el objeto encardago de realizar las acciones de borrado de datos.• InsertCommand es el objeto encardago de realizar las acciones de inserción de datos.• UpdateCommand es el objeto encardago de realizar las acciones de actualización de

datos.Los objetos DeleteCommand, InsertCommand y UpdateCommand son los objetos que se utilizanpara manipular y transmitir datos de una fuente de datos determinada, al contrario del objetoSelectCommand que tan sólo interactúa con la fuente de datos para recuperar una porción o todoslos datos indicados en el objeto Command anteriormente comentado.

El objeto DataReader

Este objeto es el utilizado en una sóla dirección de datos. Establece una conexión en un modo desolo lectura.Se trata de un objeto de acceso a datos muy rápido.Este objeto puede usar a su vez el objeto Command o el método ExecuteReader.

La clase DataSet

Page 291: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1291

Puede que sea la capa más externa e importante del modelo ADO.NET, pero es la que contienequizás, el modelo de colecciones y trabajo que más le puede resultar familiar al programador deVisual Basic 6, sobre todo a los anteriormente comentados RecordSets.

El DataSet contiene en sí, un conjunto de datos que han sido volcados desde el proveedor dedatos.De esa forma, podemos trabajar con ellos como lo hacíamos en Visual Basic 6 por ejemplo.De hecho, por marcar una similitud con el RecordSet, el DataSet está preparado para trabajar confuentes de datos desconectadas.

La clase DataView

Este objeto nos permite crear múltiples vistas de nuestros datos, además de permitirnos presentarlos datos.

Es la clase que nos permite representar los datos de la clase DataTable, permitiéndonos editar,ordenar y filtrar, buscar y navegar por un conjunto de datos determinado.

La clase DataTable

Este objeto nos permite representar una determinada tabla en memoria, de modo que podamosinteractuar con ella.

A la hora de trabajar con este objeto, debemos tener en cuenta el nombre con el cuál definamosuna determinada tabla, ya que los objetos declarados en en el DataTable es sensitivo amayúsculas y minúsculas.

Lo que sí está claro es que el modelo de datos de ADO.NET que hemos visto, quedaría resumidoen cuanto a la conectividad de la manera en la que se representa en la figura.

Page 292: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1292

El objeto DataSet nos ofrece la posibilidad de almacenar datos, tablas y bases de datos de unadeterminada fuente de datos.De esta manera, podemos trabajar con las aplicaciones estando desconectados de la fuente dedatos.

Sin embargo, a veces necesitamos trabajar con la fuente de datos estando conectados a ella.El objeto DataReader nos ofrece precisamente la posibilidad de trabajar con fuentes de datosconectadas.

Por otro lado, el objeto DataReader tiene algunas particularidades que conviene conocer y queveremos a continuación.

Motor de Base de Datos

Microsoft Access

Este producto, que forma parte de la suite Microsoft office, es uno de los gestores de base dedatos mas populares del mercado, especialmente en instalaciones en las que el propio usuarioopera sobre la información.

Desde una aplicación Visual Studio .NET podemos necesitar recuperar la información que elusuario gestiona habitualmente utilizando Access o, incluso, crear una aplicación que se encarguede actuar como interfaz para ese usuario a fin de que no tenga que aprender a usar Access.

Estructura de una tabla creada en Access.

Page 293: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1293

Aplicación 1:

Creara una carpeta llamada BDVisualNET, será donde se almacenara el proyecto que crearemos.

Form1.Vb

Realizando la conexión, con el controlOleDbDataAdapter.

1. Nos ubicamos en la barra de herramientas,seleccionamos el cuadro de herramientasDatos, y buscamos el controlOleDbDataAdapter.

2. Le damos un clic en el controlOleDbDataAdapter y lo arrastramos alformulario actual que estamos trabajando.

3. Nos mostrara un Asistente para laconfiguración del adaptador de datos.

Page 294: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1294

4. En elegir conexión de datos, crearemos una conexión nueva a la base de datos Access, ledamos clic en el boton Nueva conexión.

5. Nos ubicamos en la etiqueta Proveedor, y seleccionamos el Proveedor OLE DB => MicrosoftJet 4.0 OLE DB Provider.

Page 295: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1295

6. Le damos clic en el botón siguiente.7. En la ventana conexión seleccionamos la base de datos en Access ventas, como punto de

trabajo, le damos clic en el boton , para buscar la base de datos.

8. Le damos un clic en el botón Probar conexión, para verificar si la conexión fue satisfactori.9. Luego de damos clic en el botón Aceptar.

Page 296: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1296

10. Le damos clic en el botón siguiente.11. En el tipo de consulta, dejamos la selección por defecto, usar instrucciones SQL, el cual nos

permitirá buscar la tabla o tablas para mostrar en nuestro DataGrid1. Le damos clic ensiguiente.

12. En este cuadro de Generar las instrucciones SQL, generamos una consulta, le damos clic en elboton Generador de Consultas.

Page 297: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1297

13. En el Generador de Consultas, seleccionamos la tabla o tablas que deseamos visualizar, ledamos un clic en el boton Agregar, y clic en cerrar.

14. En la tabla agregada Clientes, marcamos el check , el nos permitirámostrar todos los campos de la tabla Clientes.

Page 298: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1298

15. Notamos en la imagen que se genera una conjunto de sentencias SQL (Lenguaje de consultaestructurado), el cual define los campos a mostrar, le damos un clic en el botón Aceptar.

16. Clic en el botón siguiente.17. En esta pantalla nos muestra los resultados del asistente. El cual ha pasado toda la

configuración correctamente.

Page 299: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1299

18. Clic en botón Finalizar.

19. Nos mostrar un cuadro de mensaje, el cual nos indicar si deseamos incluir o no la contraseña,en nuestra configuración, le damos clic en No incluir contraseña.

20. Notaremos que se agrego en el formulario 2 controles, producto de la configuración realizada.

Una vez terminado la configuración del OleDbDataAdapter.

21. Nos ubicamos en el formulario creado, y programamos lo siguiente.

CODIGO FUENTE

Public Class Form1

Page 300: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1300

Inherits System.Windows.Forms.Form

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles MyBase.Load

Dim tbl As New DataTable

OleDbDataAdapter1.Fill(tbl)

DataGrid1.DataSource = tbl

lblregistros.Text = tbl.Rows.Count

End Sub

Private Sub CmdSalir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles CmdSalir.Click

If MessageBox.Show("Desea Salir", "Listado de Registros", 4, 32) = 6 Then

Application.Exit()

End If

End Sub

End Class

Resultado del Formulario.

Page 301: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1301

Page 302: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1302

Semana 15 : (Trabajo de ambiente Conectado)

La capa conectada de ADO.NET contiene objetos especializados en la conexión con losorígenes de datos. Así, la clase genérica Connection se utiliza para establecer conexionesa los orígenes de datos. La clase Command se encarga de enviar comandos de todaíndole al origen de datos. Por fin la clase DataReader está especializada en leer los resultadosde los comandos.

La clase DataAdapter hace uso de las tres anteriores para actuar de puente entrela capa conectada y la desconectada como veremos después.

Estas clases son abstractas, es decir, no tienen una implementación real de la que se puedahacer uso directamente. Es en este punto en donde entran en juego los proveedores dedatos. Cada origen de datos tiene un modo especial de comunicarse con losprogramas que los utilizan, además de otras particularidades que se deben contemplar.Un proveedor de datos de ADO.NET es una implementación concreta de las clasesconectadas abstractas que hemos visto, que hereda de éstas y que tiene en cuenta ya todaslas particularidades del origen de datos en cuestión.

Así, por ejemplo, las clases específicas para acceder a SQL Server se llamanSqlConnection, SqlCommand, SqlDataReader y SqlDataAdapter y se encuentran bajoel espacio de nombres System.Data.SqlClient. Es decir, al contrario que en ADOclásico no hay una única clase Connection o Command que se use en cada caso, sino que existen clases especializadas para conectarse y recuperar información de cada tipo deorigen de datos.

En resumen: con la capa conectada de ADO.NET realizamos la conexión y comunicacióncon los orígenes de datos. Cada proveedor de datos implementa su propia versiónde las clases Connection, Command, DataReader y DataAdapter (entre otras).

• Las clases derivadas de Connection se utilizan para realizar la conexión y enviar y recibirinformación.

• Las clases derivadas de Command permiten ejecutar sentencias SQL y procedimientosalmacenados en el gestor de datos.

• Las clases derivadas de DataReader se emplean para obtener los posibles resultados deun comando utilizando para ello el conducto de comunicación establecido por Connection.

Aplicacion Empleando la Clase OledbDataReader

Page 303: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1303

Codificación

Imports System.Data.OleDb

Public Class frmProveedor

Inherits System.Windows.Forms.Form

+Codigo Generado

Dim cn As New OleDbConnection("provider=sqloledb;uid=sa;pwd=;database=northwind; server=.")

Dim cmd As New OleDbCommand()

Dim rdp As OleDbDataReader

Dim rds As OleDbDataReader

Dim prm As OleDbParameter

Private Sub frmProveedor_Load(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles MyBase.Load

cn.Open()

cmd.Connection = cn

cmd.CommandType = CommandType.Text

Controles empleados Combobox1

Y Listbox con nombre Lstproducto

Clases empleadas:

OleDbdataReader.- Proporciona elmodo de lectura de una secuencia defilas de datos de tipo sólo avance de unorigen de datos. Esta clase no se puedeheredar.

Para crear OleDbDataReader, se debellamar al método ExecuteReader delobjeto OleDbCommand, en lugar deutilizar directamente un constructor.

Page 304: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1304

cmd.CommandText = "select supplierId from suppliers"

rdp = cmd.ExecuteReader

While rdp.Read

cboproveedor.Items.Add(rdp("supplierId")).ToString()

End While

cboproveedor.SelectedIndex = 0

rdp.Close()

cmd.CommandText = "select * from products"

listarproducto()

End Sub

Public Sub listarproducto()

rds = cmd.ExecuteReader

lstproducto.Items.Clear()

While rds.Read

lstproducto.Items.Add(rds("productName")).ToString()

End While

rds.Close()

End Sub

Private Sub btnok_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles btnok.Click

cmd.CommandType = CommandType.Text

cmd.CommandText = "select * from products where supplierid=" + cboproveedor.Text

listarproducto()

End Sub

End Class

Page 305: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1305

Aplicacion empleando Store Procedure (procedimientos almacenados)

Procedimiento almacenados ejecutarlo en el Query Analizador:

a)Pasando dos fechas que muestre las ordenes detalle con su total respectivo

Create Procedure Sp_ConsultaFecha

@FechaIni Varchar(20),

@FechaFin Varchar(20)

As

Select Orders.OrderID,ProductName,[Order Details].UnitPrice as Precio,Quantity as Cantidad,

[Order Details].UnitPrice * Quantity as Subtotal From

[Order Details],Products,Orders where [Order Details].ProductID=Products.ProductID

and Orders.OrderId=[Order Details].OrderID and

OrderDateBetween

Controles empleados:

Controles deopciones:

RbtOrden y rbtFecha

Y cajas de textos:

Txtfe1 y TxtFe2

Y un datagrid1

Page 306: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1306

@FechaIni and @FechaFin

Return

b) Psando un orden de pedido que muestre su detalle

Create Procedure Sp_ConsultaOrden

@Orden Int

As

Select Orders.OrderID,ProductName,[Order Details].UnitPrice as Precio,Quantity as Cantidad,

[Order Details].UnitPrice * Quantity as Subtotal From

[Order Details],Products,Orders where [Order Details].ProductID=Products.ProductID

and Orders.OrderId=[Order Details].OrderID and Orders.OrderID=@Orden

Codificacion del Formulario

Imports System.Data.SqlClient

Public Class Ordenes

Public Cn As New SqlConnection("Server=(Local);uid=sa;Database=Northwind")

Public Ds, ds2 As New DataSet()

Public Cmd As New SqlCommand()

Public Da As New SqlDataAdapter()

Dim prm As New SqlParameter()

Private Sub Ok_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) HandlesOk.Click

Dim cmd2 As New SqlCommand()

Dim da2 As New SqlDataAdapter()

Dim prm2 As New SqlParameter()

If rbnOrden.Checked Then

Page 307: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1307

If Len(txtOrden.Text) = 5 Then

prm.Value = Convert.ToInt32(txtOrden.Text())

Da.SelectCommand = Cmd

Ds.Clear()

Da.Fill(Ds, "Ordenes")

DataGrid1.CaptionText = "Consulta por Ordenes"

DataGrid1.DataSource = Ds.Tables("Ordenes").DefaultView

Else

Ds.Clear()

End If

ElseIf RbnFecha.Checked Then

cmd2.Connection = Cn

cmd2.CommandType = CommandType.StoredProcedure

cmd2.CommandText = "Sp_ConsultaFecha"

Adiciona los parametros que necesita el procedimiento

prm2 = cmd2.Parameters.Add("@FechaIni", SqlDbType.DateTime)

prm2.Direction = ParameterDirection.Input

prm2.Value = Convert.ToDateTime(txtFe1.Text())

prm2 = cmd2.Parameters.Add("@FechaFin", SqlDbType.DateTime)

prm2.Direction = ParameterDirection.Input

prm2.Value = Convert.ToDateTime(txtfe2.Text())

da2.SelectCommand = cmd2

ds2.Clear()

da2.Fill(ds2, "fechas")

DataGrid1.CaptionText = "Consulta por Fechas"

DataGrid1.Data

Page 308: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1308

Source = ds2.Tables("fechas").DefaultView

End If

Cn.Close()

End Sub

Private Sub Ordenes_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles MyBase.Load

txtOrden.Clear()

txtFe1.Clear()

txtfe2.Clear()

Cn.Open()

Cmd.Connection = Cn

Cmd.CommandType = CommandType.StoredProcedure

Cmd.CommandText = "Sp_ConsultaOrden"

prm = Cmd.Parameters.Add("@Orden", SqlDbType.Int)

prm.Direction = ParameterDirection.Input

End Sub

Private Sub rbnOrden_CheckedChanged(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles rbnOrden.CheckedChanged

txtOrden.Enabled = True

txtFe1.Enabled = False

txtfe2.Enabled = False

End Sub

Private Sub RbnFecha_CheckedChanged(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles RbnFecha.CheckedChanged

txtOrden.Enabled = False

txtFe1.Enabled = True

Page 309: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1309

txtfe2.Enabled = True

End Sub

End Class

Page 310: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1310

Semana 16 : (Trabajo con AmbiewnteDesconectado)La capa desconectada

Una vez que ya se han recuperado los datos desde un origen de datos la conexión a éste ya no esnecesaria. Sin embargo sigue siendo necesario trabajar con los datos obtenidos de una manera

flexible. Es aquí cuando la capa de datos desconectada entra en juego. Además, en muchasocasiones es necesario tratar con datos que no han sido obtenidos desde un origen de datosrelacional con el que se requiera una conexión. A veces únicamente necesitamos un almacén dedatos temporal pero que ofrezca características avanzadas de gestión y acceso a la información.

Finalmente otro motivo por el que es importante el uso de los datos desconectado de su origen esla transferencia de información entre capas de una aplicación. Éstas pueden encontrarsedistribuidas por diferentes equipos, e incluso en diferentes lugares del mundo gracias a Internet.Por ello es necesario disponer de algún modo genérico y eficiente de poder transportar los datosentre diferentes lugares, utilizarlos en cualquiera de ellos y posteriormente tener la capacidad deconciliar los cambios realizados sobre ellos con el origen de datos del que proceden. Todo esto ymucho más es lo que nos otorga el uso de los objetos DataSet, núcleo central de la capadesconectada de ADO.NET.

Unión entre capa conectada y desconectada

La clase DataAdapter se ha incluido anteriormente en la capa conectada por que estáimplementada por cada proveedor de un modo diferente. En realidad es una clase que pone suspies en ambos mundos (conectado y sin conexión) y sirve de nexo entre ellos.

Un DataAdapter sabe omo manejar correctamente los objetos proporcionados por su proveedorespecífico (fundamentalmente los vistos: Connection, Command y DataReader) y proporcionamétodos para trasegar información desde el servidor a DataSets desconectados y viceversa

haciendo uso de dichos objetos específicos del proveedor.

Así, por ejemplo, el método Fill de un DataSet se utiliza para introducir los resultados de unaconsula dentro de un DataSet para luego trabajar con ellos sin preocuparnos de su origen. Delmismo modo su método Update se utiliza para conciliar automáticamente con el origen de datoslos datos modificados en un DataSet mientras no había conexión.

Otras clases dependientes de DataSet

Como hemos dicho antes un DataSet podría asimilarse a un pequeño gestor de datos enmemoria. Como tal un DataSet permite mantener diversas tablas así como las relaciones entreellas, incluso forzando que se cumplan restricciones de creación y actualización, como en una

Page 311: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1311

base de datos

"real". Para ello se apoya en el uso de otras clases especializadas que son las siguientes:

• DataTable: representa una tabla o relación de datos. Se puede asimilar a una tabla de ungestor de datos. Los datos obtenidos de una consulta de tipo SELECT de SQL sealmacenan en un objeto de esta clase.

• DataColumn: ofrece información sobre cada uno de los campos de los registrosalmacenados en un DataTable, como su nombre o su tipo.

• DataRow: representa un registro de la tabla virtual definida por el DataTable. Contienetantos elementos como campos tiene la tabla, cada uno del tipo definido por el objeto

DataColumn correspondiente.

• Constraint: las clases Constraint se emplean para definir resticciones en los tipos de datoscontenidos en un DataTable. Por ejemplo se puede usar un objeto de esta clase paraindicar que un determinado campo debe ser único o que se trata de una clave externa quedebe ser tenida en cuenta en actualizaciones o borrados en cascada.

• DataRelations: define la relación existente entre dos objetos DataTable. Normalmente sesuelen utilizar un identificador común a ambas tablas aunque pueden ser combinaciones demás de uno de ellos. De este modo se sabe cómo obtener información de una tabla a partirde información en otra. Por ejemplo el identificador de una factura (su número, por ejemplo)puede servir para relacionar su registro con los registros de detalle de factura que estáncontenidos en otra tabla.

• DataView: representa una vista concreta de un DataTable. Normalmente se trata deordenaciones o filtros sobre los datos originales. Todas las tablas disponen de una vista pordfecto (propiedad DefaultView) que ofrece los datos tal y como se han introducido en ésta yes la vista que se usa habitualmente.

EMPLENADO SQL SERVER

Datatable. DefaultView .- Obtiene una vista personalizada de la tabla que puede incluir una vistafiltrada o una posición del cursor.

En el ejemplo también se muestra el enlace de un control DataGrid.Datasource con un DataTableAplicación .- Lectura aplicando diferentes espacios de trabajo

Page 312: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1312

Imports System.Data.SqlClient

Imports System.Data.OleDb

Imports System.Data

Public Class frmproducto

Private Sub btnsql_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handlesbtnsql.Click

' es exclusivo para sqlserver

Dim cn As New SqlConnection("uid=sa;pwd=;database=northwind;server=(local)")

' equivale tambien a ==>dim cn as sqlconnection=new sqlconnection("")

Dim objda As New SqlDataAdapter("select * from products", cn)

Dim objds As New DataSet()

objda.Fill(objds, "producto") ' es un nombre que se le asigna en memoria

'dgdproducto.DataSource = objds.Tables("producto").DefaultView

'puede ser con el indice o nombre del dataset en memoria

dgdproducto.DataSource = objds.Tables(0).DefaultView

End Sub

Datagrid con elnombre

Dgdproducto

Page 313: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1313

Private Sub btnole_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles btnole.Click

' se puede conectar para oracle, access,sysbase ,etc.

Dim cn As New OleDbConnection("provider=sqloledb;uid=sa;pwd=;database=northwind;server=.")

Dim objda As New OleDbDataAdapter("select * from categories", cn)

Dim objds As New DataSet()

objda.Fill(objds, "categories")

dgdproducto.DataSource = objds.Tables(0).DefaultView

End Sub

End Class

ADO.NET - ACCESS

MANTENIMIENTO DE UNA TABLA DE DATOS

Page 314: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1314

Imports System.Data

Imports System.Data.OleDb

Public Class Form1

Const CadSQL As String = "SELECT * FROM PRODUCTOS"

Dim Cn As New OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0;DataSource=C:\VENTAS.MDB")

Dim OBJDA As OleDbDataAdapter

Dim OBJDS As New DataSet

Public Sub LISTAR() 'Listar todos los registros de la tabla productos

Dim OBJDS As New DataSet

OBJDA.Fill(OBJDS, "PRODUCTOS")

DataGridView1.DataSource = OBJDS.Tables("PRODUCTOS").DefaultView

End Sub

Public Sub Limpiar()

Mantenimiento a unaTabla de Base deDatos, utilizando elmétodo de accesoADO.NET

Procesos de

-ADICION

-CONSULTA

-ACTUALIZACION

Page 315: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1315

'LIMPIAR CONTROLES

TXTCODIGO.Clear()

TXTDES.Clear()

TXTPRE.Clear()

TXTSTK.Clear()

MskFecha.Text = ""

MskFecha.Mask = "99/99/9999"

RBTNACIONAL.Checked = False

RBTIMPORTADO.Checked = False

End Sub

Public Sub Deshabilitar() 'deshabilitar todos los controles

TXTCODIGO.Enabled = False

TXTDES.Enabled = False

TXTSTK.Enabled = False

TXTPRE.Enabled = False

MskFecha.Enabled = False

btnGUARDAR.Enabled = False

GroupBox1.Enabled = False

End Sub

Public Sub Habilitar() 'habilitar todos los controles

TXTDES.Enabled = True

TXTSTK.Enabled = True

TXTPRE.Enabled = True

MskFecha.Enabled = True

btnGUARDAR.Enabled = True

Page 316: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1316

GroupBox1.Enabled = True

End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles MyBase.Load

Try

OBJDA = New OleDbDataAdapter(CadSQL, Cn)

MessageBox.Show("OK!!!CONEXION CORRECTA", "CONEXION")

Call LISTAR()

Call Limpiar()

Call Deshabilitar()

Catch ex As Exception

MessageBox.Show("ERROR!!! CONEXION INCORRECTA" & ex.Message)

End Try

End Sub

Private Sub btnNUEVO_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles btnNUEVO.Click

Dim Nr As Integer 'Número de Registros

Dim XCOD As String

Call Limpiar()

Call Habilitar()

OBJDA.Fill(OBJDS, "PRODUCTOS")

Nr = OBJDS.Tables(0).DefaultView.Count ‘Cantidad de Registros

If Nr > 0 Then 'SI HAY REGISTROS

XCOD = OBJDS.Tables(0).Rows(Nr - 1).Item(0)

TXTCODIGO.Text = "P" & Format(Val(Mid(XCOD, 2, 3)) + 1, "000")

Else

Page 317: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1317

TXTCODIGO.Text = "P001"

End If

btnNUEVO.Enabled = False

btnGUARDAR.Enabled = True

TXTDES.Focus()

End Sub

Private Sub btnGUARDAR_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles btnGUARDAR.Click

Dim Rpta As Byte

Rpta = MessageBox.Show("Seguro de Guardar", "Grabar", _

MessageBoxButtons.YesNo, MessageBoxIcon.Information)

If Rpta = 6 Then

'Grabar el Registro

Dim Cad1 As String

Cad1 = "INSERT INTO PRODUCTOS(Codpro,DesPro,Fecha,PrePro,StkPro,Procede)VALUES(@Cod,@Des,@Fe,@Pre,@Stk,@Pro)"

Dim Cmd As New OleDbCommand(Cad1)

Cmd.Connection = Cn

Cmd.Parameters.Add("@Cod", OleDbType.Char).Value = TXTCODIGO.Text

Cmd.Parameters.Add("@Des", OleDbType.VarChar).Value = Trim(TXTDES.Text)

Cmd.Parameters.Add("@Fe", OleDbType.Date).Value = CDate(MskFecha.Text)

Cmd.Parameters.Add("@Pre", OleDbType.Double).Value = Val(TXTPRE.Text)

Cmd.Parameters.Add("@Stk", OleDbType.Integer).Value = Val(TXTSTK.Text)

If RBTNACIONAL.Checked = True Then

Cmd.Parameters.Add("@Pro", OleDbType.Char).Value = "N"

Else

Cmd.Parameter

Page 318: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1318

s.Add("@Pro", OleDbType.Char).Value = "I"

End If

Cn.Open()

Cmd.ExecuteNonQuery()

MessageBox.Show("Registro Ha Sido Grabado", "GRABACION OK")

Call LISTAR()

Cn.Close()

btnGUARDAR.Enabled = False

btnNUEVO.Enabled = True

btnNUEVO.Focus()

End If

End Sub

Private Sub BTNBUSCAR_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles BTNBUSCAR.Click

Dim CadBuscar, CODIGO As String

Dim Dt1 As New DataTable

CODIGO = InputBox("INGRESE CODIGO A BUSCAR", "BUSQUEDA")

CadBuscar = "Select * From Productos where CodPro='" & Trim(CODIGO) & "'"

Dim objda As New OleDbDataAdapter(CadBuscar, Cn)

objda.Fill(Dt1)

If Dt1.Rows.Count > 0 Then

TXTC.Text = Dt1.Rows(0)(0).ToString

TXTD.Text = Dt1.Rows(0)(1).ToString

TXTF.Text = Dt1.Rows(0)(2).ToString

TXTP.Text = Dt1.Rows(0)(3).ToString

TXTS.Text = Dt1.Rows(0)(4).ToString

Page 319: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1319

TXTR.Text = Dt1.Rows(0)(5).ToString

Else

MessageBox.Show("Error!!!Producto no existe", "Error Búsqueda", _

MessageBoxButtons.OK, MessageBoxIcon.Error)

TXTD.Clear() : TXTP.Clear()

TXTC.Clear() : TXTS.Clear()

TXTR.Clear() : TXTF.Clear()

End If

End Sub

Private Sub btnACTUALIZAR_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles btnACTUALIZAR.Click

Dim Rpta As Integer

Rpta = MessageBox.Show("Seguro de Modificar", "MODIFICAR", _

MessageBoxButtons.YesNo, MessageBoxIcon.Information)

If Rpta = 6 Then

Dim SQL, SQLCAMBIA As String

SQL = "UPDATE PRODUCTOS SET DesPro='" & TXTD.Text & "',Fecha='" &CDate(TXTF.Text) & "',PrePro='" & Val(TXTP.Text) & "',StkPro='" & Val(TXTS.Text) & "',Procede='"& TXTR.Text & "'"

SQLCAMBIA = SQL & "WHERE CodPro='" & (TXTC.Text) & "'"

Dim Cmd As New OleDbCommand

Cn.Open()

Cmd.Connection = Cn

Cmd.CommandType = CommandType.Text

Cmd.CommandText = SQLCAMBIA

Cmd.ExecuteNonQuery()

Cmd.Dispose()

Page 320: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1320

Cn.Close()

MessageBox.Show("Datos Actualizados Correctamente")

Call LISTAR()

End If

End Sub

Private Sub BTNELIMINAR_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles BTNELIMINAR.Click

Dim Rpta As Integer

Rpta = MessageBox.Show("Seguro de Eliminar", "MODIFICAR", _

MessageBoxButtons.YesNo, MessageBoxIcon.Error)

If Rpta = 6 Then

Dim SQL As String

SQL = "DELETE FROM PRODUCTOS WHERE CodPro='" & (TXTC.Text) & "'"

Dim Cmd As New OleDbCommand

If Cn.State = ConnectionState.Open Then Cn.Close()

Cn.Open()

Cmd.Connection = Cn

Cmd.CommandType = CommandType.Text

Cmd.CommandText = SQL

Cmd.ExecuteNonQuery()

Cmd.Dispose()

Cn.Close()

MessageBox.Show("Registro Eliminado Correctamente")

Call LISTAR()

TXTD.Clear() : TXTC.Clear()

TXTR.Clear() : TXTS.Clear()

Page 321: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1321

TXTP.Clear() : TXTF.Clear()

End If

End Sub

Private Sub btnSALIR_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles btnSALIR.Click

Me.Close()

Cn.Close()

End Sub

End Class

Page 322: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1322

Semana 17 : (Uso de DataTable y DataView)Aplicación de un sistema de notas.-La base de Dato a emplear UNIVERSIDAD:

A nivel modulo:

VariablesGlobales

Imports System.Data.SqlClient

Module VariablesGlobales

Public Cn As SqlConnection

Public MiFila As DataRow

Dim objDSAlumnos As DataSet

End Module

Page 323: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1323

FrmLogin

Imports System.Data.SqlClient

Public Class frmLogin

Const strCn As String = "Data Source=(local);Initial Catalog=bdMatricula"

Private Sub btnAceptar_Click(ByVal sender As Object, ByVal e As System.EventArgs) HandlesbtnAceptar.Click

Try

Dim MiCn As String = strCn & ";User Id=" & txtUserName.Text & _

";Password=" & txtPassword.Text

Cn = New SqlConnection(MiCn)

Cn.Open()

Me.Hide()

Dim MiForm As New frmPrincipal()

MiForm.Show()

Catch ex1 As SqlException

Select Case ex1.Number

Case 17

MsgBox("Servidor no reconocido")

Case 156, 170

MsgBox("Sente

Los objetos de tipo texto

TxtUsrname

Page 324: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1324

ncia Incorrecta")

Case 4060

MsgBox("Base de Datos incorrecta")

Case 18456

MsgBox("Usuario o Password incorrecto")

Case Else

MsgBox(ex1.Message)

End Select

txtUserName.Text = "" : txtPassword.Text = "" : txtUserName.Focus()

End Try

End Sub

Private Sub btnCancelar_Click(ByVal sender As Object, ByVal e As System.EventArgs) HandlesbtnCancelar.Click

Cn.Close()

Cn = Nothing

End

End Sub

Private Sub frmLogin_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles MyBase.Load

End Sub

End Class

El Formulario Menu FrmPrincipal

Insertar el control menu

Menu1

Page 325: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1325

Public Class frmPrincipal

Private Sub MenuItem2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles MenuItem2.Click Para mantenieminto de la

Dim ManteAlumnos As New frmManteAlumnos() tabla alumnos

ManteAlumnos.MdiParent = Me

ManteAlumnos.Show()

End Sub

Private Sub MenuItem8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles MenuItem8.Click

Cn.Close() Para salir

Cn = Nothing

End

End Sub

Private Sub frmPrincipal_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles MyBase.Load

End Sub

Private Sub MenuItem3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles MenuItem3.Click

End Sub

Private Sub MenuItem12_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles MenuItem12.Click

Dim Mantetrans As New frmTRanscript()

Mantetrans.MdiParent = Me

Page 326: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1326

Mantetrans.Show()

End Sub

Private Sub MenuItem10_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles MenuItem10.Click

Dim frmNota As New frmconsultaNotas() Para consultas de Notas

frmNota.MdiParent = Me

frmNota.Show()

End Sub

Private Sub MenuItem4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles MenuItem4.Click

Dim frmcur As New FRMCURSO() Mantenimiento de la tabla Curso

frmcur.MdiParent = Me

frmcur.Show()

End Sub

End Class

FrmCurso

Page 327: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1327

Imports System.Data.SqlClient

Public Class FRMcURSO

Const strSQL As String = "Select * From curso"

Dim objDA As SqlDataAdapter

Dim objDS As New DataSet()

Dim objDV As New DataView()

Dim objCM As SqlCommandBuilder

Dim fila As DataRow

Dim nr, indice As Integer

Private Sub btnNuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles btnNuevo.Click

Dim x As Control

Dim codc As String

Dim canreg As Integer

For Each x In Me.Controls

If TypeOf x Is TextBox Then x.Text = ""

Page 328: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1328

Next

canreg = objDS.Tables(0).DefaultView.Count

If canreg > 0 Then

codc = objDS.Tables(0).Rows(nr - 1).Item(0)

codc = "C" + Format(Val(codc.Substring(1, 3)) + 1, "000")

Else

codc = "C001"

End If

txtcod.Text = codc

txtnom.Focus()

End Sub

Sub muestra(ByVal nro As Integer)

fila = objDS.Tables("curso").Rows(nro)

txtcod.Text = fila.Item(0)

txtnom.Text = fila.Item(1)

txthr.Text = fila.Item(2)

End Sub

Sub asigna()

fila.Item(0) = txtcod.Text

fila.Item(1) = txtnom.Text

fila.Item(2) = txthr.Text

End Sub

Private Sub FRMcURSO_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles MyBase.Load

Try

objDA = New SqlDataAdapter(strSQL, Cn)

Page 329: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1329

objCM = New SqlCommandBuilder(objDA)

objDA.Fill(objDS, "Curso")

objDV = objDS.Tables("Curso").DefaultView

objDV.AllowNew = True

objDV.AllowEdit = True

objDV.AllowDelete = True

DgCurso.DataSource = objDV

nr = objDS.Tables(0).DefaultView.Count

indice = 0

If nr > 0 Then

selecciona(btnPri)

End If

Catch ex1 As SqlException

MsgBox(ex1.Message)

End Try

End Sub

Private Sub BtnAnula_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles BtnAnula.Click

If indice >= 0 Then

objDV.Delete(indice)

objDA.Update(objDS.Tables("curso"))

nr = objDS.Tables(0).DefaultView.Count

selecciona(btnPri)

End If

End Sub

Sub selecciona(ByVal btn As Button)

Page 330: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1330

Dim totr As Integer = nr - 1

If btn Is btnPri Then

indice = 0

ElseIf btn Is btnSig Then

indice += 1

If indice > totr Then indice = totr

ElseIf btn Is BtnAnt Then

indice -= 1

If indice < 0 Then indice = 0

Else

indice = totr

End If

muestra(indice)

txtreg.Text = (indice + 1).ToString & "/" & nr

End Sub

Private Sub handleClick(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles btnPri.Click, btnSig.Click, BtnAnt.Click, BtnUlt.Click

selecciona(CType(sender, Button))

End Sub

Private Sub BtnGraba_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles BtnGraba.Click

Dim sql As String

Dim codc As String

fila = objDS.Tables(0).NewRow

asigna()

Page 331: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1331

objDS.Tables(0).Rows.Add(fila)

objDA.Update(objDS.Tables("curso"))

nr = objDS.Tables(0).DefaultView.Count

selecciona(BtnUlt)

End Sub

End Class

Para el formulario de Consulta de NotasEmpleando filtros , ingresando los primeros carecteres del apellido que muestre todos los alumnosque tengan esa coincidencia , y al hacer un clic en un alumno mostrar todos los cursos que hallevado el alumno con su promedio respectivo.

FrmConsultaNotas

Page 332: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1332

Imports System.Data.SqlClient

Public Class frmconsultaNotas

Const strSQL As String = "Select * From Alumno"

Dim objDA, da As SqlDataAdapter

Dim objDS, ds As New DataSet()

Dim objDV, objdv2 As New DataView()

'Dim objCM As SqlCommandBuilder

Dim xfila As DataRow

Private Sub frmconsultaNotas_Load(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles MyBase.Load

Try

objDA = New SqlDataAdapter(strSQL, Cn)

objDA.Fill(objDS, "Alumno")

objDV = objDS.Tables("Alumno").DefaultView

objDV.AllowNew = False

objDV.AllowEdit = False

objDV.AllowDelete = False

DGAlumno.DataSource = objDS.Tables(0).DefaultView

Catch ex1 As SqlException

MsgBox(ex1.Message)

End Try

End Sub

Private Sub DGAlumno_Click(ByVal sender As Object, ByVal e As System.EventArgs) HandlesDGAlumno.Click

Dim NroFila As Integer

Dim sql As String

Page 333: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1333

Dim nf, nfila As Integer

Dim sm, promedio, pro As Single

NroFila = DGAlumno.CurrentRowIndex

xfila = objDS.Tables("Alumno").Rows(NroFila)

sql = "select C.codcur,asignatura=nomcur,ep,ef,promedio=(ep+2*ef)/3 "

sql += "from notas n inner join curso c on c.codcur=n.codcur "

sql += "where codalu='" & xfila.Item(0) & "'"

da = New SqlDataAdapter(sql, Cn)

ds.Clear()

da.Fill(ds, "notas")

DgNota.DataSource = ds.Tables(0).DefaultView

nf = ds.Tables(0).DefaultView.Count

sm = 0

If nf > 0 Then

For nfila = 0 To nf - 1

sm += ds.Tables(0).Rows(nfila).Item(4)

Next

promedio = Math.Round(sm / nf, 0)

Else

promedio = 0

End If

LBLProm.Text = Format(promedio, "00")

End Sub

Private Sub DGAlumno_KeyUp(ByVal sender As Object, ByVal e AsSystem.Windows.Forms.KeyEventArgs) Handles DGAlumno.KeyUp

If e.KeyCode = Keys.Down Or e.KeyCode = Keys.Up Then

Page 334: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1334

DGAlumno_Click(sender, e)

End If

End Sub

Private Sub txtnom_TextChanged(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles txtnom.TextChanged

Dim sql As String

'primera forma

'sql = "select * from alumno where apenom like '" + Trim(txtnom.Text) + "%'"

'objDA = New SqlDataAdapter(sql, Cn)

'objDS.Clear()

'objDA.Fill(objDS, "Alumno")

'objDV = objDS.Tables("Alumno").DefaultView

'DGAlumno.DataSource = objDS.Tables(0).DefaultView

'Segunda Forma utilizando filtros

If Len(txtnom.Text) > 0 Then

objDV.RowFilter = "apenom like '" & Trim(txtnom.Text) & "%'"

objDV.RowStateFilter = DataViewRowState.CurrentRows

Else

objDV.RowFilter = Nothing

objDV.RowStateFilter = DataViewRowState.OriginalRows

End If

End Sub

End Class

OTRAS APLICACIONES

Page 335: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1335

APLICACIÓN 3:

Realizar un aplicación el nos permita consultar las facturas por medio de un rango de fechas.

Form3.vb

CODIGO FUENTE:

Imports System.Data.OleDb

Public Class Form3

Page 336: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1336

Dim OleDbCn As New OleDbConnection("Provider=Microsoft.jet.OleDb.4.0;DataSource=i:\ventas.mdb")

Dim ds As New DataSet

Dim dv As DataView

Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles MyBase.Load

Dim da As New OleDbDataAdapter("Select Num_Fact,Sub_Total,Igv,Total,Fecha FromFacturas", OleDbCn)

da.Fill(ds, "Facturas")

DataGrid1.DataSource = ds.Tables("Facturas")

lblTotal.Text = ds.Tables("Facturas").Rows.Count

txtfecinicial.Text = ""

txtfecFinal.Text = ""

End Sub

Private Sub Form3_Activated(ByVal sender As Object, ByVal e As System.EventArgs) HandlesMyBase.Activated

txtfecinicial.Focus()

End Sub

Private Sub CmdConsultar_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles CmdConsultar.Click

'Validando el ingreso de fechas IsDate(Expresión)

If txtfecinicial.Text = "" Or Not IsDate(txtfecinicial.Text) Then

MessageBox.Show("Validando el Ingreso de Fecha Inicial", "Validacion Fechas")

Exit Sub

End If

If txtfecFinal.Text = "" Or Not IsDate(txtfecFinal.Text) Then

MessageBox.Show("Validando el Ingreso de la Fecha Final", "Validacion de Fechas")

Exit Sub

Page 337: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1337

End If

'Inicar el proceso de consulta filtrando los datos por medio del objeto DataView

dv = New DataView(ds.Tables("Facturas"))

Dim str As String = "Fecha >='" & txtfecinicial.Text & "' and Fecha <='" & txtfecFinal.Text & "'"

dv.RowFilter = str

DataGrid1.DataSource = dv

End Sub

Private Sub Cmdnuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles CmdMostrar.Click

txtfecinicial.Text = "" : txtfecFinal.Clear()

dv.RowFilter = Nothing

DataGrid1.DataSource = dv

End Sub

Private Sub CmdSalir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles CmdSalir.Click

If MessageBox.Show("Desea Salir", "Consultas entre Fechas", 4, 32) = 6 Then

Application.Exit()

End If

End Sub

End Class

Resultado:

Page 338: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1338

APLICACION 4:

Mantenimiento de Registros de Alumnos.

Creara una Tabla llamada alumnos en una base de datos en Access llamada ventas.mdb.

Tendrá la siguiente estructura.

Registros:

Diseño del Formulario:

Page 339: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1339

CODIGO FUENTE:

Imports System.Data.OleDb

Imports vb = Microsoft.VisualBasic

Public Class Form4

Inherits System.Windows.Forms.Form

Dim OleDb As New OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0;DataSource=i:\ventas.mdb")

Dim da As OleDbDataAdapter

Dim ds As New DataSet

Dim Iposicion As Integer

Private Sub Form4_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles MyBase.Load

Dim cmd As New OleDbCommand

cmd.Connection = OleDb

cmd.CommandType = CommandType.TableDirect

Page 340: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1340

cmd.CommandText = "Alumnos"

da = New OleDbDataAdapter(cmd)

Dim CmdBuilder As New OleDbCommandBuilder(da)

da.Fill(ds, "Alumnos")

Iposicion = 0

Call limpiar()

txtcodigo.Enabled = False

End Sub

Sub limpiar()

Dim obj As Object

For Each obj In Me.Controls

If TypeOf obj Is TextBox Then obj.text = ""

Next

End Sub

Sub cargardatos()

Dim dr As DataRow

dr = ds.Tables("Alumnos").Rows(Iposicion)

txtcodigo.Text = dr("Alu_cod")

txtnombre.Text = dr("Alu_nom")

txtdireccion.Text = dr("Alu_direccion")

txtfecha.Text = dr("Alu_fecha")

If dr("Alu_sexo") = True Then

OptM.Checked = True

OptF.Checked = False

Else

Page 341: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1341

OptM.Checked = False

OptF.Checked = True

End If

End Sub

Private Sub CmdNuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles CmdNuevo.Click

Call limpiar()

Iposicion = ds.Tables("Alumnos").Rows.Count - 1

Dim dr As DataRow = ds.Tables("Alumnos").Rows(Iposicion)

Dim maxcodigo As String = dr("Alu_cod") Generando el Codigo apartir del ultmo codigo delCliente.

Dim CodigoAlumno As String = IIf(IsDBNull(maxcodigo), "A0000", maxcodigo)

txtcodigo.Text = "A" + vb.Right("0000" + LTrim(vb.Right(CodigoAlumno, 4) + 1), 4)

txtnombre.Focus()

End Sub

Private Sub CmdPrimero_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles CmdPrimero.Click

Iposicion = 0

Me.cargardatos()

End Sub

Private Sub CmdAnterior_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles CmdAnterior.Click

If Iposicion = 0 Then

MessageBox.Show("Primer registro", "Navegador de Registros")

Else

Iposicion -= 1

Me.cargardatos()

End If

Page 342: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1342

End Sub

Private Sub CmdUltimo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles CmdUltimo.Click

Iposicion = ds.Tables("Alumnos").Rows.Count - 1

Me.cargardatos()

End Sub

Private Sub CmdSiguiente_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles CmdSiguiente.Click

If Iposicion = ds.Tables("Alumnos").Rows.Count - 1 Then

MessageBox.Show("Ultimo registro", "Navegador de Registros")

Else

Iposicion += 1

Me.cargardatos()

End If

End Sub

Private Sub CmdAgregar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles CmdAgregar.Click

Dim dr As DataRow

dr = ds.Tables("Alumnos").NewRow()

dr("Alu_cod") = txtcodigo.Text

dr("Alu_nom") = txtnombre.Text

dr("Alu_direccion") = txtdireccion.Text

dr("Alu_fecha") = txtfecha.Text

If OptM.Checked Then

dr("Alu_sexo") = True

Else

Page 343: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1343

dr("Alu_sexo") = False

End If

ds.Tables("Alumnos").Rows.Add(dr)

da.Update(ds, "Alumnos")

End Sub

Private Sub CmdActualizar_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles CmdActualizar.Click

Dim dr As DataRow

dr = ds.Tables("Alumnos").Rows(Iposicion)

dr("Alu_nom") = txtnombre.Text

dr("Alu_direccion") = txtdireccion.Text

dr("Alu_fecha") = txtfecha.Text

If OptM.Checked Then

dr("Alu_sexo") = True

Else

dr("Alu_sexo") = False

End If

da.Update(ds, "Alumnos")

End Sub

Private Sub CmdEliminar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles CmdEliminar.Click

Dim dr As DataRow

dr = ds.Tables("Alumnos").Rows(Iposicion)

dr.Delete()

Dim TblDelete As DataTable

TblDelete = ds.Tables("Alumnos").GetChanges(DataRowState.Deleted)

Page 344: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1344

da.Update(TblDelete)

ds.Tables("Alumnos").AcceptChanges()

CmdPrimero.PerformClick()

End Sub

Private Sub CmdBuscar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles CmdBuscar.Click

Dim cadena As String

cadena = InputBox("Ingrese el Codigo del alumno a buscar", "Busqueda de Alumnos", "")

If cadena = "" Then

MessageBox.Show("No ingreso el Codigo del Alumno", "Busqueda de Alumnos")

Exit Sub

End If

Dim dv As New DataView(ds.Tables("Alumnos"))

dv.RowFilter = "Alu_cod='" & cadena & "'"

txtcodigo.Text = dv(0)("Alu_cod")

txtnombre.Text = dv(0)("Alu_nom")

txtdireccion.Text = dv(0)("Alu_direccion")

txtfecha.Text = dv(0)("Alu_fecha")

If dv(0)("Alu_sexo") = True Then

OptM.Checked = True

OptF.Checked = False

Else

OptM.Checked = False

OptF.Checked = True

End If

End Sub

Page 345: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1345

Private Sub CmdSalir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles CmdSalir.Click

If MessageBox.Show("Desea Salir", "Mantenimiento de Alumnos", 4, 32) = 6 Then

Application.Exit()

End If

End Sub

End Class

Resultado:

APLICACIONES CON LISTBOX Y COMBOBOX

APLICACION 5:

Para desarrollar esta aplicacion necesitara conocer las siguientes tablas Facturas – Detalle– Producto

Para realizar esta aplicación usaremos los controles comboBox1 y listBox1 enlazados adatos, debido a que estos controles poseen las mismas propiedades para trabajar condatos describiremos las siguientes propiedades:

DataSource => Obtiene o establece el origen de datos de este objeto. Existen 2 formas pararellenar los controles ComboBox1 y ListBox1.

DisplayMember => Obtiene o establece una cadena que especifica la propiedad del origen dedatos cuyo

Page 346: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1346

contenido se desea mostrar.

ValueMember => Obtiene o establece una cadena que especifica la propiedad del origen de datosa partir de la cual se va dibujar el valor.

SelectedValue => Obtiene o establece el valor de la propiedad miembro especificado por lapropiedad ValueMember.

FACTURAS:

DETALLE

PRODUCTO

Page 347: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1347

Form4.vb [Diseño del Formulario]

Propiedades de los controles del Formulario:

DataGrid1

Name = DataGrid1

CaptionText = DETALLE DE FACTURAS

Combobox1

Name = ComboBox1

Text = ComboBox1

ListBox1

Button1

Name = CmdFinalizar

Text = &Finalizar

Label1

Name= lblTotal

Text = lblTotal

Label2

Name = lblTotalDetalle

Page 348: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1348

Name = ListBox1

CODIGO FUENTE:

Imports System.Data.OleDb

Public Class Form6

Dim OleDbCn As New OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0;DataSource=i:\ventas.mdb")

Private Sub Form6_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles MyBase.Load

Dim da As New OleDbDataAdapter("Select Cod_Cli,Nom_Cli From Clientes", OleDbCn)

Dim ds As New DataSet

da.Fill(ds, "Clientes") Almacenamos la tabla Clientes al DataSet.

ComboBox1.DataSource = ds.Tables("Clientes")

ComboBox1.DisplayMember = "Nom_Cli"

ComboBox1.ValueMember = "Cod_Cli"

End Sub

Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles ComboBox1.SelectedIndexChanged

Try

Dim CodCliente As String = ComboBox1.SelectedValue

Dim strSQL As String

strSQl = "Select Num_Fact From Facturas Where Cod_Cli='" & CodCliente & "'"

Dim da As New OleDbDataAdapter(strSQl, OleDbCn)

Dim ds As New DataSet

da.Fill(ds, "Facturas")

ListBox1.DataSource = ds.Tables("Facturas")

ListBox1.Displa

Page 349: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1349

yMember = "Num_Fact"

ListBox1.ValueMember = "Num_Fact"

lbltotal.Text = ListBox1.Items.Count Cuenta el total de elementos

Catch ex As Exception

End Try

End Sub

Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles ListBox1.SelectedIndexChanged

Try

Dim CodFacturas As String = ListBox1.SelectedValue Obtiene el dato del campoenlazado.

Dim strSQL As String Realizando una consulta de 2 tablas.

strSQL = "Select Descrip,Producto.Precio,Cant,(Producto.Precio * Cant) as Total FromProducto,Detalle " & _

" Where Producto.Cod_Prod=Detalle.Cod_Prod and Num_Fact='" & CodFacturas &"'"

Dim da As New OleDbDataAdapter(strSQL, OleDbCn)

Dim ds As New DataSet

da.Fill(ds, "Detalle")

DataGrid1.DataSource = ds.Tables("Detalle")

Calcula la expresion dada de la filas actuales que cumplen los criterios de filtro.

Ejemplo Compute( Sum(Total) Total > 20 ) => solo muestra la suma del campo Total quecumplen con el criterio.

lblTotalDetalle.Text = ds.Tables("Detalle").Compute("Sum(Total)", "")

FormatoGrid()

Catch ex As Exception

End Try

End Sub

Page 350: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1350

Sub FormatoGrid()

DataGrid1.TableStyles.Clear()

Dim dts As New DataGridTableStyle

dts.MappingName = "Detalle"

dts.ReadOnly = True

dts.BackColor = Color.Yellow

dts.ForeColor = Color.Blue

dts.AllowSorting = True

Dim c1 As New DataGridTextBoxColumn

c1.MappingName = "Descrip"

c1.HeaderText = "Producto"

c1.Width = 120

dts.GridColumnStyles.Add(c1)

Dim c2 As New DataGridTextBoxColumn

c2.MappingName = "Precio"

c2.HeaderText = "Precio"

c2.Format = "c"

c2.Width = 50

dts.GridColumnStyles.Add(c2)

Dim c3 As New DataGridTextBoxColumn

c3.MappingName = "Cant"

c3.HeaderText = "Cantidad"

c3.Width = 50

dts.GridColumnStyles.Add(c3)

Dim c4 As New DataGridTextBoxColumn

Page 351: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1351

c4.MappingName = "Total"

c4.HeaderText = "Total"

c4.Format = "c"

c4.Width = 70

dts.GridColumnStyles.Add(c4)

DataGrid1.TableStyles.Add(dts)

End Sub

Private Sub CmdFinalizar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles CmdFinalizar.Click

If MessageBox.Show("Desea Salir", "Consultas Datos", 4, 32) = 6 Then

Application.Exit()

End If

End Sub

End Class

Resultado:

Page 352: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1352

Ejercicios con BDD

Desarrollar los siguientes formularios:

1.- Consulta de Notas

Page 353: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1353

2.- Consulta de alumnos por curso

3.- Consulta En Cascada Alumnos con sus cursos llevados

Page 354: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1354

5.- Consulta en Cascada

a) Al seleccionar el nombre del curso , no necesita escribir todo el nombre completo ,mostrara en el grid el codigo , nombre del alumo y su promedio respectivo que llevarondicho curso

b) Muestra a todos los alumnos que comienzan con dicho caracteresc) Al seleccionar la especialidad Se activara el combo para elegir una especialidad y mostrara

en el grid todos los alumnos que estan en dicha especialidad.

Page 355: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1355

La Base de datos se Llama BD Matricula

Propuesto nro 2.-

Tabla: CLIENTES Tabla: CUENTAS Tabla: MOVIMIENTOS

BDBANCO

Page 356: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1356

I.- FORMULARIO Nº 1:

ESPECIFICACIONES

• En el ListBox1 Clientes se mostrarán todos clientes de la tabla CLIENTES.• Al elegir un Cliente del ListBox1 se deberá mostrar en el listbox2 de cuentas, sólo las cuentas

asignadas al cliente, seleccionado de la tabla CUENTAS.• Seleccionando el número de cuenta del ListBox2 Cuentas listará en el DataGridView el

movimiento de saldos de esa cuenta de la tabla MOVIMIENTOS ; a la vez• Seleccionando el número de cuenta del Listbox2 Cuentas, mostrará en la etiqueta lbltipo el

tipo de cuenta, en el label saldo anterior nos mostrará el último saldo de la tabla CUENTAS,debemos ingresar el número de movimiento, seleccionar un tipo de movimiento (Depósito oRetiro) e ingresar un valor numérico que representa el importe de la operación, el cualcalculará el nuevo saldo automáticamente.Nota: Si es Depósito aumenta el saldo, si es Retiro disminuye el Saldo.

• El botón Grabar registra los datos en la tabla MOVIMIENTOSNota: El número de Cuenta a Grabar obtenerlo del Listbox2 de la propiedad SelectedValue.

• El botón Reporte muestra en el formulario frmReporte un informe en Crystal Reports de todoslos registros de la tabla MOVIMIENTOS.

• El botón Salir finaliza el proyecto.

Page 357: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1357

Semana 18 : (Creacion de Reportes)Crystal Reports se conecta a bases de datos mediante controladores de bases de datos. Cadacontrolador se escribe para controlar un tipo de base de datos específico o la tecnología deacceso a bases de datos.

Modelos de extracción e inserción

Con el fin de ofrecer el acceso a datos más flexible para los programadores, los controladores debase de datos de Crystal Reports se han diseñado para proporcionar un modelo de extracción einserción de acceso a datos.Modelo de extracción

En un modelo de extracción, el controlador se conectará a la base de datos y extraerá datoscuando se necesiten. Con este modelo, Crystal Reports controla tanto la conexión a la base dedatos como el comando SQL que se ejecuta para obtener los datos y no necesita ningunacodificación del programador. Si no se escribe ningún código especial en tiempo de ejecución, seutiliza el modelo de extracción.Modelo de inserción

En comparación, el modelo de inserción necesita que el programador escriba código paraconectarse a la base de datos, ejecutando un comando SQL para crear un conjunto de registros ode datos que se ajusten a los campos del informe y enviando ese objeto al informe. Este métodole permite crear recursos compartidos de conexión en la aplicación y filtrar los datos antes de queCrystal Reports los reciba.

Los controladores de bases de datos se utilizan durante el tiempo de creación y de procesamiento.

Durante el tiempo de creación, el controlador de la base de datos se utiliza para identificar elesquema de los datos. Con los controladores OLEDB, ODBC y Access/Excel, este proceso implicala conexión a una base de datos y la selección de las tablas, vistas o procedimientos almacenadospara especificar el esquema. Con los controladores ADO.NET y de definición de campos, esteproceso implica la selección de un esquema con la forma de un archivo XML (*.xml) o de un

Page 358: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1358

archivo de definición de datos (*.ttx).

Durante el tiempo de procesamiento, el informe utilizará el mismo controlador de base de datosutilizado para crear el informe. No obstante, si los datos se insertan en el informe, el informeseleccionará el controlador adecuado para controlar el conjunto de registros o el conjunto dedatos.

Controladores de bases de datos con Crystal Reports para Visual Studio .NET

Controlador de basede datos

Base de datos a las que se tieneacceso

Método de acceso a datos

OLEDB Cualquier base de datos quetenga un proveedor OLEDB.

Admite tanto la extracción de datosde la base de datos como lainserción de datos en el informe deun conjunto de registros ADO.

ODBC Cualquier base de datos quetenga un proveedor ODBC.

Admite tanto la extracción de datosde la base de datos como lainserción de datos en el informe deun conjunto de registros RDO.

Access/Excel Bases de datos de MicrosoftAccess y libros de MicrosoftExcel.

Admite tanto la extracción de datosde la base de datos como lainserción de datos en el informe deun conjunto de registros DAO.

ADO.NET Cualquier base de datos con unproveedor gestionado.

Admite la inserción de datos en elinforme desde un conjunto dedatos ADO.NET.

Este controlador no extraerá datospor sí mismo.

Definición de campo Ninguna.

Este controlador especial seutiliza para crear informesbasados únicamente en unesquema sin datos reales.

El controlador se incluyeprincipalmente para lacompatibilidad con versionesanteriores y sólo se utiliza duranteel proceso de creación deinformes.

En tiempo de ejecución, debeenviarse un conjunto de registros oun conjunto de datos a un informecreado con el controlador.

Page 359: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1359

Objeto de datosCrystal (CDO)

Ninguna.

Este controlador especial obtieneacceso a datos que no residen enuna base de datos tradicional.

Este controlador se incluyeprincipalmente para lacompatibilidad con versionesanteriores.

Este controlador sólo admite lainserción de datos en un informedesde un conjunto de registrosCDO; no extraerá datos por símismo. Utilice la biblioteca deobjetos de datos Crystal para llenarun conjunto de registros CDO.

Nota Estecontrolador no estádisponible durante elperíodo de creacióndel informe.Seleccione uno de loscontroladoresdisponibles paracrearlo.

REPORTES EN .NET CON CRYSTAL REPORTS

Visual Studio .NET incluye Crystal Reports como un mecanismo "oficial" de creación de reportes.Crystal Reports es un producto muy desarrollado y complejo para la creación de reportes, y cuentacon una infinidad de opciones. En este artículo, nos vamos a concentrar en crear reportesrelativamente sencillos, pero mostrando los detalles específicos de la versión .NET, tanto enaplicaciones WinForms como en aplicaciones WebForms (ASP.NET). Este artículo considera queusted ya posee alguna familiaridad con Visual Studio .NET y también con ADO.NET.

Crear un reporte

Independientemente de cómo se hará la presentación, el reporte se define en un archivo ".RPT",que forma parte de su proyecto. Ese archivo especifica el modo en que se hará la presentación delreporte, pero no incluye los datos propiamente dichos. Los datos se definirán en el tiempo deejecución.

Crystal Reports se basa en un concepto muy común de la definición de reportes: los reportes secomponen de "secciones", y cada sección es un espacio horizontal en la página. Existen diversostipos de secciones, por ejemplo:

• Encabezado del

Page 360: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1360

reporte, aparece en la primera página.• Encabezado de página, aparece en la parte superior de todas las páginas.• Detalle: lo más importante. En el tiempo de ejecución, se genera una de estas secciones

para cada línea (registro) en la base de datos.• Pie de página, aparece en la parte inferior de todas las páginas.• Pie de reporte, aparece al final del reporte.

En un principio, todos los reportes presentan estas cinco secciones. Otras secciones sonopcionales, como por ejemplo:

• Encabezado de grupo, aparece antes de un grupo.• Pie de grupo, aparece al final del grupo.

Se podrá omitir una o más secciones, en caso de que no sean necesarias.

Acceder a la base de datos

Antes de crear el reporte, hay que decidir cuál será el mecanismo utilizado para acceder a la basede datos. Crystal Reports puede obtener datos de una infinidad de fuentes, pero una buenacantidad de ellas, como DAO, ADO y OLE/DB, no está "administrada", o sea, es código .NET"puro". En una aplicación .NET, probablemente sea deseable realizar el acceso a través deADO.NET. Para ello, lo más fácil es definir un Conjunto de datos tipificado, aun antes de crear elreporte.

Crear un proyecto

Veamos cómo crear un reporte en un programa WinForms. Inicialmente, genere un proyecto enVB de tipo "Windows Application".

Vamos a definir ahora el acceso a la base de datos. Como ejemplo, vamos a acceder a la base dedatos "Northwind", que se encuentra como ejemplo en SQL Server. Siga la siguiente ruta:

• Agregue un componente de tipo SqlDataAdapter.• Seleccione la conexión con la base Northwind.• Introduzca el comando SQL "select * from Products order by CategoryID, ProductName"• Haga clic con el botón alterno del mouse sobre el componente DataAdapter, seleccione

"Create DataSet" y acepte el nombre sugerido ("DataSet1").

Ahora, agregaremos un reporte al proyecto. Haga clic en "Proyecto | Agregar elemento nuevo" yseleccione "Crystal Report":

Page 361: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1361

Acepte el nombre "CrystalReport1.rtp", al presionar Intro. Crystal Reports mostrará un asistente.Marque "Usar el Experto en reportes" y "Estándar":

En este momento, cabe hacer algunos comentarios:

Page 362: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1362

• El asistente puede ayudarle a crear diversos tipos de reportes, pero vamos a explorarsolamente algunas posibilidades más sencillas. Puede probar después con otros tipos dereportes;

• Crystal Reports pedirá que realice el registro de su copia; mostramos el uso con una copiaya registrada.

Presione "Aceptar" para pasar a la pantalla siguiente para la elección de la fuente de los datos.Seleccione la tabla "Productos" a partir del Conjunto de datos creado y haga clic en "Insertartabla":

Haga clic en "Siguiente" y seleccione las columnas que aparecerán en el reporte:

Page 363: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1363

Haga clic en "Siguiente" y defina un grupo haciendo clic en la columna "CategoryID" al ladoizquierdo, y después en "Agregar":

Las demás opciones no nos interesan en este reporte sencillo. Haga clic en "Finalizar", para crearel reporte:

Page 364: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1364

Observe lo siguiente:

• El reporte tiene siete secciones; las cinco obligatorias y dos más relativas al grupo.• La sección "Encabezado del reporte" tiene la propiedad Suprimir con el valor verdadero,

indicando que no aparecerá en el tiempo de ejecución.• Puede editar cuantas veces quiera el reporte creado, al agregar componentes o modificar

los que hayan sido colocados.

Las secciones contienen componentes que se pueden obtener en dos lugares:

• Página "Crystal Reports" de la Caja de herramientas, si se trata de textos fijos, líneas ycajas.

• "Explorador de campos", en el caso de campos de la base de datos, fórmulas, totales,grupos y otros datos específicos del reporte, como fecha, hora y numeración de páginas.

Presentar el reporte

Una vez definido el reporte, hay que presentarlo al tiempo de ejecución. Para ello, coloque uncomponente "CrystalReportViewer" en el formato y seleccione la propiedad "Acoplar" para"Llenar". Sólo se necesita un componente "Visualizador", aun cuando se hayan creado diversosreportes en archivos RPT separados.

Para producir el reporte, agregue un componente "Menú principal" y añada un elemento de menúpara producir el reporte. Añada el siguiente código al evento Clic del botón:

private sub menuItem2_Click(byval sender as Object, byval e as System.EventArgs)

Ejecuta la consulta a la base dados

sqlDataAdapter1.Fill(dataSet11)

Crea el reporte

Dim Rel as new CrystalReport1()

Asocia el conjunto de datos con el reporte

Rel.SetDataSource(dataSet11)

Asocia el reporte con el Visualizador

crystalReportViewer1.ReportSource = Rel

End sub

Una vez presentado, puede cambiar el tamaño en el botón "aumentar", ir a otra página o hacer clicdel ladoizquierdo para

Page 365: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1365

solicitar la presentación de algún grupo en particular:

El usuario puede hacer clic en el botón con el icono de la impresora para imprimir el reporte.

Problema Propuesto.

Page 366: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1366

I. PREGUNTA

I.- FORMULARIO Nº 1:

ESPECIFICACIONES

• Desarrolle la aplicación con programación en n-capas.(capa de datos,negocios,..) conaplicación de mínimo tres procedimientos almacenados.

• En el ListBox (lstAutor) se mostrarán todos los nombres de autores de la tabla AUTOR.(3 pts)• Al elegir un Autor se deberá mostrar en el listbox de libros, sólo los libros asignados al autor

seleccionado de la tabla LIBROS. (3 ptos.)• Seleccionando el nombre del libro en el lstLibros listará en el DataGridView el movimiento de

préstamos de ese libro de la tabla PRESTAMO (3 Ptos)• Sólo si ha elegido un Autor y un libro, se podrá agregar operaciones a la tabla PRESTAMO,

para lo cual se ingresará el número de préstamo, se debe elegir el nombre del alumno(mostrará su código), deberá ingresar o seleccionar la fecha de préstamo y la fecha dedevolución, el campo estado de préstamo tendrá un valor igual a 1 que significa libro en estadopendiente. ( 2 ptos )

• El botón Grabar registra los datos en la tabla PRESTAMO ( 4 ptos)

BDBIBLIOTECA

LstAutorLstLibro

Page 367: Visual Basic Net

Ing. Alberto Moreno CuevaPágina1367

• El botón Reporte muestra en el formulario frmReporte un informe en Crystal Reports de todoslos registros de la tabla PRESTAMO.

• El botón Salir finaliza el proyecto.

Semana 19 : (Examen Final)

Semana 20 : (Examen de Recuperacion)Direcciones de Internet

http://vagos.wamba.com/

https://www.microsoft.com/downloads/details.aspx?FamilyID=518d870c-fa3e-4f6a-97f5-acaf31de6dce&DisplayLang=en#filelist

http://programaschampoloco.blogspot.com/

http://msdn.microsoft.com/es-es/library/system.windows.forms.tabcontrol(VS.80).aspx

http://es.gotdotnet.com/quickstart

http://www.solucionesNet.org

http://www.lawebdelprogramador.com

Encargados:

Ing: Alberto Moreno Cueva