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 :

[C#] Capter la tabulation lors de la frappe dans un DataGrid [FAQ]


Sujet :

Windows Forms

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2004
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 43
    Points : 38
    Points
    38
    Par défaut [C#] Capter la tabulation lors de la frappe dans un DataGrid
    Bonjour,

    Comme le dit le titre, comment puis-je détecter que l'on tape sur la touche de tabulation lorsque je rempli une case d'un dataGrid (n'importe laquelle) ?

    Merci pour votre aide

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    En interceptant la touche sur laquelle l'utilisateur à appuyer :

  3. #3
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 80
    Points : 60
    Points
    60
    Par défaut
    Dans une datagrid si tu appuyes sur la touche TAB, par défaut il est déjà traité et il te permet de changer de celllule . . .

  4. #4
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Citation Envoyé par loverdose
    Dans une datagrid si tu appuyes sur la touche TAB, par défaut il est déjà traité et il te permet de changer de celllule . . .
    Oui, mais s'il veux faire un traitement lors du passage d'une case à une autre, il doit quand même intercepter la touche pressée.

  5. #5
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 80
    Points : 60
    Points
    60
    Par défaut
    Et bien s'il veut savoir si y a eu passage d"uine case a une autre, il devrait utiliser l'évenement CurrentCellChanged alors dans ce cas . . .

  6. #6
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Oui, mais c'est evenement lui permet-il de savoir la touche pressée ?

    Je n'utilise pas le datarid dans mes applications donc j'avoue ne pas connaitre très bien ce composant

  7. #7
    Nouveau membre du Club
    Inscrit en
    Juillet 2004
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 43
    Points : 38
    Points
    38
    Par défaut
    En fait je voudrais passer le focus à une textBox si je presse la touche TAB.
    Donc dans l'événement KeyPress je dois détecter si c'est la touche TAB qui à été pressée. Il doit y avoir moyen de faire ca selon le code ASCII, mais comment?

  8. #8
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if ( e.KeyCode == Keys.Tab )
    {
            // C'est la touche tab qui a été préssé ;)
    }

  9. #9
    Nouveau membre du Club
    Inscrit en
    Juillet 2004
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 43
    Points : 38
    Points
    38
    Par défaut
    ok super merci !

  10. #10
    Nouveau membre du Club
    Inscrit en
    Juillet 2004
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 43
    Points : 38
    Points
    38
    Par défaut
    heu non en fait pas super

    En fait ma variable e est de type System.Windows.Forms.KeyPressEventArgs et ce dernier n'a pas de propriété keycode mais keychar.

    Que dois-je faire?

  11. #11
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if ( e.KeyChar == (char)9 ) 
    { 
            // C'est la touche tab qui a été préssé ;) 
    }

  12. #12
    Nouveau membre du Club
    Inscrit en
    Juillet 2004
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 43
    Points : 38
    Points
    38
    Par défaut
    Ca ne marche pas mais en fait ca vient du fait que l'événement KeyPress ne se déclenche pas pour le dataGrid.

    Voilà la déclaration de l'événement KeyPress :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.dataGrid1.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.dataGrid1_KeyPress);
    Et voici l'événement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    private void dataGrid1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
    {
    	MessageBox.Show("KeyPress");
    	this.dataGrid1KeyPress(e);
    }
    Lorsque j'appuie sur une touche dans une des cellules du dataGrid le message "KeyPress" ne s'affiche pas

    Please Help Me ?

  13. #13
    Membre du Club

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 82
    Points : 59
    Points
    59
    Par défaut
    Est ce que tu passes dans ta fonction? (mode debug avec un point d'arret?)
    Moi j'avais un probleme similaire avec une autre action... et j'ai passé la methode de private à public et ca a marché...
    Je sais pas si ca peut resoudre ton PB...

  14. #14
    Nouveau membre du Club
    Inscrit en
    Juillet 2004
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 43
    Points : 38
    Points
    38
    Par défaut
    J'ai essayé avec public mais ca marche toujours pas.

    Je n'arrive pas à utiliser le mode debug avec SharpDevelop. Je met un point d'arrêt mais qd j'exécute ca ne s'arrête pas

  15. #15
    Nouveau membre du Club
    Inscrit en
    Juillet 2004
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 43
    Points : 38
    Points
    38
    Par défaut
    Ma question se trouve 3 case plus haut

  16. #16
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 80
    Points : 60
    Points
    60
    Par défaut
    En fait il faudrait utiliser plutot l'évenement KeyDown qui est plus intéréssant (je trouve) que KeyPress.

  17. #17
    Nouveau membre du Club
    Inscrit en
    Juillet 2004
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 43
    Points : 38
    Points
    38
    Par défaut
    Même avec KeyDown ca ne marche pas :'(

    Peut-être Faut-il lier l'événement avec les cellules du DataGrid ?

    A l'aide

  18. #18
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2003
    Messages : 105
    Points : 134
    Points
    134
    Par défaut
    Hello,
    tu as tout à fait raison, la touche TAB ne déclenche pas les événements habituels KeyDown et compagnie, elle est traîtée directement comme d'autres touches système. Pour remédier à ce problème, il te faut procéder de la manière suivante :

    Hériter ta Form de IMessageFilter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    class MaForm : Form, IMessageFilter {
    Puis implémenter la méthode PreFilterMessage comme ceci :

    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 bool PreFilterMessage(ref Message m)
    {
    	if (m.Msg == 0x100) // KeyDown
    	{
    		Keys key = (Keys)(int)m.WParam & Keys.KeyCode;
     
    		if(key == Keys.Tab)
    		{
    			// Tab a été pressé, appelle la méthode que tu veux
    			return true;
    		}
    	}
    	return false;
    }
    Il faut ensuite ajouter ce 'filtre de messages' avec l'objet Application :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    MaForm form = new MaForm();
    Application.AddMessageFilter(form);
    Voilà, bonne chance !

  19. #19
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Voila qui mérite sa place dans la FAQ


    Merci

  20. #20
    Nouveau membre du Club
    Inscrit en
    Juillet 2004
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 43
    Points : 38
    Points
    38
    Par défaut
    Bon j'ai essayé mais ca marche pas (dans mon cas).
    En fait ca doit marcher mais je l'ai surement mal utilisé. Je ne sais pas quand est-ce que je dois appeler cette méthode

    Mais aussi j'ai oublié de préciser une chose ! Même quand j'appuie sur une lettre ou un chiffre rien ne se passe

    C'est assez étrange, que dois-je faire

Discussions similaires

  1. Réponses: 5
    Dernier message: 14/04/2008, 22h20
  2. Valeur d'un champ instantanée lors de la frappe
    Par Prosis dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 28/07/2007, 03h28
  3. [FPDF] capter l'erreur lors de l'output
    Par ozzmax dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 21/06/2007, 21h08
  4. Capture du corps du mail en temps réel; lors de la frappe
    Par cavo789 dans le forum VBA Outlook
    Réponses: 3
    Dernier message: 01/06/2007, 05h38

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