如何获取有对象的页面编号?例如:第一页有Button1,第二页有Button2,没有ActivePageIndex的Button1的页码如何获取?谢谢。
发布于 2013-01-11 17:48:29
想要找到一个特定类的最接近的父类是很常见的。因此,创建一个函数来实现这一点是有好处的。
function GetParentWithClass(Control: TControl;
ClassType: TWinControlClass): TWinControl;
begin
Result := Control.Parent;
while Assigned(Result) and not (Result is ClassType) do
Result := Result.Parent;
end;一旦你有了它,你就可以用它来解决你当前的问题。
var
PageIndex: Integer;
TabSheet: TTabSheet;
.....
TabSheet := GetParentWithClass(Control, TTabSheet) as TTabSheet;
PageIndex := TabSheet.PageIndex;分离了这样的关注点之后,您可以在其他设置中使用GetParentWithClass。
发布于 2013-01-11 17:28:41
Function GetPageIndexOfControl(c:TControl):Integer;
begin
Result := -1;
While Assigned(c.Parent) and not (c is TTabsheet) do c := c.Parent;
if Assigned(c) then
if c is TTabsheet then
Result := TTabsheet(c).PageIndex;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Showmessage(IntToStr(GetPageIndexOfControl(Button1)));
end;发布于 2013-01-11 17:29:00
试试这个:
procedure TForm1.Button1Click(Sender: TObject);
begin
if Button1.Parent is TTabSheet then
ShowMessage(IntToStr(TTabSheet(Button1.Parent).PageIndex));
end;如果按钮直接在选项卡表中(没有面板或其他控件),它就会起作用。如果您有面板,您可以遍历父链,以查看父级是否为TTabSheet:
procedure TForm1.Button1Click(Sender: TObject);
var
Ctrl: TWinControl;
begin
Ctrl := Button1.Parent;
while Assigned(Ctrl) do
begin
if Ctrl is TTabSheet then
begin
ShowMessage(IntToStr(TTabSheet(Ctrl).PageIndex));
Break;
end
else
Ctrl := Ctrl.Parent;
end;
end;https://stackoverflow.com/questions/14275015
复制相似问题