如何枚举TCategoryPanel持有的所有控件?

时间:2018-10-29 10:10:12

标签: delphi c++builder

我有一个TCategoryPanelGroup,其中包含一个TCategoryPanel(名为CatPan)。 CatPan包含3个列表框。

我想自动调整CatPan的大小以匹配它包含的3个列表框的高度。但是CatPan没有AutoSize属性。因此,我需要枚举列表框以获取其高度。

但是,当我尝试枚举3个列表框时,我什么也没得到:

request.remote_ip

因为CatPan.ControlCount返回1而不是3!似乎CapPan不是列表框的父级。可能这样做是为了能够执行折叠/展开动画。

我叫lbox1-> Parent-> Name(lbox1是列表框之一)来查看谁是它的父级,但是它返回一个空字符串。

1 个答案:

答案 0 :(得分:6)

您会丢失TCategoryPanel在其构造函数中创建TCategoryPanelSurface对象作为其子对象的情况,因此所有控件都进入TCategoryPanelSurface对象,而不是TCategoryPanel。

在C ++ Builder中,它类似于:

ShowMessage(ListBox1->Parent->ClassName()); //you can see actual parent class here
TCategoryPanelSurface  * Surface;
Surface = dynamic_cast <TCategoryPanelSurface *> (CatPan->Controls[0]);
ShowMessage(Surface->ControlCount);
ShowMessage(Surface->Controls[0]->Name); //you should use loop here to iterate through controls

在Delphi中:

var
  Surface: TCategoryPanelSurface;
  I: Integer;
begin
  Surface := CatPan.Controls[0] as TCategoryPanelSurface;
  for I := 0 to Surface.ControlCount - 1 do
  begin
    ShowMessage(Surface.Controls[I].Name);
  end;
end;