冥界3大法王 发表于 2022-8-1 08:51

关于delphi的控件TreeView1中在当前之后,当前之前创建节点的问题

关于delphi的控件TreeView1中在当前之后,当前之前创建节点的问题
先看看人家实现的效果

再看看我实现的效果:



//这是在当前选中项目添加新项目的代码
var
Node1: TTreeNode;
begin
sTreeView1.Items.AddChild(Node1, 'New Item');
end;



这个。。。。。是向前添加的。。。也有问题
procedure TMDIChild.N4Click(Sender: TObject);
var
MyTreeNode1: TTreeNode;
begin
with STreeView1.Items do
begin
//MyTreeNode1 := Add(nil, 'RootTreeNode1');
    MyTreeNode1 := Add(nil, STreeView1.Selected.Text);
AddChild(MyTreeNode1, 'ChildNode1');
end;





明显跑国外去了。。。{:301_1008:}



https://static.52pojie.cn/static/image/hrline/2.gif
另外还差一个在当前节点选中时,在其下一层创建子节点的 ,也不会弄。
以下是参考代码: 可惜我没整明白

procedure TMDIChild.N4Click(Sender: TObject);
var
MyTreeNode1, MyTreeNode2: TTreeNode;
begin
with STreeView1.Items do
begin
   // Clear;            //删除任何现有节点
   {添加根节点
    将子节点添加到刚才添加的节点}
    //MyTreeNode1 := Add(nil, 'RootTreeNode1');
    MyTreeNode1 := Add(nil, STreeView1.Selected.Text);


   //AddChild(MyTreeNode1, 'ChildNode1');








    {
    //添加另一个根节点
    MyTreeNode2 := Add(MyTreeNode1, 'RootTreeNode2');
   //把MyTreeNode2给一个子节点
    AddChild(MyTreeNode2,'ChildNode2');


    将MyTreeNode2更改为ChildNode2
    向其中添加子节点}
    //MyTreeNode2 := STreeView1.Items;
   // AddChild(MyTreeNode2,'ChildNode2a');


   //将另一个子节点添加到ChildNode2,在ChildNode2a之后
   // AddChild(MyTreeNode2,'ChildNode2b');


   //添加另一个根节点
   // Add(MyTreeNode1, 'RootTreeNode3');
end;
end;

冥界3大法王 发表于 2022-8-1 09:25

procedure TMDIChild.N1Click(Sender: TObject);
var
MyNode: TTreeNode;
i: integer;
begin
with STreeView1.Items do
begin
    MyNode := STreeView1.items;
    AddChild(MyNode, '1111111');
end;
end;
又改了一下,还是有bug

冥界3大法王 发表于 2022-8-1 09:33

我又认真观察了下人家的程序
如果在1个根节点上 、则生成的都是同级的根节点
。。。。。。。。。的子根点上,则生成的是同级的子节点。

sunsjw 发表于 2022-8-1 09:45

delphiX年前玩过,已经很久没玩了。

zxxiaopi 发表于 2022-8-1 10:40

大佬,去盒子上问下吧

homejun 发表于 2022-8-1 10:45

看帮助吧,应该很简单

Ashes 发表于 2022-8-1 13:16

AddChild 是在指定节点下增加一个子节点
Add 才是增加同级别的节点, 但会增加到同一级节点的最后面

Ashes 发表于 2022-8-1 14:37

Insert 是在指定节点前插入一个新节点, 我写了一个在指定节点后插入的InsertAfter;
试试是不是你要的效果

procedure InsertAfter(aTree:TTreeView; aText: String);
var
nodeThat: TTreeNode;
begin
nodeThat := aTree.Selected.GetNext;
if nodeThat=nil then
    aTree.Items.Add(aTree.Selected, aText)
else
    aTree.items.Insert(nodeThat, aText);
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
InsertAfter(TreeView1, 'New Item ' + inttostr(aIndex));
Inc(aIndex);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
TreeView1.Items.Insert(TreeView1.Selected, 'New Item ' + inttostr(aIndex));
Inc(aIndex);
end;
页: [1]
查看完整版本: 关于delphi的控件TreeView1中在当前之后,当前之前创建节点的问题