Click sur un header de MsHflexGrid

[Résolu]
Signaler
Messages postés
13
Date d'inscription
vendredi 22 avril 2005
Statut
Membre
Dernière intervention
21 décembre 2010
-
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
-
Bonjour à tous ,

J'ai un petit souci avec les Clicks sur un header de MsHflexGrid, je n'arive pa à déterminé si un click à été effectué sur header de MsHflexGrid (pour lancer en suite un tri sur la clonne de cette grille).

Si vous avez l'explication merci pour votre réponse

9 réponses

Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
Plutôt que d'utiliser ColHeader, essaie avec FormatString

ex:
MSHFlexGrid1.FormatString = "< Client1       |^Client 2       |> Client3       "

Le caractère "pipe" ( | ) indique l'emplacement des colonnes
Les caractères suivants servent à la justification du texte
<   alignement à gauche
>   à droite
^   centré

Les espaces après le mot ajusteront la largeur de cette colonne

Renfield,
c'est effectivement plus clair à lire. Encore faut-il savoir que ces constantes existent et aussi se débarrasser de ses vieilles habitudes (ça c'est le plus difficile...)

MPi
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
Dans MouseUp (ou MouseDown), vérifie si la valeur de Y est plus grande que 0 et plus petite que la hauteur de la première ligne

MPi
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
MouseCol et MouseRow te renvoient la colonne et la ligne de la cellule survollée...

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Messages postés
13
Date d'inscription
vendredi 22 avril 2005
Statut
Membre
Dernière intervention
21 décembre 2010

Merci pour la réponse,
celle ci m'a fait progressé mais maintenant lorsque je click pour lancer le tri par

If x > 9269 And x < 10140 And y > 14 And y < 211 Then
    MSHFlexGrid1.Col = 6
    MSHFlexGrid1.Sort = 1
End If

J'ai l'erreur suivante : La méthode Sort de l'objet IMSHFlexGrid a échoué !

si vous pouviez éclairer ma lanterne ?

Merci
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
pas terribles, ces valeurs en dur....
renommes pas d'entete, ne change pas de police, etc....

sinon il te faudra recalibrer.

je suppose que tu voulais dire

MSHFlexGrid1.Sort = flexSortGenericAscending

... sinon, j'ignore pourquoi ca coince.

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
Voici un exemple simple.
Le If permet de trier Ascendant et/ou Descendant

Private Sub Grid1_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
    Static Flag As Integer
   
    If Button = 1 And y <= 250 Then
        If Flag <> 1 Then
            Flag = 1
        Else
            Flag = 2
        End If  
       
        Grid1.Sort = Flag
       
    End If
End Sub

Plutôt que de mettre 250 comme valeur, tu pourrais utiliser Grid1.RowHeightMin en autant que tu aies déclaré une valeur dans les propriétés de la grille ou dans le code.

MPi
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
faché avec les constantes et les enums ?

c'est pourtant plus simple, pour comprendre, certaines fois...

J'ai repris ton code, en utilisant les constantes, dont tu utilisais les valeurs en dur :

Private Sub Grid1_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
Static Flag As MSHierarchicalFlexGridLib.SortSettings
   
   If Button = vbLeftButton And y <= 250 Then
       If Flag <> flexSortGenericAscending Then
           Flag = flexSortGenericAscending
       Else
           Flag = flexSortGenericDescending
       End If
       
       Grid1.Sort = Flag
   End If
End Sub , ----
By Renfield

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Messages postés
13
Date d'inscription
vendredi 22 avril 2005
Statut
Membre
Dernière intervention
21 décembre 2010

Merci pour votre réponse, qui permet d'amélorer la lecture de mon  code.

Le problème est toujours le même et ceci depuis que j'ai mis en place les ColHeaderCaption pour mettre des titres à mes colonnes.

    MSHFlexGrid1.ColHeaderCaption(0, 1) = "Client"
    MSHFlexGrid1.ColWidth(1) = 3000
    MSHFlexGrid1.ColAlignment(1) = 6

sans les titres (ColHeaderCaption ) le tri fonctionne !
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
F2 (explorateur d'objet)
avec un peu de chance et d'intuition, on retombe sur ces pieds....

d'accord avec le fait que cela ne change rien a la donne, mais de savoir que le tri croissant vaut 1 ne m'apporte que peu de chose... ^^

Renfield
Admin CodeS-SourceS- MVP Visual Basic