例如我的控件声明如下:TMyPanel = class(TPanel)
  private
    FMyArray: array [1..800] of TMyArray;//多少还不固定,800是上限
  published
    property ArrayCount: Integer read FArrayCount write SetArrayCount
end;我为了节省内存占用,可以在属性页上输入ArrayCount的值,比如15,但为什么跟踪下面函数时,ArrayCount的当前值却不是15呢?我应该怎么作?constructor TMyPanel.Create(AOwner: TComponent);
var
  i: Integer;
begin
  for i:= 1 to ArrayCount do
  begin
    FMyArray[i]:= TMyArray.Create;
  end;
end;多谢各位帮忙了!

解决方案 »

  1.   

    public
    constructor TMyPanel.Create(AOwner: TComponent;aArrayCount:Integer );
    constructor TMyPanel.Create(AOwner: TComponent;aArrayCount:Integer);
    var
    i: Integer;
    begin
    ArrayCount:=aArrayCount;
    for i:= 1 to aArrayCount do
    begin
    FMyArray[i]:= TMyArray.Create;
    end;
    end;
      

  2.   

    To chenzhuo:
    很简单的定义,FArrayCount:integer;To hongqi162:
    我把构造函数改成你的形式,但连窗体都放不上去啊?难道只能程序里运行时创建吗?
      

  3.   

    可以这样为ArrayCount设置一个初始值为15TMyPanel = class(TPanel)
      private
        FMyArray: array [1..800] of TMyArray;//多少还不固定,800是上限
      published
        property ArrayCount: Integer read FArrayCount write SetArrayCount default 15;//设定默认值为15
    end;constructor TMyPanel.Create(AOwner: TComponent);
    var
      i: Integer;
    begin
      for i:= 1 to ArrayCount do
      begin
        FMyArray[i]:= TMyArray.Create;
      end;
    end;
      

  4.   

    多谢hongqi162兄!你说的方法我也想过了,问题是我想在设计期间,我可以在控件属性页任意设置FArrayCount的值。等到运行的时候倒是不需要改变。现在问题就是执行Create的时候,FArrayCount总是还未被初始化。而很多显示函数需要FMyArray[i]中的数据,所以FMyArray[i]的初始化又不能太晚。真是没办法
      

  5.   

    你需要重新调整一下你的思路,对属性的赋值在他的构造函数之后,对FMyArray[i]的初始化的过程你只能放在SetArrayCount里
      

  6.   

    其实很简单的问题,如果你要对一个属性设置初始值,那么你可以在属性定义里加上default 15;如果没有初始值,那么你的构造函数里要用到这个属性的话,在这段代码前就要先把这个值初始化.
      

  7.   

    多谢hongqi162兄
    看来不能放在TMyPanel.Create里实现了。另外也感谢chenzhuo兄,fenger8293兄,多谢