PDA

Visualizza versione completa : Propietà dell'oggetto Control


LeleB
29-06-2001, 15.36.00
Dunque il mio problema è questo:
ho un frame con all'interno vari controlli, con un pulsante devo disabilitare il frame stesso ma, allo stesso tempo, voglio che tutti i controlli contenuti diventino "grigi". Io avevo pensato di fare un banale ciclo di "For Each" in questo modo:

Dim c As Control

For Each c In Me.Controls
If c (è un controllo contenuto nel Frame) Then c.Enable = False
Next

Solo che non so come fare il pezzo "'è un controllo contenuto nel Frame", inoltre qualcuno sa quali sono le proprietà che ha la variabile c una volta dichiarata come Control?

LeleB
30-06-2001, 17.45.53
Ho la soluzione (a chi può interessare) me l'ha data via mail il webmaster di VB-Simple, riporto la sua risposta:

"molto semplice utilizza la proprietà Container per il controllo C

Private Sub Form_Click()
Dim c As Control
Frame1.Enabled = False
For Each c In Me.Controls
If c.Container Is Frame1 Then c.Enabled = False
Next c
End Sub

nota che abbiamo utilizzato "Is Frame1" e non "= Frame1"
questo perché utilizzando la seconda forma il programma
ci avrebbe restituito automaticamente la caption del
frame1, perché proprietà predefinita

i controlli di oggetti si fanno infatti mediante l'operatore
"Is". unico difetto di questo codice è che alcuni controlli
(quali il Timer ed il Data) non possiedono la proprietà
Container e ciò genera un errore.

Per aggirare il problema puoi utilizzare un'istruzione di
gestione degli errori (on error resume next) oppure effettuare
un controllo a priori (If Not TypeOf c Is Timer)."

Inoltre alla mia seconda domanda ha risposto:

"domanda assurda :)
la classe Control è una classe virtuale (nel senso di program-
mazione ad oggetti) senza membri esposti.
Essa non contiene alcuna proprietà o metodo (infatti il sistema
Intellisense di VB non te li mostra). Le proprietà vengono
definite al momento dell'assegnamento al controllo.
In sostanza l'oggetto Control contiene nessuna e tutte le
proprietà esistenti. Per dimostrare questo supponi di creare un
nuovo controllo contenente la proprietà CiccioMangiaCarote,
un codice come il precedente fa sì che c (il Control) abbia
anche una proprietà di nome CiccioMangiaCarote nel momento in
cui C punta al tuo controllo e la perde nel momento in cui C
punta ad un altro controllo."

Grazie!!!