Differenze tra le versioni di "Creare array di oggetti"

Da Gambas-it.org - Wikipedia.
 
(41 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
Nei primi due esempi che faremo, verrà creato un array indefinito di oggetti. Per fare ciò sarà necessario l'uso del metodo ''.add'' con una variabile array di tipo "''oggetto''".
+
Verranno mostrati alcuni esempi per la creazione di [http://it.wikipedia.org/wiki/Array array] di Oggetti. <SUP>&#91;[[#Note|nota 1]]&#93;</sup>
  
  
<FONT color=B22222>'''1'''</font> - Uso del metodo ''.Add'' con una variabile array di tipo "''oggetto''" e con specificazione dell'elemento dell'array nel quale inserire la Label:
+
==Creare un array di dimensioni <SPAN style="text-decoration:underline">indefinite</span> 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:
  <Font Color= #006400>' ''Gambas class file''</font>
+
  '''Public''' Sub Form_Open()
 
Private obj As New Object[]
 
c As Integer
 
i As Integer
 
 
 
   
 
   
'''Public''' Sub Button1_Click()
+
  Dim bt As Button
 +
  Dim arrBt As New Button[]
 +
  Dim j As Byte
 
   
 
   
    obj.Add(Label)
+
  For j = 0 To 9 
     obj[i] = New Label(Me)
+
<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=006400>' ''Ad ogni clic sul tasto viene mostrata la Label sul form:''</font>
+
  <FONT color=gray>' ''Si assegna il nuovo "Button" creato al vettore di tipo dell'Oggetto grafico "Button":''</font>
    With obj[i]
+
    arrBt.<FONT color=#B22222>Push</font>(<FONT color=bt)
      .X = 10 * i
+
  Next
      .Y = c
 
      .width = 100
 
      .height = 20
 
      .text = "Nuova Label"
 
    End With
 
   
 
    c += 30
 
   
 
<Font Color= #006400>' ''Viene incrementata la variabile relativa alla cella dell'array di indice 0:''</font>
 
Inc i
 
 
   
 
   
 
  '''End'''
 
  '''End'''
  
  
 
+
==Creare un array di dimensioni <SPAN style="text-decoration:underline">definite</span> di Oggetti del medesimo tipo==
 
+
In questo caso viene posto un limite massimo agli elementi dell'array.
<FONT color=B22222>'''2'''</font> - Uso del metodo ''.Add'' con una variabile array di tipo "''oggetto''" e senza specificazione dell'elemento dell'array nel quale inserire un Form:
+
  '''Public''' Sub Form_Open()
 
 
  <Font Color= #006400>' ''Gambas class file''</font>
 
 
   
 
   
Private obja As New Object[]   
+
  Dim Lblarray As New Label[<Font Color=#B22222>10</font><Font Color=gray>' ''è posto ad esempio il limite massimo di 10 Elementi/Oggetti''</font>
Private k As Integer 
+
  Dim b As Byte
Private j As Byte
 
 
   
 
   
  '''Public''' Sub Button1_Click()
+
  <Font Color=gray>' ''Ad ogni giro del ciclo crea una Label:''</font>
 +
  For b = 0 To Lblarray.Max
 
   
 
   
Dim fo As Form 
+
  <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>
Dim box As New Form 
+
     With Lblarray'''[b]''' = New Label(Me)
     
+
      .Border = Border.Raised
  <Font Color= #006400>' ''istanzio un Form:''</font>
+
      .W = 100
    fo = New Form As "fo" 
+
      .H = 20
     
+
      .X = b * 35
<Font Color= #006400>' ''...e lo aggiungo ad un elemento dell'array:''</font>
+
      .Y = b * 40
     obja.Add(fo)
+
      .text = "Label " & CStr(b)
 
+
     End With
       
+
  Next
<Font Color= #006400>' ''evito di superare il numero di elementi dell'array:''</font>
 
     If j > obja.max Then Return
 
 
   
 
   
      k = k + 60  
+
  '''End'''
      box = obja[j] 
+
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:
  <Font Color= #006400>' ''Ad ogni clic sul tasto viene mostrato un Form:''</font>
+
  '''Public''' Sub Form_Open()
    With box 
 
      .W = 150 
 
      .H = 150 
 
      .X = k 
 
      .Y = k
 
      .Caption = "Nuovo Form"
 
      .Show 
 
      .TopOnly = True
 
    End With 
 
 
   
 
   
  <Font Color= #006400>' ''Viene incrementata la variabile relativa alla cella dell'array di indice 0:''</font>
+
  Dim llbb As New Label[<Font Color=#B22222>8</font>] <Font Color=gray>' ''è posto ad esempio il limite massimo di 8 Elementi/Oggetti''</font>
    Inc j 
+
  Dim lb As Label
 +
  Dim b As Byte
 +
 
 +
<FONT Color=gray>' ''Con un ciclo vengono create 8 "Label" e assegnate al vettore di tipo "Label":''</font>
 +
  For b = 0 To llbb.Max
 +
    With lb = New Label(Me)
 +
      .Border = Border.Raised
 +
      .X = b * 40
 +
      .Y = b * 40
 +
      .W = 30
 +
      .H = 20
 +
      .Alignment = Align.Center
 +
      .Text = CStr(b)
 +
    End With
 +
<FONT Color=gray>' ''Assegna la variabile della "Label", appena creata, al vettore di tipo "Label":''</font>
 +
    llbb'''[b]''' = lb
 +
  Next
 
   
 
   
 
  '''End'''
 
  '''End'''
  
  
 +
==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''.
  
 
+
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()
In questo terzo esempio si potrà evitare l'uso della variabile di tipo "''oggetto''" e del relativo metodo ''.add'', ma si dovrà porre un array di dimensioni <SPAN style="text-decoration:underline">definite</span>.
 
 
 
  <Font Color= #006400>' ''Gambas class file''</font>
 
 
   
 
   
  Private Lblarray As New Label[9]  ' è posto il limite massimo a 10 oggetti ("array di 10 elementi: da 0 a 9")
+
  Dim b, n As Byte
Private a As Integer
+
  Dim As Button
Private b As Integer
+
  Dim lb As Label
+
  Dim tb As ToggleButton
Public Sub Button1_Click()  <Font Color= #006400>' ''Crea una Label ogni qualvolta viene premuto Button1''</font>
+
  Dim ta As TextArea
+
  Dim ogg As New Object[]
Dim c, d As Integer
+
    
 +
<FONT Color=gray>' ''Vengono creati sul Form 4 oggetti diversi ed assegnati all'Array di tipo "Object". Sono assegnati altresì a un unico Gruppo di gestione dei propri Eventi.''</font>
 +
  bt = New Button(Me) As "Oggetto"
 +
  ogg.Push(bt)
 +
 
 +
  lb = New Label(Me) As "Oggetto"
 +
  ogg.Push(lb)
 +
 
 +
  tb = New ToggleButton(Me) As "Oggetto"
 +
  ogg.Push(tb)
 +
 
 +
  ta = New TextArea(Me) As "Oggetto"
 +
   ogg.Push(ta)
 +
 
 +
<FONT Color=gray>' ''Vengono modificate alcune proprietà di ciascun oggetto presente nell'Array:''</font>
 +
  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
 
    
 
    
  b += 50
+
  '''End'''
 
   
 
   
  Lblarray[a] = New Label(Me)
+
  '''Public''' Sub Oggetto_MouseUp()
 
   
 
   
  <Font Color= #006400>' ''Viene mostrata la Label sul Form:''</font>
+
  <FONT Color=gray>' ''Se si clicca su uno dei 4 Controlli grafici, posti sul "Form", sulla barra del titolo del "Form" sarà indicato il Controllo cliccato:''</font>
With Lblarray[a]
+
   Me.Title = "Oggetto premuto: " & Object.Type(Last)
   .Border = Border.Raised  <Font Color= #006400>' ''sono definite le caratteristiche della label...''</font>
 
  .W = 100
 
  .H = 20
 
  .X = b
 
  .Y = b
 
  .text = "Nuova Label"
 
End With
 
 
<Font Color= #006400>' ''Viene incrementata la variabile relativa alla cella dell'array di indice 0:''</font>
 
Inc a
 
 
   
 
   
 
  '''End'''
 
  '''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)'' ).

Versione attuale delle 11:10, 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 un limite massimo agli elementi dell'array.

Public Sub Form_Open()

 Dim Lblarray As New Label[10]  ' è posto ad esempio il limite massimo di 10 Elementi/Oggetti
 Dim b As Byte

' Ad ogni giro del ciclo crea una Label:
 For b = 0 To Lblarray.Max

' 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[b] = New Label(Me)
     .Border = Border.Raised
     .W = 100
     .H = 20
     .X = b * 35
     .Y = b * 40 
     .text = "Label " & CStr(b)
   End With
 Next

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[8]  ' è posto ad esempio il limite massimo di 8 Elementi/Oggetti
 Dim lb As Label
 Dim b As Byte
 
' Con un ciclo vengono create 8 "Label" e assegnate al vettore di tipo "Label":
 For b = 0 To llbb.Max
   With lb = New Label(Me)
     .Border = Border.Raised
     .X = b * 40
     .Y = b * 40
     .W = 30
     .H = 20
     .Alignment = Align.Center
     .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". Sono assegnati altresì a un unico Gruppo di gestione dei propri Eventi.
 bt = New Button(Me) As "Oggetto"
 ogg.Push(bt)
  
 lb = New Label(Me) As "Oggetto"
 ogg.Push(lb)
  
 tb = New ToggleButton(Me) As "Oggetto"
 ogg.Push(tb)
  
 ta = New TextArea(Me) As "Oggetto"
 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

Public Sub Oggetto_MouseUp()

' Se si clicca su uno dei 4 Controlli grafici, posti sul "Form", sulla barra del titolo del "Form" sarà indicato il Controllo cliccato:
 Me.Title = "Oggetto premuto: " & Object.Type(Last)

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