Newsgroup: it.comp.lang.visual-basic
Titolo: Controllo contenente un'altro controllo e OCX (problema passaggio di Usercontrols)

Ciao a tutti,
ho inserito in un oggetto usercontrol una serie di altri oggettini
usercontrol che carico dinamicamente.
Per essere più sintetico chiamo A l'oggetto padre e B l'oggetto
figlio(contenuto nel padre).
Successivamente ho fatto una funzione di ricerca che cerca un oggetto
(controllo) B contenuto in A e ne ritorna il riferimento all'utilizzatore.
A e B sono componenti inclusi in un singolo progetto OCX e vengono inseriti
in un altro progetto che li usa.
Ora il problema è che se tento di assegnare ad una var. di tipo B il valore
di ritorno della funzione, l'ambiente da un errore di tipo non
corrispondente:
UsercontrolA è creato a Design Time
'inizio codice
Dim B as UserControlB
Set B  =  trova ("nomeElementoDaTrovare")
'oppure
Dim B as Object
Set B  =  trova ("nomeElementoDaTrovare")
'restituiscono entrambe "Tipo non corrispondente"
Altra cosa interessante: se provo a sfogliare con le espressioni di
controllo le proprietà public del mio controllo UsercontrolB ricevo il
messaggio di errore "Funzionalità non ancora implementata"
E' possibile per il client che utilizza A riferire un controllo caricato
dinamicamente di tipo B contenuto in A e usarlo normalmente?
Qualcuno ha avuto mai un problema simile?
Altra cosa e forse questa è la chiave di tutto: Se inserisco il progetto
dell'ocx nel gruppo di progetti del progetto principale e lo eseguo con VB
tutto funziona. Se ovviamente compilo non funziona più.
Dov'è l'inghippo?
Grazie a tutti voi!

 caricato dinamicamente di tipo B contenuto in A e usarlo normalmente?
Interessante.
Non saprei. Credo proprio di sì. Magari le variabili di appoggio dovranno
essere Object perchè non credo abbiano la visibilità sul tipo
dell'usercontrol figlio, però dovrebbe funzionare regolarmente.
Ciao
Alberto
--
E non so se avrò gli amici a farmi il coro,
o se avrò soltanto volti sconosciuti,
canterò le mie canzoni a tutti loro
e alla fine della strada
potrò dire che i miei giorni li ho vissuti...

 Set B  =  trova ("nomeElementoDaTrovare")
TOGLI LE PARENTESI!
Andrea

La definizione della funzione trova è la seguente
Public Function Trova (nome as String) As UsercontrolB
    '...
    '... trovo k
    '...
    Set Trova = B(k)
End Sub
un'istanza B (elemento array di contolli) di UsercontrolB e' stata
precedentemente caricata
con una Load B(i) dove i è l'i-esimo elemento libero dell'array di controlli
Ribadisco: tutto funziona se includo il progetto dei controlli nel progetto
dell'applicazione. Tutto smette di funzionare quando compilo (o tolgo il
progetto dei controlli dal prog. principale e lascio solo il riferimento al
file .ocx)
Thanks a lot!
"Alberto Pizzinelli" <apizzo@tisca_XnXoXXsXpXXaXm_li.it> ha scritto nel
messaggio news:Baeka.68641$Jg1.1...@news1.tin.it...


 ha scritto nel messaggio
news:b6rrou$824cd$1...@ID-170738.news.dfncis.de...



???
Guarda che davanti c'è l'operatore =


 Public Function Trova (nome as String) As UsercontrolB
Prova (ma non ci credo molto), a mettere As Object.
Ciao


 Alberto
Andrea


Ho riletto cinque volte il tuo post ma non riesco a capirlo...
Alberto
--
E non so se avrň gli amici a farmi il coro,
o se avrň soltanto volti sconosciuti,
canterň le mie canzoni a tutti loro
e alla fine della strada
potrň dire che i miei giorni li ho vissuti...

 Alberto
Andrea

 ha scritto nel messaggio
news:tOeka.15043$iy5.4...@twister2.libero.it...


 GRAZIE A TUTTI
Ciao
Andrea

funzione va' anche con la classe tipizzata.
Ti ricordo che si tratta di ocx, non di dll...
Ciao,
Moreno
-- 
sirri at morenosoft dot com
Moreno Sirri VB Site - 
http://www.msvbsite.net
---------------------------------------------------------------------------
Le risposte alle tue domande le trovi sul Sito Comune di questo NewsGroup:
 
http://www.it-lang-vb.net
---------------------------------------------------------------------------

Prova (ma non ci credo molto), a mettere As Object.
Perché non ci credi?
Come ha constatato Alberto provando, quella è la soluzione.
E la risposta l'ha data sempre Alberto: non è possibile ritornare come
valore di ritorno di una funziona pubblica, un membro privato.
E' Come se avesse restituito un enum dichiarato privato in un modulo di
classe di una dll activex o pubblico in un modulo standard.
O meglio, visto che si parla di componenti più che di dati, è come se la
classe che definisce il valore di ritorno (o parametro) di
quella.funzione fosse privata.
Infatti l'interfaccia predefinita di un usercontrol è privata ed
istanziabile solo nello scope del progetto che la referenzia.
Per ovviare a questo problema, anziché ritornare un valore di tipo
object o variant, potresti definire una nuova interfaccia pubblica e
farla implementare ad UsercontrolB.


 Moreno
Ciao
Andrea

 e Funziona!!!
--



No.
Potresti postare come intendi la riga tu?
Perchč secondo me va benissimo cosě (infatti il problema era da un'altra
parte).
Ciao


 ha scritto nel messaggio
news:c9939vopkgf7nihh4...@4ax.com...


 Perché non ci credi?
Beh, non avevo ben chiaro come funzionasse la sua applicazione, per cui mi
sfuggiva se la definizione della classe UCB fosse pubblica o privata dello
UC padre.
Quindi era un tentativo 'general purpose', del tipo 'Prova, se funziona
significa che la spiegazione va cercata nella visibilità'.


crearne.
o ci ics ... :-)
o leggi tropo velocemente, oppure il lapis, o laptop (come vuoi
chiamarlo) ti perseguita... :-)
Oppure non ho capito una mazza io... vabbé, tanto ormai ha risolto...
