function TForm1.AddANode(MyTreeNode: TMyTreeNode): TTreeNode;
var
i: Integer;
parentNode: TTreeNode;
begin
if MyTreeNode.Added then
begin
for i := 0 to tv.Items.count - 1 do
if TMyTreeNode(tv.Items[i].data).id = MyTreeNode.id then
begin
Result := tv.Items[i];
break;
end;
end
else
begin
for i := 0 to Length(Nodearr) - 1 do
if Nodearr[i].id = MyTreeNode.parentid then
begin
parentNode := AddaNode(Nodearr[i]);
break;
end;
MyTreeNode.Added := True;
Result := tv.Items.AddChildObject(parentNode, MyTreeNode.Name, MytreeNode);
end;
end;
var
i: Integer;
parentNode: TTreeNode;
begin
if MyTreeNode.Added then
begin
for i := 0 to tv.Items.count - 1 do
if TMyTreeNode(tv.Items[i].data).id = MyTreeNode.id then
begin
Result := tv.Items[i];
break;
end;
end
else
begin
for i := 0 to Length(Nodearr) - 1 do
if Nodearr[i].id = MyTreeNode.parentid then
begin
parentNode := AddaNode(Nodearr[i]);
break;
end;
MyTreeNode.Added := True;
Result := tv.Items.AddChildObject(parentNode, MyTreeNode.Name, MytreeNode);
end;
end;
就是上面那些源码有问题了
提示错误为
return value of function 'tform1.addanode'might be numdefined
variable 'parentnode'might not have been initialized
TMyTreeNode是什么结构,干嘛要自己定义个TreeNode结构呢。
那我把所有的源码都贴出吧!
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, ComCtrls;type
TMytreeNode=class
public
id:string;
parentid:string;
name:string;
added:boolean;
constructor Create(Aid, AParentid, AName: String);
end; TForm1 = class(TForm)
ADOC: TADOConnection;
ADOQ: TADOQuery;
TV: TTreeView;
procedure FormShow(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
Nodearr: array of TMyTreeNode;
function AddANode(MyTreeNode: TMyTreeNode): TTreeNode; { Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}
constructor TMytreeNode.Create(Aid, AParentid, AName: String);
begin
inherited Create;
id := Aid;
Parentid := AParentid;
Name := AName;
Added := false;
end;
function TForm1.AddANode(MyTreeNode: TMyTreeNode): TTreeNode;
var
i: Integer;
parentNode: TTreeNode;
begin
if MyTreeNode.Added then
begin
for i := 0 to tv.Items.count - 1 do
if TMyTreeNode(tv.Items[i].data).id = MyTreeNode.id then
begin
Result := tv.Items[i];
break;
end;
end
else
begin
for i := 0 to Length(Nodearr) - 1 do
if Nodearr[i].id = MyTreeNode.parentid then
begin
parentNode := AddaNode(Nodearr[i]);
break;
end;
MyTreeNode.Added := True;
Result := tv.Items.AddChildObject(parentNode, MyTreeNode.Name, MytreeNode);
end;
end;
procedure TForm1.FormShow(Sender: TObject);
var
i: Integer;
begin
ADOQ.Connection:=ADOC;
ADOQ.Close;
ADOQ.SQL.Clear;
ADOQ.SQL.Add('select id,parentid,name from code') ;
ADOQ.Active:=true;
ADOQ.First;
SetLength(Nodearr, 0);
while not ADOQ.Eof do
begin
SetLength(Nodearr, Length(Nodearr) + 1);
Nodearr[High(Nodearr)] := TMyTreeNode.Create(ADOQ.FieldByName('id').AsString,
ADOQ.FieldByName('parentid').AsString, ADOQ.FieldByName('name').AsString); ADOQ.Next;
end;
for i := 0 to high(Nodearr) do
if not Nodearr[i].Added then
addANode(Nodearr[i]);end;
Unable to insert an item???
Result := tv.Items.AddChildObject(parentNode, MyTreeNode.Name, MytreeNode);
会出现一个异常,所以先给parentNode赋个空值即可。function TForm1.AddANode(MyTreeNode: TMyTreeNode): TTreeNode;
var
i: Integer;
parentNode: TTreeNode;
begin
parentNode:=nil;//////////////////////////////////////////////这里赋空
if MyTreeNode.Added then