起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 1370|回复: 1

实现TDataTreeView 在特殊情况下,不允许删除的方法

[复制链接]
发表于 2005-6-10 09:36:13 | 显示全部楼层 |阅读模式
原理:
TDataTreeView是关联到一个数据集上,树上的每个节点都对应于数据集上的某条记录,被删除的节点应该是数据集光标停放的当前记录,根据数据集的当前记录可以判断此记录(节点)是否允许删除了。

方法:
TDataTreeView中的PopupMenu是可以更改的,通过自己做一个右键菜单,当数据集的当前记录不允许删除时,就禁用掉右键菜单中的删除操作。

(判断条件写到Action的OnUpdate中)具体步骤如下:
1、在TDataTreeView所在的窗体中添加一个TPopupMenu
2、设置TDataTreeView的PopupMenu属性为这个TPopupMenu组件
3、在TPopupMenu组件中增加所需的操作项,例如删除等。
4、在TDataTreeView所在的窗体中再添加一个TActionList组件
5、在TActionList组件中增加与TPopupMenu中对应的TAction项,例如删除等
6、指定TPopupMenu中菜单项与TAction的对应关系,即MenuItem的Action属性
7、编辑TActionList中的各个Action,例如与删除菜单项关联的Action中需要设置其OnExecute、OnUpdate事件,在OnExecute中去做删除记录的操作,而在OnUpdate中去判断是否禁止掉删除记录的操作

删除节点参考代码如下:
  DataTreeView1.DeleteNode(DataTreeView1.Selected, true{是否删除子节点}, true{是否提示})

是否允许删除的代码参考如下:
procedure TMainForm.ActionDeleteUpdate(Sender: TObject);
begin
  if 允许删除 then
    TAction(Sender).Enabled := True
  else  
    TAction(Sender).Enabled := False;
end;
回复

使用道具 举报

发表于 2008-12-1 09:53:56 | 显示全部楼层

控制鼠标右键定位当前点击的节点

控制鼠标右键定位当前点击的节点(RightClickSelect =false)
DataTreeView的OnMouseDown事件
var
  pNode:TTreeNode;
begin
  //鼠标右键
  if Button = TMouseButton.mbRight then
  begin
    pNode := TDataTreeView(Sender).GetNodeAt(x,y);
    pNode.Selected := True;
  end;
end;
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2024-12-22 17:57 , Processed in 0.036241 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表