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

Da Gambas-it.org - Wikipedia.
Riga 1: Riga 1:
 
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à.
 
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''.
  
Di seguito esporremo alcuni diversi casi con i relativi esempi. Poniamo l'esempio specifico di avere su un ''Form'' sei oggetti, appartenenti in numero eguale a tre Classi: due ''Button'', due ''TextArea'' e due ''RadioButton''. In ciascun esempio vogliamo individuare gli oggetti appartenenti alla sola Classe ''Button'', e modificarne la proprietà ''Text''.
 
  
 
+
==Oggetti posti su un Contenitore==
==Oggetti posti sul Form==
+
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()
 
   
 
   
Riga 11: Riga 11:
 
    
 
    
 
  <FONT color=gray>' ''Per ogni oggetto posto nel Form...'</font>
 
  <FONT color=gray>' ''Per ogni oggetto posto nel Form...'</font>
    For Each obj In FMain.Children
+
  For Each obj In Me.Children
 
  <FONT color=gray>' ''(ma potremmo anche scrivere: '''For Each obj In FMain.Controls''')''</font>
 
  <FONT color=gray>' ''(ma potremmo anche scrivere: '''For Each obj In FMain.Controls''')''</font>
 
   
 
   
 
  <FONT color=gray>' ''...effettuiamo una verifica: se il tipo di oggetto è un "Button"...''</font>
 
  <FONT color=gray>' ''...effettuiamo una verifica: se il tipo di oggetto è un "Button"...''</font>
      If Object.Type(obj) = "Button" Then
+
    If Object.Type(obj) = "Button" Then
 
  <FONT color=gray>' ''Si potrebbe anche usare:''
 
  <FONT color=gray>' ''Si potrebbe anche usare:''
 
  ' '''If Object.Class(obj).Name = "Button" Then'''</font>
 
  ' '''If Object.Class(obj).Name = "Button" Then'''</font>
 
    
 
    
 
  <FONT color=gray>' ''...allora ne vediamo in console il nome della Classe di appartenenza,:'</font>
 
  <FONT color=gray>' ''...allora ne vediamo in console il nome della Classe di appartenenza,:'</font>
        Print obj.Name
+
      Print obj.Name
  <FONT color=gray>' ''e, volendo, gli modifichiamo una proprietà:'</font>
+
  <FONT color=gray>' ''Si potrebbe anche usare:''
        obj.Text = "tasto"
+
  ' '''Print Object.Class(obj).Name'''</font>
      Endif
 
 
    Next
 
 
'''End'''
 
 
 
 
 
==Oggetti posti all'interno di un contenitore==
 
Qualora gli oggetti siano posti all'interno di un Contenitore, ad esempio un ''Panel'', allora <SPAN style= "text-decoration:underline>non</span> potrà essere utilizzata anche la proprietà ''Controls'' (proprietà non posseduta dai Contenitori), ma si utilizzerà la sola proprietà ''Children''.
 
  '''Public''' Sub Button1_Click()
 
 
  Dim obj As Object
 
 
 
<FONT color=#006400>' ''Per ogni oggetto posto nel Form...'</font>
 
    For Each obj In Panel1.<FONT color="#B22222">Children</font>
 
 
<FONT color=#006400>' ''...effettuiamo una verifica: se il tipo di oggetto è un "Button"...'</font>
 
      If Object.Type(obj) = "Button" Then
 
<FONT color=#006400>' ''...allora ne vediamo in console il nome della Classe di appartenenza,:'</font>
 
        Print obj.Name
 
<FONT color=#006400>' ''e, volendo, gli modifichiamo una proprietà:'</font>
 
        obj.Text = "tasto"
 
      Endif
 
 
   
 
   
     Next
+
<FONT color=gray>' ''e, volendo, gli modifichiamo una proprietà:''</font>
 +
      obj.Text = "tasto"
 +
     Endif
 +
  Next
 
   
 
   
 
  '''End'''
 
  '''End'''
  
  
==Oggetti posti sia sul ''Form'' che in un Contenitore==
+
==Oggetti posti sia sul ''Form'' che in un altro Contenitore==
Qualora vi siano oggetti posti sia direttamente sul ''Form'' che nel Contenitore, l'uso della proprietà ''FMain.Controls'' agirà su <SPAN style= "text-decoration:underline>tutti</span> gli oggetti presenti: sia su quelli figli diretti del ''Form'' che su quelli figli del 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 <SPAN style= "text-decoration:underline>tutti</span> gli oggetti presenti: sia su quelli, "Figli" diretti del ''Form'', sia su quelli, "Figli" del Contenitore.
  
  
Riga 60: Riga 40:
 
  '''Public''' Sub Button1.Click()
 
  '''Public''' Sub Button1.Click()
 
   
 
   
  Dim obj As Object
+
  Dim obj As Object
 
   
 
   
  <FONT color="#006400">' ''Per ogni oggetto posto nel Form...'':</font>
+
  <FONT color=gray>' ''Per ogni oggetto posto nel Form...'':</font>
    For Each obj In FMain.Children   
+
  For Each obj In Me.Children   
  <FONT color="#006400">' ''(ma potremmo anche scrivere: For Each obj In FMain.Controls)''</font>
+
  <FONT color=gray>' ''(ma potremmo anche scrivere: For Each obj In Me.Controls)''</font>
 
    
 
    
  <FONT color="#006400">' ''...effettuiamo una verifica: se il tipo di oggetto è un "Button"...''</font>  
+
  <FONT color=gray>' ''...effettuiamo una verifica: se il tipo di oggetto è un "Button"...''</font>  
 
     If Object.Type(obj) = "Button" Then   
 
     If Object.Type(obj) = "Button" Then   
  <FONT color="#006400">' ''...allora ne vediamo in console il nome della Classe di appartenenza,:''</font>
+
  <FONT color=gray>' ''...allora ne vediamo in console il nome della Classe di appartenenza,:''</font>
 
       Print obj.Name   
 
       Print obj.Name   
  <FONT color="#006400">' ''e, volendo, gli modifichiamo una proprietà:''</font>
+
  <FONT color=gray>' ''e, volendo, gli modifichiamo una proprietà:''</font>
 
       obj.Text = "tasto"   
 
       obj.Text = "tasto"   
 
          
 
          
  <FONT color="#006400">' ''Controllo che l'oggetto sia un "contenitore":''</font>
+
  <FONT color=gray>' ''Controllo che l'oggetto sia un "contenitore":''</font>
      Else If (Object.Class(obj).Parent.Name = "Container") Then   
+
    Else If (Object.Class(obj).Parent.Name = "Container") Then   
 
  <FONT color="#006400">' ''e nel caso verifico i suoi "children":''</font>
 
  <FONT color="#006400">' ''e nel caso verifico i suoi "children":''</font>
        ListChildren(obj)   
+
      ListChildren(obj)   
 
     Endif   
 
     Endif   
 
   Next   
 
   Next   
Riga 82: Riga 62:
 
  '''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   
      If (Object.Type(ob) = "Button") Then   
+
    If (Object.Type(ob) = "Button") Then   
        Print ob.Name   
+
      Print ob.Name   
        ob.Text = "tasto"   
+
      ob.Text = "tasto"   
      Else If (Object.Class(ob).Parent.Name = "Container") Then   
+
    Else If (Object.Class(ob).Parent.Name = "Container") Then   
        ListChildren(ob)   
+
      ListChildren(ob)   
      Endif   
+
    Endif   
    Next   
+
  Next   
 
   
 
   
 
  '''End'''
 
  '''End'''

Versione delle 11:46, 2 ott 2022

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.