Bonsoir à tous, J'espère être sur bonne section du Forum. Je voudrais signaler certains problèmes et vous faire part de ma propre expérience concernant la programmation évènementielle en VB.NET. Je ne vous cache pas que certains petits détails m'ont exaspérés et je pense que ça méritait un petit post.
Donc par définition, en programmation évènementiel, on exécute du code dans des procédures évènementielles dont l'ordre chronologique et le moment ou sont levés ces évènements sont définies par le FrameWork et il faut faire avec. Ça serait parfait si Microsoft avait assuré une certaine cohérence entre les évènements des différents contrôles de saisies.
Je vous donne un exemple :
J'ai besoin de lire la valeur d'un TextBox quand l'utilisateur entre une nouvelle valeur : Je peux le faire dans TextBox.KeyUp. Et si on veux faire la même chose avec un DateTimePeacker, on pourrait penser à utiliser Keyup de la même façon mais en fait ça ne fonctionne pas, la valeur retournée par le DateTimePeaker étant l'ancienne valeur et non la nouvelle valeur entrée et donc en fait on s'appercoie qu'il n'y a pas d'équivalent de l’évènement KeyUp pour ce contrôle qui se comporte rigoureusement de la même façon. Ce n'est qu'un exemple mais je ne compte plus le nombre de mésaventure à cause de ces évènements complètement farfelus, je trouve ça aberrant.
Autre exemple avec des contrôles DataBindés et en gérant soit même l'écriture dans la base avec DataSourceUpdateMode.Never et un MyBinding.Writevalue :
Si on fait un WriteValue dans l'evénement CheckBox.Click ça fonctionne, on écrit bien la nouvelle valeur dans la base, en revanche si on fait la même chose avec un autre controle (MyTextBox.KeyUp ou MyComboBox.SelectionChangeCommitted, je sais plus lequel) on écrit l'ancienne valeur. Notez que j'ai choisi ces évènements car ils ne sont pas levés sur une modification qui provient du code mais uniquement par l'utilisateur (de toute façon j'avais noté aussi ce genre de problème avec d'autres évènements plus courant). je suis un peu imprécis et pas assez exhaustifs car j'écrits de mémoire mais les problèmes que j'ai rencontré à cause de ces évènements sont bien réel et dans bien des cas il n'existe pas l'évènements que l'on souhaiterez. L’évènement étant levé soit trop tôt ou soit trop tard selon le contrôle en question.
(Et je ne parle pas de l'annulation de la valeurs des contrôles DataBindés avec CancelEdit que le moteur de DataBinding ignore complètement).
Partager