none
Simplificar varios For Each RRS feed

  • Pregunta

  • Hola

    Como puedo simplificar lo siguiente

                    Dim b1, b2 As Integer
                    For Each ctrl As Control In (PnlProgresoA.Controls)'Primer Panel
                        If ctrl.GetType() Is GetType(Label) And ctrl.Name.StartsWith("LblActs") Then If ctrl.ForeColor = Color.Red Then b1 = 1
                    Next
                    For Each ctrl As Control In (PnlProgresoB.Controls)'Segundo Panel
                        If ctrl.GetType() Is GetType(Label) And ctrl.Name.StartsWith("LblActs") Then If ctrl.ForeColor = Color.Red Then b2 = 1
                    Next
                    For Each ctrl As Control In (PnlProgresoA.Controls)
                        If b1 = 1 And b2 = 1 Then ctrl.ForeColor = Color.Black
                    Next
                    For Each ctrl As Control In PnlProgresoB.Controls
                        If b2 = 1 And b1 = 1 Then ctrl.ForeColor = Color.Black
                    Next
                    b1 = 0 : b2 = 0
    Muchas gracias.

    lunes, 4 de febrero de 2019 23:07

Todas las respuestas

  • Hola  Rafael F.M

    Gracias por levantar tu consulta en los foros de MSDN. Con respecto a la misma, te comento que estaremos realizando una revisión a profundidad acerca del inconveniente que se te está presentando.

    Proporcionaremos una respuesta lo más pronto posible.

    Gracias por usar los foros de MSDN.

    Pedro Alfaro
     ____

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde. 

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.  

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.
    lunes, 4 de febrero de 2019 23:33
    Moderador
  • Para evitar duplicar el código podrías ponerlo en una subrutina y luego llamarla desde los dos bucles. Por ejemplo, para los dos primeros:

    Sub ProcesarLabels(ctrl as Control, ByRef Integer b)
         If ctrl.GetType() Is GetType(Label) And ctrl.Name.StartsWith("LblActs") Then If ctrl.ForeColor = Color.Red Then b = 1
    End Sub
    
    ...
    
    For Each ctrl As Control In (PnlProgresoA.Controls)'Primer Panel
        ProcesarLabels(ctrl, b1)
    Next
    For Each ctrl As Control In (PnlProgresoB.Controls)'Segundo Panel
        ProcesarLabels(ctrl, b2)
    Next

    Y lo mismo harías con los otros dos bucles.

    Otra alternativa que se me ocurre es construir una única colección con todos los controles de los dos paneles, y luego unificar los dos bucles para que recorran esa única colección.


    martes, 5 de febrero de 2019 7:21