Vous êtes sur la page 1sur 5

Matrices de controles para usuarios de

Visual Basic 6.0


Aunque ya no se admiten matrices de control en Visual Basic 2005, mediante el
modelo de evento puede duplicar y expandir más allá de la funcionalidad de
matrices de control.

Diferencias conceptuales
En Visual Basic 6.0, las matrices de controles se podían utilizar para administrar los
controles de un formulario; proporcionaban funciones para compartir controladores
de eventos, recorrer en iteración grupos de controles y agregar controles en tiempo
de ejecución.

En Visual Basic 2005, ya no se admiten las matrices de control. Los cambios en el


modelo de evento hacen que las matrices de control sean innecesarias y .NET
Framework proporciona las mismas funciones para trabajar con controles.

Compartir controladores de eventos

En Visual Basic 6.0, se podían usar matrices de controles para especificar un grupo
de controles que compartían un conjunto de eventos. Los controles debían ser del
mismo tipo y tenían que tener el mismo nombre.

Visual Basic 2005 permite a cualquier controlador de eventos controlar los eventos
de varios controles, incluso los controles con nombres diferentes y de tipos
distintos.

Por ejemplo, es posible que quiera agregar dos controles Button (Button1 y
Button2) y un control CheckBox (CheckBox1) a un formulario y, a continuación,
crear un controlador de eventos a fin de controlar el evento Click para los tres
controles.

Copiar
Private Sub MixedControls.Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles Button1.Click, Button2.Click,
CheckBox1.Click

Recorrer controles en iteración

Otra característica de matrices de controles de Visual Basic 6.0 era la capacidad de


recorrer en iteración un grupo de controles mediante la propiedad Index. Por
ejemplo, para borrar el texto de todos los controles TextBox en una matriz de
control, se podía recorrer en iteración la matriz de control mediante la propiedad
Index como una variable de bucle.

Los controles de Visual Basic 2005 no tienen una propiedad Index pero puede
seguir recorriendo en iteración los controles de un formulario o contenedor
mediante ControlCollection de la clase Control.
En Visual Basic 6.0, los controles de una única matriz de control podían encontrarse
en contenedores diferentes. Por ejemplo, los controles TextBox contenidos en dos
controles Frame diferentes podían formar parte de la misma matriz de control.

En Visual Basic 2005, la colección Controls sólo devuelve controles que se


encuentran en un único contenedor. Debe recorrer en iteración los controles de
cada control de contenedor por separado; esto se puede hacer mediante una
función recursiva.

Agregar controles en tiempo de ejecución

En Visual Basic 6.0, los controles se podía agregar a una matriz de control en
tiempo de ejecución mediante la instrucción Load. Los controles tenían que ser del
mismo tipo que la matriz de control y ésta se debía crear en tiempo de diseño con
al menos un elemento. Después de agregar el control, la propiedad Visible debía
establecerse en True.

En Visual Basic 2005, los controles se agregan en tiempo de ejecución mediante la


palabra clave New de una instrucción Dim y, a continuación, se utiliza el método
Add para el contenedor al que desea agregar el control.

Agregar controladores de eventos en tiempo de ejecución

En Visual Basic 6.0, cuando se agregaba un control a una matriz de control en


tiempo de ejecución, los eventos de la matriz de control controlaban
automáticamente los nuevos eventos de controles.

En Visual Basic 2005, debe definir los controladores de eventos para los controles
que se agregan en tiempo de ejecución. Esto se realiza mediante la instrucción
AddHandler.

Cambios de código para matrices de


control
El siguiente código ilustra las diferencias en las técnicas de codificación entre Visual
Basic 6.0 y Visual Basic 2005.

Compartir controladores de eventos

El ejemplo siguiente muestra cómo se comparte el controlador de eventos Change


(TextChanged en Visual Basic 2005) en un grupo de tres controles TextBox. En
Visual Basic 2005, la cláusula Handles del controlador de eventos especifica qué
control controlará el evento. El controlador de eventos devuelve un Object
genérico, por lo que se debe convertir en el tipo de objeto específico (en este caso,
TextBox) que desea controlar mediante el método DirectCast.

' Visual Basic 6.0

Private Sub Text1_Change(Index As Integer)

Select Case Index

Case 0
MsgBox("The text in the first TextBox has changed")

Case 1

MsgBox("The text in the second TextBox has changed")

Case 2

MsgBox("The text in the third TextBox has changed")

End Select

End Sub

VB
Copiar
' Visual Basic 2005
Private Sub TextBoxes_TextChanged(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles TextBox1.TextChanged, _
TextBox2.TextChanged, TextBox3.TextChanged
Select Case DirectCast(sender, TextBox).Name
Case TextBox1.Name
MsgBox("The text in the first TextBox has changed")
Case TextBox2.Name
MsgBox("The text in the second TextBox has changed")
Case TextBox3.Name
MsgBox("The text in the third TextBox has changed")
End Select
End Sub

Nota
El comportamiento de eventos es ligeramente diferente en Visual Basic 2005. El
evento TextChanged se produce cuando se inicializa un control (por ejemplo, en
el evento Form_Load) así como cuando se cambia texto en tiempo de ejecución. En
Visual Basic 6.0, el evento Change sólo se producía cuando se cambiaba texto.

Recorrer controles en iteración

El ejemplo siguiente muestra una función para recorrer en iteración un grupo de


controles de cuadro de texto y borrar su texto. En el ejemplo de Visual Basic 6.0, la
propiedad Index de una matriz de control se utiliza como una variable de bucle.

En Visual Basic 2005, un objeto Control se pasa como un argumento; tiene una
colección ControlCollection que incluye todos los controles que se encuentran en
ese control. El operador Typeof se utiliza para determinar si cada control es de tipo
TextBox.

Nota
Un objeto Form es de tipo Control; también puede pasar un objeto Form como un
argumento.
Como no se incluyen controles anidados en la colección ControlCollection, el
método HasChildren se utiliza para determinar si un control contiene otros
controles, en ese caso, se llama a la función ClearText de forma recursiva.

' Visual Basic 6.0

Private Sub ClearText()

For i = 0 To Text1().UBound

Text1(i).Text = ""

Next

End Sub

VB
Copiar
' Visual Basic 2005
Private Sub ClearText(ByVal container As Control)
Dim ctrl As Control
For Each ctrl In container.Controls
If TypeOf (ctrl) Is TextBox Then
ctrl.Text = ""
End If
If ctrl.HasChildren Then
ClearText(ctrl)
End If
Next
End Sub

Agregar controles en tiempo de ejecución

El ejemplo siguiente muestra cómo se agrega un control de cuadro de texto a un


formulario en tiempo de ejecución. En Visual Basic 6.0, el control se agrega a una
matriz de control. En Visual Basic 2005, el control se agrega a la colección
ControlCollection. En Visual Basic 6.0, los eventos para el nuevo TextBox se
controlaban automáticamente mediante la matriz de control. En Visual Basic 2005,
debe enlazar el control de eventos mediante la instrucción AddHandler.

En los dos ejemplos se supone que se agrega un control de cuadro de texto a un


formulario en tiempo de ejecución y en el ejemplo de Visual Basic 6.0, que se ha
creado una matriz de control con un único elemento. En el ejemplo de Visual Basic
2005 también se supone que existe un controlador de eventos denominado
TextChangedHandler para el primer control TextBox.

' Visual Basic 6.0

Private Sub AddControl()

' Add a TextBox as the second element of a control array.

Load Text1(1)

' Set the location below the first TextBox.


Text1(1).Move Text1(0).Left, Text1(0).Top + 500

' Make the new TextBox visible

Text1(1).Visible = True

VB
Copiar
' Visual Basic 2005
' Declare a new TextBox.
Dim TextBox2 As New TextBox
' Set the location below the first TextBox
TextBox2.Left = TextBox1.Left
TextBox2.Top = TextBox1.Top + 30
' Add the TextBox to the form's Controls collection.
Me.Controls.Add(TextBox2)
AddHandler TextBox2.TextChanged, AddressOf TextChangedHandler

Notas de actualización
Cuando una aplicación creada con Visual Basic 6.0 se actualiza a Visual Basic 2005,
cualquier matriz de control se actualiza a las clases de matrices de controles
específicas del control especial. Estas clases están contenidas en el espacio de
nombres Microsoft.VisualBasic.Compatibility.VB6 y las utilizan las
herramientas de actualización para emular el comportamiento de las matrices de
controles de Visual Basic 6.0.

Aunque es posible utilizar estas clases de matrices de controles en el nuevo


desarrollo de Visual Basic 2005, se recomienda utilizar el modelo de evento y las
funciones de .NET Framework en su lugar.

Vous aimerez peut-être aussi