不好意思,我还是不大清楚你的意思。^_^<br>我试了一下,在编辑状态tab是跑到dbgrid下一个field:如果field是最后一个,则跑到<br>下一条纪录的第一个field.shift+tab则相反。<br>因此改成这样。不知道你是不是这个意思?<br>procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;<br> Shift: TShiftState);<br>begin<br> if key = vk_right then begin //按下右箭头;<br> DBGrid1.Perform(Wm_KeyDown, Vk_Tab, 0);//模拟tab;<br> key:=0;//屏蔽vk_right<br> end<br> else if key=vk_left then begin //按下左箭头;<br> //以下事件模拟按下shift,按下tab,松开tab,松开shift键盘事件。<br> keybd_event( VK_Shift, MapVirtualKey( VK_Shift, 0 ), 0 , 0 );<br> keybd_event( VK_Tab, MapVirtualKey( VK_Tab, 0 ), 0 , 0 );<br> keybd_event( VK_Tab, MapVirtualKey( VK_Tab, 0 ), KEYEVENTF_KEYUP , 0 );<br> keybd_event( VK_Shift, MapVirtualKey( VK_Shift, 0 ), KEYEVENTF_KEYUP , 0 ); // Alt key up<br> key:=0;//屏蔽left arrow<br> end<br>end;