"Schnellsuche" mit AutoComplete in MenuStrip

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

Es gibt 27 Antworten in diesem Thema. Der letzte Beitrag () ist von Mokki.

    "Schnellsuche" mit AutoComplete in MenuStrip

    Hallo,
    ich möchte eine mithilfe einer ToolStripTextBox eine RichTextbox durchsuchen. Diese soll auch eine AutoComplete-Funktion haben.
    Mein Stand: Ich habe alles soweit implementiert, aber wenn ich per Tabulator-Taste meine Eingabe automatisch vervollständigen lassen will, wird automatisch das Control gewechselt (und zwar auf das am weitesten links stehende ToolStripMenuItem des MenuStrip)

    Wie kann ich das verhindern? Schließlich soll folgendes möglich sein:
    Ich gebe ein "A" ein -> TAB-Taste -> ENTER-Taste (sucht nach dem Begriff mit A, welcher vervollständigt wurde)

    Ich hoffe ihr könnt das Problem nachvollziehen. Wenn ihr weitere Informationen braucht, dann fragt einfach.

    (Übrigens habe ich lange nichts mehr mit dem Designer gemacht -> vielleicht habe ich eine simple Eigenschaft eines Controls übersehen?)

    Vielen Dank im voraus.

    MfG
    Mikro Fahrrad
    „Was ich gerade mache? Ich reite Hand in Hand mit dem Matthäus-Effekt auf einer Exponentialfunktion.“ ^^
    Hilft mir leider nicht weiter oder ich weiß zumindest nicht wie. Ich meine klar, über das Leave-Event bemerke ich das Raustappen, aber da ich die "rtb.find()" Funktion nutze, muss ich während der Suche sowieso der Richtextbox den Focus geben.
    „Was ich gerade mache? Ich reite Hand in Hand mit dem Matthäus-Effekt auf einer Exponentialfunktion.“ ^^
    *Push*
    Hier mal ein paar Bilder, die mein Problem veranschaulichen:

    EDIT: @Mokki: Wie kann ich im Leave-Event herausfinden, ob wegen der Tabulator-Taste das Control verlassen wurde oder aus anderen gründen? Wenn ich wüsste, dass das Control genau wegen der Tabulator-Taste verlassen wird, wäre mir geholfen.
    Bilder
    • Nach der Tab-Taste.png

      75,25 kB, 850×653, 148 mal angesehen
    • Vor der TAB-Taste.png

      73,34 kB, 848×648, 132 mal angesehen
    „Was ich gerade mache? Ich reite Hand in Hand mit dem Matthäus-Effekt auf einer Exponentialfunktion.“ ^^
    *Trippelpost*

    Mir wäre auch geholfen, wenn mir jemand sagen könnte wie ich ganz allgemein für ein MenuStrip verhindern kann, dass man mit der Tab-Taste durch die ToolStripMenuItems tabben kann.
    „Was ich gerade mache? Ich reite Hand in Hand mit dem Matthäus-Effekt auf einer Exponentialfunktion.“ ^^
    Verhindern ist unmöglich(zumindest nach meinem Wissen). Also wenn man Tab drückt geht er 1. Zu 100% nach dem Tabindex u. 2. Gibt es kein Mousemove auf dem neuen Element(2. Ist nicht getestet). So könnte man das herausfinden... Natürlich dürfte es auch kein Mousclick geben(ist glaub besser als Move)


    Lg Mokki
    ​Smartnotr - ein intelligentes Notizprogramm
    zum Thread

    Danke für die Antwort, aber es nicht genau was du meinst sry. Was genau soll ich machen / probieren?
    „Was ich gerade mache? Ich reite Hand in Hand mit dem Matthäus-Effekt auf einer Exponentialfunktion.“ ^^
    Also ich hab wie gesagt (glaub ich) nicht die beste Lösung aber du kannst abfragen ob der Cursor auf ein Control clickt. Somit weist du ob der User mit der Maus oder mit Tab gewechselt hat. Hab grad keinen Pc da, mach dir aber nen bsp. sobald ich kann.

    Lg Mokki
    ​Smartnotr - ein intelligentes Notizprogramm
    zum Thread

    Danke, funktioniert soweit. Nur eine Kleinigkeit stört mich noch: Das ToolStripMenuItem "Datei" bleibt angwählt. Wie kann ich das "abwählen"? Der Focus liegt aber auf der RichTextBox. Wenn ich jetzt z. B. ENTER drücke, wird der gefundene Text durch einene Zeilenumbruch ersetzt.
    Bilder
    • Lösung.png

      69,05 kB, 853×659, 154 mal angesehen
    „Was ich gerade mache? Ich reite Hand in Hand mit dem Matthäus-Effekt auf einer Exponentialfunktion.“ ^^
    Hier mein bisheriger Code (basierend auf deinen Tipps):

    VB.NET-Quellcode

    1. Private Clicked As Boolean = False
    2. Private Sub menSearch_Click(sender As System.Object, e As System.EventArgs) Handles menSearch.Click
    3. If menSearch.Text = "Schnellsuche" Then menSearch.Clear()
    4. End Sub
    5. Private Sub menSearch_DoubleClick(sender As Object, e As System.EventArgs) Handles menSearch.DoubleClick
    6. menSearch.Clear()
    7. End Sub
    8. Private Sub menSearch_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles menSearch.KeyDown
    9. If e.KeyCode = Keys.Enter Then
    10. Search(menSearch.Text)
    11. End If
    12. End Sub
    13. Private Sub menSearch_Leave(sender As Object, e As System.EventArgs) Handles menSearch.Leave
    14. If Not Clicked Then
    15. Search(menSearch.Text)
    16. Else
    17. Clicked = False
    18. End If
    19. End Sub
    20. Private Sub menFile_Click(sender As Object, e As System.EventArgs) Handles menFile.Click
    21. Clicked = True
    22. End Sub
    23. Private Sub Search(Key As String)
    24. menSearch.AutoCompleteCustomSource.Add(menSearch.Text)
    25. Dim res As Integer = rtb.Find(menSearch.Text)
    26. If res = -1 Then
    27. MessageBox.Show("""" & menSearch.Text & """ wurde nicht gefunden.", "Word - Schnellsuche", MessageBoxButtons.OK, MessageBoxIcon.Information)
    28. Else
    29. rtb.Select(res, menSearch.TextLength)
    30. rtb.Focus()
    31. End If
    32. End Sub
    „Was ich gerade mache? Ich reite Hand in Hand mit dem Matthäus-Effekt auf einer Exponentialfunktion.“ ^^
    menSearch ist die ToolStripTextBox.

    Edit: Zeile 7 bis 9 sorgt nur davor, dass man mit einem Doppelklick auf das Suchfeld dessen Inhalt löscht.
    „Was ich gerade mache? Ich reite Hand in Hand mit dem Matthäus-Effekt auf einer Exponentialfunktion.“ ^^

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

    Nochmal was anneres:

    Mikro Fahrrad schrieb:

    Das ToolStripMenuItem "Datei" bleibt angwählt. Wie kann ich das "abwählen"? Der Focus liegt aber auf der RichTextBox.
    Auf dem Bild sehe ich nirgends eine MenuTextbox.
    Auch hast du nicht erklärt bei welchen User-Aktionen es zu diesem eigenartigen Zustand kommt.
    Ich habe das Problem mal rekonstruiert und in den Anhang gepackt.

    Ziel: Ich möchte mit der TAB-Taste Autovervollständigen können.

    Problem: Es funktioniert, aber das ToolStripMenuItem "menFile" mit dem Text "Datei" wird angewählt.
    Dateien
    „Was ich gerade mache? Ich reite Hand in Hand mit dem Matthäus-Effekt auf einer Exponentialfunktion.“ ^^

    ErfinderDesRades schrieb:

    Auf dem Bild sehe ich nirgends eine MenuTextbox.
    Auch hast du nicht erklärt bei welchen User-Aktionen es zu diesem eigenartigen Zustand kommt.


    Die "Schnellsuche"-TextBox ist eine ToolStripTextBox. (siehe Anhang)

    User Aktion:
    1. Eingabe "Text" in diese ToolStripTextBox
    2. Enter (Suche wird ausgeführt)
    3. Löschen des Inhalts der ToolStriptextBox
    4. Eingabe "T" in diese ToolStripTextBox
    5. Tabultor-Taste drücken (zur Autovervollständigung)
    Dann wurde die Suche ausgeführt, aber das ToolStripMenuItem "menFile" mit dem Text "Datei" ist "selected". Dann möchte ich nicht.

    Siehe Beispielprogramm im vorherigen Post.

    PS: Habe hier per Google etwas gefunden und in VB übersetzt, aber es funktioniert nicht bzw. ich verstehe es nicht 100 %-ig:
    stackoverflow.com/questions/10…pitem-on-contextmenustrip
    Bilder
    • ToolStripTextBox.PNG

      25,36 kB, 870×134, 151 mal angesehen
    „Was ich gerade mache? Ich reite Hand in Hand mit dem Matthäus-Effekt auf einer Exponentialfunktion.“ ^^
    Soweit habe ich auch verstanden. Nur leider funktioniert es bei mir nicht.

    Gibt es für dieses höchst-triviale Problem denn keine Lösung? Oder bin ich einfach zu dumm mein Problem richtig zu erklären? (wahrscheinlich letzteres ^^)
    „Was ich gerade mache? Ich reite Hand in Hand mit dem Matthäus-Effekt auf einer Exponentialfunktion.“ ^^