Differenze tra le versioni di "Inserire un oggetto in un item di una ListBox"

Da Gambas-it.org - Wikipedia.
(Creata pagina con "Spesso, volendo inserire all'interno di uno o più ''item'' di una ''ListBox'' alcuni oggetti grafici (''ComboBox'', ''Button'', etc), si sovrappone semplicemente l'oggetto pr...")
 
 
(Una versione intermedia di uno stesso utente non è mostrata)
Riga 3: Riga 3:
 
Questa soluzione si rivela in modo evidente approssimativa, sia perché l'oggetto non è parte, non è ''figlio'' costituente della ''ListBox'', sia perché esso, essendo meramente sovrapposto alla ''ListBox'', resta totalmente indipendente da questa. Ciò comporta che alcuni eventuali mutamenti dello stato e di alcune proprietà della ''ListBox'' non influenzeranno l'oggetto sovrapposto.
 
Questa soluzione si rivela in modo evidente approssimativa, sia perché l'oggetto non è parte, non è ''figlio'' costituente della ''ListBox'', sia perché esso, essendo meramente sovrapposto alla ''ListBox'', resta totalmente indipendente da questa. Ciò comporta che alcuni eventuali mutamenti dello stato e di alcune proprietà della ''ListBox'' non influenzeranno l'oggetto sovrapposto.
  
Attualmente l'oggetto ''ListBox'' possiede la proprietà ''.Children'' . Questa circostanza sta a significare che la ''ListBox'' è composta anche da almeno un oggetto ''figlio'', e la si può verificare con il seguente semplice codice:
+
Attualmente l'Oggetto grafico ''ListBox'' possiede la Proprietà ".Children". Questa circostanza sta a significare che la ''ListBox'' è composta anche da almeno un Oggetto ''Figlio'', e la si può verificare con il seguente semplice codice:
  '''Public''' Sub Form_Open()
+
  Public Sub Form_Open()
 
    
 
    
  Dim ob As Object
+
  Dim ob As Object
 
   
 
   
 
   For Each ob In ListBox1.Children
 
   For Each ob In ListBox1.Children
Riga 12: Riga 12:
 
   Next
 
   Next
 
   
 
   
  '''End'''
+
  End
 
Lanciando il predetto codice, si vedrà in console che la ''ListBox'' possiede un solo oggetto ''figlio'', e che tale oggetto è una ''GridView''. La ''GridView'' possiede a sua volta un oggetto ''Figlio'': la ''ScrollArea''. Poiché la ''ScrollArea'' è un oggetto ''Contenitore'', si potrà utilizzare tale ''Contenitore'' inserendo in esso l'oggetto o gli oggetti che si vogliono aggiungere alla ''ListBox''.
 
Lanciando il predetto codice, si vedrà in console che la ''ListBox'' possiede un solo oggetto ''figlio'', e che tale oggetto è una ''GridView''. La ''GridView'' possiede a sua volta un oggetto ''Figlio'': la ''ScrollArea''. Poiché la ''ScrollArea'' è un oggetto ''Contenitore'', si potrà utilizzare tale ''Contenitore'' inserendo in esso l'oggetto o gli oggetti che si vogliono aggiungere alla ''ListBox''.
  
Riga 26: Riga 26:
 
   
 
   
 
  Public Sub Form_Open()
 
  Public Sub Form_Open()
 
+
 
   Dim b As Byte
 
   Dim b As Byte
 
   Dim obs As Observer
 
   Dim obs As Observer
Riga 74: Riga 74:
 
   End With
 
   End With
 
   
 
   
  '''End'''
+
  End
 
   
 
   
 
   
 
   
  '''Public''' Sub CheckBox_Click()
+
  Public Sub CheckBox_Click()
 
   
 
   
 
   Print "Utilizzato: "; Last.Name
 
   Print "Utilizzato: "; Last.Name
 
   
 
   
  '''End'''
+
  End
 
   
 
   
 
   
 
   
  '''Public''' Sub ComboBox_Click()
+
  Public Sub ComboBox_Click()
 
   
 
   
 
   Print "Utilizzato: "; Last.Name
 
   Print "Utilizzato: "; Last.Name
 
   
 
   
  '''End'''
+
  End
 
   
 
   
 
   
 
   
  '''Public''' Sub Slider_Change()
+
  Public Sub Slider_Change()
 
   
 
   
 
   Print "Utilizzato: "; Last.Name
 
   Print "Utilizzato: "; Last.Name
 
   
 
   
  '''End'''
+
  End
 
   
 
   
 
   
 
   
  '''Public''' Sub Scroll_Scroll()
+
  Public Sub Scroll_Scroll()
 
    
 
    
 
   Dim ob As Object
 
   Dim ob As Object
Riga 104: Riga 104:
 
    
 
    
 
   For Each ob In sa.Children
 
   For Each ob In sa.Children
  <FONT Color=gray>' ''Per evitare che in caso di scorrimento in alto e in basso dell'oggetto "Figlio", la "ScrollArea",''
+
  <FONT Color=gray>' ''Per evitare che in caso di scorrimento in alto e in basso dell'oggetto "Figlio", la "ScrollArea", mediante l'apposito cursore laterale, si farà uso della proprietà ".ScrollY" della "ScrollArea" medesima:''</font>
' ''mediante l'apposito cursore laterale, si farà uso della proprietà ".ScrollY" della "ScrollArea" medesima:''</font>
 
 
     ob.Y = gw.Rows[b].Y - sa.ScrollY
 
     ob.Y = gw.Rows[b].Y - sa.ScrollY
 
     Inc b
 
     Inc b
 
   Next
 
   Next
 
    
 
    
  '''End'''
+
  End

Versione attuale delle 16:33, 20 giu 2024

Spesso, volendo inserire all'interno di uno o più item di una ListBox alcuni oggetti grafici (ComboBox, Button, etc), si sovrappone semplicemente l'oggetto prescelto alla ListBox: l'effetto visivo, grafico è sostanzialmente quello desiderato.

Questa soluzione si rivela in modo evidente approssimativa, sia perché l'oggetto non è parte, non è figlio costituente della ListBox, sia perché esso, essendo meramente sovrapposto alla ListBox, resta totalmente indipendente da questa. Ciò comporta che alcuni eventuali mutamenti dello stato e di alcune proprietà della ListBox non influenzeranno l'oggetto sovrapposto.

Attualmente l'Oggetto grafico ListBox possiede la Proprietà ".Children". Questa circostanza sta a significare che la ListBox è composta anche da almeno un Oggetto Figlio, e la si può verificare con il seguente semplice codice:

Public Sub Form_Open()
 
  Dim ob As Object

  For Each ob In ListBox1.Children
    Print ob.Name
  Next

End

Lanciando il predetto codice, si vedrà in console che la ListBox possiede un solo oggetto figlio, e che tale oggetto è una GridView. La GridView possiede a sua volta un oggetto Figlio: la ScrollArea. Poiché la ScrollArea è un oggetto Contenitore, si potrà utilizzare tale Contenitore inserendo in esso l'oggetto o gli oggetti che si vogliono aggiungere alla ListBox.

In questo modo gli oggetti inseriti nell'oggetto Contenitore, la predetta ScrollArea, faranno parte della ListBox medesima.

Gli oggetti aggiunti in questo modo alla ListBox conserveranno una certa loro autonomia, con particolare riferimento alla gestione dei proprie eventi.


Mostriamo un esempio pratico, nel quale si inseriranno tre oggetti in una ListBox:

Private gw As GridView
Private sa As ScrollArea


Public Sub Form_Open()

 Dim b As Byte
 Dim obs As Observer
 Dim kb As CheckBox
 Dim cb As ComboBox
 Dim sl As Slider
 
  With ListBox1
    .W = 300
    .H = 300
  End With
  
  For b = 1 To 21
    ListBox1.Add(CStr(b))
  Next
  
  gw = ListBox1.Children[0]
  sa = gw.Children[0]
  obs = New Observer(sa) As "Scroll"
   
' Creiamo e aggiungiamo tre oggetti:
  With kb = New CheckBox(sa) As "CheckBox"
    .X = 30
    .Y = gw.Rows[2].Y
    .W = 70
    .H = gw.Rows[2].H
    .Text = "On/Off"  
    .Name = "CheckBox"
  End With
  
  With cb = New ComboBox(sa) As "ComboBox"
    .X = 30
    .Y = gw.Rows[3].Y
    .W = 100
    .H = gw.Rows[3].H
    .Text = "Numeri"
    .List = ["Uno", "Due", "Tre", "Quattro", "Cinque", "Sei"]
    .Name = "ComboBox"
  End With
  
  With sl = New Slider(sa) As "Slider"
    .X = 30
    .Y = gw.Rows[4].Y
    .W = 100
    .H = gw.Rows[4].H
    .Name = "Slider"
  End With

End


Public Sub CheckBox_Click()

  Print "Utilizzato: "; Last.Name

End


Public Sub ComboBox_Click()

  Print "Utilizzato: "; Last.Name

End


Public Sub Slider_Change()

  Print "Utilizzato: "; Last.Name

End


Public Sub Scroll_Scroll()
 
 Dim ob As Object
 Dim b As Byte = 2
 
  For Each ob In sa.Children
' Per evitare che in caso di scorrimento in alto e in basso dell'oggetto "Figlio", la "ScrollArea", mediante l'apposito cursore laterale, si farà uso della proprietà ".ScrollY" della "ScrollArea" medesima:
    ob.Y = gw.Rows[b].Y - sa.ScrollY
    Inc b
  Next
  
End