收录日期:2018/11/16 16:16:28 时间:2016/05/18 03:13:48 标签:VCL组件开发及应用
我在TreeView控件中增加了好几个根节点,然后在每个根节点下都放了子节点,我想实现当我点在任何一个根节点下的子节点上,这时能触发一个事件,并且要显示出改子节点所属的根节点?
怎么来实现???????????????????????????????????????
TreeView的OnChange事件,
procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
begin
  while Node.Parent <> nil do Node := Node.Parent;
  ShowMessage(Node.Text);
end;
up
为什么不在OnClick上呢?
单击时,先响应OnChange(),然后响应OnClick()
其实都可以吧

不过最好先判断一下
if TreeView1.Selected = nil then Exit;

否则下面用到时可能会出错。
不要用OnClick因为,OnClick不管你是不是改变当前选中的节点它都会触发的而OnChang是在切换到另一个节点时才会触发的
onchange
up
帮你UP
var i:integer ;
   tempNode:TTreeNode ;
begin
 TempNode:=Treeview1.Selected ;
   for i:=0  to TreeView1.Selected.Level -1 do
   begin
     TempNode:=TempNode.Parent ;
   end ;
   showmessage(tempnode.Text) ;
end ;
应该没有错。如果UP有分,那我还要加分,哈哈哈。
如果你想不管在任何时候都要显示出此子结点的根结点,那就用ONCLICK事件了
procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
begin
   if node.parent<>nil then
   begin
     showmessage(node.Parent.Text);
   end;
end;
up
var
  MYnode :Ttreenode;
  str,str1 :string;
begin
  if  treeview.Selected <>nil then
    begin
       str:=treeView.Selected.Text;
       MYnode:=treeview.Selected.Parent;
       if assigned(MYnode) then
       str1:=Mynode.Text;
       showmessage(str+str1);
    end;
onchange()事件里,上面已经有人说了

哈哈哈哈...史上最强的问题! 急! VBscript的一个小问题?动态取得表单中的Num53.value,Num54.value,Num55.value ◇◆◇老调重弹,仍然是MSDN的问题◇◆◇ 我真的好傻呀,我刚刚知道我做了一件很蠢的事情!简直是天大的笑话。为什么要对我这样呢?——我无语问苍天! 再次提问。别老是不理我了 怎样证明 n×n+41n+41 n是整数时的结果都为质数???救命啊。 开机时遇到的问题 请教***scoutking(失眠夜)一个问题。 请问,什么叫系统集成? 如何在DELPHI中创建和打开文件,如何在窗体建立时读取文件中的值(希望用TFILESTREAM的CREATE和WRITE以及READ等函数 还是有关FTP查找的问题二 有什么办法可以改变盘付,比如把d盘改成h. 请问如何将数据库添加到已经连接到oms的企业管理器中? 关于查询的问题(简单) OA 怎么把 PSR 类型的文件转换为其它类型的文件? 在一个页面中分页显示并有查询功能,通过查询显示出来的数据再点击页码时有回到默认显示的数据的对应页去了…… 查询数据 windows xp一系列的问题??? 失去的,不在回来了吗? 对socks5代理熟的人请进。。。。。。。。。。。 小仙妹是何方妖孽呀? 在线等待:JBuilder 7.0的注册码求助 怎样证明 n×n+41n+41 n是整数时的结果都为质数???救命啊。 那位能讲讲,CMM等级的划分原则?各级有什么标准 连接数据库报错 关于倒转表的查询,如何写这样的sql语句?请高手帮忙! 如何给DataGrid控件生成的表格的行上加上响应鼠标移动的代码? 救急!关于一个Modem的问题!!!