Autor Tema: array de variables controles Visual Basic no visibles desde otro procedimiento  (Leído 2515 veces)

NewCoder

  • Sin experiencia
  • *
  • Mensajes: 1
    • Ver Perfil
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

« Última modificación: 16 de Febrero 2017, 22:07 por Alex Rodríguez »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
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

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".