Differenze tra le versioni di "Inserire un oggetto in una cella di una GridView"

Da Gambas-it.org - Wikipedia.
Riga 48: Riga 48:
 
   End With
 
   End With
 
    
 
    
   With cb = New ComboBox(GridView1.Children[0]) As "Gruppo"
+
   With cb = New ComboBox(GridView1.Children[0]) As "ComboBox"
 
     .X = GridView1[1, 0].W + 1
 
     .X = GridView1[1, 0].W + 1
 
     .Y = GridView1[1, 0].H + 1
 
     .Y = GridView1[1, 0].H + 1
Riga 58: Riga 58:
 
   End With
 
   End With
 
    
 
    
   With sl = New Slider(GridView1.Children[0]) As "Gruppo"
+
   With sl = New Slider(GridView1.Children[0]) As "Slider"
 
     .X = GridView1[1, 0].W + GridView1[2, 1].W + 1
 
     .X = GridView1[1, 0].W + GridView1[2, 1].W + 1
 
     .Y = GridView1[1, 0].H + GridView1[1, 1].H + 1
 
     .Y = GridView1[1, 0].H + GridView1[1, 1].H + 1
Riga 76: Riga 76:
 
   
 
   
 
   
 
   
  '''Public''' Sub Gruppo_Change()
+
  '''Public''' Sub ComboBox_Click()
 +
 +
  Print "Utilizzato: "; Last.Name
 +
 +
'''End'''
 +
 +
 +
'''Public''' Sub Slider_Change()
 
   
 
   
 
   Print "Utilizzato: "; Last.Name
 
   Print "Utilizzato: "; Last.Name
 
   
 
   
 
  '''End'''
 
  '''End'''

Versione delle 10:58, 10 feb 2016

Molti programmatori esprimono l'esigenza di poter inserire all'interno di una o più celle di una GridView alcuni oggetti grafici (ComboBox, Button, etc). Il più delle volte per ottenere questo risultato, si sovrappone semplicemente l'oggetto alla GridView: 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 GridView, sia perché esso, essendo meramente sovrapposto alla GridView, resta totalmente indipendente da questa. Ciò comporta che alcuni eventuali mutamenti dello stato e di alcune proprietà della GridView non influenzeranno l'oggetto sovrapposto.

Attualmente l'oggetto GridView possiede la propriedad .Children . Questa circostanza sta a significare che la GridView è 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 GridView1.Children
    Print ob.Name
  Next

End

Lanciando il predetto codice, si vedrà in console che la GridView possiede un solo oggetto figlio, e che tale oggetto è una 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 GridView.

In questo modo gli oggetti inseriti nell'oggetto Contenitore, "figlio" della GridView, faranno parte della GridView medesima.

Gli oggetti aggiunti in questo modo alla GridView 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 GridView:

Public Sub Form_Open()

 Dim kb As CheckBox
 Dim cb As ComboBox
 Dim sl As Slider
 
  With GridView1
    .W = 300
    .H = 100
    .Columns.Count = 3
    .Rows.Count = 3
  End With
   
  GridView1.Columns[0].W = 70
  GridView1.Columns[1].W = 110
  GridView1.Columns[2].W = 120
   
' Creiamo e aggiungiamo tre oggetti:
  With kb = New CheckBox(GridView1.Children[0]) As "CheckBox"
    .X = 0
    .Y = 0
    .W = GridView1[0, 0].W
    .H = GridView1[0, 0].H
    .Text = "On/Off"  
    .Name = "CheckBox"
  End With
  
  With cb = New ComboBox(GridView1.Children[0]) As "ComboBox"
    .X = GridView1[1, 0].W + 1
    .Y = GridView1[1, 0].H + 1
    .W = GridView1[1, 1].W
    .H = GridView1[1, 1].H
    .Text = "Numeri"
    .List = ["Uno", "Due", "Tre", "Quattro", "Cinque", "Sei"]
    .Name = "ComboBox"
  End With
  
  With sl = New Slider(GridView1.Children[0]) As "Slider"
    .X = GridView1[1, 0].W + GridView1[2, 1].W + 1
    .Y = GridView1[1, 0].H + GridView1[1, 1].H + 1
    .W = GridView1[2, 2].W
    .H = GridView1[2, 2].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