实际上,这个函数并不只能完成上面的功能,它是让一个控件获得焦点,当它在后台的 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,则会设置到其父控件上。