none
Como controlar uma Variável ao longo do tempo em um Windows Form com Timer? RRS feed

  • Pergunta

  • Amigos, essa é a minha primeira postagem.

    Criei uma aplicação com Windows Form com alguns eventos que estão funcionando bem quando eu passo a variável de controle por um método, mas eu quero que essa variável mude de 1 a 4 e quando chegar a 4, volte a 1, num loop infinito.

    Após alguns testes, concluí que o Atributo  double cont simplesmente não conta. Eu declaro inicialmente cont como 1 e coloquei esse código no método timer1 (desde já agradeço, não estou conseguindo colocar esse código mais apresentável aqui):

        

    privatevoidtimer1_Tick(objectsender, EventArgse) //este método controla o ciclo de etapas


            {

                cont += 0.05;

               

    if(cont == 10.0)

                {

                    etapa = 2;

                   

    this.ControlaEtapa();

                }

               

    elseif(cont == 20.0)

                {

                    etapa = 3;

                   

    this.ControlaEtapa();

                }

               

    elseif(cont == 30.0)

                {

                    etapa = 4;

                   

    this.ControlaEtapa();

                }

               

    elseif(cont == 40.0)

                {

                    timer1.Stop();

                }

               

    else


                {

                    ciclos = 2;

                    etapa = 5;

                   

    this.ControlaEtapa();

                    timer1.Stop();

                }

            }

    sábado, 16 de janeiro de 2016 16:49

Respostas

  • Boa tarde.

    Poderias testar o seguinte?

            private void privatevoidtimer1_Tick(object sender, EventArgs e) //este método controla o ciclo de etapas
            {
                cont += 0.5;
    
                if (cont == 100.0)
                {
                    etapa = 2;
    
                    this.ControlaEtapa();
                }
    
                else if (cont == 200.0)
                {
                    etapa = 3;
    
                    this.ControlaEtapa();
                }
    
                else if (cont == 300.0)
                {
                    etapa = 4;
    
                    this.ControlaEtapa();
                }
    
                else if (cont == 400.0)
                {
                    timer1.Stop();
                }
    
                else
                {
                    ciclos = 2;
                    etapa = 5;
    
                    this.ControlaEtapa();
                    timer1.Stop();
                }
            }

    Ou seja, deixe o count vezes 10.

    Testei um Tick simples aqui complementando 0.05 e depois de um momento o count bugou.

    Não tentei entender o motivo de ter dado esse problema; caso alguém saiba, agradeço.

    De qualquer forma, utilizando o count += 0.5 funcionou sem problemas.

    Edit: Dica para próximas threads: tente postar códigos utilizando o blogo de código, pois assim fica melhor para que a gente possa visualizar.


    Att., Rafael Simor


    • Editado SimorC sábado, 16 de janeiro de 2016 17:37
    • Marcado como Resposta Marcos SJ segunda-feira, 18 de janeiro de 2016 12:20
    sábado, 16 de janeiro de 2016 17:36
  • Boa noite,

    O que você pode fazer é criar uma classe estática e declarar seus objetos, utilizando-os no seu evento OnTick.

    public static class Controle
    (
       public static int Ciclo
       {
          get;
          set;
       }
    
       public static int Etapa
       {
          get;
          set;
       }
    )

    Abs.

    Bruno Destro


    Dicas de programação em .net, C# e SQL - http://smcode.com.br/

    • Marcado como Resposta Marcos SJ segunda-feira, 18 de janeiro de 2016 12:21
    sábado, 16 de janeiro de 2016 22:19

Todas as Respostas

  • Boa tarde.

    Poderias testar o seguinte?

            private void privatevoidtimer1_Tick(object sender, EventArgs e) //este método controla o ciclo de etapas
            {
                cont += 0.5;
    
                if (cont == 100.0)
                {
                    etapa = 2;
    
                    this.ControlaEtapa();
                }
    
                else if (cont == 200.0)
                {
                    etapa = 3;
    
                    this.ControlaEtapa();
                }
    
                else if (cont == 300.0)
                {
                    etapa = 4;
    
                    this.ControlaEtapa();
                }
    
                else if (cont == 400.0)
                {
                    timer1.Stop();
                }
    
                else
                {
                    ciclos = 2;
                    etapa = 5;
    
                    this.ControlaEtapa();
                    timer1.Stop();
                }
            }

    Ou seja, deixe o count vezes 10.

    Testei um Tick simples aqui complementando 0.05 e depois de um momento o count bugou.

    Não tentei entender o motivo de ter dado esse problema; caso alguém saiba, agradeço.

    De qualquer forma, utilizando o count += 0.5 funcionou sem problemas.

    Edit: Dica para próximas threads: tente postar códigos utilizando o blogo de código, pois assim fica melhor para que a gente possa visualizar.


    Att., Rafael Simor


    • Editado SimorC sábado, 16 de janeiro de 2016 17:37
    • Marcado como Resposta Marcos SJ segunda-feira, 18 de janeiro de 2016 12:20
    sábado, 16 de janeiro de 2016 17:36
  • Boa noite,

    O que você pode fazer é criar uma classe estática e declarar seus objetos, utilizando-os no seu evento OnTick.

    public static class Controle
    (
       public static int Ciclo
       {
          get;
          set;
       }
    
       public static int Etapa
       {
          get;
          set;
       }
    )

    Abs.

    Bruno Destro


    Dicas de programação em .net, C# e SQL - http://smcode.com.br/

    • Marcado como Resposta Marcos SJ segunda-feira, 18 de janeiro de 2016 12:21
    sábado, 16 de janeiro de 2016 22:19