请教动态建树中遇到的一个问题。。 ( 积分: 19 )

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

cf83325

Unregistered / Unconfirmed
GUEST, unregistred user!
我的动态创了一棵树。。
现在我想给删除树上的一个节点,应该怎么添加事件。其实我已经写了很多遍,不成功。以下是我的程序,好心的人帮我看哈,顺便帮我修改过来,再次不慎感激。。急着用

//动态建树
procedure Tform1.Createtree;
var
tv :TTreeView;
Root,Cur_node :TTreeNode;
begin
tv:=TTreeView.Create(Self);
tv.Parent:=Self;
tv.Align:=alClient;
tv.PopupMenu:=PopupMenu1;


Root :=tv.Items.AddFirst(nil,'目录');
with ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('select * from Dir');
Open;

while not Eof do
begin
tv.Items.AddChild(Root,FieldByName('Caption').AsString);
Next;
end;
end;

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Createtree;
end;

//PopupMenu1的删除选项
procedure TForm1.N1Click(Sender: TObject);
begin
TTreeView(Sender).Selected.Delete;
end;

这样删除不了,没有得到当前树的节点。。。。点右键时没有任何反应啊。。高手赐教
 
我还顶。
 
我狂顶,太郁闷了。。好心的人给个回答啊。。我急着想知道啊。。初次接触treeview这个控件啊
 
我再顶,顶,顶。坚持顶。。。
 
高手,高手,哪里去了。。。心理急啊。
 
procedure TForm1.N1Click(Sender: TObject);
begin
TTreeView(Sender).Selected.Delete;
end;
你没有理解Sender 是什么啊! Sender 其实是N1 的实例!
TTreeView(Sender) 字这样转换不错都很幸运了!
tv 这个变量应该放到
private
tv :TTreeView;
窗口关闭之后要tv.free; 要不然回内存泄露的啊 ^_^
然后修改你那个删除的代码如下:
procedure TForm1.N1Click(Sender: TObject);
var
vNode: TTreeNode;
begin
vNode := Tv.Selected;
if Vnode = nil then exit;
vNode.delete;
end;
 
问题解决了,很感谢kk2000,虽然问题解决了,小弟还是有些不太明白的是
private
tv :TTreeView;

全局声明和局部声明有什么区别。。希望高人能够再指点下,sender我确实没有理解^_^.高手所言即是,听君一席话胜读十年书啊。呵呵。。。。。。谢谢,再次感谢楼上的哦
 
private
tv :TTreeView;
这个对一个类的访问级别限制. private 意为"私有的" 很明显是能够在本类内能访问而已.
如果是public 定义那么就是公开的, 别的类可以访问得到的类成员.
全局变量 跟 局部变量就是一个访问的区域不同 . 自己去找一本基础的书啃两下就更明白了, 我的文字表达能力有限 ^_^
 
楼上说得很对,顶一下
 
支持kk2000,我关于树的问题也是kk2000解决的。谢谢大家,特别是kk2000
 
多人接受答案了。
 
后退
顶部