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 :

Priorité événements Controls


Sujet :

Windows Forms

  1. #1
    Modérateur
    Avatar de toopac
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 940
    Points : 2 913
    Points
    2 913
    Par défaut Priorité événements Controls
    Bonjour,

    Dans une application, un utilisateur saisi des informations par le biais de divers controls (combobox, datetimepicker, ...), et envoie le tout en cliquant sur un bouton.

    Jusque là tout va bien.

    J'aimerais maintenant pour faciliter la saisie, envoyer les informations quand l'utilisateur appuie sur la touche "Entrer".

    Du coup je fais le code suivant :
    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
     
    public Form1()
    {
        ...
        foreach (Control ctrl in panelOption.Controls)
        {
            ctrl.KeyUp += new KeyEventHandler(ctrlOption_KeyUp);
        }
    }
    private void ctrlOption_KeyUp(object sender, KeyEventArgs e)
    {
        if (e.KeyCode.Equals(Keys.Enter))
        {
             buttonSend_Click(null, null);
        }
    }
     
     
    private void buttonSend_Click(object sender, EventArgs e)
    {
        ...
    }
    Mon problème concerne le DateTimePicker :
    Si je change au clavier le jour dans le DateTimePicker et que j'appuie juste après sur entrer, la date que j'obtiens n'est pas celle que je viens d'entrer, mais la précédente.
    (J'ai testé sur un comboBox avec DropDownStyle = DropDown, et j'ai le même problème après une saisie au clavier.)

    Comment puis-je faire pour "valider" la valeur saisie au clavier avant de déclencher l'événement keyUp?

  2. #2
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2007
    Messages
    693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 693
    Points : 1 187
    Points
    1 187
    Par défaut
    Bonjour,

    Petite question, est-il possible (dans le fonctionnement de ton application) de mettre le bouton Valider en tant qu'acceptbutton de ta form ?
    Cela te simplifierais pas mal de chose.

    Bon courage

  3. #3
    Modérateur
    Avatar de toopac
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 940
    Points : 2 913
    Points
    2 913
    Par défaut
    Je ne connaissais pas la propriété acceptButton!

    Effectivement ça simplifierait bien les choses, mais ça aurait été trop beau.

    En tout cas je retiens cette propriété!

  4. #4
    Modérateur
    Avatar de toopac
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 940
    Points : 2 913
    Points
    2 913
    Par défaut
    pour préciser un peu, la valeur n'est pas validée dans le DateTimePicker si j'entre une date à 1 chiffre.
    Quand j'entre le 2ème ça fonctionne.

    Faut je trouve comment valider la valeur manuellement.
    QQn à une idée?

  5. #5
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    rien compris mais je tente quand meme

    tab ?

    sendkeys ?

    les deux ?
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Modérateur
    Avatar de toopac
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 940
    Points : 2 913
    Points
    2 913
    Par défaut
    c'est vrai que c'est pas très clair, mais ça me semble pas très facile à expliquer.

    Voici ce que je fais :
    Je clique sur mon DateTimePicker (qui est à la date d'aujourd'hui : "mardi 25 août 2009"), le jour (25) est surligné. [image 01]
    Je tape "1" au clavier, puis "enter". [image 02]
    A ce moment là, l'événement keyUp est lancé, mais quand je récupère la valeur du DateTimePicker (monDateTimePicker.Value), j'obtiens la date d'aujourd'hui (25/08), alors que je voudrais avoir le 1er août.

    En revanche si je tape une date à 2 chiffres valide (01 ou 23), j'obtiens bien la date saisie (1 ou 23 août), et le jour de la semaine se met à jour

    Si la date n'est pas valide (99 aout), j'ai le même "problème"

    Donc pour moi, la propriété Value du DateTimePicker est mise à jour une fois que 2 chiffres ont étés entrés, et que ces 2 chiffres correspondent à un jour du mois.

    Donc je voulais savoir si il était possible récupérer la date saisie ou de lancer la validation du DateTimePicker, alors qu'un seul chiffre a été entré.
    (quand j'appuie sur "entrer" récupérer la valeur saisie sur le DateTimePicker, dans mon exemple le 1er aout)
    ou lui faire comprendre que les touches "1"+"entrer" = "0"+1"+"entrer" (pareil pour 2, 3, ..., 9)

    Voilà, en espérant avoir été plus clair, ou au moins plus précis, je vous remercie pour vos réponses
    Images attachées Images attachées   

  7. #7
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    tu peux tenter un bricolage : sur enter, donner le focus à quelqu'un d'autre, regarder le value et lui redonner le focus si tu as besoin
    en perte de focus, la date se complète je pense
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  8. #8
    Modérateur
    Avatar de toopac
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 940
    Points : 2 913
    Points
    2 913
    Par défaut
    j'y avais pensé, mais ça ne fonctionne pas,
    monControl.Focus() me renvoie false.
    En revanche si je crée un nouvelle form, que je l'affiche et la ferme, ça fonctionne.
    Par contre, on la voit s'ouvrir et se fermer...

  9. #9
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    wow c'est du bricolage avancé la form
    et pour continuer dans le sale, je te propose de faire .opacity = 0 avant d'ouvrir ton form, comme ca tu le verras pas apparaitre
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  10. #10
    Modérateur
    Avatar de toopac
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 940
    Points : 2 913
    Points
    2 913
    Par défaut
    Voilà ça fonctionne, merci pour tes réponses.

    Pas contre, comme tu l'a dit, c'est du vrai bricolage, et ça me plait pas trop comme solution définitive.

    Si quelqu'un à une solution propre à me proposer je suis preneur.

    Je vais continuer mes recherches de mon côté...

  11. #11
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2007
    Messages
    693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 693
    Points : 1 187
    Points
    1 187
    Par défaut
    Je ne comprends pas bien ton problème, j'ai une form, un datetimepicker et un bouton. Mon bouton est défini en tant qu'acceptbutton de ma form.

    Sur le click de mon bouton, je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    private void button1_Click(object sender, EventArgs e)
            {
                button1.Focus();
                MessageBox.Show(dateTimePicker1.Value.ToString());
            }
    Mon datetimepicker a la valeur 01/08/2009, je me mets dessus et je change le jour en mettant 8 avec mon clavier numérique.

    Mon messagebox affiche 08/08/2009.

    Il est vrai que si on ne fait pas la ligne
    Cela ne fonctionne pas mais là ça marche. Si ça ne marche pas chez toi, fais un test sur une form simple comme celle de mon exemple, si c'est ok je pense que tous les événements onkeyup peuvent interférer.

    Bon courage

  12. #12
    Modérateur
    Avatar de toopac
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 940
    Points : 2 913
    Points
    2 913
    Par défaut
    En fait c'est moi qui ai fait de la m****.
    J'essayais de donner le focus à un control qui n'était pas visible....
    c'est pour ça que ça ne fonctionnait pas...

    Bref j'ai finalement fait myButton.Focus() (bouton toujours visible), et tout fonctionne.

    Merci pour vos réponses, et désolé de vous avoir dérangé pour pas grand chose finalement...

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

Discussions similaires

  1. [AC-2010] gestion d'évènements controles
    Par killowatt dans le forum Access
    Réponses: 6
    Dernier message: 08/06/2015, 14h56
  2. [C#] User Control qui génère un évènement
    Par Amnesiak dans le forum Windows Forms
    Réponses: 3
    Dernier message: 09/10/2006, 14h44
  3. évènement move d'un control
    Par jogu dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 14/09/2006, 18h14
  4. [VB]Définir un événement à un controle créé dynamiquement
    Par Ooly2001 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 19/01/2006, 11h15

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