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

VB.NET Discussion :

Ignorer les évènements de click bouton pendant l'execution du code


Sujet :

VB.NET

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2010
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 128
    Points : 48
    Points
    48
    Par défaut Ignorer les évènements de click bouton pendant l'execution du code
    Bonsoir,

    J'ai une une windowsForm avec plusieurs boutons, lors du click d'un de ces boutons, le code s'execute, le bouton semble inhiber, mais si l'on clique plusieurs fois dessus pendant l'execution du code, une fois l'execution de ce code terminé, il est de nouveau executer autant de fois que l'on a cliquer sur le bouton (meme chose si l'on clique sur un autre bouton.

    Voici le code de l'un de ces boutons

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub ButtonUpdateClick(sender As Object, e As EventArgs)
    		buttonUpdate.Enabled = False 'inhibition du bouton
    		MyReader.CSCFirmwareUpdate() 'execution de la fonction attaché à ce bouton qui peut durer 30 secondes
    		buttonUpdate.Enabled = True 'desinhibition du bouton
    	End Sub
    Y a t il un moyen d'empecher la prise en compte des évenements du bouton durant l'execution du code (et l'idée est même d'ignorer l'ensemble des évènements de tous les composants du windowsForm)

    Merci

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    button.enabled = false au début du code
    button.enabled = true à la fin du code
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre du Club
    Inscrit en
    Septembre 2010
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 128
    Points : 48
    Points
    48
    Par défaut
    Merci, mais c'est justement ce que j'ai fais (voir le code plus haut), et en effet visuellement le bouton semble non clickable, mais si l'on clique dessus pendant que la routine s’exécute, c'est comme si les cliques étaient gardés en cache, et qu'une fois la routine ayant fini d’exécuter son code, elle s’exécute à nouveau comme si on avait pas cliqué, mais en fait c'est le second clique gardé en cache qui s’exécute.

  4. #4
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : Autre

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2018
    Messages : 20
    Points : 47
    Points
    47
    Par défaut
    L'event sera toujours existant quoi que tu fasses. Parcontre, tu peux ajouter/supprimer des appels de fonctions associé à cet event.

    Par défaut, on associe la fonction 'component'_Click à l'event de click bouton. Tu peux donc le désactiver où ça te chante et le réactiver par la suite.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    this.button1.Click += new System.EventHandler(this.button1_Click); //Ajout d'un appel à la fonction button1_Click pour l'évènement
    this.button1.Click -= new System.EventHandler(this.button1_Click); //Suppression d'un appel à la fonction button1_Click pour l'évènement
    Les appels sont stockés comme dans une Queue. Le premier défini sera le premier a être exécuté.

  5. #5
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    Ah désolé pas regardé en effet

    Si la méthode que tu appelles prend du temps c'est à moitié normal car l'interface étant bloquée pendant l'exécution de code les événements venant de Windows ne sont pris pas par l'appli et dépilés quand c'est idle donc à la fin du code donc ça rexecute
    Auquel cas il faut utiliser un backgroundworker pour appeler ta méthode et remette enabled dans l'évent completed
    Ou en plus simple tu peux tester button.refresh après enabled = false mais c'est pas garanti

    Si la méthode que tu appelles démarre un thread c'est tout à fait normal car tu disable, tu lances le thread et tu rénable dans la foulée, et la méthode continue son exécution en parallèle, auquel cas la solution est te savoir quand la méthode a terminé pour enable
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre du Club
    Inscrit en
    Septembre 2010
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 128
    Points : 48
    Points
    48
    Par défaut
    ok merci pour l'explication ,je vais regarder tout ca.

  7. #7
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Bonjour,

    Dans le même ordre d'idées que celle de Kianii, tu peux aussi désactiver l'événement Click de l'objet que tu veux "faire taire" et le réactiver quand ça te va.

    Par exemple, pour désactiver l'événement Click du Button1, la ligne de code suivante là où cela te convient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            RemoveHandler Button1.Click, AddressOf Button1_Click
    et pour le réactiver, , la ligne de code suivante aussi où cela te convient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            AddHandler Button1.Click, AddressOf Button1_Click

Discussions similaires

  1. Déclancher un événement de click bouton
    Par midou256 dans le forum C#
    Réponses: 4
    Dernier message: 25/12/2012, 15h58
  2. Gérer les évènements lors d'un click sur les JButtons
    Par othman22222 dans le forum Composants
    Réponses: 1
    Dernier message: 22/12/2008, 16h08
  3. Réponses: 4
    Dernier message: 04/10/2008, 23h25
  4. évènement sur click pour 50 boutons d'une form
    Par timotep dans le forum Windows Forms
    Réponses: 4
    Dernier message: 22/07/2008, 11h56
  5. Réponses: 6
    Dernier message: 26/02/2007, 15h33

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