Comunidad Gambas-es
Organizar controles en formularios. Controles no visibles - 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: Organizar controles en formularios. Controles no visibles (/thread-1060.html)



Organizar controles en formularios. Controles no visibles - Shell - 12-10-2022

Buenas!.

He creado un ejemplo que tomando un directorio, indexa todos los nombres de los archivos y los muestra en un TabStrip.
En este caso, una vez que se muestran los archivos se desactiva el botón de seleccionar directorio.
La salida es esta:

[Imagen: 3ktQE75.png]

El formulario tiene su propiedad arrangement a vertical. Activadas a True, tanto Margin como Spacing.
El botón está dentro de un contenedor junto con un muelle y tiene su arrangement a horizontal
El TabStrip tiene su arrangement a vertical y su propiedad Expand a True.

Se muestra así en modo diseño.

[Imagen: VQDImoq.png]

Al ejecutarlo por primera vez, vemos el TabStrip tal como se ve en esa imagen, vacío, pero se ve.
Si lo hacemos no visible, el contenedor donde se encuentra el botón subirá arriba y una vez se haya seleccionado
un directorio, volverá a su lugar, mostrándose correctamente. No queda arriba y debajo el TabStrip ( eso es correcto).

¿ No creéis que el contenedor donde se encuentra el botón debería quedarse mejor abajo al inicio ?.
Pero al hacerse invisible TabStrip, desaparece este y sube el otro contenedor donde esta el botón.
No existe control que lo empuje abajo.

¿ Qué debería ser lo más estético ?.

El tema del control de errores puede no estar depurado, si recibe datos el array de los datos creo que lo solucioné.
Últimamente usando la clase Dialog, me muestra errores en la salida de consola cuando no hago algo bien.
( Creo que esto no solía mostrarse en otras versiones de Gambas, puede que se haya añadido con el tiempo, me parece bien).

Os adjunto el código.

Código:
Private grupoficheros As New String[]
Private carchivos As New Collection

Public Sub btndSelectDir_Click()
 
  Dim i As Integer
 
  grupoficheros.Clear()
 
  Dialog.Title = "Selecione un directorio"
  If Dialog.SelectDirectory() Then Return
 
  grupoficheros = Dir(Dialog.Path, "*.*", gb.File).Sort()
 
  Indexar(grupoficheros, TabStrip1)
  TabStrip1.Visible = True

  For i = 0 To TabStrip1.Count - 1
    TabStrip1.Index = i   
    CrearGridView(TabStrip1, carchivos[TabStrip1.Current.Text])
  Next
  btndSelectDir.Enabled = False
 
End

Public Sub Indexar(atmp As String[], tabstripficheros As TabStrip)
 
  Dim letra As String
  Dim archivo As String
  Dim aarchivos As String[]
  Dim i As Integer  
 
  i = 0
 
  For Each archivo In atmp
    letra = Left(archivo, 1)
    If Not carchivos.Exist(letra) Then
      aarchivos = New String[]
      carchivos[letra] = aarchivos
      tabstripficheros.Count = i + 1
      tabstripficheros[i].Text = letra
      carchivos[letra].add(archivo)
      Inc i
    Else
      carchivos[letra].add(archivo)
    Endif
  Next
 
End

Public Sub CrearGridView(contenedor As TabStrip, lista As String[])
 
  Dim ggridview As GridView
  Dim filas As Integer
  Dim x As Integer
 
  If lista.Count = 0 Then Return
 
  ggridview = New GridView(contenedor) As "hgrd"
  With ggridview
    .Expand = True
    .Columns.Count = 1
    .Rows.Count = 1
    .Header = GridView.Both
    .Mode = Select.Single
    .ScrollBar = Scroll.Both
  End With
 
  filas = 0
  'Rellenar las celdas  
  For x = 0 To lista.Max
    ggridview.Rows.Count = filas + 1
    ggridview[x, 0].Text = lista[x]
    Inc filas   
  Next
 
End

Public Sub Form_Open()

  TabStrip1.Visible = False

End

Y su código fuente.

Saludos

Un muelle entre el tabStrip y el contenedor inferior

[Imagen: fOM59N3.png]

Cuando se ejecuta bien, pero cuando el tabstrip aparece..

[Imagen: zfVy83e.png]

Problema de contenedores.


RE: Organizar controles en formularios. Controles no visibles - Shell - 12-10-2022

Solución:

TabStrip en Contenedor con Arrangement a Fill, este se expande, así que si el tabstrip no existe, rellena el hueco.
Distribución y orientación queda así:

[Imagen: Z6g6otH.png]

Que pasen un buen día.