Metodo di pseudo indirizzamento ad Oggetti grafici

Da Gambas-it.org - Wikipedia.

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.