![]() |
TabSheet aktivieren auf dem ein Control ist
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) |
AW: TabSheet aktivieren auf dem ein Control ist
Zitat:
Delphi-Quellcode:
procedure ForceFocus(const AControl: TWinControl);
var control: TControl; begin control := AControl; while control <> nil do begin if control is TCustomForm then Break; if control is TTabSheet then TTabSheet(control).PageControl.ActivePage := TTabSheet(control); control := control.Parent; end; AControl.SetFocus; end; |
AW: TabSheet aktivieren auf dem ein Control ist
Es geht noch viel einfacher: Einfach das entsprechende TEdit mit
Delphi-Quellcode:
sichtbar machen, das PageControl wechselt dabei automatisch auf das richtige TabSheet:
Show()
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var asNumber: Integer; begin if(not Integer.TryParse(Edit1.Text, asNumber)) then begin Edit1.Show(); Edit1.SetFocus(); end; if(not Integer.TryParse(Edit2.Text, asNumber)) then begin Edit2.Show(); Edit2.SetFocus(); end; end; |
AW: TabSheet aktivieren auf dem ein Control ist
Vielen Dank für die Antworten! Beide Lösungen habe ich erfolgreich getestet.
Die Show Methode ist in ihrer Kompaktheit kaum noch zu überbieten. Vielleicht poste ich dies mal auf Stackoverflow ;-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz