Wenn nach einer Validierung der eingegebenen Werte feststeht, dass ein Control einen ungültigen Wert enthält, soll dieses aktiviert werden (mit SetFocus). Das geht nicht, wenn das Control auf einem inaktiven TabSheet eines PageControls ist.
Mit diesem Code soll das TabSheet aktiviert werden, auch in dem Fall dass das PageControl selber auf einem TabSheet ist.
Gibt es einfachere Lösungen, oder sogar etwas in gängigen Bibliotheken wie z.B.
Jedi?
Delphi-Quellcode:
procedure TryActivateTabSheetContaining(const AControl: TControl);
var
PC: TPageControl;
function FindPageControlRecursiveFor(const AControl: TControl): TPageControl;
begin
if AControl.Parent is TForm then
Exit(nil)
else if AControl.Parent is TTabSheet then
begin
Result := AControl.Parent.Parent as TPageControl;
Result.ActivePage := AControl.Parent as TTabSheet;
Exit;
end
else
Exit(FindPageControlRecursiveFor(AControl.Parent));
end;
begin
PC := FindPageControlRecursiveFor(AControl);
if PC = nil then
Exit
else
TryActivateTabSheetContaining(PC);
end;
(Als Umgebung wird Delphi 10.2 verwendet)