[C#] In ListBox soll jeder Wert einmalig sein

  • Themenstarter Themenstarter RescueThePinguins
  • Beginndatum Beginndatum
R

RescueThePinguins

Hallo erstmals

Mein Problem ist folgendes.Ich bin für mich an einem Projekt das Daten verwalten soll. Zum anzeigen der Daten habe ich 3 ListBoxen nebeneinander, in der ersten werden die Interpreten, in der 2. die Alben und in der 3. die Songs der Künstler angezeigt die jeweils in der anderen ListBox selektiert sind. Mein Problem ist jetzt das ich des öfteren 2 mal das gleiche Album oder auch den gleichen Interpret in der ListBox stehen habe.
Hab schon einiges Versucht komme aber einfach nicht weiter, sprich nichts hatte bis jetzt Erfolg.

Ich suche also nach einer möglichkeit meine ListBox nach den bereits eingetragenen Items zu durchsuchen und diese dann mit dem nächsten das ich einfügen würde zu vergleichen.

Also eigentlich müsste ich nur wissen wie das man die ListBox nach allen bereits vorhandenen Werten durchsuchen kann.

Hier der Code von der Bibliotheck:

private void Bibliothek_Load(object sender, EventArgs e)
{
foreach (Main.struSong titel in Main.SONGLIST)
{
if (titel.Interpret != null)
{
string hallo = listBox1.Items.ToString();

listBox1.Items.Add(titel.Interpret);
}
//Mues denn no alles chli besser benamlsle ond de bug usenäh dasses d'albe ond so dopplet azeigt

}
}



& der Struktur Song

public struct struSong
{
public String Titel;
public String Interpret;
public String Album;
public String SongPath;
public String AlbumCover;
}
public static String SAVEPATH;
public static List<struSong> SONGLIST = new List<struSong>();
public XmlDocument doc = new XmlDocument();



Ich hoffe auf einige Denkanstösse, wenn ich Informationen vergessen hätte die wichtig wären bitte sagen.

Lg

RescueThePinguins
 
Implementier die Schnittstelle IEquatable
Dann überschreibst du noch die Standard Equals Methode des Structs und GetHashCode.

Danach solltest du dann einfach mit listBox.Items.Contains vergeichen können.

ungefähr so:
Code:
struct MeinSctruct : IEquatable<MeinStruct>
{
    public MeinStruct(string irgendwas, int wasAnderes)
    {
        ...
        hashCode = (irgendwas.GetHashCode() + wasAnderes.GetHashCode()).GetHashCode();
    }

    public override int GetHashCode()
    {
        return hasCode;
    }

    public bool Equal(MeinSctruct item)
    {
         return item.Irgendwas == Irgendwas && item.WasAnderes == WasAnderes;
    }

    public override bool Equal(object item)
    {
         if(item is MeinSctruct)
             return Equal((MeinSctruct )item);
         return false;
    }

    ...
}

Nachtrag:
Sehe gerade
Code:
listBox.Items.Contains(title.Interpret);
sollte bei dir schon reichen
 
Zuletzt bearbeitet:
Genail!

Danke man denn beim ersten bin ich auch nicht wirklich weitergekommen weil ich IEquatable nicht ganz gerafft habe ^^

Auf jeden Fall super hast mir sehr geholfen

Mfg RescueThePinguins
 
Zurück