- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这里我重现了我遇到过几次的情况。我有两种形式。表格 1 和表格 2。 Form1 有一个编辑字段并连接了 OnKeyup 事件。 Form2 只有一个按钮和 OnClick 相连。当在 Form1 中用户按 TEdit 类型字段中的 VK_Retrun 时,将执行 Form2.Show。 Form2 显示,焦点位于按钮上。 OnClick 事件与内部的“Close”代码 Hook 。如果用户按下键盘上的 VK_RETURN 键,Form2 将按预期关闭。但是问题来了,Form2 再次直接启动。看起来当 Form1 获得焦点时,键仍然在“队列”中,并且编辑字段将以 VK_RETURN 继续。
以下是这种情况的完整列表:
unit UTestButton;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
procedure Edit1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses UTestButton2;
{$R *.dfm}
procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Key = VK_Return) THEN
Form2.Show;
end;
end.
这是第二个单元。
unit UTestButton2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm2 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.Button1Click(Sender: TObject);
begin
Close;
end;
end.
在实践中,我有时使用带有标签或信息的简单形式,但使用一两个按钮,并重点关注按钮。用户可以按预期敲击键盘上的按键。如果他使用 vk_return 并且底层控件使用该键,我必须采取一些解决方法来清除缓冲区的键,就像
PeekMessage(Mgs, 0, WM_CHAR, WM_CHAR, PM_REMOVE);
这对我来说并不完全令人满意。有没有人解决这种情况?
最佳答案
只需处理 OnKeyDown
事件而不是 OnKeyUp
对于您的初始编辑框:
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Key = VK_RETURN) then
Form2.Show;
end;
关于delphi - TButton + VK_Return,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13780093/
这里我重现了我遇到过几次的情况。我有两种形式。表格 1 和表格 2。 Form1 有一个编辑字段并连接了 OnKeyup 事件。 Form2 只有一个按钮和 OnClick 相连。当在 Form1 中
我正在尝试做一个滚动菜单。我的问题在于 GetAsyncKeyState(VK_RETURN) 我输入信息后,没有返回到我的菜单。它突然要求我输入另一个信息(这是无穷无尽的)。 我不确定它是否与 Ge
我正在编写一个简单的程序来记录点击位置和点击间隔。在设置过程中,用户按“ENTER”将新位置添加到列表中,然后在完成输入位置后按“ESC”。 我得到的一些奇怪的行为是其他按键导致 else if (G
我将编辑框控件子类化为 lpfnOldWndProc = (FARPROC)SetWindowLong(hEdit,GWL_WNDPROC, (DWORD)SubClassFunc); LRESULT
procedure TfrmProgress.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin i
我是一名优秀的程序员,十分优秀!