Non succede nulla per forza...hai usato il codice che ti ho scritto senza applicarlo al caso in esame.Originariamente inviato da Lyll0
ma così non succede nulla
Devi sapere che tra i componenti esiste un legame detto ownership. Quando crei il tuo Frame, passi come parametro al metodo Create la variabile pannello...perchè fai questo?
Il metodo Create dei componenti (si intendono componenti anche i controlli visuali) accettano come parametro un secondo componente che viene considerato Owner. L'Owner di un componente provvede a distruggere il componente stesso quando esso viene distrutto.
Quando posizioni pulsanti dalla Palette ad una form, ad esempio, la form diviene l'Owner di tali pulsanti e si accolla la responsabilità di distruggere tali pulsanti nel momento stesso in cui la form viene distrutta. Questo consente di evitare al programmatore la scrittura di un'istruzione per la deallocazione della memoria usata dai componenti, una per ognuno.
Le proprietà ComponentCount e Components, riferite ad un componente, restituiscono rispettivamente il numero di componenti posseduti e l'istanza dei singoli componenti dato l'indice che va da 0 a (ComponentCount - 1).
Questa è l'essenza del concetto di "ownership", da distinguere bene dal concetto di "parentship", cioè del legame esistente tra un controllo (non un componente, ma specificatamente un controllo) e un altro controllo, detto Parent, che lo contiene.
Il codice che ti ho suggerito non funziona poichè ciascun frame viene creato avendo come owner il pannello; se il codice non ottiene effetto, vuol dire che non si arriva mai ad individuare una delle GroupBox: bastava soffermarsi con un breakpoint ed eseguire il ciclo volta per volta per verificarlo; infatti, è probabile che la proprietà ComponentCount restituisca il numero di frame, che sono gli unici componenti posseduti dal pannello, poichè i componenti GroupBox sono posseduti dal frame e pertanto sono accessibili dalla proprietà Components dei singoli frame, non del pannello.
La relazione è:
Pannello contenitore --possiede--> Frame[0..n]
Frame[i] --possiede--> GroupBox (e altri)
Detto questo, potendo anche semplificare, è possibile modificare il codice come segue:
codice:for i := 0 to pannello.ComponentCount - 1 do begin if (pannello.Components[i] is TFrmGriglia) then TFrmGriglia(pannello.Components[i]).gbox.Caption := Ncasuale[i]; end;

Rispondi quotando