Comunidad Gambas-es
¿Cambiar el orden de los controles de un HBox por código? - 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: ¿Cambiar el orden de los controles de un HBox por código? (/thread-845.html)



¿Cambiar el orden de los controles de un HBox por código? - Harpo - 12-03-2022

Buenas tardes,

¿Alguien sabe cómo cambiar por código el orden en que un HBox muestra los controles?.
Al añadir los controles al HBox en diseño los coloco en un orden y así los muestra en ejecución. Si tengo 5 controles en diseño y añado un sexto por código, siempre lo muestra a la derecha, ¿se podría poner en tercer lugar, o el segundo?.

El único ejemplo que he visto es el código de Toolbar, que usa un panel oculto donde mueve los controles, y vuelve a colocar con otro orden en el Toolbar visible. ¿No hay una manera más sencilla?.

He probado con varios contenedores y todos hacen lo mismo. Gracias y un saludo.
Harpo.


RE: ¿Cambiar el orden de los controles de un HBox por código? - cogier - 12-03-2022

Prueba este código: -

Código:
' Gambas class file

Hbox1 As HBox
ToolButton1 As ToolButton

Public Sub Form_Open()

  BuildForm

End

Public Sub BuildForm()

  Dim sText As String[] = ["add", "ok", "access", "right", "left", "up", "down", "battery", "color", "contrast", "copy"]
  Dim iLoop As Integer

  With Me
    .Arrangement = Arrange.Vertical
    .H = 50
    .W = 400
    .Padding = 5
  End With

  With Hbox1 = New HBox(Me) As "Hbox1"
    .H = 28
  End With

  For iLoop = 0 To sText.Max
    With ToolButton1 = New ToolButton(HBox1) As "TBs"
      .H = 28
      .W = 28
      .Tag = iLoop
      .Picture = Picture["icon:/22/" & sText[iLoop]]
    End With
  Next

End

Public Sub TBs_Click()

  Last.Raise

End



RE: ¿Cambiar el orden de los controles de un HBox por código? - tincho - 13-03-2022

(12-03-2022, 19:58)Harpo escribió: ¿se podría poner en tercer lugar, o el segundo?.

Podrías mover todos los controles del panel a un panel auxiliar oculto y con un bucle for each y con un contador determinar el momento en el que agregar el nuevo antes de mover el siguiente control al panel auxiliar y luego sigues moviendo los existentes, finalmente vuelves a mover todos lo controles del panel auxiliar, que ya incluye el nuevo control en el sitio adecuado, al panel original.
La propiedad es .Reparent
Código:
Public Sub MoveControls()
  Dim obj As Control
  Dim q As Integer
  Dim bNew As ToolButton
  For Each obj In pTools.Children
    obj.Reparent(pAux)
    If q = 3 Then
      bNew = New ToolButton(pAux)
      bNew.Tag = "new"
      bNew.H = pTools.H
      bNew.W = pTools.H
    Endif
    Inc q
  Next
   For Each obj In pAux.Children
    obj.Reparent(pTools)
  Next
End



RE: ¿Cambiar el orden de los controles de un HBox por código? - Harpo - 13-03-2022

Muchas gracias a los dos, finalmente lo más práctico que he visto es usar un panel intermedio oculto y un array para guardar el orden deseado. Les dejo un ejemplo por si a alguien le sirve. Se usa la lista de un ListBox.

Un saludo, Harpo.