Textbox Autocomplete Filter

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

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Textbox Autocomplete Filter

    Hallo,

    ich hab eine Textbox deren CustomSource ich aus einer Tabelle zur Laufzeit fülle mit einer distincteten Spalte dieser Tabelle. Da kann ich dann per AutoComplete einen Filter für besagte Tabelle angegeben.
    Nun würde ich den Filter am liebsten auch nur aktivieren wenn der AutoComplete durch ist.
    Das heißt im TextBox.TextChanged Event frage ich wiederum ab, ob der Text in der CustomSource zu finden ist. Ein passenderes Event konnte ich nicht finden.

    VB.NET-Quellcode

    1. 'Das Füllen
    2. Dim a As New AutoCompleteStringCollection()
    3. Dim range = DS1.ARTEcht.Select(Function(x) x.Art).Distinct.ToArray
    4. a.AddRange(range)
    5. filterArt.AutoCompleteCustomSource = a
    6. 'Das Filtern
    7. Private Sub filterArt_TextChanged(sender As Object, e As EventArgs) Handles filterArt.TextChanged
    8. If Not filterArt.AutoCompleteCustomSource.Contains(filterArt.Text) Then Exit Sub
    9. ARTEchtBindingSource.Filter = $"Art like '{filterArt.Text}'"
    10. End Sub


    Macht man das nicht mit einer Textbox sondern Combobox?
    Eine Combobox kann eine DataSource ja auch zur Designzeit festlegen, da ich aber Distinct Werte brauche, muss ich das dann weiterhin zur Laufzeit über die AutoCompleteCustomSource machen oder?
    Mit der DataSource wählt eine Combobox normalerweise ja einen einzelnen Datensatz aus.

    Viele Grüße

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „Haudruferzappeltnoch“ ()

    Wenn es so klappt, spricht eigentlich nichts gegen Dein Vorhaben.
    Ich glaube, dass ich das ganze Szenario in meinen Programm anders gelöst habe:
    Ich habe eine TextBox, in die der Benutzer schreiben kann. Eine ListBox darunter zeigt mir die DataTable-Ergebnisse an, die dazu passen. Der Benutzer kann dann entweder weiterschreiben oder den entsprechenden Eintrag aus der ListBox wählen. Solange es noch passende Treffer in der ListBox gibt, zählt nur der gewählte Eintrag in der ListBox. Hat der Benutzer etwas eingegeben, was es noch nicht gibt, kann ich situations-/programmabhängig entscheiden, ob dann ein neuer Eintrag erschaffen werden soll oder ob die Eingabe abgelehnt wird.
    Bilder
    • bekannte Treffer.png

      5,46 kB, 329×297, 22 mal angesehen
    • keine Treffer.png

      2,94 kB, 329×295, 23 mal angesehen
    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.
    Das war ein Beispiel aus meinem privaten Kassenbuch. Wie Du dem Form-Titel entnehmen kannst, geht es um die Erfassung der Daten eines neuen Eintrags. Ich filtere nicht, ich nutze diese Art von Eingabemaske als Beschleunigung zur Erfassung wiederkehrender Daten. Aber niemand hindert Dich, damit irgendwas zu filtern. Solange ein ListBox-Eintrag gewählt ist (der ja definitiv in der DataTable vorkommt), kann dieser ja als Filter hergenommen werden. Aber ich schwafele sehr allgemein, da ich das zu lösende Problem nicht kenne.
    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.
    Das zu lösende Problem ist genau wie beschrieben. Das ist ja schon eher eine generelle Herangehensweise, das ein User zur Übersicht vielleicht bestimmte Daten möglichst komfortabel filtern können möchte.
    Im Speziellen gibts bei mir hier eine rammelvolle Tabelle, die quasi als Nachschlagewerk fungiert. Ohne Filter kann da keiner beigehen.
    guck dir mal mein Werk AutoCompletion advanced an.
    Problematisch bei Autocompletion ist ja, dass das immer nur Vorschläge sind, und man immer noch jeden Unfug eingeben kann - also keine dezidierte Auswahl aus einer Liste vorgegebener Optionen.
    Jo, das habich da gelöst.
    Und ausserdem eine komfortablere Auswahlmöglichkeit geschaffen, weil ab so 150 Einträgen ist auch eine sortierte Liste icht mehr schön zum Auswählen.