各位大侠看看我的这个搜索算法那里有缺陷?procedure TFmDm.SetTreeviewMultiSelect(SuoZaidDi:TTreeview;Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
i_loop :Integer;
begin
if Button=mbRight then
begin
SuoZaidDi.Select(SuoZaidDi.GetNodeAt(x,y));
if SuoZaidDi.Selected<>nil then //鼠标选择,获取焦点
begin
if SuoZaidDi.Selected.ImageIndex=0 then //SuoZaidDi.Selected.ImageIndex=0未选图标
begin
if SuoZaidDi.Selected.Level>0 then //非根节点
begin
if SuoZaidDi.Selected.Parent.ImageIndex=0 then
begin
SuoZaidDi.Selected.ImageIndex:=1; //ImageIndex:=1选中一个非根节点
SuoZaidDi.Selected.SelectedIndex:=1;
/////下面这个循环没有把下一级的最后一个子节点的所有孙节点获取到,请问大侠要如何改进?
if SuoZaidDi.Selected.HasChildren then //非根节点的所有子结点
begin
for i_loop:=Trv_ryjs_szd.Selected.getFirstChild.AbsoluteIndex to SuoZaidDi.Selected.GetLastChild.AbsoluteIndex do
SuoZaidDi.Items.Item[i_loop].ImageIndex:=1;//已选图标 end;
end;
end
else //根节点 Level=0
begin
SuoZaidDi.Selected.ImageIndex:=1; //选中根节点
SuoZaidDi.Selected.SelectedIndex:=1;
/////下面这个循环没有把下一级的最后一个子节点的所有孙节点获取到,请问大侠要如何改进?
if SuoZaidDi.Selected.HasChildren then //根节点的所有子结点的选择
begin
for i_loop:=SuoZaidDi.Selected.getFirstChild.AbsoluteIndex to SuoZaidDi.Selected.GetLastChild.AbsoluteIndex do
SuoZaidDi.Items.Item[i_loop].ImageIndex:=1;
end;
end;
end;
end;
end;
SuoZaidDi.Refresh;//刷新
end;
var
i_loop :Integer;
begin
if Button=mbRight then
begin
SuoZaidDi.Select(SuoZaidDi.GetNodeAt(x,y));
if SuoZaidDi.Selected<>nil then //鼠标选择,获取焦点
begin
if SuoZaidDi.Selected.ImageIndex=0 then //SuoZaidDi.Selected.ImageIndex=0未选图标
begin
if SuoZaidDi.Selected.Level>0 then //非根节点
begin
if SuoZaidDi.Selected.Parent.ImageIndex=0 then
begin
SuoZaidDi.Selected.ImageIndex:=1; //ImageIndex:=1选中一个非根节点
SuoZaidDi.Selected.SelectedIndex:=1;
/////下面这个循环没有把下一级的最后一个子节点的所有孙节点获取到,请问大侠要如何改进?
if SuoZaidDi.Selected.HasChildren then //非根节点的所有子结点
begin
for i_loop:=Trv_ryjs_szd.Selected.getFirstChild.AbsoluteIndex to SuoZaidDi.Selected.GetLastChild.AbsoluteIndex do
SuoZaidDi.Items.Item[i_loop].ImageIndex:=1;//已选图标 end;
end;
end
else //根节点 Level=0
begin
SuoZaidDi.Selected.ImageIndex:=1; //选中根节点
SuoZaidDi.Selected.SelectedIndex:=1;
/////下面这个循环没有把下一级的最后一个子节点的所有孙节点获取到,请问大侠要如何改进?
if SuoZaidDi.Selected.HasChildren then //根节点的所有子结点的选择
begin
for i_loop:=SuoZaidDi.Selected.getFirstChild.AbsoluteIndex to SuoZaidDi.Selected.GetLastChild.AbsoluteIndex do
SuoZaidDi.Items.Item[i_loop].ImageIndex:=1;
end;
end;
end;
end;
end;
SuoZaidDi.Refresh;//刷新
end;
假如有三级节点:根节点AAA;一级节点A1,B1,C1;二级节点;三级节点a1,a2,b1,b2,c1,c2,c3...
***AAA
**A1
*a1
*a1
**B1
*b1
*b2
**C1
*c1
*c2
*c3
点击根节点AAA获取焦点,执行之后,下一级最后一个自己点C1下面的所有孙节点c1,c2,c3不能取到
问:该如何修改里面的代码来解决?