IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

Comment désactiver proprement un bouton ?


Sujet :

Windows Forms

  1. #1
    Membre confirmé

    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Octobre 2011
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Octobre 2011
    Messages : 153
    Points : 591
    Points
    591
    Par défaut Comment désactiver proprement un bouton ?
    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.

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 654
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 654
    Points : 5 209
    Points
    5 209

  3. #3
    Membre confirmé

    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Octobre 2011
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Octobre 2011
    Messages : 153
    Points : 591
    Points
    591
    Par défaut
    Entre temps, j'ai testé sur une application WinForms vierge pour voir si le comportement est le même. La seule différence avec mon programme, c'est que le bouton n'est pas réactivé à la fin de la fonction, ce qui veut dire que quelque chose réactive les boutons dans mon programme...

    J'ai essayé la solution proposée dans le topic que tu as désigné (celle consistant à mettre le processus long dans une tâche à part, dans un contexte asynchrone). Après quelques tâtonnements, ça fonctionne (sauf en debug pas-à-pas mais c'est normal et l'essentiel est que l'utilisateur ne clique pas plusieurs fois le bouton en utilisation normale).

    Merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 16/07/2020, 23h10
  2. Comment désactiver le bouton Control(ctrl) ?
    Par Subkill dans le forum Excel
    Réponses: 4
    Dernier message: 22/10/2007, 20h18
  3. comment désactiver un bouton (VB6)
    Par josémaria dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 20/02/2007, 12h09
  4. Réponses: 13
    Dernier message: 06/07/2006, 18h06
  5. [SQL/Contrainte] Comment désactiver-réactiver proprement ?
    Par SanTa62 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/01/2006, 10h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo