Este foro usa cookies
Este foro utiliza cookies para almacenar su información de inicio de sesión si está registrado y su última visita si no lo está. Las cookies son pequeños documentos de texto almacenados en su computadora; las cookies establecidas por este foro solo se pueden usar en este sitio web y no representan ningún riesgo de seguridad. Las cookies en este foro también rastrean los temas específicos que ha leído y la última vez que los leyó. Si Ud. continúa navegando, entenderemos que acepta todas las cookies.

Se almacenará una cookie en su navegador, independientemente de la elección, para evitar que se le vuelva a hacer esta pregunta. Podrá cambiar la configuración de sus cookies en cualquier momento utilizando el enlace en el pie de página.

El foro antiguo se encuentra accesible desde https://foro.gambas-es.org en modo de solo lectura.

Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5

Recorrer controles
#1

Hola amigos.
En otro mensaje preguntaban como obtener las "Labels" del formulario y me pareció oportuno crear un post mas amplio que englobe unas cuantas mas posibilidades similares.
Hace tiempo el compañero Shordi me enseño a crear controles por código para editar datos de una base de datos, y desde entonces he ido usando este método en diferentes variantes. La mas elegante, creo, es la de crear un panel y dentro de este poner un "Label" y un "TextBox" o un "ValueBox" o lo que sea que requiera el dato en cuestión. Pero sucede que luego el código que gestione los eventos de cada uno de esos controles debe valer para todos ellos y es cuando se trabaja con LAST, PARENT, TAG etc. que son diferentes opciones para restringir el conjunto sobre el que se actuara.
[Imagen: XObMw2o.png]
Si por ejemplo tenemos un panel con dos controles dentro para cada campo y queremos que al cambiar el valor de texto del TextBox se ponga en rojo la TextLabel que se encuentra en el mismo panel, no es necesario recorrero todos los controles del formulario sino que solo los del panel "Parent".
GAMBAS
  1. Public Sub elGrupo_Change()
  2.  
  3.   Dim ob As Object
  4.  
  5.   For Each ob In Last.Parent.Children
  6.     If Object.Type(ob) = "Label" Then
  7.       ob.Foreground = Color.Red
  8.     Endif
  9.   Next
  10.  


Se puede "jugar" con diferentes niveles de anidamiento, propiedades como si es visible o no, y también se pueden borrar los controles que ya no son necesarios con algo como
GAMBAS
  1. Last.Parent.Children.Clear


Lo cual eliminaría el mismo control que origino el evento, no lo probé pero tal vez funcione.
Saludos.
[-] Los siguientes 1 usuarios dice gracias a tincho por este post:
  • jsbsan
    ¡Gracias!
#2

Se agradece tu ampliación aunque es la forma que yo usaba. El caso supongo que te refieres es al mio pero es que mi caso era muchisimo más complejo para acceder y entonces lance la pregunta por que el nivel de anidamiento era mayor al ejemplo de la pregunta. Y se trataba de un menú lateral con pictures y animaciones tanto de los label y demás cambios de background. Por lo tanto me ví en la necesidad de buscar una forma de solo capturar Label para simplemente poner Font.Bold a True o False. Por eso era un royo usar los parent y demás.

Esto no es una critica, para nada, te agradezco que expongas esta ampliación, solo si no te parece mal te he contado mi caso.

Saludos.
    ¡Gracias!
#3

(21-05-2021, 22:40)gambafeliz escribió:  Se agradece tu ampliación aunque es la forma que yo usaba

Mi intención en crear este post es complementar la forma que amablemente nos ofreció Vuott, mostrando otra forma de hacerlo para, de esta manera, aumentar el conocimiento disponible en el foro.
Por otra parte, he leído el tu post y allí no expones la forma que usaste, solo haces preguntas (que no encajan con la forma de preguntar de E. Raymond).
Creo que si alguien, tu o quien sea, expone una pregunta esta debe aportar algunos elementos como un ejemplo, un fragmento de código o algo que les sirva a otros, en especial al que potencialmente pueda responder, no es agradable para quien se toma en trabajo de responder luego leer comentarios como "eso ya lo sabia" o "eso es lo que hice" cuando no lo dijiste en la pregunta ¿Se entiende la idea?.
Saludos.
    ¡Gracias!


Posibles temas similares…
Tema / Autor Respuestas Vistas Último mensaje
Último mensaje por tincho
08-09-2020, 23:17

Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)