Ayuda sobre un tema de controles. - 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: Ayuda sobre un tema de controles. (/thread-1434.html) |
Ayuda sobre un tema de controles. - Shordi - 04-07-2023 Tengamos este formulario. 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) 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 RE: Ayuda sobre un tema de controles. - Harpo - 04-07-2023 Así a bote pronto.... Código: Private Sub ColorizeGrid(ctrl As Object) Elimina aquellos GridView o Label embebidos en un Usercontrol. Se puede añadir los que estén en un Usercontainer. Habría que probarlo con otros controles. Un saludo, Harpo. RE: Ayuda sobre un tema de controles. - tercoide - 04-07-2023 Para mi la solución ideal seria dejar un "rastro" ya sea en el Name, en el Group o en el Tag para sean aplicables (o no) al cambio de "skin" del programa. RE: Ayuda sobre un tema de controles. - Shell - 04-07-2023 Aun no me he enterado. ¿ Entonces no quieres que se coloreé el ListBox ?. Código: ... RE: Ayuda sobre un tema de controles. - Shordi - 04-07-2023 Cita:¿ Entonces no quieres que se coloreé el ListBox ?.No exactamente: No quiero que se coloree ningún control contenido en un control que no sea un contenedor... no sé si me explico. Listbox contiene un gridview, pero Listbox mismo no es un contenedor de controles "per se". Cita:Para mi la solución ideal seria dejar un "rastro" ya sea en el Name, en el Group o en el Tag para sean aplicables (o no) al cambio de "skin" del programa.Así no fallas, pero no te vale para cualquier control "normal", que no lleve ese Tag, o Nombre o lo que sea. Además te obliga a, en tiempo de diseño, ir recordando y colocando qué tag debe tener qué control, etc. y yo estoy buscando algo más universal. La solución de Harpo: Código: [code] Ya os contaré. Saludos. RE: Ayuda sobre un tema de controles. - Harpo - 04-07-2023 He hecho la siguiente prueba:
Modifico código: Código: Private Sub ColorizeGrid(ctrl As Object) Resultado: Es otra opción, un saludo. Harpo. Por cierto, el GridView embebido en el ListBox también tiene la propiedad Colorize.... RE: Ayuda sobre un tema de controles. - cogier - 05-07-2023 Aquí he utilizado la propiedad 'Tag'. RE: Ayuda sobre un tema de controles. - tercoide - 05-07-2023 La propiedad Tag es la forma adecuada de hacerlo. Realmente no cuesta nada dejar un rastro allí en tiempo de diseño, e incluso puede ser varios. Cogier uso "ToCol" que abrevia To Colorize, pero puede dearse un Integer con uno de los bits que indique la colorizacion y los otros para distintos usos. RE: Ayuda sobre un tema de controles. - Shordi - 06-07-2023 Gracias a todos. Veo que os interesa el tema. La propiedad Tag no se adapta muy bien a lo que necesito pero, claro, no sabéis muy bien qué estoy haciendo. A ver si puedo subir un vídeo y el proyecto al gitlab esta mañana o, a lo más tardar, mañana. Saludos |