Contenedores, HBox,HPanel, ScrollView


Objetivo: Contenedores, HBox,HPanel, ScrollView
Hola!.

Estaba probando un ejemplo con contenedores. Tengo un contenedor padre ScrollView.
Dentro de este hay dos contenedores Hbox y a su vez dentro de los Hbox, botones repartidos
dentro de estos.

El problema que me encuentro es que según voy añadiendo botones a los Hbox su tamaño debería aumentar
y eso a su vez hace que la barra horizontal del ScrollView deba aparecer. Pero no lo hace, algo hago mal.
Esta es la imagen de como queda:

botoneshboxsscrollview

Como veis el botón que tiene como texto Bloque4 no se ve, pero tampoco aparece la barra horizontal del ScrollView.

Os muestro el código:

Public Sub Form_Open()
Dim ohbox1, ohbox2 As HBox
Dim otlb As Button
Dim contador As Integer = 1


ohbox1 = CreaHBox(HPanel1.Width, 100, HPanel1, ohbox1)
CreaBoton(100, 50, "Bloque " & CStr(contador), ohbox1)
contador += 1
CreaBoton(200, 50, "Bloque " & CStr(contador), ohbox1)
contador += 1
CreaBoton(100, 50, "Bloque " & CStr(contador), ohbox1)
contador += 1
CreaBoton(200, 50, "Bloque " & CStr(contador), ohbox1)
contador += 1

ohbox2 = CreaHBox(HPanel1.Width + 200, 100, HPanel1, ohbox2)
CreaBoton(200, 50, "Bloque " & CStr(contador), ohbox2)
contador += 1
CreaBoton(200, 50, "Bloque " & CStr(contador), ohbox2)
contador += 1
CreaBoton(100, 50, "Bloque " & CStr(contador), ohbox2)

End

Public Sub CreaBoton(ancho As Integer, alto As Integer, nombre As String, contenedor As HBox)
Dim otlb As Button

otlb = New Button(contenedor)
With otlb
.Width = ancho
.Height = alto
.Text = nombre
End With

End

Public Function CreaHBox(ancho As Integer, alto As Integer, contenedor As HPanel, objeto As HBox) As HBox

objeto = New HBox(contenedor)
With objeto
.Width = ancho
.Height = alto
.AutoResize = True
End With
Return objeto

End


Y si queréis probarlo aquí tenéis el ejemplo.
También estuve probando a pasar por referencia los Hbox a un procedimiento para crearlos y no usar función que devuelva un componente.
Puede que con función quede mejor esa forma de crear el objeto Hbox.

Hubiera quedado de esta forma, la forma de llamarlo y el procedimiento.
Pero preferí usar función.


....
CreaHBox(HPanel1.Width, 100, HPanel1, ByRef ohbox1)
......

Public Sub CreaHBox(ancho As Integer, alto As Integer, contenedor As HPanel, ByRef objeto As HBox)

objeto = New HBox(contenedor)
With objeto
.Width = ancho
.Height = alto
.AutoResize = True
End With

End


Saludos

última edición por Shell el Miercoles, 28 Enero 2015, 20:33; editado 1 vez

Contenedores.tar.gz
Descripción:  
Descargar
Nombre del archivo: Contenedores.tar.gz
Tamaño: 5.21 KB
Descargado: 46 veces
Contenedores.tar.gz
Descripción:  
Descargar
Nombre del archivo: Contenedores.tar.gz
Tamaño: 5.21 KB
Descargado: 46 veces
Contenedores.tar.gz
Descripción:  
Descargar
Nombre del archivo: Contenedores.tar.gz
Tamaño: 5.21 KB
Descargado: 46 veces

Objetivo: Re: Contenedores, HBox,HPanel, ScrollView
Olvide comentar que estoy usando también un hPanel, que seguramente es el problema, que deba tomar el ancho del Hbox mayor según varía este.

Saludos

última edición por Shell el Miercoles, 28 Enero 2015, 20:35; editado 1 vez
Objetivo: Re: Contenedores, HBox,HPanel, ScrollView
A bote pronto no veo problemas en tu código... salvo que utilizas controles creados en tiempo de ejecución y eso no sé muy bien cómo se lleva con lo del Arrangement... ¿antes?¿después?¿lo ignora? Misterios...

Perfil MP  
Objetivo: Re: Contenedores, HBox,HPanel, ScrollView
Shordi:

El único componente que tiene activa la propiedad Arrangement es el ScrollView. Esta puesta a Fill
Pretendo que los HBox estén uno debajo del otro.

El HPanel que contiene los HBox tiene activada su propiedad Expand a True.
Y los HBox carecen de propiedad Arrangement.

Quizás no estoy dándole un uso adecuado al componente ScrollView.
Probare a hacer un experimento con un GridView a ver que tal sale.

Que se haga en tiempo real es necesario hacerlo así, en principio no se sabe el tamaño que cada botón.

Saludos

Objetivo: Re: Contenedores, HBox,HPanel, ScrollView
Citar:
Y los HBox carecen de propiedad Arrangement.

Es cierto y no lo es. Carecen de la propiedad arrangement porque su nombre ya lleva implícito que es Horizontal, con lo que no hay por qué exponer publicamente ese valor, pero el método Arrangement sí lo tienen internamente. De ahí que sí tienen un evento BeforeArrange. Supongo que es en ese evento en el que deberías recalcular el ancho de la ventana o algo así (léase intentar refrescar el scrollview o yo qué sé) para que contemple los controles creados por código.

Saludos

última edición por shordi el Viernes, 30 Enero 2015, 11:05; editado 1 vez
Perfil MP  
Objetivo: Re: Contenedores, HBox,HPanel, ScrollView
Es que el ScrollView en sí mismo está diseñado para alojar contenido de mayor tamaño que su parte visible y precisamente muestra barras de desplazamiento para poder ver las partes que quedan ocultas.

Entonces, la propiedad Arrangement no entiendo cómo calcula el espacio, puesto que al ScrollView se le supone "infinito" (o al menos más grande que incluso la pantalla).

En mi opinión, no parece buena idea mezclar ScrollView con otro tipo de contenedores, sin aplicar algún límite dentro de su propio área, como un panel de dimensiones fijas para que los cálculos de Arrangement tengan sentido.

Saludos

Perfil MP  
Objetivo: Re: Contenedores, HBox,HPanel, ScrollView
Siguiendo la explicación de jguardon: he "agrandado" de ancho el HPanel1 para que se "salga" de la parte visible del scrollview, y al scrollview, he he puesto su propiedad arrangement como "None", y ya aparece la barra del scrollview (tanto en tiempo de ejecución como en diseño):



contenedor_scrollview


Contenedores-0.0.3.tar.gz
Descripción:  
Descargar
Nombre del archivo: Contenedores-0.0.3.tar.gz
Tamaño: 5.11 KB
Descargado: 48 veces
Contenedores-0.0.3.tar.gz
Descripción:  
Descargar
Nombre del archivo: Contenedores-0.0.3.tar.gz
Tamaño: 5.11 KB
Descargado: 48 veces
Contenedores-0.0.3.tar.gz
Descripción:  
Descargar
Nombre del archivo: Contenedores-0.0.3.tar.gz
Tamaño: 5.11 KB
Descargado: 48 veces

Objetivo: Re: Contenedores, HBox,HPanel, ScrollView
Lo de usar un tamaño fijo era una posibilidad. Os muestro de donde tomé la idea para crear un ejemplo con contenedores.

http://www.elmundo.es/elmundo/television/guiatv/

Lo que primero que se me ocurrió fue un ScrollView. No es que sea el mismo componente, claro.
Si pasáis el cursor del ratón por encima de los distintos programas de televisión, se sombrea al igual que un botón.
Si hacemos clic en uno de estos botones se nos abre una ventana mostrando una información.
Además tenemos el desplazamientos de los cursores superiores.

En este caso sabemos que tenemos 24h y que sobre esa medida se van a distribuir los distintos programas televisivos según su horario. (botones)
Vemos textos que van en dos lineas o más dentro de esos botones.

Saludos


Página 1 de 1


  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.1164s (PHP: 4% SQL: 96%)
Consultas SQL: 28 - Debug off - GZIP Activado