Differenze tra le versioni di "Individuare una Classe di oggetti fra molti"
(6 versioni intermedie di uno stesso utente non sono mostrate) | |||
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 | + | ==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() | |
− | ==Oggetti posti | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
Dim obj As Object | Dim obj As Object | ||
− | <FONT color= | + | <FONT color=gray>' ''Per ogni oggetto posto nel Form...'</font> |
− | + | For Each obj In Me.Children | |
+ | <FONT color=gray>' ''(ma potremmo anche scrivere: '''For Each obj In FMain.Controls''')''</font> | ||
− | <FONT color= | + | <FONT color=gray>' ''...effettuiamo una verifica: se il tipo di oggetto è un "Button"...''</font> |
− | + | If Object.Type(obj) = "Button" Then | |
− | <FONT color= | + | <FONT color=gray>' ''Si potrebbe anche usare:'' |
− | + | ' '''If Object.Class(obj).Name = "Button" Then'''</font> | |
− | <FONT color= | + | |
− | + | <FONT color=gray>' ''...allora ne vediamo in console il nome della Classe di appartenenza,:'</font> | |
− | + | Print obj.Name | |
+ | <FONT color=gray>' ''Si potrebbe anche usare:'' | ||
+ | ' '''Print Object.Class(obj).Name'''</font> | ||
− | Next | + | <FONT color=gray>' ''e, volendo, gli modifichiamo una proprietà:''</font> |
+ | obj.Text = "tasto" | ||
+ | Endif | ||
+ | Next | ||
− | + | End | |
− | ==Oggetti posti sia sul ''Form'' che in un Contenitore== | + | ==Oggetti posti sia sul ''Form'' che in un altro Contenitore== |
− | Qualora vi siano | + | 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. |
==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 | + | Se gli oggetti sono posti in vari Contenitori nidificati l'uno nell'altro, il codice, sopra esposto, dovrà essere modificato come segue <SUP>[[[#Note|nota 1]]]</sup>, altrimenti non saranno tutti individuati: |
− | + | Public Sub Button1.Click() | |
− | + | Dim obj As Object | |
− | <FONT color= | + | <FONT color=gray>' ''Per ogni oggetto posto nel Form...'':</font> |
− | + | For Each obj In Me.Children | |
− | <FONT color= | + | <FONT color=gray>' ''(ma potremmo anche scrivere: For Each obj In Me.Controls)''</font> |
− | <FONT color= | + | <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= | + | <FONT color=gray>' ''...allora ne vediamo in console il nome della Classe di appartenenza,:''</font> |
Print obj.Name | Print obj.Name | ||
− | <FONT color= | + | <FONT color=gray>' ''e, volendo, gli modifichiamo una proprietà:''</font> |
obj.Text = "tasto" | obj.Text = "tasto" | ||
− | <FONT color= | + | <FONT color=gray>' ''Controllo che l'oggetto sia un "contenitore":''</font> |
− | + | Else If (Object.Class(obj).Parent.Name = "Container") Then | |
− | <FONT color= | + | <FONT color=gray>' ''e nel caso verifico i suoi "children":''</font> |
− | + | ListChildren(obj) | |
Endif | Endif | ||
Next | 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 | |
Versione attuale 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.
Indice
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 [nota 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.