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
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
En interceptant la touche sur laquelle l'utilisateur à appuyer :
Thomas LEBRUN: MCAD.NET, MCTS (Win et Web), MCPD(Win et Web) & Microsoft MVP Client Application Development
WPF par la pratique, mon livre sur WPF ! (également disponible ici ou là)
A la découverte de .NET
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.Envoyé par loverdose
Thomas LEBRUN: MCAD.NET, MCTS (Win et Web), MCPD(Win et Web) & Microsoft MVP Client Application Development
WPF par la pratique, mon livre sur WPF ! (également disponible ici ou là)
A la découverte de .NET
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 . . .
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
Thomas LEBRUN: MCAD.NET, MCTS (Win et Web), MCPD(Win et Web) & Microsoft MVP Client Application Development
WPF par la pratique, mon livre sur WPF ! (également disponible ici ou là)
A la découverte de .NET
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?
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é ;) }
Thomas LEBRUN: MCAD.NET, MCTS (Win et Web), MCPD(Win et Web) & Microsoft MVP Client Application Development
WPF par la pratique, mon livre sur WPF ! (également disponible ici ou là)
A la découverte de .NET
ok super merci !
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?
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é ;) }
Thomas LEBRUN: MCAD.NET, MCTS (Win et Web), MCPD(Win et Web) & Microsoft MVP Client Application Development
WPF par la pratique, mon livre sur WPF ! (également disponible ici ou là)
A la découverte de .NET
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 :
Et voici l'événement :
Code : Sélectionner tout - Visualiser dans une fenêtre à part this.dataGrid1.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.dataGrid1_KeyPress);
Lorsque j'appuie sur une touche dans une des cellules du dataGrid le message "KeyPress" ne s'affiche pas
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); }
Please Help Me ?
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...
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
Ma question se trouve 3 case plus haut
En fait il faudrait utiliser plutot l'évenement KeyDown qui est plus intéréssant (je trouve) que KeyPress.
Même avec KeyDown ca ne marche pas :'(
Peut-être Faut-il lier l'événement avec les cellules du DataGrid ?
A l'aide
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 :
Puis implémenter la méthode PreFilterMessage comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part class MaForm : Form, IMessageFilter {
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
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; }
Voilà, bonne chance !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 MaForm form = new MaForm(); Application.AddMessageFilter(form);
Voila qui mérite sa place dans la FAQ
Merci
Thomas LEBRUN: MCAD.NET, MCTS (Win et Web), MCPD(Win et Web) & Microsoft MVP Client Application Development
WPF par la pratique, mon livre sur WPF ! (également disponible ici ou là)
A la découverte de .NET
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
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager