Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Microsoft Partner
El contenido de este laboratorio tiene todos los derechos reservados, por lo tanto no se
puede reproducir, transcribir, almacenar a un sistema de recuperación o de alteración,
asimismo la traducción a otro idioma de ninguna forma o por ningún medio mecánico,
manual, electrónico, magnético, óptico o de otro modo.
2 WINDOWS FORMS
1.1 Introducción
En esta segunda lección veremos los tipos de datos que existen en el .NET Framework y cómo podemos usarlo
con Visual Basic 2005.
Se dará un repaso a conceptos básicos o elementales sobre los tipos de datos, que si bien nos serán familiares,
es importante que lo veamos para poder comprender mejor cómo están definidos y organizados los tipos de
datos en .NET.
En Visual Basic 2005 los tipos de datos que podremos usar con este lenguaje serán los definidos dentro del
Framwork y que son compartidos con otros lenguajes, del cual cambiaran de nombre de clase, pero tendrán su
equivalente dentro del lenguaje intermedio, por este motivo vamos a empezar usando algunas de las
definiciones que nos encontraremos al desarrollar este modulo.
Los tipos de datos que se usan están definidos dentro del marco de Common Type System (CTS)
que se refiere al Sistema de Tipos Comunes, por lo tanto están soportados por todos los lenguajes
que proporciona el Framework
Debido a que el Framework define los tipos de datos, que viene a ser definido dentro del lenguaje
intermedio, todo programa realizado en cualquier tipo de lenguaje que soporta el Visual Studio, este
tendrá un tipo común del mismo tipo para ser manejado internamente del .Net.
Esto es muy importante para la comunicación entre componentes realizados en distintos lenguajes,
no tendremos los problemas de tipos no definidos, cuando hagamos proyectos a nivel de
componentes, comunicación a nivel de ensamblados, siempre y cuando estos se han realizados
dentro de los lenguaje compatibles con los tipos de datos de .NET.
Tipos primitivos
En la siguiente tabla se muestra los tipos de datos definidos en .NET Framework y los alias utilizados en Visual
Basic 2005.
Nombre
Tipo de dato en Tipo de dato
de la Descripción
VB.NET en C#
clase
Byte Byte Byte Entero sin signo de 8 bit.
Sbyte Sbyte (No nativo) sbyte Entero sin signo de 8bit (Tipo no acorde con el CLS)
Int16 Short short Entero con signo de 16 bit.
Int32 Integer int Entero con signo de 32 bit.
Int64 Long long Entero con signo de 64 bit.
Uint16 UInt16 (No nativo) ushort Entero sin signo de 16 bit. (Tipo no acorde con el CLS)
Uint32 Uint32 (No nativo) uint Entero sin signo de 32 bit. (Tipo no acorde con el CLS)
Uint64 Uint64 (No nativo) ulong Entero sin signo de 64 bit. (Tipo no acorde con el CLS)
Single Single float Numero con coma flotante de precisión simple, de 32 bit.
Double Double double Numero con coma flotante de precisión doble, de 64 bit.
Boolean Boolean bool Valor lógico
Char Char char Carácter unicode de 16 bit.
Decimal Decimal decimal Valor decimal de 96 bit.
IntPtr IntPtr (No nativo) -- Entero con signo cuyo tamaño depende de la plataforma: 32
bit en plataformas de 32 bit y 64 bit en plataformas de 64
bit. (Tipo no acorde con el CLS)
UintPtr UintPtr (No nativo) -- Entero sin signo cuyo tamaño depende de la plataforma: 32
bit en plataformas de 32 bit y 64 bit en plataformas de 64
bit. (Tipo no acorde con el CLS)
String String string Cadena de caracteres.
Los tipos mostrados en la son los tipos primitivos de .NET tanto para C# y Visual Basic para los cuales cada
lenguaje define su propia palabra clave equivalente con el tipo definido en el CTS de .NET Framework.
Los tipos Variant utilizados en VB 6.0 serán representados por la clase Object, que representa la
implementación de un objeto en la instancia de dicho objeto.
La cantidad de tipos de datos nos ayuda a poder definir bien un tipo de dato con la memoria suficiente
asignada a nuestros datos, por ejemplo para definir un entero tenemos los siguientes tipos:
Cada uno de ellos asignado un determinado numero de Bits, si el valor máximo de nuestra variable oscilara
entre 1000 y 0… y utilizamos un tipo integer (32 bits), estariamos perdiendo 16 bits al no usar un tipo short
Los tipos de datos de .NET los podemos definir en dos grandes grupos:
Estructuras Matrices
Numeraciones Clases
Los tipos por valor son tipos de datos cuyo valor se almacena en la pila (memoria cercana). Se puede decir que
el acceso al valor contenido en uno de estos tipos es directo como un puntero que apunta al valor, es decir se
almacena directamente en la memoria reservada para ese tipo y el puntero indica la dirección y cualquier
cambio que hagamos lo haremos directamente en la dirección donde se encuentra dicho valor, de igual forma
cuando copiamos valores de un tipo por valor a otro, estaremos haciendo copias independientes.
Ejemplo:
Dim x1 As Integer = 5
Dim x2 As Integer
x2 = x1
x1 = 15
Console.Write("x1:{0} y x2:{1}", x1, x2)
Los tipos por referencia se almacenan en el heap o memoria "lejana", a diferencia de los tipos por valor, los
tipos por referencia lo único que almacenan es una referencia o dirección al valor asignado, es decir para una
dirección obtenemos otra dirección en donde recién se encuentra el valor. Al hacer copias de tipos por
referencia, realmente lo que copiamos es la referencia propiamente dicha, pero no el contenido de dicho valor.
Ejemplo:
Forma Simplificada
Variable([Operador] = Valor)
Contador += 1
Contador -= 1
Contador *= 1
Contador /= 1
Ámbitos y Visibilidad
Procedimiento o Bloque
Dim P as Integer
Ejemplo:
Conversión de Tipos
1.5 Enumeraciones
Las enumeraciones son los tipos de datos que son definidas por el desarrollador, que están relacionadas entre
si, con un significado en común. La importancia de este tipo de datos se manifiesta cuando queremos manejar
tipos de una serie de constantes con nombres comunes para nosotros, es decir podemos definir un tipo con un
nombre común para nosotros con un valor predefinido sin poder cambiarlo, así en vez de usar valores
numéricos predefinidos podemos usar estos tipos que devolverán el valor definido al inicio de su creación.
Las enumeraciones pueden ser de cualquier tipo numérico, incluso enteros sin signo, aunque el valor
predefinido por default es el de tipo Integer. Podemos declarar una enumeración de varias formas:
Los tipos serán de tipo Integer, y los valores para rojo es 1, verde 2, y azul 3.
Los tipos serán de tipo Integer, y los valores para nNuevo es 1, nModificado es 4, y para nCastigado será 5.
1.6 Estructuras
Una estructura es una combinación de tipos de datos que se crea combinando otros tipos de datos. Las
estructuras son de tipo por valor (es decir, una variable de tipo de estructura contiene los datos de la estructura
en lugar de 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.
Esquema:
Ejemplo:
Enum Tipo
TipoA
TipoB
End Enum
Y al usar la estructura, VS2005 nos ayudara a definir que tipo deseamos usar:
Laboratorio 02:
I.- Crear el siguiente formulario, con el nombre frmAlumnos, con el siguiente diseño:
txtArea
cmbSeccion
numTipAlumno
btnEvaluar
grpCalculo
grpPromedio
txtN1
txtPromedio
txtN2
txtPromedioPorc
txtN3
btnCalcular
txtN4
II.- Agregar un modulo con el nombre modAlumnos, desde el explorador de soluciones seleccionar el proyecto,
dar el Click derecho y seleccionar agregar un nuevo elemento.
III.- En la propiedad Ítems del control cmbSeccion agregamos los siguientes elementos.
IV.- Dentro del modulo crearemos una estructura que representara la ficha de un alumno y una enumeración
para los tipos de alumnos:
Enum TipoAlumno
Letras = 1
Ciencias = 2
Ingenieria = 3
End Enum
Structure FichaAlumno
Public Nombre As String
Public Curso As String
Public Area As String
Public Seccion As String
Public Tipo As TipoAlumno
End Structure
With stFicha
.Nombre = ""
.Curso = ""
.Area = ""
.Seccion = ""
.Tipo = 0
End With
Me.grpCalculo.Enabled = False
Me.grpPromedio.Visible = False
With stFicha
.Nombre = Me.txtNombre.Text
.Curso = Me.txtCurso.Text
.Area = Me.txtArea.Text
.Seccion = Me.cmbSeccion.SelectedItem
.Tipo = Me.numTipoAlumno.Value
End With
Me.grpCalculo.Enabled = True
NT *= xVar + 1
Me.txtPromedioPorc.Text = Format(NT, "##.00")
Me.grpPromedio.Visible = True
Realizar lo siguiente:
I.- Modificar el promedio según el tipo de alumno, para esto se muestra los pesos con respecto al tipo:
Ciencias: N1*2 + N2*2 + N3*2 + N4*3
Ingeniería: N1 + N2*3 + N3*3 + N4*2
Letras: N1 + N2 + N3*2 + N4*2
III.- Crear un nuevo tipo de Alumno “Sociología” cuyo promedio será el promedio inicial, y el calculo del
promedio porcentual debe ser igual a los alumnos de Letras.
1.7 Matrices
Una matriz es una secuencia de elementos de datos del mismo tipo. Podemos acceder a elementos individuales
de una matriz utilizando el nombre de la matriz y un índice o índices (empezando por 0) para especificar la
posición del elemento en la matriz. Una matriz tiene una o más dimensiones con uno o mas elementos en cada
dimensión.
El problema de ReDim es que redimensiona a la matriz blanqueando la matriz, para evitar esto, podemos
agregar la palabra clave Preserve, después de las líneas anteriores colocar lo siguiente:
'Limite Inferior
Dim LimInf As Integer = Clientes.GetLowerBound(0)
'Limite Superior
Dim LimSup As Integer = Clientes.GetUpperBound(0)
Uso de Condicionales:
'Forma Corta:
If Variable = Valor Then Valor = ""
'Forma Anidada:
If Variable = Valor Then Valor = "" : Variable = ""
Forma Comprimida.
Condicionales Múltiples.
Los procedimientos son las sentencias de código ejecutable de un programa. las instrucciones de un
procedimiento están delimitadas por una instrucción de declaración y una instrucción End.
Procedimientos Sub: Los procedimientos Sub, realizan acciones pero no devuelven un valor al procedimiento
que realiza la llamada.
Procedimientos Function: Los procedimientos Function, realizan acciones y pueden devolver un valor al
programa que realiza la llamada.
Argumentos en los Procedimientos: Los argumentos son datos pasados a procedimientos, podemos dos
tipos de argumentos: ByVal y ByRef.
Laboratorio 03:
I.- Crear el siguiente formulario, con el nombre frmVenta, con el siguiente diseño:
II.- Agregar un modulo con el nombre modVentas, desde el explorador de soluciones, dentro de el agregar una
región:
Module modVentas
#Region "Funiconalidades para las ventas"
#End Region
End Module
III.- Dentro de la región escribir lo siguiente (Declaración de un Enum y una matriz con su método para llenar
dicha matriz):
Enum TipoCliente
Normal
Mayorista
Premiun
Moroso
Nuevo
End Enum
Listado(3, 1) = "85.5"
Listado(4, 0) = "Repiza de Mueble ADF45"
Listado(4, 1) = "78.5"
Listado(5, 0) = "Plancha de Madera PT23"
Listado(5, 1) = "110.2"
End Sub
V.- Crear una función que realiza la búsqueda del producto, y llame al procedimiento anterior para realizar el
descuento.
VI.- En el Load del Formulario, primero llenamos la matriz con los productos, luego realizamos el recorrido por
esta matriz, hasta llenar el Listbox de todos los productos.
LlenarListado()
For i As Integer = 0 To Listado.GetUpperBound(0) - 1
Me.lstProductos.Items.Add(Listado(i, 0))
Next
VII.- En el botón btnItodos colocamos lo siguiente, para que todos los productos se desplacen hacia el Listbox
lstPedidos.
VIII.- En el botón btnIUno colocamos lo siguiente, para que los productos seleccionados se desplacen hacia el
Listbox lstPedidos.
Me.lstPedidos.Items.Add(Me.lstProductos.SelectedItem)
Me.lstProductos.Items.Remove(Me.lstProductos.SelectedItem)
Realizar lo siguiente:
I.- De los productos seleccionados, realizar el cálculo del total de los productos seleccionados:
II.- realizar las modificaciones necesarias para poder agregar nuevos productos y mantener la misma
funcionalidad de la pantalla.