none
Positionen von Buttons mit KeyDown event ändern? RRS feed

  • Frage

  • Ich bäuchte etwas Hilfe mit einem VB Skript, und erhoffe mir, da ich ziemlich neu bin, etwas Hilfe. D:

    Also, wie der Titel schon sagt...

    Ist es möglich, mit dem KeyDown event die Y Position von einem Button zu ändern?

    Hier wäre mein Skript;

      Private Sub Button1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Player1.KeyDown
        If (e.KeyCode = Keys.Down) Then
          down = True
          up = False
          Do
            sender.Location.Y -= 2
          Loop Until down = False Or sender.Location.Y = 313
        ElseIf (e.KeyCode = Keys.Up) Then
          down = False
          up = True
          Do
            sender.Location.Y += 2
          Loop Until down = False Or sender.Location.Y = 0
        End If
      End Sub
    Falls gröbere Fehler auftreten sollten, ich hab Heute damit angefangen :(
    • Verschoben Thorsten DörflerModerator Mittwoch, 30. Juni 2010 17:11 off-topic => VB.NET (aus:Visual Basic 6.0 - Interoperabilität und Upgrade)
    Mittwoch, 30. Juni 2010 17:04

Antworten

  • Hallo,

    Ist es möglich, mit dem KeyDown event die Y Position von einem Button zu ändern?

    Speziell beim Button ist dies problematisch, da hier die Pfeiltasten eine andere Aufgabe haben, wenn mehrere Buttons auf einem Formular sind. Dann wechselt nämlich der Fokus zwischen diesen Schaltflächen. Aufgrund dieser speziellen Aufgabe, bekommst Du bei einem Button dann auch kein KeyDown Ereignis, sobald die Pfeiltasten verwendet werden. Statt dessen kannst Du hier das PreviewKeyDown Ereignis verwenden. Dieses wird ausgelöst, bevor das KeyDown Ereignis vom Button selber ausgewertet wird und hier kannst Du das Verhalten auch ändern:

     Private Sub Button1_PreviewKeyDown(ByVal sender As Object, _
              ByVal e As System.Windows.Forms.PreviewKeyDownEventArgs _
               ) Handles Button1.PreviewKeyDown
    
     Dim lButton As Button = DirectCast(sender, Button)
    
     Select Case e.KeyCode
      Case Keys.Left
      e.IsInputKey = True
      lButton.Left -= 2
    
      Case Keys.Right
      e.IsInputKey = True
      lButton.Left += 2
    
      Case Keys.Up
      e.IsInputKey = True
      lButton.Top -= 2
    
      Case Keys.Down
      e.IsInputKey = True
      lButton.Top += 2
     End Select
    
     End Sub

    Durch e.IsInputKey = True, wird das Standardverhalten unterdrückt. Ich möchte das jedoch nicht empfehlen. Der Anwender verlässt sich ggf. auf das Standardverhalten. Eine Option wäre, den Button erst dann zu verschieben, wenn bspw. die Steuerungs-Taste (Strg) gedrückt wird. In dem Fall bekommst Du die Pfeiltasten auch wieder im KeyDown Ereignis:

     Private Sub Button1_KeyDown(ByVal sender As Object, _
            ByVal e As System.Windows.Forms.KeyEventArgs _
             ) Handles Button1.KeyDown
    									
     If e.Control Then
      Dim lButton As Button = DirectCast(sender, Button)
    
      Select Case e.KeyCode
      Case Keys.Left
       lButton.Left -= 2
    
      Case Keys.Right
       lButton.Left += 2
    
      Case Keys.Up
       lButton.Top -= 2
    
      Case Keys.Down
       lButton.Top += 2
      End Select
     End If
     End Sub
    

    Eine eigene Schleife innerhalb des Ereignisses ist nicht notwendig. Die (Preview)KeyDown Ereignisse werden solange wiederholt, bis der Anwender die Taste wieder losgelassen hat.


    Thorsten Dörfler
    Microsoft MVP Visual Basic
    vb-faq.de
    Mittwoch, 30. Juni 2010 17:32
    Moderator