aplicacion de vb.net 2003

243
Introducción al Entorno de Desarrollo .Net ¿Qué es la plataforma Microsoft .NET? ¿Qué es el .NET Framework? Conceptos básicos de .NET Explorar el entorno de desarrollo Crear un proyecto Visual Basic .NET

Upload: jean199125

Post on 01-Nov-2015

2.140 views

Category:

Documents


13 download

TRANSCRIPT

Page 1: aplicacion de vb.net 2003

Introducción al Entorno de Desarrollo .Net

¿Qué es la plataforma Microsoft .NET?

¿Qué es el .NET Framework?

Conceptos básicos de .NET

Explorar el entorno de desarrollo

Crear un proyecto Visual Basic .NET

Page 2: aplicacion de vb.net 2003

Programación Windows

IntroducciónVisual Basic .NET es la última versión del sistema de desarrollo Visual Basic. Antes de empezar a

crear aplicaciones en Visual Basic .NET, le será útil conocer y entender algunos conceptos básicos de

.NET.

Conceptos Básicos

¿Qué es la Plataforma Net?

La plataforma .NET proporciona la base de la

siguiente generación de software que permite

conectar sistemas, información, dispositivos y

usuarios distintos de un modo más unificado y

personalizado. Incorpora servicios Web XML

como el medio para permitir la interoperabilidad

entre tecnologías diferentes.

¿Que es Visual Studio Net?

Visual Studio .NET es un entorno de

desarrollo integrado que nos ayuda a

diseñar, desarrollar, depurar e implantar con

rapidez soluciones basadas en el .NET

Framework. Podemos acceder a un conjunto

común de herramientas, diseñadores y

editores desde cualquiera de los lenguajes de

programación de Visual Studio .NET.

Podemos crear aplicaciones Windows

Forms y Web Forms que integren datos y

lógica de negocio.

¿Qué es el .NET Framework?

"El .NET Framework es un entorno multi-lenguaje para la construcción, distribución y ejecución de Servicios Webs y aplicaciones."

El .NET Framework es el corazón de .NET, cualquier cosa que queramos hacer en cualquier lenguaje .NET debe pasar por el filtro cualquiera de las partes integrantes del .NET Framework.

Página 2

Page 3: aplicacion de vb.net 2003

Programación Windows

El .NET Framework tiene dos componentes principales: el Common Language Runtime y la

biblioteca de clases.

CLR o Common Language Runtime

Una de las partes fundamentales de Microsoft .NET Framework, es el CLR o Common Language

Runtime, que no es otra cosa que el entorno o motor de ejecución de lenguaje común.

El CLR es el centro neurálgico del .NET Framework encargado de gestionar la ejecución de nuestras

aplicaciones, aplicar parámetros de seguridad y ejecutar el denominado recolector de basura entre

otras cosas.

Garbage Collector o GC

En su traducción más o menos exacta, lo definiremos como Recolector de Basura, y que tiene

la función digna o indigna, de hacer la tarea más sucia de .NET, es decir, de hacer las

funciones de gestor de limpieza de .NET eliminando de la memoria, todos aquellos objetos

que no sean útiles en un momento dado, liberando al sistema de recursos no utilizables. La

ejecución del GC es una ejecución desatendida y trasparente por el programador y por el

usuario,

MSIL

MSIL o IL es conocido como Microsoft Intermediate Language o simplemente Intermediate

Language, o lo que es lo mismo, lenguaje intermedio.

Todos los lenguajes administrados de la plataforma .NET, deben cumplir un conjunto de

reglas y normas, y parte de este ajuste, es que una aplicación escrita en un lenguaje de

programación determinado, debe ser compilada en un lenguaje intermedio, de manera tal, que

una aplicación escrita por ejemplo en C# y otra igual en Visual Basic, se compilan al

prácticamente el mismo lenguaje intermedio.

JIT

El entorno de ejecución incluye una característica denominada compilación Just-In-Time

(JIT), que traduce código MSIL al lenguaje máquina del sistema en el que la aplicación se

ejecutará.

Biblioteca de Clases

La biblioteca de clases es una colección completa orientada a objetos de clases reutilizables y

organizadas en espacios de nombres jerárquicos en base a su funcionalidad. Podemos utilizar la

biblioteca de clases para desarrollar aplicaciones que abarcan desde las aplicaciones clientes

Página 3

Page 4: aplicacion de vb.net 2003

Aplicaciones Visual Basic

Aplicaciones Visual C#Aplicaciones Visual C++

Código de la plataforma .NET

.NET Framew

orkBiblioteca de clases

Window

sServicios W

eb XML

AD

O.N

ETTipos de datos

Common Language Runtime

El código fuente se compila como MSILEl código fuente se compila como MSIL

Servicios de programació

n

Servicios de programació

n

El compilador JIT producelenguaje máquina

El compilador JIT producelenguaje máquina

Programación Windows

tradicionales hasta las aplicaciones basadas en las últimas innovaciones proporcionadas por

ASP.NET y los servicios Web XML.

Formas de Ingreso al EntornoHay dos formas de ingresar la Visual .Net:

1.- Inicio/Todos Los Programas/Microsoft Visual Studio 2005/ Microsoft Visual Studio 2005

2.- Inicio/Ejecutar:

Página 4

Page 5: aplicacion de vb.net 2003

Programación Windows

Crear un nuevo Proyecto

1.-Menú Archivo/Nuevo Proyecto o las combinaciones de las Teclas Ctrl + N aparecerá la siguiente

pantalla

2.- En nombre ingrese Introducción y clic en aceptar.

Explorando el Entorno de Desarrollo

Esta lección introduce

las principales

características del

entorno de desarrollo

que utilizamos para crear

y modificar aplicaciones,

como el Diseñador

Windows Forms y los

controles del Cuadro de

herramientas.

Ventanas Clásicas

Explorador se

Soluciones (Ctrl + Alt + L)

El Explorador de soluciones nos permite visualizar archivos y realizar tareas de administración de

archivos en una solución o en un proyecto. Una única solución basada en Visual Basic .NET y sus

proyectos aparecen en una lista jerárquica que proporciona información actualizada sobre el estado

de nuestra solución, proyectos y archivos.

Página 5

Page 6: aplicacion de vb.net 2003

Programación Windows

Cuadro de Herraminetas (Ctrl + Alt + X)

Para crear los objetos del interfaz de usuario de nuestra aplicación, añadimos controles desde el

Cuadro de herramientas a un formulario. Inicialmente, el Cuadro de herramientas se encuentra

ubicado en el lado izquierdo del entorno de desarrollo. Hay varias pestañas para diferentes categorías

de controles, como Windows Forms y Datos.

Ventana de Propiedades (F4)

La ventana de propiedades (ventana Propiedades) muestra una lista de las propiedades que pueden

configurarse para el formulario o control seleccionado y que podemos modificar mientras creamos o

editamos la aplicación. Una propiedad describe una característica de un objeto, como el tamaño,

título o color.

Barra de Herramientas

Cuando iniciamos un proyecto Visual Basic .NET y seleccionamos una plantilla de aplicaciones,

aparece el entorno de desarrollo visual. El menú principal y la barra de herramientas estándar

proporcionan acceso a la mayoría de comandos que controlan el entorno de programación de Visual

Studio .NET.

Página 6

Page 7: aplicacion de vb.net 2003

Programación Windows

Editor de Código (Shift + F7)

Visual Studio .NET proporciona un Editor de código en el que escribir y mantener el código de

nuestro proyecto. Podemos asociar código directamente a un formulario de nuestro proyecto o

ubicarlo en otro módulo de código distinto. Se muestra un Editor de código distinto para cada

formulario o módulo de nuestro proyecto, facilitando la organización, visualización y desplazamiento

por el código.

Como Ejecutar

Para poder probar lo que estamos haciendo debemos ejecutar, también se dice iniciar depuración.

Para Iniciar Depuración simplemente F5 o desde la Barra de Herramientas clic el icono de iniciar

depuración

Nota: Cuando la aplicación esta en ejecución no podrá modificar nada en el proyecto, entonces si

desea hacer algo (Codificar, Cambiar de propiedades, etc.) entonces tiene que detener la ejecución

Para detener la ejecución desde la Barra de Herramientas clic en el icono de detener Depuración

Página 7

Page 8: aplicacion de vb.net 2003

Programación Windows

Como Agregar un Nuevo Formulario

1.-Desde el Explorador

de Soluciones Clic

derecho sobre el

Proyecto (Introducción)

Agregar /Nuevo

elemento; nos mostrara

la siguiente pantalla.

2.- Ingresar el nombre

“FrmIngreso” y clic

Aceptar

Como Establecer Formulario de Inicio

1.-Desde el Explorador se Soluciones Clic Derecho sobre el proyecto (en este caso introducción)/ clic

en Propiedades; Aparecerá la siguiente pantalla:

2.- En el Combo seleccione el Formulario de Inicio en este caso FrmIngreso

Como Agregar Controles a un formulario

Página 8

Page 9: aplicacion de vb.net 2003

TxtNombreLblNombre

BtnMensaje

TxtTexto

btnColorTexto

btnColorFondo

Programación Windows

Antes de todo, al formulario que deseamos agregar un control debe esta en modo Diseño (Shift + F7)

y el Cuadro de Controles tiene que estar activo (Ctrl + Alt + X). Para agregar controles hay varias

formas:

1.-Arrastre el control al formulario (Recomendado)

2.- Clic en el control/Enter

3.- Doble Clic en el control

Como Eliminar un formulario

Desde el Explorador de Soluciones Clic derecho sobre el formulario que desea eliminar (en este caso

Form1) / Clic en Eliminar

Nota: Cuando se crea un Proyecto debemos guardar y debemos saber donde guarda el proyecto para

esto haga clic en el icono de Guardar Todo ( )

Ejercicio Practico Nº1.

1. Diseñar el siguiente Formulario:

2. En el evento click del boton BtnMensaje codificamos lo siguiente:

Private Sub btnMensaje_Click MsgBox("Bienvenido a Visual Basic .Net " & Me.txtnombre.Text) End Sub

Ejercicio Practico Nº2.

1. Diseñar el siguiente Formulario:

2.- Luego codificamos lo siguiente en el evento click de los botones:

Página 9

Page 10: aplicacion de vb.net 2003

Txt1

Txt2

BtnMultiplicar

TxtRes

BtnNuevo

BtnPotencia

BtnSuma

BtnResta

BtnDividir

Programación Windows

Private Sub BtnColorTexto_Click Me.TxtTexto.ForeColor = Color.Blue End Sub Private Sub BtnColorFondo_Click Me.BackColor = Color.Red End Sub

Ejercicio Practico Nº3.

1. Diseñar el siguiente Formulario:

2.- Luego codificamos lo siguiente en el evento click de los botones:

Private Sub btnsuma_Click Me.txtres.Text = Val(Me.txt1.Text) + Val(Me.txt2.Text) End Sub

Private Sub btnresta_Click Me.txtres.Text = Val(Me.txt1.Text) - Val(Me.txt2.Text) End Sub

Private Sub btnmulti_Click Me.txtres.Text = Val(Me.txt1.Text) * Val(Me.txt2.Text) End Sub

Private Sub btndividir_Click Me.txtres.Text = Val(Me.txt1.Text) / Val(Me.txt2.Text) End Sub

Private Sub btnpotencia_Click Me.txtres.Text = Val(Me.txt1.Text) ^ Val(Me.txt2.Text) End Sub

Private Sub btnnuevo_Click Me.txt1.Clear() Me.txt2.Clear() Me.txtres.Clear() Me.txt1.Focus() End Sub

Ejercicio Práctico Nº4

1.- Diseñar el siguiente formulario

Página 10

Page 11: aplicacion de vb.net 2003

TxtUsu

TxtPas

BtnSalirBtningresar

Programación Windows

Escriba el Código a utilizar para este ejercicio.

………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………….

Resolver:

1.- Crear una aplicación en la cual me permita realizar la siguiente ecuacion:

y= 5x2+2x+2

10

2.- Crear una aplicación en la cual me permita realizar la siguiente ecuacion:

y=4x2+√x+5

2√x

3.- Crear la siguiente aplicación, en la cual me permita ingresar 2 numeros y el resultado me lo

muestre en un label de la siguiente manera como se muestra en la figura.

4.- Desarrollar una aplicación que me permita calcular el promedio de notas obtenidos por los

alumnos. Cuando el usuario ingrese la Nota 3 el botón de comando btncalcular se debe habilitar.

Página 11

Page 12: aplicacion de vb.net 2003

Programación Windows

5.- Desarrollar la siguiente aplicación

Funciones de Lenguaje

Tipos de Datos

Operadores

Variables

Sentencias Condicionales

Bucles

Tipo de DatosEl tipo de datos de un elemento de programación hace referencia a la clase de datos que puede contener y a cómo se almacenan los datos.

Página 12

Page 13: aplicacion de vb.net 2003

Programación Windows

La ilustración anterior lista algunos de los tipos más utilizados en Visual Basic .NET. El término con signo significa que los números pueden ser positivos o negativos, como en +48 o -48.

¿Como Escoger un Tipo de Dato?

Visual Basic no requiere que seleccione explícitamente un tipo de datos cuando declara una variable. Sin embargo, es una buena idea hacerlo, ya que de esta forma sus aplicaciones serán más fiables y requerirán menos memoria. El tipo de datos determina los valores permitidos para una variable, que, a su vez, determinan las operaciones que pueden realizarse sobre esa variable.

Puede seguir las directrices generales que se muestran en la ilustración anterior para seleccionar el tipo de datos adecuado para una variable.

Si usted declara variables sin tipo de datos, se les otorga de forma predeterminada el tipo de datos Object. Esto facilita la escritura rápida de programas, pero puede hacer que éstos se ejecuten más lentamente.

Página 13

Page 14: aplicacion de vb.net 2003

Programación Windows

Pero con todo y con esto, la declaración de variables en .NET puede hacerse más extensiva, ya que podemos declarar las variables también, utilizando unos símbolos o caracteres detrás de las variables, que indiquen el tipo de variable utilizada. La siguiente tabla aclarará en algo esto que comento, y el posterior ejemplo, terminará por explicarlo de forma práctica.

Tipo de datos    Símbolo    Carácter   

Short N.A. S

Integer % I

Long & L

Single ! F

Double # R

Decimal @ D

UShort N.A. US

UInteger N.A. UI

ULong N.A. UL

Variables¿Qué son las Variables?

Utilizamos variables para almacenar valores que pueden cambiar cuando una aplicación se está

ejecutando. Una variable tiene los siguientes elementos:

Ámbito: El conjunto de todo el código que puede acceder y utilizar la variable.

Nombre: La palabra que utilizamos para hacer referencia a la variable en código.

Tipo de Datos: El tipo y tamaño inicial de datos que la variable puede almacenar.

Antes de poder utilizar variables en su aplicación, debe asignarles un valor. Puede asignar un valor a

una variable después de declararla o mientras la declara.

Sintaxis para Declarar una Variable

Para declarar una variable, utilice la siguiente sintaxis:

Dim nombreVariable As Type

Utilizamos la instrucción Dim para declarar y asignar espacio de almacenamiento para variables en

bloques, procedimientos, módulos, estructuras y clases. Utilizamos la cláusula As en la instrucción

Dim para especificar el tipo de datos de la variable.

Nota: La palabra clave Dim es una abreviatura de la palabra dimensión.

Cómo Declarar Variables

Página 14

Page 15: aplicacion de vb.net 2003

Programación Windows

Hemos visto que la declaración de una variable dentro de un procedimiento, se realiza anteponiendo

la palabra reservada Dim al nombre de la variable, seguida de la palabra reservada As y el tipo de

dato declarado.

Un ejemplo sencillo sería:

Dim strMiVar As String

Pero hay un aspecto en la declaración de variables que conviene conocer, ya que este aspecto, es el

diferenciador más importante entre el Visual Basic de la plataforma .NET y el Visual Basic anterior a

.NET.

Si declaramos un conjunto de variables de un mismo tipo y las declaramos de la forma:

Dim strMiVar1, strMiVar2, strMiVar3 As String

Estaremos declarando las tres variables strMiVar1, strMiVar2 y strMiVar3 como variables de tipo

String. En versiones anteriores a .NET de Visual Basic, esta misma declarativa, hacía que las dos

primeras variables se declararan de tipo Variant y la última de tipo String.

Nota: El tipo de declaración Variant de versiones de Visual Basic anteriores a .NET, ya no existe. El

tipo Object, es el tipo más adecuado para sustituir a este tipo de declaración.

De todas las maneras, en Visual Basic 2005, podemos declarar una variable y asignarla un valor

inicial a la hora de declarar esta variable. El siguiente ejemplo, ayudará a comprender mejor esto:

Dim strMiVar As String = "Ejemplo en Visual Basic 2005"

Inclusive podemos declarar variables de forma anidada y asignarle valores directamente, como por

ejemplo:

Dim Val1 As Integer = 2, Val2 As Integer = 3, Val3 As Integer = Val1 + Val2

MessageBox.Show(Val3)

Otra significación con la asignación directa o indirecta de valores es el apartado referente al trabajo

con fechas. Si queremos, podemos incluir una fecha entre los caracteres #, teniendo en cuenta que la

fecha debe ir en formato MES/DIA/AÑO. Sirva el siguiente ejemplo como demostración de esto que

estamos comentando:

Dim dateVar As Date

dateVar = #12/17/2005#

MsgBox(dateVar)

Ámbito de una VariablePágina 15

Page 16: aplicacion de vb.net 2003

PictureBox1

BtnImagen1

BtnImagen2

BtnImagen3

BtnImagen4

Programación Windows

Cuando utilizamos variables, debemos asegurarnos de que son accesibles desde todas las áreas de código que hacen referencia a ellas. Por otra parte, es posible que necesite restringir el acceso a determinadas variables. Todo el conjunto de código que puede hacer referencia a una variable por su nombre se denomina ámbito (scope) de la variable.

Ejercicio Práctico Nº1:

1.- Diseñar el siguiente formulario

2.- Luego codificamos lo siguienteImports System.Drawing.Image

Página 16

Page 17: aplicacion de vb.net 2003

Programación Windows

Public Class Form1 Dim ruta As String = "Aqui pondremos la ruta donde se encuentran las imágenes unido con un \" Private Sub btnimagen1_Click Me.PictureBox1.Image = FromFile(ruta & "nombre de la imagen con su extension") End Sub

End Class3.- El codigo del evento click del boton BtnImagen1; es el mismo para los otros botones pero con imágenes diferentes.

Uso de Estructuras de DecisiónEn nuestro programa, podemos desear que algunas secciones de su código se ejecuten únicamente cuando se cumpla una determinada condición. Esto se consigue utilizando una estructura de decisión. Esta lección explica cómo utilizar las estructuras de decisión If…Then y Select Case. Estudiaremos cómo incorporar expresiones condicionales en estas estructuras.

Cómo Utilizar Instrucciones If…Then...ElseLas instrucciones If…Then…Else son una extensión del concepto If…Then.Utilizando un bloque If…Then…Else, podemos definir dos bloques de código y que nuestro programa ejecute uno u otro dependiendo del resultado de una condición. Si es verdadera más de una de las condiciones de una estructura condicional, únicamente se ejecutarán las instrucciones de código incluidas en la primera condición verdadera.

Una instrucción If…Then…Else incluye los siguientes componentes:

Una condición que evalúa si es True o False Una o más instrucciones que se ejecutan dependiendo del resultado de la prueba de la condición Una instrucción End If en el caso de un bloque

Para utilizar una instrucción If…Then…Else, utilizar la siguiente sintaxis:

If condition ThenstatementsElsestatementsEnd If

Ejercicio Práctico Nº2

1.- Diseñar el siguiente formulario

Página 17

Page 18: aplicacion de vb.net 2003

TxtUsuario

TxtPassword

ProgressBar1BtnIngresar

Programación Windows

2.- Luego agregamos un control

3.- Codificaremos lo siguiente en los siguientes eventos:

Private Sub btnIngresar_Click If Me.txtusuario.Text = "Carlos" And Me.txtpassword.Text = "123" Then Me.ProgressBar1.Visible = True Me.Timer1.Enabled = True ElseIf Me.txtusuario.Text = "David" And Me.txtpassword.Text = "456" Then Me.ProgressBar1.Visible = True Me.Timer1.Enabled = True ElseIf Me.txtusuario.Text = "Yahir" And Me.txtpassword.Text = "789" Then Me.ProgressBar1.Visible = True Me.Timer1.Enabled = True Else MsgBox("Acceso Denegado", MsgBoxStyle.Critical, "Sistema")

End If End Sub

Private Sub Timer1_Tick Me.ProgressBar1.Value = Me.ProgressBar1.Value + 1 If Me.ProgressBar1.Value = 100 Then Me.Timer1.Stop() MsgBox("Bienvenido al Sistema " & Me.txtusuario.Text, MsgBoxStyle.Information, "Sistema") End If

End Sub

Cómo Utilizar Instrucciones Select Case

Página 18

Page 19: aplicacion de vb.net 2003

TxtAlu

LstCursos

TxtNPTxtEP

TxtEF

TxtProm

LblCon

Programación Windows

La instrucción Select Case permite a nuestra aplicación ejecutar uno o varios bloques de código dependiendo del valor de una expresión de prueba. La instrucción Select Case funciona como una compleja estructura If…Then…Else anidada, pero su mantenimiento es más sencillo.La sintaxis para la instrucción Select Case es como sigue:

Select Case testexpression

[Case expressionlist-n]

[statements-n1] . . .

[Case Else]

[elsestatement]

End Select

Ejercicio Práctico Nº3

1.- Diseñar el siguiente formulario

2.- Codificaremos lo siguiente en los siguientes eventos:

Private Sub btncalcular_Click

If Me.txtalu.Text = "" Then MsgBox("Ingrese un Nombre de Alumno", MsgBoxStyle.Information, "Alumno") Exit Sub End If 'Si no se selecciono ningun elemento del ListBox If Me.lstcursos.SelectedIndex = -1 Then MsgBox("Por Favor Seleccione un Curso", MsgBoxStyle.Information, "Cursos") Exit Sub End If

Dim a As Short If Me.txtnp.Text = "" Then

Página 19

Page 20: aplicacion de vb.net 2003

Programación Windows

a = 1 ElseIf Me.txtep.Text = "" Then a = 2 ElseIf Me.txtef.Text = "" Then a = 3 End If

Select Case a Case 1 : MsgBox("Ingrese Nota de Prácticas", MsgBoxStyle.Information, "Nota1") Exit Sub Case 2 : MsgBox("Ingrese Exámen Parcial", MsgBoxStyle.Information, "Nota2") Exit Sub Case 3 : MsgBox("Ingrese Exámen Final", MsgBoxStyle.Information, "Nota3") Exit Sub End Select

Dim n1, n2, n3, prom As Short n1 = CInt(Me.txtnp.Text) n2 = CInt(Me.txtep.Text) n3 = CInt(Me.txtef.Text) prom = (n1 + n2 + n3) / 3 Me.txtprom.Text = CStr(prom)

If CInt(Me.txtprom.Text) >= 11 Then Me.lblcon.Text = "Aprobado" Me.lblcon.ForeColor = Color.Blue Else Me.lblcon.Text = "Desaprobado" Me.lblcon.ForeColor = Color.Red End If End Sub

Private Sub txtnp_KeyPress 'Si la tecla que se presiona; no es un numero o no es un control If Not (Char.IsNumber(e.KeyChar) Or Char.IsControl(e.KeyChar)) Then MsgBox("Por Ingrese solo Numeros") 'Interrumpir el evento e.Handled = True End If End Sub

Private Sub txtep_KeyPress 'Si la tecla que se presiona no es un numero; no es un numero o no es un control If Not (Char.IsNumber(e.KeyChar) Or Char.IsControl(e.KeyChar)) Then MsgBox("Por Ingrese solo Numeros") 'Interrumpir el evento e.Handled = True End If End Sub Private Sub txtef_KeyPress 'Si la tecla que se presiona no es un numero; no es un numero o no es un control

Página 20

Page 21: aplicacion de vb.net 2003

Programación Windows

If Not (Char.IsNumber(e.KeyChar) Or Char.IsControl(e.KeyChar)) Then MsgBox("Por Ingrese solo Numeros") 'Interrumpir el evento e.Handled = True End If End Sub

Private Sub txtnp_Validating If Me.txtnp.Text < 5 Or Me.txtnp.Text > 20 Then MsgBox("Nota no Valida") Me.ErrorProvider1.SetError(Me.txtnp, "Fuera de Rango") e.Cancel = True Else Me.ErrorProvider1.Clear() End If End Sub

Private Sub txtep_Validating If Me.txtep.Text < 5 Or Me.txtep.Text > 20 Then MsgBox("Nota no Valida") Me.ErrorProvider1.SetError(Me.txtep, "Fuera de Rango") e.Cancel = True Else Me.ErrorProvider1.Clear() End If End Sub

Private Sub txtef_Validating If Me.txtef.Text < 5 Or Me.txtef.Text > 20 Then MsgBox("Nota no Valida") Me.ErrorProvider1.SetError(Me.txtef, "Fuera de Rango") e.Cancel = True Else Me.ErrorProvider1.Clear() End If End Sub

BuclesEs probable que necesite frecuentemente repetir la ejecución de un bloque de código hasta que se cumpla una determinada condición en los programas que desarrolle. Para repetir la ejecución de un bloque de código en Visual Basic .NET, es conveniente utilizar estructuras de bucle condicionales. Esta lección describe cómo utilizar bucles condicionales para decidir si ejecutar o no código y cuándo hacerlo. Esta lección también describe cómo decidir el uso de una instrucción Exit para salir de un bucle.

Cómo Utilizar Instrucciones For…Next

Página 21

Page 22: aplicacion de vb.net 2003

TxtNum

BtnCalcular

BtnLimpiar

ListBox3

ListBox2

ListBox1

Programación Windows

Podemos utilizar un bucle For…Next cuando conocemos el número de veces que es necesario que se ejecute un bucle. Una instrucción For…Next repite un conjunto de instrucciones un número específico de veces.

Un bucle For…Next se ejecuta un determinado número de veces fijado por un contador de bucles. El valor del contador de un bucle For…Next puede incrementarse o disminuir dependiendo de si step es positivo o negativo.

La sintaxis de una instrucción For…Next es la siguiente:

For counter = start To end [Step step]

[statements]

[Exit For]

Next [counter]

Cómo Utilizar Instrucciones For Each…NextUna instrucción For Each…Next ejecuta un bloque de instrucciones para cada elemento de una colección o una matriz.

Una colección es un conjunto de objetos agrupados conjuntamente y a los que se hace referencia como una unidad.

La sintaxis para la instrucción For Each…Next es la siguiente:

For Each elementvariable In collection

' Statement block to be executed for each value

' of elementvariable

Next [elementvariable]

Ejercicio Practico Nº1

1. - Diseñar el siguiente formulario

2.- Codificaremos lo siguiente en los siguientes eventos:

Página 22

Page 23: aplicacion de vb.net 2003

btnLimpiar

Programación Windows

Private Sub btncalcular_Click Dim n, s, r As Integer n = Val(Me.txtnum.Text) For s = 1 To 12 Me.ListBox2.Items.Add(s & " =") Next

For r = 1 To 12 Me.ListBox3.Items.Add(n * r) Next End Sub

Private Sub btnlimpiar_Click Me.ListBox2.Items.Clear() Me.ListBox3.Items.Clear() Me.txtnum.Clear() Me.txtnum.Focus() End Sub

Ejercicio Practico Nº2

1. - Diseñar el siguiente formulario

2.- Codificaremos lo siguiente en los siguientes eventos:

Private Sub BtnLimpiar_Click

Dim con As Control

For Each con In Me.Controls

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

If TypeOf con Is GroupBox Then

Dim con2 As Control

For Each con2 In con.Controls

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

Next

End If

Next

End Sub

Como Utilizar Instrucción Do …Loop

Página 23

Page 24: aplicacion de vb.net 2003

BtnWhile

BtnUntil

Programación Windows

Puede utilizar instrucciones Do…Loop para ejecutar un bloque de instrucciones un número de veces indefinido dependiendo del valor de tipo bolean de una condición.

Las instrucciones pueden repetirse mientras el valor de la condición sea True o hasta que sea True. Generalmente, la condición es el resultado de comparar dos valores, pero también puede ser cualquier expresión que da como resultado un valor de tipo Bolean (True o False).

El bucle DO...LOOP es muy versatil. Con el se pueden crear gran variedad de bucles distintos, bucles que comprueben una condición antes de ejecutar el bucle una vez, después de la primera ejecución y con conbinaciones con mientras (WHILE) que se cumple una condición o hasta (UNTIL) que esa condicion se cumpla. la sintaxis de esta estructura es la siguiente:

DO [WHILE | UNTIL (condicion)]      Sentencias      .....LOOP [WHILE | UNTIL (condición)]

Vamos a tratar de explicar esta sentencia de manera pausada para que sea más fácil de entender. Lo que siempre tendremos en estos bucles es el DO y el LOOP, entre estos dos colocaremos las sentencias que queremos ejecutar en cada iteración del bucle. Los bucles tienen que evaluar entre cada iteración si se siguen ejecutando o no, para ello evalúa una condición. Lo versátil de este bucle es que la condición se puede expresar de muchas maneras distintas.

Condición expresada al lado del DO: en este caso la condición se evalúa antes de empezar a ejecutarse el bucle.

Condición expresada al lado del LOOP: en este caso la condición se evalúa después de ejecutarse el bucle. Tiene como diferencia principal frente al otro método que en este caso el bucle se ejecutará por lo menos una vez.

Además de poder expresar la condición en estos dos sitios también se puede construir la condición con un enunciado mientras (WHILE) o un enunciado hasta (UNTIL). Las diferencias semánticas de estas dos posibilidades se trasladan también a su manera de funcionar.

Vamos a ver un par de ejemplos de este bucle para comprender su funcionamiento. El ejemplo pide constantemente el nombre del autor de la página y no para hasta que el nombre sea "Castilla". También tiene el usuario la posibilidad de escribir "out", en ese caso, comprobado con un enunciado IF, se sale del bucle rompiéndolo con la sentencia EXIT DO, utilizada para romper bucles.

Ejercicio Practico Nº31. - Diseñar el siguiente formulario

En el método clic del BtnWhile

Dim entrada as String

entrada = ""

DO WHILE (entrada <> "Castilla")

   entrada = inputbox ("Dime el nombre del autor","seguridad","Castilla",2,3)

  if (entrada = "out") then

     msgbox ("salgo por la puerta de atras")

      exit do

   end if

LOOP

Página 24

Page 25: aplicacion de vb.net 2003

Programación Windows

El siguiente ejemplo realiza una cuenta y entre cuenta y cuenta se muestra el valor de la cuenta actual en una ventanita donde sale un botón de Reintentar y otro de Cancelar. Si se pulsa reintentar se sigue ejecutando el bucle y si se pulsa Cancelar se sale por la puerta de atrás, de manera similar a como se salía en el ejemplo anterior, con EXIT DO.

En el método clic del BtnUntil

Dim cont

Dim respuesta

cont = 0

Do

cont = cont + 1

respuesta = MsgBox(cont, 69, "Variable del bucle, con valor 6 se sale")

If (respuesta = 2) Then

MsgBox("Cuenta Cancelada", 16, "Cancelaste!")

Exit Do

End If

Loop Until (cont = 6)

Funciones del Sistema y Funciones Definidas por el Usuario

Página 25

Page 26: aplicacion de vb.net 2003

Programación Windows

Funciones Tipo Cadena

Una cadena es un dato de tipo String (Carácter); es decir se refiere a letras o letras y números,

ahora veremos las funciones de cadenas mas utilizadas y posteriormente realizaremos una

aplicación para que les quede mas claro, sobre las funciones de cadena.

Right: Obtiene de una cadena, una cantidad de caracteres empezando por la derecha: Sintaxis;

Microsoft.VisulBasic.Right(Cadena,N)

Left: Obtiene de una cadena, una cantidad de caracteres empezando por la izquierda: Sintaxis;

Microsoft.VisulBasic.Left(Cadena,N)

Mid: Obtiene de una cadena, una cantidad de caracteres a partir de una posición

determinada: Sintaxis; Microsoft.VisulBasic.Mid(Cadena,N)

Len: Obtiene la longitud de una cadena, es decir la cantidad de caracteres que contiene

incluyendo los espacios en blanco: Sintaxis; Len(Cadena)

Trim: Quita los espacios en blanco al final de una cadena: Sintaxis; Trim(Cadena)

RTrim: Quita los espacios en blanco al final de una cadena: Sintaxis; RTrim(Cadena)

LTrim: Quita los espacios en blanco al inicio de una cadena: Sintaxis; LTrim(Cadena)

UCase: Convierte una cadena en mayúsculas: Sintaxis; UCase(Cadena)

LCase: Convierte una cadena en minúsculas: Sintaxis; LCase(Cadena)

StrConv: Convierte una cadena en 3 formas diferentes, en mayúsculas = 1, minúsculas = 2,

la primera letra de cada palabra en mayúsculas = 3 : Sintaxis; StrConv(Cadena,Valor)

InStr: Obtiene un número que indica la posición de una subcadena dentro de una cadena:

Sintaxis; InStr(Cadena,SubCadena)

Ejercicio Práctico Nº1

1.- Diseñar el siguiente formulario

2.- Luego codificaremos lo siguiente.

Página 26

Page 27: aplicacion de vb.net 2003

Programación Windows

btnMuestra (Evento Click)

Me.lblLongitud.Text = Len(Trim(Me.txtFrase.Text))

Me.lblPrimero.Text = Microsoft.VisulBasic.Left(Trim(Me.txtFrase.Text), 1)

Me.lblUltimo.Text = Microsoft.VisulBasic.Right(Trim(Me.txtFrase.Text), 1)

Me.lblSegSex.Text = Microsoft.VisulBasic.Mid(Trim(Me.txtFrase.Text), 2, 5)

Me.lblPosA.Text = InStr(Me.txtFrase.Text, "a")

Me.lblMinusculas.Text = LCase(Me.txtFrase.Text)

Me.lblMayusculas.Text = UCase(Me.txtFrase.Text)

Me.lblSoloPrim.Text = StrConv(Me.txtFrase.Text, 3)

BtnNuevo_Click

Me.txtFrase.Text = ""

Me.lblLongitud.Text = ""

Me.lblMayusculas.Text = ""

Me.lblMinusculas.Text = ""

Me.lblPosA.Text = ""

Me.lblPrimero.Text = ""

Me.lblSegSex.Text = ""

Me.lblSoloPrim.Text = ""

Me.lblUltimo.Text = ""

Me.txtFrase.Focus()

btnSalir (Evento Click)

Me.Close()

Página 27

Page 28: aplicacion de vb.net 2003

TxtFechaSis

TxtHoraSis

TxtNF

DtpFechaBtnDife

BtnNumMes

TxtFechaIng

TxtFechaConver

Programación Windows

Funciones Cronológicas

Ejercicio Práctico Nº2

1.- Diseñar el siguiente formulario

Página 28

TxtDI

Page 29: aplicacion de vb.net 2003

Programación Windows

2.- Luego codificaremos lo siguiente

Private Sub btnverfecha_Click 'Fecha del Sistema Me.txtfechasis.Text = FormatDateTime(Today, DateFormat.LongDate) End Sub

Private Sub btnverhora_Click 'Hora del Sistema Me.txthorasis.Text = TimeOfDay End Sub

Private Sub btnFechaNueva_Click 'Incrementar una Fecha Me.txtNF.Text = FormatDateTime(DateAdd(DateInterval.Day, CInt(Me.txtDI.Text), Today), DateFormat.LongDate) End Sub

Private Sub btndife_Click 'Diferencia entre Fechas MsgBox("Han pasado " & DateDiff(DateInterval.Month, Me.dtpFecha.Value, Today) & " meses " & vbCrLf & _ "desde la fecha " & FormatDateTime(Me.dtpFecha.Value, DateFormat.ShortDate) & " hasta hoy") End Sub

Private Sub btnNumMes_Click 'Extraer parte de una Fecha MsgBox("El Numero de Mes de la Fecha Elegida es " & DatePart(DateInterval.Month, Me.dtpFecha.Value)) End Sub

Private Sub btnconvertir_Click 'Convertir un Caracter en Fecha Me.txtfechaconver.Text = DateValue(Me.txtfechaing.Text) End Sub

Procedimientos Sub

Un procedimiento Sub ejecuta acciones, pero no devuelve ningún valor. Puede tomar argumentos, como constantes, variables o expresiones, que le pasa el código de llamda.La sintaxis para declarar un procedimiento Sub es la siguiente:Declarción:

[ Public | Private | Friend ] Sub <Nombre Subrutina> ([Lista de Parámetros])<Sentencias>[Exit Sub]End Sub

Página 29

Page 30: aplicacion de vb.net 2003

Programación Windows

Procedmientos Function

Un procedimiento Function consiste en una serie de instrucciones de Visual Basic delimitadas por las instrucciones Function y End Function. Cada vez que se llama a un procedimiento de este tipo, se ejecutan las instrucciones de éste, desde la primera instrucción ejecutable.La sintaxis para declarar un procedimiento Function es la siguiente:

[ Public | Private | Friend ] Function <Nombre Función> ([Lista de Parámetros])As <Tipo de Dato><Sentencias>[Exit Function]End Function

Ejercicio Practico Nº11.- Agregar una clase la cual se llamara CLSOPERACIONESPublic Class clsoperaciones Public Function promedio(ByVal nota1 As Short, ByVal nota2 As Short, ByVal nota3 As Short) As Short promedio = (nota1 + nota2 + nota3) / 3 End Function Public Function parimpar(ByVal numero As Integer) As String If numero Mod 2 = 0 Then parimpar = "Es par" Else parimpar = "Impar" End If End Function

Public Function hipotenusa(ByVal ladoA As Single, ByVal ladoB As Single) As Single hipotenusa = Math.Sqrt(Math.Pow(ladoA, 2) + Math.Pow(ladoB, 2)) End FunctionPublic Sub limpiar(ByVal frm As Form) Dim con As Control For Each con In frm.Controls If TypeOf con Is TextBox Then con.Text = "" If TypeOf con Is GroupBox Or TypeOf con Is Panel Then Dim con2 As Control For Each con2 In con.Controls If TypeOf con2 Is TextBox Then con2.Text = "" If TypeOf con2 Is GroupBox Or TypeOf con2 Is Panel Then Dim con3 As Control For Each con3 In con2.Controls If TypeOf con3 Is TextBox Then con3.Text = "" Next End If Next End If Next End SubEnd Class

2.- Luego Agregaremos un Modulo y codificaremos lo siguiente.

Public obj As New clsoperaciones

Página 30

Page 31: aplicacion de vb.net 2003

Button1Button3

Button5Button4

Button7Button6

Button2

Programación Windows

3. - Diseñaremos los siguientes formularios.

Private Sub BtnCalcular_Click Me.Label1.Text = obj.promedio(Me.txtN1.Text, Me.txtN2.Text, Me.txtN3.Text)End Sub

Private Sub BtnConsultar_Click Me.Label1.Text = obj.parimpar(Me.TextBox1.Text)End Sub

Private Sub BtnCalcular_Click Dim num1, num2, hipo As Single num1 = InputBox("Ingrese lado A del Triangulo: ") num2 = InputBox("Ingrese lado B del Triangulo: ") hipo = obj.hipotenusa(num1, num2) MessageBox.Show("La Hipotenusa del Triangulo rectángulo es " & hipo)End Sub

Private Sub BtnLimpiar_Click obj.limpiar(Me)End Sub

Sub habilitar(ByVal sw As Boolean) Me.Button1.Enabled = sw Me.Button2.Enabled = Not sw Me.Button3.Enabled = sw Me.Button4.Enabled = Not sw Me.Button5.Enabled = sw Me.Button6.Enabled = Not sw Me.Button7.Enabled = sw End Sub

Private Sub Button6_Click habilitar(True) End Sub

Private Sub Button7_Click habilitar(False) End Sub

Página 31

Page 32: aplicacion de vb.net 2003

Programación Windows

Manejo de Colecciones – Arreglos, ArrayList, HashTable y SortedList

Recorrido de un ArrayList con el IEnumerator

Recorrido de un HashTable con el IDictionaryEnumerator

Arreglos Arrays

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

Declarar Variables Como Arrays

Para poder indicarle al VB 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()

Página 32

Page 33: aplicacion de vb.net 2003

Programación Windows

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

forma de declaración que te mostré anteriormente: Dim a As Integer(5) ya que esto produciría un

error sintáctico.

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

Acceder A Un Elemento De Un Array

De igual forma, si queremos utilizar ese elemento que está en la posición 3 para una operación,

podemos hacerlo como con el resto de las variables, pero siempre usando el paréntesis y el número

de elemento al que queremos acceder:

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)

Página 33

Page 34: aplicacion de vb.net 2003

Programación Windows

Inicializar Un Array Al Declararla

Al igual que las variables normales se pueden declarar y al mismo tiempo asignarle un valor inicial,

con los arrays también podemos hacerlo, pero de una forma diferente, ya que no es lo mismo asignar

un valor que varios.

Aunque hay que tener presente que si inicializamos un array al declararla, no podemos indicar el

número de elementos que tendrá, ya que el número de elementos estará supeditado a los valores

asignados.

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"}

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)

Página 34

Page 35: aplicacion de vb.net 2003

TxtNombres

BtnAgregar

BtnMostrar

BtnLimpiarLstNombres

Programación Windows

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 el contenido de un array, por ejemplo para que

no siga ocupando memoria, ya que es posible que no siga ocupando memoria, podemos usar Erase

seguida del array que queremos "limpiar", por ejemplo:

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 el

contenido, no la definición del array.

Ejercicio Practico Nº1

1.- Diseñar el siguiente formulario

Página 35

Page 36: aplicacion de vb.net 2003

Programación Windows

Public Class Form1 Dim nombres(0) As String

Private Sub btnagregar_Click If Me.txtnombre.Text.Trim <> "" Then nombres(UBound(nombres)) = Me.txtnombre.Text ReDim Preserve nombres(UBound(nombres) + 1) MsgBox("Guardado ...!", MsgBoxStyle.Information, "Arreglos") Me.txtnombre.Clear() Me.txtnombre.Focus() Else MsgBox("Por Favor Ingrese un Nombre", MsgBoxStyle.Information, "Arreglos") Me.txtnombre.Clear() Me.txtnombre.Focus() End If End Sub

Private Sub btnmostrar_Click Dim x As Integer For x = 0 To UBound(nombres) - 1 Me.lstnombres.Items.Add(nombres(x)) Next ReDim nombres(0) End Sub

Private Sub btnlimpiar_Click Me.lstnombres.Items.Clear() End Sub

End Class

Estructuras

Podemos combinar elementos de datos de distintos tipos para crear una combinación de tipos de

datos única denominada estructura. Las estructuras resultan útiles cuando deseamos que una única

variable guarde varias piezas de información relacionadas. Después de declarar una estructura,

podemos declarar variables de ese tipo.

Definición.-Una estructura es una combinación de tipos de datos que se crea combinando otros tipos

de datos. Las estructuras son de tipo valor (es decir, una variable de tipo estructura contiene los datos

de la estructura, en lugar de una referencia a los datos como hace el tipo referencia). Las estructuras

pueden tener datos, propiedades, métodos y procedimientos y pueden invocar y manipular eventos.

Ejemplo

Página 36

Page 37: aplicacion de vb.net 2003

Programación Windows

El uso más simple y habitual de las estructuras es encapsular variables relacionadas, creando un tipo

de datos definido por el usuario. Por ejemplo, es posible que deseemos guardar juntos el nombre,

fecha de contratación, cargo y salario de un empleado. Podríamos utilizar varias variables para esta

información, o podemos definir una estructura y utilizarla como la variable de un único empleado. La

ventaja de la estructura se hace patente cuando tiene muchos empleados y, por tanto, muchas

instancias de la variable. El siguiente ejemplo muestra una estructura Employee simple:

Public Structure Employee

Public FirstName As String

Public LastName As String

Public HireDate As Date

Public JobTitle As String

Private Salary As Decimal

End Structure

Cómo Declarar Estructuras

Cómo Utilizar Las Estructuras

Página 37

Page 38: aplicacion de vb.net 2003

txtnombre

txtcurso

txtpromediobtnagregar

btnconsultar

Programación Windows

Ejercicio Practico Nº2

1.- Agregar un Modulo a la aplicación y escribir el siguiente código.

Module Module1 'Declaramos la estructura Public Structure DatosAlumnos Public codigo As Integer Public nombre As String Public curso As String Public promedio As Integer End Structure 'Declaramos un arrays que me almacenen los valores Public alumnos(0) As DatosAlumnosEnd Module

2.- Luego diseñar el siguiente formulario

3.- En el evento click del botón btnagregar codificaremos lo siguiente

Private Sub btnagregar_Click 'Declarar una variable para manipular la estructura Dim mialumno As DatosAlumnos 'Asignar valores a la estructura With mialumno .codigo = UBound(alumnos) + 1 .nombre = txtnombre.Text .curso = txtcurso.Text .promedio = txtpromedio.Text End With 'Agregar valores al arrays de la estructura alumnos(UBound(alumnos)) = mialumno 'Redimensionar la matriz manteniendo la los valores ReDim Preserve alumnos(UBound(alumnos) + 1) 'Mostrar mensaje de Datos Agregados

MsgBox("Datos Agregados...", MsgBoxStyle.Information, "Alumnos") 'Limpiamos las cajas de textos txtnombre.Text = "" txtcurso.Text = "" txtpromedio.Text = "" txtnombre.Focus() End Sub

Private Sub btnconsultar_Click Frmconsulta.Show()End Sub

Página 38

Page 39: aplicacion de vb.net 2003

txtconsulta

txtcodigo

txtnombre

txtcurso

txtpromediobtninscribir

btnconsultar

Programación Windows

4.- Luego diseñaremos el siguiente formualrio.

5.- Luego en el evento load del formulario frmconsulta.

Private Sub Frmconsulta_Load Frminscribir.Hide() End Sub

Private Sub btnconsultar_Click Dim mialumno As DatosAlumnos Dim x As String = txtconsulta.Text mialumno = alumnos(x - 1) txtcodigo.Text = mialumno.codigo txtnombre.Text = mialumno.nombre txtcurso.Text = mialumno.curso txtpromedio.Text = mialumno.promedio txtconsulta.Text = "" txtconsulta.Focus() End SubPrivate Sub btninscribir_click Frminscribir.Show() Me.Close() End Sub

Manejo de ArrayList

Esta es una colección donde podemos guardar cualquier tipo de objeto.  Su método ArrayList.Add()

acepta el tipo object, por lo cual podemos coleccionar enteros, cadenas, listboxes, botones, y casi

cualquier cosa que se nos ocurra…  El acceso a sus elementos se logra por medio de la posición o

índice.  Podemos utilizar su propiedad ArrayList.Count para preguntarle a la colección cuantos

elementos tiene

Esta clase permite la creación y manipulación de arrays cuyo tamaño puede ser modificado

dinámicamente.

Página 39

Page 40: aplicacion de vb.net 2003

Programación Windows

Este comportamiento del

objeto tiene la ventaja de que

mejora el rendimiento y

optimiza recursos, puesto que

cada vez que añadimos o

eliminamos valores, el array

items no siempre tiene que ser

redimensionado.

¿Qué sucede, sin embargo,

cuando se han añadido valores

y el array está completo?, pues

que el objeto ArrayList detecta

esta situación y en la siguiente

ocasión en que se añade un

nuevo valor, automáticamente

se redimensiona duplicando el

número de elementos inicial

que contenía. Veamos de

nuevo un esquema de

funcionamiento.

Borrado de Elementos en una Colección Arraylist

Para realizar un borrado de valores, la clase ArrayList proporciona los métodos descritos a

continuación.

• Remove(Valor). Elimina el elemento del array que corresponde a Valor.

• RemoveAt(Posicion). Elimina el elemento del array situado en el índice Posición.

• RemoveRange (Posición, Elementos). Elimina el conjunto de elementos indicados en el

parámetro Elementos, comenzando por el índice Posición.

• Clear ( ). Elimina todos los elementos del objeto.

IEnumerator

Página 40

Page 41: aplicacion de vb.net 2003

CboCiudad

TxtTotal

TxtCiudad

Programación Windows

Un objeto enumerador pertenece al interfaz IEnumerator, diseñado para realizar un recorrido o

iteración a través de uno de los diferentes tipos de colección (arrays incluidos) existentes en .NET

Framework. Mediante el método GetEnumerator( ) de un objeto array, obtenemos un objeto que

implementa el interfaz Ienumerator, que sólo puede realizar labores de lectura sobre el array, en

ningún caso de modificación.

La estructura de control utilizada para recorrer el array, puede ser indistintamente un bucle

For...Next, For Each...Next, o la novedosa técnica de los objetos enumeradores proporcionados por el

objeto array.

Ejercicio Práctico Nº3

1.- Diseñar el siguiente formulario.

2.- Codificaremos lo siguiente:

Public Class Form1 'Declaramos nuestro ArrayList Dim lista As New ArrayList()

Private Sub Form1_Load 'Agregamos elementos a nuestro ArrayList lista.Add("Lima") lista.Add("Lambayeque") lista.Add("Trujillo") lista.Add("Tacna") lista.Add("Arequipa") lista.Add("Puno") End Sub

Private Sub btnordenar_Click If Me.cbociudad.Items.Count <> 0 Then Me.cbociudad.Items.Clear() 'Sirve para ordenar los elementos de un ArrayList lista.Sort() 'Declaramos nuestro IEnumerator Dim recorrer As IEnumerator recorrer = lista.GetEnumerator While recorrer.MoveNext 'Agrega el elemento actual del Array Me.cbociudad.Items.Add(recorrer.Current) End While Else MsgBox("Primero debe de Cargar las Ciudades", MsgBoxStyle.Information, "ArrayList") End If End Sub

Private Sub btnVer_Click 'Muestra el Total de Elementos del ArrayList

Página 41

Page 42: aplicacion de vb.net 2003

Programación Windows

Me.txtTotal.Text = lista.Count End Sub

Private Sub btncargar_Click Me.cbociudad.Items.Clear() 'Cargamos el combo con un For For x As Integer = 0 To lista.Count - 1 Me.cbociudad.Items.Add(lista(x)) Next End Sub

Private Sub btnenumerador_Click Me.cbociudad.Items.Clear() 'Cargamos el Combo con un IEnumerator Dim recorrer As IEnumerator 'Asigna el numero de elementos de mi ArrayList recorrer = lista.GetEnumerator

While recorrer.MoveNext Me.cbociudad.Items.Add(recorrer.Current) End While End Sub

Private Sub btnlimpiar_Click 'Elimina los elementos del Combo Me.cbociudad.Items.Clear() End Sub

Private Sub btncapacidad_Click 'Muestra la capacidad de almacenamiento del ArrayList MsgBox(lista.Capacity) End Sub

Private Sub btnagregar_Click 'Agregar un elemento al ArrayList lista.Add(Me.txtciudad.Text) End SubEnd Class

La Clase HashTablePágina 42

Page 43: aplicacion de vb.net 2003

TxtCod

TxtNom

Programación Windows

Esta clase tiene la particularidad de que el acceso a los valores del array que gestiona internamente se

realiza a través de una clave asociada a cada elemento, al estilo de los objetos Dictionary de

versiones anteriores de VB. Como dato significativo, esta clase implementa el interfaz IDictionary,

por lo que si hemos utilizado anteriormente objetos Dictionary, ya conocemos gran parte de su

filosofía de trabajo.

En este tipo de colección no es necesario preocuparse por la posición o índice de los elementos, ya

que accedemos a ellos a través de literales, lo cual en algunas circunstancias es mucho más cómodo

de manejar.

Respecto a la asignación de valores a la colección, esta clase utiliza el método Add( ), cuyo primer

parámetro corresponde a la clave del elemento y el segundo corresponde al valor que vamos a asignar

a la posición de su array.

Las propiedades Keys y Values de la clase Hashtable, devuelven un array con los nombres de las

claves y los valores de un objeto Hashtable respectivamente.

Manejo del IDictonaryEnumerator

Si queremos recorrer el array al completo contenido en el objeto, podemos utilizar el método

GetEnumerator( ), que nos devuelve un enumerador para poder obtener todos los valores del objeto

en un bucle. La diferencia con los otros algoritmos de recorrido que hemos visto anteriormente, es

que al estar la colección Hashtable basada en una combinación de clave/valor, necesitamos un

enumerador basado en el interfaz IDictionaryEnumerator, especialmente adaptado para manipular

arrays de este tipo.

Como habrá comprobado el lector, un enumerador IDictionaryEnumerator proporciona la

información de la colección mediante las propiedades Key y Value, a diferencia de un enumerador

simple, basado en IEnumerator, en el que usamos la propiedad Current, para extraer los datos.

La clase Hashtable no sitúa los valores que se añaden al array en posiciones consecutivas, por lo que

al obtener los valores mediante un enumerador posiblemente no aparecerán en el mismo orden en el

que los añadimos inicialmente. Dada la filosofía de funcionamiento de este tipo de objetos, el orden

en el que se graban los valores dentro del array no debería ser un problema, ya que nosotros

accedemos al array utilizando claves y no índices, como sucede en un array estándar.

Ejercicio Práctico Nº4

1.- Diseñar el Siguiente Formulario:

Página 43

Page 44: aplicacion de vb.net 2003

ListView1

Programación Windows

2.- Codificaremos lo siguiente:

Public Class Form2 'Declaramos un objeto HashTable Dim clientes As New Hashtable

Private Sub btnguardar_Click 'Agregamos elementos a nuestro HashTable 'Le asignamos un codigo y un valor para cada elemento ingresado clientes.Add(Me.txtcod.Text, Me.txtnom.Text) MsgBox("Datos Guardados!...", MsgBoxStyle.Information, "HashTable") Me.txtcod.Clear() Me.txtnom.Clear() Me.txtcod.Focus() End Sub

Private Sub btnmostrar_Click 'Recorremos el HashTable con el IDictonaryEnumerator 'Y cada elemento recorrido lo agregamos en los 'dos ListBoxs Dim RECO As IDictionaryEnumerator RECO = clientes.GetEnumerator While RECO.MoveNext Me.lstcod.Items.Add(RECO.Key) Me.lstnom.Items.Add(RECO.Value) End While End SubEnd Class

La Clase SortedListEsta clase es una variación de Hashtable, ya que nos permite crear colecciones basadas en pares de

claves y valor, pero con la diferencia de que en una colección SortedList, los elementos se ordenan

por la clave según van siendo agregados. El funcionamiento general, es básicamente igual que para

los objetos Hashtable.

Ejercicio Práctico Nº5

1.- Diseñar el siguiente formulario

Página 44

Page 45: aplicacion de vb.net 2003

Programación Windows

2.- Codificaremos lo siguiente:

Public Class Form3 'Declaramos nuestro SortedList Dim letras As New SortedList

Private Sub Form3_Load 'Agregamos valores letras.Add("H", 111) letras.Add("A", 222) letras.Add("J", 333) letras.Add("Z", 444) letras.Add("M", 555) End Sub

Private Sub BtnMostrar_Click 'Recorremos los elementos del SortedList y lo agregaremos al ListView Dim reco As IDictionaryEnumerator reco = letras.GetEnumerator While reco.MoveNext Dim lst As New ListViewItem(reco.Key.ToString) lst.SubItems.Add(reco.Value.ToString) Me.ListView1.Items.Add(lst) End While

Manejo de Hilos (Threads) y Componente BackGroundWorker

Definición de un Threading

Componente BackgroundWorker

Práctica de Laboratorio de Hilos

Manejo de THREADS (Hilos)

Página 45

Page 46: aplicacion de vb.net 2003

Programación Windows

Todas las aplicaciones se ejecutan en un Thread (o hilo de ejecución). Pero cada aplicación puede

tener más de un Thread al mismo tiempo, es decir se pueden estar haciendo varias cosas a un mismo

tiempo. En Visual Basic.Net, a diferencia de las versiones anteriores, se pueden crear Threads para

que podamos realizar diferentes tareas a un mismo tiempo, el uso o no de Threads lo decidirás tú, ya

no es algo que no podamos hacer aunque quisiéramos.

Cuando se define un nuevo Thread, lo que hay que hacer es indicarle al compilador cual será el

procedimiento que queremos usar de forma paralela al resto de la aplicación. Este procedimiento

debe ser obligatoriamente del tipo SUB.

La ventaja principal de los Threads es tener varias actividades ocurriendo en forma simultánea, lo

cual es una gran posibilidad para que los desarrolladores puedan trabajar con varios procesos sin

perjudicar otras tareas. Por ejemplo, el usuario puede interactuar con la aplicación mientras se va

ejecutando una consulta de miles de registro.

Se recomienda el uso de Threads en las siguientes situaciones:

Para comunicaciones sobre una red, servidor Web o Servidor de Base de Datos.

Al ejecutar operaciones que demoren bastante tiempo.

Para mantener siempre disponible la comunicación entre el usuario y la interface mientras se van

ejecutando tareas en segundo plano, etc.

Implementación de Threads

Para implementar Threads se usa el namespace: “System.Threading.Thread” y luego se hace uso

de los métodos que se definen a continuación:

Start : Inicia un Thread, el cual es un proceso de llamada asíncrona. Para saber el estado del

Thread hay que usar las propiedades ThreadState y IsAlive.

Abort: Cancela un Thread iniciado, si deseamos saber el estado nuevamente podemos usar

las propiedades ThreadState y IsAlive.

Sleep: Ocasiona una pausa en milisegundos del bloque de instrucciones.

Suspend: También ocasiona una pausa en el bloque de instrucción.

Resume: Reinicia una pausa originada con el método Suspend.

Interrupt: Interrumpe una pausa originando una exepción.

Join: Espera por un Thread.

Ejercicio Práctico Nº1

1.- Diseñar el siguiente formulario.

Página 46

Page 47: aplicacion de vb.net 2003

Programación Windows

2.- Codificaremos lo siguiente.

'Importamos el namespace para TrheadingImports System.Threading

Public Class Form1 'Creamos 2 procedimientos Public Sub Calculo_1() Dim res As Long For I As Integer = 0 To 100000 res = res + I Next MessageBox.Show("Calculo_1 " & res) End Sub

Public Sub Calculo_2() Dim res As Long For I As Integer = 0 To 500 res = res + I Next MessageBox.Show("Calculo_2 " & res) End Sub

Private Sub BtnComenzar_Click 'Creamos 2 variables de tipo Threading Dim hilo1 As New Thread(AddressOf Calculo_1) Dim hilo2 As New Thread(AddressOf Calculo_2) 'Ejecutamos los 2 procesos hilo1.Start() hilo2.Start() End SubEnd Class

BackgroundWorkerPara solucionar el problema anterior el Framework 2.0 trae una clase muy util que encapsula bastante

código que hasta ahora teníamos que escribir nosotros. Se trata de BackgroundWorker. Su uso es

sencillo, y se basa en eventos. Los eventos que expone son los siguientes:

Evento Ocurre Cuando...

DoWork ...se solicita la ejecución de una tarea. Dentro del event handler asociado a

Página 47

Page 48: aplicacion de vb.net 2003

Programación Windows

este evento debe encontrarse el código a ejecutar en otro hilo. Solo ocurre

cuando se ejecuta el método RunWorkerAsync() (de hecho ese método lo

unico que hace es lanzar el evento y arreglar las cosas para que se ejecute en

otro hilo).

ProgressChanged ...se reporta un progreso en el trabajo.

RunWorkerCompleted...se terminó la ejecución de la tarea. La terminación puede deberse a que la

ejecución se completó o a que esta fue cancelada.

A traves del método RunWorkerAsync() le indicamos al BackgroundWorker que se debe iniciar la

ejecución de una tarea. Imediatamente luego de su ejecución, se produce el evento DoWork, y es ahi

donde debemos indicarle que hacer. Durante la ejecución podemos utilizar el método

ReportProgress() para lanzar el evento ProgressChanged, el cual podemos utilizar para actualizar un

contador, una barra de progreso o simplemente para hacer alguna otra tarea.

Si lo deseamos podemos utlizar el método CancelAsync() para cancelar la ejecución de la tarea, pero

cabe aclarar que la simple ejecución del método no cancela la tarea sino que setea en true la

propiedad CancellationPending del BackgroundWorker. Nosotros vamos a ser los encargados de

monitorear a esta bandera y cancelar el trabajo nosotros mismos.

Una vez terminada la ejecución de la tarea se lanza el evento RunWorkerCompleted. El delegado de

evento posee un argumento del tipo RunWorkerCompletedEventArgs que nos ayudará a determinar

si la tarea fue cancelada o no y cual fue su resultado.

El código que acompaña a este artículo tiene una pequeña aplicacion que simula realizar una tarea

pesada y reporta su estado cada tanto. Obviamente su funcionamiento se basa en el

BackgroundWorker.

Ejercicio Práctico Nº2

1.- Diseñar el siguiente formulario

2.- Codificaremos lo siguiente.

Imports System.ComponentModelPublic Class Form2

Página 48

Page 49: aplicacion de vb.net 2003

TxtNombre

TxtArchivo

Programación Windows

Public Sub Calculo_1(ByVal hilotr1 As BackgroundWorker, ByVal e As DoWorkEventArgs) Dim res As Long For I As Integer = 0 To 100000 res = res + I Next MessageBox.Show("Calculo_1 " & res) End Sub Public Sub Calculo_2(ByVal hilotr2 As BackgroundWorker, ByVal e As DoWorkEventArgs) Dim res As Long For I As Integer = 0 To 500 res = res + I Next MessageBox.Show("Calculo_2 " & res) End Sub Private Sub BtnComenzar_Click Me.BackgroundWorker1.RunWorkerAsync() Me.BackgroundWorker2.RunWorkerAsync() Dim x As Integer = 0 End Sub Private Sub BackgroundWorker1_DoWork Dim hilotr1 As BackgroundWorker = sender Calculo_1(hilotr1, e) End Sub Private Sub BackgroundWorker2_DoWork Dim hilotr2 As BackgroundWorker = sender Calculo_2(hilotr2, e) End SubEnd Class

Practica de Laboratorio

Implementando MultiThread y

Control de Excepciones

1.- Se va a crear una aplicación en la que

se implemente múltiples Threads para

iniciar la lectura de un archivo de

texto extenso y poder cancelar este

proceso si es necesario. Además para

evitar los errores en tiempo de

ejecución haremos uso del control

estructurado de excepciones.

2.- Diseñar el siguiente formulario.

3.- Codificaremos lo siguiente:

Public Class frmarchivo

Página 49

Page 50: aplicacion de vb.net 2003

Programación Windows

'Creamos un Thread llamado Hilo Dim hilo As System.Threading.Thread 'Crearemos el procedimiento LeerArchivo 'El cual abrira un documento de Texto Sub leerarchivo() Dim flujo As System.IO.StreamReader Dim linea As String = "" Try flujo = System.IO.File.OpenText(Me.txtnombre.Text) Do Until IsNothing(linea) linea = flujo.ReadLine Me.txtarchivo.Text = Me.txtarchivo.Text & linea & Chr(13) & Chr(10) Loop Catch X As IO.IOException MsgBox(X.Message, MsgBoxStyle.Information, "No se Pudo") Exit Sub Me.txtnombre.Clear() End Try flujo.Close() Me.btnsuspender.Enabled = False Me.btncontinuar.Enabled = False Me.btncancelar.Enabled = False End Sub

Private Sub btnleer_Click 'Instanciamos un nuevo thread 'El cual llamara al procedimiento LeerArchivo hilo = New System.Threading.Thread(AddressOf leerarchivo) 'Ejecuta el Thread hilo.Start() Me.btnsuspender.Enabled = True Me.btncancelar.Enabled = True End Sub

Private Sub txtnombre_TextChanged Me.btnleer.Enabled = Me.txtnombre.Text <> "" End Sub

Private Sub btncancelar_Click 'Cancela la ejecucion del Thread hilo.Abort() Me.btnleer.Enabled = False Me.btnsuspender.Enabled = False Me.btncancelar.Enabled = False End Sub

Private Sub btnnuevo_Click Me.txtnombre.Clear() Me.txtarchivo.Clear()

Página 50

Page 51: aplicacion de vb.net 2003

Programación Windows

Me.txtnombre.Focus() End Sub

Private Sub btnsuspender_Click 'Detiene la ejecucion del Thread hilo.Suspend() Me.btnleer.Enabled = False Me.btncontinuar.Enabled = True Me.btncancelar.Enabled = False End Sub

Private Sub btncontinuar_Click 'Reinicia la ejecucion del Thread hilo.Resume() End Sub Private Sub BtnVerificar_Click 'Verifica el estado de ejecucion del Thread If hilo.IsAlive() Then MsgBox("En Ejecución", MsgBoxStyle.Information, "Vida del Threads") Else MsgBox("Termino su Ejecución", MsgBoxStyle.Information, "Vida del Threads") End If End Sub

Private Sub btnsalir_Click Me.Close() End Sub

End Class

Serialización y Deserializacion de Objetos – Administración de Archivos

Serialización XML

Clase System.IO : Acceso a archivos y carpetas

StreamWriter y StreamReader

Introducción

Página 51

Page 52: aplicacion de vb.net 2003

Programación Windows

El propósito de este Tema es mostrar un mecanismo sencillo que permita guardar los valores

contenidos en los controles de una forma de Windows; en una archivo xml.

Para lograr este propósito utilizaremos la clase XmlSerializer que permite crear una representación

XML de un objeto para efectos de almacenamiento y transporte.

Esta clase permite serialización XML y Desearialización XML. La serialización permite crear a partir

de las variables y propiedades públicas de una clase un objeto XML serializado. El método Serialize

de la clase XmlSerializer permite crear un archivo XML de tipo (System.IO.StreamWriter) a partir de

una clase por medio de una objeto serializado. El método Deserialize de la clase XmlSerializer

permite crear objeto con la información deseralizada proveniente de un archivo XML.

Descripción de la Serialización XMLLa serialización es el proceso mediante el cual almacena el estado de un objeto en una secuencia de

datos. La serialización permite conservar el estado de un objeto, de forma que se puede recuperar el

estado posteriormente. La serialización permite también clonar un objeto existente para crear un

nuevo objeto. El espacio de nombres System.Xml.Serialization contiene clases que se pueden utilizar

para serializar objetos en XML.

Ejercicio Práctico Nº1

1.- Crearemos un proyecto

llamado Serialización de Objetos.

2.- Luego a nuestro proyecto

agregaremos una clase llamada

CLSPRODUCTOS.

3.- Dentro de nuestra clase clsproductos codificaremos lo siguiente.

Public Class clsproductos

'Declaracion de Variables Private vname As String Private vdescription As String Private vqty As Integer

'Declaracion de las Propiedades Public Property nombre() As String

Página 52

Page 53: aplicacion de vb.net 2003

TxtnomPro

TxtDescripcion

TxtCantidadBtnSerializar

BtnDeSerializar

Programación Windows

Get nombre = vname End Get Set(ByVal value As String) vname = value End Set End Property

Public Property descripcion() As String Get descripcion = vdescription End Get Set(ByVal value As String) vdescription = value End Set End Property

Public Property cantidad() As Integer Get cantidad = vqty End Get Set(ByVal value As Integer) vqty = value End Set End Property

End Class

4.- Luego diseñaremos el siguiente formulario.

Imports System.IO'Importamos el NameSpace que me permitira la SerializacionImports System.Xml.Serialization

Public Class Form1 'Declaramos una Variable del Tipo de La Clase ClsProductos Dim p As New clsproductos

Private Sub BtnSerializar_Click 'Asignacion de Valores Para la Clase Productos p.nombre = Me.txtnompro.Text p.descripcion = Me.txtdescripcion.Text p.cantidad = CInt(Me.txtcantidad.Text)

'Declaracion de la Variable "X" que contendra la clase Dim x As New XmlSerializer(p.GetType)

Página 53

Page 54: aplicacion de vb.net 2003

Programación Windows

'Lugar donde se creara el archivo XML Dim archivo As New StreamWriter("C:\Producto.xml") 'Crea el archivo XML en el lugar donde se le indica 'Y la clase a Serializar x.Serialize(archivo, p) archivo.Close()

MsgBox("Objeto XML creado", MsgBoxStyle.Information, "Serializacion")

End Sub

Private Sub BtnDeSerializar_Click Try Dim x As New XmlSerializer(p.GetType) 'Archivo XML que se Desearilizar Dim archivodes As New StreamReader("C:\Producto.xml") 'Variable que contendra la clase deserializada Dim p2 As New clsproductos 'Direccion del archivo a Deserealizar p2 = x.Deserialize(archivodes) archivodes.Close() MsgBox("Nombre:" & p2.nombre & vbCrLf & "Descripcion:" & p2.descripcion & vbCrLf & "Cantidad:" & CStr(p2.cantidad)) Catch ex As Exception MsgBox("El Archivo no Existe", MsgBoxStyle.Information, "Deserializacion") End Try End SubEnd Class

5.- Al ejecutar nuestra aplicación introduciremos un nombre, descripción, y cantidad de un producto.

6.- Daremos clic en el botón Serializar objeto y nos saldrá un mensaje como el que muestra la figura.

Página 54

Page 55: aplicacion de vb.net 2003

Programación Windows

7.- Abriremos el archivo XML creado en la unidad “C:\”, y aparecerá el código como muestra la

figura; el cual es código XML.

8.- Luego al dar clic sobre el botón Deserializar nos mostrará la información del archivo serializado

anteriormente.

El NameSpace System.IO

Página 55

Page 56: aplicacion de vb.net 2003

TxtCarpeta

TxtArchivo

Programación Windows

Este NameSpace contiene todos los tipos que permiten leer y escribir en los archivos y secuencia de

datos, así como tipos que proporcionan compatibilidad básica con los archivos y directorios.

Algunas Clases de System.IO

Clase Descripción

DirectoryExpone métodos estáticos para crear, mover y enumerar archivos en directorios y subdirectorios

DirectoryInfoExpone métodos de instancia para crear, mover y enumerar archivos en directorios y subdirectorios.

File

Proporciona métodos estáticos para crear, copiar, eliminar, mover y abrir archivos y contribuye a la creación de objetos FileStream.Utilice la clase FileStream para leer, escribir, abrir y cerrar archivos en un sistema de archivos, así como para manipular otros identificadores del sistema operativo relacionados con archivos, como canalizaciones, entrada estándar y salida estándar amd. Puede especificar que las operaciones de lectura y escritura sean sincrónicas o asincrónicas. FileStream almacena en el búfer la entrada y la salida para obtener un mejor rendimiento.

FileInfoProporciona métodos de instancia para crear, copiar, eliminar, mover y abrir archivos y contribuye a la creación de objetos FileStream.

FileStreamExpone un objeto Stream alrededor de un archivo; se admiten operaciones de lectura y escritura sincrónica y asincrónica. Un objeto Stream proporciona una vista genérica de una secuencia de bytes.

PathEjecuta operaciones en instancias de String que contienen información de rutas de archivos o directorios. Estas operaciones se ejecutan de forma adecuada para múltiples plataformas.

Ejercicio Práctico Nº2

1.- Diseñar el siguiente

formulario.

Página 56

Page 57: aplicacion de vb.net 2003

TxtArchi

TxtTexto

Programación Windows

2.- Luego codificaremos lo siguiente:

'Importamos el namesapce que nos permitira'manejar archivos, carpetas y unidadesImports System.IOPublic Class Form2 'Declaro una variable para manejar Carpetas Dim carpeta As DirectoryInfo 'Declaro una variable para manejar Archivos Dim archivo As FileStream

Private Sub Btncrearcarpeta_Click Try 'Codigo para crear la carpeta carpeta = Directory.CreateDirectory("C:\" & Me.txtcarpeta.Text) MsgBox("Carpeta Creada", MsgBoxStyle.Information, "Manejo de Archivos") Catch ex As Exception MsgBox("La Carpeta ya Existe", MsgBoxStyle.Critical, "Manejo de Archivos") End Try End Sub Private Sub Btncreararchivo_Click Try 'Codigo para crear el archivo archivo = File.Create("C:\" & Me.txtarchivo.Text) MsgBox("Archivo Creada", MsgBoxStyle.Information, "Manejo de Archivos") Catch ex As Exception

End Try End Sub

Private Sub BtnExisArchivo_Click 'Codigo de existencia de un archivo If File.Exists("C:\" & Me.txtarchivo.Text) Then MsgBox("El Archivo ya existe", MsgBoxStyle.Information) Else MsgBox("El Archivo no existe", MsgBoxStyle.Information) End If End Sub

Private Sub BtnExisCarpeta_Click 'Codigo de existencia de una carpeta If Directory.Exists("C:\" & Me.txtcarpeta.Text) Then MsgBox("La Carpeta ya existe", MsgBoxStyle.Information) Else MsgBox("La Carpeta no existe", MsgBoxStyle.Information) End If End SubEnd Class

Ejercicio Práctico Nº3

1.- Diseñar el siguiente formulario.

2.- Luego codificaremos lo siguiente:

'Importamos el namesapce que nos permitira'manejar archivos, carpetas y unidadesImports System.IOPublic Class Form3

Página 57

Page 58: aplicacion de vb.net 2003

Programación Windows

Private Sub btncrear_Click 'Variable de tipo StreamWriter que me permite crear y escribir en un archivo de texto Dim archi As New StreamWriter("C:\" & Me.txtarchi.Text & ".txt") Dim texto As String texto = Me.txtTexto.Text archi.WriteLine(texto) archi.Flush() End SubEnd Class

Ejercicio Práctico Nº4

1.- Diseñar el siguiente formulario.

'Importamos el namesapce que nos permitira'manejar archivos, carpetas y unidadesImports System.IOPublic Class Form4 Private Sub btnAbrir_Click 'Variable que capturara la direccion del archivo a abrir Dim ruta As String 'variable que contendra el texto del archivo a cargar Dim texto As String = "" 'Extension que solo podra abrir el openfiledialog Me.OpenFileDialog1.Filter = "Archivos de Texto (*.txt)|*.txt"

If Me.OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then 'Direccion del archivo capturado por el openfiledialog 'el cual lo contendra la variable ruta = Me.OpenFileDialog1.FileName 'Declaro mi variable que leera el archivo Dim lectura As StreamReader 'Indicamos que archivo va a leer lectura = File.OpenText(ruta)

'Que se ejecute siempre y cuando la variable texto 'contenga algo Do Until IsNothing(texto) 'Cada linea de mi archivo lo pasará a 'la variable texto texto = lectura.ReadLine 'Muestra cada línea de texto de mi archivo 'en la caja de texto Me.txtTexto.Text = Me.txtTexto.Text & texto & Chr(13) & Chr(10) Loop End If End SubEnd Class

Manejo de Archivos y Envió de Mensaje por Correo Electrónico

Creación de un Explorador con System.IO

Clases a utilizar para enviar un mensaje vía Mail

Página 58

Page 59: aplicacion de vb.net 2003

BtnMostrar

Programación Windows

Cuadros de Diálogos (OpenFileDialog, ColorDialog, FontDialog)

Ejercicio Práctico Nº1

(Explorador)

1.- Diseñar el siguiente

formulario.

2.- Luego codificaremos lo siguiente.

'Importación de la Clase Imports System.IOPublic Class Form1

Private Sub BtnMostrar_Click 'Array de tipo Drive va a cargar las unidades de disco Dim unidades() As DriveInfo = DriveInfo.GetDrives 'Variable que recorrera las unidades de disco Dim unidad As DriveInfo Me.lstunidades.Items.Clear() 'Recorre cada una de las unidades y lo agrega al ListBox For Each unidad In unidades Me.lstunidades.Items.Add(unidad.Name) Next End Sub

Private Sub lstunidades_MouseClick Me.lstcarpetas.Items.Clear()

'Variable que captura el nombre de la unidad 'Seleccionada en el ListBox Dim unidad As String = Me.lstunidades.SelectedItem.ToString

'Variable a la cual se le dira de que unidad 'se va a buscar las carpetas existentes Dim directorioraiz As New DirectoryInfo(unidad)

Página 59

Page 60: aplicacion de vb.net 2003

Programación Windows

'Variable de tipo carpeta que recorrera todas las carpetas 'de la unidad indicada Dim directorio As DirectoryInfo

Try For Each directorio In directorioraiz.GetDirectories 'Recorre todas las carpetas y lo va agregando al ListBox Me.lstcarpetas.Items.Add(directorio) Next Catch ex As Exception MsgBox("No Hay Carpetas", MsgBoxStyle.Information) End Try

End Sub

Private Sub lstcarpetas_MouseClick Me.lstarchivos.Items.Clear()

'Variables que capturaran los nombres de la unidad 'y carpeta de la unidad seleccionada Dim unidad, carpeta As String unidad = Me.lstunidades.SelectedItem.ToString carpeta = Me.lstcarpetas.SelectedItem.ToString

'Variable a la cual se le dira de que unidad y carpeta 'se va a buscar los archivos existentes Dim ruta As New DirectoryInfo(Path.Combine(unidad, carpeta))

'Variable de tipo archivo que recorrera los archivos existentes Dim archivo As FileInfo

For Each archivo In ruta.GetFiles 'Recorre los archivos existentes y los agreag al ListBox Me.lstarchivos.Items.Add(archivo.Name) Next

End Sub

Private Sub lstarchivos_MouseClick Me.lstinformacion.Items.Clear()

'Varibles que almacenaran los nombres de la unidad 'carpeta y archivo seleccionados en los ListBoxs Dim unidad, carpeta, archivo As String unidad = Me.lstunidades.SelectedItem.ToString carpeta = Me.lstcarpetas.SelectedItem.ToString archivo = Me.lstarchivos.SelectedItem.ToString

Página 60

Page 61: aplicacion de vb.net 2003

LstAdjuntar

TxtPara

TxtDe

TxtAsunto BtnQuitar

Programación Windows

'Variable a la cual se le dira de que unidad y carpeta 'se va a buscar el archivo existente. Dim informacion As New FileInfo(Path.Combine(Path.Combine(unidad, carpeta), archivo))

'Se agregara al ListBox la informacion del archivo correspondiente Me.lstinformacion.Items.Add("Nombre:" & informacion.Name) Me.lstinformacion.Items.Add("Tamaño(Bytes): " & informacion.Length) Me.lstinformacion.Items.Add("Fecha de Creación: " & informacion.CreationTime.ToShortDateString) End Sub

End Class

3.- Ejecutaremos y deberá aparecer como se muestra en la figura.

Ejercicio Práctico Nº2 (Envió de Mensaje por Correo)

1.- Diseñar el siguiente formulario.

Página 61

Page 62: aplicacion de vb.net 2003

Programación Windows

2.- Luego codificaremos lo siguiente.

Imports System.Net.Mail

Public Class Form2 'Variable la cual contendra los datos adjuntos 'de nuestro mensaje Dim datosadjuntos As System.Net.Mail.Attachment

Private Sub Form2_Load 'Texto que se cargara al cargar el formulario Me.txtDe.Text = "[email protected]" Me.txtDe.ReadOnly = True End Sub

Private Sub BtnEnviar_Click 'creamos un nuevo mensaje de correo Dim correo As New MailMessage

'De correo.From = New MailAddress(Me.txtDe.Text)

'Para correo.To.Add(Me.txtPara.Text)

'Asunto correo.Subject = txtAsunto.Text

'Archivo Adjunto Dim counter As Integer

'Para poder cargar varios For counter = 0 To lstadjuntar.Items.Count - 1 'Cada archivo ya esta cargado o adjuntado al mensaje

Página 62

Page 63: aplicacion de vb.net 2003

Programación Windows

datosadjuntos = New Net.Mail.Attachment(lstadjuntar.Items(counter)) correo.Attachments.Add(datosadjuntos) Next

'Cuerpo del correo correo.Body = txtMensaje.Text

'Mostrar como HTML correo.IsBodyHtml = True

'Prioridad de el correo correo.Priority = MailPriority.Normal

'acto seguido le indicamos cual servidor utilizaremos 'aquì usaremos por default a gmail y su puerto SMTP Dim smtp As New SmtpClient() smtp.Host = "smtp.gmail.com" smtp.Port = 587 smtp.Credentials = New System.Net.NetworkCredential("[email protected]", "ejemplocorreo") smtp.EnableSsl = True

Try 'listo tenemos la estructura de nuestro mensaje armada ahora enviemosla a nuestro destinatario y listo smtp.Send(correo) MsgBox("Mensaje enviado satisfactoriamente") Catch ex As Exception MsgBox("No se pudo Enviar su Mensaje " & ex.Message) End Try End Sub

Private Sub BtnAdjuntar_Click Dim Counter As Integer

'Muestra un mensaje si el archivo no existe OfdAbrir.CheckFileExists = True OfdAbrir.Title = "Seleccione Archivo(s) que quesee adjuntar"

'Se abre el OpenFileDialog OfdAbrir.ShowDialog()

For Counter = 0 To UBound(OfdAbrir.FileNames)

If Me.lstadjuntar.Items.Contains(Me.OfdAbrir.FileName) = False Then 'Si el archivo no se encuentra en el ListBox lo agrega lstadjuntar.Items.Add(OfdAbrir.FileNames(Counter))

Else 'De lo contrario muestra un mensaje 'si el archivo ya esta adjuntado

Página 63

Page 64: aplicacion de vb.net 2003

Programación Windows

MsgBox("El Archivo ya se cargo", MsgBoxStyle.Information, "Envio de Correo") End If Next End Sub

Private Sub BtnQuitar_Click_1 'Elimina el archivo adjuntado del ListBox If lstadjuntar.SelectedIndex > -1 Then lstadjuntar.Items.RemoveAt(lstadjuntar.SelectedIndex) End If End Sub

Private Sub RbColor_CheckedChanged 'Abre el Cuadro de Color If RbColor.Checked = True Then If Me.ColorDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then Me.txtMensaje.ForeColor = Me.ColorDialog1.Color End If End If End Sub

Private Sub RbFuente_CheckedChanged 'Abre el cuadro de Fuente If RbFuente.Checked = True Then If FontDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then Me.txtMensaje.Font = FontDialog1.Font End If End If End SubEnd Class

Componentes COM, Controles Active X y Interacción con Office

Interacción con Word

Página 64

Page 65: aplicacion de vb.net 2003

Programación Windows

Manejo de Agentes

Manejo de Controles Active X

Interacción con OfficeMicrosoft Office agrupa un conjunto de programas (Word, Excel, Outlook, Power Point y Access,

entre otros) con la finalidad de ayudarle a solucionar sus necesidades ofimáticas. Cada uno de estos

programas expone su propia biblioteca de objetos, denominada también modelo de objetos, que los

desarrolladores pueden utilizar como plataforma para la creación de soluciones personalizadas.

Office permite que los desarrolladores aprovechen las ventajas de un amplio conjunto de

funcionalidades ya creadas.

¿Qué se entiende por modelo de objetos? Es un conjunto de clases que representan objetos que

exponen toda la funcionalidad de la aplicación de la que forman parte. Evidentemente, los modelos

de objetos de Microsoft Office no son parte de Visual Studio. Esto es, sólo estarán disponibles para

programar contra ellos si ha instalado una versión de Office en su sistema.

Los modelos de objetos de las distintas versiones de Office son muy parecidos. Por eso,

independientemente de la versión de office utilizada para esta clase debería de ser capaz de ajustar el

código para adaptarlo a su versión.

Utilización de Word en una AplicaciónEste apartado proporciona una descripción breve de los objetos utilizados normalmente en el modelo

de objetos de Microsoft Office Word 2003 y 2007, tal como Aplication, Document, Selection, etc.

Crear una Instancia de Word

Una aplicación de Visual Basic que quiere acceder a un documento Word, lo primero que debe hacer

es crear una instancia de la aplicación Microsoft Office Word. Esta operación requiere crear un

Página 65

Page 66: aplicacion de vb.net 2003

Programación Windows

nuevo proyecto y agregar al mismo una referencia de la Biblioteca Microsoft Word 12.0 Object

Library, que se encuentra en la pestaña COM.

Una vez realizada este paso ya se puede crear una instancia de la aplicación Word.

Imports Microsoft.Office.Interop………Dim ApWord as New Word.Application

Crear Nuevos Documentos

Para crear un documento nuevo basado en la plantilla Normal.dot hay que invocar al método Add de la colección Documents.

Dim doc as Word.Document=ApWord.Documents.Add()

Cuando se crea un document Nuevo, se agrega a la colección Documents de documentos abiertos de la aplicación Word. Ejecutar Add equivale a hacer clic el botón Nuevo Documento en blanco de la barra de herramientas deWord.

Página 66

Page 67: aplicacion de vb.net 2003

Programación Windows

Visualizar un Documento

Se puede presentar el documento Word asignando a la propiedad Visible del objeto aplicación el valor=True.

ApWord.Visible=True

Abrir Documentos Existentes

Para abrir un documento existente hay que invocar al método Open de la colección Documents pasando el nombre del fichero como argumento:

Dim doc as Word.Document=ApWord.Documents.Open(“C:\XXX\midocumento.doc”)

Este método devuelve una referencia al documento abierto.

Hacer Referencia al Documento Activo

Para hacer referencia al documento activo se puede utilizar la propiedad ActiveDocument del objeto aplicación.

Dim doc as Word.Document=ApWord.ActiveDocument

Insertar texto en un Documento Word

Existen distintas formas de insertar texto en un documento Word. Quizás, la mas sencilla sea utilizando el método InsertAfter o InsertBefore para insertar texto después o antes de una selección (objeto Selection) o un rango (objeto Range). Por ejemplo, las siguientes líneas de código insertan texto al final del contenido del documento activo:

Dim doc as Word.Document=ApWord.ActiveDocument

Doc.Content.InsertAfter(“Texto a insertar”)

Este otro ejemplo inserta texto al final del rango del documento doc. En este ejemplo, el objeto Range (devuelto por la función Range) se refiere a todo el texto del documento doc.

doc.Range.InsertAfter(“Texto a insertar”)

Definir y Seleccionar Rangos

Un rango representa un área de texto contigua en un documento. Esta definido por la posición del carácter inicial y final del mismo.

Se puede utilizar la propiedad Range de muchos objetos (Paragraph, Bookmark, etc.) para devolver el objeto Range definido por los mismos. Por ejemplo, el siguiente código inserta texto al final del primer párrafo de doc, definido en este caso por el objeto rango:

Dim rango as Word.Range=doc.Paragraphs(1).Range

Página 67

Page 68: aplicacion de vb.net 2003

Programación Windows

Rango.InsertAfter(“Texto a Insertar”)

El siguiente ejemplo define un rango desde el inicio del Segundo párrafo hasta el final del tercer párrafo; después, selecciona el texto definido por el mismo y lo corta:

Rango=doc.Range(doc.Paragraphs(2).Range.Start, doc.Paragraphs(3).Range.End)

Rango.Select()

doc.ActiveWindow.Selection.Cut()

Este otro ejemplo borra el texto del document doc. En este caso, el objeto Range se refiere a todo el texto del documento doc.

Doc.Range.Delete()

Dar Formato al Texto en Documentos de Word

Para dar formato al texto de un documento, hay que definir un rango que incluya el texto al cual se refiere aplicar el formato.

El siguiente ejemplo define un rango compuesto por los párrafos segundo y tercero del documento y asigna a ese texto el estilo cursiva.

Rango=doc.Range(doc.Paragraphs(2).Range.Start, doc.Paragraphs(3).Range.End)

Rango.Font.Italic=1

Este otro ejemplo pone en negrita el texto que se añade a continuación del párrafo especificado.

Dim siguienteparrafo as Integer=doc.Paragraphs.Count

doc.Paragraphs(siguienteparrafo).Range.Font.Bold=1

Guardar y Cerrar Documentos

Para guardar un documento se puede utilizar alguno de los métodos siguientes: Save, SaveAs o Close. Los métodos Save y Close sólo afectan al documento para el que son invocados. En cambio, cuando se aplican a la colección Documents, se verán afectados todos los documentos que estén abiertos.

El método Close cierra el documento para el que es invocado o los documentos que estén abiertos de la colección Documents. Por ejemplo, la siguiente sentencia cierra el documento doc.

doc.Close

Página 68

Page 69: aplicacion de vb.net 2003

btnCrear

btnAbrir

CboTamaño

CboFuente

ChkNegrita ChkCursiva

BtnGuardar

TxtDocumento

TxtContenido

Programación Windows

El método Save guarda los cambios efectuados en el objeto Document especificado. Por Ejemplo.

doc.Save()

El método SaveAs permite guardar un documento con otro nombre. Es preciso especificar el nuevo nombre, pero hay otros argumentos opcionales.

doc.SaveAs(“C:\docs\miDocu.doc”)

Ejercicio Práctico Nº1

1.- Diseñar el siguiente formulario.

2.- Los combos contendrán lo siguiente:

3.- Codificaremos lo siguiente:

Página 69

Page 70: aplicacion de vb.net 2003

Programación Windows

'Importamos el namespace para trabajar con officeImports Microsoft.Office.InteropPublic Class Form1 Private Sub btncrear_Click Dim apword As New Word.Application Dim doc As Word.Document = apword.Documents.Add apword.Visible = True End Sub

Private Sub btnabrir_Click Dim apword As New Word.Application Dim ruta As String Me.OpenFileDialog1.Filter = "Documentos de Word (*.doc)|*.doc" If Me.OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then ruta = Me.OpenFileDialog1.FileName End If Dim doc As Word.Document = apword.Documents.Open(ruta) End Sub

Private Sub btnguardar_Click Dim apword As New Word.Application Dim docword As Word.Document = apword.Documents.Add

apword.Visible = False

'Indica que se trabajará con el Documento Activo Dim doc As Word.Document = apword.ActiveDocument

'Inserta el Texto del TextBox en el Documento doc.Content.InsertAfter(Me.txtcontenido.Text)

'Pone en Negrita el Texto a Guardar en el Documento Dim rango As Word.Range = doc.Range(doc.Range.Paragraphs(1).Range.Start, doc.Range.Paragraphs(doc.Paragraphs.Count).Range.End) If Me.chkNegrita.Checked = True Then rango.Font.Bold = 1 End If

'Pone en Cursiva el Texto a Guardar en el Documento If Me.chkcursiva.Checked = True Then rango.Font.Italic = 1 End If

'Indica el Tamaño de Letra If Me.cbotamaño.SelectedIndex <> -1 Then rango.Font.Size = Me.cbotamaño.Text Else rango.Font.Size = 12 End If

'Indica la Fuente o Tipo de Letra

Página 70

Page 71: aplicacion de vb.net 2003

Programación Windows

If Me.cbofuente.SelectedIndex <> -1 Then rango.Font.Name = Me.cbofuente.Text Else rango.Font.Name = "Times New Roman" End If

'Guarda el Documento doc.SaveAs(Me.txtdocumento.Text & ".doc")

'Cierra el Documento doc.Close()

MsgBox("Documento de Word Creado ...!", MsgBoxStyle.Information, "SISE")

End Sub

End Class

Consumo de Bibliotecas COM

En este laboratorio usaremos la librería COM [Microsoft Agent Object] para el uso de los “Agentes de Microsoft”, los mismos que utiliza el Microsoft Office para mostrar ayuda al usuario. Los agentes son pequeños objetos que pueden interactuar con el usuario a base de movimientos, gestos, leyendas e incluso por voz.

Diseñe el siguiente formulario:

Agregue la librería COM Microsoft Agent Control 2.0, para ello ir al Menú Proyecto / Agregar Referencia así como se muestra en la figura:

Página 71

ListBox1

TxtMensaje

BtnMensaje

BtnMovimiento

BtnOcultar

BtnMostrar

Page 72: aplicacion de vb.net 2003

Programación Windows

Luego en la etiqueta COM de la ventana emergente escogeremos Microsoft Agent Control 2.0, así como se muestra en la figura.

Luego escribiremos el siguiente código.

A nivel Formulario:

Public Class Form1 'Declarar los Objetos Dim Agente As New AgentObjects.Agent Dim Muñeco As AgentObjects.IAgentCtlCharacterEx

En el evento Load del Formulario

Private Sub Form1_Load 'Cargar un Character; es decir el muñeco que va a aparecer Agente.Connected = True Agente.Characters.Load("Merlin", "merlin.acs") Muñeco = Agente.Characters("Merlin")

'Bucle para Cargar Todos los Movimientos Dim Mov As Object For Each Mov In Muñeco.AnimationNames Me.ListBox1.Items.Add(Mov) NextEnd Sub

En el evento clic de cada uno de los Botones:

Private Sub btnmostrar_Click 'Muestra el Agente Muñeco.Show() 'Desplaza de Posicion al Agente Muñeco.MoveTo(450, 350) End Sub Private Sub btnocultar_Click 'Oculta al Agente Muñeco.Hide() End Sub Private Sub btnmovimiento_Click 'Ejecuta el Movimiento

Página 72

Page 73: aplicacion de vb.net 2003

Programación Windows

Muñeco.Play(Me.ListBox1.SelectedItem) End Sub Private Sub btnmensaje_Click 'Muestra el Mensaje Muñeco.Speak(Me.txtmensaje.Text) End Sub

Al final ejecutamos la aplicación y se debe de mostrar de la siguiente manera:

Para que el agente Merlin pueda tener voz, es necesario instalar 2 archivos los cuales son:

Microsoft SAPI 4.0 Para que Hablen en español

Un archivo es para el sistema operativo Windows y el otro es para el idioma.Para que puedan trabajar con estos archivos es necesario que su instructor les provea de la carpeta Ayudantes para Microsoft.

Componentes ActiveXVisual Basic.Net permite usar componentes ya definidos en nuestros formularios, dichos componentes no son mas que clases que trabajan de una forma concreta que han sido creados para realizar funciones especificas, dichos componentes, cuentan con eventos y propiedades, dado que son usados como objetos.Estos componentes forman parte de una lista de controles que Visual Basic.Net nos ofrece, así mismo podremos agregar más componentes según nuestro propio requerimientos.

Página 73

Page 74: aplicacion de vb.net 2003

Programación Windows

Explorador WebPara poder comprender mejor el uso de componentes COM realizaremos un programa que nos

permita crear un explorador de paginas web.

1.- Crear un formulario.

2.- Luego como nuestro componente Web no se encuentra en la lista, procederemos a sacarlo de la

lista de elementos.

Pulsamos clic derecho en el menú de Componentes

Elegimos la opción Elegir Elementos

3.- Seleccionaremos el componente Explorador del Web de Microsoft y luego en Aceptar.

Página 74

Page 75: aplicacion de vb.net 2003

Programación Windows

4.- Luego nos mostrara el componente en nuestra lista de Elementos.5.- Después insertamos ese componente usándolo como control a nuestro formulario, también insertaremos un control TextBox y Button.

6.- Luego en el evento clic del botón BtnIr codificamos lo siguiente.

Private Sub btnIr_Click

Me.AxWebBrowser1.Navigate(Me.txtdir.Text.Trim)

End Sub

Reproductor de Música y Video

Página 75

BtnIr

AxWebBrowser

TxtDir

Page 76: aplicacion de vb.net 2003

AxWindowsMediaPlayer1

BtnVideoBtnAudio

Programación Windows

Crearemos un reproductor de música y Video usando componentes COM, dicho programa es muy simple y sencillo el cual te permitirá tener un enfoque claro de los componentes ActiveX.1.- Utilizaremos el componente AxWindowsMediaPlayer, si no lo encontramos en nuestra lista lo agregaremos de nuestra lista de Elegir Elementos.2.- Luego insertamos el control Windows Media Player en nuestro formulario junto con 2 botones uno para el audio y el otro para el video. El formulario deberá quedar de la siguiente manera.

3.- Luego en el evento clic de cada botón codificaremos lo siguiente.

Private Sub btnaudio_Click

Me.AxWindowsMediaPlayer1.URL = "D:\Rocky.mp3"

End Sub

Private Sub btnvideo_Click

Me.AxWindowsMediaPlayer1.URL = "D:\madonna.mpg"

End Sub

Globalización y POO (Programación Orientada a Objetos)

Página 76

Page 77: aplicacion de vb.net 2003

Programación Windows

Clase System.Globalization

Clase CultureInfo

Definición de una Clase

Atributos de una Clase

Propiedades de un a Clase

Métodos de una Clase

System.GlobalizationLa globalización es el proceso de diseño y desarrollo de una aplicación que permite el uso de

interfaces de usuario localizadas y datos regionales para usuarios de varias referencias culturales.

El espacio de nombres System.Globalization contiene clases que definen información relativa a la

referencia cultural, incluido el idioma, el país o región, los calendarios utilizados, los modelos de

formato para las fechas, la moneda y los números y el criterio de ordenación de las cadenas. Estas

clases son útiles para escribir aplicaciones globalizadas (internacionalizadas). Las clases como

StringInfo y TextInfo proporcionan funciones avanzadas de globalización, por ejemplo,

compatibilidad para suplentes y procesamiento de elementos de texto.

En .NET Framework, la clase CultureInfo representa información acerca de una referencia cultural

específica. Esa información incluye el sistema de escritura, los calendarios utilizados, las

convenciones de formato de fecha y hora, las convenciones de números y de moneda, y las reglas de

ordenación.

Antes de empezar la fase de diseño, debe determinar qué referencias culturales admitirá la aplicación.

De este modo, permitirá diseñar características que admitan todas las referencias culturales

identificadas. Además, le posibilitará centrarse en la escritura de código que funcione igual de bien

en todas las referencias culturales admitidas.

El espacio de nombres System.Globalization contiene clases que definen información relativa a la

referencia cultural, incluido el idioma, el país o región, los calendarios utilizados, los modelos de

formato de fecha, moneda y números, y el criterio de ordenación de las cadenas. Utilice esas clases

para simplificar el proceso de desarrollo de una aplicación de uso internacional. Al pasar un objeto

CultureInfo para la referencia cultural actual a los métodos de este espacio de nombres, puede

iniciar el conjunto de reglas y datos correctos para la referencia cultural del usuario actual.

La clase CultureInfo contiene información específica de la referencia cultural, como el idioma, el

país o región, el calendario y las convenciones culturales asociadas a una referencia cultural

específica. Esta clase también proporciona la información necesaria para realizar operaciones

Página 77

Page 78: aplicacion de vb.net 2003

Programación Windows

específicas de la referencia cultural, como la distinción de mayúsculas y minúsculas, el formato de

fechas y números, y la comparación de cadenas.

En el código usado para averiguar el separador decimal (y el de miles) usamos la propiedad

NumberFormat de la propiedad compartida CurrentCulture de la clase CultureInfo, y ese método

devuelve un objeto del tipo NumberFormatInfo que tiene las siguientes propiedades:

Propiedad Descripción

CurrencyDecimalDigits Indica el número de posiciones decimales que se van a utilizar en valores de moneda.

CurrencyDecimalSeparator

Obtiene o establece la cadena que se va a utilizar como separador decimal en valores de moneda.

CurrencyGroupSeparator Obtiene o establece la cadena que separa grupos de dígitos a la izquierda de la coma decimal en valores de moneda.

CurrencyGroupSizes Obtiene o establece el número de dígitos en cada grupo a la izquierda de la coma decimal en valores de moneda.

CurrencyNegativePattern Obtiene o establece el modelo de formato para los valores de moneda negativos.

CurrencyPositivePattern Obtiene o establece el modelo de formato para los valores de moneda positivos.

CurrencySymbol Obtiene o establece la cadena que se va a utilizar como símbolo de moneda.

CurrentInfo Obtiene un NumberFormatInfo de sólo lectura que aplica formato a los valores basándose en la referencia cultural actual.

DigitSubstitution Obtiene o establece un valor que especifica cómo la interfaz gráfica de usuario muestra la forma de un dígito.

InvariantInfo Obtiene la NumberFormatInfo predeterminada de sólo lectura que es independiente de la referencia cultural (invariable).

IsReadOnly Obtiene un valor que indica si NumberFormatInfo es de sólo lectura.

NaNSymbol Obtiene o establece la cadena que representa el valor NaN (no un número) de IEEE.

Página 78

Page 79: aplicacion de vb.net 2003

Programación Windows

NativeDigits Obtiene o establece una matriz de cadenas de dígitos nativos equivalentes a los dígitos occidentales del 0 al 9.

NegativeInfinitySymbol Obtiene o establece la cadena que representa un infinito negativo.

NegativeSign Obtiene o establece la cadena que denota que el número asociado es negativo.

NumberDecimalDigits Obtiene o establece el número de posiciones decimales que se van a utilizar en valores numéricos.

NumberDecimalSeparator Obtiene o establece la cadena que se va a utilizar como separador decimal en valores numéricos.

NumberGroupSeparator Obtiene o establece la cadena que separa grupos de dígitos a la izquierda de la coma decimal en valores numéricos.

NumberGroupSizes Obtiene o establece el número de dígitos en cada grupo a la izquierda de la coma decimal en valores numéricos.

NumberNegativePattern Obtiene o establece el modelo de formato para los valores numéricos negativos.

PercentDecimalDigits Obtiene o establece el número de posiciones decimales que se van a utilizar en valores de porcentaje.

PercentDecimalSeparator Obtiene o establece la cadena que se van a utilizar como separador decimal en valores de porcentaje.

PercentGroupSeparator Obtiene o establece la cadena que separa grupos de dígitos a la izquierda de la coma decimal en valores de porcentaje.

PercentGroupSizes Obtiene o establece el número de dígitos en cada grupo a la izquierda de la coma decimal en valores de porcentaje.

PercentNegativePattern Obtiene o establece el modelo de formato para los valores de porcentaje negativos.

PercentPositivePattern Obtiene o establece el modelo de formato para los valores de porcentaje positivos.

PercentSymbol Obtiene o establece la cadena que se va a utilizar como símbolo de porcentaje.

PerMilleSymbol Obtiene o establece la cadena que se va a utilizar como símbolo

Página 79

Page 80: aplicacion de vb.net 2003

TxtSD

TxtSM

BtnVer

Txtnum

BtnVer

Programación Windows

de por mil.

PositiveInfinitySymbol Obtiene o establece la cadena que representa un infinito positivo.

PositiveSign Obtiene o establece la cadena que denota que el número asociado es positivo.

Nota:

Esta es la tabla usada en la información de Visual Studio 2005, pero todas las propiedades están

disponibles también en las versiones anteriores.

Ejercicio Práctico Nº1

1.- Diseñar el siguiente

formulario.

2.- Luego Codificaremos lo siguiente.

Private Sub btnver_Click 'Variable que agarrara el separador decimal y separador grupal Dim s As String 'Agarra el separador decimal de la configuracion regional del sistema s =System.Globalization.CultureInfo.CurrentCulture.NumberFormat.CurrencyDecimalSeparator Me.TxtSD.Text = s

'Agarra el separador de grupo de la configuracion regional del sistema s = System.Globalization.CultureInfo.CurrentCulture.NumberFormat.CurrencyGroupSeparator Me.TxtSM.Text = s End Sub

Ejercicio Práctico Nº2

1.- Diseñar el siguiente formulario.

Página 80

Page 81: aplicacion de vb.net 2003

Programación Windows

2.- Luego Codificaremos lo siguiente.

Private Sub btnver_Click 'Variable que captura el numero a dar formato regional Dim x As Decimal = Val(Me.txtnum.Text)

'Variable que define el formato regional de la Moneda Dim objculture As Globalization.NumberFormatInfo = New Globalization.CultureInfo("ES-PE").NumberFormat

objculture.CurrencyDecimalDigits = 1 objculture.CurrencyDecimalSeparator = "," objculture.CurrencyGroupSeparator = "." objculture.CurrencySymbol = "S/."

'Mostrar el numero convertido a un formato de Moneda 'El cual contiene la variable de tipo Globalization Me.txtfn.Text = x.ToString("c", objculture)

'Variable que define el formato regional de la Fecha y Hora Dim formatofecha As Globalization.DateTimeFormatInfo = New Globalization.CultureInfo("ES-ES", True).DateTimeFormat Dim dt As New DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day)

Me.txtff.Text = dt.ToString(formatofecha.ShortDatePattern) Me.txtfh.Text = dt.ToString(formatofecha.ShortTimePattern)

End Sub

La Clase CultureInfo

La clase CultureInfo especifica un nombre único para cada referencia cultural basándose en el

estándar RFC 1766. El nombre es una combinación de un código de referencia cultural de dos letras

Página 81

Page 82: aplicacion de vb.net 2003

Programación Windows

en minúscula asociado con un idioma, y un código de referencia cultural secundaria de dos letras en

mayúscula asociado con un país o región. El código de referencia cultural secundaria sigue al código

de referencia cultural, separados por un guión (-). Los ejemplos incluyen "ja-JP" para el japonés de

Japón, "en-US" para el inglés de EE.UU. y "de-DE" para el alemán de Alemania (a diferencia de "de-

AT" para el alemán de Austria). En los casos en los que no haya un código de idioma de dos letras

disponible, se usa el código de tres letras que se deriva de ISO 639-2; por ejemplo, se usa el código

de tres letras"div" para referencias culturales que utilizan el idioma dhivehi. Algunos nombres de

referencias culturales tienen sufijos que especifican la escritura; por ejemplo, "-Cyrl" especifica las

letras del cirílico, "-Latn" especifica las letras del latín.

En este tema se utilizan las expresiones "referencia cultural neutra" y "referencia cultural específica".

Una referencia cultural neutra se especifica únicamente mediante el código de dos dígitos de la

referencia cultural en minúscula. Por ejemplo, "fr" especifica la referencia cultural neutra para el

francés y "de" especifica la referencia cultural neutra para el alemán. Una referencia cultural

específica se identifica por el código de referencia cultural seguido por el código de referencia

cultural secundaria de dos dígitos en mayúscula. Por ejemplo, "fr-FR" especifica francés de Francia y

"fr-CA" especifica francés de Canadá.

A continuación, se incluyen los nombres e identificadores de CultureInfo predefinidos aceptados y

utilizados por esta y otras clases en el espacio de nombres System.Globalization.

Nombre de referencia cultural

Identificador de referencia cultural

Idioma-País/región

"" (cadena vacía) 0x007F referencia cultural invariableaf 0x0036 Afrikaansaf-ZA 0x0436 Afrikaans-Sudáfricasq 0x001C Albanéssq-AL 0x041C Albanés-Albaniaar 0x0001 Árabear-DZ 0x1401 Árabe-Argeliaar-BH 0x3C01 Árabe-Bahreinar-EG 0x0C01 Árabe-Egiptoar-IQ 0x0801 Árabe-Iraqar-JO 0x2C01 Árabe-Jordaniaar-KW 0x3401 Árabe-Kuwaitar-LB 0x3001 Árabe-Líbanoar-LY 0x1001 Árabe-Libiaar-MA 0x1801 Árabe-Marruecosar-OM 0x2001 Árabe-Ománar-QA 0x4001 Árabe-Qatarar-SA 0x0401 Árabe-Arabia Saudíar-SY 0x2801 Árabe-Siriaar-TN 0x1C01 Árabe-Túnez

Página 82

Page 83: aplicacion de vb.net 2003

Programación Windows

ar-AE 0x3801 Árabe-Emiratos Árabes Unidosar-YE 0x2401 Árabe-Yemenhy 0x002B Armeniohy-AM 0x042B Armenio-Armeniaaz 0x002C Azeríaz-AZ-Cyrl 0x082C Azerí (cirílico)-Azerbaiyánaz-AZ-Latn 0x042C Azerí (latino)-Azerbaiyáneu 0x002D Vascoeu-ES 0x042D Vasco-Españabe 0x0023 Bielorrusobe-BY 0x0423 Bielorruso-Bielorrusiabg 0x0002 Búlgarobg-BG 0x0402 Búlgaro-Bulgariaca 0x0003 Catalánca-ES 0x0403 Catalán-Españazh-HK 0x0C04 Chino-Zona administrativa

especial de Hong Kongzh-MO 0x1404 Chino-Zona administrativa

especial de Macaozh-CN 0x0804 Chino-Chinazh-CHS 0x0004 Chino (simplificado)zh-SG 0x1004 Chino-Singapurzh-TW 0x0404 Chino-Taiwánzh-CHT 0x7C04 Chino (tradicional)hr 0x001A Croatahr-HR 0x041A Croata-Croaciacs 0x0005 Checocs-CZ 0x0405 Checo-República Checada 0x0006 Danésda-DK 0x0406 Danés-Dinamarcadiv 0x0065 Dhivehidiv-MV 0x0465 Dhivehi-Maldivasnl 0x0013 Holandésnl-BE 0x0813 Holandés-Bélgicanl-NL 0x0413 Holandés-Países Bajosen 0x0009 Inglésen-AU 0x0C09 Inglés-Australiaen-BZ 0x2809 Inglés-Beliceen-CA 0x1009 Inglés-Canadáen-CB 0x2409 Inglés-Caribeen-IE 0x1809 Inglés-Irlandaen-JM 0x2009 Inglés-Jamaicaen-NZ 0x1409 Inglés-Nueva Zelandaen-PH 0x3409 Inglés-Filipinasen-ZA 0x1C09 Inglés-Sudáfricaen-TT 0x2C09 Inglés-Trinidad y Tobago

Página 83

Page 84: aplicacion de vb.net 2003

Programación Windows

en-GB 0x0809 Inglés-Reino Unidoen-US 0x0409 Inglés-Estados Unidosen-ZW 0x3009 Inglés-Zimbabueet 0x0025 Estonioet-EE 0x0425 Estonio-Estoniafo 0x0038 Feroésfo-FO 0x0438 Feroés-Islas Feroefa 0x0029 Persafa-IR 0x0429 Persa-Iránfi 0x000B Finlandésfi-FI 0x040B Finlandés-Finlandiafr 0x000C Francésfr-BE 0x080C Francés-Bélgicafr-CA 0x0C0C Francés-Canadáfr-FR 0x040C Francés-Franciafr-LU 0x140C Francés-Luxemburgofr-MC 0x180C Francés-Mónacofr-CH 0x100C Francés-Suizagl 0x0056 Gallegogl-ES 0x0456 Gallego-Españaka 0x0037 Georgianoka-GE 0x0437 Georgiano-Georgiade 0x0007 Alemánde-AT 0x0C07 Alemán-Austriade-DE 0x0407 Alemán-Alemaniade-LI 0x1407 Alemán-Liechtensteinde-LU 0x1007 Alemán-Luxemburgode-CH 0x0807 Alemán-Suizael 0x0008 Griegoel-GR 0x0408 Griego-Greciagu 0x0047 Gujaratigu-IN 0x0447 Gujarati-Indiahe 0x000D Hebreohe-IL 0x040D Hebreo-Israelhi 0x0039 Hindihi-IN 0x0439 Hindi-Indiahu 0x000E Húngarohu-HU 0x040E Húngaro-Hungríaes 0x000F Islandésis-IS 0x040F Islandés-Islandiaid 0x0021 Indonesioid-ID 0x0421 Indonesio-Indonesiait 0x0010 Italianoit-IT 0x0410 Italiano-Italiait-CH 0x0810 Italiano-Suizaja 0x0011 Japonés

Página 84

Page 85: aplicacion de vb.net 2003

Programación Windows

ja-JP 0x0411 Japonés-Japónkn 0x004B Kannadakn-IN 0x044B Kannada-Indiakk 0x003F Kazajokk-KZ 0x043F Kazajo-Kazajistánkok 0x0057 Konkanikok-IN 0x0457 Konkani-Indiako 0x0012 Coreanoko-KR 0x0412 Coreano-Coreaky 0x0040 Kirguísky-KZ 0x0440 Kirguís-Kazajistánlv 0x0026 Letónlv-LV 0x0426 Letón-Letonialt 0x0027 Lituanolt-LT 0x0427 Lituano-Lituaniamk 0x002F Macedoniomk-MK 0x042F Macedonio-Antigua República

Yugoslava de Macedoniams 0x003E Malayoms-BN 0x083E Malayo-Brunéi Darussalamms-MY 0x043E Malayo-Malasiamr 0x004E Marathimr-IN 0x044E Marathi-Indiamn 0x0050 Mongolmn-MN 0x0450 Mongol-Mongoliano 0x0014 Noruegonb-NO 0x0414 Noruego (Bokmal)-Noruegann-NO 0x0814 Noruego (Nynorsk)-Noruegapl 0x0015 Polacopl-PL 0x0415 Polaco-Poloniapt 0x0016 Portuguéspt-BR 0x0416 Portugués-Brasilpt-PT 0x0816 Portugués-Portugalpa 0x0046 Punjabipa-IN 0x0446 Punjabí-Indiaro 0x0018 Rumanoro-RO 0x0418 Rumano-Rumaníaru 0x0019 Rusoru-RU 0x0419 Ruso-Rusiasa 0x004F Sánscritosa-IN 0x044F Sánscrito-Indiasr-SP-Cyrl 0x0C1A Serbio (cirílico)-Serbiasr-SP-Latn 0x081A Serbio (latino)-Serbiask 0x001B Eslovacosk-SK 0x041B Eslovaco-Eslovaquiasl 0x0024 Esloveno

Página 85

Page 86: aplicacion de vb.net 2003

Programación Windows

sl-SI 0x0424 Esloveno-Esloveniaes 0x000A Españoles-AR 0x2C0A Español-Argentinaes-BO 0x400A Español-Boliviaes-CL 0x340A Español-Chilees-CO 0x240A Español-Colombiaes-CR 0x140A Español-Costa Ricaes-DO 0x1C0A Español-República Dominicanaes-EC 0x300A Español-Ecuadores-SV 0x440A Español-El Salvadores-GT 0x100A Español-Guatemalaes-HN 0x480A Español-Hondurases-MX 0x080A Español-Méxicoes-NI 0x4C0A Español-Nicaraguaes-PA 0x180A Español-Panamáes-PY 0x3C0A Español-Paraguayes-PE 0x280A Español-Perúes-PR 0x500A Español-Puerto Ricoes-ES 0x0C0A Español-Españaes-UY 0x380A Español-Uruguayes-VE 0x200A Español-Venezuelasw 0x0041 Suajilisw-KE 0x0441 Suajili-Keniasv 0x001D Suecosv-FI 0x081D Sueco-Finlandiasv-SE 0x041D Sueco-Sueciasyr 0x005A Siriosyr-SY 0x045A Sirio-Siriata 0x0049 Tamilta-IN 0x0449 Tamil-Indiatt 0x0044 Tártarott-RU 0x0444 Tártaro-Rusiate 0x004A Telugute-IN 0x044A Telugu-Indiath 0x001E Tailandésth-TH 0x041E Tailandés-Tailandiatr 0x001F Turcotr-TR 0x041F Turco-Turquíauk 0x0022 Ucranianouk-UA 0x0422 Ucraniano-Ucraniaur 0x0020 Urdúur-PK 0x0420 Urdú-Pakistánuz 0x0043 Uzbekouz-UZ-Cyrl 0x0843 Uzbeko (cirílico)-Uzbekistánuz-UZ-Latn 0x0443 Uzbeko (latino)-Uzbekistánvi 0x002A Vietnamita

Página 86

Page 87: aplicacion de vb.net 2003

Programación Windows

vi-VN 0x042A Vietnamita-Vietnam

Ejercicio Práctico Nº3

1.- Diseñar el siguiente formulario.

2.- Luego codificaremos lo siguiente.

Imports SystemImports System.GlobalizationPublic Class Form3

Dim colculturas As New Collection Dim nvalor As Double = 1234.56

Sub filtrarcombo() Dim ci As CultureInfo For Each ci In CultureInfo.GetCultures(CultureTypes.AllCultures) If Len(ci.ToString) > 4 Then colculturas.Add(ci) End If Next Me.cboculturas.DataSource = colculturas End Sub

Private Sub Form3_Load Me.txtfecha.Text = Now.ToString("d", CultureInfo.InstalledUICulture) Me.txtmoneda.Text = nvalor.ToString("c", CultureInfo.InstalledUICulture) filtrarcombo() End Sub

Private Sub BtnMostrar_Click Try Dim newdate As New Date Dim cultura As String Dim indice As Integer indice = Me.cboculturas.SelectedIndex cultura = Me.cboculturas.ValueMember Me.txtfecha.Text = Now.ToString("d", colculturas(indice + 1)) Me.txtmoneda.Text = nvalor.ToString("c", colculturas(indice + 1)) Catch ex As Exception MsgBox("No se Reconoce", MsgBoxStyle.Information, "SISE") Me.txtfecha.Clear() Me.txtmoneda.Clear() End Try End Sub

Página 87

CboCulturas

TxtFecha

TxtMoneda

BtnMostrar

Page 88: aplicacion de vb.net 2003

Programación Windows

End Class

Programación Orientada a Objetos (POO)

En Visual Basic Net un objeto puede definirse como cualquier cosa, ente o entidad física o lógica de

información.

En este sentido todos los elementos materiales o inmateriales pueden clasificarse como objetos.

En particular cualquier objeto considerado presenta los siguientes tres elementos:

a) Propiedades: Son las características propias de un objeto estas propiedades o atributos son los que

permiten diferenciar o individualizar un objeto de otro objeto ya sea de la misma o diferente clase o

categoría.

Las propiedades más generales son forma, color, tamaño, peso, etc., pero ya en particular:

Chamarra → Marca, material, precio, color, tamaño, etc.

Alumno → Matricula, nombre, edad, domicilio, etc.

Gato → Raza, nombre, color, edad, etc.

Ventana Windows–>Tamaño, Color, Font, etc.

b) Métodos: Son las conductas propias de la naturaleza del objeto.

Así como las propiedades son el ser (que es) del objeto, los métodos son el hacer (que hacer) del

objeto.

Ejemplo de métodos:

Gato —> Maullar (), comer (), correr (), saltar (), etc.

Alumno—> Estudiar (), comer (), asistir clase (), pintear ()

Cuaderno–>Es escrito (), es rayado (), es borrado (), etc.

Ventana Windows–> Abrir (), cerrar (), maximizar (), etc.

c) Eventos: Es la relación (de varias maneras) que se puede dar entre dos objetos ya sean de la misma

o diferente clase.

Un evento se manifiesta como una interacción entre dos objetos, en general al momento de la

relación al mismo tiempo se dará una reacción o respuesta por parte de los dos objetos que se

manifiestan como una serie, cadena o conjuntos de métodos propios que se activan o disparan,

ejemplo:

Evento Relación Métodos que se activan

gato detecta gata detectar maullar(), correr(), oler()

gato detecta perro detectar bufar(), saltar(), correr()

maestro ensena alumno Ensenar pasar lista(), preguntar(), etc.

Ratón clic Windows clic maximizar(), cerrar()

Página 88

Page 89: aplicacion de vb.net 2003

Programación Windows

Ratón dblclk Windows dblclk minimizar(), etc.

Un Programa o un SCRIPT en visual Basic Net se pueden considerar como un conjunto de una o más

páginas o formas donde cada una de ellas contiene un conjunto de objetos, componentes o controles.

Un componente o propiamente dicho un control es un objeto que se especializa en una tarea

especifica por ejemplo hay controles especializados en desplegar textos o mensajes, otros controles

se especializan en desplegar imágenes o videos, otros en manipular directorios o archivos en disco,

etc.

Pero en general tanto las formas como los controles no dejan de ser objetos en programación de

visual Basic y por tanto tienen sus propiedades, métodos y están sujetos a eventos.

En visual Basic Net recordar además que un conjunto de objetos que comparten o contienen

características similares forman la llamada CLASE.

Creación de Propiedades para la Clase

Una propiedad en una clase se define, por normal general, mediante dos elementos: una variable de

propiedad y un procedimiento de propiedad. La variable de propiedad, tal y como su nombre indica,

es una variable con ámbito privado a nivel de la clase, que se encarga de guardar el valor de

propiedad. Por su parte el procedimiento de propiedad o Property, es el encargado de actuar de

puente entre el código cliente y la variable de propiedad, realizando las operaciones de acceso y

asignación de valores a dicha variable.

Por lo tanto, para crear una propiedad en nuestra clase, declararemos en primer lugar una variable

Private, y en segundo lugar un procedimiento de tipo Property, que consta de dos bloques: Get,

para devolver el valor de la variable de la propiedad (podemos usar la palabre clave Return para

devolver el valor); y Set, para asignárselo (aquí debe usar un parámetro con el nombre Value, que

contiene el valor para asignárselo). La sintaxis a emplear se muestra en el siguiente código fuente.

Sintaxis:

[Tipo de Declaración] Property <Nombre> [as <Tipo Dato>]

[[ReadOnly] Get

<Instrucciones>

End Get]

[[WriteOnly] Set (By Val Value [As <Tipo Dato>])

<Instrucciones>

End Set]

End Property

Página 89

Page 90: aplicacion de vb.net 2003

Programación Windows

Ejercicio Práctico Nº4

1.- Crear un Proyecto llamado POO en Visual

2.- Agregar una clase llamada Empleado en el cual crearemos las siguientes propiedades y Métodos.

Public Class Empleado 'Variables de Propiedad Private mvarcodigo As Integer Private mvarnombre As String Private mvarsueldo As Single

'Propiedades Public Property Codigo() As Integer Get Codigo = mvarcodigo End Get Set(ByVal value As Integer) mvarcodigo = value End Set End Property

Public Property Nombre() As String Get Nombre = mvarnombre End Get Set(ByVal value As String) mvarnombre = value End Set End Property

Public Property Sueldo() As Single Get Sueldo = mvarsueldo End Get Set(ByVal value As Single) mvarsueldo = Sueldo End Set End Property

'Metodos Public Sub crearempleado(ByVal vcodigo As Integer, ByVal vnombre As String, ByVal vsueldo As Single) mvarcodigo = vcodigo mvarnombre = vnombre mvarsueldo = vsueldo End Sub

Public Sub actualizarSueldo(ByVal vnuevosueldo As Single) mvarsueldo = vnuevosueldo End Sub

Página 90

Page 91: aplicacion de vb.net 2003

TxtCod

TxtNom

TxtSue

Programación Windows

End Class

3.- Luego Agregaremos otro proyecto al cual llamaremos Probando Clase; para ello ir al Menú Archivo, luego Agregar y elegir Nuevo Proyecto.

4.-Agregaremos la referencia de nuestro proyecto POO en Visual a nuestro proyecto Probando Clase, para ello clic derecho y elegir Referencia.

5.- Diseñaremos el siguiente formulario.

6.- Codificaremos lo siguiente.

Public Class Form1

'Declaracion de la variable que contendra toda la Clase Empleado 'del Proyecto POO en Visual Dim objempleado As New POO_en_Visual.Empleado()

Private Sub BtnCrear_Click 'Se llama al metodo CrearEmpleado objempleado.crearempleado(Me.txtcod.Text, Me.txtnom.Text, Me.txtsue.Text) MsgBox("Datos Guardados...!", MsgBoxStyle.Information, "SISE") End Sub

Página 91

Page 92: aplicacion de vb.net 2003

TxtNom

DateTimePicker

BtnMostrar

LblMensaje

Programación Windows

Private Sub btnactualizar_Click Dim sueldo As Single Dim res As String

res = InputBox("Ingrese Nuevo Sueldo")

If res = "" Then Exit Sub Else sueldo = CDbl(res) End If

'Llamamos al método ActualizarSueldo objempleado.actualizarSueldo(sueldo) MsgBox("Sueldo Actualizado...!", MsgBoxStyle.Information, "SISE") End Sub

Private Sub btnmostrar_Click With objempleado MsgBox("Codigo: " & .Codigo & vbCrLf & "Nombre: " & .Nombre & vbCrLf & "Sueldo: " & .Sueldo, MsgBoxStyle.Information, "SISE") End With End Sub

End Class

Ejercicio Práctico Nº5

1.- Diseñar el siguiente formulario.

2.- Luego agregaremos una clase llamado Persona el cual crearemos las siguientes propiedades y métodos.

Public Class Persona

'Variables de Propiedad Private _nombre As String Private _fechanacimiento As Date

Página 92

Page 93: aplicacion de vb.net 2003

Programación Windows

'Propiedades Public Property nombre() As String Get Return _nombre End Get

Set(ByVal value As String) _nombre = value End Set

End Property

Public Property fechanacimiento() As Date Get Return _fechanacimiento End Get Set(ByVal value As Date) _fechanacimiento = value End Set End Property

'Metodos Public Function edad() As Integer Dim tempedad As String tempedad = Microsoft.VisualBasic.DateDiff(DateInterval.Year, _fechanacimiento, Now()) Return tempedad End Function

End Class

3.- Codificaremos lo siguiente en el evento clic del BtnMostrar

Private Sub btnmostrar_Click

'Variable que contiene la clase Persona Dim opersona As New Persona opersona.nombre = Me.txtnom.Text opersona.fechanacimiento = Me.DateTimePicker1.Value Me.lblMensaje.Text = "La Edad de " & opersona.nombre & " es " & opersona.edad() & " años" End Sub

Ejercicio Práctico Nº6

1.- Agregar una clase llamada Empleado2 y agregaremos los siguientes campos, propiedades y métodos.

Public Class Empleado2 'Campos de la clase Public codigo As Integer

Página 93

Page 94: aplicacion de vb.net 2003

Programación Windows

Public nombre As String Public remuneracion As Double Public CostoXhora As Decimal Public HorasTrabajadas As Integer

'variables por propiedad Private cuentabancaria As String Private entidad As String Private fechaingreso As Date

'Propiedad de Solo Escritura Public WriteOnly Property ctbancaria() As String Set(ByVal value As String) Select Case Microsoft.VisualBasic.Left(value, 4) Case "1111" : entidad = "Banco de Credito" Case "2222" : entidad = "Banco Continental" Case "3333" : entidad = "Banco Interbank" Case "4444" : entidad = "Banco de la Nacion" Case "5555" : entidad = "Caja Municipal" Case Else : entidad = "No Existe Entidad" End Select End Set End Property

'Propiedad de Lectura y Escritura Public Property FechaIng() As Date Get Return fechaingreso End Get Set(ByVal value As Date) fechaingreso = value End Set End Property

'Propiedades de Solo Lectura Public ReadOnly Property banco() As String Get Return entidad End Get End Property

Public ReadOnly Property mesingreso() As String Get Return Format(fechaingreso, "MMMM") End Get End Property

'Funcion que calcula y devuelve el sueldo Public Function sueldo(ByVal horas As Integer) remuneracion = horas * CostoXhora Return remuneracion

Página 94

Page 95: aplicacion de vb.net 2003

txtCodtxtNom

CboCuentaBancaria

DtpFItxtHoras

txtCXHBtnRegistrar

ListView1

Programación Windows

End Function

End Class

2.- Luego diseñamos el siguiente formulario.

3.- Luego en el evento Clic del Botón BtnRegistrar codificaremos lo siguiente:

Private Sub btnregistrar_Click 'Declaramos nuestra variable que contendra 'todo lo que contenga nuestra clase Empleado2 Dim oempleado As New Empleado2

'Campos de la Clase oempleado.codigo = Me.txtcod.Text oempleado.nombre = Me.txtnom.Text 'Propiedad ctbancaria de la clase Empleado2 oempleado.ctbancaria = Me.cbocuentabancaria.Text 'Propiedad FechaIng de la clase Empleado2 oempleado.FechaIng = Me.dtpfi.Value 'Campos de la Clase oempleado.CostoXhora = Me.txtCXH.Text oempleado.HorasTrabajadas = Me.txthoras.Text

'Campo Remuneracion de la Clase Empleado2 y 'Método Sueldo de la clase Empleado2 oempleado.remuneracion = oempleado.sueldo(oempleado.HorasTrabajadas)

Dim vista As New ListViewItem vista = Me.ListView1.Items.Add(oempleado.codigo) vista.SubItems.Add(oempleado.nombre) vista.SubItems.Add(oempleado.banco) vista.SubItems.Add(oempleado.mesingreso) vista.SubItems.Add(oempleado.HorasTrabajadas) vista.SubItems.Add(oempleado.CostoXhora)

Página 95

Page 96: aplicacion de vb.net 2003

Programación Windows

vista.SubItems.Add(oempleado.remuneracion)

End Sub

Programación Orientada a Objetos (POO) - Usando una Librería de Clases

Práctica de Laboratorio

Este laboratorio pretende enseñar como se trabajan con componentes en Visual Basic .Net, primero se verá un laboratorio de cómo crear una Librería de Clases y luego veremos como trabajar con herencia de clases.

Creando y Usando una Librería de Clases

Se va a construir una librería que permita manejar el inventario de productos en almacén y realizar un mantenimiento de estos. Para esto realizar los siguientes pasos:

1.-Elegir un nuevo proyecto “Visual Basic” el cual se llamara POO_en_Visual y agregar una Clase llamada Producto.

Creando Propiedades para la clase Producto

Private mvarCodigo As String Private mvarNombre As String Private mvarPrecio As Single Private mvarStock As Integer

Public Property Codigo() As String Get Codigo = Me.mvarCodigo End Get Set(ByVal value As String) Me.mvarCodigo = value End Set End Property

Public Property Nombre() As String Get Nombre = Me.mvarNombre End Get Set(ByVal value As String) Me.mvarNombre = value End Set End Property

Página 96

Page 97: aplicacion de vb.net 2003

Programación Windows

Public Property Precio() As Single Get Precio = Me.mvarPrecio End Get Set(ByVal value As Single) Me.mvarPrecio = value End Set End Property

Public Property Stock() As Integer Get Stock = Me.mvarStock End Get Set(ByVal value As Integer) Me.mvarStock = value End Set End Property

Creando Métodos para la clase Producto.

Public Sub CrearProducto(ByVal vcodigo As String, ByVal vnombre As String, ByVal vprecio As Single, ByVal vstock As Integer) Me.mvarCodigo = vcodigo Me.mvarNombre = vnombre Me.mvarPrecio = vprecio Me.mvarStock = vstock End Sub

Public Sub ActualizarPrecio(ByVal vOperacionPrecio As Byte, ByVal vTasa As Single) If vOperacionPrecio = 1 Then Me.mvarPrecio = (1 + (vTasa / 100)) * Me.mvarPrecio ElseIf vOperacionPrecio = 2 Then Me.mvarPrecio = (1 - (vTasa / 100)) * Me.mvarPrecio End If End Sub

Public Sub ActualizarStock(ByVal vOperacionStock As Byte, ByVal vCantidad As Integer) If vOperacionStock = 1 Then Me.mvarStock = Me.mvarStock + vCantidad ElseIf vOperacionStock = 2 Then Me.mvarStock = Me.mvarStock - vCantidad End If End Sub

2.- Luego, añadimos una aplicación para Windows que me permita realizar el mantenimiento de productos usando la librería creada.

3.- Para eso seguir los siguientes pasos:

Página 97

Page 98: aplicacion de vb.net 2003

Programación Windows

4.- El proyecto se llamará Probando Clase

5.- Diseñamos un formulario llamado FrmProducto que tenga un TabControl con 3 fichas, una de ingreso de productos, otra de actualización de precios y stock y otra de consulta, diseñadas tal como se muestran las figuras de abajo:

Ficha “Ingreso“ del formulario FRMPRODUCTO

Ficha “Actualización“ del formulario FRMPRODUCTO

Ficha “Consulta“ del formulario FRMPRODUCTO

Página 98

Page 99: aplicacion de vb.net 2003

Programación Windows

Después de realizar el diseño y antes de escribir código, para usar la librería primero debemos hacer una referencia a esta.

Clic derecho sobre nuestro proyecto “Probando Clase” y elegimos agregar Referencia, nos aparecerá una ventana el cual elegiremos la pestaña proyecto y clic sobre el proyecto que contiene nuestra clase “POO_en_Visual”.

Declarar e inicializar una variable objeto de tipo de la clase Producto, tal como sigue:

Dim objproducto As New POO_en_Visual.Producto

Programando en el botón Crear producto:

Private Sub btncrear_Click objproducto.CrearProducto(Me.txtcod_ing.Text, Me.txtnom_ing.Text, Me.txtpre_ing.Text, Me.txtstock_ing.Text) MsgBox("Producto Registrado...!", MsgBoxStyle.Information, "SISE") Me.txtcod_ing.Clear() Me.txtnom_ing.Clear() Me.txtpre_ing.Clear() Me.txtstock_ing.Clear() Me.txtcod_ing.Focus() End Sub

Programando los botones de actualizar precio y stock del producto:

Private Sub btnacpre_Click If Me.rbaupre.Checked = True Then objproducto.ActualizarPrecio(1, Me.txtTasa.Text) ElseIf Me.rbdispre.Checked = True Then objproducto.ActualizarPrecio(2, Me.txtTasa.Text) End If MsgBox("Precio Actualizado...!", MsgBoxStyle.Information, "SISE")

Página 99

Page 100: aplicacion de vb.net 2003

Programación Windows

Me.txtTasa.Clear() End Sub

Private Sub btnacsto_Click If Me.rbausto.Checked = True Then objproducto.ActualizarStock(1, Me.txtcan.Text) ElseIf Me.rbdissto.Checked = True Then objproducto.ActualizarStock(2, Me.txtcan.Text) End If MsgBox("Stock Actualizado...!", MsgBoxStyle.Information, "SISE") Me.txtcan.Clear()

End Sub

Finalmente, mostrando los datos del producto:

Private Sub btnmostrar_Click With objproducto Me.txtcod_con.Text = .Codigo Me.txtnom_con.Text = .Nombre Me.txtpre_con.Text = .Precio Me.txtstock_con.Text = .Stock End With End Sub

Constructores, SobreCarga de Métodos o Polimorfismo, Eventos y Herencia

¿Qué son Constructores?

Definición de Sobrecarga de Métodos

Concepto de Eventos

Herencia de una Clase

Herencia y Sobrecarga

ConstructoresEl punto de inicio de cualquier clase, cuando se crea una instancia en la memoria, es un método

especial al que se le conoce como constructor.

Un constructor no devuelve ningún valor, por tanto en Visual Basic sería un método de tipo Sub

llamado New.

Página 100

Page 101: aplicacion de vb.net 2003

Programación Windows

El primer método que es ejecutado al instanciar un objeto de la clase se denomina constructor. Este

tipo de método resulta útil para tareas de configuración iníciales sobre el objeto.

No es necesario escribir un método constructor en la clase, ya que en el caso de que no exista, el

compilador se encarga de crearlo implícitamente.

Todas las clases de Visual Basic .Net tienen un constructor por defecto que es método “New”, pero

se pueden agregar varios constructores “New” diferenciándose por el número de parámetros.

Sintaxis:

Public Sub New ()

<Instrucciones>

End Sub

Public Sub New ([<Param1>As <Tipo Dato>])

<Instrucciones>

End Sub

Public Sub New ([<Param1>As <Tipo Dato>,<Param2>As <Tipo Dato>])

<Instrucciones>

End Sub

Nota:Es requisito indispensable escribir los métodos constructores al inicio de la clase, de lo contrario no funcionarían.

Ejercicio Práctico Nº1

1.- Crearemos una Clase llamada ClsEmpleado

Public Class ClsEmpleado

Private fecha As Date

Página 101

Page 102: aplicacion de vb.net 2003

BtnMostrar1

BtnMostrar2

BtnMostrar3

Programación Windows

Public Property fechacrea() As Date Get Return fecha End Get Set(ByVal value As Date) fecha = value End Set End Property

'Método Constructor Public Sub New() 'Asignamos un valor inicial 'A una variable de propiedad fecha = Now End Sub

End Class

2.- Luego diseñaremos el siguiente formulario.

3.- En el evento clic del botón BtnMostrar1 codificaremos lo siguiente:

Private Sub btnMostrar_Click

Dim objempleado As New ClsEmpleado MsgBox("El Empleado se creo " & objempleado.fechacrea)

End Sub

4.- Luego crearemos otra Clase llamada ClsEmpleado2

Public Class ClsEmpleado2

Private mvarfechacrea As Date

Public Property fechacrea() As Date

Página 102

Page 103: aplicacion de vb.net 2003

Programación Windows

Get Return mvarfechacrea End Get Set(ByVal value As Date) mvarfechacrea = value End Set End Property

'Método constructor con parámetro Public Sub New(ByVal vfechacrea As Date) 'Asignamos el valor de parámetro 'A una variable de Propiedad mvarfechacrea = vfechacrea End Sub

End Class

5.- En el evento clic del botón BtnMostrar2 codificaremos lo siguiente:

Private Sub btnmostrar2_Click

'Forma de Instanciar un objeto con un constructor parametrizado Dim objempleado2 As New ClsEmpleado2("07/12/2007") MsgBox("El Empleado se creo " & objempleado2.fechacrea)End Sub

Nota: Los constructores también se pueden sobrecargar, es decir, pueden existir varias versiones en

las que cada una de ellas reciba distintos parámetros, en número y/o en tipo.

6.- Luego crearemos otra Clase llamada ClsEmpleado3

Public Class ClsEmpleado3 'Campos de la Clase Public nombre As String Public apellido As String Public Sueldo As Single 'Metodo Constructor Public Sub New(ByVal vnombre As String, ByVal vapellido As String) nombre = vnombre apellido = vapellido End Sub

'Método Constructor SobreCargado Public Sub New(ByVal vnombre As String, ByVal vapellido As String, ByVal vsueldo As Single) nombre = vnombre apellido = vapellido Sueldo = vsueldo End Sub

Página 103

Page 104: aplicacion de vb.net 2003

Programación Windows

End Class

7.- En el evento clic del botón BtnMostrar3 codificaremos lo siguiente:

Private Sub btnmostrar3_Click

Dim objempleado3 As New ClsEmpleado3("Ana", "Castilla", 1200)

MsgBox("El Nombre es: " & objempleado3.nombre & vbNewLine & "Su Apellido es: " & objempleado3.apellido & vbNewLine & "Su Sueldo es: " & objempleado3.Sueldo)

End Sub

Sobrecarga de Métodos o PolimorfismoLa sobrecarga de métodos, es una técnica que consiste en crear varios métodos con idéntico nombre

dentro de la misma clase, distinguiéndose entre sí por su lista de parámetros. Para declarar un método

como sobrecargado, debemos utilizar la palabra clave Overloads después del modificador de ámbito.

Podemos sobrecargar métodos de tipo Sub y Function.

Ejercicio Práctico Nº2

Una situación que podría requerir la sobrecarga de métodos sería la siguiente: la clase

Empleado necesita manejar en diferentes formas, la información que referente al sueldo existe

sobre el empleado.

Por tal motivo, vamos a crear tres métodos con el nombre Sueldo( ), que variarán en su firma,

o protocolo de llamada, y realizarán diferentes tareas, pero todas ellas relacionadas con el

sueldo del empleado.

1.- Crearemos una clase llamado Empleado.

Public Class Empleado

'Campo de la Clase Public nombre As String

'Variable de Propiedad Private mvarsalario As Double

Public Property salario() As Double Get Return mvarsalario End Get Set(ByVal value As Double) mvarsalario = value End Set End Property

'Métodos SobreCargados

Página 104

Page 105: aplicacion de vb.net 2003

TxtNom

TxtSalario

NumericUpDown1

TxtIncentivo

Programación Windows

Public Overloads Sub Sueldo() 'Aqui mostramos el importe del sueldo formateado MsgBox("El sueldo es: " & Format(salario, "#,#.##")) End Sub

Public Overloads Function Sueldo(ByVal vdia As Integer) As String ' aquí mostramos la fecha del mes actual ' en la que se realizará la transferencia ' del sueldo al banco del empleado Dim FechaActual As Date Dim FechaCobro As String FechaActual = Now FechaCobro = CStr(vdia) & "/" & CStr(Month(FechaActual)) & "/" & CStr(Year(FechaActual)) Return FechaCobro End Function

Public Overloads Function Sueldo(ByVal ImporteIncentivo As Double, ByVal TipoIncentivo As String) As Double ' aquí calculamos la cantidad de incentivo ' que se añadirá al sueldo del empleado, ' en función del tipo de incentivo Dim incentivo As Double

' según el tipo de incentivo, ' se descuenta un importe ' de la cantidad del incentivo Select Case TipoIncentivo Case "Viajes" incentivo = ImporteIncentivo - 30 Case "Extras" incentivo = ImporteIncentivo - 15 End Select Return incentivo End Function

End Class

2.- Luego diseñaremos el

siguiente formulario.

Página 105

Page 106: aplicacion de vb.net 2003

Programación Windows

3.- Luego codificaremos lo siguiente:

Private Sub btnmostrar_Click

'Variable que maneja la clase Dim objempleado As New Empleado

objempleado.nombre = Me.txtnom.Text objempleado.salario = CDbl(Me.txtsalario.Text)

'Variables que capturan el resultado Dim s2, s3 As String Dim resincentivo As Double

'llamada al primer método sobrecargado objempleado.Sueldo()

'llamada al segundo método sobrecargado s2 = "El Sueldo se Transferira el dia " & objempleado.Sueldo(Me.NumericUpDown1.Value)

'llamada al tercer método sobrecargado resincentivo = objempleado.Sueldo(Me.txtincentivo.Text, Me.cbotipoinc.Text) s3 = "El Incentivo a pagar será " & CStr(resincentivo)

'Resultado final que se mostrara en un Label Me.lblmensaje.Text = s2 & vbNewLine & s3

End Sub

EventosUn evento es un suceso que le ocurre al objeto y que le indica sobre un cambio en sus atributos o

propiedades. Un evento es necesario para controlar el estado de las propiedades e informar a las

aplicaciones del nuevo estado, para que estas realizacen la acción correspondiente.

Página 106

Page 107: aplicacion de vb.net 2003

Programación Windows

Es fácil entender eventos asociados a objetos visuales como los controles, por ejemplo en el objeto

“button” se tiene el evento “Click” que se desencadena al seleccionar el botón, el evento

“MouseMove” que ocurre al pasar el mouse por el botón, y así hay muchos eventos asociados al

objeto botón; pero cuando trabajamos con clases, los eventos son más abstractos y un poco más

difíciles de entender, ya que podía confundirse con lo métodos.

Para aclarar el concepto de eventos definamos mentalmente una clase llamada “Cuenta” para un

componente llamado “Banco”. Esta clase cuenta tiene propiedades como “NumeroCta”,

“FechaApertura”, “TipoCta”, “NumeroTarjeta”, y “Saldo”. Además tiene métodos como “Depósito”,

“Retiro” y “Transferencia” que modifican el estado del saldo. Cuando hacemos un “Retiro” de

nuestra cuenta donde el monto a retirar supera el “Saldo” se desencadena un evento llamado

“SaldoInsuficiente” y también cuando durante el día hemos retirado mas dl monto permitido se

desencadena el evento “limiteRetiroDiario”.

Para crear un evento en la clase primero declare evento con la sentencia “Event” y luego llámelo con

“RaiseEvent”, tal como se muestra en la sintaxis.

Declaración Sintaxis:

[Tipo Declaración] Event <Nombre> ([Parámetro(s)])

Declaración Llamada:

RaiseEvent <Nombre> ([Parámetro(s)])

Ejercicio Práctico Nº3

1.- Crearemos 2 eventos para una clase llamada Empleado, el cual estos eventos nos informarán

cuando el sueldo es bajo o alto; para nuestra realidad un sueldo será bajo cuando es menor a 500 y

alto cuando sea mayor a 3000.

Public Class Empleado 'Variables de Propiedad Private mvarcodigo As Integer Private mvarnombre As String Private mvarsueldo As Single

'Propiedades Public Property Codigo() As Integer Get Codigo = mvarcodigo End Get Set(ByVal value As Integer) mvarcodigo = value End Set

Página 107

Page 108: aplicacion de vb.net 2003

TxtCod

TxtNom

Programación Windows

End Property

Public Property Nombre() As String Get Nombre = mvarnombre End Get Set(ByVal value As String) mvarnombre = value End Set End Property

Public Property Sueldo() As Single Get Sueldo = mvarsueldo End Get Set(ByVal value As Single) mvarsueldo = Sueldo End Set End Property

'Metodos Public Sub crearempleado(ByVal vcodigo As Integer, ByVal vnombre As String, ByVal vsueldo As Single) mvarcodigo = vcodigo mvarnombre = vnombre mvarsueldo = vsueldo ‘El procedimiento creado el cual maneja los eventos lo llamaremos chequearsueldo() End Sub

Public Sub actualizarSueldo(ByVal vnuevosueldo As Single) mvarsueldo = vnuevosueldo ‘El procedimiento creado el cual maneja los eventos lo llamaremos chequearsueldo() End Sub

'Creamos eventos Public Event SueldoBajo() Public Event SueldoAlto()

'Crearemos un procedimiento el cual 'desencadenara un evento de acuerdo 'a la condicion establecida Sub chequearsueldo() If mvarsueldo < 500 Then RaiseEvent SueldoBajo() ElseIf mvarsueldo > 3000 Then RaiseEvent SueldoAlto() End If End SubEnd Class

2.- Luego diseñaremos el siguiente formulario.

Página 108

Page 109: aplicacion de vb.net 2003

Programación Windows

3.- Codificaremos lo siguiente.

Public Class FrmProducto

'Declaracion de la variable que contendra toda la Clase Empleado 'del Proyecto POO en Visual 'Pero como nuestra clase maneja 2 eventos 'Se declara de la siguiente manera para poder usar los eventos creados Private WithEvents objempleado As New Empleado()

Private Sub BtnCrear_Click 'Se llama al metodo CrearEmpleado objempleado.crearempleado(Me.txtcod.Text, Me.txtnom.Text, Me.txtsue.Text) MsgBox("Datos Guardados...!", MsgBoxStyle.Information, "SISE") End Sub

Private Sub btnactualizar_Click Dim sueldo As Single Dim res As String

res = InputBox("Ingrese Nuevo Sueldo")

If res = "" Then Exit Sub Else sueldo = CDbl(res) End If

'Llamamos al método ActualizarSueldo objempleado.actualizarSueldo(sueldo) MsgBox("Sueldo Actualizado...!", MsgBoxStyle.Information, "SISE") End Sub

Private Sub btnmostrar_Click With objempleado MsgBox("Codigo: " & .Codigo & vbCrLf & "Nombre: " & .Nombre & vbCrLf & "Sueldo: " & .Sueldo, MsgBoxStyle.Information, "SISE") End With End Sub 'Crearemos 2 procedimientos el cual cada uno 'indica lo que hara cada evento

Página 109

Page 110: aplicacion de vb.net 2003

Programación Windows

'Al evento lo llamaremos con Handles Public Sub Sbajo() Handles objempleado.SueldoBajo Me.txteventosueldo.ForeColor = Color.Green Me.txteventosueldo.Text = objempleado.Nombre + " tiene un Sueldo Bajo" End Sub

Public Sub SAlto() Handles objempleado.SueldoAlto Me.txteventosueldo.ForeColor = Color.Blue Me.txteventosueldo.Text = objempleado.Nombre + " tiene un Sueldo Alto" End SubEnd Class

Herencia de Clases

Introducción a la Herencia de Clases

La parte principal de la Programación Orientada a Objetos (POO) es la herencia de clases, es decir, la

característica de definir una clase que sirve de base para otras clases derivadas, las clases derivadas

tendrán los miembros de la clase base: propiedades, métodos, eventos, etc.

Los miembros heredados por la clase derivada pueden sobre escribirse e implementarse de otra

forma, además la clase derivada puede tener sus propios miembros y servir de clase base para otras

clases, lográndose la reutilización de objetos a través de la herencia.

Otra forma de herencia es a través del polimorfismo, que es una característica POO que consiste en

definir una Clase Abstracta con propiedades y métodos que serán implementados de diferentes

formas por otras clases, es decir, con un mismo nombre de propiedad o método se obtiene

funcionalidad distinta de acuerdo al tipo de objeto.

En .Net solo existe herencia simple y no herencia múltiple, es decir, una clase derivada solo puede

heredar de una clase Base. Haciendo una analogía, si a la clase base le llamamos “Padre” y a la clase

derivada le llamamos “Hijo” diríamos que la herencia simple consiste en que un “Hijo” solo puede

tener un solo “Padre”, lo que parece algo natural y coherente.

Si deseamos simular herencia múltiple en Visual Basic .Net recurrimos a las interfaces, que permiten

definir propiedades y métodos en una clase sin código, luego desde una clase se puede implementar

varias interfaces, lográndose una herencia múltiple pero a nivel de definición y no de código, ya que

la implementación será distinta en cada clase.

En general, la herencia de clases permite rehusar código y facilitar el mantenimiento de las

aplicaciones, ya que cuando se desee modificar características de un objeto solo hay que cambiar la

clase adecuada.

Implementando Herencia a una Clase

Para crear una herencia de clases se usa la instrucción Inherits seguida de la clase base de donde se heredarán los miembros para la clase actual (clase derivada). Tal como se muestra debajo.

Página 110

Page 111: aplicacion de vb.net 2003

TxtCod

TxtNom

TxtSue

BtnCrear

TxtVenta

Programación Windows

Sintaxis:

Inherits <Clase Base>

Nota:

Dos observaciones importantes que hay que tener en cuenta son:

1. La instrucción Inherits debe escribirse en la primera línea de la clase derivada

2. Solo puede existir una instrucción Inherits, ya que solo existe herencia simple.

Ejercicio Práctico Nº4

1.- Crearemos a continuación una clase llamada Vendedor que heredará todas sus propiedades, métodos y eventos de clase creada anteriormente llamada Empleado.

Public Class Vendedor 'Esto quiere decir que se heredará de la clase Empleado Inherits Empleado

'Variables de Propiedad Private mvarventa As Single Private mvarcomision As Single

'Propiedades Public Property Venta() As Single Get Return mvarventa End Get Set(ByVal value As Single) mvarventa = value End Set End Property

Public Property Comision() As Single Get Return mvarcomision End Get Set(ByVal value As Single) mvarcomision = value End Set End PropertyEnd Class

2.- Luego diseñaremos el siguiente formulario

Página 111

Page 112: aplicacion de vb.net 2003

Programación Windows

3.- Codificaremos lo siguiente.

Public Class FrmVendedor Dim objvendedor As New Vendedor Private Sub BtnCrear_Click 'Accedemos a los miembros de clase Padre objvendedor.Codigo = Me.txtcod.Text objvendedor.Nombre = Me.txtnom.Text objvendedor.Sueldo = Me.txtsue.Text 'Ahora Accedemos a los miembros de esta clase objvendedor.Venta = Me.txtventa.Text objvendedor.Comision = Me.txtcomi.Text End Sub

Private Sub btnactualizar_Click Dim sueldo As Single Dim res As String

res = InputBox("Ingrese Nuevo Sueldo")

If res = "" Then Exit Sub Else sueldo = CDbl(res) End If

'Llamamos al método ActualizarSueldo de la clase Padre objvendedor.actualizarSueldo(sueldo) MsgBox("Sueldo Actualizado...!", MsgBoxStyle.Information, "SISE") End Sub

Private Sub btnmostrar_Click MsgBox("Codigo: " & objvendedor.Codigo & vbNewLine & _ "Nombre: " & objvendedor.Nombre & vbNewLine & _ "Sueldo: " & objvendedor.Sueldo & vbNewLine & _ "Venta: " & objvendedor.Venta & vbNewLine & _ "Comision: " & objvendedor.Comision) End SubEnd Class

Página 112

Page 113: aplicacion de vb.net 2003

Programación Windows

Herencia y Sobrecarga de MétodosPodemos sobrecargar métodos existentes en una clase base dentro de una clase derivada, para ello

simplemente escribimos la implementación del método sobrecargado utilizando la palabra clave

Overloads, tal y como se ha explicado en anteriores apartados.

Tomemos como ejemplo una clase base Empleado y su clase derivada Administrativo. Cuando

calculamos los incentivos para un empleado, lo hacemos basándonos en una operación sobre el

salario; sin embargo, los incentivos para el administrativo se calculan en base a un número de horas,

por lo que escribimos dos implementaciones del mismo método en cada clase, sobrecargando el

método en la clase Administrativo.

Ejercicio Práctico Nº5

1.- Crearemos la clase base Empleado.

Public Class Empleado 'Campos de la clase Public mvarid As Integer Public mvarnombre As String Public mvarsalario As Single Public mvarincentivo As Single

'Métodos de la clase base Empleado Public Sub calcularincentivo()

' calcular los incentivos en base ' al salario

Me.mvarincentivo = Me.mvarsalario / 10 End Sub

Public Sub verincentivos() MsgBox("Los Incentivos de " & Me.mvarnombre & " son " & Me.mvarincentivo) End Sub

End Class

2.- Luego crearemos la clase derivada Administrativo.

Public Class Administrativo 'Heredamos de la clase Empleado Inherits Empleado

'Sobrecargamos el método calcularincentivo de la clase Empleado Public Overloads Sub calcularincentivo(ByVal vhoras As Integer)

' calcular los incentivos en base a horas

Página 113

Page 114: aplicacion de vb.net 2003

TxtCod

BtnPadre

TxtSalario

BtnHijo

TxtNom

Programación Windows

Me.mvarincentivo = vhoras * 15 End Sub

End Class

3.- Luego diseñaremos el siguiente formulario.

4.- Codificaremos lo siguiente.

Public Class Form1 'Instanciamos la clase base Dim objempleado As New Empleado 'Instanciamos la clase derivada Dim objadministrativo As New Administrativo

Private Sub btnPadre_Click Me.objempleado.mvarid = Me.txtcod.Text Me.objempleado.mvarnombre = Me.txtnom.Text Me.objempleado.mvarsalario = Me.txtsalario.Text Me.objempleado.calcularincentivo() Me.objempleado.verincentivos() End Sub

Private Sub btnhijo_Click Me.objadministrativo.mvarid = Me.txtcod.Text Me.objadministrativo.mvarnombre = Me.txtnom.Text Me.objadministrativo.mvarsalario = Me.txtsalario.Text

Dim horas As Integer Dim res As String res = InputBox("Ingrese Numero de Horas")

If res = "" Then Exit Sub Else horas = CInt(res) End If

Página 114

Page 115: aplicacion de vb.net 2003

Programación Windows

'Llamamos el método sobrecargado de la clase Derivada Me.objadministrativo.calcularincentivo(horas) Me.objadministrativo.verincentivos() End SubEnd Class

Ado .Net Conexiones StringProveedores de Datos - (Consultas Múltiples)

¿Qué es Ado.Net?

¿Qué es un NameSpace?

Ado evoluciona a Ado.Net

Conexiones String

¿Qué es un Proveedor de Datos?

.Data Provider

Connection y DataAdapter

Cómo funciona el DataAdapter

Consultas Simples y Múltiples

¿Qué es Ado.Net?Ado.Net es un modelo de programación basado en estándares que permite crear aplicaciones

distribuidas que accedan a datos compartidos. Por ser una Interfaz de Programación de Aplicaciones

(API), está disponible desde muchas aplicaciones, herramientas de desarrollo, lenguajes de

programación y navegadores de Internet.

Entre el software donde podemos usar Ado.Net tenemos:

Visual Basic.Net

Visual C++.Net

Visual C#

ASP.Net

JScript.Net

¿Qué es un NameSpace de Acceso de Datos?

Hay tres Namespace que puede importar dentro de una aplicación.Net que utiliza ADO.Net. En

primer lugar usará siempre el namespace System.Data, y luego elegir entre System.Data.SqlClient o

System.Data.Oledb, dependiendo del origen de los datos.

Cuando utiliza Ado.Net debe importar el namespace System.Data, para hacerlo debe usar la palabra

clave Imports.

Página 115

Page 116: aplicacion de vb.net 2003

Programación Windows

Imports System.Data

Si esta trabajando con una base de datos SQL Server 2000, también importará el namespace

System.Data.Sqlclient. Si esta trabajando con datos de otros orígenes de datos, necesitará importar el

namespace System.Data.Oledb, para hacerlo debe usar la siguiente sentencia:

Imports System.Data.Sqlclient

Imports System.Data.Oledb

NameSpace Descripción

System.Data Incluye las clases que hacen posible realizar el trabajo

en modo desconectado en la arquitectura de ADO .NET

System.Data.Common Provee las clases e interfaces heredadas que permiten la

implementación de los .NET Data Providers.

System.Data.SqlClient Proveedor para SQL Server.

System.Data.OleDb Proveedor para OLE-DB para NET.

System.Data.SqlTypes Las clases y estructuras nativas de SQL Server

System.Xml Clases, interfases de XML.

Para poder emplear el SQLClient en el editor de codigo de su aplicación debe colocar la siguiente

instrucción:

Página 116

Page 117: aplicacion de vb.net 2003

Programación Windows

ADO à ADO .NETADO evoluciona hacia ADO .NET

Conexiones String en Visual Basic .Net 2005

Conexión Access 2003Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C: \mydatabase.mdb

Conexión a Access 2007Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\myFolder\myAccess2007file.accdb

SQL 2005 Vía Autentificación Windows

Server =myServer; DataBase =myDataBase; Integrated Security=True

Vía Usuario de SQL Server 2005Server =myServer; DataBase =myDataBase; User Id=myUsername; Password=myPassword

Página 117

Page 118: aplicacion de vb.net 2003

PictureBox1btnAccess2003

btnAccess2007

btnSql2005

btnUsuario

lblConecta

Versión 2003 Versión 2007

Programación Windows

1.- Diseñar el Siguiente formulario:

2.- Para realizar la Conexión con Access, se debe de contar con la Base de Datos Neptuno entregada

por el Profesor, en los 2 tipos de versiones guardadas en Access 2003 y Access 2007.

3.- Para Hacer la conexión con Access y SQL se deben de Importar los siguientes NameSpace

respectivamente:

Imports System.Data.OleDb 'Para la conexion Access

Imports System.Data.SqlClient 'Para la conexion con SQL

Estos NameSpace los importamos en Declaraciones Generales, por encima del Public Class

4.- Luego digitar el siguiente código para las diferentes conexiones en sus respectivos botones.

Página 118

Page 119: aplicacion de vb.net 2003

Programación Windows

Private Sub btnaccess2003_Click

Dim cn As New OleDbConnection("Provider=Microsoft.Jet.Oledb.4.0; Data Source=C:\

Neptuno.mdb")

Try

cn.Open()

Me.lblconecta.Text = "Conexion con Access 2003 Satisfactoria..."

Me.lblconecta.Refresh()

Catch ex As Exception

Me.lblconecta.Text = ex.Message

cn.Close()

Finally

cn.Close()

End Try

End Sub

Private Sub btnaccess2007_Click

Me.lblconecta.Text = ""

Dim cn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data

Source=C:\Neptuno.accdb")

Try

cn.Open()

Me.lblconecta.Text = "Conexion con Access 2007 Satisfactoria ..."

Me.lblconecta.Refresh()

Catch ex As Exception

Me.lblconecta.Text = ex.Message

cn.Close()

Finally

cn.Close()

End Try

End Sub

Private Sub btnusuario_Click

Dim cn As New SqlConnection("Server=(Local); DataBase=Northwind; User Id=Castilla;

Password=123")

Página 119

Page 120: aplicacion de vb.net 2003

Programación Windows

Try

cn.Open()

Me.lblconecta.Text = "Conexion a SQL 2005 Mediante el Usuario Castilla es Satisfactoria..."

Me.lblconecta.Refresh()

Catch ex As Exception

Me.lblconecta.Text = ex.Message

cn.Close()

Finally

cn.Close()

End Try

End Sub

Private Sub btnsql2005_Click

Dim cn As New SqlConnection("Server=(Local); DataBase=Northwind; Integrated

Security=True")

Try

cn.Open()

Me.lblconecta.Text = "Conexion a SQL 2005 Satisfactoria..."

Me.lblconecta.Refresh()

Catch ex As Exception

Me.lblconecta.Text = ex.Message

cn.Close()

Finally

cn.Close()

End Try

End Sub

¿Qué son los proveedores de Datos?Los proveedores de datos proporcionan el enlace entre el origen de Datos y el Objeto DataSet. Los

objetos que son proporcionados por los proveedores de datos .Net se listan en la siguiente tabla:

Objetos del proveedor de datos .Net

Propósito

Connection Proporciona la conectividad con el origen de datos

Command Proporciona el acceso para los comandos de Base de

Página 120

Page 121: aplicacion de vb.net 2003

DatabaseDataAdapter

SelectCommand

Programación Windows

Datos

DataAdapter Utiliza el objeto Connection para proporcionar un enlace entre el DataSet y el proveedor de datos. El objeto DataAdapter actualiza los cambios que se han hecho a los datos en el DataSet

.Net Data Provider

Estas clases son específicas para un origen de datos. El .Net Data Provider provee la habilidad de

conectarse al origen de datos, recuperar y administrar datos.

Hay que resaltar que estos componentes son implementados separadamente por cada .Net Data

Provider.

Connection

Esta clase es empleada para representar una conexión hacia un especifico origen de datos.

DataAdapter

Esta clase actúa como un puente entre el origen de datos y el objeto desconectado del DataSet.

Provee 2 interfaces, una a través de la cual permite poblar el DataSet y actualizar la

información en el origen de datos y la otra provee 4 propiedades cada una de tipo command:

SelectCommand, InsertCommand, UpdateCommand y DeleteCommand.

DataAdapter

Página 121

Page 122: aplicacion de vb.net 2003

Connection, Command

DataAdapterBase Datos

SQL

VBDataTableDataSet

SqlClient

1

2

Despachar Datos (Fill)

Programación Windows

.DataSet

Como Actúa el DataAdapter con respecto a una Base de Datos

Página 122

Page 123: aplicacion de vb.net 2003

DatagridView

BtnCargar

Programación Windows

Consultas1.- Diseñamos el siguiente formulario.

2.- Luego en declaraciones generales importamos lo siguiente.

Imports System.Data

Imports System.Data.SqlClient

3.- Luego a nivel formulario creamos la conexión.

Public Class Form1

Dim cn As New SqlConnection("Server=(Local); DataBase=Northwind; Integrated

Security=True")

4.- codificamos lo siguiente en el botón btnCargar

Private Sub Btncargar_Click

Dim da As New SqlDataAdapter("Select * from Products", cn)

Dim ds As New DataSet

da.Fill(ds, "Productos")

Me.DataGridView1.DataSource = ds.Tables("Productos")

End Sub

Página 123

Page 124: aplicacion de vb.net 2003

Programación Windows

5.- Despues cargamos la aplicaión y se debe mostrar de la siguiente manera.

Programación Orientada a Objetos (POO) - Usando una Librería de Herencia

Práctica de Laboratorio

Página 124

Page 125: aplicacion de vb.net 2003

Programación Windows

En este laboratorio vamos a construir una librería de clases para un Instituto Superior Tecnológico que permita matricular a los alumnos en un cierto curso libre dictado por un cierto profesor. Para lo cual realizamos los siguientes pasos.

Trabajando con Herencia de Clases

1.-Elegir un nuevo proyecto “Visual Basic” y una plantilla “Biblioteca de Clases” el cual se llamara “Librería de Clases Herencia”

2.- Crear la clase “Persona”, luego escribir el código siguiente para crear las propiedades: Nombre, FechaNac, Edad y Dirección y el método CrearPersona:

Public Class Persona

Private mvarNombre As String Private mvarFechaNac As Date Private mvarEdad As Byte Private mvarDireccion As String

Public Property Nombre() As String Get Return Me.mvarNombre End Get Set(ByVal value As String) Me.mvarNombre = value End Set End Property

Public Property FechaNac() As Date Get Return Me.mvarFechaNac End Get Set(ByVal value As Date) Me.mvarFechaNac = value End Set End Property

Public ReadOnly Property Edad() As Byte Get Return Me.mvarEdad End Get End Property

Public Property Direccion() As String Get Return Me.mvarDireccion End Get Set(ByVal value As String) Me.mvarDireccion = value

Página 125

Page 126: aplicacion de vb.net 2003

Programación Windows

End Set End Property

Public Sub CrearPersona(ByVal vNombre As String, ByVal vFechaNac As Date, ByVal vDireccion As String) Me.mvarNombre = vNombre Me.mvarFechaNac = vFechaNac Me.mvarDireccion = vDireccion Me.mvarEdad = Convert.ToByte(Date.Today.Year - vFechaNac.Year) End Sub

End Class

2.- Crear la clase “Alumno” que hereda de “Persona”, para lo cual añadimos una clase al componente, y le pondremos como nombre “Alumno”. Luego escribimos el siguiente código.

Public Class Alumno 'Codigo que identifica que va heredar de la clase Persona Inherits Persona

Private mvarCodigo As String Private mvarEspecialidad As String

Public Property Codigo() As String Get Return Me.mvarCodigo End Get Set(ByVal value As String) Me.mvarCodigo = value End Set End Property

Public Property Especialidad() As String Get Return Me.mvarEspecialidad End Get Set(ByVal value As String) Me.mvarEspecialidad = value End Set End Property

Public Sub CrearAlumno(ByVal vNombre As String, ByVal vFechaNac As Date, ByVal vDireccion As String, ByVal vCodigo As String, ByVal vEspecialidad As String) CrearPersona(vNombre, vFechaNac, vDireccion) Me.mvarCodigo = vCodigo Me.mvarEspecialidad = vEspecialidad End SubEnd Class

3.- Crear la clase “Profesor” que también hereda de “Persona”, para lo cual añadimos una clase al componente; y escribimos como nombre “Profesor”. Luego escribimos el siguiente código:

Public Class Profesor

Página 126

Page 127: aplicacion de vb.net 2003

Programación Windows

'Codigo que identifica que va heredar de la clase Persona Inherits Persona

Private mvarCodigo As String Private mvarTipo As String

Public Property Codigo() As String Get Return Me.mvarCodigo End Get Set(ByVal value As String) Me.mvarCodigo = value End Set End Property

Public Property Tipo() As String Get Return Me.mvarTipo End Get Set(ByVal value As String) Me.mvarTipo = value End Set End Property

Public Sub CrearProfesor(ByVal vNombre As String, ByVal vFechaNac As Date, ByVal vDireccion As String, ByVal vCodigo As String, ByVal vTipo As String) CrearPersona(vNombre, vFechaNac, vDireccion) Me.mvarCodigo = vCodigo Me.mvarTipo = vTipo End SubEnd Class

4.- Finalmente crear la clase “Curso”, para lo cual añadimos una clase al componente, y escribimos como nombre “Curso”. Luego escribimos el siguiente código:

Public Class Curso Private mvarCodigo As String Private mvarNombre As String Private mvarTotalHoras As Byte Private mvarCostoTotal As Single Private mvarCostoHora As Single

Public Property Codigo() As String Get Return mvarCodigo

Página 127

Page 128: aplicacion de vb.net 2003

Programación Windows

End Get Set(ByVal value As String) Me.mvarCodigo = value End Set End Property

Public Property Nombre() As String Get Return Me.mvarNombre End Get Set(ByVal value As String) Me.mvarNombre = value End Set End Property

Public Property TotalHoras() As Byte Get Return Me.mvarTotalHoras End Get Set(ByVal value As Byte) Me.mvarTotalHoras = value End Set End Property

Public Property CostoTotal() As Single Get Return Me.mvarCostoTotal End Get Set(ByVal value As Single) Me.mvarCostoTotal = value End Set End Property

Public ReadOnly Property CostoHora() As Single Get Return Me.mvarCostoHora End Get End Property

Public Sub CrearCurso(ByVal vCodigo As String, ByVal vNombre As String, ByVal vTotalHoras As Byte, ByVal vCostoTotal As Single) Me.mvarCodigo = vCodigo Me.mvarNombre = vNombre Me.mvarTotalHoras = vTotalHoras Me.mvarCostoTotal = vCostoTotal Me.mvarCostoHora = Me.mvarCostoTotal / Me.mvarTotalHoras End Sub

2.- Luego, añadimos una aplicación para Windows que me permita realizar la matricula usando la librería de clases creada.

3.- Para eso seguir los siguientes pasos:

Página 128

Page 129: aplicacion de vb.net 2003

Programación Windows

4.- El proyecto se llamará Probando Librería Herencia

5.- Diseñamos un formulario llamado FrmMatricula que tenga un TabControl con 3 fichas, una de ingreso de Datos del Alumno, otra el Curso y por ultimo el Profesor, diseñadas tal como se muestran las figuras de abajo:

Ficha “Alumno“ del formulario FRMMATRICULA

Ficha “Curso“ del formulario FRMMATRICULA

Página 129

Page 130: aplicacion de vb.net 2003

Programación Windows

Ficha “Profesor“ del formulario FRMMATRICULA

Después de realizar el diseño y antes de escribir código, para usar la librería primero debemos hacer una referencia a esta.

Clic derecho sobre nuestro proyecto “Probando Librería Herencia” y elegimos agregar Referencia, nos aparecerá una ventana el cual elegiremos la pestaña proyecto y clic sobre el proyecto que contiene nuestra clase “Librería de Clases Herencia”.

En las declaraciones generales definimos variables objetos para manipular datos del Alumno, Curso y Profesor.

Public objAlumno As New Libreria_de_Clases_Herencia.Alumno Public objCurso As New Libreria_de_Clases_Herencia.Curso Public objProfesor As New Libreria_de_Clases_Herencia.Profesor

Programando en el botón Matricula:

Private Sub btnMatricular_Click

Me.objAlumno.CrearAlumno(Me.txtnomalu.Text, Me.dtpFechaNacAlu.Value, Me.txtdiralu.Text, Me.txtcodalu.Text, Me.CboEspecialidad.Text)

Página 130

Page 131: aplicacion de vb.net 2003

Programación Windows

Me.objCurso.CrearCurso(Me.txtcodcur.Text, Me.cbocurso.Text, Me.txtTotalHoras.Text, Me.txtCostoTotal.Text) Me.objProfesor.CrearProfesor(Me.txtnomprof.Text, Me.dtpfechanacprof.Value, Me.txtdirprof.Text, Me.txtcodprof.Text, Me.cbotipo.Text) MsgBox("Alumno Matriculado...!", MsgBoxStyle.Information, "SISE")

End Sub

Programando en el botón Consultar:

Private Sub btnConsultar_Click

MsgBox("El Alumno(a) " & Me.objAlumno.Nombre & vbNewLine & _ "con " & Me.objAlumno.Edad & " años de edad" & vbNewLine & _ "Con una Especialidad en " & Me.objAlumno.Especialidad & vbNewLine & _ "Esta inscrito en el Curso de " & Me.objCurso.Nombre & vbNewLine & _ "El cual tiene un Costo X Hora de S/." & Me.objCurso.CostoHora & vbNewLine & _ "Sera dictado por el Profesor(a) " & Me.objProfesor.Nombre & vbNewLine & _ "con " & Me.objProfesor.Edad & " años de edad", MsgBoxStyle.Information, "SISE")

End Sub

Finalmente, programamos el botón Salir de la aplicación:

Private Sub btnsalir_Click Me.Close()End Sub

Data Sets,

DataTable y DataRelation ¿Qué es un DataSet?

¿Qué es un DataTable?

DataColumns, DataRows

Página 131

Page 132: aplicacion de vb.net 2003

DataSet

Tables

Columns

Programación Windows

DataRelation Via Código y

Usando Asistente

La Clase DataSetBásicamente, un objeto DataSet va a ser similar a un objeto Recordset de ADO, pero más potente y

complejo. Es el almacén de datos por excelencia en ADO .NET, representando una base de datos en

memoria y desconectada del proveedor de datos, que contiene tablas y sus relaciones.

El objeto DataSet nos proporciona el mejor concepto sobre datos desconectados: una copia en el

cliente de la arquitectura de la base de datos, basada en un esquema XML que la independiza del

fabricante, proporcionando al desarrollador la libertad de trabajo independiente de la plataforma.

Cada tabla contenida dentro de un objeto DataSet se encuentra disponible a través de su propiedad

Tables, que es una colección de objetos System.Data.DataTable. Cada objeto DataTable contiene una

colección de objetos DataRow que representan las filas de la tabla. Y si seguimos con esta analogía

tenemos que decir que cada objeto DataRow, es decir, cada fila, posee una colección de objetos

DataColumn, que representan cada una de las columnas de la fila actual. Existen además, colecciones

y objetos para representan las relaciones, claves y valores por defecto existentes dentro de un objeto

DataSet.

Para poder crear e inicializar las tablas del DataSet debemos hacer uso del objeto DataAdapter, que

posee las dos versiones, es decir, el objeto SqlDataAdapter para SQL Server y OleDbDataAdapter

genérico de OLE DB.

Al objeto DataAdapter le pasaremos como parámetro una cadena que representa la consulta que se va

a ejecutar, y que va a rellenar de datos el DataSet. Del objeto DataAdapter utilizaremos el método

Fill(), que posee dos parámetros; el primero es el DataSet a rellenar de información; y el segundo,

una cadena con el nombre que tendrá la tabla creada dentro del DataSet, producto de la ejecución de

la consulta.

En lo que respecta a las propiedades de la clase DataSet, podemos remarcar las siguientes.

Relations. Esta propiedad devuelve una colección de objetos DataRelation, que representan

todas las relaciones existentes entre las tablas del objeto DataSet.

Tables. Devuelve una colección de objetos DataTable, que representan a cada una de las

tablas existentes dentro del objeto DataSet.

Página 132

Page 133: aplicacion de vb.net 2003

BtnMostrar

DataGridView1

Programación Windows

Un DataTable, almacena datos de forma similar que una tabla en una base de datos, es decir que la

información esta distribuida en un conjunto de registros cada una de ellas esta conteniendo un

conjunto e columnas.

Un DataTable esta constituido por las siguientes colecciones:

Columns, contiene el DataColumn, se define las características como nombre de la

columna, tipos de datos y primary key.

Rows, contiene el DataRow, que representa la información que se quiere manipular.

Constraints, contiene ForeignKeyConstraint y/o UniqueConstraint.

DataColumn

Define el nombre de columna y el tipo de datos que se almacenara. Se puede crear una nueva

columna a través de los siguientes formatos:

DataRow

Para poder poblar un DataTable debemos emplear el objeto DataRow, cada objeto DataRow

puede referenciar a la colección Columns. Para crear un objeto DataRow debe emplear el

metodo NewRow

Realizando Consultas Múltiples

1ra Forma1.- Creamos el diseño para el siguiente formulario.

Página 133

Page 134: aplicacion de vb.net 2003

Programación Windows

2.- Luego hacemos la conexión con SQL, pero antes importamos los namespace.

Imports System.Data

Imports System.Data.SqlClient

Public Class Form2

Dim cn As New SqlConnection("Server=(Local); DataBase=Northwind; Integrated

Security=True")

3.- En botón BtnMostrar codificamos lo siguiente.

Private Sub btnMostrar_Click

'Declaramos los DataAdapter

Dim da1 As New SqlDataAdapter("Select Categoryid,Categoryname from Categories", cn)

Dim da2 As New SqlDataAdapter("Select Productid,Productname,Unitprice from Products", cn)

Dim da3 As New SqlDataAdapter("Select Supplierid,CompanyName, City, Country from

Suppliers", cn)

'Declaramos el DataSet

Dim ds As New DataSet

'Llenamos el DataSet

da1.Fill(ds, "Categoria")

da2.Fill(ds, "Productos")

da3.Fill(ds, "Proveedor")

'Cargamos los DataGridView

Página 134

Page 135: aplicacion de vb.net 2003

BtnMostrar

DataGridView1

DataGridView2

DataGridView3

Programación Windows

Me.DataGridView1.DataSource = ds.Tables("Categoria")

Me.DataGridView2.DataSource = ds.Tables("Productos")

Me.DataGridView3.DataSource = ds.Tables("Proveedor")

End Sub

4.- Luego ejecutamos la aplicación y se debe mostrar

de la siguiente manera.

2da Forma.1.- Agregamos otro formulario con el mismo diseño

que el anterior.

2.- Luego hacemos la conexión con SQL, pero antes importamos los namespace.

Imports System.Data

Imports System.Data.SqlClient

Public Class Form3

Dim cn As New SqlConnection("Server=(Local); DataBase=Northwind; Integrated

Security=True")

3.- En botón BtnMostrar codificamos lo siguiente.

Página 135

Page 136: aplicacion de vb.net 2003

BtnDataSet

LstClientes

Programación Windows

Private Sub BtnMostrar_Click

'Declaramos todo en un DataAdapter

Dim da As New SqlDataAdapter ("Select Categoryid,Categoryname from Categories;" & _

"Select Productid,Productname,Unitprice from Products;" & _

"Select Supplierid,CompanyName, City, Country from Suppliers", cn)

Dim ds As New DataSet

da.Fill(ds)

ds.Tables(0).TableName = "Categoria"

ds.Tables(1).TableName = "Productos"

ds.Tables(2).TableName = "Proveedor"

Me.DataGridView1.DataSource = ds.Tables("Categoria")

Me.DataGridView2.DataSource = ds.Tables("Productos")

Me.DataGridView3.DataSource = ds.Tables("Proveedor")

End Sub

Ejercicio Práctico Nº1

1.- Diseñar el siguiente formulario.

2.- Codificaremos lo siguiente:

'Importacion de los NameSpaceImports System.DataImports System.Data.SqlClientPublic Class Form1 'Declaracion de la cadena de conexion Dim cn As New SqlConnection("Server=(Local); DataBase=Northwind; Integrated Security=SSPI")

Página 136

Page 137: aplicacion de vb.net 2003

CboClientes

LstOrdenes

Programación Windows

Private Sub btnDataset_Click 'Declaracion del DataAdapter Dim da As New SqlDataAdapter("Select * from Customers order by CompanyName", cn) 'Declaracion del DataSet Dim ds As New DataSet 'Filtramos lo que contiene el DataAdapter al DataSet 'En una tabla temporal Customers da.Fill(ds, "Clientes") 'Declaramos una variable de tipo DataRow Dim Fila As DataRow 'La Variable Fila de Tipo DataRow 'Recorrera todas las filas de la tabla de nuestro DataSet 'y las agregara al ListBox For Each Fila In ds.Tables("Clientes").Rows Me.lstclientes.Items.Add(Fila.Item("CompanyName") & " - " & Fila.Item("ContactName") & " - " & Fila.Item("Country")) Next End SubEnd Class

Relaciones entre tablas mediante objetos DataRelationLos objetos DataRelation nos permiten establecer una relación entre dos tablas (objetos DataTable)

de un DataSet, a través de una columna o campo común (objetos DataColumn).

Ejercicio Practico Nº2

1.- Diseñar el siguiente formulario.

2.- Luego Codificaremos lo siguiente:

'Importamos los NameSpaceImports System.DataImports System.Data.SqlClientPublic Class Form2 'Declaramos la cadena de conexion Dim cn As New SqlConnection("Server=(Local); DataBase=Northwind; Integrated Security=SSPI") 'Declaramos nuestros DataAdapters

Página 137

Page 138: aplicacion de vb.net 2003

CboClientes

DataGridView1

Programación Windows

'para traer informacion de las 2 tablas 'a relacionar Dim daClientes As New SqlDataAdapter("Select * from Customers", cn) Dim daOrdenes As New SqlDataAdapter("Select * from Orders", cn) Dim ds As New DataSet

Private Sub Form2_Load 'Llenamos el DataSet en 2 DataTables daClientes.Fill(ds, "Clientes") daOrdenes.Fill(ds, "Ordenes") 'Indicamos la relacion de los 2 DataTables ds.Relations.Add("ClientesOrdenes", ds.Tables("Clientes").Columns("Customerid"), ds.Tables("Ordenes").Columns("Customerid"))

Dim fila As DataRow 'Llenamos el ComboBox For Each fila In ds.Tables("Clientes").Rows Me.cboClientes.Items.Add(fila.Item("CompanyName")) Next End Sub

Private Sub cboClientes_SelectedIndexChanged 'Limpiamos el ListBox Me.LstOrdenes.Items.Clear()

'Variable de tipo DataRow que contendra 'Los registros de la Tabla Primaria (Customers) Dim FilaPadre As DataRow FilaPadre = ds.Tables("Clientes").Rows(Me.cboClientes.SelectedIndex)

'Arrays que contendra los registros de la tabla Hija 'Mediante la Relacion (Customers-Orders) Dim FilasHija() As DataRow FilasHija = FilaPadre.GetChildRows("ClientesOrdenes") Dim Filas As DataRow 'Llenar el listbox con valores de las filas hijas For Each Filas In FilasHija Me.LstOrdenes.Items.Add(Filas.Item("OrderId") & " - " & Filas.Item("OrderDate")) Next End SubEnd Class

Ejercicio Practico Nº3

1.- Diseñar el siguiente formulario.

Página 138

Page 139: aplicacion de vb.net 2003

Programación Windows

2.- Luego codificaremos lo siguiente:

Imports System.DataImports System.Data.SqlClientPublic Class Form3 Dim cn As New SqlConnection("Server=(Local); DataBase=Northwind; Integrated Security=SSPI") Dim daClientes As New SqlDataAdapter("Select * from Customers", cn) Dim daOrdenes As New SqlDataAdapter("Select * from Orders", cn) Dim ds As New DataSet

Private Sub Form3_Load daClientes.Fill(ds, "Clientes") daOrdenes.Fill(ds, "Ordenes") ds.Relations.Add("ClientesOrdenes", ds.Tables("Clientes").Columns("Customerid"), ds.Tables("Ordenes").Columns("Customerid")) Dim fila As DataRow For Each fila In ds.Tables("Clientes").Rows Me.cboClientes.Items.Add(fila.Item("CompanyName")) Next End Sub

Private Sub cboClientes_SelectedIndexChanged

Dim FilaPadre As DataRow FilaPadre = ds.Tables("Clientes").Rows(Me.cboClientes.SelectedIndex)

Dim FilasHija() As DataRow FilasHija = FilaPadre.GetChildRows("ClientesOrdenes")

'Creacion de un DataTable Dim dtRelacion As New DataTable 'Declaracion de un DataColumn Dim columna As DataColumn 'Declaracion de un DataRow Dim fila As DataRow

'Crearemos 2 columnas para nuestro DataTable columna = New DataColumn("Codigo") 'Indicamos el Tipo de Dato para la columna columna.DataType = Type.GetType("System.Int32") 'Agregaremos la columna al DataTable dtRelacion.Columns.Add(columna)

columna = New DataColumn("Fecha Orden") columna.DataType = Type.GetType("System.DateTime") dtRelacion.Columns.Add(columna)

Página 139

Page 140: aplicacion de vb.net 2003

Programación Windows

'Variable que recorrera las FilasHijas Dim Filas As DataRow

For Each Filas In FilasHija 'Se crea una nueva fila en el DataTable fila = dtRelacion.NewRow 'Agregara los registros de los campos de la fila Hija 'En cada columna creada fila("Codigo") = Filas.Item("OrderId") fila("Fecha Orden") = Filas.Item("OrderDate") 'Agregaremos las filas al DataTable dtRelacion.Rows.Add(fila) Next

'Por ultimo mostraremos el contenido del DataTable 'en un DataGridView Me.DataGridView1.DataSource = dtRelacion End SubEnd Class

Relación de 2 Tablas Usando la Herramienta Relation del DataSet

1.- Agregaremos otro formulario al proyecto, y en el nuevo formulario agregaremos 2

SqlDataAdapter, uno para la tabla empleados y el otro para la tabla orders.

En la Tabla Empleado escogeremos los campos EmployeeId, y FirstName.

En la Tabla Orders escogeremos los campos OrderId, OrderDate y EmployeeId.

Al final debe mostrarse los 2 SqlDataAdapter.

2.- Luego seleccionamos los 2 SqlDataAdapter, y generaremos un conjunto de Datos.

3.- Ir al menú Datos / Generar Conjunto de datos.

4.- En la ventana que aparecerá le ponemos un nombre al DataSet que se va generar, luego

escogeremos los 2 SqlDataAdapter.

Página 140

Page 141: aplicacion de vb.net 2003

Programación Windows

5.- Luego en el DataSet generado, clic sobre la flecha negra y escogeremos Diseñador del DataSet.

6.- Nos mostrará una ventana donde aparecerán las dos Tablas, Employees y Orders.

7.- Ahora usaremos la herramienta Relation del DataSet para relacionar esas 2 Tablas.

8.- Al relacionar arrastraremos desde la Tabla Orders hacia la Tabla Employees (es decir de Padre a

Hijo), en este caso la tabla padre va ser Employees y el hijo Orders.

9.- En la ventana que aparecerá se debe mostrar la relación entre ellas por el campo EmplyeeId.

Página 141

Page 142: aplicacion de vb.net 2003

Programación Windows

10.- La relación debe quedar de la siguiente manera.

11.- Luego a nuestro formulario le agregaremos un ListBox y un DataGrid.

12.- En su propiedad DataSource del ListBox, escogeremos el DataSet generado, y en su propiedad

DisplayMember, escogeremos el campo FirstName de la Tabla Employees, pues los nombres de los

empleados son los que se deben de mostrar al cargar mi formulario.

Página 142

Page 143: aplicacion de vb.net 2003

Programación Windows

13.- Luego en su propiedad DataSource del DataGrid cargaremos el DataSet creado, y en su

propiedad DataMember escogeremos la Tabla Orders relacionada con la Tabla Employees.

14.- Luego en el evento Load del Formulario escribiremos el siguiente código para cargar los 2

SqlDataAdapter al DataSet.

Private Sub Form2_Load

Me.SqlDataAdapter1.Fill(Me.DsEmployeesorders1)

Me.SqlDataAdapter2.Fill(Me.DsEmployeesorders1)

End Sub

Página 143

Page 144: aplicacion de vb.net 2003

Programación Windows

15.- Al final ejecutamos y se debe mostrar de la siguiente manera, escogemos un empleado en el

ListBox, y en el Datagrid se debe mostrar las ordenes emitidas por ese empleado.

El Objeto DataView

¿Qué es el Objeto DataView?

¿Para que Sirve?

Propiedad Sort y RowFilter

Navegación de Registros

(Control BindingSource)

DataBinding y BindingContext

Página 144

Page 145: aplicacion de vb.net 2003

Programación Windows

El objeto DataViewEl objeto DataView permite manejar dentro de una aplicación la información que recibe un objeto

DataSet.

La información que recibe un DataSet se almacena en forma predeterminada en un objeto DataTable

y esta la podemos enviar al objeto DataView para manejarla y presentarla de muchas formas.

El objeto DataView se puede enlazar a controles y mostrarla ordenada o filtrada, es decir, crear un

subconjunto de los datos obtenidos.

Una de las formas de crear un objeto DataView es la siguiente:

Dim Nombre as New DataView

Una vez creado el objeto DataView se utiliza su propiedad Table para enviarle información que tiene

el Objeto DataSet mediante su objeto DataTable.

La siguiente instrucción envía el objeto DataView la información que contiene el objeto DataTable

llamado Empleados de DataSet Ds.

MiDataView.Table=Ds.Tables(“Empleados”)

Principales Propiedades del Objeto DataViewAllowDelete : Permite que se pueda eliminar o no registros del DataView

AllowEdit: Permite que se pueda editar la información del DataView

AllowAddNew: Permite que pueda o no agregar nuevos registros al DataView.

Count: Devuelve la cantidad de registros que contiene el DataView

Item: Permite acceder a la información de una fila del DataView. La primera fila tiene el número 0

(cero). Para acceder a la información de una columna, podemos usar también la propiedad Item de

esta propiedad utilizando el número de la columna o su nombre. La primera columna tiene el número

0 (cero).

RowFilter: Esta propiedad se utiliza cuando deseamos seleccionar los registros del DataView. Aquí

se escribe la condición que deben cumplir los registros.

Por Ejemplo:

La siguiente instrucción sólo selecciona en el DataView las personas cuyo nombre empieza con Ca:

MiDataView.RowFilter=”Nombre like ‘Ca%’”

Sort: Esta propiedad se utilize para indicar la columna por la cual se debe de ordenar la información

del DataView.

Por ejemplo, la siguiente instrucción ordena por la columna Nombre la información del DataView.

MiDataView.Sort=”Nombre”

Página 145

Page 146: aplicacion de vb.net 2003

Programación Windows

Ejercicio Práctico Nº1

1.- Diseñar el siguiente Formulario.

2.- Luego codificaremos lo siguiente:

Imports System.DataImports System.Data.SqlClient

Public Class Form1 'Declaro mi cadena de conexión Dim cn As New SqlConnection("Server=(Local); DataBase=Northwind; Integrated Security=SSPI") 'Declaro mi DataAdapter Dim da As New SqlDataAdapter("Select * from Products", cn) 'Declaro mi DataSet Dim ds As New DataSet 'Declaro mi vista Dim midataview As New DataView

Private Sub BtnMostrar_Click da.Fill(ds, "Productos") 'Le asigno una tabla midataview.Table = ds.Tables("Productos") 'Ordena los registros por el campo Productname midataview.Sort = "ProductName" Me.DataGridView1.DataSource = midataview Me.lbltotal.Text = "Son " & midataview.Count & " registros" End Sub

Private Sub DataGridView1_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGridView1.DoubleClick 'Si la fila que selecciono Si contiene algo entonces... If Not IsDBNull(Me.DataGridView1.SelectedCells(0).Value) Then Me.txtproducto.Text = midataview.Item(Me.DataGridView1.CurrentRow.Index).Item("Productname") Me.txtprecio.Text = midataview.Item(Me.DataGridView1.CurrentRow.Index).Item("Unitprice") Me.txtStock.Text = midataview.Item(Me.DataGridView1.CurrentRow.Index).Item("UnitsInStock") End If End SubEnd Class

Página 146

BtnMostrar

LblTotal

TxtProducto

TxtStock

TxtPrecio

Page 147: aplicacion de vb.net 2003

BtnCon1

BtnCon2

DataGridView

Programación Windows

Ejercicio Práctico Nº2

1.- Diseñar el siguiente Formulario.

Imports System.DataImports System.Data.SqlClient

Public Class Form2 Dim cn As New SqlConnection("Server=(Local); DataBase=Northwind; Integrated Security=SSPI") Dim da As New SqlDataAdapter("Select Productid,Productname,Unitprice, UnitsInStock from Products", cn) Dim ds As New DataSet Dim dv As New DataView

Private Sub Form2_Load 'Cargamos nuestra Vista da.Fill(ds, "Productos") dv.Table = ds.Tables("Productos") End Sub

Private Sub btnCon1_Click 'Condicion de Filtrado dv.RowFilter = "ProductName like 'C%'" Me.DataGridView1.DataSource = dv End Sub

Private Sub btnCon2_Click 'Condicion de Filtrado dv.RowFilter = "Unitprice=18 and Productname like 'S%'" Me.DataGridView1.DataSource = dv End Sub

End Class

Página 147

Page 148: aplicacion de vb.net 2003

TxtProducto

DataGridView

Programación Windows

Ejercicio Práctico Nº3

1.- Diseñar el siguiente Formulario.

Imports System.DataImports System.Data.SqlClient

Public Class Form3 Dim cn As New SqlConnection("Server=(Local); DataBase=Northwind; Integrated Security=SSPI") Dim da As New SqlDataAdapter("Select Productid,Productname,Unitprice, UnitsInStock from Products", cn) Dim ds As New DataSet Dim dv As New DataView

Private Sub Form3_Load 'Se llena la vista da.Fill(ds, "Productos") dv.Table = ds.Tables("Productos") End Sub

Private Sub txtproducto_TextChanged 'La condicion de filtrado se concaneta o se une 'con lo que se escriba en la caja TxtProducto 'Entonces la condicion de filtrado lo pone la caja de Texto dv.RowFilter = "Productname like '" & Me.txtproducto.Text & "%'" Me.DataGridView1.DataSource = dv End SubEnd Class

Página 148

Page 149: aplicacion de vb.net 2003

Control de un Formulario

BindingSource

Origen de Datos

Programación Windows

Usando el Control BindingSourceEn general, un Objeto BindingSource hace de puente entre el control y el conjunto de datos,

simplificando la conexión control-origen de datos, la actualización del contenido actual, la

notificación de cambios y otros servicios.

Realizada la conexión control-origen de datos, toda interacción con los datos, incluyendo navegación,

ordenación, filtrado y actualizaciones, puede ser llevada a cabo utilizando la funcionalidad del

componente BindingSource.

1.- Agregaremos un control BindingSource, que se encuentra en el grupo Datos del cuadro de

Herramientas

2.- En su propiedad DataSource del BindingSource escogemos la opción Agregar origen de Datos del

Proyecto.

Página 149

Page 150: aplicacion de vb.net 2003

Programación Windows

3.- Aparecerá la siguiente ventana y escogeremos Base de Datos y luego clic en el botón siguiente.

4.- Luego escogemos la conexión hecha en el Explorador de Servidores con la Base de Datos

Northwind.

5.- Luego la ventana que aparece muestra el nombre que se le va a dar a la cadena de conexión.

Página 150

Page 151: aplicacion de vb.net 2003

Programación Windows

6.- Después clic en siguiente y luego escogemos los campos de la tabla que se mostrarán y le

pondremos un nombre al DataSet que se generará en este caso le pondremos DsSuppliers y clic en

Finalizar.

7.- Luego deben de aparecer el BindingSource y el DataSet debajo del Formulario.

8.- Luego en su propiedad DataMember del BindingSource cargaremos la tabla seleccionada.

Página 151

Page 152: aplicacion de vb.net 2003

TxtCodigo

TxtNombre

TxtDireccion

TxtTelefono

BtnPrimero

BtnAnterior

BtnUltimo

BtnSiguiente

TxtRegistro

Programación Windows

9.- Y por defecto se agregará un TableAdapter, que es un adaptador para acceder a la tabla de la Base

de Datos.

10.- Luego creamos el siguiente diseño en el formulario.

11.- Ahora en lazaremos las Cajas de Textos al BindingSource, para ello en su propiedad

DataBinding / Text de las Cajas de Textos, elegiremos el BindingSource y el campo de la tabla que

queremos que se muestre en la Caja de Texto.

Asi lo haremos para las demás Cajas de Textos.

Página 152

Page 153: aplicacion de vb.net 2003

Programación Windows

12.- Luego crearemos el siguiente procedimiento a nivel formulario.

Private Sub mostrarposicion()

Dim itotal As Integer = Me.BindingSource1.Count

Dim ipos As Integer

If itotal = 0 Then

txtregistro.Text = "No Regsitros"

Else

ipos = Me.BindingSource1.Position + 1

txtregistro.Text = ipos.ToString & " de " & itotal.ToString

End If

End Sub

13.- Luego escribiremos el siguiente código para los botones de desplazamiento y para el evento

Load del Formulario

Private Sub Form1_Load

'TODO: esta línea de código carga datos en la tabla 'DsSuppliers.Suppliers' Puede moverla o

quitarla según sea necesario.

Me.SuppliersTableAdapter.Fill(Me.DsSuppliers.Suppliers)

mostrarposicion()

End Sub

Private Sub btnprimero_Click

Me.BindingSource1.MoveFirst()

mostrarposicion()

End Sub

Private Sub btnanterior_Click

Me.BindingSource1.MovePrevious()

mostrarposicion()

End Sub

Private Sub btnsiguiente_Click

Me.BindingSource1.MoveNext()

mostrarposicion()

End Sub

Página 153

Page 154: aplicacion de vb.net 2003

Programación Windows

Private Sub btnultimo_Click

Me.BindingSource1.MoveLast()

mostrarposicion()

End Sub

14.- Por ultimo ejecutamos la aplicación y se debe mostrar como la figura.

DataBinding y BindingContextLos controles que con regularidad se utilizan en aplicaciones  Windows así como en aplicaciones

Web tienen la propiedad DataBinding, es necesario configurar la propiedad de cada control que

contendrá en enlace a los datos, luego para administrar esta se debe utilizar la propiedad

BindingContext de la clase contenedora. Al usar el BindingContext obtiene el

BindingManagerBase que mantiene sincronizados todos los controles enlazados al mismo origen de

datos, se puede utilizar la propiedad Position del BindingManagerBase para especificar el elemento

actualmente seleccionado de una lista.

Por ejemplo, para enlazar una caja de texto con el campo FirsName de la Tabla Empleados

(dtEmpleados) contenida en una DataSet previamente definido utilizo la siguiente instrucción:

txtNombre.DataBindings.Add("Text", dtEmpleados, "FirstName")

Luego para administrar por ejemplo la posición actual o lo que es lo mismo el registro activo se

utiliza la siguiente instrucción:

Me.BindingContext(dtEmpleados).Position = 0

Note en la instrucción anterior que se utiliza ña propiedad BindingContext del formulario, como lo

dicho en líneas arriba, la propiedad Position va a mantener sincronizados todos los controles

enlazados al DataTable dtEmpleados.

Página 154

Page 155: aplicacion de vb.net 2003

txtCodigo

txtproducto

txtprecio

txtstock

btnultimobtnprimero

btnanterior btnsiguienteLblTotal

Programación Windows

Ejemplo:

Realizar el Siguiente Diseño:

Imports System.Data

Imports System.Data.SqlClient

Public Class Form1

Dim cn As New SqlConnection("Server=(Local); DataBase=Northwind; Integrated Security=True")

Dim ds As New DataSet

Sub cuenta()

Dim total As Integer = Me.BindingContext(ds.Tables("Productos")).Count

Dim pos As Integer

If total = 0 Then

Me.lbltotal.Text = "No hay registros"

Else

pos = Me.BindingContext(ds.Tables("Productos")).Position + 1

Me.lbltotal.Text = pos & " de " & total

End If

End Sub

Sub cargar()

Me.txtcodigo.DataBindings.Add("text", ds.Tables("Productos"), "ProductId")

Me.txtproducto.DataBindings.Add("text", ds.Tables("Productos"), "ProductName")

Me.txtprecio.DataBindings.Add("text", ds.Tables("Productos"), "UnitPrice")

Me.txtstock.DataBindings.Add("text", ds.Tables("Productos"), "UnitsInStock")

End Sub

Página 155

Page 156: aplicacion de vb.net 2003

Programación Windows

Private Sub Form1_Load

Dim da As New SqlDataAdapter("Select * from Products", cn)

da.Fill(ds, "Productos")

cargar()

cuenta()

End Sub

Private Sub btnprimero_Click

Me.BindingContext(ds.Tables("Productos")).Position = 0

cuenta()

End Sub

Private Sub btnanterior_Click

Me.BindingContext(ds.Tables("Productos")).Position -= 1

cuenta()

End Sub

Private Sub btnsiguiente_Click

Me.BindingContext(ds.Tables("Productos")).Position += 1

cuenta()

End Sub

Private Sub btnultimo_Click

Me.BindingContext(ds.Tables("Productos")).Position = ds.Tables("Productos").Rows.Count – 1

cuenta()

End Sub

End Class

Consultas con Procedimientos Almacenados con Parámetros

La Clase Command

Búsqueda de Clientes

Consultas de Fechas

Trabajo de Consultas con

parámetros.

Página 156

Page 157: aplicacion de vb.net 2003

Programación Windows

Las clases Command

Establecida una conexión con un almacén de datos, la siguiente operación lógica consiste en enviarle

sentencias para realizar los distintos tipos de operaciones que habitualmente realizamos con los datos.

Las clases Command de ADO .NET serán las usaremos para realizar tales operaciones.

SqlCommand y OleDbCommand, son muy similares al objeto Command existente en ADO. El

objeto Command nos va a permitir ejecutar una sentencia SQL o un procedimiento almacenado sobre

la fuente de datos a la que estamos accediendo.

A través de un objeto Command también podremos obtener un conjunto de resultados del almacén de

datos. En este caso, los resultados se pasarán a otros objetos de ADO .NET, como DataReader o

DataAdapter; estos dos objetos los comentaremos más adelante.

Un objeto Command lo vamos a crear a partir de una conexión ya existente, y va a contener una

sentencia SQL para ejecutar sobre la conexión establecida con el origen de datos.

Entre las propiedades que ofrecen los objetos SqlCommand y OleDbCommand, caben destacar las

siguientes.

CommandText. Contiene una cadena de texto que va a indicar la sentencia SQL o

procedimiento almacenado que se va a ejecutar sobre el origen de los datos.

CommandTimeout. Tiempo de espera en segundos que se va a aplicar a la ejecución de un

objeto Command. Su valor por defecto es de 30 segundos.

CommandType. Indica el tipo de comando que se va a ejecutar contra el almacén de datos,

es decir, indica como se debe interpretar el valor de la propiedad CommadText. Puede tener

los siguientes valores: StoredProcedure, para indicar que se trata de un procedimiento

almacenado; TableDirect se trata de obtener una tabla por su nombre (únicamente aplicable al

objeto OleDbCommand); y Text que indica que es una sentencia SQL. EL valor por defecto

es Text.

Connection. Devuelve el objeto SqlConnection o OleDbConnection utilizado para ejecutar el

objeto Command correspondiente.

Parameters. Colección de parámetros que se pueden utilizar para ejecutar el objeto

Command, esta colección se utiliza cuando deseamos ejecutar sentencias SQL que hacen uso

de parámetros, esta propiedad devuelve un objeto de la clase SqlParameterCollection o un

objeto de la clase OleDbParameterCollection. Estas colecciones contendrán objetos de la

clase SqlParamter y OleDbParameter, respectivamente, para representar a cada uno de los

parámetros utilizados. Estos parámetros también son utilizados para ejecutar procedimientos

almacenados.

Página 157

Page 158: aplicacion de vb.net 2003

BtnMostrar

DataGridView1

DataGridView2

DataGridView3

Programación Windows

Una vez vistas algunas de las propiedades de las clases SqlCommand y OleDbCommand,

vamos a pasar a comentar brevemente los principales métodos de estas clases.

Ejercicio Practico Nº1

En este ejemplo veremos como el Command llama a un procedimiento almacenado creado en la

Base de datos Northwind.

1.- Agregamos un formulario con

el siguiente diseño.

2.- Luego hacemos la conexión

con SQL, pero antes importamos

los namespace.

Imports System.Data

Imports System.Data.SqlClient

Public Class Form2

Dim cn As New SqlConnection("Server=(Local); DataBase=Northwind; Integrated

Security=True")

3.- Después creamos un procedimiento almacenado llamado ListarTablas

CREATE PROCEDURE ListarTablas

AS

Select Categoryid,Categoryname from Categories

Select Productid,Productname,Unitprice from Products

Select Supplierid,CompanyName, City, Country from Suppliers

RETURN

Página 158

Page 159: aplicacion de vb.net 2003

BtnVer

DataGridView

ComboBox

Programación Windows

4.- Luego en el Botón BtnMostrar codificamos lo siguiente.

Private Sub BtnMostrar_Click

Dim comando As New SqlCommand("ListarTablas", cn)

comando.CommandType = CommandType.StoredProcedure

Dim da As New SqlDataAdapter(comando)

Dim ds As New DataSet

da.Fill(ds)

ds.Tables(0).TableName = "Categoria"

ds.Tables(1).TableName = "Producto"

ds.Tables(2).TableName = "Proveedor"

Me.DataGridView1.DataSource = ds.Tables("Categoria")

Me.DataGridView2.DataSource = ds.Tables("Producto")

Me.DataGridView3.DataSource = ds.Tables("Proveedor")

End Sub

Ejercicio Practico Nº2

En este ejemplo trabajaremos con el ComboBox y dos propiedades del mismo:

ValueMember: Sirve para guardar un campo especifico cuando se elige un elemento del

ComboBox.

SelectedValue: Sirve para devolver el valor guardado en la propiedad ValueMember.

1.- Diseñamos el siguiente formulario.

Página 159

Page 160: aplicacion de vb.net 2003

Programación Windows

2.- Luego en declaraciones generales importamos lo siguiente.

Imports System.Data

Imports System.Data.SqlClient

3.- Luego a nivel formulario creamos la conexión.

Public Class Form3

Dim cn As New SqlConnection("Server=(Local); DataBase=Northwind; Integrated

Security=True")

4.- En el evento load del formulario codificamos lo siguiente.

Private Sub Form3_Load

Dim cmd As New SqlCommand("Select * from Categories", cn)

Dim da As New SqlDataAdapter(cmd)

Dim ds As New DataSet

da.Fill(ds, "Categorias")

Me.ComboBox1.DataSource = ds.Tables("Categorias")

Me.ComboBox1.ValueMember = "CategoryId"

Me.ComboBox1.DisplayMember = "CategoryName"

End Sub

Private Sub Btnver_Click

Dim cmd As New SqlCommand("Select * from products where categoryid=" &

Me.ComboBox1.SelectedValue, cn)

Dim da As New SqlDataAdapter(cmd)

Dim ds As New DataSet

da.Fill(ds, "Productos")

Me.DataGridView1.DataSource = ds.Tables("Productos")

End Sub

6.- Por último ejecutamos y se debe de mostrar de la siguiente manera.

Página 160

Page 161: aplicacion de vb.net 2003

Programación Windows

Consultas con Procedimientos Almacenados1ra. Consulta

1.- Crear el siguiente procedimiento almacenado.

CREATE PROCEDURE BuscarClientes

@cliente varchar(20)

AS

select customerid,companyname,city,country

from customers

where companyname like @cliente + '%'

return

2.- Luego diseñar el siguiente formulario:

3.- Hacemos la conexión con la Base de Datos.

Imports System.Data

Imports System.Data.SqlClient

Public Class Form1

Dim cn As New SqlConnection("Server=(Local); DataBase=Northwind; Integrated

Security=True")

4.- En el evento Load del Formulario.

Private Sub Form1_Load

'Da el ancho de las Columnas Automáticamente deacuerdo a sus contenidos

Me.DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells

Dim cmd As New SqlCommand("Select customerid,companyname,city,country from

Customers", cn)

Dim da As New SqlDataAdapter(cmd)

Dim dt As New DataTable

da.Fill(dt)

Me.DataGridView1.DataSource = dt

End Sub

Página 161

Page 162: aplicacion de vb.net 2003

Programación Windows

5.- En el evento TextChange del TxtCliente

Private Sub txtcliente_TextChanged

Dim comando As New SqlCommand("BuscarClientes", cn)

comando.CommandType = CommandType.StoredProcedure

comando.Parameters.Add("@cliente", SqlDbType.NVarChar, 20).Value = Me.txtcliente.Text

Dim da As New SqlDataAdapter(comando)

Dim dt As New DataTable

da.Fill(dt)

Me.DataGridView1.DataSource = dt

End Sub

6.- Luego ejecutar la aplicación y se debe

mostrar de la siguiente manera.

2da. Consulta

1.- Crear el siguiente procedimiento

almacenado.

CREATE PROCEDURE BuscarPorFechas

@fecha datetime

AS

select o.orderid,p.productname,c.companyname,o.orderdate

from orders o

inner join customers c

on o.customerid=c.customerid

inner join [order details] d

on o.orderid=d.orderid

inner join products p

on p.productid=d.productid

where o.orderdate=@fecha

RETURN

2.- Nos conectamos con la Base de Datos

Imports System.Data

Imports System.Data.SqlClient

Página 162

Page 163: aplicacion de vb.net 2003

Programación Windows

Public Class Form2

Dim cn As New SqlConnection("Server=(Local); DataBase=Northwind; Integrated Security=True")

3.- En el evento ValueChanged del DataTimePicker

Private Sub dtpfecha_ValueChanged

Dim cmd As New SqlCommand("BuscarPorFechas", cn)

cmd.CommandType = CommandType.StoredProcedure

cmd.Parameters.Add("@fecha", SqlDbType.DateTime).Value = Me.dtpfecha.Value

Dim da As New SqlDataAdapter(cmd)

Dim ds As New DataSet

da.Fill(ds, "Fecha")

Me.DataGrid1.DataSource = ds.Tables("Fecha")

End Sub

4.- Luego ejecutamos la aplicación.

Entorno Conectado

ExecuteNonQuery y ExecuteScalar -

Mantenimiento de una Tabla

Página 163

Page 164: aplicacion de vb.net 2003

Programación Windows

El Entorno ConectadoDurante mucho tiempo las aplicaciones que requerian el empleo de datos lo hacian a traves de un

entorno conectado de datos, lo cual significa que un usuario y/o aplicacion esta conectado al origen

de datos constantemente.

Un escenario conectado ofrece como beneficio:

Un entorno seguro de facil mantenimiento.

Se puede controlar facilmente la concurrencia.

Pero a su vez este modo de trabajo nos puede presentar algunas desventajas:

Requiere de una conexion de Red Permanente.

Afecta la escabilidad de la aplicación.

Accediendo a Entornos ConectadosEn escenarios conectados los recursos están disponibles hasta cerrar la conexión.

a) Abrir Conexión

b) Ejecutar el Comando

c) Procesar las Filas de un Reader

d) Cerrar el Reader

e) Cerrar la Conexion

Página 164

Page 165: aplicacion de vb.net 2003

Programación Windows

Instrucción Execute NonQueryEsto es lo que nos dice la ayuda de Visual Studio sobre el método ExecuteNonQuery:

Ejecuta una instrucción SQL en un objeto de conexión.

Se puede utilizar ExecuteNonQuery para realizar operaciones de catálogo (por ejemplo,

consultar la estructura de una base de datos o crear objetos de base de datos como tablas) o

para cambiar la información de una base de datos ejecutando las instrucciones UPDATE,

INSERT o DELETE.

Aunque ExecuteNonQuery no devuelva ninguna fila, los parámetros de salida o los valores

devueltos asignados a los parámetros se rellenan con datos.

Para las instrucciones UPDATE, INSERT y DELETE, el valor devuelto corresponde al

número de filas afectadas por el comando. Para los demás tipos de instrucciones, el valor

devuelto es -1.

Abrir y Cerrar una Conexión Ejecutando el SQLCommand

1.- Crearemos el siguiente procedimiento almacenado:

CREATE PROCEDURE CrearTablaContactos

AS

Create table Contactos

(

CodContacto int identity(1,1),

CodEmpleado int not null,

Fecha Datetime

)

RETURN

2.- Luego en nuestro formulario insertaremos un

Button y quedará de la siguiente manera.

3.- Luego hacemos la conexión vía script.

Imports System.Data.SqlClient

Public Class Form1

Dim cn As New SqlConnection("Server=(Local); DataBase=Northwind; Integrated

Security=True")

Página 165

Page 166: aplicacion de vb.net 2003

Programación Windows

4.- Luego en el Button codificamos lo siguiente.

Private Sub Button1_Click

'Lo codificamos dentro de un try Catch para que se maneje un error que

'se pueda cometer, asi tal vez si la tabla ya existe, que me mande un mensaje

Try

Dim comando As New SqlCommand("CrearTablaContactos", cn)

comando.CommandType = CommandType.StoredProcedure

'Abre la conexion

cn.Open()

'ejecuta el SQLCommand

comando.ExecuteNonQuery()

'Muestra mensaje despues de Crear la Tabla

MsgBox("Tabla Contactos Creada Satisfactoriamente", MsgBoxStyle.Information,

"Mensaje")

Catch ex As Exception

'Si la Tabla ya existe que me mande un mensaje

MsgBox("La Tabla Contactos ya Existe", MsgBoxStyle.Information, "Mensaje")

Finally

'Cierra la conexión

cn.Close()

End Try

End Sub

5.- Luego ejecutamos y al dar clic sobre el button se debe mostrar el siguiente mensaje

6.- Si volvemos a dar clic nos debe mostrar el siguiente mensaje.

Página 166

Page 167: aplicacion de vb.net 2003

btnAgregar

btnLimpiar

TxtProveedor

TxtProducto

TxtCategoria

Programación Windows

Insertar Registros a una Tabla

1.- Crear el Siguiente procedimiento almacenado.

CREATE PROCEDURE InsertarProducto

@descripcion varchar(40),

@categoria int,

@proveedor int

AS

Insert into Products(Productname, Categoryid,SupplierID)

values(@descripcion,@categoria,@Proveedor)

RETURN @@identity

2.- Hacemos el siguiente diseño en el formulario.

3.- Hacemos la Conexión.

System.Data.SqlClient

Public Class Form2

Dim cn As New SqlConnection("Server=(Local); DataBase=Northwind; Integrated

Security=True")

4.- Luego en el botón btnAgregar, codificamos lo siguiente:

Private Sub btnagregar_Click

Try

Dim comando As New SqlCommand("InsertarProducto", cn)

comando.CommandType = CommandType.StoredProcedure

comando.Parameters.Add("@descripcion", SqlDbType.NVarChar, 40).Value = Me.txtproducto.Text

comando.Parameters.Add("@categoria", SqlDbType.Int).Value = Val(Me.txtcategoria.Text)

comando.Parameters.Add("@proveedor", SqlDbType.Int).Value = Val(Me.txtproveedor.Text)

Página 167

Page 168: aplicacion de vb.net 2003

Programación Windows

'Asi definimos un parámetro de retorno

Dim prm1 As New SqlParameter("@return_value", SqlDbType.Int)

prm1.Direction = ParameterDirection.ReturnValue

comando.Parameters.Add(prm1)

'Abrir la Conexión

cn.Open()

'Ejecuta el SQLCommand

comando.ExecuteNonQuery()

'Mensaje de Producto Insertado

MsgBox("Se ha Insertado un Producto con Código " & prm1.Value)

Catch ex As Exception

MsgBox(ex.Message)

Finally

cn.Close()

End Try

End Sub

5.- Luego en botón btnlimpiar, codificamos:

Private Sub btnlimpiar_Click

Me.txtcategoria.Clear()

Me.txtproducto.Clear()

Me.txtproveedor.Clear()

End Sub

Instrucción ExecuteScalar:

Ejecuta la consulta y devuelve la primera columna de la primera fila del conjunto de

resultados que devuelve la consulta. Se omiten todas las demás columnas y filas.

Utilice el método ExecuteScalar para recuperar un único valor (por ejemplo, un valor

agregado) de una base de datos.

Por tanto, podemos deducir que ExecuteNonQuery lo usaremos para ejecutar la mayoría de las

instrucciones de SQL que ejecutará algo en la base de datos, pero que no devolverá un valor.

Bueno, en realidad, en algunos casos si que devolverá un valor, pero será para indicarnos, por

ejemplo, si eliminamos varias filas de la tabla, devolverá el número de filas eliminadas.

Por otro lado, ExecuteScalar lo usaremos cuando tengamos que ejecutar un código de SQL del que

queremos recuperar la primera columna de la primera fila.

Este método devuelve un valor de tipo Object que tendremos que convertir según el valor devuelto.

Por ejemplo, si queremos saber el número de registros (filas) de una tabla que cumple cierto criterio,

podemos usar un comando SQL como este:

SELECT Count(*) FROM Prueba WHERE FechaAlta >= @Param1

Página 168

Page 169: aplicacion de vb.net 2003

BtnProductos

BtnEmpleados

Txtpro

Txtemp

Programación Windows

En este caso, el valor devuelto será del tipo Int32 y será el número de filas que hay en la tabla Prueba

de la base de datos indicada en el objeto Connection que previamente habremos abierto que tenga

una fecha igual o superior a la indicada en el parámetro proporcionado a ese comando. Si no hay

ninguna fila que cumpla ese criterio, devolverá cero. 

Nota:

Instrucciones de SQL no significa que hay que usarlo con SQL Server, sino que son instrucciones en

"lenguaje" SQL, que en SQL Server se conoce como T-SQL o Transact SQL, y que por tanto

podemos usar con cualquier tipo de base de datos, (o casi).

Ejercicio Práctico Nº1

Imports System.Data

Imports System.Data.SqlClient

Dim cn As New SqlConnection("Server=(local); Database=Northwind; Integrated Security=True")

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

Handles Button1.Click

Dim cmd As New SqlCommand("Select count(*) from products", cn)

cn.Open()

Dim x As Integer

x = cmd.ExecuteScalar

Me.txtpro.Text = x.ToString

cn.Close()

End Sub

Página 169

Page 170: aplicacion de vb.net 2003

TxtCod

TxtEmp

TxtTel

DgvEmpresa

BtnNuevo

BtnGuardar

BtnModificar

BtnEliminar

Programación Windows

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

System.EventArgs) Handles Button2.Click

Dim cmd As New SqlCommand("Select count(*) from employees", cn)

cn.Open()

Dim y As Integer

y = cmd.ExecuteScalar

Me.txtemp.Text = y.ToString

cn.Close()

End Sub

Mantenimiento de la Tabla Shippers (Empresa)

1.- Diseñar el siguiente Formulario.

2.- Luego Codificaremos lo siguiente:

Imports System.DataImports System.Data.SqlClientPublic Class Form1

Dim cn As New SqlConnection("Server=(Local); DataBase=Northwind; Integrated Security=SSPI")

Sub filtrar() Dim da As New SqlDataAdapter("Select * from Shippers", cn) Dim dt As New DataTable da.Fill(dt) Me.DgvEmpresa.DataSource = dt End Sub

Página 170

Page 171: aplicacion de vb.net 2003

Programación Windows

Private Sub Form1_Load filtrar() End Sub

Private Sub BtnGuardar_Click Try Dim cmd As New SqlCommand("Insert Into Shippers Values(@empresa,@telefono)", cn) cmd.Parameters.Add("@empresa", SqlDbType.VarChar, 40).Value = Me.txtemp.Text cmd.Parameters.Add("@telefono", SqlDbType.VarChar, 9).Value = Me.txtTel.Text cn.Open() cmd.ExecuteNonQuery() MsgBox("Empresa Registrada...!", MsgBoxStyle.Information, "SISE") filtrar() Catch ex As Exception MsgBox(ex.Message) Finally cn.Close() End Try

Dim x As Integer Dim cmd1 As New SqlCommand("Select max(shipperid) from Shippers", cn) cn.Open() x = cmd1.ExecuteScalar Me.txtcod.Text = x.ToString cn.Close()

End Sub

Private Sub BtnActualizar_Click Try Dim cmd As New SqlCommand("Update Shippers Set CompanyName=@empresa,Phone=@telefono where Shipperid=@codigo", cn) cmd.Parameters.Add("@empresa", SqlDbType.VarChar, 40).Value = Me.txtemp.Text cmd.Parameters.Add("@telefono", SqlDbType.VarChar, 9).Value = Me.txtTel.Text cmd.Parameters.Add("@codigo", SqlDbType.Int).Value = CInt(Me.txtcod.Text) cn.Open() cmd.ExecuteNonQuery() MsgBox("Datos Actualizados...!", MsgBoxStyle.Information, "SISE") filtrar() Catch ex As Exception MsgBox(ex.Message) Finally cn.Close() End Try End Sub Private Sub BtnEliminar_Click Try Dim cmd As New SqlCommand("Delete from Shippers where Shipperid=@codigo", cn) cmd.Parameters.Add("@codigo", SqlDbType.Int).Value = Me.txtcod.Text cn.Open() cmd.ExecuteNonQuery()

Página 171

Page 172: aplicacion de vb.net 2003

Programación Windows

MsgBox("Empresa Eliminada...!", MsgBoxStyle.Information, "SISE") filtrar() Catch ex As Exception MsgBox(ex.Message) Finally cn.Close() End Try End Sub

Private Sub DgvEmpresa_DoubleClick If Not IsDBNull(Me.DgvEmpresa.SelectedCells(0).Value) Then Me.txtcod.Text = Me.DgvEmpresa.SelectedCells(0).Value Me.txtemp.Text = Me.DgvEmpresa.SelectedCells(1).Value Me.txtTel.Text = Me.DgvEmpresa.SelectedCells(2).Value End If End Sub

Private Sub BtnNuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.txtcod.Clear() Me.txtemp.Clear() Me.txtTel.Clear() End SubEnd Class

El Control DataGridView

¿Qué es un DatagridView?

¿Arquitectura del DataGridView?

Ejemplo Práctico

Página 172

Page 173: aplicacion de vb.net 2003

CboOrden

CboProducto

TxtPre

TxtCan

DgvProductos

Programación Windows

Arquitectura de un Control DataGridViewUn control DataGridView contiene dos clases fundamentales de objetos:celdas y bandas o grupos de

celdas (filas y columnas).

La celda es la unidad fundamental de interacción con el control DaraGridView. Podemos acceder a

cualquiera de ellas a través de la colección Cells de DataGridViewRow y a las que estén

seleccionadas, a través de la colección SelectedCells.

El esquema de los datos almacenados en un DataGridView es expresado en columnas (objeto

DataGridViewColumn), a las que podemos acceder a través de su colección Columns y a las que

estén seleccionadas, a través de su colección SelectedColumns.

Las filas (objeto DataGridViewRow) muestran los campos de los registros almacenados en un

DataGridView. Podemos acceder a ellas a través de su colección Rows, y a las que estén

seleccionadas, a través de su colección SelectedRows.

1.- Diseñar el siguiente formulario.

Imports System.Data

Imports System.Data.SqlClient

Página 173

Page 174: aplicacion de vb.net 2003

Programación Windows

Public Class Form3

Dim cn As New SqlConnection("Server=(Local); DataBase=Northwind; Integrated Security=True")

Private Sub Form3_Load

Dim dr As SqlDataReader

Dim cmd As New SqlCommand("Select * from orders", cn)

cn.Open()

dr = cmd.ExecuteReader

Do While dr.Read

Me.cboorden.Items.Add(dr("OrderId"))

Loop

dr.Close()

cn.Close()

Dim cmd2 As New SqlCommand("Select * from products", cn)

Dim da As New SqlDataAdapter(cmd2)

Dim dt As New DataTable

da.Fill(dt)

Me.cboproducto.DataSource = dt

Me.cboproducto.DisplayMember = "Productname"

Me.cboproducto.ValueMember = "Productid"

Me.dgvdetalle.Columns(0).Width = 45

Me.dgvdetalle.Columns(1).Width = 45

Me.dgvdetalle.Columns(2).Width = 90

Me.dgvdetalle.Columns(3).Width = 60

Me.dgvdetalle.Columns(4).Width = 60

Me.dgvdetalle.Columns(5).Width = 60

Me.cboproducto.Text = ""

Me.txtpre.Clear()

End Sub

Private Sub cboproducto_SelectedIndexChanged

Dim x As Double

Dim cmd3 As New SqlCommand("Select UnitPrice from Products where productname='" &

Me.cboproducto.Text.Trim & "'", cn)

cn.Open()

x = CDec(cmd3.ExecuteScalar)

cn.Close()

Me.txtpre.Text = x.ToString("###,##0.00")

Página 174

Page 175: aplicacion de vb.net 2003

Programación Windows

End Sub

Private Sub btnagregar_Click

Me.dgvdetalle.Rows.Add(Me.cboorden.Text, Me.cboproducto.SelectedValue, Me.cboproducto.Text,

Me.txtpre.Text, Me.txtcant.Text, Val(Me.txtcant.Text) * Val(Me.txtpre.Text))

End Sub

Private Sub btneliminar_Click

If Me.dgvdetalle.Rows.Count = 1 Then

MsgBox("No se puede Eliminar", MsgBoxStyle.Information, "DataGridView")

Else

Me.dgvdetalle.Rows.Remove(Me.dgvdetalle.CurrentRow)

End If

End Sub

Private Sub btnguardar_Click

Dim x As Integer

Try

For x = 0 To Me.dgvdetalle.Rows.Count - 2

Dim cmd As New SqlCommand("insert [Order details]

values(@orden,@producto,@precio,@cantidad,0)", cn)

cmd.Parameters.Add("@orden", SqlDbType.Int).Value = Me.dgvdetalle.Item(0, x).Value

cmd.Parameters.Add("@producto", SqlDbType.Int).Value = Me.dgvdetalle.Item(1, x).Value

cmd.Parameters.Add("@precio", SqlDbType.Money).Value = Me.dgvdetalle.Item(3, x).Value

cmd.Parameters.Add("@cantidad", SqlDbType.Int).Value = Me.dgvdetalle.Item(4, x).Value

cn.Open()

cmd.ExecuteNonQuery()

cn.Close()

Next

MsgBox("Detalle de Orden Generado", MsgBoxStyle.Information, "Sistema")

Me.dgvdetalle.Rows.Clear()

Catch ex As Exception

MsgBox(ex.Message)

Finally

cn.Close()

End Try

End Sub

End Class

Página 175

Page 176: aplicacion de vb.net 2003

Programación Windows

El Objeto DataReader¿Qué es el Objeto DataReader?

¿Qué es el Objeto SQLDataReader?

Instrucción ExecuteReader

Ejemplo Práctico

Objeto DataReaderEl objeto DataReader se utiliza en Ado.Net para leer la información que envía el origen de datos y

manejarla en el cliente.

Por Ejemplo:

Si ha usado el objeto SQLConnection, tendrás que utilizar el objeto SQLDataReader.

Objeto SQLDataReaderEl objeto SQLDataReader permite acceder a la información de una base de Datos de una manera muy

rápida, mejorando el rendimiento de nuestra aplicación por la velocidad que utiliza para acceder a

ella y también porque requiere poco espacio de memoria ya que sólo permanece en ella un solo

registró a la vez.

Las características de acceso a la información de este objeto es que es en forma secuencial y hacia

delante, es decir, desde la primera hasta la última fila.

Otra característica de este objeto es que la información que almacena es de solo lectura, es decir, que

sólo se puede utilizar cuando deseamos leer la información del servidor, por ejemplo, para los

programas de listado que se necesitan desarrollar.

Para utilizar el objeto SQLDataReader, primero debe de definir una variable de este tipo como se

muestra a continuación:

Dim variable as SqlDataReader

Ejemplo:

Dim dr as SqlDataReader

Después de definir la variable, crear el objeto SQLCommand y abrir la conexión, puede llenar el

objeto SQLDataReader de la siguiente manera:

Página 176

Page 177: aplicacion de vb.net 2003

BtnVer

LstClientes

Programación Windows

Variable=Objeto SQLCommand.ExecuteReader

Ejemplo:

Dr=CmdClientes.ExecuteReader

Ejercicio Practico Nº1

Imports System.Data

Imports System.Data.SqlClient

Public Class Form1

Dim cn As New SqlConnection("Server=(Local); DataBase=Northwind; Integrated

Security=SSPI")

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

Handles Button1.Click

Dim dr As SqlDataReader

Dim cmd As New SqlCommand("Select * from customers", cn)

cn.Open()

dr = cmd.ExecuteReader

Do While dr.Read

Me.lstclientes.Items.Add(dr(1))

Loop

dr.Close()

cn.Close()

End Sub

End Class

El resultado será el siguiente

Página 177

Page 178: aplicacion de vb.net 2003

TxtUsuario

TxtContraseña

ProgressBar1

BtnSalirBtnIngresar

PictureBox1Y PictureBox2

Programación Windows

Acceso al Sistema 1.- Diseñaremos el formulario para que quede de la siguiente manera.

2.- Después añadiremos 2 Timer; uno para el ProgressBar1 y el otro para los dos PictureBox

3.- Cargamos una imagen para cada PictureBox

4.- Luego hacemos la conexión con la Base de Datos.

Imports System.DataImports System.Data.SqlClientPublic Class Form1 Dim cn As New SqlConnection("Server=(Local); DataBase=Northwind; Integrated Security=True")

5.- En el Evento Load del Formulario codificamos:

Private Sub Form1_Load Me.Timer2.Enabled = True Me.PictureBox1.Visible = False Me.PictureBox2.Visible = False End Sub

Página 178

Page 179: aplicacion de vb.net 2003

Programación Windows

6.- En el Botón BtnIngresar codificamos:

Private Sub btningresar_Click

Dim cmd As New SqlCommand("Select Employeeid, LastName, FirstName, Extension from Employees where LastName='" & Me.txtusuario.Text & "'", cn) Dim dr As SqlDataReader cn.open() dr = cmd.ExecuteReader If dr.Read() Then If dr("Extension") = Me.txtcontraseña.Text Then Me.Timer1.Enabled = True Else MsgBox("Contraseña Incorrecta") End If Else MsgBox("Usuario No Existe") End If cn.Close() End Sub

7.- Luego en el Evento Tick del Timer1, codificamos lo siguiente (Este Timer es para el control del ProgressBar)

Private Sub Timer1_Tick Me.ProgressBar1.Visible = True Me.ProgressBar1.Value = Me.ProgressBar1.Value + 1 If Me.ProgressBar1.Value = 100 Then Me.Timer1.Enabled = False MsgBox("Bienvido al Sistema Usuario " & Me.txtusuario.Text, MsgBoxStyle.Information, "Sistema") MDIParent1.Show() End If8.- En el evento Tick del Timer2, codificamos lo siguiente(Este Timer es para los PictureBox)

Private Sub Timer2_Tick Static a As Integer If a = 0 Then Me.PictureBox1.Visible = True Me.PictureBox2.Visible = False a = 1 Else If a = 1 Then Me.PictureBox1.Visible = False Me.PictureBox2.Visible = True a = 0 End If End If9.- En el evento Clic del Botón BtnSalir codificamos:

Private Sub Button1_Click Me.Close() End Sub

10.- En el evento Load del MdiParent1 codificamos:

Private Sub MDIParent1_Load Form1.Hide() End Sub

Página 179

Page 180: aplicacion de vb.net 2003

Programación Windows

11.- Finalmente ejecutamos la aplicación. Ingresamos un Usuario y una Contraseña.

Crear Proyectos de Instalación Como crear Proyectos de Instalación

Personalizar el Proyecto

Generar el Instalador

Página 180

1 2

Page 181: aplicacion de vb.net 2003

Programación Windows

Una vez desarrollado un aplicativo, el paso siguiente lógico es generarle su instalador, para ello

vamos a agregar a la Solución un proyecto de Instalación e Implementación.

El proyecto de Instalación contiene 6 vistas para configurar según el tipo de instalador que deseemos

crear, ahora vamos a detallar 1 a 1 el uso de las vistas:

Vista: Sistema de Archivos

En esta vista se muestran 3 carpetas que representan a las carpetas de la maquina en donde se

instalara el Aplicativo.

Carpeta de la Aplicación= Representa a la carpeta en donde el Usuario escogió instalar el

Aplicativo, por defecto será Archivos de Programa. Es aquí donde debemos agregar el Ejecutable,

sus dependencias y los demás archivos necesarios para que el aplicativo funcione bien.

Escritorio del Usuario= Representa al Escritorio de la Maquina Cliente, aquí colocaremos los

accesos directos.

Página 181

Page 182: aplicacion de vb.net 2003

Programación Windows

Menú Programas del Usuario= Representa al Menú Programas de la Maquina Cliente, Acá también

colocaremos un acceso directo.

Ahora procederemos a configurar las carpetas:

Agregue Carpetas para administrar mejor los archivos a instalar, comience con la carpeta con el

Nombre de la Empresa luego con el nombre del Aplicativo y por ultimo por carpetas para administrar

los archivos del aplicativo, de la siguiente manera:

Ahora proceda a agregar el ejecutable y los archivos que el aplicativo necesitará

Página 182

Page 183: aplicacion de vb.net 2003

Programación Windows

Ahora crearemos los accesos directos que luego arrastraremos al Escritorio y al Menú programas de

usuario.

Una vez agregado el acceso directo tenemos que asignarle el icono antes agregado, de la siguiente

manera:

El siguiente paso es arrastrar los accesos directos creados hacia las carpetas correspondientes:

Página 183

Page 184: aplicacion de vb.net 2003

Programación Windows

Vista Interfaz de Usuario

Esta vista permite configurar las pantallas que se muestran en la instalación

Mediante la ventana de propiedades solo cambiaremos algunas propiedades, como el Banner de las

pantallas

Página 184

Page 185: aplicacion de vb.net 2003

Programación Windows

Vista Acciones personalizadas

Esta vista sirve para agregar un Ejecutable (proceso) que corra en paralelo a la inhalación del

aplicativo, esta soportada en base a eventos.

Solo debemos agregar en la vista Sistema de Archivos el Ejecutable a insertar en esta vista:

Recuerde que no todos los ejecutables poseen los mismos argumentos de ejecución.

Vista Condiciones de Inicio

Esta vista permite hacer búsquedas en la Maquina del Cliente y en base a estas dejar o no la

instalación del Aplicativo:

Agregue una búsqueda de un archivo especificando el nombre y la extensión del mismo, no dejando

de lado la carpeta donde se buscara el archivo.

Página 185

Page 186: aplicacion de vb.net 2003

Programación Windows

Ahora procederemos a agregar una Condición basada en la búsqueda anterior

Ahora asigne a la condición la búsqueda antes especificada

Compile el proyecto y tendrá los archivos de instalación del mismo.

Y por último se generará el instalador correctamente, el cual se encontrará dentro de la carpeta

Debug.

Página 186