procedure TForm1.FormCreate(Sender: TObject);
var
FatherNode:TTreeNode;
begin
try
FatherNode:=TTreeNode.Create(nil); //创建根结点对象
FatherNode:= Treeview1.Items.Add(nil,'全部类型');
Addclass(FatherNode); //加入子节点
finally
FatherNode.Free;
end;
添加子节点到treeview中procedure TForm1.AddClass(FatherNode:TTreeNode);
var
QryTmp:TADOQuery;
myNode:TTreeNode;
myLabel:TLabel;
begin
QryTmp:=TADOQuery.Create(nil); //动态创建一个adoquery控件,执行查询操作
QryTmp.ConnectionString:=datamodule1.ADOConnection1.ConnectionString;
QryTmp.Close;
QryTmp.SQL.Clear;
QryTmp.SQL.Add('select * from material_type');
QryTmp.Open;
while not QryTmp.Eof do //如果查询根节点标记的数据库中有数据
begin
myNode:=Treeview1.Items.AddChild(FatherNode,QryTmp.fieldbyname('type_name').AsString);
myLabel:=TLabel.Create(nil);
myLabel.Visible:=false;
myLabel.Caption:=QryTmp.fieldbyname('type_id').AsString;
myNode.Data:=myLabel;
QryTmp.Next;
end;
QryTmp.Free;
myLabel.Free;
end;
以上代码提示 变量myLable和FatherNode might not have been initialized..
什么问题呢??
procedure TForm1.FormCreate(Sender: TObject);
var
FatherNode:TTreeNode;
begin
try
FatherNode:=TTreeNode.Create(nil); //创建根结点对象
FatherNode:= Treeview1.Items.Add(nil,'全部类型');
Addclass(FatherNode); //加入子节点
finally
FatherNode.Free;
end;你改成:
procedure TForm1.FormCreate(Sender: TObject);
var
FatherNode:TTreeNode;
begin
try
FatherNode:= Treeview1.Items.Add(nil,'全部类型');
Addclass(FatherNode); //加入子节点
finally
end;procedure TForm1.AddClass(FatherNode:TTreeNode);
var
QryTmp:TADOQuery;
myNode:TTreeNode;
myLabel:TLabel;
begin
QryTmp:=TADOQuery.Create(nil); //动态创建一个adoquery控件,执行查询操作
QryTmp.ConnectionString:=datamodule1.ADOConnection1.ConnectionString;
QryTmp.Close;
QryTmp.SQL.Clear;
QryTmp.SQL.Add('select * from material_type');
QryTmp.Open;
while not QryTmp.Eof do //如果查询根节点标记的数据库中有数据
begin
myNode:=Treeview1.Items.AddChild(FatherNode,QryTmp.fieldbyname('type_name').AsString);
myLabel:=TLabel.Create(nil);
myLabel.Visible:=false;
myLabel.Caption:=QryTmp.fieldbyname('type_id').AsString;
myNode.Data:=myLabel;
QryTmp.Next;
end;
QryTmp.Free;
myLabel.Free;
end;
你改成
procedure TForm1.AddClass(FatherNode:TTreeNode);
var
QryTmp:TADOQuery;
myNode:TTreeNode;
myLabel:TLabel;
begin
QryTmp:=TADOQuery.Create(nil); //动态创建一个adoquery控件,执行查询操作
QryTmp.ConnectionString:=datamodule1.ADOConnection1.ConnectionString;
QryTmp.Close;
QryTmp.SQL.Clear;
QryTmp.SQL.Add('select * from material_type');
QryTmp.Open;
while not QryTmp.Eof do //如果查询根节点标记的数据库中有数据
begin
myNode:=Treeview1.Items.AddChild(FatherNode,QryTmp.fieldbyname('type_name').AsString);
myLabel:=TLabel.Create(nil);
myLabel.Visible:=false;
myLabel.Caption:=QryTmp.fieldbyname('type_id').AsString;
myNode.Data:=myLabel;
QryTmp.Next;
end;
QryTmp.Free;
//myLabel.Free;
end;你用在树节点的Data,你都不要释放他们,否则后面用的时候会出错的,你应该在删除树节点的在释放Data,删除树节点会触发事件:OnDeletion。