Skip to content

Array o Matriz de controles en VB.NET

February 10, 2012

Acostumbrados a la senzilla forma de crear y trabajar con matrices de controles en VB6, en .NET la tarea no es tan simple, pero una vez “pillada”, ya tenemos una burna solución para el caso que nos ocupa.

Actualmente estoy immerso en un proyecto de planificación de la producción, y inicialmente creé un botón para cada semanad el año. El caso es que cada vez que hay que crear un procedimiento para cada botón, es necesario aplicarlo en los 52 eventos, en cada caso. Poco práctico, verdad??

He encontrado varias formas de proceder, pero la que más me ha gustado y ha resultado funcionar ha sifo la que sigue:

1. Los botones ya los tenía creados, pero también se pueden crear itertívamente, en este caso trbajamos con botones ya creados.

2. Para aplicar inicializaciones a todos los botones:

  Dim unControl As Control
        Dim i As Integer = 0
        Dim n As Integer = 1
        For Each unControl In Me.Controls

            If TypeOf unControl Is Button And Len(unControl.Name) <= 3 Then
                ‘ Color de fons
                For i = 1 To 52
                    If LabelControl2.Text = i Then
                        unControl.BackColor = Color.RoyalBlue
                    End If
                Next
            End If
        Next

3. El evento de click:

‘ Event al clickar qualsevol dels botos
    Private Sub b1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles b1.Click, b2.Click, b3.Click, b4.Click, b5.Click, b6.Click, b7.Click, b8.Click, b9.Click, b10.Click, b11.Click, b12.Click, b13.Click, b14.Click, b15.Click, b16.Click, b17.Click, b18.Click, b19.Click, b20.Click, b21.Click, b22.Click, b23.Click, b24.Click, b25.Click, b26.Click, b27.Click, b28.Click, b29.Click, b30.Click, b31.Click, b32.Click, b33.Click, b34.Click, b35.Click, b36.Click, b37.Click, b38.Click, b39.Click, b40.Click, b41.Click, b42.Click, b43.Click, b44.Click, b45.Click, b46.Click, b47.Click, b48.Click, b49.Click, b50.Click, b51.Click, b52.Click

        ‘MessageBox.Show(CType(sender, Button).Text)

        ‘Canvi de color del botons inactius
        Dim unControl As Control
        Dim i As Integer = 0
        Dim n As Integer = 1
        For Each unControl In Me.Controls

            If TypeOf unControl Is Button And Len(unControl.Name) <= 3 Then
                ‘ Color de fons
                For i = 1 To 52
                    If LabelControl2.Text = i Then
                        unControl.BackColor = Color.RoyalBlue
                    End If
                Next
            End If
        Next

        ‘Canvi de color del botó actiu
        If CType(sender, Button).BackColor <> Color.Red Then
            CType(sender, Button).BackColor = Color.Red
        End If

        ‘Procediments varis a executar
        lblSet.Text = CType(sender, Button).Text
        numSetCmb = CType(sender, Button).Text
        lblDiaSel.Text = BuscaDiaSetmana(lblSet.Text, LabelControl6.Text)
        carregaComboEscenaris()

        If TabDies.SelectedTab Is TabDill Then
            lblDiaSel.Text = BuscaDiaSetmana(lblSet.Text, LabelControl6.Text)

        ElseIf TabDies.SelectedTab Is TabDim Then
            lblDiaSel.Text = DateAdd(DateInterval.Day, CType(1, Integer), BuscaDiaSetmana(lblSet.Text, LabelControl6.Text))

        ElseIf TabDies.SelectedTab Is TabDix Then
            lblDiaSel.Text = DateAdd(DateInterval.Day, CType(2, Integer), BuscaDiaSetmana(lblSet.Text, LabelControl6.Text))

        ElseIf TabDies.SelectedTab Is TabDij Then
            lblDiaSel.Text = DateAdd(DateInterval.Day, CType(3, Integer), BuscaDiaSetmana(lblSet.Text, LabelControl6.Text))

        ElseIf TabDies.SelectedTab Is TabDiv Then
            lblDiaSel.Text = DateAdd(DateInterval.Day, CType(4, Integer), BuscaDiaSetmana(lblSet.Text, LabelControl6.Text))

        ElseIf TabDies.SelectedTab Is TabDis Then
            lblDiaSel.Text = DateAdd(DateInterval.Day, CType(5, Integer), BuscaDiaSetmana(lblSet.Text, LabelControl6.Text))

        ElseIf TabDies.SelectedTab Is TabDiu Then
            lblDiaSel.Text = DateAdd(DateInterval.Day, CType(6, Integer), BuscaDiaSetmana(lblSet.Text, LabelControl6.Text))
        End If

        ‘diaACarregar = lblDiaSel.Text
        If nNumEscenari <> 0 Then
            carregaGrid()
        End If

From → Controles

Leave a Comment

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: