Pasar datos entre formularios
Tengo dos formularios. Primero, Form1
tiene un cuadro de grupo, algunas etiquetas y un cuadro de lista. Presiono un botón y Form2
se abre uno nuevo que contiene algo de texto. Quiero transferir el texto Form2
al 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 Text
propiedad, pero falló.
¿Algunas ideas?
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);
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.
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.