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

Da Gambas-it.org - Wikipedia.
(Creata pagina con "Molti programmatori esprimono l'esigenza di poter inserire all'interno di una o più celle di una ''TableView'' alcuni oggetti grafici (''ComboBox'', ''Button'', etc). Il più...")
 
 
(4 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 ''TableView'' alcuni oggetti grafici (''ComboBox'', ''Button'', etc). Il più delle volte per ottenere questo risultato, si sovrappone semplicemente l'oggetto alla ''TableView'': l'effetto visivo, grafico è sostanzialmente quello desiderato.
+
Molti programmatori esprimono l'esigenza di poter inserire all'interno di una o più celle di una ''TableView'' alcuni oggetti grafici (''ComboBox'', ''Button'', etc). Il più delle volte per ottenere questo risultato, si sovrappone semplicemente l'Oggetto alla ''TableView'': 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 ''TableView'', sia perché esso, essendo meramente sovrapposto alla ''TableView'', resta totalmente indipendente da questa. Ciò comporta che alcuni eventuali mutamenti dello stato e di alcune proprietà della ''TableView'' non influenzeranno l'oggetto sovrapposto.
+
Questa soluzione si rivela in modo evidente approssimativa, sia perché l'Oggetto non è parte, non è ''figlio'' costituente della ''TableView'', sia perché esso, essendo meramente sovrapposto alla ''TableView'', resta totalmente indipendente da questa. Ciò comporta che alcuni eventuali mutamenti dello stato e di alcune Proprietà della ''TableView'' non influenzeranno l'Oggetto sovrapposto.
  
Attualmente l'oggetto ''TableView'' possiede la propriedad ''.Children'' . Questa circostanza sta a significare che la ''TableView'' è composta anche da almeno un oggetto ''figlio'', e la si può verificare con il seguente semplice codice:
+
Attualmente il Controllo grafico ''TableView'' possiede la Proprietà ".Children" . Questa circostanza sta a significare che la ''TableView'' è 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 TableView1.Children
+
  For Each ob In TableView1.Children
    Print ob.Name
+
    Print ob.Name
  Next
+
  Next
 
   
 
   
 
  '''End'''
 
  '''End'''
Lanciando il predetto codice, si vedrà in console che la ''TableView'' 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 ''TableView''.
+
Lanciando il predetto codice, si vedrà in console che la ''TableView'' possiede un solo Oggetto ''figlio'', e che tale Oggetto è una ''ScrollArea''. Poiché la ''ScrollArea'' è un Oggetto grafico del tipo ''Contenitore'', si potrà utilizzare tale ''Contenitore'' inserendo in esso l'Oggetto o gli Oggetti che si vogliono aggiungere alla ''TableView''.
  
In questo modo gli oggetti inseriti nell'oggetto ''Contenitore'', "''figlio''" della ''TableView'', faranno parte della ''TableView'' medesima.
+
In questo modo gli oggetti inseriti nell'Oggetto ''Contenitore'', "''figlio''" della ''TableView'', faranno parte della ''TableView'' medesima.
  
Gli oggetti aggiunti in questo modo alla ''TableView'' conserveranno una certa loro autonomia, con particolare riferimento alla gestione dei proprie eventi.
+
Gli Oggetti aggiunti in questo modo alla ''TableView'' 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 ''TableView'':
+
Mostriamo un esempio pratico, nel quale si inseriranno tre Oggetti in una ''TableView'':
 
  Private sa As ScrollArea
 
  Private sa As ScrollArea
 
   
 
   
Riga 31: Riga 31:
 
   Dim sl As Slider
 
   Dim sl As Slider
 
    
 
    
  With TableView1
+
  With TableView1
    .W = 300
+
    .W = 300
    .H = 100
+
    .H = 100
    .Columns.Count = 3
+
    .Columns.Count = 3
    .Rows.Count = 30
+
    .Rows.Count = 30
  End With
+
  End With
 
      
 
      
  TableView1.Columns[0].W = 70
+
  TableView1.Columns[0].W = 70
  TableView1.Columns[1].W = 110
+
  TableView1.Columns[1].W = 110
  TableView1.Columns[2].W = 120
+
  TableView1.Columns[2].W = 120
 
    
 
    
  sa = TableView1.Children[0]
+
  sa = TableView1.Children[0]
  obs = New Observer(sa) As "Scroll"
+
  obs = New Observer(sa) As "Scroll"
 
      
 
      
  <FONT Color=gray>' ''Creiamo e aggiungiamo tre oggetti:''</font>
+
  <FONT Color=gray>' ''Crea e aggiunge tre Oggetti:''</font>
  With kb = New CheckBox(sa) As "CheckBox"
+
  With kb = New CheckBox(sa) As "CheckBox"
    .X = 0
+
    .X = 0
    .Y = 0
+
    .Y = 0
    .W = TableView1[0, 0].W
+
    .W = TableView1[0, 0].W
    .H = TableView1[0, 0].H
+
    .H = TableView1[0, 0].H
    .Text = "On/Off"   
+
    .Text = "On/Off"   
    .Name = "CheckBox"
+
    .Name = "CheckBox"
  End With
+
  End With
 
    
 
    
  With cb = New ComboBox(sa) As "ComboBox"
+
  With cb = New ComboBox(sa) As "ComboBox"
    .X = TableView1.Columns[1].X  
+
    .X = TableView1.Columns[1].X  
    .Y = TableView1.Rows[1].Y
+
    .Y = TableView1.Rows[1].Y
    .W = TableView1[1, 1].W
+
    .W = TableView1[1, 1].W
    .H = TableView1[1, 1].H
+
    .H = TableView1[1, 1].H
    .Text = "Numeri"
+
    .Text = "Numeri"
    .List = ["Uno", "Due", "Tre", "Quattro", "Cinque", "Sei"]
+
    .List = ["Uno", "Due", "Tre", "Quattro", "Cinque", "Sei"]
    .Name = "ComboBox"
+
    .Name = "ComboBox"
  End With
+
  End With
 
    
 
    
  With sl = New Slider(sa) As "Slider"
+
  With sl = New Slider(sa) As "Slider"
    .X = TableView1.Columns[2].X
+
    .X = TableView1.Columns[2].X
    .Y = TableView1.Rows[2].Y
+
    .Y = TableView1.Rows[2].Y
    .W = TableView1[2, 2].W
+
    .W = TableView1[2, 2].W
    .H = TableView1[2, 2].H
+
    .H = TableView1[2, 2].H
    .Name = "Slider"
+
    .Name = "Slider"
  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()
Riga 102: Riga 98:
 
   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",''
+
  <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 = TableView1.Rows[b].Y - sa.ScrollY
    ob.Y = TableView1.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>
  <FONT Color=gray>' ''Per evitare che in caso di scorrimento a destra e a sinistra dell'oggetto "Figlio", la "ScrollArea",''
+
    ob.X = TableView1.Columns[b].X - sa.ScrollX
' ''mediante l'apposito cursore inferiore, si farà uso della proprietà ".ScrollX" della "ScrollArea" medesima:''</font>
+
    Inc b
    ob.X = TableView1.Columns[b].X - sa.ScrollX
+
  Next
    Inc b
 
  Next
 
 
    
 
    
 
  '''End'''
 
  '''End'''

Versione attuale delle 08:42, 26 mag 2023

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

Attualmente il Controllo grafico TableView possiede la Proprietà ".Children" . Questa circostanza sta a significare che la TableView è 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 TableView1.Children
   Print ob.Name
 Next

End

Lanciando il predetto codice, si vedrà in console che la TableView possiede un solo Oggetto figlio, e che tale Oggetto è una ScrollArea. Poiché la ScrollArea è un Oggetto grafico del tipo Contenitore, si potrà utilizzare tale Contenitore inserendo in esso l'Oggetto o gli Oggetti che si vogliono aggiungere alla TableView.

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

Gli Oggetti aggiunti in questo modo alla TableView 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 TableView:

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 TableView1
   .W = 300
   .H = 100
   .Columns.Count = 3
   .Rows.Count = 30
 End With
   
 TableView1.Columns[0].W = 70
 TableView1.Columns[1].W = 110
 TableView1.Columns[2].W = 120
  
 sa = TableView1.Children[0]
 obs = New Observer(sa) As "Scroll"
   
' Crea e aggiunge tre Oggetti:
 With kb = New CheckBox(sa) As "CheckBox"
   .X = 0
   .Y = 0
   .W = TableView1[0, 0].W
   .H = TableView1[0, 0].H
   .Text = "On/Off"  
   .Name = "CheckBox"
 End With
  
 With cb = New ComboBox(sa) As "ComboBox"
   .X = TableView1.Columns[1].X 
   .Y = TableView1.Rows[1].Y
   .W = TableView1[1, 1].W
   .H = TableView1[1, 1].H
   .Text = "Numeri"
   .List = ["Uno", "Due", "Tre", "Quattro", "Cinque", "Sei"]
   .Name = "ComboBox"
 End With
  
 With sl = New Slider(sa) As "Slider"
   .X = TableView1.Columns[2].X
   .Y = TableView1.Rows[2].Y
   .W = TableView1[2, 2].W
   .H = TableView1[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 = TableView1.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 = TableView1.Columns[b].X - sa.ScrollX
   Inc b
 Next
  
End