-
Problème Sub event
Bonjour à tous,
est-ce que quelqu'un aurait une explication sur ce comportement
qui par ailleurs est peut-être normal mais que je trouve surprenant :
J'ai démarré un nouveau projet Visual Studio VB 2010.
Sur la Form1 j'ai ajouté une Textbox nommée TextBox1.
J'ai double-cliqué sur la Textbox et VB m'a crée la Sub :
Code:
Private Sub TextBox1_TextChanged(sender As System.Object, e As System.EventArgs)
Jusque la ça me semble normal.
J'ai ensuite ajouté sur Form1 un controle GroupBox nommé "GroupBox1".
Et j'ai "déplacé" TextBox1 dans GroupBox1.
J'ai double-cliqué sur la Textbox et VB m'a crée une 2ème Sub :
Code:
Private Sub TextBox1_TextChanged_1(sender As System.Object, e As System.EventArgs) Handles TextBox1.TextChanged
Est-ce que c'est normal ?
-
Tu as "déplacé" la textbox.
Si tu as fait du drag/drop, le phénomène est étrange, effectivement.
Par contre, si tu as "déplacé" en faisant un couper/coller le phénomène s'explique. Et c'est que suggère tes bouts de code.
En VB.Net, lorsque tu crée un gestionnaire d'évènement en double cliquant sur un contrôle, la méthode qui va bien est créée automatiquement en ajoutant à la fin Handles NomControle.NomEvent, ce qui traduit l'abonnement à l'évènement.
Par contre, si tu supprime le contrôle, les abonnements aux évènements de ce contrôle sont tous supprimés du code, mais pas les méthodes elles-mêmes.
Si tu déplace ton contrôle en faisant un couper/coller, couper signifie supprimer le contrôle, avant de le recréer au nouvel endroit. Et à la suppression, les abonnements sont aussi supprimés. C'est la raison pour laquelle, sur ta première méthode, tu n'as plus la partie Handles ....Et lorsque tu re-double-clique sur le contrôle, comme aucune méthode n'est trouvée pour l'évènement en question, une nouvelle est créée.
-
Merci sevyc64 pour la réponse :)
de mon coté voici ce que j'ai trouvé en farfouillant sur le Net, mais il a fallu chercher.
Apparemment quand on cut/paste un contrôle, seuls les propriétés sont copiés.
Donc une fois collé, il faut resélectionner les events dans les listes déroulantes
des propriétés du contrôle. Car celles-ci existent toujours mais ne sont plus liés
à celui-ci.
Parce que si on double-click aussitôt après le paste, vb recrée une Sub :
Code:
Private Sub TextBox1_TextChanged_1(sender As System.Object, e As System.EventArgs) Handles TextBox1.TextChanged
suffixé de "_x" ou "x" s'incrémente à chaque paste, parce que l'ancienne Sub existe toujours.
J'ai bon ?
-
oui, c'est exactement ce que j'ai expliqué :mrgreen:.