Harpo   12-03-2022, 19:58
#1
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.
cogier   12-03-2022, 20:11
#2
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
tincho   13-03-2022, 12:06
#3
(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

1 Saludo.
Harpo   13-03-2022, 19:59
#4
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.
Archivos adjuntos
.tar
OrderHBox.tar (Tamaño: 50 KB Descargas: 1)
  
Usuarios navegando en este tema: 1 invitado(s)
Powered By MyBB, © 2002-2024 MyBB Group.
Made with by Curves UI.