Quiero pedir ayuda sobre mi problema. Mi problema es que no puedo obtener los valores de una Lista de otro formulario y transferirlos a un ListBox en otro formulario. Quiero que los elementos de la Lista sean la fuente de datos del cuadro de lista.

Estas son las capturas de pantalla de mi programa.

Este es el código de mi Form1.

public Form1()
    {
        InitializeComponent();
    }

    public List<string> list = new List<string>();
    private void button1_Click(object sender, EventArgs e)
    {
        Form2 form2 = new Form2();

        form2.ShowDialog();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        list.Add("!");

        MessageBox.Show(list.Count.ToString());
    }

Luego, en mi Form2, creé una instancia de Form1 y llamé a la lista List, pero cuando se carga Form2, el ListBox no se completa con los datos y parece que la lista List no contiene ningún dato cuando se carga Form2. Aquí está mi código en Form2.

public Form2()
    {
        InitializeComponent();
    }

    private void Form2_Load(object sender, EventArgs e)
    {
        Form1 form1 = new Form1();

        listBox1.DataSource = form1.list;
    }

¿Alguna idea de cómo puedo solucionar el problema? Intenté todo lo que puedo hacer pero no puedo resolver el problema. Perdón por mis errores, solo soy un principiante en C #, en mi curso y aquí en stackoverflow. Gracias de antemano.

0
yigyung 9 feb. 2015 a las 19:10

2 respuestas

La mejor respuesta

En Form1, cambie:

form2.ShowDialog();

Para:

form2.ShowDialog(this); // pass in this Form1 instance as the "Owner"

Luego, en Form2, cambie:

private void Form2_Load(object sender, EventArgs e)
{
    Form1 form1 = new Form1();
    listBox1.DataSource = form1.list;
}

Para:

private void Form2_Load(object sender, EventArgs e)
{
    Form1 f1 = (Form1)this.Owner;
    listBox1.DataSource = f1.list;
}
1
Idle_Mind 9 feb. 2015 a las 16:18

En el constructor de Form2 estás creando una nueva instancia de Form1 con un nuevo objeto ListBox, que está vacío. Debe pasar la fuente de datos de ListBox a Form2 a través de su constructor.

public class Form2
{
     public Form2(Array arr)
     {
        listBox.DataSource = arr;
     }
}

Es importante NO pasar el objeto Form directamente, para no crear un acoplamiento entre esos formularios; solo nos interesan los datos.

1
baryo 9 feb. 2015 a las 16:17