VB Eingabefeld soll Listboxergebnisse á la google aktualisieren

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

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von toddel.

    VB Eingabefeld soll Listboxergebnisse á la google aktualisieren

    Hallo...

    ich habe eine Webanwendung unter VB.Net mit einer Textbox als Filterfeld und eine Listbox, wo die Ergebnisse entsprechend der Eingabe gefiltert werden.

    Funktioniert soweit alles prima!

    Ich würde nur gern das Eingabefeld so gestalten daß die Listbox nach jedem Tastendruck aktualisiert wird. Bislang muß ich aus dem Feld gehen oder Enter drücken.

    Ich bin in der Webprogramierung nicht so fit, daß ich das Problem alleine lösen kann...

    Hab schon versucht, mit Javascript beim Ereignis Onkeyup den Focus auf das Feld zu setzen und dann den Cursor nach rechts zu verschieben, habe ich aber nicht hinbekommen...

    Gibt es da was einfacheres?

    Vielen Dank schonmal und nen schicken Tag!!!
    Hab mal hier kurz eine kleine Anwendung geschrieben, die macht eigentlich das was du vorhast:

    Erstelle eine Windows-Form Anwendung. Erstelle bitte danach folgende Controls:
    Textbox, ein Label und Timer.

    VB.NET-Quellcode

    1. Public Class Form1
    2. Public liste As New List(Of String)
    3. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    4. Label1.Text = ""
    5. liste.Add("Microsoft Windows 3.1")
    6. liste.Add("Microsoft Windows NT")
    7. liste.Add("Microsoft Windows 95")
    8. liste.Add("Microsoft Windows 98")
    9. liste.Add("Microsoft Windows ME")
    10. liste.Add("Microsoft Windows XP")
    11. liste.Add("Microsoft Windows Vista")
    12. liste.Add("Microsoft Windows 7")
    13. liste.Add("Microsoft Windows 8")
    14. liste.Add("Microsoft Windows 10")
    15. liste.Add("Ubuntu")
    16. liste.Add("Microsoft DOS")
    17. liste.Add("DR Dos")
    18. liste.Add("Caldera Dos")
    19. liste.Add("FreeDos")
    20. liste.Add("IBM OS/2")
    21. Timer1.Interval = 1000
    22. Timer1.Start()
    23. End Sub
    24. Private Sub TextBox1_TextChanged(ByVal sender As Object,
    25. ByVal e As EventArgs) Handles TextBox1.TextChanged
    26. For Each sItem As String In liste
    27. If sItem.Contains(TextBox1.Text) = True Then
    28. Label1.Text = Label1.Text & vbNewLine & sItem
    29. End If
    30. Next
    31. End Sub
    32. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    33. If TextBox1.Text = "" Then
    34. Label1.Text = ""
    35. End If
    36. End Sub
    37. End Class


    Ich habe das zunächst mal so konzipiert, dass er bei jeder Textänderung in Textbox1 die liste(of String) durchgeht ob Sie die eingegebenen Zeichen enthält.
    Jede Sekunde wird durch den Timer geprüft ob noch eine Eingabe in der Textbox existiert, wenn nicht werden die Suchergebnisse gelöscht.

    vielleicht hilft es dir weiter! 8-)

    LG

    toddel schrieb:

    Danke für Deinen Einsatz, aber Windows Forms? Für eine reine Webanwendung?

    Oh, hatte ich wohl überlesen. Das tut mir leid. Aber vielleicht kannst du es ähnlich umsetzen?
    Geht nicht einfach. Wenn die Items schon in der Listbox sind könnte dir das helfen:
    aspsnippets.com/Articles/Filte…ems-using-JavaScript.aspx

    Es geht in jedem Fall nur über JavaScript. Also im onkeyup der Textbox iwas machen.
    Das ist meine Signatur und sie wird wunderbar sein!
    Ja, aber ich kapier es nicht... Hab mit Javascript noch nichts gemacht... Letztendlich muss ich doch keine Daten sammeln, das macht doch die Listbox über die eingestellten Parameter... Die muss ja nur aktualisiert werden...

    Bislang bin ich hier am nahesten dran:

    Quellcode

    1. <asp:TextBox ID="TextBoxSuchfeld" runat="server" AutoPostBack="True" CausesValidation="True" Width="279px" AutoCompleteType="Enabled" onkeyup="myFunction()" TextMode="Search" Wrap="False"></asp:TextBox>
    2. </p>
    3. <script>
    4. function myFunction() {
    5. //msgbox kommt immer bei Tastendruck
    6. }
    7. </script>


    Die Funktion myFunction wird nach jedem Tastendruck aufgerufen... Wie würde der Javascriptbefehl zum Neubinden der Listbox lauten? Oder eine Funktion aufrufen... Ginge das überhaupt? Das wäre schon die Lösung...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „toddel“ ()

    Du benötigst keinen Callback wenn die Daten sowieso alle da sind. Ansonsten kannst du dir das hier anschauen:
    msdn.microsoft.com/en-us/library/ms178208.aspx

    Und wenn du eine Webanwendung schreiben willst, dann würde ich dir unbedingt raten, dich näher mit JavaScript zu befassen. Auch als ASP.NET Entwickler ;)
    Das ist meine Signatur und sie wird wunderbar sein!
    Eine ASP.net ComboBox sollte das "out of the box" können, schau einmal asp.net/web-forms/overview/aja…e-the-combobox-control-cs
    Oder do verwendest die AutoComplete-Property der Textbox, wenn Du bei dem Gespann Textbox/Listbox bleiben möchtest.

    Ich habe jetzt die ComboBox aus dem AJAX Toolkit. Die sollte auch reichen. Die ComboBox hat alle Mitarbeiter drin inkl. Autocomplete... Soweit Wunderbar

    Nur wenn ich einen Mitarbeiter auswähle, wird die Seite neu geladen, das sieht unschön aus.

    Also ein Ajax UpdatePanel reingezogen, welches ich bei SelectedIndexChange aktualisiere.

    Jedoch wird das Ereignis erst gefeuert, wenn ich Enter Drücke... Argh! Müsste doch aber durch anklicken eines Eintrags in der Liste gehen, oder?