设为首页收藏本站

Delphi乐园 开发者的家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 164|回复: 7

treeview怎样使被选中的父节点的子节点也全部被选中? [复制链接]

Rank: 4

该用户从未签到

金钱
62730
12098
0
在线时间
222 小时
阅读权限
10
精华
0
积分
0
UID
972
发表于 2016-9-7 20:51:37 |显示全部楼层
分享到:
用第三方控件吧,treeview还真没如许用过

比如,1stclass,就是节点前面带复选框的那种树
1、选中某节点,其子节点被选中

procedure SetChildState(Node:TTreeNode; State:Integer);

var

  Level:Integer;

begin

  Level:=Node.Level;

  Node:=Node.getFirstChild;

  while (Node<>nil) and (Node.Level>Level) do

  begin

    Node.StateIndex:=State;

    Node:=Node.GetNext;

  end;

end;

2、选中子节点时父节点也被选中,须要用到递归

procedure SetParentState(Node: TTreeNode);

var

  Flag: Integer;

  PNode:TTreeNode;

begin

  PNode:=Node.Parent;

  if PNode<>nil then

  begin

    PNode:=PNode.getFirstChild;

    Flag:=PNode.StateIndex;

    while PNode<>nil do

    begin

      if PNode.StateIndex<>Flag then Flag:=2;

      PNode:=PNode.getNextSibling;

    end;

    Node.Parent.StateIndex:=flag;

    SetParentState(Node.Parent);

  end;

end;

ding
请问楼上的1、选中某节点,其子节点被选中

procedure   SetChildState(Node:TTreeNode;   State:Integer);

var

    Level:Integer;

begin

    Level:=Node.Level;

    Node:=Node.getFirstChild;

    while   (Node <> nil)   and   (Node.Level> Level)   do

    begin

        Node.StateIndex:=State;

        Node:=Node.GetNext;

    end;

end;

2、选中子节点时父节点也被选中,须要用到递归

procedure   SetParentState(Node:   TTreeNode);

var

    Flag:   Integer;

    PNode:TTreeNode;

begin

    PNode:=Node.Parent;

    if   PNode <> nil   then

    begin

        PNode:=PNode.getFirstChild;

        Flag:=PNode.StateIndex;

        while   PNode <> nil   do

        begin

            if   PNode.StateIndex <> Flag   then   Flag:=2;

            PNode:=PNode.getNextSibling;

        end;

        Node.Parent.StateIndex:=flag;

        SetParentState(Node.Parent);

    end;

end;

这段代码要若何用?
在Click时可以用。
Click不大大好吧,我是写在mouseup事沂攀里,然后用getnodeat获取节点

各位大大侠,小弟是新人,不懂的你们说的。要若何调用,可以给我事宜代码吗?

Rank: 4

该用户从未签到

金钱
60765
11765
0
在线时间
118 小时
阅读权限
10
精华
0
积分
0
UID
912
发表于 2016-9-7 21:05:38 |显示全部楼层
用第三方控件吧,treeview还真没这样用过

比如,1stclass,就是节点前面带复选框的那种树

使用道具 举报

Rank: 4

该用户从未签到

金钱
66600
12512
0
在线时间
626 小时
阅读权限
10
精华
0
积分
0
UID
412
发表于 2016-9-7 21:08:38 |显示全部楼层
1、选中某节点,其子节点被选中

procedure SetChildState(Node:TTreeNode; State:Integer);

var

  Level:Integer;

begin

  Level:=Node.Level;

  Node:=Node.getFirstChild;

  while (Node<>nil) and (Node.Level>Level) do

  begin

    Node.StateIndex:=State;

    Node:=Node.GetNext;

  end;

end;

2、选中子节点时父节点也被选中,需要用到递归

procedure SetParentState(Node: TTreeNode);

var

  Flag: Integer;

  PNode:TTreeNode;

begin

  PNode:=Node.Parent;

  if PNode<>nil then

  begin

    PNode:=PNode.getFirstChild;

    Flag:=PNode.StateIndex;

    while PNode<>nil do

    begin

      if PNode.StateIndex<>Flag then Flag:=2;

      PNode:=PNode.getNextSibling;

    end;

    Node.Parent.StateIndex:=flag;

    SetParentState(Node.Parent);

  end;

end;

使用道具 举报

Rank: 4

该用户从未签到

金钱
60224
11927
0
在线时间
3 小时
阅读权限
10
精华
1
积分
0
UID
4
发表于 2016-9-7 21:14:39 |显示全部楼层
ding

使用道具 举报

Rank: 4

  • TA的每日心情
    难过
    2012-3-20 19:41:18
  • 签到天数: 1 天

    [LV.1]初来乍到

    金钱
    60950
    12079
    0
    在线时间
    4 小时
    阅读权限
    10
    精华
    0
    积分
    0
    UID
    8
    发表于 2016-9-7 21:18:39 |显示全部楼层
    请问楼上的1、选中某节点,其子节点被选中

    procedure   SetChildState(Node:TTreeNode;   State:Integer);

    var

        Level:Integer;

    begin

        Level:=Node.Level;

        Node:=Node.getFirstChild;

        while   (Node <> nil)   and   (Node.Level> Level)   do

        begin

            Node.StateIndex:=State;

            Node:=Node.GetNext;

        end;

    end;

    2、选中子节点时父节点也被选中,需要用到递归

    procedure   SetParentState(Node:   TTreeNode);

    var

        Flag:   Integer;

        PNode:TTreeNode;

    begin

        PNode:=Node.Parent;

        if   PNode <> nil   then

        begin

            PNode:=PNode.getFirstChild;

            Flag:=PNode.StateIndex;

            while   PNode <> nil   do

            begin

                if   PNode.StateIndex <> Flag   then   Flag:=2;

                PNode:=PNode.getNextSibling;

            end;

            Node.Parent.StateIndex:=flag;

            SetParentState(Node.Parent);

        end;

    end;

    这段代码要如何用?

    使用道具 举报

    Rank: 8Rank: 8

  • TA的每日心情
    奋斗
    2014-4-23 19:02:09
  • 签到天数: 42 天

    [LV.5]常住居民I

    金钱
    67776
    13436
    0
    在线时间
    25 小时
    阅读权限
    10
    精华
    0
    积分
    0
    UID
    2050
    发表于 2016-9-7 21:21:40 |显示全部楼层
    在Click时可以用。

    使用道具 举报

    Rank: 4

  • TA的每日心情

    1332243678
  • 签到天数: 1 天

    金钱
    60405
    11971
    0
    在线时间
    0 小时
    阅读权限
    10
    精华
    0
    积分
    0
    UID
    9
    发表于 2016-9-7 21:27:40 |显示全部楼层
    Click不大好吧,我是写在mouseup事件里,然后用getnodeat获取节点

    使用道具 举报

    Rank: 4

  • TA的每日心情
    难过
    2012-3-20 19:41:18
  • 签到天数: 1 天

    [LV.1]初来乍到

    金钱
    60950
    12079
    0
    在线时间
    4 小时
    阅读权限
    10
    精华
    0
    积分
    0
    UID
    8
    发表于 2016-9-7 21:33:41 |显示全部楼层
    各位大侠,小弟是新人,不懂的你们说的。要如何调用,可以给我事件代码吗?

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    delphi乐园微信公众号

    手机版|Delphi乐园 ( 冀ICP备11023363号-7 )    

    GMT+8, 2016-10-23 02:19

    Powered by Discuz! X2

    © 2001-2011 Comsenz Inc.

    公网安备 14090202000504号

    回顶部