将 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;
我已经定义了一个 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;