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 :

Detection d'évênement sur objet "Button"


Sujet :

C#

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Detection d'évênement sur objet "Button"
    Bonjour à tous... Je sollicite votre aide suite à un problème auquel je ne parviens à trouver aucune réponse.

    Je souhaiterais pouvoir détecter l'évenement de clic sur un boutton ce que je ne parviens pas à faire.
    Le but étant d'éxécuter une boucle While durant l'appui et de l'arrêter au relachement.
    Si quelqu'un à une idée, je suis preneur.

    vous remerciant par avance...
    Cordialement.

  2. #2
    Membre chevronné Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Points : 2 227
    Points
    2 227
    Par défaut
    Si tu es débutant, le mieux est de passer par l'éditeur graphique.
    Dans Visual Studio, tu sélectionnes ton bouton, clic droit properties, et là tu as un onglet avec un éclair jaune, qui correspond aux évènements.

    Reste à voir si tu veux faire un évènement sur le clic (comme dans ton titre), ou plutôt la pression du bouton (tant que le bouton est pressé, ça correspond mieux à ta description). Mais à mon avis tu trouveras ton bonheur !

  3. #3
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Bonjour,

    Une solution consiste à exécuter successivement les "instructions" que tu voulais mettre dans ta boucle via un timer:
    • créer un Timer Timer1 (avec, par exemple, un intervalle de 50 milliseconds, si on veut 20 itérations à la seconde),
    • Sur l'event MouseDown du bouton, lancer le timer,
    • Sur l'event MouseUp, désactiver le timer.
    • Dans l'event du timer, faire Timer1.Enabled=false, exécuter les "instructions", puis Timer1.Enabled=true.

  4. #4
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 493
    Points
    5 493
    Par défaut
    Fondamentalement, si vraiment tu veux une boucle while, il faut qu'elle opère sur un autre thread que celui de l'UI pour ne pas empêcher celle-ci de réagir. Tu crées le thread en réaction à MouseDown et tu l'interromps en réaction à MouseUp.

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    public class MyForm : Form
     
    private Thread m_thread;
     
    private void RunWhileButtonIsPressed()
    {
       while(m_thread != null) 
       { 
            ...
       }
    }
     
    private void Button_Mousedown(object sender,MouseEventArgs e)
    {
        if (m_thread != null) return; // Ne devrait pas arriver mais...
     
        m_thread = new Thread(RunWhileButtonIsPressed);
        m_thread.Start();
    }
     
    private void Button_Mouseup(object sender,MouseEventArgs e)
    {
       m_thread = null;
    }

    Deux variantes :
    * Utiliser un worker thread mais, si la file d'attente a des tâches en attente, ton thread ne démarrera pas immédiatement (même pb avec les timers il me semble).
    * Conserver un même thread plutôt que d'en recréer un à chaque fois. Il suffit d'utiliser un WaitEventHandle pour l'endormir/le réveiller.

Discussions similaires

  1. gestion des évènements sur objets dynamiques
    Par boss_gama dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 11/03/2009, 11h50
  2. Problème sur Request.ServerVariables("QUERY_STRING"
    Par PrinceMaster77 dans le forum ASP
    Réponses: 3
    Dernier message: 25/03/2005, 11h47

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