CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

请教:想获取继承(或重载)自定义VCL控件中一个TreeView指针的OnChange

楼主Tivn(尘世雪)2003-10-03 23:12:50 在 Delphi / VCL组件开发及应用 提问

本人写了一个VCL,其中有:  
  type  
      XXXX   =   class  
      private  
          FTreeView   :   TTreeView   ;   //(只是指向外部TreeView实例)  
      //......  
      public  
          OnChange   :   FxxxEvent   ....;  
      published  
          TreeView   :   TTreeView   Read   FTreeView   Write   FTreeView   ;  
      //......  
      end;  
   
  我想在FTreeView在change的时候,先在内部执行一些代码,然后再激发外部TreeView的OnChange事件(因为可能里面有代码)应该如何做?  
  谢谢高手指点。  
  问题点数:0、回复次数:6Top

1 楼huojiehai(海天子)回复于 2003-10-03 23:19:49 得分 0

你组件应该从TTreeView中继承过来,否则不好做Top

2 楼Tivn(尘世雪)回复于 2003-10-05 17:21:45 得分 0

这个问题我已经解决:(方法如下)  
  type      
        XXXX     =     class      
        private      
                FTreeView     :     TTreeView     ;     //(只是指向外部TreeView实例)    
                FOnChange:   TTVChangedEvent;  
                tmpOnChange:   TTVChangedEvent;  
                procedure   SetTreeView(const   Value:   TTreeView);  
                procedure   DoOnChange(Sender   :   TObject   ;   Node   :   TTreeNode);    
   
        //......      
   
        published      
                property   TreeView   :   TTreeView   read   FTreeView   write   SetTreeView;  
                property   OnChange:   TTVChangedEvent   read   FOnChange   write   FOnChange;  
        //......      
        end;      
   
  procedure   XXXX.SetTreeView(const   Value:   TTreeView);  
  begin  
      if   Value   =   nil   then  
          FTreeView.OnChange:=tmpOnChange;  
   
      FTreeView   :=   Value;  
   
      if   assigned(FTreeView)   then  
      begin  
          tmpOnChange:=FTreeView.OnChange;  
          FTreeView.OnChange:=DoOnChange;  
      end;  
   
  end;  
   
  procedure   XXXX.DoOnChange(Sender:   TObject;   Node:   TTreeNode);  
  begin  
      if   Assigned(FOnChange)   then   FOnChange(Sender,Node);  
      if   Assigned(tmpOnChange)   then   tmpOnChange(Sender,Node);  
  end;  
   
  Top

3 楼FrameSniper(http://naoku.net/blogs/framesniper/)回复于 2003-10-05 22:31:08 得分 0

偶是来学习的,呵呵!Top

4 楼huojiehai(海天子)回复于 2003-10-05 22:34:27 得分 0

这样写后,和再在树中的onchange事件中写代码有冲突吗?Top

5 楼fenglaile(风清飘)回复于 2003-10-07 09:01:38 得分 0

学习的好机会,努力学习Top

6 楼Tivn(尘世雪)回复于 2003-10-07 16:48:26 得分 0

procedure   XXXX.DoOnChange(Sender:   TObject;   Node:   TTreeNode);  
  begin  
      if   Assigned(FOnChange)   then   FOnChange(Sender,Node);  
      if   Assigned(tmpOnChange)   then   tmpOnChange(Sender,Node);  
  end;  
   
  这句代码首先执行的是你在自定义VCL控件中的代码,所以只要你在这个环节里不删除当前TreeNode或改变树型结构,应该是不会有冲突的吧。Top

相关问题

  • 页面重载treeview问题?
  • 请问如何重载VCL组件?
  • 如何重载TreeView的SelectNode 和 Parent,已返回重载并增加属性的TreeNode?(在线)
  • 重载()
  • 重载!
  • 重载问题!
  • 重载,,,模板。。。。。
  • 关于重载。
  • 函数重载
  • SqlParameterCollection 重载

关键词

  • vcl
  • 代码
  • ftreeview
  • fonchange
  • tmponchange
  • ttreeview
  • onchange
  • doonchange
  • settreeview
  • ttvchangedevent

得分解答快速导航

  • 帖主:Tivn

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo