CheckTree控件属性开发,大虾帮忙撒(100分)

  • 主题发起人 主题发起人 cys805
  • 开始时间 开始时间
C

cys805

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在的控件是:选中父节点的时候,会选中全部子节点;选中子节点的时候会选中父节点;
现在要实现的是:在控件中加一个属性,此属性为True的时候,选中父节点才会全部选中子节点;否则选中父节点的时候只是选中父节点。当然,选中子节点的时候还是会选中相关的父节点的。这个需求怎么实现,有对Delphi控件的帮帮忙哈,先谢了!
 
判断.

if true then
递归选择所有子节点
else
只选一个.
 
//这是函数
Procedure TFrmCaseAcceptBytenability.NodeParent(TreeView:TTreeView;Node:TTreeNode;StIndex:integer);
var
i,j:integer;
isAll,isChecked:Boolean;
ParentNode:TTreeNode;
begin
isAll:=True;
isChecked:=False;
For i:=0 to TreeView.Items.Count-1 do
begin
if TreeView.Items.Item = Node then
begin
ParentNode:=TreeView.Items.Item.Parent;
if ParentNode<>nil then
begin
if ((ParentNode.StateIndex<>2) and (ParentNode.StateIndex<>3))
and (StIndex<>2) then Break; //夫节点未被选中 且选中节点被取消选则 跳出
For j:=0 to ParentNode.Count-1 do
begin
if (parentNode.Item[j].StateIndex=1) or (parentNode.Item[j].StateIndex=3) then
isAll:=False;
if (ParentNode.Item[j].StateIndex=2) or (parentNode.Item[j].StateIndex=3) then
isChecked:=True;
end; //For j:=0 to ParentNode.Count-1 do
if isAll then
parentNode.StateIndex:=2
else begin
if isChecked then
ParentNode.StateIndex:=3
else
ParentNode.StateIndex:=1;
end;
NodeParent(TreeView,parentNode,StIndex);
end; //if ParentNode<>nil then
end; //if TreeView.Items.Item = Node then
end; //For i:=0 to TreeView.Items.Count-1 do
end;
//这是函数调用
procedure TFrmCaseAcceptBytenability.TreeView1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
MyHitTest : THitTests;
node: TTreeNode;
begin
node := TreeView1.GetNodeAt(x,y);
MyHitTest := TreeView1.GetHitTestInfoAt(X,Y);
if htOnStateIcon in MyHitTest then
begin
if node.StateIndex = 2 then
begin
node.StateIndex := 1;
NodeChild(Node,1);
NodeParent(TreeView1,Node,1);
end
else begin
node.StateIndex := 2;
NodeChild(Node,2);
NodeParent(TreeView1,Node,2);
end;
end;

end;
 
我顶····
 
后退
顶部