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

C# Discussion :

click de souris multiple non souhaités sur mousedown et mouseup events


Sujet :

C#

  1. #1
    Membre habitué Avatar de lasrevinu
    Inscrit en
    Février 2010
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 215
    Points : 134
    Points
    134
    Par défaut click de souris multiple non souhaités sur mousedown et mouseup events
    Bonjour a tous,
    j'ai creé un bouton qui envoie une instruction lorsqu'il est appuyé et en envoie une autre dés qu'il est relaché. ceci avec mouseDown et mouseUp events.

    et lorsque je relache le bouton de la souris, je met mon bouton en et ceci pendant 500 millisecondes.
    le comportement qui me derange est que lorsqu'on clique plusieurs fois, meme sur le bouton qui est desactivé, le click est pris en compte, et le bouton s'activera et se desactivera jusqu'a ce que les temps soient ecoulés.

    une proposition?
    merci

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2005
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2005
    Messages : 482
    Points : 625
    Points
    625
    Par défaut
    lut,
    drôle de technique mais bon...
    vu que ton bouton a une valeur Enabled, pourquoi ne pas l'utiliser comme test ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if (monbutton.Enabled)
         je traite
    else 
         je traite po !
    (Thread.Sleep(500) = berk berk berk !!!!!!!!)^10
    "Essayer est le premier pas vers l'Echec !" (Homer Simpson)

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2010
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 33
    Points : 32
    Points
    32
    Par défaut
    Citation Envoyé par Themacleod1980 Voir le message
    (Thread.Sleep(500) = berk berk berk !!!!!!!!)^10
    +1

  4. #4
    Membre habitué Avatar de lasrevinu
    Inscrit en
    Février 2010
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 215
    Points : 134
    Points
    134
    Par défaut sensibilité click
    le Thread.Sleep(500) c'est pour simuler le comportement de la machine que je commande,
    en fait c'est 6 bouton qui font bouger 3 axes d'un systeme 3d.

    j'ai essayé avec un booleén et une boucle while
    while boutons enabled -> instructions

    mais j'ai le meme soucis,
    je crois que Visual studio enregistre les clicks,

    il doit y avoir une option qui elimine ce probleme.

    Avez vous deja eté confronté à un probleme de ce type?

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2005
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2005
    Messages : 482
    Points : 625
    Points
    625
    Par défaut
    a mon avis ton problème vient du sleep :
    pendant ce sleep, le système ne peut pas traiter les évènements (clics en l'occurence) donc il doit les ajouter a sa liste d'évènements.
    en mettant un doevents(), il peut traiter les events, la preuve :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    button1.Enabled = false;
    for (int cpt=0;cpt<50;cpt++)
    {
          System.Threading.Thread.Sleep(1);
          Application.DoEvents();
    }            
    button1.Enabled = true;
    ca marche (mais j'ai terriblement honte là ^^)
    "Essayer est le premier pas vers l'Echec !" (Homer Simpson)

  6. #6
    Membre habitué Avatar de lasrevinu
    Inscrit en
    Février 2010
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 215
    Points : 134
    Points
    134
    Par défaut
    voici mon code: (il y a un thread.sleep )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
      private void FlecheDroite_MouseDown(object sender, MouseEventArgs e)
            {
                serialPort1.Write(GO);
            }
            private void FlecheDroite_MouseUp(object sender, MouseEventArgs e)
            {
                flecheButton.enabled=false;
                serialPort1.Write(Stop);
                Thread.sleep(500);
     
    // ce qu'il faut mettre
                Application.DoEvents();
     
                flecheButton.enabled=true;
            }
    Mais bon

  7. #7
    Membre habitué Avatar de lasrevinu
    Inscrit en
    Février 2010
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 215
    Points : 134
    Points
    134
    Par défaut Parfait
    apres avoir mis le doEvent, Ca marche a merveille.
    merci Themacleod1980
    avant de finir je voulais savoir comment tu gerait tes thread.sleep ?

  8. #8
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2005
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2005
    Messages : 482
    Points : 625
    Points
    625
    Par défaut
    ben le problème avec le thread.sleep c'est qu'il fige complètement ton thread (évennements y compris...) c'est pour ca que je te donnais comme exemple une boucle qui bloque le thread 1ms (négligeable) et donne la main aux events (DoEvents). mais cette méthode est TRES moche (perfs à chi$@! et processeur qui bosse à fond).

    le mieux serait peut être d'utiliser un timer, qui lui, ne traiterait ton bout de code que toutes les X millisecondes et qui le reste du temps laisserait la main au système.

    c'est un peu plus compliqué à s'y mettre mais tu y gagneras énormément en perf si tu prends cette habitude.

    @++
    "Essayer est le premier pas vers l'Echec !" (Homer Simpson)

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

Discussions similaires

  1. Comportement non souhaité sur IE
    Par benito25 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 19/03/2014, 09h42
  2. VBA - Macro : Action sur click droit souris sur une cellule
    Par Raphael DIAZ dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 02/02/2011, 10h45
  3. [PPT-2007] action sur click de souris dans une liste déroulante
    Par oleronnais dans le forum VBA PowerPoint
    Réponses: 3
    Dernier message: 29/01/2010, 07h37
  4. Simulation d'un click de souris sur un bouton ReyCommand
    Par Chatbour dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 28/07/2007, 09h53
  5. MoveFirst non souhaité sur Formulaire
    Par GAGNON dans le forum IHM
    Réponses: 7
    Dernier message: 29/12/2006, 11h53

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