• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

zephirus

Parar ciclo While

15 mensagens neste tópico

Olá mais uma vez.

Imaginem a seguinte situação:

Tenho uma form com um label com text = "" e um botão. Esse botão tem text="Iniciar". Ao carregar nele, quero que o text passe a "Parar" e corra o seguinte código:

x = 1000
While x > 5
   label.text = x
   x = x - 1
End While

O que eu quero é que quando o botão tem text = "Parar", ao carregar nele, o processo seja parado e o label volte de novo a ter text = "".

A minha ideia era fazer assim:

Sub Button.Click(....)
x = 1000
   Select Case Button.text
      Case = "Iniciar"
         Button.text = "Parar"
         While x > 5
         label.text = x
         x = x - 1
         End While
      Case = "Parar"
         Button.text = "Iniciar"
         Label.text = ""
End Sub

mas isto não está a funcionar. Anyone?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Nas propriedades poes o text do botao com "Iniciar"

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

        If Button1.Text = "Iniciar" Then

            Button1.Text = "Parar"

            Exit Sub

        Else

            If Button1.Text = "Parar" Then

                'fazer parar o While

                Button1.Text = "Iniciar"

            End If

        End If

    End Sub

Depois fazes o que queres consoante o nome do botao... :biggrin:

deve haver uma maneira melhor, mas fica a sugestão de quem tenta se desenrascar...

outra solucao era teres um botao em cima do outro e fazer desaparecer um quando carregasses nele...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não funciona. Não estou a conseguir fazer isto...

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

        If Button2.Text = "Iniciar" Then

            Button2.Text = "Parar"

            Exit Sub

        Else

            If Button2.Text = "Parar" Then

                MessageBox.Show("fazer parar o While")

                Button2.Text = "Iniciar"

            End If

        End If

    End Sub

Quando carregas no botao quando diz "parar" dispara um messagebox?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não funciona. Não estou a conseguir fazer isto...

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

        If Button2.Text = "Iniciar" Then

            MessageBox.Show("fazer iniciar o While")

            Button2.Text = "Parar"

            Exit Sub

        Else

            If Button2.Text = "Parar" Then

                MessageBox.Show("fazer parar o While")

                Button2.Text = "Iniciar"

            End If

        End If

    End Sub

Tens que por na propriedade text do botao o seguinte valor "Iniciar"

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A messagebox aparece. Aliás, tudo o que eu puser no código é feito. O problema nesse teu exemplo é que depois de carregar no OK da messagebox, continua a ser feito o ciclo while  ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A messagebox aparece. Aliás, tudo o que eu puser no código é feito. O problema nesse teu exemplo é que depois de carregar no OK da messagebox, continua a ser feito o ciclo while  ;)

Enquanto o While funciona podes carregar no botao...?

tenta fazer isso , inicialmente, em botoes separados..., ou seja, dois botões..um para iniciar e outro para parar...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

zephirus,

Podes explicar melhor o que queres fazer e quanto tempo dura o ciclo (+/-) ?

É que com o código que mostraste não deve nem demorar um segundo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pelo que vejo a unica forma de parares o ciclo é ires testando o texto do botão dentro do ciclo while. MAs esse ciclo é muito rapido para conseguires parar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pelo que vejo a unica forma de parares o ciclo é ires testando o texto do botão dentro do ciclo while. MAs esse ciclo é muito rapido para conseguires parar.

foi por isso que perguntei se Enquanto o While funciona podes carregar no botao...?

é que o while pode ter passado e nao vai a tempo de parar...

tb é possivel alongar o while com "tempo"

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Vê lá se é isto ...

Private ExitWhile As Boolean

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click                               

        Select Case Button1.Text                                
            Case Is = "Iniciar"                               
                Button1.Text = "Parar"                                      
                ExitWhile = False                                 
                Dim x As Integer = 1000                                       
                While x > 5                           
                    Label1.Text = x
                    x = x - 1
                    Application.DoEvents()
                    If ExitWhile Then Exit While
                End While
            Case Else
                ExitWhile = True
                Button1.Text = "Iniciar"
                Label1.Text = ""
        End Select

End Sub

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ou então (um pouco mais fácil):

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click                                        
    Select Case Button1.Text
        Case Is = "Iniciar"                                               
              Button1.Text = "Parar"                                                      
              Dim x As Integer = 1000
              While x > 5
                    Label1.Text = x
                    x = x - 1                  
                    Application.DoEvents()
                    If Button1.Text = "Iniciar" Then Exit While
               End While
          Case Else
               Button1.Text = "Iniciar"
              Label1.Text = ""
         End Select
End Sub

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A questão do tempo do ciclo é irrelevante neste caso pois o código que coloquei é um exemplo. Nem é esse o meu código. No meu programa o ciclo pode durar uma milesima ou 10min. No caso de demorar muito pouco, quando chega ao fim, o botão passa para "Iniciar" de novo e fica tudo ok. Quando demora bastante mais é que eu tenho tempo para carregar no botão (que já tem text="Parar") e não pára o ciclo.

Vou ver as outras sugestões que me deram.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bom, já consegui. Usei a versão (um pouco mais fácil) do jpaulino. Obrigado  ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

(um pouco mais fácil) porque usa menos uma variável ...  ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora