Encoding Hazzles

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

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

    Peter329 schrieb:

    Es muss doch möglich sein herauszufinden

    ​Klar, aber unnötig. Du hast mich nicht richtig verstanden, du musst nicht für jedes Control das Event abonnieren. Du abonnierst nur das des Fensters (Form) und setzt KeyPreview auf true, fertig.

    RodFromGermany schrieb:

    Teste das mit einer separaten Form, ein paar Labels und KeyPreview = True, gib dann in den Labeln alles mögliche aus zum Testen Deiner Tastaturauswertung.


    Also Keypreview = True habe ich längst eingestellt. Und natürlich gebe ich alles aus,was mir in die Quere kommt, meist mit Debug.PrintI(), weil man das so besser dokumentieren kann.

    Aber so wie das aussieht, gibt es es nix, wo das generierte Zeichen drin steht. Das ist wohl irgendwo im inneren des Net Frameworks verborgen.

    Ich suche nach einer Möglichkeit, wie ich aus keyData den vermaledeiten keyChar generieren kann. So wie das .Net macht. Ist denn meine Anforderung so exotisch ?

    Na ja, wie gesagt ... im dümmsten Fall werde ich das hart verdrahten. Aber das wäre halt eine Kapitulation.

    LG
    Peter

    [edit]
    Habe eben erst den Beitrag von @Gonger gesehen ...

    ok, das probiere ich dann mal aus ...

    [editedit]

    Jetzt habe ich deinen Ratschlag geschnallt. Genial ! Das sieht soweit gut aus ! Ich muss das jetzt einmal in mein Projekt einarbeiten ... ein bissl stört mich noch, dass das Eingabefeld markiert wird, wenn man nichts verarbeitet ... aber da muss ich mal schauen, ob ich das mit Select() hinbekomme, ohne die Position des TextCursor zu zerstören. Der Teufel steckt eben im Detail.

    Danke erst mal für eure Ratschläge und eure unendliche Geduld.

    LG
    Peter

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

    Peter329 schrieb:

    wie ich aus keyData den vermaledeiten keyChar generieren kann
    So was:

    VB.NET-Quellcode

    1. Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles MyBase.KeyDown
    2. Label1.Text = e.KeyCode.ToString()
    3. Label2.Text = Convert.ToChar(e.KeyValue).ToString()
    4. End Sub
    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!
    So habe ich das jetzt gelöst:

    VB.NET-Quellcode

    1. Private Sub frmDeskTopCalculator_KeyPress(sender As Object, e As KeyPressEventArgs) Handles Me.KeyPress
    2. If txtInput.Focused Then Exit Sub 'Pass input to txtInput processing
    3. 'Process all input on form
    4. 'Debug.Print("Form Key=" & e.KeyChar)
    5. If e.KeyChar >= "0"c AndAlso e.KeyChar <= "9"c OrElse
    6. e.KeyChar = "."c OrElse
    7. e.KeyChar = ","c Then txtInput.Text &= e.KeyChar 'Accept input
    8. ProcessKey(e.KeyChar) 'Process all other keys commands
    9. e.Handled = True 'Ignore all other input
    10. End Sub
    11. Private Sub txtInput_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtInput.KeyPress
    12. 'Process all input on text box
    13. 'Debug.Print("TBox Key=" & e.KeyChar)
    14. If e.KeyChar >= "0"c AndAlso e.KeyChar <= "9"c OrElse
    15. e.KeyChar = "."c OrElse
    16. e.KeyChar = ","c Then Exit Sub 'Accept input
    17. ProcessKey(e.KeyChar) 'Process all other keys as commands
    18. e.Handled = True 'Ignore all other input
    19. End Sub
    20. Private Sub ProcessKey(KeyChar As Char)
    21. If KeyChar = ChrW(27) Then cmdCE.PerformClick()
    22. If KeyChar = "+"c Then ProcessCommand("+"c)
    23. If KeyChar = "-"c Then ProcessCommand("-"c)
    24. If KeyChar = "x"c OrElse KeyChar = "*" Then ProcessCommand("*"c)
    25. If KeyChar = "/"c Then ProcessCommand("/"c)
    26. If KeyChar = "%"c Then ProcessCommand("%"c)
    27. If KeyChar = "="c Then ProcessCommand("="c)
    28. End Sub


    Ansonsten muss ich noch die beiden KeyPress Routinen zusammen führen. Die unterscheiden sich nur dadurch, dass die Form.KeyPress den keyChar selbst an die Textbox anhängen muss, während die TBox.KeyPress Routine einfach aussteigt und das System selbst den keyChar anfügt.

    Die Sache läuft jetzt hervorragend. Ich kann die Eingaben per Mouse, per Tastatur oder per NumBlock durchführen. Im Gegensatz zu einem "richtigen" DesktopCalculator, kann ich jetzt txtInput aber auch per Mouse oder Tastatur korrigieren, bzw. Eingaben per Copy & Paste einstellen. Weiterhin kann ich mit viel größeren Zahlen arbeiten und mit höherer Präzision. Damit ist die VB Version dem realen Gerät deutlich überlegen, :)

    Vielen Dank noch einmal für eure Hilfe, ohne die ich das so nicht hinbekommen hätte.

    LG
    Peter

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