Creare array di oggetti
Verranno mostrati alcuni esempi per la creazione di oggetti mediante l'uso di un array o vettore. [nota 1]
Indice
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.Push(t) 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.Push(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.