TextBox ohne Fokus per Tastatureingabe beschreiben

  • VB.NET

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

    TextBox ohne Fokus per Tastatureingabe beschreiben

    Hallo
    Wie mit euch in einem anderen Thread besprochen habe ich einen recht umfangreichen Code, um Tastenanschläge abzufangen und an eine Textbox zu senden.
    Habe nun eine Demoanwendung gebastelt. Hier gibt es ein DGV und eine Textbox.
    Wenn der User etwas auf der Tastatur tippt, soll die Textbox damit beschrieben werden, egal ob sie den Fokus hat, oder nicht.
    Der Code sieht so aus (nur eben länger, u alle Möglichen Tasten abzufangen):
    Spoiler anzeigen

    VB.NET-Quellcode

    1. ​Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles MyBase.KeyDown
    2. Select Case e.KeyCode
    3. Case Keys.D0 To Keys.D9 '0-9
    4. TBSearch.Text = (Convert.ToChar(e.KeyCode))
    5. Case Keys.NumPad0 To Keys.NumPad9 'Zehnertastatur 0-9
    6. TBSearch.Text =(Convert.ToChar(e.KeyCode - 48))
    7. Case Keys.A To Keys.Z, Keys.Escape, Keys.Enter
    8. TBSearch.Text =(e.KeyCode.ToString)
    9. 'usw.
    10. End Select
    11. End Sub


    Da dieser Code mittlerweile recht lang ist - und ich immernoch nicht alle Zeichen habe, bastel ich gerade an einer anderen Lösung, aber bekomme es nicht hin.

    Mein neuer Gedanke ist nicht mehr den Text in eine nicht ausgewählte Box zu schreiben, sondern die Suchenbox einfach bei Tastendruck zu selektieren.

    VB.NET-Quellcode

    1. Private Sub frmMain_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
    2. Select Case e.KeyCode
    3. Case Keys.Escape 'Löschen von Suchen Textboxen
    4. If TCMain.SelectedTab Is TPParcels Then DelTBSearchText()
    5. End Select
    6. 'wenn TB nicht ausgewählt - auswählen und Wert übergeben
    7. If Not Me.TBSearchParcel.Focused Then
    8. Me.TBSearchParcel.Select()
    9. Me.TBSearchParcel.Text = (TBSearchParcel.Text & e.KeyCode.ToString).ToLower
    10. 'ans Ende der TBEingabe springen
    11. Me.TBSearchParcel.Select(TBSearchParcel.Text.Length, 0)
    12. End If
    13. End Sub


    Das funktioniert soweit. Sobald eine Taste der Tastatur gedrückt wird, erhält die Textbox den Fokus und ich kann weiter schreiben.
    Aber wie ihr am Code ja wahrscheinlich seht, wird der erste Tastenanschlag dann "verschluckt". Meine Lösung e.Keycode.tostring ist dabei natürlich murks.

    Kann ich bei einem Tastendruck, die Textbox selektieren, BEVOR der Tastendruck an sich "also die konkrete Taste" an mein Programm gesendet wird?
    @DerSmurf Du kannst im Enter-Ereignis der Form die TextBox fokussieren.
    Du kannst der Form .KeyPreview = True geben oder eben False. Musst Du probieren.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    hallo.
    Key Preview steht auf True, sonst passiert nix.
    Das Problem ist, dass ich dann ja keinen Fokus auf der Textbox mehr habe, wenn ich in der Form ein anderes Control wähle.
    Also funktionierts ja nur so lange, bis ich irgendein Element auf meiner Form wähle.
    @DerSmurf Ganz versteh ich das nich.
    Machma ein kleines Beispielprojekt, das Deinen Effekt reproduziert und häng es bereinigt (ohne bin- und obj-Ordner) als Zip an.
    Dann beschreib, wie wir den Effekt reproduzieren können
    und was passieren soll.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    ok, mach ich. Kann ich aber erst heute Abend erledigen.
    Aber letzlich ist es auch einfach erklärt.

    Ich möchte einer nicht fokussieten Textbox, nach Tastendruch auf der Tastatur, den Fokus geben.
    So kann der User Werte in dievTextbox schreiben, ohne diese anklicken zu müssen.
    Dies realisiere ich bisher im Keypress event, indem ich in einer select case anwendung, den Keycode auswerte und entsprechend Werte an die Textbox.Text anhänge.
    Allerdings muss ich dazu ja alle Tasten abfangen, das ist ein Riesencode (nach dem Schema oben im Spoiler).
    um dieyen mega code zu verkleinern, versuche ich also nicht mehr in eine t3xtbox ohne Fokus Werte einzutragen, sonder fokussiere sie im Keydown Event.
    Dann wir aber der erste bustabe veschluckt (siehe code Post1)
    gebe ich als "start" ein, bekommt die Textbox beim druck auf "s" den fokus und andchließend wird "tart" dort eingrtragen.
    wie bekomme ich nun noch das "S" da rein?
    Mein e.Keycode.tostring funktioniert ja nicht...

    War das so verständlich erklär, oder ist mein Anliegen noch unklar?

    DerSmurf schrieb:

    ja alle Tasten abfangen
    Wo ist da das Problem?
    Du fragst den KeyCode ab, ob er AlphaNum ist und wenn ja, wird er an die TextBox gehängt.
    docs.microsoft.com/de-de/dotne…ter?view=netframework-4.8
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @DerSmurf Du bist also der Meinung, dass Du der weltweit der erste Programmierer bist, der versucht, Zastencodes einzuteilen in Buchstaben, Ziffern, Sonderzeichen und Steuerzeichen?
    Möglicherweise hat das Framework da bereits was vorbereitet.
    Entwickle Eigeninitiative :!:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    @DerSmurf Du bist also der Meinung, dass Du der weltweit der erste Programmierer bist, der versucht, Zastencodes einzuteilen in Buchstaben, Ziffern, Sonderzeichen und Steuerzeichen?

    Ich habe keine Ahnung, aus welcher meiner Zeilen du dir das zusammenreimst.
    Allerdings ist diese deine BEhauptung schlichtweg falsch.

    Und auch sonst, habe ich überhaupt nicht vor "Tastencodes einzuteilen", denn das ist ja mein Urpsrungscode (siehe Post1)
    Also die mir (vorgeforne) fehlende Eigeninititiavie würdest du finden, wenn du in Post1 auf den Spoiler klickst.
    Dort tue ich doch, was du mir vorschlägst.
    und in den Posts darunter erkläre ich, warum ich genau das nicht möchte.
    Und biete eine halbfertige Alternativlösung an, bei der ich Hilfe brauche.

    Ich bin froh um jede Hilfe hier, aber sorry - bitte lies dir meine threads auch durch...
    Denn mir das gleiche raten, was ich bereits getan habe und mich dann als "nicht Eigeninitativ" und ignorant hinzustellen, ist wenig hilfreich für mich und auch eine community generell nicht besonders zuträglich.

    Also könnten wir das lassen, und SACHLICH, beim Thema bleiben?

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „DerSmurf“ ()

    DerSmurf schrieb:

    Ich habe keine Ahnung, aus welcher meiner Zeilen du dir das zusammenreimst.

    DerSmurf schrieb:

    ich möchte ja aber alle Zeichen abfangen.

    DerSmurf schrieb:

    Aber da hilft mir doch bei Sonderzeichen nicht weiter.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Sorry, aber ich raffe es nicht.
    Was du mir hier aufzeigst dient doch zur Prüfung, um welches Zeichen es sich handelt.
    Ich verstehe einfach nicht, wie mir das bei meinem Problem helfen soll, denn von genau diesem Ansatz will ich ja weg.
    @DerSmurf Was genau macht Dein Code, was er nicht machen soll,
    was macht er nicht, was er machen soll?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    DerSmurf schrieb:

    Na, was
    Ich will nicht wissen was Du willst, denn das steht in Deinem Eingangspost.
    Ich will wissen, was Dein Programm macht bzw. nicht macht.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Meine Textbox bekommt nach Tastendruck den Fokus. Aber:

    DerSmurf schrieb:

    Dann wir aber der erste bustabe veschluckt (siehe code Post1)
    gebe ich als "start" ein, bekommt die Textbox beim druck auf "s" den fokus und andchließend wird "tart" dort eingrtragen.
    wie bekomme ich nun noch das "S" da rein?
    Mein e.Keycode.tostring funktioniert ja nicht...
    Z.B.:

    DerSmurf schrieb:

    Mein e.Keycode.tostring funktioniert ja nicht...
    Was passiert?
    Was soll passieren?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    E.keycode.tostring wandelt mir den Keycode in einen String um.
    Also Num7 auf der Tastatur z.B. wird zu NUMPAD7 in meiner Textbox.
    Eine 7 wäre schöner. Aber das eben ohne die abfragen wie in Post1 unter dem Spoiler.
    Also schön wäre wenn nach Tastendruck erst die Textbox selektiert wird und erst dann der Tastenanschlag verarbeitet wird.
    Oder eben eine Möglichkeit die Taste an die Textbox zu senden.
    @DerSmurf Dann frage nach, ob die Taste NumPad ist, und gib den numerischen Wert weiter.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    DerSmurf schrieb:

    in der Irrsinnigen Abfrage.
    Wie viele und welche Kategorien gibt es denn?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!