Lamegrid : interdire de Déplacer la sélection après validation

Signaler
Messages postés
18
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
17 septembre 2020
-
Messages postés
14748
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 septembre 2020
-
Bonjour,
Je suis en train d'utiliser lamegrid dans une application, (après avoir fait des essais avec flexgrid et datagrid) .
Lamegrid me parait le plus adapté a mes besoins.
mais j'ai juste un problème.
Lors de la saisie dans une cellule et en appuyant sur enter (13) , automatiquement on passe a la cellule inferieure, et ca s'arrête en bas de tableau.
j'ai essayer de jouer avec le PreviewKeyDown en interceptant le e.code mais la encore même si j'arrive a forcer un sens de déplacement. a chaque fois j'ai l'exécution de ce (je veut bien aller ou tu veux mais m'en fout je passe quand même a la ligne suivante avant de faire quoique ce soit.)
j'ai aussi fait ca. mais ca ne me convient que moyen car graphiquement on ois un aller retour.. ca fait trés bidouille


 'Avant validation
    Dim OldRow As Integer
    Dim OldCol As Integer

  Private Sub Grid1_PreviewKeyDown(sender As Object, e As PreviewKeyDownEventArgs) Handles Grid1.PreviewKeyDown
        OldRow = Grid1.CurrentRow
        OldCol = Grid1.CurrentCol
    End Sub

    Private Sub Grid1_KeyUp(sender As Object, e As KeyEventArgs) Handles Grid1.KeyUp
        Grid1.CurrentCol = OldCol
        Grid1.CurrentRow = OldRow
    End Sub



si un de vous a une idée?

8 réponses

Messages postés
14748
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 septembre 2020
433
j'utilise shadows pour occulter mes events me gourreraije?)


Ca n’a strictement rien à voir.
  • Shadows sert lors d’un héritage. Il masque un attribut de la classe mère dans la classe fille


Sauf erreur de ma part tu n’as pas dérivé.

e.Handle = true sert à stopper un comportement par défaut.
Par exemple quand on appuie sur la touche tab, ça passe au contrôle suivant.
Tu pourrais vouloir obtenir un autre résultat à l’appui de cette touche.
Dans le KeyDown ou le previewKeyDown/Press de ton contrôle tu codes ce nouveau comportement, mais si tu ne lui dit pas « ne fais rien d’autre, j’ai géré le truc à ta place » et bien ça donnera quand même le focus au contrôle suivant.

je vais tout recommencer a zero et ton programme prendra 2 mois de plus,
Alors je vais être trash, si ton projet est bien codé c’est l’affaire de quelques jours.
Est s’il est mal codé, c’est probablement 99% de la faute à Microsoft.

.Net, C’est d’abord C#: un langage tout objet, adapté au pattern MVC (voire MVVM en WPF, mais c’est venu après).
Cependant Microsoft a craint de perdre la communauté de développeurs amateurs (au bon sens du terme), du coup, ils ont crée un « skin » de C# à la mode VB et y on inclus quelques tolérances.
D’une part ça n’a pas pris assez peu de codeur VB6 sont passé à .Net en 21 ans..... Et beaucoup de ceux qui y sont passé codent comme en VB6....

Si tu as écrit tes classes Modèle et tes classe Contrôleur à peu près bien adapter une vue en Winform, ASP, WPF, SilverLight, UIP et j’en passe est très rapide du moment où on connait un peut le « langage » de l’interface.

Pour te convaincre de ça, tu peux chercher dans mes sources une calculatrice, mon but était de développer un bon contrôleur, mais j’ai fait 3 interfaces toutes simples avec une techno chacune.

Messages postés
14748
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 septembre 2020
433
Bonjour

Ça aurait bien de nous montrer le code que tu avais essayé dans le previewkeydown
Messages postés
2235
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
15 septembre 2020
113
Bonjour
- LameGrid n'est plus mis à jour depuis 2008 ou 2009 ( presque 12 ans au moins : c'est une éternité en informatique ) et en plus la version VB Net de LameGrid a été développée avec le Net FrameWork 1.1 ( on en est au 4.8 actuellement )
- en VB Net tu as les ListViews ou les DataGridViews ( flexgrid c'était VB 6 je crois et datagrid de VB Net a été remplacé par DataGridview ) . Et les DataGridViews sont "bindables" et supportent les liaisons avec les bases de données .
Comme dit Whismeril ( que je salue ) sans code difficile de t'aider ( surtout que la Doc de LameGrid est assez succincte )

Trouvé sur un forum
LameGrid est distribué en Freeware. Vous pouvez donc l'utiliser à votre guise pour vos programmes, j'essaierai d'être réactif pour la correction des bugs éventuels.

Le contrôle LameGrid est fourni en l'état. L'utilisateur utilise LameGrid à ses risques et périls, sans garantie d'aucune sorte de la part de l'auteur. L'auteur n'est responsable d'aucun dommage subi par l'utilisateur pouvant résulter de l'utilisation ou de la distribution du contrôle LameGrid. De la même façon, l'auteur n'est en aucun cas responsable d'une quelconque perte de revenus ou de profit, ou de données, ou de tous dommages directs ou indirects, susceptibles de survenir du fait de l'utilisation du contrôle ou pour la raison que celui-ci serait inopérant, quand bien même l'auteur aurait été averti de la possibilité de tels dommages.LameGrid est gratuit pour une utilisation privée, commerciale ou éducative (incluant les organisations à but non lucratif). L'utilisation du contrôle LameGrid vaut acceptation par l'utilisateur des termes de la licence ci-dessus.


Messages postés
18
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
17 septembre 2020

Bonjour,
j'en suis bien conscient, et comme je l'ai dit j'ai essayé les autres types de grille et pour des raisons diverses ne me convenait pas.
j'ai choisi lamegrid car j'avais besoin de pouvoir affecter des "styles" et pas trouvé sur le datagrid view. le flexgrid effectivement il passait mal quand je testait sur d'autres machines donc j'ai viré. en fait le code sur le keydown finalement fonctionne... mais seulement sur mon clavier "émulé".. des que je passe sur un clavier reel.. ca ne vas plus.

voila le code pour info (le select case ne sert a rien mais je garde pour plus tard)
 Private Sub Grid1_PreviewKeyDown(sender As Object, e As PreviewKeyDownEventArgs) Handles Grid1.PreviewKeyDown
        'et on se les met de coté
        OldRow = Grid1.CurrentRow
        OldCol = Grid1.CurrentCol
    End Sub

    Private Sub Grid1_KeyUp(sender As Object, e As KeyEventArgs) Handles Grid1.KeyUp
        With Grid1
            'on remet la case a son ancienne position
            .CurrentCol = OldCol
            .CurrentRow = OldRow
            'si c'est un chiffre on formate l'affichage
            If IsNumeric(CellText(Grid1.CurrentRow, Grid1.CurrentCol)) Then
                CellText(Grid1.CurrentRow, Grid1.CurrentCol) = FormatNumber(CellText(Grid1.CurrentRow, Grid1.CurrentCol), My.Settings.PrécisionVirgule)
            End If
            Select Case e.KeyCode
                'Case 8 'backspace 
                '.Text = Strings.Left(.Text, (Len(.Text) - 1))
                'Case 46 'suppr 
                '.Text = ""

                Case 13 'Entrée 
                    'on teste les extrémitées, si on peu encore avancer.... ben la on avance
                    'par contre si on est a un bout du tableau alors on change de ligne de colonne et on repasse en fin ou bout de tableau
                    If My.Settings.SensDeplacement = 1 Then
                        'On est en mode vers la droite donc on avance de colonne en colonne, quand on arrive au bout on descend d'une ligne et on revient en colonne 1
                        'si on est pas sur la derniere colonne on avance d'un
                        If .CurrentCol <> ColsCount - 1 Then
                            .CurrentCol = .CurrentCol + 1
                        Else
                            If .CurrentRow <> RowsCount - 1 Then 'on est pas en bas
                                .CurrentRow = .CurrentRow + 1 'on descend
                            Else 'on est en bas on vas a la cellule 1,1
                                .CurrentRow = 1
                            End If
                            .CurrentCol = 1 'et On se met a la premiere colonne
                        End If

                    ElseIf My.Settings.SensDeplacement = 2 Then
                        'On est en mode vers le bas donc on avance de ligne en ligne, quand on arrive au bout on decale d'une colonne et on revient en ligne 1
                        'si on est pas sur la derniere colonne on avance d'un
                        If .CurrentRow <> RowsCount - 1 Then
                            .CurrentRow = .CurrentRow + 1
                        Else
                            If .CurrentCol <> ColsCount - 1 Then 'on est pas en bas
                                .CurrentCol = .CurrentCol + 1 'on descend
                            Else 'on est en bas on vas a la cellule 1,1
                                .CurrentCol = 1
                            End If
                            .CurrentRow = 1 'et On se met a la premiere colonne
                        End If

                    ElseIf My.Settings.SensDeplacement = 3 Then
                        'BlabBlaBla si t'a pas compris tu comprendra jamais
                        If .CurrentCol <> 1 Then
                            .CurrentCol = .CurrentCol - 1
                        Else
                            If .CurrentRow <> 1 Then
                                .CurrentRow = .CurrentRow - 1
                            Else
                                .CurrentRow = RowsCount
                            End If
                            .CurrentCol = ColsCount - 1
                        End If

                    ElseIf My.Settings.SensDeplacement = 4 Then 'pas obligé mais plus prore
                        If .CurrentRow <> 1 Then
                            .CurrentRow = .CurrentRow - 1
                        Else
                            If .CurrentCol <> ColsCount - 1 Then
                                .CurrentCol = .CurrentCol + 1
                            Else
                                .CurrentCol = 1
                            End If
                            .CurrentRow = .RowsCount - 1
                        End If
                    End If

            End Select
        End With
    End Sub


Messages postés
14748
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 septembre 2020
433
Pour ton problème.

Je ne voies nulle part
e.Handle = true

Soit t’as pas essayé, soit c’est pas possible avec ce contrôle personnalisé que je ne connais pas.
Si tu es dans le premier cas, quand tu veux te substituer à un comportement d’un contrôle, il faut dire au contrôle de ne pas faire son comportement par défaut.

j'ai choisi lamegrid car j'avais besoin de pouvoir affecter des "styles" et pas trouvé sur le datagrid view

Passe en WPF, tu pourras styler tout ce que tu veux comme tu veux
Messages postés
18
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
17 septembre 2020

j'utilise shadows pour occulter mes events me gourreraije?)

passer en WPF j'y ai pensé mais si je dit a mon patron. "tu sait le truc qui te convient , ben je vais tout recommencer a zero et ton programme prendra 2 mois de plus, ah oui me faudrai une petite formation en plus". je crains que la réponse ne soit pas celle espérée

Messages postés
18
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
17 septembre 2020

Bonjour, effectivement j'arrive du monde de VB6 et le .net est apparu pendant que j'étais sur un projet. j'ai découvert la POO a ce moment mais a l'époque il y avais peu de monde pour m'aider et il est clair que j'ai fait un mix. pas de formation, du coup j'avoue ne pas toujours comprendre pourquoi et comment coder.. et me contente de "ca marche je garde comme ca".
effectivement suis amateur, mais on ne peu pas être pro partout.
je vais jeter un oeil a tes sources.

Pour ce qui est de e.Handle = true je suppose que ca ne fonctionne que sur les "KeyEventArgs"
j'ai testé un peu partout mais ca marche pas. (j'ai conscience que cela vient probablement du lamegrid, mais je viens encore de faire des tests de comparaison entre lamegrid et datagridview et rien que le temps de création d'un tableau me conforte dans mon choix de garder lamegrid.


Messages postés
14748
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 septembre 2020
433
Bonsoir
Pour ce qui est de e.Handle = true je suppose que ca ne fonctionne que sur les "KeyEventArgs

Oui

Qu’appelles tu le temps de création d’un tableau, le temps de code pu d’exécution ?