none
usando if no Timer RRS feed

  • Pergunta

  • Não consigo meudar a label do meu projeto em determinados tempos com o timer

    veja o code no load

    timer1.Start();
                    timer1.Interval = 2000;
                    timer1.Enabled = true;
    vija o codigo no Tick do timer
     if (timer1.Interval == 100)
                {
                    label1.Text = "Saindo";
                    label2.Text = "Muito Obrigado";
                    timer1.Enabled = false;
                    Application.Exit();
                }
    alguém pode me dizer meu erro? porque os label não mudam e o app fecha =/



    sexta-feira, 28 de março de 2014 17:42

Respostas

  • Interval é o intervalo de tempo que o timer espera até disparar o evento Tick. Se for definido 'Interval = 2000' ele continuará sendo 2000 até que se indique um novo valor para o mesmo, por isso não entra na condição.

    Para solucionar utilize uma variável conforme ex. abaixo.

            private void button1_Click(object sender, EventArgs e)
            {
                timer1.Interval = 1000;
                timer1.Enabled = true;
            }
    
            int x = 0;
    
            private void timer1_Tick(object sender, EventArgs e)
            {
                x++;
                if (x == 1)
                {
                    label1.Text = "Saindo..";
                }
                else if (x == 3)
                {
                    timer1.Enabled = false;
                    Application.Exit();
                }
            }

    • Marcado como Resposta Ulisses.Hen sexta-feira, 4 de abril de 2014 16:40
    sexta-feira, 28 de março de 2014 23:29
  • Entao cara,

    o certo seria usar o conceito de Threads,ou seja,processos,no seu caso deveria ter a Thread principal que cuida do Form,e uma Thread que cuida do processo no qual voce quer executar (Programa Multi-Threads) bom,a grosso modo seria basicamente isso,portanto,insira no seu FORM um componente BAck Ground Work,o segundo item abaixo do Pointer,e siga o codigo:

    private void button1_Click(object sender, EventArgs e) { //evita dar o erro de cruzamento de threads Control.CheckForIllegalCrossThreadCalls = false; bg.RunWorkerAsync(); } private void bg_DoWork(object sender, DoWorkEventArgs e) { for (int i = 0; i <= 100; i++) { if (i == 50) { this.label1.Text = "Adeus.."; //da tempo de ver o efeito a thread permanece parada durante 1000 MS (unidade de medida MiliSegundos) Thread.Sleep(1000); } else if (i == 100) { this.label1.Text = "Hail Satan HA HA HA HA.."; //mesma coisa . . . Thread.Sleep(1000);
    Application.Exit();

    } } }


    Sem Timer apenas usando Threads...Funcional ;)


    Microsoft Technology Associate (MTA)


    • Editado Eduardo xUni sábado, 29 de março de 2014 01:03
    • Sugerido como Resposta Eduardo Cury sábado, 29 de março de 2014 02:01
    • Marcado como Resposta Giovani Cr segunda-feira, 31 de março de 2014 19:21
    sábado, 29 de março de 2014 01:02

Todas as Respostas

  • Ulisses.Hen,

    Ele não entra no if por que vc definiu o interval como 2000  e ta perguntando no if se for 100 .... por isso não entra !!!



    Diego Almeida Barreto
    System Analyst / Software Developer


    sexta-feira, 28 de março de 2014 17:50
  • Ola Diego obrigado consegui mudar mas agora não fecha e.e e se aumentar o valor não funciona veja os code.

    timer1.Start();               

    timer1.Interval = 200;               

    timer1.Enabled = true;


    if (timer1.Interval == 600)
                {
                    label2.Text = "Saindo..";
                }
                else if (timer1.Interval == 1000)
                {
                    timer1.Enabled = false;
                    Application.Exit();
                }

    sexta-feira, 28 de março de 2014 18:02
  • Ulisses.Hen

    ele não vai fechar , pois o interval esta como 200  e vc esta fazendo o if no 600 e 1000 .... me fala o que vc precisa fazer ai pra eu poder ajudar !!!!



    Diego Almeida Barreto
    System Analyst / Software Developer

    sexta-feira, 28 de março de 2014 18:19
  • Boa Tarde, se você deseja que o Label mude, altere o interval dele para 2000

                

     private void button2_Click(object sender, EventArgs e)
            {
                timer1.Interval = 2000;
                timer1.Enabled = true;

            }

            private void timer1_Tick(object sender, EventArgs e)
            {
                if (timer1.Interval.Equals(1200))
                {
                    label1.Text = "Saindo..";
                }
                else if(timer1.Interval.Equals(2000))
                {
                    timer1.Enabled = false;
                    Application.Exit();
                }
            }

    Agora se bem entendi, você deseja que apareça a mensagem 'Saindo' e depois ele feche o formulário, então você pode fazer desta forma

    private void button2_Click(object sender, EventArgs e)
            {
                timer1.Interval = 2000;
                timer1.Enabled = true;
                
            }

            private void timer1_Tick(object sender, EventArgs e)
            {
                if (timer1.Interval.Equals(2000))
                {
                    label1.Text = "Saindo..";
                }

                System.Threading.Thread.Sleep(2000);
                    timer1.Enabled = false;
                    Application.Exit();
                
            }


    Se a Resposta foi útil, por favor marque como válida assim esta contribuindo para gratificar todo o esforço de nossos colegas, Abraço. Paulo Caleffi

    sexta-feira, 28 de março de 2014 19:32
  • Bom é o seguinte eu estou ativando o Timer no Evento Loader, e o Tick do timer eu queria que ele mudasse o label1 e apos 1 ou 2 segundo fechas o aplicativo tentei os dois exemplos do Paulo mas não muda o Label, ele sai mas o label nao muda =/, alguem ajuda?
    • Editado Ulisses.Hen sexta-feira, 28 de março de 2014 20:32
    sexta-feira, 28 de março de 2014 20:19
  • Interval é o intervalo de tempo que o timer espera até disparar o evento Tick. Se for definido 'Interval = 2000' ele continuará sendo 2000 até que se indique um novo valor para o mesmo, por isso não entra na condição.

    Para solucionar utilize uma variável conforme ex. abaixo.

            private void button1_Click(object sender, EventArgs e)
            {
                timer1.Interval = 1000;
                timer1.Enabled = true;
            }
    
            int x = 0;
    
            private void timer1_Tick(object sender, EventArgs e)
            {
                x++;
                if (x == 1)
                {
                    label1.Text = "Saindo..";
                }
                else if (x == 3)
                {
                    timer1.Enabled = false;
                    Application.Exit();
                }
            }

    • Marcado como Resposta Ulisses.Hen sexta-feira, 4 de abril de 2014 16:40
    sexta-feira, 28 de março de 2014 23:29
  • Entao cara,

    o certo seria usar o conceito de Threads,ou seja,processos,no seu caso deveria ter a Thread principal que cuida do Form,e uma Thread que cuida do processo no qual voce quer executar (Programa Multi-Threads) bom,a grosso modo seria basicamente isso,portanto,insira no seu FORM um componente BAck Ground Work,o segundo item abaixo do Pointer,e siga o codigo:

    private void button1_Click(object sender, EventArgs e) { //evita dar o erro de cruzamento de threads Control.CheckForIllegalCrossThreadCalls = false; bg.RunWorkerAsync(); } private void bg_DoWork(object sender, DoWorkEventArgs e) { for (int i = 0; i <= 100; i++) { if (i == 50) { this.label1.Text = "Adeus.."; //da tempo de ver o efeito a thread permanece parada durante 1000 MS (unidade de medida MiliSegundos) Thread.Sleep(1000); } else if (i == 100) { this.label1.Text = "Hail Satan HA HA HA HA.."; //mesma coisa . . . Thread.Sleep(1000);
    Application.Exit();

    } } }


    Sem Timer apenas usando Threads...Funcional ;)


    Microsoft Technology Associate (MTA)


    • Editado Eduardo xUni sábado, 29 de março de 2014 01:03
    • Sugerido como Resposta Eduardo Cury sábado, 29 de março de 2014 02:01
    • Marcado como Resposta Giovani Cr segunda-feira, 31 de março de 2014 19:21
    sábado, 29 de março de 2014 01:02