HalfWebDev
HalfWebDev

Reputation: 7638

Access variable of one subroutine into another subroutine -VB

I have two questions

  1. I want to use resultin my Button15_ click sub

  2. when i was typing in the line op = sender.Text ,I dint saw Text method of sender object in intellisense ?

Here is my code

Public Sub Button10_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button10.Click, Button11.Click, Button12.Click, Button13.Click, Button14.Click, Button14.Click, Button16.Click
    Dim op As Char
    op = sender.Text

     result = Convert.ToInt32(TextBox1.Text)

End Sub

Public Sub Button15_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button15.Click
    Select Case op
        Case "+"
            result += Convert.ToInt32(TextBox1.Text)
            TextBox1.Text = result
        Case "-"
            result -= Convert.ToInt32(TextBox1.Text)
            TextBox1.Text = result
        Case "*"
            result *= Convert.ToInt32(TextBox1.Text)
            TextBox1.Text = result
        Case "\"
            result \= Convert.ToInt32(TextBox1.Text)
            TextBox1.Text = result


    End Select




End Sub

Upvotes: 0

Views: 8921

Answers (2)

Ry-
Ry-

Reputation: 224904

Declare op as class-level:

Dim op As Char

Public Sub Button10_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button10.Click, Button11.Click, Button12.Click, Button13.Click, Button14.Click, Button14.Click, Button16.Click
    op = sender.Text

    result = Convert.ToInt32(TextBox1.Text)
End Sub

Public Sub Button15_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button15.Click
    Select Case op
        Case "+"
            result += Convert.ToInt32(TextBox1.Text)
            TextBox1.Text = result
        Case "-"
            result -= Convert.ToInt32(TextBox1.Text)
            TextBox1.Text = result
        Case "*"
            result *= Convert.ToInt32(TextBox1.Text)
            TextBox1.Text = result
        Case "\"
            result \= Convert.ToInt32(TextBox1.Text)
            TextBox1.Text = result
    End Select
End Sub

The reason you don't see Text in IntelliSense is that sender is an Object, not a TextBox, and does not have a Text property. I recommend that you turn on Option Strict, as it will reveal several potential code errors. To get it, cast sender:

op = DirectCast(sender, Button).Text(0)

There's also a lot of common logic in Button15_Click. I'd rewrite it as:

Dim rightOperand As Integer = Integer.Parse(TextBox1.Text)

Select Case op
    Case "+"c
        result += rightOperand
    Case "-"c
        result -= rightOperand
    Case "*"c
        result *= rightOperand
    Case "\"c
        result \= rightOperand
End Select

TextBox1.Text = result.ToString()

Upvotes: 1

Holger Brandt
Holger Brandt

Reputation: 4354

Private op as Char

Public Sub Button10_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button10.Click, Button11.Click, Button12.Click, Button13.Click, Button14.Click, Button14.Click, Button16.Click 
    op = DirectCast(sender, button).Text
     result = Convert.ToInt32(TextBox1.Text) 
End Sub

Upvotes: 0

Related Questions