Differenze tra le versioni di "Richiamare e gestire più oggetti assegnati a variabili con medesimo identificatore"

Da Gambas-it.org - Wikipedia.
Riga 21: Riga 21:
 
  <FONT color=#006400>' ''Dopo aver creato il "Button", la rispettiva variabile''
 
  <FONT color=#006400>' ''Dopo aver creato il "Button", la rispettiva variabile''
 
  ' ''viene assegnata ad un vettore di tipo ''Object'':''</font>
 
  ' ''viene assegnata ad un vettore di tipo ''Object'':''</font>
     vettBt.Add(bt)
+
     <FONT color=#B22222>vettBt</font>.Add(bt)
 
   Next
 
   Next
 
   
 
   
Riga 62: Riga 62:
 
  <FONT color=#006400>' ''Dopo aver creato la "TextLabel", la rispettiva variabile''
 
  <FONT color=#006400>' ''Dopo aver creato la "TextLabel", la rispettiva variabile''
 
  ' ''viene assegnata ad un vettore di tipo "TextLabel[]":''</font>
 
  ' ''viene assegnata ad un vettore di tipo "TextLabel[]":''</font>
   vettTl.Add(tl)
+
   <FONT color=#B22222>vettTl</font>.Add(tl)
 
   
 
   
 
   Next
 
   Next
Riga 76: Riga 76:
 
  '''Public''' Sub Timer1_Timer()
 
  '''Public''' Sub Timer1_Timer()
 
   
 
   
   vettTl[b].Background = Color.Default
+
   <FONT color=#B22222>vettTl['''b''']</font>.Background = Color.Default
 
   
 
   
 
   b = Rnd(0, 10)
 
   b = Rnd(0, 10)
 
      
 
      
   vettTl[b].Background = Color.Yellow
+
   <FONT color=#B22222>vettTl['''b''']</font>.Background = Color.Yellow
 
   
 
   
 
  '''End'''
 
  '''End'''

Versione delle 08:26, 26 giu 2013

Talvolta, creando da codice più oggetti, si sente la necessità, ai fini della loro gestione, di poter aggiungere al nome di ciascuna variabile, che si riferisce a quegli oggetti, un numero progressivo sulla base dell'ordine di creazione degli oggetti. In questo modo le variabili attribuite ad ogni oggetto creato risulterebbero distinte numericamente.
Ciò, però, non è possibile direttamente via codice. E'comunque possibile ottenere un risultato analogo, ai fini della gestione degli oggetti mediante un riferimento numerico progressivo, attraverso i vettori (array).
Pertanto, pur non potendo aggiungere all'identificatore di ciascuna variabile un numero progressivo, si utilizzerà - come alternativa - la progressività numerica del vettore.

Nell'esempio che segue, saranno creati sul Form cinque Button, che verranno assegnati a cinque variabili del medesimo tipo ed aventi medesima denominazione (identificatore). Le cinque variabili saranno assegnate ad una variabile vettore (array), ciascuna delle quali in tal modo avrà come riferimento un indice del vettore medesimo. Ciascun Button potrà così essere gestito, sì mediante la sua rispettiva variabile, ma indirettamente: attraverso il vettore di tipo Object, oppure di tipo dell'oggetto specifico da creare (in questo caso il Button), nel quale essa è contenuta. In particolare, ogni variabile di tipo Button sarà individuata sulla base dell'indice dell'elemento che la contiene:

Private bt As Button
Private vettBt As New Object[]   ' oppure: New Button[]


Public Sub Form_Open()

 Dim j As Byte
 
  For j = 0 To 4
   With bt = New Button(Me) As "butt"
     .W = 30
     .H = 20
     .X = 50 * j
     .Y = 50
   End With
' Dopo aver creato il "Button", la rispettiva variabile
' viene assegnata ad un vettore di tipo Object:
   vettBt.Add(bt)
  Next

End


Public Sub butt_Click()
 
 Dim b As Byte
 
' Scegliamo il numero di "indice" dell'array:
   b = CByte(InputBox("Immetti un numero da 0 a 4:"))
   
' Così abbiamo la possibilità di individuare la variabile del "Button"
' in base ad un numero comunque progressivo, e quindi gestire l'oggetto:
   vettBt[b].Delete
 
End


Nell'esempio che segue vengono create dieci TextLabel, ciscuna delle quali assegnata ad una variabile; variabile a sua volta assegnata ad un elemento di un vettore di tipo TextLabel[]. Si dovrà piazzare dall'IDE sul Form un Timer. Il risultato del codice è la colorazione di giallo in modo casuale e ritorno al colore di default di una TextLabel per volta, individuata all'interno ovviamente dell'indice del vettore che contiene la sua variabile di riferimento, con effetto lampeggiamento:

Private tl As TextLabel
Private vettTl As New TextLabel[]
Private b As Byte


Public Sub Form_Open()

 Dim j As Byte

 For j = 0 To 9
  With tl = New TextLabel(Me)
    .W = 30
    .H = 20
    .X = 50 * j
    .Y = 50
    .Border = 1
  End With

' Dopo aver creato la "TextLabel", la rispettiva variabile
' viene assegnata ad un vettore di tipo "TextLabel[]":
  vettTl.Add(tl)

 Next
 
 With Timer1
   .Delay = 200
   .Start
 End With

End


Public Sub Timer1_Timer()

 vettTl[b].Background = Color.Default

 b = Rnd(0, 10)
   
 vettTl[b].Background = Color.Yellow

End