bonjour tt le monde,
voila je vt savoir comment on peut fait un evenement de tel sorte que
ce variable declenche un evenement quand sa valeur se change
exemple
variable a
a=5 ---------------------------------->a=8
declenchement d'un evenement
bonjour tt le monde,
voila je vt savoir comment on peut fait un evenement de tel sorte que
ce variable declenche un evenement quand sa valeur se change
exemple
variable a
a=5 ---------------------------------->a=8
declenchement d'un evenement
Si tu aimes ma Réponse pense à cliquer sur
Visiter mon blogEt mes codes sources
- La simulation de navigation dans internet explorer avec Interop.SHDocVw
- Protéger mes données de configuration dans une dll compilée
Tu utilises donc Machin et tu t'abonnes à l'évènement OnMachinChanged ...
Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 Public Event OnMachinChanged As EventHandler Private pmachin As Integer = 0 Public Property Machin() As Integer Get Return pmachin End Get Set(ByVal value As Integer) pmachin = value RaiseEvent OnMachinChanged(Me, EventArgs.Empty) End Set End Property
De la vallée du vent ...
Distribution d'applications .NET avec DreamShield
DreamShield, Le site, forum, blog, wiki & Jeux
Mon blog, Cours et tutoriels pour apprendre C#, forum C#, Offres d’emploi développeur C#
comment j'excute le procedure dû au declanchement de l'evenement
un exemple peut faire l'affaire
et merci,
Si tu aimes ma Réponse pense à cliquer sur
Visiter mon blogEt mes codes sources
- La simulation de navigation dans internet explorer avec Interop.SHDocVw
- Protéger mes données de configuration dans une dll compilée
ça doit être un truc genre ça :
par contre, tu devrais lire ceci :
Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Public Sub OnMachinChangedHandler(ByVal sender As Object, ByVal e As EventArgs) Handles OnMachinChanged ... End Sub
http://plasserre.developpez.com/cours/vb-net/
De la vallée du vent ...
Distribution d'applications .NET avec DreamShield
DreamShield, Le site, forum, blog, wiki & Jeux
Mon blog, Cours et tutoriels pour apprendre C#, forum C#, Offres d’emploi développeur C#
+1 pour la suggestion de Smyley...
J'ai juste une petite remarque sur les conventions de nommage : normalement le nom de l'évènement ne prend pas de préfixe On, donc l'évènement devrait s'appeler MachinChanged et non OnMachinChanged. OnMachinChanged, typiquement, sera le nom d'une méthode protégée pour déclencher l'évènement (qui n'est pas vraiment nécessaire en VB.NET vu que Raise vérifie que le handler n'est pas null)
Pas de questions techniques par MP ! Le forum est là pour ça...
Tutoriels : Les nouveautés de C# 6 - Accès aux données avec Dapper - Extraction de données de pages web à l'aide de HTML Agility Pack - La sérialisation XML avec .NET (Aller plus loin) - Les markup extensions en WPF
Grosso modo, oui. Mais VB.NET a l'instruction Raise, qui n'existe pas en C#, et qui vérifie si des handlers sont abonnés à l'évènement avant d'essayer de les appeler. En C#, il faut faire cette vérification soi-même, donc pour un évènement MachinChanged, on écrira souvent une méthode comme ça :
qu'on appelle à la place de Raise
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 protected void OnMachinChanged() { var handler = MachinChanged; if (handler != null) handler(this, EventArgs.Empty) }
Pour l'explication de la variable handler intermédiaire : c'est pour parer le cas (improbable) où MachinChanged deviendrait null entre le test et l'appel. Eric Lippert a publié un billet sur son blog où ce problème est décrit de façon plus approfondie...
Qu'est-ce que tu entends par là ?
Si tu veux dire "géré par le garbage collector", comme tous les objets .NET, oui, bien sûr, il est managé
Pas de questions techniques par MP ! Le forum est là pour ça...
Tutoriels : Les nouveautés de C# 6 - Accès aux données avec Dapper - Extraction de données de pages web à l'aide de HTML Agility Pack - La sérialisation XML avec .NET (Aller plus loin) - Les markup extensions en WPF
dans le framework, les handlers sont retirés dans le dispose dans la partie où meme appelé depuis le finalize c'est fait, donc partie réservées au choses non managée ...
alors que le peu que j'ai pu en voir dans reflector les event c'est une collection de délégués pour chaque évènement ...
serait-ce pour etre sur de vider ses collections de choses inutiles ?? étrange ...
Pour la convention de nommage c'est tout à fait ça (sauf que dans la précipitation d'écrire du code C# et de le convertir en ligne, j'ai pas fait attention ).
Pour la dernière question, je vois pas où tu veux en venir (Pol ou sperot ? ). En tout cal les events restent attachés même dans les finalizers mais on n'a pas à les libérer soit même. Après si j'ai bien compris les évènements sont des références faibles et pas fortes donc avoir une référence via un évènement ne compte pas dans les cycles du GC ...
De la vallée du vent ...
Distribution d'applications .NET avec DreamShield
DreamShield, Le site, forum, blog, wiki & Jeux
Mon blog, Cours et tutoriels pour apprendre C#, forum C#, Offres d’emploi développeur C#
je me demande surtout si on est obligé de mettre quelquepart un removehandler pour chaque addhandler qui est passé
en vb.net (je sais pas si ca y est en c#) on peut déclarer des variables en rajoutant le mot-clé WithEvents
ca permet de pouvoir écrire derrière une sub Handles Instance.Event
le compilateur pour ce genre de chose s'occupe de faire le addhandler, mais aussi le removehandler
(-- 2 minutes plus tard en ayant utilisé quelques neurones--)
ca doit etre pour ne pas handler plusieurs instances à la fois que ca compile de cette manière ...
si à ca on rajoute le fait que des removehandler dans les dispose j'arrive pas à en retrouver dans reflector ca veut dire que les remove seraient facultatifs ...
c'est troublant ?(Pol ou sperot ? )
Oui on doit s'abonner aux évènements mais on es pas obligé de supprimer l'abonnement. En C# c'est += et -= pour les évènements.
Le WithEvents du vb j'ai pas compris à quoi ça sert (mais entre nous ça ne me dérange pas ) mais en C# pour rajouter un évènement c'est systématiquement Machin += new EventHandler(...).
De la vallée du vent ...
Distribution d'applications .NET avec DreamShield
DreamShield, Le site, forum, blog, wiki & Jeux
Mon blog, Cours et tutoriels pour apprendre C#, forum C#, Offres d’emploi développeur C#
en vb.net on a encore un truc de fénéant
au lieu de
on peut faire
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 private _btn as new button public sub new addhandler _btn.click, btnclick end sub private sub btnclick end sub
à la compilation le withevents transforme la variable en propriété et dans le set ca fait removehandler si value is nothing puis le addhandler
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 private withevents _btn as new button private sub btnclick Handles _btn.click end sub
en plus en vb, on peut retirer sender et e ca rale pas ... (par contre on peut pas les utiliser du coup )
bon par contre ca empeche quand meme d'écrire des conneries genre de mettre que sender, ou e pas du bon type
tous les controles sont déclarés dans le fichier designer avec withevents
et je trouve ca plutot pratique, sur une sub on sait directement pas qui elle sera appelée
(on peut meme avoir des handles multiples genre Handles btn1.click, btn2.click, textbox1.textchanged)
j'aurais bien pourri le post d'origine !!
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager