Tre*_*tBG 2 delphi treeview treenode
我试图制作我的自定义TTreeNode类
例如
TCustomTreeNode = class(TTreeNode)
private
public
Comment:string;
end;
Run Code Online (Sandbox Code Playgroud)
我在树视图中创建并添加节点,如下所示:
var
NewCustomTreeNode:TCustomTreeNode;
begin
NewCustomTreeNode:= TCustomTreeNode.Create(TreeView.Items);
NewCustomTreeNode.Comment:='blqblq';
TreeView.Items.AddChild(NewCustomTreeNode,'NodeText');
Run Code Online (Sandbox Code Playgroud)
当我尝试访问自定义创建的树节点时会弹出错误.例如,我喜欢这样:
TCustomTreeNode(TreeNode).Comment:='asdadssadas';
Run Code Online (Sandbox Code Playgroud)
请帮助
代码的问题在于AddChild树视图中的结果调用会创建一个新节点.由于您没有告诉树视图创建子类的节点,因此它创建了一个普通的节点TTreeNode.然后当你试图将它投射到一个TCustomTreeNode世界时,世界就会结束.
您需要使用该OnCreateNodeClass方法来确保树视图能够创建新节点.像这样:
type
TCustomTreeNode = class(TTreeNode)
protected
procedure Assign(Source: TPersistent); override;
public
Comment: string;
end;
procedure TCustomTreeNode.Assign(Source: TPersistent);
begin
if Source is TCustomTreeNode then
Comment := TCustomTreeNode(Source).Comment;
inherited;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
NewNode: TCustomTreeNode;
begin
NewNode := TreeView1.Items.Add(nil, 'Node1') as TCustomTreeNode;
NewNode.Comment := 'A comment';
NewNode := TreeView1.Items.Add(nil, 'Node2') as TCustomTreeNode;
NewNode.Comment := 'Another comment';
end;
procedure TForm1.TreeView1Click(Sender: TObject);
var
Node: TCustomTreeNode;
begin
Node := TreeView1.Selected as TCustomTreeNode;
if Assigned(Node) then
ShowMessage(Node.Comment);
end;
procedure TForm1.TreeView1CreateNodeClass(Sender: TCustomTreeView; var NodeClass: TTreeNodeClass);
begin
NodeClass := TCustomTreeNode;
end;
Run Code Online (Sandbox Code Playgroud)
我不能声称自己是世界上最伟大的Delphi树视图专家,但根据我的经验,你自己从不创建树节点.您应始终调用其中一个AddXXX方法TTreeView.Items来创建新节点.