[本站首页] [管理页面] [写新日志] [退出]

朝为田舍郎,暮登天子堂,将相本无种,男儿当自强。
首页(178) Hibernate(10) JAVA(19) Web(15) Struts(7) 口水(9) Ides(18) 其它(51) AJAX(6) database(29) 
Blog信息

blog名称:四裤全输的小窝~~
日志总数:178
评论数量:699
留言数量:198
访问次数:1154948
建立时间:2005年10月29日

Blog内搜索



日志更新

谷歌地图定位偏移解决方法
【转】利用Windows内置的命令作端口
WIN2003服务器安全加固方案
[转]sql server 日期比较、日
MediaCoder 一般参数设置
[转]VMware中创建共享磁盘阵列的方
缓解vss共享文件夹的安全隐患问题(转)
Delphi 中调用JavaScript
微软的官方方法:延长Windows Se
cxGrid 过滤 排序后 取选中记录的

最新评论

回复:谷歌地图定位偏移解决方法
回复:谷歌地图定位偏移解决方法
回复:WIN2003服务器安全加固方案
回复:cxGrid 过滤 排序后 取选中
回复:TreeView 父节点 子节点 
回复:[转]Oracle Instead
回复:DWR 官方下载地址
ugg  boots
回复:cxGrid 过滤 排序后 取选中
回复:DWR 官方下载地址

友情链接

biglin's Blog
NoisyRam's Blog
Stone's Blog
Kevin 的小家
『知』治通鉴

留言板




[Ides]TreeView 父节点 子节点 状态一致 
原创空间,  软件技术,  电脑与网络 四裤全输 发表于 2008/1/11 22:39:28

今天晚上写用户组管理,需要对树进行操作.主要是勾选状态的一致性比较难处理,在网上搜索了一下没结果,就自己动手写了一个.核心函数主要有三个,供大家参考,如果还有更好的算法,希望大家能交流.注:我所用的是cxTreeView    //所有子节点是否有处于选中状态    function ChildChecked(TreeNode:TTreeNode):Boolean;    //改变所有子节点状态    procedure ChangeChildState(sParent:TTreeNode;StateIndex:Integer);    //改变父节点状态    procedure ChangeParentState(TreeNode:TTreeNode;StateIndex:Integer);function TfrmRole.ChildChecked(TreeNode:TTreeNode):Boolean;var  I : Integer;begin  Result := False;  for I := 0 to TreeNode.Count - 1 do  begin    if TreeNode[I].HasChildren then    begin      if  2 = TreeNode[I].StateIndex then      begin        Result := True;        Exit;      end;      ChildChecked(TreeNode[I]);    end    else begin      if  2 = TreeNode[I].StateIndex then      begin        Result := True;        Exit;      end;    end;  end;end;procedure TfrmRole.ChangeChildState(sParent: TTreeNode; StateIndex: Integer);var  I : Integer;begin  sParent.StateIndex := StateIndex;  for I := 0 to sParent.Count - 1 do  begin    if sParent[I].HasChildren then    begin      sParent[I].StateIndex := StateIndex;      ChangeChildState(sParent[I],StateIndex);    end    else      sParent[I].StateIndex := StateIndex;  end;end;procedure TfrmRole.ChangeParentState(TreeNode: TTreeNode; StateIndex: Integer);var  I : Integer;begin  if TreeNode.Parent = nil then    Exit;  //如果父节点是勾选状态,则要判断是否有其它节点是勾选状态,如果有,则退出,保持勾选  if 2 = TreeNode.Parent.StateIndex then  begin    if ChildChecked(TreeNode.Parent) then      Exit;  end;  TreeNode.Parent.StateIndex := StateIndex;  ChangeParentState(TreeNode.Parent,StateIndex);end;这段代码也比较有用,这个是点中节点才改变状态,点树上的"+""-"不会触发.procedure TfrmRole.cxTV_MenuMouseDown(Sender: TObject; Button: TMouseButton;  Shift: TShiftState; X, Y: Integer);var  MyHitTest : THitTests;  tn : TTreeNode;begin  inherited;  MyHitTest := cxTV_Menu.GetHitTestInfoAt(X,Y);  tn:=TcxTreeView(Sender).GetNodeAt(x,y);  if tn=nil then    Exit;  if htOnItem in MyHitTest then  begin    if 1 = tn.StateIndex then    begin      ChangeChildState(tn,2);      ChangeParentState(tn,2);    end    else    begin      ChangeChildState(tn,1);      ChangeParentState(tn,1);    end;  end;end;效果:1 全部不选择:500)this.width=500'>2 选计量单位:500)this.width=500'>3 选资信等级500)this.width=500'>4 取消选择计量单500)this.width=500'>5 只取消选择"计量单位修改"500)this.width=500'>稍候整理一下.把源码也上传上来.


阅读全文(9666) | 回复(0) | 编辑 | 精华

回复:TreeView 父节点 子节点 状态一致
原创空间,  软件技术,  电脑与网络 longwe(游客)发表评论于2011/4/28 15:19:25

代码呢 怎么加上勾选框


个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除

» 1 »

发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)
站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.031 second(s), page refreshed 144766587 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号