Tengamos este formulario.
![[Imagen: Wtnce9d.png]](https://i.imgur.com/Wtnce9d.png)
Tiene dos gridviews, tres Label y un Listbox.
Al pulsar el botón Colorize quiero que los gridviews y los labels cambien de colores para lo que hacemos una función que lo haga y que descienda recursivamente por el árbol de contenedores:
Código:
Private Sub ColorizeGrid(ctrl As Object)
Dim o As Object
Dim sClass As String
sClass = Object.Class(ctrl).Name
If sClass = "GridView" Or If sClass = "Label" Then ' Si es Gridview o Label cambiamos los colores
ctrl.Background = Color.lightGray
ctrl.Foreground = Color.DarkRed
Endif
If Object.Class(ctrl).Exist("Children") And If ctrl.Children.count > 0 Then 'Si es un contenedor, recursivo a sus hijos
For Each o In ctrl.Children
ColorizeGrid(o)
Next
Endif
End
Lo pulsamos y obtenemos ésto:
¡Oh, sorpresa! el ListBox también ha cambiado de colores. ¿Por qué? Pues porque internamente contiene un Gridview al que accedemos mediante la propiedad Children.
Esto pasaría con un treeview, o con cualquier objeto que contenga gridviews o Labels, etc.
¿A alguien se le ocurre cómo prevenir ésto y que sólo se coloreen los controles que deseamos?
Venga, a estrujarse el coco, que es una tontería pero me lleva loco.
Adjunto el proyectito de prueba.
Saludos