Hi,
ein ganz einfaches Problem: weil mein Tischrechner nach vielen Jahren seinen Geist aufgeben hat, und ich mich so an ihn gewöhnt habe, möchte ich den in VB realisieren. Anbei ein picture.
Man kann per Maus Eingaben machen. Oder man kann die Eingaben per Tastatur machen. In jedem Fall landen die Eingaben im oberen Eingabefenster.
Natürlich möchte ich per Tastatur nur folgende Eingaben zulassen:
Zahlen und Dezimalzeichen : 0, 1, 2, ... 9, . und ,
Rechenoperationen: + - x / % =
Alle anderen Tasten sollen einfach ignoriert werden.
Das habe ich wie folgt vesucht:
Mit den Zahlen und Dezimalzeichen klappt das ja auch prima.
Aber mit den Rechenoperationen klappt das überhaupt nicht. Das liegt daran, dass die Konvertierung nicht die richtigen Zeichen liefern. Wenn ich 5 eingebe, dann ist workint = 35 und workchr = "5"c , so wie es sein soll. Wenn ich aber ein ein '+' eingeben, dann kommt alles andere als workchr = "+"c heraus !
Und was besonders blöde ist: wenn ich '=' eingebe, dann ist workchr = "0"c ... und das bringt mein Programmlogik dann vollends durcheinander.
Diese Anweisung ist wohl nicht richtig:
Kann mir jemand (nachsichtig) erklären was ich falsch mache und wie ich das auf die Reihe kriegen kann ?
LG
Peter
P.S.: Wieso hat denn mein Programmcode so viele Leerzeilen ? Ich habe den mit Cut&Paste eingefügt und in meinem Coding sind die Leerzeilen nicht enthalten.
ein ganz einfaches Problem: weil mein Tischrechner nach vielen Jahren seinen Geist aufgeben hat, und ich mich so an ihn gewöhnt habe, möchte ich den in VB realisieren. Anbei ein picture.
Man kann per Maus Eingaben machen. Oder man kann die Eingaben per Tastatur machen. In jedem Fall landen die Eingaben im oberen Eingabefenster.
Natürlich möchte ich per Tastatur nur folgende Eingaben zulassen:
Zahlen und Dezimalzeichen : 0, 1, 2, ... 9, . und ,
Rechenoperationen: + - x / % =
Alle anderen Tasten sollen einfach ignoriert werden.
Das habe ich wie folgt vesucht:
VB.NET-Quellcode
- Private Sub txtInput_KeyDown(sender As Object, e As KeyEventArgs) Handles txtInput.KeyDown
- Debug.Print("txtInput_KeyDown --> ProcessKey KeyCode=" & e.KeyCode.ToString)
- e.SuppressKeyPress = ProcessKey(e.KeyCode)
- End Sub
- Private Function ProcessKey(Keycode As Integer) As Boolean
- If Keycode <= 20 Then Return False 'Ignore CNTL, SHIFT, ALT etc.
- Dim workchr As Char = Convert.ToChar(Keycode)
- Debug.Print("ProcessKey --> Keycode=" & Keycode.ToString & " workchr=" & workchr.ToString)
- Select Case workchr
- Case "0"c To "9"c
- Return False 'Accept numerics
- Case "."c, ","c
- Return False 'Accept decimals
- Case "+"c, "-"c, "%"c, "="c
- ProcessCommand(workchr) 'Process operation codes
- Case "x"c, "X"c, "*"c
- ProcessCommand("x"c) 'Process operation codes
- Case "/"c, ":"c
- ProcessCommand("/"c) 'Process operation codes
- Case Else
- Return False
- End Select
- Return True 'Process key
- End Function
Mit den Zahlen und Dezimalzeichen klappt das ja auch prima.
Aber mit den Rechenoperationen klappt das überhaupt nicht. Das liegt daran, dass die Konvertierung nicht die richtigen Zeichen liefern. Wenn ich 5 eingebe, dann ist workint = 35 und workchr = "5"c , so wie es sein soll. Wenn ich aber ein ein '+' eingeben, dann kommt alles andere als workchr = "+"c heraus !
Und was besonders blöde ist: wenn ich '=' eingebe, dann ist workchr = "0"c ... und das bringt mein Programmlogik dann vollends durcheinander.
Diese Anweisung ist wohl nicht richtig:
Kann mir jemand (nachsichtig) erklären was ich falsch mache und wie ich das auf die Reihe kriegen kann ?
LG
Peter
P.S.: Wieso hat denn mein Programmcode so viele Leerzeilen ? Ich habe den mit Cut&Paste eingefügt und in meinem Coding sind die Leerzeilen nicht enthalten.
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Peter329“ ()