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 :

Mouse down probleme


Sujet :

Windows Forms

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2011
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Juillet 2011
    Messages : 61
    Points : 27
    Points
    27
    Par défaut Mouse down probleme
    Bonjour,


    J'ai un petit soucis avec la fonction Mousedown:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
            private void downB_MouseDown(object sender, MouseEventArgs e)
            {
     
                if ((listBox1.SelectedIndex < listBox1.Items.Count - 1))
                {
     
     
                    listBox1.SelectedIndex = listBox1.SelectedIndex + 1;
     
     
     
                }
            }

    Ce code est simple : on descend dans la listebox quand le bouton gauche de la souris est enfoncé sur le bouton.
    Or cela ne marche qu'une fois.

    Peut-être faudrai-t-il ajouter une boucle while ?

    Merci d'avance pour votre aide, je commence à me démoraliser là ^^"

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 312
    Points : 411
    Points
    411
    Par défaut
    Tout simplement tu n'as l’évènement que quand la souris est appuyée (donc une fois)

    Il te faut un timer pour simuler "l'appui en continu"

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juillet 2011
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Juillet 2011
    Messages : 61
    Points : 27
    Points
    27
    Par défaut
    merci pour ta réponse rapide.
    Je voulai justement éviter de faire un truc compliquer et maintenant il faut un timer ><

    J'ai ajouté un timer dans mon winform. Il faut que je fasse quoi maintenant s'il vous plait ?


    Je suis arrivé à ça :
    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
    25
    26
    27
     
                  private void downB_MouseDown(object sender, MouseEventArgs e)
            {
     
     
                if ((listBox1.SelectedIndex < listBox1.Items.Count - 1) & (MouseButtons.Left != 0))
                {
     
     
     
                    timer1.Enabled = true;
                    listBox1.SelectedIndex = listBox1.SelectedIndex + 1;
     
                    //listBox1.SelectedIndex = listBox1.SelectedIndex + 1;
     
     
     
                }
                    else
                        timer1.Enabled = false;
     
     
     
                //if (MouseButtons.Left != 0)
                 //   
     
            }
    Et pourtant, je dois toujours appuyer X fois pour descendre de X lignes

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 312
    Points : 411
    Points
    411
    Par défaut
    Salut,

    Tu devrais un peu lire sur les evenements et les 'handlers' associés, sinon tu pourra pas faire marcher un timer :

    Un exemple rapide:

    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
      private Timer _tmr;
            private void downB_MouseDown(object sender, MouseEventArgs e)
            {
                if (MouseButtons.Left != 0) // bouton gauche appuyé
                {
                    _tmr.Interval = 100;
                    _tmr.Start();
                    _tmr.Tick += new EventHandler(_tmr_Tick);
                }
            }
     
            void _tmr_Tick(object sender, EventArgs e)
            {
                //Code pour faire descendre ton contrôle
            }
     
            private void textBox1_MouseUp(object sender, MouseEventArgs e)
            {
                if (MouseButtons.Left != 0) // bouton gauche relaché
                {
                    _tmr.Stop();
                    _tmr.Tick -= new EventHandler(_tmr_Tick);
                }
            }

  5. #5
    Nouveau membre du Club
    Inscrit en
    Juillet 2011
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Juillet 2011
    Messages : 61
    Points : 27
    Points
    27
    Par défaut
    Je remercie beaucoup nah666 !
    Juste un truc: qu'est ce que ton textbox 1 ?
    Je n'ai pas de textbox.

    Plus qu'à faire marcher la compilation maintenant.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 312
    Points : 411
    Points
    411
    Par défaut
    Juste un truc: qu'est ce que ton textbox 1 ?
    Je n'ai pas de textbox.
    Une erreur issue du copier coller de mon projet de test.
    Evidemment tu le remplace par ce qu'il te faut ('downB_MouseUp').

  7. #7
    Nouveau membre du Club
    Inscrit en
    Juillet 2011
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Juillet 2011
    Messages : 61
    Points : 27
    Points
    27
    Par défaut
    Merci bien

    Donc du coup j'ai :
    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
    25
    26
     
            private Timer _tmr;
            private void downB_MouseDown(object sender, MouseEventArgs e)
            {
                if (MouseButtons.Left != 0) // bouton gauche appuyé
                {
                    _tmr.Interval = 100;
                    _tmr.Start();
                    _tmr.Tick += new EventHandler(_tmr_Tick);
                }
            }
     
            void _tmr_Tick(object sender, EventArgs e)
            {
                  if (listBox1.SelectedIndex < listBox1.Items.Count - 1)
                       listBox1.SelectedIndex = listBox1.SelectedIndex + 1;
            }
     
            private void downB_MouseUp(object sender, MouseEventArgs e)
            {
                if (MouseButtons.Left != 0) // bouton gauche relaché
                {
                    _tmr.Stop();
                    _tmr.Tick -= new EventHandler(_tmr_Tick);
                }
            }
    Est-ce normal que la condition "si le bouton gauche est enfoncé" soit égal à "si le bouton gauche est relaché" ?
    De plus j'ai :
    _tmr sera toujours null.
    _tmr.Stop(); n'est jamais detecté.

    Pour le reste, j'ai bien nommer le bouton descendre downB.


    EDIT MaJ:


    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
    25
    26
    27
    28
    29
    30
     private Timer _tmr;
                private void downB_MouseDown(object sender, MouseEventArgs e)
                {
                    if (MouseButtons.Left != 0) // bouton gauche appuyé
                    {
                        _tmr.Interval = 100;
                        _tmr.Start();
                        _tmr.Tick += new EventHandler(_tmr_Tick);
                    }
                }
     
                void _tmr_Tick(object sender, EventArgs e)
                {
                    if ((listBox1.SelectedIndex < listBox1.Items.Count - 1))
                    {
     
                        listBox1.SelectedIndex = listBox1.SelectedIndex + 1;
     
     
                    }
                }
     
                private void downB_MouseUp(object sender, MouseEventArgs e)
                {
                    if (MouseButtons.Left == 0) // bouton gauche relaché
                    {
                        _tmr.Stop();
                        _tmr.Tick -= new EventHandler(_tmr_Tick);
                    }
                }
    Toujours pas. Au moins je comprend ton code :p

    Re-EDIT: j'ai configurer mon bouton et du coup j'ai:

    La référence d'objet n'est pas définie à une instance d'un objet.
    sur
    _tmr.Interval = 100;

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 312
    Points : 411
    Points
    411
    Par défaut
    Oui pardon, pas beaucoup dormi :

    private Timer _tmr;
    Doit être evidement
    private Timer _tmr = new Timer();
    Est-ce normal que la condition "si le bouton gauche est enfoncé" soit égal à "si le bouton gauche est relaché" ?
    Non mais en fait ce test est pourri, il faut travailler sur l'argument recu.

    Voici qui devrait être mieux:

    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
            private Timer _tmr = new Timer();
            private void downB_MouseDown(object sender, MouseEventArgs e)
            {
                if (e.Button == System.Windows.Forms.MouseButtons.Left) // bouton gauche appuyé
                {
                    _tmr.Interval = 100;
                    _tmr.Start();
                    _tmr.Tick += new EventHandler(_tmr_Tick);
                }
            }
     
            void _tmr_Tick(object sender, EventArgs e)
            {
                //Code pour faire descendre ton contrôle
            }
     
            private void downB_MouseUp(object sender, MouseEventArgs e)
            {
                if (e.Button== System.Windows.Forms.MouseButtons.Left) // bouton gauche relaché
                {
                    _tmr.Stop();
                    _tmr.Tick -= _tmr_Tick;
                }
            }

  9. #9
    Nouveau membre du Club
    Inscrit en
    Juillet 2011
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Juillet 2011
    Messages : 61
    Points : 27
    Points
    27
    Par défaut
    En effet, ça fonctionne !!
    Merci beaucoup pour ta précieuse aide nah666 !

    J'ai juste changé la ligne du timer et ça fonctionne à merveille.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 312
    Points : 411
    Points
    411
    Par défaut
    Avec plaisir

    Pense au tag résolu merci.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/03/2013, 11h33
  2. Probleme de mouse event
    Par gatsu77 dans le forum EDT/SwingWorker
    Réponses: 0
    Dernier message: 23/05/2010, 09h19
  3. Probleme avec touches clavier et évènement On Key Down
    Par emmental dans le forum C++Builder
    Réponses: 3
    Dernier message: 28/11/2005, 13h17
  4. [Kylix] Probleme d'execution de programmes...
    Par yopziggy dans le forum EDI
    Réponses: 19
    Dernier message: 03/05/2002, 14h50
  5. [Kylix] Probleme de nombre flottant!!
    Par yopziggy dans le forum EDI
    Réponses: 5
    Dernier message: 02/05/2002, 10h13

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