LPARAMETERS nKeyCode LOCAL lnMaxRow, llRetVal WITH This *** If escape or enter pressed, the list is not dropped down anymore IF nKeyCode = 27 OR nKeyCode = 13 .lDroppedDown = .F. ENDIF *** If the list is not dropped down, traverse the grid with cursor keys IF !.lDroppedDown WITH .Parent.Parent *** Calculate the maximum number of rows in the grid lnMaxRows = INT( ( .Height - .HeaderHeight - ; IIF( INLIST( .ScrollBars, 1, 3 ),; SYSMETRIC( 8 ), 0 ) ) / .RowHeight ) *** Move up a row in the grid: up arrow key pressed IF nKeyCode = 5 THEN *** If we are sitting on the top row in the visible portion of the grid, *** Scroll the grid up a row in case there is a previous record IF .RelativeRow = 1 .DoScroll( 0 ) ENDIF .ActivateCell( .RelativeRow - 1, .ActiveColumn ) *** Let KeyPress know we have handled the keystroke llRetVal = .T. ELSE *** Move down a row in the grid if the down arrow key is pressed and the *** combo box is closed *** If we are sitting on the bottom row in the visible portion of the grid, *** Scroll the grid down a row in case there is a next record IF nKeyCode = 24 THEN IF .RelativeRow >= lnMaxRows .DoScroll( 1 ) ENDIF .ActivateCell( .RelativeRow + 1, .ActiveColumn ) llRetVal = .T. ENDIF ENDIF ENDWITH ENDIF ENDWITH RETURN llRetVal