none
Pasar variables de un form a otro form con un botón RRS feed

  • Pregunta

  • Buenas camaradas:

    Tengo dos Form. En el Form principal tiene un botón que al pulsarlo abre el segundo Form.

    También tiene dos botones más en el principal y dos textBox.

    En el textBox1 solo escribo caracteres y en el segundo solo números.

    En el Form2 solo tiene dos label.

    Escribo en los textBox números y caracteres, pulso el botón de cada uno de ellos y se muestra la información en los label del Form2.

    ¿Cómo se hace?

    Saludos.


    http://electronica-pic.blogspot.com

    domingo, 7 de febrero de 2021 7:14

Respuestas

  • Primera consideración: NO basta con decir "el Form2", porque podría haber en pantalla varias instancias del mismo Form2 abiertas a la vez. Aunque tú sepas que solo vas a abrir una, el compilador no lo sabe. Así pues, en el código fuente tienes que especificar cuál es la instancia concreta del Form2 con la que te quieres comunicar. Para ello, tienes que guardar en una variable esa instancia.

    Por ejemplo, si en el botón que abre el Form2 lo abres así:

    Form2 frm = new Form2(); frm.Show();

    pues entonces esa variable "frm" no puede ser una variable local definida en el click del botón. Tienes que declarar

    Form2 frm;

    fuera del manejador (a nivel de form) para que se conserve y después puedas acceder a ese instancia, y después dentro del manejador hacer únicamente

    frm = new Form2(); frm.Show();

    Después de eso, en el click del botón en el que quieres cambiar el label del Form2, puedes hacer esto:

    frm.label1.Text = textBox1.Text;

    Observa que llamamos a "frm" que es la instancia, y no a "Form2" que es la clase (y que podría tener varias instancias abiertas).

    Recuerda que en el diseñador del Form2 tienes que marcar el label como "public" para que sea accesible de esta manera.


    domingo, 7 de febrero de 2021 10:34
    Moderador

Todas las respuestas

  • Primera consideración: NO basta con decir "el Form2", porque podría haber en pantalla varias instancias del mismo Form2 abiertas a la vez. Aunque tú sepas que solo vas a abrir una, el compilador no lo sabe. Así pues, en el código fuente tienes que especificar cuál es la instancia concreta del Form2 con la que te quieres comunicar. Para ello, tienes que guardar en una variable esa instancia.

    Por ejemplo, si en el botón que abre el Form2 lo abres así:

    Form2 frm = new Form2(); frm.Show();

    pues entonces esa variable "frm" no puede ser una variable local definida en el click del botón. Tienes que declarar

    Form2 frm;

    fuera del manejador (a nivel de form) para que se conserve y después puedas acceder a ese instancia, y después dentro del manejador hacer únicamente

    frm = new Form2(); frm.Show();

    Después de eso, en el click del botón en el que quieres cambiar el label del Form2, puedes hacer esto:

    frm.label1.Text = textBox1.Text;

    Observa que llamamos a "frm" que es la instancia, y no a "Form2" que es la clase (y que podría tener varias instancias abiertas).

    Recuerda que en el diseñador del Form2 tienes que marcar el label como "public" para que sea accesible de esta manera.


    domingo, 7 de febrero de 2021 10:34
    Moderador
  • Hola.

    Por ahora he hecho esto.

    Funciona. Dejo el ´codigo por si alguien lo necesita.

    using System;
    using System.Windows.Forms;
    
    namespace Pasar_variable_form_a_otro_form_01_cs
    {
        public partial class Form1 : Form
        {
            // Declarar formulario 2 o Form2.
            Form2 frm;
    
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button_Abrir_Form2_Click(object sender, EventArgs e)
            {
                frm = new Form2(); // Crea un objetio nuevo.
                frm.Show(); // Mostrar Form2.
            }
    
            private void button_Enviar_variable_numeros_Click(object sender, EventArgs e)
            {
                frm.label1.Text = textBox_Numeros.Text;
            }
    
            private void button_Enviar_variable_letras_Click(object sender, EventArgs e)
            {
                frm.label2.Text = textBox_Letras.Text;
            }
        }
    }

    Muchas gracias.


    http://electronica-pic.blogspot.com

    domingo, 7 de febrero de 2021 23:44
  • Hola,

    Gracias por confirmar que se ha encontrado una solución a la consulta realizada.

    Gracias por usar los foros de MSDN.

    Eric Ruiz

    ____________________________

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

    Si tiene algún cumplido o reclamo sobre el soporte de MSDN siéntase en la libertad de contactar MSDNFSF@microsoft.com.

    lunes, 8 de febrero de 2021 14:54
    Moderador