Creare array di oggetti

Da Gambas-it.org - Wikipedia.

Verranno mostrati alcuni esempi per la creazione di oggetti mediante l'uso di un array o vettore. [nota 1]


Semplice codice basilare per la creazione di un array del tipo di un oggetto

In questo caso l'array sarà creato e riempito immediatamente con gli oggetti del tipo stabilito:

Public Sub Form_Open()

 Dim bt As Button
 Dim arrBt As New Button[]
 Dim j As Byte


  For j = 0 To 9
    
' La sintassi "New Button(Me)" istruisce l'interprete
' che l'oggetto deve essere creato ed assegnato al "Form" ("Parent/Genitore"):
    With bt = New Button(Me) As "tasto"
      .X = 10
      .Y = 1 + (30 * j)
      .W = 60
      .H = 30
    End With

' Si assegna il nuovo "Button creato al vettore di tipo dell'oggetto "Button":
    arrBt.Add(bt)
 
 Next
 
End


Creare un array di dimensioni definite a priori

In questo caso viene posto a priori un limite massimo agli elementi dell'array. L'array sarà riempito di volta in volta che si preme un tasto:

Private Lblarray As New Label[10]   ' è posto il limite massimo a 10 oggetti
Private i As Integer
Private n As Integer


Public Sub Button1_Click()   ' Crea una Label ogni qualvolta viene premuto Button1
    
' Impedisce che venga superato il limite stabilito di Label da creare:
  If i = Lblarray.count Then Return
  
  n += 30

  With Lblarray[i] = New Label(Me)
    .Border = Border.Raised   ' sono definite le caratteristiche della label...
    .W = 100
    .H = 20
    .X = n
    .Y = n
    .text = "Nuova Label " & CStr(i)
  End With

' Viene incrementata la variabile relativa all'indice dell'array:
  Inc i

End


altro esempio:

Public Sub Form_Open()

 Dim llbb As New Label[3]
 Dim lb As Label
 Dim b As Byte
 
' Con un ciclo vengono create 3 Label ed assegnate al vettore di tipo "Label":
  For b = 0 To 2
    
    With lb = New Label(Me)
      .Border = Border.Raised
      .X = b * 40
      .Y = 10
      .W = 20
      .H = 20
      .Text = CStr(b)
    End With

' Assegna la variabile della Label, appena creata, al vettore di tipo "Label":
    llbb[b] = lb

  Next

End


Creare un array indefinito di oggetti del medesimo tipo

Nell'esempio, che segue, ogni volta che si clicca sul Button viene creato un nuovo Button sul Form:

Private i As Integer
Private tasti As New Button[]
 

Public Sub Button1_Click()

 Dim bt As Button
  
  With bt = New Button(Me) As "tasto"
    .X = 10    
    .Y = 40 * i
    .Width = 100    
    .Height = 40    
    .text = "Tasto n. " & i    
  End With     
  
  tasti.Add(bt)

  Inc i

End


Public Sub tasto_Click()   ' Andiamo a verificare il tasto premuto

   Print "E' stato premuto il tasto n. " & tasti.Find(Last)   [nota 2]
 
End


Creare un array di oggetti di tipo diverso

Come sappiamo, un array è un insieme di elementi del medesimo tipo. Per poter, dunque, creare un array che di fatto contenga oggetti di tipo diverso, sarà necessario individuare un tipo di variabile che possa a sua volta rappresentare, e dunque contenere tali oggetti diversi. La variabile in questione è quella di tipo: Object, la quale si pone rispetto ai vari oggetti in un rapporto di genus ad speciem.

Nell'esempio seguente sarà creato un array di quattro diversi tipi di oggetti:

Public Sub Form_Open()

 Dim b, n As Byte
 Dim bt As Button
 Dim lb As Label
 Dim tb As ToggleButton
 Dim te As TextEdit
 Dim ogg As New Object[]
 
' Vengono creati sul Form 4 oggetti diversi ed assegnati all'Array di tipo "Object":
  bt = New Button(Me) As "button"
  ogg.Push(bt)
  
  lb = New Label(Me) As "label"
  ogg.Push(lb)
  
  tb = New ToggleButton(Me) As "toggleButton"
  ogg.Push(tb)
  
  te = New TextEdit(Me) As "textEdit"
  ogg.Push(te)
  
' Vengono modificate alcune proprietà di ciascun oggetto presente nell'Array:
  For b = 0 To ogg.Max
    With ogg[b]
      .X = 10    
      .Y = n 
      .width = 150    
      .height = 40   
      .Font.Size = 7
      .text = "Oggetto: " & ogg[b].Name
    End With     
    n += 40    
  Next
  
End




Note

[1] Un Array o Vettore è un insieme di elementi del medesimo tipo. Pertanto un Array - ad esempio - del tipo Integer sarà un insieme di valori interi, conterrà solo valori di tipo Intero (ciascuno dunque occuperà 4 byte di memoria; o volendo ottenere la quantità di memoria occupata dal tipo Intero mediante una risorsa di Gambas potremo fare così: Sizeof(gb.Integer) ).

[2] tasti.Find(Last) ritorna la posizione nel vettore del Button creato che in questo caso è stato premuto.