Differenze tra le versioni di "Assegnare da codice più oggetti ad un Gruppo di eventi"

Da Gambas-it.org - Wikipedia.
 
(6 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
I "gruppi" di Eventi aggregano i gestori degli Eventi di un insieme costituito da più Oggetti.  
+
I "gruppi" di Eventi aggregano i gestori degli Eventi di un insieme costituito da uno o più Oggetti.  
  
L'assegnazione di uno o più oggetti ad un Gruppo di Eventi consente, mediante il nome comune di quel Gruppo, di sollevare per ciascun oggetto, appartenente a quel Gruppo, gli eventi supportati. <SUP>&#091;[[#Note|Nota 1]]&#093;</sup>
+
L'assegnazione di uno o più oggetti a un medesimo Gruppo di Eventi consente, mediante il nome comune di quel Gruppo, di sollevare per ciascun oggetto, appartenente a quel Gruppo, gli eventi supportati. <SUP>&#091;[[#Note|nota 1]]&#093;</sup>
  
 
E' possibile assegnare uno o più Oggetti, anche diversi fra loro, ad un unico Gruppo di Eventi:
 
E' possibile assegnare uno o più Oggetti, anche diversi fra loro, ad un unico Gruppo di Eventi:
Riga 8: Riga 8:
  
 
Va precisato, che l'attribuzione di un Oggetto a un Gruppo di Eventi mediante codice, avviene attraverso l'assegnazione ad ogni Oggetto creato un ''Osservatore'', il quale intercetta gli eventi scatenati da esso. Ad ogni ''Osservatore'' è possibile associare uno o più Oggetti creati.
 
Va precisato, che l'attribuzione di un Oggetto a un Gruppo di Eventi mediante codice, avviene attraverso l'assegnazione ad ogni Oggetto creato un ''Osservatore'', il quale intercetta gli eventi scatenati da esso. Ad ogni ''Osservatore'' è possibile associare uno o più Oggetti creati.
<BR>V'è da rilevare, altresì, che l'attribuzione da codice, successiva, dell'oggetto ad un ''Gruppo'' di Eventi annulla l'efficacia di una eventuale attribuzione ''precedente'' del medesimo oggetto ad altro Gruppo di Eventi, sia effettuata da IDE che da codice.
+
<BR>V'è da rilevare, altresì, che l'attribuzione da codice, successiva, dell'Oggetto ad un ''Gruppo'' di Eventi annulla l'efficacia di una eventuale attribuzione ''precedente'' del medesimo Oggetto ad altro Gruppo di Eventi, sia effettuata da IDE che da codice.
  
 
Possiamo assegnare via codice uno o più oggetti ad unico ''Gruppo'' di Eventi (specificando l'<I>Osservatore</i> degli Eventi) almeno in quattro modi:
 
Possiamo assegnare via codice uno o più oggetti ad unico ''Gruppo'' di Eventi (specificando l'<I>Osservatore</i> degli Eventi) almeno in quattro modi:
 
* con la parola-chiave '''[https://gambaswiki.org/wiki/lang/as?l=it As ]''' nel momento della dichiarazione e creazione:
 
* con la parola-chiave '''[https://gambaswiki.org/wiki/lang/as?l=it As ]''' nel momento della dichiarazione e creazione:
  Dim variabile As New Tipo_Oggetto(Genitore) <FONT color=#B22222>'''As''' "nome_Gruppo"</font>
+
  Dim variabile As New Tipo_Oggetto(Genitore) <FONT color=#B22222>'''As''' "Nome_Gruppo"</font>
 
o nel momento della creazione:
 
o nel momento della creazione:
  variabile = New Tipo_Oggetto(Genitore) <FONT color=#B22222>'''As''' "nome_Gruppo"</font>
+
  variabile = New Tipo_Oggetto(Genitore) <FONT color=#B22222>'''As''' "Nome_Gruppo"</font>
 
* con il metodo '''[https://gambaswiki.org/wiki/comp/gb/object/attach?l=it Object.Attach() ]''':
 
* con il metodo '''[https://gambaswiki.org/wiki/comp/gb/object/attach?l=it Object.Attach() ]''':
  <FONT color=#B22222>'''Object.Attach'''</font>(tipo_Oggetto, Genitore, <FONT color=#B22222>"nome_Gruppo"</font>)
+
  <FONT color=#B22222>'''Object.Attach'''</font>(tipo_Oggetto, Genitore, <FONT color=#B22222>"Nome_Gruppo"</font>)
 
* con '''[https://gambaswiki.org/wiki/comp/gb/observer?l=it Observer ]''' e la parola-chiave '''As''':
 
* con '''[https://gambaswiki.org/wiki/comp/gb/observer?l=it Observer ]''' e la parola-chiave '''As''':
  variabile_tipo_Observer = New <FONT color=#B22222>'''Observer'''</font>(variabile_tipo_oggetto) <FONT color=#B22222>'''As''' "nome_Gruppo"</font>
+
  variabile_tipo_Observer = New <FONT color=#B22222>'''Observer'''</font>(variabile_tipo_oggetto) <FONT color=#B22222>'''As''' "Nome_Gruppo"</font>
  
 
Esempio:
 
Esempio:
  '''Public''' Sub Form_Open()
+
  Public Sub Form_Open()
 
   
 
   
   Dim bt1 As New Button(Me) <FONT color=#B22222>As "gruppOggetti"</font>    <Font color=#006400>' ''Assegnamo il 1° "Button" all'unico Gruppo degli oggetti che saranno creati''</font>
+
   Dim bt1 As New Button(Me) <FONT color=#B22222>As "gruppOggetti"</font>    <Font color=#006400>' ''Assegna il 1° "Button" all'unico Gruppo degli oggetti che saranno creati''</font>
 
   Dim bt2 As Button
 
   Dim bt2 As Button
 
   Dim tx As New TextLabel(Me)
 
   Dim tx As New TextLabel(Me)
Riga 29: Riga 29:
 
   Dim obs As Observer
 
   Dim obs As Observer
 
   
 
   
  <Font color=#006400>' '''''Assegnamo''' (fatta eccezione per il 1° "Button" per il quale abbiamo già provveduto in fase di dichiarazione)''
+
  <Font color=#006400>' '''''Assegna''' (fatta eccezione per il 1° "Button" per il quale abbiamo già provveduto in fase di dichiarazione) '''''i restanti tre oggetti creati all'unico Gruppo''' (che qui per esempio denominiamo: "gruppOggetti") '''negli altri tre modi predetti:'''''</font>
'''' ''i restanti tre oggetti creati all'unico Gruppo''' (che qui per esempio denominiamo: "gruppOggetti") '''negli altri tre modi predetti:'''''</font>
 
 
   
 
   
  <Font color=#006400>' ''- quando creiamo l'oggetto:''</font>
+
  <Font color=#006400>' ''- quando crea l'oggetto:''</font>
   bt2 = New Button(Me) <FONT color=#B22222><B>As</b> "gruppOggetti"</font>
+
   bt2 = New Button(Me) <FONT color=#B22222><B>As</b> "GruppOggetti"</font>
 
   
 
   
 
  <Font color=#006400>' ''- con il metodo "Attach" della classe Object:''</font>
 
  <Font color=#006400>' ''- con il metodo "Attach" della classe Object:''</font>
   Object<B>.Attach</b>(tx, Me, <FONT color=#B22222>"gruppOggetti"</font>)
+
   Object<B>.Attach</b>(tx, Me, <FONT color=#B22222>"GruppOggetti"</font>)
 
   
 
   
 
  <Font color=#006400>' ''- con "Observer":''</font>
 
  <Font color=#006400>' ''- con "Observer":''</font>
   obs = New <B>Observer</b>(lb) <FONT color=#B22222>As "gruppOggetti"</font>
+
   obs = New <B>Observer</b>(lb) <FONT color=#B22222>As "GruppOggetti"</font>
 
   
 
   
 
   
 
   
+
  <Font color=#006400>' ''Attribuisce le caratteristiche di ciascun Oggetto grafico creato:''</font>
  <Font color=#006400>' ''Attribuiamo le caratteristiche di ciascun oggetto creato:''</font>
 
 
   With bt1
 
   With bt1
 
     .W = 50
 
     .W = 50
Riga 81: Riga 79:
 
   End With
 
   End With
 
    
 
    
  '''End'''
+
  End
 
 
   
 
   
  <Font color=#006400>' ''L'<I>evento</i> che scatena la seguente routine è, così, comune a tutti e tre gli oggetti''
+
  <Font color=#006400>' ''L'<I>Evento</i> che scatena la seguente routine è, così, comune a tutti e tre gli Oggetti che, in qualunque dei tre modi sopra descritti, sono stati assegnati ad un unico "gruppo" di Eventi (denominato in questo esempio: <I>GruppOggetti</i>).''
' ''che, in qualunque dei tre modi sopra descritti, sono stati assegnati ad un unico
+
  ' ''Pertanto, in questo caso, passando con il mouse sopra uno qualunque dei tre Oggetti creati, si scatena l'Evento:''</font>
' ''"gruppo" di Eventi (denominato in questo esempio: <I>gruppOggetti</i>).''
+
  Public Sub <FONT color=#B22222>GruppOggetti</font>_Enter()
  ' ''Pertanto, in questo caso, passando con il mouse sopra uno qualunque dei tre oggetti creati, si scatena l'evento:''</font>
 
  '''Public''' Sub <FONT color=#B22222>gruppOggetti</font>_Enter()
 
 
   
 
   
 
   Dim objGrOgg As Object = Last  
 
   Dim objGrOgg As Object = Last  
 
   
 
   
   Print "Sei entrato " & objGrOgg.Tag  <Font color=#006400>'</font> <SUP>&#091;[[#Note|Nota 2]]&#093;</sup>
+
   Print "Sei entrato " & objGrOgg.Tag  <Font color=#006400>'</font> <SUP>&#091;[[#Note|nota 2]]&#093;</sup>
 
   
 
   
  '''End'''
+
  End
  
  
Riga 101: Riga 96:
  
 
Mostriamo un codice esemplificativo con "'''Observer()'''":
 
Mostriamo un codice esemplificativo con "'''Observer()'''":
  '''Public''' Sub Form_Open()
+
  Public Sub Form_Open()
 
    
 
    
 
   Dim tb As TextBox
 
   Dim tb As TextBox
Riga 115: Riga 110:
 
       .Name = "TextBox_" & Str(n)
 
       .Name = "TextBox_" & Str(n)
 
     End With
 
     End With
     obs = New <FONT color=#B22222>Observer</font>(tb) As "NomeGruppo"
+
     obs = New <FONT color=#B22222>Observer</font>(tb) As "<Font color=#006400>NomeGruppo</font>"
 
   Next
 
   Next
 
    
 
    
  '''End'''
+
  End
 
    
 
    
  '''Public''' Sub NomeGruppo_Change()
+
  Public Sub <Font color=#006400>NomeGruppo</font>_Change()
 
    
 
    
 
   Print Last.Name
 
   Print Last.Name
 
    
 
    
  '''End'''
+
  End
 
e con "'''Object.Attach()'''":
 
e con "'''Object.Attach()'''":
  '''Public''' Sub Form_Open()
+
  Public Sub Form_Open()
 
    
 
    
 
   Dim tb As TextBox
 
   Dim tb As TextBox
Riga 140: Riga 135:
 
       .Name = "TextBox_" & Str(n)
 
       .Name = "TextBox_" & Str(n)
 
     End With
 
     End With
     <FONT color=#B22222>Object.Attach</font>(tb, Me, "NomeGruppo")
+
     <FONT color=#B22222>Object.Attach</font>(tb, Me, "<Font color=#006400>NomeGruppo</font>")
 
   Next
 
   Next
 
    
 
    
  '''End'''
+
  End
 
    
 
    
  '''Public''' Sub NomeGruppo_Change()
+
  Public Sub <Font color=#006400>NomeGruppo</font>_Change()
 
    
 
    
 
   Print Last.Name
 
   Print Last.Name
 
    
 
    
  '''End'''
+
  End
  
  
Riga 164: Riga 159:
 
   
 
   
 
  End
 
  End
ossia la parola-chiave "''Last'' " che, come dice il nome, ritorna il riferimento all'Oggetto che ha scatenato l'ultimo evento.
+
ossia la parola-chiave ''Last'' che, come dice il nome, ritorna il riferimento all'Oggetto che ha scatenato l'ultimo Evento.

Versione attuale delle 14:35, 28 set 2023

I "gruppi" di Eventi aggregano i gestori degli Eventi di un insieme costituito da uno o più Oggetti.

L'assegnazione di uno o più oggetti a un medesimo Gruppo di Eventi consente, mediante il nome comune di quel Gruppo, di sollevare per ciascun oggetto, appartenente a quel Gruppo, gli eventi supportati. [nota 1]

E' possibile assegnare uno o più Oggetti, anche diversi fra loro, ad un unico Gruppo di Eventi:
1) agendo nell'IDE di Gambas.;
2) direttamente mediante codice.

Va precisato, che l'attribuzione di un Oggetto a un Gruppo di Eventi mediante codice, avviene attraverso l'assegnazione ad ogni Oggetto creato un Osservatore, il quale intercetta gli eventi scatenati da esso. Ad ogni Osservatore è possibile associare uno o più Oggetti creati.
V'è da rilevare, altresì, che l'attribuzione da codice, successiva, dell'Oggetto ad un Gruppo di Eventi annulla l'efficacia di una eventuale attribuzione precedente del medesimo Oggetto ad altro Gruppo di Eventi, sia effettuata da IDE che da codice.

Possiamo assegnare via codice uno o più oggetti ad unico Gruppo di Eventi (specificando l'Osservatore degli Eventi) almeno in quattro modi:

  • con la parola-chiave As nel momento della dichiarazione e creazione:
Dim variabile As New Tipo_Oggetto(Genitore) As "Nome_Gruppo"

o nel momento della creazione:

variabile = New Tipo_Oggetto(Genitore) As "Nome_Gruppo"
Object.Attach(tipo_Oggetto, Genitore, "Nome_Gruppo")
variabile_tipo_Observer = New Observer(variabile_tipo_oggetto) As "Nome_Gruppo"

Esempio:

Public Sub Form_Open()

 Dim bt1 As New Button(Me) As "gruppOggetti"    ' Assegna il 1° "Button" all'unico Gruppo degli oggetti che saranno creati
 Dim bt2 As Button
 Dim tx As New TextLabel(Me)
 Dim lb As New Label(Me)
 Dim obs As Observer

' Assegna (fatta eccezione per il 1° "Button" per il quale abbiamo già provveduto in fase di dichiarazione) i restanti tre oggetti creati all'unico Gruppo (che qui per esempio denominiamo: "gruppOggetti") negli altri tre modi predetti:

' - quando crea l'oggetto:
 bt2 = New Button(Me) As "GruppOggetti"

' - con il metodo "Attach" della classe Object:
 Object.Attach(tx, Me, "GruppOggetti")

' - con "Observer":
 obs = New Observer(lb) As "GruppOggetti"


' Attribuisce le caratteristiche di ciascun Oggetto grafico creato:
 With bt1
   .W = 50
   .H = 50
   .X = 100
   .Y = 100
   .Text = "Button1"
   .Tag = "nel Button1 !"
 End With

 With bt2
   .W = 50
   .H = 50
   .X = 100
   .Y = 300
   .Text = "Button2"
   .Tag = "nel Button2 !"
 End With

 With tx
   .w = 50
   .H = 50
   .X = 200
   .Y = 100
   .Text = "TextLabel"
   .Tag = "nella TextLabel !"
 End With

 With lb
   .W = 50
   .H = 50
   .X = 200
   .Y = 200
   .Border = Border.Raised
   .Text = "Label"
   .Tag = "nella Label !"
 End With
  
End

' L'Evento che scatena la seguente routine è, così, comune a tutti e tre gli Oggetti che, in qualunque dei tre modi sopra descritti, sono stati assegnati ad un unico "gruppo" di Eventi (denominato in questo esempio: GruppOggetti).
' Pertanto, in questo caso, passando con il mouse sopra uno qualunque dei tre Oggetti creati, si scatena l'Evento:
Public Sub GruppOggetti_Enter()

 Dim objGrOgg As Object = Last 

 Print "Sei entrato " & objGrOgg.Tag   ' [nota 2]

End


Uso di "Observer()" e di "Object.Attach()" nella creazione di più oggetti del medesimo tipo

Quando via codice vengono creati più oggetti del medesimo tipo, che devono essere aggregati tutti ad un unico Gruppo di eventi mediante la Classe "Observer()" o mediante il metodo "Object.Attach()", è necessario che ciascun oggetto - all'atto della sua creazione - venga aggregato al Gruppo.

Mostriamo un codice esemplificativo con "Observer()":

Public Sub Form_Open()
 
 Dim tb As TextBox
 Dim n As Byte
 Dim obs As Observer
  
 For n = 0 To 9
   With tb = New TextBox(Me)
     .X = 0
     .W = 100
     .H = 28
     .Y = n * .H
     .Name = "TextBox_" & Str(n)
   End With
   obs = New Observer(tb) As "NomeGruppo"
 Next
  
End
  
Public Sub NomeGruppo_Change()
 
 Print Last.Name
 
End

e con "Object.Attach()":

Public Sub Form_Open()
 
 Dim tb As TextBox
 Dim n As Byte
 Dim obs As Observer
 
 For n = 0 To 9
   With tb = New TextBox(Me)
     .X = 0
     .W = 100
     .H = 28
     .Y = n * .H
     .Name = "TextBox_" & Str(n)
   End With
   Object.Attach(tb, Me, "NomeGruppo")
 Next
 
End
  
Public Sub NomeGruppo_Change()
 
 Print Last.Name
 
End


Note

[1] Vedere anche le seguenti pagine:

[2] L'istruzione interna alla routine può essere scritta anche più brevemente così:

Public Sub gruppOggetti_Enter()

 Print "Sei entrato " & Last.Tag

End

ossia la parola-chiave Last che, come dice il nome, ritorna il riferimento all'Oggetto che ha scatenato l'ultimo Evento.