1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
|
'--------------------------------------------------------------
'forme pour tester la classe ClassePerso
'--------------------------------------------------------------
Public Class Form1
Dim ClassePerso As GererMesDelegues = New GererMesDelegues
Sub New()
' Cet appel est requis par le Concepteur Windows Form.
InitializeComponent()
' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
'on ajoute de 2 delegues handlers
AddHandler ClassePerso.Click, AddressOf delegueClick
AddHandler ClassePerso.DoubleClick, AddressOf delegueDoubleClick
End Sub
Private Sub delegueClick(ByVal sender As Object, ByVal e As EventArgs)
MessageBox.Show("un delegue Click a ete ajoute")
End Sub
Private Sub delegueDoubleClick(ByVal sender As Object, ByVal e As EventArgs)
MessageBox.Show("un delegue Click a ete ajoute " & ClassePerso.listeHandlers.Count.ToString)
End Sub
'nb et liste des evenements au chargement
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
TextBox1.Text = TextBox1.Text & "NB au chargement :" & ClassePerso.listeHandlers.Count.ToString & vbCrLf
For Each tt As EventHandler In ClassePerso.listeHandlers
TextBox1.Text = TextBox1.Text & tt.Method.Name & vbCrLf
Next
End Sub
Private Sub btnAjoutDelegue_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAjoutDelegue.Click
'on ajoute 2 autres delegues
AddHandler ClassePerso.Click, AddressOf delegueClick
AddHandler ClassePerso.Click, AddressOf delegueDoubleClick
TextBox1.Text = TextBox1.Text & "NB apres btnAjout :" & ClassePerso.listeHandlers.Count.ToString & vbCrLf
For Each tt As EventHandler In ClassePerso.listeHandlers
TextBox1.Text = TextBox1.Text & tt.Method.Name & vbCrLf
Next
btnAjoutDelegue.Enabled = False
End Sub
Private Sub btnRazTextbox_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRazTextbox.Click
'efface textbox
TextBox1.Text = ""
btnAjoutDelegue.Enabled = True
End Sub
End Class
'--------------------------------------------------------------
'exemple de classe qui gere ses delegues et optimise la memoire
'--------------------------------------------------------------
Public Class GererMesDelegues
' Definit un magasin pour tous les handlers d'evenements
Public listeHandlers As New ArrayList
Public Sub New()
'pour tester la gestion
RaiseEvent Click(Me, EventArgs.Empty)
RaiseEvent DoubleClick(Me, EventArgs.Empty)
End Sub
' Definit evenement Click qui utilise magasin des delegues.
Public Custom Event Click As EventHandler
'surcharche AddHandler
AddHandler(ByVal value As EventHandler)
If Not listeHandlers.Contains(value) Then
listeHandlers.Add(value)
End If
End AddHandler
'surcharche RemoveHandler
RemoveHandler(ByVal value As EventHandler)
If listeHandlers.Contains(value) Then
listeHandlers.Remove(value)
End If
End RemoveHandler
'generation evenement
RaiseEvent(ByVal sender As Object, ByVal e As EventArgs)
For Each handler As EventHandler In listeHandlers
If handler IsNot Nothing Then
handler.BeginInvoke(sender, e, Nothing, Nothing)
End If
Next
End RaiseEvent
End Event
' Definit evenement DoubleClick qui utilise le meme magasin des delegues.
Public Custom Event DoubleClick As EventHandler
AddHandler(ByVal value As EventHandler)
If Not listeHandlers.Contains(value) Then
listeHandlers.Add(value)
End If
End AddHandler
RemoveHandler(ByVal value As EventHandler)
If listeHandlers.Contains(value) Then
listeHandlers.Remove(value)
End If
End RemoveHandler
'generation evenement
RaiseEvent(ByVal sender As Object, ByVal e As EventArgs)
For Each handler As EventHandler In listeHandlers
If handler IsNot Nothing Then
handler.BeginInvoke(sender, e, Nothing, Nothing)
End If
Next
End RaiseEvent
End Event
' Definir d'autres evenenements
' ...
End Class |
Partager