Évènements dans un DataGridView - Problème

Résolu
desperados27 Messages postés 121 Date d'inscription samedi 4 novembre 2006 Statut Membre Dernière intervention 1 juillet 2015 - 31 mars 2012 à 01:11
Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024 - 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

7 réponses

Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024 656
1 avril 2012 à 10:46
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
3
Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024 656
31 mars 2012 à 07:42
Bonjour,

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

Whismeril
0
desperados27 Messages postés 121 Date d'inscription samedi 4 novembre 2006 Statut Membre Dernière intervention 1 juillet 2015
31 mars 2012 à 21:26
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é !
0
Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024 656
1 avril 2012 à 08:04
Ha j'avoue je n'ai pas essayé...


Whismeril
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
desperados27 Messages postés 121 Date d'inscription samedi 4 novembre 2006 Statut Membre Dernière intervention 1 juillet 2015
1 avril 2012 à 18:06
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
0
Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024 656
1 avril 2012 à 18:10
De rien, pense à valider ta réponse ;-).



Whismeril
0
Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024 656
1 avril 2012 à 18:11
Ha ben le temps que je réponde, c'était fait!!!

Whismeril
0
Rejoignez-nous