You are on page 1of 22

Visual .

NET
Microsoft Visual Studio 2005 Unidades Didácticas 17,18, 19, 20

X UNIDAD 17. FORMULARIOS MULTIPLES SDI Y MDI.

Una aplicación de tipo o estilo SDI (Single Document Interface), Interfaz de
Documento Sencillo, esta compuesta fundamentalmente de un único formulario,
donde se realizan todas las operaciones.
Como aplicaciones Bloc Notas o Calculadora de Windows.

Sin embargo un programa puede contener más de un formulario. De hecho,
habitualmente los programas contienen múltiples formularios.
En este caso los formularios se abren en ventanas independientes.

Un programa siempre debe tener un formulario principal, que es el que aparece
al arrancar el programa. Se puede indicar cuál debe ser el formulario principal en el
menú My Project/aplicación/formulario de inicio.

Por defecto, el programa considera como formulario principal el primero que se
haya creado. El resto de formularios que se incluyan en el programa serán cargados
en su momento, a lo largo de la ejecución del programa.

Para añadir un nuevo formulario seleccionaremos Proyecto/Agregar Windows
Forms

o desde el explorador de soluciones sobre el nombre proyecto pulsar el botón
secundario

2VBNET 1
Visual .NET
Microsoft Visual Studio 2005 Unidades Didácticas 17,18, 19, 20

Para poder interactuar sobre los distintos formularios utilizaremos los siguientes
métodos:

Show: muestra un formulario, (Form.show())
Hide: oculta el formulario pero lo deja cargado. (Form.Hide())

En ambos casos se mantienen los valores de las variables.
Recuerda, si queremos hacer al formulario sobre el que estamos pondremos me.

Al utilizar el método Show las ventanas actúan de forma independiente, sin
embargo si se quiere ejercer un control sobre el orden de proceso de los
formularios deberemos utilizar la forma modal.
Los formularios modales aparecen en la parte superior de un formulario principal, y
el usuario no puede acceder a éste hasta que se haya cerrado el formulario modal.

Para mostrar un formulario modal utilizaremos el método ShowDialog().

Si queremos hacer referencia a un objeto que se encuentra en otro formulario
pondremos delante el nombre del formulario.
Por ejemplo, estando en el formulario1 si queremos hacer referencia a un objeto del
formulario2 pondremos:

Form2.Objeto

Como cerrar los formularios y finalizar la aplicación.

Una forma de cerrar la aplicación es utilizando el función End. Podemos cerrar
mediante el método Application.Exit para que la aplicación finalice.

Sin embargo, también puede terminar una aplicación cerrando el formulario
principal. Por ejemplo, si tenemos un formulario inicial Form1, y desde aquí se
llama al formulario Form2 mediante Show(). Siempre que se cierre el formulario
inicial (Form1), los demás formularios desaparecerán y finalizará la aplicación.

El método para cerrar un formulario es Close(): form.close()

1.ejercicio

Crea el siguiente proyecto con los siguientes formularios:

Después de seleccionar un nombre en el formulario principal, al pulsar el botón
Saludar, mostrará el saludo desde el formulario Saludar y ocultará el principal.

2VBNET 2
Visual .NET
Microsoft Visual Studio 2005 Unidades Didácticas 17,18, 19, 20

Desde el formulario Saludar al pulsar el botón Formulario Principal se mostrará el
formulario principal y se ocultará el formulario Saludar.

Prueba:

1. Mostrando los dos formularios cuando se pulsa Saludar de forma no modal.
2. Mostrando los dos formularios cuando se pulsa Saludar de forma modal.

2.ejercicio

Crea un proyecto que contenga los siguientes formularios:

Tanto si se pulsa desde el menú o desde el botón se visualizará el formulario
correspondiente.

2VBNET 3
Visual .NET
Microsoft Visual Studio 2005 Unidades Didácticas 17,18, 19, 20

FORMULARIOS MULTIPLES MDI

El estándar MDI permite que los programas trabajen con múltiples formularios
contenidos dentro de un formulario primario o principal.

Como aplicaciones Word, Excel.. de Windows

Las características del formulario MDI principal son:

1. Si se mueve el formulario principal (contenedor) los formularios que están
dentro (secundarios) también se moverán.
2. Si se cierra el formulario principal se cierran todos los formularios abiertos
dentro de él.

Para indicar que un formulario MDI es primario (contenedor) pondremos la
propiedad del formulario IsMdiCointaner = True.

Las características de formularios MDI secundarios son:

1. Cada formulario secundario aparece dentro de los límites del formulario
primario. No puede ser movido fuera de los límites.
2. Cuando se minimiza una ventana secundaria, su icono aparecerá en la
ventana primaria.
3. Cuando se maximiza un formulario secundario, rellena todo el área interna
del formulario primario y además todos los secundarios también se
maximizan.

Para crear un formulario MDI secundario hay que establecer la propiedad
Mdiparent = nombre_formulario_MDIprimario.

Automáticamente la propiedad IsMdiChild se pondrá a true.

Por ejemplo: Si tenemos dos formularios form1 y form2 y consideramos que el
form1 es el formulario contenedor (principal) y form2 es el formulario
hijo(secundario) indicaremos:

En el formulario form1:

IsMdiCointaner = True.
My.Forms.Form2.MdiParent = Me

Al poner my.forms obtenemos todos los formularios que contiene el proyecto. En
nuestro caso

Para cerrar una ventana activa utilizaremos :

ActiveMdiChild.Close()

Para cerrar una ventana:

Me.Close()

2VBNET 4
Visual .NET
Microsoft Visual Studio 2005 Unidades Didácticas 17,18, 19, 20

Gestión de las ventanas secundarias

Como se ha mencionado antes se puede tener varias ventanas abiertas en el
formulario principal. Para organizar estas ventanas utilizaremos el método
LayoutMdi desde el formulario principal.
Este método acepta uno de estos parámetros:

Ejemplo: Me.LayoutMdi(MdiLayout.TileVertical) si queremos organizar las ventanas
de forma vertical.

¿Que ocurre cuando tanto el formulario contenedor como el hijo tiene menus?

Estos se organizan en función de lo que indique la propiedad MergeAction y
formaran un menú combinado.

MergeAction: obtiene u establece como se combinan los menus secundarios con
los menus primarios

Todo elemento que forma parte de un menu tiene esta propiedad.

Las opciones son:

Append: el elemento del menú es añadido a la colección de elementos del menú
principal con la qu esta siendo combinado.
Remove: El elemento del menú no estará incluido en el menú combinado.
Replace: Este elemento de menú sustituye al elemento de menú dentro de la
misma posición del menú combinado.

2VBNET 5
Visual .NET
Microsoft Visual Studio 2005 Unidades Didácticas 17,18, 19, 20

Ejercicio 3

Crea el siguiente que contiene formulario MDI. Contendrá un formulario
principal(contenedor) y dos formularios secundarios.

El formulario principal será:

Los formularios secundarios son:

Al comienzo se cargarán automaticamente los dos formularios.
La opción archivo me permite abrir el formulario 1 y el formulario 2.
La opción ventanas me permite organizar estos dos formularios de forma diferente.
(cascada, horizontal y vertical)

2VBNET 6
Visual .NET
Microsoft Visual Studio 2005 Unidades Didácticas 17,18, 19, 20

Ejercicio 4

Crea el siguiente proyecto de forma que tenga dos formularios un formulario
contenedor y un formulario secundario.

Al formulario contenedor le llamaremos: MDIpadre
Al formulario secundario: HIJO

El formulario contenedor tendrá la siguiente forma:

Un formulario hijo:

2VBNET 7
Visual .NET
Microsoft Visual Studio 2005 Unidades Didácticas 17,18, 19, 20

 Formulario padre: MDIpadre

Dentro del menú archivo:

La opción Nuevo permitirá crear un nuevo formulario que será igual al formulario
hijo creado. Solamente a medida que se vaya creando nuevos formularios se
cambiará el título del formulario.

Para ello se deberá introducir el siguiente código:

Dim ventanahijo As New Form2 ; definimos una variable de tipo form2 (formulario
hijo)
ventanahijo.MdiParent = Me ; indicamos quien es el formulario padre
ventanahijo.Show() ; decimos que se muestre el nuevo formulario

Deberás cambiar el título de la ventana a medida que vamos creando nuevos
formularios.

La opción Cerrar permitirá cerrar el formulario que este activo en ese momento.

La opción Salir mostrará un mensaje indicando que se va a cerrar y cerrará el
proyecto.

Para ello utilizaremos el evento FormClosing

Dentro del menú ventanas:

Las diferentes maneras de organizar las ventanas.

 Formulario hijo:

Al pulsar el botón Seleccionar imagen me permitirá seleccionar una imagen que
se encuentra en cualquier lugar del ordenador y a continuación visualizarlo en el
formulario.

Para ello se deberá utilizar el control OpenFileDialog donde las propiedades
principales son:

Propiedades

Propiedad Descripción

Title Contiene una cadena con el título que aparecerá en el cuadro
de diálogo.

InitialDirectory Ruta inicial que mostrará el control al abrirse

Filter tipo de archivos que mostrará el cuadro de diálogo al navegar
por el
sistema de archivos. El formato de esta cadena es el siguiente:
NombreArchivo (*.Extensión)|*.Extensión; pudiendo situar
varios filtros separados por el carácter de barra vertical ( | ).

2VBNET 8
Visual .NET
Microsoft Visual Studio 2005 Unidades Didácticas 17,18, 19, 20

FileName. Nombre del archivo en el que se realizará la escritura

DefaultExt Cadena con la extensión por defecto a aplicar sobre el nombre
del archivo.

CheckFileExists Valor lógico que nos permite comprobar si el archivo sobre el
que vamos a grabar ya existe.

ValidateNames Valor lógico que comprobará si el nombre de archivo
proporcionado contiene caracteres especiales, es decir, si se
trata de un nombre válido.

Métodos

Método Descripción

ShowDialog() Para mostrar la ventana de dialogo.

Por ejemplo:

'configurar el cuadro de diálogo por código
'ponemos al control OpenFileDialog el nombre dlgAbrir

Me.dlgAbrir.Title = "Seleccionar archivo a leer"
Me.dlgAbrir.Filename=""
Me.dlgAbrir.InitialDirectory = "E:\VISUAL BASIC NET"
Me.dlgAbrir.Filter = "Código fuente (*.vbproj)|*.vbproj|Texto (*.txt)|*.txt |todos|
*.*"

'abrir el diálogo

Me.dlgAbrir.ShowDialog()

Title

InitialDirectory

Filename

UNIDAD 18. INTERCAMBIO DATOS ENTRE PROGRAMAS. VARIABLES
GLOBALES Filter

2VBNET 9
Visual .NET
Microsoft Visual Studio 2005 Unidades Didácticas 17,18, 19, 20

Declaración variable

Varias variables de un mismo tipo en una misma línea:

Podemos declarar varias variables en una misma línea de la siguiente forma:

Dim a, b As Integer
Dim c As Integer, d As Integer

Declarar varios tipos de variables en una misma línea:

En este caso hay que indicar junto a cada variable el tipo de datos que queramos
que tenga.

Dim i As Integer, s As String

En este caso, tenemos dos variables de dos tipos distintos, cada una con su As tipo
correspondiente, pero separadas por una coma.
Pero si lo que pretendemos es que el que lea nuestro código se "caliente" el coco
intentando entenderlo... (por decir algo), podemos complicar aún más la cosa:

Inicializar las variables:

Hasta ahora hemos definido una variable en una fila y la hemos inicializado.
Dim N As Integer = 15

Pero si declaramos dos variables en la misma línea no podemos realizar:

Dim p, q As Integer = 1

Si queremos inicializar tendremos que hacer de las siguientes formas:

Dim p As Integer, q As Integer = 1
Dim p1 As Integer = 12, q1 As Integer = 1
Dim n1 As Integer = 12, n2, n3 As Integer
Dim n4 As Integer = 12, n5, n6 As Integer, n7 As Integer = 9
Dim h1 As Integer = 25, m1, m2 As Long, s3 As String = "Hola", d2, d3 As Decimal

Recomendación: Procura usar Dims diferentes para diferentes declaraciones, si no
quieres declarar cada variable con un Dim, al menos usa un Dim para cada tipo de
variable.
Por ejemplo el ultimo ejemplo quedaría más legible de esta otra forma:
Dim h1 As Integer = 25
Dim m1, m2 As Long
Dim s3 As String = "Hola"
Dim d2, d3 As Decimal

Además de que es más "legible", es más fácil de comprobar...

La visibilidad (o alcance) de las variables:

2VBNET 1
Visual .NET
Microsoft Visual Studio 2005 Unidades Didácticas 17,18, 19, 20

En un procedimiento
Dim No guarda el valor
Static Guarda el valor
En una clase o modulo (General Declarations )
Dim o Private Solamente se podrán utilizar en el modulo o clase definido. (Dim
edo Private es lo mismo)
Public Se puede utilizar en todos los módulos o clases que tiene un
proyecto pero se tiene que indicar siempre el modulo donde se ha
declarado la variable.: Form1.variable

Las variables declaradas en un procedimiento se dicen que son variables locales.

Estas variables pierden su valor al cerrar el procedimiento, sin embargo hay
ocasiones en que no queramos que esos valores de las variables locales se pierdan,
esto lo podemos hacer declarando las variables Static en lugar de Dim.

Static le indica al compilador que esa variable debe mantener el valor entre
distintas llamadas al procedimiento, para que de esa forma no se pierda el valor
que tuviera.

Las variables declaradas en un modulo, clase se dicen que son variables globales.

Para acceder a una variable global se debe poner el nombre del formulario donde
esta declarada y a continuación el nombre de la variable.
Una forma más cómoda es definir estas variables globales en un modulo aparte, de
forma que para acceder a una variable global solamente será necesario poner el
nombre de la variable.

Para definir el modulo haremos Proyecto/Agregar modulo

Ejercicio 5

2VBNET 11
Visual .NET
Microsoft Visual Studio 2005 Unidades Didácticas 17,18, 19, 20

Crea un proyecto con los siguientes formularios:

Desde el formulario principal se llama al formulario de las imágenes y en éste
segundo se selecciona una imagen (haciendo click en él) y a continuación en la
opción del formulario principal que este a true se cargará la imagen seleccionada.

Utilizar una variable global de dos formas distintas:

• Definiendo en el formulario principal la variable global.
• Definiendo un modulo

Analiza como sería el código si utilizamos un imagelist para cargar las imágenes en
el segundo formulario.

19. FUNCIONES Y PROCEDIMIENTOS DEFINIDOS POR EL USUARIO

A medida que se van complicando los programas se va aumentando la cantidad de
código, de forma que nos podemos encontrar con programas poco manejables y
con repetición de código.

La solución a estos dos problemas: la modularización o división del programa en
programas mas pequeños denominados subprogramas( procedimientos y
funciones).

Cada programa realizará una función y podrá ser llamado tantas veces como se
quiera y desde donde se quiera en función del ámbito donde está declarada.

Además al crear subprogramas ahorramos memoria y tiempo de desarrollo.

Para crear un procedimiento o función en Visual Basic deberemos introducir el
código manualmente desde la zona general o desde un modulo estándar.

Si queremos devolver un valor al sitio donde se ha realizado la llamada utilizaremos
un función en caso contrario un procedimiento.

Los nombres de los procedimientos tienen reglas de visibilidad parecidas a las de
las variables. Para llamar desde un formulario a un procedimiento Public definido
en otro formulario es necesario preceder su nombre por el del formulario en que

2VBNET 1
Visual .NET
Microsoft Visual Studio 2005 Unidades Didácticas 17,18, 19, 20

está definido. Sin embargo, si se desea llamar a un procedimiento definido en un
módulo no es necesario precederlo del nombre del módulo más que si hay
coincidencia de nombre con otro procedimiento de otro módulo estándar.

Se recomienda definir todos los procedimientos y funciones en un modulo, de esta
forma lo podrán utilizar todos los módulos o clases.

19.1 Funciones (function)

La sintaxis correspondiente a una función es la siguiente:

[Private] [Public] Function nombre ([parámetros]) [As tipo]

[sentencias]
[nombre = expresion]

End Function

si queremos salir de la función antes de que finalice utilizaremos la sentencia [Exit
Function]

donde

nombre es el nombre de la función. Será de un tipo u otro dependiendo del dato
que devuelva. Para especificar el tipo se utiliza la cláusula As Tipo.

parámetros son los argumentos que son pasados cuando se llama a la función.

La llamada a una función se hace de diversas formas.

Por ejemplo, una de las más usuales es la siguiente:

variable = nombre([argumentos])

donde argumentos son un lista de constantes, variables o expresiones separadas
por comas que son pasadas a la función (argumentos).

El número de argumentos debe ser igual al número de parámetros y los tipos de los
argumentos deben coincidir con los tipos de sus correspondientes parámetros.

El siguiente ejemplo corresponde a una función que devuelve como resultado la raíz
cuadrada de un número N:

Public Function Raiz (N As Double) As Double
If N < 0 Then
Exit Function
Else
Raiz = Sqr(N)
End Function

La llamada a esta función se hace de la forma siguiente:

Option Explicit
2VBNET
Private Sub C_raiz_Click() 1
Text1.Text =
raiz(Text1.Text)
End Sub
Visual .NET
Microsoft Visual Studio 2005 Unidades Didácticas 17,18, 19, 20

Procedimientos Sub

La sintaxis que define un procedimiento Sub es la siguiente:

[Public] [Private] Sub nombre [(parámetros)]
[sentencias]
[sentencias]
End Sub

si queremos salir de la función antes de que finalice utilizaremos la sentencia [Exit
Sub]
La explicación es análoga a la dada para funciones.

La llamada a un procedimiento Sub puede ser de alguna de las dos formas
siguientes:

Call nombre[(argumento1, argumento2, ...)]

o bien

nombre [argumento1, argumento2, ...]

El siguiente ejemplo corresponde a un procedimiento Sub que devuelve una
variable F que es la raíz cuadrada de un número N.

Public Sub proRaiz (N As Double, F As Double)
If N < 0 Then
Exit Sub 'Se mandaría un mensaje de error
Else
F = Sqr(N)
End If
End Sub

La llamada a este procedimiento Sub puede ser de cualquiera de las dos formas
siguientes:

Private Sub c_proraiz_Click()
Dim resultado As Double
Call proraiz(Text1.Text,
resultado)
Text1.Text = resultado
Argumentos
End Sub por referencia y por valor

2VBNET 1
Visual .NET
Microsoft Visual Studio 2005 Unidades Didácticas 17,18, 19, 20

En las funciones (Function) y en los procedimientos Sub de Visual Basic, por
defecto los argumentos se pasan por referencia (ByRef); de este modo, cualquier
cambio de valor que sufra un parámetro dentro de la función o del procedimiento
Sub también se produce en el argumento correspondiente de la llamada a la
función o al procedimiento Sub.

Cuando se llama a una función o a un procedimiento Sub, se podrá especificar
que el valor de un argumento no sea cambiado por la función o por el
procedimiento, poniendo dicho argumento entre paréntesis en la llamada.

Un argumento entre paréntesis en la llamada es un argumento pasado por
valor.

Por ejemplo,

Raiz ((Num)) ' En el caso de la función
Raiz (Num, F) ' En el caso del procedimiento

El argumento Num es pasado por valor. Significa que lo que se pasa es una copia
de Num. Si el procedimiento cambia ese valor, el cambio afecta sólo a la copia y no
a la propia variable Num.

Otra forma de especificar que un argumento será siempre pasado por valor es
anteponiendo la palabra ByVal a la declaración del parámetro en la cabecera del
procedimiento (Sub o Function).

Por ejemplo,

Function Raiz (ByVal N As Double)
Sub Raiz (ByVal N As Double, F As Double)

Pasar argumentos por valor evita modificaciones accidentales, pero tiene un coste
en tiempo y memoria que puede ser significativo cuando se pasan grandes
volúmenes de información, como sucede con vectores, matrices y estructuras.

Recordamos

En los procedimientos con eventos las llamadas debemos indicar el evento
asociado.
Por ejemplo:

Si al hacer clic en el Button1 de la barra de herramientas se debe ejecutar
el procedimiento VerdeToolStripMenuItem lo podremos hacer de dos formas
distintas:

1. forma

Private Sub VerdeToolStripMenuItem_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles BerdeaToolStripMenuItem.Click

PictureBox1.Load("..\..\resources\j0407175.jpg")
End Sub

Private Sub ToolStripButton1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles ToolStripButton1.Click

Call VerdeToolStripMenuItem_Click(sender, e)

2VBNET 1
Visual .NET
Microsoft Visual Studio 2005 Unidades Didácticas 17,18, 19, 20

End Sub
Para realizar la llamada al Nombre del procedimiento
procedimiento

O Call VerdeToolStripMenuItem_Click(nothing, nothing)

2. forma

Poniendo en el Handles el nombre del procedimiento.evento

Private Sub VerdeToolStripMenuItem_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles BerdeaToolStripMenuItem.Click,
ToolStripButton1.Click

PictureBox1.Load("..\..\resources\j0407175.jpg")

End Sub

Ejercicio 6

• Realiza el siguiente proyecto :

De tres formas diferentes:

 Procedimientos –Formularios: para cada operación realizar un procedimiento y
definir len el propio formulario.
 Procedimientos-Modulo: para cada operación realizar un procedimiento y crear
un modulo donde se definirán los procedimientos.
 Funciones-Modulo: para cada operación se definirá una función que estarán
declaradas en un modulo nuevo.

Ejercicio 7

2VBNET 1
Visual .NET
Microsoft Visual Studio 2005 Unidades Didácticas 17,18, 19, 20

Realiza el siguiente programa: Al comienzo se visualizará un formulario donde
habrá un menú. Las opciones del menú serán euskera y castellano. En función de la
selección se visualizará el siguiente formulario en euskera o en castellano

20. VARIABLES ESTRUCTURADAS: ARRAYS Y ESTRUCTURAS

2VBNET 1
Visual .NET
Microsoft Visual Studio 2005 Unidades Didácticas 17,18, 19, 20

Un array permite referirse a una serie de elementos del mismo tipo con un mismo
nombre, y hace referencia un único elemento de la serie utilizando uno o más
índices, como un vector o una matriz.

20.1 Arrays de variables.

Todos los elementos de un array deben ser del mismo tipo y están almacenados de
forma contigua en la memoria.

Entre los arrays de variables cabe distinguir dos tipos fundamentales, dependiendo
de que número de elementos sea constante o pueda variar durante la ejecución del
programa.

1. Arrays estáticos, cuya dimensión es siempre la misma.
2. Arrays dinámicos, cuya dimensión se puede modificar durante la ejecución del
programa.

Arrays estáticos

La declaración de un array estático dependerá de su ámbito.
La declaración de un array público se hace en la sección de declaraciones de un
módulo utilizando la sentencia Public.
La declaración de un array a nivel del módulo, clase o del formulario se hace en la
sección de declaraciones del módulo o del formulario utilizando la sentencia Dim o
Private.
Para declarar un array local a un procedimiento, se utiliza la sentencia Dim,
Private o Static dentro del propio procedimiento.

Ejemplos:

Dim vector(19) As Double

Este ejemplo declara un array de una dimensión de 20 elementos, llamado vector,
con veinte elementos, vector(0), vector(1), … , vector(19), cada uno de los cuales
permite almacenar un Double.

Los índices se empiezan a contar en cero.

Public cadena(0 To 11) As String

El ejemplo anterior declara un array de una dimensión, cadena, con doce
elementos, caract(0), … , caract(11), cada uno de los cuáles permite almacenar una
cadena de caracteres.

Dim matriz(3, 0 To 5) As Integer

Este ejemplo declara un array de dos dimensiones, llamado matriz, con 4x6
elementos, matriz(0,1), … matriz(3,5), de tipo entero.

La declaración de los arrays estáticos es bastante cómoda. Se declaran una vez. Sin
embargo tienen el inconveniente que en la mayoría de los casos están
sobredimensionados y utilizan más memoria de la que realmente necesitan. Esto
implica que se está malgastando memoria.

Para solucionar este problema se utilizan los arrays dinámicos.

2VBNET 1
Visual .NET
Microsoft Visual Studio 2005 Unidades Didácticas 17,18, 19, 20

Arrays dinámicos

El espacio necesario para un array estático se asigna al iniciarse el programa y
permanece fijo durante su ejecución. El espacio para un array dinámico se asigna
durante la ejecución del programa.

Un array dinámico, puede ser redimensionado en cualquier momento de la
ejecución.

La forma mejor de redimensionar los arrays es mediante variables que contienen
los valores adecuados.
Para crear un array dinámico primero hay que declararlo como si fuera una array
estático, pero sin darle dimensión. Es decir, se deja la lista –entre paréntesis- vacía
sin ponerle ningún número.

Esto se hace con la sentencia Public si se quiere que sea global, con Dim o
Private si se quiere a nivel de módulo o con Static, Dim o Private si se quiere
que sea local.

Para asignar el número actual de elementos del array se utiliza la sentencia ReDim.
La sentencia ReDim puede aparecer solamente en un procedimiento y permite
cambiar el número de elementos del array y sus límites inferior y superior, pero no
el número de dimensiones.
Esto quiere decir que, por ejemplo, no se puede trasformar un vector en una
matriz.
Si se declara el array Matriz a nivel del formulario.

Ejemplo

Dim numeros() As Integer
Dim i As Integer

ReDim numeros(9) ‘ se podria haber puesto numeros(0 to 9)
For i = 0 To 9
numeros(i) = i
Next i
‘visualizamos los numeros del array
For I = 0 To 9
Text1.Text = Text1.Text & “ “ & numeros(i)
Next i

Resultado: 0,1,2,3,4,5,6,7,8,9

ReDim numeros(5)

For i = 0 To Ubound(numeros)
Text1.Text = Text1.Text & “ “ & numeros(i)
Next i

Resultado: 0,0,0,0,0,0

La función Ubound devuelve el valor más alto del índice y la función Lbound el
menor.

Cada vez que se ejecuta la sentencia ReDim, todos los valores almacenados en el
array se pierden.
Cuando interese cambiar el tamaño del array conservando los valores del array,

2VBNET 1
Visual .NET
Microsoft Visual Studio 2005 Unidades Didácticas 17,18, 19, 20

hay que ejecutar ReDim con la palabra clave Preserve.

ReDim Preserve numeros(5)
For I = 0 To Ubound(numeros)
Text1.Text = Text1.Text & “ “ & numeros(i)
Next i

Resultado: 0,1,2,3,4,5

20.2 Estructuras

Una estructura consiste en un conjunto de datos que se unen para formar un tipo
de dato compuesto. Este elemento nos permite agrupar bajo un único identificador,
una serie de datos relacionados.
Como novedad en VB.NET, los miembros de una estructura pueden ser, además de
los propios campos que almacenan los valores, métodos que ejecuten operaciones,
por lo cual, su aspecto y modo de manejo es muy parecido al de una clase.
Por ejemplo, si disponemos de la información bancaria de una persona, como pueda
ser su código de cuenta, titular, saldo, etc., podemos manejar dichos datos
mediante variables aisladas, o podemos crear una estructura que contenga toda
esa información, simplificando la forma en que accedemos a tales datos.

Para crear una estructura, tenemos que utilizar la palabra clave Structure junto al
nombre de la estructura, situando a continuación los miembros de la estructura, y
finalizándola con la palabra clave End Structure.

Public Structure DatosBanco
Public IDCuenta As Integer
Public Titular As String
Public Saldo As Integer
End Structure

Al igual que el resto de las variables dependiendo del ámbito de la variable
structure podremos definir como public o private.

Private Structure DatosBanco
Dim IDCuenta As Integer
Dim Titular As String
Dim Saldo As Integer
End Structure

El modo de utilizar una estructura desde el código cliente, consiste en declarar una
variable del tipo correspondiente a la estructura, y manipular sus miembros de
forma similar a un objeto. Declaramos una variable de la estructura DatosBanco.

Private Sub Form1_load

Dim lDBanco As DatosBanco
lDBanco.IDCuenta = 958
lDBanco.Titular = "Carlos Perea"
lDBanco.Saldo = 900

End Sub

Ejercicio 9

2VBNET 2
Visual .NET
Microsoft Visual Studio 2005 Unidades Didácticas 17,18, 19, 20

Para gestionar la siguiente lista crea el siguiente programa teniendo en cuenta:

 Al comienzo todos los campos estarán vacíos.

 Al pulsar el botón Añadir los datos que se han introducido en los cuadros de
texto se guardaran en un array y el apellido en el combobox Apellidos.
 Al pulsar el botón Borrar, los datos que se encuentran tanto en los cuadros de
texto como en el combobox se borraran. Antes de borrar saldrá un mensaje
pidiendo la confirmación.
 Al seleccionar un apellido del comboBox los datos correspondientes a ese
apellido aparecerán en los cuadros de texto.
 Al pulsar el botón Nuevo los cuadros de texto y el combobox se dejaran en
blanco.
 Al pulsar Salir el programa terminará. .

Se deberá utilizar:

• Metodos, propiedades:
o ComboBox1.Items.Add(…)
o ComboBox1.Items.Remove(…)
o ComboBox1.SelectedIndex
• Para guardar el nombre, apellidos se utilizará un array.
• Se definirá un estructura con el nombre amigos_reg
• Se definirá un array de 10 amigos del tipo estructura amigos_reg.
• Recuerda que en todos los arrays el primer elemento empieza por cero.

La estructura del sistema DateTime

2VBNET 2
Visual .NET
Microsoft Visual Studio 2005 Unidades Didácticas 17,18, 19, 20

El entorno de .NET Framework proporciona, al igual que ocurre con las clases, una
serie de estructuras del sistema, con funcionalidades diseñadas para ayudar al
programador.

Como ejemplo de este tipo de estructura encontramos a DateTime, en la que a
través de sus miembros compartidos y de instancia, nos provee de diversas
operaciones para el manejo de fechas.

Propiedades

Propiedad Descripción

Today Devuelve la fecha actual.

Dim FechaActual As Date
Dim FechaA, ldtFechaB As Date
FechaActual = DateTime.Today
Me.TextBox1.Text = "La fecha de hoy es " & FechaActual

Métodos

Método Descripción

DaysInMonth(año,numeromes) Devuelve el número de días que tiene un mes

Compare(fecha1,fecha2) Compara dos fechas. Devuelve -1 si la primera
fecha es menor, 0 si son iguales, 1 si la segunda
fecha es menor.

Ejemplos

MsgBox("El mes de enero de 2009 tiene " & DateTime.DaysInMonth(2009,
1) & " dias")

FechaA = InputBox("introduce una fecha")
FechaB = InputBox("introduce otra fecha")
Select Case DateTime.Compare(FechaA, FechaB)
Case -1
MsgBox("La primera fecha es menor")
Case 0
MsgBox("Las fechas son iguales")
Case 1
MsgBox("La primera fecha es mayor")
End Select

2VBNET 2