Principales respuestas
Matriz Dinamica

Pregunta
-
Hola a todos
Tengo un pequeño problema uso un formulario, el ingreso de los datos los realizo desde 6 textbox
el cual quiero llenar los registros en una matriz pero no he logrado que la matriz sea estable, el problema es que no sigue a la proxima columna tienen alguna idea ??
codigo del button:
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
For contadorx As Integer = 0 To 6
ara(0, contadorx) = TextBox1.Text
ara(0, contadorx) = TextBox2.Text
ara(0, contadorx) = TextBox3.Text
ara(0, contadorx) = TextBox4.Text
ara(0, contadorx) = TextBox5.Text
ara(0, contadorx) = TextBox6.Text
contadorx = contadorx + 1
Next
End Sub- Editado Oscar O Gonzalez domingo, 3 de septiembre de 2017 23:50
Respuestas
-
Dos consideraciones:
- Si sólo buscas almacenar el valor de la propiedad Text de seis cuadros de texto, ¿por qué creas una matriz de dos dimensiones? ¿no basta con crear una matriz de una dimensión con seis posiciones?. Tampoco veo la necesidad de una "matriz dinámica" tal como sugieres en el título de tu post.
- Nota el bloque de código contenido en la instrucción For, para las seis posiciones contienes el valor del control TextBox6: ara[0, 0] = TextBox6.Text | ara[0, 1] = TextBox6.Text | ... | ara[0, 5] = TextBox6.Text, todos los valores anteriores son sobrescritos, "pisados".
Para lo que requieras, puedes declarar, crear e inicializar una matriz de la siguiente forma:
Dim MyArray = { TextBox1.Text, TextBox2.Text, TextBox3.Text, ..., TextBox6.Text }
Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.- Propuesto como respuesta Enrique M. MontejoModerator lunes, 4 de septiembre de 2017 7:00
- Marcado como respuesta Enrique M. MontejoModerator martes, 5 de septiembre de 2017 6:26
-
Hola gonzalezm,
Antes que nada y para ampliar lo que te comenta Willams,hay que aclarar algunos conceptos.
1- No estás aplicando bien el concepto de matriz. Lo que estás generando es es una matriz estática, no dinámica.
2- En este tipo de ciclo "for" no necesitas incrementar la variable contadorx ya que "0 To 6" lo que hace es autoincrementarla de 0 a 6.
3- Tenes 6 items, pero si empezas un ciclo desde 0, en realidad estas pasando 7 veces el ciclo, ya que en el instante 0 estás haciendo un ciclo.
4- En cada ciclo estás reescribiendo el mismo punto de la matriz con cada textbox:
EJ: ara(0, contadorx) -> En el primer ciclo vale como: ara(0, 0) = TextBox1.Text -> ara(0, 0) = TextBox2.Text -> ...etc.
5- Para el uso que le queres dar a la matriz no necesitas ese ciclo "for", estás desperdiciando recursos que no resuelven el planteo.
Creo que tu solución es implementarlo como te lo planteó Willams.
Saludos y Exitos!
Fernando Bequir
- Editado Fernando Bequir lunes, 4 de septiembre de 2017 3:45
- Propuesto como respuesta Enrique M. MontejoModerator lunes, 4 de septiembre de 2017 7:00
- Marcado como respuesta Enrique M. MontejoModerator martes, 5 de septiembre de 2017 6:26
-
De acuerdo, entonces estamos hablando de una matriz de dos dimensiones (19, 5), por ejemplo:
Dim MyArray(19, 5) As String Dim NewIndex As Integer = 0 Dim RowIndex As Integer = 0 Private Sub btnLoadData_Click(sender As Object, e As EventArgs) Handles btnLoadData.Click MyArray(NewIndex, 0) = TextBox1.Text MyArray(NewIndex, 1) = TextBox2.Text '... NewIndex += 1 RowIndex = NewIndex End Sub
Nota que la variable 'NewIndex' va ir incrementando en una unidad por cada vez que registres una "fila", en ese sentido si quisieras "navegar" entre las filas debes crear un índice adicional de posición que irás incrementando o decrementando según la acción seleccionada ('RowIndex').
Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.- Marcado como respuesta Oscar O Gonzalez sábado, 9 de septiembre de 2017 16:33
Todas las respuestas
-
Dos consideraciones:
- Si sólo buscas almacenar el valor de la propiedad Text de seis cuadros de texto, ¿por qué creas una matriz de dos dimensiones? ¿no basta con crear una matriz de una dimensión con seis posiciones?. Tampoco veo la necesidad de una "matriz dinámica" tal como sugieres en el título de tu post.
- Nota el bloque de código contenido en la instrucción For, para las seis posiciones contienes el valor del control TextBox6: ara[0, 0] = TextBox6.Text | ara[0, 1] = TextBox6.Text | ... | ara[0, 5] = TextBox6.Text, todos los valores anteriores son sobrescritos, "pisados".
Para lo que requieras, puedes declarar, crear e inicializar una matriz de la siguiente forma:
Dim MyArray = { TextBox1.Text, TextBox2.Text, TextBox3.Text, ..., TextBox6.Text }
Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.- Propuesto como respuesta Enrique M. MontejoModerator lunes, 4 de septiembre de 2017 7:00
- Marcado como respuesta Enrique M. MontejoModerator martes, 5 de septiembre de 2017 6:26
-
Hola gonzalezm,
Antes que nada y para ampliar lo que te comenta Willams,hay que aclarar algunos conceptos.
1- No estás aplicando bien el concepto de matriz. Lo que estás generando es es una matriz estática, no dinámica.
2- En este tipo de ciclo "for" no necesitas incrementar la variable contadorx ya que "0 To 6" lo que hace es autoincrementarla de 0 a 6.
3- Tenes 6 items, pero si empezas un ciclo desde 0, en realidad estas pasando 7 veces el ciclo, ya que en el instante 0 estás haciendo un ciclo.
4- En cada ciclo estás reescribiendo el mismo punto de la matriz con cada textbox:
EJ: ara(0, contadorx) -> En el primer ciclo vale como: ara(0, 0) = TextBox1.Text -> ara(0, 0) = TextBox2.Text -> ...etc.
5- Para el uso que le queres dar a la matriz no necesitas ese ciclo "for", estás desperdiciando recursos que no resuelven el planteo.
Creo que tu solución es implementarlo como te lo planteó Willams.
Saludos y Exitos!
Fernando Bequir
- Editado Fernando Bequir lunes, 4 de septiembre de 2017 3:45
- Propuesto como respuesta Enrique M. MontejoModerator lunes, 4 de septiembre de 2017 7:00
- Marcado como respuesta Enrique M. MontejoModerator martes, 5 de septiembre de 2017 6:26
-
Dos consideraciones:
- Si sólo buscas almacenar el valor de la propiedad Text de seis cuadros de texto, ¿por qué creas una matriz de dos dimensiones? ¿no basta con crear una matriz de una dimensión con seis posiciones?. Tampoco veo la necesidad de una "matriz dinámica" tal como sugieres en el título de tu post.
- Nota el bloque de código contenido en la instrucción For, para las seis posiciones contienes el valor del control TextBox6: ara[0, 0] = TextBox6.Text | ara[0, 1] = TextBox6.Text | ... | ara[0, 5] = TextBox6.Text, todos los valores anteriores son sobrescritos, "pisados".
Para lo que requieras, puedes declarar, crear e inicializar una matriz de la siguiente forma:
Dim MyArray = { TextBox1.Text, TextBox2.Text, TextBox3.Text, ..., TextBox6.Text }
Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.Hi Williams
Lo siento en el lenguaje llevo 15 días de aprenderlo, pero mi punto es este :
1. tengo un formulario con 6 campos
2. puedo almacenar estos campos en un Array simple y es claro
3. Quiero hacer lo siguiente, tengo un botón nuevo y cuando le de click habilita los campos seguido ingreso los datos que necesito y finalmente este mismo botón se cambia de nombre a guardar, quiero que cuando le de guardar me almacene estos datos en un Array pero me piden hacer 20 registros osea llenar 20 veces los mismo cambios y ese es el pedazo que no logro hacer.
4.por ultimo un botón de nombre siguiente me tiene que mostrar los datos llenados en los textbox anteriormente y cada vez que le click el debe continuar y si quiero editar lo pueda hacer y sobre escriba el campo en la fila donde esta almacenado.
Nota: No se si me pueda ayudar con una tutoria o algún foro o pagina donde hayan ejemplos que se asemejen con mi trabajo por que pude hacer este trabajo pero sin interfaz gráfica pero con gráfica no me sale debido a mi poco conocimiento:
Muchas gracias por tu atención prestada
-
Hola gonzalezm,
Antes que nada y para ampliar lo que te comenta Willams,hay que aclarar algunos conceptos.
1- No estás aplicando bien el concepto de matriz. Lo que estás generando es es una matriz estática, no dinámica.
2- En este tipo de ciclo "for" no necesitas incrementar la variable contadorx ya que "0 To 6" lo que hace es autoincrementarla de 0 a 6.
3- Tenes 6 items, pero si empezas un ciclo desde 0, en realidad estas pasando 7 veces el ciclo, ya que en el instante 0 estás haciendo un ciclo.
4- En cada ciclo estás reescribiendo el mismo punto de la matriz con cada textbox:
EJ: ara(0, contadorx) -> En el primer ciclo vale como: ara(0, 0) = TextBox1.Text -> ara(0, 0) = TextBox2.Text -> ...etc.
5- Para el uso que le queres dar a la matriz no necesitas ese ciclo "for", estás desperdiciando recursos que no resuelven el planteo.
Creo que tu solución es implementarlo como te lo planteó Willams.
Saludos y Exitos!
Fernando Bequir
Hi Fernando
Muchas gracias por tu explicación cada día mejoro mis conceptos y habilidad en la programación.
-
De acuerdo, entonces estamos hablando de una matriz de dos dimensiones (19, 5), por ejemplo:
Dim MyArray(19, 5) As String Dim NewIndex As Integer = 0 Dim RowIndex As Integer = 0 Private Sub btnLoadData_Click(sender As Object, e As EventArgs) Handles btnLoadData.Click MyArray(NewIndex, 0) = TextBox1.Text MyArray(NewIndex, 1) = TextBox2.Text '... NewIndex += 1 RowIndex = NewIndex End Sub
Nota que la variable 'NewIndex' va ir incrementando en una unidad por cada vez que registres una "fila", en ese sentido si quisieras "navegar" entre las filas debes crear un índice adicional de posición que irás incrementando o decrementando según la acción seleccionada ('RowIndex').
Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.- Marcado como respuesta Oscar O Gonzalez sábado, 9 de septiembre de 2017 16:33
-
De acuerdo, entonces estamos hablando de una matriz de dos dimensiones (19, 5), por ejemplo:
Dim MyArray(19, 5) As String Dim NewIndex As Integer = 0 Dim RowIndex As Integer = 0 Private Sub btnLoadData_Click(sender As Object, e As EventArgs) Handles btnLoadData.Click MyArray(NewIndex, 0) = TextBox1.Text MyArray(NewIndex, 1) = TextBox2.Text '... NewIndex += 1 RowIndex = NewIndex End Sub
Nota que la variable 'NewIndex' va ir incrementando en una unidad por cada vez que registres una "fila", en ese sentido si quisieras "navegar" entre las filas debes crear un índice adicional de posición que irás incrementando o decrementando según la acción seleccionada ('RowIndex').
Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
De acuerdo Williams, pero una pregunta tengo que utilizar el RowIndex en un For, no me queda claro la parte que dices crear un indice aun no tengo ese concepto en mi lexico, por que ya puedo ver que guarda en un array bidimensional los datos pero para mostrarlos en los mismo textbox es donde no me queda claro.
Muchas gracias por tu atencion prestada
-
¿Por qué necesitas de una instrucción repetitiva? ¿o hay algo que no nos hayas comentado aún?. Fíjate en lo siguiente:
(0) Val1(0), Val2(1), Val3(2) (1) Val1(0), Val2(1), Val3(2) (2) Val1(0), Val2(1), Val3(2) (3) Val1(0), Val2(1), Val3(2)
Si quisieras agregar "una nueva fila" tendrías que conocer el "índice siguiente disponible" (es decir 4), que en el ejemplo adjunto se encuentra especificado en la variable 'NewIndex'. Ojo que al inicializar una matriz todos los elementos contienen el valor por defecto del tipo, en el caso de una matriz de enteros todas las posiciones contendrán el valor de cero(0), de ahí que ponga entre comillas la frase "índice siguiente disponible".
Si quisiera "navegar por la filas" entonces tendrías que tener una variable que incremente o decremente el valor según la posición actual, que en el ejemplo adjunto se encuentra especificado en la variable 'RowIndex', es decir, si tuvieses un botón [Anterior], y tras pinchar sobre el, restas una unidad al valor contenido en la variable 'RowIndex'.
TextBox1.Text = MyArray(RowIndex, 0) TextBox2.Text = MyArray(RowIndex, 1)
Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente. -
¿Por qué necesitas de una instrucción repetitiva? ¿o hay algo que no nos hayas comentado aún?. Fíjate en lo siguiente:
(0) Val1(0), Val2(1), Val3(2) (1) Val1(0), Val2(1), Val3(2) (2) Val1(0), Val2(1), Val3(2) (3) Val1(0), Val2(1), Val3(2)
Si quisieras agregar "una nueva fila" tendrías que conocer el "índice siguiente disponible" (es decir 4), que en el ejemplo adjunto se encuentra especificado en la variable 'NewIndex'. Ojo que al inicializar una matriz todos los elementos contienen el valor por defecto del tipo, en el caso de una matriz de enteros todas las posiciones contendrán el valor de cero(0), de ahí que ponga entre comillas la frase "índice siguiente disponible".
Si quisiera "navegar por la filas" entonces tendrías que tener una variable que incremente o decremente el valor según la posición actual, que en el ejemplo adjunto se encuentra especificado en la variable 'RowIndex', es decir, si tuvieses un botón [Anterior], y tras pinchar sobre el, restas una unidad al valor contenido en la variable 'RowIndex'.
TextBox1.Text = MyArray(RowIndex, 0) TextBox2.Text = MyArray(RowIndex, 1)
Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.No les indique todo lo que es mi proyecto y de esta manera que me indicas no funciona por esto te muestro todo el codigo y el formulario, con el fin de saber si estoy errando en la sintaxis del codigo o es algo diferente que no estoy viendo.
Codigo General:
Imports System.Text
Public Class Form1
Dim MyArray(10, 10) As String
Dim NewIndex As Integer = 0
Dim RowIndex As Integer = 0
Private Sub limpiar()
TextBox1.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
TextBox4.Text = ""
TextBox5.Text = ""
TextBox6.Text = ""
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If Button1.Text = "NUEVO" Then
limpiar()
Button1.Text = "GUARDAR"
TextBox1.Enabled = True
TextBox2.Enabled = True
TextBox3.Enabled = True
TextBox4.Enabled = True
TextBox5.Enabled = True
TextBox6.Enabled = True
Button2.Text = "CANCELAR"
Button3.Enabled = False
Button4.Enabled = False
RadioButton1.Enabled = True
RadioButton2.Enabled = True
Else
Button1.Text = "NUEVO"
TextBox1.Enabled = False
TextBox2.Enabled = False
TextBox3.Enabled = False
TextBox4.Enabled = False
TextBox5.Enabled = False
TextBox6.Enabled = False
Button2.Text = "EDITAR"
Button3.Enabled = True
Button4.Enabled = True
RadioButton1.Enabled = False
RadioButton2.Enabled = False
MyArray(NewIndex, 0) = TextBox1.Text
MyArray(NewIndex, 1) = TextBox2.Text
MyArray(NewIndex, 2) = TextBox3.Text
MyArray(NewIndex, 3) = TextBox4.Text
MyArray(NewIndex, 4) = TextBox5.Text
MyArray(NewIndex, 5) = TextBox6.Text
NewIndex += 1
RowIndex = NewIndex
End If
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
If Button2.Text = "EDITAR" Then
Button2.Text = "CANCELAR"
Button1.Text = "GUARDAR"
TextBox1.Enabled = True
TextBox2.Enabled = True
TextBox3.Enabled = True
TextBox4.Enabled = True
TextBox5.Enabled = True
TextBox6.Enabled = True
Button3.Enabled = False
Button4.Enabled = False
RadioButton1.Enabled = True
RadioButton2.Enabled = True
Else
Button2.Text = "CANCELAR"
Button1.Text = "NUEVO"
TextBox1.Enabled = False
TextBox2.Enabled = False
TextBox3.Enabled = False
TextBox4.Enabled = False
TextBox5.Enabled = False
TextBox6.Enabled = False
Button2.Text = "EDITAR"
Button3.Enabled = True
Button4.Enabled = True
RadioButton1.Enabled = False
RadioButton2.Enabled = False
End If
End Sub
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
If IsNumeric(TextBox1.Text) Then
Dim foto As String
Dim var As String
foto = "C:\Users\X1\Pictures\" + TextBox1.Text + ".png"
var = Dir(foto)
If var = "" Then
PictureBox1.Image = Image.FromFile("C:\Users\X1\Pictures\16.jpg")
Else
PictureBox1.Image = Image.FromFile(foto)
End If
Else
End If
End Sub
Private Function states(ByVal st As Integer, ByVal p2 As Integer) As String
Throw New NotImplementedException
End Function
Private Sub Button5_Click(sender As System.Object, e As System.EventArgs) Handles Button5.Click
TextBox1.Text = MyArray(RowIndex, 0)
TextBox2.Text = MyArray(RowIndex, 1)
TextBox3.Text = MyArray(RowIndex, 2)
RowIndex = +1
End Sub
End Class
FOrmulario:
- Editado Oscar O Gonzalez domingo, 10 de septiembre de 2017 12:30 Corrección