C sharp - Arreglo de objetos

 
Vista:
sin imagen de perfil

Arreglo de objetos

Publicado por José (2 intervenciones) el 15/04/2017 12:17:15
Buenas. Estoy tratando de hacer como una agenda y tengo un problema a la hora de obtener objetos dentro de un arraylist. Logro meterlos, pero cuando voy a recuperar la información, siempre me muestra el ultimo contacto añadido.

Tengo una ligera idea de como debiera hacerlo, imagino que mi error estará en 2 puntos:
1º Estoy metiendo los datos siempre en la misma posición del arraylist (o siempre en el objeto creado) y por lo tanto, muestra siempre estos datos
2º No debo estar leyendo el arraylist y solo estoy leyendo el objeto con sus ultimos datos creados.

En cualquier caso, he hecho debug y me parece que el arraylist no crece y solo modifica el primer item, cosa que me deja un poco loco porque el foreach pasa tantas veces como contactos creo y no lo logro entender.

Os dejo el código de Program1.cs. (he cortado código, pero no me he olvidado del using.System.Collections). Agrego la clase cDatos por si fuera interesante.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
ArrayList contactos = new ArrayList();
        cDatos persona = new cDatos();
        private void agregarContacto()
        {
            if(txtNombre.Text == "" || txtEdad.Text == "" || txtTelefono.Text == "")
            {
                MessageBox.Show("Error. Datos requeridos.");
            } else
            {
                persona.Nombre = txtNombre.Text;
                persona.Edad = int.Parse(txtEdad.Text);
                persona.Telefono = int.Parse(txtTelefono.Text);
                persona.Sexo = cmbSexo.SelectedItem.ToString();
                persona.Casado = cmbCasado.SelectedItem.ToString();
                agregarArray();
                MessageBox.Show("Contacto creado");
            }
        }
        private void agregarArray()
        {
            contactos.Add(persona);
        }
        private void mostrarArray()
        {
            foreach (cDatos persona in contactos)
            {
                mostrarContacto();
            }
        }
        private void mostrarContacto()
        {
            string texto = "Nombre: " + persona.Nombre + "\n";
            texto = texto + "Edad: " + persona.Edad + "\n";
            texto = texto + "Teléfono: " + persona.Telefono + "\n";
            texto = texto + "Sexo: " + persona.Sexo + "\n";
            texto = texto + "Casado: " + persona.Casado + "\n";
            MessageBox.Show(texto);
        }
        private void btnInsertar_Click(object sender, EventArgs e)
        {
            agregarContacto();
        }
 
        private void btnMostrar_Click(object sender, EventArgs e)
        {
            mostrarArray();
        }

Gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Arreglo de objetos

Publicado por José (2 intervenciones) el 15/04/2017 13:01:18
Ya he encontrado la solución. La adjunto aquí.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
ArrayList contactos = new ArrayList();
private void agregarContacto()
{
    if(txtNombre.Text == "" || txtEdad.Text == "" || txtTelefono.Text == "")
    {
        MessageBox.Show("Error. Datos requeridos.");
    } else
    {
        agregarArray();
        MessageBox.Show("Contacto creado");
    }
}
private void agregarArray()
{
    contactos.Add(new cDatos {
    Nombre = txtNombre.Text,
    Edad = int.Parse(txtEdad.Text),
    Telefono = int.Parse(txtTelefono.Text),
    Sexo = cmbSexo.SelectedItem.ToString(),
    Casado = cmbCasado.SelectedItem.ToString()});
}
private void mostrarArray()
{
    foreach (cDatos persona in contactos)
    {
        string texto = "Nombre: " + persona.Nombre + "\n";
        texto = texto + "Edad: " + persona.Edad + "\n";
        texto = texto + "Teléfono: " + persona.Telefono + "\n";
        texto = texto + "Sexo: " + persona.Sexo + "\n";
        texto = texto + "Casado: " + persona.Casado + "\n";
        MessageBox.Show(texto);
    }
}
 
private void btnInsertar_Click(object sender, EventArgs e)
{
    agregarContacto();
}
 
private void btnMostrar_Click(object sender, EventArgs e)
{
    mostrarArray();
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar