Gestion de l'évenement KeyPress lors de l'édition d'une cellule du DataGridView
Posted on 2010-01-15
Récemment, un développeur m’a demandé comment pouvoir capturer les événements KeyPress ou KeyDown sur la cellule, en modification, d’un DataGridView. L’objectif étant de filtrer les encodages de l’utilisateur lorsqu’il modifie le contenu de la cellule… par exemple, refuser les chiffres et n’accepter que des caractères alphanumériques (pour un identificateur).
Après quelques recherche, voici la solution :
- Soit créer sa propre colonne et y gérer les événements souhaités. Ce qui peut être lourd pour un cas aussi simple.
- Soit intercepter l'événement EditingControlShowing pour ajouter la gestion de l'événement KeyPress sur le composant en édition.
La solution la plus simple est donc :
[sourcecode language="csharp" gutter="false"]
private void dataGridView1_EditingControlShowing(object dgvSender, DataGridViewEditionControlShowingEventArgs eventArgs)
{
eventArgs.Control.KeyPress += delegate(object sender, KeyPressEventArgs e)
{
if (e.KeyChar >= '0' && e.KeyChar <= '9')
e.Handled = true;
}
}
[/sourcecode]