Shell 12-10-2022, 12:12
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.
Archivos adjuntos
.gz
MostrarArchivosPorIndice-0.0.1.tar.gz (Tamaño: 12.5 KB Descargas: 2)
Shell 10-10-2022, 15:11
Buenas!.

Estoy ejecutando un test y me devuelve violación de segmento rápidamente. A ver como se depura eso.
Es un error en tiempo de ejecución.

Os adjunto el código. Lo primero que se me ocurre es que el array crece y crece.

Código:
Public Sub btnSelectDir_Click()
    
  ObtenerNomArchivos(ruta)
 
End

Public Sub ObtenerNomArchivos(directorio As String)
 
  Dim archivos As String[]
 
  archivos = Dir(directorio, "*.*", gb.File)
  If archivos.Length = 0 Then
    Return
  Else
    TestBenchMark("ObtenerExtensiones", archivos)
    TestBenchMark("ObtenerExtensiones2", archivos)    
  Endif   
 
End

Public Sub TestBenchMark(nombrefuncion As String, aelementos As String[])
 
  Dim i, t As Float
  Dim ob As Object
 
  ob = Me
 
  t = Timer
 
  For i = 1 To 10 ^ 6
    Object.Call(ob, nombrefuncion, aelementos)
  Next
 
  Print "Tiempo para 10^6 repeticiones, método: " & nombrefuncion & " = " & "\t"; Format(Timer - t, "0.######") & "s" & "\t"
 
End

Public Sub ObtenerExtensiones(aarchivos As String[]) As String[]
 
  Dim aextensiones As New String[]
  Dim nombref As String
  Dim extension As String
 
  Dim pos As Integer
 
  For Each nombref In aarchivos
    pos = RInStr(nombref, ".")
    extension = Mid(nombref, pos + 1)    
    If Not aextensiones.Exist(extension) Then
      aextensiones.Add(extension)
    Endif
  Next
  Return aextensiones
 
End

Public Sub ObtenerExtensiones2(aarchivos As String[]) As String[]
 
  Dim aextensiones As New String[]
  Dim nombref As String
  Dim extension As String
 
  For Each nombref In aarchivos
    extension = File.Ext(nombref)
    If Not aextensiones.Exist(extension) Then aextensiones.Add(extension)      
  Next  
  Return aextensiones
 
End

En la primera función no uso el componente gb.util y en el siguiente si. Casi me da igual en resultado por eso lo del test.
Por otra parte nadie recibe el valor devuelto por la función. Que podría ser un procedimiento que no devuelva valor.
 

De un post explicado que es y con el lenguaje "C"..yikes! ..es broma. Wink

¿Qué significa Violacion de Segmento?

Algo común: Se produce cuando...
Cita:- Intentar acceder una variable que ya fue liberada.
- Intentar escribir sobre una variable de solo lectura. ( No se da el caso , no es una propiedad ).
 

El error se produce en Object.Call desde la primera vez.
Shell 09-10-2022, 11:23
Buenas!.

Pues más consejo para estar con el pc.

No tenéis que comprar las marcas o los productos que nos habla el fisioterapeuta ( os recomiendo cualquiera de sus vídeos ).
No os toméis a broma el tema. Ahora en vídeo. El dolor no es una opción.



Uno de los problemas es que a veces la silla puede llevar reposa brazos y hay que quitarlo por que chocan con la mesa.

Algo que me llamó la atención es que el trabajador se ponga de pie a trabajar con el pc. Supongo que poco tiempo.
Si no que se lo pregunten a los peluqueros/as.   Sad

Ah,¿  y os habéis fijado cuando habla de las pestañas que disponen muchos teclados para elevarlo ?.
Que mejor bajadas.

Saludos y cuídense.
Páginas (571):    1 267 268 269 270 271 571   
Bienvenido, Invitado
Tienes que registrarte para poder participar en nuestro foro.
Recordarme?
Miembros: 310
Último miembro: MARQUITOS6767
Temas del foro: 1,761
Mensajes del foro: 9,153
Últimos temas
Problema con el repósito ...
Foro: Instalación
Último mensaje por: guizans, 14-04-2026, 21:38
Respuestas: 2 - Vistas: 333
UEFI y BIOS
Foro: Hardware & IoT
Último mensaje por: guizans, 13-04-2026, 21:22
Respuestas: 3 - Vistas: 2,498
Visual Studio Code con Ga...
Foro: General
Último mensaje por: guizans, 07-03-2026, 14:24
Respuestas: 2 - Vistas: 719
WebForm con mysql gridvie...
Foro: WebApp/WebForms
Último mensaje por: vjarvelo, 03-03-2026, 16:32
Respuestas: 2 - Vistas: 3,373
Sobre la proteccion del c...
Foro: General
Último mensaje por: Shordi, 19-02-2026, 11:07
Respuestas: 7 - Vistas: 1,308
Powered By MyBB, © 2002-2026 MyBB Group.
Made with by Curves UI.