Salve, mi sono imbattuto in una difficolatà riguardo la creazione di eventi in una classe.
faccio un esempio
'Gambas class file
'NOME: ESEMPIO
EXPORT
EVENT cinquanta()
PUBLIC SUB Conta()
DIM i as INTEGER
FOR i=1 TO 100
WAIT 1
if i=50 THEN RAISE cinquanta
NEXT
END
Poi in Fmain..
PUBLIC es AS ESEMPIO
PUBLIC SUB MAIN()
es = NEW ESEMPIO as "es"
es.Conta()
END
PUBLIC SUB es_cinquanta()
PRINT "Sono arrivato a Cinquanta"
END
ma es_cinquanta() non viene mai eseguita.... neppure chiamandola esempio_cinquanta...
Che cosa sbaglio?
Poiché è passato molto tempo (dal 2009 !) dall'inserzione di questo messaggio, e poiché può essere ancora oggetto di lettura da parte degli utenti di questo forum, ed affinché non si generino dubbi ed incertezze sul funzionamento di Event e Raise, vorrei semplicemente segnalare che ora nell'esempio fatto da guiodic la sollevazione dell'evento funziona regolarmente.
Ho un po' modificato l'esempio di guiodic come segue:
Scriveremo nella classe principale FMain.Class:
' Gambas class file
Public es As ESEMPIO
Public Sub Form_Open()
es = New ESEMPIO As "es"
' viene chiamata la sub-routine 'conta' nella classe secondaria "ESEMPIO.class":
es.Conta()
End
' se sollevato l'Evento "cinquanta" nella classe secondaria,
' si scatena questa sub-routine, e le viene passato un valore Integer:
Public Sub es_cinquanta(num As Integer)
Print "Sono arrivato a " & num & " !"
End
nella classe secondaria "ESEMPIO.Class":
Export
' viene dichiarato l'Evento ed assegnato il nome "cinquanta"
' ed un parametro Integer:
Event cinquanta(ev As Integer)
Public Sub Conta()
Dim i As Integer
For i = 1 To 100
Wait 1
Print i
' se la variabile i = 50, allora viene sollevato l'Evento,
' che scatenerà la sub-routine "es_cinquanta(num As Integer)"
' presente nella classe principale, e le passa il valore di "i":
If i = 50 Then Raise cinquanta(i)
Next
End
In console avremo:
Sono arrivato a 50 !