在我的应用程序的一种形式中,我们通过向表单添加框架来添加数据集。对于每个帧,我们希望能够通过按Enter键从一个编辑(Dev Express Editors)控件移动到下一个控件。到目前为止,我已经在我的控件的KeyPress和KeyUp事件中尝试了四种不同的方法。
SelectNext(TcxCurrencyEdit(Sender), True, True); // also base types attempted
SelectNext(Sender as TWinControl, True, True);
Perform(WM_NEXTDLGCTL, 0, 0);
f := TForm(self.Parent); // f is TForm or my form
c := f.FindNextControl(f.ActiveControl, true, true, false); // c is TWinControl or TcxCurrencyEdit
if assigned(c) then c.SetFocus;
这些方法都不适用于Delphi 5.任何人都可以指导我实现这项工作吗?感谢。
答案 0 :(得分:3)
我发现一个旧项目在用户按Enter键时捕获CM_DIALOGKEY
消息,然后触发VK_TAB
键。它适用于许多不同的控件。
interface
...
procedure CMDialogKey(var Message: TCMDialogKey);message CM_DIALOGKEY;
implementation
...
procedure TSomeForm.CMDialogKey(var Message : TCMDialogKey);
begin
case Message.CharCode of
VK_RETURN : Perform(CM_DialogKey, VK_TAB, 0);
...
else
inherited;
end;
end;
答案 1 :(得分:3)
这适用于Delphi 3,5和6:
将表单的KeyPreview属性设置为True。
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
If (Key = #13) then
Begin
SelectNext(ActiveControl as TWinControl, True, True);
Key := #0;
End;
end;
答案 2 :(得分:2)
onKeyPress事件与任何其他形式一样被激活。
问题是程序执行(wm_nextdlgctl,0,0)在框架内不起作用。
你必须知道主动控制才能使正确的事件发生变化。
procedure TFrmDadosCliente.EditKeyPress(Sender: TObject; var Key: Char);
var
AParent:TComponent;
begin
if key = #13 then
begin
key := #0;
AParent:= TComponent(Sender).GetParentComponent;
while not (AParent is TCustomForm) do
AParent:= AParent.GetParentComponent;
SelectNext(TCustomForm(AParent).ActiveControl, true, true);
end;
end;
答案 3 :(得分:1)
您可以在表单上放置TButton,将其缩小并将其隐藏在其他控件之下。将Default属性设置为true(使其获得Enter键)并将以下内容放入OnClick事件:
SelectNext(ActiveControl, true, true);