parent の連鎖を辿っていく

Delphi だとこれでうまくいく

function FindParentTabSheet(ctl: TControl): TTabSheet;
var
  oya: TWinControl;
  flag: Boolean;
begin
  flag := false;
  repeat
    oya := ctl.Parent;
    flag := (oya is TTabSheet) or (oya = nil);
    ctl := oya;
  until flag;
  result := TTabSheet(oya);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  ts: TTabSheet;
begin
  ts := FindParentTabSheet(Panel1);
  if Assigned(ts) then
    Label1.Caption := ts.Name
  else
    Label1.Caption := 'not found';
end;