Post on 14-Apr-2016
description
Los Arrays o arreglos son conjuntos de Variables Agrupadas con un nombre, que se pueden manejar juntas o individualmente, en Visual Basic .Net se pueden tener arreglos desde una dimensión y hasta un máximo de 32 dimensiones.
Como se definenPara definir un arrays se utiliza Dim, Private, Friend o Public según el alcande del mismo, por ejemplo la orden:
Dim Cursos( , ) As String
Define el array Cursos sin asignarle la cantidad de elementos de cada dimensión. El array anterior tendrá que redefinirse a nivel de procedimiento usando la instrucción Redim, está funciona unicamente cambiando el tamaño de la última dimensión. Generalmente se usa una variable que va aumentando, suponer que la variable Incluidos es la utilizada, la instrucción podría ser como la siguiente:
Redim Cursos(2,Incluidos)
y para conservar los datos actuales en el Array se utiliza la palabra Preserve:
Redim Preserve Cursos(2,Incluidos)
Algo de lo que contieneTodos los elementos del arrays deben ser del mismo tipo.En Visual Studio .Net los arrays derivan de la clase Arrays del NameSpace System. Esta Clase (Array) proporciona los métodos para crear, manipular, realizar busquedas y ordenación de arrays.
Un elemento es un valor de Array, al que se puede acceder haciendo uso del indice o indices según las dimensiones. Por ejemplo, para acceder al elemento de la segunda fila y la tercera columna del arrays bidimensional con nombre Cursos se debe escribir Cursos(1,2), cabe adelantar que en Visual Basic .Net el valor inicial de cada dimensión es CERO. El métodoGetLowerBound permite obtener el límite inferior de una determinada dimensión. Para el límite superior de la dimensión especificada se utiliza el método GetUpperBound.
La longitud de Array es el número total de elementos que puede contener. El método GetLength permite obtener el número de elementos de un array.
El rango de Array es el número de dimensiones de Array. La Propiedad Rank permite obtener el número de dimensiones de una array.
EjemploEl sistema de control de Matriculas de un instituto es muy lento, se necesita que los datos puedan procesarse de manera mas rápida y segura, se decide hacer un sistema por computadora; este deberá registrar según los siguientes productos descritos en la tabla:
Cod. Producto DescripciónIES Computación e
InformáticaSEC Secretariado EjecutivoDBS Da Bussines
De acuerdo a los Productos antes registrados pueden crearse cursos o promociones, el sistema ingresará y pedirá: Número de la promoción en el formato 9999-XX donde las 9999 será el año actual y las XX el número del curso registrado en el año, por ejemplo; 01, 02, 03, etc., también deberá registrarse la descripción del curso, la fecha de inicio, el número de vacantes y la cantidad de matriculados.
Una vez registrado el o los cursos, se podrá matricular alumnos, de los cuales se pedirá el ingreso de Apellidos, Nombres, teléfono y fecha de matricula. Los datos por cada curso deben de registrarse y aparecer en un formulario de reporte.
Esto es los datos que podemos ingresar, si queremos mas datos ingresamos mas en la tabla:
Los datos de la tabla siguiente :
Producto Promociones Matriculados
IES
Computación e Informática
2004-06
Computacion e Informática
Fecha de Inicio: 01/11/2004
Vacantes: 25
Luque Villacorta, Fernando
Telf. 9458548
Fecha: 25/10/2004
2004-07
Computación e Informática
Fecha de Inicio: 05/11/2004
Vacantes: 20
Pereda Geronimo, Luis
Telf. 9444567
Fecha: 28/09/2004Terranova Carrion Esmeralda
Telf. 9499498
Fecha: 30/09/2004
SEC
Secretariado Ejecutivo
2004-10
Secretariado Ejecutivo
Fecha de Inicio: 08/11/2004
Vacantes: 30
Hinostroza Ramirez Carlos
Telf. 9645676
Fecha: 30/09/2004Villacorta Acosta, Carol
Telf. 96442567
Fecha: 30/09/2004
2004-12
Secretariado Ejecutivo
Fecha de Inicio: 12/11/2004
vacantes: 25
Bolivar Saldaña, Silvia
Telf. 96656443
Fecha: 30/09/2004Sanchez Campos, Julia
Telf. 9644444
Fecha: 01/10/2004
Este es el código en Visual .net:
A continuación sigue parte del código en Visual Basic:
En el Módulo:
'************* MODULO *******************
'Programación: Ing. Fernando Luque Sánchez
'Noviembre 2004
Module SistMatriculas
'Definicion de las variables para Productos
Public vProducto As String
'Para saber el Número de Promociones Aperturadas
Public vNumPromos As Integer
'Para saber el Número de Alumnos Matriculados
Public vNumAlumnos As Integer
'''' ARREGLOS PARA ALMACENAR LOS DATOS
'Para Alamcenar los datos de las promociones
Public aPromos(,) As String 'CódPromo, Descrip, Fecha, Vacantes, Matriculados
'Para Alamcenar los datos de los alumnos
Public aAlumnos(,) As String ' CodAlumno, CodPromo, Descrip,
' Nombre, Telefono y Fecha Matricula
'Para el Título del Reporte
Public VTitulo As String
'Datos de un Curso Aperturado
Public vDescrip As String
Public vCodigo As String
Public Vfechainicio As Date
Public vVacantes As Integer
'Para saber si los Formularios están abiertos
Public fPromosA As Integer
End Module
En el formulario Principal
Public Class frmPrincipal
Inherits System.Windows.Forms.Form
#Region " Código generado por el Diseñador de Windows Forms "
*** codigo eliminado
#End Region
Private Sub Reportes(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles mnuRepPromos.Click
If sender Is mnuRepPromos Then
'REPORTE SOLAMENTE DE LAS PROMOCIONES ABIERTAS
Dim NReporte As New frmReportes()
VTitulo = "Reporte de Promociones"
NReporte.ShowDialog()
ElseIf sender Is mnuRepAlumnosPromo Then
'Reporte de los alumnos por Promocion
Dim RepAlumnos As New frmRepAlumnxPromo()
RepAlumnos.ShowDialog()
End If
End Sub
Private Sub Salir(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles mnuSalir.Click
Application.Exit()
End Sub
'MUESTRA EL FORMULARIO DE INGRESO DE PROMOCIONES.
Private Sub mnuIngPromo_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles mnuIngPromo.Click
mnuIngPromo.Enabled = False
Dim iPromos As New frmPromociones()
iPromos.MdiParent = Me
iPromos.Show()
End Sub
'Procedimientos para la Inserción de Alumnos
Private Sub mnuIngAlumnos_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles mnuIngAlumnos.Click
Dim formAlumnos As New fAlumnosMatri()
Me.mnuIngAlumnos.Enabled = False
formAlumnos.ShowDialog()
End Sub
'ACERCA DE....
Private Sub AcercaDe(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MenuItem2.Click
Dim fAcerca As New frmAcerca()
fAcerca.ShowDialog()
End Sub
'Para determinar si el número de Promociones es Mayor a Cero
Private Sub mnuMoves_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles mnuMoves.Click, mnuMoves.Select
If fPromosA = 0 Then mnuIngPromo.Enabled = True _
Else mnuIngPromo.Enabled = False
If vNumPromos = 0 Then mnuIngAlumnos.Enabled = False _
Else mnuIngAlumnos.Enabled = True
End Sub
Private Sub mnuReporte_Select(ByVal sender As Object, ByVal e As System.EventArgs) Handles mnuReporte.Select
If vNumPromos = 0 Then mnuRepPromos.Enabled = False _
Else mnuRepPromos.Enabled = True
If vNumPromos = 0 OrElse vNumAlumnos = 0 Then mnuRepAlumnosPromo.Enabled = False _
Else mnuRepAlumnosPromo.Enabled = True
End Sub
End Class
Otro ejemplo de progamacion con Arrays:
Option Strict On
'<summary>
' Colección de objetos de tipo Control
'</summary>
Public Class ControlArray
Inherits CollectionBase
'
Private mNombre As String
'
Public Sub New()
MyBase.New()
End Sub
Public Sub New(ByVal elNombre As String)
MyBase.New()
mNombre = elNombre
End Sub
'
Public Function Add(ByVal ctrl As Control) As Integer
Return MyBase.List.Add(ctrl)
End Function
'
' Asignar los controles que contendrá esta colección (14/Nov/02)
Public Sub AsignarControles(ByVal ctrls As Control.ControlCollection, _
Optional ByVal elNombre As String = "")
' Asignar los controles a los arrays,
' para que esto funcione automáticamente los nombres de los controles
' deberían tener el formato: nombre_numero
' nombre del control seguido de un guión bajo y el índice
If elNombre = "" Then
elNombre = mNombre
End If
' si no se indica el nombre de los controles a añadir,
' lanzar una excepción
If elNombre = "" Then
Throw New ArgumentException( _
"No se ha indicado el nombre base de los controles")
Exit Sub
End If
'
Me.Clear()
asignarLosControles(ctrls, elNombre)
Me.Reorganizar()
End Sub
Private Sub asignarLosControles( _
ByVal ctrls As Control.ControlCollection, _
ByVal elNombre As String)
Dim ctr As Control
'
For Each ctr In ctrls
' Hacer una llamada recursiva por si este control "contiene" otros
asignarLosControles(ctr.Controls, elNombre)
'
If ctr.Name.IndexOf(elNombre) > -1 Then
Me.Add(ctr)
End If
Next
End Sub
'
Public Function Contains(ByVal ctrl As Control) As Boolean
list.Contains(ctrl)
End Function
'
Public Function IndexOf(ByVal ctrl As Control) As Integer
Return list.IndexOf(ctrl)
End Function
'
Public Function Index(ByVal name As String) As Integer
Dim ctrl As Control
Dim i As Integer
Dim hallado As Integer = -1
'
For i = 0 To List.Count - 1
ctrl = CType(list(i), Control)
If StrComp(ctrl.Name, name, CompareMethod.Text) = 0 Then
hallado = i
Exit For
End If
Next
Return hallado
End Function
Public Function Index(ByVal ctrl As Control) As Integer
Dim i As Integer
'
i = ctrl.Name.LastIndexOf("_")
' Si el nombre no tiene el signo _
If i = -1 Then
i = list.IndexOf(ctrl)
Else
i = CInt(ctrl.Name.Substring(i + 1))
End If
Return i
End Function
'
Public Sub Insert(ByVal index As Integer, ByVal ctrl As Control)
List.Insert(index, ctrl)
End Sub
'
Default Public Property Item(ByVal index As Integer) As Control
Get
Return CType(List.Item(index), Control)
End Get
Set(ByVal Value As Control)
list.Item(index) = Value
End Set
End Property
Default Public Property Item(ByVal name As String) As Control
Get
Dim index As Integer = Me.Index(name)
' Si existe, devolverlo, sino, crear uno nuevo
If index = -1 Then
'index = Me.Add(ctrl)
End If
Return CType(List.Item(index), Control)
End Get
Set(ByVal Value As Control)
Dim index As Integer = Me.Index(name)
If index = -1 Then
index = Me.Add(Value)
End If
list.Item(index) = Value
End Set
End Property
Default Public Property Item(ByVal ctrl As Control) As Control
Get
Return CType(List(Me.IndexOf(ctrl)), Control)
End Get
Set(ByVal Value As Control)
List(Me.IndexOf(ctrl)) = Value
End Set
End Property
'
Public Property Nombre() As String
Get
Return mNombre
End Get
Set(ByVal Value As String)
mNombre = Value
End Set
End Property
'
Public Sub Remove(ByVal ctrl As Control)
List.Remove(ctrl)
End Sub
'
' Reorganizar el contenido de la colección y ordenar por índice
Public Sub Reorganizar()
Dim ca As New ControlArray()
Dim ctr As Control
Dim i As Integer
'
For i = 0 To Me.Count - 1
For Each ctr In Me
If i = Me.Index(ctr) Then
ca.Add(ctr)
Exit For
End If
Next
Next
'
Me.Clear()
For Each ctr In ca
Me.Add(ctr)
Next
End Sub
End Class
Option Strict On
Public Class Form1
Inherits System.Windows.Forms.Form
#Region " Código generado por el Diseñador de Windows Forms "
'...
#End Region
'
' Arrays para contener los controles
' (definir los arrays que vamos a usar)
Private m_Label1 As New ControlArray("Label1")
Private m_TextBox1 As New ControlArray("TextBox1")
Private m_RadioButton1 As New ControlArray("RadioButton1")
'
' Asignar los eventos a los controles
Private Sub asignarEventos()
Dim txt As TextBox
Dim opt As RadioButton
'
' Aquí estarán los procedimientos a asignar a cada array de controles
'
For Each opt In m_RadioButton1
AddHandler opt.KeyPress, AddressOf RadioButton1_KeyPress
Next
For Each txt In m_TextBox1
AddHandler txt.Enter, AddressOf TextBox1_Enter
AddHandler txt.KeyPress, AddressOf TextBox1_KeyPress
AddHandler txt.Leave, AddressOf TextBox1_Leave
Next
'
End Sub
'
Private Sub Form1_Load(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
'
' Asignar los controles y reorganizar los índices
m_Label1.AsignarControles(Me.Controls)
m_TextBox1.AsignarControles(Me.Controls)
m_RadioButton1.AsignarControles(Me.Controls)
' Asignar sólo los eventos
asignarEventos()
End Sub
'
Private Sub TextBox1_Enter(ByVal sender As Object, _
ByVal e As System.EventArgs)
'
Dim txt As TextBox = CType(sender, TextBox)
Dim Index As Integer = m_TextBox1.Index(txt)
'
txt.SelectAll()
' resaltar la etiqueta
m_Label1(Index).BackColor = Color.FromKnownColor(KnownColor.ControlDark)
'
End Sub
Private Sub TextBox1_Leave(ByVal sender As Object, ByVal e As EventArgs)
'
Dim txt As TextBox = CType(sender, TextBox)
Dim Index As Integer = m_TextBox1.Index(txt)
'
' poner la etiqueta con el color normal
m_Label1(Index).BackColor = Color.FromKnownColor(KnownColor.Control)
End Sub
Private Sub TextBox1_KeyPress(ByVal sender As Object, _
ByVal e As System.Windows.Forms.KeyPressEventArgs)
'
If e.KeyChar = ChrW(Keys.Return) Then
Dim txt As TextBox = CType(sender, TextBox)
Dim Index As Integer = m_TextBox1.Index(txt)
'
If Index = 2 Then
m_RadioButton1(0).Focus()
Else
m_TextBox1(Index + 1).Focus()
End If
End If
End Sub
'
Private Sub RadioButton1_KeyPress(ByVal sender As Object, _
ByVal e As System.Windows.Forms.KeyPressEventArgs)
If e.KeyChar = ChrW(Keys.Return) Then
Dim opt As RadioButton = CType(sender, RadioButton)
Dim Index As Integer = m_RadioButton1.Index(opt)
'
If Index = 0 Then
m_RadioButton1(Index + 1).Focus()
Else
m_TextBox1(0).Focus()
End If
End If
End Sub
'
Private Sub btnCerrar_Click(ByVal sender As Object, _
ByVal e As System.EventArgs) _
Handles btnCerrar.Click
Me.Close()
End Sub
End Class