Dodawanie kolekcji do listBoxa

Dodawanie kolekcji do listBoxa
R2
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 18
0

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

Kopiuj
 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:

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

I dodaję elementy do kolekcji:

Kopiuj
 _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??

MI
  • Rejestracja: dni
  • Ostatnio: dni
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.

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
0

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

R2
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 18
0

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

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
0
Kopiuj
public class Cel // nie "Cele"

Dlaczego? Dlatego:

Kopiuj
Cel cel; // jeden obiekt

List<Cel> cele; // kolekcja obiektów 
wedlock
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Bartoszyce
  • Postów: 180
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 )

Kopiuj
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

R2
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 18
0

Ostatecznie robię to tak:

Kopiuj
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:

Kopiuj
 _items.RemoveAt(listBox1.SelectedIndex);

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

somekind
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
1
radmistrz2 napisał(a):

SelectedIndex zwraca cały czas -1.

Bo nic nie jest zaznaczone.

R2
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 18
0

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.