Differenze tra le versioni di "Individuare una Classe di oggetti fra molti"

Da Gambas-it.org - Wikipedia.
Riga 4: Riga 4:
 
==Oggetti posti su un Contenitore==
 
==Oggetti posti su un Contenitore==
 
Per far eseguire il seguente codice, dobbiamo avere cura di porre nel ''Contenitore'' un ''Button'' e altri ''Controlli'' grafici a piacimento.
 
Per far eseguire il seguente codice, dobbiamo avere cura di porre nel ''Contenitore'' un ''Button'' e altri ''Controlli'' grafici a piacimento.
  '''Public''' Sub Button1_Click()
+
  Public Sub Button1_Click()
 
   
 
   
 
   Dim obj As Object
 
   Dim obj As Object
Riga 27: Riga 27:
 
   Next
 
   Next
 
   
 
   
  '''End'''
+
  End
  
  
Riga 36: Riga 36:
 
==Oggetti posti in più Contenitori nidificati==
 
==Oggetti posti in più Contenitori nidificati==
 
Se gli oggetti sono posti in vari Contenitori nidificati l'uno nell'altro, il codice, sopra esposto, dovrà essere modificato come segue |[[#Note|1]]|, altrimenti non saranno tutti individuati:
 
Se gli oggetti sono posti in vari Contenitori nidificati l'uno nell'altro, il codice, sopra esposto, dovrà essere modificato come segue |[[#Note|1]]|, altrimenti non saranno tutti individuati:
  '''Public''' Sub Button1.Click()
+
  Public Sub Button1.Click()
 
   
 
   
 
   Dim obj As Object
 
   Dim obj As Object
Riga 58: Riga 58:
 
   Next   
 
   Next   
 
   
 
   
  '''End'''
+
  End
 
    
 
    
  '''Public''' Sub ListChildren(ob As Object)
+
   
 +
Public Sub ListChildren(ob As Object)
 
   
 
   
 
   For Each ob In ob.Children   
 
   For Each ob In ob.Children   
Riga 71: Riga 72:
 
   Next   
 
   Next   
 
   
 
   
  '''End'''
+
  End
  
  

Versione delle 11:42, 20 giu 2024

Il caso è quello in cui, avendo in un qualsiasi contenitore una molteplicità di oggetti facenti parte di due o più Classi, si intende individuare soltanto gli oggetti appartenenti ad una specifica Classe, ed eventualmente modificarne una o più proprietà.

Di seguito esporremo alcuni diversi casi. In ciascun esempio vogliamo individuare gli oggetti appartenenti alla sola Classe Button, e modificarne la proprietà Text.

Oggetti posti su un Contenitore

Per far eseguire il seguente codice, dobbiamo avere cura di porre nel Contenitore un Button e altri Controlli grafici a piacimento.

Public Sub Button1_Click()

 Dim obj As Object
 
' Per ogni oggetto posto nel Form...'
 For Each obj In Me.Children
' (ma potremmo anche scrivere: For Each obj In FMain.Controls)

' ...effettuiamo una verifica: se il tipo di oggetto è un "Button"...
   If Object.Type(obj) = "Button" Then
' Si potrebbe anche usare:
' If Object.Class(obj).Name = "Button" Then
  
' ...allora ne vediamo in console il nome della Classe di appartenenza,:'
     Print obj.Name
' Si potrebbe anche usare:
' Print Object.Class(obj).Name

' e, volendo, gli modifichiamo una proprietà:
     obj.Text = "tasto"
   Endif
 Next

End


Oggetti posti sia sul Form che in un altro Contenitore

Qualora vi siano Oggetti grafici posti sia direttamente sul Form che in un Contenitore, "Figlio" del Form, l'uso della Proprietà FMain.Controls agirà su tutti gli oggetti presenti: sia su quelli, "Figli" diretti del Form, sia su quelli, "Figli" del Contenitore.


Oggetti posti in più Contenitori nidificati

Se gli oggetti sono posti in vari Contenitori nidificati l'uno nell'altro, il codice, sopra esposto, dovrà essere modificato come segue |1|, altrimenti non saranno tutti individuati:

Public Sub Button1.Click()

 Dim obj As Object

' Per ogni oggetto posto nel Form...:
 For Each obj In Me.Children  
' (ma potremmo anche scrivere: For Each obj In Me.Controls)
 
' ...effettuiamo una verifica: se il tipo di oggetto è un "Button"... 
   If Object.Type(obj) = "Button" Then  
' ...allora ne vediamo in console il nome della Classe di appartenenza,:
     Print obj.Name  
' e, volendo, gli modifichiamo una proprietà:
     obj.Text = "tasto"  
       
' Controllo che l'oggetto sia un "contenitore":
   Else If (Object.Class(obj).Parent.Name = "Container") Then  
' e nel caso verifico i suoi "children":
     ListChildren(obj)  
   Endif  
 Next  

End
 

Public Sub ListChildren(ob As Object)

 For Each ob In ob.Children  
   If (Object.Type(ob) = "Button") Then  
     Print ob.Name  
     ob.Text = "tasto"  
   Else If (Object.Class(ob).Parent.Name = "Container") Then  
     ListChildren(ob)  
   Endif  
 Next  

End


Note

[1] Il seguente codice è stato segnalato e suggerito dall'utente sotema del Forum di Gambas-it.org.