Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: NewCoder en 10 de Enero 2017, 17:00

Título: array de variables controles Visual Basic no visibles desde otro procedimiento
Publicado por: NewCoder en 10 de Enero 2017, 17:00
Hola a todos:

Tengo un problema con una matriz de variables y me he quedado atascado.

Quiero desplegar una matriz de TextBox (i,j) para entrada de datos (resolución de sistemas de ecuaciones) y lo consigo, pero a la hora de leer los datos TextBox (i,j) desde otro procedimiento salen ceros.

Por supuesto salen ceros porque son variables de ámbito local al procedimiento, pero es que si las declaro al inicio como Public también son cero porque el array se dimensiona posteriormente, por lo que estoy bloqueado.

Agradecería que alguien amablemente me aporte una solución o me indique una nueva línea a seguir.

Siento si me he enrollado demasiado

Código: [Seleccionar]

Public Class Form2

    Public ECUA As Integer
    Public INCOG As Integer


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click


        ECUA = NumericUpDown1.Value
        INCOG = NumericUpDown2.Value

        Dim LabelCoef(ECUA, INCOG) As Label
        Dim TextBoxCoef(ECUA, INCOG) As TextBox
        Dim TextBoxIndep(ECUA) As TextBox

        Dim i As Integer
        Dim j As Integer

        For i = 1 To ECUA
            For j = 1 To INCOG

                If i = 1 Then 'Labels para columnas incógnitas
                    LabelCoef(i, j) = New Label
                    LabelCoef(i, j).Text = "A" & j
                    LabelCoef(i, j).Width = 120
                    LabelCoef(i, j).Height = 30
                    LabelCoef(i, j).Location = New Point(-60 + 126 * j, 90)
                    LabelCoef(i, j).Font = New Font("Calibri", 10, FontStyle.Italic)
                    LabelCoef(i, j).ForeColor = Color.Maroon
                    LabelCoef(i, j).TextAlign = ContentAlignment.MiddleCenter
                    Me.Controls.Add(LabelCoef(i, j))
                End If

                If j = 1 Then 'Labels para filas ecuaciones
                    LabelCoef(i, j) = New Label
                    LabelCoef(i, j).Text = i
                    LabelCoef(i, j).Width = 40
                    LabelCoef(i, j).Height = 30
                    LabelCoef(i, j).Location = New Point(10, 90 + 36 * i)
                    LabelCoef(i, j).Font = New Font("Calibri", 10, FontStyle.Italic)
                    LabelCoef(i, j).ForeColor = Color.Maroon
                    LabelCoef(i, j).TextAlign = ContentAlignment.MiddleCenter
                    Me.Controls.Add(LabelCoef(i, j))
                End If


                'Desplegamos la plantilla para introducir datos
                TextBoxCoef(i, j) = New TextBox
                TextBoxCoef(i, j).Width = 120
                TextBoxCoef(i, j).Height = 30
                TextBoxCoef(i, j).AutoSize = False
                TextBoxCoef(i, j).TextAlign = HorizontalAlignment.Center
                TextBoxCoef(i, j).BackColor = Color.LightGoldenrodYellow
                TextBoxCoef(i, j).ForeColor = Color.Black
                TextBoxCoef(i, j).Font = New Font("Calibri", 10, FontStyle.Regular)
                TextBoxCoef(i, j).Location = New Point(-60 + 126 * j, 90 + 36 * i)
                Me.Controls.Add(TextBoxCoef(i, j))

            Next



            'Añadimos columna para términos independientes
            TextBoxIndep(i) = New TextBox
            TextBoxIndep(i).Width = 120
            TextBoxIndep(i).Height = 30
            TextBoxIndep(i).AutoSize = False
            TextBoxIndep(i).TextAlign = HorizontalAlignment.Center
            TextBoxIndep(i).BackColor = Color.LightGreen
            TextBoxIndep(i).ForeColor = Color.Black
            TextBoxIndep(i).Font = New Font("Calibri", 10, FontStyle.Regular)
            TextBoxIndep(i).Location = New Point(66 + 126 * INCOG, 90 + 36 * i)

            Me.Controls.Add(TextBoxIndep(i))


        Next

    End Sub

End Class

Título: Re:array de variables controles Visual Basic no visibles desde otro procedimiento
Publicado por: Alex Rodríguez en 16 de Febrero 2017, 22:08
Hola, si se sigue el ejemplo que hay en https://www.aprenderaprogramar.com/index.php?option=com_content&view=article&id=219:matrices-o-arrays-de-controles-arreglos-en-visual-basic-y-vbnet-concepto-y-ejemplo-de-codigo-cu00320a&catid=37:curso-aprender-a-programar-visual-basic-desde-cero&Itemid=61 en principio debe de poder accederse a los arrays de controles desde cualquier procedimiento por estar declarados como atributos de clase.

Lo que se puede hacer es declarar un array de dimensiones muy grandes (si se desconoce la dimensión definitiva) y luego usar aquellas dimensiones que nos sean útiles, dejando sin utilizar las sobrantes

Saludos