Autore Topic: Da array a group  (Letto 1258 volte)

Offline ivosperi

  • Gamberetto
  • *
  • Post: 44
    • Mostra profilo
Da array a group
« il: 21 Gennaio 2009, 19:01:50 »
ciao a tutti una domanda:

in vb era possibile creare degli array di un oggetto tipo: text1(#)
in modo che si potessero modificare anche così
for i = 1 to 10
 text1(i) = "ABC"
next i

oppure un altro esempio con pulsanti: Command1(#)
sub Command1_Click (index as integer)
 if index = 3 then ......
end sub

Come posso fare lo stesso con gambas ?
Grazie mille ciao ivo

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Da array a group
« Risposta #1 il: 21 Gennaio 2009, 23:18:33 »
In Gambas non si possono creare matrici di oggetti.
Però si può usare la proprietà "Group" nell'IDE impostando un nome uguale per tutti. In questa maniera gli eventi referenziano al gruppo di oggetti creato e per sapere quale di essi ha elevato l'evento basta utilizzare LAST.proprietà_da_controllare. Ad esempio, poniamo che hai inserito 3 pulsanti denominati btnPulsante1, btnPulsante2 e btnPulsante3, ognuno che un testo preciso, e li hai accorpati in un gruppo denominato "grpPulsanti".

Se crei l'evento Click per un pulsante qualunque, vedrai che Gambas scriverà nel codice "grpPulsanti_Click()". Qui potrai leggere ad esempio il testo del pulsante con LAST.Text.
Visita il mio sito personale: http://www.leonardomiliani.com

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Da array a group
« Risposta #2 il: 22 Gennaio 2009, 10:50:42 »
Bè, un'alternativa ci sarebbe... quella di usare un'array Object[], in cui memorizzare i puntamenti ai vari oggetti; poi, con un loop, settarli a piacere.

Offline ivosperi

  • Gamberetto
  • *
  • Post: 44
    • Mostra profilo
Re: Da array a group
« Risposta #3 il: 22 Gennaio 2009, 16:50:33 »
Grazie mille
vorrei provare ad usare un'array Object[], ma come posso collegarla agli oggetti.
Grazie ancora ciao

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Da array a group
« Risposta #4 il: 23 Gennaio 2009, 00:24:17 »
Bè, gli oggetti devi crearli: o graficamente inserendoli nella Form, oppure dinamicamente tramite codice alla creazione della Form stessa (vedi metodo _new(), di cui una spiegazione è presente nel wiki).
Dopo di che, crei anche un variabile di tipo Object[], in cui inserisci nuovi elementi, corrispondenti agli oggetti grafici creati (vedi sopra):

Codice: [Seleziona]

PRIVATE $controls AS NEW Object[]

PUBLIC SUB _new()
  $controls.Add(ME.ComboBox1)
  $controls.Add(ME.TextBox1)
  $controls.Add(ME.ListBox3)
  ...
  $controls.Add(ME.CheckBox110)
END


una volta che hai riempito l'array, con i puntamenti a vari oggetti che interessano la tua logica, puoi usarli nei metodi della Form (o qualsiasi altra classe contenitore), come ad esempio (bada, è solo un esempio):

Codice: [Seleziona]

PUBLIC SUB Button_Click()
  DIM oElement AS Object
  FOR EACH oElement IN $controls
    oElement.Text = "Pippo"
  NEXT
END


ad ogni loop, oElement assume il valore di un singolo elemento dell'array, dal primo all'ultimo; il valore non è altro che un puntamento all'oggetto fisivo (es. una ListBox), per cui ogni modifica fatta sulla variabile si riflette direttamente sull'oggetto stesso. Nell'esempio, alla proprietà Text di ogni elemento, viene assegnata la stringa "Pippo"; ovviamente la proprietà deve essere presente, altrimenti avrai un errore.

L'oggetto Object[], in realtà è sì un tipo array, ma ha anche alcuni metodi per, ad esempio: eliminare elementi, scambiarli di posto, aggiungerne altri, ecc., per cui ti permette anche di manipolare le cose in modo abbastanza dinamico, più o meno come avveniva in VB.
Tieni anche conto che, a parte l'occupazione di memoria dell'oggetto Object[], non hai altri inconvenienti, dato che ogni elemento conterrà solamente il puntamento all'oggetto reale (es. una TextBox), più o meno come avveniva in VB.

Bye

Offline ivosperi

  • Gamberetto
  • *
  • Post: 44
    • Mostra profilo
Re: Da array a group
« Risposta #5 il: 23 Gennaio 2009, 13:23:00 »
Grazie mille md9327, era proprio quello che cercavo.
una sola curiosità perché il nome dell'array cominca con $
grazie ancora ciao

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Da array a group
« Risposta #6 il: 23 Gennaio 2009, 16:51:56 »
Il motivo è semplicemente perchè è dichiarata PRIVATE all'interno di una classe.

In realtà non ha significato funzionale, ma è più una sintassi a livello visivo, per organizzare e separare meglio il tipo di variabili che si stà usando.

Nella doc di Gambas, ma è vero anche in altri linguaggi, viene consigliata una struttura sintattica, in modo da rendere più leggibile il codice. Per il C/C++, esiste larga documentazione su questo argomento, e molte diverse proposte; lavorativamente parlando, molte società applicano dei requisiti specifici per lo sviluppo del software interno.

A livello storico, la sintassi normalmente usata in Gambas, segue un pò quella che era del Basic ma, mentre nel Basic era considerato obbligatorio per le variabili, in Gambas è solo un retaggio storico.

Per le funzioni io, ad esempio, uso il carattere underscore ad inizio nome, per identificare un metodo di classe privata, similarmente ai metodi nascosti che ha Gambas (es. _new(), _free(), ecc.).

Offline ivosperi

  • Gamberetto
  • *
  • Post: 44
    • Mostra profilo
Re: Da array a group
« Risposta #7 il: 23 Gennaio 2009, 19:05:57 »
Grazie mille Ciao