Differenze tra le versioni di "Metodo di pseudo indirizzamento ad Oggetti grafici"

Da Gambas-it.org - Wikipedia.
m
 
(6 versioni intermedie di 2 utenti non mostrate)
Riga 7: Riga 7:
  
  
Immagianiamo una data Form contenente due GridView di cui una di esse, la prima o la seconda, non importa quale, è stata caricata con valori diversi in più righe. L'altra Gridview può essere vuota o pure parzialmente riempita. Lo scopo è quello di trasferire, tramite doppio click su ciascuna riga, il contenuto di tutte le caselle, colonna dopo colonna, da una GridView all'altra. Col trasferimento si vuole ottenere infatti una diversa ridistribuzione dei dati presenti nelle GridView, in funzione delle necessità operative dell'utente.
+
Immagianiamo una data Form contenente due GridView di cui una di esse, la prima o la seconda, non importa quale, sia stata caricata con valori diversi in più righe. L'altra Gridview può essere vuota o pure parzialmente riempita. Lo scopo è quello di trasferire, tramite doppio click su ciascuna riga, il contenuto di tutte le caselle, colonna dopo colonna, da una GridView all'altra. Col trasferimento si vuole ottenere infatti una diversa ridistribuzione dei dati presenti nelle GridView, in funzione delle necessità operative dell'utente.
  
 
In Gambas non è possibile puntare all'indirizzo di un oggetto. Esiste però la possibilità di creare una nuova istanza, copiando il contenuto delle due GridView in un array da gestire con appropriati indici.
 
In Gambas non è possibile puntare all'indirizzo di un oggetto. Esiste però la possibilità di creare una nuova istanza, copiando il contenuto delle due GridView in un array da gestire con appropriati indici.
Riga 14: Riga 14:
 
Dopo avere nominate le due GridView:Es. GridView1 e Gridview2, si passa a scrivere:<BR>
 
Dopo avere nominate le due GridView:Es. GridView1 e Gridview2, si passa a scrivere:<BR>
 
1) nella sezione Dichirazioni della Form.Class relativa la dichiarazione degli oggetti costituenti la nuova istanza delle due GridView:  
 
1) nella sezione Dichirazioni della Form.Class relativa la dichiarazione degli oggetti costituenti la nuova istanza delle due GridView:  
  '''Private''' oGridView1 As Object[ ]
+
  Private oGridView1 As Object[ ]
  '''Private''' oGridView2 As Object[ ]
+
  Private oGridView2 As Object[ ]
  
  
Riga 21: Riga 21:
 
  Private oInd1 As Object
 
  Private oInd1 As Object
 
  Private oInd2 As Object  
 
  Private oInd2 As Object  
 +
 +
 +
3) Nelle procedure evento _DblClick delle due GridView basta richiamare un'unica procedura Sub o Function, destinata a contenere le istruzioni di trattamento del testo della riga, selezionata di volta in volta:
 +
'''Public''' Sub GridView1_DblClick()
 +
  GriViewComu_DblClick
 +
'''End'''
 
   
 
   
3) Nelle procedure evento _DblClick delle due GridView basta richiamare un'unica procedura Sub o Function, destinata a contenere le istruzioni di trattamento del testo della riga, selezionata di volta in volta: <BR>
+
'''Public''' Sub GridView2_DblClick()
+
  GriViewComu_DblClick
<CODE>
+
'''End'''
Public Sub GridView1_DblClick() <BR>
 
GriViewComu_DblClick <BR>
 
End
 
  
Public Sub GridView2_DblClick() <BR>
 
GriViewComu_DblClick <BR>
 
End
 
</CODE>
 
 
   
 
   
4) La procedura comune potrebbe essere: <BR>
+
4) La procedura comune potrebbe essere:
 +
'''Private''' Sub GriViewComu_DblClick()
 +
Dim iInd1 As Integer
 +
Dim iInd2 As Integer
 
   
 
   
<CODE>Private Sub GriMovDblClick_Comu()  
+
  oGridView1 = New Object[ ]
Dim iInd1 As Integer
+
  oGridView2 = New Object[ ]
Dim iInd2 As Integer
+
  If Last.Name = "GridView1" Then
 +
      oGridView1.Add(GridView1) 'GridView di partenza
 +
      oGridView2.Add(GridView2) 'GridView di arrivo
 +
  Else
 +
      oGridView1.Add(GridView2) 'nuova GridView di partenza
 +
      oGridView2.Add(GridView1) 'nuova GridView di arrivo
 +
  Endif
 +
  For Each oIndGridView1 In oGridView1
 +
  Next
 +
  For Each oIndGridView2 In oGridView2 │
 +
  Next
 +
  iInd1 = oIndGridView1.Row
 +
  For iInd2 = 0 To oIndGridView2.Rows.count – 1
 +
    If oIndGridView2[iInd2, 0].Text <> "" Then
 +
      oIndGridView2[iInd2, 0].Text = oIndGridView1[iInd1, 0].Text
 +
      oIndGridView2[iInd2, 1].Text = oIndGridView1[iInd1, 1].Text
 +
      oIndGridView2[iInd2, n].Text = oIndGridView1[iInd1, n].Text (n = numero di colonne – 1 delle GridView di partenza e d'arrivo)
 +
      oIndGridView1[iInd1, 0].Text = “”
 +
      oIndGridView1[iInd1, 1].Text = “”
 +
      oIndGridView1[iInd1, n].Text = “”
 +
    Endif
 +
  Next
 +
'''End'''
  
oGridView1 = New Object[ ]
+
L'effetto operativo di quanto scritto sopra è dipendente dall'azione operativa dell'utente che eseguendo il doppio click sulla riga di pertinenza da spostare, per Es. della GridView1 permette la schedulazione dell'evento GridView1_DblClick dentro il quale l'istruzione GriViewComu_DblClick non fa altro che richiamare la procedura  GriViewComu_DblClick  che si occuperà dello spostamento fisico dei valori di tutta lariga dalla GridView1 alla GridView2. Lo stesso effetto, in senso opposto, avverrà eseguendo il doppio click su una riga valorizzata della GridView2.
oGridView2 = New Object[ ]
 
If Last.Name = "GridView1" Then
 
    oGridView1.Add(GridView1) 'GridView di partenza
 
    oGridView2.Add(GridView2) 'GridView di arrivo
 
Else
 
    oGridView1.Add(GridView2) 'nuova GridView di partenza
 
    oGridView2.Add(GridView1) 'nuova GridView di arrivo
 
Endif
 
For Each oIndGridView1 In oGridView1
 
Next
 
For Each oIndGridView2 In oGridView2 │
 
Next
 
iInd1 = oIndGridView1.Row
 
For iInd2 = 0 To oIndGridView2.Rows.count – 1
 
If oIndGridView2[iInd2, 0].Text <> "" Then
 
oIndGridView2[iInd2, 0].Text = oIndGridView1[iInd1, 0].Text
 
oIndGridView2[iInd2, 1].Text = oIndGridView1[iInd1, 1].Text
 
oIndGridView2[iInd2, n].Text = oIndGridView1[iInd1, n].Text (n = numero di colonne – 1 delle GridView di partenza e d'arrivo)
 
oIndGridView1[iInd1, 0].Text = “”
 
oIndGridView1[iInd1, 1].Text = “”
 
oIndGridView1[iInd1, n].Text = “”
 
·Endif
 
· Next
 
End
 
</CODE>
 
 
L'effetto operativo di quanto scritto sopra è dipendente dall'azione operativa dell'utente che eseguendo il doppio click sulla riga di pertinenza da spostare, per Es. della GridView1 permette la schedulazione dell'evento GridView1_DblClick dentro il quale l'istruzione GriViewComu_DblClick non fa altro che richiamare la procedura  GriViewComu_DblClick  che si occuperà dello spostamento fisico dei valori di tutta lariga dalla GridView1 alla GridView2. La stessa effetto, in senso opposto avverrà eseguendo il doppio click su una riga valorizzata della GridView2.
 

Versione attuale delle 14:29, 5 set 2013

La gestione di un tale metodo riguarda oggetti grafici della stessa natura senza però duplicare codice. Si possono presentare diversi casi di impiego di tale metodo. La presente sezione ha lo scopo di raggruppare tutti quei casi in cui possa tornare utile sfruttare le potenzialità interne a Gambas per ottenere più rapidamente e con risparmio di codice, e non solo, risultati ed ottimizzazioni di procedure che altrimenti richiederebbero un non semplice impegno di programmazione e di memoria.


Trasferire il contenuto di una GridView ad un'altra e viceversa

Immagianiamo una data Form contenente due GridView di cui una di esse, la prima o la seconda, non importa quale, sia stata caricata con valori diversi in più righe. L'altra Gridview può essere vuota o pure parzialmente riempita. Lo scopo è quello di trasferire, tramite doppio click su ciascuna riga, il contenuto di tutte le caselle, colonna dopo colonna, da una GridView all'altra. Col trasferimento si vuole ottenere infatti una diversa ridistribuzione dei dati presenti nelle GridView, in funzione delle necessità operative dell'utente.

In Gambas non è possibile puntare all'indirizzo di un oggetto. Esiste però la possibilità di creare una nuova istanza, copiando il contenuto delle due GridView in un array da gestire con appropriati indici. Una volta disegnate le due Gridview, si procede alle stesura del codice necessario all'esecuzione del programma.

Dopo avere nominate le due GridView:Es. GridView1 e Gridview2, si passa a scrivere:
1) nella sezione Dichirazioni della Form.Class relativa la dichiarazione degli oggetti costituenti la nuova istanza delle due GridView:

Private oGridView1 As Object[ ]
Private oGridView2 As Object[ ]


2) gli oggetti indice che serviranno successivamente per indirizzare il puntamento alle righe delle due GridView:

Private oInd1 As Object
Private oInd2 As Object 


3) Nelle procedure evento _DblClick delle due GridView basta richiamare un'unica procedura Sub o Function, destinata a contenere le istruzioni di trattamento del testo della riga, selezionata di volta in volta:

Public Sub GridView1_DblClick()
  GriViewComu_DblClick
End

Public Sub GridView2_DblClick()
  GriViewComu_DblClick
End


4) La procedura comune potrebbe essere:

Private Sub GriViewComu_DblClick() 
Dim iInd1 As Integer
Dim iInd2 As Integer

  oGridView1 = New Object[ ]
  oGridView2 = New Object[ ]
  If Last.Name = "GridView1" Then
     oGridView1.Add(GridView1) 		'GridView di partenza
     oGridView2.Add(GridView2) 		'GridView di arrivo
  Else
     oGridView1.Add(GridView2) 		'nuova GridView di partenza
     oGridView2.Add(GridView1) 		'nuova GridView di arrivo
  Endif
  For Each oIndGridView1 In oGridView1 
  Next
  For Each oIndGridView2 In oGridView2 │
  Next
  iInd1 = oIndGridView1.Row
  For iInd2 = 0 To oIndGridView2.Rows.count – 1
    If oIndGridView2[iInd2, 0].Text <> "" Then
      oIndGridView2[iInd2, 0].Text = oIndGridView1[iInd1, 0].Text
      oIndGridView2[iInd2, 1].Text = oIndGridView1[iInd1, 1].Text
      oIndGridView2[iInd2, n].Text = oIndGridView1[iInd1, n].Text (n = numero di colonne – 1 delle GridView di partenza e d'arrivo)
      oIndGridView1[iInd1, 0].Text = “”
      oIndGridView1[iInd1, 1].Text = “”
      oIndGridView1[iInd1, n].Text = “”
    Endif
  Next
End

L'effetto operativo di quanto scritto sopra è dipendente dall'azione operativa dell'utente che eseguendo il doppio click sulla riga di pertinenza da spostare, per Es. della GridView1 permette la schedulazione dell'evento GridView1_DblClick dentro il quale l'istruzione GriViewComu_DblClick non fa altro che richiamare la procedura GriViewComu_DblClick che si occuperà dello spostamento fisico dei valori di tutta lariga dalla GridView1 alla GridView2. Lo stesso effetto, in senso opposto, avverrà eseguendo il doppio click su una riga valorizzata della GridView2.