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 :

[2.0] Comment Savoir quel bouton d'un NumericUpDown a été enfoncé


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 120
    Points : 48
    Points
    48
    Par défaut [2.0] Comment Savoir quel bouton d'un NumericUpDown a été enfoncé
    Je souhaite écrire une surcharge du NumericUpDown, avec des fonctions spécifiques et j'ai besoin de détecter quel est le bouton qui a été enfoncé (UP ou DOWN)

    alors j'ai écrit :
    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
     
     
        public class cntLocableNillableUpDown : NumericUpDown 
    	{
     
            public cntLocableNillableUpDown():base()
            {
                base.ValueChanged += new EventHandler(cntLocableNillableUpDown_ValueChanged);
                base.MouseDown += new MouseEventHandler(cntLocableNillableUpDown_MouseDown);
                base.KeyDown += new KeyEventHandler(cntLocableNillableUpDown_KeyDown);
            }
     
            private void cntLocableNillableUpDown_MouseDown(object sender, MouseEventArgs e)
            {
            }
    Mais dans l'événement _MouseDown je ne trouve pas au niveau du MouseEventArgs ou dans "this" ou "this.base" de propriété me permettant de savoir comment on est rentré dans le _MouseDown (j'ai besoin de réagir différemment en fonction de...).
    Y'a pas un HitTestInfo ? ou un isDownPressed, isButtonUp, etc...

    comment vous feriez vous ?

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Tu peux faire un truc comme ç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
        public enum UpDownButton
        {
            None,
            Up,
            Down
        }
     
        public class MyUpDown : NumericUpDown
        {
            public UpDownButton PressedButton { get; private set; }
     
            public override void DownButton()
            {
                this.PressedButton = UpDownButton.Down;
                base.DownButton();
                this.PressedButton = UpDownButton.None;
            }
     
            public override void UpButton()
            {
                this.PressedButton = UpDownButton.Up;
                base.UpButton();
                this.PressedButton = UpDownButton.None;
            }
        }
    Et quand tu gères l'évènement, tu regardes la valeur de PressedButton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            private void myUpDown1_ValueChanged(object sender, EventArgs e)
            {
                label1.Text = myUpDown1.PressedButton.ToString();
            }
    Par contre ça marchera sans doute pas dans l'évènement MouseDown, vu que les méthodes UpButton et DownButton n'auront pas encore été appelées (il me semble)

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 120
    Points : 48
    Points
    48
    Par défaut
    merci beaucoup.

    mais justement je cherche à obtenir une réaction à l'appui par l'utilisateur sur les bourons UP et DOWN et non pas générer ces actions par du code.

    en gros aux valeurs limites MAX et MIN je veux un fonctionnement différent.
    Donc je ne peux faire cela que sur un evt du controle.

    Mais il faudrait que je puisse détecter si c'est un UP un DOWN ou un clic dans la partie TextBox du Controle...

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par juniorAl Voir le message
    mais justement je cherche à obtenir une réaction à l'appui par l'utilisateur sur les bourons UP et DOWN et non pas générer ces actions par du code.
    Les méthodes UpButton et DownButton ne servent pas à "générer ces actions par le code" (quoi que ça peut se faire aussi) ... Elles sont appelées par le NumericUpDown quand l'utilisateur clique sur les boutons ou appuie sur les touches haut ou bas. On peut redéfinir leur implémentation pour changer le comportement des boutons. Là j'ai juste renseigné la propriété PressedButton et appelé l'implémentation de base...

    Citation Envoyé par juniorAl Voir le message
    en gros aux valeurs limites MAX et MIN je veux un fonctionnement différent.
    Donc je ne peux faire cela que sur un evt du controle.

    Mais il faudrait que je puisse détecter si c'est un UP un DOWN ou un clic dans la partie TextBox du Controle...
    Les méthodes UpButton et DownButton seront appelées aussi aux valeurs limites, donc pas de problème... Si tu veux tu peux toujours ajouter un évènement ButtonPressed qui se déclenche même si la valeur ne change pas. Il suffit que tu le déclenches à partir de UpButton et DownButton :

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    public class UpDownButtonEventArgs : EventArgs
    {
        public UpDownButtonEventArgs(UpDownButton button)
        {
            this.Button = button;
        }
     
        public UpDownButton Button { get; private set; }
    }
     
        public class MyUpDown : NumericUpDown
        {
            public UpDownButton PressedButton { get; private set; }
     
            public event EventHandler<UpDownButtonEventArgs> ButtonPressing;
            public event EventHandler<UpDownButtonEventArgs> ButtonPressed;
     
            protected void OnButtonPressed(UpDownButton button)
            {
                if (ButtonPressed != null)
                    ButtonPressed(this, new UpDownButtonEventArgs(button));
            }
     
            protected void OnButtonPressing(UpDownButton button)
            {
                if (ButtonPressing!= null)
                    ButtonPressing(this, new UpDownButtonEventArgs(button));
            }
     
            public override void DownButton()
            {
                this.PressedButton = UpDownButton.Down;
                OnButtonPressing(UpDownButton.Down);
                base.DownButton();
                OnButtonPressed(UpDownButton.Down);
                this.PressedButton = UpDownButton.None;
            }
     
            public override void UpButton()
            {
                this.PressedButton = UpDownButton.Up;
                OnButtonPressing(UpDownButton.Up);
                base.UpButton();
                OnButtonPressed(UpDownButton.Up);
                this.PressedButton = UpDownButton.None;
            }
        }
    Enfin bon, c'est juste une façon de faire, il y en a sûrement d'autres...

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 120
    Points : 48
    Points
    48
    Par défaut
    n'ayant pas trouvé avant toi, j'ai fait en moin propre avec le e.Location du _MouseDown et le this.Size.

    on peut constaer que la largeur des boutons Up et Down est toujours égale à17 pour la taille de police que j'utilise (même si on agrandi le this.Width...

    Pour ce qui est de la hauteur des butons elle est toujours de Height/2.

    C'est vrai que c'est moins propre car lié à la Police.
    Quand j'aurai le temps je me repencherai sur ta solution...

    encore merci.

  6. #6
    Rédacteur
    Avatar de Greybird
    Inscrit en
    Juin 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 673
    Points : 1 271
    Points
    1 271
    Par défaut
    Citation Envoyé par juniorAl Voir le message
    n'ayant pas trouvé avant toi, j'ai fait en moin propre avec le e.Location du _MouseDown et le this.Size.

    on peut constaer que la largeur des boutons Up et Down est toujours égale à17 pour la taille de police que j'utilise (même si on agrandi le this.Width...

    Pour ce qui est de la hauteur des butons elle est toujours de Height/2.

    C'est vrai que c'est moins propre car lié à la Police.
    Quand j'aurai le temps je me repencherai sur ta solution...

    encore merci.
    J'aimerais bien savoir comment tu gères avec le MouseDown et le Size le fait que l'utilisateur utilise les flèches haut et bas du clavier pour modifier la valeur...
    Problème récurent d'oublier que les contrôles ont un comportement avec le clavier, et que la souci n'est pas le centre du monde.

    Et puis je me demande bien quel est le comportement en grandes polices. Je suis curieux de la taille que peuvent avoir les boutons sur Vista, XP, et 2000. Sont-ce les mêmes ?
    Le temps de répondre à toutes ces questions, et la solution fournie, qui est nickel, serait déjà en place...

    A revoir d'urgence à mon avis, pas quand tu auras le temps.

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par juniorAl Voir le message
    Quand j'aurai le temps je me repencherai sur ta solution...
    Ben y a même pas besoin de se pencher, c'est quasiment du copier/coller

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

Discussions similaires

  1. [FORMULAIRE] Comment savoir quel bouton radio est checked pour test ?
    Par Sekigawa dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 23/02/2009, 11h16
  2. [D7] comment savoir quel bouton appelle ma form ?
    Par dleu dans le forum Langage
    Réponses: 8
    Dernier message: 21/03/2006, 08h20
  3. Réponses: 7
    Dernier message: 09/02/2006, 11h43
  4. [C#] Savoir quel bouton a déclenché l'évènement
    Par Amerok dans le forum ASP.NET
    Réponses: 4
    Dernier message: 01/12/2005, 15h19
  5. comment savoir quel menu est en surbrillance?
    Par LRobi dans le forum MFC
    Réponses: 2
    Dernier message: 27/01/2005, 09h04

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