我想用timer控制一下时间,当我点击一个按钮则开始计时,并且进入其他界面,在一定时间过后,无论运行到那个界面,都会自动弹出对话框,终止程序,回到最初的界面,我该如何去做呢?尤其是代码,多谢各位!

解决方案 »

  1.   

    设定timer1的interval=0
    button1_click()
     timer1.interval=1000
     starttimer=now()
    end sub...timer1.timer()
    if now()-starttimer>设定的时间值 then
    msgbox "时间到。",vbinformation
    end
    endif
    end sub
      

  2.   

    这个Timer控件有很多毛病的,有时候会不触发
      

  3.   

    是不是每个界面都要加上timer控件呢?还是只需要在点击按钮的那个界面装上timer控件呢?还有,这个控件的enable属性是不是起初要设为false呢?
      

  4.   

    1.只需要在点击按钮的那个界面装上timer控件
    2.这个控件的enable属性起初要设为false
      

  5.   

    送你一个延时函数
    Public Function delay(mins%, secs%, Optional ByRef stopflag) As Long
    '延时函数
        Dim endofdelay
        endofdelay = DateAdd("n", mins, Now)
        endofdelay = DateAdd("s", secs, endofdelay)
        delay = 0
        Do While (Now < endofdelay)
        DoEvents
            If Not IsMissing(stopflag) Then
               If stopflag Then
                   delay = 1
                   stopflag = False
                   Exit Do
               End If
            End If
        Loop
        'callbyname()
      

  6.   

    我很菜的,这个延时程序看不懂,而且能告诉我他的用处是什么吗?还有,中海,你的程序我试过了,可是没有任何反应,我可以随便的运行其他的界面,根本没有时间限制!我不知道问题出在了什么地方?如果我想把时间控制在30分钟,那么在你那个程序里startimer-now()大于的那个数应该写多少呢?多谢了!
      

  7.   

    1.只需要在点击按钮的那个界面装上timer控件
    2.这个控件的enable属性起初要设为true并且interval=你想要的值(1-65535ms)
    并且interval=你想要的值(1-65535ms)
    注意: 当interval = 0,表示停止,不发送timer事件,相当于关闭定时器;Enabled=true时,打开计时器,false时关闭计时器,不论interval值为多少Enabled属性和Interval属性一起控制定时器.Private Sub Command1_Click()
    Timer1.Enabled = True
    Timer1.Interval = 20
    End SubPrivate Sub Timer1_Timer()
    Timer1.Enabled = False
    Timer1.Interval = 0
    Load Form2
    Form2.Show
    End Sub
      

  8.   

    看看这个:
    Private Sub Command1_Click()
        Timer1.Enabled = True
        Timer1.Interval = 1000
        starttime = Now()
    End SubPrivate Sub Timer1_Timer()
        If Now() - starttime > 1000 Then
        MsgBox "时间到!", vbInformation
        Timer1.Enabled = False
        Timer1.Interval = 0
        End If
    End Sub
      

  9.   

    楼上的很好啊,不过好像timer控件运行时间长了消耗系统资源啊
      

  10.   

    五朝臣子,你的程序我试了,基本上可以!不过有个小问题还要请教:我把interval设为1000,然后我想要把时间控制在20分钟以内,可是now()-startimer大于的那个值我定在10000以内的话,也就2秒钟的时间就会弹出停止的对话框,如果定再10000以上,就没完了,好像就失去了控制!不知这是怎么回事?我该如何解决呢?小妹在此谢过了~!
      

  11.   

    设一个变量,每次加1,当加到X时, 触发停止,OK ~~~
      

  12.   

    use SetTimer() in some Module
      

  13.   

    点击按钮时timer1.enable=true
    时间到时就要timer1.enable=false
      

  14.   

    只要在一个主要窗体上装上时钟控件。其他模块实现调用。因为timer控件最多只能设置大约64.8秒时间间隔。所以应该设置一个计数变量来实现20分钟间隔。计数变量声明为整体变量。比如,timer控件时间间隔为1分钟,flag每分钟加1。到20的时候,就可以把timer控件的enable属性设为false。当然,在按键开始计时的时候要把timer控件的enable属性设为true。
      

  15.   

    这种方法我试过了,后来我发现now()-startimer得出的结果和大于号后面的数类型不一样,所以根本就不进行比较,直接就弹出“时间到”的对话框了,我想请问一下如何才能让这两个数类型统一了呢?我试了int(now()-startimer),可是结果却是0!请各位高手帮帮我,小妹在此谢过了!
      

  16.   

    Private Sub begin_Click()
    Timer1.Enabled = True
    End Sub
    Private Sub Timer1_Timer()
        For i = 0 To 10
            startimer = Now()
            If Int(Now() - startimer) > 9000 Then
                i = i + 1
            End If
            If i > 10 Then
                Exit For
            End If
        Next i
        MsgBox "时间到!!!", vbOKOnly, "阶段测验"
        Form1.Show
        Form1.score.Enabled = True
        Form1.begin.Enabled = False
        Timer1.Enabled = False
        Timer1.Interval = 0
    End Sub
      

  17.   

    需要那么复杂吗?我看要实现楼主你的功能,根本就无需用到TIMER控件.
    直接用DATEDIFF函数和NOW()函数就行了:
    1.在COMMAND_CLICK中得到开始时间,如:STARTTIME=NOW()
    2.用DATEDIFF函数得到时间的差值,如:DATEDIFF("N",STARTTIME,NOW())
    他返回的是两个时间的差值.
    你可以在每次进入其它窗体时进行计算.
    返回单位:
    H      小时
    N      分
    S      秒
    如果差值为30那么就做你想做的事
      

  18.   

    用timer也很简单的,我说过了,要另外设置一个循环。
      

  19.   

    如果想用Timer控件实现超过60秒的计时,只要定义一个静态变量重复计数就可以了,当然要记得给这个变量归零。
      

  20.   

    now()?它返回的值是什么?
    你用second(now)取得时间再转换成int
      

  21.   

    To: butterfly_79(西伯利亚蝴蝶) Timer的Enable属性初始值设为True,程序中不用改。Timer的Interval属性值初始设置为0。
    使用以下代码试试:
    static TT as IntegerPrivate Sub begin_Click()
        Timer1.Interval = 60 * 1000
    End SubPrivate Sub Timer1_Timer()
        if Timer1.Interval = 0 then exit sub    '如果Interval已经为0则什么也不做就退出
        TT = TT + 1
        if TT > 20 then
            TT = 0
            Timer1.Interval = 0    
            MsgBox "时间到!!!", vbOKOnly, "阶段测验"
        endif
        Form1.Show
        Form1.score.Enabled = True
        Form1.begin.Enabled = False
    End Sub
      

  22.   

    楼上的你的代码我有点不太明白,如果这样的话哪tt那个变量不永远都无法大于20了吗,没有循环tt的值不就只加一次吗?请赐教!
      

  23.   

    最主要是注意加载timer控件件的窗体只能hide不能unload
      

  24.   


    private startimer as date    '全局变量
    Private Sub begin_Click()
    Timer1.Enabled = True
    timer1.interval=60 * 1000
    startimer = Now()End Sub
    Private Sub Timer1_Timer()
        if DateDiff("n", Now, startimer)>30 then '比较两个时间相差的分          MsgBox "时间到!!!", vbOKOnly, "阶段测验"
        Form1.Show
        Form1.score.Enabled = True
        Form1.begin.Enabled = False
        Timer1.Enabled = False
        Timer1.Interval = 0
       end if
    End Sub
      

  25.   

    我想再请教一下,那个变量n是否需要定义呢?定义成什么类型呢?为什么我发现那个n值总是为零呢?还有,如果timer1.interval=60*1000的话,就会出现溢出错误!
      

  26.   

    '3个TextBox分别为分、秒、微秒,如果需要可以继续加时、天、年…… :)Private Sub Command1_Click()
      Timer1.Enabled = Not (Timer1.Enabled)
    End SubPrivate Sub Form_Load()
      Form1.Text1.Text = 0
      Form1.Text2.Text = 0
      Form1.Text3.Text = 0
      
      Timer1.Interval = 10
      Timer1.Enabled = False
    End SubPrivate Sub Timer1_Timer()
      Text3.Text = Text3.Text + 1
      If Text3.Text = 100 Then Text3.Text = 0: Text2.Text = Text2.Text + 1
      If Text2.Text = 60 Then Text2.Text = 0: Text1.Text = Text1.Text + 1
    End Sub
      

  27.   

    一个timer不行
    就用两个
      

  28.   

    To: butterfly_79(西伯利亚蝴蝶) 哇噻,这么长时间了,你还没搞定呀
    给你提示两点:
    1. 整型的范围最大到32768,所以如果你要用到大于32768的数, 要用长整型long
    2. 时间相减,得到的是天数,所以你的那句  if now()-starttimer>9000 then 要为真的话,要等20多年哟(啊!这么久呀?:-o), 现在,怎么做你知道啦。
      

  29.   

    private startimer as date    '全局变量
    Private Sub begin_Click()
    Timer1.Enabled = True
    timer1.interval= 1000 '那就改为秒,程序不变
    startimer = Now()End Sub
    Private Sub Timer1_Timer()
        if DateDiff("n", Now, startimer)>30 then '比较两个时间相差的分 ,“n”代表比较的是分          MsgBox "时间到!!!", vbOKOnly, "阶段测验"
        Form1.Show
        Form1.score.Enabled = True
        Form1.begin.Enabled = False
        Timer1.Enabled = False
        Timer1.Interval = 0
       end if
    End Sub
      

  30.   

    butterfly_79(西伯利亚蝴蝶) :
    你还是试试我的第一次回复的程序,
    我稍改了一下给你:先设定timer1的interval=0
    button1_click()
     timer1.interval=65000
     starttimer=now()
    end sub...timer1.timer()
    if now()-starttimer>1200/86400 then  '20分钟
    msgbox "时间到。",vbinformation
    end
    endif
    end sub
      

  31.   

    楼主真碰到难作业了还是不理解呢我5分钟作了下面的实验,适合否?'新建工程,加两个窗体,加上下面代码,Run,~~~~ OK!'form1: 放一个 Timer , 一个 commandBox  贴上下面代码
    Dim nNmb As Integer
    Private Sub Form_Load()
        Timer1.Enabled = False: Timer1.Interval = 100  '100自己定吧
    End Sub
    Private Sub Command1_Click()
        nNmb = 0: Timer1.Enabled = True: Form1.Visible = False: form2.Show
    End Sub
    Private Sub Timer1_Timer()
        If nNmb > 1 Then Timer1.Enabled = False: form2.offForm Else nNmb = nNmb + 1    '>1 自己定吧
    End Sub'form2: 不放控件,贴上下面代码
    Sub offForm()
        MsgBox "时间到!", 64, "!!!!!"
        Form1.Visible = True: Unload Me
    End Sub
      

  32.   

    '如果多处用到,form2可不参与编码,为减少代码,最好定义一个窗体对象变量
    'form2 只是存在就行。
    'form1: 放一个 Timer 和一个 commandButton  贴上下面代码
    Dim nNmb As Integer, pForm As Form
    Private Sub Form_Load()
        Timer1.Enabled = False: Timer1.Interval = 1000  '100自己定吧
    End Sub
    Private Sub Command1_Click()
        nNmb = 0: Timer1.Enabled = True: Form1.Visible = False
        Set pForm = form2: form2.Show
    End Sub
    Private Sub Timer1_Timer()
        If nNmb > 1 Then Timer1.Enabled = False: offForm Else nNmb = nNmb + 1    '>1 自己定吧
    End Sub
    Sub offForm()
        MsgBox "时间到!", 64, "!!!!!"
        Form1.Visible = True: Unload pForm
    End Sub
      

  33.   

    CSDN中总的来看结贴率不高,大家看开些。能够参与解决问题对自己也是一个提高。