Newsgroup: it.comp.appl.access
Titolo: CustomControl + WithEvents

Sto cercando di gestire tramite una classe un controllo di tipo CustomControl.
Nella mia maschera di esempio ho inserito, nello specifico, un controllo 
Microsoft Rich TextBox 6.0 (SP6).
Consultando l'help di Access XP si nota che i controlli di tipo CustomControl 
supportano una serie di eventi.
Tuttavia, dichiarando nella classe una variabile nel modo seguente:
Private WithEvents mCustomControl As Access.CustomControl
a tempo di compilazione funziona tutto tranquillamente, ma quando, sempre 
nella stessa classe, vado ad eseguire la seguente riga di codice
Set mCustomControl = ctl
dove ctl è un parametro locale di un metodo, ed è di tipo Access.Control, 
ottengo l'errore di runtime 459 (L'oggetto o la classe non supporta il gruppo 
di eventi).
Ho cercato in giro ed ho trovato solo persone che hanno avuto problemi nell'intercettare 
gli eventi di un CustomControl, ma di soluzioni nemmeno l'ombra.
Avete qualche suggerimento?
--
PBsoft di Gabriele Bertolucci
www.pbsoft.it
skype: pbsoftsolution

Aggiungo solamente che, a questo link
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbenlr98/html/vamsgObjDoesNotSupportEvents.asp
ho trovato probabilmente una spiegazione: cioč che gli UserControl dichiarati 
Private non supportano la dichiarazione WithEvents perché le informazioni 
sul tipo necessarie per scatenare l'evento non sono disponibili a runtime.
Qualcuno ne sa di piů?


Private WithEvents mCustomControl As Access.CustomControl
Questa dichiarazione non l'ho mai sentita, a meno che non si riferisca
ad una dichiarazione generica di una Classe, pertanto metterai il nome
della classe che però deve esporre EVENTI.
Ma se la fai così che succede:
Private WithEvents mCustomControl As MsCommonControl.RichText
(non sò se ho azzeccato il nome della classe e del controllo perchè
sono 
andato a memoria, ma con il TreeView funziona)..! 
@Alex

 Private WithEvents mCustomControl As MsCommonControl.RichText
Succede che la classe non è più generica :-)


La Classe si chiama CustomControl...?
Se è così evidentemente hai dichiarato male qualcosa...!
Dai un'occhiata a come uso la tecnica degli eventi di Classe
in un paio di Demo nel mio sito...!
http://www.alessandrobaraldi.it/DettaglioFaq.asp?IdFAQ=155
http://www.alessandrobaraldi.it/DettaglioFaq.asp?IdFAQ=156
http://www.alessandrobaraldi.it/DettaglioFaq.asp?IdFAQ=157
Ciao
@Alex

 paio di Demo nel mio sito...!
I tuoi demo sono state la base di partenza per il lavoro che sto cercando 
di fare ;-)
Purtroppo il problema sembra essere un altro, come evidenziato a questo indirizzo:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbenlr98/html/vamsgObjDoesNotSupportEvents.asp


Non è chiaro se quanto dichiarato da MS in quella Faq sia veramente il
tuo caso.
Se vuoi provare ad inviarmi un Demo(minimale) per capire meglio la cosa
provo a dare un'occhiata.
Ciao
@Alex

Una cosa mi era sfuggita.
Contrariamente a VB, VBA non supporta l'istanza di uno  UserControl in
una Classe che
non sia una Form, nella quale però hai inserito lo User Control
stesso...!
Mi spiego meglio, ho avuto lo stesso problema con WinSock, in VB avevo
realizzato
una classe che implementava lo UserControl di WS, provata in
VBA(Access) ovviamente
non andava, come ho fatto per risolvere, ho usato una Form come Classe,
e gli ho inserito
il Controllo WinSock, in quel modo esponeva tutto...!
Non sò se ora ho centrato meglio la questione.
@Alex

 Non sò se ora ho centrato meglio la questione.
Probabilmente si, ma vorrei capire meglio io.
Ti spiego la mia situazione.
Ho una classe di tipo form che viene inizializzata da una form vera e propria. 
Chiamiamo questa classe clsForm.
La classe clsForm provvede a creare una serie di istanze di classi di vario 
tipo (clsTextBox, clsListBox, clsImage.......), creando un'istanza per ogni 
controllo contenuto nella form vera e propria.
Fatte queste premesse, come pensi che potrei adottare la soluzione da te 
proposta per riuscire ad esporre anche un oggetto di tipo Access.CustomControl 
con WithEvents?


Ho capito, hai usato la stessa tecnica che ho usato io, quindi mi
rimane da capire
se nella Form Iniziale hai inserito l'OCX in questione...!
Se l'hai inserito devi fare attenzione a come lo passi come Oggetto
alla
classe da istanziare, perchè al contrario degli oggetti nativi se hai
ciclato
la collection Controls della Form potrebbe richiedere di essere passato
con l'estensione esplicita Object (ctl.Object).
Purtroppo credo però che a questo punto passandolo come Oggetto
generico
perdi la possibilità di avere gli eventi, a meno di dichiarare nella
classe
un oggetto specifico come ti dicevo io
Private With Events mcc as MSCommonControl.NomeClasse
quindi con il Set mcc=OggettoPassato potrebbe essere che riesci
a fare ereditare alla Classe gli eventi.
Questo non toglie però che devi gestirli ed inserire nella
Classe(Wrapper)
gli Eventi Pubblic che dovrai richiamare dagli eventi di tipo Private
del customControl.
In pratica nella classe dovrai smazzarti gli eventi utili che l'Ocx
espone e fargli scatenare
l'evento Public di classe:
Public Event Selezionato(parametri.....previsti)
Private Sub mcc_Selected(parametri previsti)
   RaiseEvent Selezionato(parametri.....previsti)
End Sub
A questo punto dichiarando la classe con WithEvents se non è oltre il
2° livello
dovresti poter avere a disposizione gli Eventi Public di classe.
Se non riesci prova ad Implementare la classe Form come interfaccia
usando Implements come ho fatto(ma non è la stessa cosa).
Ciao
@Alex

 usando Implements come ho fatto(ma non è la stessa cosa).
Non ho mai utilizzato le interfacce custom.


 cosa provo a dare un'occhiata.
Ti ringrazio per la disponibilità, che terrò comunque presente per il futuro 
:-)


 usando Implements come ho fatto(ma non è la stessa cosa).
Non ho mai utilizzato le interfacce custom.
[RISPOSTA]
In VBA non ha un gran senso, ma può essere utile.
@Alex