如何在运行时控制变量值

时间:2016-12-06 09:04:57

标签: vb.net variables controls

如何在运行时控制变量值?我想控制变量值,如果它大于10项目停止运行。 我的变量在我的项目中重复,我自己也不检查它。我希望项目本身控制它。 我该怎么做? 像这样 这个子或...控制我的变量。

sub or  ... control_ypos()
      if ypos>10 then
           exit environment
      end if
end sub
sub main()
  for i=0 to myarray1.length-1
      ypos +=i
  next
  for i=0 to myarray2.length-1
      ypos +=i
  next
....
end sub

2 个答案:

答案 0 :(得分:2)

OK我能想到的唯一方法是创建一个类,如果数字超出创建实例时定义的范围,则会引发事件。

好的,这是班级看看评论,看它是如何运作的。

Friend Class MonitoredNumber(Of t As IComparable)
    ' Using of T means that the variable can be any type - Integer, Single, Double etc
    Private MonitoredValue As t
    Private _minValue As t
    Private _maxValue As t

    'this creates a an event handler
    Public Event OutOfRange()

    'this is the constructor that you will use when you create the "Variable" even though it is actually an instance of the MonitoredNumber class
    'and it defines the minimum and maximum values
    Public Sub New(min As t, max As t)
        _minValue = min
        _maxValue = max
    End Sub

    Public Property Value As t
        Get
            Return MonitoredValue
        End Get
        Set(value As t)
            MonitoredValue = value
            'if the "variable is set to a value outside the defined range, then the OutOfRangeEvent is raised
            If MonitoredValue.CompareTo(_minValue) < 0 Or MonitoredValue.CompareTo(_maxValue) > 0 Then
                RaiseEvent OutOfRange()
            End If
        End Set
    End Property

End Class

要创建“变量”,请将此添加到您定义要监视的变量的代码中 - 将其命名为当然的

Dim WithEvents x As New MonitoredNumber(Of Integer)(4, 5)

在上面一行中,关键字WithEvents确保OutOfRange事件由下面的事件处理程序处理。

Of Integer应更改为您要跟踪的数字类型。如果是Double,则将其更改为Of Double等。

这两个参数是数字的最小和最大可接受值 - 将这些更改为您需要的任何值。

在您的表单中,您最终需要为OutOfRange事件添加以下事件处理程序。

Private Sub MonitoredNumberChanged() Handles x.OutOfRange
    'do stuff here to do what you want to do if the event is out of range
    MessageBox.Show("Value out of range. Value =" & x.Value.ToString)
End Sub

因此,要使用您的代码,请将ypos定义为

Dim WithEvents ypos As New MonitoredNumber(Of Integer)(0, 10)

我假设0为最小值,但您可以将其更改为您喜欢的任何值。

然后,在事件处理程序中,您可以编写当数字超出范围时要执行的代码。

要更改数字的值,请使用 ypos.value = ypos.value + 1'添加一个,依此类推

希望这能指出你正确的方向。如果您要声明MonitoredNumberClass的多个实例,那么您应该为该实例创建另一个事件处理程序。

如果其他任何用户有更好的方法,请随时写下您自己的答案。

答案 1 :(得分:1)

如果我错了,请纠正我;我现在没有Visual Studio,所以我从内存写入。可能存在一些语法错误,但原则本身应该是正确的。

如果你不打算在运行时创建这样的控制变量,你可以在一些虚拟模块中创建一个属性:

Module Dummy
    Dim _ypos As Integer = 0
    Public Property control_ypos As Integer
        Get
            Return _ypos
        End Get
        Set
            If _ypos>10 Then 'Do the checking stuff
                End
            Else
                _ypos = value
            End If
        End Set
    End Property
End Module

Sub Main()
    For I=0 To myarray1.Length-1
        Dummy.control_ypos += I
    Next
    For I=0 to myarray2.Length-1
        Dummy.control_ypos += I
    Next
    ...
End Sub