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.

FUENTE: http://msdn.microsoft.com/es-es/library/kxt4418a(VS.80).aspx

Sign up to vote on this title
UsefulNot useful