VB.net限制对范围内的事件处理程序的访问,或者替代

时间:2012-10-23 21:57:52

标签: .net vb.net events user-interface

我有一个事件处理程序,可以很好地处理它的事件。但是,我不希望能够直接调用处理程序,或者更具体地说,让我的程序员能够直接调用它,因为我只想在激光器电流设置时更新nudCurrent.Value。

Public Class TestClass

    Dim WithEvents myCurrentSource As New CurrentSourceClass

    Private Sub TestScript()
        'among other things, sets current to 85
        myCurrentSource.SetCurrent(85)
    End Sub

    Private Sub handleLaserCurrentSet() Handles myCurrentSource.LaserCurrentSet
        Me.nudCurrent.Value = myCurrentSource.GetCurrent()
    End Sub

End Class

Public Class CurrentSourceClass

    Public Event LaserCurrentSet()

    Private currentSet As Double = Double.NaN

    Public Sub SetCurrent(ByVal dCurrentAmps As Double)
        ' set the current on the current source here
        Me.currentSet = dCurrentAmps
        ' then raise the event
        RaiseEvent LaserCurrentSet()
    End Sub

    Public Function GetCurrent() As Double
        Return Me.currentSet
    End Function

End Class

我想不出在其范围内限制对事件处理程序例程的访问的方法,所以我正在寻找另一种方法来做到这一点。什么是最佳做法?

*我知道我可以在设置当前后放置me.nudCurrent.Value = 85,但我喜欢事件驱动的UI更新的整洁。我可以吃蛋糕吗?

1 个答案:

答案 0 :(得分:2)

您可以使用匿名事件处理程序

AddHandler myCurrentSource.LaserCurrentSet,
                Sub()
                    Me.nudCurrent.Value = myCurrentSource.GetCurrent()
                End Sub

但请记住,可以从类中的任何位置设置值。你不能限制它。