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

desperados27 121 Messages postés samedi 4 novembre 2006Date d'inscription 1 juillet 2015 Dernière intervention - 31 mars 2012 à 01:11 - Dernière réponse : Whismeril 11534 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 22 mai 2018 Dernière intervention
- 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

Whismeril 11534 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 22 mai 2018 Dernière intervention - 1 avril 2012 à 10:46
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Whismeril
Whismeril 11534 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 22 mai 2018 Dernière intervention - 31 mars 2012 à 07:42
0
Utile
Bonjour,

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

Whismeril
Commenter la réponse de Whismeril
desperados27 121 Messages postés samedi 4 novembre 2006Date d'inscription 1 juillet 2015 Dernière intervention - 31 mars 2012 à 21:26
0
Utile
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
Whismeril 11534 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 22 mai 2018 Dernière intervention - 1 avril 2012 à 08:04
0
Utile
Ha j'avoue je n'ai pas essayé...


Whismeril
Commenter la réponse de Whismeril
desperados27 121 Messages postés samedi 4 novembre 2006Date d'inscription 1 juillet 2015 Dernière intervention - 1 avril 2012 à 18:06
0
Utile
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
Whismeril 11534 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 22 mai 2018 Dernière intervention - 1 avril 2012 à 18:10
0
Utile
De rien, pense à valider ta réponse ;-).



Whismeril
Commenter la réponse de Whismeril
Whismeril 11534 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 22 mai 2018 Dernière intervention - 1 avril 2012 à 18:11
0
Utile
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.