2010-08-05 29 views
7

He visto variaciones de esto al buscar en Google, pero tengo un formulario de Windows con un control de temporizador, tres cuadros de texto (hora, minuto, segundo) y en función de un clic, quiero cuenta atrás de 2 horas. Así que justo después de hacer clic en textbox1 (hora) será 1, textBox2 (minuto) será 59, textBox3 (segundo) será 59 y continuarán contando hacia abajo hasta que todos lean 0.Cronómetro que cuenta regresivamente en C#

¿Alguien tiene algún código para compartir por eso?

Muchas gracias.

+3

¿Qué has probado? ¿Qué has pensado? ¿Estás atascado porque no sabes cómo hacerlo en C#, o porque no sabes cómo hacerlo en pseudo-código? –

Respuesta

3

Puede usar la clase TimeSpan. Inicializa de a 2 horas. Si inicia el temporizador, obtenga el temporizador actual. Luego, con un objeto Timer, actualice su pantalla cada segundo. Simplemente obtenga la hora actual. Entonces, el tiempo restante es:

TimeSpan restante = twoHoursTimespan - (CurrentTime - StartTime);

3

Extraiga los componentes de un TimeSpan. Registre la fecha y hora actuales tan pronto como se haga clic en el botón, y almacénelo en una variable. Luego, cada segundo su temporizador debe calcular la duración desde la hora de inicio.

IE: DateTime result = DateTime.Now.Subtract (StartingTime);

A continuación, utilice las partes del TimeSpan resultante para rellenar los campos.

IE: int Hora = resultado.Hora; (o algo así).

Adición: No realice la cuenta atrás manualmente cada segundo, porque es probable que la cuenta regresiva sea inexacta.

0

Este tutorial explica muy bien lo que está tratando de lograr.

http://www.dreamincode.net/forums/topic/57482-countdown-timer/

Te da la opción de la cuenta atrás desde un momento dado, no sólo a 2 horas. Por supuesto, puede establecerlo en 2 horas si es lo único que necesita.

+4

Te rebajaría por señalar esta abominación, pero estoy de buen humor hoy :) – Diadistis

+1

@Diadistis - de qué estás hablando;) Es una gran muestra de código; incluso abajo a los nombres de botón predeterminados de button1, button2, etc. –

+1

@Diadistis Eché un vistazo al artículo y pensé que estaba bien ... pero luego vi un poco del código y estoy de acuerdo. ¿Por qué están usando Convert.ToInt32 y atrapando la excepción, perdón, capturando Exception - int.TryPrase ha estado aquí desde la versión 2.0 (personalmente no me gusta el "if (paused! = True)" pero no sé si es una cuestión de preferencia) – Samuel

0

Aquí hay un Cope Project article and project que se encuentra cerca de lo que desea. Incluso podría satisfacer sus necesidades directamente si sus necesidades son flexibles.

0

Disculpa, esta podría no ser la respuesta exacta, pero deberás utilizar un intervalo de tiempo para lograrlo.

DateTime now = DateTime.Now; 

// get the time elapsed since we started the test 
// start date was set somewhere else before this code is called 
TimeSpan span = now - _startDate; 

// format the time left 
String timeleft = span.Hours > 0 ? String.Format("Time Left - {0}:{1:D2}:{2:D2}", span.Hours, span.Minutes, span.Seconds) : String.Format("Time Left - {0:D2}:{1:D2}", span.Minutes, span.Seconds);