none
Matriz Dinamica RRS feed

  • 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


    domingo, 3 de septiembre de 2017 23:49

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.
    lunes, 4 de septiembre de 2017 3:19
  • 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


    lunes, 4 de septiembre de 2017 3:39
  • 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
    miércoles, 6 de septiembre de 2017 18:04

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.
    lunes, 4 de septiembre de 2017 3:19
  • 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


    lunes, 4 de septiembre de 2017 3:39
  • 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

    miércoles, 6 de septiembre de 2017 17:15
  • 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.

    miércoles, 6 de septiembre de 2017 17:18
  • 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
    miércoles, 6 de septiembre de 2017 18:04
  • 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

    sábado, 9 de septiembre de 2017 15:10
  • ¿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.
    sábado, 9 de septiembre de 2017 17:39
  • ¿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:

    domingo, 10 de septiembre de 2017 12:28