treeview 字符串 相关的一个难题
字符串:A(BC(DE(F))H)
形成 treeview
A
--B
--C--D
--E
--F
--H
各位多帮忙啊
[解决办法]
试一下下面的代码。里面有一些多余的代码,你自己精简一下吧,我没时间帮你做了。(不精简也不影响使用)
procedure TForm1.Button1Click(Sender: TObject);
const
S : string = 'A(BC(DE)F) ';
var
CurNode, Node : TTreeNode;
I, Step : Integer;
begin
CurNode := nil;
Node := nil;
Step := 9;
I := 1;
while I <= Length(S) do
begin
case S[I] of
'( ' : begin
if CurNode = nil then
begin
{ 如果开始就是(,则建立根节点MyTree }
Node := TreeView1.Items.AddFirst(nil, 'MyTree ');
CurNode := Node;
Step := 1;
end
else
Step := 1;
end;
') ' : begin
Step := Step - 1;
CurNode := CurNode.Parent;
end;
else begin
if CurNode = nil then
begin
Node := TreeView1.Items.AddFirst(nil,S[I]);
CurNode := Node;
end
else
if Step = 9 then Node := TreeView1.Items.AddFirst(nil,S[I])
else
Node := TreeView1.Items.AddChild(CurNode,S[I]);
end;
end;
if Step = 1 then
begin
Step := 0;
CurNode := Node;
end;
Inc(I);
end;
end;
[解决办法]
这是三楼代码精简后的结果(似乎还可以再精简)
已发在这个地址上:http://rabbitfox.blog.sohu.com/33349074.html
const
S : string = 'A(BC(DE(F))H) ';
var
CurNode, Node : TTreeNode;
I, Step : Integer;
begin
CurNode := nil;
Node := nil;
Step := 9;
I := 1;
TreeView1.Items.BeginUpdate;
while I <= Length(S) do
begin
case S[I] of
'( ' : begin
{ 如果开始就是(,则建立根节点MyTree }
if CurNode = nil then Node := TreeView1.Items.AddFirst(nil, 'MyTree ');
Step := 1;
CurNode := Node;
end;
') ' : begin
Step := -1;
CurNode := CurNode.Parent;
end;
else if CurNode = nil then
begin
Node := TreeView1.Items.AddFirst(nil,S[I]);
CurNode := Node;
end
else
if Step = 9 then Node := TreeView1.Items.AddFirst(nil,S[I])
else Node := TreeView1.Items.AddChild(CurNode,S[I]);
end;
Inc(I);
end;
TreeView1.Items.EndUpdate;
end;
只要符合约定的字串,都可以。如:(AB(CDE(F(GH(I)J)))K)