在一個窗體上有幾十個Controls. 我們知道按Tab健Controls可以按TabIndex獲得焦點,那麼,怎樣能使按Enter健實現同樣的功能, 我寫了如下代碼, 卻不管用, 誰幫我改一下, 多謝了!!
Ea100_2Frm.KeyPreview := true;procedure TEa100_2Frm.FormKeyPress(Sender: TObject; var Key: Char);
begin
If Key = #13 Then
Ea100_2Frm.TabOrder := Ea100_2Frm.TabOrder + 1;
end;
Ea100_2Frm.KeyPreview := true;procedure TEa100_2Frm.FormKeyPress(Sender: TObject; var Key: Char);
begin
If Key = #13 Then
Ea100_2Frm.TabOrder := Ea100_2Frm.TabOrder + 1;
end;
if key=vk_return then
begin
key:=ord(0);
perform(wm_nextdlgcel,0,0);
end;
同时把Form的keypreview属性设为True;即可.其它控件类同.
var i:integer;
begin
if FForm.KeyPreview and (key=#13) then
with FForm do begin{ 判断是按执行键}
if not ((ActiveControl is TCustomGrid) or (ActiveControl is TCustomMemo)) Then Begin { 不是在TDbgrid控件内}
key:=#0;
perform(WM_NEXTDLGCTL,0,0);{移动到下一个控件}
end
else begin
if (ActiveControl is TCustomGrid) Then //是在 TDbgrid 控件内
With TCustomGrid(FForm.ActiveControl) Do begin
Perform(WM_KEYDOWN ,VK_TAB ,0);
for i:=0 to ComponentCount-1 do begin
if Components[i] is TInplaceEdit then begin
PostMessage(Tinplaceedit(components[i]).Handle, EM_SETSEL, 0, -1);// TInplaceEdit(Components[i]).SelectAll ;
end;
end;
end;
end;
end;
end;