Professional Documents
Culture Documents
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
Programación Windows
Introducción
Visual 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.
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
Programación Windows
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
Programación Windows
tradicionales hasta las aplicaciones basadas en las últimas innovaciones proporcionadas por
ASP.NET y los servicios Web XML.
Servicios
Servicios de
de
programación
programación
.NET
Aplica Biblioteca
Framew
ADO.NET
Web
Servicios
cione
Windows
datos
Tipos de
de clases Códi
s
Aplica ork go
XML
Visual
ciones de la
Basic El
Visual El compilador
compilador JIT
plataJIT produce
produce
Aplica
C# lenguaje máquina
lenguajeform
máquina
cione Common
El
El código
código fuente
s se
fuente se compila
compila como
como MSIL
MSIL a
Language .NET
Visual
FormasC++ de Ingreso Runtime
al Entorno
Hay 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
Programación Windows
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
Programación Windows
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
Programación Windows
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
Programación Windows
Pá gina 8
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 ( )
LblNombre TxtNombre
BtnMensaje
TxtTexto
btnColorTexto
btnColorFondo
Pá gina 9
Programación Windows
Txt1
Txt2
BtnMultiplicar
BtnSuma
BtnResta BtnPotencia
BtnDividir
BtnNuevo
TxtRes
TxtUsu
TxtPas
Btningresar BtnSalir
…………………………………………………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………………………………………………
………………………………………………………………………………………………………….
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
Programación Windows
Funciones de Lenguaje
Tipos de Datos
Operadores
Variables
Sentencias Condicionales
Bucles
Tipo de Datos
El 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
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.
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
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.
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.
Pá gina 14
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:
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:
Inclusive podemos declarar variables de forma anidada y asignarle valores directamente, como por
ejemplo:
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.
BtnImagen1
PictureBox1
BtnImagen2
BtnImagen3
BtnImagen4
Pá gina 16
Programación Windows
Dim ruta As String = "Aqui pondremos la ruta donde se encuentran las imágenes unido con un \"
End Class
3.- El codigo del evento click del boton BtnImagen1; es el mismo para los otros botones pero con
imágenes diferentes.
If condition Then
statements
Else
statements
End If
TxtUsuario
TxtPassword
BtnIngresar ProgressBar1
End If
End Sub
End Sub
Pá gina 18
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:
TxtNP
TxtEP
LblCon TxtEF
TxtProm
Dim a As Short
If Me.txtnp.Text = "" Then
Pá gina 19
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
Pá gina 20
Programación Windows
Bucles
Es 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.
Pá gina 21
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]
ListBox3
TxtNum
ListBox2
BtnCalcular
ListBox1
BtnLimpiar
Pá gina 22
Programación Windows
For r = 1 To 12
Me.ListBox3.Items.Add(n * r)
Next
End Sub
btnLimpiar
Pá gina 23
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.
Pá gina 24
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)
Pá gina 25
Programación Windows
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
Pá gina 26
Programación Windows
Pá gina 27
Programación Windows
Funciones Cronológicas
TxtFechaSis
TxtHoraSis
DtpFecha
BtnDife
BtnNumMes
TxtDI
TxtFechaIng
TxtFechaConver
Pá gina 28
Programación Windows
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:
Pá gina 29
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º1
1.- Agregar una clase la cual se llamara CLSOPERACIONES
Public 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
Pá gina 30
Programación Windows
Pá gina 31
Programación Windows
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.
Pá gina 32
Programación Windows
Pá gina 33
Programación Windows
Usando cualquiera de estas dos formas mostradas, el número de elementos será 5, por tanto los
índices irán desde 0 hasta 4.
Pá gina 34
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.
TxtNombres
BtnAgregar
BtnMostrar
BtnLimpiar
LstNombres
Pá gina 35
Programación Windows
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
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
Pá gina 37
Programación Windows
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 DatosAlumnos
End Module
txtcurso
3.- En el evento click del botón btnagregar
codificaremos lo siguiente
txtpromedio
btnagregar
Pá gina 38
Programación Windows
Pá gina 39
Programación Windows
IEnumerator
Pá gina 40
Programación Windows
Pá gina 41
Programación Windows
Me.txtTotal.Text = lista.Count
End Sub
While recorrer.MoveNext
Me.cbociudad.Items.Add(recorrer.Current)
End While
End Sub
La Clase HashTable
Pá gina 42
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.
TxtNom
LstCod
LstNom
Programación Windows
La Clase SortedList
Esta 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.
Definición de un Threading
Componente BackgroundWorker
Práctica de Laboratorio de Hilos
Pá gina 45
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.
Pá gina 46
Programación Windows
BackgroundWorker
Para 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:
Pá gina 47
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.
...se terminó la ejecución de la tarea. La terminación puede deberse a que la
RunWorkerCompleted
ejecución se completó o a que esta fue cancelada.
Pá gina 50
Programación Windows
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
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.
Pá gina 51
Programación Windows
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.
'Declaracion de Variables
Private vname As String
Private vdescription As String
Private vqty As Integer
Pá gina 52
Programación Windows
TxtCantidad
BtnSerializar
BtnDeSerializar
Imports System.IO
'Importamos el NameSpace que me permitira la Serializacion
Imports System.Xml.Serialization
Pá gina 53
Programación Windows
End Sub
6.- Daremos clic en el botón Serializar objeto y nos saldrá un mensaje como el que muestra la figura.
Pá gina 54
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
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.
Pá gina 55
Programación Windows
Clase Descripción
Expone métodos estáticos para crear, mover y enumerar archivos en
Directory
directorios y subdirectorios
Expone métodos de instancia para crear, mover y enumerar archivos en
DirectoryInfo
directorios y subdirectorios.
formulario.
TxtArchivo
Pá gina 56
Programación Windows
End Try
End Sub
Pá gina 57
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 Sub
End Class
Ejercicio Práctico Nº4
1.- Diseñar el siguiente formulario.
'Importamos el namesapce que nos permitira
'manejar archivos, carpetas y unidades
Imports System.IO
Public 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"
'Importación de la Clase
Imports System.IO
Public Class Form1
Pá gina 59
Programación Windows
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
End Sub
Pá gina 60
Programación Windows
End Class
TxtDe LstAdjuntar
TxtPara
TxtAsunto BtnQuitar
Pá gina 61
RbColor
Imports System.Net.Mail
'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
Pá gina 62
Programación Windows
correo.Attachments.Add(datosadjuntos)
Next
'Prioridad de el correo
correo.Priority = MailPriority.Normal
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
Else
'De lo contrario muestra un mensaje
'si el archivo ya esta adjuntado
MsgBox("El Archivo ya se cargo", MsgBoxStyle.Information, "Envio de Correo")
Pá gina 63
Programación Windows
End If
Next
End Sub
Pá gina 64
Programación Windows
Manejo de Agentes
Manejo de Controles Active X
Pá gina 65
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
Pá gina 66
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
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”)
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:
Pá gina 67
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()
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.
doc.Paragraphs(siguienteparrafo).Range.Font.Bold=1
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
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”)
1.- Diseñar el
siguiente
formulario. btnCrear
CboFuente
btnAbrir
CboTamañ o
ChkNegrita ChkCursiva
TxtDocumento
BtnGuardar
TxtContenido
Pá gina 69
Programación Windows
apword.Visible = False
Pá gina 70
Programación Windows
'Guarda el Documento
doc.SaveAs(Me.txtdocumento.Text & ".doc")
'Cierra el Documento
doc.Close()
End Sub
End Class
BtnMostrar
ListBox1
BtnOcultar
TxtMensaje
BtnMovimiento
BtnMensaje
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
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.
A nivel Formulario:
Pá gina 72
Programación Windows
'Ejecuta el Movimiento
Muñeco.Play(Me.ListBox1.SelectedItem)
End Sub
Private Sub btnmensaje_Click
'Muestra el Mensaje
Muñeco.Speak(Me.txtmensaje.Text)
End Sub
Componentes ActiveX
Visual 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
Programación Windows
Explorador Web
Para 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
Pá gina 74
Programación Windows
TxtDir
BtnIr
AxWebBrowser
Me.AxWebBrowser1.Navigate(Me.txtdir.Text.Trim)
End Sub
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.
AxWindowsMediaPlayer1
BtnAudio BtnVideo
Me.AxWindowsMediaPlayer1.URL = "D:\Rocky.mp3"
End Sub
Me.AxWindowsMediaPlayer1.URL = "D:\madonna.mpg"
End Sub
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.Globalization
La 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
Programación Windows
Pá gina 78
Programación Windows
Pá gina 79
Programación Windows
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.
TxtSM
Txtnum
BtnVer
Pá gina 80
Txtfn
Txtfh
Programación Windows
objculture.CurrencyDecimalDigits = 1
objculture.CurrencyDecimalSeparator = ","
objculture.CurrencyGroupSeparator = "."
objculture.CurrencySymbol = "S/."
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
en minúscula asociado con un idioma, y un código de referencia cultural secundaria de dos letras en
Pá gina 81
Programación Windows
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 Identificador de referencia Idioma-País/región
cultural cultural
"" (cadena vacía) 0x007F referencia cultural invariable
af 0x0036 Afrikaans
af-ZA 0x0436 Afrikaans-Sudáfrica
sq 0x001C Albanés
sq-AL 0x041C Albanés-Albania
ar 0x0001 Árabe
ar-DZ 0x1401 Árabe-Argelia
ar-BH 0x3C01 Árabe-Bahrein
ar-EG 0x0C01 Árabe-Egipto
ar-IQ 0x0801 Árabe-Iraq
ar-JO 0x2C01 Árabe-Jordania
ar-KW 0x3401 Árabe-Kuwait
ar-LB 0x3001 Árabe-Líbano
ar-LY 0x1001 Árabe-Libia
ar-MA 0x1801 Árabe-Marruecos
ar-OM 0x2001 Árabe-Omán
ar-QA 0x4001 Árabe-Qatar
ar-SA 0x0401 Árabe-Arabia Saudí
ar-SY 0x2801 Árabe-Siria
ar-TN 0x1C01 Árabe-Túnez
ar-AE 0x3801 Árabe-Emiratos Árabes Unidos
Pá gina 82
Programación Windows
Pá gina 83
Programación Windows
Pá gina 84
Programación Windows
kn 0x004B Kannada
kn-IN 0x044B Kannada-India
kk 0x003F Kazajo
kk-KZ 0x043F Kazajo-Kazajistán
kok 0x0057 Konkani
kok-IN 0x0457 Konkani-India
ko 0x0012 Coreano
ko-KR 0x0412 Coreano-Corea
ky 0x0040 Kirguís
ky-KZ 0x0440 Kirguís-Kazajistán
lv 0x0026 Letón
lv-LV 0x0426 Letón-Letonia
lt 0x0027 Lituano
lt-LT 0x0427 Lituano-Lituania
mk 0x002F Macedonio
mk-MK 0x042F Macedonio-Antigua República
Yugoslava de Macedonia
ms 0x003E Malayo
ms-BN 0x083E Malayo-Brunéi Darussalam
ms-MY 0x043E Malayo-Malasia
mr 0x004E Marathi
mr-IN 0x044E Marathi-India
mn 0x0050 Mongol
mn-MN 0x0450 Mongol-Mongolia
no 0x0014 Noruego
nb-NO 0x0414 Noruego (Bokmal)-Noruega
nn-NO 0x0814 Noruego (Nynorsk)-Noruega
pl 0x0015 Polaco
pl-PL 0x0415 Polaco-Polonia
pt 0x0016 Portugués
pt-BR 0x0416 Portugués-Brasil
pt-PT 0x0816 Portugués-Portugal
pa 0x0046 Punjabi
pa-IN 0x0446 Punjabí-India
ro 0x0018 Rumano
ro-RO 0x0418 Rumano-Rumanía
ru 0x0019 Ruso
ru-RU 0x0419 Ruso-Rusia
sa 0x004F Sánscrito
sa-IN 0x044F Sánscrito-India
sr-SP-Cyrl 0x0C1A Serbio (cirílico)-Serbia
sr-SP-Latn 0x081A Serbio (latino)-Serbia
sk 0x001B Eslovaco
sk-SK 0x041B Eslovaco-Eslovaquia
sl 0x0024 Esloveno
sl-SI 0x0424 Esloveno-Eslovenia
Pá gina 85
Programación Windows
es 0x000A Español
es-AR 0x2C0A Español-Argentina
es-BO 0x400A Español-Bolivia
es-CL 0x340A Español-Chile
es-CO 0x240A Español-Colombia
es-CR 0x140A Español-Costa Rica
es-DO 0x1C0A Español-República Dominicana
es-EC 0x300A Español-Ecuador
es-SV 0x440A Español-El Salvador
es-GT 0x100A Español-Guatemala
es-HN 0x480A Español-Honduras
es-MX 0x080A Español-México
es-NI 0x4C0A Español-Nicaragua
es-PA 0x180A Español-Panamá
es-PY 0x3C0A Español-Paraguay
es-PE 0x280A Español-Perú
es-PR 0x500A Español-Puerto Rico
es-ES 0x0C0A Español-España
es-UY 0x380A Español-Uruguay
es-VE 0x200A Español-Venezuela
sw 0x0041 Suajili
sw-KE 0x0441 Suajili-Kenia
sv 0x001D Sueco
sv-FI 0x081D Sueco-Finlandia
sv-SE 0x041D Sueco-Suecia
syr 0x005A Sirio
syr-SY 0x045A Sirio-Siria
ta 0x0049 Tamil
ta-IN 0x0449 Tamil-India
tt 0x0044 Tártaro
tt-RU 0x0444 Tártaro-Rusia
te 0x004A Telugu
te-IN 0x044A Telugu-India
th 0x001E Tailandés
th-TH 0x041E Tailandés-Tailandia
tr 0x001F Turco
tr-TR 0x041F Turco-Turquía
uk 0x0022 Ucraniano
uk-UA 0x0422 Ucraniano-Ucrania
ur 0x0020 Urdú
ur-PK 0x0420 Urdú-Pakistán
uz 0x0043 Uzbeko
uz-UZ-Cyrl 0x0843 Uzbeko (cirílico)-Uzbekistán
uz-UZ-Latn 0x0443 Uzbeko (latino)-Uzbekistán
vi 0x002A Vietnamita
vi-VN 0x042A Vietnamita-Vietnam
Pá gina 86
Programación Windows
CboCulturas BtnMostrar
Ejercicio Práctico Nº3
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
Pá gina 87
Programación Windows
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.
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:
Pá gina 88
Programación Windows
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.
[[ReadOnly] Get
<Instrucciones>
End Get]
<Instrucciones>
End Set]
End Property
Pá gina 89
Programación Windows
'Propiedades
Public Property Codigo() As Integer
Get
Codigo = mvarcodigo
End Get
Set(ByVal value As Integer)
mvarcodigo = value
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
Pá gina 90
Programación Windows
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.
TxtCod
TxtNom
TxtSue
Pá gina 91
Programación Windows
End Class
TxtNom
DateTimePicker
LblMensaje
BtnMostrar
2.- Luego agregaremos una clase llamado Persona el cual crearemos las siguientes propiedades y
métodos.
'Variables de Propiedad
Private _nombre As String
Private _fechanacimiento As Date
'Propiedades
Pá gina 92
Programación Windows
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
txtCod Pá gina 94
txtNom
DtpFI
txtHoras
End Class
ListView1
2.- Luego diseñamos el siguiente formulario.
'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
End Sub
Pá gina 95
Programación Windows
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.
1.-Elegir un nuevo proyecto “Visual Basic” el cual se llamara POO_en_Visual y agregar una Clase
llamada Producto.
End Get
Set(ByVal value As Single)
Me.mvarPrecio = value
End Set
End Property
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
2.- Luego, añadimos una aplicación para Windows que me permita realizar el mantenimiento de
productos usando la librería creada.
Pá gina 97
Programación Windows
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:
Pá gina 98
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:
Pá gina 99
Programación Windows
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
Constructores
El 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.
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.
Pá gina 100
Programación Windows
Nota:
Es requisito indispensable escribir los métodos constructores al inicio de la clase, de lo contrario no
funcionarían.
Pá gina 101
Programación Windows
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
BtnMostrar1
BtnMostrar2
BtnMostrar3
End Sub
Pá gina 102
Programación Windows
End Class
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.
'Metodo Constructor
Public Sub New(ByVal vnombre As String, ByVal vapellido As String)
nombre = vnombre
apellido = vapellido
End Sub
Pá gina 103
Programación Windows
MsgBox("El Nombre es: " & objempleado3.nombre & vbNewLine & "Su Apellido es: " &
objempleado3.apellido & vbNewLine & "Su Sueldo es: " & objempleado3.Sueldo)
End Sub
'Campo de la Clase
Public nombre As String
'Variable de Propiedad
Private mvarsalario As Double
'Métodos SobreCargados
Public Overloads Sub Sueldo()
'Aqui mostramos el importe del sueldo formateado
MsgBox("El sueldo es: " & Format(salario, "#,#.##"))
End Sub
Pá gina 104
Programación Windows
End Class
TxtNom
TxtSalario
NumericUpDown1
TxtIncentivo
Pá gina 105
CboTipoInc
BtnMostrar
Programación Windows
objempleado.nombre = Me.txtnom.Text
objempleado.salario = CDbl(Me.txtsalario.Text)
End Sub
Eventos
Un 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.
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
Pá gina 106
Programación Windows
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)])
'Propiedades
Public Property Codigo() As Integer
Get
Codigo = mvarcodigo
End Get
Set(ByVal value As Integer)
mvarcodigo = value
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
'Creamos eventos
Public Event SueldoBajo()
Public Event SueldoAlto()
TxtCod
TxtNom
BtnCrear TxtSue
Pá gina 108
BtnMostrar
BtnActualizar TxtEventoSueldo
Programación Windows
Pá gina 109
Programación Windows
Public Sub SAlto() Handles objempleado.SueldoAlto
Me.txteventosueldo.ForeColor = Color.Blue
Me.txteventosueldo.Text = objempleado.Nombre + " tiene un Sueldo Alto"
End Sub
End 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.
Sintaxis:
Inherits <Clase Base>
Nota:
Pá gina 110
Programación Windows
1.- Crearemos a continuación una clase llamada Vendedor que heredará todas sus propiedades, métodos y
eventos de clase creada anteriormente llamada 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
TxtCod
TxtNom
TxtSue
TxtVenta
BtnCrear
TxtComision
Pá gina 111
BtnMostrar
BtnActualizar
Programación Windows
Pá gina 112
Programación Windows
Podemos 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.
End Class
Pá gina 113
Programación Windows
End Class
3.- Luego diseñaremos el siguiente formulario.
TxtCod
TxtNom
TxtSalario
BtnPadre BtnHijo
Pá gina 114
Programación Windows
Me.objadministrativo.calcularincentivo(horas)
Me.objadministrativo.verincentivos()
End Sub
End Class
Ado .Net
Conexiones String
Proveedores 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
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
Para poder emplear el SQLClient en el editor de codigo de su aplicación debe colocar la siguiente
instrucción:
Pá gina 116
Programación Windows
SQL 2005
Vía Autentificación Windows
Server =myServer; DataBase =myDataBase; Integrated Security=True
Pá gina 117
btnAccess2003
btnAccess2007
Programación Windows
btnSql2005
btnUsuario
lblConecta
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:
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
Programación Windows
Pá gina 119
Programación Windows
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
Pá gina 120
Programación Windows
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
DataAdapter
SelectCommand Database
Pá gina 121
InsertCommand
UpdateCommand
DeleteCommand
Programación Windows DataSet
.DataSet
1
VB
DataAdapter DataTable
Base Datos DataSet
SQL
Despachar Datos (Fill)
2
Pá gina 122
Programación Windows
Consultas
1.- Diseñamos el siguiente formulario.
BtnCargar
DatagridView
Pá gina 123
Programación Windows
Pá gina 124
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.
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:
End Set
End Property
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.
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:
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:
End Get
Set(ByVal value As String)
Me.mvarCodigo = value
End Set
End Property
Pá gina 128
Programación Windows
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:
Pá gina 129
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 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.
Me.objAlumno.CrearAlumno(Me.txtnomalu.Text, Me.dtpFechaNacAlu.Value,
Me.txtdiralu.Text, Me.txtcodalu.Text, Me.CboEspecialidad.Text)
Pá gina 130
Programación Windows
End Sub
End Sub
Data Sets,
DataTable y DataRelation
¿Qué es un DataSet?
¿Qué es un DataTable?
DataColumns, DataRows
Pá gina 131
Programación Windows
La Clase DataSet
Bá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.
DataSet
Rows
Relation
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
DataGridView1
Pá gina 133
DataGridView2
Programación Windows
DataGridView3
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
Programación Windows
Me.DataGridView1.DataSource = ds.Tables("Categoria")
Me.DataGridView2.DataSource = ds.Tables("Productos")
Me.DataGridView3.DataSource = ds.Tables("Proveedor")
End Sub
2da Forma.
1.- Agregamos otro formulario con el mismo diseño
que el anterior.
BtnMostrar
DataGridView1
DataGridView2
DataGridView3
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
Programación Windows
LstClientes
Pá gina 136
Programación Windows
LstOrdenes
2.-
Luego Codificaremos lo siguiente:
CboClientes
DataGridView1
Pá gina 138
Programación Windows
Imports System.Data
Imports System.Data.SqlClient
Public 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
'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
Pá gina 140
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
Programación Windows
Pá gina 142
Programación Windows
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.
F ill(Me.DsEmployeesor
d ers1)
End Sub
15.- Al final ejecutamos y se debe
mostrar de la siguiente manera,
Pá gina 143
Programación Windows
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
Programación Windows
El objeto DataView
El 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”)
Pá gina 145
Programación Windows
Pá gina 146
Programación Windows
BtnCon1
BtnCon2
DataGridView
Imports System.Data
Imports System.Data.SqlClient
End Class
Pá gina 147
Programación Windows
DataGridView
Imports System.Data
Imports System.Data.SqlClient
Pá gina 148
Programación Windows
Control de un Formulario
BindingSource
Origen de Datos
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
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
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.
Pá gina 151
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.
TxtCodigo
TxtNombre
TxtDireccion
TxtRegistro TxtTelefono
BtnPrimero
BtnUltimo
BtnAnterior
BtnSiguiente
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
Programación Windows
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
Programación Windows
DataBinding y BindingContext
Los 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
Programación Windows
Ejemplo:
Realizar el Siguiente Diseño:
txtCodigo
txtproducto
txtprecio
txtstock
btnprimero btnultimo
btnanterior LblTotal btnsiguiente
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
Programación Windows
Pá gina 156
Programación Windows
Pá gina 157
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.
DataGridView2
RETURN
Pá gina 158
Programación Windows
BtnVer
ComboBox
DataGridView
Pá gina 159
Programación Windows
Pá gina 160
Programación Windows
Pá gina 161
Programación Windows
2da. Consulta
1.- Crear el siguiente procedimiento
almacenado.
Pá gina 162
Programación Windows
Entorno Conectado
ExecuteNonQuery y ExecuteScalar -
Mantenimiento de una Tabla
Pá gina 163
Programación Windows
El Entorno Conectado
Durante 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.
Pá gina 164
Programación Windows
Pá gina 165
Programación Windows
Pá gina 166
Programación Windows
TxtProducto
btnAgregar
btnLimpiar
TxtProveedor TxtCategoria
Pá gina 167
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
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).
Txtpro BtnProductos
BtnEmpleados
Txtemp
Imports System.Data
Imports System.Data.SqlClient
Pá gina 169
Programación Windows
BtnNuevo
TxtCod
BtnGuardar
TxtEmp BtnModificar
TxtTel
BtnEliminar
DgvEmpresa
Imports System.Data
Imports System.Data.SqlClient
Public Class Form1
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
Programación Windows
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
Pá gina 171
Programación Windows
El Control DataGridView
¿Qué es un DatagridView?
¿Arquitectura del DataGridView?
Ejemplo Práctico
Pá gina 172
Programación Windows
CboOrden
CboProducto
TxtPre
TxtCan
DgvProductos
Imports System.Data
Imports System.Data.SqlClient
Pá gina 173
Programación Windows
Public Class Form3
Dim cn As New SqlConnection("Server=(Local); DataBase=Northwind; Integrated Security=True")
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
Pá gina 174
Programación Windows
End Sub
Pá gina 175
Programación Windows
El Objeto DataReader
¿Qué es el Objeto DataReader?
¿Qué es el Objeto SQLDataReader?
Instrucción ExecuteReader
Ejemplo Práctico
Objeto DataReader
El 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 SQLDataReader
El 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
Programación Windows
Variable=Objeto SQLCommand.ExecuteReader
Ejemplo:
Dr=CmdClientes.ExecuteReader
Ejercicio Practico Nº1 BtnVer
LstClientes
Imports System.Data
Imports System.Data.SqlClient
Pá gina 177
Programación Windows
Acceso al Sistema
1.- Diseñaremos el formulario para que quede de la siguiente manera.
PictureBox1 TxtUsuario
Y PictureBox2
TxtContraseñ a
ProgressBar1
BtnIngresar
BtnSalir
2.- Después añadiremos 2 Timer; uno para el ProgressBar1 y el otro para los dos PictureBox
Imports System.Data
Imports System.Data.SqlClient
Public Class Form1
Dim cn As New SqlConnection("Server=(Local); DataBase=Northwind; Integrated
Security=True")
Pá gina 178
Programación Windows
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)
Pá gina 179
Programación Windows
1 2
Pá gina 180
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:
En esta vista se muestran 3 carpetas que representan a las carpetas de la maquina en donde se
instalara el Aplicativo.
Pá gina 181
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:
Pá gina 182
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
Programación Windows
Pá gina 184
Programación Windows
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.
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
Programación Windows
Pá gina 186