https://foro.gambas-es.org/viewtopic.php?f=4&t=7994&p=48080#p48080
-----------------------------------
Harpo
Domingo, 26 Abril 2020, 18:15

Re: Problema Con Control De Errores Y Return En Una Función
-----------------------------------
[quote user="tincho" post="48079"]Hay que comprobar si hay error (si no es null) antes de poder ver si es > 0.
[code linenumbers=false syntax=gambas]
Public Sub btCargar_Click()

  With TreeView1
    .Add("*", "Nodo Root")
    .Add("Child1", "Hijo 1",, "*")
    .Add("Child1-1", "Sub Hijo 1-1",, "Child1")
    .Add("Child1-2", "Sub Hijo 1-2",, "Child1")
    .Add("Child1-3", "Sub Hijo 1-3",, "Child1")
    .Add("Child1-4", "Sub Hijo 1-4",, "Child1")

    .Add("Child2", "Hijo 2",, "*")
    .Add("Child2-1", "Sub Hijo 2-1",, "Child2")
    .Add("Child2-2", "Sub Hijo 2-2",, "Child2")
    .Add("Child2-3", "Sub Hijo 2-3",, "Child2")
    .Add("Child2-4", "Sub Hijo 2-4",, "Child2")
  End With

Finally
  If Error Then ' Agregue esto a tu código
    If Error.Code > 0 Then
      Message.Info("Error: " & Error.Text & gb.CrLf & "Módulo: " & Error.Where)
    Endif
  Endif ' Agregue esto a tu código

Catch
  Message.Error("Errorx: " & Error.Text & gb.CrLf & "Módulo: " & Error.Where)

End

Public Sub btSalir_Click()

  Me.Close()

End
[/code]
Saludos.[/quote]

Gracias por el apunte.
Lo que intento es encontrar una manera de evitar que errores internos gestionados con "Try" en el control TreeView, y pasa lo mismo con ColumnView y GridView, afecten a funciones de carga de datos que funcionan correctamente en nuestros programas. 
La cláusula Finally se ejecuta antes que Catch en caso de error, si hay un Return en Finally no se ejecuta Catch y no muestra el error, por eso la idea de usar la sentencia: If Error.Code <= 0 Then Return True. 
En caso de error de programación dentro de la función de carga no ejecutaría el Return y continuaría con Catch mostrando el error.
El problema es que Error.Code es mayor que 0 por el funcionamiento interno del TreeView, no por error de la función de carga, y me lo descoloca todo. 

Y yo solo veo dos alternativas:
- Parchear los controles estándar (no me gusta).
- Justo antes de la cláusula Finally poner una sentencia Error.Clear() asumiendo que si ha llegado hasta ahí la ejecución no ha habido ningún error propio.

Creo que no me explico correctamente  :cry:


