none
Detener la ejecución de código Recursivo RRS feed

  • Pregunta

  • Buenos Días!

    Estoy haciendo una pequeña aplicación, que es un sorteo en el que los números a elegir están en un listbox. Cuando se inicia el sorteo el listbox va recorriendo todos los items hasta el que usuario hace click en un picture. Entonces se supone que el recorrido del listbox se detiene y obtiene el item seleccionado en ese momento. Para ello utilizo una variable boolean ('SorteoStop').

    El problema es que a veces hay que clickear varias veces para que se detenga el recorrido. ¿Donde debo poner el SorteoStop para que el código se detenga inmediatamente?

    Este es mi código:

        Private Sub picStart_Click(sender As Object, e As EventArgs) Handles picStart.Click

               'Picture de iniciar el sorteo

                SorteoStop = False
                Call SelecciónSorteo()
        End Sub

        Private Sub picRun_Click(sender As Object, e As EventArgs) Handles picRun.Click

                'Picture para detener el sorteo

                SorteoStop = True
        End Sub

    Private Sub SelecciónSorteo()
            Try
                lbInfoSel.Text = ""
                lbInfoSel.ForeColor = Color.Black
                picRun.Visible = True
                picStart.Visible = False
                Application.DoEvents()
                '
    EtiRepite:
                If BoxPreg.SelectedIndex = -1 Then BoxPreg.SelectedIndex = 0
                For iRep As Integer = BoxPreg.SelectedIndex To BoxPreg.Items.Count - 1
                    Application.DoEvents()
                    If SorteoStop = True Then Exit For
                    BoxPreg.SelectedIndex = iRep
                    Application.DoEvents()
                Next
                If SorteoStop = False Then
                    BoxPreg.SelectedIndex = 0
                    GoTo EtiRepite
                End If
                '
                Dim NumSel As Integer = BoxPreg.SelectedIndex
                lbInfoSel.Text = BoxPreg.Items(NumSel)
                boxSel.Items.Add(BoxPreg.Items(BoxPreg.SelectedIndex))
                BoxPreg.Items.RemoveAt(BoxPreg.SelectedIndex)
                lbSelN.Text = boxSel.Items.Count & " / " & txNpreg.Text
                If boxSel.Items.Count >= CInt(txNpreg.Text) Then
                    btnExa.Enabled = True
                    picRun.Visible = False
                    picStart.Visible = False
                    lbInfoSel.Text = "SORTEO FINALIZADO"
                Else
                    SorteoStop = False
                    picRun.Visible = False
                    picStart.Visible = True
                End If
                If NumSel >= BoxPreg.Items.Count - 1 Then
                    BoxPreg.SelectedIndex = 0
                Else
                    BoxPreg.SelectedIndex = NumSel
                End If
            Catch ex As Exception
                MsgBox(ex.ToString)
            End Try
        End Sub

    domingo, 30 de agosto de 2020 11:18