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