Newsgroup: it.comp.lang.visual-basic
Titolo: VB6 - Proprietà Parent (qualcosa di simile)

All'interno di un controllo OCX è possibile conoscere
il valore di un'altro controllo del form che li ospita
entrambi utilizzando la proprietà Parent
'All'interno del controllo C1 posso fare
Valore=Parent.C2
C2 può essere sia un controllo del form che una
variabile definita Public nel form medesimo.
Il mio problema è quello di come poter fare
riferimento ad una variabile pubblica generale
definita in un modulo.
Sapete se e come sia possibile farlo?
Grazie e saluti.
Sauro



Probabilmente avrai le tue buone ragioni per avere questa necessità,
ma io ci vedo un problema: l'ocx dovrebbe essere un blocco di codice
riutilizzabile. Se deve fare riferimento agli altri controlli nel form
o addirittura a delle variabili pubbliche perde il suo scopo. Forse
sarebbe meglio che fosse il chiamante a passare i dati all'ocx e non
l'ocx che se li va a prendere da solo. Questo ovviamente IMHO.
ciao

 ciao
L'ocx di cui parlo deve "trattare" il database che io
normalmente apro all'inizio della procedura e chiudo
quanto l'utente chiude il programma.
Al momento uso un controllo utente all'interno del
programma (ne ho piazzati 200/300 su una trentina
di form) che non ha nessun problema a "vedere" le
variabili pubbliche.
Se volessi passare all'OCX mi scontrerei col problema
di dover passare il database tutte le volte quando io
uso sempre e soltanto una variabile che chiamo PublicDB.
Ciao, Sauro


Direttamente non puoi perche' l'OCX appartiene ad un altro progetto, e 
quindi non ha accesso alle variabili globali del progetto che lo ospita; 
l'unico sistema pulito che mi viene in mente e' quello di dotare ogni form 
delle opportune routine property get/let che facciano riferimento alla 
variabile globale e quindi da tramite con il controllo.
Dovrebbe funzionare ma, come ha detto Giancarlo, e' un po' la morte della 
riutilizzabilita'; anche se puo' non piacere il sistema corretto sarebbe 
quello di passare un parametro/proprieta' al controllo
Ciao
-- 
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett L. Brown 

 Luca Dormio - 
luca....@tin.it
Ciao Luca.
Sauro


ciao
Giancarlo

 sempre lo stesso.
Infatti io aprirei una connessione nel momento in cui ti serve e la
chiuderei subito dopo, direttamente nel controllo, senza interferenze
esterne.
Anche qui però dovresti dotare il tuo controllo di una proprietà
DatabaseName o simile.
D'altra parte se lo fanno i controlli data non capisco perchè tu non possa
farlo :)
Poi c'è un discorso diverso da fare: se il tuo controllo è in un progetto
OCX a parte allora *DEVE* essere una scatola chiusa.
Se sei nello stesso progetto dell'exe ovviamente hai delle libertà in più,
ma la logica corretta è sempre la prima.
Ciao

 Ciao
L'idea di aprire e chiudere il database all'interno del
controllo con una connessione propria mi piace.
Però in realtà avevo detto una imprecisione perchè
il database, pur essendo sempre lo stesso, potrebbe
risiedere su un altrto PC e quindi la stringa di
connessione cambiare.
Penserei allora di dare al controllo una proprietà
NomeFileDiConnessione dove memorizzerei il
nome completo di un piccolo file ascii che poi non
cambia mai.
All'interno del file memorizzerei per esempio:
C:\NomeDirArchivio\NomeDB.mdb
Quando il controllo diventa attivo:
1) Legge il file
2) Apre la connessione
3) Esegue la lettura
4) Chiude la connessione
Considerando che si tratta di un controllo che
richiede all'utente di digitare qualcosa e che poi
deve trovare un solo record ti sembra
a prima vista una procedura troppo lunga?
Grazie Zanna.
Ciao, Sauro

L'idea di aprire una specifica connessione interna
mi sembra buona.
Voglio però che il controllo lo faccia a solo.
Vedi (se vuoi) la mia risposta a Zanna.
Grazie Giancarlo.
Ciao, Sauro