有关于树(TREEVIEW)构件的问题,高手,请帮忙哦。(100分)

S

sbh410

Unregistered / Unconfirmed
GUEST, unregistred user!
原来比如我的TREEBIEW里是
aaa
bbb
eee
fff
ddd
rrr
www
ccc
现在通过程序自动加上东西。如下(无论树怎么样变,都会自动加上)
aaa
1.bbb
1.1.eee
1.2.fff
1.2.1.ddd
1.2.2.rrr
1.3.www
2.ccc
iii
 
很有规律啊, 只要根据Node.Level来判断就行了。
一会写给你
 
用Node.Level 和 Node.Count 这两属性来做,很好做的呀。
不过要涉及到递归,不会的话,请来信 bolenl@etang.com
 
麻烦你们在这里写一下好了啊。谢谢啊
 
随手写的,可以实现你的目的,但没有作优化处理:
procedure TForm1.Button1Click(Sender: TObject);
function GetParentIndex(ANode: TTreeNode): string;
begin
if ANode.Level > 1 then
Result := GetParentIndex(ANode.Parent) + '.' + IntToStr(ANode.Parent.Index + 1);
if (Length(Result) > 0) and (Result[1] = '.') then
Delete(Result, 1, 1);
end;
var
I: Integer;
ANode: TTreeNode;
begin
for I := 0 to TreeView1.Items.Count - 1 do
begin
ANode := TreeView1.Items;
if ANode.Level = 1 then
ANode.Text := Format('%d. %s', [ANode.Index + 1, ANode.Text])
else if ANode.Level > 1 then
ANode.Text := Format('%s.%d. %s', [GetParentIndex(ANode), ANode.Index + 1, ANode.Text])
end;
end;
 
procedure TFrmRoleMaintain.Button12Click(Sender: TObject);
var i,k:integer;
str,str1,parentstr:string;
begin
treeview1.loadfromFile('c:/bmp/dd.txt');
with treeview1 do
begin
for i:=0 to items.Count-1 do
begin
if items.Level=0 then
continue;
if items.Level<>items[i-1].level then
begin
parentstr:=items.Parent.Text;
str1:=strrscan(pchar(parentstr),'.');
if trim(str1)<>'' then
begin
k:=length(parentstr)-length(str1);
str:=copy(parentstr,1,k)+'.';
end
else
str:='';
end ;
items.Text:=str+inttostr(items.index+1)+'.'+items.Text;
end;
end;
end;
这是我自己写的。XIANJUN,你的对于3层以上好象就不行了
 
你试过了?
别说是3层,30层都没有问题。 [:D]
 
我觉得跟level没关系,只是跟自己的父节点有关而已。
这是我看了贴子以后今天下午写的。后来吃饭去了。
现在给你贴上来。
procedure TForm1.Button1Click(Sender: TObject);
var
i,j:integer;
tmp:TStringList;
begin
j := 1;
tmp := TStringList.Create; //先把节点名称都保存起来
With TreeView1 do
begin
for i := 0 to Items.Count-1 do
begin
tmp.Add(Items.Text);
if Items.Level = 1 then
begin
Items.Text := IntToStr(j) ;
inc(j);
end;
end;
for i := 0 to Items.Count-1 do
if Items.Level > 1 then
begin
Items.Text := Items.Parent.Text + '.' + (IntToStr(GetOrder(Items)));
end;
for i := 0 to Items.Count -1 do
if Items.Level > 0 then
Items.Text := Items.Text + '.' + tmp;
end;
tmp.Free;
end;

function TForm1.GetOrder(Node: TTreeNode): integer;
var
i:integer;
ANode:TTreeNode;
begin
i:=1;
ANode := Node.Parent.getFirstChild;
while ANode <> Node do
begin
ANode := Node.Parent.GetNextChild(ANode);
inc(i);
end;
result :=i;
end;

end.
 
多人接受答案了。
 
顶部