Creare array di oggetti
Verranno mostrati alcuni esempi per la creazione di array di Oggetti. [nota 1]
Indice
Creare un array di dimensioni indefinite di Oggetti del medesimo tipo
In questo caso l'array, dichiarato con un numero indefinito di Elementi, sarà creato e riempito immediatamente con gli Oggetti del tipo stabilito, usando il Metodo ".Push()" dell'array:
Public Sub Form_Open() Dim bt As Button Dim arrBt As New Button[] Dim j As Byte For j = 0 To 9 ' Viene innanzitutto creato l'Oggetto che dovrà essere assegnato a un Elemento dell'array del medeismo tipo dell'Oggetto. ' La sintassi "New Button(Me)" istruisce l'interprete che l'Oggetto deve essere creato e 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 grafico "Button": arrBt.Push(<FONT color=bt) Next End
Creare un array di dimensioni definite di Oggetti del medesimo tipo
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 ad esempio il limite massimo di 10 Elementi/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 ' E' interessante notare che in questo caso non è necessario creare uno specifico Oggetto da assegnare successivamente all'array, ma si può creare l'Oggetto usando direttamente un elemento dell'array medesimo: With Lblarray[i] = New Label(Me) .Border = Border.Raised .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
In quest'altro esempio, invece, si provvede a creare prima il singolo Oggetto grafico (una Label) e poi ad assegnarlo a un Elemento del vettore del medesimo tipo:
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" e 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 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 (sul "Form" saranno creati dal codice un "Button", una "Label", un "ToggleButton" e una "TextArea"):
Public Sub Form_Open() Dim b, n As Byte Dim As Button Dim lb As Label Dim tb As ToggleButton Dim ta As TextArea 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) ta = New TextArea(Me) As "textEdit" ogg.Push(ta) ' 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) ).