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

Dotnet Discussion :

Repetion d'une fonction lorsqu'un bouton est cliqué


Sujet :

Dotnet

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 85
    Points : 49
    Points
    49
    Par défaut Repetion d'une fonction lorsqu'un bouton est cliqué
    Salut!
    J'ai une action (déplacement d'un objet)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     scene_.camera.Turn("droite");
    qui se trouve dans un bouton d'un winform.
    Ma méthode Turn() sur camera me fait déplacer d'une certaine unité constante.
    Je voudrais pouvoir déplacer en continu mon objet en restant appuyé sur le bouton avec la sourie, et sans redevoir cliquer à chaque fois pour avancer d'un incrément.
    Comment est-ce que je pourrais mettre ça en place?
    merci!

  2. #2
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    Dans ce cas là, tu devrais plutot utiliser les événements MouseDown et MouseUp qui sont déclenchés lors de l'appui et du relachement d'un bouton de la souris.
    Par exemple, lors de l'appui, tu déclenches un timer qui toute les x millisecondes, appelle ta méthode qui fait tourner, et quand tu relaches le bouton, tu désactives le timer.
    Le timer permet de spécifier le pas d'incrémentation pour éviter que ton action soit effectuée trop rapidement.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 85
    Points : 49
    Points
    49
    Par défaut
    Merci pour ton aide SaumonAgile!

    Bon j'ai essayé avec MouseDown, donc ça me donne quelque chose comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     private void button1_MouseDown(object sender, MouseEventArgs e)
            {
     
    Temporisation=1000;
                while(!button1.MouseUp){
     
               while(Temporisation>0)Temporisation--;
               setTransformation("Translation", new Vector3(-1, 0, 0)); 
                Temporisation=1000;
     }
     
            }
    Le probleme c'est le button1.MouseUp qui est une méthode de MouseEventHandler, mais dont je voudrais récuper l'état en booleen par exemple...

    J'en viens aussi à me demander comment je pourrais implémenter ça pour ne pas devoir réécrire tout le code dans chacun des boutons qui ont besoin de ce genre de comportement... Des callbacks ou un truc comme ca?

  4. #4
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    Cette approche ne fonctionnera pas, car tu ne sors pas de la méthode button1_MouseDown. Donc tu ne détecteras jamais le relachement du bouton, ton programme va tourner en boucle.
    Tu dois utiliser un timer. Dans MouseDown, tu actives le timer. Dans l'événement Tick du timer tu exécutes ta méthode 'setTransformation'. Dans l'événement MouseUp, tu désactives le timer.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 85
    Points : 49
    Points
    49
    Par défaut
    Merci pour cette nouvelle réponse SaumonAgile.
    Je vais une fois de plus faire le boulet:
    donc j'ai défini un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            private System.Windows.Forms.Timer timer1 = null;
    dans les champs de ma classe Form
    puis j'ai ajouté ça dans la méthode InitializeComponent():

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
       this.timer1 = new System.Windows.Forms.Timer();
                this.timer1.Interval = 1000;
                this.timer1.Tick(setTrans1);
                this.timer1.Tick();
    Mais il compilateur me dit que this.timer1 n'est pas déclaré ou n'a jamais été assigné.... Bizarre non?

    Question subsidiaire: Est-ce que je peux mettre ma fonction avec ses arguements dans this.timer1.Tick(maFonction)?

  6. #6
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    Tu as utilisé le designer pour ajouter ton timer ou tu l'as ajouté à la main ? Je te conseille de ne pas toucher le code généré par le designer.
    Tick est un événement du timer, si tu double-cliques sur le timer dans le designer, il va te créer une méthode dans laquelle tu pourras appeler ta fonction.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 85
    Points : 49
    Points
    49
    Par défaut
    oui je l'ai mis à la main... ça doit etre ca alors...
    je vais donc le faire au designer
    merci!

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 85
    Points : 49
    Points
    49
    Par défaut
    Ca marche!! Merci beaucoup SaumonAgile!!

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

Discussions similaires

  1. Exécuter une fonction lorsqu'une CheckBox est cochée
    Par slhOverFlow dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 10/09/2013, 22h13
  2. Exécuter une fonction lorsque le Jdialog est chargé
    Par vbnet3 dans le forum NetBeans
    Réponses: 3
    Dernier message: 18/04/2011, 18h45
  3. Réponses: 3
    Dernier message: 27/03/2006, 10h15
  4. Réponses: 5
    Dernier message: 23/10/2005, 17h34
  5. [Reflection] Executer une fonction dont le nom est contenu dans un String
    Par christobal dans le forum API standards et tierces
    Réponses: 8
    Dernier message: 05/07/2004, 15h23

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