请问如何在Treeview中删除选中的若干个项(100分)

  • 主题发起人 rockchina
  • 开始时间
R

rockchina

Unregistered / Unconfirmed
GUEST, unregistred user!
[:)]请问如何在Treeview中删除选中的若干个项

我用了如下代码,却只能删除第一条

//不能删除根节点
for i:=pred(treeview1.items.count) downto 0 do
if (treeview1.items.selected) and (treeview1.items.parent<>nil) then
treeview1.items.delete;


请高手指教!!!
 
procedure TForm1.ToolButton17Click(Sender: TObject);
var
Node,CatNode,ParentNode:TTreeNode;
I:Integer;
begin
if ActiveControl=RichEdit1 then
RichEdit1.ClearSelection
else if ActiveControl=TreeView1 then
begin
Node:=TreeView1.Selected;
ParentNode:=Node.Parent;
if Node.Level=2 then
Table1.Delete
else
begin
if Node.HasChildren then
begin
if MessageDlg('&amp;Eacute;&amp;frac34;&amp;sup3;&amp;yacute;&amp;Otilde;&amp;acirc;&amp;cedil;&amp;ouml;&amp;Ouml;÷&amp;Igrave;&amp;acirc;&amp;Iuml;&amp;Acirc;&amp;Euml;ù&amp;micro;&amp;Auml;×&amp;Ecirc;&amp;Aacute;&amp;Iuml;&amp;Acirc;&amp;eth;?',mtConfirmation,[mbYes, mbNo],0)=idNo then
Exit;
Table1.DisableControls;
try
for I:=0 to Node.Count-1 do
begin
if Table1.Locate('Subject', Node.Item.Text,[]) then
Table1.Delete;
end;
finally
Table1.EnableControls;
end;
end;
Table2.Locate('Level',Node.Text,[]);
Table2.Delete;
end;
TreeView1.Items.Delete(Node);
ParentNode.Selected:=True;
end
else if ActiveControl = ListView2 then
begin
I := 0;
while I < ListView2.Items.Count do
begin
if Listview2.Items.Selected then
begin
if Table1.Locate('Subject',ListView2.Items.Caption,[]) then
Table1.Delete;
Treeview1.Items.Delete(Treeview1.Selected.Item);
Listview1.Items.Delete;
end
else
Inc(I);
end;
end
else if ActiveControl = ListView1 then
begin
CatNode := TreeView1.Selected.Item[Listview1.Selected.Index];
if CatNode.HasChildren then
begin
if MessageDlg( '&amp;Eacute;&amp;frac34;&amp;sup3;&amp;yacute;&amp;Otilde;&amp;acirc;&amp;cedil;&amp;ouml;&amp;Ouml;÷&amp;Igrave;&amp;acirc;&amp;Agrave;&amp;iuml;&amp;micro;&amp;Auml;&amp;Egrave;&amp;laquo;&amp;sup2;&amp;iquest;×&amp;Ecirc;&amp;Aacute;&amp;Iuml;&amp;Acirc;&amp;eth;?',mtConfirmation,[mbYes,mbNo],0)=idNo then
Exit;
Table1.DisableControls;
try { Move table cursor to selected subject }
for I:=0 to CatNode.Count-1 do
begin
if Table1.Locate('Subject', CatNode.Item.Text,[]) then
Table1.Delete;
end;
finally
Table1.EnableControls;
end;
end;
Table2.Locate('Level',CatNode.Text,[]);
Table2.Delete;
ListView1.Selected.Delete;
TreeView1.Items.Delete(CatNode);
end;
end;
 
if (treeview1.items.selected) and (treeview1.items.parent<>nil) then
//根节点的Parent为nil,所以你的判断语句对根结点所得的值始终为False
当然就不会删除根节点

而且,如果我没有记错的话,TreeView是不支持多选的
那么在一颗树的所有节点里,只有一个节点的Selected属性可能为True
那么你的语句将只能删除一个节点,不知道我的解释对不对!
 
TTreeView确实支持多选。
 
TreeView如何支持多选呢?
 
TreeView默认不支持多选,可以用TreeView.MultiSelect:=True;打开。
 
确实不能完整删除,我试了半天也没弄明白是怎么回事,好象执行过DELETE以后,items
的i值TREEVIEW却认做相对值了。而删除DELETE就正常(绝对值),奇怪。
 

for i := 0 to self.TreeView1.SelectionCount - 1 do
self.TreeView1.Selections(i).Delete
这样应该可以
如果不行的化,可以使用数组先记录下选定的item的index然后删除
 
For i := pred(Treeview1.SelectionCount) downto 0 do begin
if (Treeview1.Selections.parent<>nil) then
Treeview1.Selections.Delete;
end;
 
顶部