0

A. 创建一个 VCL 表单应用程序。

B. 在表单上放置一个 TListBox 并在设计时填写一些项目,例如:

在此处输入图像描述

C. 将表单的KeyPreview属性设置为True

在此处输入图像描述

D. 在表单的OnKeyDown事件处理程序中编写以下代码:

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  if Key = VK_BACK then
  begin
    if ListBox1.Focused then
    begin
      Key := 0;
      CodeSite.Send('ListBox1 is focused!');
    end;
  end;
end;

E. 运行程序并通过单击选择 Item5:

在此处输入图像描述

现在 ListBox1 具有焦点。

F. 现在按退格键。假设,Key := 0;在 Form 的OnKeyDown事件处理程序中设置应该阻止 BACKSPACE 键被 ListBox1 控件处理。但这不起作用,如您所见: BACKSPACE 键导致将选择从 Item5 更改为 Item1:

在此处输入图像描述

那么如何防止 BACKSPACE 键在焦点列表框控件中被处理并更改列表框的选择呢?

德尔福 10.1 柏林更新 2
Windows 7 x64 SP1

4

1 回答 1

2

改用OnKeyPress事件:

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #8 then
  begin
    if ListBox1.Focused then
    begin
      Key := #0;
      CodeSite.Send('ListBox1 is focused!');
    end;
  end;
end;

您不能总是阻止OnKeyDown.

于 2016-12-03T23:33:08.057 回答