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

Da Gambas-it.org - Wikipedia.
m
 
(Una versione intermedia di un altro utente 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 25: Riga 25:
 
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:
 
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()
 
  '''Public''' Sub GridView1_DblClick()
GriViewComu_DblClick
+
  GriViewComu_DblClick
 
  '''End'''
 
  '''End'''
 
   
 
   
 
  '''Public''' Sub GridView2_DblClick()
 
  '''Public''' Sub GridView2_DblClick()
GriViewComu_DblClick
+
  GriViewComu_DblClick
 
  '''End'''
 
  '''End'''
  
 
   
 
   
 
4) La procedura comune potrebbe essere:
 
4) La procedura comune potrebbe essere:
  '''Private''' Sub GriMovDblClick_Comu()  
+
  '''Private''' Sub GriViewComu_DblClick()  
 
  Dim iInd1 As Integer
 
  Dim iInd1 As Integer
 
  Dim iInd2 As Integer
 
  Dim iInd2 As Integer
 
   
 
   
oGridView1 = New Object[ ]
+
  oGridView1 = New Object[ ]
oGridView2 = New Object[ ]
+
  oGridView2 = New Object[ ]
If Last.Name = "GridView1" Then
+
  If Last.Name = "GridView1" Then
    oGridView1.Add(GridView1) 'GridView di partenza
+
      oGridView1.Add(GridView1) 'GridView di partenza
    oGridView2.Add(GridView2) 'GridView di arrivo
+
      oGridView2.Add(GridView2) 'GridView di arrivo
Else
+
  Else
    oGridView1.Add(GridView2) 'nuova GridView di partenza
+
      oGridView1.Add(GridView2) 'nuova GridView di partenza
    oGridView2.Add(GridView1) 'nuova GridView di arrivo
+
      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
 
   Endif
Next
+
  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'''
 
  '''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. La stessa effetto, in senso opposto avverrà eseguendo il doppio click su una riga valorizzata della GridView2.
+
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.

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.