Pasar datos entre formularios

Resuelto Afnan Bashir asked hace 13 años • 6 respuestas

Tengo dos formularios. Primero, Form1tiene un cuadro de grupo, algunas etiquetas y un cuadro de lista. Presiono un botón y Form2se abre uno nuevo que contiene algo de texto. Quiero transferir el texto Form2al cuadro de lista en el archivo Form1.

Hasta ahora, lo que he hecho es hacer que el modificador del cuadro de lista sea público y luego poner este código en el botón deForm2

Form1 frm = new Form1();
frm.ListBox.items.Add(textBox.Text);

Pero, sorprendentemente, esto no añade ningún valor. Pensé que me había equivocado con la inserción así que hice el mismo procedimiento. Esta vez, hice pública una etiqueta y agregué valor de cuadro de texto a su Textpropiedad, pero falló.

¿Algunas ideas?

Afnan Bashir avatar Jan 04 '11 03:01 Afnan Bashir
Aceptado

Intente agregar un parámetro al constructor del segundo formulario (en su ejemplo, Form1) y pasar el valor de esa manera. Una vez que se llama a InitializeComponent(), puede agregar el parámetro al cuadro de lista como opción.

public Form1(String customItem)
{
  InitializeComponent();
  this.myListBox.Items.Add(customItem);
}

// In the original form's code:
Form1 frm = new Form1(this.textBox.Text);
Brad Christie avatar Jan 03 '2011 20:01 Brad Christie

Supongamos que Form1 llama a Form2. Por favor mira el código:

Formulario 1:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 frm = new Form2();
        frm.Show();
        frm.VisibleChanged += formVisibleChanged;


    }

    private void formVisibleChanged(object sender, EventArgs e)
    {
        Form2 frm = (Form2)sender;
        if (!frm.Visible)
        {
            this.listBox1.Items.Add(frm.ReturnText);
            frm.Dispose();
        }


    }

}

Formulario2:

 public partial class Form2 : Form
{

    public string ReturnText { get; set; }

    public Form2()
    {
        InitializeComponent();

    }

    private void button1_Click(object sender, EventArgs e)
    {
        this.ReturnText = this.textBox1.Text;
        this.Visible = false;

    }


}

La respuesta es declarar propiedad pública en Form2 y cuándo se oculta el formulario. Acceda a la misma instancia y recupere el valor.

Kamil Krasinski avatar Sep 24 '2011 21:09 Kamil Krasinski

El siguiente código funciona perfectamente en mi máquina.

private void button1_Click(object sender, EventArgs e)
{
    Form1 f1 = new Form1();
    f1.listBox1.Items.Add(textBox1.Text );//ListBox1 : Modifier property made public
    f1.ShowDialog();
}

Ok, si está llamando a la secuencia es como Form1->Form2 y Form2 actualiza el valor de Form1, entonces debe usar ParentForm () o Delegate para actualizar el formulario anterior.

indiPy avatar Jan 03 '2011 20:01 indiPy