Pasar datos entre formularios

Tengo dos formas. Primero, Form1 tiene un cuadro de grupo, algunas tags y un cuadro de lista. Presiono un botón y se abre el nuevo Form2 y contiene algo de texto. Deseo transferir el texto en Form2 al cuadro de lista en Form1 .

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

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

Pero, sorprendentemente, esto no agrega ningún valor. Pensé que estaba equivocado con la inserción, así que hice el mismo procedimiento. Esta vez, publiqué una etiqueta pública y agregué valor de cuadro de texto a su propiedad de Text , pero falló.

¿Algunas ideas?

 Form1 frm = new Form1(); 

frm ahora es una nueva instancia de la clase Form1.

frm no se refiere a la instancia original de Form1 que se mostró al usuario.

Una solución es, al crear la instancia de Form2, pasarle una referencia a su instancia actual de Form1.

Intente agregar un parámetro al constructor del segundo formulario (en su ejemplo, Form1) y pase el valor de esa manera. Una vez que se invoca InitializeComponent (), puede agregar el parámetro al listbox como una 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); 

A continuación, el 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(); } 

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

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(); } } } 

Form2:

  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 cuando el formulario se oculta. Acceda a la misma instancia y recupere el valor.

Por favor, evite el concepto de hacer que cualquier miembro público como usted dijo >> lo he hecho es hacer modificador de listbox en público y luego en form2 en código de botón << esto no es una buena práctica, por otro lado, el bueno está en Brad Christie’s Post, espero que lo hayas conseguido.

Este código estará dentro del formulario que contiene myListBox, probablemente dentro de un controlador de clic de botón.

 Form2 frm2 = new Form2(); frm2.ShowDialog(); this.myListBox.Items.Add(frm2.myTextBox.Text); frm2.Dispose();