Newsgroup: it.comp.lang.visual-basic
Titolo: Proprietà Parent

Ciao ragazzi,
c'è qualcuno che mi spiegherebbe come faccio ad accedere alla proprietà
parent? So che è accessibile soltanto in esecuzione del programma, ma come
posso leggerla?
Inoltre, usando la proprietà Container perché se sposto, ad esempio, un Text
in una picture il text non lo vedo???
E come per la Parent come faccio a leggere semplicemente cosa c'è registrato
in Container?
Grazie
CoDaBat

 in Container?
Qui non capisco, spiegati meglio. Vuoi forse dire quali sono i controlli
contenuti in un certo contenitore?

 ha scritto nel messaggio
news:wOWx8.10730$W9.2...@twister2.libero.it...

Grazie Lupo,
sei stato molto esaustivo. Bene dunque se io faccio
Set Form2 = Text1.Parent in realtà creo un istanza del mio form.... ma non
un nuovo fomr giusto?
Quindi forse non è corretto formalmente, cosa accadrebbe se io creassi
dall'IDE un nuovo form, visto che con il Set ho dichiarato un Form2????
Scusa se sono banali le mie domande, ma sto cercando di imparare.
E come dove posso comprendere il significato delle proprieta
dell'oggetto/proprieta Parent?
Grazie ancora
CoDaBat

 dell'oggetto/proprieta Parent?
Se Text1 è un oggetto di Form1, dire Text1.Parent è come dire Form1, quindi
le proprietà di una "Parent" sono quelle di una Form, esattamente della Form
che contiene Text1

 ha scritto nel messaggio
news:wOWx8.10730$W9.2...@twister2.libero.it...

Ciao Lupo,
ho scoperto (l'uovo di Colombo) perché il Text1 non era visibile all'interno
della Picture quando settavo l'oggetto proprieta Container (Set
Text1.Container = Picture1), perché la .left e la .Top della Text1 assumono
come riferimento la Picture1 e quindi veniva posizionata in un punto non
visibile!!!!!!
Cmq grazie per avermi introdotto la .ZOrder
Ciao


Scusa a tal proposito ho le idee un po' confuso. Per capire ho scritto un
programmino in cui nella Form1 ci sono due command e ho associato il
seguente codice:
Private Sub Command1_Click()
    Form2.Caption = "Pippo"
    Form2.Show
End Sub
Private Sub Command2_Click()
    Dim Form2 As Object
    Set Form2 = Command1.Parent
    Form2.Show
End Sub
Private Sub Form_Load()
    Dim Form2 As Object
    Set Form2 = Command1.Parent
    Form2.Show
End Sub
Tieni presente che in fase di progettazione ho definito un secondo form
(Form2)
Ecco cosa accade:
Se clicco su command1 mi compare un form (form2 quello dichiarato in
progettazione) distinto sopra il form1, insomma come sempre... però non
capisco nella Form_Load ho definito l'oggetto Form2 come istanza di Form1 e
allora al clic di command1 non dovrebbe comparirmi sempre (almeno
visualmente) il form come form1?
In effetti se clicco su command2 ottengo che mi viene visulizzato (questa
volta un form solo e non uno sovrapposto) sempre form1... Allora perché mi
parli di form indipendente a tutti gli effetti? Dunque quando faccio Set
Form2 = Common1.Parent in realtà faccio puntare l'oggetto Form2 alla stessa
area di memoria occupata da Form1? E allora è come se io chiamassi una
persona o con il suo nome o con il suo soprannome? Io mi riferisco dunque
sempre allo stesso oggetto fisico??? Ho capito? Scusa il papiro!


 sempre allo stesso oggetto fisico??? Ho capito?
Hai capito!

 ha scritto nel messaggio
news:0bYx8.90821$SR5.2...@twister1.libero.it...

Grande Lupo,
ti ringrazio dei chiarimenti... eheheh spero un giorno (probabilmente molto
lontano) di poter contraccambiare ;-)

 lontano) di poter contraccambiare ;-)
Non preoccuparti. Prenditi un buon libro e leggilo con attenzione.
Inventati e scrivii 8000 esempietti stupidissimi e cortissimi.
Sono indispensabili per capire anche quello che può apparire evidente da una
lettura veloce.

 ha scritto nel messaggio
news:0bYx8.90821$SR5.2...@twister1.libero.it...

A questo punto, chiedo scusa se sto abusando del NewsGroup (domanda?), ma
sei io all'interno della Command_Click() volessi decidere se riferirmi
all'oggeto da me allocato (Set.....) o a quello di progettazione (avendo
usato nomi diversi) è possibile o devo attendere necessariamente la fine
della Sub?
Inoltre se allora io Set Form2 = Command.Parent l'avessi fatto su di un
Modulo è come se avessi ditrutto l'oggetto in fatto in progettazione?
Ciao
CoDaBat

 Modulo è come se avessi ditrutto l'oggetto in fatto in progettazione?
Prooova... e capirai
PS: Te lo dico io, piano-piano, prima che lo facciano altri: Vedi come si
quotano i messaggi in risposta.

quotano i messaggi in risposta.
^___^


Ciao

 Così è giusta il modo di rispondere ad un msg? Forse ho capito?
Sì, va meglio, ma dovresti riportare del testo originario solo le parti
necessarie per comprenderne, a grandi linee, il contesto. Tu hai sempre
riportato tutto. Le risposte vanno in coda, dopo il testo quotato/riportato,
oppure dopo lo spezzone del testo quotato cui intendi rispondere.
Ciao.

 ovunque e non verrà mai distrutta.
Il problema è che quando ho scritto "...avendo usato nomi diversi ho
sbagliato... volevo dire avendo usato nome uguali (come da codice da me
riportato). In quel caso mi mi domandavo se era possibile richiamare...
loggetto fisico all'interno della Sub!
Ciao

 vacevo Form2.Show mi compariva ovviamente quello definito localmente.
(impara a quotare)
Il casino nasce dal fatto che VB "mescola" credendo di fare un piacere il
nome della classe "Form<N>" con il nome della variabile di tipo Form<n>.
Cioè VB si fa internamente una Dim Form2 As Form2.
Nota che il Form2 che vedi in fase di progettazione è il nome della _classe_
Form2 e non il nome della variabile Form2, che in realtà non esiste.
Questo è il motivo per cui tu puoi fare
Dim f as Form2, f2 As Form2
Set f = new Form2
f.Show
' Ricordati poi di fare unload f e Set f = Nothing!
Set f2 = new Form2
fs.Show
e hai due form di tipo Form2 ben distinti (nota il New nell'assegnazione!)
se invecie fai
Dim f3 as Form2
Set f3 = f2 'f3 e f2 usano nomi diversi per la stessa istanza di Form2)
Usare direttamente il nome Form2 in realtà equivale a fare (ma lo fa VB per
te)
Dim Form2 As Form2 ' bestialità di VB: permettere ad una var. di avere
                   ' lo stesso nome di un tipo!
Set Form2 = New Form2
Ciao


Ho provato definendo nel modulo quanto segue:
Public Form2 As Object
        Sub duplica()
        Set Form2 = Form1.Command1.Parent
        Form2.Show
 End Sub
Mentre nel codice del form1 quanto segue:
Private Sub Command1_Click()
    Form2.Caption = "Pippo"
    Form2.Show
End Sub
Private Sub Command2_Click()
    duplica
End Sub
Qunado evovo  il command2_click() vedo il form1, giustamente, ma quando dopo
clicco su command1_Click() mi dovrei aspettare che Form2 fosse stata
sostituita dalla Form2 dichiarata nel modulo... ma non è così! Forse sarà
ancora il discorso del locale o meno.... ma non mi  torna la Form2
dichiarata nel modulo è pubblica pertanto dovrei far riferimento in
qualsiasi Sub del Form1!!!!
Aiutoooo!!! Scusa!

 nome di un tipo!
Anche il C++ lo permette...
Ciao.
--
BSD is for UNIX-lovers -- linux is for Windows-haters.


Vi ringrazio adesso mi sono più chiare le cose... anche se forse ancora è un
po' presto per me per aver completa comprensione... certi concetti non sono
ancora del mio patrimonio VB. :-)
CoDaBat

 sostituita dalla Form2 dichiarata nel modulo... ma non è così!
Nel modulo hai assegnato l'oggetto Form2 a Form1, non hai fatto riferimento
alla Form2 fisica che invece viene qui esposta. Evidentemente VB privilegia,
in questo caso, l'oggetto fisico Form2 rispetto a una variabile pubblica con
lo stesso nome. Il tuo dubbio è lecito, ma credo che il motivo sia quello
che ti ho detto. In ogni caso, se non si usano nomi uguali a oggetti fisici
(come non si dovrebbe mai fare, per evitare confusione), il problema non si
pone. Prova a cambiare Form2 (l'oggetto, non la forma fisica) con un altro
nome e tutto ti risulterà più chiaro.