Newsgroup: it.comp.lang.visual-basic
Titolo: [VB6] Eventi nelle Interfacce

Ciao,
so che nelle interfacce non sono gestibili gli eventi...
Ma qualcuno di voi sa se esiste un modo per aggirare il problema?
Tnx.
Daniele.
-- 
Free As In Freedom
www.fsf.org
http://blog.libero.it/LeleB/

 Daniele.
Il SubClassing...?
Forse fraintendo il significato di interfaccia.
@Alex
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

> Ma qualcuno di voi sa se esiste un modo per aggirare il problema?
Se puoi, usa una classe astratta...

 Ma qualcuno di voi sa se esiste un modo per aggirare il problema?
guarda che non credo che sia un problema. gli eventi non sono parte 
dell'interfaccia di un oggetto. caso mai sono una interfaccia che dovra' 
essere implementata da chi vuole ricevere gli eventi (usando termini 
abbastanza maccheronici ;-))
forse se spieghi quello che vorresti ottenere ci si puo' ragionare su :-)
bye
r

 Se puoi, usa una classe astratta...
Mmmm...cosa intendi per classe astratta? Che io sappia l'unica cosa che
si può fare di 'astratto' in VB6 è creare un'interfaccia (Ovvero una
classe dove sono presenti solo le dichiarazioni di metodi e proprietà).
Ciao!
-- 
*******************
Free As In Freedom
-= 
www.fsf.org
 =-

 
Esempio:
---------------------------------------------------------
Interfaccia: IChannel.cls
Public Sub MioMetodo(ByVal Valore As Tipo)
End Sub
---------------------------------------------------------
---------------------------------------------------------
Implementazione: CChannel.cls
Implements IChannel
Private Sub IChannel_MioMetodo(ByVal Valore As Tipo)
	'Implementazione del Metodo
End Sub
---------------------------------------------------------
Tutto questo mi serve perchè devo usare oggetti diversi che usano la
stessa interfaccia....(ma VB6 non è OOP!) e dovrei gestire i relativi
eventi:
---------------------------------------------------------
Classe CChannels.cls
Private ChColl As EventColl2
Public Sub CreateChannel(Channel As IChannel, vKey As Variant)
	ChColl.Add Channel, vKey
End Sub
---------------------------------------------------------
Ciao!
Daniele.


Scusa, è vero, in vb6 non ci sono :(
non so perché pensavo parlassi di .net...


Ad esempio usare un'altra interfaccia "outbound", che deve essere
implementata dal client anziché dal server:
Per spiegarmi meglio uso uno pseudo-linguaggio:
Interface IEventSink
    Public Sub MyEvent1(...)
    Public Sub MyEvent2(...)
    ...
End Interface
Interface IMyServerInterface
    Public Sub RegisterEventSink(ByRef Sink As IEventSink)
    Public Sub UnregisterEventSink()
    ...
End Interface
Ora, il client sicuramente deve esporre una classe pubblica che implementi
IEventSink e passare un riferimento ad essa al server (che naturalmente
implementa IMyServerInterface) attraverso una chiamata a RegisterEventSink,
la cui implementazione dovrebbe consistere nella memorizzazione in una
variabile di modulo del riferimento a IEventSink passato.
Ogni volta che il server vuole "innescare" un evento nel client lo farà
attraverso la chiamata ad uno dei metodi MyEvent1, MyEvent2 etc. invocati
appunto tramite il riferimento memorizzato.
Quando il client non vuole più ricevere eventi (perché ad esempio sta per
terminare) chiamerà UnregisterEventSink la cui implementazione semplicemente
rilascia il riferimento di cui sopra.
Spero di essere stato comprensibile.
Ciao
Raf

 Ad esempio usare un'altra interfaccia "outbound"
In effetti era quello che pensavo....
Ho usato questa tecnica in passato per creare Ax dichiarabili WithEvents
ed utilizzabili all'interno di vettori.
Ora mi trovo a dover lavorare con Ax non modificabili che devo inserire
all0interno di una EventCollection....
...ma in effetti la pappa è la stessa.
Ora provo.
Grazie Raf!
Ciao!


 forse se spieghi quello che vorresti ottenere ci si puo' ragionare su :-)
Si, hai ragione, chiedo venia...ho accennato qualcosa rispondendo a Raf,
che tra l'altro penso abbia colto la soluzione...
Cmq:
Ho una Classe che funge da collezione e wrappa un oggetto
EventCollection (
http://www.mvps.org/emorcillo/en/code/vb6/index.shtml
)
All'interno di questa collezione devo inserire classi differenti che
però hanno tutte la stessa interfaccia.
Se esistesse l'ereditarietà sarei a posto...ma qui avevo pensato di
creare l'interfaccia comune (implementata nelle classi da inserire nella
collezione) e che mi permettesse di avere e gestire una collezione
omogenea in modo tale che tutti gli eventi dei suoi oggetti siano identici.
Mmm..è un po' contorto, lo so...ma spero di essermi piegato.
Ciao!


 classe dove sono presenti solo le dichiarazioni di metodi e proprietà).
Usi una classe base con la dichiarazione degli eventi.
Poi ti fai una classe che implementa la classe base.
Nel prog usi
Dim WithEvents c1 As MyBaseClass
...
Dim c2 as MyClass
Set c2 = New MyClass
Set c1 = c2
E lavori sugli eventi di c1
Ciao.

 ha scritto nel messaggio
news:43d9de9a$1...@x-privat.org...

Ma l'hai provata questa tecnica? Non mi pare possa funzionare (in VB6) visto che
gli eventi non si possono "ereditare" con Implements:
http://msdn.microsoft.com/library/en-us/vbenlr98/html/vamsgobjdoesnotsupportevents.asp
Bye
Raf

 gli eventi non si possono "ereditare" con Implements:
No, hai ragione, non ce la fa a raggiungere gli eventi nella classe di 
sotto.
Ciao 

 Mmm..è un po' contorto, lo so...ma spero di essermi piegato.
la classe che stai usando, e' fatta apposta per fregartene di quali 
eventi implementano gli oggetti che aggiungi nella collezione, per cui 
non capisco quale sia il tuo cruccio :-)
c'e' una ragione particolare per volere a tutti i costi la stessa 
interfaccia anche per gli eventi?
bye
r

 interfaccia anche per gli eventi?
Ma sto cercando di rappezzare un programma e non sto a spiegare tutto il
filo (che, a dir la verità non ho capito bene neppure io :) !!)
In effetti probabilmente tutto 'sto giro non serve...
Adesso faccio due schemi...due prove e poi ti dico..!
Ciao!
Daniele.
