Inserire un oggetto in una cella di una GridView

Da Gambas-it.org - Wikipedia.
Vai alla navigazione Vai alla ricerca

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 grafico alla GridView. L'effetto visivo è sostanzialmente quello desiderato.
Questa soluzione si rivela in modo evidente approssimativa, sia perché il Controllo grafico 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 il Controllo grafico sovrapposto.

Attualmente l'Oggetto GridView possiede la Proprietà ".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 Object.Type(ob)
 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 il Controllo grafico o i Controlli grafici che si vogliono aggiungere alla GridView.

In questo modo i Controlli grafici inseriti nell'Oggetto Contenitore, "Figlio " della GridView, faranno parte della GridView medesima.

I Controlli grafici, aggiunti in questo modo alla GridView, conserveranno una certa loro autonomia, anche con riferimento alla gestione dei propri Eventi.


Mostriamo un esempio pratico, nel quale si inseriranno tre Controlli grafici in una GridView:

Private GridView1 As GridView


Public Sub Form_Open()

  Dim kb As CheckBox
  Dim cb As ComboBox
  Dim sl As Slider

  With GridView1 = New GridView(Me)
    .X = 0
    .y = 0
    .W = Me.W
    .H = 150
    .Columns.Count = 10
    .Rows.Count = 20
  End With

' Creiamo e aggiungiamo tre Oggetti grafici:
  With kb = New CheckBox(GridView1.Children[0]) As "CheckBox"
    .X = GridView1.Columns[0].X
    .Y = GridView1.Rows[0].Y
    .W = 100
    .H = GridView1.Rows.H
    .Text = "On/Off"  
    .Name = "CheckBox"
  End With
  GridView1.Columns[0].W = kb.W
  
  With cb = New ComboBox(GridView1.Children[0]) As "ComboBox"
    .X = GridView1.Columns[1].X 
    .Y = GridView1.Rows[1].Y
    .W = 100
    .H = GridView1.Rows.H
    .Text = "Numeri"
    .List = ["Uno", "Due", "Tre", "Quattro", "Cinque", "Sei"]
    .Name = "ComboBox"
  End With
  GridView1.Columns[1].W = cb.W
  
  With sl = New Slider(GridView1.Children[0]) As "Slider"
    .X = GridView1.Columns[2].X
    .Y = GridView1.Rows[2].Y
    .W = 100
    .H = GridView1.Rows.H
    .Name = "Slider"
  End With
  GridView1.Columns[2].W = sl.W

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