Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Combobox in Grid - Up/DownArrow ?
Message
From
23/12/2002 06:19:49
 
 
To
22/12/2002 12:59:18
General information
Forum:
Visual FoxPro
Category:
Troubleshooting
Miscellaneous
Thread ID:
00735270
Message ID:
00735341
Views:
9
This message has been marked as the solution to the initial question of the thread.
Hello Bill.

If I put a ComboBox in a Grid, is there any way to use the keyboard to move up or down in the column? I have a grid where all but 1 column uses a ComboBox as the CurrentControl and it's a pain using the mouse to move up one cell.

I assume, then, that this is a drop down list because when you put a drop down combo (style=0) in a grid, the cursor keys behave as you would expect them to.

All you need to do is to add a property to your combo class called lDroppedDown and set it appropriately when the list is droppped ( in the click and the DropDown events ). Add this method ( called handleKey ) to your combo class and call it from the combo's KeyPress:
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
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform