Pasar datos entre formularios

Iniciado por decaos, 13 Octubre 2008, 08:17 AM

0 Miembros y 1 Visitante están viendo este tema.

decaos

Hola he empezado a estudiar programacion y tengo un problema si alguien tuviera la respuesta de antemano le agradezco.

He creado un ejemplo pequeño para que vean el error que se me produce.

Si creamos un nuevo proyecto (muy simple) con tres formularios (Form1, Form2 y Form3).

En el primer formulario (Form1)  se coloca una caja de texto (TextBox1) y un botón .el código del evento click del botón debe hacer que se cargue el segundo formulario para eso yo pongo de código:

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

        Dim formulario2 As New Form2()
        formulario2.Show()

End Sub

En el 2do ponemos hacemos lo mismo colocamos una caja de texto (TextBox1) y un botón. El código del evento click del botón debe hacer que se cargue el tercer formulario. Para eso yo pongo de código:


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

        Dim formulario3 As New Form3()
        formulario3.Show()

End Sub


Por último, en el último formulario (Form3) coloco solo una caja de texto. ahora lo que deseo es que al ingesar un texto en la primera caja de texto del primer formulario (TextBox1) este valor al pulsar el boton pase a la caja de texto del segundo formulario (TextBox1) y luego que del 2do formulario al pulsar el boton pase a la caja de texto del 3er formulario coloco el siguiente codigo en los eventos Load del 1er y 2do formulario:

EN EL FORMULARIO 2:

Public Class Form2

    Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.TextBox1.Text = Form1.TextBox1.Text
    End Sub
End Class

EN EL FORMULARIO 3:

Public Class Form3

    Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.TextBox1.Text = Form2.TextBox1.Text
    End Sub
End Class


Una vez hecho esto, se puede comprobar como el valor pasa del formulario 1 al formulario 2 pero no pasa del formulario 2 al formulario 3.

Como ven, sólo se carga bien la segunda caja de texto. Pero la tercera nada.

ya he provado varios tipos de codigo que he encontrado en internet pero todos hacen lo mismo solo funciona para pasar de la primera a la 2da caja de texto

¿Por qué ocurre esto? ¿Cómo puedo solucionarlo?
Por adelantado, muchas gracias por su ayuda.

RagleM

hola, para poder dar a solucion a este problema lo que puedes hacer, opinion personal, es trabajar solo con objetos, osea en en el form2 y form3 declarar una variable publica..  algo asi

class form2 {
    public string var2
}
de igual manera en el form3 y una vez que instancies el formulario ya sea 2 o 3 pasas el valor a esa variable y la muestras... seria algo asi:

        Dim formulario2 As New Form2()
        formulario2.var2 = TextBox1.text
        formulario2.Show()

espero dejarme entender.. y kizas alguien tiene una mejor forma de hacerlo

de todas formas espero te sirva mi respuiesta..

saludos
.                        (\ /)
                        (O.o)
                        (> <)
This is Bunny. Copy Bunny into your signature to help him on his way to world domination.

Linux Registered User # 387266

((( SPAWN )))

Hola proba de esta forma:

Code Form1


Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Form2.Show()
    End Sub
End Class


Code Form2


Public Class Form2
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Form3.Show()
    End Sub

    Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        TextBox1.Text = Form1.TextBox1.Text
    End Sub
End Class


Code Form3


Public Class Form3
    Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        TextBox1.Text = Form2.TextBox1.Text
    End Sub
End Class


De esta forma haces referencia al formulario en si, y no a la copia del formulario que seria la instancia del objeto que creas. Espero haberte ayudado y si alguien tiene otra explicación podria compartirla tambien.

Saludos.

Cita de: EON + = SOLUCIÓN

decaos

gracias SPAWN  y tienes razon yo lo que estaba haciendo con Dim Formulario2 As New Form2() era crear un nuevo formulario y lo que tenia que hacer era referirme al formulario que ya estaba creado para ello hice un pequeño cambio casi tu lo has hecho declare la variable formulario2 como un objeto "Dim formulario2 As Object"
luego le asigne el formulario al cual quiero pasar "formulario2 = Form2"
luego asi al referirme a "formulario2" ahora si me estoy refiriendo a el formulario que tengo en mi proyecto y no a uno que he creado como me estaba pasando lo llegue a averiguar de tanto probar y al darme cuenta que aun despues de borrar el 2do y 3er form me seguia apareciendo el 2do form asi me di cuenta que era porq yo lo estaba creando. Gracias por tu respuesta tienes razon y es la forma correcta de hacerlo saludos