Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado 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
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
-
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