Vb.net Question

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!

Answer

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

Comments