Bonjour.
Je fais actuellement de la correction de bugs sur un logiciel de supervision en C# + WinForms. Il se trouve que, lors d'un clic sur un certain bouton, je dois le désactiver pour laisser le temps à un processus de s'effectuer, avant de le réactiver.
Pour cela, j'ai d'abord essayé de mettre l'attribut Enabled du bouton à false et de le remettre à true juste avant la fin de la fonction. Le bouton se grise mais il semble quand même prendre en compte les clics. En pas-à-pas, j'ai regardé le comportement du programme et apparemment, même si le bouton est désactivé, le programme prend en compte les clics sur le bouton, les met en attente et les traite un par un en appelant à chaque fois la fonction qui gère le clic (l'exécution de la fonction n'est jamais interrompue).
J'ai également essayé de retirer la fonction de la gestion d'évènements du clic, en début de fonction avant de la remettre avant la fin de la fonction et, là aussi, j'ai plusieurs exécutions successives de la fonction. Si je ne remets pas la fonction dans la gestion d'événements de clic, la fonction est appelée une seule fois mais n'est plus rappelée ensuite que ce soit pour les appuis bouton quand il est activé ou désactivé.
Si je retire la fonction et met une autre fonction à la place, c'est l'autre fonction qui sera appelée par la suite, même pour gérer les appuis effectués sur le bouton désactivé.
Jusque là c'est logique, modulo la prise en compte de clics sur un bouton censé être désactivé...
En rédigeant mon message, j'ai essayé de seulement désactiver le bouton en début de fonction, sans jamais le réactiver, pour vérifier l'état du bouton après la fin de la fonction. Et étrangement, ça fonctionne : les clics sur le bouton pendant qu'il est désactivé ne sont plus pris en compte et je peux quand même réutiliser le bouton ensuite !
C'est franchement n'importe quoi ! Est-ce que quelqu'un pourrait m'expliquer si c'est normal, si oui en quoi c'est normal, et sinon est-ce qu'il n'existe pas une autre méthode pour désactiver proprement un bouton ?
Merci d'avance.
Partager