Autore Topic: Adeguare larghezza pannelli al numero di pannelli visibili  (Letto 776 volte)

Offline Marmar

  • Gamberetto
  • *
  • Post: 10
    • Mostra profilo
ciao a tutti... spero siano ite bene le vacanze!  ;D
vengo subito al dunque: ho un form con dentro 4 contenitori che vengono attivati o disattivati (giocando sulla proprietà Visible) a seconda dei pulsanti del menù. C'è un modo per far adeguare la larghezza dei pannelli a seconda di quanti sono visibili? Mi spiego: se ci sono solo due pannelli con Visible = TRUE allora ognuno occuperà il 50% della larghezza totale, se ce ne sono tutti e 4 allora ognuno occuperà il 25 %. Ho provato a giocare con le proprietà autoresize, arrange e expand, ma ottengo solo che o l'ultimo pannello si espande al massimo e gli altri rimangono così come li inserisco oppure il primo copre tutti gli altri.
Dico subito e una parziale soluzione l'avrei: far calcolare le dimensioni di tutti i contenitori ogni volta che uno di loro diventa visibile, ma significa creare tantissimi if... else if...!

P.S. ho provato a cercare nel forum ma non ho trovato nulla a riguardo, ma ovviamente se mi è sfuggita qualche discussione precedente chiedo venia!

Mercì

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.273
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: Adeguare larghezza pannelli al numero di pannelli visibili
« Risposta #1 il: 29 Agosto 2011, 23:53:04 »
Esempio...  ;)

Offline Marmar

  • Gamberetto
  • *
  • Post: 10
    • Mostra profilo
Re: Adeguare larghezza pannelli al numero di pannelli visibili
« Risposta #2 il: 30 Agosto 2011, 11:01:07 »
posto un esempio con 3 contenitori invece che 4:

Codice: [Seleziona]
IF contenitor1.Visible = FALSE THEN
  contenitor1.Visible = TRUE

  IF contenitor2.Visible = TRUE AND contenitor3.Visible = TRUE THEN
    contenitor1.Width = form.Width / 3
    contenitor2.Width = contenitor1.Width
    contenitor3.Width = contenitor1.Width
  ELSE IF contenitor2.Visible = TRUE AND contenitor3.Visible = FALSE THEN
    contenitor1.Width = form.Width / 2
    contenitor2.Width = contenitor1.Width
  ELSE IF contenitor3.Visible = TRUE AND contenitor2.Visible = FALSE THEN
    contenitor1.Width = form.Width / 2
    contenitor3.Width = contenitor1.Width
  ELSE IF contenitor2.Visible = FALSE AND contenitor3.Visible = FALSE THEN
    contenitor1.Width = form.Width
  ENDIF

ELSE IF contenitor1.Visible = TRUE THEN
  contenitor1.Visible = FALSE

  IF contenitor2.Visible = TRUE AND contenitor3.Visible = TRUE THEN
    contenitor2.Width = form.Width / 2
    contenitor3.Width = contenitor3.Width
  ELSE IF contenitor2.Visible = TRUE AND contenitor3.Visible = FALSE THEN
    contenitor2.Width = form.Width
  ELSE IF contenitor3.Visible = TRUE AND contenitor2.Visible = FALSE THEN
    contenitor3.Width = form.Width
  ENDIF

ENDIF

non so se ho fatto qualche errore di sintassi, ma è più importante la logica del sistema. Sto cercando un modo per semplificare un codice del genere, poichè se devo applicare un sistema del genere a 5 o 6 contenitori il codice diventerà terribilmente più lungo... Come detto ho provato a giocare con le proprietà expand e autoresize, ma non le so bene usare, quindi magari avevo anche la soluzione a portata di mano...  :-[
« Ultima modifica: 30 Agosto 2011, 11:03:50 da Marmar »

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Adeguare larghezza pannelli al numero di pannelli visibili
« Risposta #3 il: 30 Agosto 2011, 14:02:52 »
Come già da me scritto in altra discussione recente, puoi usare i container VBox e HBox, e agire sulle proprietà di Expand e Autoresize degli oggetti.

Di norma, quando un oggetto è contenuto in un contenitore che ha la proprietà di gestire automaticamente il dimensionamento dei suo figli, deve gestire anche la cosa in sistuazioni di visibilità, o meno.