Comunidad Gambas-es
Salir del bucle for each --- next - Versión para impresión

+- Comunidad Gambas-es (https://gambas-es.org)
+-- Foro: Gambas (https://gambas-es.org/forum-3.html)
+--- Foro: General (https://gambas-es.org/forum-4.html)
+--- Tema: Salir del bucle for each --- next (/thread-851.html)



Salir del bucle for each --- next - YuHi - 21-03-2022

Buen día.
Voy a plantear mi duda, espero explicarme bien.
Tengo un formulario principal (FMain) que contiene dos Panel (panel1 y panel2).
Un formulario (Frequest) en el cual tengo un gridview  del tipo cGrid ( que es una clase). Ahí se despliegan datos de una base de datos.
Desde FMain se pueden generar dos objetos tipo Frequest que se incrustarán en los paneles  Panel1 y Panel2. Puedo agregar y quitar lineas de los gridview. Hasta ahí, el programa trabaja bien. 

Mi problema surge cuando trato de modificar esos datos automáticamente haciendo un click en un botón. Utilicé el siguiente código:

  mm = 0
    For Each tempForm In FMain.Panel1.Children
        ww = tempForm
        For Each tempGrid In ww.Children
            tt = tempGrid
            If tt Is CGrid Then
                tt.Select
                mm = tt.Rows.Count
                If mm <> 0 Then 
                    For n = 0 To mm - 1
                        LeerModificarGridLinea(n, tt)
                    Next
                Endif
            Endif
            mm = 0
        Next
    Next

Empieza bien, busca los objetos dentro del Panel1 que a su vez contiene el objeto Frequest que contiene el objeto Gridview. Ejecuta la subrutina LeerModificarGridLinea. El problema viene cuando trata de buscar otro objeto Gridview. Al parecer encuentra otro más (lo cual se supone que no existe), traté de poner una variable mm que indica cuantas filas tiene ese Gridview. 
Cuando encuentra por primera vez el gridview, mm = 0 cambia al valor m=9 (como ejemplo) lee bien todas las líneas, en la segunda vuelta,  el valor de mm lo reseteo a mm= 0 y al encontrar el "segundo gridview"  vuelve a tomar el valor de m= 9 pero ahora sin valores en las celdas, generando error.

¿Me pueden dar una idea de cómo puedo solucionarlo?  Pensaba forzar la salida ( en virtud de que no va a existir nunca un segundo gridview dentro de Panel 1) . Pero no tengo idea de cómo forzar esa "salida". 
Por lo demás, creo que forzar este tipo de salidas puede generar muchos problemas.


RE: Salir del bucle for each --- next - tincho - 22-03-2022

(21-03-2022, 20:52)YuHi escribió: Pensaba forzar la salida

Código:
  mm = 0
    For Each tempForm In FMain.Panel1.Children
        ww = tempForm
        For Each tempGrid In ww.Children
            tt = tempGrid
            If tt Is CGrid Then
                tt.Select
                mm = tt.Rows.Count
                If mm <> 0 Then 
                    For n = 0 To mm - 1
                        LeerModificarGridLinea(n, tt)
                    Next
                Endif
                Break ' Esto hace que se termine el bucle
            Endif
            mm = 0
        Next
    Next