Visual Basic - linea de código para devolver el control al usuario y no ejecutar el resto del código actual

Life is soft - evento anual de software empresarial
 
Vista:
sin imagen de perfil

linea de código para devolver el control al usuario y no ejecutar el resto del código actual

Publicado por Frank (4 intervenciones) el 27/08/2017 02:55:08
Buenas tardes, quisiera saber algo muy sencillo: cual seria la linea de código que se aplica para "descartar/saltar" el código restante actual en proceso, y que no se ejecute, devolviendole el control al usuario; o sea, que el programa ya no ejecute la porción del código que estaría entre dicha linea de código "stop" hasta la parte del momento en que el programa tiene que esperar nuevos eventos por parte del usuario; esa parte del código que no sea ejecutada.

pero por favor no me malentendáis, no quiero detener el programa, pues este debe seguir corriendo y esperar nuevas ordenes por parte del usuario.

solo para ilustrar un poco por si no me se explicar:

1
2
3
4
5
6
7
8
9
Function detener(permiso As Byte)
 
    If (permiso = 1) Then
        lblexect.Text = "ejecucion detenida afirmativo"
        <<< aquí la linea de detener ejecución del resto del código >>>
    End If
 
    lblexect.Text = "ejecucion no detenida"
End Function

como veis, cada vez que un botón que llama a la función y le pasa el valor '1' es presionado, la label deberá imprimir siempre "ejecución detenida afirmativo", descartando a todo el resto de la función/programa sin salirse del programa, no importando cuantas veces sea presionado.

perdón si la pregunta es muy repetida/básica, pero es que voy empezando, y el tema es tan ambiguo que no pude ayudarme como quisiera con google.

gracias y saludos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Antoni Masana
Val: 1.259
Plata
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

linea de código para devolver el control al usuario y no ejecutar el resto del código actual

Publicado por Antoni Masana (565 intervenciones) el 27/08/2017 20:39:11
No se se he entendido bien la pregunta, pero viendo el ejemplo creo que la respuesta es esto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Function detener(permiso As Byte)
    If (permiso = 1) Then
        lblexect.Text = "ejecucion detenida afirmativo"
        Exit Function    ' <<< aquí la linea de detener ejecución del resto del código >>>
    End If
    lblexect.Text = "ejecucion no detenida"
End Function
 
Sub detener(permiso As Byte)
     If (permiso = 1) Then
        lblexect.Text = "ejecucion detenida afirmativo"
        Exit Sub    ' <<< aquí la linea de detener ejecución del resto del código >>>
    End If
    lblexect.Text = "ejecucion no detenida"
End Sub

A parte de que tu código es mas bien un Subproceso y no una Function te pongo la salida de los dos.
Quizas podria fuincionar en End Sub pero puede que al compilador no le guste un Sub y dos End Sub
Otra forma de hacerlo es a base de if / else pero puede ser muy engorroso.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil

linea de código para devolver el control al usuario y no ejecutar el resto del código actual

Publicado por Frank (4 intervenciones) el 28/08/2017 19:00:13
si, OK, solamente que esa linea de terminar todos los subprocesos actuales estaría fuera del sub que debe ser terminado, en otro sub:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
sub boton ()
 
<<< algo de codigo aqui >>>
detener()
<<< algo de código aquí >>>
detener()
<<< mas código aquí >>>
(repetir lo anterior varias veces...)
 
end sub
 
 
sub detener ()
 
<<< algo de codigo aqui >>>
<<< linea stop/terminar que hace exit, pero sobre todo del sub del botón >>>
 
end sub

he quitado ifs y parámetros que tenia y he simplificado (no es realmente la estructura), para que no quiten la atención de la verdadera duda, aunque obviamente eso ha hecho que esto no parezca tener mucho sentido.
ciertamente como usted dice: algunos ifs de chequeo con algún contador, pero, como en mi caso se tendría que seguir ejecutando mucho código cuando ya no tiene caso, seria ineficiente, y lo que estaría buscando con esto seria la eficiencia.

muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.259
Plata
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

linea de código para devolver el control al usuario y no ejecutar el resto del código actual

Publicado por Antoni Masana (565 intervenciones) el 29/08/2017 07:07:20
No entiendo si ya has solucionado el problema o lo sigues teniendo. Viendo tu código empiezo a intuir por donde va la cosa pero como no estoy seguro no voy a dar más explicaciones para no liarlo.
Si no solucionaste el problema cuéntame en forma esquemática que deseas hacer y te ayudo a hacerlo.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

linea de código para devolver el control al usuario y no ejecutar el resto del código actual

Publicado por Frank (4 intervenciones) el 29/08/2017 22:36:08
cierto, la connotación (creo) de mi anterior mensaje me quedo ambigua.

la idea es terminar el sub "boton" (o si se puede también todos los subs actuales pendientes) con algún comando en el sub "detener" -que fue llamado por el sub botón- en un momento determinado en medio del código.

He estado buscando por Internet y por una lectura de este enlace: http://www.vbforums.com/showthread.php?555667-How-to-exit-a-sub-from-another-sub , parece que eso no se puede.

Todo lo que he encontrado en otras partes son mas bien sugerencias para cambios en las estructuras de los códigos de los que preguntan en los foros, pero hay buenas noticias: ya lo intente en el compilador, y parece que si se puede poner un indeterminado numero de lineas ... exit sub ... , ya que, al menos a mi, en la ide que tengo que es Visual Studio 2015 no me ha presentado ninguna advertencia ni ningún señalamiento de error, por lo que, si después de todo veo que realmente no se puede lo que inicialmente tenia en mente, pues supongo que procederé a mover la linea de exit de adentro del sub detener a repetirla adentro del sub boton, a inmediatamente después de cada una de las llamadas al sub detener (que entonces solo realizara otro código, ya no detendrá nada) en el segundo caso que puse por ejemplo.

bueno, muchas gracias, me ha servido, ya que como digo, creo que si tendré que usar los exit sub, solo faltara lidiar un poco con limpieza de variables, pero ya podre avanzar. y un saludo también de mi parte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Andres Leonardo
Val: 3.117
Oro
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

linea de código para devolver el control al usuario y no ejecutar el resto del código actual

Publicado por Andres Leonardo (1799 intervenciones) el 30/08/2017 00:18:54
pero un exit sub y con eso devuelve el control al usuario y listo....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Antoni Masana
Val: 1.259
Plata
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

linea de código para devolver el control al usuario y no ejecutar el resto del código actual

Publicado por Antoni Masana (565 intervenciones) el 30/08/2017 13:17:08
Formas de salir de un bucle y un proceso

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Sub Demo()
    Dim demoNum As Single
    ' Set up an infinite loop.
    Do
        For i As Integer = 1 To 10000000
            demoNum = Int(Rnd() * 100)
            Select Case demoNum
                Case 17 : Exit For
                Case 29 : Exit Do
                Case 54 : Exit Sub
            End Select
        Next i
    Loop
End Sub

Con el Exit For finaliza el Bucle FOR
Con el Exit Do finaliza el Bucle FOR y el Bucle Loop
Con el Exit Sub finaliza el Bucle FOR, el Bucle Loop y proceso Demo

Para realizar una procedimiento que tiene bucles y códigos ejecutar dependiendo de un resultado u otro.
Voy haber si lo puedo hacer graficamente y en código:

[Sub_01] represeta un evento Sub
<Fun_01> refpresenta una funcion

1
2
3
4
5
6
7
8
9
10
11
12
13
[Sub_00]
    [Sub_01]
    [Sub_02]
    if <Fun_01> then
       [Sub_03]
       if <Fun-02> then Exit Sub
       [Sub_04]
       A=<Fun_04>
    else
       [Sub_05]
       If <Fun_05> then [Sub_06]
    end If
End Sub

Si se entiende el codigo el proceso Sub llama a diferentes subprocesos y funciones la diferencia entre uno y otro es que el segundo de vuelve un valor que puede asignarse a una varible (línea 8) o un valor logico para tomar una decision segun el resultado (True o False), líneas 4, 6 y 11

Esta página tienes informacion sobre las distintas aplicaciones del Exit

https://msdn.microsoft.com/es-es/library/t2at9t47(v=vs.90).aspx

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

linea de código para devolver el control al usuario y no ejecutar el resto del código actual

Publicado por Frank (4 intervenciones) el 30/08/2017 17:22:41
No, no, simplemente:

Finalizar un sub, con alguna linea en OTRO sub, eso ya vi que NO se puede.

(mismo problema que en el link que puse anteriormente)

gracias por vuestra ayuda, pero como dije, YA doy este problema por resuelto.

buenas tardes, disculpad todo el rollo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar