none
como puedo Hacer para que los 2 cronometro inicien a la vez RRS feed

Respuestas

  • Cierto, un despiste. Es porque utilizo TotalHours en lugar de Hours para poder manejar tiempos superiores a 24 horas.

    No he tenido en cuenta que TotalHours tiene decimales y, por tanto, al convertirlo a entero se va a redondear.

    Bastaría con utilizar la función Fix:

        Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick
            Dim tiempo As TimeSpan = Now.Subtract(InicioContadores)
            Label3.Text = tiempo.Seconds.ToString("00")
            Label2.Text = tiempo.Minutes.ToString("00")
            Label1.Text = Fix(tiempo.TotalHours).ToString("00")
    
            If TotalContador2 = Nothing Then
                Dim ValoresIniciales(3) As Integer
                Integer.TryParse(Label8.Text, ValoresIniciales(0))
                Integer.TryParse(Label7.Text, ValoresIniciales(1))
                Integer.TryParse(Label6.Text, ValoresIniciales(2))
                TotalContador2 = new TimeSpan(ValoresIniciales(0), ValoresIniciales(1), ValoresIniciales(2))
            End If
    
            Dim Resto As TimeSpan = TotalContador2.Subtract(new TimeSpan(tiempo.Hours, tiempo.Minutes, tiempo.Seconds))
            If Resto.TotalSeconds >= 0 Then
                Label8.Text = Fix(Resto.TotalHours).ToString("00")
                Label7.Text = Resto.Minutes.ToString("00")
                Label6.Text = Resto.Seconds.ToString("00")
            End If
    


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    • Marcado como respuesta JETET lunes, 30 de noviembre de 2015 18:16
    lunes, 30 de noviembre de 2015 15:19

Todas las respuestas

  • Habría que ver cómo lo estás haciendo pero, si se van a iniciar y parar a la vez, lo más lógico es que inicies un único cronómetro y, al actualizar, actualices la info de los dos: en uno pones el tiempo que ha pasado y en el otro el tiempo inicial menos el que ha pasado.

    De esta forma siempre están sincronizados.


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    lunes, 30 de noviembre de 2015 9:44
  • pon el codigo que tienes hasta ahora

         timer1.Tick += new EventHandler(timer1_Tick);
                timer3.Tick += new EventHandler(timer3_Tick);
                segundos = 0;
                segundos2 = 0; ;
            }
    
            private void timer3_Tick(object sender, EventArgs e)
            {
                segundos++;
                label7.Text = segundos.ToString();
            }
    
            private void timer1_Tick(object sender, EventArgs e)
            {
                segundos2++;
                label8.Text = segundos2.ToString();
            }

    private void button3_Click(object sender, EventArgs e)
            {
                
                timer1.Enabled = true;
                timer3.Enabled = true;
            }

    • Editado legolas2024 lunes, 30 de noviembre de 2015 10:17
    lunes, 30 de noviembre de 2015 10:03
  • yo pensaba lo mismo, por eso no encuentro la lógica...
    lunes, 30 de noviembre de 2015 10:08
  • No, no se para a la vez el cronometro es el total del tiempo que yo tardo en elaborar la cerveza y la cuenta regresiva va cambiando segun lo agregado en datagridview

    Private Sub

    Button9_Click(sender As Object, e As EventArgs) Handles Button9.Click Timer2.Interval = 10 Call TimerOn2(10) Timer4.Interval = 10 Call TimerOn4(10) End Sub

    Co lo de arriba inicio los timer

    Timer4

     Private Sub Timer4_Tick(sender As Object, e As EventArgs) Handles Timer4.Tick
    
    
    
            If HoraFin Is Nothing Then
                Dim ValoresIniciales(3) As Integer
                Integer.TryParse(Label8.Text, ValoresIniciales(0))
                Integer.TryParse(Label7.Text, ValoresIniciales(1))
                Integer.TryParse(Label6.Text, ValoresIniciales(2))
                HoraFin = Now.AddSeconds(ValoresIniciales(0) * 3600 + ValoresIniciales(1) * 60 + ValoresIniciales(2))
            End If
    
            Dim Resto As TimeSpan = HoraFin.Value.Subtract(Now)
            Label8.Text = Resto.Hours.ToString("00")
            Label7.Text = Resto.Minutes.ToString("00")
            Label6.Text = Resto.Seconds.ToString("00")
    
            If Resto.TotalSeconds <= 0 Then
                Timer4.Stop()
            End If
        End Sub

     Public Sub TimerOn4(ByRef Interval As Short)
            If Interval > 0 Then
                Timer4.Enabled = True
            Else
                Timer4.Enabled = False
            End If
    
        End Sub

    Timer2

    Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick
    
            Static UltimaHora As Date
    
            If UltimaHora = Nothing Then
                UltimaHora = Now
    
    
            Else
    
                Dim interval As TimeSpan = Now.Subtract(UltimaHora)
                Dim Segundos As String
    
                Segundos = DateDiff(DateInterval.Second, UltimaHora, Now)
    
                Label3.Text = If(Segundos < 10, "0", "") & Segundos.ToString()
    
                Segundos = 60 - Segundos
    
                If Label3.Text = 60 Then
                    UltimaHora = New Date
                    Segundos = 0
                    Label2.Text += 1
                    Label2.Text = IIf(Label2.Text < 10, "0", ":") & Label2.Text.ToString()
                    Label3.Text = "00"
                End If
                If Label2.Text = 60 Then
                    Label1.Text += 1
    
                    Label1.Text = If(Label1.Text < 10, "0", "") & Label1.Text.ToString()
                    Label2.Text = "00"
    
                End If
    
            End If
    
        End Sub

    Public Sub TimerOn2(ByRef Interval As Short)
    
            If Interval > 0 Then
    
                Timer2.Enabled = True
            Else
                Timer2.Enabled = False
            End If
    
        End Sub

    lunes, 30 de noviembre de 2015 10:44
  • Pero ¿siempre se inician a la vez?

    ¿La única diferencia es que uno se para al llegar a 0 y el otro no?


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    lunes, 30 de noviembre de 2015 11:16
  • el regresivo empieza en 59 y cuando empieza a descontar que seria 58 el cronometro va por 1



    • Editado JETET lunes, 30 de noviembre de 2015 11:24
    lunes, 30 de noviembre de 2015 11:23
  • Sí el problema son las fracciones de segundos.

    Aún así creo que te valdría con un único timer. Prueba esta implementación y me comentas:

        Private InicioContadores As Date
        Private TotalContador2 As TimeSpan = Nothing
    
        Private Sub  Button9_Click(sender As Object, e As EventArgs) Handles Button9.Click
            InicioContadores = Now
            TotalContador2 = Nothing
            Timer2.Interval = 10
            Call TimerOn2(10)
        End Sub
    
        Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick
            Dim tiempo As TimeSpan = Now.Subtract(InicioContadores)
            Label3.Text = tiempo.Seconds.ToString("00")
            Label2.Text = tiempo.Minutes.ToString("00")
            Label1.Text = tiempo.TotalHours.ToString("00")
    
            If TotalContador2 = Nothing Then
                Dim ValoresIniciales(3) As Integer
                Integer.TryParse(Label8.Text, ValoresIniciales(0))
                Integer.TryParse(Label7.Text, ValoresIniciales(1))
                Integer.TryParse(Label6.Text, ValoresIniciales(2))
                TotalContador2 = new TimeSpan(ValoresIniciales(0), ValoresIniciales(1), ValoresIniciales(2))
            End If
    
            Dim Resto As TimeSpan = TotalContador2.Subtract(new TimeSpan(tiempo.Hours, tiempo.Minutes, tiempo.Seconds))
            If Resto.TotalSeconds >= 0 Then
                Label8.Text = Resto.TotalHours.ToString("00")
                Label7.Text = Resto.Minutes.ToString("00")
                Label6.Text = Resto.Seconds.ToString("00")
            End If
    
        End Sub
    
        Public Sub TimerOn2(ByRef Interval As Short)
    
            If Interval > 0 Then
                Timer2.Enabled = True
            Else
                Timer2.Enabled = False
            End If
    
        End Sub


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    lunes, 30 de noviembre de 2015 11:47
  • Asier funciona, pero hay un problema y no do ycon el,  en la cuenta regresiva empieza hora 1 minuto 1 cuando pulso el boton inicia y segundos pasa a 59 minutos a 0 horas 1 

    pero cuando segundos llega a 0 minutos pasa a 59 pero las horas se quedan en 1 no se ponen en 0 

    gracias

    lunes, 30 de noviembre de 2015 13:56
  • Cierto, un despiste. Es porque utilizo TotalHours en lugar de Hours para poder manejar tiempos superiores a 24 horas.

    No he tenido en cuenta que TotalHours tiene decimales y, por tanto, al convertirlo a entero se va a redondear.

    Bastaría con utilizar la función Fix:

        Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick
            Dim tiempo As TimeSpan = Now.Subtract(InicioContadores)
            Label3.Text = tiempo.Seconds.ToString("00")
            Label2.Text = tiempo.Minutes.ToString("00")
            Label1.Text = Fix(tiempo.TotalHours).ToString("00")
    
            If TotalContador2 = Nothing Then
                Dim ValoresIniciales(3) As Integer
                Integer.TryParse(Label8.Text, ValoresIniciales(0))
                Integer.TryParse(Label7.Text, ValoresIniciales(1))
                Integer.TryParse(Label6.Text, ValoresIniciales(2))
                TotalContador2 = new TimeSpan(ValoresIniciales(0), ValoresIniciales(1), ValoresIniciales(2))
            End If
    
            Dim Resto As TimeSpan = TotalContador2.Subtract(new TimeSpan(tiempo.Hours, tiempo.Minutes, tiempo.Seconds))
            If Resto.TotalSeconds >= 0 Then
                Label8.Text = Fix(Resto.TotalHours).ToString("00")
                Label7.Text = Resto.Minutes.ToString("00")
                Label6.Text = Resto.Seconds.ToString("00")
            End If
    


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    • Marcado como respuesta JETET lunes, 30 de noviembre de 2015 18:16
    lunes, 30 de noviembre de 2015 15:19
  • Despiste no, mil gracias a mi si me gustaria saber lo que tu sabes

    lunes, 30 de noviembre de 2015 18:13