Handles子句需要在包含类型或其基类型之一中定义的WithEvents变量

时间:2018-06-14 22:18:48

标签: vb.net

所以我对编码非常陌生,尤其是Visual Basic,在使用开源代码进行一些操作后,我似乎只在我当前的Form1.vb文件中出现了一个反复出现的问题。 Handles子句需要在包含类型或其基类型之一中定义的WithEvents变量。这是看起来像:

Public Class Form1
Dim Firstnum As Decimal
Dim Secondnum As Decimal
Dim Operations As Integer
Dim Operator_selector As Boolean = False
Private lblHold As Object
Public Property TextBox1 As Object

WithEvents Btn1_click As Button

Private Sub Btn1_Click(sender As Object, e As EventArgs) Handles btn1.Click
    If TextBox1.Text <> "0" Then
        TextBox1.Text += "1"
    Else
        TextBox1.Text = "1"
    End If
End Sub

Private Sub Btn2_Click(sender As Object, e As EventArgs) Handles btn2.Click
    If TextBox1.Text <> "0" Then
        TextBox1.Text += "2"
    Else
        TextBox1.Text = "2"
    End If
End Sub

Private Sub Btn3_Click(sender As Object, e As EventArgs) Handles btn3.Click
    If TextBox1.Text <> "0" Then
        TextBox1.Text += "3"
    Else
        TextBox1.Text = "3"
    End If
End Sub

Private Sub Btn4_Click(sender As Object, e As EventArgs) Handles btn4.Click
    If TextBox1.Text <> "0" Then
        TextBox1.Text += "4"
    Else
        TextBox1.Text = "4"
    End If
End Sub

Private Sub Btn5_Click(sender As Object, e As EventArgs) Handles btn5.Click
    If TextBox1.Text <> "0" Then
        TextBox1.Text += "5"
    Else
        TextBox1.Text = "5"
    End If
End Sub

Private Sub Btn6_Click(sender As Object, e As EventArgs) Handles btn6.Click
    If TextBox1.Text <> "0" Then
        TextBox1.Text += "6"
    Else
        TextBox1.Text = "6"
    End If
End Sub

Private Sub Btn7_Click(sender As Object, e As EventArgs) Handles btn7.Click
    If TextBox1.Text <> "0" Then
        TextBox1.Text += "7"
    Else
        TextBox1.Text = "7"
    End If
End Sub

Private Sub Btn8_Click(sender As Object, e As EventArgs) Handles btn8.Click
    If TextBox1.Text <> "0" Then
        TextBox1.Text += "8"
    Else
        TextBox1.Text = "8"
    End If
End Sub

Private Sub Btn9_Click(sender As Object, e As EventArgs) Handles btn9.Click
    If TextBox1.Text <> "0" Then
        TextBox1.Text += "9"
    Else
        TextBox1.Text = "9"
    End If
End Sub

Private Sub Btn0_Click(sender As Object, e As EventArgs) Handles btn0.Click
    If TextBox1.Text <> "0" Then
        TextBox1.Text += "0"
    End If
End Sub

Private Sub BtnPoint_Click(sender As Object, e As EventArgs) Handles btnPoint.Click
    If Not (TextBox1.Text.Contains(".")) Then
        TextBox1.Text += "."
    End If
End Sub

Private Sub BtnClear_Click(sender As Object, e As EventArgs) Handles btnClear.Click
    TextBox1.Text = "0"
End Sub

Private Sub BtnPlus_Click(sender As Object, e As EventArgs) Handles btnPlus.Click
    Firstnum = TextBox1.Text
    TextBox1.Text = "0"
    Operator_selector = True
    Operations = 1   'For addition
    lblHold.Text = Firstnum.ToString + "+"

End Sub

Private Sub BtnMinus_Click(sender As Object, e As EventArgs) Handles btnMinus.Click
    Firstnum = TextBox1.Text
    TextBox1.Text = "0"
    Operator_selector = True
    Operations = 2   'For subtraction
    lblHold.Text = Firstnum.ToString + "-"
End Sub

Private Sub BtnMult_Click(sender As Object, e As EventArgs) Handles btnMult.Click
    Firstnum = TextBox1.Text
    TextBox1.Text = "0"
    Operator_selector = True
    Operations = 3   'For multiplication
    lblHold.Text = Firstnum.ToString + "*"
End Sub

Private Sub BtnDiv_Click(sender As Object, e As EventArgs) Handles btnDiv.Click
    Firstnum = TextBox1.Text
    TextBox1.Text = "0"
    Operator_selector = True
    Operations = 4   'For division
    lblHold.Text = Firstnum.ToString + "+"
End Sub

Private Sub BtnEqual_Click(sender As Object, e As EventArgs) Handles btnEqual.Click
    If Operator_selector = True Then
        Secondnum = TextBox1.Text
        If Operations = 1 Then
            TextBox1.Text = Firstnum + Secondnum
        ElseIf Operations = 2 Then
            TextBox1.Text = Firstnum - Secondnum
        ElseIf Operations = 3 Then
            TextBox1.Text = Firstnum * Secondnum
        Else
            If Secondnum = 0 Then
                TextBox1.Text = "Error!"
            Else
                TextBox1.Text = Firstnum / Secondnum
            End If
            Operator_selector = False
        End If
        lblHold.Text = ""
    End If
End Sub
End Class

现在我想知道我必须做些什么来使它正确并使这个错误消失。我尝试使用&#34; WithEvents Btn1_click As Button&#34;但它没有做任何事情。它还说&#34; Btn1_click已经被声明为&#39; Private WithEvents Btn1_click As Button&#39;在这堂课上。&#34;我真的是一个菜鸟,所以请不要向我投掷硬核编码术语,只是简单的东西:P

非常感谢提前!

1 个答案:

答案 0 :(得分:1)

您在这些方法上看到的Handles子句指示在引发当前分配给指定变量的对象的指定事件时将执行该方法。例如:

Private Sub Btn2_Click(sender As Object, e As EventArgs) Handles btn2.Click

表示当分配给Btn2_Click变量的对象引发其btn2事件时,将执行Click方法。错误消息标记此行:

Private Sub Btn1_Click(sender As Object, e As EventArgs) Handles btn1.Click

并且它告诉您没有btn1变量声明为WithEvents

在设计器中向表单添加控件时,它会自动添加具有指定名称的变量并声明它WithEvents。如果打开设计器代码文件,则可以看到该变量,如果单击“首先显示所有文件”按钮,则可以通过解决方案资源管理器访问该文件。您可以声明自己的变量WithEvents但是:

WithEvents Btn1_click As Button

没有使用正确的名称作为开头,它也没用,因为它没有任何分配给它的东西。您需要创建一个Button对象,将其分配给变量并将其添加到表单中,这是您尚未完成的。

解决方案是简单地将Button添加到具有该名称的表单中。