none
¿como crear un cronometro en C#?

    Pregunta

  • Hola a todos!
    Ojala alguien pudiera orientarme acerca de como puedo crear un cronometro en C# con las tipicas opciones que trae un cronometro: iniciar, pausa y parar?
    He estado investigando en Internet pero solo he encontrado ejemplos en visual basic y este lenguaje no lo he manejado por lo que la traduccion de basic a C# se me hace complicado, ojala alguien pudiera darme un pequeño ejemplo acerca de como hacerlo porque estoy desarrollando una aplicacion en la cual necesito llevar el control del tiempo entre otras cosas.
    Intente haciendo uno utilizando un timer pero no inicia el conteo del tiempo o al menos no lo depliega en pantalla, solo lo pone a cero y no hace nada mas, lo que hice fue colocar dos botones: iniciar y parar y en cada uno de ellos puse lo siguiente:

    private
    void play_Click(object sender, EventArgs e)
    {
    i = 0;
    //inicializar el contador
    tiempotranscurrido.Text = ""; //limpiar la etiqueta
    timer1.Interval = 1; //iniciar el cronometro
    timer1.Tick +=new EventHandler(OnTimerPlay);
    }
    private void stop_Click(object sender, EventArgs e)
    {timer1.Interval = 0;}

    private

     

    void OnTimerPlay(object sender, EventArgs e)
    {
    i = i + 1;
    long tiempo1 = i / 36000 % 24;
    long tiempo2 = i / 600 % 60;
    long tiempo3 = i / 10 % 60;
    long tiempo4 = i % 10;
    Tiempo = tiempo1.ToString() +
    ":" + tiempo2.ToString() + ":" + tiempo3.ToString() + ":" + tiempo4.ToString();
    tiempotranscurrido.Text = Tiempo;
    this.Refresh();}

    Esto lo tome de un ejemplo que encontre en visual basic, pero no me funciona.

    Si alguien pudiera darme un ejemplo de donde guiarme se lo agradeceria mucho.

    Gracias de antemano...

    martes, 09 de junio de 2009 4:50

Respuestas

  • Hola:
    Haciendo uso de la programación orientada a objetos puede ser sencillo el cronómetro.

    Crea una clase llamada Cronómetro, luego los métodos, iniciar, pausar y detener.
    Crea una propiedad llamada Tiempo de tipo Timer
    Crea una propiedad publica llamada Resultado de double
    Crea una metodo para sobre escribir el método ToString(); y mostrar el resultado que así deseas:

    En tu formulario entonces creas los botones y sus eventos respectivos y generas una instancia de tu clase cronómetro y haces los llamados en cada evento, así:


    using System;
    using System.Globalization;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
        public class Cronometro
        {
            private Timer Tiempo { get; set; }
            public Double Result { get; set; }
    
            public Cronometro()
            {
                Tiempo.Tick += new EventHandler(Tiempo_Tick);
                Tiempo.Interval = 100;
            }
    
            void Tiempo_Tick(object sender, EventArgs e)
            {
                Result++;
                //cada tick representa 100 milisegundos
            }
    
            public void Start()
            {
                Tiempo.Start();
            }
    
            public void Pause()
            {
                //
            }
    
            public void Stop()
            {
                Tiempo.Stop();
            }
    
            public override string ToString()
            {
                return string.Format(
                    CultureInfo.CurrentCulture,
                    "{0} ms",
                    Result);
    
            }
        }
    }
    y luego:

    using System;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            public Cronometro Cronometro { get; set; }
    
            public Form1()
            {
                InitializeComponent();
                Cronometro = new Cronometro();
            }
    
            private void btnStart_Click(object sender, EventArgs e)
            {
                Cronometro.Start();
            }
    
            private void btnStop_Click(object sender, EventArgs e)
            {
                Cronometro.Stop();
            }
        }
    }
    Para mostrar el resultado utiliza el método Cronometro.ToString();

    Saludos,
    Microsoft Certified Professional
    Profesionista Microsoft VIP México
    Blog Técnico
    Small Business Website
    World Wide Finalist Imagine Cup 2007
    Microsoft Student Partner
    C#, WPF, WCF
    LinkedIn
    martes, 09 de junio de 2009 5:17

Todas las respuestas

  • Hola:
    Haciendo uso de la programación orientada a objetos puede ser sencillo el cronómetro.

    Crea una clase llamada Cronómetro, luego los métodos, iniciar, pausar y detener.
    Crea una propiedad llamada Tiempo de tipo Timer
    Crea una propiedad publica llamada Resultado de double
    Crea una metodo para sobre escribir el método ToString(); y mostrar el resultado que así deseas:

    En tu formulario entonces creas los botones y sus eventos respectivos y generas una instancia de tu clase cronómetro y haces los llamados en cada evento, así:


    using System;
    using System.Globalization;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
        public class Cronometro
        {
            private Timer Tiempo { get; set; }
            public Double Result { get; set; }
    
            public Cronometro()
            {
                Tiempo.Tick += new EventHandler(Tiempo_Tick);
                Tiempo.Interval = 100;
            }
    
            void Tiempo_Tick(object sender, EventArgs e)
            {
                Result++;
                //cada tick representa 100 milisegundos
            }
    
            public void Start()
            {
                Tiempo.Start();
            }
    
            public void Pause()
            {
                //
            }
    
            public void Stop()
            {
                Tiempo.Stop();
            }
    
            public override string ToString()
            {
                return string.Format(
                    CultureInfo.CurrentCulture,
                    "{0} ms",
                    Result);
    
            }
        }
    }
    y luego:

    using System;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            public Cronometro Cronometro { get; set; }
    
            public Form1()
            {
                InitializeComponent();
                Cronometro = new Cronometro();
            }
    
            private void btnStart_Click(object sender, EventArgs e)
            {
                Cronometro.Start();
            }
    
            private void btnStop_Click(object sender, EventArgs e)
            {
                Cronometro.Stop();
            }
        }
    }
    Para mostrar el resultado utiliza el método Cronometro.ToString();

    Saludos,
    Microsoft Certified Professional
    Profesionista Microsoft VIP México
    Blog Técnico
    Small Business Website
    World Wide Finalist Imagine Cup 2007
    Microsoft Student Partner
    C#, WPF, WCF
    LinkedIn
    martes, 09 de junio de 2009 5:17
  • Hola:
    Haciendo uso de la programación orientada a objetos puede ser sencillo el cronómetro.

    Crea una clase llamada Cronómetro, luego los métodos, iniciar, pausar y detener.
    Crea una propiedad llamada Tiempo de tipo Timer
    Crea una propiedad publica llamada Resultado de double
    Crea una metodo para sobre escribir el método ToString(); y mostrar el resultado que así deseas:

    En tu formulario entonces creas los botones y sus eventos respectivos y generas una instancia de tu clase cronómetro y haces los llamados en cada evento, así:


    using System;
    
    using System.Globalization;
    
    using System.Windows.Forms;
    
    
    
    namespace WindowsFormsApplication1
    
    {
    
        public class Cronometro
    
        {
    
            private Timer Tiempo { get; set; }
    
            public Double Result { get; set; }
    
    
    
            public Cronometro()
    
            {
    
                Tiempo.Tick += new EventHandler(Tiempo_Tick);
    
                Tiempo.Interval = 100;
    
            }
    
    
    
            void Tiempo_Tick(object sender, EventArgs e)
    
            {
    
                Result++;
    
                //cada tick representa 100 milisegundos
    
            }
    
    
    
            public void Start()
    
            {
    
                Tiempo.Start();
    
            }
    
    
    
            public void Pause()
    
            {
    
                //
    
            }
    
    
    
            public void Stop()
    
            {
    
                Tiempo.Stop();
    
            }
    
    
    
            public override string ToString()
    
            {
    
                return string.Format(
    
                    CultureInfo.CurrentCulture,
    
                    "{0} ms",
    
                    Result);
    
    
    
            }
    
        }
    
    }
    
    
    y luego:

    using System;
    
    using System.Windows.Forms;
    
    
    
    namespace WindowsFormsApplication1
    
    {
    
        public partial class Form1 : Form
    
        {
    
            public Cronometro Cronometro { get; set; }
    
    
    
            public Form1()
    
            {
    
                InitializeComponent();
    
                Cronometro = new Cronometro();
    
            }
    
    
    
            private void btnStart_Click(object sender, EventArgs e)
    
            {
    
                Cronometro.Start();
    
            }
    
    
    
            private void btnStop_Click(object sender, EventArgs e)
    
            {
    
                Cronometro.Stop();
    
            }
    
        }
    
    }
    
    
    Para mostrar el resultado utiliza el método Cronometro.ToString();

    Saludos,
    Microsoft Certified Professional
    Profesionista Microsoft VIP México
    Blog Técnico
    Small Business Website
    World Wide Finalist Imagine Cup 2007
    Microsoft Student Partner
    C#, WPF, WCF
    LinkedIn

    Hola iRodfraga!

    Antes que nada muchas gracias por tu respuesta, un ejemplo asi andaba buscando.
    Implemente el codigo asi como me lo indicaste, solo tengo una pequeña duda, al ejecutar la aplicacion me marca este error: "El tipo 'WindowsFormsApplication1.WindowsFormsApplication1' ya contiene una definicion para Cronometro".
    Estuve revisandolo y modificandole algunas cosas pero al final me marca ese mismo error, serias tan amable de darme alguna idea del porque me aparece ese error? Y si quisiera colocar en un label el tiempo que va transcurriendo en el cronometro para que el usuario vea como avanza el tiempo, donde podria hacerlo?
    Muchas gracias por todo. Saludos
    martes, 09 de junio de 2009 19:12
  • Hola iRodfraga!
    Hace algunas horas comente que me marcaba un error: "El tipo 'WindowsFormsApplication1.WindowsFormsApplication1' ya contiene una definicion para Cronometro". Desafortunadamente aun no he podido corregirlo y pues me quede estancada en ese error, seria que podrias ser tan amable de darme alguna idea acerca del porque se produce el error. Por cierto, estoy utilizando el visual studio 2005.

    Muchas gracias iRodfraga y espero tu respuesta. Saludos.

    miércoles, 10 de junio de 2009 2:12
  • Eso es porque ya tienes una clase u objeto con el mismo nombre...

    revisa y nos cuentas...


    Colabora con la comunidad, si éste mensaje te ha sido de utilidad, márcalo como respuesta correcta.
    Juan Carlos Ruiz Pacheco
    Ingeniero de Sistemas
    Microsoft MVP C#
    MCP,MCTS,DCE+Platino,OCA,OCP
    Blog Técnico
    miércoles, 10 de junio de 2009 20:58
  • hola!!! yo tengo un cronometro q hice sin clases... es las sencillo para los que no conocen la programación orientada a objetos... Principalmente este en un ejemplo para aquellos q recién se estan incorporando en el mundo de la programación. Es solo seguir la lógica del programa (cronometro).

    Lo q utilizarás son solo tres labelas y un timer.

    Este es el ejemplo.

     

    namespace Cronometro

    {

        public partial class Form1 : Form

        {

            public Form1()

            {

                InitializeComponent();

            }

           private void timer1_Tick(object sender, EventArgs e)

            {

                timer1.Interval = 10;

                int milesima, segundo, minuto; 

                milesima = Convert.ToInt32(label_milesimas.Text); 

                milesima += 1;

                label_milesimas.Text = milesima.ToString();

                if (milesima == 60)

                {

                    segundo = Convert.ToInt32(label_segundos.Text);

                    segundo += 1;

                    label_segundos.Text = segundo.ToString();

                    label_milesimas.Text = "00";

                    if (segundo == 60)

                    {

                        minuto = Convert.ToInt32(label_minutos.Text);

                        minuto += 1;

                        label_minutos.Text = minuto.ToString();

                        label_segundos.Text = "00";

                    }

                }           

            }

            private void btn_play_Click(object sender, EventArgs e)

            {

                timer1.Start();

            }

            private void btn_pause_Click(object sender, EventArgs e)

            {

                timer1.Stop();

            }

            private void btn_new_Click(object sender, EventArgs e)

            {

                timer1.Stop();

                label_milesimas.Text = "00";

                label_segundos.Text = "00";

                label_minutos.Text = "00";

            }

        }

    }

    • Propuesto como respuesta CCOLLAZOSB domingo, 27 de mayo de 2012 18:53
    lunes, 22 de noviembre de 2010 8:03
  • :-)
    Hola,

    Si realmente quieres un medidor de tiempo con precisión, NO uses un Timer. En su lugar usa un Stopwatch:

    Stopwatch clock = new Stopwatch();
    clock.Restart();
    //proceso largo
    clock.Stop();
    elapsedTimeLabel.Text = 
       clock.ElapsedMilliseconds.ToString("n2");
    

    Saludos,


    No olvides marcar la respuesta como correcta si te ha sido de utilidad :-)

    [MS-MVP-MCTS]

    Follow me on Facebook or Twitter!

    Mi Perfil MVP en: https://mvp.support.microsoft.com/profile/Lluis
    NUG: http://andorradotnet.com
    Web: http://www.ordeeno.com
    Geeks: http://geeks.ms/blogs/lfranco

    lunes, 22 de noviembre de 2010 8:27