如何判断一个已知结点是否有子结点?
我用的是CheckTree ,就是treeview的扩展,每个结点带checkbox的。条件判断:1>如果父结点是被选状态,如何设置她的所有子结点也为被选状态,
          2>如果有一子结点为被选状态,怎么设置父结点为“实心”状态?
我的简单程序:
procedure TFrmMain.ShowTreeView;
var
    SQLStr1, SQLStr2:string;
    i:Integer;
begin
    for i := 0 to Self.Special_treeview.Items.Count - 1 do
    begin
        SQLStr1 := Self.Special_treeview.Items[i].Text;
        SQLStr2 := 'select * from T_人员权限表 ' +
            'where 姓名 = ' +
            #39 + DM.DSetUser.FieldByName('姓名').AsString + #39
            + 'and  基本权限 = ' +
            #39 + SQLStr1 + #39;
        ExecQuery(DM.DSetCheckTree, SQLStr2);
        if DM.DSetCheckTree.RecordCount > 0 then
 //就是下面的代码怎么写,谢谢了!         
            Self.Special_treeview.Items[i].StateIndex := 2
        else
            Self.Special_treeview.Items[i].StateIndex := 1;
    end;
end;

解决方案 »

  1.   

    1>如果父结点是被选状态,如何设置她的所有子结点也为被选状态,枚举结点的所有子结点,各个都设置为选中状态,TTreeNode 这个结点类, HasChildren 这个属性表示是否有子结点如果有子结点就,var  CurItem: TTreeNode;
    begin
      CurItem := TreeView1.Items.GetFirstNode;
      while CurItem <> nil do
      begin
         CurItem.StateIndex := 2 ;//或者1, 看你的程序中逻辑状态了
      end;
    end;
    2>如果有一子结点为被选状态,怎么设置父结点为“实心”状态?
    TTreeNode 这个结点类, Parent 属性指向父结点,,,
    TTreeNode有全面的属性,成员函数来实现你的想要的功能.至于上面这两点功能,可以在TreeView的click事件,或者,OnChange事件中编写相关的处理代码好像应该是OnChange事件比较好