none
Ayuda con datos entre formularios. RRS feed

  • Pregunta

  • hola a todos, se que este tema es viejo y se ha tratado muchas veces en este foro y por varios lados también, he estado leyendo bastante por acá (y por otros lados) sobre como pasar información entre dos formularios, en mi sistema tengo varias situaciones así. Para llamar a los formularios me basé en un ejemplo de Enrique M. Montejo, http://social.msdn.microsoft.com/Forums/es-ES/805f371e-bed5-4eff-b558-2f888b80850e/validar-que-un-formulario-no-este-abierto-para-no-abrirlo-dos-veces

    Mi pregunta en cuestión es, que en los post que he visto se pasan las variables al llamar al formulario, pero como sería en el caso de que el formulario que recibe la información ya este abierto?

    Por ejemplo, tengo un form principal (MDI) y este abre uno ModificarDatoCliente, en el cual se tiene un botón Buscar, que llama a un form con una grilla donde se selecciona el cliente a modificar y luego se cierra, y los datos de ese cliente aparezcan en el form ModificarDatoCliente. No se si se entiende bien la idea.

    Espero me entiendan y ayuden.

    Saludos


    Guillermo Hadad


    miércoles, 21 de agosto de 2013 18:55

Respuestas

  • Hola Guillermo:

    Tal vez este articulo podria servirte, habla sombre como autocompletar un textbox pero también implementa la comunicación que deseas, cuestión de que lo analices un poco y lo adaptes a tus necesidades...

    AutoComplete TextBox usando Listas Genericas Parte 2


    Saludos desde Monterrey, Nuevo León, México!!!

    • Marcado como respuesta Guillermo Hadad viernes, 23 de agosto de 2013 2:12
    miércoles, 21 de agosto de 2013 20:03
  • ahora lo de tomarla para acceder e invocar sus métodos creo que no

    cuando tomas la instancia del form que quieres enviarle informacion que haces con este?

    no creas en ese form un metodo publico que puedas invocar para pasarle datos

    en el form1 digamso que defines

    Public Sub PasarDatos(param As String)

       textbox1.Text = param

    End Sub

    ahora en el form2 buscas la instancia de form1 y si la encuentras invocas ese metodo

       Dim frm1 As Form1 = .... ' aqui localizas la instancia del form1

       frm1.PasarDatos(valor)

    a esto apuntaba

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta Guillermo Hadad viernes, 23 de agosto de 2013 2:13
    jueves, 22 de agosto de 2013 2:34
  • pero como sería en el caso de que el formulario que recibe la información ya este abierto?

    podrias localizarlo y usar su instancia

    [WinForms] Verificar si el form esta abierto

    puedes de esta forma validar si la instancia existe y tomarla para acceder a ese form he invocar sus metodos

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta Guillermo Hadad viernes, 23 de agosto de 2013 2:13
    miércoles, 21 de agosto de 2013 20:18

Todas las respuestas

  • Hola Guillermo:

    Tal vez este articulo podria servirte, habla sombre como autocompletar un textbox pero también implementa la comunicación que deseas, cuestión de que lo analices un poco y lo adaptes a tus necesidades...

    AutoComplete TextBox usando Listas Genericas Parte 2


    Saludos desde Monterrey, Nuevo León, México!!!

    • Marcado como respuesta Guillermo Hadad viernes, 23 de agosto de 2013 2:12
    miércoles, 21 de agosto de 2013 20:03
  • pero como sería en el caso de que el formulario que recibe la información ya este abierto?

    podrias localizarlo y usar su instancia

    [WinForms] Verificar si el form esta abierto

    puedes de esta forma validar si la instancia existe y tomarla para acceder a ese form he invocar sus metodos

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta Guillermo Hadad viernes, 23 de agosto de 2013 2:13
    miércoles, 21 de agosto de 2013 20:18
  • Tienes dos formas

    1 - Con interfaces y polimorfismo

    2 - Con eventos

    miércoles, 21 de agosto de 2013 20:21
  • Gracias a Luis, Leandro y Biteando por responder.

    Luis estuve viendo tu link, voy a investigar un poco mas, pero aunque está en c, me parece esencialmente que pasas datos entre formularios usando propiedades, como los ejemplos de Leandro, que también usa ese método. Según he visto el paso se puede hacer por propiedades o por sobrecarga del constructor.

    Leandro, lo de validar la instancia, entiendo que te refieres a si está abierto el formulario, eso ya lo tengo, ahora lo de tomarla para acceder e invocar sus métodos creo que no, porque cuando cierro el formulario de búsqueda el otro de modificación queda en blanco, aunque las variables tomen los valores asignados. Me podrías decir como tomar esa instancia y que métodos invocar?


    Guillermo Hadad

    jueves, 22 de agosto de 2013 1:28
  • Perdón, pero podrías ser un poco mas específico?

    Guillermo Hadad

    jueves, 22 de agosto de 2013 1:29
  • Hola:

     En la parte de abajo del articulo podrás encontrar el proyecto de ejemplo tanto en C# como en Vb.net, el articulo usa una interfaz para enviar los valores...eso es lo que estas buscando lo de propiedades no tendría mucho que ver...


    Saludos desde Monterrey, Nuevo León, México!!!

    jueves, 22 de agosto de 2013 1:45
  • Gracias Luis, si ya descargué el ejemplo y lo estoy viendo.

    Guillermo Hadad

    jueves, 22 de agosto de 2013 1:52
  • ahora lo de tomarla para acceder e invocar sus métodos creo que no

    cuando tomas la instancia del form que quieres enviarle informacion que haces con este?

    no creas en ese form un metodo publico que puedas invocar para pasarle datos

    en el form1 digamso que defines

    Public Sub PasarDatos(param As String)

       textbox1.Text = param

    End Sub

    ahora en el form2 buscas la instancia de form1 y si la encuentras invocas ese metodo

       Dim frm1 As Form1 = .... ' aqui localizas la instancia del form1

       frm1.PasarDatos(valor)

    a esto apuntaba

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta Guillermo Hadad viernes, 23 de agosto de 2013 2:13
    jueves, 22 de agosto de 2013 2:34
  • Bueno esto es una operación que yo utilizo a diario y la resuelvo de esta manera:}

    1. Defino un procedimiento sub como entrada a mi programa, en el hago mis primeras conexiones a base de datos, muestro el formulario para autentificar las personas que vana a entrar a la aplicación. Antes de todo esto defino variables que voy a mantener publicas durante todas la corrida de mi aplicación, es decir, creo una variable que llamo por ejemplo sys_codigousuario, sys_nombreusuario etc. estas tendrán el valor respectivo durante toda la corrida del programa y las defino   como publicas al nivel del modulo de entrada al sistema.

    También defino otras variables como sys_codigocliente, sys_numeropedido, este tipo de variables la utilizo en procesos como el que tu describes por ejemplo:

    En el form1 que es el programa que va a mostrar los datos del cliente hay un botón  que llama a form2, este ultimo tiene una rejilla con todos los clientes a seleccionar, al hacer doble click en la regilla, toma el código del cliente seleccionado y lo muevo a la variable sys_codigocliente, como esta es publica la veras en cualquier parte de tu proyecto y no se perderá su valor hasta que yo así lo desida, al cerrar form2 puedo atrapar su valor al activarse el formulario nuevamente u otra forma, que es la que yo uso, seria asi:

    dim Form2 as new Datosclientes

    Form2.ShowDialog() Esto hacer que el formulario permanezca abierto hasta que se  cierre sin poder enfocar otro control, significa que 

    cuando se cierre seguirá la ejecución en la siguiente linea y  podrá ejecutar la siguiente instrucción que seria mover sys_codigocliente al texbox de búsqueda o utilizar la misma variables para la búsqueda y mostrar los datos del cliente.

    No olvidar mover "" a la variable que utilizas para la búsqueda en este caso sys_codigocliente ; ya que es una variable que siempre de be estar en blanco hasta su proxima llamada

    Espero haberte ayudado y cualquier duda no dudes en escribir.

    saludos


    • Editado aavanegas jueves, 22 de agosto de 2013 6:07 corregir datos
    jueves, 22 de agosto de 2013 6:03
  • Hola:
    En el siguiente ejemplo, el form de inicio es Form1 que contiene 1 etiqueta con la propiedad Text="" y 1 boton que llama a Form2.
    En Form2 hay 1 TextBox para escribir el texto que se pasara a la etiqueta del Form1 y 1 boton que pasa dicha informacion y cierra Form2.
    El codigo lo tienes debajo.

    Public Class Form1

        Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
            Me.Label1.Text = ""
        End Sub

        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            Using loForm As New Form2
                loForm.Padre = Me
                loForm.ShowDialog()
            End Using
        End Sub
    End Class

    Public Class Form2
        Private mFrmPadre As Form1

        Public Property Padre() As Form1
            Get
                Return mFrmPadre
            End Get
            Set(ByVal value As Form1)
                mFrmPadre = value
            End Set
        End Property

        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            mFrmPadre.Label1.Text = Me.TextBox1.Text
            Me.Close()
        End Sub
    End Class

    Un saludo desde Bilbo
    Carlos

    jueves, 22 de agosto de 2013 7:57
  • ahora en el form2 buscas la instancia de form1 y si la encuentras invocas ese metodo

       Dim frm1 As Form1 = .... ' aqui localizas la instancia del form1

       frm1.PasarDatos(valor)

    Leandro, en esta línea me da  "PasarDatos no es un miembro de 'System.Windows.Forms.Form'"


    Guillermo Hadad

    jueves, 22 de agosto de 2013 23:29
  • ok, gracias a Luis y a Leandro, y a todos los demás por responder, viendo y re-viendo, entendí al final que tengo que usar interfaces, tal y como me dijo Luis_Escobar y como también dijo Leandro. Solo que no se como hacerlo, no logro entender la implementación de interfaces (como definirlas, y aplicarlas) , estoy en blanco. Veré si encuentro algo para Dummys. De nuevo gracias a todos.

    Guillermo Hadad


    viernes, 23 de agosto de 2013 2:11