Évènements dans un DataGridView - Problème [Résolu]

Messages postés
121
Date d'inscription
samedi 4 novembre 2006
Dernière intervention
1 juillet 2015
- 31 mars 2012 à 01:11 - Dernière réponse :
Messages postés
12267
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
18 novembre 2018
- 1 avril 2012 à 18:11
Bonjour à tous,

Je suis actuellement confronté à un petit problème (en fait mon appli ne servira pas si je n'arrive pas à le faire !)...

-J'utilise un contrôle DataGridView
-Les colonnes sont du type DataGridViewTextBoxColumn
-J'assigne un MaxInputLength par colonne

On va prendre par exemple MaxInputLength = 2
Donc je tape '1' puis '2' puis '3'. Le chiffre 3 n'apparait pas ce qui est logique. (Tout va bien jusqu'ici)

Par contre maintenant j'aimerais détecter automatiquement la taille actuelle de la cellule pendant son édition (afin de valider directement) !
Quand je tape '1' puis '2' il doit valider puis passer directement à la cellule suivante !!



En fait je ne suis pas sûr que cela soit possible. J'avoue avoir eu du mal à rechercher les informations qu'il me faut...
Merci si quelqu'un a une idée !

Sébastien
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
Messages postés
12267
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
18 novembre 2018
- 1 avril 2012 à 10:46
3
Merci
Rebonjour,

tu peux dériver un datagridview et réécrire le processcomandkey, comme je l'ai fait .

J'ai fait un test on passe dedans en mode édition.


Whismeril

Merci Whismeril 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de Whismeril
Messages postés
12267
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
18 novembre 2018
- 31 mars 2012 à 07:42
0
Merci
Bonjour,

ça doit être possible avec les événements KeyDown, KeyPress ou KeyUp

Whismeril
Commenter la réponse de Whismeril
Messages postés
121
Date d'inscription
samedi 4 novembre 2006
Dernière intervention
1 juillet 2015
- 31 mars 2012 à 21:26
0
Merci
Salut Whismeril,

J'y avait déjà pensé, mais malheuresement il n'existe aucun évènement KeyPress ou autre pour la cellule en mode édition...
L'évènement KeyPress du DataGridView par exemple n'est pas déclenché quand on est en mode édition...

D'où la difficulté !
Commenter la réponse de desperados27
Messages postés
12267
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
18 novembre 2018
- 1 avril 2012 à 08:04
0
Merci
Ha j'avoue je n'ai pas essayé...


Whismeril
Commenter la réponse de Whismeril
Messages postés
121
Date d'inscription
samedi 4 novembre 2006
Dernière intervention
1 juillet 2015
- 1 avril 2012 à 18:06
0
Merci
Merci Whismeril, il fallait y penser dis moi !!
J'ai réussi à faire ce que je voulais faire !


// Voici la dérivée
class Derived_DGV : DataGridView
    {
        public Derived_DGV()
        {
        }

        // Voici une propriété qui correspondra à la longueur actuelle de la cellule.
        protected int CurrentCellLength { get; set; }
        

        protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {
            try
            {
                // Si la cellule actuelle n'est pas en mode édition, on ne fait rien
                if (!base.CurrentCell.IsInEditMode)
                {
                    CurrentCellLength = 0;
                    return base.ProcessCmdKey(ref msg, keyData);
                }
                else
                {
                    switch (keyData)
                    {
                        // Pour le moment je catch que les chiffres du pavé numériques
                        case Keys.NumPad0:
                        case Keys.NumPad1:
                        case Keys.NumPad2:
                        case Keys.NumPad3:
                        case Keys.NumPad4:
                        case Keys.NumPad5:
                        case Keys.NumPad6:
                        case Keys.NumPad7:
                        case Keys.NumPad8:
                        case Keys.NumPad9:
                            { 
                                // Incrément par touche appuyée
                                CurrentCellLength += 1;
                                // Je cast en 'DataGridViewTextBoxColumn' pour obtenir le 'MaxInputLength' de la colonne.
                                DataGridViewTextBoxColumn tempDGV_TBC = (DataGridViewTextBoxColumn)base.Columns[base.CurrentCell.ColumnIndex];
                                if (CurrentCellLength == tempDGV_TBC.MaxInputLength)
                                {
                                    // J'arrête l'édition
                                    base.EndEdit();
                                    // Je sélectionne la cellule sur la droite
                                    base.Rows[base.CurrentCell.RowIndex].Cells[base.CurrentCell.ColumnIndex + 1].Selected = true;
                                    // On met la cellule suivante en mode édition
                                    base.BeginEdit(true);
                                    return base.ProcessCmdKey(ref msg, keyData);
                                }
                                else
                                {
                                    return base.ProcessCmdKey(ref msg, keyData);
                                }
                            }
                        default:
                            return base.ProcessCmdKey(ref msg, keyData);
                    }
                }
            }
            catch
            {
                return base.ProcessCmdKey(ref msg, keyData);
            }
        }
    }


Ce code va passer directement dans la cellule suivante.
Ce code n'est pas terminé mais c'est un minimum, grâce à toi (encore une fois) je vais pouvoir continuer (par exemple passer à une nouvelle ligne quand on passe la dernière colonne ;)

Merci beaucoup
Sébastien
Commenter la réponse de desperados27
Messages postés
12267
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
18 novembre 2018
- 1 avril 2012 à 18:10
0
Merci
De rien, pense à valider ta réponse ;-).



Whismeril
Commenter la réponse de Whismeril
Messages postés
12267
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
18 novembre 2018
- 1 avril 2012 à 18:11
0
Merci
Ha ben le temps que je réponde, c'était fait!!!

Whismeril
Commenter la réponse de Whismeril

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.