无法在不发出哔声的情况下关闭 Delphi 表单

Cannot close a Delphi form without causing a Beep

我有一个包含 1 个编辑框的 PopUpform。我从主窗体调用 ShowModal 并在 PopUpform.keyDown 事件中使用 Enter 和 Escape 来关闭 PopUp 并在它 returns 到主窗体时设置适当的模态结果。

当编辑框获得焦点时打开和关闭窗体会发出蜂鸣声。如果编辑框没有焦点,表单会自动关闭。如何防止编辑框有焦点时发出蜂鸣声?

通常,对话框包含一个 OK 和一个 Cancel 按钮,Enter键“单击”OK 按钮,Escape 键“单击”Cancel 按钮。

要管理对话框,请将 确定 按钮的 Default 属性 设置为 True 并将 取消 按钮的 Cancel 属性 到 True。此外,这些按钮还应具有适当的 ModalResult 值:

  • btnOK

    标题 =“确定”
    默认 = 真
    ModalResult = mrOk

  • btn取消

    标题=“取消”
    取消 = 真
    ModalResult = mrCancel

然后使用 ShowModal:

显示对话框
frm := TFrogPropertiesFrm.Create(Self);
try
  if frm.ShowModal = mrOk then
    UpdateFrogProperties;
finally
  frm.Free;
end;

请注意,Enter 会自动“点击”OK 按钮,Escape 会自动“点击”点击”然后 取消 按钮。另请注意,OK 按钮的默认状态由粗边框表示。

相反,如果您有一个只有一个按钮的对话框,通常标题为 关闭 并且应该同时具有 DefaultCancel设置为 True。例如,它的模态结果可以是mrClose


这就是说,如果您的表单确实没有任何合适的按钮而您有

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  case Key of
    VK_RETURN:
      ModalResult := mrOk;
    VK_ESCAPE:
      ModalResult := mrCancel;
  end;
end;

您可以通过

使嘟嘟声静音
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  if Key = Chr(VK_RETURN) then
    Key := #0;
end;