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

perceval_59 Messages postés 18 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 17 septembre 2020 - Modifié le 14 sept. 2020 à 15:11
Whismeril Messages postés 19073 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 23 juin 2024 - 17 sept. 2020 à 16:29
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

Whismeril Messages postés 19073 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 23 juin 2024 657
15 sept. 2020 à 18:59
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.

1
Whismeril Messages postés 19073 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 23 juin 2024 657
14 sept. 2020 à 22:00
Bonjour

Ça aurait bien de nous montrer le code que tu avais essayé dans le previewkeydown
0
vb95 Messages postés 3476 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 16 juin 2024 169
Modifié le 15 sept. 2020 à 01:24
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.


0
perceval_59 Messages postés 18 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 17 septembre 2020
15 sept. 2020 à 11:02
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


0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Whismeril Messages postés 19073 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 23 juin 2024 657
15 sept. 2020 à 11:14
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
0
perceval_59 Messages postés 18 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 17 septembre 2020
Modifié le 15 sept. 2020 à 12:35
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

0
perceval_59 Messages postés 18 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 17 septembre 2020
Modifié le 17 sept. 2020 à 09:59
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.


0
Whismeril Messages postés 19073 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 23 juin 2024 657
17 sept. 2020 à 16:29
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 ?
0
Rejoignez-nous