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 :

Mousehover et Datagridview Le Retour


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Par défaut Mousehover et Datagridview Le Retour
    ReBonjour,

    Un petit rappel du sujet, je souhaite que lorsque la souris passe au dessus d'une colonne de mon DataGridView, celle-ci soit Selected (highlighted - surligné en bleu).

    Voici le code obtenu et corrigé qui marche presque:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dim pt As New Point
            Dim hti As DataGridView.HitTestInfo
            Try
                pt = Me.DGV_echantillon.PointToClient(MousePosition)
            Catch ex As Exception
                Return
            End Try
            hti = Me.DGV_echantillon.HitTest(pt.X, pt.Y)
     
            If hti.Type = DataGridViewHitTestType.Cell Then
     
                Me.DGV_echantillon.Columns(hti.ColumnIndex).Selected = True
     
            End If
    Je dis qu'il marche presque car il sélectionne la colonne mais lorsque la souris reste au dessus du DGV, et que le change de colonne, il ne change rien. L'évènement se déclenche bien et les valeurs (comme hti.ColumnIndex) sont bonne.

    Pour que ca fonctionne il faut que la souris "sorte" du DGV et reviens, à ce moment il veut bien.

    J'ai bien essayer ç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
      Dim pt As New Point
            Dim hti As DataGridView.HitTestInfo
            Try
                pt = Me.DGV_echantillon.PointToClient(MousePosition)
            Catch ex As Exception
                Return
            End Try
            hti = Me.DGV_echantillon.HitTest(pt.X, pt.Y)
     
            If hti.Type = DataGridViewHitTestType.Cell Then
                If Not hti.ColumnIndex = test_column Then
                    Me.DGV_echantillon.ClearSelection()
     
                    If Not test_column = -1 Then
                        Me.DGV_echantillon.Columns(test_column).Selected = False
                    End If
                    Me.DGV_echantillon.Columns(hti.ColumnIndex).Selected = True
                    test_column = hti.ColumnIndex
                End If
            End If
    Car je pense que le problème viens du DGV.Columns(index).selected = true.

    Mais là je bloque un peu. Si quelqu'un a une idée.

    Merci d'avance.

  2. #2
    Membre émérite Avatar de methylene
    Profil pro
    Inscrit en
    Février 2010
    Messages
    659
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2010
    Messages : 659
    Par défaut
    Es-tu sur que l'argument Mouse_Hover est le mieux adapté ?

    J'aurais plus vu un Mouse_move perso.

    Autre petite question, tu souhaites, si je comprends bien, que quand ta souris arrive sur une colonne la colonne en quetsion soit sélectionnée, sans click de la souris.

    De plus si tu ne bouge plus ta souris, et que ta colonne est sélectionnée, et que tu viens à changer de colonne via ton clavier (les flèches droite ou gauche en l'occurrence), la colonne où la souris est présente se déselectionne, et la colonne ayant le "focus" se sélectionne, c'est bien cela ?

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 700
    Par défaut
    Citation Envoyé par methylene Voir le message
    J'aurais plus vu un MouseMove perso.
    moi aussi ou "CellMouseMove".
    Mais niveau performance!!!....
    Un "CellMouseEnter" est mieux adapté.
    Par contre, sous vb 2008, j'ai dû adapter le code pour avoir le résultat voulu.

  4. #4
    Membre émérite Avatar de methylene
    Profil pro
    Inscrit en
    Février 2010
    Messages
    659
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2010
    Messages : 659
    Par défaut
    Pour ajouter que chez moi avec un simple datagridview, ton code ne fonctionne pas, dans mouse_hover comme dans mouse_move.

  5. #5
    Membre émérite Avatar de methylene
    Profil pro
    Inscrit en
    Février 2010
    Messages
    659
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2010
    Messages : 659
    Par défaut
    Bonjour,

    J'ai testé ton code sur un projet que j'ai créé, dis moi si c'est ce que tu recherche.


    Dans le Load :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            DataGridView1.SelectionMode = DataGridViewSelectionMode.FullColumnSelect
            DataGridView1.MultiSelect = False
    Ensuite utilise l'évènement CellMouseMove et mets y ton code :

    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
        Private Sub DataGridView1_CellMouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles DataGridView1.CellMouseMove
     
            Dim pt As New Point
            Dim hti As DataGridView.HitTestInfo
     
            pt = Me.DataGridView1.PointToClient(MousePosition)
            hti = Me.DataGridView1.HitTest(pt.X, pt.Y)
     
            If hti.Type = DataGridViewHitTestType.Cell Then
     
                Me.DataGridView1.Columns(hti.ColumnIndex).Selected = True
     
            End If
     
        End Sub
    Voilà si j'ai bien compris ce que tu cherchais, cela fonctionne niquel. Le problème venait juste de l'évènement.

    Bonne continuation.

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 700
    Par défaut
    Bonjour,
    après initialisation du DGV, dans mon test, pour un DGV neuf, j'ai dû ajouter les lignes for ..... next suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
            For indexCol As Integer = 0 To DGV_echantillon.Columns.Count - 1
                DGV_echantillon.Columns(indexCol).SortMode = DataGridViewColumnSortMode.NotSortable
                'DGV_echantillon.Columns(indexCol).HeaderCell.SortGlyphDirection = SortOrder.None
            Next
            '*** "Impossible de définir le SelectionMode du contrôle DataGridView à ColumnHeaderSelect 
            '     tant qu'il dispose d'une colonne avec SortMode définie à DataGridViewColumnSortMode.Automatic."
            '     D'où la propriété ci dessus pour modifier le mode de tri des colonnes.
            DGV_echantillon.SelectionMode = DataGridViewSelectionMode.ColumnHeaderSelect
            ''*** A tester le code qui suit. Il y a quelques différences au plan de sélection d'une cellule unique,
            ''    et au plan du déplacement avec les flèches. Voir ce qui convient le mieux.
            'DGV_echantillon.SelectionMode = DataGridViewSelectionMode.FullColumnSelect
            'DGV_echantillon.MultiSelect = False
    Puis utiliser "CellMouseEnter" :
    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
        Private Sub DGV_echantillon_CellMouseEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DGV_echantillon.CellMouseEnter
     
            DGV_echantillon.ClearSelection()
     
            Dim pt As New Point
     
            Dim hti As DataGridView.HitTestInfo
            Try
                pt = Me.DGV_echantillon.PointToClient(MousePosition)
            Catch ex As Exception
                Return
            End Try
            hti = Me.DGV_echantillon.HitTest(pt.X, pt.Y)
     
            If hti.Type = DataGridViewHitTestType.Cell Then
                Me.DGV_echantillon.Columns(hti.ColumnIndex).Selected = True
            End If
     
        End Sub
    chez moi la différence d'utilisation proceseur entre "CellMouseMove" et "CellMouseEnter" passe de 20 à 2%

  7. #7
    Membre Expert Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Par défaut
    Citation Envoyé par methylene Voir le message
    Bonjour,

    J'ai testé ton code sur un projet que j'ai créé, dis moi si c'est ce que tu recherche.


    Dans le Load :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            DataGridView1.SelectionMode = DataGridViewSelectionMode.FullColumnSelect
            DataGridView1.MultiSelect = False
    Ensuite utilise l'évènement CellMouseMove et mets y ton code :

    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
        Private Sub DataGridView1_CellMouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles DataGridView1.CellMouseMove
     
            Dim pt As New Point
            Dim hti As DataGridView.HitTestInfo
     
            pt = Me.DataGridView1.PointToClient(MousePosition)
            hti = Me.DataGridView1.HitTest(pt.X, pt.Y)
     
            If hti.Type = DataGridViewHitTestType.Cell Then
     
                Me.DataGridView1.Columns(hti.ColumnIndex).Selected = True
     
            End If
     
        End Sub
    Voilà si j'ai bien compris ce que tu cherchais, cela fonctionne niquel. Le problème venait juste de l'évènement.

    Bonne continuation.
    Et bien c'est exactement ça !

    Le problème avec l'évènement Mouse_Enter est le même qu'avec l'évènement Mouse_hover....

    Si j'amène la souris sur le DGV, il sélectionne bien une colonne, mais si après, je déplace la souris entre les colonnes rien ne se passe. Il faut ressortir la souris du DGV et revenir.

    Alors que avec Mouse_Move, c'est interactif !

    Merci à tous les deux pour vos contributions en tout cas !

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

Discussions similaires

  1. Retour à la ligne dans un datagridview
    Par aimar022 dans le forum VB.NET
    Réponses: 5
    Dernier message: 30/08/2010, 16h39
  2. Mousehover et DataGridView
    Par mactwist69 dans le forum VB.NET
    Réponses: 2
    Dernier message: 26/07/2010, 09h07
  3. DataGridView avec colonne CheckBox 2 (le retour xD)
    Par DarkSeiryu dans le forum Windows Forms
    Réponses: 8
    Dernier message: 19/02/2009, 15h04
  4. DataGridView: prendre en charge le retour chariot
    Par wodel dans le forum Windows Forms
    Réponses: 3
    Dernier message: 06/06/2007, 18h17
  5. [VB.net 2005] datagridview + retour à la ligne
    Par ricil78 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 13/04/2007, 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