Dodawanie kolekcji do listBoxa

0

Męczę się z dodaniem kolekcji do listboxa. Napisałem klasę, która ma strukturę:

 public class Cele
    {
        public int CelId { get; private set; }
        public string CelName { get; private set; }
        public double CelX { get; private set; }
        public double CelY { get; private set; }
 
        public Cele(int nCelId, string sCelName, double sCelX, double nCelY)
        {
            CelId = nCelId;
            CelName = sCelName;
            CelX = sCelX;
            CelY = nCelY;
        }
       
    }

Następnie tworzę kolekcję celów:

 List<Cele> _items = new List<Cele>();

I dodaję elementy do kolekcji:

 _items.Add(new Cele(licznikCelow, nazwaCelu.Text.ToString(), Convert.ToDouble(xCelu.Text), Convert.ToDouble(yCelu.Text))); 

po przypisaniu

listBox1.DataSource = _items;

Pokazuje mi się tylko 1 element w listBox, w dodatku zawierający tylko nazwę przestrzeni itd. Jak dobrać się do poszczególnych elementów aby w listboxie była wyświetlana tylko nazwaCelu a żebym później mógł usuwać z niej pojedynczo elementy??

0

Wyswietla sie namespace, ponieważ jest wywoływana metoda toString() dla obiektu klasy Cele. Musisz zrobić override tej metody z klasy bazowej Object i zwrócić customowego stringa np CelName.

0

Nie nazywaj klasy w formie liczby mnogiej, jeśli nie jest kolekcją.

0

Nie jestem zbyt zaawansowany, czy mogę prosić o przykład?

0
public class Cel // nie "Cele"

Dlaczego? Dlatego:

Cel cel; // jeden obiekt

List<Cel> cele; // kolekcja obiektów 
1
misiakufal napisał(a):

Wyswietla sie namespace, ponieważ jest wywoływana metoda toString() dla obiektu klasy Cele. Musisz zrobić override tej metody z klasy bazowej Object i zwrócić customowego stringa np CelName.

Ale po co, wystarczy zbindowac się do elementu listy ( przykład dla WF. Chyba dla WPF też zadziała ale zaleca się robić wiązania w widoku czyli XAML-u )

List<dynamic> dynList = new List<dynamic>() { 
            new {Id = 1, Name = "Elevator", Company="Vertical Pop" },
            new {Id = 2, Name = "Stairs", Company="Fitness" }
};

listBox.DataSource = dynList; 
listBox.DisplayMember = "Name";
listBox.ValueMember = "Id";   

Kod to wycinek znaleziony o tu : https://www.google.pl/search?q=c%23+how+to+bind+to+list+element&oq=c%23+how+to+bind+to+list+element&aqs=chrome..69i57j69i58.7838j0j7&sourceid=chrome&espv=210&es_sm=93&ie=UTF-8

0

Ostatecznie robię to tak:

private void button6_Click(object sender, EventArgs e)
        {
            _items.Add(new Cele(licznikCelow, nazwaCelu.Text.ToString(), Convert.ToDouble(xCelu.Text), Convert.ToDouble(yCelu.Text)));
            licznikCelow++;
            listBox1.Items.Clear();
            int licznikCelow2 = 0;
            foreach(Cel cele in _items)
            {
                listBox1.Items.Insert(licznikCelow2, cele.CelName);
                licznikCelow2++;
            }
        } 

Niestety mam problem z usuwaniem, bo używając:

 _items.RemoveAt(listBox1.SelectedIndex);

pojawia się błąd. SelectedIndex zwraca cały czas -1.

1
radmistrz2 napisał(a):

SelectedIndex zwraca cały czas -1.

Bo nic nie jest zaznaczone.

0

do złego listboxa był podpięty ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1