https://foro.gambas-es.org/viewtopic.php?f=1&t=5126&p=29979#p29979
-----------------------------------
Shell
Jueves, 28 Enero 2016, 14:28

Contenedores. Ejemplo Usando Panel Y VPanel.
-----------------------------------
Buenos días!.

Aprendiendo a usar la librería Tkinter para Python, quiero hacer un primer ejemplo como el que vais a ver aquí hecho en Gambas.
Naturalmente en Gambas me parece más sencillo. Todo es cuestión de acostumbrase y conocer como funciona.

He creado una clase que tiene un HBox, una etiqueta y una caja de texto. La he llamado Etibox. :-D

Este es el código de la clase. Bien en el inicializador (como lo llaman en Python) o constructor.  
He añadido el contenedor como Object, ya que no sé a primeras que tipo de contenedor va a tener.

[code linenumbers=false syntax=gambas]
Private contenedorh As HBox
Private etiqueta As Label
Private cajatexto As TextBox

Public Sub _new(contenedor As Object, texto As String)
  
  contenedorh = New HBox(contenedor)
  With contenedorh  
    .X = 0
    .y = 0 
    .AutoResize = True               
  End With
  
  etiqueta = New Label(contenedorh)
  With etiqueta
    .Text = texto 
    .Width = 100
    .Height = 20      
  End With
  
  cajatexto = New TextBox(contenedorh) As "CajadeTexto"
  With cajatexto
    .Width = 200
    .Height = 20           
  End With

End

Public Sub CajadeTexto_KeyPress()
  
  If Key.Code = Key.Enter Or Key.Code = Key.Return Then
    Print cajatexto.Text
  Endif
    
End
[/code]

El problema que me encontré fue luego la distribución de este componente y principalmente lo que quería es que según voy creando "Etibox's",
el formulario se va ajustando al tamaño de todas las etibox creadas dentro de un "contenedor".

Por ejemplo, en este formulario he usado un VPanel. os muestro la presentación de como queda y se ven perfectamente las flechas y propiedades

 [img]http://foro.gambas-es.org/files/images/768/formconvpanel.png[/img] 

Y así es como se muestra:

 [img]http://foro.gambas-es.org/files/images/768/usandovpanel.png[/img] 

Yo quiero que no se vea esa parte de abajo del formulario. Que se ajuste.

Este es el código: Que se va a repetir, prácticamente, solo cambia el contenedor.

[code linenumbers=false syntax=gambas]
Private etb As Etibox
Private titulos As String[] = ["Nombre", "Apellidos", "Edad"]

Public Sub Form_Open()

  Dim titulo As String  
  
  Me.Title = "Labels y TextBoxes"
  
  For Each titulo In titulos    
    etb = New Etibox(VPanel1, titulo & ": ")
  Next
  
End
[/code]

Ahora uso un Panel..la solución aparentemente. Ya que Panel tiene la propiedad Arrangement, cosa que carece VPanel.

Este es el formulario:

 [img]http://foro.gambas-es.org/files/images/768/formconpanel.png[/img] 

Así se ve:

 [img]http://foro.gambas-es.org/files/images/768/usandopanel.png[/img] 

Y aquí el código del formulario con Panel.

[code linenumbers=false syntax=gambas]
Private etb As Etibox
Private titulos As String[] = ["Nombre", "Apellidos", "Edad"]

Public Sub Form_Open()

  Dim titulo As String  
  
  Me.Title = "Labels y TextBoxes"
  
  For Each titulo In titulos    
    etb = New Etibox(Panel1, titulo & ": ")
  Next
  
End
[/code]


Os subo el código para que lo probéis y para que deis vuestra idea. :-)
Por ejemplo , por que usando la distribución de VPanel no va como quiero.

Saludos


