首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TButton + VK_Return

TButton + VK_Return
EN

Stack Overflow用户
提问于 2012-12-09 01:44:28
回答 1查看 5.2K关注 0票数 2

在这里我重现了我遇到过的几次情况。我有两个表格。Form1和Form2。Form1有一个编辑字段和连接的OnKeyup事件。Form2只有一个按钮,而OnClick连接在一起。在Form1中,当用户在类型为TEdit的字段中按VK_Retrun时,将执行Form2.Show。Form2将焦点放在按钮上。事件OnClick与内部代码"Close“挂钩。如果用户按键盘上的VK_RETURN键,Form2将按预期关闭。但问题来了,Form2又被解雇了。似乎当Form1获得焦点时,关键字仍然在“一个队列”中,编辑字段将继续使用VK_RETURN。

以下是这种情况的完整清单:

代码语言:javascript
复制
    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.

这是第二单元。

代码语言:javascript
复制
    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,而底层控件使用键,我必须做一些变通方法来清除buffer键,就像下面这样

代码语言:javascript
复制
    PeekMessage(Mgs, 0, WM_CHAR, WM_CHAR, PM_REMOVE);

这对我来说并不完全令人满意。有没有人能解决这种情况?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-09 01:51:05

只需处理初始编辑框的OnKeyDown事件而不是OnKeyUp

代码语言:javascript
复制
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if (Key = VK_RETURN) then
    Form2.Show;
end;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13780093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档