J'ai un problème avec un DataGrid (MSDATGRD.OCX) assez bizarre. Je veux pouvoir me déplacer soit par survol de la souris, soit avec les flèches adéquates.

Si je me déplace uniquement avec les flèches, aucun problème.
Si je me déplace uniquement par survol de la souris, aucun problème non plus.

Par contre si je me déplace par survol, puis décide d'utiliser les flèches, plus rien ne se passe. En fait il passe à l'enregistrement suivant, mais rien ne se passe à l'écran et si j'appuie une 2ème fois sur même flèche, il agit comme s'il était sur l'enregistrement initial (ce qu'il est d'ailleurs). En clair, à l'écran il reste sur le 1er enregistrement, mais au debug.print on voit qu'il affiche le contenu du suivant mais reste sur le 1er !

PS: Après visualisation, je m'aperçois que la tabulation de mon code a sauté au copier-coller. Existe t-il un moyen d'insérer du code en gardant celle-ci ?

Voici mon code:
Code Visual Basic :
Code :
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
39
40
41
42
Private Sub DGGrid_KeyDown(KeyCode As Integer, Shift As Integer)   
   Debug.Print "AVANT DGGrid_KeyDown: " & DataSource.Fields(DataField).Value & " - " & DGGrid.Bookmark
   Select Case KeyCode
      Case vbKeyHome
         DGGrid.Bookmark = DGGrid.RowBookmark(0)
      Case vbKeyEnd
         DGGrid.Bookmark = DGGrid.RowBookmark(MyRecordset.Recordcountt - 1)
      Case vbKeyDown
         DGGrid.Bookmark = DGGrid.RowBookmark(DGGrid.Row + 1)
      Case vbKeyUp
         DGGrid.Bookmark = DGGrid.RowBookmark(DGGrid.Row - 1)
      Case vbKeyPageDown
         DGGrid.Bookmark = DGGrid.RowBookmark(DGGrid.VisibleRows)
      Case vbKeyPageUp
         DGGrid.Bookmark = DGGrid.RowBookmark(-DGGrid.VisibleRows)
   End Select
   Debug.Print "APRES DGGrid_KeyDown: " & DataSource.Fields(DataField).Value & " - " & DGGrid.Bookmark
End Sub
 
Private Sub DGGrid_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
   Debug.Print "AVANT DGGrid_RowColChange: " & Myrecordset.Fields(DataField).Value & " - " & DGGrid.Bookmark
   If DGGrid.RowContaining(Y) >= 0 Then DGGrid.Bookmark = DGGrid.RowBookmark(DGGrid.RowContaining(Y))
   Debug.Print "APRES DGGrid_RowColChange: " & Myrecordset.Fields(DataField).Value & " - " & DGGrid.Bookmark
End Sub
 
Private sub Form_Load
   Set DGGrid.DataSource = MyRecordset
   DGGrid.DataField = MyField
   DGGrid.MarqueeStyle = dbgHighlightRow + dbgHighlightCell
End Sub
 
Private Sub DGGrid_RowColChange(LastRow As Variant, ByVal LastCol As Integer)
   Call SQL_RemoveAllBookmarks(DGGrid.SelBookmarks)
   DGGrid.SelBookmarks.Add MyRecordset.Bookmark
End Sub
 
Public Function SQL_RemoveAllBookmarks(Bookmarks As SelBookmarks)
   Dim X As Integer
   For X = 0 To Bookmarks.Count - 1
      Bookmarks.Remove (0)
   Next
End Function
MyRecordset est un Recordset limité à 100 enregistrements pour les essais. Le Datagrid ne contient qu'un seul champ texte tout simple. Pour l'instant je n'ai testé QUE la clé vbKeyDown, j'ai donc commenté les autres que je verrais après.

J'ai essayé dans un projet vierge avec uniquement ce code et j'ai la même chose. j'ai aussi essayé en supprimant la fonction DGGrid_RowColChange() et à part la non visualisation de la ligne courante, même topo. Si quelqu'un voit ce que se passe.

Merci d'avance
Calade