none
Obtener valor de otro formulario RRS feed

  • Pregunta

  • Hola muy buenas,

    Estoy intentando pasar un texto que esta en un textBox de un formulario a una variable de otro formulario.

    He estado buscando y lo he echo tal y como lo pone en la msdn: http://msdn.microsoft.com/es-es/library/aa288422%28v=vs.71%29.aspx

    Pero no hay manera, al intentar utilizar la variable es nula.

    Aqui el codigo del Form3 en el cual se encuentra ese textBox del cual necesito obtener el valor:

    public TextBox TRACODI
    {
       get { return txtTracodi }
    }

    Aqui el codigo del formulario el cual intenta obtener el valor del Form3:

    private Form3 ClienteFrm = new Form3();
    
    public void ObtenerTracodi()
    {
        String Tracodi = ClienteFrm.TRACODI.Text;
        MessageBox.Show(Tracodi);
    }
    gracias de antemano, un saludo.

    viernes, 9 de enero de 2015 11:49

Respuestas

  • hola

    en que sentido se comunican los formularios ? ese form3 es padre o hijo del form al que quieres pasar los datos

    lo planteo porque la tecnica cambia segun el caso, la idea es no depender de la instancia del form para acceder a la informacion

    por ejemplo aqui

    Comunicar Formularios

    le pasas los datos del form hijo a su padre, se usa interfaz para desacoplar la comunicacion y la instancia se asigna en el constructor

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 9 de enero de 2015 13:34

Todas las respuestas

  • El problema está en la primera línea, donde haces private Form3 ClienteFrm = new Form3();. Fíjate en que haces un new Form3. Esto crea una nueva instancia del formulario Form3 que tiene todos los campos vacíos, puesto que esta instancia nunca se ha llegado a mostrar en pantalla (no le has hecho un Show). Por eso el TRACODI siempre te llega vacío.

    Para poder leer el campo del Form3, tienes que usar la misma instancia que originalmente creaste y presentaste en pantalla (para lo cual tendrás que guardarte la variable en que la instanciaste, y usarla en lugar de ClienteFrm).

    • Propuesto como respuesta Jesús López viernes, 9 de enero de 2015 12:57
    viernes, 9 de enero de 2015 12:34
    Moderador
  • hola

    en que sentido se comunican los formularios ? ese form3 es padre o hijo del form al que quieres pasar los datos

    lo planteo porque la tecnica cambia segun el caso, la idea es no depender de la instancia del form para acceder a la informacion

    por ejemplo aqui

    Comunicar Formularios

    le pasas los datos del form hijo a su padre, se usa interfaz para desacoplar la comunicacion y la instancia se asigna en el constructor

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 9 de enero de 2015 13:34
  • Alberto gracias por responder,

    He probado quitando el new Form3();

    Pero ahora me lanza el error: Excepción no controlada del tipo 'System.NullReferenceException' en GElPeriodico.exe

    He comprobado y el textbox no es nullo.


    viernes, 9 de enero de 2015 16:37
  • Leandro gracias por responder,

    Los formularios no tienen ningun tipo de comunicacion.
    viernes, 9 de enero de 2015 16:37
  • He probado quitando el new Form3();

    No, eso no vale. Si haces eso, entonces esa nueva variable de tipo Form3 vale null y dará errores, como ya has descubierto. Es necesario que hagas lo que te dije, es decir, copiar en la variable EL MISMO valor de la primera instancia del Form3 que creaste (la que se está viendo en pantalla).

    He comprobado y el textbox no es nullo.

    ¿CUÁL de los textboxes no es nulo? Fíjate en que estás manejando DOS instancias del mismo textbox: una contenida dentro del formulario que se ve en pantalla (que no es nula), y OTRA en el formulario que acabas de instanciar, y que no se ve en pantalla, y que sí que es nula.

    viernes, 9 de enero de 2015 16:58
    Moderador
  • Hola, Erik.

    No has leído lo que escribió Alberto?

    puesto que esta instancia nunca se ha llegado a mostrar en pantalla (no le has hecho un Show). Por eso el TRACODI siempre te llega vacío.

    Creo que deberías intentar:

    Form3 ClienteFrm = new Form3();
    ClienteFrm.ShowDialog();
    
    if(ClienteFrm.TRACODI != null)
    {
     string Tracodi = ClienteFrm.TRACODI;
    }


    De esta forma no deberías de tener problema, claro hay otras opciones como las que muestra Leandro Tuttini, por ejemplo el traspaso de información con una Interface (forma desacoplada) es una buena opción también.


    Carlos Márquez
    San Pedro Sula
    Honduras




    viernes, 9 de enero de 2015 17:01
  • >>Los formularios no tienen ningun tipo de comunicacion.

    como que no tienen ? no quieres pasar datos de un form a otro, eso es comunicacion

    entonces cual es el sentido, de que form a que form pasas los datos ?

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    viernes, 9 de enero de 2015 17:07
  • El caso es pasar los datos a un formulario que esta ya abierto, no abrirlo de nuevo.

    Saludos.

    domingo, 11 de enero de 2015 20:36
  • >>El caso es pasar los datos a un formulario que esta ya abierto, no abrirlo de nuevo

    claro de eso estamos hablando

    pero se supone que desde un form abres otro y estos son los que se comunican

    pero sigues sin mencionar que form abre cual otro para determinar el sentido de la comunicaicon entre los mismos

    analizaste el articulo que propuse ? alli se menciona como pasar datos de un form a otro de forma desacoplada

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    domingo, 11 de enero de 2015 20:54
  • Hola, Erik.

    En el link que te pasó Leandro Tuttini, cuando lo abrís, hay varías formas de pasar la información, pero hay un link en especial que es el de paso de información de forma desacoplada, esto se logra implementando una interfaz, te paso ese link que es siempre del blog de Leandro.

    Comunicar formularios de forma desacoplada

    Esta es la forma que te menciona Leandro en la respuesta anterior.

    Saludos.


    Carlos Márquez
    San Pedro Sula
    Honduras


    lunes, 12 de enero de 2015 14:07
  • Hola buenas tardes, gracias a todos por las respuestas.

    He estado probando el metodo desacoplado del blog de Leandro, me sigue sin funcionar.

    Os explico la estructura que tengo:

    Tengo un FRM principal que es un contenedor mdi donde abro los formularios.

    Entonces lo que intento es a traves de un formulario hijo FORM1 del principal abrir otro FORM2 desde el cual envio datos al FORM1.

    El ejemplo de Leandro no me da errores pero tampoco me funciona.

    Saludos


    • Editado ErikNeller lunes, 12 de enero de 2015 18:03
    lunes, 12 de enero de 2015 18:03
  • Muy buenas,

    Ya tengo todo solucionado con los tutoriales y ejemplos del blog de Leandro Tuttini fijandome mejor consegui ver como funcionan este tipo de comunicaciones.

    Muchisimas gracias a todos.

    martes, 13 de enero de 2015 9:29