Buenas!.
Tengo un formulario que contiene un scrollview, la propiedad de arrangement del.
formulario está puesta a Fill. A medida que ajuste este los controles que están dentro
del scrollview se distribuyen en este de una forma.
Ahora bien. Si quisiera ajustar su ancho y alto al tamaño que tienen sus hijos instantáneamente, ¿ es posible ?.
He añadido ademas un tamaño de separación entre los pictureboxes.
Tengo esto:
Y lo que quiero es que automáticamente se ajuste por la derecha.
Sin necesidad de hacerlo manualmente con el formulario y el ratón.
Código:
Const MARGEN As Integer = 8
Const NUMPICTUREBOXES As Integer = 8
Private anomimagenes As String[] = ["Gambas3.png", "Python.png"] 'No es necesario del todo, en este caso solo son dos imagenes
Public Sub Form_Open()
Randomize
Me.Arrangement = Arrange.Fill ' Según cambio el tamaño del formulario se ajustan los controles que tiene el ScrollView
With ScrollView1
.Arrangement = Arrange.Row
.Background = Color.Black
.Spacing = True
.Margin = True
.Padding = MARGEN
End With
InsertarImagenes(anomimagenes)
End
Public Sub InsertarImagenes(simagenes As String[])
Dim j As Integer
Dim unpicturebox As PictureBox
For j = 0 To NUMPICTUREBOXES - 1
unpicturebox = New PictureBox(ScrollView1) As "Observador"
With unpicturebox
.W = 64
.H = 64
.Picture = Picture.Load(Application.Path &/ simagenes[Rand(1)])
.Border = True
.Background = Color.White
.Mode = PictureBox.Contain
.Tag = j
End With
Next
''FIXME: Ajustar ancho y alto del ScrollView al tamaño de los controles contenidos
With ScrollView1
' Menos 2 debido al contador de Pictureboxes, su indice es NUMPICTUREBOXES
.W = ((NUMPICTUREBOXES - 1) * 64 + MARGEN * (NUMPICTUREBOXES - 2)) / 2
.H = ((NUMPICTUREBOXES - 1) * 64 + MARGEN * (NUMPICTUREBOXES - 2)) / 2
End With
End
Public Sub Observador_MouseDown()
Dim colorcontrario As Integer
Dim listadeindices As New Integer[]
For j As Integer = 0 To ScrollView1.Children.Max
listadeindices.Add(j)
Next
'Por defecto. Intercambiamos el color
If Last.Background = Color.Green Then
Last.Background = Color.White
colorcontrario = Color.Green
Else
Last.Background = Color.Green
colorcontrario = Color.White
Endif
'Eliminamos la posibilidad de que se pueda cambiar el color de fondo del picturebox seleccionado
'Para esto he creado una listadeindices
listadeindices.Remove(Last.tag)
'Al resto de los picturebox no seleccionados, se les camnbia el color del fondo
For j As Integer = 0 To listadeindices.Max
ScrollView1.Children[listadeindices[j]].Background = colorcontrario
Next
End
Os subo el código.
Saludos