Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Delegate et Event avec valeur de retour ?

11 réponses
Avatar
claudetom
Voici un exemple qui ne fonctionne pas,
Auriez-vous la bonne Syntaxe pour que cela fonctionne ?

Public Delegate Function CheckUserInputEvent() As Boolean

Public Event BeforeUpdate As CheckUserInputEvent
'*** Erreur retournée :
'Les événements ne peuvent pas être déclarés avec un type délégué ayant un
type 'de retour.
'***

'*Exemple de fonction qui retourne la valeur
Private Function dbSel_BeforeUpdate() As Boolean
MyBase.dbSelect.SelectedRecords.GetRecord(0).ClearTables()
Return True
End Function

Merci.

1 réponse

1 2
Avatar
claudetom
Bonjour,

C'est parfait !!

Merci

"Fred" a écrit :

Dans : news:,
claudetom écrivait :
> Bonsoir,
> Oui c'est ce qu'il se passe dans les procédures si la fonction dans
> le cas de l'exemple précédent si retourúlse alors n'execute pas le
> code qu'il y'a dans la parti IF ENDIF.

Bon,
je suppose donc que le but poursuivi est le suivant :

Une classe doit faire un traitement.
Avant de le faire, elle déclenche un évènement qui peut être intercepté
par une autre classe.
Cet évènement doit pouvoir récupérer une annulation éventuelle du
traitement.

Si c'est bien cela, alors la petite application console suivante
illustre une façon de procéder :

Module Module1

Sub Main()
Dim t As New Test
AddHandler t.BeforeInsert, _
AddressOf Test_BeforeInsert
t.Insert("String")
t.Insert(DateTime.Now)
t.Insert(5)
Console.ReadLine()
End Sub

Private Sub Test_BeforeInsert( _
ByVal sender As Object, _
ByVal e As TestEventArgs)
e.Cancel = Not InsertAllowed(e.Data)
End Sub

Private Function InsertAllowed(ByVal o As Object) As Boolean
Return TypeOf o Is Int32
End Function

End Module


Public Class TestEventArgs
Inherits EventArgs
Public Data As Object = Nothing
Public Cancel As Boolean = False
End Class

Public Delegate Sub TestEventHandler( _
ByVal sender As Object, _
ByVal e As TestEventArgs)

Public Class Test
Public Event BeforeInsert As TestEventHandler

Protected Overridable Sub OnBeforeInsert( _
ByVal e As TestEventArgs)
RaiseEvent BeforeInsert(Me, e)
End Sub

Public Sub Insert(ByVal o As Object)
Dim e As New TestEventArgs
e.Data = o
Me.OnBeforeInsert(e)
If e.Cancel Then Exit Sub
Console.WriteLine(o.ToString & " inséré")
End Sub

End Class

--
Fred
http://www.cerber mail.com/?3kA6ftaCvT (enlever l'espace)




1 2