Entwickler-Ecke

WinForms - ListBox mit alternativen (unsichtbaren) Werten


Questioner - So 28.12.08 14:26
Titel: ListBox mit alternativen (unsichtbaren) Werten
Hi Leute,

bin ganz neu in diesem Forum, sowie ich mich erst seit wenigen Tagen mit C# beschäftige.

Nun bin ich auf ein "Problem" gestoßen, bei dem ich nicht weiß, wie ich es lösen soll.

Ich habe eine Liste mit mehereren Instanzen der Klasse "Konto". In dieser Liste sind sowohl Sparkonten als auch Girokonten vertreten, dich ich nun in unterschiedlichen ListBoxen anzeigen möchte.
Also eine ListBox für Sparkonten und eine ListBox für Girokonten.

Das Problem ist jetzt, dass ich es nicht schaffe, den Listen-Eintrag aus der ListBox mit der Liste der Konten in Beziehung zu bringen.

Zur Verdeutdlichung:

List<Konto> konten = new List<Konto>;
Die Liste enthält 2 Sparkonten und 1 Girokonto:

[0]Sparkonto
[1]Girokonto
[2]Sparkonto

Schreibe ich die Konten jetzt in unterschiedliche ListBoxen verändern sich ja dementsprechend die Indizes:

[0]Sparkonto
[1]Sparkonto

[0]Girokonto

Daher kann ich eine Beziehung bezüglich des Indizes nicht mehr herstellen.
Wie macht man das denn dann?! Kann man einem ListBox-Item nicht auch einen unsichtbaren internen Wert mitgeben, sodass zwar der User "Sparkonto" sieht, intern man aber den Index der Liste zurückgeliefert bekommt?!

Liebe Grüße,
Questioner


JüTho - So 28.12.08 15:17

Hallo,

es ist nicht gut, den Index als "wichtigen" Wert zu verwenden. Du kannst nicht sicher sein, dass in jeder Situation die Liste denselben Wert zurückliefert (während eines Programmlaufs schon, aber beim nächsten Programmstart mit anderer Reihenfolge von Anweisungen kann es anders aussehen).

Stattdessen solltest Du einen weiteren Wert in der Klasse Konto vorsehen; dafür gibt es die Eigenschaften. Wie in der Realität entsprechen die Eigenschaften der Klasse den tatsächlichen Eigenschaften: laufende Nummer (ID), Kontonummer, Kontoinhaber, Art des Kontos usw. Für Deine Nachprüfung ist z.B. die ID geeignet. Für die Anzeige kannst Du dann DisplayMember und ValueMember benutzen.

Gruß Jürgen


Questioner - So 28.12.08 17:57

Ja, dass das nicht gut ist weiß ich...
Sobald eine andere Funktion mir was aus der Liste löscht, stimmt nichts mehr...

Aber wenn ich in meiner ListBox jetzt ein Konto markiere, wie gelang ich dann zu dem Konto in der Liste?
Die ListBox kann mir doch nur den Text des sektierten Item liefern, oder den Index, oder hab ich da was falsch verstanden?

Liebe Grüße,
Questioner


JüTho - So 28.12.08 18:28

Hallo,

sofern Du (was ich als selbstverständlich angenommen hatte) ListBox.DataSource = List<Konto> festgelegt hast, bekommst Du nicht nur SelectedIndex oder SelectedText, sondern auch SelectedItem:

C#-Quelltext
1:
Konto item = myListBox.SelectedItem as Konto;                    


Gruß Jürgen