miércoles, 22 de mayo de 2013

Cronómetro inverso en .NET

Por así decirlo, realiza acciones contrarias a la de un cronómetro, este ultimo lo usamos cuando queremos controlar un tiempo pasado, es decir la duración de algúna acción o un monton de cosas mas.

En este caso será al reves, daremos un tiempo y el mismo comenzará a contar hacia atras.

Es a pedido de un colega del foro www.elhacker.net el cual lo pedia pero en la red se encontraban ejemplos de cronometros siempre y cuando se estableciera en un label (se mostraban resultados en el mismo) y no permitía que el usuario tratara con dichos tiempos.

Para ello hemos utilizado unos Control TextBox, ya que queria permitir que el usuario interactue con el tiempo a descontar;

Usamos 1 Timer, 3 cajas de Texto y 2 botones de comando.

Public Class frmMain
    Dim Hora As Integer
    Dim Segundo As Integer
    Dim Minutos As Integer
    'variable para asemejar el segundo
    Dim Mx As Integer
    Private Sub CalcularyMostrar()
        txtHoras.Text = Hora.ToString.PadLeft(2, "0") 'para rellenar en caso que sea menor que dos digitos
        txtMinutos.Text = Minutos.ToString.PadLeft(2, "0")
        txtSegundos.Text = Segundo.ToString.PadLeft(2, "0")
    End Sub
    Private Sub cmdIniciar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdIniciar.Click
        If txtSegundos.Text = "" Then
            MsgBox("debe indicar un tiempo para iniciar retroceso")
            Exit Sub
        End If
        Segundo = txtSegundos.Text
        Minutos = txtMinutos.Text
        Hora = txtHoras.Text
        tmrKonteo.Enabled = True
    End Sub
    Private Sub tmrKonteo_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles tmrKonteo.Tick
        'tick es como el timer_timer en visual 6
        Mx = Mx - 1
        If Mx = 0 Or Mx = -1 Then
            Mx = 9
            Segundo = Segundo - 1
            If Segundo = -1 Then
                Segundo = 59
                Minutos = Minutos - 1
                If Minutos = 0 Then
                    Minutos = 59
                    Hora = Hora - 1
                End If
            End If
            CalcularyMostrar()
        End If
    End Sub
    Private Sub cmdDetiene_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdDetiene.Click
        tmrKonteo.Enabled = False
    End Sub
End Class



La sentencia de comparación sobre los segundos que devuelve un mensaje de error, es a modo de ejemplo, sencillamente se muestra como podemos bloquear el inicio si el usuario no ha establecido algún tipo de tiempo a descontar.

Faltaria implementar que al llegar a 0 realize determinadas acciones, que no lo hemos realizado pero el ejemplo lleva a todo lo demas.


Saludos.

No hay comentarios:

Publicar un comentario