- Код: Выделить всё
Private fNoChange as Byte
Private Sub TextBox1_Change()
If fNoChange = 1 Then fNoChange = 0: Exit Sub
fNoChange = 1 :TextBox1.Text=NewStr
'здесь ещё есть код
End Sub

Private fNoChange as Byte
Private Sub TextBox1_Change()
If fNoChange = 1 Then fNoChange = 0: Exit Sub
fNoChange = 1 :TextBox1.Text=NewStr
'здесь ещё есть код
End Sub
Private Sub TextBox1_Change()
Static fNoChange As Boolean
If fNoChange = True Then fNoChange = False: Exit Sub
fNoChange = True: TextBox1.Text = NewStr
'здесь ещё есть код
End Sub

Private fNoChange as Byte
Private Sub TextBox1_Change()
If fNoChange = 1 Then Exit Sub
fNoChange = 1 :TextBox1.Text=NewStr
'здесь ещё есть код
fNoChange = 0
End Sub

Private fBusyChange As Boolean
...
Private Sub Text1_Change()
If fBusyChange Then Exit Sub
fBusyChange = True
Text1.Text = NewStr
fBusyChange = False
End Sub


Sun07 писал(а):!Viper! , а ты можешь объяснить мне, почему в моём первичном примере fNoChange не обнуляется?

Sun07 писал(а):Andrey Fedorov, ничего подобного, отладчик не покажет рекурсивный вызов!


Sun07 писал(а):Может, вы имеете ввиду отладчик не VB![]()




alibek писал(а):Во-первых, статик медленнее.
alibek писал(а):Во-вторых, его нельзя инициализировать/установить снаружи. А флаги обычно устанавливаются из других процедур.


Option Explicit
Private v2 As Long
Sub s1()
Static v1 As Long
Dim i As Double
For i = 1 To 1000000000#
v1 = v1 + 1
Next
End Sub
Sub s2()
Dim i As Double
For i = 1 To 1000000000#
v2 = v2 + 1
Next
End Sub
Sub Main()
Dim Start As Double
Start = Timer
s1
MsgBox Timer - Start
Start = Timer
s2
MsgBox Timer - Start
End Sub


Сейчас этот форум просматривают: SemrushBot и гости: 18