0

是这个错误还是我错过了什么?

这是用 Delphi XE2 编写的代码,但在 XE3 中不起作用......

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin

  if Key = VK_ESCAPE then //works when I press ESC!
    ShowMessage('escape');

  if Key = VK_RETURN then
    ShowMessage('enter'); //doesn't work when I press ENTER!
end;
4

1 回答 1

6

ENTER 键被认为是“对话键”;例如,它可以激活表单上的默认按钮。这不是一个错误,这就是事情的本来面目。如果您希望TEdit接收ENTER密钥,则需要对其进行子类化以处理WM_GETDLGCODE并说您想要接收ENTER密钥。你需要做这样的事情:

procedure TYourEditSubclass.WMGetDlgCode(var Message: TWMGetDlgCode);
begin
  Message.Result := DLGC_WANTALLKEYS;
end;

或者,您可以在 FORM 上启用KeyPreview并使用它的键盘事件。当您收到 Enter 键时,测试 Edit 是否具有焦点。像这样的东西会起作用:

procedure TForm6.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if (Key = VK_RETURN) and (Edit1.Focused) then
    ShowMessage('enter');
end;
于 2013-02-16T15:18:28.813 回答