Listbox Durchsuchung funktioniert nur bei einigen Wörtern

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    Listbox Durchsuchung funktioniert nur bei einigen Wörtern

    Hallo ich habe ein wenig Code geschrieben, mit dem ich eine Listbox ihre Items suche und anschließend markiere.
    Dazu gibt es noch eine "Regelung", die die LIstbox um ein paar Items scrollt, sobald ein Item gefunden wird.

    Meine Frage ist nun, dass der Code komischerweise bei bestimmen Woertern perfekt funktioniert, aber bei anderen Wörtern aus der Listbox passiert einfach nichts, es wird nichts gefunden oder angezeigt. Vielleicht weiß Jemand, warum.

    VB.NET-Quellcode

    1. Dim boxsucht As String = InputBox("Bitte geben Sie den Begriff ein: ", "Wort suchen")
    2. Dim listboxzahl As Integer = LB_Themen.Items.Count - 1 - LB_Themen.SelectedIndex
    3. For x As Integer = 0 To LB_Themen.Items.Count - 1
    4. If LB_Themen.Items(x).ToString.Contains(boxsucht.ToLower) Then
    5. LB_Themen.SelectedIndex = x
    6. Select Case LB_Themen.SelectedIndex
    7. Case Is >= listboxzahl
    8. With LB_Themen
    9. .TopIndex -= 18
    10. End With
    11. Case Is <= listboxzahl
    12. With LB_Themen
    13. .TopIndex += 16
    14. End With
    15. End Select
    16. LB_Themen.Focus()
    17. LB_Themen.SelectedIndex = x
    18. Return
    19. End If
    Edit: Vergiss das unten stehende, hatte mich verlesen :)

    Vermutlich liegt es daran:
    Dim listboxzahl As Integer = LB_Themen.Items.Count - 1 - LB_Themen.SelectedIndex

    Versuchs mal mit:
    Dim listboxzahl As Integer = LB_Themen.Items.Count
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Gib mal bitte zwei ListBox-Begriffe, einen, bei dem die Suche funktioniert und einen, bei dem es nicht klappt. Und dazu jeweils die verwendeten Suchbegriffe. Je mehr Beispiele, desto besser.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Es funktioniert z.b. bei
    fragen_personal bluetooth (suchbegriff bluetooth)

    abern nicht bei
    Fragen_personal Jazz Candy Dulfer (suchbegriff jazz)

    an der groß- und kleinschreibung kanns es nicht liegen weil im code ja boxsucht.ToLower geschrieben ist.
    Das von MrMo habe ich auch versucht aber es hat leider keine Änderung gegeben.
    Gibst du "Jazz Candy Dulfer" als Suchbegriff ein? Oder nur "Jazz"? Weil .Contains() vergleicht den ganzen String, nicht nur einzelne Worte.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    da Jazz (mit großem J) in der ListBox steht, du aber nur Deinen Suchbegriff "lowerst", findet er natürlich keine Übereinstimmung. Du musst schon beide Begriffe "lowern"
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Klasse du hast recht ich musste die Lisboxitems auch tolowern:

    VB.NET-Quellcode

    1. If LB_Themen.Items(x).ToString.ToLower.Contains(boxsucht.ToLower)

    ....
    Neue Frage: ich will den gesuchten Begriff auf der Listbox zentrieren (in der listbox passen 38 items).
    Es soll also den Begriff automatisch auf die Mitte scrollen.
    Ich habe es mit etwas komisches gedoenst versucht, aber es klappt nur maesig, manchmal wird es mittig, manchmal steht der gesuchte begriff aber noch ganz oben bzw ganz unten in der liste. Hat da evtl jemand eine Idee?

    VB.NET-Quellcode

    1. LB_Themen.SelectedIndex = x
    2. Select Case LB_Themen.SelectedIndex
    3. Case Is >= listboxzahl
    4. With LB_Themen
    5. .TopIndex -= 18
    6. End With
    7. Case Is <= listboxzahl
    8. With LB_Themen
    9. .TopIndex += 16
    10. End With
    11. End Select

    Unter Berechnung der sichtbaren ListIBoxtems kannst Du folgendes verwenden (Achtung! Schnell zusammengeschustert!)

    VB.NET-Quellcode

    1. Private Sub CenterSelectedItemIn(ListBox As ListBox)
    2. If ListBox.SelectedItems.Count <> 1 Then Exit Sub
    3. ListBox.BeginUpdate()
    4. Dim ListBoxVisibleItemsCount = ListBox.Height \ ListBox.ItemHeight
    5. Dim PossibleTopIndex = ListBox.SelectedIndex - ListBoxVisibleItemsCount \ 2
    6. If PossibleTopIndex >= 0 Then ListBox.TopIndex = PossibleTopIndex
    7. ListBox.EndUpdate()
    8. End Sub

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.