收录日期:2019/01/21 20:17:51 时间: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()事件里,上面已经有人说了

请问这样一个触发器该怎么写?A库的表触发往B库的表中写数据 弱弱的问题,不要见笑。如何调用datagrid 单元格的值 常数中有换行符?为什么啊? 想学习密码学方面的知识,大家给推荐一本书吧,要基础而经典的书。谢谢 怎样删除listView1所选定的行呢? 想学习密码学方面的知识,大家给推荐一本书吧,要基础而经典的书。谢谢 怎样控制Adodc控件不让它显示它自己的消息框 软件注册问题 像这种效果的下拉菜单谁有源码呀... 请教各位大虾 编C++用那个软件啊 高分请教一个简单的问题,在线等~~~~~~~~ 请教 ,如何实现站内短信互发! 关于网页错误 是所有的dll文件都可以动态加载吗? session能够储存什么类型的值 一个正则表达式的问题 split问题 请问\"$prop------$\"是什么,怎么起作用的? 我想问问有多少人在使用Delphi面对对象编程--给分100 关于 如何打开网页自动加载文件的 如何获取ListView多行的值? Session 值为何不见了呢? 關於(char*)(_bstr_t)的類型的比較,如何才是正確的 求一最佳算法 高难度的导航栏问题 如何打开网页自动加载文件的 ISO格式的转换 [高手求救]怎么样处理重叠的控件,让指定的控件在最上面? 请教下:用API函数做socker时,recv这个函数,在已经读完数据时,一直等在那里,怎么办 菜鸟请教怎样做一个基于J2EE的的进销存系统的大至流程(用JBUILDER2006, ROSE,SQL2000)