Shordi   30-10-2022, 19:31
#1
¿Y en qué se diferencia de la clase Children?

Estoy intentando mejorar una serie de funciones que revisan todos los controles de un formulario y he visto que existe esa clase que no había visto nunca... pero no hay ni una pequeña ayuda de cómo usarla.

¿Alguien tiene alguna idea?

Saludos

No podemos regresar
tincho   30-10-2022, 22:18
#2
(30-10-2022, 19:31)Shordi escribió: ¿Alguien tiene alguna idea?

No tengo idea, TercoIDE es el de las clases   Big Grin

1 Saludo.
tercoide   31-10-2022, 15:15
#3
(30-10-2022, 22:18)tincho escribió: No tengo idea, TercoIDE es el de las clases

Estoy aprendiendo. Y tengo algunos problemas con los Children en mis programas. Se portan mal.

"Es mejor saber todo de muy poco que muy poco de todo" - anonimo
Shordi   31-10-2022, 17:56
#4
(31-10-2022, 15:15)tercoide escribió:
(30-10-2022, 22:18)tincho escribió: No tengo idea, TercoIDE es el de las clases

Estoy aprendiendo. Y tengo algunos problemas con los Children en mis programas. Se portan mal.

Mándalos al rincón de pensar...

Cool

No podemos regresar
Shell   02-11-2022, 22:12
#5
Que bueno.

ContainerChildren :This virtual class returns a virtual collection of all children of a container.

Propiedades: Count y Max
Métodos: Clear 

Se puede asignar los hijos de un contenedor a  un tipo ContainerChildren

Código:
Public Sub Form_Open()
 
  Dim hijos As ContainerChildren
  Dim ob As Object
 
  hijos = Panel1.Children
 
  Print "El Panel1 tiene " & Str(hijos.Count) & " hijos"
 
  For Each ob In hijos  
    Print "Un hijo se llama: " & ob.name
  Next
 
End

Y se puede asignar a un control mediante un tipo ContainerChildren y su indice.

Código:
Public Sub Ejemplo2()
 
 
  Dim hijos As ContainerChildren
  Dim hcontrol As Control
 
  hijos = Panel1.Children
 
  hcontrol = hijos[0]
 
  Print hcontrol.Name
  
End

Saludos

"El conocimiento es la mejor inversión que se puede hacer" - Abraham Lincoln
tincho   02-11-2022, 22:37
#6
(30-10-2022, 19:31)Shordi escribió: Estoy intentando mejorar una serie de funciones que revisan todos los controles de un formulario y he visto que existe esa clase que no había visto nunca... pero no hay ni una pequeña ayuda de cómo usarla.

¿Pero que es lo que quieres hacer exactamente?
No es lo mismo una clase que un objeto.
Por ejemplo yo lo uso de la siguiente manera para asignar la imagen de un ToolButon que se encuentra dentro de un panel 
Código:
Public Sub LoadIcons(h As Container)

  Dim obj As Object

  For Each obj In h.Children
    If Object.Type(obj) = "ToolButton" Then
      obj.Picture = dsk.TagPic(obj.Tag, 32)
    Endif
  Next

End
Última modificación: 03-11-2022, 12:32 por tincho.

1 Saludo.
tincho   03-11-2022, 12:59
#7
Otro ejemplo que es mas general y sirve para asignar la imagen a cada ToolButton que exista en el formulario pero podrías adaptarlo a lo que requiera tu programa ya que al ser recursivo se llama a si mismo y continua hasta el ultimo control que encuentre en el formulario.

Código:
Public Sub Form_Open()

  RScan(Me)

End

Private Sub RScan(obj As Object)

  Dim chi As Object
  Dim chi2 As Object

  For Each chi In obj.Children
    If Object.Type(chi) = "ToolButton" Then
      chi.Picture = dsk.TagPic(chi.Tag, 32)
    Else
      For Each chi2 In chi.Children
        If Object.Type(chi2) = "ToolButton" Then
          chi2.Picture = dsk.TagPic(chi2.Tag, 32)
        Else
          RScan(chi2)
        Endif
      Next
    Endif
  Next
End

1 Saludo.
cogier   03-11-2022, 17:18
#8
Shell, este código es muy útil, gracias. Espero que no te importe pero lo he modificado y añadido a la ayuda de Gambas en Inglés
Última modificación: 03-11-2022, 17:18 por cogier.
Shordi   04-11-2022, 10:48
#9
(02-11-2022, 22:37)tincho escribió: ¿Pero que es lo que quieres hacer exactamente?
No es lo mismo una clase que un objeto.
Por ejemplo yo lo uso de la siguiente manera para asignar la imagen de un ToolButon que se encuentra dentro de un panel 
Código:
Public Sub LoadIcons(h As Container)

  Dim obj As Object

  For Each obj In h.Children
    If Object.Type(obj) = "ToolButton" Then
      obj.Picture = dsk.TagPic(obj.Tag, 32)
    Endif
  Next

End
Sí, cosas así ya tengo hechas usando, como en el ejemplo, Children pero sigo sin entender la utilidad de ContainerChildren. Creí que podía ahorrame esos bucles y la recursividad si ContainerChildren incluía "de manera nativa" todos los children de todos los Container contenidos en el objeto inicial... pero ya veo que no.

La única utilidad que le veo es la posibilidad de pasar como referencia la clase Children "desligándola" del objeto padre... pero sigue siendo algo bastante oscuro.

Saludos

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