Professional Documents
Culture Documents
Basic .Net se pueden tener arreglos desde una dimensin y hasta un mximo de 32 dimensiones.
Como se definen
Para definir un arrays se utiliza Dim, Private, Friend o Public segn el alcance del mismo, por ejemplo la orden: Dim Cursos( , ) As String Define el array Cursos sin asignarle la cantidad de elementos de cada dimensin. El array anterior tendr que redefinirse a nivel de procedimiento usando la instruccin Redim, est funciona unicamente cambiando el tamao de la ltima dimensin. Generalmente se usa una variable que va aumentando, suponer que la variable Incluidos es la utilizada, la instruccin podra 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)
Ejemplo
El sistema de control de Matriculas de un instituto es muy lento, se necesita que los datos puedan procesarse de manera mas rpida y segura, se decide hacer un sistema por computadora; este deber registrar segn los siguientes productos descritos en la tabla: Cod. Producto IES SEC DBS Descripcin Computacin Informtica Secretariado Ejecutivo Da Bussines
De acuerdo a los Productos antes registrados pueden crearse cursos o promociones, el sistema ingresar y pedir: Nmero de la promocin en el formato 9999-XX donde las 9999 ser el ao actual y las XX el nmero del curso registrado en el ao, por ejemplo; 01, 02, 03, etc., tambin deber registrarse la descripcin del curso, la fecha de inicio, el nmero 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, telfono 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 2004-06 Computacion e Informtica Fecha de Inicio: 01/11/2004 Vacantes: 25 Pereda Geronimo, Luis Matriculados Luque Villacorta, Fernando Telf. 9458548 Fecha: 25/10/2004
Vacantes: 20
Fecha: 30/09/2004 Hinostroza Ramrez Carlos Telf. 9645676 Fecha: 30/09/2004 Villacorta Acosta, Carol Telf. 96442567 Fecha: 30/09/2004 Bolvar Saldaa, Silvia
2011-10 Secretariado Ejecutivo Fecha de Inicio: 08/11/2011 SEC Secretariado Ejecutivo 2011-12 Secretariado Ejecutivo Fecha de Inicio: 12/11/2011 vacantes: 25 Vacantes: 30
Telf. 96656443 Fecha: 30/09/2004 Sanchez Campos, Julia Telf. 9644444 Fecha: 01/10/2004
'Noviembre 2004 Module SistMatriculas 'Definicion de las variables para Productos PublicvProducto As String 'Para saber el Nmero de Promociones Aperturadas PublicvNumPromos As Integer
'Para saber el Nmero de Alumnos Matriculados PublicvNumAlumnos As Integer '''' ARREGLOS PARA ALMACENAR LOS DATOS 'Para Alamcenar los datos de las promociones PublicaPromos(,) As String Matriculados 'CdPromo, Descrip, Fecha, Vacantes,
'Para Alamcenar los datos de los alumnos PublicaAlumnos(,) As String ' ' CodAlumno, CodPromo, Descrip, Nombre, Telefono y Fecha Matricula
'Datos de un Curso Aperturado PublicvDescrip As String Public vCodigo As String Public VfechainicioAs Date PublicvVacantes As Integer
End Module
En el formulario Principal
#End Region
'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 Insercin 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 nmero 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 Syst em.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
OptionStrictOn '<summary> ' Coleccin de objetos de tipo Control '</summary> PublicClassControlArray InheritsCollectionBase ' PrivatemNombreAsString ' PublicSubNew() MyBase.New() EndSub PublicSubNew(ByValelNombreAsString) MyBase.New() mNombre = elNombre EndSub
' PublicFunctionAdd(ByVal ctrl As Control) AsInteger ReturnMyBase.List.Add(ctrl) EndFunction ' ' Asignar los controles que contendr esta coleccin (14/Nov/02) PublicSubAsignarControles(ByValctrlsAsControl.ControlCollection, _ OptionalByValelNombreAsString = "") ' Asignar los controles a los arrays, ' para que esto funcione automticamente los nombres de los controles ' deberan tener el formato: nombre_numero ' nombre del control seguido de un guin bajo y el ndice IfelNombre = "" Then elNombre = mNombre EndIf ' si no se indica el nombre de los controles a aadir, ' lanzar una excepcin IfelNombre = "" Then ThrowNewArgumentException( _ "No se ha indicado el nombre base de los controles") ExitSub EndIf ' Me.Clear() asignarLosControles(ctrls, elNombre) Me.Reorganizar() EndSub PrivateSubasignarLosControles( _ ByValctrlsAsControl.ControlCollection, _ ByValelNombreAsString) DimctrAs Control ' ForEachctrInctrls
' Hacer una llamada recursiva por si este control "contiene" otros asignarLosControles(ctr.Controls, elNombre) ' Ifctr.Name.IndexOf(elNombre) > -1 Then Me.Add(ctr) EndIf Next EndSub ' PublicFunction Contains(ByVal ctrl As Control) AsBoolean list.Contains(ctrl) EndFunction ' PublicFunctionIndexOf(ByVal ctrl As Control) AsInteger Returnlist.IndexOf(ctrl) EndFunction ' PublicFunction Index(ByVal name AsString) AsInteger Dim ctrl As Control DimiAsInteger DimhalladoAsInteger = -1 ' Fori = 0 ToList.Count - 1 ctrl = CType(list(i), Control) IfStrComp(ctrl.Name, name, CompareMethod.Text) = 0 Then hallado = i ExitFor EndIf Next Returnhallado EndFunction PublicFunction Index(ByVal ctrl As Control) AsInteger DimiAsInteger ' i = ctrl.Name.LastIndexOf("_")
' Si el nombre no tiene el signo _ Ifi = -1 Then i = list.IndexOf(ctrl) Else i = CInt(ctrl.Name.Substring(i + 1)) EndIf Returni EndFunction ' PublicSub Insert(ByVal index AsInteger, ByVal ctrl As Control) List.Insert(index, ctrl) EndSub ' DefaultPublicProperty Item(ByVal index AsInteger) As Control Get ReturnCType(List.Item(index), Control) EndGet Set(ByVal Value As Control) list.Item(index) = Value EndSet EndProperty DefaultPublicProperty Item(ByVal name AsString) As Control Get Dim index AsInteger = Me.Index(name) ' Si existe, devolverlo, sino, crear uno nuevo If index = -1 Then 'index = Me.Add(ctrl) EndIf ReturnCType(List.Item(index), Control) EndGet Set(ByVal Value As Control) Dim index AsInteger = Me.Index(name) If index = -1 Then index = Me.Add(Value) EndIf
list.Item(index) = Value EndSet EndProperty DefaultPublicProperty Item(ByVal ctrl As Control) As Control Get ReturnCType(List(Me.IndexOf(ctrl)), Control) EndGet Set(ByVal Value As Control) List(Me.IndexOf(ctrl)) = Value EndSet EndProperty ' PublicPropertyNombre() AsString Get ReturnmNombre EndGet Set(ByVal Value AsString) mNombre = Value EndSet EndProperty ' PublicSub Remove(ByVal ctrl As Control) List.Remove(ctrl) EndSub ' ' Reorganizar el contenido de la coleccin y ordenar por ndice PublicSubReorganizar() DimcaAsNewControlArray() DimctrAs Control DimiAsInteger ' Fori = 0 ToMe.Count - 1 ForEachctrInMe Ifi = Me.Index(ctr) Then ca.Add(ctr)
ExitFor EndIf Next Next ' Me.Clear() ForEachctrInca Me.Add(ctr) Next EndSub EndClass
OptionStrictOn PublicClass Form1 Inherits System.Windows.Forms.Form #Region " Cdigo generado por el Diseador de Windows Forms " '... #EndRegion ' ' Arrays para contener los controles ' (definir los arrays que vamos a usar) Private m_Label1 AsNew ControlArray("Label1") Private m_TextBox1 AsNew ControlArray("TextBox1") Private m_RadioButton1 AsNew ControlArray("RadioButton1") ' ' Asignar los eventos a los controles PrivateSub asignarEventos() Dim txt As TextBox Dim opt As RadioButton '
' Aqu estarn los procedimientos a asignar a cada array de controles ' ForEach opt In m_RadioButton1 AddHandler opt.KeyPress, AddressOf RadioButton1_KeyPress Next ForEach txt In m_TextBox1 AddHandler txt.Enter, AddressOf TextBox1_Enter AddHandler txt.KeyPress, AddressOf TextBox1_KeyPress AddHandler txt.Leave, AddressOf TextBox1_Leave Next ' EndSub ' PrivateSub Form1_Load(ByVal sender AsObject, _ ByVal e As System.EventArgs) HandlesMyBase.Load ' ' Asignar los controles y reorganizar los ndices m_Label1.AsignarControles(Me.Controls) m_TextBox1.AsignarControles(Me.Controls) m_RadioButton1.AsignarControles(Me.Controls) ' Asignar slo los eventos asignarEventos() EndSub ' PrivateSub TextBox1_Enter(ByVal sender AsObject, _ ByVal e As System.EventArgs) ' Dim txt As TextBox = CType(sender, TextBox) Dim Index AsInteger = m_TextBox1.Index(txt) ' txt.SelectAll() ' resaltar la etiqueta m_Label1(Index).BackColor = Color.FromKnownColor(KnownColor.ControlDark)
' EndSub PrivateSub TextBox1_Leave(ByVal sender AsObject, ByVal e As EventArgs) ' Dim txt As TextBox = CType(sender, TextBox) Dim Index AsInteger = m_TextBox1.Index(txt) ' ' poner la etiqueta con el color normal m_Label1(Index).BackColor = Color.FromKnownColor(KnownColor.Control) EndSub PrivateSub TextBox1_KeyPress(ByVal sender AsObject, _ ByVal e As System.Windows.Forms.KeyPressEventArgs) ' If e.KeyChar = ChrW(Keys.Return) Then Dim txt As TextBox = CType(sender, TextBox) Dim Index AsInteger = m_TextBox1.Index(txt) ' If Index = 2 Then m_RadioButton1(0).Focus() Else m_TextBox1(Index + 1).Focus() EndIf EndIf EndSub ' PrivateSub RadioButton1_KeyPress(ByVal sender AsObject, _ ByVal e As System.Windows.Forms.KeyPressEventArgs) If e.KeyChar = ChrW(Keys.Return) Then Dim opt As RadioButton = CType(sender, RadioButton) Dim Index AsInteger = m_RadioButton1.Index(opt) ' If Index = 0 Then m_RadioButton1(Index + 1).Focus() Else m_TextBox1(0).Focus()
EndIf EndIf EndSub ' PrivateSub btnCerrar_Click(ByVal sender AsObject, _ ByVal e As System.EventArgs) _ Handles btnCerrar.Click Me.Close() EndSub EndClass