tincho   21-05-2021, 10:49
#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".
Código:
Public Sub elGrupo_Change()

  Dim ob As Object
 
  For Each ob In Last.Parent.Children
    If Object.Type(ob) = "Label" Then
      ob.Foreground = Color.Red
    Endif
  Next

End
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
[code]
Lo cual eliminaría el mismo control que origino el evento, no lo probé pero tal vez funcione.
Saludos.

1 Saludo.
gambafeliz   21-05-2021, 22:40
#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.
tincho   24-05-2021, 11:40
#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.

1 Saludo.
  
Usuarios navegando en este tema: 4 invitado(s)
Powered By MyBB, © 2002-2024 MyBB Group.
Made with by Curves UI.