这样创建类为什么出错(50分)

  • 主题发起人 主题发起人 andyzhouap98111
  • 开始时间 开始时间
A

andyzhouap98111

Unregistered / Unconfirmed
GUEST, unregistred user!
type
TMyForm=class
private
BaseFormName: array of string;
BaseFormIndex: integer;
BaseFormcount:integer;
public
constructor Create;
procedure MyFormCreate(sender:TObject);
end;
constructor TMyForm.Create;
begin
BaseFormIndex:=-1;
BaseFormcount:=0;
end;

procedure TMyForm.MyFormCreate(sender:TObject);
begin
BaseFormcount:=BaseFormcount+1;
BaseFormName[BaseFormcount-1]:=(sender as Tform).Name;
end;
 
你的BaseFormName是动态数组,要用SetLength分配空间。
BaseFormcount:=BaseFormcount+1;
SetLength(BaseFormName, BaseFormcount);
BaseFormName[BaseFormcount-1]:=(sender as Tform).Name;
 
你好,我也是学纺织的,以后请多指教!QQ12795198
 
上面的回答也对。不过,要是建立不止一个Form,则会出错。所以建议你用固定的,或者在Create就制定动态数组的大小。因为每次SetLength的时候,数组里面的值就会被清空。或者先保存原值,再附新值。
 
来自:xnew, 时间:2006-6-9 17:04:04, ID:3467001
上面的回答也对。不过,要是建立不止一个Form,则会出错。所以建议你用固定的,或者在Create就制定动态数组的大小。因为每次SetLength的时候,数组里面的值就会被清空。或者先保存原值,再附新值。

xnew, 兄说错了
SetLength不会清空数据的,所以建立多个窗口也没事的
用数据保存类不方便,用TList或TStrings最方便。尤其是用TStrings。可同是保存Name和对象引用。查找 添加 删除都很方便。
 
unit Unit2;

interface
uses
Classes,Forms,SysUtils;
type
TMyForm = class
private
function GetCount: integer;
function GetItems(i: integer): TForm;
function GetItemsByName(name: String): TForm;
protected
FFormList:TStrings;
public
constructor Create;
destructor Destroy
override;
procedure MyFormCreate(sender:TObject);
property Items[i:integer]:TForm read GetItems;
property ItemsByName[name:String]:TForm read GetItemsByName;
property Count:integer read GetCount;
published

end;


implementation

{ TMyForm }

constructor TMyForm.Create;
begin
FFormList := TStringList.Create;
end;

destructor TMyForm.Destroy;
begin
FFormList.Free;
inherited;
end;

function TMyForm.GetCount: integer;
begin
Result := FFormList.Count;
end;

function TMyForm.GetItems(i: integer): TForm;
begin
Result := FFormList.objects as TForm;
end;

function TMyForm.GetItemsByName(name: String): TForm;
var
i:Integer;
begin
i := FFormList.IndexOf(name);
if i<0 then
raise Exception.Create(Format('错误:%s窗口不存在',[name]));

Result := Items;
end;

procedure TMyForm.MyFormCreate(sender: TObject);
begin
If not (Sender is TForm ) then
Raise Exception.Create('错误:Sender非TForm类或其子类');

FFormList.AddObject(TForm(sender).Name,sender);
end;

end.
 
后退
顶部