Jump to content

Parar ciclo While


zephirus
 Share

Recommended Posts

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?

Link to comment
Share on other 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... 😁

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...

Link to comment
Share on other 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?

Link to comment
Share on other 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"

Link to comment
Share on other 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...

Link to comment
Share on other 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.

"There are two kinds of programmers. Those who write something to get the work done and those who want to write good code."João BrandãoWebsite e blog: http://jamab.blogspot.com/

Link to comment
Share on other 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"

Link to comment
Share on other 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
Link to comment
Share on other 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
Link to comment
Share on other 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.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.