Differenze tra le versioni di "Metodo di pseudo indirizzamento ad Oggetti grafici"
m |
|||
Riga 7: | Riga 7: | ||
− | Immagianiamo una data Form contenente due GridView di cui una di esse, la prima o la seconda, non importa quale, | + | 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 | |
'''End''' | '''End''' | ||
'''Public''' Sub GridView2_DblClick() | '''Public''' Sub GridView2_DblClick() | ||
− | + | GriViewComu_DblClick | |
'''End''' | '''End''' | ||
Riga 38: | Riga 38: | ||
Dim iInd2 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 | 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''' | '''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. | + | 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 13: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.