Grandamakulo   26-02-2025, 11:44
#1
Compañeros, estoy seguro de que esto ya lo había preguntado, pero ni lo encuentro en mi código ni lo veo por el foro. Siento mi torpeza.

El problema es que creo una matriz de controles, pero no no puedo añadir ítems a la matrz. Por ejemplo:

Código:
  Dim apnlPnl As New Panel[]
  apnlPnl = New Panel[]
...
        apnlPnl.Add([¿Aquí qué pongo?])
        With apnlPnl.Last
          .Reparent(pnlMeta)
          .H = 32
          .Arrangement = Arrange.Horizontal
          .Expand = No
          .Tag = asLinea[1]
        End With

Muchas gracias

Creo que lo he solucionado de manera algo chapuza, pero sigo dándole vueltas:

Código:
        pnlPanel = New Panel(Me)
        apnlPnl.Add(pnlPanel)
        pnlPanel.Name = "pnlPanel" & apnlPnl.Max
        With apnlPnl.Last
          .Reparent(pnlMeta)
          .H = 32
          .Arrangement = Arrange.Horizontal
          .Expand = No
          .Tag = asLinea[1]
        End With
Última modificación: Hace 2 horas por Grandamakulo.

En un lugar de La Mancha de cuyo nombre me acuerdo perfectamente...
Shell   26-02-2025, 17:34
#2
A ver si este te vale, es un poquito largo pero son dos tonterías.
Código:
' Gambas class file

Private contenedorpadre As Panel
Private mensaje As String
Private temporizador As Timer
Private cuenta As Integer
Private sehahechoclick As Boolean

Public Sub Form_Open()

  Dim unboton As Button

  temporizador = New Timer As "tempus"
  mensaje = "Ejemplo con contendores"
  With Me
    .Arrangement = Arrange.Horizontal
    .AutoResize = True
    .Spacing = True
    .Margin = True
    .Title = mensaje
  End With

  contenedorpadre = New Panel(Me)
  With contenedorpadre
    .Arrangement = Arrange.Horizontal
    .Expand = True
    .Width = 360
    .Height = 40
  End With

  For n As Integer = 0 To 2
    unboton = New Button(contenedorpadre) As "Manipulador"
    With unboton
      '.Width = contenedorpadre.Width / 3 - 50
      '.Height = contenedorpadre.Height
      .Expand = True
      .Text = "Botón " & Str(n)
      .Tag = Str(n)
    End With
  Next

End

Public Sub Manipulador_Click()

  If Not sehahechoclick Then
    Me.Title = "Ha hecho click en el botón " & Last.tag
    With temporizador
      .Delay = 1000
      .Start()
    End With
    sehahechoclick = True
  Endif

End

Public Sub tempus_Timer()

  cuenta += 1
  If cuenta = 2 Then
    Me.Title = mensaje
    cuenta = 0
    sehahechoclick = False
    temporizador.Stop
  Endif

End

Intenta usar nombres sencillos, no te compliques. Sobre todo para los ejemplos  Rolleyes


Y ahora te dejo una pregunta.

Si el formulario cambia su tamaño automáticamente para ajustarse al del panel..."Y",
desactivamos la propiedad expand de los botones y usamos tamaños de ancho y alto para estos.

¿ Cómo hacemos para que se ajuste el panel al tamaño de sus hijos botones ?.
Que a su vez, el formulario principal debe también ajustarse.

Saludos
Última modificación: 26-02-2025, 17:46 por Shell.

"El conocimiento es la mejor inversión que se puede hacer" - Abraham Lincoln
Shell   26-02-2025, 23:37
#3
Lo cierto es que lo que es el ancho del control de los botón no es necesario de activar, si la altura.
Recordemos que tenemos la propiedad Padding del Panel. Lo que hace que la distancia que
existe entre los botones sea mayor o menor, disminuyendo de paso el tamaño de los botones.
He añadido un fondo al panel para que se vea el espacio ocupado.

[Imagen: 7R4IsPtl.png]

Saludos

"El conocimiento es la mejor inversión que se puede hacer" - Abraham Lincoln
vuott   Ayer, 00:38
#4
Hola,
yo propongo Confused esta pagina:

  https://www.gambas-it.org/wiki/index.php...di_oggetti

« Los horizontes perdidos nunca regresan. » (F. Battiato, 1983)

« Las ondas nunca regresan. » (Genesis: Ripples, 1976)

« Vita non suavis esse potest, nec Mors amara. »  (...vuott)
Shell   Ayer, 10:57
#5
Es sencillo, teniendo en cuenta las propiedades que das al contenedor y a sus hijos.
Los hijos siempre van a tener un contenedor padre. Y lógicamente dar propiedades
a sus hijos. Después de esto, complicarnos todo lo que queramos.

Los ejemplos de Vuott son más sencillos, más directos, pero es lo mismo.
Es un tema muy común.

Saludos

"El conocimiento es la mejor inversión que se puede hacer" - Abraham Lincoln
cogier   Ayer, 18:31
#6
¿Es esto lo que intenta hacer?

Código:
Private aPanel As New Panel[]

Public Sub Form_Show() 
 
  Dim pPanel As Panel
  Dim iLoop As Integer
 
  For iLoop = 1 To 20
    With pPanel = New Panel(Me)
      .H = 32
      .Arrangement = Arrange.Horizontal
      .Expand = True
      .Tag = iLoop
      .Border = Border.Plain
    End With
   
    aPanel.Add(pPanel)
  Next
 
  Me.Show
  Wait
 
  Stop
 
End
[Imagen: PanelArray.png]
Grandamakulo   Hace 1 hora
#7
Hola:
Muchas gracias a todos.
@Shell.- En cuanto a la sencillez de los nombres, sí, jajaja, me puse como loco a hacer pruebas con las consecuencias «nominativas» que ves. Los problemas de resize del formulario no los estaba viendo, porque el problema principal era la gestión de los «hijos». Una vez resuelto, ya le he dado forma al contenedor. Y sí, «padding» y «spacing» son fundamentales para dar un aspecto adecuado a la interface.
@Vuott.- Exactamente, eso es. siempre magnífica la página italiana Smile
@Cogier.- Eso es; muy similar a lo que propone @Vuott. Funciona perfectamente.
La dificultad que tenía, que aún no sé por qué me pasó, es que al añadir «pPanel» me modificaba todos los elementos de la matriz a la vez, como si fuese el mismo siempre, de ahí los cambios de nombre a esos nombres «raros» que indica @Shell. El caso es que ya funciona bien.
¡¡Muchísimas gracias a todos!!
Última modificación: Hace 1 hora por Grandamakulo.

En un lugar de La Mancha de cuyo nombre me acuerdo perfectamente...
  
Usuarios navegando en este tema: 3 invitado(s)
Powered By MyBB, © 2002-2025 MyBB Group.
Made with by Curves UI.