Se me ocurren dos formas:
La primera (la más fácil de entender)... declara una variable privada de tipo Form1 en tu Form2... cambia el constructor de tu Form2 y añádele un parámetro de tipo Form1, de tal manera que al construir una instancia de Form2 reciba como parámetro una variable Form1 que asignarás a tu variable privada (así, a través de esta variable de tipo Form1, podrás acceder a todos los métodos públicos de Form1 desde tu Form2):
- Código: Seleccionar todo
public partial class Form2 : Form
{
private Form1 formulario1;
public Form2(Form1 form)
{
formulario1 = form;
InitializeComponent();
}
}
En el código de tu Form1 creas un método público para insertar texto en tu listbox:
- Código: Seleccionar todo
public void InsertarTextoEnLista(string texto)
{
listBox1.Items.Add(texto);
}
Y ahora añades a tu Form2 el evento de click en el botón para pasar el texto de tu text box al list box de tu formulario 1:
- Código: Seleccionar todo
private void button1_Click(object sender, EventArgs e)
{
formulario1.InsertarTextoEnLista(textBox1.Text);
}
La segunda forma:Usando eventos y delegados. (Si no sabes lo que son te recomiendo que busques información sobre ellos... son tremendamente útiles en muchas situaciones).
Para ello: declara un delegado fuera de la declaración de las clases pero dentro del namespace de tu proyecto:
- Código: Seleccionar todo
namespace PruebaEventosEntreFormularios
{
public delegate void MessageHandler(string texto);
public partial class Form1 : Form
{...
Hemos declarado un delegado llamado MessageHandler (que no devolverá nada y que tiene un parámetro de tipo string).
Ahora creamos el evento que se producirá al hacer click en el botón de tu formulario 2, para ello en la clase Form2:
- Código: Seleccionar todo
public partial class Form2 : Form
{
public event MessageHandler TextoEnviado;
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
TextoEnviado(textBox1.Text);
}
}
Lo que hemos hecho es declarar un evento del tipo MessageHandler (fíjate que el nombre es el mismo que el del delegado creado en form1) y le hemos asignado un nombre de TextoEnviado.
Después respondemos al evento click sobre el botón de este formulario generando el evento recién creado (TextoEnviado) al que le pasamos un parámetro de tipo string que es el contenido del textbox (esto es así porque hemos declarado el delegado que manejará este evento como de tipo void recibiendo un parámetro tipo string).
Pues lo último que nos queda es suscribirnos a dicho evento en el form1... para ello, cuando creas el Form2 como respuesta al click en el botón del formulario 1 debes añadir lo siguiente:
- Código: Seleccionar todo
private void button1_Click(object sender, EventArgs e)
{
Form2 formulario2 = new Form2();
formulario2.TextoEnviado += new MessageHandler(InsertarTextoEnLista); //Con esta línea nos suscribimos al evento TextoEnviado del Form2 y lo manejamos con la función InsertarTextoEnLista
formulario2.ShowDialog();
}
La función InsertarTextoEnLista (declarada en el Form1) debe cumplir con la forma del delegado, es decir, no debe devolver nada y debe aceptar un parámetro tipo string... aquí te la dejo.
- Código: Seleccionar todo
public void InsertarTextoEnLista(string texto)
{
listBox1.Items.Add(texto);
}
Puedes probarlo y verás que las dos formas funcionana.
Espero haberte ayudado.