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
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)
Bonjour,
C'est parfait !!
Merci
"Fred" a écrit :
Dans : news:B16B4928-6084-403A-A45B-6B0684ED16B9@microsoft.com,
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)
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)