原帖具体内容忘记了,大概是要在label1上循环显示20到50再到20,反复循环。20,21...49,50,49...21,20,21...49,50,49.....
这个要用if就很容易实现,不用if就得琢磨琢磨,呵呵
昨天忽然想起这个问题,琢磨了两句Private Sub Form_Load()
Timer1.Interval = 300
Timer1.Enabled = True
End SubPrivate Sub Timer1_Timer()
Static i As Long, m As Long
m = (m + 31 + i) Mod 31
i = (0 - ((((m + 31 + i) Mod 31) - m) And &H100) \ 255) Or 1
Label1.Caption = m + 20
End Sub
这个要用if就很容易实现,不用if就得琢磨琢磨,呵呵
昨天忽然想起这个问题,琢磨了两句Private Sub Form_Load()
Timer1.Interval = 300
Timer1.Enabled = True
End SubPrivate Sub Timer1_Timer()
Static i As Long, m As Long
m = (m + 31 + i) Mod 31
i = (0 - ((((m + 31 + i) Mod 31) - m) And &H100) \ 255) Or 1
Label1.Caption = m + 20
End Sub
直接定义一个数组,把20到50再到21的数都放进去.
然后么,TIMER循环个一百遍啊一百遍.
Static i As Long, j As Long
i = (i + 1) Mod 61
i = i + ((i = 0) And 1)
j = (((i >= 31) Or 1) * i + 61) Mod 31
Label1.Caption = 20 + j
Debug.Print i, j, 20 + j
End Sub
i = (0 - ((((m + 31 + i) Mod 31) - m) And &H100) \ 255) Or 1
在数值计算中使用布尔型的值,这件事学C的时候用过一次,从没在VB里面用过,呵呵
我那解决方法太有局限性了。严重依赖了对bool值的解释(true=-1,false=0)
如果是遇到像c#这样不能用-1来表示true,0表示false的语言,就无能为力了。还是LZ的方法好,通用。
Option Explicit
Dim ARR(60) As Integer
Dim t As Integer
Private Sub Form_Load()
Dim i, j As Integer
For i = 0 To 30
ARR(i) = 20 + i
Next
For j = 0 To 28
ARR(i + j) = 49 - j
Next
t = 0
Timer1.Interval = 300
Timer1.Enabled = True
End SubPrivate Sub Timer1_Timer()
Select Case t
Case 59
t = 0
Case Else
Label1.Caption = ARR(t)
t = t + 1
End Select
End Sub
for i = 20 to 50
Label1.Caption = i
sleep 500
next i
sleep 500
完了用GOTO跳转第一行
Select Case t
Case 59
应该为
Select Case t
Case 60
悲剧...
for i = 20 to 50
Label1.Caption = i
sleep 500
next i
sleep 500
goto ddd
Private Sub Form_Activate()
Dim i%, t!
While 1
For i = 20 To 50
Label1.Caption = i
GoSub xx1
Next
For i = 49 To 21 Step -1
Label1.Caption = i
GoSub xx1
Next
Wend
xx1:
t = Timer
While Timer - t < 0.3
DoEvents
Wend
ReturnEnd Sub