Search code examples
vb.netcounterkeypressvisual-studio-2015

Counter using KeyPress events


First time posting here, although I'm a frequent visitor when I'm looking for answers. I am new to VB and programming. My problem is this. I had this figured out in VBA, but I want to convert my "program" to a standalone executable with VB (using Visual Studio 2015) I want to keep track of certain keypresses done on a textbox, and so far I figured out something that works, but it seems messy. Can anyone think of a better way of doing

    Public Class Form1

    Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs) Handles TextBox1.KeyPress
        Select Case UCase(e.KeyChar) 'For capturing keypresses and adding them
            Case "W" : Label3.Text = Val(Label3.Text) + 1
            Case "R" : Label4.Text = Val(Label4.Text) + 1
        End Select
    End Sub

    Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
        TextBox1.Text = "" 'Clears the text box after each keypress
    End Sub

    Public Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim WcountA As Integer
        Dim RcountA As Integer
        Dim WcountB As Integer
        Dim RcountB As Integer
        Dim Wavg As Single
        Dim Ravg As Single
        Select Case Button1.Text
            Case "Finish A" 'Finishes first count and stores results in labels
                WcountA = Convert.ToInt32(Label3.Text)
                RcountA = Convert.ToInt32(Label4.Text)
                Button1.Text = "Finish B"
                Label5.Text = WcountA
                Label7.Text = RcountA
                TextBox1.Focus()
                Label3.Text = ""
                Label4.Text = ""
            Case "Finish B" 'Finishes second count and stores in labels
                WcountB = Convert.ToInt32(Label3.Text)
                RcountB = Convert.ToInt32(Label4.Text)
                With Button1
                    .Text = "Finished"
                    .Enabled = False
                End With
                Label6.Text = WcountB
                Label8.Text = RcountB
                Label3.Text = ""
                Label4.Text = ""
                WcountA = Label5.Text
                RcountA = Label7.Text
                WcountB = Label6.Text
                RcountB = Label8.Text
                Wavg = (WcountA + WcountB) / 2
                Ravg = (RcountA + RcountB) / 2

                MsgBox("W average = " & Wavg & vbNewLine & "R average = " & Ravg)
        End Select

    End Sub
End Class

On the form I have the textbox that logs the keypress event, labels that increase by 1 with each specific keypess ("W" and "R"), a button that changes its function with each click(finish first count, finish second count) and some labels I had to use to store the first and second count for the final calculation. Any suggestion will be appreciated. Thanks in advance!


Solution

  • First of al, you need to take out the counters of the key pres handler like so;

    Because they are gone every time the Button1_Click sub ends.

     Public Class Form1
    
        Dim WcountA As Integer
        Dim RcountA As Integer
        Dim WcountB As Integer
        Dim RcountB As Integer
        Dim Wavg As Single
        Dim Ravg As Single
    
    Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs) Handles TextBox1.KeyPress
        Select Case UCase(e.KeyChar) 'For capturing keypresses and adding them
            Case "W" : Label3.Text = Val(Label3.Text) + 1
            Case "R" : Label4.Text = Val(Label4.Text) + 1
        End Select
    End Sub
    
    Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
        TextBox1.Text = "" 'Clears the text box after each keypress
    End Sub
    
    Public Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
        Select Case Button1.Text
            Case "Finish A" 'Finishes first count and stores results in labels
                WcountA = Convert.ToInt32(Label3.Text)
                RcountA = Convert.ToInt32(Label4.Text)
                Button1.Text = "Finish B"
                Label5.Text = WcountA
                Label7.Text = RcountA
                TextBox1.Focus()
                Label3.Text = ""
                Label4.Text = ""
            Case "Finish B" 'Finishes second count and stores in labels
                WcountB = Convert.ToInt32(Label3.Text)
                RcountB = Convert.ToInt32(Label4.Text)
                With Button1
                    .Text = "Finished"
                    .Enabled = False
                End With
                Label6.Text = WcountB
                Label8.Text = RcountB
                Label3.Text = ""
                Label4.Text = ""
                WcountA = Label5.Text
                RcountA = Label7.Text
                WcountB = Label6.Text
                RcountB = Label8.Text
                Wavg = (WcountA + WcountB) / 2
                Ravg = (RcountA + RcountB) / 2
    
                MsgBox("W average = " & Wavg & vbNewLine & "R average = " & Ravg)
        End Select
    
    End Sub
    

    End Class