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 :

[vb.net 2005] Problème classe herite datagridview


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2004
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 16
    Points : 11
    Points
    11
    Par défaut [vb.net 2005] Problème classe herite datagridview
    Bonjour,

    dans un datagridview , je souhaite que la touche 'enter' fonctionne comme la fleche de doite ou la touche 'tab', c'est a dire qu'elle passe à la celulle suivante et non pas à la ligne suivante.

    Pour cela j'ai creer dans mon projet la classe suivante herite de datagrid view :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    Public Class CustomDataGridView
     
        Inherits DataGridView
     
        <System.Security.Permissions.UIPermission(System.Security.Permissions.SecurityAction.LinkDemand, _
        Window:=System.Security.Permissions.UIPermissionWindow.AllWindows)> _
        Protected Overrides Function ProcessDialogKey( _
              ByVal keyData As Keys) As Boolean
     
            ' Extract the key code from the key value. 
            Dim key As Keys = keyData And Keys.KeyCode
     
            ' Handle the ENTER key as if it were a RIGHT ARROW key. 
            If key = Keys.Enter Then
                Return Me.ProcessRightKey(keyData)
            End If
     
            Return MyBase.ProcessDialogKey(keyData)
     
        End Function
     
        <System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.LinkDemand, _
        Flags:=System.Security.Permissions.SecurityPermissionFlag.UnmanagedCode)> _
        Protected Overrides Function ProcessDataGridViewKey( _
            ByVal e As System.Windows.Forms.KeyEventArgs) As Boolean
     
            ' Handle the ENTER key as if it were a RIGHT ARROW key. 
            If e.KeyCode = Keys.Enter Then
                Return Me.ProcessRightKey(e.KeyData)
            End If
     
            Return MyBase.ProcessDataGridViewKey(e)
     
        End Function
     
     
    End Class
    Pourtant la touche 'enter' passe toujours à la ligne suivante. J'ai l'impression que cette classe n'est pas gérée.
    Merci d'avance pour votre aide

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Points : 2 201
    Points
    2 201
    Par défaut
    Tu as essayer de catcher l'enter sur l'evement KeyDown?

    De plus je n'essayerai pas de simuler la touche droite (en effet lorsque tu es en mode édition la touche droite ne fait pas passer à la cellule suivante...).

    J'utiliserai plutot le Tab, voir même directement donner le focus la ou ça doit aller.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2004
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 16
    Points : 11
    Points
    11
    Par défaut
    C'est ce que je compte faire mais je voulais quand meme savoir pourquoi il ne tient pas compte de cette classe herité de datagridview qui normalement fonctionne.

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    674
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 674
    Points : 1 176
    Points
    1 176
    Par défaut
    Bonjour,
    Il faudrait des messagebox pour voir ce que ton code retourne.
    Pour tester ta solution j'ai trouvé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    Protected Overrides Function ProcessCmdKey(ByRef msg As Message, keyData As Keys) As Boolean
    	If keyData = Keys.Enter Then
    		' Lorsque l'on valide le contenu d'une cellule,
    		' on va passer à la cellule suivante, ou la ligne suivante si c'est la dernière cellule,
    		' voire créer une nouvelle ligne si nous nous trouvons sur la dernière ligne
    		Dim row As Integer = Me.CurrentCell.RowIndex, column As Integer = Me.CurrentCell.ColumnIndex
     
    		column += 1
    		If column = Me.ColumnCount Then
    			row += 1
    			column = 0
    		End If
    		If row = Me.Rows.Count Then
    			Me.Rows.Add()
    		End If
     
    		Me.CurrentCell = Me.Rows(row).Cells(column)
     
    		' Si on n'édite pas la cellule, on indique que l'on a déjà géré la touche en retournant true
    		' sinon on se retrouve une ligne trop bas car la gestion par defaut de la touche enter fait descendre d'une ligne
    		If Not Me.IsCurrentCellInEditMode Then
    			Return True
    		End If
    	End If
     
    	Return MyBase.ProcessCmdKey(msg, keyData)
    End Function
    C'est issu de la discution suivante :
    http://www.developpez.net/forums/d25...-lappui-enter/
    Mais le DataGridview est tellement "blindé" que je suis presque sûr que ça va clocher ailleurs.
    Je me range donc du coté de sinople, autant se servir du clavier (tab fait le même effet).

  5. #5
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Points : 2 201
    Points
    2 201
    Par défaut
    T'as regardé en pas à pas s'il rentre dans ton code?

    Si j'ai dit d'utiliser l'évenement Keydown, c'est qu'un pression sur la touche "ENTER" (parmi d'autre...) n'est pas attrapable avec tous les évenements clavier. Du coup pour vérifier c'est pas le top!

    Après fait un test avec un Console.Writeline("Toto") ou un msgBox("Toto") au début pour vérifier qu'il rentre bien dans la fonction à chaque touche.

    Je n'ai pas regardé l'aspect héritage, juste l'aspect clavier ENTER.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2004
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 16
    Points : 11
    Points
    11
    Par défaut
    C'est difficile la gestion des touches dans la datagrid.

    j'ai une solution temporaire c'est a dire qu'elle fonctionne si on tape sur enter et que la cellule n'est pas en mode edition.

    j'enregistre la colonne et la ligne de la cellulle courante dans la sub 'PreviewKeyDown' si on tape sur enter.
    Ensuite dans la sub 'KeyPress', je positionne le focus sur la cellule suivante en gérant bien sur la derniere colonne et les colonnes invisibles.
    Ca fonctionne bien seulement dans lon logiciel je veux taper une chaine dans une colonne puis taper sur 'enter' et là ca fonctionne pas car la celulle est en mode edition.

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    674
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 674
    Points : 1 176
    Points
    1 176
    Par défaut
    Bonjour,
    j'ai testé votre code de départ avec un form neuf.
    Il ne pose aucun problème chez moi avec une création d'une nouvelle instance de "CustomDataGridView" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
     
            Dim dgvCostum As New CustomDataGridView
            dgvCostum.Location = New Point(30, 30)
            dgvCostum.AutoSize = True
            Me.Controls.Add(dgvCostum)
            '*** Ci dessous sont mes données pour remplir le DGV pour tester. A remplacer par les votres.
            ConstructionTable()
            VueDansDGV(dgvCostum)
     
        End Sub

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2004
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 16
    Points : 11
    Points
    11
    Par défaut
    C'est ce que je craignais, il faut creer le datagrid manuellement.
    Je vais essayer cela.
    en tout cas merci beaucoup pour votre aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VB.NET 2005] problème avec RemoveAt
    Par Antoine1183 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 30/07/2007, 22h56
  2. [VB.NET 2005] Problème sur une galerie photo ..
    Par jobunn dans le forum VB.NET
    Réponses: 5
    Dernier message: 29/05/2007, 15h09
  3. [vb.net 2005] Problème de lecture d'un fichier (en ressources)
    Par micfont999 dans le forum Windows Forms
    Réponses: 7
    Dernier message: 10/01/2007, 21h29
  4. [VB.Net 2005] - Problème Paint UserControl
    Par Flibustier dans le forum Windows Forms
    Réponses: 1
    Dernier message: 24/10/2006, 11h47
  5. [VB.NET 2005]Problème de déclenchement d'évènements
    Par LTourist dans le forum Windows Forms
    Réponses: 4
    Dernier message: 04/07/2006, 16h39

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