IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Capturer la touche TAB dans une CalendarColumn au sein d'une DGV


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 9
    Par défaut Capturer la touche TAB dans une CalendarColumn au sein d'une DGV
    Bonjour.
    J'ai une datagridview (dgv) qui contient des colonnes de type CalendarColumn (le code qu'on trouve sur msdn ici)
    Je souhaite récupérer l'evenement de KeyDown Tab (KeyCode = 9 donc), sachant que ma datagridview est éditable OnEnter (dès qu'on clique sur un cellule). Ceci n'étant pas possible directement par Dgv.KeyDown en mode édition, il faut passer par des moyens détournés.
    J'ai exploré plusieurs pistes mais aucune ne marche pas pour le moment.

    Celle ci m'avait l'air fonctionnelle notamment.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        Private Sub DataGridView2_EditingControlShowing(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles DataGridView2.EditingControlShowing
            Dim textBoxCell As DatePicker = TryCast(e.Control, DatePicker)
            If textBoxCell IsNot Nothing Then
                AddHandler textBoxCell.KeyDown, AddressOf textBoxCell_KeyPress
            End If
        End Sub
        Private Sub textBoxCell_KeyPress(ByVal sender As Object, ByVal e As KeyEventArgs)
            MessageBox.Show(e.KeyCode)
        End Sub
    Premier problème, je n'arrive pas à connaitre le type de la cellule. pour une cellule normale, on aurait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim textBoxCell As TextBox = TryCast(e.Control, TextBox)
    J'ai essayé DatePicker (la classe introduite par msdn) et d'autres, mais l'evenement keypress n'est jamais activé.
    Ensuite, il semblerait que la touche TAB ne soit jamais "capturée" par KeyDown KeyPress ou KeyUp. Y'a t'il un moyen détourné de le faire?
    Merci

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2011
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 453
    Par défaut
    Bonjour,

    J'ai essayé hier justement de capter quelques évènements claviers sur un dataGridView, mais je me suis heurter à pas mal de soucis.

    sur le cette page du MSDN on peut lire ça :
    En mode Édition, toutefois, le contrôle d'édition hébergé reçoit l'entrée au clavier et les événements de clavier ne se produisent pas pour le contrôle DataGridView.
    Donc j'ai un peu lâché l'affaire (pour le moment), je m'y remettrais plus tard, en tout cas si tu trrouves une solution d'ici là, je suis très fortement intéressé .

    Sinon j'ai trouvé ça, où il est dit qu'il faut surcharger la classe DataGridView, mais ça me paraît un peu fastidieux pour intercepter quelques touches...

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 9
    Par défaut
    La méthode que j'ai cité dans le premier post fonctionne très bien pour une celulle normale ( = le format de la cellule est une textbox)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        Private Sub DataGridView2_EditingControlShowing(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles DataGridView2.EditingControlShowing
            Dim textBoxCell As TextBox = TryCast(e.Control, TextBox)
            If textBoxCell IsNot Nothing Then
                AddHandler textBoxCell.KeyDown, AddressOf textBoxCell_KeyDown
            End If
        End Sub
        Private Sub textBoxCell_KeyDown(ByVal sender As Object, ByVal e As KeyEventArgs)
            MessageBox.Show(e.KeyCode)
        End Sub

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2011
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 453
    Par défaut
    Je ne sais pas ce que tu as mis, c'est un renderer perso ? Parce que moi comme type de cellule pour un DGV je n'ai que ça:



    Sinon je suis désolé je n'étais pas encore tout à fait réveiller quand j'ai posté tout à l'heure et tu fais exactement ce que dit le MSDN en fait :

    Pour gérer les événements du contrôle d'édition, joignez vos gestionnaires au contrôle d'édition dans un gestionnaire d'événements EditingControlShowing.
    Je vais tester tout ça et je te redis

  5. #5
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2011
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 453
    Par défaut
    Je viens de tester et effectivement ça fonctionne très bien.

    Je pense que tu n'as effectivement qu'à déterminer le type de ta cellule pour faire ton AddressOf

    Par contre moi j'ai un autre souci, c'est que je veux déterminer si c'est la touche Insert qui est appuyé pour ajouter une ligne à mon DGV, mais du coup quand j'appuis sur cette touche, il me fait l'action pour chaque cellule de ma ligne, il m'ajoute donc 16 lignes d'un coup

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 9
    Par défaut
    ça c'est plutôt bizarre par contre Oo. T'es censé modifier seulement une celulle à la fois, pas 16
    Perso je galère car la touche TAB ne déclenche pas les evenements keypress/keydown/keyup....

Discussions similaires

  1. Supprimer la touche Tab dans une feuille
    Par auguste19 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 17/01/2012, 00h59
  2. Réponses: 3
    Dernier message: 25/09/2007, 07h47
  3. récupérer la touche tab dans un Tedit
    Par sher56 dans le forum C++Builder
    Réponses: 2
    Dernier message: 24/05/2006, 13h26
  4. mettre la touche tab dans presse papier
    Par lassmust dans le forum Langage
    Réponses: 1
    Dernier message: 28/04/2006, 16h40
  5. Comment se déplacer avec la touche tab dans un dbGrid ?
    Par bertrand_declerck dans le forum Composants VCL
    Réponses: 2
    Dernier message: 21/09/2005, 16h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo