将 ActiveControl 属性 与框架一起使用,将焦点转发到子组件

Using ActiveControl property with frames forwarding focus to subcomponents

我已经定义了一个 TFrame 后代 class,我想将焦点转发到一个 TEdit 子组件。

我已经重写了 SetFocus 方法,以便将焦点转发到编辑控件:

  TMyFrame = class(TFrame)
    Edit1: TEdit;
  public
    procedure SetFocus(); override;
  end;

...

procedure TMyFrame.SetFocus();
begin
  Edit1.SetFocus();
end;

如果我直接调用frame的SetFocus方法就可以了,但是设置form的ActiveControl就没有效果了 属性:

var
  Fr : TMyFrame;
begin
  Fr := TMyFrame.Create(Self);
  Fr.Align := alBottom;
  Fr.Parent := Self;

  ActiveControl := Fr;
end;

你必须写任何一个

ActiveControl := MyFrame1.Edit1;

MyFrame1.Edit1.SetFocus;

如果您想“在框架级别”工作,您可以在框架中截取 WM_SETFOCUS 并将焦点设置在您想要的位置:

private
    procedure WMSetFocus(var Msg : TWMSetFocus); message WM_SETFOCUS;


procedure TMyFrame.WMSetFocus(var Msg: TWMSetFocus);
begin
    Edit1.SetFocus;
end;

当你这样做时,你可以使用

ActiveControl := MyFrame1;