初写VCL,恳请大家帮忙。(50分)

  • 主题发起人 主题发起人 龙行天下
  • 开始时间 开始时间

龙行天下

Unregistered / Unconfirmed
GUEST, unregistred user!
我想编写一个改进的TreeView控件,
myTreeview从标准的TreeView继承,其中一个改进之处:
为每一个TreeNode增加一个属性“ID”,其实意图很简单,
比如:
TreeView.Items[n].Text 节点的文本(已有的属性)
TreeView.Items[n].ID 节点的ID (我要的属性)
就是这个ID,如何做成TreeNode的属性,在我的myTreeview控件中调用?
谢谢各位!!!
 
应该很简单罢!从TTreeNode继承一个新的TreeNode,然后在private中增加一个变量 FID
然后在Public当中公开出来就OK了吧!property ID: Integer read FID write FID;
 
谢谢楼上的朋友,
不过我就是搞不太懂类的继承关系。
我的类定义:
type
TmyTreeView = class(TTreeView)
...
end;
TreeNode是属于TreeView.Items.Item
那么我在类中如何定义TTreeNode
按你的意思是这样吗:
type
TmyNode = class(TTreeNode)
private
FID: Integer;
public
property ID: Integer read FID write FID;
end;
type
TmyTreeView = class(TTreeView)
private
TreeNode: TmyNode;
...
end;
 
其实你没有必要新建一个自己的从TTReeNode继承的类
因为TreeView的AddChildObject函数本身就可以添加指针
你可以在这个指针里面存放一个自己的类,在这个类里面
你放多少信息都可以的, 你可以如下处理……

type

TNodeParam = class(TObject)
public
ID: Integer;
//你还可以添加别的信息
end;
... ... ....

{新建一个节点的过程}
procedure AddNewNode;
var
Param: TNodeParam;
begin
Param := TNodeParam.Create;
//这个节点想包含的ID信息为29
Param.ID := 29;

//这里假设你的这个节点没有父节点
Node := TreeView.Items.AddChildObject(nil, '?', Param);
Node.Selected := True;
end;

{得到一个节点ID的过程}
procedure TreeViewChange(Sender: TObject; Node: TTreeNode);
var
ID: Integer;
CurNodeP: TNodeParam;
begin
CurNodeP := TNodeParam(Node.Data);

// 就这样得到这个节点的ID啦 ^_^
ID := CurNodeP.ID;
end;
 
接受答案了.
 
后退
顶部