在類中建立多維數組控件問題。急﹗﹗﹗(100分)

  • 主题发起人 主题发起人 zhangkan
  • 开始时间 开始时间
Z

zhangkan

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大蝦﹐小弟在程序中建立了一個類﹐動態生成一維﹑兩維甚至多維的TEdit控件﹐
並將數據讀入其中﹐(因為在Delphi中沒有控件數組﹐所以我效法VB自己寫一個類生成控件
數組)但在測試中﹐生成一維數組絕沒有問題﹐但生成二維時﹐撤消該類時便出現錯誤﹐我
也不知是什麼問題﹐有時生成時也會出現問題﹐在此向各類大蝦求救。
我是在程序中給出生成多少個TEdit控件和几維﹐然后在類中再以給出的數值生成相應
的TEdit控件﹐這樣應該沒有問題。最想不通的是生成一維的不會出現問題﹐但讓它生成兩
維控件時便會出現問題﹐是否Delphi不支持還是別的什么原因﹖
部份代碼如下﹕若哪位大蝦要代碼﹐請告之Email﹐我最寄給你。kan@freetrend.com.vn

生成該類
constructor TShowTxt.Create(AForm: TForm);
begin
inherited Create;
Initiate;
end;

生成控件數組﹕
procedure TShowTxt.CreateTxT(Parent: TWinControl; ToTal: integer;
Name: array of string);
var i,j:integer;
begin
NumTxT:=ToTal;
Rows:=NumTxT div RowNum;
SetLength(txt,Levels,NumTxT);
SetLength(lbl,Rows);
for i:=0 to Levels-1 do
for j:=0 to NumTxT-1 do begin
txt[i,j]:=TEdit.Create(Parent);
txt[i,j].Visible:=False;
txt[i,j].Parent:=Parent;
txt[i,j].Width:=FWidth;
txt[i,j].Height:=FHeight;
txt[i,j].Font.Size:=FFontSize;
txt[i,j].Name:=Name+IntToStr(j+1);
txt[i,j].Color:=clRed;
txt[i,j].OnKeyDown:=TxTKeyDown;
txt[i,j].OnKeyPress:=TxTKeyPress;
txt[i,j].Ctl3D:=False;
txt[i,j].MaxLength:=MaxLen;
txt[i,j].Text:='';
end;
for i:=0 to Levels-1 do
for j:=0 to Rows-1 do
begin
lbl[i*Rows+j]:=TLabel.Create(Parent);
lbl[i*Rows+j].Parent:=Parent;
lbl[i*Rows+j].Caption:=FlblCaption;/*這是定義的一個一維屬性*/
end;
end;

撤消該類﹕
destructor TShowTxt.Destroy;
var i,j:integer;
begin
// inherited;
for i:=0 to Levels-1 do
for j:=0 to NumTxT-1 do
txt[i,j].Free;
for i:=0 to Levels-1 do
for j:=0 to Rows-1 do
lbl[i*Rows+j].Free;
inherited Destroy;
end;

設將Levels設為1﹐即1維﹐便不會出現問題﹐而將其設為2或更大﹐便出現問題。
哪位大蝦救我﹐謝啦﹗﹗﹗
 
支持是肯定支持的。我曾经写过类似的东西。
你试试在Free以后来个:txt[i,j] := Nil
 
各位多謝了﹐是小弟一時暈了頭﹐將SetLength(lbl,Rows*Levels);寫成了
SetLength(lbl,Rows);所以生成Tlable控件的時候少生成了几個﹐而撤消
的時候又要撤消那几個沒有的﹐所以就出問題了。請問斑竹﹐不知小弟自
己解決了問題﹐分數可不可以還給我。
 
接受答案了.
 
后退
顶部