研究问题:
- Timer循环体中怎样避免反复调用的死循环?
要点:
- 定义其他部件,通过控制其他部件的变化间接的控制所要控制的部件
如:在Form1里面加个Text1控件,Visble设为False不可见。把Text1当成全局变量使用,其他窗口(比如Form2里面的Label1)要调用的时候,在Form2里面输入代码Label2.Caption = Form1.Text1.text就可以调用。 - 使用中间变量,在其他部件模块中添加并让计时器Enable=true工作,而在timer中让计时器不工作,即计时器避免了timer中的死循环,仅仅调用了其他部件的控件。
- 不要在Form_Load事件中定义整型变量h,因为这是局部变量,仅在Load事件中有效,你可以在在代码区域的最顶端定义变量h,它属于全局变量,在整个窗体运行中有效,也可以在Timer控件的Timer事件中定义静态变量h,格式:static h as integer,具体代码如下:
Private Sub Timer1_Timer()
Static h As Integer
h = h + 1
Text1.Text = h
End Sub
截图展示区:
- 1.
Private Sub Form_Load()
Timer1.Interval = 1000
Label2.Caption = 1
End Sub
Private Sub Label1_Change()
Label2.Caption = Label2.Caption + 1
End Sub
Private Sub Timer1_Timer()
If Label1.Caption <> Str(Timer) Then
Label1.Caption = Time
End If
End Sub
%(注释:当label1.caption发生变化时,label2.caption+1)
- 2.
Private Sub Command1_Click()
Num = Val(Text1.Text * 60)
Text1.Text = Num
Timer1.Enabled = True(此时计时器就开始计时,此时避免了循环,因为Timer计时器循环的仅仅是Timer1_Timer()中的结构)
End Sub
Private Sub Form_Load()
Timer1.Enabled = False
Text1.Text = "2"
End Sub
Private Sub Timer1_Timer()
Text1.Text = Text1.Text - 1(设置Enable=false,若设置为true则Text1.Text显示为2,1,0,时间到,-1,-2….即马上从Command1_Click()中的Text1.Text = "2"传入值就开始循环)
If Text1.Text = 0 Then
A = MsgBox("时间到", 0, "工程1")
End If
End Sub