Hallo Zusammen,
Ich habe zu Testzwecken ein kleines Programm geschrieben, bei dem ein gezeichnetes Rechteck durch die Pfeiltasten bewegt werden soll. Die Tastensteuerung soll dabei aber so funktionieren, dass beim gedrückt halten der Taste keine Verzögerung abgewartet werden muss, sondern dass sich das Rechteck sofort in die entsprechende Richtung bewegt. Das klappt soweit ganz gut.
Weiterhin soll beim Drücken der Leertaste das Rechteck die Farbe verändern, was auch funktioniert.
Beim gleichzeitigen Drücken von mehreren Tasten gibt es aber ein Problem: Je nachdem, welche Tasten gleichzeitig gedrückt werden, reagiert das Programm unterschiedlich, was für mich völlig unverständlich ist.
Man kann das Rechteck in (fast) alle Richtungen bewegen und gleichzeitig die Farbe ändern, bis auf die Richtung: links-oben. Hier scheint es so, als ob nur 2 Tasten verarbeitet werden (also z. B.: links + oben, Leer wird dann nicht mehr verarbeitet; oder links + leer, oben wird dann nicht mehr verarbeitet).
Ich wäre sehr dankbar, wenn mir jemand erklären könnte bzw. den Weg aufzeigen könnte, warum sich das Programm so verhält.
Hier der Code:
Ich habe zu Testzwecken ein kleines Programm geschrieben, bei dem ein gezeichnetes Rechteck durch die Pfeiltasten bewegt werden soll. Die Tastensteuerung soll dabei aber so funktionieren, dass beim gedrückt halten der Taste keine Verzögerung abgewartet werden muss, sondern dass sich das Rechteck sofort in die entsprechende Richtung bewegt. Das klappt soweit ganz gut.
Weiterhin soll beim Drücken der Leertaste das Rechteck die Farbe verändern, was auch funktioniert.
Beim gleichzeitigen Drücken von mehreren Tasten gibt es aber ein Problem: Je nachdem, welche Tasten gleichzeitig gedrückt werden, reagiert das Programm unterschiedlich, was für mich völlig unverständlich ist.
Man kann das Rechteck in (fast) alle Richtungen bewegen und gleichzeitig die Farbe ändern, bis auf die Richtung: links-oben. Hier scheint es so, als ob nur 2 Tasten verarbeitet werden (also z. B.: links + oben, Leer wird dann nicht mehr verarbeitet; oder links + leer, oben wird dann nicht mehr verarbeitet).
Ich wäre sehr dankbar, wenn mir jemand erklären könnte bzw. den Weg aufzeigen könnte, warum sich das Programm so verhält.
Hier der Code:
VB.NET-Quellcode
- Public Class Form1
- Dim G As Graphics
- Dim R As Rectangle
- Dim Rx As Integer = 50
- Dim Ry As Integer = 50
- Dim Links As Boolean = False
- Dim Rechts As Boolean = False
- Dim Rauf As Boolean = False
- Dim Runter As Boolean = False
- Dim Geschwindigkeit As Integer = 1
- Dim Farbe As Color = Color.Black
- Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
- G = Me.CreateGraphics
- Timer1.Enabled = True
- Timer1.Interval = 20
- Timer1.Start()
- End Sub
- Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint
- G.FillRectangle(New SolidBrush(Farbe), New Rectangle(Rx, Ry, 20, 20))
- End Sub
- Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
- If e.KeyCode = Keys.Escape Then
- Application.Exit()
- End If
- If e.KeyCode = Keys.Right Then
- Rechts = True
- End If
- If e.KeyCode = Keys.Left Then
- Links = True
- End If
- If e.KeyCode = Keys.Up Then
- Rauf = True
- End If
- If e.KeyCode = Keys.Down Then
- Runter = True
- End If
- If e.KeyCode = Keys.Space Then
- Farbe = Color.Red
- End If
- End Sub
- Private Sub Form1_KeyUp(sender As Object, e As KeyEventArgs) Handles Me.KeyUp
- If e.KeyCode = Keys.Left Then
- Links = False
- End If
- If e.KeyCode = Keys.Right Then
- Rechts = False
- End If
- If e.KeyCode = Keys.Up Then
- Rauf = False
- End If
- If e.KeyCode = Keys.Down Then
- Runter = False
- End If
- If e.KeyCode = Keys.Space Then
- Farbe = Color.Black
- End If
- End Sub
- Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
- If Links = True Then
- Rx = Rx - Geschwindigkeit
- End If
- If Rechts = True Then
- Rx = Rx + Geschwindigkeit
- End If
- If Rauf = True Then
- Ry = Ry - Geschwindigkeit
- End If
- If Runter = True Then
- Ry = Ry + Geschwindigkeit
- End If
- Invalidate()
- End Sub
- End Class