3

在我的应用程序的一种形式中,我们通过向表单添加框架来添加数据集。对于每一帧,我们希望能够通过按 Enter 键从一个编辑(Dev Express Editors)控件移动到下一个。到目前为止,我已经在控件的 KeyPress 和 KeyUp 事件中尝试了四种不同的方法。

  1. SelectNext(TcxCurrencyEdit(Sender), True, True); // also base types attempted

  2. SelectNext(Sender as TWinControl, True, True);

  3. Perform(WM_NEXTDLGCTL, 0, 0);

  4. 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。任何人都可以指导我使其正常工作吗?谢谢。

4

4 回答 4

4

这适用于 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;
于 2009-10-29T10:39:46.223 回答
3

我发现一个旧项目CM_DIALOGKEY在用户按下 Enter 键然后触发VK_TABkey 时捕获消息。它适用于许多不同的控件。

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;
于 2009-10-28T23:00:23.870 回答
2

onKeyPress 事件像任何其他形式一样被触发。

问题是程序 perform(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;
于 2013-08-29T14:43:45.760 回答
1

您可以在窗体上放置一个 TButton,使其变小并将其隐藏在其他控件下。将 Default 属性设置为 true(这使得它可以获取 Enter 键)并将以下内容放入 OnClick 事件中:

SelectNext(ActiveControl, true, true);
于 2009-10-29T06:57:57.780 回答