——————————————————————————————————
以下程序,当 A.Value * 100 + a.Value > B.Value * 100 + b.Value 时;
程序将陷入死循环:a改不成b,b也改不成a
If A.Value * 100 + a.Value > B.Value * 100 + b.Value Then
B.Value = A.Value
b.Value = a.Value
End If
If A.Value * 100 + a.Value > B.Value * 100 + b.Value Then
A.Value = B.Value
a.Value = b.Value
End If
——————————————————————————————————
怎么解决这个问题呢:
1.声明一个布尔类型的变量(布尔类型的默认值=false)
public BegChange as Boolean
2.AaBb
触发A事件,第一步:先判断BegChange = False;
将BegChange 改为 True
进行赋值(此时,会触发B事件:
B事件第一步判断 BegChange = False,但此时BegChange 是true,并不是False,
那么直接退出B事件,不会造成A与B的死循环)
赋值完毕,将 BegChange = False
'A事件
If BegChange = False Then
BegChange = True
If A.Value * 100 + a.Value > B.Value * 100 + b.Value Then
B.Value = A.Value
b.Value = a.Value
End If
BegChange = False
End If
'B事件
If BegChange = False Then
BegChange = True
If A.Value * 100 + a.Value > B.Value * 100 + b.Value Then
A.Value = B.Value
a.Value = b.Value
End If
BegChange = False
End If
从这个例子中,可以提炼出:两者互相影响,但陷入死循环中时,可以增加一个变量参与到影响中,去阻断死循环。