首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TPageControl get索引

TPageControl get索引
EN

Stack Overflow用户
提问于 2013-01-11 17:22:57
回答 5查看 632关注 0票数 2

如何获取有对象的页面编号?例如:第一页有Button1,第二页有Button2,没有ActivePageIndex的Button1的页码如何获取?谢谢。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-01-11 17:48:29

想要找到一个特定类的最接近的父类是很常见的。因此,创建一个函数来实现这一点是有好处的。

代码语言:javascript
复制
function GetParentWithClass(Control: TControl; 
  ClassType: TWinControlClass): TWinControl;
begin
  Result := Control.Parent;
  while Assigned(Result) and not (Result is ClassType) do
    Result := Result.Parent;
end;

一旦你有了它,你就可以用它来解决你当前的问题。

代码语言:javascript
复制
var
  PageIndex: Integer;
  TabSheet: TTabSheet;
.....
TabSheet := GetParentWithClass(Control, TTabSheet) as TTabSheet;
PageIndex := TabSheet.PageIndex;

分离了这样的关注点之后,您可以在其他设置中使用GetParentWithClass

票数 7
EN

Stack Overflow用户

发布于 2013-01-11 17:28:41

代码语言:javascript
复制
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;
票数 2
EN

Stack Overflow用户

发布于 2013-01-11 17:29:00

试试这个:

代码语言:javascript
复制
procedure TForm1.Button1Click(Sender: TObject);
begin
  if Button1.Parent is TTabSheet then
    ShowMessage(IntToStr(TTabSheet(Button1.Parent).PageIndex));
end;

如果按钮直接在选项卡表中(没有面板或其他控件),它就会起作用。如果您有面板,您可以遍历父链,以查看父级是否为TTabSheet:

代码语言:javascript
复制
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;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14275015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档