如何为我自己的自定义控件创建一个新事件?

时间:2017-01-30 06:42:27

标签: vb.net events

我有一个继承自Panel的类,下面是这个类中的一些成员

Public ItemName As String
Public Quantity As Integer
Public Price As Decimal
Public DiscountAmount As Decimal

如果在更改数量或折扣安装后再创建一个事件,那么如何创建事件?

我尝试以这种方式写作,但我收到错误: -

Private Sub info_Changed(sender As Object, e As EventArgs) Handles Quantity.Changed, DiscountAmount.Changed
    myFunction()
End Sub
  

错误:   Handles子句需要在中定义一个WithEvents变量   包含类型或其基本类型之一。

1 个答案:

答案 0 :(得分:1)

您需要在用户控件中声明事件,然后使用它们。见下面的代码。我创建了一个用户控件UserControl1。当PriceDiscountAmount发生更改时,此控件会引发事件。然后在Form1中使用usercontrol。您可以使用相同的方法更改Quantity

Public Class Form1

    Private WithEvents userCntrl As New UserControl1

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        ChangeValues()

    End Sub

    Private Sub ChangeValues()
        userCntrl.Price = 100
        userCntrl.DiscountAmount = 12
    End Sub

    Private Sub userCntrl_Price_Changed(newValue As Decimal) Handles userCntrl.Price_Changed, userCntrl.DiscountAmount_Changed
        MessageBox.Show("New value = " & newValue.ToString)
    End Sub

End Class


Public Class UserControl1
    Public Event Price_Changed(ByVal newValue As Decimal)
    Public Event DiscountAmount_Changed(ByVal newValue As Decimal)

    Public ItemName As String
    Public Quantity As Integer

    Private Price_ As Decimal
    Public Property Price() As Decimal
        Get
            Return Price_
        End Get
        Set(ByVal value As Decimal)
            If value <> Price_ Then
                RaiseEvent Price_Changed(value)
            End If
            Price_ = value
        End Set
    End Property

    Private DiscountAmount_ As Decimal
    Public Property DiscountAmount() As Decimal
        Get
            Return DiscountAmount_
        End Get
        Set(ByVal value As Decimal)
            If value <> DiscountAmount_ Then
                RaiseEvent DiscountAmount_Changed(value)
            End If
            DiscountAmount_ = value
        End Set
    End Property

End Class