首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

treeview 字符串 相关的一个难题解决方案

2012-02-27 
treeview 字符串 相关的一个难题字符串:A(BC(DE(F))H)形成treeviewA--B--C--D--E--F--H各位多帮忙啊[解决

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)

热点排行