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

Da Gambas-it.org - Wikipedia.
 
(Una versione intermedia di uno stesso utente non è mostrata)
Riga 1: Riga 1:
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.
+
Usando un ciclo per creare più Oggetti, è possibile attribuire a essi il medesimo identificatore di variabile.
<BR>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 ([http://it.wikipedia.org/wiki/Array array]).
 
<BR>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'<I>indice</i> dell'elemento che la contiene:
+
Di seguito mostriamo due modalità per richiamare e gestire nel prosieguo del codice glli Oggetti creati come sopra descritto.
  '''Private''' bt As Button
+
 
'''Private''' vettBt As New Object[]  <FONT color=#006400>' ''oppure: New Button[]''</font>
+
 
 +
===Assegnando gli Oggetti a un vettore del loro medesimo tipo===
 +
Affinché nel codice i suddetti Oggetti possano essere richiamati e gestiti, si potrà assegnare ciascuno di essi a un elemento di un vettore del medesimo tipo di dato.
 +
<BR>In tal modo, pur non potendo via codice 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) di tipo "Button[]". Ciascuna variabile così avrà come riferimento un indice del vettore. Ciascun ''Button'' potrà così essere gestito indirettamente: attraverso il vettore al quale è stato assegnato. In particolare, ogni variabile di tipo ''Button'' sarà individuata sulla base dell'<I>indice</i> dell'elemento che la contiene.
 +
  Private vettBt As New Button[]
 
   
 
   
 
   
 
   
Riga 11: Riga 15:
 
   
 
   
 
   Dim j As Byte
 
   Dim j As Byte
 +
  Dim bt As Button
 
    
 
    
  For j = 0 To 4
+
  For j = 0 To 4
     With bt = New Button(Me) As "butt"
+
     With bt = New Button(Me) As "Butt"
 
       .W = 30
 
       .W = 30
 
       .H = 20
 
       .H = 20
Riga 19: Riga 24:
 
       .Y = 50
 
       .Y = 50
 
     End With
 
     End With
  <FONT color=#006400>' ''Dopo aver creato il "Button", la rispettiva variabile''
+
  <FONT color=gray>' ''Dopo aver creato il "Button", la rispettiva variabile viene assegnata ad un vettore di tipo "Button[]":''</font>
' ''viene assegnata ad un vettore di tipo ''Object'':''</font>
+
     <FONT color=#B22222>vettBt</font>.Push(bt)
     vettBt.Add(bt)
+
  Next
  Next
 
 
   
 
   
 
  '''End'''
 
  '''End'''
 
   
 
   
+
  '''Public''' Sub Butt_Click()
  '''Public''' Sub butt_Click()
 
 
    
 
    
 
   Dim b As Byte
 
   Dim b As Byte
 
    
 
    
 
  <FONT color=#006400>' ''Scegliamo il numero di "indice" dell'array:''</font>
 
  <FONT color=#006400>' ''Scegliamo il numero di "indice" dell'array:''</font>
    b = CByte(InputBox("Immetti un numero da 0 a 4:"))
+
  b = Val(InputBox("Immetti un numero da 0 a 4:"))
 
      
 
      
  <FONT color=#006400>' ''Così abbiamo la possibilità di individuare la variabile del "Button"''
+
  <FONT color=#006400>' ''Così abbiamo la possibilità di individuare la variabile del "Button" in base ad un numero comunque progressivo, e quindi gestire l'Oggetto:''</font>
' ''in base ad un numero comunque progressivo, e quindi gestire l'oggetto:''</font>
+
  <FONT color=#B22222>vettBt['''b''']</font>.Delete
    <FONT color=#B22222>vettBt['''b''']</font>.Delete
 
 
    
 
    
 
  '''End'''
 
  '''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:
+
===Usando l'Istruzione "Last"===
'''Private''' tl As TextLabel
+
Più semplicemente si potrà impegnare l'istruzione '''Last''', evitando così l'uso di un vettore.
'''Private''' vettTl As New TextLabel[]
 
'''Private''' b As Byte
 
 
 
 
  '''Public''' Sub Form_Open()
 
  '''Public''' Sub Form_Open()
 
   
 
   
   Dim j As Byte
+
   Dim b As Byte
+
  Dim bt As Button
   For j = 0 To 9
+
 
  With tl = New TextLabel(Me)
+
   For b = 0 To 4
    .W = 30
+
    With bt = New Button(Me) As "Butt"
    .H = 20
+
      .W = 30
    .X = 50 * j
+
      .H = 20
    .Y = 50
+
      .X = 50 * b
    .Border = 1
+
      .Y = 50
  End With
+
    End With
 
<FONT color=#006400>' ''Dopo aver creato la "TextLabel", la rispettiva variabile''
 
' ''viene assegnata ad un vettore di tipo "TextLabel[]":''</font>
 
  vettTl.Add(tl)
 
 
 
   Next
 
   Next
 
 
  With Timer1
 
    .Delay = 200
 
    .Start
 
  End With
 
 
   
 
   
 
  '''End'''
 
  '''End'''
 
   
 
   
 +
'''Public''' Sub Butt_Click()
 
   
 
   
'''Public''' Sub Timer1_Timer()
+
   <FONT color=#B22222>Last</font>.Delete
+
    
   vettTl[b].Background = Color.Default
 
 
  b = Rnd(0, 10)
 
   
 
   vettTl[b].Background = Color.Yellow
 
 
 
  '''End'''
 
  '''End'''

Versione attuale delle 19:04, 2 ott 2022

Usando un ciclo per creare più Oggetti, è possibile attribuire a essi il medesimo identificatore di variabile.

Di seguito mostriamo due modalità per richiamare e gestire nel prosieguo del codice glli Oggetti creati come sopra descritto.


Assegnando gli Oggetti a un vettore del loro medesimo tipo

Affinché nel codice i suddetti Oggetti possano essere richiamati e gestiti, si potrà assegnare ciascuno di essi a un elemento di un vettore del medesimo tipo di dato.
In tal modo, pur non potendo via codice 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) di tipo "Button[]". Ciascuna variabile così avrà come riferimento un indice del vettore. Ciascun Button potrà così essere gestito indirettamente: attraverso il vettore al quale è stato assegnato. In particolare, ogni variabile di tipo Button sarà individuata sulla base dell'indice dell'elemento che la contiene.

Private vettBt As New Button[]


Public Sub Form_Open()

 Dim j As Byte
 Dim bt As Button
 
 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 "Button[]":
   vettBt.Push(bt)
 Next

End

Public Sub Butt_Click()
 
 Dim b As Byte
 
' Scegliamo il numero di "indice" dell'array:
 b = Val(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


Usando l'Istruzione "Last"

Più semplicemente si potrà impegnare l'istruzione Last, evitando così l'uso di un vettore.

Public Sub Form_Open()

 Dim b As Byte
 Dim bt As Button
 
 For b = 0 To 4
   With bt = New Button(Me) As "Butt"
     .W = 30
     .H = 20
     .X = 50 * b
     .Y = 50
   End With
 Next

End

Public Sub Butt_Click()

 Last.Delete
 
End