0

イベントをうまく処理するイベントハンドラーがあります。ただし、レーザー電流が設定されている場合にのみ 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 更新のきちんとした部分が気に入っています。私のケーキを持って食べてもいいですか?

4

1 に答える 1

2

匿名イベント ハンドラーを使用できます

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

ただし、値はクラス内のどこからでも設定できることに注意してください。それを制限することはできません。

于 2012-10-23T22:27:27.303 に答える