[技巧] 让一个后台 TTabSheet 上的控件切换到前台并获得焦点

实际上,这个函数并不只能完成上面的功能,它是让一个控件获得焦点,当它在后台的 TTabSheet 页面上时,会将所在的 TabSheet 设置为活动页面,然后再切换获得焦点。当然,如果它本身不能获得焦点,那么,会让其父获得焦点,依次类推。

代码如下:

function ForceFocus(ACtrl: TWinControl): Boolean;
var
  AParent: TWinControl;
begin
  AParent := ACtrl.Parent;
  if Assigned(AParent) then
  begin
    if AParent is TTabSheet then
    begin
      (AParent as TTabSheet).PageControl.ActivePage := AParent as TTabSheet;
      Result := ForceFocus(AParent);
    end
    else
      Result := ForceFocus(AParent);
  end
  else
    Result:=True;
  if Result then
    begin
    Result := ACtrl.CanFocus;
    if Result then
      ACtrl.SetFocus;
    end;
end;

调用的 ForceFocus 就可以切换焦点到相应的控件上了,如果当前控件不可见或Enabled为False,则会设置到其父控件上。

分享到: