Benutzer mit den meisten Antworten
Keine Duplikate in ComboBox

Frage
Antworten
-
Die Eindeutigkeit kann man mit der distinct-Anweisung einer LinQ erreichen, die man zum Laden (z.B. binden an die DataSource) nutzt, z.B. so:
Option Infer On ' Only VB9 Option Strict On Public Class Form1 Dim cb As New ComboBox With {.Dock = DockStyle.Top} Dim liste() As String = {"11", "33", "22", "33", "77", "66", "11", "66"} Private Sub Form1_Load(ByVal sender As Object, _ ByVal e As System.EventArgs) _ Handles Me.Load Me.Controls.AddRange(New Control() {cb}) cb.DataSource = (From itm In liste Select itm Distinct).ToList End Sub End Class
--
Peter- Als Antwort vorgeschlagen Peter Fleischer Dienstag, 22. September 2009 04:33
- Als Antwort markiert Robert Breitenhofer Dienstag, 22. September 2009 07:06
Alle Antworten
-
Hallo telakis,
So wird’s gemacht:Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ComboBox1.Items.Add("aba") ComboBox1.Items.Add("bab") ComboBox1.Items.Add("def") ComboBox1.Items.Add("ref") ComboBox1.Items.Add("def") ComboBox1.Items.Add("abb") ComboBox1.Items.Add("bba") ComboBox1.Items.Add("aba") End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click For i As Int16 = 0 To Me.ComboBox1.Items.Count - 2 For j As Int16 = Me.ComboBox1.Items.Count - 1 To i + 1 Step -1 If Me.ComboBox1.Items(i).ToString = Me.ComboBox1.Items(j).ToString Then Me.ComboBox1.Items.RemoveAt(j) End If Next Next End Sub End Class
Grüße,
Robert- Als Antwort vorgeschlagen Robert Breitenhofer Montag, 21. September 2009 20:22
- Nicht als Antwort vorgeschlagen Robert Breitenhofer Donnerstag, 8. April 2010 06:25
-
Die Eindeutigkeit kann man mit der distinct-Anweisung einer LinQ erreichen, die man zum Laden (z.B. binden an die DataSource) nutzt, z.B. so:
Option Infer On ' Only VB9 Option Strict On Public Class Form1 Dim cb As New ComboBox With {.Dock = DockStyle.Top} Dim liste() As String = {"11", "33", "22", "33", "77", "66", "11", "66"} Private Sub Form1_Load(ByVal sender As Object, _ ByVal e As System.EventArgs) _ Handles Me.Load Me.Controls.AddRange(New Control() {cb}) cb.DataSource = (From itm In liste Select itm Distinct).ToList End Sub End Class
--
Peter- Als Antwort vorgeschlagen Peter Fleischer Dienstag, 22. September 2009 04:33
- Als Antwort markiert Robert Breitenhofer Dienstag, 22. September 2009 07:06
-
Hallo Robert,
nachdem ich mich stundenlang abgemüht habe und selbst versucht habe auf eine brauchbare Lösung zu kommen, habe ich diese Lösung verwendet, um doppelte Menueeinträge in einem ToolStripMenu zu entdecken. Ich habe es einfach für meine Zwecke abgewandelt und es hat einwandfrei funktioniert:
For i As Int16 = 0 To CShort(Me.KontoToolStripMenuItem.DropDownItems.Count - 2) For j As Int16 = CShort(Me.KontoToolStripMenuItem.DropDownItems.Count - 1) To CShort(i + 1) Step -1 If Me.KontoToolStripMenuItem.DropDownItems(i).ToString = Me.KontoToolStripMenuItem.DropDownItems(j).ToString Then MsgBox("Duplikat gefunden") End If Next Next
War ein toller Tipp - danke!
- Bearbeitet Robert Breitenhofer Donnerstag, 8. April 2010 06:25 Formatierung
-
Hallo Schochi,
Tipp am Rande:
Du kannst für die Variablen jeweils einen Integer verwenden,
und das CShort weglassen, was den Code übersichtlicher macht.
Intern wird dort mit ohnhin Integer für die Indexer (Item) gearbeitet
und so ist das Umwandeln sinnfrei.Gruß Elmar
-
Hallo Elmar,
vielen Dank für den Tipp. Da ich noch Anfänger bin und zur Zeit mein erstes "großes" Programm (6 Forms und 40 Eigenschaften) schreibe, bin ich für jeden Tipp von den Profis dankbar. Bisher habe ich alle Probleme selbst gelöst, aber ich bin sicher man trifft sich noch im Forum, da ich jetzt eigentlich mit meinen Latein weitestgehend am Ende bin und jetzt professionelle Hilfe gut gebrauchen kann. Zur Zeit kämpfe ich mit damit, dass ich alle Eigenschaften in eine ArrayList schreibe, ich aber nicht weiß, wie ich die zusammengehörigen Datensätze wieder zusammen bekomme, aber das werde ich erst mal im Forum nachschauen bzw. gesondert als Frage einstellen.
Viele Grüße und danke nochmal