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

Da Gambas-it.org - Wikipedia.
 
(8 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
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.
+
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é 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.
+
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 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:
+
Attualmente l'Oggetto ''GridView'' possiede la Proprietà ".Children".
 +
<BR>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()
 
  '''Public''' Sub Form_Open()
 
    
 
    
 
   Dim ob As Object
 
   Dim ob As Object
 
   
 
   
  For Each ob In GridView1.Children
+
  For Each ob In GridView1.Children
    Print ob.Name
+
    Print Object.Type(ob)
  Next
+
  Next
 
   
 
   
 
  '''End'''
 
  '''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''.
+
Lanciando il predetto codice, si vedrà in console che la ''GridView'' possiede un solo Oggetto ''Figlio'', e che tale Oggetto è una ''ScrollArea''. <BR>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 gli oggetti inseriti nell'oggetto ''Contenitore'', "''figlio''" della ''GridView'', faranno parte della ''GridView'' medesima.
+
In questo modo i Controlli grafici 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.
+
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 oggetti in una ''GridView'':
+
Mostriamo un esempio pratico, nel quale si inseriranno tre Controlli grafici in una ''GridView'':
 
  Private sa As ScrollArea
 
  Private sa As ScrollArea
 
   
 
   
Riga 26: Riga 27:
 
  Public Sub Form_Open()
 
  Public Sub Form_Open()
 
   
 
   
  Dim obs As Observer
+
  Dim obs As Observer
  Dim kb As CheckBox
+
  Dim kb As CheckBox
  Dim cb As ComboBox
+
  Dim cb As ComboBox
  Dim sl As Slider
+
  Dim sl As Slider
 
    
 
    
 
   With GridView1
 
   With GridView1
Riga 42: Riga 43:
 
   GridView1.Columns[2].W = 120
 
   GridView1.Columns[2].W = 120
 
    
 
    
   sa = GridView1.Children[0]
+
   sa = GridView1.<FONT Color=#B222222>Children[0]</font>
 
   obs = New Observer(sa) As "Scroll"
 
   obs = New Observer(sa) As "Scroll"
 
      
 
      
  <FONT Color=gray>' ''Creiamo e aggiungiamo tre oggetti:''</font>
+
  <FONT Color=gray>' ''Creiamo e aggiungiamo tre Oggetti grafici:''</font>
 
   With kb = New CheckBox(sa) As "CheckBox"
 
   With kb = New CheckBox(sa) As "CheckBox"
 
     .X = 0
 
     .X = 0
Riga 56: Riga 57:
 
    
 
    
 
   With cb = New ComboBox(sa) As "ComboBox"
 
   With cb = New ComboBox(sa) As "ComboBox"
     .X = GridView1[1, 0].W + 1
+
     .X = GridView1.Columns[1].X
     .Y = GridView1[1, 0].H + 1
+
     .Y = GridView1.Rows[1].Y
 
     .W = GridView1[1, 1].W
 
     .W = GridView1[1, 1].W
 
     .H = GridView1[1, 1].H
 
     .H = GridView1[1, 1].H
Riga 66: Riga 67:
 
    
 
    
 
   With sl = New Slider(sa) As "Slider"
 
   With sl = New Slider(sa) As "Slider"
     .X = GridView1[1, 0].W + GridView1[2, 1].W + 1
+
     .X = GridView1.Columns[2].X
     .Y = GridView1[1, 0].H + GridView1[1, 1].H + 1
+
     .Y = GridView1.Rows[2].Y
 
     .W = GridView1[2, 2].W
 
     .W = GridView1[2, 2].W
 
     .H = GridView1[2, 2].H
 
     .H = GridView1[2, 2].H
Riga 73: Riga 74:
 
   End With
 
   End With
 
   
 
   
  '''End'''
+
  '''End'''  
 
 
   
 
   
 
  '''Public''' Sub CheckBox_Click()
 
  '''Public''' Sub CheckBox_Click()
Riga 80: Riga 80:
 
   Print "Utilizzato: "; Last.Name
 
   Print "Utilizzato: "; Last.Name
 
   
 
   
  '''End'''
+
  '''End'''  
 
 
   
 
   
 
  '''Public''' Sub ComboBox_Click()
 
  '''Public''' Sub ComboBox_Click()
Riga 87: Riga 86:
 
   Print "Utilizzato: "; Last.Name
 
   Print "Utilizzato: "; Last.Name
 
   
 
   
  '''End'''
+
  '''End'''  
 
 
   
 
   
 
  '''Public''' Sub Slider_Change()
 
  '''Public''' Sub Slider_Change()
Riga 94: Riga 92:
 
   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
  Dim b As Byte
+
  Dim b As Byte
 
    
 
    
 
   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", mediante l'apposito cursore laterale, si farà uso della Proprietà ".ScrollY" della "ScrollArea" medesima:''</font>
 +
    ob.Y = GridView1.Rows[b].Y - sa.ScrollY
 +
<FONT Color=gray>' ''Per evitare che in caso di scorrimento a destra e a sinistra dell'Oggetto "Figlio", la "ScrollArea", mediante l'apposito cursore inferiore, si farà uso della Proprietà ".ScrollX" della "ScrollArea" medesima:''</font>
 +
    ob.X = GridView1.Columns[b].X - sa.ScrollX
 
     Inc b
 
     Inc b
<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>
 
    ob.Y = TableView1.Rows[b].Y - sa.ScrollY
 
 
   Next
 
   Next
 
    
 
    
 
  '''End'''
 
  '''End'''

Versione attuale delle 01:42, 11 mag 2023

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 sa As ScrollArea


Public Sub Form_Open()

  Dim obs As Observer
  Dim kb As CheckBox
  Dim cb As ComboBox
  Dim sl As Slider
 
  With GridView1
    .W = 300
    .H = 100
    .Columns.Count = 3
    .Rows.Count = 30
  End With
   
  GridView1.Columns[0].W = 70
  GridView1.Columns[1].W = 110
  GridView1.Columns[2].W = 120
  
  sa = GridView1.Children[0]
  obs = New Observer(sa) As "Scroll"
   
' Creiamo e aggiungiamo tre Oggetti grafici:
  With kb = New CheckBox(sa) 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(sa) As "ComboBox"
    .X = GridView1.Columns[1].X 
    .Y = GridView1.Rows[1].Y
    .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(sa) As "Slider"
    .X = GridView1.Columns[2].X
    .Y = GridView1.Rows[2].Y
    .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 

Public Sub Scroll_Scroll()
 
  Dim ob As Object
  Dim b As Byte
 
  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 = GridView1.Rows[b].Y - sa.ScrollY
' Per evitare che in caso di scorrimento a destra e a sinistra dell'Oggetto "Figlio", la "ScrollArea", mediante l'apposito cursore inferiore, si farà uso della Proprietà ".ScrollX" della "ScrollArea" medesima:
    ob.X = GridView1.Columns[b].X - sa.ScrollX
    Inc b
  Next
  
End