Search code examples
vb.netvisual-studio-codevb.net-2010

Making keydown code only run once, at the START of the press


I am writing a piece of code that when a button is pressed, it creates a picture box, but when you hold down the same key, that picture box needs to grow. At first my code repeated the creation of the box, but now I have tried the code below and instead it creates it once, but at the end of the code. Does anyone know how some code to execute part of a key down code on the first instance that it is held down, and only once?

Private Class Form1
      Dim KeyHolding As Boolean = False


Private Sub Btn_1_KeyDown(sender As Object, e As KeyEventArgs) Handles Btn_1.KeyDown
        If Not KeyHolding Then          'the events which are activated once only when the key is pressed
            KeyHolding = True

            Dim PB As New PictureBox With {.Width = Btn_1.Width - 2, .Height = 10, .Top = Btn_1.Top + 20, .Left = Btn_1.Left + 1, .BackColor = Color.Cyan}
            PB.Name = "PB_1"
            TestPanel.Controls.Add(PB)
        Else                            'the events which are constantly done when the key is held

        End If
    End Sub

Private Sub Btn_1_KeyUp(sender As Object, e As KeyEventArgs) Handles Btn_1.KeyUp
        Btn_1.BackColor = SystemColors.Control
        KeyHolding = False
    End Sub

Solution

  • Try this

    Dim KeyHolding As Boolean = False
    Dim PB As PictureBox
    
    Private Sub Btn_1_KeyDown(sender As Object, e As KeyEventArgs) Handles Btn_1.KeyDown
        If Not KeyHolding Then          'the events which are activated once only when the key is pressed
            KeyHolding = True
            PB = New PictureBox With {.Width = Btn_1.Width - 2, .Height = 10, .Top = Btn_1.Top + 20, .Left = Btn_1.Left + 1, .BackColor = Color.Cyan}
            PB.Name = "PB_1"
            TestPanel.Controls.Add(PB)
        Else                            'the events which are constantly done when the key is held
            PB.Width += 10
            PB.Height += 10
        End If
    End Sub
    
    Private Sub Btn_1_KeyUp(sender As Object, e As KeyEventArgs) Handles Btn_1.KeyUp
        Btn_1.BackColor = SystemColors.Control
    End Sub