//在表单上先放入一个RzPageControl控件 或PageControl控件替代RzPageControl
unit Unit2;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, RzTabs, ExtCtrls;type
  TForm1 = class(TForm)
    PageControl: TRzPageControl;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    BitBtn3: TBitBtn;
    BitBtn4: TBitBtn;
    BitBtn5: TBitBtn;
    procedure BitBtn5Click(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure BitBtn3Click(Sender: TObject);
    procedure BitBtn4Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.dfm}procedure TForm1.BitBtn5Click(Sender: TObject);
begin
  Close;
end;procedure TForm1.BitBtn1Click(Sender: TObject);//创建RzTabSheet
var
  TabSheet: TRzTabSheet;
begin
  TabSheet := TRzTabSheet.Create(PageControl);
  TabSheet.PageControl := Self.PageControl;
  TabSheet.Name := 'TabName';
  TabSheet.Caption := 'AAAA';
  Self.PageControl.ActivePage := TabSheet;
end;procedure TForm1.BitBtn2Click(Sender: TObject);//在RzTabSheet里创建TScrollBox
var
  ScrollBox: TScrollBox;
begin
  ScrollBox := TScrollBox.Create(TRzTabSheet(PageControl.FindComponent('TabName')));
  ScrollBox.Parent := TRzTabSheet(PageControl.FindComponent('TabName'));
  ScrollBox.Align := alClient;
  ScrollBox.Name := 'ScrName';
end;procedure TForm1.BitBtn3Click(Sender: TObject);//在TScrollBox里创建Panel控件
var
  Panel: TPanel;
begin
  Panel := TPanel.Create(TScrollBox(PageControl.FindComponent('ScrName')));
  with Panel do
  begin
    Parent := TScrollBox(TRzTabSheet(PageControl.FindComponent('TabName')).FindComponent('ScrName'));
    Width := 60;
    Height := 60;
    Name := 'PanelName';
    Caption := 'BBBB';
    Font.Color := clFuchsia;
    Font.Size := 11;
    Alignment := taCenter;
    Color := clHotLight;
    BevelInner := bvLowered;
    BevelOuter := bvLowered;
    ShowHint := True;
  end;
end;procedure TForm1.BitBtn4Click(Sender: TObject);//查询所创建Panel的名字,在最后一步找不到
var
  Lsbl_TabSheet: TRzTabSheet;
  Lsbl_ScrollBox: TScrollBox;
  Lsbl_Panel: TPanel;
begin
   Lsbl_TabSheet := TRzTabSheet(PageControl.FindComponent('TabName'));
  Lsbl_ScrollBox := TScrollBox(Lsbl_TabSheet.FindComponent('ScrName'));
  Lsbl_Panel := TPanel(Lsbl_ScrollBox.FindComponent('PanelName')); //当此步查找时不能找到
  ShowMessage(Lsbl_Panel.Caption);
end;end.各位大位上面是我的测试代码,在最后一步时为何查不到,应该如何找
是不是有更好的方法,请指都

解决方案 »

  1.   

    很简单,因为你的Scroll的Owner不是PageControl,所以创建Panel时的Owner其实是nil。
      

  2.   

    我创建Panel时,Parent := TScrollBox(TRzTabSheet(PageControl.FindComponent('TabName')).FindComponent('ScrName'));
      

  3.   

    procedure TForm1.BitBtn3Click(Sender: TObject);//在TScrollBox里创建Panel控件
    var
      Panel: TPanel;
    begin
      Panel := TPanel.Create(TScrollBox(PageControl.FindComponent('ScrName')));
      //有问题的是这里。PageControl.FindComponent('ScrName')的结果是nil。你的上一贴的做法有问题:Parent := TScrollBox(TRzTabSheet(PageControl.FindComponent('TabName')).FindComponent('ScrName'));Parent跟Owner是不同的概念。Parent是可见控件的视觉宿主,Owner是用来实现控件的自动释放回收及枚举访问。换成下面的就没问题了:
    Panel := TPanel.Create(TScrollBox(TRzTabSheet(PageControl.FindComponent('TabName')).FindComponent('ScrName')));
      

  4.   

    其实在一个Form中创建控件的时候通常使用Form作为Owner,即使用Self作为Create的参数。
      

  5.   

    to: cybercake(数字蛋糕)
    因为我在TScrollBox控件里动态创建很多TPanel控件,且在不定时的要改变TPanel的颜色
    有没有更好的方法