Differenze tra le versioni di "Creare array di oggetti"

Da Gambas-it.org - Wikipedia.
Riga 1: Riga 1:
Verranno mostrati alcuni esempi per la creazione di oggetti mediante l'uso di un [http://it.wikipedia.org/wiki/Array array] o ''vettore''. <SUP>&#91;[[#Note|nota 1]]&#93;</sup>
+
Verranno mostrati alcuni esempi per la creazione di [http://it.wikipedia.org/wiki/Array array] di Oggetti. <SUP>&#91;[[#Note|nota 1]]&#93;</sup>
  
  
 
+
==Creare un array di dimensioni <SPAN style="text-decoration:underline">indefinite</span> di Oggetti del medesimo tipo==
==Semplice codice basilare per la creazione di un array del tipo di un oggetto==
+
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:
In questo caso l'array sarà creato e riempito immediatamente con gli oggetti del tipo stabilito:
 
 
  '''Public''' Sub Form_Open()
 
  '''Public''' Sub Form_Open()
 
   
 
   
Riga 11: Riga 10:
 
   Dim j As Byte
 
   Dim j As Byte
 
   
 
   
 +
  For j = 0 To 9 
 +
<FONT color=gray>' 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"):''</font>
 +
    With bt = New Button(Me) As "Tasto"
 +
      .X = 10
 +
      .Y = 1 + (30 * j)
 +
      .W = 60
 +
      .H = 30
 +
    End With
 +
 +
<FONT color=gray>' ''Si assegna il nuovo "Button" creato al vettore di tipo dell'Oggetto grafico "Button":''</font>
 +
    arrBt.<FONT color=#B22222>Push</font>(<FONT color=bt)
 +
  Next
 
   
 
   
  For j = 0 To 9
 
   
 
<FONT color=gray>' ''La sintassi "New Button(Me)" istruisce l'interprete''
 
' ''che l'oggetto deve essere creato ed assegnato al "Form" ("Parent/Genitore"):''</font>
 
    With bt = New Button(Me) As "tasto"
 
      .X = 10
 
      .Y = 1 + (30 * j)
 
      .W = 60
 
      .H = 30
 
    End With
 
 
<FONT color=gray>' ''Si assegna il nuovo "Button creato al vettore di tipo dell'oggetto "Button":''</font>
 
    arrBt.<FONT color=#B22222>Push(bt)</font>
 
 
 
  Next
 
 
 
 
  '''End'''
 
  '''End'''
  
  
 
+
==Creare un array di dimensioni <SPAN style="text-decoration:underline">definite</span> di Oggetti del medesimo tipo==
==Creare un array di dimensioni <SPAN style="text-decoration:underline">definite</span> a priori==
+
In questo caso viene posto a priori un limite massimo agli elementi dell'array.
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:
+
<BR>L'array sarà riempito di volta in volta che si preme un tasto:
  Private Lblarray As New Label[<Font Color=#B22222>10</font>]   <Font Color=gray>' ''è posto il limite massimo a 10 oggetti''</font>
+
  Private Lblarray As New Label[<Font Color=#B22222>10</font>] <Font Color=gray>' ''è posto ad esempio il limite massimo di 10 Elementi/Oggetti''</font>
 
  Private i As Integer
 
  Private i As Integer
 
  Private n As Integer
 
  Private n As Integer
Riga 42: Riga 38:
 
      
 
      
 
  <Font Color=gray>' ''Impedisce che venga superato il limite stabilito di Label da creare:''</font>
 
  <Font Color=gray>' ''Impedisce che venga superato il limite stabilito di Label da creare:''</font>
  If i = Lblarray.count Then Return
+
  If i = Lblarray.count Then Return
 
    
 
    
  n += 30
+
  n += 30
 
   
 
   
  With Lblarray[i] = New Label(Me)
+
<Font Color=gray>' ''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:'''''</font>
    .Border = Border.Raised   <Font Color=gray>' ''sono definite le caratteristiche della label...''</font>
+
  With Lblarray'''[i]''' = New Label(Me)
    .W = 100
+
    .Border = Border.Raised
    .H = 20
+
    .W = 100
    .X = n
+
    .H = 20
    .Y = n
+
    .X = n
    .text = "Nuova Label " & CStr(i)
+
    .Y = n
  End With
+
    .text = "Nuova Label " & CStr(i)
 +
  End With
 
   
 
   
 
  <Font Color=gray>' ''Viene incrementata la variabile relativa all'indice dell'array:''</font>
 
  <Font Color=gray>' ''Viene incrementata la variabile relativa all'indice dell'array:''</font>
  Inc i
+
  Inc i
 
   
 
   
 
  '''End'''
 
  '''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:
 
 
altro esempio:
 
 
  '''Public''' Sub Form_Open()
 
  '''Public''' Sub Form_Open()
 
   
 
   
Riga 68: Riga 63:
 
   Dim b As Byte
 
   Dim b As Byte
 
    
 
    
  <FONT Color=gray>' ''Con un ciclo vengono create 3 Label ed assegnate al vettore di tipo "Label":''</font>
+
  <FONT Color=gray>' ''Con un ciclo vengono create 3 "Label" e assegnate al vettore di tipo "Label":''</font>
  For b = 0 To 2
+
  For b = 0 To 2
   
+
    With lb = New Label(Me)
    With lb = New Label(Me)
+
      .Border = Border.Raised
      .Border = Border.Raised
+
      .X = b * 40
      .X = b * 40
+
      .Y = 10
      .Y = 10
+
      .W = 20
      .W = 20
+
      .H = 20
      .H = 20
+
      .Text = CStr(b)
      .Text = CStr(b)
+
    End With
    End With
+
  <FONT Color=gray>' ''Assegna la variabile della "Label", appena creata, al vettore di tipo "Label":''</font>
+
     llbb'''[b]''' = lb
  <FONT Color=gray>' ''Assegna la variabile della Label, appena creata, al vettore di tipo "Label":''</font>
 
     llbb[b] = lb
 
 
   
 
   
 
   Next
 
   Next
 
   
 
   
 
  '''End'''
 
  '''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.<FONT color=#B22222>Push(bt)</font>
 
 
  Inc i
 
 
'''End'''
 
 
 
'''Public''' Sub tasto_Click()  <FONT color=gray>' ''Andiamo a verificare il tasto premuto''</font>
 
 
    Print "E' stato premuto il tasto n. " & tasti.Find(Last)  <SUP>&#91;[[#Note|nota 2]]&#93;</sup>
 
 
 
'''End'''
 
 
  
  
 
==Creare un array di oggetti di tipo diverso==
 
==Creare un array di oggetti di tipo diverso==
Come sappiamo, un ''array'' è un insieme di elementi del <SPAN Style="text-decoration:underline">medesimo tipo</span>. 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''.
+
Come sappiamo, un ''array'' è un insieme di elementi del <SPAN Style="text-decoration:underline">medesimo tipo</span>. 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:
+
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()
 
  '''Public''' Sub Form_Open()
 
   
 
   
 
   Dim b, n As Byte
 
   Dim b, n As Byte
   Dim bt As Button
+
   Dim As Button
 
   Dim lb As Label
 
   Dim lb As Label
 
   Dim tb As ToggleButton
 
   Dim tb As ToggleButton
   Dim te As TextEdit
+
   Dim ta As TextArea
 
   Dim ogg As New Object[]
 
   Dim ogg As New Object[]
 
    
 
    
 
  <FONT Color=gray>' ''Vengono creati sul Form 4 oggetti diversi ed assegnati all'Array di tipo "Object":''</font>
 
  <FONT Color=gray>' ''Vengono creati sul Form 4 oggetti diversi ed assegnati all'Array di tipo "Object":''</font>
  bt = New Button(Me) As "button"
+
  bt = New Button(Me) As "button"
  ogg.Push(bt)
+
  ogg.Push(bt)
 
    
 
    
  lb = New Label(Me) As "label"
+
  lb = New Label(Me) As "label"
  ogg.Push(lb)
+
  ogg.Push(lb)
 
    
 
    
  tb = New ToggleButton(Me) As "toggleButton"
+
  tb = New ToggleButton(Me) As "toggleButton"
  ogg.Push(tb)
+
  ogg.Push(tb)
 
    
 
    
  te = New TextEdit(Me) As "textEdit"
+
  ta = New TextArea(Me) As "textEdit"
  ogg.Push(te)
+
  ogg.Push(ta)
 
    
 
    
 
  <FONT Color=gray>' ''Vengono modificate alcune proprietà di ciascun oggetto presente nell'Array:''</font>
 
  <FONT Color=gray>' ''Vengono modificate alcune proprietà di ciascun oggetto presente nell'Array:''</font>
  For b = 0 To ogg.Max
+
  For b = 0 To ogg.Max
    With ogg[b]
+
    With ogg[b]
      .X = 10     
+
      .X = 10     
      .Y = n  
+
      .Y = n  
      .width = 150     
+
      .width = 150     
      .height = 40   
+
      .height = 40   
      .Font.Size = 7
+
      .Font.Size = 7
      .text = "Oggetto: " & ogg[b].Name
+
      .text = "Oggetto: " & ogg[b].Name
    End With     
+
    End With     
    n += 40     
+
    n += 40     
  Next
+
  Next
 
    
 
    
 
  '''End'''
 
  '''End'''
 
  
  
Riga 169: Riga 127:
 
=Note=
 
=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)'' ).
 
[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.
 

Versione delle 10:36, 2 ott 2022

Verranno mostrati alcuni esempi per la creazione di array di Oggetti. [nota 1]


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) ).