Prevent Repetitive KeyDown Code From Running (vb.net)











up vote
0
down vote

favorite












If you hold down the key in a KeyDown Sub, it repeats the code until it is released.
Is there any way to prevent the code from continuously running and keep it so that it only runs once? Thanks.










share|improve this question


















  • 1




    On KeyDown, you could store, say, the KeyCode in a HashSet, and remove it on KeyUp. Before doing anything in the KeyDown handler, check if it is already in the HashSet and if it is then do nothing.
    – Andrew Morton
    Nov 10 at 21:28

















up vote
0
down vote

favorite












If you hold down the key in a KeyDown Sub, it repeats the code until it is released.
Is there any way to prevent the code from continuously running and keep it so that it only runs once? Thanks.










share|improve this question


















  • 1




    On KeyDown, you could store, say, the KeyCode in a HashSet, and remove it on KeyUp. Before doing anything in the KeyDown handler, check if it is already in the HashSet and if it is then do nothing.
    – Andrew Morton
    Nov 10 at 21:28















up vote
0
down vote

favorite









up vote
0
down vote

favorite











If you hold down the key in a KeyDown Sub, it repeats the code until it is released.
Is there any way to prevent the code from continuously running and keep it so that it only runs once? Thanks.










share|improve this question













If you hold down the key in a KeyDown Sub, it repeats the code until it is released.
Is there any way to prevent the code from continuously running and keep it so that it only runs once? Thanks.







vb.net






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 10 at 20:40









Dylan

81




81








  • 1




    On KeyDown, you could store, say, the KeyCode in a HashSet, and remove it on KeyUp. Before doing anything in the KeyDown handler, check if it is already in the HashSet and if it is then do nothing.
    – Andrew Morton
    Nov 10 at 21:28
















  • 1




    On KeyDown, you could store, say, the KeyCode in a HashSet, and remove it on KeyUp. Before doing anything in the KeyDown handler, check if it is already in the HashSet and if it is then do nothing.
    – Andrew Morton
    Nov 10 at 21:28










1




1




On KeyDown, you could store, say, the KeyCode in a HashSet, and remove it on KeyUp. Before doing anything in the KeyDown handler, check if it is already in the HashSet and if it is then do nothing.
– Andrew Morton
Nov 10 at 21:28






On KeyDown, you could store, say, the KeyCode in a HashSet, and remove it on KeyUp. Before doing anything in the KeyDown handler, check if it is already in the HashSet and if it is then do nothing.
– Andrew Morton
Nov 10 at 21:28














1 Answer
1






active

oldest

votes

















up vote
1
down vote



accepted










You need to handle more than one key events to do that. For example



Public Class Form1

Private keyHolding As Boolean = False

Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
If Not keyHolding Then
Label1.Text &= "Keydown event detected "
keyHolding = True

'Place the code that you want to run only once in the key down event here...
Else
Label1.Text &= "User is holding the key down "

'Place the code that you want to run continuously in the key down event here...
End If
End Sub

Private Sub Form1_KeyUp(sender As Object, e As KeyEventArgs) Handles Me.KeyUp
Label1.Text &= "KeyUp event detected "
keyHolding = False
End Sub

End Class


Just keep in mind that this approach is good for standard windows forms applications. If you are developing a game, for example, then this approach will cause various problems and there are better solutions either via native API calls or some game developing framework.



Hope this helps.






share|improve this answer





















    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














     

    draft saved


    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53243210%2fprevent-repetitive-keydown-code-from-running-vb-net%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes








    up vote
    1
    down vote



    accepted










    You need to handle more than one key events to do that. For example



    Public Class Form1

    Private keyHolding As Boolean = False

    Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
    If Not keyHolding Then
    Label1.Text &= "Keydown event detected "
    keyHolding = True

    'Place the code that you want to run only once in the key down event here...
    Else
    Label1.Text &= "User is holding the key down "

    'Place the code that you want to run continuously in the key down event here...
    End If
    End Sub

    Private Sub Form1_KeyUp(sender As Object, e As KeyEventArgs) Handles Me.KeyUp
    Label1.Text &= "KeyUp event detected "
    keyHolding = False
    End Sub

    End Class


    Just keep in mind that this approach is good for standard windows forms applications. If you are developing a game, for example, then this approach will cause various problems and there are better solutions either via native API calls or some game developing framework.



    Hope this helps.






    share|improve this answer

























      up vote
      1
      down vote



      accepted










      You need to handle more than one key events to do that. For example



      Public Class Form1

      Private keyHolding As Boolean = False

      Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
      If Not keyHolding Then
      Label1.Text &= "Keydown event detected "
      keyHolding = True

      'Place the code that you want to run only once in the key down event here...
      Else
      Label1.Text &= "User is holding the key down "

      'Place the code that you want to run continuously in the key down event here...
      End If
      End Sub

      Private Sub Form1_KeyUp(sender As Object, e As KeyEventArgs) Handles Me.KeyUp
      Label1.Text &= "KeyUp event detected "
      keyHolding = False
      End Sub

      End Class


      Just keep in mind that this approach is good for standard windows forms applications. If you are developing a game, for example, then this approach will cause various problems and there are better solutions either via native API calls or some game developing framework.



      Hope this helps.






      share|improve this answer























        up vote
        1
        down vote



        accepted







        up vote
        1
        down vote



        accepted






        You need to handle more than one key events to do that. For example



        Public Class Form1

        Private keyHolding As Boolean = False

        Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
        If Not keyHolding Then
        Label1.Text &= "Keydown event detected "
        keyHolding = True

        'Place the code that you want to run only once in the key down event here...
        Else
        Label1.Text &= "User is holding the key down "

        'Place the code that you want to run continuously in the key down event here...
        End If
        End Sub

        Private Sub Form1_KeyUp(sender As Object, e As KeyEventArgs) Handles Me.KeyUp
        Label1.Text &= "KeyUp event detected "
        keyHolding = False
        End Sub

        End Class


        Just keep in mind that this approach is good for standard windows forms applications. If you are developing a game, for example, then this approach will cause various problems and there are better solutions either via native API calls or some game developing framework.



        Hope this helps.






        share|improve this answer












        You need to handle more than one key events to do that. For example



        Public Class Form1

        Private keyHolding As Boolean = False

        Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
        If Not keyHolding Then
        Label1.Text &= "Keydown event detected "
        keyHolding = True

        'Place the code that you want to run only once in the key down event here...
        Else
        Label1.Text &= "User is holding the key down "

        'Place the code that you want to run continuously in the key down event here...
        End If
        End Sub

        Private Sub Form1_KeyUp(sender As Object, e As KeyEventArgs) Handles Me.KeyUp
        Label1.Text &= "KeyUp event detected "
        keyHolding = False
        End Sub

        End Class


        Just keep in mind that this approach is good for standard windows forms applications. If you are developing a game, for example, then this approach will cause various problems and there are better solutions either via native API calls or some game developing framework.



        Hope this helps.







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 10 at 22:19









        Christos

        2,27131830




        2,27131830






























             

            draft saved


            draft discarded



















































             


            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53243210%2fprevent-repetitive-keydown-code-from-running-vb-net%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Florida Star v. B. J. F.

            Danny Elfman

            Lugert, Oklahoma