如何在运行时控制变量值?我想控制变量值,如果它大于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
答案 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