Tastendruck im NUM Block abfangen

  • VB.NET

Es gibt 18 Antworten in diesem Thema. Der letzte Beitrag () ist von FAtheone.

    Tastendruck im NUM Block abfangen

    Hi ich hab da mal wieder ne frage...

    Ich hab mir da was gebastel, wo für es zur bedinung hilfreich wäre wenn der benutzer nur auf seiner tastertur die zahlen eingeben muss. Da bei wäre es natürlich gut, wennn sowohl der NUM Block als auch die Zahlen über dem ABC Block abgefangen werden können. Die Plus, Minus, Mal und Geteilt tasten wären auch gut wenn ich die abfangen könnte. Ich hab da mla was von "SENDKEYS" gehört. Könnt ihr mir vielleicht sagen, wie das geht.
    Ich hoffe, ich hab Dich richtig verstanden.
    Im KeyDown-Event kannst Du die Tasten abfragen. Da kommen virtuelle Key-Codes an.

    VB.NET-Quellcode

    1. Private Sub TextBox1_KeyUpDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
    2. Dim txt as String = e.KeyCode.ToString
    3. End Sub

    Frage den e-Parameter ab und Du erhältst:
    bei den normalen Zifferntasten "D0", "D1", "D2", ..., "D9"
    beim Ziffernblock heißen sie "NumPad0" bis "NumPad9"
    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!
    probiert hab ichs. komme aber beim abfragen nicht weiter:

    VB.NET-Quellcode

    1. If txt(D0) Then
    2. End If


    Wo liegt der fehler? oder muss ich ganz anders abfragen?

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

    Zum erlernen von VB.NET lege ich dir folgende Links ans Herz:

    Forumsintern:
    [Allgemein] Entwickler-Ressourcen und Tools, Bücher und WebCasts
    [Allgemein] Grundlagen: Benennung von Controls (Update: 24.10.2010)
    [VB.NET] Beispiele für guten und schlechten Code (Stil)

    Galileo Openbooks:
    Galileo Openbook VB.NET
    Galileo Openbook Einstieg in VB 2008
    Galileo Openbook Einstieg in VB 2010

    Tipps zu Google

    BTW.
    Das sollte helfen

    VB.NET-Quellcode

    1. If e.KeyCode = Keys.D0 Then

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „FAtheone“ () aus folgendem Grund: umformuliert

    Der Fehler liegt in deiner Inkompetenz.
    Über das mit der Inkompetenz sehe ich in diesem fall mal hinweg, weil der Code mir die lösung gebracht hat.

    Danke an RodFromGermany hür die Hilfe. habe schon wieder ne frage. bis dahin bis bald und allen VB Programmierern viel erfolg.
    :) :thumbup:
    Plötzlich tat sich da noch ein fehler auf. Mein Code sieht nun wie folgt aus:

    VB.NET-Quellcode

    1. Private Sub txtCalcEnd_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtCalcEnd.KeyDown
    2. Dim txt As String = e.KeyCode.ToString
    3. If txt = Keys.D0.ToString Then
    4. cmdTXT0.PerformClick()
    5. ElseIf txt = Keys.D1.ToString Then
    6. cmdTXT1.PerformClick()
    7. ElseIf txt = Keys.D2.ToString Then
    8. cmdTXT2.PerformClick()
    9. ElseIf txt = Keys.D3.ToString Then
    10. cmdTXT3.PerformClick()
    11. ElseIf txt = Keys.D4.ToString Then
    12. cmdTXT4.PerformClick()
    13. ElseIf txt = Keys.D5.ToString Then
    14. cmdTXT5.PerformClick()
    15. ElseIf txt = Keys.D6.ToString Then
    16. cmdTXT6.PerformClick()
    17. ElseIf txt = Keys.D7.ToString Then
    18. cmdTXT7.PerformClick()
    19. ElseIf txt = Keys.D8.ToString Then
    20. cmdTXT8.PerformClick()
    21. ElseIf txt = Keys.D9.ToString Then
    22. cmdTXT9.PerformClick()
    23. End If
    24. End Sub


    Das problem i9st, dass die Aktion PerformClick nicht ausgeführt wird. egal wo ich das .ToString hinsetze oder entferne? wo liegt nun der fehler?
    Neinneinneinnein
    Mein Code war quasi C&P

    VB.NET-Quellcode

    1. Select Case e.KeyCode
    2. Case Keys.D0, Keys.NumPad0
    3. Case Keys.D1, Keys.NumPad1
    4. 'etc. pp.
    5. End Select


    txt ist fürn A****. Du konvertierst einen System.Windows.Forms.Keys In String und Vergleichst ihm mit ebensolchem. Das ist umständlich, unsauber und langsam.
    Des Weiteren bemerkst du die Select Case Anweisung anstatt einer If.. ElseIf mit immer der selben linken Seite. Dies ist auch schneller (Zumindest in C, VB.NET könnte den Code theoretisch auch optimieren, sodass er eine Select Case daraus macht. Das weis ich aber nicht)
    hmm, warum schlagt Ihr eigentlich in diesem Fall das KeyDown Event statt des KeyPress Events vor ?

    Im KeyDown Event kommt die Taste als Virtual Key (Keys Enumeration) im KeyPress Event dagegen sauber als String . Sowohl vom Numeric Block als auch von der normalen Tastatur, wäre das nicht einfacher ?

    Oder habe ich da etwas verpasst ? *grübel*
    Blöd wird's dann nur bei sachen wie Enter fur "=" :P
    Ich empfehle überigens hier das KeyUp-Event. Das gibt dem User ein besseres Gefühl (=> Das Programm macht erst etwas, wenn ich mich bereits entschieden habe, dass es okay ist.
    Man könnte im KeyDown ja soeine art Button gedrückt Sache machen (GDI)
    Danke für die Code Sache mit der Case, aber wo in der Case muss ich nun PerfomClick einfügen, damit, wenn der benutzer über die tastertur "1+1" eingiebt per code der Button für die 1 danach der button für das plus (cmdPlus) und danach wieder der button für die 1 per code gedrückt wird? :!: :?: :?:
    Es tut sich immer noch nichts. Ich habe nun auch schoin mal bei Gallieleo Computing reingeschaut und auch bei MSDN. Und habe SelectCase genauso aufgebaut. Aber es rührt sich nichts. Nicht einmal ein fehler passiert. Eigenartich. So wie ihr es mir herrausgesucht habt üsste es doch eigendlich klappen. aber vielleicht ist es sogar noch anders zu machen. Ich habe oben in der SelectCase zeile zusätzlich zu e.KeyCode wieder noch .ToString hinzugefügt. Klappte auch nicht. Weil ich nicht mehr weiter weis, habe ich für euch den Code Noch mal mit drin:: BITTE NOCH MAL HELFEN!!!!!!

    VB.NET-Quellcode

    1. Select Case e.KeyCode.ToString
    2. Case Keys.D0, Keys.NumPad0
    3. cmdTXT0.PerformClick()
    4. Case Keys.D1, Keys.NumPad1
    5. cmdTXT1.PerformClick()
    6. Case Keys.D2, Keys.NumPad2
    7. cmdTXT2.PerformClick()
    8. Case Keys.D3, Keys.NumPad3
    9. cmdTXT3.PerformClick()
    10. Case Keys.D4, Keys.NumPad4
    11. cmdTXT4.PerformClick()
    12. Case Keys.D5, Keys.NumPad5
    13. cmdTXT5.PerformClick()
    14. Case Keys.D6, Keys.NumPad6
    15. cmdTXT6.PerformClick()
    16. Case Keys.D7, Keys.NumPad7
    17. cmdTXT7.PerformClick()
    18. Case Keys.D8, Keys.NumPad8
    19. cmdTXT8.PerformClick()
    20. Case Keys.D9, Keys.NumPad9
    21. cmdTXT9.PerformClick()
    22. Case Else
    23. End Select


    Edit by der_Kurt:
    Farbe Rot ist den Moderatoren vorbehalten

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

    ehmm, warum denn jetzt wieder e.KeyCode.ToString ? Der Keycode ist Teil einer Enumeration und damit (so gut wie immer ) ein Integer-Wert. Insofern vergleichst Du hier Äpfel mit Birnen.

    Ausserdem solltest Du Dich einmal in die Benutzung des Debuggers einlesen, in der einfachsten Form besteht das nur in
    - setzen eines Haltepunktes an einer bestimmten Stelle des Codes (Stop Befehl oder Links-Click an Beginn der Zeile)
    - Programm Starten (F5)
    - Programm stoppt am dem / den Haltepunkten
    - Anzeigen des Direktfenster (Anzeige->Fenster->Direkt)
    - Anzeigen von Variablen durch Eintippen ?Variablenname im Direktfenster oder Halten der Maus über Variable
    - mit Einzelschritt wetergehen (Debugger Einzelschritt oder Funktionstaste)

    Damit kannst Du jetzt schauen a) ob Dein Event überhaupt aufgerufen wird und b) welchen Wert die e.Werte haben und c) welchen Weg Dein Code durch das Select Statement nimmt.

    hotknight schrieb:

    werds bei langeweile mal ausprobieren.

    Yep, warum auch Wissen aneignen wenn es doch soviel einfacher und weniger schmerzhaft ist dumme Fragen im Forum zu stellen.

    Diese Art Reaktion führt bei mir nicht dazu mir Deinen nächsten Post auch nur anschauen zu wollen, und noch weniger Dir eine Antwort zu geben ... nicht einmal aus Langeweile.

    bye
    Kannst du eigentlich nicht mal richtig lesen?
    Ich hatte dich bereits geschreiben:

    FAtheone schrieb:


    VB.NET-Quellcode

    1. Select Case e.KeyCode
    2. Case Keys.D0, Keys.NumPad0
    3. Case Keys.D1, Keys.NumPad1
    4. 'etc. pp.
    5. End Select



    Was willst du da denn schon wieder mit ToString() ?!?!

    BTW: Langeweile bringt nichts zu stande. Wenn du aus Langeweile Programmierst, dann lass es gleich sein.

    Kangaroo schrieb:





    Zitat von »hotknight«



    werds bei langeweile mal ausprobieren.

    Yep, warum auch Wissen aneignen wenn es doch soviel einfacher und weniger schmerzhaft ist dumme Fragen im Forum zu stellen.

    Diese Art Reaktion führt bei mir nicht dazu mir Deinen nächsten Post auch nur anschauen zu wollen, und noch weniger Dir eine Antwort zu geben ... nicht einmal aus Langeweile.

    bye

    1.: ICH PROGRAMIERE NICHT AUS LANGEWEILE.
    2.: Was heist hier dumme frage:? Solch ein forum ist dazu da um solche fragen zu stellen. Und wenn ich keine möglichkeit habe aus irgend ein buch sowas raus zu Quetschen und ich auch sonst nichts im INET finde was mir weiter hilft, warum sollte ich mich dann nicht an ein solches forum wenden.

    FAtheone schrieb:


    Kannst du eigentlich nicht mal richtig lesen?
    Ich hatte dich bereits geschreiben:

    Zitat von »FAtheone«

    Visual Basic Quellcode

    Select Case e.KeyCode
    Case Keys.D0, Keys.NumPad0
    Case Keys.D1, Keys.NumPad1
    'etc. pp.
    End Select

    Was willst du da denn schon wieder mit ToString() ?!?!

    BTW: Langeweile bringt nichts zu stande. Wenn du aus Langeweile Programmierst, dann lass es gleich sein.
    KUMPEL:: Ich kann richtig Lesen!! ABER: Es muss ja in die Case was rein, damit das Programm weis, was es tun soll wenn eine Taste gedrückt wird. In meinem Fall ja wohl PerformClick. Wenn sich dann aber nichts rühert, keine fehlermeldung kommt, dann ist das schon blöd. UND: da du mir das mit der Case Gelehrt hast, werde ich mich wohl zuerst an dich wenden, weil der Code eben von dir kam und du es ja dann verstehen müsstest, und weiterhelfen könntes. Das mit dem .ToString habe ich nur gemacht, weil ich zu Zeiten der If klammer eine fehler unterstreichung bekommen habe. Daraus schloss ich, das da noch vielleicht was anderes hin muss und gab nach ein bisschen experimentieren .ToSting ein. Dann erst war der fehler weg.

    Zu guter letzt: Da mann mich hier für blöt hält, (was ich ja nicht bin) und zu faul (was ich auch nicht bin) , werde ich euch nicht weiter belästigen.

    * Farbe Rot entfernt, Beitrag etwas formatiert *

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

    Und trotzdem hattest du bei deinem nicht nur in die Cases was reingepackt, sondern auch den Abfrage-Teil geändert.
    Du solltest dich echt mal mit der Logik dahinter beschäftigen; dann wäre es dir aufgefallen.

    Das du aus Langeweile programmierst ging aus deinem Post nunmal wortwörtlich ("Wenn ich mal Langeweile habe") hervor.
    Überlege dir mal deine Wortwahl (und Formatierung), BEVOR du auf "Absenden" drückst -.-