none
Timer em Windows Forms RRS feed

  • Pergunta

  • Fala pessoal, queria saber como faço um timer em contagem regressiva. Ele tem que começar dos 100 segundos e ir até o 0, quando chegar no 0 tem que aparecer uma messagebox dizendo que o tempo acabou. Até agora o que eu fiz foi isso:

    DateTime startGameTimer = new DateTime(//Aqui precisa ser os segundos, mas eu não sei como faz.);
    
    //Criei um DateTime para os segundos e aí eu chamo ele quando der Load no formulário.
    
    private void TelaJogar_Load(object sender, EventArgs e)
            {
                timerTelaJogar.Start();
            }
    
    //Quando carregar o formulário, assim que iniciar o programa, já dispara o timer, e aí eu fiz o Tick dele.
    
    
    private void timerTelaJogar_Tick(object sender, EventArgs e)
            {            
                lblTimerJogo.Text = startGameTimer.ToString("ss:fff");
            }
    
    //Coloquei pra ele exibir os segundos e os milésimos.
    //Se eu colocar lblTimerJogo.Text = DateTime.Now.ToString("ss:fff"); aí ele começa a contar da hora atual, funciona, mas não é esse meu desejo.

    Lembrando que ele tem que começar a contar do 100 e ir até o 0.

    Desde já agradeço.

    sábado, 5 de novembro de 2016 21:25

Respostas

Todas as Respostas

  • Olá Giovanni,

    Implementa dessa maneira:

    Timer timerTelaJogar = new Timer(1000);
    int contador = 100;
    
    private void TelaJogar_Load(object sender, EventArgs e)
    {
        timerTelaJogar.Start();
        lblTimerJogo.Text = "100";
    }
    
    
    private void timerTelaJogar_Tick(object sender, EventArgs e)
    {
        contador--;
        if (contador >= 0)
            lblTimerJogo.Text = contador.ToString();
        else
            timerTelaJogar.Stop();
        
    }
    

    Valeu!


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    domingo, 6 de novembro de 2016 01:01
  • namespace Tempo
    {
        public partial class Form1 : Form
        {
            Int32 _tempo;
            public Form1()
            {
                InitializeComponent();
            }

            private void timer1_Tick(object sender, EventArgs e)
            {
                label1.Text = (--this._tempo).ToString();
                if (this._tempo == 0)
                {
                    timer1.Stop();
                    MessageBox.Show("O tempo acabou");
                }
            }

            private void Form1_Load(object sender, EventArgs e)
            {
                Int32 tempo;
                Int32.TryParse(label1.Text, out tempo);
                this._tempo = tempo;
                timer1.Interval = 1000;
                timer1.Start();
                
            }
        }
    }
    domingo, 6 de novembro de 2016 01:18
  • Então André, esse trecho aqui
    Timer timerTelaJogar = new Timer(1000);
    Está errado porque não dá pra colocar Timer(1000);, dá erro. 
    segunda-feira, 7 de novembro de 2016 13:35
  • Eu fiz assim André

    Timer timerJogar = new Timer();
    int contador = 950;
    
    private void TelaJogar_Load(object sender, EventArgs e)
            {
                timerJogar.Start();
                lblTimerJogo.Text = "1000";
            }
    
    private void timerTelaJogar_Tick(object sender, EventArgs e)
            {
                contador--;
                if (contador >= 0)
                    lblTimerJogo.Text = contador.ToString();
                else
                    timerJogar.Stop();
            }
    
    
    

    Mas tem outro problema. Como se trata de um programa de jogo da forca, a cada palavra inserida que o usuário errar, eu preciso adicionar 10 segundos no timer, só que esse timer ficou muito estranho. Ele não marca 100 segundos, ele tá marcando outra coisa que não são segundos, devem ser os milésimos. Está muito ruim de enxergar

    Eu cronometrei os 100 que aparece aí que eu não sei qual unidade é e deu 11 segundos ao invés de 100 segundos
    segunda-feira, 7 de novembro de 2016 13:52
  • Giovanni,

    A unidade que vai no Timer é milissegundos, portanto se deseja 1 segundo seriam 1000 milissegundos.

    Mas a ideia do meu código, é o timer ser acionado de segundo em segundo e o contador que eu criei, gerenciar a quantidade de vezes que o timer será executado, mostrando no Label os segundos. Após passar os 100 segundos ele dá um Stop no timer.

    Entendeu?


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    segunda-feira, 7 de novembro de 2016 15:58
  • Então André, mas você não entendeu... esse trecho que você escreveu

    Timer timerJogar = new Timer(1000);

    Tá errado, isso dá erro. Como resolve?


    terça-feira, 8 de novembro de 2016 01:59
  • Olá Giovanni!

    O André Secco provavelmente utilizou a classe Timer do namespace System.Timers.. Como você provavelmente está utilizando o Windows Forms e já tem um "using System.Windows.Forms" no seu formulário, o Visual Studio está achando que você quer utilizar o Timer desse namespace..

    Tente substituir no exemplo do André Secco onde tiver "Timer" por "System.Timers.Timer"..

    Abraço!


    André Alves de Lima
    Microsoft MVP - Client App Dev
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima

    terça-feira, 8 de novembro de 2016 14:40
    Moderador
  • Olá Giovanni!

    O André Secco provavelmente utilizou a classe Timer do namespace System.Timers.. Como você provavelmente está utilizando o Windows Forms e já tem um "using System.Windows.Forms" no seu formulário, o Visual Studio está achando que você quer utilizar o Timer desse namespace..

    Tente substituir no exemplo do André Secco onde tiver "Timer" por "System.Timers.Timer"..

    Abraço!


    André Alves de Lima
    Microsoft MVP - Client App Dev
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima

    Coloquei no início do meu programa o 'using System.Timers;'. E agora na minha váriavel timerJogar deu outro erro
    terça-feira, 8 de novembro de 2016 16:21
  • Olá Giovanni!

    Não era para colocar o using, mas sim, o namespace completo antes da criação do timer:

    System.Timers.Timer timerJogar = new System.Timers.Timer(1000);

    Abraço!


    André Alves de Lima
    Microsoft MVP - Client App Dev
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima

    sexta-feira, 11 de novembro de 2016 14:36
    Moderador
  • Bom dia,

    Devido a falta de interação do autor dessa pergunta,

    essa thread está sendo fechada. Caso o problema ainda

    esteja ocorrendo, favor abrir uma nova thread.

    Atenciosamente,


    Robson William Silva

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    segunda-feira, 14 de novembro de 2016 11:23
    Moderador